|
|
require 'rubygems'
require 'spec'
$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__),'../lib')))
require 'pairs'
describe Pair do
before do
@pair = Pair.new('David', 'Helen')
end
it 'should define == operator' do
(@pair == Pair.new('David', 'Helen')).should be_true
(@pair == Pair.new('Helen', 'David')).should be_true
end
it 'should include player David' do
@pair.include?('David').should be_true
end
it 'should include player Helen' do
@pair.include?('Helen').should be_true
end
end
describe Scheme do
before do
@players = ['David', 'Helen', 'Vicky', 'Joseph']
@pairs = [
Pair.new('David', 'Helen', 0),
Pair.new('David', 'Vicky', 1),
Pair.new('David', 'Joseph', 8),
Pair.new('Helen', 'Vicky', 2),
Pair.new('Helen', 'Joseph', 5),
Pair.new('Vicky', 'Joseph', 4),
]
@scheme = Scheme.new(@players, @pairs)
end
it 'should generate pairing starting from given pair' do
@scheme.pair_off(Pair.new('David', 'Helen')).pairings.should == [
Pair.new('David','Helen'),
Pair.new('Joseph', 'Vicky')
]
@scheme.pair_off(Pair.new('David', 'Vicky')).pairings.should == [
Pair.new('David','Vicky'),
Pair.new('Joseph', 'Helen')
]
end
it 'should calculate its score' do
@scheme.pair_off(Pair.new('David', 'Helen')).score.should == 4
@scheme.pair_off(Pair.new('David', 'Vicky')).score.should == 5
end
it 'should compare with other scheme' do
@scheme.pair_off(Pair.new('David', 'Helen')).should < Scheme.new(@players, @pairs).pair_off(Pair.new('David', 'Vicky'))
end
describe ' when an odd number of players is given' do
before do
@players = ['David', 'Helen', 'Vicky', 'Joseph', 'Gail']
@pairs = [
Pair.new('David', 'Helen', 0),
Pair.new('David', 'Vicky', 1),
Pair.new('David', 'Joseph', 8),
Pair.new('David', 'Gail', 9),
Pair.new('Helen', 'Vicky', 2),
Pair.new('Helen', 'Joseph', 5),
Pair.new('Helen', 'Gail', 6),
Pair.new('Vicky', 'Joseph', 4),
Pair.new('Vicky', 'Gail', 8),
Pair.new('Joseph', 'Gail', 4),
]
@scheme = Scheme.new(@players, @pairs)
end
it 'should left out one player' do
@scheme.pair_off(Pair.new('David', 'Helen')).left_out.should == ['Gail']
end
end
end
describe SchemeGenerator do
before do
@preferences = {
'David' => ['Helen', 'Vicky', 'Joseph'],
'Helen' => ['David', 'Vicky', 'Joseph'],
'Joseph' => ['Vicky', 'Helen', 'David'],
'Vicky' => ['Joseph', 'Helen', 'David']
}
@scheme_generator = SchemeGenerator.new(@preferences)
end
it 'should collect players' do
@scheme_generator.players.should == ['Helen', 'Vicky', 'Joseph', 'David']
end
it 'should generate all possible pairs' do
@scheme_generator.pairs.should == [
Pair.new('David', 'Helen'),
Pair.new('David', 'Vicky'),
Pair.new('David', 'Joseph'),
Pair.new('Joseph', 'Helen'),
Pair.new('Joseph', 'Vicky'),
Pair.new('Vicky', 'Helen'),
]
end
it 'should calculate score for a given pair' do
@scheme_generator.pair_score('David', 'Helen').should == 0
end
it 'should generate two schemes' do
@scheme_generator.pair_off.size.should == 2
end
it 'should find scheme with optimal pairing (minimum score)' do
@scheme_generator.pair_off.min.pairings.should == [Pair.new('David', 'Helen'), Pair.new('Joseph', 'Vicky')]
end
end
|