|
|
|
|
@ -826,6 +826,35 @@ func TestDeleteShuffled(t *testing.T) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestDeleteIsReverseOfInsert(t *testing.T) { |
|
|
|
|
// Insert N prefixes, then delete those same prefixes in reverse
|
|
|
|
|
// order. Each deletion should exactly undo the internal structure
|
|
|
|
|
// changes that each insert did.
|
|
|
|
|
const N = 100 |
|
|
|
|
|
|
|
|
|
var tab Table[int] |
|
|
|
|
prefixes := randomPrefixes(N) |
|
|
|
|
|
|
|
|
|
defer func() { |
|
|
|
|
if t.Failed() { |
|
|
|
|
fmt.Printf("the prefixes that fail the test: %v\n", prefixes) |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
want := make([]string, 0, len(prefixes)) |
|
|
|
|
for _, p := range prefixes { |
|
|
|
|
want = append(want, tab.debugSummary()) |
|
|
|
|
tab.Insert(p.pfx, p.val) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for i := len(prefixes) - 1; i >= 0; i-- { |
|
|
|
|
tab.Delete(prefixes[i].pfx) |
|
|
|
|
if got := tab.debugSummary(); got != want[i] { |
|
|
|
|
t.Fatalf("after delete %d, mismatch:\n\n got: %s\n\nwant: %s", i, got, want[i]) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type tableTest struct { |
|
|
|
|
// addr is an IP address string to look up in a route table.
|
|
|
|
|
addr string |
|
|
|
|
|