-
Notifications
You must be signed in to change notification settings - Fork 16
/
mm2pwd_spec.rb
97 lines (78 loc) · 3.37 KB
/
mm2pwd_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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# coding: UTF-8
# Copyright 2013 Kevin Shekleton
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require './mm2pwd'
describe Mm2Pwd do
let(:m) { Mm2Pwd.new }
context '#initialize' do
it 'returns a non-nill instance' do
m.should be_an_instance_of(Mm2Pwd)
end
end
context '#generate' do
it 'returns the correct coordinates for 4 E-Tanks and all 8 bosses defeated' do
expect(m.generate).to eq(['A5', 'B2', 'B4', 'C1', 'C3', 'C5', 'D4', 'D5', 'E2'])
end
it 'returns the correct coordinates for 0 E-Tanks and all 8 bosses defeated' do
m.e_tanks = 0
expect(m.generate).to eq(['A1', 'B2', 'B4', 'C1', 'C5', 'D1', 'D3', 'E3', 'E5'])
end
end
context '#generate_password_bits' do
it 'returns the correct bits for 4 E-Tanks and all 8 bosses defeated' do
expect(m.send(:generate_password_bits)).to eq(0b10000_00010_11000_10101_01010)
end
end
context '#bits_to_coordinates' do
it 'returns no coordinates if all bits are unset' do
expect(m.send(:bits_to_coordinates, 0b00000_00000_00000_00000_00000)).to eq([])
end
it 'correctly pulls the 1st word (B)' do
expect(m.send(:bits_to_coordinates, 0b00000_00000_00000_00000_01110)).to eq(['B2', 'B3', 'B4'])
end
it 'correctly pulls the 2nd word (C)' do
expect(m.send(:bits_to_coordinates, 0b00000_00000_00000_11011_00000)).to eq(['C1', 'C2', 'C4', 'C5'])
end
it 'correctly pulls the 3rd word (D)' do
expect(m.send(:bits_to_coordinates, 0b00000_00000_00110_00000_00000)).to eq(['D2', 'D3'])
end
it 'correctly pulls the 4th word (E)' do
expect(m.send(:bits_to_coordinates, 0b00000_01001_00000_00000_00000)).to eq(['E1', 'E4'])
end
it 'correctly pulls the 5th word (A)' do
expect(m.send(:bits_to_coordinates, 0b10010_00000_00000_00000_00000)).to eq(['A2', 'A5'])
end
end
context '#word_to_coordinates' do
it 'correctly identifies the set bits when all bits are set' do
expect(m.send(:word_to_coordinates, :A, 0b11111)).to eq(['A1', 'A2', 'A3', 'A4', 'A5'])
end
it 'correctly identifies the set bits when all bits are unset' do
expect(m.send(:word_to_coordinates, :A, 0b00000)).to eq([])
end
it 'correctly identifies the set bits when there are a mixture of set and unset bits' do
expect(m.send(:word_to_coordinates, :A, 0b01010)).to eq(['A2', 'A4'])
end
end
context '#rotate_left' do
it 'correctly does not rotate if the shift is 0' do
expect(m.send(:rotate_left, 0b10000_00000_00000_00000, 0)).to eq(0b10000_00000_00000_00000)
end
it 'correctly rotates and wraps values for a shift of 1' do
expect(m.send(:rotate_left, 0b10100_00000_00000_00000, 1)).to eq(0b01000_00000_00000_00001)
end
it 'correctly rotates and wraps values for a shift of 2' do
expect(m.send(:rotate_left, 0b10100_00000_00000_00000, 2)).to eq(0b10000_00000_00000_00010)
end
end
end