]> projects.mako.cc - rubyvote/commitdiff
o Test that elections with a single vote return the expected result.
authorJoe Slag <joe@slagwerks.com>
Tue, 20 Mar 2007 15:39:48 +0000 (15:39 +0000)
committerJoe Slag <joe@slagwerks.com>
Tue, 20 Mar 2007 15:39:48 +0000 (15:39 +0000)
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

lib/rubyvote/condorcet.rb
test/condorcet_test.rb

index 96a103bd479c5bcf3e7d575cacd5d71f4afe8f78..340be9273f05fe7915a74902b4c049f8985834c8 100644 (file)
@@ -133,6 +133,7 @@ class CondorcetResult < ElectionResult
     votes = @election.votes unless votes
 
     defeats = Array.new
     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
     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)
 
       # 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|
       candidates.each do |cand1|
         candidates.each do |cand2|
           candidates.each do |cand3|
index ea1b19c75c2630c04c10297815923d2bbdbd12d8..82ff292f6dae361511d876cc22edaf7076cf1a3b 100644 (file)
@@ -86,4 +86,16 @@ class TestCondorcetVote < Test::Unit::TestCase
     assert_equal [['B'], ['C'], ['D'], ['A']], result.get_full_results
   end
 
     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
 end

Benjamin Mako Hill || Want to submit a patch?