@@ -19,6 +19,7 @@ has_fma = Dict(
19
19
Rational{Int} => has_fma_Int (),
20
20
Float32 => has_fma_Float32 (),
21
21
Float64 => has_fma_Float64 (),
22
+ BigFloat => true ,
22
23
)
23
24
24
25
@testset " clamp" begin
@@ -424,47 +425,51 @@ end
424
425
@test rad2deg (pi + (pi / 3 )* im) ≈ 180 + 60im
425
426
end
426
427
428
+ # ensure zeros are signed the same
429
+ ⩲ (x,y) = typeof (x) == typeof (y) && x == y && signbit (x) == signbit (y)
430
+ ⩲ (x:: Tuple , y:: Tuple ) = length (x) == length (y) && all (map (⩲ ,x,y))
431
+
427
432
@testset " degree-based trig functions" begin
428
- @testset " $T " for T = (Float32,Float64,Rational{Int})
433
+ @testset " $T " for T = (Float32,Float64,Rational{Int},BigFloat )
429
434
fT = typeof (float (one (T)))
430
435
fTsc = typeof ( (float (one (T)), float (one (T))) )
431
436
for x = - 400 : 40 : 400
432
- @test sind (convert (T,x)):: fT ≈ convert (fT, sin (pi / 180 * x) ) atol= eps (deg2rad (convert (fT,x)))
433
- @test cosd (convert (T,x)):: fT ≈ convert (fT, cos (pi / 180 * x) ) atol= eps (deg2rad (convert (fT,x)))
437
+ @test sind (convert (T,x)):: fT ≈ sin (pi * convert (fT,x) / 180 ) atol= eps (deg2rad (convert (fT,x)))
438
+ @test cosd (convert (T,x)):: fT ≈ cos (pi * convert (fT,x) / 180 ) atol= eps (deg2rad (convert (fT,x)))
434
439
435
440
s,c = sincosd (convert (T,x))
436
- @test s:: fT ≈ convert (fT, sin (pi / 180 * x) ) atol= eps (deg2rad (convert (fT,x)))
437
- @test c:: fT ≈ convert (fT, cos (pi / 180 * x) ) atol= eps (deg2rad (convert (fT,x)))
441
+ @test s:: fT ≈ sin (pi * convert (fT,x) / 180 ) atol= eps (deg2rad (convert (fT,x)))
442
+ @test c:: fT ≈ cos (pi * convert (fT,x) / 180 ) atol= eps (deg2rad (convert (fT,x)))
438
443
end
439
444
@testset " sind" begin
440
- @test sind (convert (T,0.0 )):: fT === zero (fT)
441
- @test sind (convert (T,180.0 )):: fT === zero (fT)
442
- @test sind (convert (T,360.0 )):: fT === zero (fT)
443
- T != Rational{Int} && @test sind (convert (T,- 0.0 )):: fT === - zero (fT)
444
- @test sind (convert (T,- 180.0 )):: fT === - zero (fT)
445
- @test sind (convert (T,- 360.0 )):: fT === - zero (fT)
445
+ @test sind (convert (T,0.0 )):: fT ⩲ zero (fT)
446
+ @test sind (convert (T,180.0 )):: fT ⩲ zero (fT)
447
+ @test sind (convert (T,360.0 )):: fT ⩲ zero (fT)
448
+ T != Rational{Int} && @test sind (convert (T,- 0.0 )):: fT ⩲ - zero (fT)
449
+ @test sind (convert (T,- 180.0 )):: fT ⩲ - zero (fT)
450
+ @test sind (convert (T,- 360.0 )):: fT ⩲ - zero (fT)
446
451
if T <: AbstractFloat
447
452
@test isnan (sind (T (NaN )))
448
453
end
449
454
end
450
455
@testset " cosd" begin
451
- @test cosd (convert (T,90 )):: fT === zero (fT)
452
- @test cosd (convert (T,270 )):: fT === zero (fT)
453
- @test cosd (convert (T,- 90 )):: fT === zero (fT)
454
- @test cosd (convert (T,- 270 )):: fT === zero (fT)
456
+ @test cosd (convert (T,90 )):: fT ⩲ zero (fT)
457
+ @test cosd (convert (T,270 )):: fT ⩲ zero (fT)
458
+ @test cosd (convert (T,- 90 )):: fT ⩲ zero (fT)
459
+ @test cosd (convert (T,- 270 )):: fT ⩲ zero (fT)
455
460
if T <: AbstractFloat
456
461
@test isnan (cosd (T (NaN )))
457
462
end
458
463
end
459
464
@testset " sincosd" begin
460
- @test sincosd (convert (T,- 360 )):: fTsc === ( - zero (fT), one (fT) )
461
- @test sincosd (convert (T,- 270 )):: fTsc === ( one (fT), zero (fT) )
462
- @test sincosd (convert (T,- 180 )):: fTsc === ( - zero (fT), - one (fT) )
463
- @test sincosd (convert (T, - 90 )):: fTsc === ( - one (fT), zero (fT) )
464
- @test sincosd (convert (T, 0 )):: fTsc === ( zero (fT), one (fT) )
465
- @test sincosd (convert (T, 90 )):: fTsc === ( one (fT), zero (fT) )
466
- @test sincosd (convert (T, 180 )):: fTsc === ( zero (fT), - one (fT) )
467
- @test sincosd (convert (T, 270 )):: fTsc === ( - one (fT), zero (fT) )
465
+ @test sincosd (convert (T,- 360 )):: fTsc ⩲ ( - zero (fT), one (fT) )
466
+ @test sincosd (convert (T,- 270 )):: fTsc ⩲ ( one (fT), zero (fT) )
467
+ @test sincosd (convert (T,- 180 )):: fTsc ⩲ ( - zero (fT), - one (fT) )
468
+ @test sincosd (convert (T, - 90 )):: fTsc ⩲ ( - one (fT), zero (fT) )
469
+ @test sincosd (convert (T, 0 )):: fTsc ⩲ ( zero (fT), one (fT) )
470
+ @test sincosd (convert (T, 90 )):: fTsc ⩲ ( one (fT), zero (fT) )
471
+ @test sincosd (convert (T, 180 )):: fTsc ⩲ ( zero (fT), - one (fT) )
472
+ @test sincosd (convert (T, 270 )):: fTsc ⩲ ( - one (fT), zero (fT) )
468
473
if T <: AbstractFloat
469
474
@test_throws DomainError sincosd (T (Inf ))
470
475
@test all (isnan .(sincosd (T (NaN ))))
@@ -476,22 +481,22 @@ end
476
481
" sincospi" => (x-> sincospi (x)[1 ], x-> sincospi (x)[2 ])
477
482
)
478
483
@testset " pi * $x " for x = - 3 : 0.3 : 3
479
- @test sinpi (convert (T,x)):: fT ≈ convert (fT, sin (pi * x)) atol= eps (pi * convert (fT,x))
480
- @test cospi (convert (T,x)):: fT ≈ convert (fT, cos (pi * x)) atol= eps (pi * convert (fT,x))
484
+ @test sinpi (convert (T,x)):: fT ≈ sin (pi * convert (fT, x)) atol= eps (pi * convert (fT,x))
485
+ @test cospi (convert (T,x)):: fT ≈ cos (pi * convert (fT, x)) atol= eps (pi * convert (fT,x))
481
486
end
482
487
483
- @test sinpi (convert (T,0.0 )):: fT === zero (fT)
484
- @test sinpi (convert (T,1.0 )):: fT === zero (fT)
485
- @test sinpi (convert (T,2.0 )):: fT === zero (fT)
486
- T != Rational{Int} && @test sinpi (convert (T,- 0.0 )):: fT === - zero (fT)
487
- @test sinpi (convert (T,- 1.0 )):: fT === - zero (fT)
488
- @test sinpi (convert (T,- 2.0 )):: fT === - zero (fT)
488
+ @test sinpi (convert (T,0.0 )):: fT ⩲ zero (fT)
489
+ @test sinpi (convert (T,1.0 )):: fT ⩲ zero (fT)
490
+ @test sinpi (convert (T,2.0 )):: fT ⩲ zero (fT)
491
+ T != Rational{Int} && @test sinpi (convert (T,- 0.0 )):: fT ⩲ - zero (fT)
492
+ @test sinpi (convert (T,- 1.0 )):: fT ⩲ - zero (fT)
493
+ @test sinpi (convert (T,- 2.0 )):: fT ⩲ - zero (fT)
489
494
@test_throws DomainError sinpi (convert (T,Inf ))
490
495
491
- @test cospi (convert (T,0.5 )):: fT === zero (fT)
492
- @test cospi (convert (T,1.5 )):: fT === zero (fT)
493
- @test cospi (convert (T,- 0.5 )):: fT === zero (fT)
494
- @test cospi (convert (T,- 1.5 )):: fT === zero (fT)
496
+ @test cospi (convert (T,0.5 )):: fT ⩲ zero (fT)
497
+ @test cospi (convert (T,1.5 )):: fT ⩲ zero (fT)
498
+ @test cospi (convert (T,- 0.5 )):: fT ⩲ zero (fT)
499
+ @test cospi (convert (T,- 1.5 )):: fT ⩲ zero (fT)
495
500
@test_throws DomainError cospi (convert (T,Inf ))
496
501
end
497
502
@testset begin
512
517
@test my_eq (sincospi (one (T)/ convert (T,6 ))[1 ], 0.5 )
513
518
@test_throws DomainError sind (convert (T,Inf ))
514
519
@test_throws DomainError cosd (convert (T,Inf ))
515
- T != Float32 && @test my_eq (cospi (one (T)/ convert (T,3 )), 0.5 )
516
- T != Float32 && @test my_eq (sincospi (one (T)/ convert (T,3 ))[2 ], 0.5 )
520
+ fT == Float64 && @test my_eq (cospi (one (T)/ convert (T,3 )), 0.5 )
521
+ fT == Float64 && @test my_eq (sincospi (one (T)/ convert (T,3 ))[2 ], 0.5 )
517
522
T == Rational{Int} && @test my_eq (sinpi (5 // 6 ), 0.5 )
518
523
T == Rational{Int} && @test my_eq (sincospi (5 // 6 )[1 ], 0.5 )
519
524
end
562
567
end
563
568
end
564
569
end
565
- @test @inferred (sinc (0 // 1 )) === 1.0
566
- @test @inferred (cosc (0 // 1 )) === - 0.0
570
+ @test @inferred (sinc (0 // 1 )) ⩲ 1.0
571
+ @test @inferred (cosc (0 // 1 )) ⩲ - 0.0
567
572
568
573
# test right before/after thresholds of Taylor series
569
574
@test sinc (0.001 ) ≈ 0.999998355066745 rtol= 1e-15
0 commit comments