#pragma once #include #include void ReturnsVoid () { } std::nullptr_t ReturnsNullptr () { return nullptr; } std::nullptr_t PassAndReturnsNullptr (std::nullptr_t t) { return t; } bool ReturnsBool () { return true; } bool PassAndReturnsBool (bool v) { return v; } // Character types char ReturnsChar () { return 'a'; } signed char ReturnsSChar () { return 'a'; } unsigned char ReturnsUChar () { return 'a'; } char PassAndReturnsChar (char v) { return v; } signed char PassAndReturnsSChar (signed char v) { return v; } unsigned char PassAndReturnsUChar (unsigned char v) { return v; } wchar_t ReturnsWChar () { return 'a'; } #if __cplusplus > 201703L char8_t ReturnsChar8 () { return 'a'; } #endif char16_t ReturnsChar16 () { return 'a'; } char32_t ReturnsChar32 () { return 'a'; } // Floating-point types float ReturnsFloat () { return 5.0; } double ReturnsDouble () { return -5.0; } long double ReturnsLongDouble () { return -5.0; } float PassAndReturnsFloat (float v) { return v; } double PassAndReturnsDouble (double v) { return v; } long double PassAndReturnsLongDouble (long double v) { return v; } // Integer types int8_t ReturnsInt8 () { return -5; } uint8_t ReturnsUInt8 () { return 5; } int16_t ReturnsInt16 () { return -5; } uint16_t ReturnsUInt16 () { return 5; } int32_t ReturnsInt32 () { return -5; } uint32_t ReturnsUInt32 () { return 5; } #if !defined(__EMSCRIPTEN__) int64_t ReturnsInt64 () { return -5; } uint64_t ReturnsUInt64 () { return 5; } #endif int8_t PassAndReturnsInt8 (int8_t v) { return v; } uint8_t PassAndReturnsUInt8 (uint8_t v) { return v; } int16_t PassAndReturnsInt16 (int16_t v) { return v; } uint16_t PassAndReturnsUInt16 (uint16_t v) { return v; } int32_t PassAndReturnsInt32 (int32_t v) { return v; } uint32_t PassAndReturnsUInt32 (uint32_t v) { return v; } int64_t PassAndReturnsInt64 (int64_t v) { return v; } uint64_t PassAndReturnsUInt64 (uint64_t v) { return v; } // Pointer types const char* ReturnsConstCharPtr() { return "Hello"; } const char* PassAndReturnsConstCharPtr(const char* ptr) { return ptr; }