Write tests
parent
c26dfad78d
commit
b365f05b5d
|
@ -1,13 +1,40 @@
|
||||||
USING: assocs kernel tools.test trees trees.cb trees.cb.private trees.private ;
|
USING: assocs kernel tools.test trees trees.cb trees.cb.private trees.private ;
|
||||||
IN: trees.cb.tests
|
IN: trees.cb.tests
|
||||||
|
|
||||||
CONSTANT: 4tree CB{ { 0 0 } { 1 1 } { 2 2 } { 3 3 } }
|
: 4tree ( -- tree )
|
||||||
|
CB{ { 0 0 } { 1 1 } { 2 2 } { 3 3 } } clone ;
|
||||||
|
|
||||||
! Insertion into an empty tree
|
! Insertion into an empty tree
|
||||||
{ CB{ { 0 0 } } } [
|
{ CB{ { 0 0 } } } [
|
||||||
0 0 <cb> [ set-at ] keep
|
0 0 <cb> [ set-at ] keep
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
! Double inserts
|
||||||
|
! single leaf
|
||||||
|
{
|
||||||
|
CB{ { 0 0 } }
|
||||||
|
} [
|
||||||
|
0 0 <cb> [ set-at ] keep
|
||||||
|
0 0 rot [ set-at ] keep
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
! left leaf
|
||||||
|
{
|
||||||
|
CB{ { 0 0 } { 1 1 } }
|
||||||
|
} [
|
||||||
|
CB{ { 0 0 } { 1 1 } }
|
||||||
|
0 0 rot [ set-at ] keep
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
! right leaf
|
||||||
|
{
|
||||||
|
CB{ { 0 0 } { 1 1 } }
|
||||||
|
} [
|
||||||
|
CB{ { 0 0 } { 1 1 } }
|
||||||
|
1 1 rot [ set-at ] keep
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
! Splits
|
||||||
! Insertion into a leaf-node resulting in splitting
|
! Insertion into a leaf-node resulting in splitting
|
||||||
{
|
{
|
||||||
CB{ { 0 0 } { 1 1 } }
|
CB{ { 0 0 } { 1 1 } }
|
||||||
|
@ -15,3 +42,25 @@ CONSTANT: 4tree CB{ { 0 0 } { 1 1 } { 2 2 } { 3 3 } }
|
||||||
0 0 <cb> [ set-at ] keep
|
0 0 <cb> [ set-at ] keep
|
||||||
1 1 rot [ set-at ] keep
|
1 1 rot [ set-at ] keep
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
! Splitting at the root
|
||||||
|
{
|
||||||
|
CB{ { 0 0 } { 1 1 } { 2 2 } { 3 3 } { 4 4 } }
|
||||||
|
} [
|
||||||
|
CB{ { 0 0 } { 1 1 } { 2 2 } { 3 3 } }
|
||||||
|
4 4 rot [ set-at ] keep
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
! Collision
|
||||||
|
{
|
||||||
|
CB{ { B{ 110 } B{ 110 } } }
|
||||||
|
} [
|
||||||
|
CB{ { f f } }
|
||||||
|
B{ 110 } dup rot [ set-at ] keep
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
! Colliding trees are still not equal
|
||||||
|
{ f } [
|
||||||
|
CB{ { f f } }
|
||||||
|
CB{ { B{ 110 } B{ 110 } } } =
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -34,8 +34,8 @@ TUPLE: cb-node { byte# integer } { bits fixnum } left right ;
|
||||||
swap >>bits
|
swap >>bits
|
||||||
swap >>byte# ; inline
|
swap >>byte# ; inline
|
||||||
|
|
||||||
: <cb-node> ( byte# bits -- node )
|
: <cb-node> ( bits byte# -- node )
|
||||||
cb-node new-node ;
|
swap cb-node new-node ;
|
||||||
|
|
||||||
: key-side ( bits byte -- side )
|
: key-side ( bits byte -- side )
|
||||||
bitor 1 + -8 shift 0 = left right ? ;
|
bitor 1 + -8 shift 0 = left right ? ;
|
||||||
|
@ -67,12 +67,8 @@ TUPLE: cb-node { byte# integer } { bits fixnum } left right ;
|
||||||
[
|
[
|
||||||
[ -rot 2nth-unsafe byte-diff ] keep
|
[ -rot 2nth-unsafe byte-diff ] keep
|
||||||
] [
|
] [
|
||||||
! [ [ length ] bi@ = ] 2keep rot
|
|
||||||
! [ 2drop 0 0 f ]
|
|
||||||
! [
|
|
||||||
[ min-length dup ] 2keep
|
[ min-length dup ] 2keep
|
||||||
2nth0 byte-diff rot
|
2nth0 byte-diff rot
|
||||||
! ] if
|
|
||||||
] if* ;
|
] if* ;
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
@ -159,8 +155,8 @@ M: node cb-update
|
||||||
current-key get >>key
|
current-key get >>key
|
||||||
swap >>value f
|
swap >>value f
|
||||||
] [
|
] [
|
||||||
key>> key>bytes key-bytes get swap
|
[ key-bytes get ] dip key>> key>bytes
|
||||||
bytes-diff swap <cb-node>
|
bytes-diff <cb-node>
|
||||||
attach-node t
|
attach-node t
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue