Files
c64-demo-cpp/oscar64/autotest/sscanftest.c
T
2026-07-18 20:34:55 +02:00

134 lines
3.6 KiB
C

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#define EPSILON 0.0001
int scan_i(const char * fmt, const char * tst) {
int val;
sscanf(tst, fmt, &val);
printf(fmt, val);
puts("\n");
return val;
}
long scan_l(const char * fmt, const char * tst) {
long val;
sscanf(tst, fmt, &val);
printf(fmt, val);
puts("\n");
return val;
}
unsigned int scan_ui(const char * fmt, const char * tst) {
unsigned int val;
sscanf(tst, fmt, &val);
printf(fmt, val);
puts("\n");
return val;
}
unsigned long scan_ul(const char * fmt, const char * tst) {
unsigned long val;
sscanf(tst, fmt, &val);
printf(fmt, val);
puts("\n");
return val;
}
float scan_f(const char * fmt, const char * tst) {
float val;
sscanf(tst, fmt, &val);
printf(fmt, val);
puts("\n");
return val;
}
bool closeTo(float a, float b) {
while (a < -1.0 || a > 1.0) a /= 10.0;
while (b < -1.0 || b > 1.0) b /= 10.0;
return fabs(a - b) < EPSILON;
}
int main(void)
{
assert(scan_i("%d", "0") == 0);
assert(scan_i("%d", "1") == 1);
assert(scan_i("%d", "-1") == -1);
assert(scan_i("%d", "12") == 12);
assert(scan_i("%d", "123") == 123);
assert(scan_i("%d", "1234") == 1234);
assert(scan_i("%d", "12345") == 12345);
assert(scan_i("%d", "-12345") == -12345);
assert(scan_i("%d", "32767") == 32767);
assert(scan_i("%d", "-32768") == -32768);
assert(scan_l("%ld", "0") == 0l);
assert(scan_l("%ld", "1") == 1l);
assert(scan_l("%ld", "-1") == -1l);
assert(scan_l("%ld", "12") == 12l);
assert(scan_l("%ld", "123") == 123l);
assert(scan_l("%ld", "1234") == 1234l);
assert(scan_l("%ld", "12345") == 12345l);
assert(scan_l("%ld", "-12345") == -12345l);
assert(scan_l("%ld", "32767") == 32767l);
assert(scan_l("%ld", "-32768") == -32768l);
assert(scan_l("%ld", "2147483647") == 2147483647l);
assert(scan_l("%ld", "-2147483648") == -2147483648l);
assert(scan_ui("%u", "0") == 0);
assert(scan_ui("%u", "1") == 1);
assert(scan_ui("%u", "12") == 12);
assert(scan_ui("%u", "123") == 123);
assert(scan_ui("%u", "1234") == 1234);
assert(scan_ui("%u", "12345") == 12345);
assert(scan_ui("%u", "32767") == 32767);
assert(scan_ui("%u", "32768") == 32768);
assert(scan_ui("%u", "65535") == 65535);
assert(scan_ui("%x", "0") == 0);
assert(scan_ui("%x", "49BF") == 0x49bf);
assert(scan_ui("%x", "FFFF") == 0xffff);
assert(scan_ul("%lu", "000") == 0l);
assert(scan_ul("%lu", "001") == 1l);
assert(scan_ul("%lu", "012") == 12l);
assert(scan_ul("%lu", "123") == 123l);
assert(scan_ul("%lu", "1234") == 1234l);
assert(scan_ul("%lu", "12345") == 12345l);
assert(scan_ul("%lu", "32767") == 32767l);
assert(scan_ul("%lu", "2147483647") == 2147483647l);
assert(scan_ul("%lu", "4294967295") == 4294967295l);
assert(scan_ul("%lx", "000") == 0);
assert(scan_ul("%lx", "3576FBCD") == 0x3576fbcdl);
assert(scan_ul("%lx", "FFFFFFFF") == 0xffffffffl);
assert(closeTo(scan_f("%f", "0.000000"), 0.));
assert(closeTo(scan_f("%f", "1.000000"), 1.));
assert(closeTo(scan_f("%f", "-1.000000"), -1.));
assert(closeTo(scan_f("%f", "12.000000"), 12.));
assert(closeTo(scan_f("%f", "123.000000"), 123.));
assert(closeTo(scan_f("%f", "1234.000000"), 1234.));
assert(closeTo(scan_f("%f", "12345.000000"), 12345.));
assert(closeTo(scan_f("%f", "123456.000000"), 123456.));
assert(closeTo(scan_f("%f", "1234567.000000"), 1234567.));
assert(closeTo(scan_f("%f", "0.100000"), 0.1));
assert(closeTo(scan_f("%f", "0.010000"), 0.01));
assert(closeTo(scan_f("%f", "0.001000"), 0.001));
assert(closeTo(scan_f("%f", "0.000100"), 0.0001));
assert(closeTo(scan_f("%f", "0.000010"), 0.00001));
assert(closeTo(scan_f("%f", "0.000001"), 0.000001));
return 0;
}