From 9902729acd9ae630ed7914ad5c29ce901a3ed5c3 Mon Sep 17 00:00:00 2001 From: Andreas Noack Date: Thu, 1 Feb 2018 15:24:21 +0100 Subject: [PATCH 1/3] Fix ambiguities and enable tests for ambiguities --- src/fixed.jl | 3 +++ src/normed.jl | 3 +++ test/runtests.jl | 4 +--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/fixed.jl b/src/fixed.jl index 29340540..45bf0791 100644 --- a/src/fixed.jl +++ b/src/fixed.jl @@ -7,6 +7,9 @@ struct Fixed{T <: Signed,f} <: FixedPoint{T, f} Fixed{T, f}(i::Integer, _) where {T,f} = new{T, f}(i % T) Fixed{T, f}(x) where {T,f} = convert(Fixed{T,f}, x) Fixed{T, f}(x::Fixed{T,f}) where {T,f} = x + Fixed{T, f}(x::Char) where {T,f} = throw(ArgumentError("Fixed cannot be constructed from a Char")) + Fixed{T, f}(x::Complex) where {T,f} = Fixed{T, f}(real(x)) + Fixed{T, f}(x::Base.TwicePrecision) where {T,f,S} = Fixed{T, f}(convert(Float64, x)) end reinterpret(::Type{Fixed{T,f}}, x::T) where {T <: Signed,f} = Fixed{T,f}(x, 0) diff --git a/src/normed.jl b/src/normed.jl index 934f728e..08eb8a0c 100644 --- a/src/normed.jl +++ b/src/normed.jl @@ -7,6 +7,9 @@ struct Normed{T<:Unsigned,f} <: FixedPoint{T,f} Normed{T, f}(i::Integer,_) where {T,f} = new{T, f}(i%T) # for setting by raw representation Normed{T, f}(x) where {T,f} = convert(Normed{T,f}, x) Normed{T, f}(x::Normed{T,f}) where {T,f} = x + Normed{T, f}(x::Char) where {T,f} = throw(ArgumentError("Normed cannot be constructed from a Char")) + Normed{T, f}(x::Complex) where {T,f} = Normed{T, f}(real(x)) + Normed{T, f}(x::Base.TwicePrecision) where {T,f,S} = Normed{T, f}(convert(Float64, x)) end typechar(::Type{X}) where {X <: Normed} = 'N' diff --git a/test/runtests.jl b/test/runtests.jl index ecc6566b..137b6e7c 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,8 +1,6 @@ using FixedPointNumbers, Base.Test -if VERSION < v"0.7.0-" - @test isempty(detect_ambiguities(FixedPointNumbers, Base, Core)) -end +@test isempty(detect_ambiguities(FixedPointNumbers, Base, Core)) for f in ["normed.jl", "fixed.jl"] println("Testing $f") From fe45399652c52f32db297b240d5e0524aef8df6a Mon Sep 17 00:00:00 2001 From: Andreas Noack Date: Thu, 1 Feb 2018 15:32:58 +0100 Subject: [PATCH 2/3] Avoid warning from Test --- REQUIRE | 1 + test/fixed.jl | 3 +-- test/normed.jl | 3 +-- test/runtests.jl | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/REQUIRE b/REQUIRE index 137767a4..dcd0aba7 100644 --- a/REQUIRE +++ b/REQUIRE @@ -1 +1,2 @@ julia 0.6 +Compat 0.35 diff --git a/test/fixed.jl b/test/fixed.jl index 54808913..2baa0f67 100644 --- a/test/fixed.jl +++ b/test/fixed.jl @@ -1,5 +1,4 @@ -using Base.Test -using FixedPointNumbers +using FixedPointNumbers, Compat, Test function test_op(fun::F, ::Type{T}, fx, fy, fxf, fyf, tol) where {F,T} # Make sure that the result is representable diff --git a/test/normed.jl b/test/normed.jl index 3bc892b1..42d7797d 100644 --- a/test/normed.jl +++ b/test/normed.jl @@ -1,5 +1,4 @@ -using FixedPointNumbers -using Base.Test +using FixedPointNumbers, Compat, Test @test reinterpret(N0f8, 0xa2).i === 0xa2 @test reinterpret(N6f10, 0x1fa2).i === 0x1fa2 diff --git a/test/runtests.jl b/test/runtests.jl index 137b6e7c..062fe20b 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,4 +1,4 @@ -using FixedPointNumbers, Base.Test +using FixedPointNumbers, Compat, Test @test isempty(detect_ambiguities(FixedPointNumbers, Base, Core)) From d91de9eac6f7d374d57927c8be2826e519c7c47e Mon Sep 17 00:00:00 2001 From: Andreas Noack Date: Thu, 1 Feb 2018 16:59:05 +0100 Subject: [PATCH 3/3] Fix complex constructors Add some tests --- src/fixed.jl | 4 ++-- src/normed.jl | 4 ++-- test/fixed.jl | 8 +++++++- test/normed.jl | 9 ++++++++- test/runtests.jl | 2 +- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/fixed.jl b/src/fixed.jl index 45bf0791..d6aa8c6c 100644 --- a/src/fixed.jl +++ b/src/fixed.jl @@ -8,8 +8,8 @@ struct Fixed{T <: Signed,f} <: FixedPoint{T, f} Fixed{T, f}(x) where {T,f} = convert(Fixed{T,f}, x) Fixed{T, f}(x::Fixed{T,f}) where {T,f} = x Fixed{T, f}(x::Char) where {T,f} = throw(ArgumentError("Fixed cannot be constructed from a Char")) - Fixed{T, f}(x::Complex) where {T,f} = Fixed{T, f}(real(x)) - Fixed{T, f}(x::Base.TwicePrecision) where {T,f,S} = Fixed{T, f}(convert(Float64, x)) + Fixed{T, f}(x::Complex) where {T,f} = Fixed{T, f}(convert(real(typeof(x)), x)) + Fixed{T, f}(x::Base.TwicePrecision) where {T,f} = Fixed{T, f}(convert(Float64, x)) end reinterpret(::Type{Fixed{T,f}}, x::T) where {T <: Signed,f} = Fixed{T,f}(x, 0) diff --git a/src/normed.jl b/src/normed.jl index 08eb8a0c..9ebdbd2c 100644 --- a/src/normed.jl +++ b/src/normed.jl @@ -8,8 +8,8 @@ struct Normed{T<:Unsigned,f} <: FixedPoint{T,f} Normed{T, f}(x) where {T,f} = convert(Normed{T,f}, x) Normed{T, f}(x::Normed{T,f}) where {T,f} = x Normed{T, f}(x::Char) where {T,f} = throw(ArgumentError("Normed cannot be constructed from a Char")) - Normed{T, f}(x::Complex) where {T,f} = Normed{T, f}(real(x)) - Normed{T, f}(x::Base.TwicePrecision) where {T,f,S} = Normed{T, f}(convert(Float64, x)) + Normed{T, f}(x::Complex) where {T,f} = Normed{T, f}(convert(real(typeof(x)), x)) + Normed{T, f}(x::Base.TwicePrecision) where {T,f} = Normed{T, f}(convert(Float64, x)) end typechar(::Type{X}) where {X <: Normed} = 'N' diff --git a/test/fixed.jl b/test/fixed.jl index 2baa0f67..78de3a51 100644 --- a/test/fixed.jl +++ b/test/fixed.jl @@ -1,4 +1,4 @@ -using FixedPointNumbers, Compat, Test +using FixedPointNumbers, Compat.Test function test_op(fun::F, ::Type{T}, fx, fy, fxf, fyf, tol) where {F,T} # Make sure that the result is representable @@ -129,3 +129,9 @@ end # issue #79 @test realmin(Q11f4) == Q11f4(0.06) + +# Test disambiguation constructors +@test_throws ArgumentError Fixed{Int32,16}('a') +@test_throws InexactError Fixed{Int32,16}(complex(1.0, 1.0)) +@test Fixed{Int32,16}(complex(1.0, 0.0)) == 1 +@test Fixed{Int32,16}(Base.TwicePrecision(1.0, 0.0)) == 1 diff --git a/test/normed.jl b/test/normed.jl index 42d7797d..70a88416 100644 --- a/test/normed.jl +++ b/test/normed.jl @@ -1,4 +1,4 @@ -using FixedPointNumbers, Compat, Test +using FixedPointNumbers, Compat.Test @test reinterpret(N0f8, 0xa2).i === 0xa2 @test reinterpret(N6f10, 0x1fa2).i === 0x1fa2 @@ -313,3 +313,10 @@ elseif VERSION >= v"0.7.0-DEV.1790" @test summary(a) == "2-element Array{N0f8,1} with eltype FixedPointNumbers.Normed{UInt8,8}" @test summary(view(a, 1:2)) == "2-element view(::Array{N0f8,1}, 1:2) with eltype FixedPointNumbers.Normed{UInt8,8}" end + +# Test disambiguation constructors +@test_throws ArgumentError Normed{UInt32,16}('a') +@test_throws InexactError Normed{UInt32,16}(complex(1.0, 1.0)) +@test Normed{UInt32,16}(complex(1.0, 0.0)) == 1 +@test Normed{UInt32,16}(Base.TwicePrecision(1.0, 0.0)) == 1 + diff --git a/test/runtests.jl b/test/runtests.jl index 062fe20b..488afa31 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,4 +1,4 @@ -using FixedPointNumbers, Compat, Test +using FixedPointNumbers, Compat.Test @test isempty(detect_ambiguities(FixedPointNumbers, Base, Core))