X-Git-Url: https://projects.mako.cc/source/rubyvote/blobdiff_plain/863282d853f14245e6b494a5556e98e461b856cb..631224b086890ae6e43f3ca3fb8fee0677c4866b:/test.rb diff --git a/test.rb b/test.rb index f87e41d..3c73ffa 100755 --- a/test.rb +++ b/test.rb @@ -18,178 +18,147 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. -require 'election' -require 'condorcet' -require 'positional' -require 'runoff' - -def print_winner(result) - if not result.winner? - puts "There is no winner." - elsif result.winners.length == 1 - puts "The winner is %s" % result.winners[0] - else - puts "There is a tie between the following candidates: %s" % result.winners.join(", ") - end -end - -def condorcet_test1 - puts "USING CONDORCET..." - puts "The winner should be: B" - - vote_array = Array.new - 3.times {vote_array << "ABC".split("")} - 3.times {vote_array << "CBA".split("")} - 2.times {vote_array << "BAC".split("")} +require 'test/unit' +require 'lib/rubyvote' - print_winner( PureCondorcetVote.new(vote_array).result ) -end - -def ssd_test1 - puts "USING CloneProofSSD..." - puts "The winner should be: E" - - vote_array = Array.new - 5.times {vote_array << "ACBED".split("")} - 5.times {vote_array << "ADECB".split("")} - 8.times {vote_array << "BEDAC".split("")} - 3.times {vote_array << "CABED".split("")} - 7.times {vote_array << "CAEBD".split("")} - 2.times {vote_array << "CBADE".split("")} - 7.times {vote_array << "DCEBA".split("")} - 8.times {vote_array << "EBADC".split("")} - - print_winner( CloneproofSSDVote.new(vote_array).result ) -end +class TestRubyvote < Test::Unit::TestCase -def ssd_test2 - puts "USING CloneProofSSD..." - puts "The winner should be: D" - - vote_array = Array.new - 5.times {vote_array << "ACBD".split("")} - 2.times {vote_array << "ACDB".split("")} - 3.times {vote_array << "ADCB".split("")} - 4.times {vote_array << "BACD".split("")} - 3.times {vote_array << "CBDA".split("")} - 3.times {vote_array << "CDBA".split("")} - 1.times {vote_array << "DACB".split("")} - 5.times {vote_array << "DBAC".split("")} - 4.times {vote_array << "DCBA".split("")} - - print_winner( CloneproofSSDVote.new(vote_array).result ) -end + def test_condorcet + vote_array = Array.new + 3.times {vote_array << "ABC".split("")} + 3.times {vote_array << "CBA".split("")} + 2.times {vote_array << "BAC".split("")} -def ssd_test3 - puts "USING CloneProofSSD..." - puts "The winner should be: B(?)" + assert_equal 'B', PureCondorcetVote.new(vote_array).result.winners[0][0] + end - vote_array = Array.new - 3.times {vote_array << "ABCD".split("")} - 2.times {vote_array << "DABC".split("")} - 2.times {vote_array << "DBCA".split("")} - 2.times {vote_array << "CBDA".split("")} + def test_ssd_1 + vote_array = Array.new + 5.times {vote_array << "ACBED".split("")} + 5.times {vote_array << "ADECB".split("")} + 8.times {vote_array << "BEDAC".split("")} + 3.times {vote_array << "CABED".split("")} + 7.times {vote_array << "CAEBD".split("")} + 2.times {vote_array << "CBADE".split("")} + 7.times {vote_array << "DCEBA".split("")} + 8.times {vote_array << "EBADC".split("")} + + assert_equal 'E', CloneproofSSDVote.new(vote_array).result.winners[0] + end - print_winner( CloneproofSSDVote.new(vote_array).result ) -end + def test_ssd_2 + vote_array = Array.new + 5.times {vote_array << "ACBD".split("")} + 2.times {vote_array << "ACDB".split("")} + 3.times {vote_array << "ADCB".split("")} + 4.times {vote_array << "BACD".split("")} + 3.times {vote_array << "CBDA".split("")} + 3.times {vote_array << "CDBA".split("")} + 1.times {vote_array << "DACB".split("")} + 5.times {vote_array << "DBAC".split("")} + 4.times {vote_array << "DCBA".split("")} + + assert_equal 'D', CloneproofSSDVote.new(vote_array).result.winners[0] + end + def test_ssd_3 + vote_array = Array.new + 3.times {vote_array << "ABCD".split("")} + 2.times {vote_array << "DABC".split("")} + 2.times {vote_array << "DBCA".split("")} + 2.times {vote_array << "CBDA".split("")} -def borda_test1 - puts "USING BORDA..." - puts "The winner should be: B" + assert_equal 'B', CloneproofSSDVote.new(vote_array).result.winners[0] + end - vote_array = Array.new - 3.times {vote_array << "ABC".split("")} - 3.times {vote_array << "CBA".split("")} - 2.times {vote_array << "BAC".split("")} + def test_borda + vote_array = Array.new + 3.times {vote_array << "ABC".split("")} + 3.times {vote_array << "CBA".split("")} + 2.times {vote_array << "BAC".split("")} - print_winner( BordaVote.new(vote_array).result ) -end + assert_equal 'B', BordaVote.new(vote_array).result.winners[0] + end -def plurality_test1 - puts "USING PLURALITY..." - puts "The winner should be: C" + def test_plurality + vote_array = "ABCABCABCCCBBAAABABABCCCCCCCCCCCCCA".split("") - vote_array = "ABCABCABCCCBBAAABABABCCCCCCCCCCCCCA".split("") + assert_equal 'C', PluralityVote.new(vote_array).result.winners[0] + end - print_winner( PluralityVote.new(vote_array).result ) -end + def test_approval + vote_array = Array.new + 10.times {vote_array << "AB".split("")} + 10.times {vote_array << "CB".split("")} + 11.times {vote_array << "AC".split("")} + 5.times {vote_array << "A".split("")} + assert_equal 'A', ApprovalVote.new(vote_array).result.winners[0] + end -def approval_test1 - puts "USING APPROVAL..." - puts "The winner should be: A" + def test_irv_1 + vote_array = Array.new + 142.times {vote_array << "ABCD".split("")} + 26.times {vote_array << "BCDA".split("")} + 15.times {vote_array << "CDBA".split("")} + 17.times {vote_array << "DCBA".split("")} - vote_array = Array.new - 10.times {vote_array << "AB".split("")} - 10.times {vote_array << "CB".split("")} - 11.times {vote_array << "AC".split("")} - 5.times {vote_array << "A".split("")} + assert_equal 'A', InstantRunoffVote.new(vote_array).result.winners[0] + end - print_winner( ApprovalVote.new(vote_array).result ) -end + def test_irv_2 + vote_array = Array.new + 42.times {vote_array << "ABCD".split("")} + 26.times {vote_array << "BCDA".split("")} + 15.times {vote_array << "CDBA".split("")} + 17.times {vote_array << "DCBA".split("")} -def runoff_test1 - puts "USING RUNOFF..." - puts "The winner shold be: A" + assert_equal 'D', InstantRunoffVote.new(vote_array).result.winners[0] + end - vote_array = Array.new - 142.times {vote_array << "ABCD".split("")} - 26.times {vote_array << "BCDA".split("")} - 15.times {vote_array << "CDBA".split("")} - 17.times {vote_array << "DCBA".split("")} + def test_irv_3 + vote_array = Array.new + 42.times {vote_array << "ABCD".split("")} + 26.times {vote_array << "ACBD".split("")} + 15.times {vote_array << "BACD".split("")} + 32.times {vote_array << "BCAD".split("")} + 14.times {vote_array << "CABD".split("")} + 49.times {vote_array << "CBAD".split("")} + 17.times {vote_array << "ABDC".split("")} + 23.times {vote_array << "BADC".split("")} + 37.times {vote_array << "BCDA".split("")} + 11.times {vote_array << "CADB".split("")} + 16.times {vote_array << "CBDA".split("")} + 54.times {vote_array << "ADBC".split("")} + 36.times {vote_array << "BDCA".split("")} + 42.times {vote_array << "CDAB".split("")} + 13.times {vote_array << "CDBA".split("")} + 51.times {vote_array << "DABC".split("")} + 33.times {vote_array << "DBCA".split("")} + 39.times {vote_array << "DCAB".split("")} + 12.times {vote_array << "DCBA".split("")} + + assert_equal 'C', InstantRunoffVote.new(vote_array).result.winners[0] + end - print_winner( InstantRunoffVote.new(vote_array).result ) -end + def test_irvlogic + vote_array = Array.new + 42.times {vote_array << "ABCD".split("")} + 26.times {vote_array << "BCDA".split("")} + 15.times {vote_array << "CDBA".split("")} + 15.times {vote_array << "DCBA".split("")} -def runoff_test2 - puts "USING RUNOFF..." - puts "The winner shold be: D" + assert_equal 'B', InstantRunoffLogicVote.new(vote_array).result + end - vote_array = Array.new - 42.times {vote_array << "ABCD".split("")} - 26.times {vote_array << "BCDA".split("")} - 15.times {vote_array << "CDBA".split("")} - 17.times {vote_array << "DCBA".split("")} + def test_range1 + vote_array = Array.new + 42.times {vote_array << {:A => 10, :B => 5, :C => 2, :D => 1}} + 26.times {vote_array << {:A => 1, :B => 10, :C => 5, :D => 2}} + 15.times {vote_array << {:A => 1, :B => 2, :C => 10, :D => 5}} + 17.times {vote_array << {:A => 1, :B => 2, :C => 5, :D => 10}} - print_winner( InstantRunoffVote.new(vote_array).result ) -end + assert_equal 'B', RangeVote.new(vote_array).result + end -def runoff_test3 - puts "USING RUNOFF..." - puts "The winner shold be: C" - - vote_array = Array.new - 42.times {vote_array << "ABCD".split("")} - 26.times {vote_array << "ACBD".split("")} - 15.times {vote_array << "BACD".split("")} - 32.times {vote_array << "BCAD".split("")} - 14.times {vote_array << "CABD".split("")} - 49.times {vote_array << "CBAD".split("")} - 17.times {vote_array << "ABDC".split("")} - 23.times {vote_array << "BADC".split("")} - 37.times {vote_array << "BCDA".split("")} - 11.times {vote_array << "CADB".split("")} - 16.times {vote_array << "CBDA".split("")} - 54.times {vote_array << "ADBC".split("")} - 36.times {vote_array << "BDCA".split("")} - 42.times {vote_array << "CDAB".split("")} - 13.times {vote_array << "CDBA".split("")} - 51.times {vote_array << "DABC".split("")} - 33.times {vote_array << "DBCA".split("")} - 39.times {vote_array << "DCAB".split("")} - 12.times {vote_array << "DCBA".split("")} - - print_winner( InstantRunoffVote.new(vote_array).result ) end - -condorcet_test1() -ssd_test1() -ssd_test2() -ssd_test3() -borda_test1() -plurality_test1() -approval_test1() -runoff_test1() -runoff_test2() -runoff_test3()