test: Move scaffold/tests into lib.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 8 Jun 2019 13:34:44 +0000 (15:34 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 8 Jun 2019 13:34:44 +0000 (15:34 +0200)
* lib/tests/scaffold: Move from scaffold/tests.
* scaffold/tests: Remove.
* build-aux/check-mescc.sh: Update.

319 files changed:
build-aux/check-mescc.sh
lib/tests/dirent/90-readdir.c
lib/tests/io/90-stat.c
lib/tests/scaffold/00-exit-0.c [new file with mode: 0644]
lib/tests/scaffold/01-return-0.c [new file with mode: 0644]
lib/tests/scaffold/02-return-1.c [new file with mode: 0644]
lib/tests/scaffold/02-return-1.exit [new file with mode: 0644]
lib/tests/scaffold/03-call.c [new file with mode: 0644]
lib/tests/scaffold/04-call-0.c [new file with mode: 0644]
lib/tests/scaffold/05-call-1.c [new file with mode: 0644]
lib/tests/scaffold/05-call-1.exit [new file with mode: 0644]
lib/tests/scaffold/06-call-2.c [new file with mode: 0644]
lib/tests/scaffold/06-call-not-1.c [new file with mode: 0644]
lib/tests/scaffold/06-call-string.c [new file with mode: 0644]
lib/tests/scaffold/06-call-variable.c [new file with mode: 0644]
lib/tests/scaffold/06-not-call-1.c [new file with mode: 0644]
lib/tests/scaffold/06-return-void.c [new file with mode: 0644]
lib/tests/scaffold/07-include.c [new file with mode: 0644]
lib/tests/scaffold/07-include.exit [new file with mode: 0644]
lib/tests/scaffold/08-assign-global.c [new file with mode: 0644]
lib/tests/scaffold/08-assign-negative.c [new file with mode: 0644]
lib/tests/scaffold/08-assign.c [new file with mode: 0644]
lib/tests/scaffold/10-if-0.c [new file with mode: 0644]
lib/tests/scaffold/11-if-1.c [new file with mode: 0644]
lib/tests/scaffold/12-if-eq.c [new file with mode: 0644]
lib/tests/scaffold/13-if-neq.c [new file with mode: 0644]
lib/tests/scaffold/14-if-goto.c [new file with mode: 0644]
lib/tests/scaffold/15-if-not-f.c [new file with mode: 0644]
lib/tests/scaffold/16-if-t.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-and-or.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-and.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-assign.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-call.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-char.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-ge.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-gt.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-le.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-lt.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-or.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-unsigned-char-le.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-unsigned-ge.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-unsigned-gt.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-unsigned-le.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-unsigned-long-le.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-unsigned-lt.c [new file with mode: 0644]
lib/tests/scaffold/17-compare-unsigned-short-le.c [new file with mode: 0644]
lib/tests/scaffold/18-assign-shadow.c [new file with mode: 0644]
lib/tests/scaffold/20-while.c [new file with mode: 0644]
lib/tests/scaffold/21-char-array-simple.c [new file with mode: 0644]
lib/tests/scaffold/21-char-array.c [new file with mode: 0644]
lib/tests/scaffold/22-while-char-array.c [new file with mode: 0644]
lib/tests/scaffold/23-global-pointer-init-null.c [new file with mode: 0644]
lib/tests/scaffold/23-global-pointer-init.c [new file with mode: 0644]
lib/tests/scaffold/23-global-pointer-pointer-ref.c [new file with mode: 0644]
lib/tests/scaffold/23-global-pointer-ref.c [new file with mode: 0644]
lib/tests/scaffold/23-pointer-sub.c [new file with mode: 0644]
lib/tests/scaffold/23-pointer.c [new file with mode: 0644]
lib/tests/scaffold/32-call-wrap.c [new file with mode: 0644]
lib/tests/scaffold/32-compare.c [new file with mode: 0644]
lib/tests/scaffold/33-and-or.c [new file with mode: 0644]
lib/tests/scaffold/34-pre-post.c [new file with mode: 0644]
lib/tests/scaffold/35-compare-char.c [new file with mode: 0644]
lib/tests/scaffold/36-compare-arithmetic.c [new file with mode: 0644]
lib/tests/scaffold/37-compare-assign.c [new file with mode: 0644]
lib/tests/scaffold/38-compare-call-2.c [new file with mode: 0644]
lib/tests/scaffold/38-compare-call-3.c [new file with mode: 0644]
lib/tests/scaffold/38-compare-call.c [new file with mode: 0644]
lib/tests/scaffold/40-if-else.c [new file with mode: 0644]
lib/tests/scaffold/41-ternary.c [new file with mode: 0644]
lib/tests/scaffold/42-goto-label.c [new file with mode: 0644]
lib/tests/scaffold/43-for-do-while.c [new file with mode: 0644]
lib/tests/scaffold/44-switch-body-fallthrough.c [new file with mode: 0644]
lib/tests/scaffold/44-switch-fallthrough.c [new file with mode: 0644]
lib/tests/scaffold/44-switch.c [new file with mode: 0644]
lib/tests/scaffold/45-void-call.c [new file with mode: 0644]
lib/tests/scaffold/46-function-static.c [new file with mode: 0644]
lib/tests/scaffold/47-function-expression.c [new file with mode: 0644]
lib/tests/scaffold/48-global-static.c [new file with mode: 0644]
lib/tests/scaffold/51-pointer-sub.c [new file with mode: 0644]
lib/tests/scaffold/54-argc.c [new file with mode: 0644]
lib/tests/scaffold/54-argv.c [new file with mode: 0644]
lib/tests/scaffold/55-char-array.c [new file with mode: 0644]
lib/tests/scaffold/60-math.c [new file with mode: 0644]
lib/tests/scaffold/61-array.c [new file with mode: 0644]
lib/tests/scaffold/62-array.c [new file with mode: 0644]
lib/tests/scaffold/63-struct-array-assign.c [new file with mode: 0644]
lib/tests/scaffold/63-struct-array-compare.c [new file with mode: 0644]
lib/tests/scaffold/63-struct-array.c [new file with mode: 0644]
lib/tests/scaffold/63-struct-assign.c [new file with mode: 0644]
lib/tests/scaffold/63-struct-cell.c [new file with mode: 0644]
lib/tests/scaffold/63-struct-function.c [new file with mode: 0644]
lib/tests/scaffold/63-struct-local.c [new file with mode: 0644]
lib/tests/scaffold/63-struct-pointer.c [new file with mode: 0644]
lib/tests/scaffold/63-struct.c [new file with mode: 0644]
lib/tests/scaffold/64-make-cell.c [new file with mode: 0644]
lib/tests/scaffold/65-read.c [new file with mode: 0644]
lib/tests/scaffold/66-local-char-array.c [new file with mode: 0644]
lib/tests/scaffold/70-stdarg.c [new file with mode: 0644]
lib/tests/scaffold/71-struct-array.c [new file with mode: 0644]
lib/tests/scaffold/72-typedef-struct-def.c [new file with mode: 0644]
lib/tests/scaffold/73-union-hello.c [new file with mode: 0644]
lib/tests/scaffold/73-union.c [new file with mode: 0644]
lib/tests/scaffold/74-multi-line-string.c [new file with mode: 0644]
lib/tests/scaffold/75-struct-union.c [new file with mode: 0644]
lib/tests/scaffold/76-pointer-arithmetic-pp.c [new file with mode: 0644]
lib/tests/scaffold/76-pointer-arithmetic.c [new file with mode: 0644]
lib/tests/scaffold/77-pointer-assign.c [new file with mode: 0644]
lib/tests/scaffold/78-union-struct.c [new file with mode: 0644]
lib/tests/scaffold/79-int-array-simple.c [new file with mode: 0644]
lib/tests/scaffold/79-int-array.c [new file with mode: 0644]
lib/tests/scaffold/7a-struct-char-array.c [new file with mode: 0644]
lib/tests/scaffold/7b-struct-int-array-hello.c [new file with mode: 0644]
lib/tests/scaffold/7b-struct-int-array-pointer.c [new file with mode: 0644]
lib/tests/scaffold/7b-struct-int-array.c [new file with mode: 0644]
lib/tests/scaffold/7c-dynarray.c [new file with mode: 0644]
lib/tests/scaffold/7d-cast-char.c [new file with mode: 0644]
lib/tests/scaffold/7e-struct-array-access.c [new file with mode: 0644]
lib/tests/scaffold/7f-struct-pointer-arithmetic.c [new file with mode: 0644]
lib/tests/scaffold/7g-struct-byte-word-field.c [new file with mode: 0644]
lib/tests/scaffold/7h-struct-assign.c [new file with mode: 0644]
lib/tests/scaffold/7i-struct-struct-simple.c [new file with mode: 0644]
lib/tests/scaffold/7i-struct-struct.c [new file with mode: 0644]
lib/tests/scaffold/7k-empty-for.c [new file with mode: 0644]
lib/tests/scaffold/7k-for-each-elem-simple.c [new file with mode: 0644]
lib/tests/scaffold/7k-for-each-elem.c [new file with mode: 0644]
lib/tests/scaffold/7l-struct-any-size-array-simple.c [new file with mode: 0644]
lib/tests/scaffold/7l-struct-any-size-array.c [new file with mode: 0644]
lib/tests/scaffold/7m-struct-char-array-assign.c [new file with mode: 0644]
lib/tests/scaffold/7n-struct-struct-array.c [new file with mode: 0644]
lib/tests/scaffold/7o-struct-pre-post-simple.c [new file with mode: 0644]
lib/tests/scaffold/7o-struct-pre-post.c [new file with mode: 0644]
lib/tests/scaffold/7p-struct-cast.c [new file with mode: 0644]
lib/tests/scaffold/7q-bit-field-simple.c [new file with mode: 0644]
lib/tests/scaffold/7q-bit-field.c [new file with mode: 0644]
lib/tests/scaffold/7r-sign-extend.c [new file with mode: 0644]
lib/tests/scaffold/7s-struct-short.c [new file with mode: 0644]
lib/tests/scaffold/7s-unsigned-compare.c [new file with mode: 0644]
lib/tests/scaffold/7t-function-destruct.c [new file with mode: 0644]
lib/tests/scaffold/7u-call-ternary.c [new file with mode: 0644]
lib/tests/scaffold/7u-double.c [new file with mode: 0644]
lib/tests/scaffold/7u-inc-byte-word.c [new file with mode: 0644]
lib/tests/scaffold/7u-long-long.c [new file with mode: 0644]
lib/tests/scaffold/7u-struct-func.c [new file with mode: 0644]
lib/tests/scaffold/7u-struct-size10.c [new file with mode: 0644]
lib/tests/scaffold/7u-ternary-expression.c [new file with mode: 0644]
lib/tests/scaffold/7u-vstack.c [new file with mode: 0644]
lib/tests/scaffold/82-define.c [new file with mode: 0644]
lib/tests/scaffold/83-heterogenoous-init.c [new file with mode: 0644]
lib/tests/scaffold/84-struct-field-list.c [new file with mode: 0644]
lib/tests/scaffold/85-sizeof.c [new file with mode: 0644]
lib/tests/scaffold/90-goto-var.c [new file with mode: 0644]
lib/tests/scaffold/91-goto-array.c [new file with mode: 0644]
lib/tests/scaffold/a0-call-trunc-char.c [new file with mode: 0644]
lib/tests/scaffold/a0-call-trunc-int.c [new file with mode: 0644]
lib/tests/scaffold/a0-call-trunc-short.c [new file with mode: 0644]
lib/tests/scaffold/a0-math-divide-signed-negative.c [new file with mode: 0644]
lib/tests/scaffold/a1-global-no-align.c [new file with mode: 0644]
lib/tests/scaffold/a1-global-no-clobber.c [new file with mode: 0644]
lib/tests/scaffold/exit-42.i [new file with mode: 0644]
lib/tests/scaffold/t.c [new file with mode: 0644]
lib/tests/stdio/80-sscanf.c
lib/tests/stdio/90-fseek.c
scaffold/tests/00-exit-0.c [deleted file]
scaffold/tests/01-return-0.c [deleted file]
scaffold/tests/02-return-1.c [deleted file]
scaffold/tests/02-return-1.exit [deleted file]
scaffold/tests/03-call.c [deleted file]
scaffold/tests/04-call-0.c [deleted file]
scaffold/tests/05-call-1.c [deleted file]
scaffold/tests/05-call-1.exit [deleted file]
scaffold/tests/06-call-2.c [deleted file]
scaffold/tests/06-call-not-1.c [deleted file]
scaffold/tests/06-call-string.c [deleted file]
scaffold/tests/06-call-variable.c [deleted file]
scaffold/tests/06-not-call-1.c [deleted file]
scaffold/tests/06-return-void.c [deleted file]
scaffold/tests/07-include.c [deleted file]
scaffold/tests/07-include.exit [deleted file]
scaffold/tests/08-assign-global.c [deleted file]
scaffold/tests/08-assign-negative.c [deleted file]
scaffold/tests/08-assign.c [deleted file]
scaffold/tests/10-if-0.c [deleted file]
scaffold/tests/11-if-1.c [deleted file]
scaffold/tests/12-if-eq.c [deleted file]
scaffold/tests/13-if-neq.c [deleted file]
scaffold/tests/14-if-goto.c [deleted file]
scaffold/tests/15-if-not-f.c [deleted file]
scaffold/tests/16-if-t.c [deleted file]
scaffold/tests/17-compare-and-or.c [deleted file]
scaffold/tests/17-compare-and.c [deleted file]
scaffold/tests/17-compare-assign.c [deleted file]
scaffold/tests/17-compare-call.c [deleted file]
scaffold/tests/17-compare-char.c [deleted file]
scaffold/tests/17-compare-ge.c [deleted file]
scaffold/tests/17-compare-gt.c [deleted file]
scaffold/tests/17-compare-le.c [deleted file]
scaffold/tests/17-compare-lt.c [deleted file]
scaffold/tests/17-compare-or.c [deleted file]
scaffold/tests/17-compare-unsigned-char-le.c [deleted file]
scaffold/tests/17-compare-unsigned-ge.c [deleted file]
scaffold/tests/17-compare-unsigned-gt.c [deleted file]
scaffold/tests/17-compare-unsigned-le.c [deleted file]
scaffold/tests/17-compare-unsigned-long-le.c [deleted file]
scaffold/tests/17-compare-unsigned-lt.c [deleted file]
scaffold/tests/17-compare-unsigned-short-le.c [deleted file]
scaffold/tests/18-assign-shadow.c [deleted file]
scaffold/tests/20-while.c [deleted file]
scaffold/tests/21-char-array-simple.c [deleted file]
scaffold/tests/21-char-array.c [deleted file]
scaffold/tests/22-while-char-array.c [deleted file]
scaffold/tests/23-global-pointer-init-null.c [deleted file]
scaffold/tests/23-global-pointer-init.c [deleted file]
scaffold/tests/23-global-pointer-pointer-ref.c [deleted file]
scaffold/tests/23-global-pointer-ref.c [deleted file]
scaffold/tests/23-pointer-sub.c [deleted file]
scaffold/tests/23-pointer.c [deleted file]
scaffold/tests/32-call-wrap.c [deleted file]
scaffold/tests/32-compare.c [deleted file]
scaffold/tests/33-and-or.c [deleted file]
scaffold/tests/34-pre-post.c [deleted file]
scaffold/tests/35-compare-char.c [deleted file]
scaffold/tests/36-compare-arithmetic.c [deleted file]
scaffold/tests/37-compare-assign.c [deleted file]
scaffold/tests/38-compare-call-2.c [deleted file]
scaffold/tests/38-compare-call-3.c [deleted file]
scaffold/tests/38-compare-call.c [deleted file]
scaffold/tests/40-if-else.c [deleted file]
scaffold/tests/41-ternary.c [deleted file]
scaffold/tests/42-goto-label.c [deleted file]
scaffold/tests/43-for-do-while.c [deleted file]
scaffold/tests/44-switch-body-fallthrough.c [deleted file]
scaffold/tests/44-switch-fallthrough.c [deleted file]
scaffold/tests/44-switch.c [deleted file]
scaffold/tests/45-void-call.c [deleted file]
scaffold/tests/46-function-static.c [deleted file]
scaffold/tests/47-function-expression.c [deleted file]
scaffold/tests/48-global-static.c [deleted file]
scaffold/tests/51-pointer-sub.c [deleted file]
scaffold/tests/54-argc.c [deleted file]
scaffold/tests/54-argv.c [deleted file]
scaffold/tests/55-char-array.c [deleted file]
scaffold/tests/60-math.c [deleted file]
scaffold/tests/61-array.c [deleted file]
scaffold/tests/62-array.c [deleted file]
scaffold/tests/63-struct-array-assign.c [deleted file]
scaffold/tests/63-struct-array-compare.c [deleted file]
scaffold/tests/63-struct-array.c [deleted file]
scaffold/tests/63-struct-assign.c [deleted file]
scaffold/tests/63-struct-cell.c [deleted file]
scaffold/tests/63-struct-function.c [deleted file]
scaffold/tests/63-struct-local.c [deleted file]
scaffold/tests/63-struct-pointer.c [deleted file]
scaffold/tests/63-struct.c [deleted file]
scaffold/tests/64-make-cell.c [deleted file]
scaffold/tests/65-read.c [deleted file]
scaffold/tests/66-local-char-array.c [deleted file]
scaffold/tests/70-stdarg.c [deleted file]
scaffold/tests/71-struct-array.c [deleted file]
scaffold/tests/72-typedef-struct-def.c [deleted file]
scaffold/tests/73-union-hello.c [deleted file]
scaffold/tests/73-union.c [deleted file]
scaffold/tests/74-multi-line-string.c [deleted file]
scaffold/tests/75-struct-union.c [deleted file]
scaffold/tests/76-pointer-arithmetic-pp.c [deleted file]
scaffold/tests/76-pointer-arithmetic.c [deleted file]
scaffold/tests/77-pointer-assign.c [deleted file]
scaffold/tests/78-union-struct.c [deleted file]
scaffold/tests/79-int-array-simple.c [deleted file]
scaffold/tests/79-int-array.c [deleted file]
scaffold/tests/7a-struct-char-array.c [deleted file]
scaffold/tests/7b-struct-int-array-hello.c [deleted file]
scaffold/tests/7b-struct-int-array-pointer.c [deleted file]
scaffold/tests/7b-struct-int-array.c [deleted file]
scaffold/tests/7c-dynarray.c [deleted file]
scaffold/tests/7d-cast-char.c [deleted file]
scaffold/tests/7e-struct-array-access.c [deleted file]
scaffold/tests/7f-struct-pointer-arithmetic.c [deleted file]
scaffold/tests/7g-struct-byte-word-field.c [deleted file]
scaffold/tests/7h-struct-assign.c [deleted file]
scaffold/tests/7i-struct-struct-simple.c [deleted file]
scaffold/tests/7i-struct-struct.c [deleted file]
scaffold/tests/7k-empty-for.c [deleted file]
scaffold/tests/7k-for-each-elem-simple.c [deleted file]
scaffold/tests/7k-for-each-elem.c [deleted file]
scaffold/tests/7l-struct-any-size-array-simple.c [deleted file]
scaffold/tests/7l-struct-any-size-array.c [deleted file]
scaffold/tests/7m-struct-char-array-assign.c [deleted file]
scaffold/tests/7n-struct-struct-array.c [deleted file]
scaffold/tests/7o-struct-pre-post-simple.c [deleted file]
scaffold/tests/7o-struct-pre-post.c [deleted file]
scaffold/tests/7p-struct-cast.c [deleted file]
scaffold/tests/7q-bit-field-simple.c [deleted file]
scaffold/tests/7q-bit-field.c [deleted file]
scaffold/tests/7r-sign-extend.c [deleted file]
scaffold/tests/7s-struct-short.c [deleted file]
scaffold/tests/7s-unsigned-compare.c [deleted file]
scaffold/tests/7t-function-destruct.c [deleted file]
scaffold/tests/7u-call-ternary.c [deleted file]
scaffold/tests/7u-double.c [deleted file]
scaffold/tests/7u-inc-byte-word.c [deleted file]
scaffold/tests/7u-long-long.c [deleted file]
scaffold/tests/7u-struct-func.c [deleted file]
scaffold/tests/7u-struct-size10.c [deleted file]
scaffold/tests/7u-ternary-expression.c [deleted file]
scaffold/tests/7u-vstack.c [deleted file]
scaffold/tests/82-define.c [deleted file]
scaffold/tests/83-heterogenoous-init.c [deleted file]
scaffold/tests/84-struct-field-list.c [deleted file]
scaffold/tests/85-sizeof.c [deleted file]
scaffold/tests/90-goto-var.c [deleted file]
scaffold/tests/91-goto-array.c [deleted file]
scaffold/tests/a0-call-trunc-char.c [deleted file]
scaffold/tests/a0-call-trunc-int.c [deleted file]
scaffold/tests/a0-call-trunc-short.c [deleted file]
scaffold/tests/a0-math-divide-signed-negative.c [deleted file]
scaffold/tests/a1-global-no-align.c [deleted file]
scaffold/tests/a1-global-no-clobber.c [deleted file]
scaffold/tests/exit-42.i [deleted file]
scaffold/tests/t.c [deleted file]

index bc1a33c90069fdd2ddae855e7c1344a272500449..67b9e99700df5102545c8e212aba10066a72ce55 100755 (executable)
@@ -26,170 +26,170 @@ set -e
 test_sh=${test_sh-${srcdest}build-aux/test.sh}
 
 tests="
-scaffold/tests/t
-scaffold/tests/00-exit-0
-scaffold/tests/01-return-0
-scaffold/tests/02-return-1
-scaffold/tests/03-call
-scaffold/tests/04-call-0
-scaffold/tests/05-call-1
-scaffold/tests/06-call-not-1
-scaffold/tests/06-not-call-1
-scaffold/tests/06-call-2
-scaffold/tests/06-call-string
-scaffold/tests/06-call-variable
-scaffold/tests/06-return-void
-scaffold/tests/07-include
-scaffold/tests/08-assign
-scaffold/tests/08-assign-negative
-scaffold/tests/08-assign-global
-scaffold/tests/10-if-0
-scaffold/tests/11-if-1
-scaffold/tests/12-if-eq
-scaffold/tests/13-if-neq
-scaffold/tests/14-if-goto
-scaffold/tests/15-if-not-f
-scaffold/tests/16-if-t
-scaffold/tests/17-compare-char
-scaffold/tests/17-compare-ge
-scaffold/tests/17-compare-gt
-scaffold/tests/17-compare-le
-scaffold/tests/17-compare-lt
-scaffold/tests/17-compare-unsigned-ge
-scaffold/tests/17-compare-unsigned-gt
-scaffold/tests/17-compare-unsigned-le
-scaffold/tests/17-compare-unsigned-lt
-scaffold/tests/17-compare-unsigned-char-le
-scaffold/tests/17-compare-unsigned-short-le
-scaffold/tests/17-compare-unsigned-long-le
-scaffold/tests/17-compare-and
-scaffold/tests/17-compare-or
-scaffold/tests/17-compare-and-or
-scaffold/tests/17-compare-assign
-scaffold/tests/17-compare-call
-scaffold/tests/18-assign-shadow
-scaffold/tests/20-while
-scaffold/tests/21-char-array-simple
-scaffold/tests/21-char-array
-scaffold/tests/22-while-char-array
-scaffold/tests/23-global-pointer-init-null
-scaffold/tests/23-global-pointer-init
-scaffold/tests/23-global-pointer-ref
-scaffold/tests/23-global-pointer-pointer-ref
-scaffold/tests/23-pointer-sub
-scaffold/tests/23-pointer
+lib/tests/scaffold/t
+lib/tests/scaffold/00-exit-0
+lib/tests/scaffold/01-return-0
+lib/tests/scaffold/02-return-1
+lib/tests/scaffold/03-call
+lib/tests/scaffold/04-call-0
+lib/tests/scaffold/05-call-1
+lib/tests/scaffold/06-call-not-1
+lib/tests/scaffold/06-not-call-1
+lib/tests/scaffold/06-call-2
+lib/tests/scaffold/06-call-string
+lib/tests/scaffold/06-call-variable
+lib/tests/scaffold/06-return-void
+lib/tests/scaffold/07-include
+lib/tests/scaffold/08-assign
+lib/tests/scaffold/08-assign-negative
+lib/tests/scaffold/08-assign-global
+lib/tests/scaffold/10-if-0
+lib/tests/scaffold/11-if-1
+lib/tests/scaffold/12-if-eq
+lib/tests/scaffold/13-if-neq
+lib/tests/scaffold/14-if-goto
+lib/tests/scaffold/15-if-not-f
+lib/tests/scaffold/16-if-t
+lib/tests/scaffold/17-compare-char
+lib/tests/scaffold/17-compare-ge
+lib/tests/scaffold/17-compare-gt
+lib/tests/scaffold/17-compare-le
+lib/tests/scaffold/17-compare-lt
+lib/tests/scaffold/17-compare-unsigned-ge
+lib/tests/scaffold/17-compare-unsigned-gt
+lib/tests/scaffold/17-compare-unsigned-le
+lib/tests/scaffold/17-compare-unsigned-lt
+lib/tests/scaffold/17-compare-unsigned-char-le
+lib/tests/scaffold/17-compare-unsigned-short-le
+lib/tests/scaffold/17-compare-unsigned-long-le
+lib/tests/scaffold/17-compare-and
+lib/tests/scaffold/17-compare-or
+lib/tests/scaffold/17-compare-and-or
+lib/tests/scaffold/17-compare-assign
+lib/tests/scaffold/17-compare-call
+lib/tests/scaffold/18-assign-shadow
+lib/tests/scaffold/20-while
+lib/tests/scaffold/21-char-array-simple
+lib/tests/scaffold/21-char-array
+lib/tests/scaffold/22-while-char-array
+lib/tests/scaffold/23-global-pointer-init-null
+lib/tests/scaffold/23-global-pointer-init
+lib/tests/scaffold/23-global-pointer-ref
+lib/tests/scaffold/23-global-pointer-pointer-ref
+lib/tests/scaffold/23-pointer-sub
+lib/tests/scaffold/23-pointer
 lib/tests/mes/30-oputs
 lib/tests/string/30-strlen
-scaffold/tests/32-call-wrap
-scaffold/tests/32-compare
-scaffold/tests/33-and-or
-scaffold/tests/34-pre-post
-scaffold/tests/35-compare-char
-scaffold/tests/36-compare-arithmetic
-scaffold/tests/37-compare-assign
-scaffold/tests/38-compare-call-2
-scaffold/tests/38-compare-call-3
-scaffold/tests/38-compare-call
-scaffold/tests/40-if-else
-scaffold/tests/41-ternary
-scaffold/tests/42-goto-label
-scaffold/tests/43-for-do-while
-scaffold/tests/44-switch
-scaffold/tests/44-switch-fallthrough
-scaffold/tests/44-switch-body-fallthrough
-scaffold/tests/45-void-call
-scaffold/tests/46-function-static
-scaffold/tests/47-function-expression
-scaffold/tests/48-global-static
+lib/tests/scaffold/32-call-wrap
+lib/tests/scaffold/32-compare
+lib/tests/scaffold/33-and-or
+lib/tests/scaffold/34-pre-post
+lib/tests/scaffold/35-compare-char
+lib/tests/scaffold/36-compare-arithmetic
+lib/tests/scaffold/37-compare-assign
+lib/tests/scaffold/38-compare-call-2
+lib/tests/scaffold/38-compare-call-3
+lib/tests/scaffold/38-compare-call
+lib/tests/scaffold/40-if-else
+lib/tests/scaffold/41-ternary
+lib/tests/scaffold/42-goto-label
+lib/tests/scaffold/43-for-do-while
+lib/tests/scaffold/44-switch
+lib/tests/scaffold/44-switch-fallthrough
+lib/tests/scaffold/44-switch-body-fallthrough
+lib/tests/scaffold/45-void-call
+lib/tests/scaffold/46-function-static
+lib/tests/scaffold/47-function-expression
+lib/tests/scaffold/48-global-static
 lib/tests/assert/50-assert
 lib/tests/mes/50-itoa
 lib/tests/posix/50-getenv
 lib/tests/string/50-strcmp
 lib/tests/string/50-strcpy
 lib/tests/string/50-strncmp
-scaffold/tests/51-pointer-sub
-scaffold/tests/54-argc
-scaffold/tests/54-argv
-scaffold/tests/55-char-array
-scaffold/tests/60-math
-scaffold/tests/61-array
-scaffold/tests/62-array
-scaffold/tests/63-struct
-scaffold/tests/63-struct-pointer
-scaffold/tests/63-struct-local
-scaffold/tests/63-struct-function
-scaffold/tests/63-struct-assign
-scaffold/tests/63-struct-array
-scaffold/tests/63-struct-array-assign
-scaffold/tests/63-struct-array-compare
-scaffold/tests/63-struct-cell
-scaffold/tests/64-make-cell
-scaffold/tests/65-read
-scaffold/tests/66-local-char-array
-scaffold/tests/70-stdarg
+lib/tests/scaffold/51-pointer-sub
+lib/tests/scaffold/54-argc
+lib/tests/scaffold/54-argv
+lib/tests/scaffold/55-char-array
+lib/tests/scaffold/60-math
+lib/tests/scaffold/61-array
+lib/tests/scaffold/62-array
+lib/tests/scaffold/63-struct
+lib/tests/scaffold/63-struct-pointer
+lib/tests/scaffold/63-struct-local
+lib/tests/scaffold/63-struct-function
+lib/tests/scaffold/63-struct-assign
+lib/tests/scaffold/63-struct-array
+lib/tests/scaffold/63-struct-array-assign
+lib/tests/scaffold/63-struct-array-compare
+lib/tests/scaffold/63-struct-cell
+lib/tests/scaffold/64-make-cell
+lib/tests/scaffold/65-read
+lib/tests/scaffold/66-local-char-array
+lib/tests/scaffold/70-stdarg
 lib/tests/stdio/70-printf-hello
 lib/tests/stdio/70-printf-simple
 lib/tests/stdio/70-printf
 lib/tests/stdlib/70-strtoull
 lib/tests/string/70-strchr
-scaffold/tests/71-struct-array
-scaffold/tests/72-typedef-struct-def
-scaffold/tests/73-union-hello
-scaffold/tests/73-union
-scaffold/tests/74-multi-line-string
-scaffold/tests/75-struct-union
-scaffold/tests/76-pointer-arithmetic-pp
-scaffold/tests/76-pointer-arithmetic
-scaffold/tests/77-pointer-assign
-scaffold/tests/78-union-struct
-scaffold/tests/79-int-array-simple
-scaffold/tests/79-int-array
-scaffold/tests/7a-struct-char-array
-scaffold/tests/7b-struct-int-array-hello
-scaffold/tests/7b-struct-int-array-pointer
-scaffold/tests/7b-struct-int-array
-scaffold/tests/7c-dynarray
-scaffold/tests/7d-cast-char
-scaffold/tests/7e-struct-array-access
-scaffold/tests/7f-struct-pointer-arithmetic
-scaffold/tests/7g-struct-byte-word-field
-scaffold/tests/7h-struct-assign
-scaffold/tests/7i-struct-struct-simple
-scaffold/tests/7i-struct-struct
-scaffold/tests/7k-empty-for
-scaffold/tests/7k-for-each-elem-simple
-scaffold/tests/7k-for-each-elem
-scaffold/tests/7l-struct-any-size-array-simple
-scaffold/tests/7l-struct-any-size-array
-scaffold/tests/7m-struct-char-array-assign
-scaffold/tests/7n-struct-struct-array
-scaffold/tests/7o-struct-pre-post-simple
-scaffold/tests/7o-struct-pre-post
-scaffold/tests/7p-struct-cast
-scaffold/tests/7q-bit-field-simple
-scaffold/tests/7q-bit-field
-scaffold/tests/7r-sign-extend
-scaffold/tests/7s-struct-short
-scaffold/tests/7s-unsigned-compare
-scaffold/tests/7t-function-destruct
-scaffold/tests/7u-double
-scaffold/tests/7u-long-long
-scaffold/tests/7u-ternary-expression
-scaffold/tests/7u-call-ternary
-scaffold/tests/7u-inc-byte-word
-scaffold/tests/7u-struct-func
-scaffold/tests/7u-struct-size10
-scaffold/tests/7u-vstack
+lib/tests/scaffold/71-struct-array
+lib/tests/scaffold/72-typedef-struct-def
+lib/tests/scaffold/73-union-hello
+lib/tests/scaffold/73-union
+lib/tests/scaffold/74-multi-line-string
+lib/tests/scaffold/75-struct-union
+lib/tests/scaffold/76-pointer-arithmetic-pp
+lib/tests/scaffold/76-pointer-arithmetic
+lib/tests/scaffold/77-pointer-assign
+lib/tests/scaffold/78-union-struct
+lib/tests/scaffold/79-int-array-simple
+lib/tests/scaffold/79-int-array
+lib/tests/scaffold/7a-struct-char-array
+lib/tests/scaffold/7b-struct-int-array-hello
+lib/tests/scaffold/7b-struct-int-array-pointer
+lib/tests/scaffold/7b-struct-int-array
+lib/tests/scaffold/7c-dynarray
+lib/tests/scaffold/7d-cast-char
+lib/tests/scaffold/7e-struct-array-access
+lib/tests/scaffold/7f-struct-pointer-arithmetic
+lib/tests/scaffold/7g-struct-byte-word-field
+lib/tests/scaffold/7h-struct-assign
+lib/tests/scaffold/7i-struct-struct-simple
+lib/tests/scaffold/7i-struct-struct
+lib/tests/scaffold/7k-empty-for
+lib/tests/scaffold/7k-for-each-elem-simple
+lib/tests/scaffold/7k-for-each-elem
+lib/tests/scaffold/7l-struct-any-size-array-simple
+lib/tests/scaffold/7l-struct-any-size-array
+lib/tests/scaffold/7m-struct-char-array-assign
+lib/tests/scaffold/7n-struct-struct-array
+lib/tests/scaffold/7o-struct-pre-post-simple
+lib/tests/scaffold/7o-struct-pre-post
+lib/tests/scaffold/7p-struct-cast
+lib/tests/scaffold/7q-bit-field-simple
+lib/tests/scaffold/7q-bit-field
+lib/tests/scaffold/7r-sign-extend
+lib/tests/scaffold/7s-struct-short
+lib/tests/scaffold/7s-unsigned-compare
+lib/tests/scaffold/7t-function-destruct
+lib/tests/scaffold/7u-double
+lib/tests/scaffold/7u-long-long
+lib/tests/scaffold/7u-ternary-expression
+lib/tests/scaffold/7u-call-ternary
+lib/tests/scaffold/7u-inc-byte-word
+lib/tests/scaffold/7u-struct-func
+lib/tests/scaffold/7u-struct-size10
+lib/tests/scaffold/7u-vstack
 lib/tests/setjmp/80-setjmp
 lib/tests/stdio/80-sscanf
 lib/tests/stdlib/80-qsort
 lib/tests/stdlib/80-qsort-dupes
 lib/tests/string/80-strncpy
 lib/tests/string/80-strrchr
-scaffold/tests/82-define
-scaffold/tests/83-heterogenoous-init
-scaffold/tests/84-struct-field-list
-scaffold/tests/85-sizeof
+lib/tests/scaffold/82-define
+lib/tests/scaffold/83-heterogenoous-init
+lib/tests/scaffold/84-struct-field-list
+lib/tests/scaffold/85-sizeof
 lib/tests/dirent/90-readdir
 lib/tests/io/90-stat
 lib/tests/posix/90-unsetenv
@@ -202,39 +202,39 @@ lib/tests/stdlib/90-strtol
 lib/tests/string/90-snprintf
 lib/tests/string/90-strpbrk
 lib/tests/string/90-strspn
-scaffold/tests/a0-call-trunc-char
-scaffold/tests/a0-call-trunc-short
-scaffold/tests/a0-call-trunc-int
-scaffold/tests/a0-math-divide-signed-negative
-scaffold/tests/a1-global-no-align
-scaffold/tests/a1-global-no-clobber
+lib/tests/scaffold/a0-call-trunc-char
+lib/tests/scaffold/a0-call-trunc-short
+lib/tests/scaffold/a0-call-trunc-int
+lib/tests/scaffold/a0-math-divide-signed-negative
+lib/tests/scaffold/a1-global-no-align
+lib/tests/scaffold/a1-global-no-clobber
 "
 
 broken="$broken
+lib/tests/scaffold/17-compare-unsigned-char-le
+lib/tests/scaffold/17-compare-unsigned-short-le
+lib/tests/scaffold/66-local-char-array
+lib/tests/scaffold/a0-call-trunc-int
+lib/tests/scaffold/a0-math-divide-signed-negative
 lib/tests/posix/50-getenv
-scaffold/tests/17-compare-unsigned-char-le
-scaffold/tests/17-compare-unsigned-short-le
-scaffold/tests/66-local-char-array
-scaffold/tests/a0-call-trunc-int
-scaffold/tests/a0-math-divide-signed-negative
 "
 
 if [ "$mes_arch" = "x86_64-gcc" ]; then
     broken="$broken
-scaffold/tests/21-char-array
-scaffold/tests/41-ternary
-scaffold/tests/stdio/70-printf-stdarg
-scaffold/tests/stdio/70-printf-simple
-scaffold/tests/stdio/70-printf
+lib/tests/scaffold/21-char-array
+lib/tests/scaffold/41-ternary
+lib/tests/scaffold/stdio/70-printf-stdarg
+lib/tests/scaffold/stdio/70-printf-simple
+lib/tests/scaffold/stdio/70-printf
 lib/tests/setjmp/80-setjmp
-scaffold/tests/a1-global-no-align
+lib/tests/scaffold/a1-global-no-align
 "
     # Debian: debugme itoa is broken
     broken="$broken
-scaffold/tests/47-function-expression
-scaffold/tests/62-array
-scaffold/tests/65-read
-scaffold/tests/85-sizeof
+lib/tests/scaffold/47-function-expression
+lib/tests/scaffold/62-array
+lib/tests/scaffold/65-read
+lib/tests/scaffold/85-sizeof
 lib/tests/mes/90-abtod
 lib/tests/mes/90-dtoab
 lib/tests/posix/90-execlp
index 602b61764068f8d042292b6454db80eb169631c6..8f225d2a37c5bef8ab555377c7ee853909c0acbb 100644 (file)
@@ -34,20 +34,20 @@ qsort_strcmp (void const *a, void const *b)
 int
 main ()
 {
-  DIR *d = opendir ("lib/tests/dirent/readdir-fu");
+  DIR *d = opendir ("../lib/tests/dirent/readdir-fu");
   if (d)
     return 1;
   if (errno != ENOENT)
     return 2;
 
-  d = opendir ("lib/tests/dirent/90-readdir.c");
+  d = opendir ("../lib/tests/dirent/90-readdir.c");
   if (d)
     return 3;
   if (errno != ENOTDIR)
     return 4;
 
   errno = 0;
-  d = opendir ("lib/tests/dirent/readdir.dir");
+  d = opendir ("../lib/tests/dirent/readdir.dir");
   if (!d)
     return 5;
 
index a2d49830b0a09648782908445800edcf57fa1333..4182084246cef9f50d9a664db1e22a6fc50cc8a8 100644 (file)
@@ -66,7 +66,7 @@ main ()
   // char *name = "boo";
   // errno = 0;
   // fprintf (stderr, "%s: %s\n", name, strerror (errno));
-  int fd = open ("COPYING", 0);
+  int fd = open ("../COPYING", 0);
 
   struct stat sbuf;
 
diff --git a/lib/tests/scaffold/00-exit-0.c b/lib/tests/scaffold/00-exit-0.c
new file mode 100644 (file)
index 0000000..6684ae4
--- /dev/null
@@ -0,0 +1,57 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+#if __i386__
+
+#if __MESC__
+  asm ("mov____$i32,%ebx %0");
+  asm ("mov____$i32,%eax SYS_exit");
+  asm ("int____$0x80");
+#elif __TINYC__
+  asm ("mov    $0,%ebx");
+  asm ("mov    $1,%eax");
+  asm ("int    $128");
+#else // !__TINYC__
+  asm ("mov    $0,%ebx");
+  asm ("mov    $1,%eax");
+  asm ("int    $0x80");
+#endif // !__TINYC__
+
+#elif __x86_64__
+
+#if __MESC__
+  asm ("mov____$i32,%rdi %0");
+  asm ("mov____$i32,%rax SYS_exit");
+  asm ("syscall");
+#elif __TINYC__
+  asm ("mov    $0,%rdi");
+  asm ("mov    $0x3c,%rax");
+  asm ("syscall");
+#else // !__TINYC__
+  asm ("mov    $0,%rdi");
+  asm ("mov    $60,%rax");
+  asm ("syscall");
+#endif // !__TINYC__
+
+#endif // ! __x86_64__
+}
diff --git a/lib/tests/scaffold/01-return-0.c b/lib/tests/scaffold/01-return-0.c
new file mode 100644 (file)
index 0000000..78092ca
--- /dev/null
@@ -0,0 +1,25 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  return 0;
+}
diff --git a/lib/tests/scaffold/02-return-1.c b/lib/tests/scaffold/02-return-1.c
new file mode 100644 (file)
index 0000000..318d368
--- /dev/null
@@ -0,0 +1,25 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  return 1;
+}
diff --git a/lib/tests/scaffold/02-return-1.exit b/lib/tests/scaffold/02-return-1.exit
new file mode 100644 (file)
index 0000000..56a6051
--- /dev/null
@@ -0,0 +1 @@
+1
\ No newline at end of file
diff --git a/lib/tests/scaffold/03-call.c b/lib/tests/scaffold/03-call.c
new file mode 100644 (file)
index 0000000..05b8f69
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+test0 ()
+{
+  return 0;
+}
+
+int
+main ()
+{
+  return test0 ();
+}
diff --git a/lib/tests/scaffold/04-call-0.c b/lib/tests/scaffold/04-call-0.c
new file mode 100644 (file)
index 0000000..fb05834
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+testi (int t)
+{
+  return t;
+}
+
+int
+main ()
+{
+  return testi (0);
+}
diff --git a/lib/tests/scaffold/05-call-1.c b/lib/tests/scaffold/05-call-1.c
new file mode 100644 (file)
index 0000000..d97579d
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+testi (int t)
+{
+  return t;
+}
+
+int
+main ()
+{
+  return testi (1);
+}
diff --git a/lib/tests/scaffold/05-call-1.exit b/lib/tests/scaffold/05-call-1.exit
new file mode 100644 (file)
index 0000000..56a6051
--- /dev/null
@@ -0,0 +1 @@
+1
\ No newline at end of file
diff --git a/lib/tests/scaffold/06-call-2.c b/lib/tests/scaffold/06-call-2.c
new file mode 100644 (file)
index 0000000..961478a
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+test (int a, int b)
+{
+  return a + b;
+}
+
+int
+main ()
+{
+  int i = -2;
+  return test (i, 2);
+}
diff --git a/lib/tests/scaffold/06-call-not-1.c b/lib/tests/scaffold/06-call-not-1.c
new file mode 100644 (file)
index 0000000..296027b
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+testi (int t)
+{
+  return !t;
+}
+
+int
+main ()
+{
+  return testi (1);
+}
diff --git a/lib/tests/scaffold/06-call-string.c b/lib/tests/scaffold/06-call-string.c
new file mode 100644 (file)
index 0000000..647f4a3
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+test (char const *s)
+{
+  return 0;
+}
+
+int
+main ()
+{
+  return test ("hello\n");
+}
diff --git a/lib/tests/scaffold/06-call-variable.c b/lib/tests/scaffold/06-call-variable.c
new file mode 100644 (file)
index 0000000..21eb538
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+test (int a)
+{
+  return 1 - a;
+}
+
+int (*f) (int);
+
+int
+main ()
+{
+  f = &test;
+  return (*f) (1);
+}
diff --git a/lib/tests/scaffold/06-not-call-1.c b/lib/tests/scaffold/06-not-call-1.c
new file mode 100644 (file)
index 0000000..82b457b
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+test ()
+{
+  return 1;
+}
+
+int
+main ()
+{
+  return !test ();
+}
diff --git a/lib/tests/scaffold/06-return-void.c b/lib/tests/scaffold/06-return-void.c
new file mode 100644 (file)
index 0000000..02a6c6a
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+void
+test ()
+{
+  return;
+}
+
+int
+main ()
+{
+  test ();
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/07-include.c b/lib/tests/scaffold/07-include.c
new file mode 100644 (file)
index 0000000..706d325
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "exit-42.i"
+
+int
+main ()
+{
+  return 1;
+}
diff --git a/lib/tests/scaffold/07-include.exit b/lib/tests/scaffold/07-include.exit
new file mode 100644 (file)
index 0000000..d81cc07
--- /dev/null
@@ -0,0 +1 @@
+42
diff --git a/lib/tests/scaffold/08-assign-global.c b/lib/tests/scaffold/08-assign-global.c
new file mode 100644 (file)
index 0000000..268fab7
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int foo;
+
+int
+main ()
+{
+  if (foo)
+    return 1;
+  foo = 42;
+  if (foo != 42)
+    return 2;
+  return 0;
+}
diff --git a/lib/tests/scaffold/08-assign-negative.c b/lib/tests/scaffold/08-assign-negative.c
new file mode 100644 (file)
index 0000000..4c5650e
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  int a;
+  int b;
+  a = 1;
+  b = -a;
+  return a + b;
+}
diff --git a/lib/tests/scaffold/08-assign.c b/lib/tests/scaffold/08-assign.c
new file mode 100644 (file)
index 0000000..f25c438
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  int a;
+  int b;
+  int c;
+  a = 2;
+  b = -2;
+  c = a + b;
+  asm ("nop");
+  return c;
+}
diff --git a/lib/tests/scaffold/10-if-0.c b/lib/tests/scaffold/10-if-0.c
new file mode 100644 (file)
index 0000000..ebd41fe
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  if (0)
+    return 1;
+  return 0;
+}
diff --git a/lib/tests/scaffold/11-if-1.c b/lib/tests/scaffold/11-if-1.c
new file mode 100644 (file)
index 0000000..7f5a82f
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  if (1)
+    return 0;
+  return 1;
+}
diff --git a/lib/tests/scaffold/12-if-eq.c b/lib/tests/scaffold/12-if-eq.c
new file mode 100644 (file)
index 0000000..ab4c2e5
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  if (0 == 0)
+    return 0;
+  return 1;
+}
diff --git a/lib/tests/scaffold/13-if-neq.c b/lib/tests/scaffold/13-if-neq.c
new file mode 100644 (file)
index 0000000..74f0d37
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  if (0 != 1)
+    return 0;
+  return 1;
+}
diff --git a/lib/tests/scaffold/14-if-goto.c b/lib/tests/scaffold/14-if-goto.c
new file mode 100644 (file)
index 0000000..36c435e
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  if (0 == 0)
+    goto ok;
+  return 1;
+ok:
+  if (0 != 1)
+    goto ok1;
+  return 1;
+ok1:
+  return 0;
+}
diff --git a/lib/tests/scaffold/15-if-not-f.c b/lib/tests/scaffold/15-if-not-f.c
new file mode 100644 (file)
index 0000000..f726f8a
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  int f = 0;
+  if (!f)
+    return 0;
+  return 1;
+}
diff --git a/lib/tests/scaffold/16-if-t.c b/lib/tests/scaffold/16-if-t.c
new file mode 100644 (file)
index 0000000..84af6cd
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  int t = 1;
+  if (t)
+    return 0;
+  return 1;
+}
diff --git a/lib/tests/scaffold/17-compare-and-or.c b/lib/tests/scaffold/17-compare-and-or.c
new file mode 100644 (file)
index 0000000..146721e
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  char c = 'a';
+  if (c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')
+    return 1;
+  if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'a')
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-and.c b/lib/tests/scaffold/17-compare-and.c
new file mode 100644 (file)
index 0000000..78ce23a
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  char c = 'a';
+  if (c >= 'A' && c <= 'Z')
+    return 1;
+  if (c >= 'a' && c <= 'z')
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-assign.c b/lib/tests/scaffold/17-compare-assign.c
new file mode 100644 (file)
index 0000000..a0e8a8f
--- /dev/null
@@ -0,0 +1,38 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+int
+test (int i)
+{
+  return i;
+}
+
+int
+main ()
+{
+  int a;
+  a = 0 == 0;
+  if (a != 1)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/17-compare-call.c b/lib/tests/scaffold/17-compare-call.c
new file mode 100644 (file)
index 0000000..c56e738
--- /dev/null
@@ -0,0 +1,38 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+int
+test (int i)
+{
+  return i;
+}
+
+int
+main ()
+{
+  int a;
+  a = test (0 == 0);
+  if (a != 1)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/17-compare-char.c b/lib/tests/scaffold/17-compare-char.c
new file mode 100644 (file)
index 0000000..2441bfe
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  if ('0' != 48)
+    return 1;
+  if ('\a' != 7)
+    return 2;
+  if ('\b' != 8)
+    return 3;
+  return 0;
+}
diff --git a/lib/tests/scaffold/17-compare-ge.c b/lib/tests/scaffold/17-compare-ge.c
new file mode 100644 (file)
index 0000000..9e81b37
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  int r = 0;
+  if (r > 0)
+    return 1;
+  if (r >= -1)
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-gt.c b/lib/tests/scaffold/17-compare-gt.c
new file mode 100644 (file)
index 0000000..b88c49b
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  int r = 0;
+  if (r > 0)
+    return 1;
+  if (r > -1)
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-le.c b/lib/tests/scaffold/17-compare-le.c
new file mode 100644 (file)
index 0000000..eb46a02
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  int r = 0;
+  if (r <= -1)
+    return 1;
+  if (r <= 0)
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-lt.c b/lib/tests/scaffold/17-compare-lt.c
new file mode 100644 (file)
index 0000000..e77aa15
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  int r = 0;
+  if (r < -1)
+    return 1;
+  if (r < 1)
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-or.c b/lib/tests/scaffold/17-compare-or.c
new file mode 100644 (file)
index 0000000..b83f79e
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  char c = 'a';
+  if (c == ' ' || c == '\n')
+    return 1;
+  if (c == 'A' || c == 'a')
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-unsigned-char-le.c b/lib/tests/scaffold/17-compare-unsigned-char-le.c
new file mode 100644 (file)
index 0000000..7097790
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  unsigned char r = -2;
+  if (r <= -3)
+    return 1;
+  if (r <= (unsigned char) -1)
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-unsigned-ge.c b/lib/tests/scaffold/17-compare-unsigned-ge.c
new file mode 100644 (file)
index 0000000..bc51de4
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  unsigned r = -2;
+  if (r <= -1)
+    return 0;
+  if (r <= -3)
+    return 1;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-unsigned-gt.c b/lib/tests/scaffold/17-compare-unsigned-gt.c
new file mode 100644 (file)
index 0000000..725d9b0
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  unsigned r = -2;
+  if (r > -1)
+    return 1;
+  if (r > 0)
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-unsigned-le.c b/lib/tests/scaffold/17-compare-unsigned-le.c
new file mode 100644 (file)
index 0000000..e6b7fa6
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  unsigned r = -2;
+  if (r <= -3)
+    return 1;
+  if (r <= -1)
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-unsigned-long-le.c b/lib/tests/scaffold/17-compare-unsigned-long-le.c
new file mode 100644 (file)
index 0000000..9c34b2e
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  unsigned long r = -2;
+  if (r <= -3)
+    return 1;
+  if (r <= -1)
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-unsigned-lt.c b/lib/tests/scaffold/17-compare-unsigned-lt.c
new file mode 100644 (file)
index 0000000..6f78cc1
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  unsigned r = -2;
+  if (r < 0)
+    return 1;
+  if (r < -1)
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/17-compare-unsigned-short-le.c b/lib/tests/scaffold/17-compare-unsigned-short-le.c
new file mode 100644 (file)
index 0000000..20b77eb
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  unsigned short r = -2;
+  if (r <= -3)
+    return 1;
+  if (r <= (unsigned short) -1)
+    return 0;
+  return 2;
+}
diff --git a/lib/tests/scaffold/18-assign-shadow.c b/lib/tests/scaffold/18-assign-shadow.c
new file mode 100644 (file)
index 0000000..35317af
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+int
+main ()
+{
+  int c = 0;
+  {
+    int c = 3;
+  }
+  if (c)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/20-while.c b/lib/tests/scaffold/20-while.c
new file mode 100644 (file)
index 0000000..fff52ac
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  int v = 3;
+  while (v)
+    v--;
+  return v;
+}
diff --git a/lib/tests/scaffold/21-char-array-simple.c b/lib/tests/scaffold/21-char-array-simple.c
new file mode 100644 (file)
index 0000000..1ed1679
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  char *s = "mes";
+  if (!s[0])
+    return 1;
+  if (s[1] != 'e')
+    return 2;
+  return 0;
+}
diff --git a/lib/tests/scaffold/21-char-array.c b/lib/tests/scaffold/21-char-array.c
new file mode 100644 (file)
index 0000000..a3bf9ee
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  char *s = "mes";
+  if (!s[0])
+    return 1;
+  int f;
+  int v = 3;
+  if (!s[f])
+    return 2;
+  if (s[3])
+    return 3;
+  if (s[v])
+    return 4;
+  return 0;
+}
diff --git a/lib/tests/scaffold/22-while-char-array.c b/lib/tests/scaffold/22-while-char-array.c
new file mode 100644 (file)
index 0000000..0fb28b0
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  char *s = "mes";
+  int i = 0;
+  while (s[i])
+    i++;
+  if (i != 3)
+    return 1;
+  return 0;
+}
diff --git a/lib/tests/scaffold/23-global-pointer-init-null.c b/lib/tests/scaffold/23-global-pointer-init-null.c
new file mode 100644 (file)
index 0000000..41134c9
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int *foo;
+//int bar = -1;
+
+int
+main ()
+{
+  if (foo)
+    return 1;
+  return 0;
+}
diff --git a/lib/tests/scaffold/23-global-pointer-init.c b/lib/tests/scaffold/23-global-pointer-init.c
new file mode 100644 (file)
index 0000000..36fb74f
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int foo = 1;
+int *bar = &foo;
+int baz = -1;
+
+int
+main ()
+{
+  if (foo != 1)
+    return 1;
+  if (*bar != 1)
+    return 2;
+  return 0;
+}
diff --git a/lib/tests/scaffold/23-global-pointer-pointer-ref.c b/lib/tests/scaffold/23-global-pointer-pointer-ref.c
new file mode 100644 (file)
index 0000000..70e80b9
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+char *g_hello = "hello";
+
+int
+main ()
+{
+  // char *p = g_hello;
+  // char **pp = &p;
+  char **pp = &g_hello;
+  if (**pp != 'h')
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/23-global-pointer-ref.c b/lib/tests/scaffold/23-global-pointer-ref.c
new file mode 100644 (file)
index 0000000..4dedb1f
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+char *g_hello = "hello";
+
+int
+main ()
+{
+  char *p = g_hello;
+  if (*p != 'h')
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/23-pointer-sub.c b/lib/tests/scaffold/23-pointer-sub.c
new file mode 100644 (file)
index 0000000..996f741
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+int
+main ()
+{
+  char *begin = "foo";
+  char *end = begin + 4;
+  if (end - begin != 4)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/23-pointer.c b/lib/tests/scaffold/23-pointer.c
new file mode 100644 (file)
index 0000000..59b7518
--- /dev/null
@@ -0,0 +1,69 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+char *g_hello = "hello";
+char g_arena[4] = "XXX";
+char *g_chars = g_arena;
+
+int
+main ()
+{
+  if (*g_hello != 'h')
+    return 1;
+  if (g_hello[0] != 'h')
+    return 2;
+  if (g_chars[0] != 'X')
+    return 3;
+  if (*g_chars != 'X')
+    return 4;
+
+  g_arena[0] = 'A';
+  if (*g_chars != 'A')
+    return 5;
+  char *x = g_arena;
+  if (*x++ != 'A')
+    return 5;
+  *x++ = 'C';
+  if (g_chars[1] != 'C')
+    return 7;
+  if (g_chars[2] != 'X')
+    return 8;
+  *--x = 'X';
+  if (g_chars[1] != 'X')
+    return 9;
+
+  char **pp = &x;
+  if (**pp != 'X')
+    return 10;
+
+  char *p = *pp;
+  if (*p != 'X')
+    return 11;
+
+  char ***ppp = &pp;
+  if (***ppp != 'X')
+    return 12;
+
+  char **pp2 = *ppp;
+  if (**pp2 != 'X')
+    return 13;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/32-call-wrap.c b/lib/tests/scaffold/32-call-wrap.c
new file mode 100644 (file)
index 0000000..d8451d1
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+long
+wrap (long a)
+{
+  //eputs ("wrap:"); eputs (itoa (a)); eputs ("\n");
+  return a;
+}
+
+int
+print (int a)
+{
+  //eputs ("print:"); eputs (itoa (a)); eputs ("\n");
+  return a;
+}
+
+int
+main ()
+{
+  int a[2] = { 101, -1 };
+  //eputs ("b:"); eputs (itoa (a[0])); eputs ("\n");
+  int r = wrap (print (a[0]));
+  if (r != 101)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/32-compare.c b/lib/tests/scaffold/32-compare.c
new file mode 100644 (file)
index 0000000..69d53d3
--- /dev/null
@@ -0,0 +1,267 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+isid (char c)
+{
+  return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_';
+}
+
+int
+main (int c)
+{
+  int f = 0;
+  int t = 1;
+  int one = t;
+
+  oputs ("\n");
+  oputs ("t: if (f)\n");
+  if (f)
+    return 1;
+
+  oputs ("t: if (one != 1)\n");
+  if (one != 1)
+    return 2;
+
+  oputs ("t: if (1 != one)\n");
+  if (1 != one)
+    return 3;
+
+  oputs ("t: if (one > 1)\n");
+  if (one > 1)
+    return 4;
+
+  oputs ("t: if (one < 0)\n");
+  if (one < 0)
+    return 5;
+
+  oputs ("t: if (one <= 0)\n");
+  if (one <= 0)
+    return 6;
+
+  oputs ("t: if (one >= 2)\n");
+  if (one >= 2)
+    return 7;
+
+  oputs ("t: if (!1)\n");
+  if (!1)
+    return 8;
+
+  oputs ("t: if (one == 0)\n");
+  if (one == 0)
+    return 9;
+
+  oputs ("t: if (f != 0)\n");
+  if (one != 1)
+    return 10;
+
+  oputs ("t: if (1)\n");
+  if (1)
+    goto ok0;
+
+  return 111;
+ok0:
+
+  oputs ("t: if (0); return 1; else;\n");
+  if (0)
+    return 12;
+  else
+    goto ok1;
+ok1:
+
+  oputs ("t: if (t)\n");
+  if (t)
+    goto ok2;
+
+  return 13;
+ok2:
+
+  oputs ("t: if (one > 0)\n");
+  if (one > 0)
+    goto ok3;
+
+  return 14;
+ok3:
+
+  oputs ("t: if (one < 2)\n");
+  if (one < 2)
+    goto ok4;
+
+  return 15;
+ok4:
+
+  oputs ("t: if (one >= 0)\n");
+  if (one >= 0)
+    goto ok5;
+
+  return 16;
+ok5:
+
+  oputs ("t: if (one >= 1)\n");
+  if (one >= 0)
+    goto ok6;
+
+  return 17;
+ok6:
+
+  oputs ("t: if (one <= 2)\n");
+  if (one <= 2)
+    goto ok7;
+
+  return 18;
+ok7:
+
+  oputs ("t: if (one <= 1)\n");
+  if (one <= 1)
+    goto ok8;
+
+  return 19;
+ok8:
+
+  oputs ("t: if (!0)\n");
+  if (!0)
+    goto ok9;
+
+  return 20;
+ok9:
+
+  oputs ("t: if (one == 1)\n");
+  if (one == 1)
+    goto ok10;
+
+  return 21;
+ok10:
+
+  oputs ("t: if (one != 0)\n");
+  if (one != 0)
+    goto ok11;
+
+  return 22;
+ok11:
+  ;
+
+  int m1 = -1;
+  int i;
+
+  oputs ("t: i = one > 0\n");
+  i = one > 0;
+  if (!i)
+    return 23;
+
+  oputs ("t: i = one >= 1\n");
+  i = one >= 1;
+  if (!i)
+    return 24;
+
+  oputs ("t: i = one < 2\n");
+  i = one < 2;
+  if (!i)
+    return 25;
+
+  oputs ("t: i = one <= 1\n");
+  i = one <= 1;
+  if (!i)
+    return 26;
+
+
+  oputs ("t: i = 0 > one\n");
+  i = 0 > one;
+  if (i)
+    return 27;
+
+  oputs ("t: i = 0 >= one\n");
+  i = 0 >= one;
+  if (i)
+    return 28;
+
+  oputs ("t: i = 1 < one \n");
+  i = 1 < one;
+  if (i)
+    return 29;
+
+  oputs ("t: i = 2 <= one\n");
+  i = 2 <= one;
+  if (i)
+    return 30;
+
+
+  oputs ("t: i = m1 > -2\n");
+  i = m1 > -2;
+  if (!i)
+    return 31;
+
+  oputs ("t: i = m1 >= -1\n");
+  i = m1 >= -1;
+  if (!i)
+    return 32;
+
+  oputs ("t: i = m1 < 0\n");
+  i = m1 < 0;
+  if (!i)
+    return 33;
+
+  oputs ("t: i = m1 <= -1\n");
+  i = m1 <= -1;
+  if (!i)
+    return 34;
+
+
+  oputs ("t: i = -1 > m1\n");
+  i = -1 > m1;
+  if (i)
+    return 35;
+
+  oputs ("t: i = -2 >= m1\n");
+  i = -2 >= m1;
+  if (i)
+    return 36;
+
+  oputs ("t: i = -1 < m1 \n");
+  i = -1 < m1;
+  if (i)
+    return 37;
+
+  oputs ("t: i = -2 <= m1\n");
+  i = 0 <= m1;
+  if (i)
+    return 38;
+
+
+  oputs ("t: isid (0)\n");
+  if (isid (0))
+    return 39;
+
+  oputs ("t: isid (6)\n");
+
+  if (isid (6))
+    return 40;
+
+  oputs ("t: isid (a)\n");
+  if (isid ('a') != 1)
+    return 41;
+
+  oputs ("t: isid ( )\n");
+  if (isid (' '))
+    return 42;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/33-and-or.c b/lib/tests/scaffold/33-and-or.c
new file mode 100644 (file)
index 0000000..39df31f
--- /dev/null
@@ -0,0 +1,60 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+main ()
+{
+  int f = 0;
+  int t = 1;
+  int one = t;
+
+  oputs ("\n");
+  oputs ("t: if (1 && 0)\n");
+  if (1 && 0)
+    return 1;
+
+  oputs ("t: if (!t && f)\n");
+  if (!t && f)
+    return 1;
+
+  oputs ("t: if (t && !one)\n");
+  if (t && !one)
+    return 1;
+
+  oputs ("t: if (f || !t)\n");
+  if (f || !t)
+    return 1;
+
+  oputs ("t: if (1 && !0)\n");
+  if (1 && !0)
+    goto ok0;
+  return 1;
+ok0:
+
+  oputs ("t: if (f || t)\n");
+  if (f || t)
+    goto ok1;
+  return 1;
+ok1:
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/34-pre-post.c b/lib/tests/scaffold/34-pre-post.c
new file mode 100644 (file)
index 0000000..cbe5512
--- /dev/null
@@ -0,0 +1,63 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+main ()
+{
+  int f = 0;
+  int t = 1;
+  int one = t;
+  int i = 0;
+
+  oputs ("\n");
+  oputs ("t: if (i++)\n");
+  if (i++)
+    return 1;
+
+  oputs ("t: if (--i)\n");
+  if (--i)
+    return 1;
+
+  oputs ("t: i += 2\n");
+  i += 2;
+  if (i != 2)
+    return 1;
+
+  oputs ("t: i -= 2\n");
+  i -= 2;
+  if (i != 0)
+    return 1;
+
+  oputs ("t: if (++i)\n");
+  if (++i)
+    goto ok0;
+  return 1;
+ok0:
+
+  oputs ("t: if (i--)\n");
+  if (i--)
+    goto ok1;
+  return 1;
+ok1:
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/35-compare-char.c b/lib/tests/scaffold/35-compare-char.c
new file mode 100644 (file)
index 0000000..7a2fb4a
--- /dev/null
@@ -0,0 +1,103 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+char g_arena[10];
+char *g_chars = g_arena;
+
+int
+main ()
+{
+  int i = 0;
+  char c = 'C';
+  char *p = "mes";
+  char *x = g_arena;
+  char *y = g_chars;
+
+  oputs ("\n");
+  oputs ("t: p[0] != 'm'\n");
+  if (p[0] != 'm')
+    return p[0];
+
+  oputs ("t: p[i] != 't'\n");
+  if (p[i] != 'm')
+    return p[i];
+
+  oputs ("t: *g_chars != 'A'\n");
+  g_arena[0] = 'A';
+  if (*g_chars != 'A')
+    return 1;
+
+  oputs ("t: *x != 'A'\n");
+  if (*x != 'A')
+    return 1;
+
+  oputs ("t: *y != 'A'\n");
+  if (*y != 'A')
+    return 1;
+
+  oputs ("t: *x != 'Q'\n");
+  g_chars[0] = 'Q';
+  if (*x != 'Q')
+    return 1;
+
+  oputs ("t: *x++ != 'C'\n");
+  *x++ = c;
+  if (*g_chars != 'C')
+    return 1;
+
+  oputs ("t: *g_chars == 'B'\n");
+  g_arena[0] = 'B';
+  if (*g_chars == 'B')
+    goto ok1;
+  return 1;
+ok1:
+
+  oputs ("t: *x == 'B'\n");
+  x = g_arena;
+  if (*x == 'B')
+    goto ok2;
+  return 1;
+ok2:
+
+  oputs ("t: *y == 'B'\n");
+  y = g_chars;
+  if (*y == 'B')
+    goto ok3;
+  return 1;
+ok3:
+
+  oputs ("t: *x == 'R'\n");
+  g_chars[0] = 'R';
+  if (*x == 'R')
+    goto ok4;
+  return 1;
+ok4:
+
+  oputs ("t: *x++ == 'C'\n");
+  *x++ = c;
+  if (*g_chars == 'C')
+    goto ok5;
+  return 1;
+ok5:
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/36-compare-arithmetic.c b/lib/tests/scaffold/36-compare-arithmetic.c
new file mode 100644 (file)
index 0000000..c54ff69
--- /dev/null
@@ -0,0 +1,48 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+main ()
+{
+  oputs ("\n");
+  oputs ("t: 1 + 2\n");
+  if (1 + 2 != 3)
+    return 1;
+
+  oputs ("t: 2 - 1\n");
+  if (0)
+    return 1;
+
+  oputs ("t: 1 << 3\n");
+  if (1 << 3 != 8)
+    return 1;
+
+  oputs ("t: 8 >> 3\n");
+  if (8 >> 3 != 1)
+    return 1;
+
+  oputs ("t: 8 / 4\n");
+  if (8 / 4 != 2)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/37-compare-assign.c b/lib/tests/scaffold/37-compare-assign.c
new file mode 100644 (file)
index 0000000..f9c15f2
--- /dev/null
@@ -0,0 +1,48 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+main ()
+{
+  int f = 0;
+  int t = 1;
+  int one = t;
+
+  oputs ("\n");
+  oputs ("t: if (f = 0) ?\n");
+  if (f = 0)
+    return 1;
+
+  oputs ("t: if (!(t = 1)) ?\n");
+  if (!(t = 1))
+    return 1;
+
+  oputs ("t: if ((f = 0) != 0) ?\n");
+  if ((f = 0) != 0)
+    return 1;
+
+  oputs ("t: if ((t = 1) != 1) ?\n");
+  if ((t = 1) != 1)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/38-compare-call-2.c b/lib/tests/scaffold/38-compare-call-2.c
new file mode 100644 (file)
index 0000000..7368449
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+add (int a, int b)
+{
+  return a + b;
+}
+
+int
+identity (int i)
+{
+  return i;
+}
+
+int
+main ()
+{
+  if (add (identity (1), identity (2)) != 3)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/38-compare-call-3.c b/lib/tests/scaffold/38-compare-call-3.c
new file mode 100644 (file)
index 0000000..01cd5b3
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+add (int a, int b)
+{
+  return a + b;
+}
+
+int
+inc (int i)
+{
+  return i + 1;
+}
+
+int
+main ()
+{
+  if (add (inc (0), inc (1)) != 3)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/38-compare-call.c b/lib/tests/scaffold/38-compare-call.c
new file mode 100644 (file)
index 0000000..29df580
--- /dev/null
@@ -0,0 +1,116 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+enum type_t
+{ TCHAR, TCLOSURE, TCONTINUATION, TFUNCTION, TKEYWORD, TMACRO, TNUMBER, TPAIR, TREF, TSPECIAL, TSTRING,
+    TSYMBOL, TVALUES, TVECTOR, TBROKEN_HEART };
+
+int
+add (int a, int b)
+{
+  return a + b;
+}
+
+int
+inc (int i)
+{
+  return i + 1;
+}
+
+int
+identity (int i)
+{
+  return i;
+}
+
+int
+main ()
+{
+  int i = 0;
+  int f = 0;
+  int t = 1;
+  int one = t;
+  char *p = "mes";
+
+  oputs ("\n");
+  oputs ("t: if (strlen (\"\"))\n");
+  if (strlen (""))
+    return 1;
+
+  oputs ("t: if (strlen (p) != 3)\n");
+  if (strlen (p) != 3)
+    return 2;
+
+  oputs ("t: if (!strlen (\".\"))\n");
+  if (!strlen ("."))
+    return 3;
+
+  oputs ("t: identity (p[i]) != 'm'\n");
+  if (identity (p[i]) != 'm')
+    return identity (p[i]);
+
+  oputs ("t: inc (0)\n");
+  if (inc (0) != 1)
+    return 4;
+
+  oputs ("t: inc (inc (0))\n");
+  if (inc (inc (0)) != 2)
+    return 5;
+
+  oputs ("t: inc (inc (inc (0)))\n");
+  if (inc (inc (inc (0))) != 3)
+    return 6;
+
+  oputs ("t: add (1, 2)\n");
+  if (add (1, 2) != 3)
+    return 7;
+
+  // broken x86, x86_64
+  oputs ("t: add (inc (0), inc (1))\n");
+  if (add (inc (0), inc (1)) != 3)
+    return 8;
+  // end broken x86, x86_64
+
+  oputs ("t: add (TSTRING, 3)\n");
+  if (add (TSTRING, 3) != 13)
+    return 9;
+
+  // broken x86_64
+  oputs ("t: add (inc (inc (0)), inc (inc (1)))\n");
+  if (add (inc (inc (0)), inc (inc (1))) != 5)
+    return 10;
+  // end broken x86_64
+
+  oputs ("t: if (strlen (\".\"))\n");
+  if (strlen ("."))
+    goto ok1;
+  return 11;
+ok1:
+
+  oputs ("t: if (strlen (p) == 3)\n");
+  if (strlen (p) == 3)
+    goto ok2;
+  return 12;
+ok2:
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/40-if-else.c b/lib/tests/scaffold/40-if-else.c
new file mode 100644 (file)
index 0000000..ba09d45
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+main ()
+{
+  int i = 0;
+
+  oputs ("\n");
+  if (i)
+    return 1;
+  else
+    oputs ("t: else 1\n");
+
+  if (i)
+    oputs ("0");
+  else if (i == 1)
+    oputs ("1");
+  else
+    oputs ("t: else if 2\n");
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/41-ternary.c b/lib/tests/scaffold/41-ternary.c
new file mode 100644 (file)
index 0000000..9105357
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+main ()
+{
+  int f;
+  int t = 1;
+  int one = t;
+
+  oputs ("\n");
+  oputs ("t: (one == 1) ?\n");
+  (one == 1) ? 1 : exit (1);
+
+  oputs ("t: (f) ?\n");
+  (f) ? exit (2) : 1;
+
+  int r = f ? 3 - 1 : 2 - 2;
+  if (r)
+    return 3;
+
+  r = t ? 2 + 3 - 1 : 3 + 4 - 5;
+  if (r != 4)
+    return 4;
+
+  oputs ("t: f ? 3 - 1 : 2 - 2\n");
+  return f ? 3 - 1 : 2 - 2;
+}
diff --git a/lib/tests/scaffold/42-goto-label.c b/lib/tests/scaffold/42-goto-label.c
new file mode 100644 (file)
index 0000000..322d56b
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+label (int c)
+{
+label:
+  if (c == 0)
+    return c;
+  c--;
+  goto label;
+  return 1;
+}
+
+int
+main ()
+{
+  int f;
+  int t = 1;
+  int one = t;
+
+  oputs ("\n");
+  oputs ("t: goto label\n");
+  if (label (1) != 0)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/43-for-do-while.c b/lib/tests/scaffold/43-for-do-while.c
new file mode 100644 (file)
index 0000000..acc686a
--- /dev/null
@@ -0,0 +1,90 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+int
+main ()
+{
+  int i = 0;
+  int f = 0;
+  int t = 1;
+  int one = t;
+  char *p = "mes";
+
+  oputs ("\n");
+
+  oputs ("t: for (i=1; i<5; ++i)\n");
+  for (i = 1; i < 5; ++i)
+    ;
+  if (i != 5)
+    return i;
+
+  oputs ("t: while (i<3) i++\n");
+  i = 1;
+  while (i < 3)
+    i++;
+  if (i != 3)
+    return i;
+
+  oputs ("t: do i-- while (i>0)\n");
+  do
+    i--;
+  while (i > 0)
+  ;
+  if (i != 0)
+    return 1;
+
+  oputs ("t: while (1) break;\n");
+  while (1)
+    break;
+
+  oputs ("t: while (1) ... break;\n");
+  while (1)
+    {
+      f = 0;
+      break;
+    }
+
+  oputs ("t: while (1) {while (1) break;break;}\n");
+  while (1)
+    {
+      while (1)
+        break;
+      break;
+    }
+
+  oputs ("t: while () {continue;...}\n");
+  while (one--)
+    {
+      continue;
+      one = 1;
+    }
+  one += 2;
+
+  oputs ("t: while (1) { goto label; };\n");
+  while (1)
+    {
+      goto ok1;
+    }
+ok1:
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/44-switch-body-fallthrough.c b/lib/tests/scaffold/44-switch-body-fallthrough.c
new file mode 100644 (file)
index 0000000..1085081
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+int
+main ()
+{
+  int r;
+  int i = 2;
+  switch (i)
+    {
+      // case 0:
+      //   r = 0;
+      //   break;
+      // case 1:
+      //   r = 1;
+      //   break;
+    case 2:
+      r = 2;
+    default:
+      r++;
+      break;
+    }
+
+  if (r != 3)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/44-switch-fallthrough.c b/lib/tests/scaffold/44-switch-fallthrough.c
new file mode 100644 (file)
index 0000000..eadd73d
--- /dev/null
@@ -0,0 +1,46 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+int
+main ()
+{
+  int r;
+  int i = 2;
+  switch (i)
+    {
+      // case 0:
+      //   r = 0;
+      //   break;
+      // case 1:
+      //   r = 1;
+      //   break;
+    case 2:
+    default:
+      r = 2;
+      break;
+    }
+
+  if (r != 2)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/44-switch.c b/lib/tests/scaffold/44-switch.c
new file mode 100644 (file)
index 0000000..fa6a471
--- /dev/null
@@ -0,0 +1,174 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+enum type_t
+{ TCHAR, TCLOSURE, TCONTINUATION, TFUNCTION, TKEYWORD, TMACRO, TNUMBER, TPAIR, TREF, TSPECIAL, TSTRING,
+    TSYMBOL, TVALUES, TVECTOR, TBROKEN_HEART };
+
+int
+swits (int c)
+{
+  int x = -1;
+
+  switch (c)
+    {
+    case TCHAR:
+      {
+        oputs ("TCHAR\n");
+        goto next;
+      }
+    case 1:
+      {
+        oputs ("1\n");
+        goto next;
+      }
+    case 2:
+      {
+        oputs ("2\n");
+        goto next;
+      }
+    default:
+      {
+        oputs ("default\n");
+        goto next;
+      }
+    }
+
+  return 1;
+next:
+  switch (c)
+    {
+    case 0:
+      {
+        oputs ("0\n");
+        x = 0;
+        c = 34;
+        break;
+      }
+    case 5:
+    case 4:
+    case 3:
+    case 2:
+    case -1:
+    case 1:
+      oputs ("5..1, -1\n");
+      x = 1;
+      break;
+    default:
+      oputs ("default\n");
+      x = 2;
+      x = 2;
+      break;
+    }
+  return x;
+}
+
+int
+default_first (int c)
+{
+  int a;
+  switch (c)
+    {
+    here:
+    default:
+      a = 1;
+      {
+      }
+      a = 2;
+      return a;
+    there:
+    case 0:
+      ;
+      {
+      }
+      return 0;
+    }
+  return -1;
+}
+
+int
+main ()
+{
+  oputs ("\n");
+  oputs ("t: switch 0\n");
+  int i = swits (0);
+  if (i != 0)
+    return i;
+
+  oputs ("t: switch 1\n");
+  if (swits (1) != 1)
+    return 10;
+
+  oputs ("t: switch -1\n");
+  if (swits (-1) != 1)
+    return 11;
+
+  oputs ("t: switch -1\n");
+  if (swits (-2) != 2)
+    return 12;
+
+  if (default_first (1) != 2)
+    return 13;
+
+  if (default_first (0) != 0)
+    return 14;
+
+  i = 15;
+  switch (i)
+    {
+    case 0:
+    case 1:
+    case 2:
+    case 3:
+    case 4:
+      i = 15;
+      break;
+    }
+  if (i != 15)
+    return 15;
+
+  i = 16;
+  switch (i)
+    {
+    case 1:
+    default:
+    case 0:
+      i = 0;
+      break;
+    }
+
+  if (i != 0)
+    return 16;
+
+  i = 2;
+  switch (i)
+    {
+    default:
+    case 0:
+      i = 17;
+      break;
+    case 2:
+      i = 0;
+    }
+
+  return i;
+}
diff --git a/lib/tests/scaffold/45-void-call.c b/lib/tests/scaffold/45-void-call.c
new file mode 100644 (file)
index 0000000..515bf9a
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib-mini.h>
+
+void
+void_func ()
+{
+}
+
+int
+main ()
+{
+  oputs ("\n");
+  oputs ("void_func ()\n");
+  void_func ();
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/46-function-static.c b/lib/tests/scaffold/46-function-static.c
new file mode 100644 (file)
index 0000000..e785fea
--- /dev/null
@@ -0,0 +1,39 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int bar;
+static int i = 2;
+int baz;
+
+int
+test ()
+{
+  static int i = 1;
+  static int foo = 0;
+  foo = 0;
+  return foo - i--;
+}
+
+int
+main ()
+{
+  test ();
+  return i - 2 - test ();
+}
diff --git a/lib/tests/scaffold/47-function-expression.c b/lib/tests/scaffold/47-function-expression.c
new file mode 100644 (file)
index 0000000..ee1beeb
--- /dev/null
@@ -0,0 +1,37 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int g_time = 1;
+
+#if __TINYC__
+#define time time_
+#endif
+
+int *
+time ()
+{
+  return &g_time;
+}
+
+int
+main ()
+{
+  return *time () - 1;
+}
diff --git a/lib/tests/scaffold/48-global-static.c b/lib/tests/scaffold/48-global-static.c
new file mode 100644 (file)
index 0000000..cb82197
--- /dev/null
@@ -0,0 +1,43 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#if __TINYC__
+#define unsigned
+#endif
+
+static int sint;
+static int sint2, sint3;
+typedef unsigned int size;
+static void *
+test (size u)
+{
+  void *r;
+  if (u)
+    r = test (u);
+}
+
+static int i = 2;
+int
+main ()
+{
+  void (*foo) () = &test;
+  test (0);
+  return 0;
+}
diff --git a/lib/tests/scaffold/51-pointer-sub.c b/lib/tests/scaffold/51-pointer-sub.c
new file mode 100644 (file)
index 0000000..76f671c
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+int
+main ()
+{
+  int **p = 1;
+  int **q = -1;
+  oputs ("p - q");
+  oputs (itoa (p - q));
+  oputs ("\n");
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/54-argc.c b/lib/tests/scaffold/54-argc.c
new file mode 100644 (file)
index 0000000..baba655
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdio.h>
+#include <string.h>
+
+int
+main (int argc, char *argv[])
+{
+  oputs ("argc=");
+  oputs (itoa (argc));
+  oputs ("\n");
+  if (argc != 1)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/54-argv.c b/lib/tests/scaffold/54-argv.c
new file mode 100644 (file)
index 0000000..2d892ac
--- /dev/null
@@ -0,0 +1,46 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdio.h>
+#include <string.h>
+
+int
+main (int argc, char *argv[])
+{
+  oputs ("\n");
+  oputs ("t: argv[0] == \"test/scaffold....\"\n");
+  oputs ("argv0=");
+  oputs (argv[0]);
+  oputs ("\n");
+  if (strncmp (argv[0], "test/scaffold", 5))
+    return 1;
+
+  oputs ("t: *argv\"\n");
+  oputs (*argv);
+  oputs ("\n");
+
+  oputs ("t: if (argc > 1 && !strcmp (argv[1], \"--help\")\n");
+  if (argc > 1 && !strcmp (argv[1], "--help"))
+    return 2;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/55-char-array.c b/lib/tests/scaffold/55-char-array.c
new file mode 100644 (file)
index 0000000..41b327e
--- /dev/null
@@ -0,0 +1,88 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+char g_hello[] = "hello\n" "world\n";
+
+char *g_hello2 = "hello\n" "world\n";
+
+char g_hello3[] = {
+  'h', 'e', 'l', 'l', 'o', '\n',
+  'w', 'o', 'r', 'l', 'd', '\n',
+  '\0',
+}
+
+;
+
+int g_hello_int[] = { 0, 1, 2, 3, 4, 5 };
+
+int
+main (int argc)
+{
+  // oputs ("0:"); oputs (g_hello); oputs ("\n");
+  // oputs ("2:"); oputs (g_hello2); oputs ("\n");
+  // oputs ("3:"); oputs (g_hello3); oputs ("\n");
+  // if (strcmp (g_hello, g_hello2))
+  //   return 1;
+
+  // if (strcmp (g_hello, g_hello3))
+  //   return 2;
+
+  // char hello[] =
+  //   "hello\n"
+  //   "world\n"
+  //   ;
+
+  // char *hello2 =
+  //   "hello\n"
+  //   "world\n"
+  //   ;
+
+  // oputs (hello);
+  // oputs (hello2);
+  // if (strcmp (hello, hello2))
+  //   return 3;
+
+  // char hello3[] =
+  //   {
+  //     'h', 'e', 'l', 'l', 'o', '\n',
+  //     'w', 'o', 'r', 'l', 'd', '\n',
+  //     '\0',
+  //   }
+  //   ;
+
+  // oputs (hello3);
+  // if (strcmp (hello, hello3))
+  //   return 4;
+
+  // if (g_hello_int[0])
+  //   return 5;
+
+  if (g_hello_int[1] != 1)
+    return 6;
+
+  // int hello_int[] = {0, 1, 2, 3, 4, 5};
+  // if (hello_int[0])
+  //   return 7;
+
+  // if (hello_int[1] != 1)
+  //   return 8;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/60-math.c b/lib/tests/scaffold/60-math.c
new file mode 100644 (file)
index 0000000..19d7edd
--- /dev/null
@@ -0,0 +1,206 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <mes/lib.h>
+
+int
+add (int a, int b)
+{
+  return a + b;
+}
+
+int
+inc (int i)
+{
+  return i + 1;
+}
+
+int
+main ()
+{
+  int i;
+
+  oputs ("\n");
+  oputs ("t: 0 < 0\n");
+  if (0 < 0)
+    return 1;
+
+  oputs ("t: 2 < 1\n");
+  if (2 < 1)
+    return 2;
+
+  oputs ("t: -1 < -2\n");
+  if (-1 < -2)
+    return 3;
+
+  oputs ("t: 0 < -1\n");
+  if (0 < -1)
+    return 4;
+
+  oputs ("t: 0 > 0\n");
+  if (0 > 0)
+    return 5;
+
+  oputs ("t: 1 > 2\n");
+  if (1 > 2)
+    return 6;
+
+  oputs ("t: -2 > -1\n");
+  if (-2 > -1)
+    return 7;
+
+  oputs ("t: -1 > 0\n");
+  if (-1 > 0)
+    return 9;
+
+  oputs ("t: 1 == inc (0)\n");
+  if (1 == inc (0))
+    goto ok0;
+  return 10;
+ok0:
+
+  oputs ("t: 0 < inc (0)\n");
+  if (0 < inc (0))
+    goto ok1;
+  return 11;
+ok1:
+
+  oputs ("t: inc (0) + 2 != 3\n");
+  if (inc (0) + inc (1) != 3)
+    return 12;
+
+  oputs ("t: 4/2=");
+  i = 4 / 2;
+  if (i != 2)
+    return 13;
+  i += 48;
+  putchar (i);
+  oputs ("\n");
+
+  oputs ("t: 3*4=\n");
+  i = 3 * 4;
+  if (i != 12)
+    return 14;
+
+  oputs ("t: i /= 4\n");
+  i /= 4;
+  if (i != 3)
+    return 15;
+
+  oputs ("t: i *= 4\n");
+  i *= 4;
+  if (i != 12)
+    return 16;
+
+  oputs ("t: 1 << 3\n");
+  if (1 << 3 != 8)
+    return 1 << 3;
+
+  oputs ("t: 3 << 4\n");
+  if (3 << 4 != 48)
+    return 3 << 4;
+
+  oputs ("t: 48 >> 3\n");
+  if (48 >> 4 != 3)
+    return 48 >> 4;
+
+  oputs ("t: 10 >> 1\n");
+  if (10 >> 1 != 5)
+    return 10 >> 1;
+
+  oputs ("t: 1 | 4\n");
+  if ((1 | 4) != 5)
+    return 1 | 4;
+
+  i = -3;
+  oputs ("t: -i\n");
+  if (-i != 3)
+    return 22;
+
+  oputs ("t: -1 + 2\n");
+  if (-1 + 2 != 1)
+    return 23;
+
+  oputs ("t: 1 & 3\n");
+  if ((1 & 3) != 1)
+    return 24;
+
+  oputs ("t: ~0\n");
+  if (~0 != -1)
+    return 25;
+
+  oputs ("t: 1 | 3\n");
+  if ((1 | 2) != 3)
+    return 26;
+
+  oputs ("t: ^ 1 \n");
+  if ((1 ^ 3) != 2)
+    return 27;
+
+  oputs ("t: 3 == 3\n");
+  if ((3 == 3) != 1)
+    return 28;
+
+  oputs ("t: 3 != 3\n");
+  if ((3 != 3) != 0)
+    return 29;
+
+  oputs ("t: 011 == 15\n");
+  if (011 != 9)
+    return 30;
+
+  oputs ("t: 0b11 == 3\n");
+  if (0 b11 != 3)
+    return 31;
+
+  oputs ("t: 0x11 == 3\n");
+  if (0x11 != 17)
+    return 32;
+
+  oputs ("t: i = INT_MAX\n");
+  i = INT_MAX;
+
+  if (strcmp ("2147483647", itoa (i)))
+    return 33;
+
+  oputs ("t: i = 2147483646\n");
+  i = 2147483646;
+
+  oputs ("t: i++\n");
+  i++;
+
+  oputs ("t: i = INT_MIN\n");
+  i = INT_MIN;
+
+  if (strcmp ("-2147483648", itoa (i)))
+    return 34;
+
+  oputs ("t: i = -2147483647\n");
+  i = -2147483647;
+
+  oputs ("t: i--\n");
+  i--;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/61-array.c b/lib/tests/scaffold/61-array.c
new file mode 100644 (file)
index 0000000..4925162
--- /dev/null
@@ -0,0 +1,150 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+char *env[] = { "foo", "bar", "baz", 0 };
+
+#if 0                           //!SYSTEM_LIBC
+#define getenv xgetenv
+
+char *
+getenv (char const *s)
+{
+  eputs ("getenv\n");
+  char **p = environ;
+  int length = strlen (s);
+  eputs ("getenv length=");
+  eputs (itoa (length));
+  eputs ("\n");
+  while (*p)
+    {
+      eputs ("*p=");
+      eputs (*p);
+      eputs ("\n");;
+      eputs (" p=");
+      eputs (itoa ((long) p));
+      eputs ("\n");
+      if (!strncmp (s, *p, length) && *(*p + length) == '=')
+        return (*p + length + 1);
+      p++;
+    }
+  return 0;
+}
+#endif
+
+int
+test (char **e)
+{
+  int i = 0;
+
+  oputs ("\n");
+  oputs ("a[i] = i-1\n");
+  int a[3];
+  for (int i = 0; i < 3; i++)
+    a[i] = i - 1;
+  for (int i = 0; i < 3; i++)
+    if (a[i] != i - 1)
+      return 1;
+
+  oputs ("env [");
+  oputs (itoa ((long) env));
+  oputs ("]\n");
+
+  oputs ("e [");
+  oputs (itoa ((int) e));
+  oputs ("]\n");
+
+  oputs ("env [0] == \"foo\"\n");
+  if (strcmp (env[0], "foo"))
+    return 2;
+
+  oputs ("env [1] == \"bar\"\n");
+  if (strcmp (env[1], "bar"))
+    return 3;
+
+  oputs ("t: **p in *env[]\n");
+
+  char **pp = env;
+  while (*pp)
+    {
+      oputs ("pp [");
+      oputs (itoa ((int) pp));
+      oputs ("]: ");
+      if (*pp)
+        oputs (*pp);
+      oputs ("\n");
+      pp++;
+      i++;
+    }
+  if (i != 3)
+    return i;
+
+  pp = env;
+  oputs ("t: *pp++ == \"foo\"\n");
+  if (strcmp (*pp++, "foo"))
+    return 4;
+
+  oputs ("t: *pp++ == \"bar\"\n");
+  if (strcmp (*pp++, "bar"))
+    return 5;
+
+  char *buf = "hello";
+  oputs ("t: buf[0]\n");
+  if (buf[0] != 'h')
+    return 6;
+
+  oputs ("t: buf + 1\n");
+  if (*(buf + 1) != 'e')
+    return 7;
+
+  char **p = &buf;
+  oputs ("t: **p\n");
+  if (**p != 'h')
+    return 8;
+
+  oputs ("t: *(p + 1)\n");
+  if (*(*p + 1) != 'e')
+    return 9;
+
+  oputs ("t: getenv ()\n");
+  if (!getenv ("PATH"))
+    return 10;
+
+  oputs ("t: setenv ()\n");
+  if (setenv ("61-array", "yes", 1))
+    return 11;
+
+  oputs ("t: getenv2 ()\n");
+  if (strcmp (getenv ("61-array"), "yes"))
+    return 12;
+
+  return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+  return test (env);
+}
diff --git a/lib/tests/scaffold/62-array.c b/lib/tests/scaffold/62-array.c
new file mode 100644 (file)
index 0000000..7f2dcad
--- /dev/null
@@ -0,0 +1,59 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+int one_two_three[3] = {
+  1, 2, 3
+};
+
+char *foo_bar_baz[3] = {
+  "foo", "bar", "baz"
+};
+
+char foo_bar_baz_haha[3][4] = {
+  "foo", "bar", "baz"
+};
+
+char *foo = "foo";
+char *bar = "bar";
+char *baz = "baz";
+
+char *foo_bar_baz_mwhuhahaha[3] = {
+  &foo, &bar, &baz
+};
+
+int
+main ()
+{
+  puts ("one:");
+  puts (itoa (one_two_three[0]));
+  puts ("\n");
+  puts ("foo:");
+  puts (foo_bar_baz[1]);
+  puts ("\n");
+  puts ("bar:");
+  puts (foo_bar_baz_haha[2]);
+  puts ("\n");
+  char *p = foo_bar_baz_haha[2];
+  puts ("baz:");
+  puts (p);
+  puts ("\n");
+  return strcmp (foo_bar_baz[2], "baz");
+}
diff --git a/lib/tests/scaffold/63-struct-array-assign.c b/lib/tests/scaffold/63-struct-array-assign.c
new file mode 100644 (file)
index 0000000..7c75501
--- /dev/null
@@ -0,0 +1,75 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct scm
+{
+  int type;
+  int car;
+  int cdr;
+};
+
+
+char g_arena[24];
+struct scm *g_cells = (struct scm *) g_arena;
+
+int
+main ()
+{
+  g_cells[0].type = 0;
+  g_cells[0].car = -1;
+  g_cells[1].cdr = 0;
+
+  g_cells[1].type = -1;
+  g_cells[1].car = 0;
+  g_cells[1].cdr = -1;
+
+  if (g_cells[0].type)
+    return 1;
+
+  if (g_cells[0].car != -1)
+    return 2;
+
+  if (g_cells[0].cdr)
+    return 3;
+
+  if (g_cells[1].type != -1)
+    return 4;
+
+  if (g_cells[1].car)
+    return 5;
+
+  if (g_cells[1].cdr != -1)
+    return 6;
+
+  g_cells[0] = g_cells[1];
+
+  if (g_cells[0].type != -1)
+    return 7;
+
+  if (g_cells[0].car)
+    return 8;
+
+  if (g_cells[0].cdr != -1)
+    return 9;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/63-struct-array-compare.c b/lib/tests/scaffold/63-struct-array-compare.c
new file mode 100644 (file)
index 0000000..e6d2a2d
--- /dev/null
@@ -0,0 +1,51 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct scm
+{
+  int type;
+  int car;
+  int cdr;
+};
+
+
+char g_arena[24];
+struct scm *g_cells = (struct scm *) g_arena;
+
+int
+main ()
+{
+  g_cells[0].type = -1;
+  g_cells[0].car = 0;
+  g_cells[0].cdr = 0;
+  g_cells[1].type = -1;
+  g_cells[1].car = 0;
+  g_cells[1].cdr = 0;
+
+  oputs ("t: TYPE (0) != TYPE (1)\n");
+  if (g_cells[0].type == g_cells[1].type)
+    goto ok;
+  return 1;
+ok:
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/63-struct-array.c b/lib/tests/scaffold/63-struct-array.c
new file mode 100644 (file)
index 0000000..45c73db
--- /dev/null
@@ -0,0 +1,51 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct scm
+{
+  int type;
+  int car;
+  int cdr;
+};
+
+
+char g_arena[12];
+struct scm *g_cells = (struct scm *) g_arena;
+
+int
+main ()
+{
+  g_cells[0].type = -1;
+  g_cells[0].car = 0;
+  g_cells[0].cdr = -1;
+
+  if (g_cells[0].type != -1)
+    return 1;
+
+  if (g_cells[0].car)
+    return 2;
+
+  if (g_cells[0].cdr != -1)
+    return 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/63-struct-assign.c b/lib/tests/scaffold/63-struct-assign.c
new file mode 100644 (file)
index 0000000..462a48c
--- /dev/null
@@ -0,0 +1,49 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct scm
+{
+  int type;
+  int car;
+  int cdr;
+};
+
+
+struct scm a = { -1, 0, -1 };
+struct scm b = { 0, -1, 0 };
+
+int
+main ()
+{
+  a = b;
+
+  if (a.type)
+    return 1;
+
+  if (a.car != -1)
+    return 2;
+
+  if (a.cdr)
+    return 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/63-struct-cell.c b/lib/tests/scaffold/63-struct-cell.c
new file mode 100644 (file)
index 0000000..2af86e0
--- /dev/null
@@ -0,0 +1,313 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+add (int a, int b)
+{
+  return a + b;
+}
+
+int
+inc (int i)
+{
+  return i + 1;
+}
+
+struct scm
+{
+  int type;
+  int car;
+  int cdr;
+};
+
+int bla = 1234;
+char g_arena[84];
+#if __MESC__
+struct scm *g_cells = g_arena;
+#else
+struct scm *g_cells = (struct scm *) g_arena;
+#endif
+char *g_chars = g_arena;
+
+int
+foo ()
+{
+  oputs ("t: foo\n");
+  return 0;
+};
+
+int
+bar (int i)
+{
+  oputs ("t: bar\n");
+  return 0;
+};
+
+struct function
+{
+  int (*function) (void);
+  int arity;
+  //long arity;
+  char *name;
+};
+struct function g_fun = { &exit, 1, "fun" };
+struct function g_foo = { &foo, 0, "foo" };
+struct function g_bar = { &bar, 1, "bar" };
+
+void *functions[2];
+//int functions[2];
+
+struct function g_functions[2];
+int g_function = 0;
+
+enum type_t
+{ TCHAR, TCLOSURE, TCONTINUATION, TFUNCTION, TKEYWORD, TMACRO, TNUMBER, TPAIR, TREF, TSPECIAL, TSTRING,
+    TSYMBOL, TVALUES, TVECTOR, TBROKEN_HEART };
+
+typedef int SCM;
+int g_free = 3;
+SCM tmp;
+SCM tmp_num;
+
+int ARENA_SIZE = 200;
+#define TYPE(x) g_cells[x].type
+#define CAR(x) g_cells[x].car
+#define CDR(x) g_cells[x].cdr
+#define VALUE(x) g_cells[x].cdr
+
+#define CAAR(x) CAR (CAR (x))
+
+struct scm scm_fun = { TFUNCTION, 0, 0 };
+
+SCM cell_fun;
+
+
+int
+main ()
+{
+  oputs ("\n");
+  oputs ("t: g_cells[0] = g_cells[1]\n");
+  TYPE (1) = 1;
+  CAR (1) = 2;
+  CDR (1) = 3;
+  g_cells[0] = g_cells[1];
+  if (TYPE (0) != 1)
+    return 1;
+  if (CAR (0) != 2)
+    return 2;
+  if (CDR (0) != 3)
+    return 3;
+
+  oputs ("t: g_cells[i] = g_cells[j]\n");
+  int i = 0;
+  int j = 1;
+  TYPE (1) = 4;
+  CAR (1) = 5;
+  CDR (1) = 6;
+  g_cells[i] = g_cells[j];
+  if (TYPE (0) != 4)
+    return 4;
+  if (CAR (0) != 5)
+    return 5;
+  if (CDR (0) != 6)
+    return 6;
+
+  oputs ("t: g_cells[0+add(0,0] = g_cells[0+inc(0)]\n");
+  TYPE (1) = 1;
+  CAR (1) = 2;
+  CDR (1) = 3;
+  g_cells[0 + add (0, 0)] = g_cells[0 + inc (0)];
+  if (TYPE (0) != 1)
+    return 7;
+  if (CAR (0) != 2)
+    return 9;
+  if (CDR (0) != 3)
+    return 9;
+
+  g_cells[0].type = TNUMBER;
+  g_cells[0].car = 0;
+  g_cells[0].cdr = 0;
+  g_cells[1].type = TNUMBER;
+  g_cells[1].car = 0;
+  g_cells[1].cdr = 0;
+
+  oputs ("t: TYPE (0) == TYPE (1)\n");
+  if (TYPE (0) == TYPE (1))
+    goto ok;
+  return 10;
+ok:
+
+  g_cells[0].car = 1;
+  g_cells[1].car = 2;
+
+  oputs ("t: int c = VALUE (0)\n");
+  int c = CAR (0);
+  if (c != 1)
+    return 11;
+
+  oputs ("t: CAAR (0) != 2\n");
+  if (CAAR (0) != 2)
+    return 12;
+
+  oputs ("t: 2 != CAAR (0)\n");
+  if (2 != CAAR (0))
+    return 13;
+
+  g_cells[3].type = 0x64;
+  if (g_cells[3].type != 0x64)
+    return g_cells[3].type;
+
+  TYPE (4) = 4;
+  if (TYPE (4) != 4)
+    return 14;
+
+  CDR (3) = 0x22;
+  CDR (4) = 0x23;
+  if (CDR (3) != 0x22)
+    return 15;
+
+  oputs ("t: g_fun.arity != 1;\n");
+  if (g_fun.arity != 1)
+    return 16;
+
+  oputs ("t: g_fun.function != exit;\n");
+  if (g_fun.function != &exit)
+    return 17;
+
+  oputs ("t: struct fun = {&exit,1,\"exit\"};\n");
+  struct function fun = { &exit, 1, "exit" };
+
+  oputs ("t: fun.arity != 1;\n");
+  if (fun.arity != 1)
+    return 18;
+
+  oputs ("t: fun.function != exit;\n");
+  if (fun.function != &exit)
+    return 19;
+
+  oputs ("t: oputs (fun.name)\n");
+  if (strcmp (fun.name, "exit"))
+    return 20;
+
+  oputs ("t: oputs (g_fun.name)\n");
+  if (strcmp (g_fun.name, "fun"))
+    return 21;
+
+  oputs ("t: g_functions[g_function++] = g_foo;\n");
+  g_functions[g_function++] = g_foo;
+
+  oputs ("t: pbar->arity == 1\n");
+  struct function *barp = &g_bar;
+  if (barp->arity != 1)
+    return 22;
+
+  int fn = 0;
+  oputs ("t: g_functions[g_cells[fn].cdr].arity\n");
+  if (g_functions[g_cells[fn].cdr].arity)
+    return 23;
+  if (g_functions[g_cells[fn].cdr].arity != 0)
+    return 24;
+
+
+
+
+
+
+
+
+
+
+
+  int (*functionx) (void) = 0;
+  functionx = g_functions[0].function;
+  oputs ("t: functionx == foo\n");
+  if (functionx != foo)
+    return 25;
+
+  oputs ("t: g_functions[0].name\n");
+  if (strcmp (g_functions[0].name, "foo"))
+    return 26;
+
+  oputs ("t: (functionx) () == foo\n");
+  if ((functionx) () != 0)
+    return 27;
+
+  oputs ("t: g_functions[<foo>].arity\n");
+  if (g_functions[0].arity != 0)
+    return 28;
+
+  fn++;
+  g_functions[fn] = g_bar;
+  g_cells[fn].cdr = fn;
+  if (g_cells[fn].cdr != fn)
+    return 29;
+
+  oputs ("t: g_functions[g_cells[fn].cdr].function\n");
+  functionx = g_functions[g_cells[fn].cdr].function;
+
+  oputs ("t: g_functions[1].name\n");
+  if (strcmp (g_functions[1].name, "bar"))
+    return 30;
+
+  oputs ("t: functionx == bar\n");
+  if (functionx != bar)
+    return 31;
+
+  oputs ("t: (functiony) (1) == bar\n");
+  int (*functiony) (int) = 0;
+  functiony = g_functions[g_cells[fn].cdr].function;
+  if ((functiony) (1) != 0)
+    return 32;
+
+  oputs ("t: g_functions[<bar>].arity\n");
+  if (g_functions[fn].arity != 1)
+    return 33;
+
+  // fake name
+  scm_fun.car = 33;
+  scm_fun.cdr = g_function;
+  g_function++;
+  oputs ("fun");
+  g_functions[g_function] = g_fun;
+
+  cell_fun = g_free++;
+  g_cells[cell_fun] = scm_fun;
+
+  oputs ("t: TYPE (cell_fun)\n");
+  if (TYPE (cell_fun) != TFUNCTION)
+    return 34;
+
+  oputs ("t: CAR (cell_fun)\n");
+  if (CAR (cell_fun) != 33)
+    return 35;
+
+  // FIXME!
+  // oputs ("t: CDR (cell_fun)\n");
+  // if (CDR (cell_fun) != g_function)
+  //   return 36;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/63-struct-function.c b/lib/tests/scaffold/63-struct-function.c
new file mode 100644 (file)
index 0000000..7bb7361
--- /dev/null
@@ -0,0 +1,45 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+#include <stdlib.h>
+
+struct function
+{
+  int (*function) (void);
+  int arity;
+  char *name;
+};
+struct function g_fun = { &exit, 1, "fun" };
+
+int functions[2];
+int g_function = 0;
+
+struct function g_functions[2];
+
+int
+main ()
+{
+  g_function++;
+  oputs ("fun");
+  g_functions[g_function] = g_fun;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/63-struct-local.c b/lib/tests/scaffold/63-struct-local.c
new file mode 100644 (file)
index 0000000..7344bc8
--- /dev/null
@@ -0,0 +1,45 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct scm
+{
+  int type;
+  int car;
+  int cdr;
+};
+
+int
+main ()
+{
+  struct scm a = { -1, 0, -1 };
+
+  if (a.type != -1)
+    return 1;
+
+  if (a.car)
+    return 2;
+
+  if (a.cdr != -1)
+    return 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/63-struct-pointer.c b/lib/tests/scaffold/63-struct-pointer.c
new file mode 100644 (file)
index 0000000..4019eee
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct scm
+{
+  int type;
+  int car;
+  int cdr;
+};
+
+struct scm a = { -1, 0, -1 };
+
+struct scm *p = &a;
+
+int
+main ()
+{
+  if (p->type != -1)
+    return 1;
+
+  if (p->car)
+    return 2;
+
+  if (p->cdr != -1)
+    return 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/63-struct.c b/lib/tests/scaffold/63-struct.c
new file mode 100644 (file)
index 0000000..78212d9
--- /dev/null
@@ -0,0 +1,45 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct scm
+{
+  int type;
+  int car;
+  int cdr;
+};
+
+struct scm a = { -1, 0, -1 };
+
+int
+main ()
+{
+  if (a.type != -1)
+    return 1;
+
+  if (a.car)
+    return 2;
+
+  if (a.cdr != -1)
+    return 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/64-make-cell.c b/lib/tests/scaffold/64-make-cell.c
new file mode 100644 (file)
index 0000000..33a3b1f
--- /dev/null
@@ -0,0 +1,162 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct scm
+{
+  int type;
+  int car;
+  int cdr;
+};
+
+int bla = 1234;
+char g_arena[84];
+struct scm *g_cells = (struct scm *) g_arena;
+char *g_chars = g_arena;
+
+int
+foo ()
+{
+  oputs ("t: foo\n");
+  return 0;
+};
+
+int
+bar (int i)
+{
+  oputs ("t: bar\n");
+  return 0;
+};
+
+struct function
+{
+  int (*function) (void);
+  int arity;
+  char *name;
+};
+struct function g_fun = { &exit, 1, "fun" };
+struct function g_foo = { &foo, 0, "foo" };
+struct function g_bar = { &bar, 1, "bar" };
+
+//void *functions[2];
+int functions[2];
+
+struct function g_functions[2];
+int g_function = 0;
+
+enum type_t
+{ TCHAR, TCLOSURE, TCONTINUATION, TFUNCTION, TKEYWORD, TMACRO, TNUMBER, TPAIR, TREF, TSPECIAL, TSTRING,
+    TSYMBOL, TVALUES, TVECTOR, TBROKEN_HEART };
+
+typedef int SCM;
+int g_free = 3;
+SCM tmp;
+SCM tmp_num;
+
+int ARENA_SIZE = 200;
+#define TYPE(x) g_cells[x].type
+#define CAR(x) g_cells[x].car
+#define CDR(x) g_cells[x].cdr
+#define VALUE(x) g_cells[x].cdr
+
+#define CAAR(x) CAR (CAR (x))
+
+struct scm scm_fun = { TFUNCTION, 0, 0 };
+
+SCM cell_fun;
+
+SCM
+alloc (int n)
+{
+  oputs ("040\n");
+  SCM x = g_free;
+  g_free += n;
+  return x;
+}
+
+SCM
+make_cell (SCM type, SCM car, SCM cdr)
+{
+  oputs ("030\n");
+  SCM x = alloc (1);
+  TYPE (x) = VALUE (type);
+  if (VALUE (type) == TCHAR || VALUE (type) == TNUMBER)
+    {
+      if (car)
+        CAR (x) = CAR (car);
+      if (cdr)
+        CDR (x) = CDR (cdr);
+    }
+  else if (VALUE (type) == TFUNCTION)
+    {
+      if (car)
+        CAR (x) = car;
+      if (cdr)
+        CDR (x) = CDR (cdr);
+    }
+  else
+    {
+      CAR (x) = car;
+      CDR (x) = cdr;
+    }
+  return x;
+}
+
+SCM
+make_cell_test ()
+{
+  oputs ("010\n");
+  VALUE (tmp_num) = TPAIR;
+  oputs ("011\n");
+  make_cell (tmp_num, 0, 1);
+  oputs ("012\n");
+  return 0;
+}
+
+SCM
+make_tmps_test (struct scm * cells)
+{
+  oputs ("t: tmp = g_free++\n");
+  tmp = g_free++;
+  oputs ("t: cells[tmp].type = CHAR\n");
+  cells[tmp].type = TCHAR;
+  oputs ("000\n");
+  tmp_num = g_free++;
+  oputs ("001\n");
+  cells[tmp_num].type = TNUMBER;
+  oputs ("002\n");
+
+  return 0;
+}
+
+int
+main ()
+{
+  oputs ("\n");
+  make_tmps_test (g_cells);
+  make_cell_test ();
+  oputs ("020\n");
+  return 0;
+}
diff --git a/lib/tests/scaffold/65-read.c b/lib/tests/scaffold/65-read.c
new file mode 100644 (file)
index 0000000..c96417d
--- /dev/null
@@ -0,0 +1,87 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct scm
+{
+  int type;
+  int car;
+  int cdr;
+};
+
+char g_arena[84];
+#if __MESC__
+struct scm *g_cells = g_arena;
+#else
+struct scm *g_cells = (struct scm *) g_arena;
+#endif
+char *g_chars = g_arena;
+
+int g = 48;
+int
+get ()
+{
+  int i = g;
+  g++;
+  return i;
+}
+
+int
+main ()
+{
+  char *p = (char *) g_chars;
+  int i = 0;
+
+  oputs ("\n: ");
+  oputs ("t: read 0123456789\nt: ");
+  int c = get ();
+  while (i < 10)
+    {
+      *p++ = c;
+      putchar (c);
+      c = get ();
+      i++;
+    }
+  oputs ("\n");
+  if (strcmp (g_chars, "0123456789"))
+    return 1;
+
+  oputs ("t: fdungetc ('A') == getchar ()\n");
+  fdungetc ('A', STDIN);
+  if (getchar () != 'A')
+    return 2;
+  oputs ("t: fdungetc (0)\n");
+  fdungetc (0, STDIN);
+  if (getchar () != 0)
+    return 3;
+
+  oputs ("t: i == 'm'\n");
+  char m = 0x1122336d;
+  i = m;
+  if (i != 'm')
+    return 4;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/66-local-char-array.c b/lib/tests/scaffold/66-local-char-array.c
new file mode 100644 (file)
index 0000000..37433f1
--- /dev/null
@@ -0,0 +1,113 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define memset xmemset
+#define calloc xcalloc
+
+void *
+memset (void *s, int c, size_t n)
+{
+  char *p = s;
+  while (n--)
+    *p++ = c;
+  return s;
+}
+
+void *
+calloc (size_t nmemb, size_t size)
+{
+  size_t count = nmemb * size;
+  void *p = malloc (count);
+  memset (p, 0, count);
+  return p;
+}
+
+/* {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'} */
+char little_endian_table[16] =
+  { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 };
+
+char *
+little_endian (unsigned value, char *c, int number_of_bytes)
+{
+  char table[16] =
+    { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 };
+
+  switch (number_of_bytes)
+    {
+    case 4:
+      {
+        c[6] = table[value >> 28];
+        c[7] = table[(value >> 24) % 16];
+      }
+    case 3:
+      {
+        c[4] = table[(value >> 20) % 16];
+        c[5] = table[(value >> 16) % 16];
+      }
+    case 2:
+      {
+        c[2] = table[(value >> 12) % 16];
+        c[3] = table[(value >> 8) % 16];
+      }
+    case 1:
+      {
+        c[0] = table[(value >> 4) % 16];
+        c[1] = table[value % 16];
+        break;
+      }
+    default:
+      return "invalid";
+    }
+  return c;
+}
+
+int
+main ()
+{
+  char table[3] = { '0', '1', '2' };
+
+  char *s;
+  s = calloc (10, sizeof (char));
+  eputs ("2=");
+  eputs (little_endian (2, s, 1));
+  eputs ("\n");
+  if (strcmp (s, "02"))
+    return 1;
+
+  eputs ("8=");
+  eputs (little_endian (8, s, 2));
+  eputs ("\n");
+  if (strcmp (s, "0800"))
+    return 2;
+
+  eputs ("16=");
+  eputs (little_endian (16, s, 4));
+  eputs ("\n");
+  if (strcmp (s, "10000000"))
+    return 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/70-stdarg.c b/lib/tests/scaffold/70-stdarg.c
new file mode 100644 (file)
index 0000000..28182f1
--- /dev/null
@@ -0,0 +1,114 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+#include <stdarg.h>
+
+int
+//stdarg1 (long one, ...)
+stdarg1 (long *one, ...)
+{
+  va_list ap;
+  char c;
+  int r;
+
+  va_start (ap, one);
+#if __GNUC__ && __x86_64__
+#define __FUNCTION_ARGS 1
+  ap += (__FOO_VARARGS + (__FUNCTION_ARGS << 1)) << 3;
+#undef __FUNCTION_ARGS
+#endif
+  c = va_arg (ap, char);
+  r = c;
+  eputs ("c:");
+  eputs (itoa (c));
+  eputs ("\n");
+
+  va_end (ap);
+  return r;
+}
+
+int
+///stdarg2 (long one, long two, ...)
+stdarg2 (long *one, long *two, ...)
+{
+  va_list ap;
+  char c;
+  int r;
+
+  va_start (ap, two);
+#if __GNUC__ && __x86_64__
+#define __FUNCTION_ARGS 2
+  ap += (__FOO_VARARGS + (__FUNCTION_ARGS << 1)) << 3;
+#undef __FUNCTION_ARGS
+#endif
+  c = va_arg (ap, char);
+  r = c;
+  eputs ("c:");
+  eputs (itoa (c));
+  eputs ("\n");
+
+  va_end (ap);
+  return r;
+}
+
+int
+//stdarg3 (long one, long two, long three, ...)
+stdarg3 (long *one, long *two, long *three, ...)
+{
+  va_list ap;
+  char c;
+  int r;
+
+  va_start (ap, three);
+#if __GNUC__ && __x86_64__
+#define __FUNCTION_ARGS 3
+  ap += (__FOO_VARARGS + (__FUNCTION_ARGS << 1)) << 3;
+#undef __FUNCTION_ARGS
+#endif
+  c = va_arg (ap, char);
+  r = c;
+  eputs ("c:");
+  eputs (itoa (c));
+  eputs ("\n");
+
+  va_end (ap);
+  return r;
+}
+
+int
+main ()
+{
+  char c = 'm';
+  char buf[20];
+
+  if (stdarg1 (-1, c) != c)
+    return 1;
+
+  c = 'w';
+  if (stdarg2 (-1, -2, c) != c)
+    return 2;
+
+  c = 'g';
+  if (stdarg3 (-1, -2, -3, c) != c)
+    return 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/71-struct-array.c b/lib/tests/scaffold/71-struct-array.c
new file mode 100644 (file)
index 0000000..8ef70e9
--- /dev/null
@@ -0,0 +1,94 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+#include <stdio.h>
+#include <string.h>
+
+struct foo;
+
+struct foo *krak;
+
+typedef struct foo foo_struct;
+
+struct foo
+{
+  int bar[2];
+  char name[10];
+};
+
+struct foo g_foo;
+
+int a, b;
+int i, *j;
+int *k = 0, l;
+
+typedef struct baz
+{
+  int bar;
+  //struct baz *f, *g;
+  struct baz *f;
+  struct baz *g;
+} baz;
+
+int
+main ()
+{
+  foo_struct f;
+  f.bar[0] = 0x22;
+  f.bar[1] = 0x34;
+
+  printf ("eentje: %d\n", f.bar[0]);
+  printf ("tweetje: %d\n", f.bar[1]);
+
+  int *pf = &f;
+  if (*pf != 0x22)
+    return 1;
+  if (*(pf + 1) != 0x34)
+    return 2;
+
+  struct foo *g = &f;
+  printf ("punter eentje: %d\n", g->bar[0]);
+  printf ("punter tweetje: %d\n", g->bar[1]);
+
+  char *strings[] = { "one\n", "two\n", "three\n", NULL };
+  char **p = strings;
+  while (*p)
+    oputs (*p++);
+  if (strcmp (strings[1], "two\n"))
+    return 3;
+
+  strcpy (f.name, "hallo\n");
+  oputs (f.name);
+
+  struct foo fu;
+  strcpy (fu.name, "hello\n");
+  oputs (fu.name);
+
+  strcpy (g_foo.name, "hey\n");
+  oputs (g_foo.name);
+
+  char buf[10];
+  struct foo *s = &buf;
+  strcpy (s->name, "hi\n");
+  oputs (s->name);
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/72-typedef-struct-def.c b/lib/tests/scaffold/72-typedef-struct-def.c
new file mode 100644 (file)
index 0000000..1ef83c0
--- /dev/null
@@ -0,0 +1,136 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+#include <stdio.h>
+
+typedef struct foo
+{
+  int i;
+} foo;
+
+typedef struct
+{
+  int i;
+  struct foo f;
+  struct foo *p;
+} bar;
+
+
+bar baz[2] = { 1, 2, 3, 4, 5, 6 };
+
+bar *list[2];
+
+//NYACC
+//#define offsetof(type, field) ((size_t) &((type *)0)->field)
+#if __MESC__
+#define offsetof(type, field) (&((type *)0)->field)
+#else
+#define offsetof(type, field) ((size_t)&((type *)0)->field)
+#endif
+
+int
+main ()
+{
+  foo f = { 1 };
+  printf ("f.i=%d\n", f.i);
+
+  bar b = { 1, 2, &f };
+  printf ("b.i=%d\n", b.i);
+
+  printf ("b.f.i=%d\n", b.f.i);
+  if (b.f.i != 2)
+    return 1;
+
+  printf ("b.p->i=%d\n", b.p->i);
+  if (b.p->i != 1)
+    return 2;
+
+  bar *p = &b;
+  p->i = 2;
+  printf ("p->i=%d\n", b.i);
+
+  p->i++;
+  printf ("p->i=%d\n", b.i);
+
+  p->i--;
+  printf ("p->i=%d\n", b.i);
+
+  printf ("p->f.i=%d\n", p->f.i);
+  if (p->f.i != 2)
+    return 3;
+
+  printf ("p->p->i=%d\n", p->p->i);
+  if (p->p->i != 1)
+    return 4;
+
+  bar **pp = &p;
+  (*pp)->i = 3;
+  printf ("(*pp)->i=%d\n", b.i);
+
+  printf ("sizeof i:%d\n", sizeof (p->i));
+  if ((sizeof p->i) != 4)
+    return 5;
+
+  printf ("offsetof g=%d\n", (offsetof (bar, f)));
+#if __MESC__
+  //if ((offsetof (bar ,f)) != 4) return 6;
+  //#define offsetof(type, field) (&((type *)0)->field)
+  if ((&((bar *) 0)->f) != 4)
+    return 6;
+
+#else
+  if ((offsetof (bar, f)) != 4)
+    return 6;
+#endif
+
+
+
+  // printf ("(*pp)->b.i=%d\n", (*pp)->f.i);
+  // if ((*pp)->f.i != 2) return 7;
+
+  // if (baz[0].i != 1) return 8;
+  // printf ("baz[0].f.i=%d\n", baz[0].f.i);
+  // if (baz[0].f.i != 2) return 9;
+
+  // printf ("baz[1].i=%d\n", baz[1].i);
+  // if (baz[1].i != 4) return 10;
+  // printf ("baz[1].f.i=%d\n", baz[1].f.i);
+  // if (baz[1].f.i != 5) return 11;
+
+  // bar one = {0};
+  // printf ("one.i\n", one.i);
+  // if (one.i != 0) return 12;
+  // printf ("one.f.i\n", one.f.i);
+  // if (one.f.i != 0) return 13;
+
+  // bar b0 = {2};
+  // struct foo f0 = {0};
+  // struct foo *pf = &f0;
+  // list[0] = &b0;
+  // list[0]->p = pf;
+
+  // eputs ("b0.i="); eputs (itoa (b0.i)); eputs ("\n");
+  // if (b0.i != 2) return 14;
+  // eputs ("b0.p->i="); eputs (itoa (b0.p->i)); eputs ("\n");
+  // if (b0.p->i != 0) return 15;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/73-union-hello.c b/lib/tests/scaffold/73-union-hello.c
new file mode 100644 (file)
index 0000000..5004cc9
--- /dev/null
@@ -0,0 +1,38 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+typedef union foo
+{
+  char c;
+  int i;
+  void *p;
+} foo;
+
+int
+main ()
+{
+  union foo f = { 48 };
+  if (f.i != 48)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/73-union.c b/lib/tests/scaffold/73-union.c
new file mode 100644 (file)
index 0000000..ac78a18
--- /dev/null
@@ -0,0 +1,52 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+#include <stdio.h>
+
+typedef union foo
+{
+  char c;
+  int i;
+  void *p;
+} foo;
+
+typedef union
+{
+  char c;
+  int i;
+  void *p;
+} bar;
+
+
+int
+main ()
+{
+  union foo f = { 48 };
+  printf ("f.i=%d\n", f.i);
+  printf ("f.c=%c\n", f.c);
+
+  if (f.i != 48)
+    return 1;
+  if (f.c != '0')
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/74-multi-line-string.c b/lib/tests/scaffold/74-multi-line-string.c
new file mode 100644 (file)
index 0000000..8263b6d
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+#include <stdio.h>
+#include <string.h>
+
+char const *help = "All" " your" " base" " are";
+
+int global_i = 1;
+int *global_p = &global_i;
+
+int
+main ()
+{
+  if (printf ("belong to us\n"), strcmp (help, "All your base are"))
+    return 1;
+
+  int i = 1 | 2 | 4;
+  if (i != 7)
+    return 1;
+
+  printf ("global_i=%d\n", global_i);
+  *global_p = 2;
+  printf ("global_i=%d\n", global_i);
+  if (global_i != 2)
+    return global_i;
+
+  return 2, 1, 0;
+}
diff --git a/lib/tests/scaffold/75-struct-union.c b/lib/tests/scaffold/75-struct-union.c
new file mode 100644 (file)
index 0000000..bc7b51f
--- /dev/null
@@ -0,0 +1,65 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+#include <stdio.h>
+
+union u
+{
+  int bar;
+  int baz;
+};
+
+struct foo
+{
+  union u u;
+};
+
+struct anon
+{
+  union
+  {
+    int bar;
+    int baz;
+  };
+};
+
+
+int
+main ()
+{
+  struct foo f = { 2 };
+  printf ("f.u.bar=%d\n", f.u.bar);
+  if (f.u.bar != 2)
+    return 1;
+  printf ("f.u.baz=%d\n", f.u.baz);
+  if (f.u.baz != 2)
+    return 1;
+
+  struct anon a = { 2 };
+  printf ("a.bar=%d\n", a.bar);
+  if (a.bar != 2)
+    return 1;
+  printf ("a.baz=%d\n", a.baz);
+  if (a.baz != 2)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/76-pointer-arithmetic-pp.c b/lib/tests/scaffold/76-pointer-arithmetic-pp.c
new file mode 100644 (file)
index 0000000..5797876
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#define ptr_size sizeof (void*)
+
+int
+main ()
+{
+  char **ppc = 0;
+  if (ppc + 1 != ptr_size)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/76-pointer-arithmetic.c b/lib/tests/scaffold/76-pointer-arithmetic.c
new file mode 100644 (file)
index 0000000..0ba4612
--- /dev/null
@@ -0,0 +1,213 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+#include <stdio.h>
+
+char *list[2] = { "foo\n", "bar\n" };
+
+struct foo
+{
+  int a;
+  int b;
+  int c;
+  unsigned char *d;
+#if __MESC__ && __x86_64__
+  int __align;
+#endif
+};
+
+int
+main ()
+{
+  char *pc = 0;
+  void *pv = 0;
+  int *pi = 0;
+  char **ppc = 0;
+  void **ppv = 0;
+  int **ppi = 0;
+  int int_size = sizeof (int);
+  int ptr_size = sizeof (void *);
+  int foo_size = sizeof (struct foo);
+  oputs ("int_size:");
+  oputs (itoa (int_size));
+  oputs ("\n");
+  oputs ("ptr_size:");
+  oputs (itoa (ptr_size));
+  oputs ("\n");
+  oputs ("foo_size:");
+  oputs (itoa (foo_size));
+  oputs ("\n");
+  // FIXME: add *14, *18
+#if __i386__
+  int foo_size_14 = 224;
+  int foo_size_18 = 288;
+#elif __x86_64__
+  int foo_size_14 = 336;
+  int foo_size_18 = 432;
+#endif
+
+  if (++pc != 1)
+    return 1;
+  if (++pv != 1)
+    return 2;
+  if (++pi != int_size)
+    return 3;
+  if (++ppc != ptr_size)
+    return 4;
+  if (++ppv != ptr_size)
+    return 5;
+  if (++ppi != ptr_size)
+    return 6;
+  if (pc + 1 != 2)
+    return 7;
+  if (pv + 1 != 2)
+    return 8;
+  if (pi + 1 != int_size << 1)
+    return 9;
+  if (ppc + 1 != ptr_size << 1)
+    return 10;
+  if (ppv + 1 != ptr_size << 1)
+    return 11;
+  if (ppi + 1 != ptr_size << 1)
+    return 12;
+
+  char **p = list;
+  ++*p;
+  eputs (*p);
+  if (strcmp (*p, "oo\n"))
+    return 13;
+  --*p;
+  eputs (*p);
+  if (strcmp (*p, "foo\n"))
+    return 14;
+
+  struct foo *pfoo = 0;
+  eputs ("pfoo=");
+  eputs (itoa (pfoo));
+  eputs ("\n");
+  pfoo++;
+  eputs ("pfoo=");
+  eputs (itoa (pfoo));
+  eputs ("\n");
+  if (pfoo != foo_size)
+    return 15;
+
+  pfoo--;
+  eputs ("pfoo=");
+  eputs (itoa (pfoo));
+  eputs ("\n");
+  if (pfoo)
+    return 16;
+
+  pfoo++;
+  eputs ("pfoo=");
+  eputs (itoa (pfoo));
+  eputs ("\n");
+  if (pfoo != foo_size)
+    return 17;
+
+  long one = 1;
+  long two = 2;
+  pfoo = pfoo - one;
+  eputs ("pfoo=");
+  eputs (itoa (pfoo));
+  eputs ("\n");
+  if (pfoo)
+    return 18;
+
+  pfoo = pfoo + one;
+  eputs ("pfoo=");
+  eputs (itoa (pfoo));
+  eputs ("\n");
+  if (pfoo != foo_size)
+    return 19;
+
+  pfoo -= one;
+  eputs ("pfoo=");
+  eputs (itoa (pfoo));
+  eputs ("\n");
+  if (pfoo)
+    return 20;
+
+  pfoo += one;
+  eputs ("pfoo=");
+  eputs (itoa (pfoo));
+  eputs ("\n");
+  if (pfoo != foo_size)
+    return 21;
+
+  eputs ("&one: ");
+  eputs (itoa (&one));
+  eputs ("\n");
+  eputs ("&two: ");
+  eputs (itoa (&two));
+  eputs ("\n");
+
+  if (&one - 1 != &two)
+    return 22;
+
+  struct foo *sym = foo_size + foo_size;
+  int i = sym + 16;
+  eputs ("i=");
+  eputs (itoa (i));
+  eputs ("\n");
+  if (i != foo_size_18)
+    return 23;
+
+  int d = 16;
+  i = sym + d;
+  eputs ("i=");
+  eputs (itoa (i));
+  eputs ("\n");
+  if (i != foo_size_18)
+    return 24;
+
+  i = sym - 16;
+  eputs ("i=");
+  eputs (itoa (i));
+  eputs ("\n");
+  if (i != -foo_size_14)
+    return 25;
+
+  i = sym - d;
+  eputs ("i=");
+  eputs (itoa (i));
+  eputs ("\n");
+  if (i != -foo_size_14)
+    return 26;
+
+  i = sym - (struct foo *) foo_size;
+  eputs ("i=");
+  eputs (itoa (i));
+  eputs ("\n");
+  if (i != 1)
+    return 27;
+
+  pfoo = sym + 1;
+  pfoo -= sym;
+  eputs ("pfoo=");
+  eputs (itoa (pfoo));
+  eputs ("\n");
+  if (pfoo != 1)
+    return 28;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/77-pointer-assign.c b/lib/tests/scaffold/77-pointer-assign.c
new file mode 100644 (file)
index 0000000..6be1e60
--- /dev/null
@@ -0,0 +1,109 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+#include <mes/lib.h>
+
+struct baz
+{
+  int i;
+  int j;
+};
+
+struct foo
+{
+  int **bar;
+};
+
+void
+add0 (void *ptab)
+{
+  void **pp = *(void ***) ptab;
+bla:
+  pp[0] = 0x11223344;
+}
+
+void
+add1 (void *ptab)
+{
+  void ***x = (void ***) ptab;
+bla:
+  *(void ***) ptab = 0x22334455;
+}
+
+void
+add2 (void *ptab)
+{
+  void ***x = (void ***) ptab;
+bla:
+  *x = 0x33445566;
+}
+
+struct foo *hash_ident[10];
+
+int
+main ()
+{
+  int i = 1;
+  int *p = &i;
+  struct foo f;
+  f.bar = &p;
+  eputs ("f.bar:");
+  eputs (itoa (f.bar));
+  eputs ("\n");
+
+  add0 (&f.bar);
+  eputs ("f.bar:");
+  eputs (itoa (*f.bar));
+  eputs ("\n");
+  if (*f.bar != 0x11223344)
+    return 1;
+
+  add1 (&f.bar);
+  eputs ("f.bar:");
+  eputs (itoa (f.bar));
+  eputs ("\n");
+  if (f.bar != 0x22334455)
+    return 2;
+
+  add2 (&f.bar);
+  eputs ("f.bar:");
+  eputs (itoa (f.bar));
+  eputs ("\n");
+  if (f.bar != 0x33445566)
+    return 3;
+
+  hash_ident[0] = 10;
+  *hash_ident = 0;
+  memset (hash_ident, 0, 10);
+
+  struct baz b;
+  b.i = b.j = 1;
+  if (b.i != 1)
+    return 4;
+
+  struct baz *pb = &b;
+  pb->i = pb->j = 1;
+  if (pb->i != 1)
+    return 5;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/78-union-struct.c b/lib/tests/scaffold/78-union-struct.c
new file mode 100644 (file)
index 0000000..cb9cfb6
--- /dev/null
@@ -0,0 +1,49 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdint.h>
+
+struct foo
+{
+  int i;
+  void *p;
+};
+
+union bar
+{
+  struct foo foo;
+};
+
+union bar bar;
+
+int
+main ()
+{
+  bar.foo.i = 2;
+  bar.foo.p = "hallo";
+
+  union bar *pb = &bar;
+  if (pb->foo.i != 2)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/79-int-array-simple.c b/lib/tests/scaffold/79-int-array-simple.c
new file mode 100644 (file)
index 0000000..4e90010
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+int bla[2] = { 0, -1 };
+
+int
+main ()
+{
+  int *b = &bla;
+
+  int c[2] = { 201, 211 };
+  b[0] = 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/79-int-array.c b/lib/tests/scaffold/79-int-array.c
new file mode 100644 (file)
index 0000000..9684a0b
--- /dev/null
@@ -0,0 +1,94 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdio.h>
+#include <string.h>
+
+struct foo
+{
+  int *bar;
+};
+
+struct foo f;
+
+int bla[6] = { 0, 0, 11223344, 55667788, 0, 0 };
+int g_c[2] = { 101, 111 };
+
+int
+main ()
+{
+  f.bar = bla;
+  struct foo *pf = &f;
+  int *b = pf->bar;
+  if (bla[2] != 11223344)
+    return 1;
+  if (bla[3] != 55667788)
+    return 2;
+  if (b[2] != 11223344)
+    return 3;
+  if (b[3] != 55667788)
+    return 4;
+
+  eputs ("g_c[0]=");
+  eputs (itoa (g_c[0]));
+  eputs ("\n");
+  eputs ("g_c[1]=");
+  eputs (itoa (g_c[1]));
+  eputs ("\n");
+
+  memcpy (&b[2], g_c, 2 * sizeof (int));
+  eputs ("b[2]:");
+  eputs (itoa (b[2]));
+  eputs ("\n");
+
+  if (b[2] != 101)
+    return 5;
+  eputs ("b[3]:");
+  eputs (itoa (b[3]));
+  eputs ("\n");
+  if (b[3] != 111)
+    return 6;
+
+  int c[2] = { 201, 211 };
+  eputs ("c[0]=");
+  eputs (itoa (c[0]));
+  eputs ("\n");
+  eputs ("c[1]=");
+  eputs (itoa (c[1]));
+  eputs ("\n");
+
+  memcpy (&b[4], c, 2 * sizeof (int));
+
+  eputs ("b[4]:");
+  eputs (itoa (b[4]));
+  eputs ("\n");
+
+  if (b[4] != 201)
+    return 7;
+  eputs ("b[5]:");
+  eputs (itoa (b[5]));
+  eputs ("\n");
+  if (b[5] != 211)
+    return 8;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7a-struct-char-array.c b/lib/tests/scaffold/7a-struct-char-array.c
new file mode 100644 (file)
index 0000000..0c4b096
--- /dev/null
@@ -0,0 +1,180 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+#include <stdio.h>
+#include <string.h>
+
+struct file
+{
+  char buffer[1];
+};
+
+struct xfile
+{
+  char *buffer;
+};
+
+struct file file;
+struct xfile xfile;
+
+char *buffer = "aaaaaaaaaaaa";
+char *bufzor = "bbbbbbbbbbbb";
+
+int
+main ()
+{
+  char *p;
+
+  struct file *pfile = &file;
+  strcpy (file.buffer, "0123456789\n");
+  eputs (file.buffer);
+  p = pfile->buffer;
+  if (p[1] != '1')
+    return 1;
+  if (file.buffer[1] != '1')
+    return 2;
+  if (pfile->buffer[1] != '1')
+    return 3;
+
+  strcpy (file.buffer, "0123456789\n");
+  eputs (file.buffer);
+  memcpy (pfile->buffer + 1, " ", 1);
+  eputs (file.buffer);
+  if (p[1] != ' ')
+    return 4;
+  if (file.buffer[1] != ' ')
+    return 5;
+  if (pfile->buffer[1] != ' ')
+    return 6;
+
+  strcpy (file.buffer, "0123456789\n");
+  eputs (file.buffer);
+  p[2] = ' ';
+  eputs (file.buffer);
+  if (p[2] != ' ')
+    return 7;
+  if (file.buffer[2] != ' ')
+    return 8;
+  if (pfile->buffer[2] != ' ')
+    return 9;
+
+  strcpy (file.buffer, "0123456789\n");
+  eputs (file.buffer);
+  file.buffer[3] = ' ';
+  eputs (file.buffer);
+  if (p[3] != ' ')
+    return 10;
+  if (p[4] != '4')
+    return 11;
+
+  strcpy (file.buffer, "0123456789\n");
+  eputs (file.buffer);
+  pfile->buffer[4] = ' ';
+  eputs (file.buffer);
+  if (p[4] != ' ')
+    return 12;
+  if (p[5] != '5')
+    return 13;
+
+  xfile.buffer = &buffer;
+  struct xfile *pxfile = &xfile;
+  strcpy (xfile.buffer, "0123456789\n");
+  eputs (xfile.buffer);
+  p = pxfile->buffer;
+  if (p[5] != '5')
+    return 20;
+  if (xfile.buffer[5] != '5')
+    return 22;
+  if (pxfile->buffer[5] != '5')
+    return 23;
+
+  strcpy (xfile.buffer, "0123456789\n");
+  eputs (xfile.buffer);
+  memcpy (pxfile->buffer + 5, " ", 1);
+  eputs (xfile.buffer);
+  if (p[5] != ' ')
+    return 24;
+  if (xfile.buffer[5] != ' ')
+    return 25;
+  if (pxfile->buffer[5] != ' ')
+    return 26;
+
+  strcpy (xfile.buffer, "0123456789\n");
+  eputs (xfile.buffer);
+  p[6] = ' ';
+  eputs (xfile.buffer);
+  if (p[6] != ' ')
+    return 27;
+  if (xfile.buffer[6] != ' ')
+    return 28;
+  if (pxfile->buffer[6] != ' ')
+    return 29;
+
+  strcpy (xfile.buffer, "0123456789\n");
+  eputs (xfile.buffer);
+  xfile.buffer[7] = ' ';
+  eputs (xfile.buffer);
+  if (p[7] != ' ')
+    return 30;
+  if (p[8] != '8')
+    return 31;
+
+  strcpy (xfile.buffer, "0123456789\n");
+  eputs (xfile.buffer);
+  pxfile->buffer[8] = ' ';
+  eputs (xfile.buffer);
+  if (p[8] != ' ')
+    return 32;
+  if (p[9] != '9')
+    return 33;
+
+  short *ps;
+  ps = pfile->buffer;
+  p = pfile->buffer;
+
+  strcpy (file.buffer, "0123456789\n");
+  eputs (file.buffer);
+  memcpy (ps + 1, "  ", 2);
+  eputs (file.buffer);
+  eputs (itoa (ps[1]));
+  eputs ("\n");
+  eputs (itoa (((' ' << 8) + ' ')));
+  eputs ("\n");
+  if (ps[1] != ((' ' << 8) + ' '))
+    return 40;
+  if (p[4] != '4')
+    return 41;
+
+  strcpy (file.buffer, "0123456789\n");
+  eputs (file.buffer);
+  ps[2] = ((' ' << 8) + ' ');
+  eputs (file.buffer);
+  eputs (itoa (ps[2]));
+  eputs ("\n");
+  eputs (itoa (((' ' << 8) + ' ')));
+  eputs ("\n");
+  if (ps[2] != ((' ' << 8) + ' '))
+    return 42;
+  if (p[6] != '6')
+    return 43;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7b-struct-int-array-hello.c b/lib/tests/scaffold/7b-struct-int-array-hello.c
new file mode 100644 (file)
index 0000000..6856a93
--- /dev/null
@@ -0,0 +1,44 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct foo
+{
+  int a;
+  int b;
+};
+
+struct foo g_foo[2] = { 0, 1, 2, 3 };
+
+
+int
+main ()
+{
+  int r;
+
+  r = g_foo[1].b;
+  if (r == 0)
+    return 1;
+  if (r != 3)
+    return r;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7b-struct-int-array-pointer.c b/lib/tests/scaffold/7b-struct-int-array-pointer.c
new file mode 100644 (file)
index 0000000..a5b4144
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct bar
+{
+  int bar[4];
+};
+
+struct bar g_bar = { 101, 102 };
+
+int
+main ()
+{
+  int *pi;
+  pi = &g_bar;
+  if (*pi == 0)
+    return 1;
+  if (*pi != 101)
+    return *pi;
+  return 0;
+}
diff --git a/lib/tests/scaffold/7b-struct-int-array.c b/lib/tests/scaffold/7b-struct-int-array.c
new file mode 100644 (file)
index 0000000..d1cf93d
--- /dev/null
@@ -0,0 +1,103 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct foo
+{
+  int a;
+  int b;
+};
+
+struct foo g_foo[2] = { 0, 1, 2, 3 };
+
+struct bar
+{
+  int bar[4];
+};
+
+struct bar g_bar = { 101, 102 };
+
+typedef struct bar bar_struct;
+typedef struct bar foo_struct;
+
+int
+main ()
+{
+  if (g_foo[0].a != 0)
+    return 1;
+  if (g_foo[0].b != 1)
+    return 2;
+  if (g_foo[1].a != 2)
+    return 3;
+  if (g_foo[1].b != 3)
+    return 4;
+
+  void *p = &g_foo;
+  struct foo *pfoo = (((struct foo *) p) + 1);
+  if (pfoo->a != 2)
+    return 5;
+  if (pfoo->b != 3)
+    return 6;
+
+  int *pi = &g_foo;
+  if (*pi != 0)
+    return 7;
+
+  pi = &g_bar;
+  if (*pi != 101)
+    return 8;
+
+  struct bar bar = { 0x22, 0x33 };
+  pi = &bar;
+  if (*pi != 0x22)
+    return 9;
+
+  bar_struct bs;
+  bs.bar[0] = 102;
+  pi = &bs;
+  if (*pi != 102)
+    return 10;
+
+  foo_struct fs;
+  fs.bar[0] = 0x22;
+  fs.bar[1] = 0x33;
+
+  pi = &fs;
+  if (*pi != 0x22)
+    return 11;
+  pi++;
+
+  if (*pi != 0x33)
+    return 12;
+
+  foo_struct *pfs = &fs;
+  pfs->bar[3] = 0x44;
+  pfs->bar[4] = 0x55;
+
+  pi = &fs.bar[3];
+  if (*pi != 0x44)
+    return 13;
+  pi++;
+  if (*pi != 0x55)
+    return 14;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7c-dynarray.c b/lib/tests/scaffold/7c-dynarray.c
new file mode 100644 (file)
index 0000000..09712fc
--- /dev/null
@@ -0,0 +1,195 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <mes/lib.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+void
+add (void *ptab, int *nb_ptr, void *data)
+{
+  int nb, nb_alloc;
+  int **pp;
+
+  nb = *nb_ptr;
+  pp = *(void ***) ptab;
+  /* every power of two we double array size */
+  if ((nb & (nb - 1)) == 0)
+    {
+      if (!nb)
+        nb_alloc = 1;
+      else
+        nb_alloc = nb * 2;
+      pp = realloc (pp, nb_alloc * sizeof (void *));
+      *(void ***) ptab = pp;
+    }
+  pp[nb++] = data;
+  *nb_ptr = nb;
+}
+
+typedef struct file4
+{
+  char name[4];
+} file4_struct;
+
+typedef struct file12
+{
+  int foo;
+  int bar;
+  char name[4];
+} file12_struct;
+
+//#define file file4
+#define file file12
+
+struct state
+{
+  int bla;
+  char **paths;
+  int path_count;
+  struct file **files;
+  //file_struct **files;
+  int file_count;
+};
+
+struct state g_s;
+
+int
+main ()
+{
+  struct state *s = &g_s;
+
+  char *file_name = "file-name";
+  struct file *file;
+
+  file = malloc (sizeof (struct file) + strlen (file_name));
+  strcpy (file->name, file_name);
+  add (&s->files, &s->file_count, file);
+
+  char *path_name = "foo:bar:baz";
+  add (&s->paths, &s->path_count, path_name);
+
+  if (strcmp (*s->paths, path_name))
+    return 1;
+
+  eputs ("&PATHS=");
+  eputs (itoa (&s->paths));
+  eputs ("\n");
+  eputs ("&FILES=");
+  eputs (itoa (&s->files));
+  eputs ("\n");
+
+  // struct file *fs;
+  // eputs ("foo\n");
+  // fs = s->files[0];
+  struct file *fs = s->files[0];
+  eputs ("add s=   ");
+  eputs (itoa (s));
+  eputs ("\n");
+  eputs ("add fs=  ");
+  eputs (itoa (fs));
+  eputs ("\n");
+  eputs ("&fs->[0]=");
+  eputs (itoa (fs->name));
+  eputs ("\n");
+  eputs ("fs->name=");
+  eputs (fs->name);
+  eputs ("\n");
+
+  eputs ("ps=      ");
+  eputs (itoa (s->paths));
+  eputs ("\n");
+  eputs ("*ps      ");
+  eputs (*s->paths);
+  eputs ("\n");
+
+  if (strcmp (fs->name, file_name))
+    return 2;
+
+  eputs ("&fs->[0]=");
+  eputs (itoa (fs->name));
+  eputs ("\n");
+  eputs ("fs->name=");
+  eputs (fs->name);
+  eputs ("\n");
+
+  eputs ("ps=      ");
+  eputs (itoa (s->paths));
+  eputs ("\n");
+  eputs ("*ps      ");
+  eputs (*s->paths);
+  eputs ("\n");
+
+
+  file = malloc (sizeof (struct file) + strlen (file_name));
+  file_name = "hallo";
+  strcpy (file->name, file_name);
+  add (&s->files, &s->file_count, file);
+
+  struct file **pf = s->files;
+  fs = pf[0];
+  eputs ("\n");
+  eputs ("&fs0*=    ");
+  eputs (itoa (&pf[0]));
+  eputs ("\n");
+
+  eputs ("fs0*=     ");
+  eputs (itoa (fs));
+  eputs ("\n");
+  fs = s->files[0];
+  eputs ("fs0*=     ");
+  eputs (itoa (fs));
+  eputs ("\n");
+  eputs ("\n");
+
+  pf = s->files;
+  fs = pf[1];
+  eputs ("&fs1*=    ");
+  eputs (itoa (&pf[1]));
+  eputs ("\n");
+  eputs ("fs1*=     ");
+  eputs (itoa (fs));
+  eputs ("\n");
+  fs = s->files[1];
+  eputs ("fs1*=     ");
+  eputs (itoa (fs));
+  eputs ("\n");
+  eputs ("\n");
+  if (strcmp (fs->name, file_name))
+    return 3;
+
+  fs = g_s.files[0];
+  eputs ("gfs0*=    ");
+  eputs (itoa (fs));
+  eputs ("\n");
+  fs = g_s.files[1];
+  eputs ("gfs1*=    ");
+  eputs (itoa (fs));
+  eputs ("\n");
+  eputs ("\n");
+  if (strcmp (fs->name, file_name))
+    return 3;
+
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7d-cast-char.c b/lib/tests/scaffold/7d-cast-char.c
new file mode 100644 (file)
index 0000000..6438b00
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+int
+main ()
+{
+  char *s = "int";
+  char c = s[0];
+  if (c != 'i')
+    return 1;
+  int i = ((unsigned char *) s)[0];
+  if (i != 'i')
+    return 2;
+
+  c = s[1];
+  if (c != 'n')
+    return 3;
+  i = ((unsigned char *) s)[1];
+  if (i != 'n')
+    return 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7e-struct-array-access.c b/lib/tests/scaffold/7e-struct-array-access.c
new file mode 100644 (file)
index 0000000..09c6639
--- /dev/null
@@ -0,0 +1,102 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct symbol
+{
+  int len;
+  char str[10];
+  //int len;
+};
+
+struct symbol *list[2];
+struct symbol s0;
+struct symbol s1;
+struct symbol **plist;
+
+char *
+find0 ()
+{
+  strcpy (s0.str, "foo");
+  strcpy (s1.str, "bar");
+  list[0] = &s0;
+  list[1] = &s1;
+  //return s0.str;
+  //struct symbol *s = &s0;
+  struct symbol *s = list[0];
+  return s->str;
+}
+
+char *
+find1 ()
+{
+  return list[1]->str;
+}
+
+char *
+find2 ()
+{
+  plist = malloc (8);
+  struct symbol *p0 = malloc (sizeof (struct symbol));
+  struct symbol *p1 = malloc (sizeof (struct symbol));
+  strcpy (p0->str, "pfoo");
+  strcpy (p1->str, "pbar");
+  plist[0] = p0;
+  plist[1] = p1;
+  int i = 3;
+  return plist[i - 2]->str;
+}
+
+int
+main ()
+{
+  char *s = find0 ();
+  eputs (s);
+  eputs ("\n");
+  if (strcmp (s, "foo"))
+    return 1;
+  if (strcmp (list[0]->str, "foo"))
+    return 2;
+
+  s = find1 ();
+  eputs (s);
+  eputs ("\n");
+  if (strcmp (s, "bar"))
+    return 3;
+  if (strcmp (list[1]->str, "bar"))
+    return 4;
+
+  s = find2 ();
+  eputs (s);
+  eputs ("\n");
+  if (strcmp (s, "pbar"))
+    return 5;
+
+  list[1]->len = 2;
+  if (list[1]->len != 2)
+    return 6;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7f-struct-pointer-arithmetic.c b/lib/tests/scaffold/7f-struct-pointer-arithmetic.c
new file mode 100644 (file)
index 0000000..e5ec671
--- /dev/null
@@ -0,0 +1,89 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <mes/lib.h>
+#include <stdio.h>
+
+struct foo;
+typedef struct foo foo_struct;
+
+struct foo
+{
+  //struct foo **foo;
+  foo_struct **foo;
+};
+
+struct foo g_foo[2];
+
+int
+main ()
+{
+  struct foo foo;
+  foo.foo = g_foo;
+  void *p;
+  void *q;
+
+  p = &foo.foo[0];
+  q = foo.foo;
+  eputs ("f:");
+  eputs (itoa (foo.foo));
+  eputs ("\n");
+  eputs ("p:");
+  eputs (itoa (p));
+  eputs ("\n");
+  eputs ("q:");
+  eputs (itoa (q));
+  eputs ("\n");
+  if (q != p)
+    return 1;
+
+  p = &foo.foo[1];
+  q = foo.foo + 1;
+  eputs ("f:");
+  eputs (itoa (foo.foo));
+  eputs ("\n");
+  eputs ("p:");
+  eputs (itoa (p));
+  eputs ("\n");
+  eputs ("q:");
+  eputs (itoa (q));
+  eputs ("\n");
+  if (q != p)
+    return 2;
+
+  struct foo *pfoo = &foo;
+  p = &pfoo->foo[1];
+  q = pfoo->foo + 1;
+  eputs ("f:");
+  eputs (itoa (pfoo->foo));
+  eputs ("\n");
+  eputs ("p:");
+  eputs (itoa (p));
+  eputs ("\n");
+  eputs ("q:");
+  eputs (itoa (q));
+  eputs ("\n");
+  if (q != p)
+    return 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7g-struct-byte-word-field.c b/lib/tests/scaffold/7g-struct-byte-word-field.c
new file mode 100644 (file)
index 0000000..435295b
--- /dev/null
@@ -0,0 +1,65 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <inttypes.h>
+#include <string.h>
+
+struct option
+{
+  char const *name;
+  uint8_t index;
+  uint16_t flags;
+  int barf;
+};
+
+int
+main ()
+{
+  struct option h = { "help", 0, 10, 1 };
+  struct option o = { "output", 1, 11, 1 };
+  struct option v = { "version", 0, 0, 1 };
+
+  if (strcmp (h.name, "help"))
+    return 1;
+  if (h.index != 0)
+    return 2;
+  if (h.flags != 10)
+    return 3;
+
+  struct option *p = &o;
+  if (strcmp (p->name, "output"))
+    return 4;
+  if (p->index != 1)
+    return 5;
+  if (p->flags != 11)
+    return 6;
+
+  p = &v;
+  v.index = 2;
+  p->flags = 12;
+  if (v.index != 2)
+    return 7;
+  if (v.flags != 12)
+    return 8;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7h-struct-assign.c b/lib/tests/scaffold/7h-struct-assign.c
new file mode 100644 (file)
index 0000000..d4ebcf3
--- /dev/null
@@ -0,0 +1,179 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+#include <string.h>
+
+struct string
+{
+  char *str;
+  int len;
+};
+
+typedef struct biggie
+{
+  int a;
+  int b;
+  int c;
+  char *str;
+  int len;
+} biggie;
+
+struct other
+{
+  struct biggie big;
+};
+
+struct string g_t;
+
+struct biggie tab[2];
+
+int
+main ()
+{
+  struct string s = { "hallo" };
+  s.len = strlen (s.str);
+  eputs (s.str);
+  eputs ("\n");
+
+  struct string t;
+  t = s;
+
+  eputs (t.str);
+  eputs ("\n");
+  if (t.len != s.len)
+    return 1;
+  if (strcmp (t.str, s.str))
+    return 2;
+
+  g_t = s;
+  eputs (g_t.str);
+  eputs ("\n");
+  if (g_t.len != s.len)
+    return 3;
+  if (strcmp (g_t.str, s.str))
+    return 4;
+
+  struct biggie b;
+  b.str = "hello";
+  b.len = strlen (b.str);
+  eputs (b.str);
+  eputs ("\n");
+
+  struct biggie tb;
+  tb = b;
+  eputs (tb.str);
+  eputs ("\n");
+  if (tb.len != b.len)
+    return 5;
+  if (strcmp (tb.str, b.str))
+    return 6;
+
+  b.str = "bye";
+  b.len = strlen (b.str);
+  eputs (b.str);
+  eputs ("\n");
+  //struct biggie *pb = &tb;
+  biggie *pb = &tb;
+  *pb = b;
+  eputs (tb.str);
+  eputs ("\n");
+  if (tb.len != b.len)
+    return 7;
+  if (strcmp (tb.str, b.str))
+    return 8;
+
+  tb.str = "there";
+  tb.len = strlen (tb.str);
+
+  b = *pb;
+  eputs (b.str);
+  eputs ("\n");
+  if (b.len != tb.len)
+    return 9;
+  if (strcmp (b.str, tb.str))
+    return 10;
+
+  char **x = &b.str;
+  char *p;
+  p = *x;
+
+  struct other o;
+  struct other *po = &o;
+  po->big = b;
+  eputs (o.big.str);
+  eputs ("\n");
+  if (o.big.len != b.len)
+    return 13;
+  if (strcmp (o.big.str, b.str))
+    return 14;
+
+  po->big = *pb;
+  eputs (o.big.str);
+  eputs ("\n");
+  if (o.big.len != b.len)
+    return 15;
+  if (strcmp (o.big.str, b.str))
+    return 16;
+
+  b.str = "* = *";
+  b.len = strlen (b.str);
+  eputs (b.str);
+  eputs ("\n");
+  struct biggie *q = tab;
+  pb = &b;
+  *q++ = *pb;
+  eputs (tab[0].str);
+  eputs ("\n");
+  if (tab[0].len != b.len)
+    return 17;
+  if (strcmp (tab[0].str, b.str))
+    return 18;
+
+  tab[1] = tab[0];
+  eputs (tab[1].str);
+  eputs ("\n");
+  if (tab[1].len != b.len)
+    return 19;
+  if (strcmp (tab[1].str, b.str))
+    return 20;
+
+  tab[0].str = "burp";
+  tab[0].len = strlen (tab[1].str);
+  eputs (tab[0].str);
+  eputs ("\n");
+  b = tab[0];
+  eputs (b.str);
+  eputs ("\n");
+  if (b.len != tab[0].len)
+    return 21;
+  if (strcmp (b.str, tab[0].str))
+    return 22;
+
+  tab[1] = b;
+  eputs (tab[1].str);
+  eputs ("\n");
+  if (tab[1].len != b.len)
+    return 23;
+  if (strcmp (tab[1].str, b.str))
+    return 24;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7i-struct-struct-simple.c b/lib/tests/scaffold/7i-struct-struct-simple.c
new file mode 100644 (file)
index 0000000..de8b331
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdio.h>
+
+struct s
+{
+  int bar;
+  int baz;
+};
+
+struct foo
+{
+  struct s s;
+};
+
+int
+main ()
+{
+  struct foo f = { 1, 2 };
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7i-struct-struct.c b/lib/tests/scaffold/7i-struct-struct.c
new file mode 100644 (file)
index 0000000..381bce9
--- /dev/null
@@ -0,0 +1,78 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <stdio.h>
+
+struct s
+{
+  int bar;
+  int baz;
+  int bla[2];
+};
+
+struct foo
+{
+  int bar;
+  struct s s;
+};
+
+struct anon
+{
+  struct
+  {
+    int bar;
+    int baz;
+  };
+};
+
+
+int
+main ()
+{
+  struct foo f = { 0, 1, 2 };
+  f.s.baz = 2;
+  oputs ("f.s.bar=");
+  oputs (itoa (f.s.bar));
+  oputs ("\n");
+  if (f.s.bar != 1)
+    return 1;
+  oputs ("f.s.baz=");
+  oputs (itoa (f.s.baz));
+  oputs ("\n");
+  if (f.s.baz != 2)
+    return 2;
+
+  struct anon a = { 3, 4 };
+  a.baz = 4;
+  oputs ("a.bar=");
+  oputs (itoa (a.bar));
+  oputs ("\n");
+  if (a.bar != 3)
+    return 3;
+  oputs ("a.baz=");
+  oputs (itoa (a.baz));
+  oputs ("\n");
+  if (a.baz != 4)
+    return 4;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7k-empty-for.c b/lib/tests/scaffold/7k-empty-for.c
new file mode 100644 (file)
index 0000000..deaced1
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  int i = 1;
+  for (;;)
+    if (!i--)
+      break;
+
+  return i + 1;
+}
diff --git a/lib/tests/scaffold/7k-for-each-elem-simple.c b/lib/tests/scaffold/7k-for-each-elem-simple.c
new file mode 100644 (file)
index 0000000..2321dbf
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <string.h>
+#include <stdio.h>
+
+struct sym
+{
+  char *name;
+  int index;
+};
+
+struct sym tab[1] = { "foo", 1 };
+
+int
+main ()
+{
+  eputs (tab[0].name);
+  eputs ("\n");
+  return 0;
+}
diff --git a/lib/tests/scaffold/7k-for-each-elem.c b/lib/tests/scaffold/7k-for-each-elem.c
new file mode 100644 (file)
index 0000000..660bb1b
--- /dev/null
@@ -0,0 +1,99 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct section
+{
+  unsigned char *data;
+  int offset;
+};
+
+struct sym
+{
+  char *name;
+  int index;
+};
+
+struct sym tab3[3] = { "foo", 0, "bar", 1, "baz", 2 };
+struct sym tab[] = { "foo", 0, "bar", 1, "baz", 2 };
+
+struct section section;
+
+#define for_each_elem(sec, startoff, elem, type) \
+    for (elem = (type *) sec->data + startoff; \
+         elem < (type *) (sec->data + sec->offset); elem++)
+#define for_each_elem2(sec, startoff, elem, type) \
+  elem = sec->data + sizeof (type) * startoff; \
+  for (;elem < ((type *) (sec->data + sec->offset)); elem++)
+
+int
+main ()
+{
+#if __i386__
+  int sym_size = 8;
+#elif __GNUC__ && __x86_64__
+  int sym_size = 16;
+#elif  __MESC__ && __x86_64__
+  int sym_size = 12;
+#endif
+
+  struct sym *p;
+  p = tab3;
+  section.data = tab;
+  section.offset = 24;
+
+  int size = sizeof (struct sym);
+  eputs ("size=");
+  eputs (itoa (size));
+  eputs ("\n");
+  if (size != sym_size)
+    return 1;
+  struct section *psection = &section;
+  p = (struct sym *) psection->data + 1;
+  struct sym *q = tab;
+  int i = (int) p;
+  i -= (int) q;
+  eputs ("diff=");
+  eputs (itoa (i));
+  eputs ("\n");
+  if (i != sym_size)
+    return 2;
+
+  for_each_elem (psection, 1, p, struct section)
+  {
+    eputs ("i=");
+    eputs (itoa (p->index));
+    eputs (" name=");
+    eputs (p->name);
+    eputs ("\n");
+  }
+
+  for_each_elem2 (psection, 1, p, struct section)
+  {
+    eputs ("i=");
+    eputs (itoa (p->index));
+    eputs (" name=");
+    eputs (p->name);
+    eputs ("\n");
+  }
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7l-struct-any-size-array-simple.c b/lib/tests/scaffold/7l-struct-any-size-array-simple.c
new file mode 100644 (file)
index 0000000..cbfab19
--- /dev/null
@@ -0,0 +1,51 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#if __MESC__
+#define  __attribute__(x)
+#endif
+
+struct foo13
+{
+  int a;
+  int b;
+  int c;
+  char d;
+} __attribute__ ((packed));
+
+struct foo13 tab14[3];
+
+int
+main ()
+{
+  unsigned char *p;
+
+  tab14[1].a = -1;
+  tab14[1].b = -2;
+  tab14[1].c = -3;
+  tab14[1].d = -4;
+
+  if (tab14[1].d != -4)
+    return 1;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7l-struct-any-size-array.c b/lib/tests/scaffold/7l-struct-any-size-array.c
new file mode 100644 (file)
index 0000000..af3dbfd
--- /dev/null
@@ -0,0 +1,102 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#if __MESC__
+#define  __attribute__(x)
+#endif
+
+struct foo13
+{
+  int a;
+  int b;
+  int c;
+  char d;
+} __attribute__ ((packed));
+
+;
+
+struct foo16
+{
+  int a;
+  int b;
+  int c;
+  int d;
+};
+
+struct foo13 tab14[3];
+struct foo16 tab16[3];
+
+int
+main ()
+{
+  unsigned char *p;
+
+  tab14[1].a = -1;
+  tab14[1].b = -1;
+  tab14[1].c = -1;
+  tab14[1].d = -1;
+
+  p = &tab14;
+  for (int i = 0; i < sizeof (struct foo13) * 2; i++)
+    {
+      if (i < 10)
+        eputs (" ");
+      eputs (itoa (i));
+      eputs (": ");
+      eputs (itoa (p[i]));
+      eputs ("\n");
+    }
+
+  for (int i = 0; i < sizeof (struct foo13); i++)
+    if (p[i] != 0)
+      return 1 + i;
+
+  for (int i = sizeof (struct foo13); i < 2 * sizeof (struct foo13); i++)
+    if (p[i] != 255)
+      return 1 + i;
+
+  tab16[1].a = -1;
+  tab16[1].b = -1;
+  tab16[1].c = -1;
+  tab16[1].d = -1;
+
+  p = &tab16;
+  for (int i = 0; i < sizeof (struct foo16) * 2; i++)
+    {
+      if (i < 10)
+        eputs (" ");
+      eputs (itoa (i));
+      eputs (": ");
+      eputs (itoa (p[i]));
+      eputs ("\n");
+    }
+
+  for (int i = 0; i < sizeof (struct foo16); i++)
+    if (p[i] != 0)
+      return 1 + i;
+
+  for (int i = sizeof (struct foo16); i < 2 * sizeof (struct foo16); i++)
+    if (p[i] != 255)
+      return 1 + i;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7m-struct-char-array-assign.c b/lib/tests/scaffold/7m-struct-char-array-assign.c
new file mode 100644 (file)
index 0000000..06d2783
--- /dev/null
@@ -0,0 +1,44 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct file
+{
+  char *ptr;
+  char buffer[20];
+};
+
+int
+main ()
+{
+  struct file f;
+  f.ptr = f.buffer;
+
+  eputs ("***\n");
+  f.ptr[0] = 'X';
+  eputs ("***\n");
+  f.ptr[1] = 'X';
+
+  eputs (f.ptr);
+  eputs ("\n");
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7n-struct-struct-array.c b/lib/tests/scaffold/7n-struct-struct-array.c
new file mode 100644 (file)
index 0000000..73a4459
--- /dev/null
@@ -0,0 +1,120 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+#include <mes/lib.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+typedef struct file
+{
+  char name[10];
+} file_struct;
+
+#define STACK_SIZE 2
+struct state
+{
+  int bla;
+  file_struct *stack[STACK_SIZE];
+  char buf[100];
+  file_struct **stack_ptr;
+  char buf1[100];
+};
+
+int
+main ()
+{
+  struct state s;
+  struct state *ps;
+  ps = &s;
+  eputs ("0\n");
+
+  s.stack_ptr = s.stack;
+  ps->stack_ptr = ps->stack;
+  eputs ("ps->stack=");
+  eputs (itoa (ps->stack));
+  eputs ("\n");
+
+  eputs ("1\n");
+  if (ps->stack_ptr >= ps->stack + STACK_SIZE)
+    return 1;
+  eputs ("2\n");
+
+  struct file f = { "first.h" };
+#if 0                           //__MESC__
+  strcpy (f.name, "first.h");
+#endif
+  eputs (f.name);
+  eputs ("\n");
+
+  *ps->stack_ptr = &f;
+
+  eputs ("3\n");
+  ++ps->stack_ptr;
+  eputs ("s.stack_ptr -stack =");
+  eputs (itoa (ps->stack_ptr - ps->stack));
+  eputs ("\n");
+  eputs ("4\n");
+
+  for (file_struct ** p = ps->stack; p < ps->stack_ptr; p++)
+    {
+      eputs ((*p)->name);
+      eputs ("\n");
+    }
+
+  eputs ("5\n");
+
+  int i;
+  i = ps->stack_ptr - ps->stack + STACK_SIZE;
+  eputs ("i=");
+  eputs (itoa (i));
+  eputs ("\n");
+
+  if (ps->stack_ptr >= ps->stack + STACK_SIZE)
+    return 2;
+
+  eputs ("6\n");
+  struct file f2 = { "second.h" };
+#if 0                           //__MESC__
+  strcpy (f2.name, "second.h");
+#endif
+
+  *ps->stack_ptr = &f2;
+  eputs ("7\n");
+  ++ps->stack_ptr;
+  eputs ("s.stack_ptr -stack =");
+  eputs (itoa (ps->stack_ptr - ps->stack));
+  eputs ("\n");
+
+  for (file_struct ** p = ps->stack; p < ps->stack_ptr; p++)
+    {
+      eputs ((*p)->name);
+      eputs ("\n");
+    }
+
+  if (ps->stack_ptr >= ps->stack + STACK_SIZE)
+    return 0;
+  struct file f3 = { "third.h" };
+  *ps->stack_ptr = &f3;
+  ++ps->stack_ptr;
+  return 3;
+}
diff --git a/lib/tests/scaffold/7o-struct-pre-post-simple.c b/lib/tests/scaffold/7o-struct-pre-post-simple.c
new file mode 100644 (file)
index 0000000..23b6581
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct info
+{
+  int flag;
+};
+struct foo
+{
+  int length;
+  char *string;
+  struct info info;
+};
+struct foo stack[] = { {3, "foo", {11}}, {4, "baar", {12}} };
+
+int
+main ()
+{
+  oputs (stack[1].string);
+  oputs ("\n");
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7o-struct-pre-post.c b/lib/tests/scaffold/7o-struct-pre-post.c
new file mode 100644 (file)
index 0000000..e7fb910
--- /dev/null
@@ -0,0 +1,60 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+struct info
+{
+  int flag;
+};
+struct foo
+{
+  int length;
+  char *string;
+  struct info info;
+};
+struct foo stack[] = { {3, "foo", {11}}, {4, "baar", {12}} };
+
+int
+main ()
+{
+  oputs (stack[0].string);
+  oputs ("\n");
+  oputs (stack[1].string);
+  oputs ("\n");
+  struct foo *top = &stack[1];
+  int i;
+  int j;
+  i = (top--)->info.flag;
+  top++;
+  j = (--top)->info.flag;
+
+  if (i - j - 1)
+    return 1;
+
+  i = (top++)->info.flag;
+  top--;
+  j = (++top)->info.flag;
+
+  if (i - j != -1)
+    return 2;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7p-struct-cast.c b/lib/tests/scaffold/7p-struct-cast.c
new file mode 100644 (file)
index 0000000..08e0b52
--- /dev/null
@@ -0,0 +1,39 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+struct foo
+{
+  int length;
+  char *string;
+};
+
+int
+main ()
+{
+  struct foo f = { 3, "foo" };
+  struct foo *pf = &f;
+  char *p = (char *) &f;
+  int i = 0;
+  i = ((struct foo *) p)->length;
+  i = 0;
+  i = ((struct foo *) (p + i))->length;
+
+  return i - 3;
+}
diff --git a/lib/tests/scaffold/7q-bit-field-simple.c b/lib/tests/scaffold/7q-bit-field-simple.c
new file mode 100644 (file)
index 0000000..2efd508
--- /dev/null
@@ -0,0 +1,51 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+struct bits
+{
+  int one:1, two:1, four:1, eightsixteen:2;
+};
+
+union foo
+{
+  struct bits b;
+  int i;
+};
+
+int
+main ()
+{
+  union foo f;
+  // f.i = 1;
+
+  // if (!f.i)
+  //   return 1;
+
+  // f.b.two = 1;
+  // if (f.i != 3)
+  //   return 2;
+
+  f.i = 3;
+  f.b.four = 1;
+  if (f.i != 7)
+    return 3;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7q-bit-field.c b/lib/tests/scaffold/7q-bit-field.c
new file mode 100644 (file)
index 0000000..05fb51d
--- /dev/null
@@ -0,0 +1,64 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+struct bits
+{
+  int one:1, two:1, four:1, eightsixteen:2;
+};
+
+union foo
+{
+  struct bits b;
+  int i;
+};
+
+int
+main ()
+{
+  union foo f;
+  f.i = 1;
+  f.b.one = 1;
+  if (f.i != 1)
+    return 1;
+  f.b.two = 1;
+  if (f.i != 3)
+    return f.i;
+  f.b.four = 1;
+  if (f.i != 7)
+    return 3;
+  f.b.eightsixteen = 3;
+  if (f.i != 31)
+    return 4;
+
+  f.i = 1;
+  f.b.one = 0;
+  if (f.i)
+    return 5;
+  f.i = 24;
+  f.b.eightsixteen = 0;
+  if (f.i)
+    return 6;
+  f.i = 8;
+  f.b.eightsixteen = 2;
+  if (f.i != 16)
+    return 7;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7r-sign-extend.c b/lib/tests/scaffold/7r-sign-extend.c
new file mode 100644 (file)
index 0000000..08a4ec0
--- /dev/null
@@ -0,0 +1,107 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+char global_c = -1;
+struct foo
+{
+  char type;
+};
+int
+main ()
+{
+  {
+    char c = -1;
+    int i = c;
+    if (i != -1)
+      return 1;
+  }
+
+  {
+    int i = global_c;
+    if (i != -1)
+      return 2;
+  }
+
+  {
+    char c = -1;
+    int ints[2] = { c, 0 };
+    if (ints[0] != -1)
+      return 3;
+  }
+
+  {
+    char c = -1;
+    int i = c;
+    if (i != -1)
+      return 4;
+  }
+
+  {
+    char c = -1;
+    int i = c;
+    if (i != -1)
+      return 5;
+  }
+
+  {
+    char a[2] = { -1, -129 };
+    int i = a[0];
+    if (i != -1)
+      return 6;
+    if (a[0] != -1)
+      return 7;
+  }
+
+  {
+    struct foo f = { -1 };
+    int i = f.type;
+    if (i != -1)
+      return 8;
+
+    struct foo *g = &f;
+    i = g->type;
+    if (i != -1)
+      return 9;
+  }
+
+  {
+    char c = -1;
+    char *p = &c;
+    int i = *p;
+    if (i != -1)
+      return 10;
+  }
+
+  {
+    int i = -129;
+    i = (char) i;
+    if (i != 127)
+      return 11;
+  }
+
+  {
+    unsigned char b = -129;
+    int i = b;
+    if (i != 127)
+      return 12;
+  }
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7s-struct-short.c b/lib/tests/scaffold/7s-struct-short.c
new file mode 100644 (file)
index 0000000..53621ae
--- /dev/null
@@ -0,0 +1,74 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+struct foo
+{
+  char c;
+  short bar;
+  short baz;
+};
+
+struct bar
+{
+  char bar;
+};
+
+struct foo global_f = { 0, 11, 22 };
+struct bar global_b = { 11 };
+
+int i = 0x11223344;
+
+struct foo foes[2] = { {0, 1, 2}, {0, 3, 4} };
+
+int
+main ()
+{
+  if (global_f.bar != 11)
+    return 1;
+
+  if (global_f.baz != 22)
+    return 2;
+
+  struct foo f = { 0, 44, 55 };
+
+  if (f.bar != 44)
+    return 3;
+
+  if (f.baz != 55)
+    return 4;
+
+  if (global_b.bar != 11)
+    return 5;
+
+  if (foes[0].bar != 1)
+    return 6;
+
+  if (foes[0].baz != 2)
+    return foes[0].baz;
+
+  if (foes[1].bar != 3)
+    return 8;
+
+  if (foes[1].baz != 4)
+    return 9;
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7s-unsigned-compare.c b/lib/tests/scaffold/7s-unsigned-compare.c
new file mode 100644 (file)
index 0000000..dae588e
--- /dev/null
@@ -0,0 +1,124 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <limits.h>
+
+int
+main ()
+{
+  {
+    int i = 0;
+    if (i < -1)
+      return 1;
+  }
+
+  {
+    unsigned u = 0;
+    if (-1 < u)
+      return 2;
+  }
+
+  {
+    int i = INT_MAX + 2;
+    if (INT_MAX < i)
+      return 3;
+  }
+
+  {
+    unsigned u = INT_MAX + 2;
+    if (u < INT_MAX)
+      return 4;
+  }
+
+  {
+    int i = -1;
+    if (-1 > 0)
+      return 5;
+  }
+
+  {
+    unsigned u = INT_MAX + 2;
+    if (INT_MAX > u)
+      return 6;
+  }
+
+  {
+    int i = INT_MAX + 2;
+    if (i > 0)
+      return 7;
+  }
+
+  {
+    unsigned u = 0;
+    if (u > -1)
+      return 8;
+  }
+
+
+  {
+    int i = 0;
+    if (i <= -1)
+      return 9;
+  }
+
+  {
+    unsigned u = 0;
+    if (-1 <= u)
+      return 10;
+  }
+
+  {
+    int i = INT_MAX + 2;
+    if (INT_MAX <= i)
+      return 11;
+  }
+
+  {
+    unsigned u = INT_MAX + 2;
+    if (u <= INT_MAX)
+      return 12;
+  }
+
+  {
+    int i = -1;
+    if (-1 >= 0)
+      return 13;
+  }
+
+  {
+    unsigned u = INT_MAX + 2;
+    if (INT_MAX >= u)
+      return 14;
+  }
+
+  {
+    int i = INT_MAX + 2;
+    if (i >= 0)
+      return 15;
+  }
+
+  {
+    unsigned u = 0;
+    if (u >= -1)
+      return 16;
+  }
+
+  return 0;
+}
diff --git a/lib/tests/scaffold/7t-function-destruct.c b/lib/tests/scaffold/7t-function-destruct.c
new file mode 100644 (file)
index 0000000..e06a545
--- /dev/null
@@ -0,0 +1,39 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+struct foo
+{
+  int bar;
+};
+
+struct foo *
+test (struct foo *f)
+{
+  void (*fun) () = test;
+  return f;
+}
+
+int
+main ()
+{
+  struct foo f = { 1 };
+  int i = test (&f)->bar;
+  return test (&f)->bar - i;
+}
diff --git a/lib/tests/scaffold/7u-call-ternary.c b/lib/tests/scaffold/7u-call-ternary.c
new file mode 100644 (file)
index 0000000..7a72572
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mes/lib.h>
+
+int
+test (int i)
+{
+  return i;
+}
+
+#define CH_EOF -1
+
+int
+main ()
+{
+  int i = test (0 ? 1 : 0);
+  return i;
+}
diff --git a/lib/tests/scaffold/7u-double.c b/lib/tests/scaffold/7u-double.c
new file mode 100644 (file)
index 0000000..5eeda71
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the&