Skip to content

Latest commit

 

History

History
211 lines (190 loc) · 5.84 KB

testplatform.c

File metadata and controls

211 lines (190 loc) · 5.84 KB
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
#include <stdio.h>
#include "SDL.h"
#include "SDL_endian.h"
#include "SDL_cpuinfo.h"
#include "SDL_assert.h"
/*
* 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.
*/
static int
badsize(size_t sizeoftype, size_t hardcodetype)
{
return sizeoftype != hardcodetype;
}
int
TestTypes(SDL_bool verbose)
{
int error = 0;
if (badsize(sizeof(Uint8), 1)) {
if (verbose)
Aug 15, 2013
Aug 15, 2013
38
SDL_Log("sizeof(Uint8) != 1, instead = %u\n",
39
40
41
42
43
(unsigned int)sizeof(Uint8));
++error;
}
if (badsize(sizeof(Uint16), 2)) {
if (verbose)
Aug 15, 2013
Aug 15, 2013
44
SDL_Log("sizeof(Uint16) != 2, instead = %u\n",
45
46
47
48
49
(unsigned int)sizeof(Uint16));
++error;
}
if (badsize(sizeof(Uint32), 4)) {
if (verbose)
Aug 15, 2013
Aug 15, 2013
50
SDL_Log("sizeof(Uint32) != 4, instead = %u\n",
51
52
53
54
55
(unsigned int)sizeof(Uint32));
++error;
}
if (badsize(sizeof(Uint64), 8)) {
if (verbose)
Aug 15, 2013
Aug 15, 2013
56
SDL_Log("sizeof(Uint64) != 8, instead = %u\n",
57
58
59
60
(unsigned int)sizeof(Uint64));
++error;
}
if (verbose && !error)
Aug 15, 2013
Aug 15, 2013
61
SDL_Log("All data types are the expected size.\n");
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
return (error ? 1 : 0);
}
int
TestEndian(SDL_bool verbose)
{
int error = 0;
Uint16 value = 0x1234;
int real_byteorder;
Uint16 value16 = 0xCDAB;
Uint16 swapped16 = 0xABCD;
Uint32 value32 = 0xEFBEADDE;
Uint32 swapped32 = 0xDEADBEEF;
Uint64 value64, swapped64;
value64 = 0xEFBEADDE;
value64 <<= 32;
value64 |= 0xCDAB3412;
swapped64 = 0x1234ABCD;
swapped64 <<= 32;
swapped64 |= 0xDEADBEEF;
if (verbose) {
Aug 15, 2013
Aug 15, 2013
86
SDL_Log("Detected a %s endian machine.\n",
87
88
89
90
91
92
93
94
95
(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) {
Aug 15, 2013
Aug 15, 2013
96
SDL_Log("Actually a %s endian machine!\n",
97
98
99
100
101
(real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big");
}
++error;
}
if (verbose) {
Aug 15, 2013
Aug 15, 2013
102
SDL_Log("Value 16 = 0x%X, swapped = 0x%X\n", value16,
103
104
105
106
SDL_Swap16(value16));
}
if (SDL_Swap16(value16) != swapped16) {
if (verbose) {
Aug 15, 2013
Aug 15, 2013
107
SDL_Log("16 bit value swapped incorrectly!\n");
108
109
110
111
}
++error;
}
if (verbose) {
Aug 15, 2013
Aug 15, 2013
112
SDL_Log("Value 32 = 0x%X, swapped = 0x%X\n", value32,
113
114
115
116
SDL_Swap32(value32));
}
if (SDL_Swap32(value32) != swapped32) {
if (verbose) {
Aug 15, 2013
Aug 15, 2013
117
SDL_Log("32 bit value swapped incorrectly!\n");
118
119
120
121
122
}
++error;
}
if (verbose) {
#ifdef _MSC_VER
Aug 15, 2013
Aug 15, 2013
123
SDL_Log("Value 64 = 0x%I64X, swapped = 0x%I64X\n", value64,
124
125
SDL_Swap64(value64));
#else
Aug 15, 2013
Aug 15, 2013
126
SDL_Log("Value 64 = 0x%llX, swapped = 0x%llX\n",
127
128
129
130
131
132
(unsigned long long) value64,
(unsigned long long) SDL_Swap64(value64));
#endif
}
if (SDL_Swap64(value64) != swapped64) {
if (verbose) {
Aug 15, 2013
Aug 15, 2013
133
SDL_Log("64 bit value swapped incorrectly!\n");
134
135
136
137
138
139
140
141
142
143
144
}
++error;
}
return (error ? 1 : 0);
}
int
TestCPUInfo(SDL_bool verbose)
{
if (verbose) {
Aug 15, 2013
Aug 15, 2013
145
146
147
148
149
150
151
152
153
154
155
SDL_Log("CPU count: %d\n", SDL_GetCPUCount());
SDL_Log("CPU cache line size: %d\n", SDL_GetCPUCacheLineSize());
SDL_Log("RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected");
SDL_Log("AltiVec %s\n", SDL_HasAltiVec()? "detected" : "not detected");
SDL_Log("MMX %s\n", SDL_HasMMX()? "detected" : "not detected");
SDL_Log("3DNow! %s\n", SDL_Has3DNow()? "detected" : "not detected");
SDL_Log("SSE %s\n", SDL_HasSSE()? "detected" : "not detected");
SDL_Log("SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected");
SDL_Log("SSE3 %s\n", SDL_HasSSE3()? "detected" : "not detected");
SDL_Log("SSE4.1 %s\n", SDL_HasSSE41()? "detected" : "not detected");
SDL_Log("SSE4.2 %s\n", SDL_HasSSE42()? "detected" : "not detected");
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
}
return (0);
}
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
{
const SDL_assert_data *item = SDL_GetAssertionReport();
while (item) {
Aug 15, 2013
Aug 15, 2013
179
SDL_Log("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n",
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
item->condition, item->function, item->filename,
item->linenum, item->trigger_count,
item->always_ignore ? "yes" : "no");
item = item->next;
}
}
return (0);
}
int
main(int argc, char *argv[])
{
SDL_bool verbose = SDL_TRUE;
int status = 0;
Aug 15, 2013
Aug 15, 2013
195
196
197
/* Enable standard application logging */
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
198
199
200
201
if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) {
verbose = SDL_FALSE;
}
if (verbose) {
Aug 15, 2013
Aug 15, 2013
202
SDL_Log("This system is running %s\n", SDL_GetPlatform());
203
204
205
206
207
208
209
210
211
}
status += TestTypes(verbose);
status += TestEndian(verbose);
status += TestCPUInfo(verbose);
status += TestAssertions(verbose);
return status;
}