258 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			258 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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
 |