Skip to content

Commit 3bf9cbc

Browse files
committed
Add a script for verifying type sizes
This commit adds a bash script that generates two small prorgrams, one in Pascal and the second one in C. The programs print the size of each SDL_* type. The outputs are then compared to check for any discrepancies.
1 parent 076ac8e commit 3bf9cbc

File tree

1 file changed

+222
-0
lines changed

1 file changed

+222
-0
lines changed

tests/type-sizes.sh

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
#!/bin/bash
2+
3+
set -eu -o pipefail
4+
5+
cd "$(dirname "${0}")"
6+
7+
SDL_UNITS_PATH="$(pwd)/../units/"
8+
9+
TEMP_DIR="$(mktemp --directory)"
10+
PASCAL_SOURCE="${TEMP_DIR}/test.pas"
11+
C_SOURCE="${TEMP_DIR}/test.c"
12+
13+
# -- generate sources
14+
15+
cat > "${PASCAL_SOURCE}" << EOF
16+
program test;
17+
18+
uses
19+
SDL3;
20+
21+
Begin
22+
EOF
23+
24+
cat > "${C_SOURCE}" << EOF
25+
#include <stdbool.h>
26+
#include <stddef.h>
27+
#include <stdio.h>
28+
29+
#include <SDL3/SDL.h>
30+
31+
int main(void) {
32+
EOF
33+
34+
for TYPENAME in \
35+
SDL_AppResult \
36+
SDL_ArrayOrder \
37+
SDL_AudioDeviceEvent \
38+
SDL_AudioDeviceID \
39+
SDL_AudioFormat \
40+
SDL_AudioSpec \
41+
SDL_BitmapOrder \
42+
SDL_BlendFactor \
43+
SDL_BlendMode \
44+
SDL_BlendOperation \
45+
SDL_CameraDeviceEvent \
46+
SDL_CameraID \
47+
SDL_CameraPosition \
48+
SDL_CameraSpec \
49+
SDL_Capitalization \
50+
SDL_ChromaLocation \
51+
SDL_ClipboardEvent \
52+
SDL_Color \
53+
SDL_ColorPrimaries \
54+
SDL_ColorRange \
55+
SDL_Colorspace \
56+
SDL_ColorType \
57+
SDL_CommonEvent \
58+
SDL_DateTime \
59+
SDL_DialogFileFilter \
60+
SDL_DisplayEvent \
61+
SDL_DisplayID \
62+
SDL_DisplayMode \
63+
SDL_DisplayOrientation \
64+
SDL_DropEvent \
65+
SDL_EnumerationResult \
66+
SDL_Event \
67+
SDL_EventAction \
68+
SDL_EventType \
69+
SDL_FColor \
70+
SDL_FileDialogType \
71+
SDL_Finger \
72+
SDL_FingerID \
73+
SDL_FlashOperation \
74+
SDL_FlipMode \
75+
SDL_Folder \
76+
SDL_FPoint \
77+
SDL_FRect \
78+
SDL_GamepadAxis \
79+
SDL_GamepadAxisEvent \
80+
SDL_GamepadBinding \
81+
SDL_GamepadBindingType \
82+
SDL_GamepadButton \
83+
SDL_GamepadButtonEvent \
84+
SDL_GamepadButtonLabel \
85+
SDL_GamepadDeviceEvent \
86+
SDL_GamepadSensorEvent \
87+
SDL_GamepadTouchpadEvent \
88+
SDL_GamepadType \
89+
SDL_GlobFlags \
90+
SDL_HapticCondition \
91+
SDL_HapticConstant \
92+
SDL_HapticCustom \
93+
SDL_HapticDirection \
94+
SDL_HapticEffect \
95+
SDL_HapticID \
96+
SDL_HapticLeftRight \
97+
SDL_HapticPeriodic \
98+
SDL_HapticRamp \
99+
SDL_HintPriority \
100+
SDL_HitTestResult \
101+
SDL_InitFlags \
102+
SDL_JoyAxisEvent \
103+
SDL_JoyBallEvent \
104+
SDL_JoyBatteryEvent \
105+
SDL_JoyButtonEvent \
106+
SDL_JoyDeviceEvent \
107+
SDL_JoyHatEvent \
108+
SDL_JoystickConnectionState \
109+
SDL_JoystickID \
110+
SDL_JoystickType \
111+
SDL_KeyboardDeviceEvent \
112+
SDL_KeyboardEvent \
113+
SDL_KeyboardID \
114+
SDL_Keycode \
115+
SDL_Keymod \
116+
SDL_Locale \
117+
SDL_LogCategory \
118+
SDL_LogPriority \
119+
SDL_MatrixCoefficients \
120+
SDL_MessageBoxButtonFlags \
121+
SDL_MessageBoxColorType \
122+
SDL_MessageBoxFlags \
123+
SDL_MouseButtonEvent \
124+
SDL_MouseButtonFlags \
125+
SDL_MouseDeviceEvent \
126+
SDL_MouseID \
127+
SDL_MouseMotionEvent \
128+
SDL_MouseWheelDirection \
129+
SDL_MouseWheelEvent \
130+
SDL_Palette \
131+
SDL_PackedLayout \
132+
SDL_PackedOrder \
133+
SDL_PathInfo \
134+
SDL_PathType \
135+
SDL_PenAxis \
136+
SDL_PenAxisEvent \
137+
SDL_PenButtonEvent \
138+
SDL_PenID \
139+
SDL_PenInputFlags \
140+
SDL_PenMotionEvent \
141+
SDL_PenProximityEvent \
142+
SDL_PenTouchEvent \
143+
SDL_PixelFormat \
144+
SDL_PixelFormatDetails \
145+
SDL_PixelType \
146+
SDL_Point \
147+
SDL_PowerState \
148+
SDL_PropertiesID \
149+
SDL_PropertyType \
150+
SDL_QuitEvent \
151+
SDL_Rect \
152+
SDL_RendererLogicalPresentation \
153+
SDL_ScaleMode \
154+
SDL_Scancode \
155+
SDL_SensorEvent \
156+
SDL_SensorID \
157+
SDL_SensorType \
158+
SDL_SurfaceFlags \
159+
SDL_SystemCursor \
160+
SDL_SystemTheme \
161+
SDL_TextEditingEvent \
162+
SDL_TextEditingCandidatesEvent \
163+
SDL_TextInputEvent \
164+
SDL_TextInputType \
165+
SDL_TextureAccess \
166+
SDL_ThreadID \
167+
SDL_ThreadPriority \
168+
SDL_ThreadState \
169+
SDL_TimeFormat \
170+
SDL_TimerID \
171+
SDL_TouchDeviceType \
172+
SDL_TouchFingerEvent \
173+
SDL_TouchID \
174+
SDL_TransferCharacteristics \
175+
SDL_TrayEntryFlags \
176+
SDL_UserEvent \
177+
SDL_Vertex \
178+
SDL_VirtualJoystickDesc \
179+
SDL_VirtualJoystickSensorDesc \
180+
SDL_VirtualJoystickTouchpadDesc \
181+
SDL_WindowEvent \
182+
SDL_WindowFlags \
183+
SDL_WindowID \
184+
; do
185+
echo $'\t'"Writeln('${TYPENAME}: ', SizeOf(T${TYPENAME}));" >> "${PASCAL_SOURCE}"
186+
echo $'\t'"printf(\"${TYPENAME}: %zu\n\", sizeof(${TYPENAME}));" >> "${C_SOURCE}"
187+
done
188+
189+
echo "End." >> "${PASCAL_SOURCE}"
190+
echo $'\t'"return 0;"$'\n'"}" >> "${C_SOURCE}"
191+
192+
# -- sources generated
193+
194+
PASCAL_BINARY="${TEMP_DIR}/pascal"
195+
C_BINARY="${TEMP_DIR}/c"
196+
197+
fpc -v0e "-Fu${SDL_UNITS_PATH}" "-o${PASCAL_BINARY}" "${PASCAL_SOURCE}"
198+
gcc -std=c23 -Wall -Wpedantic -Werror -o "${C_BINARY}" "${C_SOURCE}"
199+
200+
# -- programs compiled
201+
202+
PASCAL_OUTPUT="${TEMP_DIR}/result-pas.txt"
203+
C_OUTPUT="${TEMP_DIR}/result-c.txt"
204+
205+
"${PASCAL_BINARY}" > "${PASCAL_OUTPUT}"
206+
"${C_BINARY}" > "${C_OUTPUT}"
207+
pr -mt <(echo "-- Pascal --"; cat "${PASCAL_OUTPUT}") <(echo "-- C --"; cat "${C_OUTPUT}")
208+
209+
set +e
210+
DIFF="$(diff --width=80 --suppress-common-lines --side-by-side "${PASCAL_OUTPUT}" "${C_OUTPUT}")"
211+
EXIT_CODE="${?}"
212+
213+
echo ""
214+
if [ "${EXIT_CODE}" -eq 0 ]; then
215+
echo "[ OK ] Outputs match"
216+
else
217+
echo "[FAIL] Outputs differ!"
218+
echo "${DIFF}"
219+
fi
220+
221+
rm -rf "${TEMP_DIR}"
222+
exit "${EXIT_CODE}"

0 commit comments

Comments
 (0)