diff options
| author | 2025-09-08 22:05:33 +0200 | |
|---|---|---|
| committer | 2025-09-08 22:05:33 +0200 | |
| commit | e043811980db560fc2507bb53b644e54c80527dc (patch) | |
| tree | 6ea563d81c9d3767f439e361fc2c884cf4f9b64d /test | |
| parent | 36b5b19bf183cb01525201ccbddd6afa692f21bb (diff) | |
regalloc: start implementing linear scan
Diffstat (limited to 'test')
| -rw-r--r-- | test/collatz.c | 29 | ||||
| -rw-r--r-- | test/fact.c | 13 | ||||
| -rw-r--r-- | test/fib.c | 2 | ||||
| -rw-r--r-- | test/sort.c | 28 |
4 files changed, 71 insertions, 1 deletions
diff --git a/test/collatz.c b/test/collatz.c new file mode 100644 index 0000000..9793594 --- /dev/null +++ b/test/collatz.c @@ -0,0 +1,29 @@ +int printf(const char *, ...); +void *malloc(unsigned long); +int main() { + int *mem = malloc(sizeof(int) * 4000); + + int cmax = 0; + for (int nv = 1; nv < 1000; ++nv) { + int n = nv, c = 0; + while (n != 1) { + if (n < nv) { + c += mem[n]; + break; + } + if ((n & 1) != 0) { + n = (3 * n) + 1; + } else { + n /= 2; + //n >>= 1; + } + ++c; + } + mem[nv] = c; + if (c > cmax) { + cmax = c; + } + } + printf("should print 178: %d\n", cmax); +} + diff --git a/test/fact.c b/test/fact.c new file mode 100644 index 0000000..1147d8f --- /dev/null +++ b/test/fact.c @@ -0,0 +1,13 @@ +int +fact(int x) +{ + int y = 1; + while (x >= 1) { + y *= x; + x -= 1; + } + return y; +} + +extern int printf(); +int main() { printf("6! = %d\n", fact(6)); } @@ -29,8 +29,8 @@ int printf(const char *, ...); int main(int argc, char **argv) { unsigned n = argv[1] ? atoi(argv[1]) : 10; printf("fib(%u) = %u\n", n, fib(n)); - printf("fibr(%u) = %u\n", n, fibr(n)); printf("fibf(%u) = %g\n", n, fibf(n)); + printf("fibr(%u) = %u\n", n, fibr(n)); } /* vim:set ts=3 sw=3 expandtab: */ diff --git a/test/sort.c b/test/sort.c new file mode 100644 index 0000000..af58917 --- /dev/null +++ b/test/sort.c @@ -0,0 +1,28 @@ +typedef unsigned long size_t; + +int printf(const char *, ...); +void *calloc(size_t, size_t); +void qsort(void *, size_t nmemb, size_t size, int (const void *, const void *)); +int atoi(const char *); + +int +icmp(const void *a, const void *b) +{ + int l = *(int *)a, r = *(int *)b; + return (l > r) - (l < r); +} + +int +main(int argc, char **argv) +{ + int N = argc - 1; + int *xs = calloc(N, sizeof *xs); + + for (int i = 0; i < N; ++i) + xs[i] = atoi(argv[i+1]); + qsort(xs, N, sizeof *xs, icmp); + for (int i = 0; i < N; ++i) + printf("%d, ", xs[i]); + printf("\n"); + return N; +} |