diff options
| author | Paul Buetow <git@mx.buetow.org> | 2020-11-15 13:04:55 +0000 |
|---|---|---|
| committer | Paul Buetow <git@mx.buetow.org> | 2020-11-15 13:04:55 +0000 |
| commit | c8915f36887f82ee9b092393289895338df3d7c0 (patch) | |
| tree | 1a3340c377fa86f0414a6b35cf92dac351bb75bc /set/set_test.go | |
| parent | e912e477538658b535a4ab0adfa7f86b6a33a290 (diff) | |
fixed bst implementation and refactored unit tests
Diffstat (limited to 'set/set_test.go')
| -rw-r--r-- | set/set_test.go | 87 |
1 files changed, 58 insertions, 29 deletions
diff --git a/set/set_test.go b/set/set_test.go index 9c5f102..098947d 100644 --- a/set/set_test.go +++ b/set/set_test.go @@ -10,15 +10,14 @@ import ( const factor int = 10 const minLength int = 1 -const maxLength int = 10 +const maxLength int = 10000 // Store results here to avoid compiler optimizations var benchResult int func TestElementary(t *testing.T) { - s := NewElementary() for i := minLength; i <= maxLength; i *= factor { - test(s, i, t) + test(NewElementary(), i, t) } } @@ -28,41 +27,71 @@ func TestBST(t *testing.T) { } } -func TestBalancedBST(t *testing.T) { - for i := minLength; i <= maxLength; i *= factor { - test(NewBalancedBST(), i, t) - } -} - func test(s Set, l int, t *testing.T) { - cb := func(t *testing.T) { - vals := ds.NewRandomArrayList(l, -1) - keys := ds.NewRandomArrayList(l, -1) - mapping := make(map[int]int, l) - - for i, key := range keys { - val := vals[i] - mapping[key] = val - - t.Log("Inserting", key, val) - s.Set(key, val) + keys := ds.NewRandomArrayList(l, l) + randoms := ds.NewRandomArrayList(l, -1) + mapping := make(map[int]int, l) + + get := func(key int, del bool) int { + var val int + var err error + switch { + case del: + defer delete(mapping, key) + val, err = s.Del(key) + //t.Log("Del", key, val, err) + default: + val, err = s.Get(key) + //t.Log("Get", key, val, err) } - for _, key := range sort.Shuffle(keys) { - val, err := s.Get(key) + if mVal, ok := mapping[key]; ok { if err != nil { - t.Errorf("Element %v->%v: %v\n", key, val, err) + t.Error("Could not get element", key, val, mVal, err) } - - val2 := mapping[key] - if val2 != val { - t.Errorf("Element is %v->%v but expected %v\n", key, val, val2) + if mVal != val { + t.Error("Got wrong value for element", key, val, mVal) } - t.Log("Got", key, val, s) + return val + } + + if err == nil { + t.Error("Got element but expected not to", key, val) } + return val + } + testGet := func(key int) int { return get(key, false) } + testDel := func(key int) int { return get(key, true) } + + testSet := func(key, val int) { + s.Set(key, val) + mapping[key] = val + //t.Log("Set", key, val) + testGet(key) } - t.Run(fmt.Sprintf("%d", l), cb) + t.Log("Set random key-values", l) + var prevKey int + for _, key := range sort.Shuffle(keys) { + testSet(key, randoms[key]) + testGet(prevKey) + prevKey = key + } + t.Log("Del random key-values", l) + for _, key := range sort.Shuffle(keys) { + testDel(key) + testGet(prevKey) + prevKey = key + } + if !s.Empty() { + t.Error("Expected set to be empty", l) + } +} + +func TestBalancedBST(t *testing.T) { + for i := minLength; i <= maxLength; i *= factor { + test(NewBalancedBST(), i, t) + } } func BenchmarkElementary(t *testing.B) { |
