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: test1.c
8**
9** Purpose:
10** Tests stroul with different bases and overflows, as well as valid input.
11** Makes sure that the end pointer is correct.
12**
13**
14**==========================================================================*/
15
16#include <palsuite.h>
17
18char teststr1[] = "12345";
19char teststr2[] = "Z";
20char teststr3[] = "4294967295";
21char teststr4[] = "4294967296";
22
23typedef struct
24{
25 char *str;
26 char *end;
27 int base;
28 ULONG result;
29} TestCase;
30
31TestCase TestCases[] =
32{
33 { teststr1, teststr1 + 3, 4, 27},
34 { teststr1, teststr1 + 5, 10, 12345},
35 { teststr2, teststr2, 10, 0},
36 { teststr3, teststr3+10, 10, 4294967295ul},
37 { teststr4, teststr4+10, 10, 4294967295ul}
38};
39
40int NumCases = sizeof(TestCases) / sizeof(TestCases[0]);
41
42
43int __cdecl main(int argc, char *argv[])
44{
45 char *end;
46 ULONG l;
47 int i;
48
49 if (PAL_Initialize(argc, argv))
50 {
51 return FAIL;
52 }
53
54
55 for (i=0; i<NumCases; i++)
56 {
57 l = strtoul(TestCases[i].str, &end, TestCases[i].base);
58
59 if (l != TestCases[i].result)
60 {
61 Fail("ERROR: Expected strtoul to return %u, got %u\n",
62 TestCases[i].result, l);
63 }
64
65 if (end != TestCases[i].end)
66 {
67 Fail("ERROR: Expected strtoul to give an end value of %p, got %p\n",
68 TestCases[i].end, end);
69 }
70 }
71 PAL_Terminate();
72 return PASS;
73}
74