This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
/
testplatform.c
193 lines (176 loc) · 4.9 KB
1
2
3
4
5
6
#include <stdio.h>
#include "SDL.h"
#include "SDL_endian.h"
#include "SDL_cpuinfo.h"
7
#include "SDL_assert.h"
8
9
10
11
12
13
/*
* Watcom C flags these as Warning 201: "Unreachable code" if you just
* compare them directly, so we push it through a function to keep the
* compiler quiet. --ryan.
*/
14
15
static int
badsize(size_t sizeoftype, size_t hardcodetype)
16
17
18
19
{
return sizeoftype != hardcodetype;
}
20
21
int
TestTypes(SDL_bool verbose)
22
{
23
int error = 0;
24
25
26
if (badsize(sizeof(Uint8), 1)) {
if (verbose)
27
28
printf("sizeof(Uint8) != 1, instead = %u\n",
(unsigned int)sizeof(Uint8));
29
30
31
32
++error;
}
if (badsize(sizeof(Uint16), 2)) {
if (verbose)
33
34
printf("sizeof(Uint16) != 2, instead = %u\n",
(unsigned int)sizeof(Uint16));
35
36
37
38
++error;
}
if (badsize(sizeof(Uint32), 4)) {
if (verbose)
39
40
printf("sizeof(Uint32) != 4, instead = %u\n",
(unsigned int)sizeof(Uint32));
41
42
++error;
}
43
#ifdef SDL_HAS_64BIT_TYPE
44
45
if (badsize(sizeof(Uint64), 8)) {
if (verbose)
46
47
printf("sizeof(Uint64) != 8, instead = %u\n",
(unsigned int)sizeof(Uint64));
48
49
++error;
}
50
#else
51
52
53
if (verbose) {
printf("WARNING: No 64-bit datatype on this platform\n");
}
54
#endif
55
56
if (verbose && !error)
printf("All data types are the expected size.\n");
57
58
return (error ? 1 : 0);
59
60
}
61
62
int
TestEndian(SDL_bool verbose)
63
{
64
65
66
67
68
69
70
int error = 0;
Uint16 value = 0x1234;
int real_byteorder;
Uint16 value16 = 0xCDAB;
Uint16 swapped16 = 0xABCD;
Uint32 value32 = 0xEFBEADDE;
Uint32 swapped32 = 0xDEADBEEF;
71
#ifdef SDL_HAS_64BIT_TYPE
72
73
74
75
76
77
78
Uint64 value64, swapped64;
value64 = 0xEFBEADDE;
value64 <<= 32;
value64 |= 0xCDAB3412;
swapped64 = 0x1234ABCD;
swapped64 <<= 32;
swapped64 |= 0xDEADBEEF;
79
80
#endif
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
111
112
113
114
115
116
if (verbose) {
printf("Detected a %s endian machine.\n",
(SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big");
}
if ((*((char *) &value) >> 4) == 0x1) {
real_byteorder = SDL_BIG_ENDIAN;
} else {
real_byteorder = SDL_LIL_ENDIAN;
}
if (real_byteorder != SDL_BYTEORDER) {
if (verbose) {
printf("Actually a %s endian machine!\n",
(real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big");
}
++error;
}
if (verbose) {
printf("Value 16 = 0x%X, swapped = 0x%X\n", value16,
SDL_Swap16(value16));
}
if (SDL_Swap16(value16) != swapped16) {
if (verbose) {
printf("16 bit value swapped incorrectly!\n");
}
++error;
}
if (verbose) {
printf("Value 32 = 0x%X, swapped = 0x%X\n", value32,
SDL_Swap32(value32));
}
if (SDL_Swap32(value32) != swapped32) {
if (verbose) {
printf("32 bit value swapped incorrectly!\n");
}
++error;
}
117
#ifdef SDL_HAS_64BIT_TYPE
118
if (verbose) {
119
#ifdef _MSC_VER
120
121
printf("Value 64 = 0x%I64X, swapped = 0x%I64X\n", value64,
SDL_Swap64(value64));
122
#else
123
124
printf("Value 64 = 0x%llX, swapped = 0x%llX\n", value64,
SDL_Swap64(value64));
125
#endif
126
127
128
129
130
131
132
}
if (SDL_Swap64(value64) != swapped64) {
if (verbose) {
printf("64 bit value swapped incorrectly!\n");
}
++error;
}
133
#endif
134
return (error ? 1 : 0);
135
136
137
}
138
139
int
TestCPUInfo(SDL_bool verbose)
140
{
141
if (verbose) {
142
printf("CPU count: %d\n", SDL_GetCPUCount());
143
printf("CPU cache line size: %d\n", SDL_GetCPUCacheLineSize());
144
145
146
147
printf("RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected");
printf("MMX %s\n", SDL_HasMMX()? "detected" : "not detected");
printf("SSE %s\n", SDL_HasSSE()? "detected" : "not detected");
printf("SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected");
148
printf("SSE3 %s\n", SDL_HasSSE3()? "detected" : "not detected");
149
150
printf("SSE4.1 %s\n", SDL_HasSSE41()? "detected" : "not detected");
printf("SSE4.2 %s\n", SDL_HasSSE42()? "detected" : "not detected");
151
152
}
return (0);
153
154
}
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
int
TestAssertions(SDL_bool verbose)
{
SDL_assert(1);
SDL_assert_release(1);
SDL_assert_paranoid(1);
SDL_assert(0 || 1);
SDL_assert_release(0 || 1);
SDL_assert_paranoid(0 || 1);
#if 0 /* enable this to test assertion failures. */
SDL_assert_release(1 == 2);
SDL_assert_release(5 < 4);
SDL_assert_release(0 && "This is a test");
#endif
return (0);
}
174
175
int
main(int argc, char *argv[])
176
{
177
178
SDL_bool verbose = SDL_TRUE;
int status = 0;
179
180
181
182
183
if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) {
verbose = SDL_FALSE;
}
if (verbose) {
184
printf("This system is running %s\n", SDL_GetPlatform());
185
}
186
187
188
189
status += TestTypes(verbose);
status += TestEndian(verbose);
status += TestCPUInfo(verbose);
190
191
status += TestAssertions(verbose);
192
return status;
193
}