@@ -9,143 +9,73 @@ def build_tree(entries)
99 described_class . new ( entries )
1010 end
1111
12- describe 'insert' do
13- it 'keeps keys ordered' do
14- tree = build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] , [ 5 , 'c' ] , [ 6 , 'd' ] , [ 12 , 'e' ] ] )
15- expect ( tree . keys ) . to eq ( tree . keys . sort )
16- end
17- end
12+ describe 'common key/value usage' do
13+ let ( :tree ) { build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] , [ 5 , 'c' ] ] ) }
1814
19- describe 'search' do
20- it 'finds an existing key' do
21- tree = build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] , [ 5 , 'c' ] ] )
15+ it 'supports lookup by key' do
2216 expect ( tree . search ( 20 ) ) . to eq ( 'b' )
2317 end
2418
25- it 'returns nil for a missing key' do
26- tree = build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] ] )
27- expect ( tree . search ( 99 ) ) . to be_nil
28- end
29- end
30-
31- describe 'delete' do
32- it 'removes a leaf key' do
33- tree = build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] , [ 5 , 'c' ] ] )
34- expect ( tree . delete ( 5 ) ) . to eq ( 'c' )
35- end
36-
37- it 'removes the key from the tree' do
38- tree = build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] , [ 5 , 'c' ] ] )
39- tree . delete ( 5 )
40- expect ( tree . search ( 5 ) ) . to be_nil
41- end
42-
43- it 'keeps keys ordered after delete' do
44- tree = build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] , [ 5 , 'c' ] , [ 6 , 'd' ] , [ 12 , 'e' ] ] )
45- tree . delete ( 10 )
46- expect ( tree . keys ) . to eq ( tree . keys . sort )
19+ it 'keeps keys in sorted order' do
20+ expect ( tree . keys ) . to eq ( [ 5 , 10 , 20 ] )
4721 end
4822 end
4923
50- describe 'initialize' do
51- it 'accepts array entries' do
52- tree = build_tree ( [ [ 1 , 'a' ] , [ 2 , 'b' ] ] )
53- expect ( tree . to_a ) . to eq ( [ [ 1 , 'a' ] , [ 2 , 'b' ] ] )
54- end
24+ describe 'index-style access' do
25+ let ( :tree ) { build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] ] ) }
5526
56- it 'accepts hash entries' do
57- tree = build_tree ( [ { key : 2 , value : 'b' } , { key : 1 , value : 'a' } ] )
58- expect ( tree . to_a ) . to eq ( [ [ 1 , 'a' ] , [ 2 , 'b' ] ] )
59- end
60- end
61-
62- describe '[]' do
63- it 'returns the value for a key' do
64- tree = build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] ] )
27+ it 'reads values with []' do
6528 expect ( tree [ 20 ] ) . to eq ( 'b' )
6629 end
67- end
6830
69- describe '[]=' do
70- it 'updates the value for a key' do
71- tree = build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] ] )
31+ it 'updates values with []=' do
7232 tree [ 20 ] = 'z'
7333 expect ( tree . search ( 20 ) ) . to eq ( 'z' )
7434 end
7535 end
7636
77- describe 'each' do
78- it 'yields entries in key order' do
79- tree = build_tree ( [ [ 10 , 'a' ] , [ 5 , 'b' ] , [ 20 , 'c' ] ] )
80- expect ( tree . map ( &:key ) ) . to eq ( [ 5 , 10 , 20 ] )
81- end
82- end
83-
84- describe 'preordered_each' do
85- it 'yields all keys' do
86- tree = build_tree ( [ [ 10 , 'a' ] , [ 5 , 'b' ] , [ 20 , 'c' ] , [ 15 , 'd' ] ] )
87- keys = tree . preordered_each . map ( &:key )
88- expect ( keys . sort ) . to eq ( [ 5 , 10 , 15 , 20 ] )
89- end
90- end
37+ describe 'delete' do
38+ let ( :tree ) { build_tree ( [ [ 10 , 'a' ] , [ 20 , 'b' ] , [ 5 , 'c' ] ] ) }
9139
92- describe 'postordered_each' do
93- it 'yields all keys' do
94- tree = build_tree ( [ [ 10 , 'a' ] , [ 5 , 'b' ] , [ 20 , 'c' ] , [ 15 , 'd' ] ] )
95- keys = tree . postordered_each . map ( &:key )
96- expect ( keys . sort ) . to eq ( [ 5 , 10 , 15 , 20 ] )
40+ it 'returns the deleted value' do
41+ expect ( tree . delete ( 5 ) ) . to eq ( 'c' )
9742 end
98- end
9943
100- describe 'breadth_each' do
101- it 'yields all keys' do
102- tree = build_tree ( [ [ 10 , 'a' ] , [ 5 , 'b' ] , [ 20 , 'c' ] , [ 15 , 'd' ] ] )
103- keys = tree . breadth_each . map ( &:key )
104- expect ( keys . sort ) . to eq ( [ 5 , 10 , 15 , 20 ] )
44+ it 'removes the key from lookup results' do
45+ tree . delete ( 5 )
46+ expect ( tree . search ( 5 ) ) . to be_nil
10547 end
106- end
10748
108- describe 'keys' do
109- it 'returns keys in order' do
110- tree = build_tree ( [ [ 10 , 'a' ] , [ 5 , 'b' ] , [ 20 , 'c' ] ] )
111- expect ( tree . keys ) . to eq ( [ 5 , 10 , 20 ] )
49+ it 'keeps ordered keys after deletion' do
50+ tree . delete ( 5 )
51+ expect ( tree . keys ) . to eq ( [ 10 , 20 ] )
11252 end
11353 end
11454
115- describe 'values' do
116- it 'returns values in key order' do
117- tree = build_tree ( [ [ 10 , 'a' ] , [ 5 , 'b' ] , [ 20 , 'c' ] ] )
118- expect ( tree . values ) . to eq ( %w[ b a c ] )
119- end
120- end
55+ describe 'enumeration and serialization usage' do
56+ let ( :tree ) { build_tree ( [ [ 10 , 'a' ] , [ 5 , 'b' ] , [ 20 , 'c' ] ] ) }
12157
122- describe 'to_a' do
123- it 'returns key/value pairs in order' do
124- tree = build_tree ( [ [ 10 , 'a' ] , [ 5 , 'b' ] , [ 20 , 'c' ] ] )
125- expect ( tree . to_a ) . to eq ( [ [ 5 , 'b' ] , [ 10 , 'a' ] , [ 20 , 'c' ] ] )
58+ it 'enumerates entries in key order' do
59+ pairs = tree . map { |entry | [ entry . key , entry . value ] }
60+ expect ( pairs ) . to eq ( [ [ 5 , 'b' ] , [ 10 , 'a' ] , [ 20 , 'c' ] ] )
12661 end
127- end
12862
129- describe 'to_h and from_hash' do
130- it 'round trips the tree' do
131- tree = build_tree ( [ [ 10 , 'a' ] , [ 5 , 'b' ] , [ 20 , 'c' ] ] )
63+ it 'round-trips via hash conversion' do
13264 rebuilt = described_class . from_hash ( tree . to_h )
13365 expect ( rebuilt . to_a ) . to eq ( tree . to_a )
13466 end
13567 end
13668
137- describe 'as_json' do
138- it 'returns a hash representation' do
139- tree = build_tree ( [ [ 10 , 'a' ] ] )
140- expect ( tree . as_json ) . to be_a ( Hash )
69+ describe 'shovel insertion' do
70+ let ( :tree ) { build_tree ( [ ] ) }
71+
72+ it 'returns the inserted entry' do
73+ expect ( ( tree << [ 10 , 'a' ] ) . key ) . to eq ( 10 )
14174 end
142- end
14375
144- describe '<=>' do
145- it 'compares by ordered entries' do
146- left = build_tree ( [ [ 10 , 'a' ] , [ 5 , 'b' ] ] )
147- right = build_tree ( [ [ 10 , 'a' ] , [ 5 , 'c' ] ] )
148- expect ( left <=> right ) . to eq ( -1 )
76+ it 'stores the inserted value' do
77+ tree << [ 10 , 'a' ]
78+ expect ( tree . search ( 10 ) ) . to eq ( 'a' )
14979 end
15080 end
15181
@@ -155,20 +85,4 @@ def build_tree(entries)
15585 expect { tree . insert ( nil , 'a' ) } . to raise_error ( ArgumentError )
15686 end
15787 end
158-
159- describe '<<' do
160- it 'returns the inserted entry' do
161- tree = build_tree ( [ ] )
162- inserted = tree << [ 10 , 'a' ]
163-
164- expect ( inserted . key ) . to eq ( 10 )
165- end
166-
167- it 'stores the inserted key/value pair' do
168- tree = build_tree ( [ ] )
169- tree << [ 10 , 'a' ]
170-
171- expect ( tree . search ( 10 ) ) . to eq ( 'a' )
172- end
173- end
17488end
0 commit comments