73 lines
2.1 KiB
Ruby
73 lines
2.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require './position'
|
|
|
|
RSpec.describe Position do
|
|
let(:even_pair) { [4, 6] } # 4+6 = 10 → even
|
|
let(:odd_pair) { [3, 4] } # 3+4 = 7 → odd
|
|
|
|
describe 'initialisation' do
|
|
context 'with two arguments' do
|
|
it 'stores the coordinates when the sum is even' do
|
|
pos = Position.new(*even_pair)
|
|
expect(pos.x_pos).to eq even_pair[0]
|
|
expect(pos.y_pos).to eq even_pair[1]
|
|
end
|
|
|
|
it 'raises ArgumentError when the sum is odd' do
|
|
expect { Position.new(*odd_pair) }
|
|
.to raise_error(ArgumentError, /must sum to an even number/)
|
|
end
|
|
end
|
|
|
|
context 'with three arguments' do
|
|
it 'raises NotImplementedError' do
|
|
expect { Position.new(1, 2, 3) }
|
|
.to raise_error(NotImplementedError, /positioning not implimented/)
|
|
end
|
|
end
|
|
|
|
context 'with an unsupported number of arguments' do
|
|
it 'raises ArgumentError when no arguments are supplied' do
|
|
expect { Position.new }
|
|
.to raise_error(ArgumentError, /requires two or three integer args/)
|
|
end
|
|
|
|
it 'raises ArgumentError when too many arguments are supplied' do
|
|
expect { Position.new(1, 2, 3, 4) }
|
|
.to raise_error(ArgumentError, /requires two or three integer args/)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#two_d_cartesian' do
|
|
it 'returns the original (x, y) pair' do
|
|
pos = Position.new(*even_pair)
|
|
expect(pos.two_d_cartesian).to eq even_pair
|
|
end
|
|
end
|
|
|
|
describe '#two_d_hexagonal' do
|
|
it 'returns an array of nil values for a, b, c' do
|
|
pos = Position.new(*even_pair)
|
|
expect(pos.two_d_hexagonal).to eq [nil, nil, nil]
|
|
end
|
|
end
|
|
|
|
describe '#to_s' do
|
|
it 'puts out the coordinates' do
|
|
expect(Position.new(*even_pair).to_s).to eq '(4, 6)'
|
|
end
|
|
end
|
|
|
|
describe '#==' do
|
|
it 'returns false when the positions differ' do
|
|
expect(Position.new(*even_pair) == Position.new(6, 8)).to eq false
|
|
end
|
|
|
|
it 'returns true when the positions are the same' do
|
|
expect(Position.new(*even_pair) == Position.new(4, 6)).to eq true
|
|
end
|
|
end
|
|
end
|