|
308 | 308 | end |
309 | 309 | end |
310 | 310 | end |
| 311 | + |
| 312 | +# These tests were copied from Julia. License is MIT: https://julialang.org/license. |
| 313 | +@testset "rounding consistency with Base" begin |
| 314 | + @test rem(prevfloat(Float128(1)), Float128(1)) == prevfloat(Float128(1)) |
| 315 | + @test mod(prevfloat(Float128(1)), Float128(1)) == prevfloat(Float128(1)) |
| 316 | +end |
| 317 | +@testset "rem(::Float128, ::Float128, ::RoundingMode)" begin |
| 318 | + T = Float128 |
| 319 | + @test rem(T(1), T(2), RoundToZero) == 1 |
| 320 | + @test rem(T(1), T(2), RoundNearest) == 1 |
| 321 | + @test rem(T(1), T(2), RoundDown) == 1 |
| 322 | + @test rem(T(1), T(2), RoundUp) == -1 |
| 323 | + @test rem(T(1), T(2), RoundFromZero) == -1 |
| 324 | + @test rem(T(1), T(2), RoundNearestTiesUp) == -1 |
| 325 | + @test rem(T(1), T(2), RoundNearestTiesAway) == -1 |
| 326 | + @test rem(T(1.5), T(2), RoundToZero) == 1.5 |
| 327 | + @test rem(T(1.5), T(2), RoundNearest) == -0.5 |
| 328 | + @test rem(T(1.5), T(2), RoundDown) == 1.5 |
| 329 | + @test rem(T(1.5), T(2), RoundUp) == -0.5 |
| 330 | + @test rem(T(1.5), T(2), RoundFromZero) == -0.5 |
| 331 | + @test rem(T(1.5), T(2), RoundNearestTiesUp) == -0.5 |
| 332 | + @test rem(T(1.5), T(2), RoundNearestTiesAway) == -0.5 |
| 333 | + @test rem(T(-1), T(2), RoundToZero) == -1 |
| 334 | + @test rem(T(-1), T(2), RoundNearest) == -1 |
| 335 | + @test rem(T(-1), T(2), RoundDown) == 1 |
| 336 | + @test rem(T(-1), T(2), RoundUp) == -1 |
| 337 | + @test rem(T(-1), T(2), RoundFromZero) == 1 |
| 338 | + @test rem(T(-1), T(2), RoundNearestTiesUp) == -1 |
| 339 | + @test rem(T(-1), T(2), RoundNearestTiesAway) == 1 |
| 340 | + @test rem(T(-1.5), T(2), RoundToZero) == -1.5 |
| 341 | + @test rem(T(-1.5), T(2), RoundNearest) == 0.5 |
| 342 | + @test rem(T(-1.5), T(2), RoundDown) == 0.5 |
| 343 | + @test rem(T(-1.5), T(2), RoundUp) == -1.5 |
| 344 | + @test rem(T(-1.5), T(2), RoundFromZero) == 0.5 |
| 345 | + @test rem(T(-1.5), T(2), RoundNearestTiesUp) == 0.5 |
| 346 | + @test rem(T(-1.5), T(2), RoundNearestTiesAway) == 0.5 |
| 347 | + for mode in [RoundToZero, RoundNearest, RoundDown, RoundUp, RoundFromZero, RoundNearestTiesUp, RoundNearestTiesAway] |
| 348 | + @test isnan(rem(T(1), T(0), mode)) |
| 349 | + @test isnan(rem(T(Inf), T(2), mode)) |
| 350 | + @test isnan(rem(T(1), T(NaN), mode)) |
| 351 | + @test rem(T(4), floatmin(T) * 2, mode) == 0 |
| 352 | + end |
| 353 | + @test isequal(rem(nextfloat(typemin(T)), T(2), RoundToZero), -0.0) |
| 354 | + @test isequal(rem(nextfloat(typemin(T)), T(2), RoundNearest), -0.0) |
| 355 | + @test isequal(rem(nextfloat(typemin(T)), T(2), RoundDown), 0.0) |
| 356 | + @test isequal(rem(nextfloat(typemin(T)), T(2), RoundUp), -0.0) |
| 357 | + @test isequal(rem(nextfloat(typemin(T)), T(2), RoundFromZero), 0.0) |
| 358 | + @test isequal(rem(nextfloat(typemin(T)), T(2), RoundNearestTiesUp), -0.0) |
| 359 | + @test isequal(rem(nextfloat(typemin(T)), T(2), RoundNearestTiesAway), 0.0) |
| 360 | +end |
0 commit comments