-printf 'Using seed %d\n' "$random_seed" >&AS_MESSAGE_LOG_FD
-AT_CHECK([randomdecl -En 10000 -s "$random_seed" >decls], [0], [ignore-nolog])
-AT_CHECK([sed -f sanity.sed decls], [0], [stdout-nolog])
-sort -u stdout >decls.chk
+m4_define([sanity_exp], [[FOUND $2
+]])
+LC_ALL=C sort >expout <<'EOF'
+m4_map([sanity_exp], [sanity_tests])dnl
+EOF
+
+AS_ECHO(["Using seed $random_seed"]) >&AS_MESSAGE_LOG_FD
+AT_CHECK([randomdecl -En 10000 -s "$random_seed" >decls], [0])
+AT_CHECK([$AWK -f sanity.awk decls | LC_ALL=C sort], [0], [expout])
+
+AT_CLEANUP
+
+AT_SETUP([Random crossparse])
+
+TEST_NEED_PROGRAM([randomdecl])
+TEST_NEED_PROGRAM([crossparse])
+
+AS_ECHO(["Using seed $random_seed"]) >&AS_MESSAGE_LOG_FD
+AT_CHECK([randomdecl -n "$random_iter" -s "$random_seed"],, [stdout-nolog])
+AT_CHECK([crossparse -f stdout])
+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