File: test_ABI.cpp

package info (click to toggle)
fluidsynth 2.5.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,292 kB
  • sloc: ansic: 45,503; cpp: 4,974; xml: 877; sh: 200; makefile: 74
file content (110 lines) | stat: -rw-r--r-- 3,728 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
  Prints sizeof(...) and alignof(...) for common fundamental/intrinsic types.

  Build:
    c++ -std=c++11 -Wall -Wextra -pedantic -O2 print_type_sizes_align.cpp -o print_type_sizes_align

  Run:
    ./print_type_sizes_align
*/

#include "test.h"
#include "fluidsynth.h"
#include "fluid_sffile.h"

#include <iostream>
#include <iomanip>
#include <type_traits>
#include <cstddef>
#include <cstdint>
#include <cwchar>

template <typename T>
void print_type(const char* name) {
    std::cout << std::left << std::setw(28) << name
              << " sizeof=" << std::setw(2) << sizeof(T)
              << " alignof=" << std::setw(2) << alignof(T)
              << "\n";
}

int main() {
    std::cout << "sizeof(...) and alignof(...) in bytes on this platform:\n\n";

    // Fundamental character / boolean types
    print_type<char>("char");
    print_type<signed char>("signed char");
    print_type<unsigned char>("unsigned char");
    print_type<wchar_t>("wchar_t");
    print_type<bool>("bool");

    // C++11 Unicode character types
    print_type<char16_t>("char16_t");
    print_type<char32_t>("char32_t");

    // Integers
    print_type<short>("short");
    print_type<unsigned short>("unsigned short");
    print_type<int>("int");
    print_type<unsigned int>("unsigned int");
    print_type<long>("long");
    print_type<unsigned long>("unsigned long");
    print_type<long long>("long long");
    print_type<unsigned long long>("unsigned long long");

    // Floating point
    print_type<float>("float");
    print_type<double>("double");
    print_type<long double>("long double");

    // Pointers / size-related
    print_type<void*>("void*");
    print_type<char*>("char*");
    print_type<std::size_t>("std::size_t");
    print_type<std::ptrdiff_t>("std::ptrdiff_t");

    std::cout << "\n<stdint> fixed-width integer types:\n\n";
    print_type<std::int8_t>("std::int8_t");
    print_type<std::uint8_t>("std::uint8_t");
    print_type<std::int16_t>("std::int16_t");
    print_type<std::uint16_t>("std::uint16_t");
    print_type<std::int32_t>("std::int32_t");
    print_type<std::uint32_t>("std::uint32_t");
    print_type<std::int64_t>("std::int64_t");
    print_type<std::uint64_t>("std::uint64_t");

    std::cout << "\n<stdint> least / fast / pointer integer types:\n\n";
    print_type<std::int_least8_t>("std::int_least8_t");
    print_type<std::uint_least8_t>("std::uint_least8_t");
    print_type<std::int_fast8_t>("std::int_fast8_t");
    print_type<std::uint_fast8_t>("std::uint_fast8_t");

    print_type<std::int_least16_t>("std::int_least16_t");
    print_type<std::uint_least16_t>("std::uint_least16_t");
    print_type<std::int_fast16_t>("std::int_fast16_t");
    print_type<std::uint_fast16_t>("std::uint_fast16_t");

    print_type<std::int_least32_t>("std::int_least32_t");
    print_type<std::uint_least32_t>("std::uint_least32_t");
    print_type<std::int_fast32_t>("std::int_fast32_t");
    print_type<std::uint_fast32_t>("std::uint_fast32_t");

    print_type<std::int_least64_t>("std::int_least64_t");
    print_type<std::uint_least64_t>("std::uint_least64_t");
    print_type<std::int_fast64_t>("std::int_fast64_t");
    print_type<std::uint_fast64_t>("std::uint_fast64_t");

    print_type<std::intptr_t>("std::intptr_t");
    print_type<std::uintptr_t>("std::uintptr_t");

    // (Optional) show max alignment type
    std::cout << "\nMax fundamental alignment-related type:\n\n";
    print_type<std::max_align_t>("std::max_align_t");

    std::cout << "\nCustom FluidSynth types:\n\n";
    print_type<fluid_long_long_t>("fluid_long_long_t");
    TEST_ASSERT(sizeof(fluid_long_long_t) == 8);
    print_type<SFChunk>("SFChunk");
    TEST_ASSERT(sizeof(SFChunk) == 8);

    return 0;
}