参考サイト
エッ、今さら!?練習問題と具体的コード例によるTDD超入門。
Rspecを身に付けるまでにすること
1、Rspec、TDDって何?
2、sampleコードを真似て書いてみる。コードの理解と雰囲気を掴む(参考サイトを参照)
3、自分で考えてRspecを書いてみる
OUT PUT(1〜2が目的)
エッ、今さら!?練習問題と具体的コード例によるTDD超入門。
unagi_spec.rb
require './unagi.rb'
describe Unagi do
describe '#initialize' do
it '指定した座席数のゼロ配列が確保される' do
expect(Unagi.new(3).seats).to eq [0, 0, 0]
end
end
describe '#seating' do
it '「長テーブルの座席番号」と「お客さんの人数」を指定すると「座席にお客さんが配置される」' do
unagi = Unagi.new(5)
unagi.seating(1, 3)
expect(unagi.seats).to eq [1, 1, 1, 0, 0]
end
it '長テーブルの最初と最後の席をまたぐ場合、最初の席から配置される' do
unagi = Unagi.new(5)
# 5番目の席から3人座る
unagi.seating(5, 3)
expect(unagi.seats).to eq [1, 1, 0, 0, 1]
end
it '座席に他のお客さんが配置されている場合、座席の状態は変化しない' do
unagi = Unagi.new(5)
unagi.seating(2, 3)
expect(unagi.seats).to eq [0, 1, 1, 1, 0]
unagi.seating(4, 2)
expect(unagi.seats).to eq [0, 1, 1, 1, 0]
end
end
describe '#count' do
it '座席に着席しているお客さんの人数を返却する' do
unagi = Unagi.new(5)
unagi.seating(1, 1)
expect(unagi.count).to eq 1
unagi.seating(2, 1)
expect(unagi.count).to eq 2
unagi.seating(3, 1)
expect(unagi.count).to eq 3
unagi.seating(3, 1)
expect(unagi.count).to eq 3
unagi.seating(4, 1)
expect(unagi.count).to eq 4
unagi.seating(5, 1)
expect(unagi.count).to eq 5
end
end
end
unagi.rb
class Unagi
attr_reader :seats
def initialize(seat_count)
@seats = Array.new(seat_count, 0)
end
def seating(seat_number, people_count)
s = seat_number - 1
people_count.times do
return if @seats[s] == 1
s += 1
s = 0 if @seats.size <= s
end
s = seat_number - 1
people_count.times do
@seats[s] = 1
s += 1
# インデックスが配列の最後を超えると最初に戻る
s = 0 if @seats.size <= s
end
end
def count
@seats.select{ |s| s == 1 }.count
end
end
次回
もうすこし1〜2を理解したいので、sample codeを模写しながら書く