소스 검색

add first spec for mal test cases (step2)

master
rhysd 9 년 전
부모
커밋
1c0ef5dfbe
2개의 변경된 파일62개의 추가작업 그리고 0개의 파일을 삭제
  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 파일 보기

@ -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 파일 보기

@ -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

불러오는 중...
취소
저장