From: Joe Slag Date: Tue, 20 Mar 2007 15:39:48 +0000 (+0000) Subject: o Test that elections with a single vote return the expected result. X-Git-Url: https://projects.mako.cc/source/rubyvote/commitdiff_plain/cf5965fdd417de3118228fb879a9cd88def215ea o Test that elections with a single vote return the expected result. o Caught a bug for elections whose votes aren't strings of length 1. git-svn-id: svn://rubyforge.org/var/svn/rubyvote/trunk@20 1440c7f4-e209-0410-9a04-881b5eb134a8 --- diff --git a/lib/rubyvote/condorcet.rb b/lib/rubyvote/condorcet.rb index 96a103b..340be92 100644 --- a/lib/rubyvote/condorcet.rb +++ b/lib/rubyvote/condorcet.rb @@ -133,6 +133,7 @@ class CondorcetResult < ElectionResult votes = @election.votes unless votes defeats = Array.new + candidates = [candidates] unless candidates.class == Array candidates.each do |candidate| candidates.each do |challenger| next if candidate == challenger @@ -204,6 +205,7 @@ class CloneproofSSDResult < CondorcetResult # see the array with the standard defeats transitive_defeats = self.defeats(candidates, votes) + candidates = [candidates] unless candidates.class == Array candidates.each do |cand1| candidates.each do |cand2| candidates.each do |cand3| diff --git a/test/condorcet_test.rb b/test/condorcet_test.rb index ea1b19c..82ff292 100644 --- a/test/condorcet_test.rb +++ b/test/condorcet_test.rb @@ -86,4 +86,16 @@ class TestCondorcetVote < Test::Unit::TestCase assert_equal [['B'], ['C'], ['D'], ['A']], result.get_full_results end + # + # At one point, we happened to be getting correct results due to the + # happy accident that, for example, 'B'.each returns 'B'. The + # following election with a single integer vote catches that + # condition. + # + def test_ssd_single_vote + result = CloneproofSSDVote.new([[78]]).result + assert_equal 78, result.winners[0] + assert_equal [[78]], result.get_full_results + end + end