Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
195 lines (178 loc) · 4.98 KB

testplatform.c

File metadata and controls

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"
Jan 13, 2010
Jan 13, 2010
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.
*/
Jul 10, 2006
Jul 10, 2006
14
15
static int
badsize(size_t sizeoftype, size_t hardcodetype)
16
17
18
19
{
return sizeoftype != hardcodetype;
}
Jul 10, 2006
Jul 10, 2006
20
21
int
TestTypes(SDL_bool verbose)
Jul 10, 2006
Jul 10, 2006
23
int error = 0;
Jul 10, 2006
Jul 10, 2006
25
26
if (badsize(sizeof(Uint8), 1)) {
if (verbose)
Jan 21, 2010
Jan 21, 2010
27
28
printf("sizeof(Uint8) != 1, instead = %u\n",
(unsigned int)sizeof(Uint8));
Jul 10, 2006
Jul 10, 2006
29
30
31
32
++error;
}
if (badsize(sizeof(Uint16), 2)) {
if (verbose)
Jan 21, 2010
Jan 21, 2010
33
34
printf("sizeof(Uint16) != 2, instead = %u\n",
(unsigned int)sizeof(Uint16));
Jul 10, 2006
Jul 10, 2006
35
36
37
38
++error;
}
if (badsize(sizeof(Uint32), 4)) {
if (verbose)
Jan 21, 2010
Jan 21, 2010
39
40
printf("sizeof(Uint32) != 4, instead = %u\n",
(unsigned int)sizeof(Uint32));
Jul 10, 2006
Jul 10, 2006
41
42
++error;
}
43
#ifdef SDL_HAS_64BIT_TYPE
Jul 10, 2006
Jul 10, 2006
44
45
if (badsize(sizeof(Uint64), 8)) {
if (verbose)
Jan 21, 2010
Jan 21, 2010
46
47
printf("sizeof(Uint64) != 8, instead = %u\n",
(unsigned int)sizeof(Uint64));
Jul 10, 2006
Jul 10, 2006
48
49
++error;
}
Jul 10, 2006
Jul 10, 2006
51
52
53
if (verbose) {
printf("WARNING: No 64-bit datatype on this platform\n");
}
Jul 10, 2006
Jul 10, 2006
55
56
if (verbose && !error)
printf("All data types are the expected size.\n");
Jul 10, 2006
Jul 10, 2006
58
return (error ? 1 : 0);
Jul 10, 2006
Jul 10, 2006
61
62
int
TestEndian(SDL_bool verbose)
Jul 10, 2006
Jul 10, 2006
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
Jul 10, 2006
Jul 10, 2006
72
73
74
75
76
77
78
Uint64 value64, swapped64;
value64 = 0xEFBEADDE;
value64 <<= 32;
value64 |= 0xCDAB3412;
swapped64 = 0x1234ABCD;
swapped64 <<= 32;
swapped64 |= 0xDEADBEEF;
Jul 10, 2006
Jul 10, 2006
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
Jul 10, 2006
Jul 10, 2006
118
if (verbose) {
Mar 31, 2006
Mar 31, 2006
119
#ifdef _MSC_VER
Jul 10, 2006
Jul 10, 2006
120
121
printf("Value 64 = 0x%I64X, swapped = 0x%I64X\n", value64,
SDL_Swap64(value64));
Mar 31, 2006
Mar 31, 2006
122
#else
Jul 10, 2006
Jul 10, 2006
123
124
printf("Value 64 = 0x%llX, swapped = 0x%llX\n", value64,
SDL_Swap64(value64));
Mar 31, 2006
Mar 31, 2006
125
#endif
Jul 10, 2006
Jul 10, 2006
126
127
128
129
130
131
132
}
if (SDL_Swap64(value64) != swapped64) {
if (verbose) {
printf("64 bit value swapped incorrectly!\n");
}
++error;
}
Jul 10, 2006
Jul 10, 2006
134
return (error ? 1 : 0);
Jul 10, 2006
Jul 10, 2006
138
139
int
TestCPUInfo(SDL_bool verbose)
Jul 10, 2006
Jul 10, 2006
141
if (verbose) {
Dec 16, 2009
Dec 16, 2009
142
printf("CPU count: %d\n", SDL_GetCPUCount());
Jul 10, 2006
Jul 10, 2006
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);
Jan 13, 2010
Jan 13, 2010
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);
}
Jul 10, 2006
Jul 10, 2006
176
177
int
main(int argc, char *argv[])
Jul 10, 2006
Jul 10, 2006
179
180
SDL_bool verbose = SDL_TRUE;
int status = 0;
Jul 10, 2006
Jul 10, 2006
182
183
184
185
if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) {
verbose = SDL_FALSE;
}
if (verbose) {
Sep 26, 2009
Sep 26, 2009
186
printf("This system is running %s\n", SDL_GetPlatform());
Jul 10, 2006
Jul 10, 2006
187
}
Jul 10, 2006
Jul 10, 2006
189
190
191
status += TestTypes(verbose);
status += TestEndian(verbose);
status += TestCPUInfo(verbose);
Jan 13, 2010
Jan 13, 2010
192
193
status += TestAssertions(verbose);
Jul 10, 2006
Jul 10, 2006
194
return status;