| 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 | ###-------------------------------------------------------------------------- |
| 28 | ### Preliminaries. |
| 29 | |
| 30 | dnl padding_string(STRING, N, [PAD]) |
| 31 | m4_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], [ ])])])]) |
| 34 | |
| 35 | dnl left_pad(STRING, N, [PAD]) |
| 36 | dnl right_pad(STRING, N, [PAD]) |
| 37 | m4_define([left_pad], [padding_string([$1], [$2], [$3])$1]) |
| 38 | m4_define([right_pad], [$1[]padding_string([$1], [$2], [$3])]) |
| 39 | |
| 40 | dnl check_template(CMD, RC, STDOUT, STDERR) |
| 41 | m4_define([check_template], [ |
| 42 | AT_CHECK([$1], [$2], [stdout], [stderr-nolog]) |
| 43 | AT_DATA([expout.tpl], [$3]) |
| 44 | $PYTHON $abs_srcdir/template-canonify expout.tpl stdout expout stdout.found |
| 45 | AT_DATA([experr.tpl], [$4]) |
| 46 | $PYTHON $abs_srcdir/template-canonify experr.tpl stderr experr stderr.found |
| 47 | AT_CHECK([cat stdout.found; cat stderr.found >&2], [0], [expout], [experr])]) |
| 48 | |
| 49 | dnl test_parse(TY, IN, OUT) |
| 50 | m4_define([test_parse], [ |
| 51 | AT_DATA([tv], |
| 52 | [;;; -*-conf-*- |
| 53 | @<:@copy-$1@:>@ |
| 54 | $1 = $2 |
| 55 | @show = t |
| 56 | ]) |
| 57 | check_template([BUILDDIR/t/tvec.t -fh tv], [0], |
| 58 | [left_pad([matched $1], [21]) = $3 |
| 59 | copy-$1: ok |
| 60 | PASSED all 1 test in 1 group |
| 61 | ])]) |
| 62 | |
| 63 | dnl test_parserr(TY, IN, LNO, ERR) |
| 64 | m4_define([test_parserr], [ |
| 65 | AT_DATA([tv], |
| 66 | [;;; -*-conf-*- |
| 67 | @<:@copy-$1@:>@ |
| 68 | $1 = $2 |
| 69 | ]) |
| 70 | check_template([BUILDDIR/t/tvec.t -fh tv], [2], |
| 71 | [tv:$3: ERROR: $4 |
| 72 | tv:={N:\d+}: ERROR: required register `$1' not set in test `copy-$1' |
| 73 | tv:={N:\d+}: `copy-$1' skipped: erroneous test data |
| 74 | copy-$1 skipped |
| 75 | PASSED 0 tests (1 skipped) in 0 groups (1 skipped) |
| 76 | ERRORS found in input; tests may not have run correctly |
| 77 | ], |
| 78 | [tvec.t: tv:$3: ERROR: $4 |
| 79 | tvec.t: tv:={N:\d+}: ERROR: required register `$1' not set in test `copy-$1' |
| 80 | ])]) |
| 81 | |
| 82 | ###-------------------------------------------------------------------------- |
| 83 | AT_SETUP(tvec type-int) |
| 84 | |
| 85 | test_parse([int], [4], [4 ; = 0x04 = '\x04']) |
| 86 | test_parse([int], [ 17; comment], [17 ; = 0x11 = '\x11']) |
| 87 | |
| 88 | test_parse([int], [0x234], [564 ; = 0x0234]) |
| 89 | test_parse([int], [0o33], [27 ; = 0x1b = @%:@escape = '\e']) |
| 90 | |
| 91 | test_parse([int], [ +192], [192 ; = 0xc0 = '\xc0']) |
| 92 | test_parse([int], [ -192], [-192 ; = -0xc0]) |
| 93 | |
| 94 | test_parserr([int], [17 : badness], |
| 95 | [3], [syntax error: expected end-of-line but found `:']) |
| 96 | test_parserr([int], [17: badness], |
| 97 | [3], [syntax error: expected end-of-line but found `:']) |
| 98 | |
| 99 | test_parserr([int], [-_1], |
| 100 | [3], [invalid signed integer `-_1']) |
| 101 | test_parserr([int], [+1234_], |
| 102 | [3], [syntax error: expected end-of-line but found `_']) |
| 103 | test_parse([int], [-1234_5], [-12345 ; = -0x3039]) |
| 104 | test_parserr([int], [+0x_abc], |
| 105 | [3], [syntax error: expected end-of-line but found `x']) |
| 106 | test_parse([int], [-0xa_bc], [-2748 ; = -0x0abc]) |
| 107 | test_parserr([int], [-0xab__c], |
| 108 | [3], [syntax error: expected end-of-line but found `_']) |
| 109 | test_parserr([int], [+010r1234], |
| 110 | [3], [syntax error: expected end-of-line but found `r']) |
| 111 | test_parserr([int], [-1_0r1234], |
| 112 | [3], [syntax error: expected end-of-line but found `r']) |
| 113 | |
| 114 | test_parserr([int], [xyzzy], |
| 115 | [3], [invalid signed integer `xyzzy']) |
| 116 | test_parserr([int], [-splat], |
| 117 | [3], [invalid signed integer `-splat']) |
| 118 | test_parserr([int], [- 1], |
| 119 | [3], [invalid signed integer `-']) |
| 120 | |
| 121 | test_parserr([int], [0xq], |
| 122 | [3], [syntax error: expected end-of-line but found `x']) |
| 123 | test_parserr([int], [0x], |
| 124 | [3], [syntax error: expected end-of-line but found `x']) |
| 125 | |
| 126 | test_parserr([int], [], |
| 127 | [3], [syntax error: expected signed integer but found @%:@eol]) |
| 128 | |
| 129 | test_parserr([int], [123456], |
| 130 | [3], [integer 123456 out of range (must be in @<:@-32768 .. 32767@:>@)]) |
| 131 | |
| 132 | AT_CLEANUP |
| 133 | |
| 134 | ###-------------------------------------------------------------------------- |
| 135 | AT_SETUP(tvec type-uint) |
| 136 | |
| 137 | test_parse([uint], [4], [4 ; = 0x04 = '\x04']) |
| 138 | test_parse([uint], [ 17; comment], [17 ; = 0x11 = '\x11']) |
| 139 | |
| 140 | test_parse([uint], [0], [0 ; = 0x00 = @%:@nul = '\0']) |
| 141 | |
| 142 | test_parse([uint], [012345], [12345 ; = 0x3039]) |
| 143 | test_parse([uint], [0x234], [564 ; = 0x0234]) |
| 144 | test_parse([uint], [0o33], [27 ; = 0x1b = @%:@escape = '\e']) |
| 145 | test_parse([uint], [0b1011_1101], [189 ; = 0xbd = '\xbd']) |
| 146 | test_parse([uint], [12r123], [171 ; = 0xab = '\xab']) |
| 147 | |
| 148 | test_parserr([uint], [17 : badness], |
| 149 | [3], [syntax error: expected end-of-line but found `:']) |
| 150 | test_parserr([uint], [17: badness], |
| 151 | [3], [syntax error: expected end-of-line but found `:']) |
| 152 | |
| 153 | test_parserr([uint], [_1], |
| 154 | [3], [invalid unsigned integer `_1']) |
| 155 | test_parserr([uint], [1234_], |
| 156 | [3], [syntax error: expected end-of-line but found `_']) |
| 157 | test_parse([uint], [1234_5], [12345 ; = 0x3039]) |
| 158 | test_parserr([uint], [0x_abcd], |
| 159 | [3], [syntax error: expected end-of-line but found `x']) |
| 160 | test_parse([uint], [0xa_bcd], [43981 ; = 0xabcd]) |
| 161 | test_parserr([uint], [0xab__cd], |
| 162 | [3], [syntax error: expected end-of-line but found `_']) |
| 163 | test_parserr([uint], [010r1234], |
| 164 | [3], [syntax error: expected end-of-line but found `r']) |
| 165 | test_parserr([uint], [1_0r1234], |
| 166 | [3], [syntax error: expected end-of-line but found `r']) |
| 167 | |
| 168 | test_parserr([uint], [ +192], |
| 169 | [3], [invalid unsigned integer `+192']) |
| 170 | test_parserr([uint], [ -192], |
| 171 | [3], [invalid unsigned integer `-192']) |
| 172 | |
| 173 | test_parserr([uint], [xyzzy], |
| 174 | [3], [invalid unsigned integer `xyzzy']) |
| 175 | |
| 176 | test_parserr([uint], [0xq], |
| 177 | [3], [syntax error: expected end-of-line but found `x']) |
| 178 | test_parserr([uint], [0x], |
| 179 | [3], [syntax error: expected end-of-line but found `x']) |
| 180 | |
| 181 | test_parserr([uint], [], |
| 182 | [3], [syntax error: expected unsigned integer but found @%:@eol]) |
| 183 | |
| 184 | test_parserr([uint], [123456], |
| 185 | [3], [integer 123456 out of range (must be in @<:@0 .. 65535@:>@)]) |
| 186 | |
| 187 | AT_CLEANUP |
| 188 | |
| 189 | ###-------------------------------------------------------------------------- |
| 190 | AT_SETUP([tvec type-float]) |
| 191 | |
| 192 | test_parse([float], [0.0], [0]) |
| 193 | test_parse([float], [-0.0], [-0]) |
| 194 | |
| 195 | test_parse([float], [1.234], [1.234]) |
| 196 | |
| 197 | test_parse([float], [@%:@nan], [@%:@nan]) |
| 198 | test_parse([float], [@%:@+inf], [@%:@+inf]) |
| 199 | test_parse([float], [@%:@inf], [@%:@+inf]) |
| 200 | test_parse([float], [+@%:@inf], [@%:@+inf]) |
| 201 | test_parse([float], [@%:@-inf], [@%:@-inf]) |
| 202 | test_parse([float], [-@%:@inf], [@%:@-inf]) |
| 203 | |
| 204 | AT_CLEANUP |
| 205 | |
| 206 | ###-------------------------------------------------------------------------- |
| 207 | AT_SETUP([tvec type-enum]) |
| 208 | |
| 209 | test_parse([ienum], [less], [less ; = -1 = -0x01 = @%:@eof]) |
| 210 | test_parse([ienum], [+1], [greater ; = 1 = 0x01 = '\x01']) |
| 211 | test_parse([ienum], [17], [17 ; = 0x11 = '\x11']) |
| 212 | |
| 213 | test_parse([uenum], [banana], [banana ; = 1 = 0x01 = '\x01']) |
| 214 | test_parse([uenum], [clementine], [clementine ; = 2 = 0x02 = '\x02']) |
| 215 | test_parse([uenum], [17], [17 ; = 0x11 = '\x11']) |
| 216 | |
| 217 | test_parse([penum], [carol], [carol ; = @%:@<actor ={ACTOR:@<:@^>@:>@*}>]) |
| 218 | test_parse([penum], [alice], [alice ; = @%:@<actor ={ACTOR:@<:@^>@:>@*}>]) |
| 219 | test_parse([penum], [@%:@nil], [@%:@nil]) |
| 220 | |
| 221 | AT_CLEANUP |
| 222 | |
| 223 | ###-------------------------------------------------------------------------- |
| 224 | AT_SETUP([tvec type-char]) |
| 225 | |
| 226 | test_parse([char], [a], ['a' ; = 97 = 0x61]) |
| 227 | test_parse([char], [a;?], ['a' ; = 97 = 0x61]) |
| 228 | test_parse([char], [a ;?], ['a' ; = 97 = 0x61]) |
| 229 | test_parse([char], [\\], ['\\' ; = 92 = 0x5c]) |
| 230 | test_parse([char], ['], ['\'' ; = 39 = 0x27]) |
| 231 | test_parse([char], [\'], ['\'' ; = 39 = 0x27]) |
| 232 | test_parse([char], ["], ['"' ; = 34 = 0x22]) |
| 233 | test_parse([char], [';'], [';' ; = 59 = 0x3b]) |
| 234 | test_parse([char], [';';?], [';' ; = 59 = 0x3b]) |
| 235 | test_parse([char], [';' ;?], [';' ; = 59 = 0x3b]) |
| 236 | test_parse([char], [\"], ['"' ; = 34 = 0x22]) # " |
| 237 | test_parse([char], [@%:@], ['@%:@' ; = 35 = 0x23]) |
| 238 | test_parse([char], ['@%:@'], ['@%:@' ; = 35 = 0x23]) |
| 239 | |
| 240 | test_parse([char], [\n], [@%:@newline ; = '\n' = 10 = 0x0a]) |
| 241 | test_parse([char], [\x0a], [@%:@newline ; = '\n' = 10 = 0x0a]) |
| 242 | |
| 243 | test_parse([char], [@%:@newline], [@%:@newline ; = '\n' = 10 = 0x0a]) |
| 244 | test_parse([char], [@%:@lf], [@%:@newline ; = '\n' = 10 = 0x0a]) |
| 245 | test_parse([char], [@%:@del;?], [@%:@delete ; = '\x7f' = 127 = 0x7f]) |
| 246 | test_parse([char], [@%:@space ;?], [' ' ; = 32 = 0x20]) |
| 247 | |
| 248 | test_parse([char], [' '], [' ' ; = 32 = 0x20]) |
| 249 | test_parse([char], ['a'], ['a' ; = 97 = 0x61]) |
| 250 | test_parse([char], ['\n'], [@%:@newline ; = '\n' = 10 = 0x0a]) |
| 251 | test_parse([char], ['\12' ;?], [@%:@newline ; = '\n' = 10 = 0x0a]) |
| 252 | test_parse([char], ['\{12}' ;?], [@%:@newline ; = '\n' = 10 = 0x0a]) |
| 253 | test_parse([char], ['\x0a'], [@%:@newline ; = '\n' = 10 = 0x0a]) |
| 254 | test_parse([char], ['\x{0a}'], [@%:@newline ; = '\n' = 10 = 0x0a]) |
| 255 | |
| 256 | test_parse([char], [@%:@eof], [@%:@eof ; = -1 = -0x01]) |
| 257 | test_parse([char], [@%:@eof], [@%:@eof ; = -1 = -0x01]) |
| 258 | |
| 259 | test_parserr([char], [ ], |
| 260 | [3], [syntax error: expected character but found @%:@eol]) |
| 261 | test_parserr([char], [''], |
| 262 | [3], [syntax error: expected character but found `'']) |
| 263 | test_parserr([char], ['''], |
| 264 | [3], [syntax error: expected character but found `'']) |
| 265 | test_parserr([char], [;], |
| 266 | [3], [syntax error: expected character but found `;']) |
| 267 | test_parserr([char], [';], |
| 268 | [3], [syntax error: expected `'' but found @%:@eol]) |
| 269 | test_parserr([char], [\], |
| 270 | [3], [syntax error: expected string escape but found @%:@eol]) |
| 271 | test_parserr([char], [\q], |
| 272 | [3], [syntax error: expected string escape but found `q']) |
| 273 | test_parserr([char], ['\], |
| 274 | [3], [syntax error: expected string escape but found @%:@eol]) |
| 275 | test_parserr([char], [ab], |
| 276 | [3], [syntax error: expected end-of-line but found `b']) |
| 277 | test_parserr([char], [\x{0a], |
| 278 | [3], [syntax error: expected `}' but found @%:@eol]) |
| 279 | test_parserr([char], [\{012], |
| 280 | [3], [syntax error: expected `}' but found @%:@eol]) |
| 281 | |
| 282 | AT_CLEANUP |
| 283 | |
| 284 | ###-------------------------------------------------------------------------- |
| 285 | AT_SETUP([tvec type-text]) |
| 286 | |
| 287 | test_parse([text], [foo], [foo]) |
| 288 | test_parse([text], [foo bar], ["foo bar"]) |
| 289 | test_parse([text], [foo bar], ["foo bar"]) |
| 290 | test_parse([text], [foo "" bar], [foobar]) |
| 291 | test_parse([text], [ foo bar ], ["foo bar"]) |
| 292 | test_parse([text], [ foo @&t@ |
| 293 | bar ], ["foo bar"]) |
| 294 | |
| 295 | test_parse([text], [foo @%:@nul bar], ["foo\{0}bar"]) |
| 296 | |
| 297 | test_parse([text], ["f" !repeat 2 { o } "bar"], [foobar]) |
| 298 | test_parse([text], ["{"!repeat 5{"abc"}"}"], ["{abcabcabcabcabc}"]) |
| 299 | |
| 300 | test_parse([text], [!hex "f" 6f "o"], [foo]) |
| 301 | |
| 302 | test_parse([text], ["foo\n"], ["foo\n"]) |
| 303 | |
| 304 | test_parse([text], [foo\ |
| 305 | bar], [ |
| 306 | "foo\n" |
| 307 | "bar"]) |
| 308 | test_parse([text], ["foo\ |
| 309 | bar"], [foobar]) |
| 310 | test_parse([text], ["foo" @%:@newline "bar" @%:@newline], [ |
| 311 | "foo\n" |
| 312 | "bar\n"]) |
| 313 | |
| 314 | test_parserr([text], [], |
| 315 | [4], [syntax error: expected string but found @%:@eof]) |
| 316 | test_parse([text], [""], [""]) |
| 317 | test_parse([text], [''], [""]) |
| 318 | |
| 319 | test_parse([text], ["f\x{6f}o"], [foo]) |
| 320 | |
| 321 | AT_CLEANUP |
| 322 | |
| 323 | ###-------------------------------------------------------------------------- |
| 324 | AT_SETUP([tvec type-bytes]) |
| 325 | |
| 326 | test_parse([bytes], [""], ["" ; empty]) |
| 327 | test_parse([bytes], [61], [61 ; a]) |
| 328 | test_parse([bytes], ["abc"], [616263 ; abc]) |
| 329 | test_parse([bytes], ["abcd"], [61626364 ; abcd]) |
| 330 | test_parse([bytes], ["abcde"], [61626364 65 ; abcde]) |
| 331 | |
| 332 | test_parse([bytes], [!base64 YWJjZGVmZ2hpamtsbW5vcA==], |
| 333 | [61626364 65666768 696a6b6c 6d6e6f70 ; abcdefghijklmnop]) |
| 334 | test_parse([bytes], |
| 335 | [!base64 QUJDREVGR0hJSktMTU5PUGFiY2RlZmdo |
| 336 | a Wp rbG 1ub3A=], |
| 337 | [ |
| 338 | 41424344 45464748 494a4b4c 4d4e4f50 ; @<:@00@:>@ ABCDEFGHIJKLMNOP |
| 339 | 61626364 65666768 696a6b6c 6d6e6f70 ; @<:@10@:>@ abcdefghijklmnop]) |
| 340 | |
| 341 | test_parse([bytes], [6 1], [61 ; a]) |
| 342 | test_parserr([bytes], [6 "" 1], |
| 343 | [3], [invalid hex sequence end: Excess or nonzero padding bits]) |
| 344 | |
| 345 | test_parse([bytes], [!base64 AA==], [00 ; .]) |
| 346 | test_parse([bytes], [!base64 AAA=], [0000 ; ..]) |
| 347 | test_parse([bytes], [!base64 AAAA], [000000 ; ...]) |
| 348 | test_parse([bytes], [!base64 AA], [00 ; .]) |
| 349 | test_parse([bytes], [!base64 AAA], [0000 ; ..]) |
| 350 | |
| 351 | test_parserr([text], [], |
| 352 | [4], [syntax error: expected string but found @%:@eof]) |
| 353 | test_parserr([bytes], [0], |
| 354 | [4], [invalid hex sequence end: Excess or nonzero padding bits]) |
| 355 | test_parserr([bytes], [!base64 A], |
| 356 | [4], [invalid base64 sequence end: Excess or nonzero padding bits]) |
| 357 | test_parserr([bytes], [!base64 A=], |
| 358 | [3], [invalid base64 fragment `A=': Excess or nonzero padding bits]) |
| 359 | |
| 360 | AT_CLEANUP |
| 361 | |
| 362 | ###-------------------------------------------------------------------------- |
| 363 | AT_SETUP([tvec type-buffer]) |
| 364 | |
| 365 | test_parse([buffer], [16], [16 B]) |
| 366 | test_parse([buffer], [16;?], [16 B]) |
| 367 | test_parse([buffer], [16 ;?], [16 B]) |
| 368 | test_parse([buffer], [16384], [16 kB]) |
| 369 | test_parse([buffer], [16777216], [16 MB]) |
| 370 | test_parse([buffer], [16k], [16 kB]) |
| 371 | test_parse([buffer], [16k;?], [16 kB]) |
| 372 | test_parse([buffer], [16k ;?], [16 kB]) |
| 373 | test_parse([buffer], [16 k], [16 kB]) |
| 374 | test_parse([buffer], [16 k;?], [16 kB]) |
| 375 | test_parse([buffer], [16 k ;?], [16 kB]) |
| 376 | test_parse([buffer], [16kB], [16 kB]) |
| 377 | test_parse([buffer], [16kB;?], [16 kB]) |
| 378 | test_parse([buffer], [16kB ;?], [16 kB]) |
| 379 | test_parse([buffer], [16 kB], [16 kB]) |
| 380 | test_parse([buffer], [16 kB;?], [16 kB]) |
| 381 | test_parse([buffer], [16 kB ;?], [16 kB]) |
| 382 | |
| 383 | test_parserr([buffer], [16!], [3], [invalid buffer length `16!']) |
| 384 | test_parserr([buffer], [16 !], [3], [invalid buffer length `16 !']) |
| 385 | test_parserr([buffer], [16 k!], [3], [invalid buffer length `16 k!']) |
| 386 | test_parserr([buffer], [16 kB!], [3], [invalid buffer length `16 kB!']) |
| 387 | test_parserr([buffer], [16 kB !], |
| 388 | [3], [syntax error: expected end-of-line but found `!']) |
| 389 | test_parserr([buffer], [16 EB], [3], [buffer length `16 EB' out of range]) |
| 390 | |
| 391 | AT_CLEANUP |
| 392 | |
| 393 | ###-------------------------------------------------------------------------- |
| 394 | AT_SETUP([tvec remote]) |
| 395 | |
| 396 | AT_DATA([tv], |
| 397 | [;;; -*-conf-*- |
| 398 | |
| 399 | @<:@crash@:>@ |
| 400 | |
| 401 | crash = t |
| 402 | x = 1 |
| 403 | z = 0 |
| 404 | @progress = %RUN |
| 405 | @exit = killed | SIGABRT |
| 406 | |
| 407 | crash = nil |
| 408 | x = 0 |
| 409 | z = 0 |
| 410 | @reconnect = skip |
| 411 | |
| 412 | crash = nil |
| 413 | x = 1 |
| 414 | z = 1 |
| 415 | |
| 416 | crash = nil |
| 417 | x = 1 |
| 418 | z = 1 |
| 419 | @progress = %DONE |
| 420 | @exit = running |
| 421 | ]) |
| 422 | check_template([BUILDDIR/t/tvec.t -fh tv], [0], |
| 423 | [tv:11: `crash' skipped: no connection |
| 424 | crash: ok (1 skipped) |
| 425 | PASSED ={N:\d+} tests (1 skipped) in 1 group |
| 426 | ]) |
| 427 | |
| 428 | AT_CLEANUP |
| 429 | |
| 430 | ###-------------------------------------------------------------------------- |
| 431 | AT_SETUP([tvec timeout]) |
| 432 | |
| 433 | AT_DATA([tv], |
| 434 | [;;; -*-conf-*- |
| 435 | |
| 436 | @<:@sleep@:>@ |
| 437 | |
| 438 | time = 0.5 |
| 439 | z = 0 |
| 440 | @progress = %RUN |
| 441 | @exit = killed | SIGALRM |
| 442 | |
| 443 | time = 0.125 |
| 444 | z = 1 |
| 445 | ]) |
| 446 | check_template([BUILDDIR/t/tvec.t -fh tv], [0], |
| 447 | [sleep: ok |
| 448 | PASSED all ={N:\d+} tests in 1 group |
| 449 | ]) |
| 450 | |
| 451 | AT_CLEANUP |
| 452 | |
| 453 | ###-------------------------------------------------------------------------- |
| 454 | AT_SETUP([tvec serialize]) |
| 455 | |
| 456 | AT_DATA([tv], |
| 457 | [@<:@multi@:>@ |
| 458 | |
| 459 | int = -2 |
| 460 | uint = 7 |
| 461 | float = @%:@nan |
| 462 | fltish = 0.1 |
| 463 | char = x |
| 464 | ienum = greater |
| 465 | uenum = banana |
| 466 | fenum = tau |
| 467 | penum = alice |
| 468 | flags = red-fg | white-bg | bright |
| 469 | text = "Hello, world!" |
| 470 | bytes = |
| 471 | 2923be84 e16cd6ae 529049f1 f1bbe9eb |
| 472 | b3a6db3c 870c3e99 245e0d1c 06b747de |
| 473 | b3124dc8 43bb8ba6 1f035a7d 0938251f |
| 474 | 5dd4cbfc 96f5453b 130d890a 1cdbae32 |
| 475 | 209a50ee 407836fd 124932f6 9e7d49dc |
| 476 | ad4f14f2 444066d0 6bc430b7 323ba122 |
| 477 | f622919d e18b1fda b0ca9902 b9729d49 |
| 478 | 2c807ec5 99d5e980 b2eac9cc 53bf67d6 |
| 479 | @show = t |
| 480 | ]) |
| 481 | AT_CHECK([BUILDDIR/t/tvec.t -fh tv], [0], [ignore]) |
| 482 | |
| 483 | AT_CLEANUP |
| 484 | |
| 485 | ###----- That's all, folks -------------------------------------------------- |