end
class PureCondorcetVote < CondorcetVote
- def result
- PureCondorcetResult.new(self)
+ def resultFactory(init)
+ PureCondorcetResult.new(init)
end
end
end
protected
+
def condorcet
votes = @election.votes
candidates = @election.candidates
victors[winner] << loser
end
- winners = @election.candidates.find_all do |candidate|
- victors[candidate].length == @election.candidates.length - 1
+ victory_margin = 1
+ while true
+ winners = @election.candidates.find_all do |candidate|
+ victors[candidate].length == @election.candidates.length - victory_margin
+ end
+ if winners.length > 0
+ @winners = winners
+ return @winners
+ else
+ victory_margin += 1
+ end
end
-
- @winners << winners if winners.length == 1
end
end
3.times {vote_array << "CBA".split("")}
2.times {vote_array << "BAC".split("")}
- assert_equal ["B"], PureCondorcetVote.new(vote_array).result.winners[0]
+ assert_equal "B", PureCondorcetVote.new(vote_array).result.winners[0]
+ assert_equal [['B'], ['A'], ['C']], PureCondorcetVote.new(vote_array).results
+ end
+
+ def test_condorcet_2
+ vote_array = Array.new
+ 3.times {vote_array << "678".split("")}
+ 3.times {vote_array << "768".split("")}
+ 2.times {vote_array << "8".split("")}
+
+ v = PureCondorcetVote.new(vote_array)
+ assert_equal ["6", "7"], v.result.winners
+ assert_equal [['6', '7'], ['8']], v.results
end
def test_ssd