summaryrefslogtreecommitdiff
path: root/tests/general/tpp.icn
diff options
context:
space:
mode:
Diffstat (limited to 'tests/general/tpp.icn')
-rw-r--r--tests/general/tpp.icn315
1 files changed, 315 insertions, 0 deletions
diff --git a/tests/general/tpp.icn b/tests/general/tpp.icn
new file mode 100644
index 0000000..b2a7e82
--- /dev/null
+++ b/tests/general/tpp.icn
@@ -0,0 +1,315 @@
+# tpp.icn -- test file for Icon preprocessor
+#
+# generates lots of deliberate errors
+# includes tpp1.icn, tpp2.icn, tpp3.icn
+
+# force out #lines to test that this file is called "stdin"
+$include "/dev/null"
+
+# following should be legal
+#line 11 "a.b.c"
+#line 22 defgh
+#line 33"ijklm"#
+#line 44
+#line 55xyzzy#comment
+
+#line 0 "bad #lines"
+# following should be illegal but ignored
+#line
+#line 91 not.quoted
+#line 92 extra stuff
+#line 93 "extra" stuff
+#line 94 extra+
+# line 95 "passed through unrecognized"
+#line 96 "unterminated
+#line 97 "unterminated\
+#line 98 ""
+
+# following should be legal
+$line 11 "a.b.c"
+ $ line 22 defgh
+$line 33"ijklm"#comment
+$line 44
+$line 55xyzzy#comment
+$( digraphs for EBCDIC $)
+
+$line 0 "bad.ppdirs"
+# following should be illegal and diagnosed
+$line
+$line 91 not.quoted
+$line 92 extra stuff
+$line 93 "extra" stuff
+$line 94 extra+
+$line 96 "unterminated
+$line 97 "unterminated\
+$line 98""
+$unknown/preprocessing/directive
+
+$line 0 "include.tests"
+=a=
+$include "/dev/null"
+=b=
+ $ include "/dev/null" # comment
+=c=
+$include"abc\def\"ghi#jkl\#mno\\pqr stu" # lots of escapes
+=d=
+$include # no name (two ways)
+=e=
+$include
+=f=
+$include "unterminated
+=g=
+$include "unterminated\
+=h=
+$include nonexistent
+=i=
+$include extra+
+=j=
+$include "more extra stuff" dafslkjasfd
+=k=
+$include "tpp1.icn" # should get circularity error
+=l=
+$include"tpp3.icn"#likewise
+=m=
+
+$line 0 "predef.tst"
+#== predef test ==
+should be defined as 1: _UNIX _ASCII _PIPES _SYSTEM_FUNCTION
+should not be defined: _MACINTOSH _VMS _EBCDIC _DOS_FUNCTIONS
+it depends: _COMPILED _INTERPRETED
+$undef _PIPES
+$undef _ASCII
+$define _ASCII 128
+$define _EBCDIC 0
+bogus: pipes:_PIPES ascii:_ASCII ebcdic:_EBCDIC
+
+$line 0 "define.tst"
+#== define test ==
+
+#= illegal =
+$define
+$define 12
+$define "fred" 93
+$define b1 "
+$define b2 'dsfkjlfasd\'
+$define f(x) (x^2+2*x+1)
+
+#= null =
+$define n1
+$define n2 # also null
+a=n1=b=n2=c
+
+#= simple =
+$define one 1
+$define pi 3.14159
+$define plus +
+$define twine "string"
+$define vowels 'aeiou'
+$define expr ((sqrt(5) + 1) / 2) #phi
+$define xy_47_Hike "fffrtb"
+$undef nothing
+
+one pi plus twine vowels expr xy_47_Hike
+one+pi,plus/twine,vowels\expr?xy_47_Hike! # one pi plus etc
+one"pi"plus"twine"vowels"expr"xy_47_Hike
+'one'pi'plus'twine'vowels'expr'xy_47_Hike'
+
+#= redefinition =
+$define pi 2.7183
+pi
+$undef pi
+$define pi 2.7183
+pi
+
+#= deferred interpretation =
+$define aaa bbb
+$define bbb 42
+aaa bbb
+
+$define yyy xxx
+$define xxx 47
+xxx yyy
+
+#= dubious pasting=
+$define X e3
+$define Y 456e
+123X Y+3
+
+#= recursion =
+$define r r
+r
+$define rr rr rr
+rr
+$define a b b b
+$define b c c c
+$define c a a a
+a
+b
+c
+
+= context =
+$define _ <%>
+123_abc+_+123_+abc_+_"_"_+36rX_+123e10_+12.e+5_+e7_+_#_
+
+$line 0 "error.tst"
+#= $error =
+$error
+ $error
+$error # no text, just comment
+ $ error this program does not work
+
+$line 0 "if.tst"
+#= conditional compilation =
+
+$define isdef
+
+# $ifdef & $ifndef both true and false, with and without $else
+
+$ifdef isdef
+ "isdef is defined"
+$endif
+
+$ifdef notdef
+ "notdef is defined"
+$endif
+
+$ifndef isdef
+ "isdef is not defined"
+$endif
+
+$ifndef notdef
+ "notdef is not defined"
+$endif
+
+$ifdef isdef
+ "isdef is defined"
+$else
+ "isdef is not defined"
+$endif
+
+$ifdef notdef
+ "notdef is defined"
+$else
+ "notdef is not defined"
+$endif
+
+# nesting without $else
+
+$ifdef isdef
+ (true...)
+ $ifndef isdef
+ (wrong...)
+ $ifdef isdef
+ (yes, but skipped)
+ $endif
+ (...wrong)
+ $endif
+ (...true)
+$endif
+
+# full nesting, with some nonstandard spacing
+
+$ifdef isdef # meaningless comment
+ (begin true branch)
+ $ ifdef isdef
+ "isdef is defined"
+ $ else # else
+ "isdef is not defined"
+ $ endif # endif
+ (end true branch)
+ $ else #isdef not defined
+ (begin else branch)
+ $ ifdef notdef
+ "notdef is defined"
+ $ else
+ "notdef is not defined"
+ $ endif
+ (end true branch)
+ $ endif # end test
+
+# test all paths through four nested ifs
+$include "tpp4.icn"
+$define id4 *4*
+$include "tpp4.icn"
+$define id3 *3*
+$include "tpp4.icn"
+$undef id4
+$include "tpp4.icn"
+$define id2 *2*
+$include "tpp4.icn"
+$define id4 *4*
+$include "tpp4.icn"
+$undef id3
+$include "tpp4.icn"
+$undef id4
+$include "tpp4.icn"
+$define id1 *1*
+$include "tpp4.icn"
+$define id4 *4*
+$include "tpp4.icn"
+$define id3 *3*
+$include "tpp4.icn"
+$undef id4
+$include "tpp4.icn"
+$undef id2
+$include "tpp4.icn"
+$define id4 *4*
+$include "tpp4.icn"
+$undef id3
+$include "tpp4.icn"
+$undef id4
+$include "tpp4.icn"
+$undef id1
+
+# make sure it accepts anything resembling an $if when skipping
+
+$ifdef notdef
+ <skipped>
+ $bogus # should be no problem when skipped
+ <skipped>
+ $ifread "/some/file/that/doesnt/really/exist"
+ $include "/some/file/that/doesnt/really/exist"
+ $endif #ifexists
+ <should still be skipping>
+$endif
+<should pass this line>
+
+# test diagnostics for missing args
+$ifdef
+$endif
+$ifndef # missing here too
+$endif
+
+# test diagnostics for extraneous args
+$ifdef notdef
+$else notdef
+$endif notdef
+$ifndef notdef
+$else notdef
+$endif notdef
+
+# test else/endif out of place
+$endif # wrong place -- should get error
+$else # wrong place -- should get error
+$include "tpp5.icn" # includes unterminated $ifdef
+$else # should <not> match $if in tpp5.icn
+$endif # should <not> match $if in tpp5.icn
+# now try again when unterminated $if succeeds
+$define id5
+$include "tpp5.icn" # includes unterminated $ifdef
+$else # should <not> match $if in tpp5.icn
+$endif # should <not> match $if in tpp5.icn
+
+# test line directives encountered while skipping
+
+$ifdef notdef
+...
+#line 111 "invented"
+...
+$endif (& show line)
+
+$ifdef notdef
+...
+ $ line 222 "invented"
+...
+$endif (& show line)