diff --git a/base/div.jl b/base/div.jl index 82234a32ff9cf..68b020e93ef5d 100644 --- a/base/div.jl +++ b/base/div.jl @@ -114,6 +114,8 @@ rem(x, y, r::RoundingMode) rem(x, y, ::RoundingMode{:ToZero}) = rem(x, y) rem(x, y, ::RoundingMode{:Down}) = mod(x, y) rem(x, y, ::RoundingMode{:Up}) = mod(x, -y) +rem(x, y::Unsigned, ::RoundingMode{:Up}) = + throw(ArgumentError("rem(x, y, RoundUp) cannot be used with unsigned y")) # issue #34325 rem(x, y, r::RoundingMode{:Nearest}) = x - y * div(x, y, r) rem(x::Integer, y::Integer, r::RoundingMode{:Nearest}) = divrem(x, y, r)[2] diff --git a/test/numbers.jl b/test/numbers.jl index faaa3d293626d..f1b40cf3653b0 100644 --- a/test/numbers.jl +++ b/test/numbers.jl @@ -1751,6 +1751,13 @@ end @test rem(typemin(T), T(-1)) === T(0) @test mod(typemin(T), T(-1)) === T(0) end + @testset "issue #34325" for S in (Int8, Int16, Int32, Int64, Int128) + U = unsigned(S) + @test rem(S(10), S(7), RoundUp) == -4 + @test rem(U(10), S(7), RoundUp) == -4 + @test_throws ArgumentError rem(S(10), U(7), RoundUp) + @test_throws ArgumentError rem(U(10), U(7), RoundUp) + end end @testset "issue #4156" begin @test fld(1.4, 0.35667494393873234) == 3.0