aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/tests/stdbit/stdc_first_leading_one_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/tests/stdbit/stdc_first_leading_one_test.c')
-rw-r--r--lib/libc/tests/stdbit/stdc_first_leading_one_test.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/libc/tests/stdbit/stdc_first_leading_one_test.c b/lib/libc/tests/stdbit/stdc_first_leading_one_test.c
new file mode 100644
index 000000000000..7312789262ea
--- /dev/null
+++ b/lib/libc/tests/stdbit/stdc_first_leading_one_test.c
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#define FUNCSTEM stdc_first_leading_one
+#define MKREFFUNC(name, type) \
+ static unsigned \
+ name(type value) \
+ { \
+ type bit = 1; \
+ unsigned pos = 1; \
+ \
+ if (value == 0) \
+ return (0); \
+ \
+ while ((type)(bit << 1) != 0) \
+ bit <<= 1; \
+ \
+ while ((bit & value) == 0) { \
+ bit >>= 1; \
+ pos++; \
+ } \
+ \
+ return (pos); \
+ }
+
+#include "stdbit-test-framework.c"