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

Latest commit

 

History

History
197 lines (177 loc) · 5.26 KB

testplatform.c

File metadata and controls

197 lines (177 loc) · 5.26 KB
 
Apr 8, 2011
Apr 8, 2011
1
2
3
4
5
6
7
8
9
10
11
/*
Copyright (C) 1997-2011 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.
*/
12
13
14
15
16
17
#include <stdio.h>
#include "SDL.h"
#include "SDL_endian.h"
#include "SDL_cpuinfo.h"
Jan 13, 2010
Jan 13, 2010
18
#include "SDL_assert.h"
19
20
21
22
23
24
/*
* 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
25
26
static int
badsize(size_t sizeoftype, size_t hardcodetype)
27
28
29
30
{
return sizeoftype != hardcodetype;
}
Jul 10, 2006
Jul 10, 2006
31
32
int
TestTypes(SDL_bool verbose)
Jul 10, 2006
Jul 10, 2006
34
int error = 0;
Jul 10, 2006
Jul 10, 2006
36
37
if (badsize(sizeof(Uint8), 1)) {
if (verbose)
Jan 21, 2010
Jan 21, 2010
38
39
printf("sizeof(Uint8) != 1, instead = %u\n",
(unsigned int)sizeof(Uint8));
Jul 10, 2006
Jul 10, 2006
40
41
42
43
++error;
}
if (badsize(sizeof(Uint16), 2)) {
if (verbose)
Jan 21, 2010
Jan 21, 2010
44
45
printf("sizeof(Uint16) != 2, instead = %u\n",
(unsigned int)sizeof(Uint16));
Jul 10, 2006
Jul 10, 2006
46
47
48
49
++error;
}
if (badsize(sizeof(Uint32), 4)) {
if (verbose)
Jan 21, 2010
Jan 21, 2010
50
51
printf("sizeof(Uint32) != 4, instead = %u\n",
(unsigned int)sizeof(Uint32));
Jul 10, 2006
Jul 10, 2006
52
53
54
55
++error;
}
if (badsize(sizeof(Uint64), 8)) {
if (verbose)
Jan 21, 2010
Jan 21, 2010
56
57
printf("sizeof(Uint64) != 8, instead = %u\n",
(unsigned int)sizeof(Uint64));
Jul 10, 2006
Jul 10, 2006
58
59
60
61
++error;
}
if (verbose && !error)
printf("All data types are the expected size.\n");
Jul 10, 2006
Jul 10, 2006
63
return (error ? 1 : 0);
Jul 10, 2006
Jul 10, 2006
66
67
int
TestEndian(SDL_bool verbose)
Jul 10, 2006
Jul 10, 2006
69
70
71
72
73
74
75
76
int error = 0;
Uint16 value = 0x1234;
int real_byteorder;
Uint16 value16 = 0xCDAB;
Uint16 swapped16 = 0xABCD;
Uint32 value32 = 0xEFBEADDE;
Uint32 swapped32 = 0xDEADBEEF;
Uint64 value64, swapped64;
Mar 25, 2011
Mar 25, 2011
77
Jul 10, 2006
Jul 10, 2006
78
79
80
81
82
83
value64 = 0xEFBEADDE;
value64 <<= 32;
value64 |= 0xCDAB3412;
swapped64 = 0x1234ABCD;
swapped64 <<= 32;
swapped64 |= 0xDEADBEEF;
Jul 10, 2006
Jul 10, 2006
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
117
118
119
120
121
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;
}
if (verbose) {
Mar 31, 2006
Mar 31, 2006
122
#ifdef _MSC_VER
Jul 10, 2006
Jul 10, 2006
123
124
printf("Value 64 = 0x%I64X, swapped = 0x%I64X\n", value64,
SDL_Swap64(value64));
Mar 31, 2006
Mar 31, 2006
125
#else
Jul 10, 2006
Jul 10, 2006
126
127
printf("Value 64 = 0x%llX, swapped = 0x%llX\n", value64,
SDL_Swap64(value64));
Mar 31, 2006
Mar 31, 2006
128
#endif
Jul 10, 2006
Jul 10, 2006
129
130
131
132
133
134
135
136
}
if (SDL_Swap64(value64) != swapped64) {
if (verbose) {
printf("64 bit value swapped incorrectly!\n");
}
++error;
}
return (error ? 1 : 0);
Jul 10, 2006
Jul 10, 2006
140
141
int
TestCPUInfo(SDL_bool verbose)
Jul 10, 2006
Jul 10, 2006
143
if (verbose) {
Dec 16, 2009
Dec 16, 2009
144
printf("CPU count: %d\n", SDL_GetCPUCount());
Feb 23, 2011
Feb 23, 2011
145
printf("CPU cache line size: %d\n", SDL_GetCPUCacheLineSize());
Jul 10, 2006
Jul 10, 2006
146
printf("RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected");
Feb 23, 2011
Feb 23, 2011
147
printf("AltiVec %s\n", SDL_HasAltiVec()? "detected" : "not detected");
Jul 10, 2006
Jul 10, 2006
148
printf("MMX %s\n", SDL_HasMMX()? "detected" : "not detected");
Feb 23, 2011
Feb 23, 2011
149
printf("3DNow! %s\n", SDL_Has3DNow()? "detected" : "not detected");
Jul 10, 2006
Jul 10, 2006
150
151
printf("SSE %s\n", SDL_HasSSE()? "detected" : "not detected");
printf("SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected");
Feb 11, 2011
Feb 11, 2011
152
printf("SSE3 %s\n", SDL_HasSSE3()? "detected" : "not detected");
Feb 12, 2011
Feb 12, 2011
153
154
printf("SSE4.1 %s\n", SDL_HasSSE41()? "detected" : "not detected");
printf("SSE4.2 %s\n", SDL_HasSSE42()? "detected" : "not detected");
Jul 10, 2006
Jul 10, 2006
155
156
}
return (0);
Jan 13, 2010
Jan 13, 2010
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
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);
}
Jul 10, 2006
Jul 10, 2006
178
179
int
main(int argc, char *argv[])
Jul 10, 2006
Jul 10, 2006
181
182
SDL_bool verbose = SDL_TRUE;
int status = 0;
Jul 10, 2006
Jul 10, 2006
184
185
186
187
if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) {
verbose = SDL_FALSE;
}
if (verbose) {
Sep 26, 2009
Sep 26, 2009
188
printf("This system is running %s\n", SDL_GetPlatform());
Jul 10, 2006
Jul 10, 2006
189
}
Jul 10, 2006
Jul 10, 2006
191
192
193
status += TestTypes(verbose);
status += TestEndian(verbose);
status += TestCPUInfo(verbose);
Jan 13, 2010
Jan 13, 2010
194
195
status += TestAssertions(verbose);
Jul 10, 2006
Jul 10, 2006
196
return status;