class CondorcetVote < ElectionVote
+ attr_accessor :results
+
def initialize(votes=nil)
unless defined?(@candidates)
@candidates = Array.new
end
end
super(votes)
+ @results = Array.new
end
def tally_vote(vote=nil)
end
end
+ def results
+ if @results.size < 2 && (not @candidates.empty?)
+ tabulate
+ end
+ @results
+ end
+
def result
- resultFactory( self )
+ find_only_winner unless @winner
+ @winner
end
protected
+
def verify_vote(vote=nil)
vote.instance_of?( Array ) and
vote == vote.uniq
end
+ def tabulate
+ find_only_winner unless @winner
+ until @candidates.empty?
+ aResult = resultFactory( self )
+ @results << aResult.winners
+ filter_out(aResult)
+ end
+ end
+
+ def find_only_winner
+ @winner = resultFactory( self )
+ @results << @winner.winners
+ filter_out(@winner)
+ end
+
end
class PureCondorcetVote < CondorcetVote
- def resultFactory(init)
- PureCondorcetResult.new(init)
+ def result
+ PureCondorcetResult.new(self)
end
end
CloneproofSSDResult.new(init)
end
- def result
- top_result = resultFactory( self )
- until @candidates.empty?
- aResult = resultFactory( self )
- top_result.full_results << aResult
- filter_out(aResult)
- end
- top_result
- end
-
end
assert_equal "E", CloneproofSSDVote.new(vote_array).result.winners[0]
assert_equal [['E'], ['A'], ['C'], ['B'], ['D']],
- CloneproofSSDVote.new(vote_array).result.get_full_results
+ CloneproofSSDVote.new(vote_array).results
end
def test_ssd2
assert_equal "D", CloneproofSSDVote.new(vote_array).result.winners[0]
assert_equal [['D'], ['A'], ['C'], ['B']],
- CloneproofSSDVote.new(vote_array).result.get_full_results
+ CloneproofSSDVote.new(vote_array).results
end
def test_ssd3
assert_equal "B", CloneproofSSDVote.new(vote_array).result.winners[0]
assert_equal [['B'], ['C'], ['D'], ['A']],
- CloneproofSSDVote.new(vote_array).result.get_full_results
+ CloneproofSSDVote.new(vote_array).results
end
def test_ssd_incomplete_votes
4.times {vote_array << ["C"]}
2.times {vote_array << "DBC".split("")}
- result = CloneproofSSDVote.new(vote_array).result
- assert_equal "B", result.winners[0]
- assert_equal [['B'], ['C'], ['D'], ['A']], result.get_full_results
+ vote = CloneproofSSDVote.new(vote_array)
+ assert_equal "B", vote.result.winners[0]
+ assert_equal [['B'], ['C'], ['D'], ['A']], vote.results
end
def test_ssd_incomplete_votes_2
2.times {vote_array << "DBCA".split("")}
2.times {vote_array << "DBC".split("")}
- result = CloneproofSSDVote.new(vote_array).result
- assert_equal "B", result.winners[0]
- assert_equal [['B'], ['C'], ['D'], ['A']], result.get_full_results
+ vote = CloneproofSSDVote.new(vote_array)
+ assert_equal "B", vote.result.winners[0]
+ assert_equal [['B'], ['C'], ['D'], ['A']], vote.results
end
#
# condition.
#
def test_ssd_single_vote
- result = CloneproofSSDVote.new([[78]]).result
- assert_equal 78, result.winners[0]
- assert_equal [[78]], result.get_full_results
+ vote = CloneproofSSDVote.new([[78]])
+ assert_equal 78, vote.result.winners[0]
+ assert_equal [[78]], vote.results
end
def test_ssd_sparse
vote_array << ['B', 'D']
vote_array << ['A', 'C']
vote_array << ['E', 'C']
- result = CloneproofSSDVote.new(vote_array).result
- assert_equal 5, result.get_full_results.flatten.size
+ results = CloneproofSSDVote.new(vote_array).results
+ assert_equal 5, results.flatten.size
+ end
+
+ def test_ssd_sparse_2
+ vote_array = Array.new
+ vote_array << [65, 63, 64]
+ vote_array << [64, 65, 66, 63]
+ vote = CloneproofSSDVote.new(vote_array)
+ assert_equal 65, vote.result.winners[0]
+ assert_equal [[65, 64], [63, 66]], vote.results
end
end