From: Kay Johansen Date: 2008-12-04T04:57:18+09:00 Subject: Re: [QUIZ] Befunge (#184) My solution looks like, not surprisingly, a giant case statement; not worth reprinting here. I did write my solution test-first, here are my tests. I didn't do a full implementation, but it turned out sufficient to run the "beer" sample programs. Thank you for the quiz, Matt, it was fun! -Kay require 'befunge' require 'test/unit' class BefungeTest < Test::Unit::TestCase def test_output_numbers befunge("1234....@").expect "4321" end def test_exit befunge("1.@2.@").expect "1" end def test_pop_empty_stack_returns_zero befunge(".@").expect "0" end def test_add befunge("12+.@").expect "3" end def test_subtract befunge("73-.@").expect "4" end def test_multiply befunge("53*.@").expect "15" end def test_divide befunge("83/.@").expect "2" end def test_modulo befunge("73%.@").expect "1" end def test_not_nonzero_is_zero befunge("7!.@").expect "0" end def test_not_zero_is_one befunge("0!.@").expect "1" end def test_greater_than befunge("43`.@").expect "1" end def test_less_than befunge("34`.@").expect "0" end def test_equal befunge("44`.@").expect "0" end def test_duplicate befunge("5:..@").expect "55" end def test_swap befunge('87\..@').expect "87" end def test_skip befunge("5#.@").expect "" end def test_pop befunge("12$.@").expect "1" end def test_space_is_noop befunge("4 .@").expect("4") end def test_stringmode befunge('"A".@').expect("65") end def test_output_character befunge('"A",@').expect("A") end def test_left befunge('12#@.<@').expect('21') end def test_right befunge('1<>@#.').expect('1') end def test_down befunge( <^@ EOD ).expect "3" end def test_loop_around_right befunge( <1 EOD ).expect "1" end def test_loop_around_down befunge( <.@ >1:|@ @ EOD ).expect("1") end def test_if_goes_down_if_zero befunge( <0:|@ >.@ EOD ).expect("0") end def test_pad_input_lines_to_maximum_length befunge( <2^ EOD ).expect("1") end protected def befunge(input) @befunge = Befunge.new(input) self end def expect(expected) assert_equal expected, @befunge.output end end