-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.lil
More file actions
73 lines (57 loc) · 1.43 KB
/
test.lil
File metadata and controls
73 lines (57 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
:- module("test").
:- module_interface.
:- ensure_loaded("types").
:- ensure_loaded("grammar").
test <- [pred].
test_line <- [pred].
:- module_implementation.
print_stdout <- [pred].
print_stdout($str) :-
stdout_stream($out),
writeln_string($out, $str).
passed <- [pred].
passed($line, $passed) :-
strcat(" ", $passed, $str1),
strcat($str1, $line, $str),
print_stdout($str).
failed <- [pred].
failed($line, $passed) :-
strcat("X ", $passed, $str1),
strcat($str1, $line, $str),
print_stdout($str).
check_line_cases <- [pred].
check_line_cases([], _) :- !. % empty line
check_line_cases([35, 35 | $line], _) :- % printable comment
!,
listtostr([32, 32, 32, 32 | $line], $str),
print_stdout($str).
check_line_cases([35 | _], _). % non-printable comment
check_line_cases([42 | $list], $line) :- % bad line
listtostr($list, $badline),
(
parse($badline)
-> failed($line, "OK ")
; passed($line, "NG ")
), !.
check_line_cases(_, $line) :- % good line
( parse($line)
-> passed($line, "OK ")
; failed($line, "NG ")
), !.
test_line("__END__") :- !, fail.
test_line($line) :-
strtolist($line, $list),
check_line_cases($list, $line).
test_case <- [pred].
test_case($handle) :-
readln_string($handle, $line)
-> (test_line($line)
-> test_case($handle)
; true)
; true.
test :-
open_file_stream("test.txt", "r", $handle),
test_case($handle),
close($handle).
% WEIRD:
% :- test.