From 631224b086890ae6e43f3ca3fb8fee0677c4866b Mon Sep 17 00:00:00 2001 From: Benjamin Mako Hill Date: Mon, 12 Mar 2007 20:17:25 +0000 Subject: [PATCH 1/1] Merged in changes that added unit test support by Joe Slag. Thanks! We now have two unit test setups in here. We should deal with this one way or another. I'd like to keep around *a* test.rb file but the rakefile is a good method as well. git-svn-id: svn://rubyforge.org/var/svn/rubyvote/trunk@14 1440c7f4-e209-0410-9a04-881b5eb134a8 --- test.rb | 294 +++++++++++++++++++++++--------------------------------- 1 file changed, 119 insertions(+), 175 deletions(-) diff --git a/test.rb b/test.rb index 6b0b5c1..3c73ffa 100755 --- a/test.rb +++ b/test.rb @@ -18,203 +18,147 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. +require 'test/unit' require 'lib/rubyvote' -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("")} - - 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 - -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 ssd_test3 - puts "USING CloneProofSSD..." - puts "The winner should be: B(?)" - - 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("")} - - print_winner( CloneproofSSDVote.new(vote_array).result ) -end +class TestRubyvote < Test::Unit::TestCase + 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 borda_test1 - puts "USING BORDA..." - 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("")} - - print_winner( BordaVote.new(vote_array).result ) -end + assert_equal 'B', PureCondorcetVote.new(vote_array).result.winners[0][0] + end -def plurality_test1 - puts "USING PLURALITY..." - puts "The winner should be: C" + 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 - vote_array = "ABCABCABCCCBBAAABABABCCCCCCCCCCCCCA".split("") + 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 - print_winner( PluralityVote.new(vote_array).result ) -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("")} + assert_equal 'B', CloneproofSSDVote.new(vote_array).result.winners[0] + end -def approval_test1 - puts "USING APPROVAL..." - puts "The winner should be: A" + 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("")} - 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 'B', BordaVote.new(vote_array).result.winners[0] + end - print_winner( ApprovalVote.new(vote_array).result ) -end + def test_plurality + vote_array = "ABCABCABCCCBBAAABABABCCCCCCCCCCCCCA".split("") -def irv_test1 - puts "USING IRV..." - puts "The winner shold be: A" + assert_equal 'C', PluralityVote.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_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("")} - print_winner( InstantRunoffVote.new(vote_array).result ) -end + assert_equal 'A', ApprovalVote.new(vote_array).result.winners[0] + end -def irv_test2 - puts "USING IRV..." - puts "The winner shold be: D" + 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 - 42.times {vote_array << "ABCD".split("")} - 26.times {vote_array << "BCDA".split("")} - 15.times {vote_array << "CDBA".split("")} - 17.times {vote_array << "DCBA".split("")} + assert_equal 'A', InstantRunoffVote.new(vote_array).result.winners[0] + end - print_winner( InstantRunoffVote.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 irv_test3 - puts "USING IRV..." - 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 + assert_equal 'D', InstantRunoffVote.new(vote_array).result.winners[0] + end -def irvlogic_test1 - puts "USING IRV LOGIC..." - puts "The winner shold be: B" + 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 - 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 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("")} - print_winner( InstantRunoffLogicVote.new(vote_array).result ) -end + assert_equal 'B', InstantRunoffLogicVote.new(vote_array).result + end -def range_test1 - puts "USING RANGE..." - puts "The winner shold be: B" + 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}} - 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}} + assert_equal 'B', RangeVote.new(vote_array).result + end - print_winner( RangeVote.new(vote_array).result ) end - -condorcet_test1() -ssd_test1() -ssd_test2() -ssd_test3() -borda_test1() -plurality_test1() -approval_test1() -irv_test1() -irv_test2() -irv_test3() -irvlogic_test1() -range_test1() -- 2.39.5