mirror of
https://github.com/mgcaret/of816.git
synced 2025-04-06 15:42:59 +00:00
more test coverage, 82% of system words now
This commit is contained in:
parent
e1fa237f03
commit
d8a202bae4
463
platforms/GoSXB/cov.yml
Normal file
463
platforms/GoSXB/cov.yml
Normal file
@ -0,0 +1,463 @@
|
||||
---
|
||||
'1': 383
|
||||
dup: 37
|
||||
'2': 216
|
||||
2dup: 13
|
||||
'3': 69
|
||||
3dup: 1
|
||||
'0': 398
|
||||
"?dup": 2
|
||||
over: 1
|
||||
'4': 34
|
||||
2over: 1
|
||||
pick: 1
|
||||
tuck: 1
|
||||
clear: 2
|
||||
drop: 23
|
||||
2drop: 1
|
||||
3drop: 1
|
||||
nip: 14
|
||||
":": 52
|
||||
'100': 3
|
||||
'200': 1
|
||||
'300': 1
|
||||
'400': 1
|
||||
'500': 1
|
||||
";": 53
|
||||
roll: 4
|
||||
rot: 1
|
||||
"-rot": 1
|
||||
swap: 19
|
||||
2swap: 1
|
||||
">r": 11
|
||||
r>: 11
|
||||
r@: 1
|
||||
depth: 1
|
||||
if: 24
|
||||
else: 19
|
||||
then: 29
|
||||
"-1": 171
|
||||
msb: 15
|
||||
'5': 37
|
||||
"+": 21
|
||||
"-5": 10
|
||||
"-2": 48
|
||||
mid-uint: 68
|
||||
"-": 11
|
||||
mid-uint+1: 65
|
||||
"*": 12
|
||||
"-3": 22
|
||||
rshift: 11
|
||||
or: 5
|
||||
u*: 6
|
||||
"/": 22
|
||||
'7': 17
|
||||
"-7": 14
|
||||
max-int: 129
|
||||
min-int: 128
|
||||
"*/": 19
|
||||
mod: 21
|
||||
"/mod": 21
|
||||
"*/mod": 19
|
||||
u/mod: 7
|
||||
1+: 18
|
||||
1-: 17
|
||||
2+: 2
|
||||
2-: 2
|
||||
abs: 4
|
||||
negate: 5
|
||||
max: 16
|
||||
min: 16
|
||||
bounds: 2
|
||||
'10': 8
|
||||
even: 4
|
||||
lshift: 6
|
||||
f: 3
|
||||
1s: 22
|
||||
xor: 7
|
||||
'8000': 2
|
||||
and: 12
|
||||
2*: 6
|
||||
">>a": 8
|
||||
invert: 8
|
||||
">>": 5
|
||||
0<: 7
|
||||
"-4": 1
|
||||
!!str '<<': 3
|
||||
0s: 16
|
||||
'4000': 2
|
||||
2/: 6
|
||||
u2/: 3
|
||||
not: 2
|
||||
s>d: 85
|
||||
d+: 25
|
||||
min-intd: 5
|
||||
hi-2int: 6
|
||||
max-2int: 5
|
||||
min-2int: 7
|
||||
lo-2int: 5
|
||||
d-: 26
|
||||
max-intd: 1
|
||||
um*: 14
|
||||
m*: 38
|
||||
max-uint: 77
|
||||
um/mod: 7
|
||||
fm/mod: 34
|
||||
sm/rem: 30
|
||||
'01020304': 4
|
||||
lbsplit: 1
|
||||
lwsplit: 1
|
||||
'0102': 3
|
||||
wbsplit: 1
|
||||
'04': 1
|
||||
'03': 1
|
||||
'02': 2
|
||||
'01': 2
|
||||
bljoin: 1
|
||||
bwjoin: 1
|
||||
'0304': 1
|
||||
wljoin: 1
|
||||
wbflip: 1
|
||||
lbflip: 1
|
||||
lwflip: 1
|
||||
"/c": 1
|
||||
"/w": 1
|
||||
"/l": 1
|
||||
"/n": 1
|
||||
ca+: 1
|
||||
wa+: 1
|
||||
la+: 1
|
||||
na+: 2
|
||||
ca1+: 2
|
||||
wa1+: 3
|
||||
la1+: 3
|
||||
na1+: 2
|
||||
"/c*": 1
|
||||
"/w*": 2
|
||||
"/l*": 2
|
||||
"/n*": 1
|
||||
aligned: 6
|
||||
char+: 6
|
||||
cell+: 10
|
||||
chars: 13
|
||||
cells: 3
|
||||
1st: 21
|
||||
2nd: 5
|
||||
u<: 16
|
||||
"@": 33
|
||||
"!": 13
|
||||
'6': 8
|
||||
2@: 4
|
||||
2!: 3
|
||||
'off': 1
|
||||
'on': 1
|
||||
1stc: 7
|
||||
2ndc: 5
|
||||
c@: 10
|
||||
c!: 6
|
||||
1stw: 9
|
||||
2ndw: 5
|
||||
w@: 8
|
||||
w!: 3
|
||||
ffff: 2
|
||||
"<w@": 1
|
||||
1stl: 7
|
||||
2ndl: 5
|
||||
l@: 4
|
||||
l!: 2
|
||||
ua-addr: 1
|
||||
a-addr: 14
|
||||
'1234': 2
|
||||
'123': 29
|
||||
'456': 3
|
||||
"+!": 2
|
||||
fbuf: 12
|
||||
'20': 3
|
||||
fill: 5
|
||||
move: 6
|
||||
sbuf: 3
|
||||
pad: 13
|
||||
constant: 3
|
||||
maxchar: 7
|
||||
chars/pad: 6
|
||||
erase: 3
|
||||
'43': 3
|
||||
'9': 5
|
||||
'52': 2
|
||||
blank: 1
|
||||
bl: 8
|
||||
dumptst: 1
|
||||
dump: 1
|
||||
parse-word: 6
|
||||
unaligned-l@: 1
|
||||
"$find": 7
|
||||
unaligned-l!: 1
|
||||
unaligned-w@: 1
|
||||
unaligned-w!: 1
|
||||
alloc-mem: 1
|
||||
debug-mem: 2
|
||||
free-mem: 2
|
||||
"(": 2
|
||||
")": 2
|
||||
">in": 1
|
||||
0>: 17
|
||||
ascii: 10
|
||||
parse: 1
|
||||
test/: 1
|
||||
test: 3
|
||||
source: 1
|
||||
word: 6
|
||||
count: 3
|
||||
"'": 37
|
||||
key?: 1
|
||||
0=: 27
|
||||
key: 1
|
||||
expect: 1
|
||||
span: 1
|
||||
accept: 1
|
||||
bell: 1
|
||||
bs: 1
|
||||
carret: 1
|
||||
linefeed: 1
|
||||
a: 8
|
||||
char: 1
|
||||
"[char]": 1
|
||||
control: 1
|
||||
.": 1
|
||||
test": 3
|
||||
".(": 1
|
||||
test): 1
|
||||
'41': 3
|
||||
emit: 1
|
||||
type: 1
|
||||
cr: 1
|
||||
space: 1
|
||||
'8': 2
|
||||
spaces: 1
|
||||
"#line": 1
|
||||
0>=: 8
|
||||
"#out": 1
|
||||
exit?: 1
|
||||
s": 32
|
||||
test"(41)": 2
|
||||
testa": 1
|
||||
comp: 1
|
||||
aaaaa": 1
|
||||
bbbb": 1
|
||||
pack: 1
|
||||
lcc: 2
|
||||
"=": 14
|
||||
b: 4
|
||||
upc: 2
|
||||
abc: 2
|
||||
"-trailing": 1
|
||||
hex: 5
|
||||
base: 5
|
||||
decimal: 1
|
||||
octal: 1
|
||||
123": 1
|
||||
"$number": 2
|
||||
$xyz": 2
|
||||
456": 1
|
||||
">number": 2
|
||||
3a: 1
|
||||
'30': 1
|
||||
do: 37
|
||||
i: 16
|
||||
digit: 4
|
||||
loop: 29
|
||||
'47': 1
|
||||
'67': 2
|
||||
'61': 1
|
||||
6a: 1
|
||||
d#: 1
|
||||
h#: 1
|
||||
o#: 1
|
||||
".": 3
|
||||
s.: 3
|
||||
u.: 3
|
||||
".r": 1
|
||||
u.r: 1
|
||||
".d": 1
|
||||
'15': 1
|
||||
".h": 1
|
||||
".s": 1
|
||||
"?": 1
|
||||
"(.)": 3
|
||||
0": 2
|
||||
-1": 1
|
||||
1": 4
|
||||
"(u.)": 3
|
||||
ffffffff": 1
|
||||
"<#": 5
|
||||
hold: 2
|
||||
'42': 1
|
||||
"#>": 4
|
||||
ba": 1
|
||||
sign: 3
|
||||
--": 1
|
||||
"#": 2
|
||||
01": 1
|
||||
"#s": 1
|
||||
u#s: 1
|
||||
u#>: 1
|
||||
"<": 26
|
||||
">": 29
|
||||
">=": 10
|
||||
between: 8
|
||||
within: 128
|
||||
0<=: 6
|
||||
"<=": 10
|
||||
0<>: 7
|
||||
u<=: 6
|
||||
u>: 6
|
||||
u>=: 6
|
||||
'false': 16
|
||||
'true': 4
|
||||
'234': 7
|
||||
case: 16
|
||||
endcase: 16
|
||||
of: 28
|
||||
endof: 28
|
||||
begin: 14
|
||||
while: 15
|
||||
repeat: 10
|
||||
until: 4
|
||||
n: 1
|
||||
"--": 1
|
||||
0,1,..n: 1
|
||||
recurse: 1
|
||||
"+loop": 8
|
||||
j: 8
|
||||
leave: 4
|
||||
"?leave": 2
|
||||
evaluate: 3
|
||||
eval: 1
|
||||
ge4: 1
|
||||
execute: 4
|
||||
quit: 1
|
||||
abort: 1
|
||||
abort": 1
|
||||
'111': 6
|
||||
'222': 6
|
||||
'333': 4
|
||||
'999': 4
|
||||
'11': 4
|
||||
'22': 4
|
||||
'33': 4
|
||||
'44': 4
|
||||
'345': 6
|
||||
unloop: 3
|
||||
exit: 2
|
||||
noop: 1
|
||||
catch: 3
|
||||
throw: 1
|
||||
x123: 3
|
||||
y123: 2
|
||||
2constant: 3
|
||||
x123456: 3
|
||||
y123456: 2
|
||||
value: 3
|
||||
val1: 6
|
||||
"-999": 1
|
||||
val2: 5
|
||||
to: 4
|
||||
"-333": 1
|
||||
val3: 3
|
||||
immediate: 5
|
||||
literal: 3
|
||||
variable: 1
|
||||
v1: 3
|
||||
'buffer:': 1
|
||||
alias: 1
|
||||
al2: 2
|
||||
defer: 1
|
||||
df1: 7
|
||||
behavior: 2
|
||||
struct: 2
|
||||
field: 2
|
||||
fld1: 2
|
||||
fld2: 2
|
||||
postpone: 4
|
||||
nop1: 2
|
||||
nop2: 2
|
||||
does>: 4
|
||||
create: 3
|
||||
cr1: 6
|
||||
">body": 3
|
||||
",": 2
|
||||
forget: 2
|
||||
forgetme3": 1
|
||||
forgetme2": 1
|
||||
forgetme1": 1
|
||||
da1: 1
|
||||
here: 7
|
||||
c,: 2
|
||||
w,: 1
|
||||
l,: 1
|
||||
align: 2
|
||||
allot: 1
|
||||
"[']": 2
|
||||
gt1string: 2
|
||||
find: 9
|
||||
gt2string: 1
|
||||
state: 2
|
||||
"[": 3
|
||||
csr: 2
|
||||
"]": 3
|
||||
wxt: 2
|
||||
supercalafrag: 1
|
||||
bd1: 1
|
||||
body>: 1
|
||||
recursive: 1
|
||||
rrv1: 4
|
||||
forth: 1
|
||||
environment?: 1
|
||||
code: 1
|
||||
label: 1
|
||||
c;: 1
|
||||
end-code: 1
|
||||
binary: 1
|
||||
bsx: 4
|
||||
7f: 1
|
||||
'80': 1
|
||||
ff: 1
|
||||
wsx: 4
|
||||
7fff: 1
|
||||
rdrop: 1
|
||||
r+1: 1
|
||||
">r@": 1
|
||||
dm1": 2
|
||||
"$create": 1
|
||||
last: 1
|
||||
dm1: 2
|
||||
">link": 1
|
||||
">name": 1
|
||||
foobar": 1
|
||||
"$tmpstr": 1
|
||||
a": 2
|
||||
foobaz": 2
|
||||
"$2value": 3
|
||||
bazbar": 2
|
||||
foobaz: 2
|
||||
bazbar: 2
|
||||
aconcat: 1
|
||||
fbbb: 3
|
||||
foobazbazbar": 1
|
||||
"$hex(": 1
|
||||
414243): 1
|
||||
abc": 1
|
||||
foo": 2
|
||||
cicomp: 1
|
||||
":temp": 1
|
||||
"[:": 1
|
||||
";]": 1
|
||||
"$empty-wl": 1
|
||||
"$env?-wl": 1
|
||||
"$sysif": 1
|
||||
"$direct": 1
|
||||
sqrtrem: 4
|
||||
'25': 1
|
||||
'31': 1
|
||||
"$memtop": 1
|
||||
u.0: 1
|
@ -1,3 +1,4 @@
|
||||
#!/bin/bash
|
||||
EXEBIN=${GOSXB:-gosxb}
|
||||
cd `dirname $0`
|
||||
exec ${EXEBIN} -load 0x200000:forth -rom-bank 0x20 -rom-file rom
|
||||
|
@ -142,6 +142,9 @@ def run_suite(suite, outfile = nil)
|
||||
@coverage[word.downcase] += 1 unless colons[word.downcase]
|
||||
end
|
||||
end
|
||||
if line =~ /\\.*\s+covers:\s*(\S+)\s*$/
|
||||
@coverage[$1.downcase] += 1
|
||||
end
|
||||
if prevline =~ /expect:\s*\"(.+)\"\s*$/
|
||||
unless line.chomp == $1
|
||||
STDERR.puts prevline
|
||||
|
16
test/5.3.4.3.fs
Normal file
16
test/5.3.4.3.fs
Normal file
@ -0,0 +1,16 @@
|
||||
testing 5.3.4.3 Get local arguments
|
||||
|
||||
: s= ( str len str len )
|
||||
2 pick over = if
|
||||
drop swap comp 0=
|
||||
else
|
||||
2drop 2drop false
|
||||
then
|
||||
;
|
||||
|
||||
t{ s" foo bar" bl left-parse-string s" foo" s= >r s" bar" s= r> -> true true }t
|
||||
t{ s" foo/bar" ascii / left-parse-string s" foo" s= >r s" bar" s= r> -> true true }t
|
||||
|
||||
hex
|
||||
t{ s" a5,f0" parse-2int -> f0 a5 }t
|
||||
t{ s" babe,cafe" parse-2int -> cafe babe }t
|
33
test/5.3.7.1.fs
Normal file
33
test/5.3.7.1.fs
Normal file
@ -0,0 +1,33 @@
|
||||
testing 5.3.7.1 Peek/poke
|
||||
|
||||
\ On the 65816, all memory regions are valid, even if there isn't anything there
|
||||
\ so these always succeed. We just test for correctness.
|
||||
|
||||
hex
|
||||
variable foobar
|
||||
f0e1d2c3 foobar !
|
||||
|
||||
t{ foobar cpeek -> c3 true }t
|
||||
t{ foobar 1 ca+ cpeek -> d2 true }t
|
||||
t{ foobar 2 ca+ cpeek -> e1 true }t
|
||||
t{ foobar 3 ca+ cpeek -> f0 true }t
|
||||
|
||||
t{ foobar wpeek -> d2c3 true }t
|
||||
t{ foobar 1 wa+ wpeek -> f0e1 true }t
|
||||
|
||||
t{ foobar lpeek -> f0e1d2c3 true }t
|
||||
|
||||
t{ 01020304 foobar lpoke -> true }t
|
||||
t{ foobar lpeek -> 01020304 true }t
|
||||
|
||||
t{ abcd foobar wpoke -> true }t
|
||||
t{ ef01 foobar 1 wa+ wpoke -> true }t
|
||||
t{ foobar wpeek -> abcd true }t
|
||||
t{ foobar 1 wa+ wpeek -> ef01 true }t
|
||||
t{ foobar lpeek -> ef01abcd true }t
|
||||
|
||||
t{ 22 foobar cpoke -> true }t
|
||||
t{ 33 foobar 2 ca+ cpoke -> true }t
|
||||
t{ foobar cpeek -> 22 true }t
|
||||
t{ foobar 2 ca+ cpeek -> 33 true }t
|
||||
t{ foobar lpeek -> ef33ab22 true }t
|
34
test/5.3.7.2.fs
Normal file
34
test/5.3.7.2.fs
Normal file
@ -0,0 +1,34 @@
|
||||
testing 5.3.7.1 Device-register access
|
||||
|
||||
\ On the 65816, no strictly atomic 16-bit accesses can occur as the data bus is only
|
||||
\ 8 bits. So the "register access" words are the same as their non-register equivalents.
|
||||
\ We just test for correctness.
|
||||
|
||||
hex
|
||||
variable foobar
|
||||
f0e1d2c3 foobar !
|
||||
|
||||
t{ foobar rb@ -> c3 }t
|
||||
t{ foobar 1 ca+ rb@ -> d2 }t
|
||||
t{ foobar 2 ca+ rb@ -> e1 }t
|
||||
t{ foobar 3 ca+ rb@ -> f0 }t
|
||||
|
||||
t{ foobar rw@ -> d2c3 }t
|
||||
t{ foobar 1 wa+ rw@ -> f0e1 }t
|
||||
|
||||
t{ foobar rl@ -> f0e1d2c3 }t
|
||||
|
||||
t{ 01020304 foobar rl! -> }t
|
||||
t{ foobar rl@ -> 01020304 }t
|
||||
|
||||
t{ abcd foobar rw! -> }t
|
||||
t{ ef01 foobar 1 wa+ rw! -> }t
|
||||
t{ foobar rw@ -> abcd }t
|
||||
t{ foobar 1 wa+ rw@ -> ef01 }t
|
||||
t{ foobar rl@ -> ef01abcd }t
|
||||
|
||||
t{ 22 foobar rb! -> }t
|
||||
t{ 33 foobar 2 ca+ rb! -> }t
|
||||
t{ foobar rb@ -> 22 }t
|
||||
t{ foobar 2 ca+ rb@ -> 33 }t
|
||||
t{ foobar rl@ -> ef33ab22 }t
|
4
test/5.3.7.4.fs
Normal file
4
test/5.3.7.4.fs
Normal file
@ -0,0 +1,4 @@
|
||||
testing 5.3.7.4 System information
|
||||
|
||||
hex
|
||||
t{ fcode-revision -> 30000 }t
|
@ -26,6 +26,7 @@ t{ 1 2 3 rot -> 2 3 1 }t
|
||||
t{ 1 2 3 -rot -> 3 1 2 }t
|
||||
t{ 1 2 swap -> 2 1 }t
|
||||
t{ 1 2 3 4 2swap -> 3 4 1 2 }t
|
||||
t{ 1 2 3 4 5 6 2rot -> 3 4 5 6 1 2 }t
|
||||
|
||||
testing 7.3.1.4 Return stack
|
||||
t{ 1 2 >r drop r> -> 2 }t \ both >r and r>
|
||||
|
@ -11,6 +11,7 @@ t{ bl word test count swap 0> -> 4 true }t
|
||||
|
||||
testing 7.3.4.2 Console input
|
||||
|
||||
\ covers: \
|
||||
t{ \ -> supercalafrag }t \ since 't{' is a nop this should be fine
|
||||
t{ ' key? 0= -> false }t
|
||||
t{ ' key 0= -> false }t
|
||||
|
@ -18,9 +18,21 @@ testing 7.3.8.2 Case statement
|
||||
ENDCASE
|
||||
;
|
||||
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ 1 CS1 -> 111 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ 2 CS1 -> 222 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ 3 CS1 -> 333 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ 4 CS1 -> 999 }T
|
||||
|
||||
\ Nested CASE's
|
||||
@ -38,11 +50,29 @@ T{ 4 CS1 -> 999 }T
|
||||
ENDCASE R> DROP
|
||||
;
|
||||
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ -1 1 CS2 -> 100 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ -1 2 CS2 -> 200 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ -1 3 CS2 -> -300 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ -2 1 CS2 -> -99 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ -2 2 CS2 -> -199 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ 0 2 CS2 -> 299 }T
|
||||
|
||||
\ Boolean short circuiting using CASE
|
||||
@ -55,9 +85,21 @@ T{ 0 2 CS2 -> 299 }T
|
||||
ENDCASE
|
||||
;
|
||||
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ 1 CS3 -> 11 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ 2 CS3 -> 22 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ 3 CS3 -> 33 }T
|
||||
\ covers: case
|
||||
\ covers: endof
|
||||
\ covers: case
|
||||
T{ 9 CS3 -> 44 }T
|
||||
|
||||
\ Empty CASE statements with/without default
|
||||
@ -167,10 +209,13 @@ DECIMAL
|
||||
|
||||
: T1 9 ;
|
||||
: C1 1 2 3 ['] T1 CATCH ;
|
||||
\ covers: CATCH
|
||||
T{ C1 -> 1 2 3 9 0 }T \ No THROW executed
|
||||
|
||||
: T2 8 0 THROW ;
|
||||
: C2 1 2 ['] T2 CATCH ;
|
||||
\ covers: catch
|
||||
\ covers: throw
|
||||
T{ C2 -> 1 2 8 0 }T \ 0 THROW does nothing
|
||||
|
||||
: T3 7 8 9 99 THROW ;
|
||||
|
@ -131,7 +131,14 @@ variable csr
|
||||
t{ : cst [ state @ csr ! ] ; -> }t
|
||||
t{ csr @ -> 0 }t
|
||||
|
||||
\ todo: compile [compile] compile,
|
||||
: ctestword compile true ;
|
||||
create comptest
|
||||
ctestword
|
||||
\ covers:compile
|
||||
t{ comptest @ -> ' true }t
|
||||
t{ ' false compile, comptest 1 na+ @ -> ' false }t
|
||||
t{ [compile] hex comptest 2 na+ @ -> ' hex }t
|
||||
|
||||
|
||||
testing 7.3.9.2.3 Dictionary search
|
||||
|
||||
|
8
test/7.5.1.fs
Normal file
8
test/7.5.1.fs
Normal file
@ -0,0 +1,8 @@
|
||||
testing 7.5.1 Automatic stack display
|
||||
|
||||
t{ showstack -> }t \ expect:"{ 0 : } OK"
|
||||
5 \ expect:"{ 1 : 5 } OK"
|
||||
drop
|
||||
t{ noshowstack -> }t
|
||||
t{ -> }t \ expect " OK"
|
||||
|
4
test/7.5.3.fs
Normal file
4
test/7.5.3.fs
Normal file
@ -0,0 +1,4 @@
|
||||
testing Dictionary
|
||||
|
||||
t{ ' words 0= -> false }t
|
||||
|
@ -76,4 +76,6 @@ hex
|
||||
|
||||
t{ $memtop @ 0= -> false }t
|
||||
|
||||
t{ 123 u.0 -> }t \ expect: "123 OK"
|
||||
t{ 123 u.0 -> }t \ expect: "123 OK"
|
||||
|
||||
t{ .version -> }t \ expect: /OF816/
|
||||
|
@ -61,6 +61,30 @@
|
||||
load:
|
||||
- tester.fs
|
||||
- 7.3.9.fs
|
||||
- name: 7.5.1 Automatic stack display
|
||||
load:
|
||||
- tester.fs
|
||||
- 7.5.1.fs
|
||||
- name: 7.5.3 Dictionary
|
||||
load:
|
||||
- tester.fs
|
||||
- 7.5.3.fs
|
||||
- name: 5.3.4.3 Get local arguments
|
||||
load:
|
||||
- tester.fs
|
||||
- 5.3.4.3.fs
|
||||
- name: 5.3.7.1 Peek/poke
|
||||
load:
|
||||
- tester.fs
|
||||
- 5.3.7.1.fs
|
||||
- name: 5.3.7.2 Device-register access
|
||||
load:
|
||||
- tester.fs
|
||||
- 5.3.7.2.fs
|
||||
- name: 5.3.7.4 System-information
|
||||
load:
|
||||
- tester.fs
|
||||
- 5.3.7.4.fs
|
||||
- name: OF816 Words
|
||||
load:
|
||||
- tester.fs
|
||||
|
@ -1,10 +1,25 @@
|
||||
#!/usr/bin/ruby
|
||||
require 'yaml'
|
||||
|
||||
index_file = ARGV.shift || usage
|
||||
File.readable?(index_file) || abort("#{index_file} not found!")
|
||||
def usage
|
||||
puts <<EOF
|
||||
Usage: #{$0} index-file|-
|
||||
|
||||
index = YAML.load(File.read(index_file))
|
||||
Reads index file (- for stdin) and produces a test coverage
|
||||
report. The index file must have been merged with test
|
||||
coverage data or all words will be reporteed as uncovered.
|
||||
EOF
|
||||
exit 1
|
||||
end
|
||||
|
||||
index_file = ARGV.shift || usage
|
||||
|
||||
if index_file == '-'
|
||||
index = YAML.load(STDIN.read)
|
||||
else
|
||||
File.readable?(index_file) || abort("#{index_file} not found!")
|
||||
index = YAML.load(File.read(index_file))
|
||||
end
|
||||
|
||||
covered = []
|
||||
uncovered = []
|
||||
@ -22,7 +37,7 @@ cov_percent = covered.count * 100 / (covered.count+uncovered.count)
|
||||
puts "Total words: #{covered.count+uncovered.count}"
|
||||
puts "Covered words: #{covered.count}"
|
||||
puts "Uncovered words: #{uncovered.count}"
|
||||
uncovered.each_slice(5) do |sl|
|
||||
uncovered.sort.each_slice(5) do |sl|
|
||||
puts "\t#{sl.join(' ')}"
|
||||
end
|
||||
puts "Coverage: #{cov_percent}%"
|
||||
|
Loading…
x
Reference in New Issue
Block a user