mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	test/test_trick.rb: Add a test file for TRICK entries (#3988)
* test/test_trick.rb: Add a test file for TRICK entries Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
This commit is contained in:
		
							parent
							
								
									6a0bbc55b6
								
							
						
					
					
						commit
						09216f63ba
					
				
				
				Notes:
				
					git
				
				2020-12-25 15:23:02 +09:00 
				
			
			Merged-By: mame <mame@ruby-lang.org>
					 1 changed files with 191 additions and 0 deletions
				
			
		
							
								
								
									
										191
									
								
								test/test_trick.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								test/test_trick.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,191 @@
 | 
				
			||||||
 | 
					require "test/unit"
 | 
				
			||||||
 | 
					require "ripper"
 | 
				
			||||||
 | 
					require "envutil"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This is a test suite for TRICK entries, joke Ruby program contest.
 | 
				
			||||||
 | 
					# The programs are very unusual, and not practical.
 | 
				
			||||||
 | 
					# Feel free to comment them out if they bother you.
 | 
				
			||||||
 | 
					# I'll appreciate it if you could notify mame <mame@ruby-lang.org>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestTRICK2013 < Test::Unit::TestCase
 | 
				
			||||||
 | 
					  def test_kinaba
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2013/kinaba/entry.rb")
 | 
				
			||||||
 | 
					    expected = [*" ".."~"].join("") # all ASCII printables
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", src], "", [expected])
 | 
				
			||||||
 | 
					    assert_equal(expected, File.read(src).chomp.chars.sort.join)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_mame
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2013/mame/entry.rb")
 | 
				
			||||||
 | 
					    ignore_dsp = "def open(_file, _mode); s = ''; def s.flush; self;end; yield s; end;"
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0"], ignore_dsp + File.read(src), File.read(src).lines(chomp: true))
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_shinh
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2013/shinh/entry.rb")
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", src], "", [])
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_yhara
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2013/yhara/entry.rb")
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", src], "", ["JUST ANOTHER RUBY HACKER"])
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestTRICK2015 < Test::Unit::TestCase
 | 
				
			||||||
 | 
					  def test_kinaba
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2015/kinaba/entry.rb")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # calculate the first 10000 digits of Pi
 | 
				
			||||||
 | 
					    n = 10000
 | 
				
			||||||
 | 
					    a = b = 10 ** n
 | 
				
			||||||
 | 
					    (n * 8 + 1).step(3, -2) do |i|
 | 
				
			||||||
 | 
					        a = (i / 2) * (a + b * 2) / i
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    pi = "3#{ a - b }"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", src], "", [pi])
 | 
				
			||||||
 | 
					    assert_equal(pi[0, 242], Ripper.tokenize(File.read(src)).grep(/\S/).map{|t|t.size%10}.join)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_ksk_1
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2015/ksk_1/entry.rb")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # calculate Collatz sequence
 | 
				
			||||||
 | 
					    s = ["27"]
 | 
				
			||||||
 | 
					    n = 27
 | 
				
			||||||
 | 
					    until n == 1
 | 
				
			||||||
 | 
					      n = n.even? ? n / 2 : n * 3 + 1
 | 
				
			||||||
 | 
					      s << n.to_s
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", src, "27"], "", s)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_monae
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2015/monae/entry.rb")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    code = File.read(src)
 | 
				
			||||||
 | 
					    expected = code.lines(chomp: true) + (0..15).map { "" }
 | 
				
			||||||
 | 
					    code.lines.each_with_index do |s, y|
 | 
				
			||||||
 | 
					      y += 16
 | 
				
			||||||
 | 
					      s.chomp.chars.each_with_index do |c, x|
 | 
				
			||||||
 | 
					        x += 16
 | 
				
			||||||
 | 
					        expected[y] << " " while expected[y].size < x
 | 
				
			||||||
 | 
					        expected[y][x] = c if c != " "
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    expected = /\A#{ expected.map {|s| "#{ Regexp.quote(s) }\s*\n" }.join }\z/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", src], "", expected)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_eregon
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2015/eregon/entry.rb")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", src], "", <<END.lines(chomp: true))
 | 
				
			||||||
 | 
					1 9 4 2 3 8 7 6 5
 | 
				
			||||||
 | 
					3 7 2 6 5 1 4 8 9
 | 
				
			||||||
 | 
					8 5 6 7 4 9 2 3 1
 | 
				
			||||||
 | 
					7 8 1 3 6 4 5 9 2
 | 
				
			||||||
 | 
					4 2 3 9 7 5 8 1 6
 | 
				
			||||||
 | 
					5 6 9 8 1 2 3 7 4
 | 
				
			||||||
 | 
					6 4 8 1 2 7 9 5 3
 | 
				
			||||||
 | 
					9 3 5 4 8 6 1 2 7
 | 
				
			||||||
 | 
					2 1 7 5 9 3 6 4 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1 9 7 2 3 8 4 6 5
 | 
				
			||||||
 | 
					3 4 2 6 5 1 7 8 9
 | 
				
			||||||
 | 
					8 5 6 7 4 9 2 3 1
 | 
				
			||||||
 | 
					7 1 8 3 6 4 5 9 2
 | 
				
			||||||
 | 
					4 2 3 9 7 5 8 1 6
 | 
				
			||||||
 | 
					5 6 9 8 1 2 3 7 4
 | 
				
			||||||
 | 
					6 8 4 1 2 7 9 5 3
 | 
				
			||||||
 | 
					9 3 5 4 8 6 1 2 7
 | 
				
			||||||
 | 
					2 7 1 5 9 3 6 4 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_ksk_2
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2015/ksk_2/entry.rb")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    inp = <<END
 | 
				
			||||||
 | 
					c
 | 
				
			||||||
 | 
					c This is a sample input file.
 | 
				
			||||||
 | 
					c
 | 
				
			||||||
 | 
					p cnf 3 5
 | 
				
			||||||
 | 
					 1 -2  3 0
 | 
				
			||||||
 | 
					-1  2 0
 | 
				
			||||||
 | 
					-2 -3 0
 | 
				
			||||||
 | 
					 1  2 -3 0
 | 
				
			||||||
 | 
					 1  3 0
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", src], inp, ["s SATISFIABLE", "v 1 2 -3"])
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestTRICK2018 < Test::Unit::TestCase
 | 
				
			||||||
 | 
					  def test_01_kinaba
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2018/01-kinaba/entry.rb")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", src], "", [])
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_02_mame
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2018/02-mame/entry.rb")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ignore_sleep = "def sleep(_); end;"
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0"], ignore_sleep + File.read(src)) do |stdout, _stderr, _status|
 | 
				
			||||||
 | 
					      code = stdout.join("\n") + "\n"
 | 
				
			||||||
 | 
					      expected = code.lines(chomp: true)
 | 
				
			||||||
 | 
					      assert_in_out_err(["-W0"], ignore_sleep + code, expected)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_03_tompng
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2018/03-tompng/entry.rb")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # only syntax check because it requires chunky_png
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", "-c", src], "", ["Syntax OK"])
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_04_colin
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2018/04-colin/entry.rb")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    code = "# encoding: UTF-8\n" + File.read(src) + <<END
 | 
				
			||||||
 | 
					\u{1F914} "Math" do
 | 
				
			||||||
 | 
					  \u{1F914} "Addition" do
 | 
				
			||||||
 | 
					    \u{1F914} "One plus one equals two.",
 | 
				
			||||||
 | 
					      1+1 == 2
 | 
				
			||||||
 | 
					    \u{1F914} "One plus one equals eleven. (This should fail.)",
 | 
				
			||||||
 | 
					      1+1 == 11
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  \u{1F914} "Subtraction" do
 | 
				
			||||||
 | 
					    \u{1F914} "One minus one equals zero.",
 | 
				
			||||||
 | 
					      1-1 == 0
 | 
				
			||||||
 | 
					    \u{1F914} "Ten minus one equal nine.",
 | 
				
			||||||
 | 
					      10-1 == 9
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0"], code, <<END.lines(chomp: true))
 | 
				
			||||||
 | 
					Math
 | 
				
			||||||
 | 
					    Addition
 | 
				
			||||||
 | 
					        One plus one equals two.
 | 
				
			||||||
 | 
					        \u{1F6AB} One plus one equals eleven. (This should fail.)
 | 
				
			||||||
 | 
					    Subtraction
 | 
				
			||||||
 | 
					        One minus one equals zero.
 | 
				
			||||||
 | 
					        Ten minus one equal nine.
 | 
				
			||||||
 | 
					END
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_05_tompng
 | 
				
			||||||
 | 
					    src = File.join(__dir__, "../sample/trick2018/05-tompng/entry.rb")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # only syntax check because it generates 3D model data
 | 
				
			||||||
 | 
					    assert_in_out_err(["-W0", "-c", src], "", ["Syntax OK"])
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue