llvm-project

Форк
0
/
stdbit_test.c 
61 строка · 2.4 Кб
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

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.