1 | //===-- Unittests for stdbit ----------------------------------------------===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDSList-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | /* |
10 | * The intent of this test is validate that: |
11 | * 1. We provide the definition of the various type generic macros of stdbit.h |
12 | * (the macros are transitively included from stdbit-macros.h by stdbit.h). |
13 | * 2. It dispatches to the correct underlying function. |
14 | * Because unit tests build without public packaging, the object files produced |
15 | * do not contain non-namespaced symbols. |
16 | */ |
17 | |
18 | /* |
19 | * Declare these BEFORE including stdbit-macros.h so that this test may still be |
20 | * run even if a given target doesn't yet have these individual entrypoints |
21 | * enabled. |
22 | */ |
23 | #include "stdbit_stub.h" |
24 | |
25 | #include "include/llvm-libc-macros/stdbit-macros.h" |
26 | |
27 | #include <assert.h> |
28 | |
29 | #define CHECK_FUNCTION(FUNC_NAME, VAL) \ |
30 | do { \ |
31 | assert(FUNC_NAME((unsigned char)0U) == VAL##AU); \ |
32 | assert(FUNC_NAME((unsigned short)0U) == VAL##BU); \ |
33 | assert(FUNC_NAME(0U) == VAL##CU); \ |
34 | assert(FUNC_NAME(0UL) == VAL##DU); \ |
35 | assert(FUNC_NAME(0ULL) == VAL##EU); \ |
36 | } while (0) |
37 | |
38 | int main(void) { |
39 | CHECK_FUNCTION(stdc_leading_zeros, 0xA); |
40 | CHECK_FUNCTION(stdc_leading_ones, 0xB); |
41 | CHECK_FUNCTION(stdc_trailing_zeros, 0xC); |
42 | CHECK_FUNCTION(stdc_trailing_ones, 0xD); |
43 | CHECK_FUNCTION(stdc_first_leading_zero, 0xE); |
44 | CHECK_FUNCTION(stdc_first_leading_one, 0xF); |
45 | CHECK_FUNCTION(stdc_first_trailing_zero, 0x0); |
46 | CHECK_FUNCTION(stdc_first_trailing_one, 0x1); |
47 | CHECK_FUNCTION(stdc_count_zeros, 0x2); |
48 | CHECK_FUNCTION(stdc_count_ones, 0x3); |
49 | |
50 | assert(!stdc_has_single_bit((unsigned char)1U)); |
51 | assert(!stdc_has_single_bit((unsigned short)1U)); |
52 | assert(!stdc_has_single_bit(1U)); |
53 | assert(!stdc_has_single_bit(1UL)); |
54 | assert(!stdc_has_single_bit(1ULL)); |
55 | |
56 | CHECK_FUNCTION(stdc_bit_width, 0x4); |
57 | CHECK_FUNCTION(stdc_bit_floor, 0x5); |
58 | CHECK_FUNCTION(stdc_bit_ceil, 0x6); |
59 | |
60 | return 0; |
61 | } |
62 | |