From: Benjamin Mako Hill Date: Thu, 16 Aug 2007 23:54:08 +0000 (+0000) Subject: Helped fix the bug in def defeats that was causing cpssd() to return X-Git-Url: https://projects.mako.cc/source/rubyvote/commitdiff_plain/254fd48da81d8e3b0938c38db89b9cd2fd6a98fe?ds=sidebyside;hp=00afdac0dfc6a9073e196a80e62a203ffcc457bf Helped fix the bug in def defeats that was causing cpssd() to return [nil] as a winner list for empty elections. git-svn-id: svn://rubyforge.org/var/svn/rubyvote/trunk@42 1440c7f4-e209-0410-9a04-881b5eb134a8 --- diff --git a/lib/rubyvote/condorcet.rb b/lib/rubyvote/condorcet.rb index 08fd2df..2c5e03a 100644 --- a/lib/rubyvote/condorcet.rb +++ b/lib/rubyvote/condorcet.rb @@ -178,11 +178,12 @@ class CondorcetResult < ElectionResult protected def defeats(candidates=nil, votes=nil) - candidates = @election.candidates unless candidates - votes = @election.votes unless votes + candidates ||= @election.candidates || [] + # we're assumign that if there are candidates, there must be at + # least one vote for them + votes ||= @election.votes defeats = Array.new - candidates = [candidates] unless candidates.class == Array candidates.each do |candidate| candidates.each do |challenger| next if candidate == challenger @@ -242,14 +243,13 @@ class CloneproofSSDResult < CondorcetResult def initialize(voteobj=nil) super(voteobj) @winners = self.cpssd() - @winners.delete nil end protected def cpssd votes = @election.votes - candidates = *@election.candidates + candidates = @election.candidates.dup def in_schwartz_set?(candidate, candidates, transitive_defeats) candidates.each do |challenger|