-
Notifications
You must be signed in to change notification settings - Fork 0
/
spiralify_spec.rb
72 lines (61 loc) · 1.64 KB
/
spiralify_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
require './spiralify'
describe Spiralify, '#spiralize' do
describe "spirals" do
shared_examples_for 'a square' do
subject { Spiralify.new(n).spiralize }
it "returns the correct result" do
should eq(result)
end
it "includes 1" do
subject.flatten.should include(1)
end
it "includes n" do
subject.flatten.should include(n)
end
it "does not include 0" do
subject.flatten.should_not include(0)
end
end
describe "n=1" do
let(:n) { 1 }
let(:result) { [[1]] }
it_behaves_like 'a square'
end
describe "n=4" do
let(:n) { 4 }
let(:result) { [[4, 3],
[1, 2]] }
it_behaves_like 'a square'
end
describe "n=9" do
let(:n) { 9 }
let(:result) { [[5, 4, 3],
[6, 1, 2],
[7, 8, 9]] }
it_behaves_like 'a square'
end
describe "n=16" do
let(:n) { 16 }
let(:result) { [[16, 15, 14, 13],
[ 5, 4, 3, 12],
[ 6, 1, 2, 11],
[ 7, 8, 9, 10]] }
it_behaves_like 'a square'
end
end
describe "field directions" do
subject { Spiralify::Field }
it "should go right to up" do
subject.next_direction(:right).should eq(:up)
end
it "should go up to left" do
subject.next_direction(:up).should eq(:left)
end
it "should go left to down" do
subject.next_direction(:left).should eq(:down)
end
it "should go down to right" do
subject.next_direction(:down).should eq(:right)
end
end
end