aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2025-09-08 22:05:33 +0200
committerlemon <lsof@mailbox.org>2025-09-08 22:05:33 +0200
commite043811980db560fc2507bb53b644e54c80527dc (patch)
tree6ea563d81c9d3767f439e361fc2c884cf4f9b64d /test
parent36b5b19bf183cb01525201ccbddd6afa692f21bb (diff)
regalloc: start implementing linear scan
Diffstat (limited to 'test')
-rw-r--r--test/collatz.c29
-rw-r--r--test/fact.c13
-rw-r--r--test/fib.c2
-rw-r--r--test/sort.c28
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)); }
diff --git a/test/fib.c b/test/fib.c
index 5fe430a..0c02171 100644
--- a/test/fib.c
+++ b/test/fib.c
@@ -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;
+}