chiark / gitweb /
@@@ so much mess
[mLib] / test / tests.at
CommitLineData
b64eb60f
MW
1### -*-autotest-*-
2###
3### Test script for test machinery
4###
5### (c) 2023 Straylight/Edgeware
6###
7
8###----- Licensing notice ---------------------------------------------------
9###
10### This file is part of the mLib utilities library.
11###
12### mLib is free software; you can redistribute it and/or modify
13### it under the terms of the GNU Library General Public License as
14### published by the Free Software Foundation; either version 2 of the
15### License, or (at your option) any later version.
16###
17### mLib is distributed in the hope that it will be useful,
18### but WITHOUT ANY WARRANTY; without even the implied warranty of
19### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20### GNU Library General Public License for more details.
21###
22### You should have received a copy of the GNU Library General Public
23### License along with mLib; if not, write to the Free
24### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
25### MA 02111-1307, USA.
26
27###--------------------------------------------------------------------------
e63124bc 28### Preliminaries.
b64eb60f 29
e63124bc
MW
30dnl padding_string(STRING, N, [PAD])
31m4_define([padding_string],
32[m4_if([m4_expr([m4_len([$1]) > $2])], [1], [],
33[m4_for([i], m4_len([$1]), [($2) - 1], [1], [m4_default([$3], [ ])])])])
b64eb60f 34
e63124bc
MW
35dnl left_pad(STRING, N, [PAD])
36dnl right_pad(STRING, N, [PAD])
37m4_define([left_pad], [padding_string([$1], [$2], [$3])$1])
38m4_define([right_pad], [$1[]padding_string([$1], [$2], [$3])])
39
40dnl check_template(CMD, RC, STDOUT, STDERR)
41m4_define([check_template], [
42AT_CHECK([$1], [$2], [stdout], [stderr-nolog])
43AT_DATA([expout.tpl], [$3])
44$PYTHON $abs_srcdir/template-canonify expout.tpl stdout expout stdout.found
45AT_DATA([experr.tpl], [$4])
46$PYTHON $abs_srcdir/template-canonify experr.tpl stderr experr stderr.found
47AT_CHECK([cat stdout.found; cat stderr.found >&2], [0], [expout], [experr])])
b64eb60f
MW
48
49dnl test_parse(TY, IN, OUT)
50m4_define([test_parse], [
51AT_DATA([tv],
52[;;; -*-conf-*-
e63124bc 53@<:@$1@:>@
b64eb60f 54$1 = $2
e63124bc 55@show = t
b64eb60f 56])
e63124bc
MW
57check_template([BUILDDIR/t/tvec.t -fh tv], [0],
58[left_pad([matched $1], [17]) = $3
59$1: ok
60PASSED all 1 test in 1 group
b64eb60f
MW
61])])
62
63dnl test_parserr(TY, IN, LNO, ERR)
64m4_define([test_parserr], [
65AT_DATA([tv],
66[;;; -*-conf-*-
e63124bc 67@<:@$1@:>@
b64eb60f 68$1 = $2
b64eb60f 69])
e63124bc
MW
70check_template([BUILDDIR/t/tvec.t -fh tv], [2],
71[tv:$3: $4
72tv:={N:\d+}: required register `$1' not set in test `$1'
73$1: skipped: no tests to run
74PASSED 0 tests in 0 groups (1 skipped)
75ERRORS found in input; tests may not have run correctly
76],
b64eb60f 77[tvec.t: tv:$3: $4
e63124bc 78tvec.t: tv:={N:\d+}: required register `$1' not set in test `$1'
b64eb60f
MW
79])])
80
e63124bc 81###--------------------------------------------------------------------------
b64eb60f 82AT_SETUP(tvec type-int)
e63124bc
MW
83
84test_parse([int], [4], [4 ; = 0x04 = '\x04'])
85test_parse([int], [ 17; comment], [17 ; = 0x11 = '\x11'])
86
87test_parse([int], [0x234], [564 ; = 0x0234])
88test_parse([int], [033], [27 ; = 0x1b = '\e'])
89
90test_parse([int], [ +192], [192 ; = 0xc0 = '\xc0'])
91test_parse([int], [ -192], [-192 ; = -0xc0])
92
b64eb60f
MW
93test_parserr([int], [17 : badness], [3],
94 [syntax error: expected end-of-line but found `:'])
95test_parserr([int], [17: badness], [3],
96 [syntax error: expected end-of-line but found `:'])
e63124bc 97
b64eb60f
MW
98test_parserr([int], [xyzzy], [3],
99 [syntax error: expected signed integer but found `x'])
100test_parserr([int], [-splat], [3],
101 [syntax error: expected signed integer but found `s'])
e63124bc 102
b64eb60f
MW
103test_parserr([int], [0xq], [3],
104 [syntax error: expected end-of-line but found `x'])
105test_parserr([int], [0x], [3],
106 [syntax error: expected end-of-line but found `x'])
e63124bc 107
b64eb60f 108test_parserr([int], [], [3],
e63124bc
MW
109 [syntax error: expected signed integer but found @%:@<eol>])
110
b64eb60f 111test_parserr([int], [123456], [3],
e63124bc
MW
112 [integer 123456 out of range (must be in @<:@-32768 .. 32767@:>@)])
113
b64eb60f
MW
114AT_CLEANUP
115
e63124bc 116###--------------------------------------------------------------------------
b64eb60f 117AT_SETUP(tvec type-uint)
e63124bc
MW
118
119test_parse([uint], [4], [4 ; = 0x04 = '\x04'])
120test_parse([uint], [ 17; comment], [17 ; = 0x11 = '\x11'])
121
122test_parse([uint], [0x234], [564 ; = 0x0234])
123test_parse([uint], [033], [27 ; = 0x1b = '\e'])
124
b64eb60f
MW
125test_parserr([uint], [17 : badness], [3],
126 [syntax error: expected end-of-line but found `:'])
127test_parserr([uint], [17: badness], [3],
128 [syntax error: expected end-of-line but found `:'])
e63124bc 129
b64eb60f
MW
130test_parserr([uint], [ +192], [3],
131 [syntax error: expected unsigned integer but found `+'])
132test_parserr([uint], [ -192], [3],
133 [syntax error: expected unsigned integer but found `-'])
e63124bc 134
b64eb60f
MW
135test_parserr([uint], [xyzzy], [3],
136 [syntax error: expected unsigned integer but found `x'])
e63124bc 137
b64eb60f
MW
138test_parserr([uint], [0xq], [3],
139 [syntax error: expected end-of-line but found `x'])
140test_parserr([uint], [0x], [3],
141 [syntax error: expected end-of-line but found `x'])
e63124bc 142
b64eb60f 143test_parserr([uint], [], [3],
e63124bc
MW
144 [syntax error: expected unsigned integer but found @%:@<eol>])
145
b64eb60f 146test_parserr([uint], [123456], [3],
e63124bc
MW
147 [integer 123456 out of range (must be in @<:@0 .. 65535@:>@)])
148
b64eb60f
MW
149AT_CLEANUP
150
e63124bc
MW
151###--------------------------------------------------------------------------
152AT_SETUP([tvec type-float])
153
154test_parse([float], [1.234], [1.234])
155
156AT_CLEANUP
157
158###--------------------------------------------------------------------------
b64eb60f 159AT_SETUP([tvec type-enum])
e63124bc
MW
160
161test_parse([ienum], [less], [less ; = -1 = -0x01 = @%:@eof])
162test_parse([ienum], [+1], [greater ; = 1 = 0x01 = '\x01'])
163test_parse([ienum], [17], [17 ; = 0x11 = '\x11'])
164
165test_parse([uenum], [banana], [banana ; = 1 = 0x01 = '\x01'])
166test_parse([uenum], [clementine], [clementine ; = 2 = 0x02 = '\x02'])
167test_parse([uenum], [17], [17 ; = 0x11 = '\x11'])
168
169test_parse([penum], [carol], [carol ; = @%:@<actor ={ACTOR:@<:@^>@:>@*}>])
170test_parse([penum], [alice], [alice ; = @%:@<actor ={ACTOR:@<:@^>@:>@*}>])
b64eb60f 171test_parse([penum], [@%:@nil], [@%:@nil])
e63124bc
MW
172
173AT_CLEANUP
174
175###--------------------------------------------------------------------------
176AT_SETUP([tvec serialize])
177
178AT_DATA([tv],
179[@<:@types@:>@
180
181int = -2
182uint = 7
183float = 6.28
184fltish = 0.1
185char = x
186ienum = greater
187uenum = banana
188fenum = tau
189penum = alice
190flags = red-fg | white-bg | bright
191string = "Hello, world!"
192bytes =
193 2923be84 e16cd6ae 529049f1 f1bbe9eb
194 b3a6db3c 870c3e99 245e0d1c 06b747de
195 b3124dc8 43bb8ba6 1f035a7d 0938251f
196 5dd4cbfc 96f5453b 130d890a 1cdbae32
197 209a50ee 407836fd 124932f6 9e7d49dc
198 ad4f14f2 444066d0 6bc430b7 323ba122
199 f622919d e18b1fda b0ca9902 b9729d49
200 2c807ec5 99d5e980 b2eac9cc 53bf67d6
201])
202AT_CHECK([BUILDDIR/t/tvec.t -fh tv], [0], [ignore])
203
b64eb60f
MW
204AT_CLEANUP
205
206###----- That's all, folks --------------------------------------------------