1 | #include <stdio.h> |
---|---|
2 | #include <locale.h> |
3 | #include <assert.h> |
4 | |
5 | #define P0 "\xDB\xB0" |
6 | #define P1 "\xDB\xB1" |
7 | #define P2 "\xDB\xB2" |
8 | #define P3 "\xDB\xB3" |
9 | #define P4 "\xDB\xB4" |
10 | #define P5 "\xDB\xB5" |
11 | #define P6 "\xDB\xB6" |
12 | #define P7 "\xDB\xB7" |
13 | #define P8 "\xDB\xB8" |
14 | #define P9 "\xDB\xB9" |
15 | #define PD "\xd9\xab" |
16 | #define PT "\xd9\xac" |
17 | |
18 | static int |
19 | check_sscanf (const char *s, const char *format, const float n) |
20 | { |
21 | float f; |
22 | |
23 | if (sscanf (s, format, &f) != 1) |
24 | { |
25 | printf (format: "nothing found for \"%s\"\n", s); |
26 | return 1; |
27 | } |
28 | if (f != n) |
29 | { |
30 | printf (format: "got %f expected %f from \"%s\"\n", f, n, s); |
31 | return 1; |
32 | } |
33 | return 0; |
34 | } |
35 | |
36 | static int |
37 | do_test (void) |
38 | { |
39 | if (setlocale (LC_ALL, "fa_IR.UTF-8") == NULL) |
40 | { |
41 | puts (s: "cannot set fa_IR locale"); |
42 | return 1; |
43 | } |
44 | |
45 | int r = check_sscanf (P3 PD P1 P4, format: "%I8f", n: 3.14); |
46 | r |= check_sscanf (P3 PT P1 P4 P5, format: "%I'f", n: 3145); |
47 | r |= check_sscanf (P3 PD P1 P4 P1 P5 P9, format: "%If", n: 3.14159); |
48 | r |= check_sscanf (s: "-"P3 PD P1 P4 P1 P5, format: "%If", n: -3.1415); |
49 | r |= check_sscanf (s: "+"PD P1 P4 P1 P5, format: "%If", n: +.1415); |
50 | r |= check_sscanf (P3 PD P1 P4 P1 P5 "e+"P2, format: "%Ie", n: 3.1415e+2); |
51 | |
52 | return r; |
53 | } |
54 | |
55 | #define TEST_FUNCTION do_test () |
56 | #include "../test-skeleton.c" |
57 |