@@ -2929,3 +2929,126 @@ end
29292929 @test false == ceil (Bool, - 0.7 )
29302930 end
29312931end
2932+
2933+ @testset " modf" begin
2934+ @testset " remd" begin
2935+ denorm_min = nextfloat (0.0 )
2936+ minfloat = floatmin (Float64)
2937+ maxfloat = floatmax (Float64)
2938+ values = [3.0 ,denorm_min,- denorm_min, minfloat,
2939+ - minfloat, maxfloat, - maxfloat]
2940+ # rem (0, y) == 0 for y != 0.
2941+ for val in values
2942+ @test isequal (rem (0.0 , val), 0.0 )
2943+ end
2944+ # rem (-0, y) == -0 for y != 0.
2945+ for val in values
2946+ @test isequal (rem (- 0.0 , val), - 0.0 )
2947+ end
2948+ # rem (+Inf, y) == NaN
2949+ values2 = [3.0 ,- 1.1 ,0.0 ,- 0.0 ,denorm_min,minfloat,
2950+ maxfloat,Inf ,- Inf ]
2951+ for val in values2
2952+ @test isequal (rem (Inf , val), NaN )
2953+ end
2954+ # rem (-Inf, y) == NaN
2955+ for val in values2
2956+ @test isequal (rem (- Inf , val), NaN )
2957+ end
2958+ # rem (x, +0) == NaN
2959+ values3 = values2[begin : end - 2 ]
2960+ for val in values3
2961+ @test isequal (rem (val, 0.0 ), NaN )
2962+ end
2963+ # rem (x, -0) == NaN
2964+ for val in values3
2965+ @test isequal (rem (val, - 0.0 ), NaN )
2966+ end
2967+ # rem (x, +Inf) == x for x not infinite.
2968+ @test isequal (rem (0.0 , Inf ), 0.0 )
2969+ @test isequal (rem (- 0.0 , Inf ), - 0.0 )
2970+ @test isequal (rem (denorm_min, Inf ), denorm_min)
2971+ @test isequal (rem (minfloat, Inf ), minfloat)
2972+ @test isequal (rem (maxfloat, Inf ), maxfloat)
2973+ @test isequal (rem (3.0 , Inf ), 3.0 )
2974+ # rem (x, -Inf) == x for x not infinite.
2975+ @test isequal (rem (0.0 , - Inf ), 0.0 )
2976+ @test isequal (rem (- 0.0 , - Inf ), - 0.0 )
2977+ @test isequal (rem (denorm_min, - Inf ), denorm_min)
2978+ @test isequal (rem (minfloat, - Inf ), minfloat)
2979+ @test isequal (rem (maxfloat, - Inf ), maxfloat)
2980+ @test isequal (rem (3.0 , - Inf ), 3.0 )
2981+ # NaN tests
2982+ @test isequal (rem (0.0 , NaN ), NaN )
2983+ @test isequal (rem (1.0 , NaN ), NaN )
2984+ @test isequal (rem (Inf , NaN ), NaN )
2985+ @test isequal (rem (NaN , 0.0 ), NaN )
2986+ @test isequal (rem (NaN , 1.0 ), NaN )
2987+ @test isequal (rem (NaN , Inf ), NaN )
2988+ @test isequal (rem (NaN , NaN ), NaN )
2989+ # Sign tests
2990+ @test isequal (rem (6.5 , 2.25 ), 2.0 )
2991+ @test isequal (rem (- 6.5 , 2.25 ), - 2.0 )
2992+ @test isequal (rem (6.5 , - 2.25 ), 2.0 )
2993+ @test isequal (rem (- 6.5 , - 2.25 ), - 2.0 )
2994+ values4 = [maxfloat,- maxfloat,minfloat,- minfloat,
2995+ denorm_min, - denorm_min]
2996+ for val in values4
2997+ @test isequal (rem (maxfloat,val), 0.0 )
2998+ end
2999+ for val in values4
3000+ @test isequal (rem (- maxfloat,val), - 0.0 )
3001+ end
3002+ @test isequal (rem (minfloat, maxfloat), minfloat)
3003+ @test isequal (rem (minfloat, - maxfloat), minfloat)
3004+ values5 = values4[begin + 2 : end ]
3005+ for val in values5
3006+ @test isequal (rem (minfloat,val), 0.0 )
3007+ end
3008+ @test isequal (rem (- minfloat, maxfloat), - minfloat)
3009+ @test isequal (rem (- minfloat, - maxfloat), - minfloat)
3010+ for val in values5
3011+ @test isequal (rem (- minfloat,val), - 0.0 )
3012+ end
3013+ values6 = values4[begin : end - 2 ]
3014+ for val in values6
3015+ @test isequal (rem (denorm_min,val), denorm_min)
3016+ end
3017+ @test isequal (rem (denorm_min, denorm_min), 0.0 )
3018+ @test isequal (rem (denorm_min, - denorm_min), 0.0 )
3019+ for val in values6
3020+ @test isequal (rem (- denorm_min,val), - denorm_min)
3021+ end
3022+ @test isequal (rem (- denorm_min, denorm_min), - 0.0 )
3023+ @test isequal (rem (- denorm_min, - denorm_min), - 0.0 )
3024+ # Max value tests
3025+ values7 = [0x3 p- 1074 ,- 0x3 p- 1074 ,0x3 p- 1073 ,- 0x3 p- 1073 ]
3026+ for val in values7
3027+ @test isequal (rem (0x1 p1023,val), 0x1 p- 1073 )
3028+ end
3029+ @test isequal (rem (0x1 p1023, 0x3 p- 1022 ), 0x1 p- 1021 )
3030+ @test isequal (rem (0x1 p1023, - 0x3 p- 1022 ), 0x1 p- 1021 )
3031+ for val in values7
3032+ @test isequal (rem (- 0x1 p1023,val), - 0x1 p- 1073 )
3033+ end
3034+ @test isequal (rem (- 0x1 p1023, 0x3 p- 1022 ), - 0x1 p- 1021 )
3035+ @test isequal (rem (- 0x1 p1023, - 0x3 p- 1022 ), - 0x1 p- 1021 )
3036+
3037+ end
3038+
3039+ @testset " remf" begin
3040+ @test isequal (rem (Float32 (0x1 p127), Float32 (0x3 p- 149 )), Float32 (0x1 p- 149 ))
3041+ @test isequal (rem (Float32 (0x1 p127), - Float32 (0x3 p- 149 )), Float32 (0x1 p- 149 ))
3042+ @test isequal (rem (Float32 (0x1 p127), Float32 (0x3 p- 148 )), Float32 (0x1 p- 147 ))
3043+ @test isequal (rem (Float32 (0x1 p127), - Float32 (0x3 p- 148 )), Float32 (0x1 p- 147 ))
3044+ @test isequal (rem (Float32 (0x1 p127), Float32 (0x3 p- 126 )), Float32 (0x1 p- 125 ))
3045+ @test isequal (rem (Float32 (0x1 p127), - Float32 (0x3 p- 126 )), Float32 (0x1 p- 125 ))
3046+ @test isequal (rem (- Float32 (0x1 p127), Float32 (0x3 p- 149 )), - Float32 (0x1 p- 149 ))
3047+ @test isequal (rem (- Float32 (0x1 p127), - Float32 (0x3 p- 149 )), - Float32 (0x1 p- 149 ))
3048+ @test isequal (rem (- Float32 (0x1 p127), Float32 (0x3 p- 148 )), - Float32 (0x1 p- 147 ))
3049+ @test isequal (rem (- Float32 (0x1 p127), - Float32 (0x3 p- 148 )), - Float32 (0x1 p- 147 ))
3050+ @test isequal (rem (- Float32 (0x1 p127), Float32 (0x3 p- 126 )), - Float32 (0x1 p- 125 ))
3051+ @test isequal (rem (- Float32 (0x1 p127), - Float32 (0x3 p- 126 )), - Float32 (0x1 p- 125 ))
3052+ end
3053+
3054+ end
0 commit comments