X-Git-Url: http://git.draconx.ca/gitweb/dxcommon.git/blobdiff_plain/1688bad1e5dc89cacf33bc426c92a4abf2bc0647..5d7b80ce6f21d6d90ecec188f135e665d789dede:/tests/scripts.at diff --git a/tests/scripts.at b/tests/scripts.at index 4784b59..a546b61 100644 --- a/tests/scripts.at +++ b/tests/scripts.at @@ -1,3 +1,9 @@ +dnl Copyright © 2021-2022 Nick Bowler +dnl +dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2. +dnl This is free software: you are free to do what the fuck you want to. +dnl There is NO WARRANTY, to the extent permitted by law. + AT_BANNER([Script tests]) AT_SETUP([gen-options.awk]) @@ -293,3 +299,327 @@ oneline ], [ignore]) AT_CLEANUP + +AT_SETUP([gen-tree.awk]) +AT_DATA([tree.def], +[[ROOT0 + r0a, r0a_OFFSET + r0b, r0b_OFFSET + r0c + r0d + r0e, r0e_OFFSET + r0f + r0g +ROOT1 + r1a, r1a_OFFSET + r1b, r1b_OFFSET + r1b + r1e + r1b + r1c, r1c_OFFSET + r1d, r1d_OFFSET + r1e + r1b + r1e +]]) + +AT_CHECK([$AWK -f "$builddir/scripts/gen-tree.awk" tree.h]) + +AT_DATA([test0.c], +[[#include "tree.h" +#include + +struct tree { unsigned id, subtree; }; + +static const struct tree tree0[] = { + ROOT0_INITIALIZER +}; +static const struct tree tree1[] = { + ROOT1_INITIALIZER +}; + +void print_subtree(const struct tree *root, unsigned offset, int depth) +{ + const struct tree *node; + + for (node = &root[offset]; node->id; node++) { + printf("%*s%s", 2*depth, "", &tree_strtab[node->id]); + if (node->subtree) { + printf(", %s_OFFSET\n", &tree_strtab[node->id]); + print_subtree(root, node->subtree, depth+1); + } else { + putchar('\n'); + } + } +} + +int main(void) +{ + printf("ROOT0\n"); + print_subtree(tree0, 0, 1); + printf("ROOT1\n"); + print_subtree(tree1, 0, 1); +} +]]) +cp tree.def expout +AT_CHECK([$CC -o test0$EXEEXT test0.c && ./test0$EXEEXT], [0], [expout]) + +AT_CLEANUP + +AT_SETUP([join.awk]) + +JOIN="$AWK -f $builddir/scripts/join.awk --" + +AT_DATA([a], +[[1 a +3 a1 x +3 a2 x +5 a +6 a +8 a1 x +8 a2 x +9 a1 +9 a2 +9 a3 +]]) + +AT_DATA([b], +[[2 b +2 b +3 b y +4 b +6 b1 y +6 b2 y +7 b +8 b1 y +8 b2 y +]]) + +AT_CHECK([$JOIN a b], [0], +[[3 a1 x b y +3 a2 x b y +6 a b1 y +6 a b2 y +8 a1 x b1 y +8 a1 x b2 y +8 a2 x b1 y +8 a2 x b2 y +]]) + +AT_CHECK([$JOIN -v1 a b], [0], +[[1 a +5 a +9 a1 +9 a2 +9 a3 +]]) + +AT_CHECK([$JOIN -v2 a b], [0], +[[2 b +2 b +4 b +7 b +]]) + +AT_CHECK([$JOIN -v1 -v2 a b], [0], +[[1 a +2 b +2 b +4 b +5 a +7 b +9 a1 +9 a2 +9 a3 +]]) + +AT_CHECK([$JOIN -a1 a b], [0], +[[1 a +3 a1 x b y +3 a2 x b y +5 a +6 a b1 y +6 a b2 y +8 a1 x b1 y +8 a1 x b2 y +8 a2 x b1 y +8 a2 x b2 y +9 a1 +9 a2 +9 a3 +]]) + +AT_CHECK([$JOIN -a2 a b], [0], +[[2 b +2 b +3 a1 x b y +3 a2 x b y +4 b +6 a b1 y +6 a b2 y +7 b +8 a1 x b1 y +8 a1 x b2 y +8 a2 x b1 y +8 a2 x b2 y +]]) + +AT_CHECK([$JOIN -a1 -a2 a b], [0], +[[1 a +2 b +2 b +3 a1 x b y +3 a2 x b y +4 b +5 a +6 a b1 y +6 a b2 y +7 b +8 a1 x b1 y +8 a1 x b2 y +8 a2 x b1 y +8 a2 x b2 y +9 a1 +9 a2 +9 a3 +]]) + +AT_CHECK([$JOIN b a], [0], +[[3 b y a1 x +3 b y a2 x +6 b1 y a +6 b2 y a +8 b1 y a1 x +8 b1 y a2 x +8 b2 y a1 x +8 b2 y a2 x +]]) + +AT_CHECK([$JOIN -v1 b a], [0], +[[2 b +2 b +4 b +7 b +]]) + +AT_CHECK([$JOIN -v2 b a], [0], +[[1 a +5 a +9 a1 +9 a2 +9 a3 +]]) + +AT_CHECK([$JOIN -v1 -v2 b a], [0], +[[1 a +2 b +2 b +4 b +5 a +7 b +9 a1 +9 a2 +9 a3 +]]) + +AT_CHECK([$JOIN -a1 b a], [0], +[[2 b +2 b +3 b y a1 x +3 b y a2 x +4 b +6 b1 y a +6 b2 y a +7 b +8 b1 y a1 x +8 b1 y a2 x +8 b2 y a1 x +8 b2 y a2 x +]]) + +AT_CHECK([$JOIN -a2 b a], [0], +[[1 a +3 b y a1 x +3 b y a2 x +5 a +6 b1 y a +6 b2 y a +8 b1 y a1 x +8 b1 y a2 x +8 b2 y a1 x +8 b2 y a2 x +9 a1 +9 a2 +9 a3 +]]) + +AT_CHECK([$JOIN -a1 -a2 b a], [0], +[[1 a +2 b +2 b +3 b y a1 x +3 b y a2 x +4 b +5 a +6 b1 y a +6 b2 y a +7 b +8 b1 y a1 x +8 b1 y a2 x +8 b2 y a1 x +8 b2 y a2 x +9 a1 +9 a2 +9 a3 +]]) + +AT_CHECK([echo wat | $JOIN -v1 - /dev/null], [0], +[[wat +]]) + +AT_CLEANUP + +m4_divert_push([PREPARE_TESTS])dnl +test_fix_gnulib () { + $PERL -e 'my $x = 42; exit $x;'; test $? = 42 || exit 77 + $PERL -f "$srcdir/scripts/fix-gnulib.pl" "$@" +} +test_gnulib_mk () { + echo; sed -n -f - "$srcdir/tests/data/gnulib.mk" <test.mk.in +AT_CHECK([grep SED_HEADER test.mk.in >expout || exit 99]) +AT_CHECK([test_fix_gnulib -i test.mk.in -o test.mk || exit +grep SED_HEADER test.mk], [0], [expout]) + +AT_CLEANUP + +AT_SETUP([fix-gnulib.pl %reldir% substitution]) + +test_gnulib_mk sys_types >test.mk.in +AT_CHECK([grep '%reldir%' test.mk.in >/dev/null || exit 99]) + +sed -n -f - test.mk.in >expout <<'EOF' +${G;p;b} +/^## begin gnulib/,/^## end gnulib/!b +/^#/{p;b} +s|(srcdir)|(top_srcdir)| +s|%reldir%|lib| +s|BUILT_SOURCES|gnulib_core_headers| +s|sys[[/_]]|lib/&|g +/^MOSTLYCLEANFILES/{h;b} +p +EOF + +AT_CHECK([test_fix_gnulib -i test.mk.in -o test.mk || exit +sed -n -e '/^## begin gnulib/,/^## end gnulib/p' \ + -e '/CLEANFILES/p' test.mk], +[0], [expout]) + +AT_CLEANUP