Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
This commit is contained in:
commit
1b593e1ea4
3629 changed files with 1139935 additions and 0 deletions
258
t/t0011-hashmap.sh
Executable file
258
t/t0011-hashmap.sh
Executable file
|
|
@ -0,0 +1,258 @@
|
|||
#!/bin/sh
|
||||
|
||||
test_description='test hashmap and string hash functions'
|
||||
. ./test-lib.sh
|
||||
|
||||
test_hashmap() {
|
||||
echo "$1" | test-tool hashmap $3 > actual &&
|
||||
echo "$2" > expect &&
|
||||
test_cmp expect actual
|
||||
}
|
||||
|
||||
test_expect_success 'put' '
|
||||
|
||||
test_hashmap "put key1 value1
|
||||
put key2 value2
|
||||
put fooBarFrotz value3
|
||||
put foobarfrotz value4
|
||||
size" "NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
64 4"
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'put (case insensitive)' '
|
||||
|
||||
test_hashmap "put key1 value1
|
||||
put key2 value2
|
||||
put fooBarFrotz value3
|
||||
size" "NULL
|
||||
NULL
|
||||
NULL
|
||||
64 3" ignorecase
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'replace' '
|
||||
|
||||
test_hashmap "put key1 value1
|
||||
put key1 value2
|
||||
put fooBarFrotz value3
|
||||
put fooBarFrotz value4
|
||||
size" "NULL
|
||||
value1
|
||||
NULL
|
||||
value3
|
||||
64 2"
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'replace (case insensitive)' '
|
||||
|
||||
test_hashmap "put key1 value1
|
||||
put Key1 value2
|
||||
put fooBarFrotz value3
|
||||
put foobarfrotz value4
|
||||
size" "NULL
|
||||
value1
|
||||
NULL
|
||||
value3
|
||||
64 2" ignorecase
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'get' '
|
||||
|
||||
test_hashmap "put key1 value1
|
||||
put key2 value2
|
||||
put fooBarFrotz value3
|
||||
put foobarfrotz value4
|
||||
get key1
|
||||
get key2
|
||||
get fooBarFrotz
|
||||
get notInMap" "NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
value1
|
||||
value2
|
||||
value3
|
||||
NULL"
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'get (case insensitive)' '
|
||||
|
||||
test_hashmap "put key1 value1
|
||||
put key2 value2
|
||||
put fooBarFrotz value3
|
||||
get Key1
|
||||
get keY2
|
||||
get foobarfrotz
|
||||
get notInMap" "NULL
|
||||
NULL
|
||||
NULL
|
||||
value1
|
||||
value2
|
||||
value3
|
||||
NULL" ignorecase
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'add' '
|
||||
|
||||
test_hashmap "add key1 value1
|
||||
add key1 value2
|
||||
add fooBarFrotz value3
|
||||
add fooBarFrotz value4
|
||||
get key1
|
||||
get fooBarFrotz
|
||||
get notInMap" "value2
|
||||
value1
|
||||
value4
|
||||
value3
|
||||
NULL"
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'add (case insensitive)' '
|
||||
|
||||
test_hashmap "add key1 value1
|
||||
add Key1 value2
|
||||
add fooBarFrotz value3
|
||||
add foobarfrotz value4
|
||||
get key1
|
||||
get Foobarfrotz
|
||||
get notInMap" "value2
|
||||
value1
|
||||
value4
|
||||
value3
|
||||
NULL" ignorecase
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'remove' '
|
||||
|
||||
test_hashmap "put key1 value1
|
||||
put key2 value2
|
||||
put fooBarFrotz value3
|
||||
remove key1
|
||||
remove key2
|
||||
remove notInMap
|
||||
size" "NULL
|
||||
NULL
|
||||
NULL
|
||||
value1
|
||||
value2
|
||||
NULL
|
||||
64 1"
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'remove (case insensitive)' '
|
||||
|
||||
test_hashmap "put key1 value1
|
||||
put key2 value2
|
||||
put fooBarFrotz value3
|
||||
remove Key1
|
||||
remove keY2
|
||||
remove notInMap
|
||||
size" "NULL
|
||||
NULL
|
||||
NULL
|
||||
value1
|
||||
value2
|
||||
NULL
|
||||
64 1" ignorecase
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'iterate' '
|
||||
test-tool hashmap >actual.raw <<-\EOF &&
|
||||
put key1 value1
|
||||
put key2 value2
|
||||
put fooBarFrotz value3
|
||||
iterate
|
||||
EOF
|
||||
|
||||
cat >expect <<-\EOF &&
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
fooBarFrotz value3
|
||||
key1 value1
|
||||
key2 value2
|
||||
EOF
|
||||
|
||||
sort <actual.raw >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'iterate (case insensitive)' '
|
||||
test-tool hashmap ignorecase >actual.raw <<-\EOF &&
|
||||
put key1 value1
|
||||
put key2 value2
|
||||
put fooBarFrotz value3
|
||||
iterate
|
||||
EOF
|
||||
|
||||
cat >expect <<-\EOF &&
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
fooBarFrotz value3
|
||||
key1 value1
|
||||
key2 value2
|
||||
EOF
|
||||
|
||||
sort <actual.raw >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'grow / shrink' '
|
||||
|
||||
rm -f in &&
|
||||
rm -f expect &&
|
||||
for n in $(test_seq 51)
|
||||
do
|
||||
echo put key$n value$n >> in &&
|
||||
echo NULL >> expect
|
||||
done &&
|
||||
echo size >> in &&
|
||||
echo 64 51 >> expect &&
|
||||
echo put key52 value52 >> in &&
|
||||
echo NULL >> expect &&
|
||||
echo size >> in &&
|
||||
echo 256 52 >> expect &&
|
||||
for n in $(test_seq 12)
|
||||
do
|
||||
echo remove key$n >> in &&
|
||||
echo value$n >> expect
|
||||
done &&
|
||||
echo size >> in &&
|
||||
echo 256 40 >> expect &&
|
||||
echo remove key40 >> in &&
|
||||
echo value40 >> expect &&
|
||||
echo size >> in &&
|
||||
echo 64 39 >> expect &&
|
||||
cat in | test-tool hashmap > out &&
|
||||
test_cmp expect out
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'string interning' '
|
||||
|
||||
test_hashmap "intern value1
|
||||
intern Value1
|
||||
intern value2
|
||||
intern value2
|
||||
" "value1
|
||||
Value1
|
||||
value2
|
||||
value2"
|
||||
|
||||
'
|
||||
|
||||
test_done
|
||||
Loading…
Add table
Add a link
Reference in a new issue