@@ -114,6 +114,45 @@ function expr() {
114
114
items " $expected " " exit($input );"
115
115
}
116
116
117
+ # try_large - test shecc with large return values (> 255)
118
+ # Usage:
119
+ # - try_large expected_value input_code
120
+ # compile "input_code" with shecc and verify the return value by printing it
121
+ # instead of using exit code (which is limited to 0-255).
122
+ function try_large() {
123
+ local expected=" $1 "
124
+ local input=" $( cat) "
125
+
126
+ local tmp_in=" $( mktemp --suffix .c) "
127
+ local tmp_exe=" $( mktemp) "
128
+
129
+ # Wrap the input to print the return value
130
+ cat > " $tmp_in " << EOF
131
+ int printf(char *format, ...);
132
+ $input
133
+ int main() {
134
+ int result = test_function();
135
+ printf("%d", result);
136
+ return 0;
137
+ }
138
+ EOF
139
+
140
+ $SHECC -o " $tmp_exe " " $tmp_in "
141
+ chmod +x $tmp_exe
142
+
143
+ local output=$( $TARGET_EXEC " $tmp_exe " )
144
+
145
+ if [ " $output " != " $expected " ]; then
146
+ echo " $input => $expected expected, but got $output "
147
+ echo " input: $tmp_in "
148
+ echo " executable: $tmp_exe "
149
+ exit 1
150
+ else
151
+ echo " Large value test: $expected "
152
+ echo " output => $output "
153
+ fi
154
+ }
155
+
117
156
# just a number
118
157
expr 0 0
119
158
expr 42 42
@@ -317,6 +356,41 @@ int main() {
317
356
}
318
357
EOF
319
358
359
+ # Test large fibonacci values using the new try_large function
360
+ try_large 987 << EOF
361
+ int fib(int n, int a, int b)
362
+ {
363
+ if (n == 0)
364
+ return a;
365
+ if (n == 1)
366
+ return b;
367
+ return fib(n - 1, b, a + b);
368
+ }
369
+
370
+ int test_function() {
371
+ return fib(16, 0, 1); /* fib(16) = 987 */
372
+ }
373
+ EOF
374
+
375
+ # Test other large values
376
+ try_large 1000 << EOF
377
+ int test_function() {
378
+ return 1000;
379
+ }
380
+ EOF
381
+
382
+ try_large 65536 << EOF
383
+ int test_function() {
384
+ return 1 << 16; /* 2^16 = 65536 */
385
+ }
386
+ EOF
387
+
388
+ try_large 999999 << EOF
389
+ int test_function() {
390
+ return 999999;
391
+ }
392
+ EOF
393
+
320
394
try_compile_error << EOF
321
395
int main() {
322
396
int a = 03, b = 01118, c = 091;
0 commit comments