mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-01-18 19:10:37 +00:00
public: tests: add new test to check return values of Q_Architecture/PlatformStringByID and Q_buildnum
This commit is contained in:
parent
e4a5b95e81
commit
49936120ca
177
public/tests/test_build.c
Normal file
177
public/tests/test_build.c
Normal file
@ -0,0 +1,177 @@
|
||||
#include <stdlib.h>
|
||||
#include "build.h"
|
||||
#include "buildenums.h"
|
||||
#include "crtlib.h"
|
||||
|
||||
// THESE DEFINITIONS MUST NEVER CHANGE
|
||||
static struct
|
||||
{
|
||||
int id;
|
||||
const char *string;
|
||||
} expected_platforms[] =
|
||||
{
|
||||
{ PLATFORM_WIN32, "win32" },
|
||||
{ PLATFORM_ANDROID, "android" },
|
||||
{ PLATFORM_LINUX_UNKNOWN, "linuxunkabi" },
|
||||
{ PLATFORM_LINUX, "linux" },
|
||||
{ PLATFORM_APPLE, "apple" },
|
||||
{ PLATFORM_FREEBSD, "freebsd" },
|
||||
{ PLATFORM_NETBSD, "netbsd" },
|
||||
{ PLATFORM_OPENBSD, "openbsd" },
|
||||
{ PLATFORM_EMSCRIPTEN, "emscripten" },
|
||||
{ PLATFORM_DOS4GW, "DOS4GW" },
|
||||
{ PLATFORM_HAIKU, "haiku" },
|
||||
{ PLATFORM_SERENITY, "serenity" },
|
||||
{ PLATFORM_IRIX, "irix" },
|
||||
{ PLATFORM_NSWITCH, "nswitch" },
|
||||
{ PLATFORM_PSVITA, "psvita" },
|
||||
};
|
||||
|
||||
static struct
|
||||
{
|
||||
int id;
|
||||
int abi;
|
||||
int endianness;
|
||||
int is64;
|
||||
const char *string;
|
||||
} expected_architectures[] =
|
||||
{
|
||||
{ ARCHITECTURE_AMD64, 0, -1, -1, "amd64" },
|
||||
{ ARCHITECTURE_X86, 0, -1, -1, "i386" },
|
||||
{ ARCHITECTURE_E2K, 0, -1, -1, "e2k" },
|
||||
{ ARCHITECTURE_JS, 0, -1, -1, "javascript" },
|
||||
|
||||
// all possible MIPS names
|
||||
{ ARCHITECTURE_MIPS, 0, ENDIANNESS_BIG, true, "mips64" },
|
||||
{ ARCHITECTURE_MIPS, 0, ENDIANNESS_BIG, false, "mips" },
|
||||
{ ARCHITECTURE_MIPS, 0, ENDIANNESS_LITTLE, true, "mips64el" },
|
||||
{ ARCHITECTURE_MIPS, 0, ENDIANNESS_LITTLE, false, "mipsel" },
|
||||
|
||||
// All ARM is little endian only (for now?)
|
||||
// Arm64 is always arm64, no matter the version (for now)
|
||||
// Arm64 don't care about hardfp bit
|
||||
{ ARCHITECTURE_ARM, 8 | ARCH_ARM_HARDFP, ENDIANNESS_LITTLE, true, "arm64" },
|
||||
{ ARCHITECTURE_ARM, 8, ENDIANNESS_LITTLE, true, "arm64" },
|
||||
{ ARCHITECTURE_ARM, 0 | ARCH_ARM_HARDFP, ENDIANNESS_LITTLE, true, "arm64" },
|
||||
{ ARCHITECTURE_ARM, 0, ENDIANNESS_LITTLE, true, "arm64" },
|
||||
|
||||
// ARMv6 and below don't care about hardfp bit
|
||||
{ ARCHITECTURE_ARM, 4 | ARCH_ARM_HARDFP, ENDIANNESS_LITTLE, false, "armv4l" },
|
||||
{ ARCHITECTURE_ARM, 4, ENDIANNESS_LITTLE, false, "armv4l" },
|
||||
{ ARCHITECTURE_ARM, 5 | ARCH_ARM_HARDFP, ENDIANNESS_LITTLE, false, "armv5l" },
|
||||
{ ARCHITECTURE_ARM, 5, ENDIANNESS_LITTLE, false, "armv5l" },
|
||||
{ ARCHITECTURE_ARM, 6 | ARCH_ARM_HARDFP, ENDIANNESS_LITTLE, false, "armv6l" },
|
||||
{ ARCHITECTURE_ARM, 6, ENDIANNESS_LITTLE, false, "armv6l" },
|
||||
{ ARCHITECTURE_ARM, 6 | ARCH_ARM_HARDFP, ENDIANNESS_LITTLE, false, "armv6l" },
|
||||
{ ARCHITECTURE_ARM, 6, ENDIANNESS_LITTLE, false, "armv6l" },
|
||||
|
||||
// ARMv7 and ARMv8 in 32-bit mode, hardfp bit is important
|
||||
{ ARCHITECTURE_ARM, 7 | ARCH_ARM_HARDFP, ENDIANNESS_LITTLE, false, "armv7hf" },
|
||||
{ ARCHITECTURE_ARM, 7, ENDIANNESS_LITTLE, false, "armv7l" },
|
||||
{ ARCHITECTURE_ARM, 8 | ARCH_ARM_HARDFP, ENDIANNESS_LITTLE, false, "armv8_32hf" },
|
||||
{ ARCHITECTURE_ARM, 8, ENDIANNESS_LITTLE, false, "armv8_32l" },
|
||||
|
||||
{ ARCHITECTURE_RISCV, ARCH_RISCV_FP_SOFT, -1, true, "riscv64" },
|
||||
{ ARCHITECTURE_RISCV, ARCH_RISCV_FP_SOFT, -1, false, "riscv32" },
|
||||
{ ARCHITECTURE_RISCV, ARCH_RISCV_FP_SINGLE, -1, true, "riscv64f" },
|
||||
{ ARCHITECTURE_RISCV, ARCH_RISCV_FP_SINGLE, -1, false, "riscv32f" },
|
||||
{ ARCHITECTURE_RISCV, ARCH_RISCV_FP_DOUBLE, -1, true, "riscv64d" },
|
||||
{ ARCHITECTURE_RISCV, ARCH_RISCV_FP_DOUBLE, -1, false, "riscv32d" },
|
||||
};
|
||||
|
||||
static int TestPlatformString( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < sizeof( expected_platforms ) / sizeof( expected_platforms[0] ); i++ )
|
||||
{
|
||||
if( Q_strcmp( Q_PlatformStringByID( expected_platforms[i].id ), expected_platforms[i].string ))
|
||||
return i + 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static qboolean TestArchitectureString_NoEndianness( int id, int abi, int is64, const char *string )
|
||||
{
|
||||
return !Q_strcmp( Q_ArchitectureStringByID( id, abi, ENDIANNESS_LITTLE, is64 ), string ) &&
|
||||
!Q_strcmp( Q_ArchitectureStringByID( id, abi, ENDIANNESS_BIG, is64 ), string );
|
||||
}
|
||||
|
||||
static qboolean TestArchitectureString_No64( int id, int abi, int endianness, const char *string )
|
||||
{
|
||||
if( endianness == -1 )
|
||||
{
|
||||
return TestArchitectureString_NoEndianness( id, abi, false, string ) &&
|
||||
TestArchitectureString_NoEndianness( id, abi, true, string );
|
||||
}
|
||||
|
||||
return !Q_strcmp( Q_ArchitectureStringByID( id, abi, endianness, true ), string ) &&
|
||||
!Q_strcmp( Q_ArchitectureStringByID( id, abi, endianness, false ), string );
|
||||
}
|
||||
|
||||
static int TestArchitectureString( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < sizeof( expected_architectures ) / sizeof( expected_architectures[0] ); i++ )
|
||||
{
|
||||
if( expected_architectures[i].is64 == -1 )
|
||||
{
|
||||
if( !TestArchitectureString_No64(
|
||||
expected_architectures[i].id,
|
||||
expected_architectures[i].abi,
|
||||
expected_architectures[i].endianness,
|
||||
expected_architectures[i].string ))
|
||||
return i + 1;
|
||||
}
|
||||
else if( expected_architectures[i].endianness == -1 )
|
||||
{
|
||||
if( !TestArchitectureString_NoEndianness(
|
||||
expected_architectures[i].id,
|
||||
expected_architectures[i].abi,
|
||||
expected_architectures[i].is64,
|
||||
expected_architectures[i].string ))
|
||||
{
|
||||
abort();
|
||||
return i + 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( Q_strcmp( Q_ArchitectureStringByID(
|
||||
expected_architectures[i].id,
|
||||
expected_architectures[i].abi,
|
||||
expected_architectures[i].endianness,
|
||||
expected_architectures[i].is64
|
||||
), expected_architectures[i].string ))
|
||||
return i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main( void )
|
||||
{
|
||||
int res;
|
||||
|
||||
res = TestPlatformString();
|
||||
if( res != 0 )
|
||||
return res;
|
||||
|
||||
res = TestArchitectureString();
|
||||
if( res != 0 )
|
||||
return res + 100;
|
||||
|
||||
if( Q_buildnum_compat() != 4529 )
|
||||
return 200;
|
||||
|
||||
if( Q_buildnum_date( "Apr 02 2015" ) != 1 )
|
||||
return 201;
|
||||
|
||||
if( Q_buildnum_date( "Apr 17 2023" ) != 2938 )
|
||||
return 202;
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
@ -26,6 +26,7 @@ def build(bld):
|
||||
if bld.env.TESTS:
|
||||
tests = {
|
||||
'strings': 'tests/test_strings.c',
|
||||
'build': 'tests/test_build.c',
|
||||
}
|
||||
|
||||
for i in tests:
|
||||
|
Loading…
x
Reference in New Issue
Block a user