This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
/
testplatform.c
195 lines (178 loc) · 4.98 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
144
145
146
147
148
149
150
151
152
153
printf("RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected");
printf("MMX %s\n", SDL_HasMMX()? "detected" : "not detected");
printf("MMX Ext %s\n", SDL_HasMMXExt()? "detected" : "not detected");
printf("3DNow %s\n", SDL_Has3DNow()? "detected" : "not detected");
printf("3DNow Ext %s\n",
SDL_Has3DNowExt()? "detected" : "not detected");
printf("SSE %s\n", SDL_HasSSE()? "detected" : "not detected");
printf("SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected");
printf("AltiVec %s\n", SDL_HasAltiVec()? "detected" : "not detected");
}
return (0);
154
155
}
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
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
SDL_assert_release(0 && "This is a test");
return (0);
}
176
177
int
main(int argc, char *argv[])
178
{
179
180
SDL_bool verbose = SDL_TRUE;
int status = 0;
181
182
183
184
185
if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) {
verbose = SDL_FALSE;
}
if (verbose) {
186
printf("This system is running %s\n", SDL_GetPlatform());
187
}
188
189
190
191
status += TestTypes(verbose);
status += TestEndian(verbose);
status += TestCPUInfo(verbose);
192
193
status += TestAssertions(verbose);
194
return status;
195
}