]> git.draconx.ca Git - cdecl99.git/blobdiff - tests/stress.at
tests: Work around awk line length limitations.
[cdecl99.git] / tests / stress.at
index 40e8812e1716a9b64c4f439cba78faac7ce8e800..a8e95003ac93e380f55dce18bc49321e7bd1ecd0 100644 (file)
@@ -96,27 +96,8 @@ AT_CLEANUP
 # Check that we can parse declarations with more than 10000 specifiers.
 AT_SETUP([Excessive specifiers])
 
-s="const"
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
-  AS_VAR_APPEND([s], [" $s"])
-done
-
-cat >test.dat <<EOF
-explain $s int
-explain int $s
-type $s int
-type int $s
-EOF
-
-s="inline"
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
-  AS_VAR_APPEND([s], [" $s"])
-done
-cat >>test.dat <<EOF
-declare f as $s function returning int
-EOF
-
-AT_CHECK([cdecl99 -f test.dat], [0],
+AT_CHECK([gunzip -c "$srcdir/tests/data/manyspec.gz" >test.dat || exit 77
+cdecl99 -f test.dat], [0],
 [[type const int
 type const int
 const int
@@ -125,3 +106,45 @@ inline int f()
 ]])
 
 AT_CLEANUP
+
+# Check that we can parse declarations with more than 10000 declarators.
+AT_SETUP([Excessive declarators])
+
+AT_DATA([check.awk],
+[[# We don't need any field splitting, so choose a character that does not
+# appear in C code to avoid tripping over 199-field limit in HP-UX 11 awk.
+BEGIN { FS = "@"; runstart = 0; }
+END { finish_run(NR); }
+
+$0 != lastline {
+  finish_run(NR-1);
+  lastline = $0;
+  runstart = NR;
+  print;
+}
+
+function finish_run(nr) {
+  count = nr - runstart;
+  if (count > 0)
+    print "[repeated " count " more times]";
+}
+]])
+
+AT_CHECK([gunzip -c "$srcdir/tests/data/manydecl.gz" >test.dat || exit 77
+cdecl99 -f test.dat >test.out; status=$?;
+tr <test.out ',' '
+' | $AWK -f check.awk
+exit $status], [0],
+[[declare a as int
+[repeated 16383 more times]
+type function (a
+ a
+[repeated 16381 more times]
+ a) returning int
+int (a
+ a
+[repeated 16381 more times]
+ a)
+]])
+
+AT_CLEANUP