hamster 0.1.21 → 0.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. data/History.rdoc +26 -0
  2. data/lib/hamster/hash.rb +0 -1
  3. data/lib/hamster/list.rb +37 -6
  4. data/lib/hamster/set.rb +34 -20
  5. data/lib/hamster/stack.rb +9 -0
  6. data/lib/hamster/trie.rb +1 -0
  7. data/lib/hamster/version.rb +1 -1
  8. data/spec/hamster/hash/each_spec.rb +2 -2
  9. data/spec/hamster/list/chunk_spec.rb +38 -0
  10. data/spec/hamster/list/{sort_by_spec.rb → count_spec.rb} +13 -18
  11. data/spec/hamster/list/find_spec.rb +1 -1
  12. data/spec/hamster/list/include_spec.rb +1 -1
  13. data/spec/hamster/{set/sort_spec.rb → list/init_spec.rb} +9 -8
  14. data/spec/hamster/list/{sort_spec.rb → intersperse_spec.rb} +4 -4
  15. data/spec/hamster/list/last_spec.rb +34 -0
  16. data/spec/hamster/list/maximum_spec.rb +8 -6
  17. data/spec/hamster/list/minimum_spec.rb +8 -6
  18. data/spec/hamster/list/partition_spec.rb +3 -3
  19. data/spec/hamster/list/sorting_spec.rb +82 -0
  20. data/spec/hamster/list/tail_spec.rb +6 -1
  21. data/spec/hamster/list/union_spec.rb +68 -0
  22. data/spec/hamster/list/uniq_spec.rb +57 -0
  23. data/spec/hamster/list/zip_spec.rb +3 -3
  24. data/spec/hamster/set/count_spec.rb +54 -0
  25. data/spec/hamster/set/each_spec.rb +2 -2
  26. data/spec/hamster/set/find_spec.rb +53 -0
  27. data/spec/hamster/set/include_spec.rb +1 -1
  28. data/spec/hamster/set/join_spec.rb +61 -0
  29. data/spec/hamster/set/maximum_spec.rb +69 -0
  30. data/spec/hamster/set/minimum_spec.rb +69 -0
  31. data/spec/hamster/set/partition_spec.rb +70 -0
  32. data/spec/hamster/set/sorting_spec.rb +58 -0
  33. data/spec/hamster/set/{to_list.rb → to_list_spec.rb} +1 -0
  34. data/spec/hamster/stack/to_a_spec.rb +36 -0
  35. data/spec/hamster/stack/to_list_spec.rb +33 -0
  36. metadata +20 -7
  37. data/spec/hamster/set/sort_by_spec.rb +0 -60
@@ -13,8 +13,8 @@ describe Hamster::Set do
13
13
 
14
14
  describe "with a block (internal iteration)" do
15
15
 
16
- it "returns self" do
17
- @set.each {}.should equal(@set)
16
+ it "returns nil" do
17
+ @set.each {}.should be_nil
18
18
  end
19
19
 
20
20
  it "yields all values" do
@@ -0,0 +1,53 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/set'
4
+
5
+ describe Hamster::Set do
6
+
7
+ [:find, :detect].each do |method|
8
+
9
+ describe "##{method}" do
10
+
11
+ [
12
+ [[], "A", nil],
13
+ [[], nil, nil],
14
+ [["A"], "A", "A"],
15
+ [["A"], "B", nil],
16
+ [["A"], nil, nil],
17
+ [["A", "B", nil], "A", "A"],
18
+ [["A", "B", nil], "B", "B"],
19
+ [["A", "B", nil], nil, nil],
20
+ [["A", "B", nil], "C", nil],
21
+ ].each do |values, item, expected|
22
+
23
+ describe "on #{values.inspect}" do
24
+
25
+ before do
26
+ @set = Hamster.set(*values)
27
+ end
28
+
29
+ describe "with a block" do
30
+
31
+ it "returns #{expected.inspect}" do
32
+ @set.send(method) { |x| x == item }.should == expected
33
+ end
34
+
35
+ end
36
+
37
+ describe "without a block" do
38
+
39
+ it "returns nil" do
40
+ @set.send(method).should be_nil
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -4,7 +4,7 @@ require 'hamster/set'
4
4
 
5
5
  describe Hamster::Set do
6
6
 
7
- [:include?, :member?].each do |method|
7
+ [:include?, :member?, :contains?, :elem?].each do |method|
8
8
 
9
9
  describe "##{method}" do
10
10
 
@@ -0,0 +1,61 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/set'
4
+
5
+ describe Hamster::Set do
6
+
7
+ describe "#join" do
8
+
9
+ describe "with a separator" do
10
+
11
+ [
12
+ [[], ""],
13
+ [["A"], "A"],
14
+ [[1, 2, 3], "1|2|3"]
15
+ ].each do |values, expected|
16
+
17
+ describe "on #{values.inspect}" do
18
+
19
+ before do
20
+ original = Hamster.set(*values)
21
+ @result = original.join("|")
22
+ end
23
+
24
+ it "returns #{expected.inspect}" do
25
+ @result.should == expected
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ describe "without a separator" do
35
+
36
+ [
37
+ [[], ""],
38
+ [["A"], "A"],
39
+ [[1, 2, 3], "123"]
40
+ ].each do |values, expected|
41
+
42
+ describe "on #{values.inspect}" do
43
+
44
+ before do
45
+ original = Hamster.set(*values)
46
+ @result = original.join
47
+ end
48
+
49
+ it "returns #{expected.inspect}" do
50
+ @result.should == expected
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -0,0 +1,69 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/set'
4
+
5
+ describe Hamster::Set do
6
+
7
+ [:maximum, :max].each do |method|
8
+
9
+ describe "##{method}" do
10
+
11
+ describe "with a block" do
12
+
13
+ [
14
+ [[], nil],
15
+ [["A"], "A"],
16
+ [["Ichi", "Ni", "San"], "Ichi"],
17
+ ].each do |values, expected|
18
+
19
+ describe "on #{values.inspect}" do
20
+
21
+ before do
22
+ original = Hamster.set(*values)
23
+ pending do
24
+ @result = original.send(method) { |maximum, item| item.length <=> maximum.length }
25
+ end
26
+ end
27
+
28
+ it "returns #{expected.inspect}" do
29
+ @result.should == expected
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ describe "without a block" do
39
+
40
+ [
41
+ [[], nil],
42
+ [["A"], "A"],
43
+ [["Ichi", "Ni", "San"], "San"],
44
+ ].each do |values, expected|
45
+
46
+ describe "on #{values.inspect}" do
47
+
48
+ before do
49
+ original = Hamster.set(*values)
50
+ pending do
51
+ @result = original.send(method)
52
+ end
53
+ end
54
+
55
+ it "returns #{expected.inspect}" do
56
+ @result.should == expected
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,69 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/set'
4
+
5
+ describe Hamster::Set do
6
+
7
+ [:minimum, :min].each do |method|
8
+
9
+ describe "##{method}" do
10
+
11
+ describe "with a block" do
12
+
13
+ [
14
+ [[], nil],
15
+ [["A"], "A"],
16
+ [["Ichi", "Ni", "San"], "Ni"],
17
+ ].each do |values, expected|
18
+
19
+ describe "on #{values.inspect}" do
20
+
21
+ before do
22
+ original = Hamster.set(*values)
23
+ pending do
24
+ @result = original.send(method) { |maximum, item| item.length <=> maximum.length }
25
+ end
26
+ end
27
+
28
+ it "returns #{expected.inspect}" do
29
+ @result.should == expected
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ describe "without a block" do
39
+
40
+ [
41
+ [[], nil],
42
+ [["A"], "A"],
43
+ [["Ichi", "Ni", "San"], "Ichi"],
44
+ ].each do |values, expected|
45
+
46
+ describe "on #{values.inspect}" do
47
+
48
+ before do
49
+ original = Hamster.set(*values)
50
+ pending do
51
+ @result = original.send(method)
52
+ end
53
+ end
54
+
55
+ it "returns #{expected.inspect}" do
56
+ @result.should == expected
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,70 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/set'
4
+
5
+ describe Hamster::Set do
6
+
7
+ describe "#partition" do
8
+
9
+ [
10
+ [[], [], []],
11
+ [[1], [1], []],
12
+ [[1, 2], [1], [2]],
13
+ [[1, 2, 3], [1, 3], [2]],
14
+ [[1, 2, 3, 4], [1, 3], [2, 4]],
15
+ [[2, 3, 4], [3], [2, 4]],
16
+ [[3, 4], [3], [4]],
17
+ [[4], [], [4]],
18
+ ].each do |values, expected_matches, expected_remainder|
19
+
20
+ describe "on #{values.inspect}" do
21
+
22
+ before do
23
+ @original = Hamster.set(*values)
24
+ end
25
+
26
+ describe "with a block" do
27
+
28
+ before do
29
+ @result = @original.partition(&:odd?)
30
+ @matches = @result.car
31
+ @remainder = @result.cadr
32
+ end
33
+
34
+ it "preserves the original" do
35
+ @original.should == Hamster.set(*values)
36
+ end
37
+
38
+ it "returns a list with two items" do
39
+ @result.size.should == 2
40
+ end
41
+
42
+ it "correctly identifies the matches" do
43
+ @matches.should == Hamster.set(*expected_matches)
44
+ end
45
+
46
+ it "correctly identifies the remainder" do
47
+ @remainder.should == Hamster.set(*expected_remainder)
48
+ end
49
+
50
+ end
51
+
52
+ describe "without a block" do
53
+
54
+ before do
55
+ @result = @original.partition
56
+ end
57
+
58
+ it "returns self" do
59
+ @result.should equal(@original)
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+
70
+ end
@@ -0,0 +1,58 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/set'
4
+
5
+ describe Hamster::Set do
6
+
7
+ [
8
+ [:sort, lambda { |left, right| left.length <=> right.length }],
9
+ [:sort_by, lambda { |item| item.length }],
10
+ ].each do |method, comparator|
11
+
12
+ describe "##{method}" do
13
+
14
+ [
15
+ [[], []],
16
+ [["A"], ["A"]],
17
+ [["Ichi", "Ni", "San"], ["Ni", "San", "Ichi"]],
18
+ ].each do |values, expected|
19
+
20
+ describe "on #{values.inspect}" do
21
+
22
+ before do
23
+ @original = Hamster.set(*values)
24
+ end
25
+
26
+ describe "with a block" do
27
+
28
+ before do
29
+ @result = @original.send(method, &comparator)
30
+ end
31
+
32
+ it "returns #{expected.inspect}" do
33
+ @result.should == Hamster.list(*expected)
34
+ end
35
+
36
+ end
37
+
38
+ describe "without a block" do
39
+
40
+ before do
41
+ @result = @original.send(method)
42
+ end
43
+
44
+ it "returns #{expected.sort.inspect}" do
45
+ @result.should == Hamster.list(*expected.sort)
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+
54
+ end
55
+
56
+ end
57
+
58
+ end
@@ -1,6 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
3
  require 'hamster/set'
4
+ require 'hamster/list'
4
5
 
5
6
  describe Hamster::Set do
6
7
 
@@ -0,0 +1,36 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'hamster/stack'
4
+
5
+ describe Hamster::Stack do
6
+
7
+ [:to_a, :entries].each do |method|
8
+
9
+ describe "##{method}" do
10
+
11
+ [
12
+ [[], []],
13
+ [["A"], ["A"]],
14
+ [["A", "B", "C"], ["C", "B", "A"]],
15
+ ].each do |values, expected|
16
+
17
+ describe "on #{values.inspect}" do
18
+
19
+ before do
20
+ @stack = Hamster.stack(*values)
21
+ @result = @stack.send(method)
22
+ end
23
+
24
+ it "returns #{expected.inspect}" do
25
+ @result.should == expected
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ end