source: rtems/testsuites/psxtests/psxinttypes01/init.c @ 9de8d61

Last change on this file since 9de8d61 was 9de8d61, checked in by Sebastian Huber <sebastian.huber@…>, on 07/17/20 at 11:36:49

libtest: <rtems/test.h> to <rtems/test-info.h>

Rename this header file to later move <t.h> to <rtems/test.h>. The main
feature provided by <rtems/test-info.h> is the output of standard test
information which is consumed by the RTEMS Tester.

Update #3199.

  • Property mode set to 100644
File size: 8.2 KB
Line 
1/**
2 *  @file
3 *  @brief Test suite for inttypes.h methods
4 */
5
6/*
7 * SPDX-License-Identifier: BSD-2-Clause
8 *
9 * Copyright (C) 2020, Eshan Dhawan
10 * Copyright (C) 2019, Aditya Upadhyay and Vaibhav Gupta
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 *    notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 *    notice, this list of conditions and the following disclaimer in the
19 *    documentation and/or other materials provided with the distribution.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#ifdef HAVE_CONFIG_H
35#include "config.h"
36#endif
37
38#include <rtems/test-info.h>
39#include <inttypes.h>
40#include <stdio.h>
41#include <errno.h>
42#include <tmacros.h>
43#include <stdint.h>
44#include <stddef.h>
45
46const char rtems_test_name[] = "PSXINTTYPE 01";
47
48/* forward declarations to avoid warnings */
49rtems_task Init(rtems_task_argument ignored);
50
51rtems_task Init(rtems_task_argument ignored)
52{
53  int       base            = 10;
54  int       invalid_base    = 40;
55
56  char     *nptr1_p         = "123abc";
57  char     *nptr1_p_errange = "9999999999999999999999";
58  char     *nptr1_n         = "-123abc";
59  char     *nptr1_n_errange = "-9999999999999999999999";
60  char     *endptr1         = NULL;
61
62  wchar_t  *nptr2_p         = L"123junk";
63  wchar_t  *nptr2_p_errange = L"9999999999999999999999";
64  wchar_t  *nptr2_n         = L"-123junk";
65  wchar_t  *nptr2_n_errange = L"-9999999999999999999999";
66  wchar_t  *endptr2         = NULL;
67
68  intmax_t  result_strtoimax, result_imaxabs, input_1, input_2;
69  imaxdiv_t result_exp, result_imaxdiv;
70  uintmax_t result_strtoumax;
71
72  TEST_BEGIN();
73
74  /* Test for imaxabs */
75  input_1 = -10;
76  result_imaxabs = 10;
77  rtems_test_assert( imaxabs(input_1) == result_imaxabs );
78
79  input_1 = 10;
80  result_imaxabs = 10;
81  rtems_test_assert( imaxabs(input_1) == result_imaxabs );
82
83  /* Test for imaxdiv */
84  input_1 = 10;
85  input_2 = 3;
86  result_exp.quot = input_1 / input_2;
87  result_exp.rem =  input_1 % input_2;
88  result_imaxdiv = imaxdiv( input_1, input_2 );
89  rtems_test_assert(
90    result_imaxdiv.quot == result_exp.quot &&
91    result_imaxdiv.rem == result_exp.rem
92  );
93
94  /* Test for strtoimax  */
95  puts( "\nstrtoimax Testcases...." );
96  puts( "Valid Inputs - Positive Number" );
97  result_strtoimax = strtoimax( nptr1_p, &endptr1, base );
98  rtems_test_assert( result_strtoimax == 123 );
99
100  puts( "Final string pointed by endptr" );
101  rtems_test_assert( endptr1 == ( nptr1_p + 3 ) );
102
103  puts( "Valid Inputs - Negative Number" );
104  result_strtoimax = strtoimax( nptr1_n, &endptr1, base );
105  rtems_test_assert( result_strtoimax == -123 );
106
107  puts( "Final string pointed by endptr" );
108  rtems_test_assert( endptr1 == ( nptr1_n + 4 ) );
109
110  puts( "Valid Input - Positive Number - Number out of Range" );
111  result_strtoimax = strtoimax( nptr1_p_errange, &endptr1, base );
112  rtems_test_assert( result_strtoimax == INTMAX_MAX );
113  rtems_test_assert( errno == ERANGE );
114
115  puts( "Valid Input - Negative Number - Number out of Range" );
116  result_strtoimax = strtoimax( nptr1_n_errange, &endptr1, base );
117  rtems_test_assert( result_strtoimax == INTMAX_MIN );
118  rtems_test_assert( errno == ERANGE );
119
120  puts( "Invalid Input - Invalid base - Use base = 40" );
121  result_strtoimax = strtoimax( nptr1_p, &endptr1, invalid_base );
122  rtems_test_assert( result_strtoimax == 0 );
123  rtems_test_assert( errno == EINVAL );
124
125  /* Test for strtoumax  */
126  puts( "\nstrtoumax Testcases...." );
127  puts( "Valid Inputs - Positive Number" );
128  result_strtoumax = strtoumax( nptr1_p, &endptr1, base );
129  rtems_test_assert( result_strtoumax ==123 );
130
131  puts( "Final string pointed by endptr" );
132  rtems_test_assert( endptr1 == ( nptr1_p + 3 ) );
133
134  puts( "Valid Inputs - Negative Number" );
135  result_strtoumax = strtoumax( nptr1_n, &endptr1, base );
136  rtems_test_assert( result_strtoumax != 0 );
137
138  puts( "Final string pointed by endptr" );
139  rtems_test_assert( endptr1 == ( nptr1_n + 4 ) );
140
141  puts( "Valid Input - Positive Number - Number out of Range" );
142  result_strtoumax = strtoumax( nptr1_p_errange, &endptr1, base );
143  rtems_test_assert( result_strtoumax == UINTMAX_MAX );
144  rtems_test_assert( errno == ERANGE );
145
146  puts( "Valid Input - Negative Number - Number out of Range" );
147  result_strtoumax = strtoumax( nptr1_n_errange, &endptr1, base );
148  rtems_test_assert( result_strtoumax != 0 );
149  rtems_test_assert( errno == ERANGE );
150
151  puts( "Invalid Input - Invalid base - Use base = 40" );
152  result_strtoumax = strtoumax( nptr1_p, &endptr1, invalid_base );
153  rtems_test_assert( result_strtoumax == 0 );
154  rtems_test_assert( errno == EINVAL );
155
156  /* Test for wcstoimax  */
157  puts( "\nwcstoimax Testcases...." );
158  puts( "Valid Inputs - Positive Number" );
159  result_strtoimax = wcstoimax( nptr2_p, &endptr2, base );
160  rtems_test_assert( result_strtoimax == 123 );
161
162  puts( "Final string pointed by endptr" );
163  rtems_test_assert( endptr2 == ( nptr2_p + 3 ) );
164
165  puts( "Valid Inputs - Negative Number" );
166  result_strtoimax = wcstoimax( nptr2_n, &endptr2, base );
167  rtems_test_assert( result_strtoimax == -123 );
168
169  puts( "Final string pointed by endptr" );
170  rtems_test_assert( endptr2 == ( nptr2_n + 4 ) );
171
172  puts( "Valid Input - Positive Number - Number out of Range" );
173  result_strtoimax = wcstoimax( nptr2_p_errange, &endptr2, base );
174  rtems_test_assert( result_strtoimax == INTMAX_MAX );
175  rtems_test_assert( errno == ERANGE );
176
177  puts( "Valid Input - Negative Number - Number out of Range" );
178  result_strtoimax = wcstoimax( nptr2_n_errange, &endptr2, base );
179  rtems_test_assert( result_strtoimax == INTMAX_MIN );
180  rtems_test_assert( errno == ERANGE );
181
182  puts( "Invalid Input - Invalid base - Use base = 40" );
183  result_strtoimax = wcstoimax( nptr2_p, &endptr2, invalid_base );
184  rtems_test_assert( result_strtoimax == 0 );
185  rtems_test_assert( errno == EINVAL );
186
187  /* Test for wcstoumax  */
188  puts( "\nwcstoumax Testcases...." );
189  puts( "Valid Inputs - Positive Number" );
190  result_strtoumax = wcstoumax( nptr2_p, &endptr2, base );
191  rtems_test_assert( result_strtoumax == 123 );
192
193  puts( "Final string pointed by endptr" );
194  rtems_test_assert( endptr2 == ( nptr2_p + 3 ) );
195
196  puts( "Valid Inputs - Negative Number" );
197  result_strtoumax = wcstoumax( nptr2_n, &endptr2, base );
198  rtems_test_assert( result_strtoumax != 0 );
199
200  puts( "Final string pointed by endptr" );
201  rtems_test_assert( endptr2 == ( nptr2_n + 4 ) );
202
203  puts( "Valid Input - Positive Number - Number out of Range" );
204  result_strtoumax = wcstoumax( nptr2_p_errange, &endptr2, base );
205  rtems_test_assert( result_strtoumax == UINTMAX_MAX );
206  rtems_test_assert( errno == ERANGE );
207
208  puts( "Valid Input - Negative Number - Number out of Range" );
209  result_strtoumax = wcstoumax( nptr2_n_errange, &endptr2, base );
210  rtems_test_assert( result_strtoumax != 0 );
211  rtems_test_assert( errno == ERANGE );
212
213  puts( "Invalid Input - Invalid base - Use base = 40" );
214  result_strtoumax = wcstoumax( nptr2_p, &endptr2, invalid_base );
215  rtems_test_assert( result_strtoumax == 0 );
216  rtems_test_assert( errno == EINVAL );
217
218  TEST_END();
219  rtems_test_exit(0);
220
221}
222
223/* NOTICE: the clock driver is explicitly disabled */
224
225#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
226#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
227
228#define CONFIGURE_MAXIMUM_TASKS            1
229
230#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
231
232#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
233
234#define CONFIGURE_INIT
235#include <rtems/confdefs.h>
Note: See TracBrowser for help on using the repository browser.