USING: kernel tools.test trees trees.avl math random sequences assocs accessors trees.avl.private trees.private ; IN: trees.avl.tests [ "key1" 0 "key2" 0 ] [ T{ avl-node f "key1" f f T{ avl-node f "key2" f f 1 } 2 } [ single-rotate ] go-left [ left>> dup key>> swap balance>> ] keep dup key>> swap balance>> ] unit-test [ "key1" 0 "key2" 0 ] [ T{ avl-node f "key1" f f T{ avl-node f "key2" f f f 1 } 2 } [ select-rotate ] go-left [ left>> dup key>> swap balance>> ] keep dup key>> swap balance>> ] unit-test [ "key1" 0 "key2" 0 ] [ T{ avl-node f "key1" f T{ avl-node f "key2" f f f -1 } f -2 } [ single-rotate ] go-right [ right>> dup key>> swap balance>> ] keep dup key>> swap balance>> ] unit-test [ "key1" 0 "key2" 0 ] [ T{ avl-node f "key1" f T{ avl-node f "key2" f f f -1 } f -2 } [ select-rotate ] go-right [ right>> dup key>> swap balance>> ] keep dup key>> swap balance>> ] unit-test [ "key1" -1 "key2" 0 "key3" 0 ] [ T{ avl-node f "key1" f f T{ avl-node f "key2" f T{ avl-node f "key3" f f f 1 } f -1 } 2 } [ double-rotate ] go-left [ left>> dup key>> swap balance>> ] keep [ right>> dup key>> swap balance>> ] keep dup key>> swap balance>> ] unit-test [ "key1" 0 "key2" 0 "key3" 0 ] [ T{ avl-node f "key1" f f T{ avl-node f "key2" f T{ avl-node f "key3" f f f 0 } f -1 } 2 } [ double-rotate ] go-left [ left>> dup key>> swap balance>> ] keep [ right>> dup key>> swap balance>> ] keep dup key>> swap balance>> ] unit-test [ "key1" 0 "key2" 1 "key3" 0 ] [ T{ avl-node f "key1" f f T{ avl-node f "key2" f T{ avl-node f "key3" f f f -1 } f -1 } 2 } [ double-rotate ] go-left [ left>> dup key>> swap balance>> ] keep [ right>> dup key>> swap balance>> ] keep dup key>> swap balance>> ] unit-test [ "key1" 1 "key2" 0 "key3" 0 ] [ T{ avl-node f "key1" f T{ avl-node f "key2" f f T{ avl-node f "key3" f f f -1 } 1 } f -2 } [ double-rotate ] go-right [ right>> dup key>> swap balance>> ] keep [ left>> dup key>> swap balance>> ] keep dup key>> swap balance>> ] unit-test [ "key1" 0 "key2" 0 "key3" 0 ] [ T{ avl-node f "key1" f T{ avl-node f "key2" f f T{ avl-node f "key3" f f f 0 } 1 } f -2 } [ double-rotate ] go-right [ right>> dup key>> swap balance>> ] keep [ left>> dup key>> swap balance>> ] keep dup key>> swap balance>> ] unit-test [ "key1" 0 "key2" -1 "key3" 0 ] [ T{ avl-node f "key1" f T{ avl-node f "key2" f f T{ avl-node f "key3" f f f 1 } 1 } f -2 } [ double-rotate ] go-right [ right>> dup key>> swap balance>> ] keep [ left>> dup key>> swap balance>> ] keep dup key>> swap balance>> ] unit-test [ "eight" ] [ "seven" 7 pick set-at "eight" 8 pick set-at "nine" 9 pick set-at root>> value>> ] unit-test [ "another eight" ] [ ! ERROR! "seven" 7 pick set-at "another eight" 8 pick set-at 8 of ] unit-test : test-tree ( -- tree ) AVL{ { 7 "seven" } { 9 "nine" } { 4 "four" } { 4 "replaced four" } { 7 "replaced seven" } } clone ; ! test set-at, at, at* [ t ] [ test-tree avl? ] unit-test [ "seven" ] [ "seven" 7 pick set-at 7 of ] unit-test [ "seven" t ] [ "seven" 7 pick set-at 7 ?of ] unit-test [ 8 f ] [ "seven" 7 pick set-at 8 ?of ] unit-test [ "seven" ] [ "seven" 7 pick set-at 7 of ] unit-test [ "replacement" ] [ "seven" 7 pick set-at "replacement" 7 pick set-at 7 of ] unit-test [ "nine" ] [ test-tree 9 of ] unit-test [ "replaced four" ] [ test-tree 4 of ] unit-test [ "replaced seven" ] [ test-tree 7 of ] unit-test ! test delete-at--all errors! [ f ] [ test-tree 9 over delete-at 9 of ] unit-test [ "replaced seven" ] [ test-tree 9 over delete-at 7 of ] unit-test [ "nine" ] [ test-tree 7 over delete-at 4 over delete-at 9 of ] unit-test