Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:39

0001 /**
0002  *  @file
0003  *  @brief Test suite for inttypes.h methods
0004  */
0005 
0006 /*
0007  * SPDX-License-Identifier: BSD-2-Clause
0008  *
0009  * Copyright (C) 2020, Eshan Dhawan
0010  * Copyright (C) 2019, Aditya Upadhyay and Vaibhav Gupta
0011  *
0012  * Redistribution and use in source and binary forms, with or without
0013  * modification, are permitted provided that the following conditions
0014  * are met:
0015  * 1. Redistributions of source code must retain the above copyright
0016  *    notice, this list of conditions and the following disclaimer.
0017  * 2. Redistributions in binary form must reproduce the above copyright
0018  *    notice, this list of conditions and the following disclaimer in the
0019  *    documentation and/or other materials provided with the distribution.
0020  *
0021  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0022  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0023  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0024  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0025  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0026  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0027  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0028  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0029  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0030  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0031  * POSSIBILITY OF SUCH DAMAGE.
0032  */
0033 
0034 #ifdef HAVE_CONFIG_H
0035 #include "config.h"
0036 #endif
0037 
0038 #include <rtems/test-info.h>
0039 #include <inttypes.h>
0040 #include <stdio.h>
0041 #include <errno.h>
0042 #include <tmacros.h>
0043 #include <stdint.h>
0044 #include <stddef.h>
0045 
0046 const char rtems_test_name[] = "PSXINTTYPE 01";
0047 
0048 /* forward declarations to avoid warnings */
0049 rtems_task Init(rtems_task_argument ignored);
0050 
0051 rtems_task Init(rtems_task_argument ignored)
0052 {
0053   int       base            = 10;
0054   int       invalid_base    = 40;
0055 
0056   char     *nptr1_p         = "123abc";
0057   char     *nptr1_p_errange = "9999999999999999999999";
0058   char     *nptr1_n         = "-123abc";
0059   char     *nptr1_n_errange = "-9999999999999999999999";
0060   char     *endptr1         = NULL;
0061 
0062   wchar_t  *nptr2_p         = L"123junk";
0063   wchar_t  *nptr2_p_errange = L"9999999999999999999999";
0064   wchar_t  *nptr2_n         = L"-123junk";
0065   wchar_t  *nptr2_n_errange = L"-9999999999999999999999";
0066   wchar_t  *endptr2         = NULL;
0067 
0068   intmax_t  result_strtoimax, result_imaxabs, input_1, input_2;
0069   imaxdiv_t result_exp, result_imaxdiv;
0070   uintmax_t result_strtoumax;
0071 
0072   TEST_BEGIN();
0073 
0074   /* Test for imaxabs */
0075   input_1 = -10;
0076   result_imaxabs = 10;
0077   rtems_test_assert( imaxabs(input_1) == result_imaxabs );
0078 
0079   input_1 = 10;
0080   result_imaxabs = 10;
0081   rtems_test_assert( imaxabs(input_1) == result_imaxabs );
0082 
0083   /* Test for imaxdiv */
0084   input_1 = 10;
0085   input_2 = 3;
0086   result_exp.quot = input_1 / input_2;
0087   result_exp.rem =  input_1 % input_2;
0088   result_imaxdiv = imaxdiv( input_1, input_2 );
0089   rtems_test_assert(
0090     result_imaxdiv.quot == result_exp.quot &&
0091     result_imaxdiv.rem == result_exp.rem
0092   );
0093 
0094   /* Test for strtoimax  */
0095   puts( "\nstrtoimax Testcases...." );
0096   puts( "Valid Inputs - Positive Number" );
0097   result_strtoimax = strtoimax( nptr1_p, &endptr1, base );
0098   rtems_test_assert( result_strtoimax == 123 );
0099 
0100   puts( "Final string pointed by endptr" );
0101   rtems_test_assert( endptr1 == ( nptr1_p + 3 ) );
0102 
0103   puts( "Valid Inputs - Negative Number" );
0104   result_strtoimax = strtoimax( nptr1_n, &endptr1, base );
0105   rtems_test_assert( result_strtoimax == -123 );
0106 
0107   puts( "Final string pointed by endptr" );
0108   rtems_test_assert( endptr1 == ( nptr1_n + 4 ) );
0109 
0110   puts( "Valid Input - Positive Number - Number out of Range" );
0111   result_strtoimax = strtoimax( nptr1_p_errange, &endptr1, base );
0112   rtems_test_assert( result_strtoimax == INTMAX_MAX );
0113   rtems_test_assert( errno == ERANGE );
0114 
0115   puts( "Valid Input - Negative Number - Number out of Range" );
0116   result_strtoimax = strtoimax( nptr1_n_errange, &endptr1, base );
0117   rtems_test_assert( result_strtoimax == INTMAX_MIN );
0118   rtems_test_assert( errno == ERANGE );
0119 
0120   puts( "Invalid Input - Invalid base - Use base = 40" );
0121   result_strtoimax = strtoimax( nptr1_p, &endptr1, invalid_base );
0122   rtems_test_assert( result_strtoimax == 0 );
0123   rtems_test_assert( errno == EINVAL );
0124 
0125   /* Test for strtoumax  */
0126   puts( "\nstrtoumax Testcases...." );
0127   puts( "Valid Inputs - Positive Number" );
0128   result_strtoumax = strtoumax( nptr1_p, &endptr1, base );
0129   rtems_test_assert( result_strtoumax ==123 );
0130 
0131   puts( "Final string pointed by endptr" );
0132   rtems_test_assert( endptr1 == ( nptr1_p + 3 ) );
0133 
0134   puts( "Valid Inputs - Negative Number" );
0135   result_strtoumax = strtoumax( nptr1_n, &endptr1, base );
0136   rtems_test_assert( result_strtoumax != 0 );
0137 
0138   puts( "Final string pointed by endptr" );
0139   rtems_test_assert( endptr1 == ( nptr1_n + 4 ) );
0140 
0141   puts( "Valid Input - Positive Number - Number out of Range" );
0142   result_strtoumax = strtoumax( nptr1_p_errange, &endptr1, base );
0143   rtems_test_assert( result_strtoumax == UINTMAX_MAX );
0144   rtems_test_assert( errno == ERANGE );
0145 
0146   puts( "Valid Input - Negative Number - Number out of Range" );
0147   result_strtoumax = strtoumax( nptr1_n_errange, &endptr1, base );
0148   rtems_test_assert( result_strtoumax != 0 );
0149   rtems_test_assert( errno == ERANGE );
0150 
0151   puts( "Invalid Input - Invalid base - Use base = 40" );
0152   result_strtoumax = strtoumax( nptr1_p, &endptr1, invalid_base );
0153   rtems_test_assert( result_strtoumax == 0 );
0154   rtems_test_assert( errno == EINVAL );
0155 
0156   /* Test for wcstoimax  */
0157   puts( "\nwcstoimax Testcases...." );
0158   puts( "Valid Inputs - Positive Number" );
0159   result_strtoimax = wcstoimax( nptr2_p, &endptr2, base );
0160   rtems_test_assert( result_strtoimax == 123 );
0161 
0162   puts( "Final string pointed by endptr" );
0163   rtems_test_assert( endptr2 == ( nptr2_p + 3 ) );
0164 
0165   puts( "Valid Inputs - Negative Number" );
0166   result_strtoimax = wcstoimax( nptr2_n, &endptr2, base );
0167   rtems_test_assert( result_strtoimax == -123 );
0168 
0169   puts( "Final string pointed by endptr" );
0170   rtems_test_assert( endptr2 == ( nptr2_n + 4 ) );
0171 
0172   puts( "Valid Input - Positive Number - Number out of Range" );
0173   result_strtoimax = wcstoimax( nptr2_p_errange, &endptr2, base );
0174   rtems_test_assert( result_strtoimax == INTMAX_MAX );
0175   rtems_test_assert( errno == ERANGE );
0176 
0177   puts( "Valid Input - Negative Number - Number out of Range" );
0178   result_strtoimax = wcstoimax( nptr2_n_errange, &endptr2, base );
0179   rtems_test_assert( result_strtoimax == INTMAX_MIN );
0180   rtems_test_assert( errno == ERANGE );
0181 
0182   puts( "Invalid Input - Invalid base - Use base = 40" );
0183   result_strtoimax = wcstoimax( nptr2_p, &endptr2, invalid_base );
0184   rtems_test_assert( result_strtoimax == 0 );
0185   rtems_test_assert( errno == EINVAL );
0186 
0187   /* Test for wcstoumax  */
0188   puts( "\nwcstoumax Testcases...." );
0189   puts( "Valid Inputs - Positive Number" );
0190   result_strtoumax = wcstoumax( nptr2_p, &endptr2, base );
0191   rtems_test_assert( result_strtoumax == 123 );
0192 
0193   puts( "Final string pointed by endptr" );
0194   rtems_test_assert( endptr2 == ( nptr2_p + 3 ) );
0195 
0196   puts( "Valid Inputs - Negative Number" );
0197   result_strtoumax = wcstoumax( nptr2_n, &endptr2, base );
0198   rtems_test_assert( result_strtoumax != 0 );
0199 
0200   puts( "Final string pointed by endptr" );
0201   rtems_test_assert( endptr2 == ( nptr2_n + 4 ) );
0202 
0203   puts( "Valid Input - Positive Number - Number out of Range" );
0204   result_strtoumax = wcstoumax( nptr2_p_errange, &endptr2, base );
0205   rtems_test_assert( result_strtoumax == UINTMAX_MAX );
0206   rtems_test_assert( errno == ERANGE );
0207 
0208   puts( "Valid Input - Negative Number - Number out of Range" );
0209   result_strtoumax = wcstoumax( nptr2_n_errange, &endptr2, base );
0210   rtems_test_assert( result_strtoumax != 0 );
0211   rtems_test_assert( errno == ERANGE );
0212 
0213   puts( "Invalid Input - Invalid base - Use base = 40" );
0214   result_strtoumax = wcstoumax( nptr2_p, &endptr2, invalid_base );
0215   rtems_test_assert( result_strtoumax == 0 );
0216   rtems_test_assert( errno == EINVAL );
0217 
0218   TEST_END();
0219   rtems_test_exit(0);
0220 
0221 }
0222 
0223 /* NOTICE: the clock driver is explicitly disabled */
0224 
0225 #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
0226 #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
0227 
0228 #define CONFIGURE_MAXIMUM_TASKS            1
0229 
0230 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0231 
0232 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0233 
0234 #define CONFIGURE_INIT
0235 #include <rtems/confdefs.h>