X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Flanguage%2Fcontrol%2Fdefine.at;h=9a13ea45cde5796062422467eb4b5aabda1c524d;hb=4861d99229da266945dc2dfcbda2acc9bd7b9b42;hp=a24ffb33c3dd3bdf55a085c3dd8c4440d873777f;hpb=15c8f96cf1931d6df3e6e4fb3f11fae4a1dd243a;p=pspp diff --git a/tests/language/control/define.at b/tests/language/control/define.at index a24ffb33c3..9a13ea45cd 100644 --- a/tests/language/control/define.at +++ b/tests/language/control/define.at @@ -18,14 +18,15 @@ AT_BANNER([DEFINE]) m4_define([PSPP_CHECK_MACRO_EXPANSION], [AT_SETUP([macro expansion - $1]) + AT_KEYWORDS([m4_bpatsubst([$1], [!], [])]) AT_DATA([define.sps], [$2 DEBUG EXPAND. $3 ]) + AT_CAPTURE_FILE([define.sps]) AT_DATA([expout], [$4 ]) - AT_CHECK([pspp --testing-mode define.sps | sed '/^$/d'], [$6 -], [expout]) + AT_CHECK([pspp --testing-mode define.sps | sed '/^$/d'], [$6], [expout]) AT_CLEANUP]) AT_SETUP([simple macro expansion]) @@ -273,7 +274,7 @@ note: unexpanded token "b" note: unexpanded token "c" ]) AT_CLEANUP - + PSPP_CHECK_MACRO_EXPANSION([one !TOKENS(1) keyword argument], [DEFINE !k(arg1 = !TOKENS(1)) k(!arg1) !ENDDEFINE.], [!k arg1=x. @@ -282,4 +283,211 @@ PSPP_CHECK_MACRO_EXPANSION([one !TOKENS(1) keyword argument], [k(x) k(x) note: unexpanded token "y" -k( )]) \ No newline at end of file +k( )]) + +PSPP_CHECK_MACRO_EXPANSION([one !TOKENS(1) keyword argument - negative], + [DEFINE !k(arg1 = !TOKENS(1)) k(!arg1) !ENDDEFINE.], + [!k arg1. +!k arg1=.], [dnl +define.sps:3: error: DEBUG EXPAND: Found `.' while expecting `=' reading +argument !arg1 to macro !k. +note: unexpanded token "!k" +note: unexpanded token "arg1" +define.sps:4: error: DEBUG EXPAND: Unexpected end of command reading argument ! +arg1 to macro !k. +note: unexpanded token "!k" +note: unexpanded token "arg1" +note: unexpanded token "="], [1]) + +PSPP_CHECK_MACRO_EXPANSION([!CHAREND('/') keyword arguments], [dnl +DEFINE !k(arg1 = !CHAREND('/') + /arg2 = !CHAREND('/')) +k(!arg1, !arg2) +!ENDDEFINE.], + [!k arg1=x/ arg2=y/. +!k arg1=x/. +!k arg2=y/. +!k.], + [k(x, y) +k(x, ) +k(, y) +k(, )]) + +PSPP_CHECK_MACRO_EXPANSION([!CHAREND('/') keyword arguments - negative], [dnl +DEFINE !k(arg1 = !CHAREND('/') + /arg2 = !CHAREND('/')) +k(!arg1, !arg2) +!ENDDEFINE.], + [!k arg1. +!k arg1=. +!k arg1=x. +!k arg1=x/ arg2=y.], + [define.sps:6: error: DEBUG EXPAND: Found `.' while expecting `=' reading +argument !arg1 to macro !k. +note: unexpanded token "!k" +note: unexpanded token "arg1" +define.sps:7: error: DEBUG EXPAND: Unexpected end of command reading argument ! +arg1 to macro !k. +note: unexpanded token "!k" +note: unexpanded token "arg1" +note: unexpanded token "=" +define.sps:8: error: DEBUG EXPAND: Unexpected end of command reading argument ! +arg1 to macro !k. +note: unexpanded token "!k" +note: unexpanded token "arg1" +note: unexpanded token "=" +note: unexpanded token "x" +define.sps:9: error: DEBUG EXPAND: Unexpected end of command reading argument ! +arg2 to macro !k. +note: unexpanded token "!k" +note: unexpanded token "arg1" +note: unexpanded token "=" +note: unexpanded token "x" +note: unexpanded token "/" +note: unexpanded token "arg2" +note: unexpanded token "=" +note: unexpanded token "y"]) + +PSPP_CHECK_MACRO_EXPANSION([default keyword arguments], + [DEFINE !k(arg1 = !DEFAULT(a b c) !CMDEND) k(!arg1) !ENDDEFINE], + [!k arg1=x. +!k], + [k(x) +k(a b c)]) + +dnl Keep this test in sync with the examples for !BLANKS in the manual. +PSPP_CHECK_MACRO_EXPANSION([!BLANKS], + [DEFINE !b() +!BLANKS(0). +!QUOTE(!BLANKS(0)). +!BLANKS(1). +!QUOTE(!BLANKS(1)). +!BLANKS(2). +!QUOTE(!BLANKS(2)). +!BLANKS(5). +!QUOTE(!BLANKS(5)). +!ENDDEFINE], + [!b.], + [. +''. +. +' '. +. +' '. +. +' '.]) + +dnl Keep this test in sync with the examples for !CONCAT in the manual. +PSPP_CHECK_MACRO_EXPANSION([!CONCAT], + [DEFINE !c() +!CONCAT(x, y). +!CONCAT('x', 'y'). +!CONCAT(12, 34). +!CONCAT(!NULL, 123). +!ENDDEFINE], + [!c.], + [xy. +xy. +1234. +123.]) + +dnl Keep this test in sync with the examples for !HEAD in the manual. +PSPP_CHECK_MACRO_EXPANSION([!HEAD], + [DEFINE !h() +!HEAD('a b c'). +!HEAD('a'). +!HEAD(!NULL). +!HEAD(''). +!ENDDEFINE], + [!h.], + [a. +a. +. +.]) + +dnl Keep this test in sync with the examples for !TAIL in the manual. +PSPP_CHECK_MACRO_EXPANSION([!TAIL], + [DEFINE !t() +!TAIL('a b c'). +!TAIL('a'). +!TAIL(!NULL). +!TAIL(''). +!ENDDEFINE], + [!t.], + [b c. +. +. +.]) + +dnl Keep this test in sync with the examples for !INDEX in the manual. +PSPP_CHECK_MACRO_EXPANSION([!INDEX], + [DEFINE !i() +!INDEX(banana, an). +!INDEX(banana, nan). +!INDEX(banana, apple). +!INDEX("banana", nan). +!INDEX("banana", "nan"). +!INDEX(!UNQUOTE("banana"), !UNQUOTE("nan")). +!ENDDEFINE], + [!i.], + [2. +3. +0. +4. +0. +3.]) + +dnl Keep this test in sync with the examples for !LENGTH in the manual. +PSPP_CHECK_MACRO_EXPANSION([!LENGTH], + [DEFINE !l() +!LENGTH(123). +!LENGTH(123.00). +!LENGTH( 123 ). +!LENGTH("123"). +!LENGTH(xyzzy). +!LENGTH("xyzzy"). +!LENGTH("xy""zzy"). +!LENGTH(!UNQUOTE("xyzzy")). +!LENGTH(!UNQUOTE("xy""zzy")). +!LENGTH(!NULL). +!ENDDEFINE. +DEFINE !la(!positional !enclose('(',')')) +!LENGTH(!1). +!ENDDEFINE.], + [!l. +!la(a b c). +!la().], + [3. +6. +3. +5. +5. +7. +9. +5. +6. +0. +5. +0.]) + +dnl Keep this test in sync with the examples for !SUBSTR in the manual. +PSPP_CHECK_MACRO_EXPANSION([!SUBSTR], + [DEFINE !s() +!SUBSTR(banana, 3). +!SUBSTR(banana, 3, 3). +!SUBSTR("banana", 3). +!SUBSTR("banana", 3, 3). +!SUBSTR(banana, 3, 0). +!SUBSTR(banana, 3, 10). +!SUBSTR(banana, 10, 3). +!ENDDEFINE.], + [!s.], + [nana. +nan. +anana". dnl" + +ana. +. +nana. +.]) +