diff options
Diffstat (limited to 'tests/general/prepro.icn')
-rw-r--r-- | tests/general/prepro.icn | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/tests/general/prepro.icn b/tests/general/prepro.icn new file mode 100644 index 0000000..0b9972a --- /dev/null +++ b/tests/general/prepro.icn @@ -0,0 +1,102 @@ +# test various preprocessor features + +# test $define and various whitespace uses +$define abc 123 + $ define def 456 +$define ghi 789 +$ define ghi 789 # duplicate definition should be ok if same +$undef ghi +$define ghi 987 # different definition should be ok after $undef + +# test (when used later) that substituted text is rescanned +$define yy (xx+xx) +$define xx 1 + +# test undefinition of something that isn't defined +$undef notdefined + +# test ifdef of undefined symbol, and successful skip past bogus directive +$ifdef notdef +$BOGUS +$endif + +# test ifdef of defined symbol, and null test body +$ifdef abc +$endif + +# test ifndef of defined symbol +$ifndef abc +$error -- abc not defined +$endif#comment on if terminator + + +# main test program + +procedure main() + # write values from definitions; test no substitution in string constant + write("abc,def,ghi,xx,yy: ", abc, " ", def, " ", ghi, " ", xx, " ", yy) + + # test $include by including a code fragment from prepro.dat + $include "prepro.dat" + + # write values defined in prepro.dat + write("xyzzy: ", xyzzy) + write("abc,def,ghi,xx,yy: ", abc, " ", def, " ", ghi, " ", xx, " ", yy) + + # test that predefined symbols agree with &features + # (if defined, first argument is 1, else it's null) + precheck(_AMIGA, "Amiga") + precheck(_ACORN, "Acorn Archimedes") + precheck(_MACINTOSH, "Macintosh") + precheck(_MSDOS_386, "MS-DOS/386") + precheck(_MSDOS, "MS-DOS") + precheck(_OS2, "OS/2") + precheck(_PORT, "PORT") + precheck(_UNIX, "UNIX") + precheck(_VMS, "VMS") + precheck(_COMPILED, "compiled") + precheck(_INTERPRETED, "interpreted") + precheck(_ASCII, "ASCII", 1) + precheck(_EBCDIC, "EBCDIC", 1) + precheck(_CALLING, "calling to Icon") + precheck(_CO_EXPRESSIONS, "co-expressions") + precheck(_DIRECT_EXECUTION, "direct execution") + precheck(_EVENT_MONITOR, "event monitoring") + precheck(_EXECUTABLE_IMAGES, "executable images") + precheck(_EXTERNAL_FUNCTIONS,"external functions") + precheck(_KEYBOARD_FUNCTIONS,"keyboard functions") + precheck(_LARGE_INTEGERS, "large integers") + precheck(_MEMORY_MONITOR, "memory monitoring") + precheck(_MULTITASKING, "multiple programs") + precheck(_MULTIREGION, "multiple regions") + precheck(_PIPES, "pipes") + precheck(_RECORD_IO, "record I/O") + precheck(_STRING_INVOKE, "string invocation") + precheck(_SYSTEM_FUNCTION, "system function") + precheck(_VISUALIZATION, "visualization support") + precheck(_WINDOW_FUNCTIONS, "window functions") + precheck(_X_WINDOW_SYSTEM, "X Windows") + precheck(_PRESENTATION_MGR, "Presentation Manager") + precheck(_ARM_FUNCTIONS, "Archimedes extensions") + precheck(_DOS_FUNCTIONS, "MS-DOS extensions") + write("done") +end + + +# precheck (v, s, p) -- check that s is in &features iff v is non-null; +# always print presence/absence if p is non-null + +procedure precheck (v, s, p) + if s == &features then { + if /v then + write ("error: no predefined symbol for ", s) + else if \p then + write ("found feature: ", s) + } + else { + if \v then + write ("error: unexpected predefined symbol for ", s) + else if \p then + write ("no feature: ", s) + } +end |