hamster 0.1.12 → 0.1.13
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.
- data/History.rdoc +4 -0
- data/lib/hamster/list.rb +1 -0
- data/lib/hamster/stack.rb +7 -2
- data/lib/hamster/version.rb +1 -1
- data/spec/hamster/list/cadr_spec.rb +3 -3
- data/spec/hamster/list/cons_spec.rb +37 -0
- data/spec/hamster/list/drop_spec.rb +3 -3
- data/spec/hamster/list/drop_while_spec.rb +3 -3
- data/spec/hamster/list/empty_spec.rb +3 -3
- data/spec/hamster/list/eql_spec.rb +3 -3
- data/spec/hamster/list/filter_spec.rb +3 -3
- data/spec/hamster/list/head_spec.rb +3 -3
- data/spec/hamster/list/include_spec.rb +3 -3
- data/spec/hamster/list/inspect_spec.rb +6 -6
- data/spec/hamster/list/map_spec.rb +3 -3
- data/spec/hamster/list/reduce_spec.rb +3 -3
- data/spec/hamster/list/reject_spec.rb +3 -3
- data/spec/hamster/list/size_spec.rb +3 -3
- data/spec/hamster/list/tail_spec.rb +3 -3
- data/spec/hamster/list/take_spec.rb +3 -3
- data/spec/hamster/list/take_while_spec.rb +3 -3
- data/spec/hamster/stack/construction_spec.rb +41 -0
- data/spec/hamster/stack/copying_spec.rb +13 -7
- data/spec/hamster/stack/empty_spec.rb +15 -5
- data/spec/hamster/stack/eql_spec.rb +24 -15
- data/spec/hamster/stack/inspect_spec.rb +27 -0
- data/spec/hamster/stack/pop_spec.rb +53 -0
- data/spec/hamster/stack/push_spec.rb +25 -10
- data/spec/hamster/stack/size_spec.rb +31 -0
- data/spec/hamster/stack/top_spec.rb +32 -0
- metadata +7 -1
data/History.rdoc
CHANGED
data/lib/hamster/list.rb
CHANGED
data/lib/hamster/stack.rb
CHANGED
@@ -2,8 +2,8 @@ require 'hamster/list'
|
|
2
2
|
|
3
3
|
module Hamster
|
4
4
|
|
5
|
-
def self.stack
|
6
|
-
EmptyStack
|
5
|
+
def self.stack(*items)
|
6
|
+
items.inject(EmptyStack) { |stack, item| stack.push(item) }
|
7
7
|
end
|
8
8
|
|
9
9
|
class Stack
|
@@ -28,6 +28,7 @@ module Hamster
|
|
28
28
|
def push(item)
|
29
29
|
self.class.new(@list.cons(item))
|
30
30
|
end
|
31
|
+
alias_method :<<, :push
|
31
32
|
|
32
33
|
def pop
|
33
34
|
list = @list.tail
|
@@ -50,6 +51,10 @@ module Hamster
|
|
50
51
|
end
|
51
52
|
alias_method :clone, :dup
|
52
53
|
|
54
|
+
def inspect
|
55
|
+
@list.inspect
|
56
|
+
end
|
57
|
+
|
53
58
|
end
|
54
59
|
|
55
60
|
EmptyStack = Stack.new(Hamster.list)
|
data/lib/hamster/version.rb
CHANGED
@@ -18,14 +18,14 @@ describe Hamster::List do
|
|
18
18
|
[["A", "B", "C"], :cddr, Hamster.list("C")],
|
19
19
|
[["A", "B", "C"], :cdddr, Hamster.list],
|
20
20
|
[["A", "B", "C"], :cddddr, Hamster.list],
|
21
|
-
].each do |values, method,
|
21
|
+
].each do |values, method, expected|
|
22
22
|
|
23
23
|
describe "on #{values.inspect}" do
|
24
24
|
|
25
25
|
list = Hamster.list(*values)
|
26
26
|
|
27
|
-
it "returns #{
|
28
|
-
list.send(method).should ==
|
27
|
+
it "returns #{expected}" do
|
28
|
+
list.send(method).should == expected
|
29
29
|
end
|
30
30
|
|
31
31
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::List do
|
4
|
+
|
5
|
+
[:cons, :>>].each do |method|
|
6
|
+
|
7
|
+
describe "##{method}" do
|
8
|
+
|
9
|
+
[
|
10
|
+
[[], "A", ["A"]],
|
11
|
+
[["A"], "B", ["B", "A"]],
|
12
|
+
[["A"], "A", ["A", "A"]],
|
13
|
+
[["A", "B", "C"], "D", ["D", "A", "B", "C"]],
|
14
|
+
].each do |values, new_value, expected|
|
15
|
+
|
16
|
+
describe "on #{values.inspect} with #{new_value.inspect}" do
|
17
|
+
|
18
|
+
original = Hamster.list(*values)
|
19
|
+
result = original.send(method, new_value)
|
20
|
+
|
21
|
+
it "preserves the original" do
|
22
|
+
original.should == Hamster.list(*values)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns #{expected.inspect}" do
|
26
|
+
result.should == Hamster.list(*expected)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -10,14 +10,14 @@ describe Hamster::List do
|
|
10
10
|
[["A"], -1, ["A"]],
|
11
11
|
[["A", "B", "C"], 0, ["A", "B", "C"]],
|
12
12
|
[["A", "B", "C"], 2, ["C"]],
|
13
|
-
].each do |values, number,
|
13
|
+
].each do |values, number, expected|
|
14
14
|
|
15
15
|
describe "#{number} from #{values.inspect}" do
|
16
16
|
|
17
17
|
list = Hamster.list(*values)
|
18
18
|
|
19
|
-
it "returns #{
|
20
|
-
list.drop(number).should == Hamster.list(*
|
19
|
+
it "returns #{expected}" do
|
20
|
+
list.drop(number).should == Hamster.list(*expected)
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
@@ -8,7 +8,7 @@ describe Hamster::List do
|
|
8
8
|
[[], []],
|
9
9
|
[["A"], []],
|
10
10
|
[["A", "B", "C"], ["C"]],
|
11
|
-
].each do |values,
|
11
|
+
].each do |values, expected|
|
12
12
|
|
13
13
|
describe "on #{values.inspect}" do
|
14
14
|
|
@@ -16,8 +16,8 @@ describe Hamster::List do
|
|
16
16
|
|
17
17
|
describe "with a block" do
|
18
18
|
|
19
|
-
it "returns #{
|
20
|
-
list.drop_while { |item| item < "C" }.should == Hamster.list(*
|
19
|
+
it "returns #{expected}" do
|
20
|
+
list.drop_while { |item| item < "C" }.should == Hamster.list(*expected)
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
@@ -8,14 +8,14 @@ describe Hamster::List do
|
|
8
8
|
[[], true],
|
9
9
|
[["A"], false],
|
10
10
|
[["A", "B", "C"], false],
|
11
|
-
].each do |values,
|
11
|
+
].each do |values, expected|
|
12
12
|
|
13
13
|
describe "on #{values.inspect}" do
|
14
14
|
|
15
15
|
list = Hamster.list(*values)
|
16
16
|
|
17
|
-
it "returns #{
|
18
|
-
list.empty?.should ==
|
17
|
+
it "returns #{expected}" do
|
18
|
+
list.empty?.should == expected
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
@@ -16,15 +16,15 @@ describe Hamster::List do
|
|
16
16
|
[["A"], ["A", "B"], false],
|
17
17
|
[["A", "B", "C"], ["A", "B", "C"], true],
|
18
18
|
[["C", "A", "B"], ["A", "B", "C"], false],
|
19
|
-
].each do |a, b,
|
19
|
+
].each do |a, b, expected|
|
20
20
|
|
21
21
|
describe "on #{a.inspect} and #{b.inspect}" do
|
22
22
|
|
23
23
|
a = Hamster.list(*a)
|
24
24
|
b = Hamster.list(*b)
|
25
25
|
|
26
|
-
it "returns #{
|
27
|
-
a.send(method, b).should ==
|
26
|
+
it "returns #{expected}" do
|
27
|
+
a.send(method, b).should == expected
|
28
28
|
end
|
29
29
|
|
30
30
|
end
|
@@ -12,7 +12,7 @@ describe Hamster::List do
|
|
12
12
|
[["A", "B", "C"], ["A", "B", "C"]],
|
13
13
|
[["A", "b", "C"], ["A", "C"]],
|
14
14
|
[["a", "b", "c"], []],
|
15
|
-
].each do |values,
|
15
|
+
].each do |values, expected|
|
16
16
|
|
17
17
|
describe "on #{values.inspect}" do
|
18
18
|
|
@@ -20,8 +20,8 @@ describe Hamster::List do
|
|
20
20
|
|
21
21
|
describe "with a block" do
|
22
22
|
|
23
|
-
it "returns #{
|
24
|
-
list.send(method) { |item| item == item.upcase }.should == Hamster.list(*
|
23
|
+
it "returns #{expected}" do
|
24
|
+
list.send(method) { |item| item == item.upcase }.should == Hamster.list(*expected)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "is lazy" do
|
@@ -8,14 +8,14 @@ describe Hamster::List do
|
|
8
8
|
[[], nil],
|
9
9
|
[["A"], "A"],
|
10
10
|
[["A", "B", "C"], "A"],
|
11
|
-
].each do |values,
|
11
|
+
].each do |values, expected|
|
12
12
|
|
13
13
|
describe "on #{values.inspect}" do
|
14
14
|
|
15
15
|
list = Hamster.list(*values)
|
16
16
|
|
17
|
-
it "returns #{
|
18
|
-
list.head.should ==
|
17
|
+
it "returns #{expected}" do
|
18
|
+
list.head.should == expected
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
@@ -16,14 +16,14 @@ describe Hamster::List do
|
|
16
16
|
[["A", "B", nil], "B", true],
|
17
17
|
[["A", "B", nil], nil, true],
|
18
18
|
[["A", "B", nil], "C", false],
|
19
|
-
].each do |values, item,
|
19
|
+
].each do |values, item, expected|
|
20
20
|
|
21
21
|
describe "on #{values.inspect}" do
|
22
22
|
|
23
23
|
list = Hamster.list(*values)
|
24
24
|
|
25
|
-
it "returns #{
|
26
|
-
list.send(method, item).should ==
|
25
|
+
it "returns #{expected}" do
|
26
|
+
list.send(method, item).should == expected
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
@@ -5,17 +5,17 @@ describe Hamster::List do
|
|
5
5
|
describe "#inspect" do
|
6
6
|
|
7
7
|
[
|
8
|
-
[],
|
9
|
-
["A"],
|
10
|
-
["A", "B", "C"],
|
11
|
-
].each do |values|
|
8
|
+
[[], "[]"],
|
9
|
+
[["A"], "[\"A\"]"],
|
10
|
+
[["A", "B", "C"], "[\"A\", \"B\", \"C\"]"]
|
11
|
+
].each do |values, expected|
|
12
12
|
|
13
13
|
describe "on #{values.inspect}" do
|
14
14
|
|
15
15
|
list = Hamster.list(*values)
|
16
16
|
|
17
|
-
it "returns #{
|
18
|
-
list.inspect.should ==
|
17
|
+
it "returns #{expected}" do
|
18
|
+
list.inspect.should == expected
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
@@ -10,7 +10,7 @@ describe Hamster::List do
|
|
10
10
|
[[], []],
|
11
11
|
[["A"], ["a"]],
|
12
12
|
[["A", "B", "C"], ["a", "b", "c"]],
|
13
|
-
].each do |values,
|
13
|
+
].each do |values, expected|
|
14
14
|
|
15
15
|
describe "on #{values.inspect}" do
|
16
16
|
|
@@ -18,8 +18,8 @@ describe Hamster::List do
|
|
18
18
|
|
19
19
|
describe "with a block" do
|
20
20
|
|
21
|
-
it "returns #{
|
22
|
-
list.send(method) { |item| item.downcase }.should == Hamster.list(*
|
21
|
+
it "returns #{expected}" do
|
22
|
+
list.send(method) { |item| item.downcase }.should == Hamster.list(*expected)
|
23
23
|
end
|
24
24
|
|
25
25
|
it "is lazy" do
|
@@ -10,7 +10,7 @@ describe Hamster::List do
|
|
10
10
|
[[], "@"],
|
11
11
|
[["A"], "@a"],
|
12
12
|
[["A", "B", "C"], "@abc"],
|
13
|
-
].each do |values,
|
13
|
+
].each do |values, expected|
|
14
14
|
|
15
15
|
describe "on #{values.inspect}" do
|
16
16
|
|
@@ -18,8 +18,8 @@ describe Hamster::List do
|
|
18
18
|
|
19
19
|
describe "with a block" do
|
20
20
|
|
21
|
-
it "returns #{
|
22
|
-
list.send(method, "@") { |memo, item| memo << item.downcase }.should ==
|
21
|
+
it "returns #{expected.inspect}" do
|
22
|
+
list.send(method, "@") { |memo, item| memo << item.downcase }.should == expected
|
23
23
|
end
|
24
24
|
|
25
25
|
end
|
@@ -10,7 +10,7 @@ describe Hamster::List do
|
|
10
10
|
[["A", "B", "C"], ["A", "B", "C"]],
|
11
11
|
[["A", "b", "C"], ["A", "C"]],
|
12
12
|
[["a", "b", "c"], []],
|
13
|
-
].each do |values,
|
13
|
+
].each do |values, expected|
|
14
14
|
|
15
15
|
describe "on #{values.inspect}" do
|
16
16
|
|
@@ -18,8 +18,8 @@ describe Hamster::List do
|
|
18
18
|
|
19
19
|
describe "with a block" do
|
20
20
|
|
21
|
-
it "returns #{
|
22
|
-
list.reject { |item| item == item.downcase }.should == Hamster.list(*
|
21
|
+
it "returns #{expected}" do
|
22
|
+
list.reject { |item| item == item.downcase }.should == Hamster.list(*expected)
|
23
23
|
end
|
24
24
|
|
25
25
|
it "is lazy" do
|
@@ -10,14 +10,14 @@ describe Hamster::List do
|
|
10
10
|
[[], 0],
|
11
11
|
[["A"], 1],
|
12
12
|
[["A", "B", "C"], 3],
|
13
|
-
].each do |values,
|
13
|
+
].each do |values, expected|
|
14
14
|
|
15
15
|
describe "on #{values.inspect}" do
|
16
16
|
|
17
17
|
list = Hamster.list(*values)
|
18
18
|
|
19
|
-
it "returns #{
|
20
|
-
list.send(method).should ==
|
19
|
+
it "returns #{expected}" do
|
20
|
+
list.send(method).should == expected
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
@@ -8,14 +8,14 @@ describe Hamster::List do
|
|
8
8
|
[[], []],
|
9
9
|
[["A"], []],
|
10
10
|
[["A", "B", "C"], ["B", "C"]],
|
11
|
-
].each do |values,
|
11
|
+
].each do |values, expected|
|
12
12
|
|
13
13
|
describe "on #{values.inspect}" do
|
14
14
|
|
15
15
|
list = Hamster.list(*values)
|
16
16
|
|
17
|
-
it "returns #{
|
18
|
-
list.tail.should == Hamster.list(*
|
17
|
+
it "returns #{expected}" do
|
18
|
+
list.tail.should == Hamster.list(*expected)
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
@@ -10,14 +10,14 @@ describe Hamster::List do
|
|
10
10
|
[["A"], -1, []],
|
11
11
|
[["A", "B", "C"], 0, []],
|
12
12
|
[["A", "B", "C"], 2, ["A", "B"]],
|
13
|
-
].each do |values, number,
|
13
|
+
].each do |values, number, expected|
|
14
14
|
|
15
15
|
describe "#{number} from #{values.inspect}" do
|
16
16
|
|
17
17
|
list = Hamster.list(*values)
|
18
18
|
|
19
|
-
it "returns #{
|
20
|
-
list.take(number).should == Hamster.list(*
|
19
|
+
it "returns #{expected}" do
|
20
|
+
list.take(number).should == Hamster.list(*expected)
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
@@ -8,7 +8,7 @@ describe Hamster::List do
|
|
8
8
|
[[], []],
|
9
9
|
[["A"], ["A"]],
|
10
10
|
[["A", "B", "C"], ["A", "B"]],
|
11
|
-
].each do |values,
|
11
|
+
].each do |values, expected|
|
12
12
|
|
13
13
|
describe "on #{values.inspect}" do
|
14
14
|
|
@@ -16,8 +16,8 @@ describe Hamster::List do
|
|
16
16
|
|
17
17
|
describe "with a block" do
|
18
18
|
|
19
|
-
it "returns #{
|
20
|
-
list.take_while { |item| item < "C" }.should == Hamster.list(*
|
19
|
+
it "returns #{expected}" do
|
20
|
+
list.take_while { |item| item < "C" }.should == Hamster.list(*expected)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "is lazy" do
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster do
|
4
|
+
|
5
|
+
describe ".stack" do
|
6
|
+
|
7
|
+
describe "with no arguments" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@stack = Hamster.stack
|
11
|
+
end
|
12
|
+
|
13
|
+
it "always returns the same instance" do
|
14
|
+
@stack.should equal(Hamster.stack)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns an empty stack" do
|
18
|
+
@stack.should be_empty
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "with a number of items" do
|
24
|
+
|
25
|
+
before do
|
26
|
+
@stack = Hamster.stack("A", "B", "C")
|
27
|
+
end
|
28
|
+
|
29
|
+
it "always returns a different instance" do
|
30
|
+
@stack.should_not equal(Hamster.stack("A", "B", "C"))
|
31
|
+
end
|
32
|
+
|
33
|
+
it "is the same as repeatedly using #push" do
|
34
|
+
@stack.should == Hamster.stack.push("A").push("B").push("C")
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -2,16 +2,22 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
2
|
|
3
3
|
describe Hamster::Stack do
|
4
4
|
|
5
|
-
before do
|
6
|
-
@stack = Hamster.stack.push("A").push("B").push("C")
|
7
|
-
end
|
8
|
-
|
9
5
|
[:dup, :clone].each do |method|
|
10
6
|
|
11
|
-
|
7
|
+
[
|
8
|
+
[],
|
9
|
+
["A"],
|
10
|
+
["A", "B", "C"],
|
11
|
+
].each do |values|
|
12
|
+
|
13
|
+
describe "on #{values.inspect}" do
|
14
|
+
|
15
|
+
stack = Hamster.stack(*values)
|
16
|
+
|
17
|
+
it "returns self" do
|
18
|
+
stack.send(method).should equal(stack)
|
19
|
+
end
|
12
20
|
|
13
|
-
it "returns self" do
|
14
|
-
@stack.send(method).should equal(@stack)
|
15
21
|
end
|
16
22
|
|
17
23
|
end
|
@@ -4,12 +4,22 @@ describe Hamster::Stack do
|
|
4
4
|
|
5
5
|
describe "#empty?" do
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
[
|
8
|
+
[[], true],
|
9
|
+
[["A"], false],
|
10
|
+
[["A", "B", "C"], false],
|
11
|
+
].each do |values, expected|
|
12
|
+
|
13
|
+
describe "on #{values.inspect}" do
|
14
|
+
|
15
|
+
stack = Hamster.stack(*values)
|
16
|
+
|
17
|
+
it "returns #{expected}" do
|
18
|
+
stack.empty?.should == expected
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
10
22
|
|
11
|
-
it "returns false once items have been added" do
|
12
|
-
Hamster.stack.push("A").should_not be_empty
|
13
23
|
end
|
14
24
|
|
15
25
|
end
|
@@ -2,26 +2,35 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
2
|
|
3
3
|
describe Hamster::Stack do
|
4
4
|
|
5
|
-
|
5
|
+
[:eql?, :==].each do |method|
|
6
6
|
|
7
|
-
|
8
|
-
@stack = Hamster.stack.push("A").push("B").push("C")
|
9
|
-
end
|
7
|
+
describe "##{method}" do
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
[
|
10
|
+
[[], [], true],
|
11
|
+
[["A"], [], false],
|
12
|
+
[[], ["A"], false],
|
13
|
+
[["A"], ["A"], true],
|
14
|
+
[["A"], ["B"], false],
|
15
|
+
[["A", "B"], ["A"], false],
|
16
|
+
[["A"], ["A", "B"], false],
|
17
|
+
[["A", "B", "C"], ["A", "B", "C"], true],
|
18
|
+
[["C", "A", "B"], ["A", "B", "C"], false],
|
19
|
+
].each do |a, b, expected|
|
14
20
|
|
15
|
-
|
16
|
-
@stack.should eql(Hamster.stack.push("A").push("B").push("C"))
|
17
|
-
end
|
21
|
+
describe "on #{a.inspect} and #{b.inspect}" do
|
18
22
|
|
19
|
-
|
20
|
-
|
21
|
-
|
23
|
+
a = Hamster.stack(*a)
|
24
|
+
b = Hamster.stack(*b)
|
25
|
+
|
26
|
+
it "returns #{expected}" do
|
27
|
+
a.send(method, b).should == expected
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
22
33
|
|
23
|
-
it "is false for two instances with the similar but differently sized sequence of values" do
|
24
|
-
@stack.should_not eql(Hamster.stack.push("A").push("B"))
|
25
34
|
end
|
26
35
|
|
27
36
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Stack do
|
4
|
+
|
5
|
+
describe "#inspect" do
|
6
|
+
|
7
|
+
[
|
8
|
+
[[], "[]"],
|
9
|
+
[["A"], "[\"A\"]"],
|
10
|
+
[["A", "B", "C"], "[\"C\", \"B\", \"A\"]"]
|
11
|
+
].each do |values, expected|
|
12
|
+
|
13
|
+
describe "on #{values.inspect}" do
|
14
|
+
|
15
|
+
stack = Hamster.stack(*values)
|
16
|
+
|
17
|
+
it "returns #{expected}" do
|
18
|
+
stack.inspect.should == expected
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Stack do
|
4
|
+
|
5
|
+
describe "#pop" do
|
6
|
+
|
7
|
+
[
|
8
|
+
[["A", "B"], ["A"]],
|
9
|
+
[["A", "B", "C"], ["A", "B"]],
|
10
|
+
].each do |values, expected|
|
11
|
+
|
12
|
+
describe "on #{values.inspect}" do
|
13
|
+
|
14
|
+
original = Hamster.stack(*values)
|
15
|
+
result = original.pop
|
16
|
+
|
17
|
+
it "preserves the original" do
|
18
|
+
original.should == Hamster.stack(*values)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns #{expected.inspect}" do
|
22
|
+
result.should == Hamster.stack(*expected)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
[
|
30
|
+
[],
|
31
|
+
["A"],
|
32
|
+
].each do |values|
|
33
|
+
|
34
|
+
describe "on #{values.inspect}" do
|
35
|
+
|
36
|
+
original = Hamster.stack(*values)
|
37
|
+
result = original.pop
|
38
|
+
|
39
|
+
it "preserves the original" do
|
40
|
+
original.should == Hamster.stack(*values)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns the empty stack" do
|
44
|
+
result.should equal(Hamster.stack)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -2,19 +2,34 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
2
|
|
3
3
|
describe Hamster::Stack do
|
4
4
|
|
5
|
-
|
5
|
+
[:push, :<<].each do |method|
|
6
6
|
|
7
|
-
|
8
|
-
@original = Hamster.stack.push("A")
|
9
|
-
@result = @original.push("B")
|
10
|
-
end
|
7
|
+
describe "##{method}" do
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
[
|
10
|
+
[[], "A", ["A"]],
|
11
|
+
[["A"], "B", ["A", "B"]],
|
12
|
+
[["A"], "A", ["A", "A"]],
|
13
|
+
[["A", "B", "C"], "D", ["A", "B", "C", "D"]],
|
14
|
+
].each do |values, new_value, expected|
|
15
|
+
|
16
|
+
describe "on #{values.inspect} with #{new_value.inspect}" do
|
17
|
+
|
18
|
+
original = Hamster.stack(*values)
|
19
|
+
result = original.send(method, new_value)
|
20
|
+
|
21
|
+
it "preserves the original" do
|
22
|
+
original.should == Hamster.stack(*values)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns #{expected.inspect}" do
|
26
|
+
result.should == Hamster.stack(*expected)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
15
32
|
|
16
|
-
it "returns a new stack with the new value at the top" do
|
17
|
-
@result.top.should == "B"
|
18
33
|
end
|
19
34
|
|
20
35
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Stack do
|
4
|
+
|
5
|
+
[:size, :length].each do |method|
|
6
|
+
|
7
|
+
describe "##{method}" do
|
8
|
+
|
9
|
+
[
|
10
|
+
[[], 0],
|
11
|
+
[["A"], 1],
|
12
|
+
[["A", "B", "C"], 3],
|
13
|
+
].each do |values, expected|
|
14
|
+
|
15
|
+
describe "on #{values.inspect}" do
|
16
|
+
|
17
|
+
stack = Hamster.stack(*values)
|
18
|
+
|
19
|
+
it "returns #{expected}" do
|
20
|
+
stack.send(method).should == expected
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Hamster::Stack do
|
4
|
+
|
5
|
+
describe "#top" do
|
6
|
+
|
7
|
+
[
|
8
|
+
[[], nil],
|
9
|
+
[["A"], "A"],
|
10
|
+
[["A", "B", "C"], "C"],
|
11
|
+
].each do |values, expected|
|
12
|
+
|
13
|
+
describe "on #{values.inspect}" do
|
14
|
+
|
15
|
+
original = Hamster.stack(*values)
|
16
|
+
result = original.top
|
17
|
+
|
18
|
+
it "preserves the original" do
|
19
|
+
original.should == Hamster.stack(*values)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns #{expected.inspect}" do
|
23
|
+
result.should == expected
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hamster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Harris
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- spec/hamster/hash/remove_spec.rb
|
50
50
|
- spec/hamster/hash/size_spec.rb
|
51
51
|
- spec/hamster/list/cadr_spec.rb
|
52
|
+
- spec/hamster/list/cons_spec.rb
|
52
53
|
- spec/hamster/list/construction_spec.rb
|
53
54
|
- spec/hamster/list/copying_spec.rb
|
54
55
|
- spec/hamster/list/drop_spec.rb
|
@@ -84,10 +85,15 @@ files:
|
|
84
85
|
- spec/hamster/set/reject_spec.rb
|
85
86
|
- spec/hamster/set/remove_spec.rb
|
86
87
|
- spec/hamster/set/size_spec.rb
|
88
|
+
- spec/hamster/stack/construction_spec.rb
|
87
89
|
- spec/hamster/stack/copying_spec.rb
|
88
90
|
- spec/hamster/stack/empty_spec.rb
|
89
91
|
- spec/hamster/stack/eql_spec.rb
|
92
|
+
- spec/hamster/stack/inspect_spec.rb
|
93
|
+
- spec/hamster/stack/pop_spec.rb
|
90
94
|
- spec/hamster/stack/push_spec.rb
|
95
|
+
- spec/hamster/stack/size_spec.rb
|
96
|
+
- spec/hamster/stack/top_spec.rb
|
91
97
|
- spec/hamster/trie/remove_spec.rb
|
92
98
|
- spec/spec.opts
|
93
99
|
- spec/spec_helper.rb
|