| 1588 | } |
| 1589 | |
| 1590 | func TestInternalSortedMapLeafNode(t *testing.T) { |
| 1591 | RunRandom(t, "NoSplit", func(t *testing.T, rand *rand.Rand) { |
| 1592 | var cmpr defaultComparer[int] |
| 1593 | var node sortedMapNode[int, int] = &sortedMapLeafNode[int, int]{} |
| 1594 | var keys []int |
| 1595 | for _, i := range rand.Perm(32) { |
| 1596 | var resized bool |
| 1597 | var splitNode sortedMapNode[int, int] |
| 1598 | node, splitNode = node.set(i, i*10, &cmpr, false, &resized) |
| 1599 | if !resized { |
| 1600 | t.Fatal("expected resize") |
| 1601 | } else if splitNode != nil { |
| 1602 | t.Fatal("expected split") |
| 1603 | } |
| 1604 | keys = append(keys, i) |
| 1605 | |
| 1606 | // Verify not found at each size. |
| 1607 | if _, ok := node.get(rand.Int()+32, &cmpr); ok { |
| 1608 | t.Fatal("expected no value") |
| 1609 | } |
| 1610 | |
| 1611 | // Verify min key is always the lowest. |
| 1612 | sort.Ints(keys) |
| 1613 | if got, exp := node.minKey(), keys[0]; got != exp { |
| 1614 | t.Fatalf("minKey()=%d, expected %d", got, exp) |
| 1615 | } |
| 1616 | } |
| 1617 | |
| 1618 | // Verify all key/value pairs in node. |
| 1619 | for i := range keys { |
| 1620 | if v, ok := node.get(i, &cmpr); !ok || v != i*10 { |
| 1621 | t.Fatalf("get(%d)=<%v,%v>", i, v, ok) |
| 1622 | } |
| 1623 | } |
| 1624 | }) |
| 1625 | |
| 1626 | RunRandom(t, "Overwrite", func(t *testing.T, rand *rand.Rand) { |
| 1627 | var cmpr defaultComparer[int] |
| 1628 | var node sortedMapNode[int, int] = &sortedMapLeafNode[int, int]{} |
| 1629 | |
| 1630 | for _, i := range rand.Perm(32) { |
| 1631 | var resized bool |
| 1632 | node, _ = node.set(i, i*2, &cmpr, false, &resized) |
| 1633 | } |
| 1634 | for _, i := range rand.Perm(32) { |
| 1635 | var resized bool |
| 1636 | node, _ = node.set(i, i*3, &cmpr, false, &resized) |
| 1637 | if resized { |
| 1638 | t.Fatal("expected no resize") |
| 1639 | } |
| 1640 | } |
| 1641 | |
| 1642 | // Verify all overwritten key/value pairs in node. |
| 1643 | for i := 0; i < 32; i++ { |
| 1644 | if v, ok := node.get(i, &cmpr); !ok || v != i*3 { |
| 1645 | t.Fatalf("get(%d)=<%v,%v>", i, v, ok) |
| 1646 | } |
| 1647 | } |