summaryrefslogtreecommitdiffstats
path: root/regressions/ck_cc
diff options
context:
space:
mode:
Diffstat (limited to 'regressions/ck_cc')
-rw-r--r--regressions/ck_cc/validate/Makefile17
-rw-r--r--regressions/ck_cc/validate/ck_cc.c37
2 files changed, 54 insertions, 0 deletions
diff --git a/regressions/ck_cc/validate/Makefile b/regressions/ck_cc/validate/Makefile
new file mode 100644
index 0000000..2da34d1
--- /dev/null
+++ b/regressions/ck_cc/validate/Makefile
@@ -0,0 +1,17 @@
+.PHONY: check clean distribution
+
+OBJECTS=ck_cc
+
+all: $(OBJECTS)
+
+ck_cc: ck_cc.c ../../../include/ck_cc.h
+ $(CC) $(CFLAGS) -g2 -o ck_cc ck_cc.c
+
+check: all
+ ./ck_cc
+
+clean:
+ rm -rf *~ *.o $(OBJECTS) *.dSYM *.exe
+
+include ../../../build/regressions.build
+CFLAGS+=-D_GNU_SOURCE
diff --git a/regressions/ck_cc/validate/ck_cc.c b/regressions/ck_cc/validate/ck_cc.c
new file mode 100644
index 0000000..a22030f
--- /dev/null
+++ b/regressions/ck_cc/validate/ck_cc.c
@@ -0,0 +1,37 @@
+#include <ck_pr.h>
+#include <limits.h>
+#include <stdio.h>
+
+#include "../../common.h"
+
+int
+main(void)
+{
+ unsigned int x;
+
+ ck_pr_store_uint(&x, 0x10110);
+
+ if (ck_cc_ffs(0) != 0)
+ ck_error("ffs(0) = %d\n", ck_cc_ffs(0));
+ if (ck_cc_ffs(4) != 3)
+ ck_error("ffs(4) = %d\n", ck_cc_ffs(4));
+ if (ck_cc_ffs(UINT_MAX) != 1)
+ ck_error("ffs(UINT_MAX) = %d\n", ck_cc_ffs(UINT_MAX));
+ if (ck_cc_ffs(x) != 5)
+ ck_error("ffs(%u) = %d\n", x, ck_cc_ffs(x));
+
+ if (ck_cc_ffs(x) != ck_cc_ffsl(x) ||
+ ck_cc_ffsl(x) != ck_cc_ffsll(x) ||
+ ck_cc_ffs(x) != ck_cc_ffsll(x)) {
+ ck_error(" ffs = %d, ffsl = %d, ffsll = %d\n",
+ ck_cc_ffs(x), ck_cc_ffsl(x), ck_cc_ffsll(x));
+ }
+
+ if (ck_cc_ctz(x) != 4)
+ ck_error("ctz = %d\n", ck_cc_ctz(x));
+
+ if (ck_cc_popcount(x) != 3)
+ ck_error("popcount = %d\n", ck_cc_popcount(x));
+
+ return 0;
+}