Browse Source

add first spec for mal test cases (step2)

master
rhysd 9 years ago
parent
commit
1c0ef5dfbe
2 changed files with 62 additions and 0 deletions
  1. +40
    -0
      spec/crisp/mal_specs/mal_spec_runner.cr
  2. +22
    -0
      spec/crisp/mal_specs/mal_tests_spec.cr

+ 40
- 0
spec/crisp/mal_specs/mal_spec_runner.cr View File

@ -0,0 +1,40 @@
class MalTestRunner
def initialize(@test_file)
end
private macro check_EOF
return if l.is_a? Iterator::Stop
end
def each_test
lines = File.open(@test_file).each_line
until (l = lines.next).is_a? Iterator::Stop
while l =~ /^\s*(;|$)/
l = lines.next
check_EOF
end
check_EOF
input = l
output = [] of String
loop do
l = lines.next
check_EOF
if l =~ /^; /
output << l[2..-1]
else
break
end
end
if l =~ /^;=>/
yield input, output, l[3..-1]
else
yield input, output, nil
end
end
end
end

+ 22
- 0
spec/crisp/mal_specs/mal_tests_spec.cr View File

@ -0,0 +1,22 @@
require "../../helper"
require "./mal_spec_runner.cr"
describe "'Make a Lisp' tests" do
it "tests step2 of mal" do
runner = MalTestRunner.new(__DIR__ + "/tests/step2_eval.mal")
i = Crisp::Interpreter.new
runner.each_test do |input, output, result|
if result
r = i.print i.eval_string(input)
else
output.empty?.should be_false
begin
i.eval_string(input)
rescue e
e.message.should match(/#{output.last.chomp}/)
end
end
end
end
end

Loading…
Cancel
Save