t / t0011-hashmap.shon commit Merge branch 'jc/log-mailmap-flip-defaults' (9b274e2)
   1#!/bin/sh
   2
   3test_description='test hashmap and string hash functions'
   4. ./test-lib.sh
   5
   6test_hashmap() {
   7        echo "$1" | test-tool hashmap $3 > actual &&
   8        echo "$2" > expect &&
   9        test_cmp expect actual
  10}
  11
  12test_expect_success 'put' '
  13
  14test_hashmap "put key1 value1
  15put key2 value2
  16put fooBarFrotz value3
  17put foobarfrotz value4
  18size" "NULL
  19NULL
  20NULL
  21NULL
  2264 4"
  23
  24'
  25
  26test_expect_success 'put (case insensitive)' '
  27
  28test_hashmap "put key1 value1
  29put key2 value2
  30put fooBarFrotz value3
  31size" "NULL
  32NULL
  33NULL
  3464 3" ignorecase
  35
  36'
  37
  38test_expect_success 'replace' '
  39
  40test_hashmap "put key1 value1
  41put key1 value2
  42put fooBarFrotz value3
  43put fooBarFrotz value4
  44size" "NULL
  45value1
  46NULL
  47value3
  4864 2"
  49
  50'
  51
  52test_expect_success 'replace (case insensitive)' '
  53
  54test_hashmap "put key1 value1
  55put Key1 value2
  56put fooBarFrotz value3
  57put foobarfrotz value4
  58size" "NULL
  59value1
  60NULL
  61value3
  6264 2" ignorecase
  63
  64'
  65
  66test_expect_success 'get' '
  67
  68test_hashmap "put key1 value1
  69put key2 value2
  70put fooBarFrotz value3
  71put foobarfrotz value4
  72get key1
  73get key2
  74get fooBarFrotz
  75get notInMap" "NULL
  76NULL
  77NULL
  78NULL
  79value1
  80value2
  81value3
  82NULL"
  83
  84'
  85
  86test_expect_success 'get (case insensitive)' '
  87
  88test_hashmap "put key1 value1
  89put key2 value2
  90put fooBarFrotz value3
  91get Key1
  92get keY2
  93get foobarfrotz
  94get notInMap" "NULL
  95NULL
  96NULL
  97value1
  98value2
  99value3
 100NULL" ignorecase
 101
 102'
 103
 104test_expect_success 'add' '
 105
 106test_hashmap "add key1 value1
 107add key1 value2
 108add fooBarFrotz value3
 109add fooBarFrotz value4
 110get key1
 111get fooBarFrotz
 112get notInMap" "value2
 113value1
 114value4
 115value3
 116NULL"
 117
 118'
 119
 120test_expect_success 'add (case insensitive)' '
 121
 122test_hashmap "add key1 value1
 123add Key1 value2
 124add fooBarFrotz value3
 125add foobarfrotz value4
 126get key1
 127get Foobarfrotz
 128get notInMap" "value2
 129value1
 130value4
 131value3
 132NULL" ignorecase
 133
 134'
 135
 136test_expect_success 'remove' '
 137
 138test_hashmap "put key1 value1
 139put key2 value2
 140put fooBarFrotz value3
 141remove key1
 142remove key2
 143remove notInMap
 144size" "NULL
 145NULL
 146NULL
 147value1
 148value2
 149NULL
 15064 1"
 151
 152'
 153
 154test_expect_success 'remove (case insensitive)' '
 155
 156test_hashmap "put key1 value1
 157put key2 value2
 158put fooBarFrotz value3
 159remove Key1
 160remove keY2
 161remove notInMap
 162size" "NULL
 163NULL
 164NULL
 165value1
 166value2
 167NULL
 16864 1" ignorecase
 169
 170'
 171
 172test_expect_success 'iterate' '
 173        test-tool hashmap >actual.raw <<-\EOF &&
 174        put key1 value1
 175        put key2 value2
 176        put fooBarFrotz value3
 177        iterate
 178        EOF
 179
 180        cat >expect <<-\EOF &&
 181        NULL
 182        NULL
 183        NULL
 184        fooBarFrotz value3
 185        key1 value1
 186        key2 value2
 187        EOF
 188
 189        sort <actual.raw >actual &&
 190        test_cmp expect actual
 191'
 192
 193test_expect_success 'iterate (case insensitive)' '
 194        test-tool hashmap ignorecase >actual.raw <<-\EOF &&
 195        put key1 value1
 196        put key2 value2
 197        put fooBarFrotz value3
 198        iterate
 199        EOF
 200
 201        cat >expect <<-\EOF &&
 202        NULL
 203        NULL
 204        NULL
 205        fooBarFrotz value3
 206        key1 value1
 207        key2 value2
 208        EOF
 209
 210        sort <actual.raw >actual &&
 211        test_cmp expect actual
 212'
 213
 214test_expect_success 'grow / shrink' '
 215
 216        rm -f in &&
 217        rm -f expect &&
 218        for n in $(test_seq 51)
 219        do
 220                echo put key$n value$n >> in &&
 221                echo NULL >> expect
 222        done &&
 223        echo size >> in &&
 224        echo 64 51 >> expect &&
 225        echo put key52 value52 >> in &&
 226        echo NULL >> expect &&
 227        echo size >> in &&
 228        echo 256 52 >> expect &&
 229        for n in $(test_seq 12)
 230        do
 231                echo remove key$n >> in &&
 232                echo value$n >> expect
 233        done &&
 234        echo size >> in &&
 235        echo 256 40 >> expect &&
 236        echo remove key40 >> in &&
 237        echo value40 >> expect &&
 238        echo size >> in &&
 239        echo 64 39 >> expect &&
 240        cat in | test-tool hashmap > out &&
 241        test_cmp expect out
 242
 243'
 244
 245test_expect_success 'string interning' '
 246
 247test_hashmap "intern value1
 248intern Value1
 249intern value2
 250intern value2
 251" "value1
 252Value1
 253value2
 254value2"
 255
 256'
 257
 258test_done