mirror of
				https://github.com/jart/cosmopolitan.git
				synced 2025-10-25 18:50:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			250 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			250 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| ------------------------------------------------------------------------
 | |
| -- shift.decTest -- shift coefficient left or right                   --
 | |
| -- Copyright (c) IBM Corporation, 1981, 2008.  All rights reserved.   --
 | |
| ------------------------------------------------------------------------
 | |
| -- Please see the document "General Decimal Arithmetic Testcases"     --
 | |
| -- at http://www2.hursley.ibm.com/decimal for the description of      --
 | |
| -- these testcases.                                                   --
 | |
| --                                                                    --
 | |
| -- These testcases are experimental ('beta' versions), and they       --
 | |
| -- may contain errors.  They are offered on an as-is basis.  In       --
 | |
| -- particular, achieving the same results as the tests here is not    --
 | |
| -- a guarantee that an implementation complies with any Standard      --
 | |
| -- or specification.  The tests are not exhaustive.                   --
 | |
| --                                                                    --
 | |
| -- Please send comments, suggestions, and corrections to the author:  --
 | |
| --   Mike Cowlishaw, IBM Fellow                                       --
 | |
| --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 | |
| --   mfc@uk.ibm.com                                                   --
 | |
| ------------------------------------------------------------------------
 | |
| version: 2.59
 | |
| 
 | |
| extended:    1
 | |
| precision:   9
 | |
| rounding:    half_up
 | |
| maxExponent: 999
 | |
| minExponent: -999
 | |
| 
 | |
| -- Sanity check
 | |
| shix001 shift          0    0  ->  0
 | |
| shix002 shift          0    2  ->  0
 | |
| shix003 shift          1    2  ->  100
 | |
| shix004 shift          1    8  ->  100000000
 | |
| shix005 shift          1    9  ->  0
 | |
| shix006 shift          1   -1  ->  0
 | |
| shix007 shift  123456789   -1  ->  12345678
 | |
| shix008 shift  123456789   -8  ->  1
 | |
| shix009 shift  123456789   -9  ->  0
 | |
| shix010 shift          0   -2  ->  0
 | |
| 
 | |
| -- rhs must be an integer
 | |
| shix011 shift        1    1.5    -> NaN Invalid_operation
 | |
| shix012 shift        1    1.0    -> NaN Invalid_operation
 | |
| shix013 shift        1    0.1    -> NaN Invalid_operation
 | |
| shix014 shift        1    0.0    -> NaN Invalid_operation
 | |
| shix015 shift        1    1E+1   -> NaN Invalid_operation
 | |
| shix016 shift        1    1E+99  -> NaN Invalid_operation
 | |
| shix017 shift        1    Inf    -> NaN Invalid_operation
 | |
| shix018 shift        1    -Inf   -> NaN Invalid_operation
 | |
| -- and |rhs| <= precision
 | |
| shix020 shift        1    -1000  -> NaN Invalid_operation
 | |
| shix021 shift        1    -10    -> NaN Invalid_operation
 | |
| shix022 shift        1     10    -> NaN Invalid_operation
 | |
| shix023 shift        1     1000  -> NaN Invalid_operation
 | |
| 
 | |
| -- full shifting pattern
 | |
| shix030 shift  123456789          -9   -> 0
 | |
| shix031 shift  123456789          -8   -> 1
 | |
| shix032 shift  123456789          -7   -> 12
 | |
| shix033 shift  123456789          -6   -> 123
 | |
| shix034 shift  123456789          -5   -> 1234
 | |
| shix035 shift  123456789          -4   -> 12345
 | |
| shix036 shift  123456789          -3   -> 123456
 | |
| shix037 shift  123456789          -2   -> 1234567
 | |
| shix038 shift  123456789          -1   -> 12345678
 | |
| shix039 shift  123456789          -0   -> 123456789
 | |
| shix040 shift  123456789          +0   -> 123456789
 | |
| shix041 shift  123456789          +1   -> 234567890
 | |
| shix042 shift  123456789          +2   -> 345678900
 | |
| shix043 shift  123456789          +3   -> 456789000
 | |
| shix044 shift  123456789          +4   -> 567890000
 | |
| shix045 shift  123456789          +5   -> 678900000
 | |
| shix046 shift  123456789          +6   -> 789000000
 | |
| shix047 shift  123456789          +7   -> 890000000
 | |
| shix048 shift  123456789          +8   -> 900000000
 | |
| shix049 shift  123456789          +9   -> 0
 | |
| 
 | |
| -- from examples
 | |
| shix051 shift 34        8   ->  '400000000'
 | |
| shix052 shift 12        9   ->  '0'
 | |
| shix053 shift 123456789 -2  ->  '1234567'
 | |
| shix054 shift 123456789 0   ->  '123456789'
 | |
| shix055 shift 123456789 +2  ->  '345678900'
 | |
| 
 | |
| -- zeros
 | |
| shix060 shift  0E-10              +9   ->   0E-10
 | |
| shix061 shift  0E-10              -9   ->   0E-10
 | |
| shix062 shift  0.000              +9   ->   0.000
 | |
| shix063 shift  0.000              -9   ->   0.000
 | |
| shix064 shift  0E+10              +9   ->   0E+10
 | |
| shix065 shift  0E+10              -9   ->   0E+10
 | |
| shix066 shift -0E-10              +9   ->  -0E-10
 | |
| shix067 shift -0E-10              -9   ->  -0E-10
 | |
| shix068 shift -0.000              +9   ->  -0.000
 | |
| shix069 shift -0.000              -9   ->  -0.000
 | |
| shix070 shift -0E+10              +9   ->  -0E+10
 | |
| shix071 shift -0E+10              -9   ->  -0E+10
 | |
| 
 | |
| -- Nmax, Nmin, Ntiny
 | |
| shix141 shift  9.99999999E+999     -1  -> 9.9999999E+998
 | |
| shix142 shift  9.99999999E+999     -8  -> 9E+991
 | |
| shix143 shift  9.99999999E+999      1  -> 9.99999990E+999
 | |
| shix144 shift  9.99999999E+999      8  -> 9.00000000E+999
 | |
| shix145 shift  1E-999              -1  -> 0E-999
 | |
| shix146 shift  1E-999              -8  -> 0E-999
 | |
| shix147 shift  1E-999               1  -> 1.0E-998
 | |
| shix148 shift  1E-999               8  -> 1.00000000E-991
 | |
| shix151 shift  1.00000000E-999     -1  -> 1.0000000E-1000
 | |
| shix152 shift  1.00000000E-999     -8  -> 1E-1007
 | |
| shix153 shift  1.00000000E-999      1  -> 0E-1007
 | |
| shix154 shift  1.00000000E-999      8  -> 0E-1007
 | |
| shix155 shift  9.00000000E-999     -1  -> 9.0000000E-1000
 | |
| shix156 shift  9.00000000E-999     -8  -> 9E-1007
 | |
| shix157 shift  9.00000000E-999      1  -> 0E-1007
 | |
| shix158 shift  9.00000000E-999      8  -> 0E-1007
 | |
| shix160 shift  1E-1007             -1  -> 0E-1007
 | |
| shix161 shift  1E-1007             -8  -> 0E-1007
 | |
| shix162 shift  1E-1007              1  -> 1.0E-1006
 | |
| shix163 shift  1E-1007              8  -> 1.00000000E-999
 | |
| --  negatives
 | |
| shix171 shift -9.99999999E+999     -1  -> -9.9999999E+998
 | |
| shix172 shift -9.99999999E+999     -8  -> -9E+991
 | |
| shix173 shift -9.99999999E+999      1  -> -9.99999990E+999
 | |
| shix174 shift -9.99999999E+999      8  -> -9.00000000E+999
 | |
| shix175 shift -1E-999              -1  -> -0E-999
 | |
| shix176 shift -1E-999              -8  -> -0E-999
 | |
| shix177 shift -1E-999               1  -> -1.0E-998
 | |
| shix178 shift -1E-999               8  -> -1.00000000E-991
 | |
| shix181 shift -1.00000000E-999     -1  -> -1.0000000E-1000
 | |
| shix182 shift -1.00000000E-999     -8  -> -1E-1007
 | |
| shix183 shift -1.00000000E-999      1  -> -0E-1007
 | |
| shix184 shift -1.00000000E-999      8  -> -0E-1007
 | |
| shix185 shift -9.00000000E-999     -1  -> -9.0000000E-1000
 | |
| shix186 shift -9.00000000E-999     -8  -> -9E-1007
 | |
| shix187 shift -9.00000000E-999      1  -> -0E-1007
 | |
| shix188 shift -9.00000000E-999      8  -> -0E-1007
 | |
| shix190 shift -1E-1007             -1  -> -0E-1007
 | |
| shix191 shift -1E-1007             -8  -> -0E-1007
 | |
| shix192 shift -1E-1007              1  -> -1.0E-1006
 | |
| shix193 shift -1E-1007              8  -> -1.00000000E-999
 | |
| 
 | |
| -- more negatives (of sanities)
 | |
| shix201 shift         -0    0  ->  -0
 | |
| shix202 shift         -0    2  ->  -0
 | |
| shix203 shift         -1    2  ->  -100
 | |
| shix204 shift         -1    8  ->  -100000000
 | |
| shix205 shift         -1    9  ->  -0
 | |
| shix206 shift         -1   -1  ->  -0
 | |
| shix207 shift -123456789   -1  ->  -12345678
 | |
| shix208 shift -123456789   -8  ->  -1
 | |
| shix209 shift -123456789   -9  ->  -0
 | |
| shix210 shift         -0   -2  ->  -0
 | |
| shix211 shift         -0   -0  ->  -0
 | |
| 
 | |
| 
 | |
| -- Specials; NaNs are handled as usual
 | |
| shix781 shift -Inf  -8     -> -Infinity
 | |
| shix782 shift -Inf  -1     -> -Infinity
 | |
| shix783 shift -Inf  -0     -> -Infinity
 | |
| shix784 shift -Inf   0     -> -Infinity
 | |
| shix785 shift -Inf   1     -> -Infinity
 | |
| shix786 shift -Inf   8     -> -Infinity
 | |
| shix787 shift -1000 -Inf   -> NaN Invalid_operation
 | |
| shix788 shift -Inf  -Inf   -> NaN Invalid_operation
 | |
| shix789 shift -1    -Inf   -> NaN Invalid_operation
 | |
| shix790 shift -0    -Inf   -> NaN Invalid_operation
 | |
| shix791 shift  0    -Inf   -> NaN Invalid_operation
 | |
| shix792 shift  1    -Inf   -> NaN Invalid_operation
 | |
| shix793 shift  1000 -Inf   -> NaN Invalid_operation
 | |
| shix794 shift  Inf  -Inf   -> NaN Invalid_operation
 | |
| 
 | |
| shix800 shift  Inf  -Inf   -> NaN Invalid_operation
 | |
| shix801 shift  Inf  -8     -> Infinity
 | |
| shix802 shift  Inf  -1     -> Infinity
 | |
| shix803 shift  Inf  -0     -> Infinity
 | |
| shix804 shift  Inf   0     -> Infinity
 | |
| shix805 shift  Inf   1     -> Infinity
 | |
| shix806 shift  Inf   8     -> Infinity
 | |
| shix807 shift  Inf   Inf   -> NaN Invalid_operation
 | |
| shix808 shift -1000  Inf   -> NaN Invalid_operation
 | |
| shix809 shift -Inf   Inf   -> NaN Invalid_operation
 | |
| shix810 shift -1     Inf   -> NaN Invalid_operation
 | |
| shix811 shift -0     Inf   -> NaN Invalid_operation
 | |
| shix812 shift  0     Inf   -> NaN Invalid_operation
 | |
| shix813 shift  1     Inf   -> NaN Invalid_operation
 | |
| shix814 shift  1000  Inf   -> NaN Invalid_operation
 | |
| shix815 shift  Inf   Inf   -> NaN Invalid_operation
 | |
| 
 | |
| shix821 shift  NaN -Inf    ->  NaN
 | |
| shix822 shift  NaN -1000   ->  NaN
 | |
| shix823 shift  NaN -1      ->  NaN
 | |
| shix824 shift  NaN -0      ->  NaN
 | |
| shix825 shift  NaN  0      ->  NaN
 | |
| shix826 shift  NaN  1      ->  NaN
 | |
| shix827 shift  NaN  1000   ->  NaN
 | |
| shix828 shift  NaN  Inf    ->  NaN
 | |
| shix829 shift  NaN  NaN    ->  NaN
 | |
| shix830 shift -Inf  NaN    ->  NaN
 | |
| shix831 shift -1000 NaN    ->  NaN
 | |
| shix832 shift -1    NaN    ->  NaN
 | |
| shix833 shift -0    NaN    ->  NaN
 | |
| shix834 shift  0    NaN    ->  NaN
 | |
| shix835 shift  1    NaN    ->  NaN
 | |
| shix836 shift  1000 NaN    ->  NaN
 | |
| shix837 shift  Inf  NaN    ->  NaN
 | |
| 
 | |
| shix841 shift  sNaN -Inf   ->  NaN  Invalid_operation
 | |
| shix842 shift  sNaN -1000  ->  NaN  Invalid_operation
 | |
| shix843 shift  sNaN -1     ->  NaN  Invalid_operation
 | |
| shix844 shift  sNaN -0     ->  NaN  Invalid_operation
 | |
| shix845 shift  sNaN  0     ->  NaN  Invalid_operation
 | |
| shix846 shift  sNaN  1     ->  NaN  Invalid_operation
 | |
| shix847 shift  sNaN  1000  ->  NaN  Invalid_operation
 | |
| shix848 shift  sNaN  NaN   ->  NaN  Invalid_operation
 | |
| shix849 shift  sNaN sNaN   ->  NaN  Invalid_operation
 | |
| shix850 shift  NaN  sNaN   ->  NaN  Invalid_operation
 | |
| shix851 shift -Inf  sNaN   ->  NaN  Invalid_operation
 | |
| shix852 shift -1000 sNaN   ->  NaN  Invalid_operation
 | |
| shix853 shift -1    sNaN   ->  NaN  Invalid_operation
 | |
| shix854 shift -0    sNaN   ->  NaN  Invalid_operation
 | |
| shix855 shift  0    sNaN   ->  NaN  Invalid_operation
 | |
| shix856 shift  1    sNaN   ->  NaN  Invalid_operation
 | |
| shix857 shift  1000 sNaN   ->  NaN  Invalid_operation
 | |
| shix858 shift  Inf  sNaN   ->  NaN  Invalid_operation
 | |
| shix859 shift  NaN  sNaN   ->  NaN  Invalid_operation
 | |
| 
 | |
| -- propagating NaNs
 | |
| shix861 shift  NaN1   -Inf    ->  NaN1
 | |
| shix862 shift +NaN2   -1000   ->  NaN2
 | |
| shix863 shift  NaN3    1000   ->  NaN3
 | |
| shix864 shift  NaN4    Inf    ->  NaN4
 | |
| shix865 shift  NaN5   +NaN6   ->  NaN5
 | |
| shix866 shift -Inf     NaN7   ->  NaN7
 | |
| shix867 shift -1000    NaN8   ->  NaN8
 | |
| shix868 shift  1000    NaN9   ->  NaN9
 | |
| shix869 shift  Inf    +NaN10  ->  NaN10
 | |
| shix871 shift  sNaN11  -Inf   ->  NaN11  Invalid_operation
 | |
| shix872 shift  sNaN12  -1000  ->  NaN12  Invalid_operation
 | |
| shix873 shift  sNaN13   1000  ->  NaN13  Invalid_operation
 | |
| shix874 shift  sNaN14   NaN17 ->  NaN14  Invalid_operation
 | |
| shix875 shift  sNaN15  sNaN18 ->  NaN15  Invalid_operation
 | |
| shix876 shift  NaN16   sNaN19 ->  NaN19  Invalid_operation
 | |
| shix877 shift -Inf    +sNaN20 ->  NaN20  Invalid_operation
 | |
| shix878 shift -1000    sNaN21 ->  NaN21  Invalid_operation
 | |
| shix879 shift  1000    sNaN22 ->  NaN22  Invalid_operation
 | |
| shix880 shift  Inf     sNaN23 ->  NaN23  Invalid_operation
 | |
| shix881 shift +NaN25  +sNaN24 ->  NaN24  Invalid_operation
 | |
| shix882 shift -NaN26    NaN28 -> -NaN26
 | |
| shix883 shift -sNaN27  sNaN29 -> -NaN27  Invalid_operation
 | |
| shix884 shift  1000    -NaN30 -> -NaN30
 | |
| shix885 shift  1000   -sNaN31 -> -NaN31  Invalid_operation
 |