1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4
5/*============================================================================
6**
7** Source: swscanf.h
8**
9** Purpose: Contains common testing functions for swscanf.h
10**
11**
12**==========================================================================*/
13
14#ifndef __SWSCANF_H__
15#define __SWSCANF_H__
16
17void DoVoidTest(WCHAR *inputstr, const WCHAR *formatstr)
18{
19 char buf[256] = { 0 };
20 int i;
21 int ret;
22
23 ret = swscanf(inputstr, formatstr, buf);
24 if (ret != 0)
25 {
26 Fail("ERROR: Expected sscanf to return 0, got %d.\n"
27 "Using \"%s\" in \"%s\".\n", ret, convertC(inputstr),
28 convertC(formatstr));
29 }
30
31 for (i=0; i<256; i++)
32 {
33 if (buf[i] != 0)
34 {
35 Fail("ERROR: Parameter unexpectedly modified scanning \"%s\" "
36 "using \"%s\".\n", convertC(inputstr),
37 convertC(formatstr));
38 }
39 }
40
41}
42
43void DoStrTest(WCHAR *inputstr, const WCHAR *formatstr, const char *checkstr)
44{
45 char buf[256] = { 0 };
46 int ret;
47
48 ret = swscanf(inputstr, formatstr, buf);
49 if (ret != 1)
50 {
51 Fail("ERROR: Expected swscanf to return 1, got %d.\n"
52 "Using \"%s\" in \"%s\".\n", ret, convertC(inputstr),
53 convertC(formatstr));
54 }
55
56 if (memcmp(checkstr, buf, strlen(checkstr) + 1) != 0)
57 {
58 Fail("ERROR: scanned string incorrectly from \"%s\" using \"%s\".\n"
59 "Expected \"%s\", got \"%s\".\n", convertC(inputstr),
60 convertC(formatstr), checkstr,
61 buf);
62 }
63
64}
65
66void DoWStrTest(WCHAR *inputstr, const WCHAR *formatstr, const WCHAR *checkstr)
67{
68 WCHAR buf[256] = { 0 };
69 int ret;
70
71 ret = swscanf(inputstr, formatstr, buf);
72 if (ret != 1)
73 {
74 Fail("ERROR: Expected swscanf to return 1, got %d.\n"
75 "Using \"%s\" in \"%s\".\n", ret, convertC(inputstr),
76 convertC(formatstr));
77 }
78
79 if (memcmp(checkstr, buf, wcslen(checkstr)*2 + 2) != 0)
80 {
81 Fail("ERROR: scanned wide string incorrectly from \"%s\" using \"%s\".\n"
82 "Expected \"%s\", got \"%s\".\n", convertC(inputstr),
83 convertC(formatstr), convertC(checkstr),
84 convertC(buf));
85 }
86
87}
88
89void DoNumTest(WCHAR *inputstr, const WCHAR *formatstr, int checknum)
90{
91 int num = 0;
92 int ret;
93
94 ret = swscanf(inputstr, formatstr, &num);
95 if (ret != 1)
96 {
97 Fail("ERROR: Expected swscanf to return 1, got %d.\n"
98 "Using \"%s\" in \"%s\".\n", ret, convertC(inputstr),
99 convertC(formatstr));
100 }
101
102 if (checknum != num)
103 {
104 Fail("ERROR: scanned number incorrectly from \"%s\" using \"%s\".\n"
105 "Expected %d, got %d.\n", convertC(inputstr),
106 convertC(formatstr), checknum, num);
107 }
108}
109
110void DoShortNumTest(WCHAR *inputstr, const WCHAR *formatstr, short checknum)
111{
112 short num = 0;
113 int ret;
114
115 ret = swscanf(inputstr, formatstr, &num);
116 if (ret != 1)
117 {
118 Fail("ERROR: Expected swscanf to return 1, got %d.\n"
119 "Using \"%s\" in \"%s\".\n", ret, convertC(inputstr),
120 convertC(formatstr));
121 }
122
123 if (checknum != num)
124 {
125 Fail("ERROR: scanned number incorrectly from \"%s\" using \"%s\".\n"
126 "Expected %hd, got %hd.\n", convertC(inputstr),
127 convertC(formatstr), checknum, num);
128 }
129}
130
131void DoI64NumTest(WCHAR *inputstr, const WCHAR *formatstr, INT64 checknum)
132{
133 char buf[256];
134 char check[256];
135 INT64 num;
136 int ret;
137
138 ret = swscanf(inputstr, formatstr, &num);
139 if (ret != 1)
140 {
141 Fail("ERROR: Expected swscanf to return 1, got %d.\n"
142 "Using \"%s\" in \"%s\".\n", ret, convertC(inputstr),
143 convertC(formatstr));
144 }
145
146 if (checknum != num)
147 {
148 sprintf_s(buf, _countof(buf), "%I64d", num);
149 sprintf_s(check, _countof(check), "%I64d", checknum);
150 Fail("ERROR: scanned I64 number incorrectly from \"%s\" using \"%s\".\n"
151 "Expected %s, got %s.\n", convertC(inputstr),
152 convertC(formatstr), check, buf);
153 }
154}
155
156void DoCharTest(WCHAR *inputstr, const WCHAR *formatstr, char* checkchars, int numchars)
157{
158 char buf[256];
159 int ret;
160 int i;
161
162 for (i=0; i<256; i++)
163 buf[i] = (char)-1;
164
165 ret = swscanf(inputstr, formatstr, buf);
166 if (ret != 1)
167 {
168 Fail("ERROR: Expected swscanf to return 1, got %d.\n"
169 "Using \"%s\" in \"%s\".\n", ret, convertC(inputstr),
170 convertC(formatstr));
171 }
172
173 if (memcmp(buf, checkchars, numchars) != 0)
174 {
175 buf[numchars] = 0;
176
177 Fail("ERROR: scanned character(s) incorrectly from \"%s\" using \"%s\".\n"
178 "Expected %s, got %s.\n", convertC(inputstr),
179 convertC(formatstr), checkchars, buf);
180 }
181
182 if (buf[numchars] != (char)-1)
183 {
184 Fail("ERROR: overflow occurred in scanning character(s) from \"%s\" "
185 "using \"%s\".\nExpected %d character(s)\n",
186 convertC(inputstr), convertC(formatstr), numchars);
187 }
188}
189
190void DoWCharTest(WCHAR *inputstr, const WCHAR *formatstr, const WCHAR *checkchars, int numchars)
191{
192 WCHAR buf[256];
193 int ret;
194 int i;
195
196 for (i=0; i<256; i++)
197 buf[i] = (WCHAR)-1;
198
199 ret = swscanf(inputstr, formatstr, buf);
200 if (ret != 1)
201 {
202 Fail("ERROR: Expected swscanf to return 1, got %d.\n"
203 "Using \"%s\" in \"%s\".\n", ret, convertC(inputstr),
204 convertC(formatstr));
205 }
206
207 if (memcmp(buf, checkchars, numchars*2) != 0)
208 {
209 buf[numchars] = 0;
210
211 Fail("ERROR: scanned wide character(s) incorrectly from \"%s\" using \"%s\".\n"
212 "Expected %s, got %s.\n", convertC(inputstr),
213 convertC(formatstr), convertC(checkchars),
214 convertC(buf));
215 }
216
217 if (buf[numchars] != (WCHAR)-1)
218 {
219 Fail("ERROR: overflow occurred in scanning wide character(s) from \"%s\" "
220 "using \"%s\".\nExpected %d character(s)\n",
221 convertC(inputstr), convertC(formatstr), numchars);
222 }
223}
224
225
226void DoFloatTest(WCHAR *inputstr, const WCHAR *formatstr, float checkval)
227{
228 char buf[256] = { 0 };
229 float val;
230 int ret;
231 int i;
232
233 for (i=0; i<256; i++)
234 buf[i] = (char)-1;
235
236 ret = swscanf(inputstr, formatstr, buf);
237 val = *(float*)buf;
238
239 if (ret != 1)
240 {
241 Fail("ERROR: Expected swscanf to return 1, got %d.\n"
242 "Using \"%s\" in \"%s\".\n", ret, convertC(inputstr),
243 convertC(formatstr));
244 }
245
246 if (val != checkval)
247 {
248 Fail("ERROR: scanned float incorrectly from \"%s\" using \"%s\".\n"
249 "Expected \"%f\", got \"%f\".\n", convertC(inputstr),
250 convertC(formatstr), checkval, val);
251 }
252
253 if (buf[4] != (char)-1)
254 {
255 Fail("ERROR: overflow occurred in scanning float from \"%s\" "
256 "using \"%s\".\n", convertC(inputstr), convertC(formatstr));
257
258 }
259}
260
261
262#endif
263