diff options
author | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2006-09-11 16:20:00 +0000 |
---|---|---|
committer | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2006-09-11 16:20:00 +0000 |
commit | 9d125a3c856d891b234cec1a24264ba72659c18f (patch) | |
tree | 7146e10dd1600339dfe5d37c05ea96a5293784e2 /test/c/lists.c | |
parent | c26b35f57f673a9cef1994bb9da29a63dafce97c (diff) |
Ajout du test lists
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@99 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'test/c/lists.c')
-rw-r--r-- | test/c/lists.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/test/c/lists.c b/test/c/lists.c new file mode 100644 index 0000000..c472d72 --- /dev/null +++ b/test/c/lists.c @@ -0,0 +1,55 @@ +/* List manipulations */ + +#include <stdio.h> +#include <stddef.h> +#include <stdlib.h> + +struct list { int hd; struct list * tl; }; + +struct list * buildlist(int n) +{ + struct list * r; + if (n < 0) return NULL; + r = malloc(sizeof(struct list)); + r->hd = n; + r->tl = buildlist(n - 1); + return r; +} + +struct list * reverselist (struct list * l) +{ + struct list * r, * r2; + for (r = NULL; l != NULL; l = l->tl) { + r2 = malloc(sizeof(struct list)); + r2->hd = l->hd; + r2->tl = r; + r = r2; + } + return r; +} + +int checklist(int n, struct list * l) +{ + int i; + for (i = 0; i <= n; i++) { + if (l == NULL) return 0; + if (l->hd != i) return 0; + l = l->tl; + } + return (l == NULL); +} + +int main(int argc, char ** argv) +{ + int n; + + if (argc >= 2) n = atoi(argv[1]); else n = 10; + if (checklist(n, reverselist(buildlist(n)))) { + printf("OK\n"); + return 0; + } else { + printf("Bug!\n"); + return 2; + } +} + |