You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.1 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. package bptree
  2. import (
  3. "fmt"
  4. "testing"
  5. )
  6. type nodeStorePrintlnImpl struct {
  7. }
  8. func (n *nodeStorePrintlnImpl) PersistFunc(node *BpNode) error {
  9. println("saving node", node.protoNodeId)
  10. return nil
  11. }
  12. func (n *nodeStorePrintlnImpl) DestroyFunc(node *BpNode) error {
  13. println("delete node", node.protoNodeId)
  14. return nil
  15. }
  16. func TestAddRemove(t *testing.T) {
  17. tree := NewBpTree(3, &nodeStorePrintlnImpl{})
  18. for i:=0;i<9;i++{
  19. println("++++++++++", i)
  20. tree.Add(String(fmt.Sprintf("%02d", i)), nil)
  21. printTree(tree.root, "")
  22. }
  23. if !tree.Has(String("08")) {
  24. t.Errorf("lookup error")
  25. }
  26. for i:=5;i<9;i++{
  27. println("----------", i)
  28. tree.RemoveWhere(String(fmt.Sprintf("%02d", i)), func(value ItemValue) bool {
  29. return true
  30. })
  31. printTree(tree.root, "")
  32. }
  33. if tree.Has(String("08")) {
  34. t.Errorf("remove error")
  35. }
  36. }
  37. func printTree(node *BpNode, prefix string) {
  38. fmt.Printf("%sNode %d\n", prefix, node.protoNodeId)
  39. prefix += " "
  40. for i:=0;i<len(node.keys);i++{
  41. fmt.Printf("%skey %v\n", prefix, node.keys[i])
  42. if i < len(node.pointers) && node.pointers[i] != nil {
  43. printTree(node.pointers[i], prefix+" ")
  44. }
  45. }
  46. }