Skip to content

Commit ab35858

Browse files
authored
Merge pull request #8 from JuliaMath/teh/update
Update to Julia 0.7+
2 parents 6325b91 + 150a837 commit ab35858

File tree

6 files changed

+95
-119
lines changed

6 files changed

+95
-119
lines changed

.travis.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ os:
44
- linux
55
- osx
66
julia:
7-
- 0.5
8-
- 0.6
7+
- 0.7
8+
- 1.0
99
- nightly
1010
notifications:
1111
email: false
@@ -15,4 +15,4 @@ notifications:
1515
# - julia -e 'Pkg.clone(pwd()); Pkg.build("RoundingIntegers"); Pkg.test("RoundingIntegers"; coverage=true)'
1616
after_success:
1717
# push coverage results to Codecov
18-
- julia -e 'cd(Pkg.dir("RoundingIntegers")); Pkg.add("Coverage"); using Coverage; Codecov.submit(Codecov.process_folder())'
18+
- julia -e 'using RoundingIntegers, Pkg; cd(dirname(dirname(pathof(RoundingIntegers)))); Pkg.add("Coverage"); using Coverage; Codecov.submit(Codecov.process_folder())'

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ ERROR: InexactError()
2020
julia> RInt(7.2) # but not with a rounding integer
2121
7
2222

23-
julia> (map(RInt, 1.5:1:4.5)...) # rounds half integers to nearest even
23+
julia> (map(RInt, 1.5:1:4.5)...,) # rounds half integers to nearest even
2424
(2, 2, 4, 4)
2525

26-
julia> a = Vector{RUInt8}(2)
26+
julia> a = Vector{RUInt8}(undef, 2)
2727
2-element Array{RoundingIntegers.RUInt8,1}:
2828
0x42
2929
0x61

REQUIRE

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
julia 0.5
2-
Compat 0.17
1+
julia 0.7

appveyor.yml

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
environment:
22
matrix:
3-
- JULIA_URL: "https://julialang-s3.julialang.org/bin/winnt/x86/0.5/julia-0.5-latest-win32.exe"
4-
- JULIA_URL: "https://julialang-s3.julialang.org/bin/winnt/x64/0.5/julia-0.5-latest-win64.exe"
5-
- JULIA_URL: "https://julialangnightlies-s3.julialang.org/bin/winnt/x86/julia-latest-win32.exe"
6-
- JULIA_URL: "https://julialangnightlies-s3.julialang.org/bin/winnt/x64/julia-latest-win64.exe"
3+
- julia_version: 0.7
4+
- julia_version: 1
5+
- julia_version: nightly
6+
7+
platform:
8+
- x86 # 32-bit
9+
- x64 # 64-bit
10+
11+
# # Uncomment the following lines to allow failures on nightly julia
12+
# # (tests will run but not make your overall status red)
13+
# matrix:
14+
# allow_failures:
15+
# - julia_version: nightly
716

817
branches:
918
only:
@@ -17,19 +26,18 @@ notifications:
1726
on_build_status_changed: false
1827

1928
install:
20-
- ps: "[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12"
21-
# Download most recent Julia Windows binary
22-
- ps: (new-object net.webclient).DownloadFile(
23-
$env:JULIA_URL,
24-
"C:\projects\julia-binary.exe")
25-
# Run installer silently, output to C:\projects\julia
26-
- C:\projects\julia-binary.exe /S /D=C:\projects\julia
29+
- ps: iex ((new-object net.webclient).DownloadString("https://raw.githubusercontent.com/JuliaCI/Appveyor.jl/version-1/bin/install.ps1"))
2730

2831
build_script:
29-
# Need to convert from shallow to complete for Pkg.clone to work
30-
- IF EXIST .git\shallow (git fetch --unshallow)
31-
- C:\projects\julia\bin\julia -e "versioninfo();
32-
Pkg.clone(pwd(), \"RoundingIntegers\"); Pkg.build(\"RoundingIntegers\")"
32+
- echo "%JL_BUILD_SCRIPT%"
33+
- C:\julia\bin\julia -e "%JL_BUILD_SCRIPT%"
3334

3435
test_script:
35-
- C:\projects\julia\bin\julia -e "Pkg.test(\"RoundingIntegers\")"
36+
- echo "%JL_TEST_SCRIPT%"
37+
- C:\julia\bin\julia -e "%JL_TEST_SCRIPT%"
38+
39+
# # Uncomment to support code coverage upload. Should only be enabled for packages
40+
# # which would have coverage gaps without running on Windows
41+
# on_success:
42+
# - echo "%JL_CODECOV_SCRIPT%"
43+
# - C:\julia\bin\julia -e "%JL_CODECOV_SCRIPT%"

src/RoundingIntegers.jl

Lines changed: 61 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,26 @@
1-
__precompile__(true)
2-
31
module RoundingIntegers
42

5-
using Compat
6-
import Base: <, <=, +, -, *, ~, &, |, $, <<, >>, >>>
3+
import Base: <, <=, +, -, *, ~, &, |, <<, >>, >>>, xor
74

85
export RSigned, RUnsigned, RInteger
96
export RInt8, RUInt8, RInt16, RUInt16, RInt32, RUInt32, RInt64, RUInt64,
107
RInt128, RUInt128, RInt, RUInt
118

12-
@compat abstract type RSigned <: Signed end
13-
@compat abstract type RUnsigned <: Unsigned end
9+
abstract type RSigned <: Signed end
10+
abstract type RUnsigned <: Unsigned end
1411

1512
const RInteger = Union{RSigned,RUnsigned}
1613

17-
@compat primitive type RInt8 <: RSigned 8 end
18-
@compat primitive type RUInt8 <: RUnsigned 8 end
19-
@compat primitive type RInt16 <: RSigned 16 end
20-
@compat primitive type RUInt16 <: RUnsigned 16 end
21-
@compat primitive type RInt32 <: RSigned 32 end
22-
@compat primitive type RUInt32 <: RUnsigned 32 end
23-
@compat primitive type RInt64 <: RSigned 64 end
24-
@compat primitive type RUInt64 <: RUnsigned 64 end
25-
@compat primitive type RInt128 <: RSigned 128 end
26-
@compat primitive type RUInt128 <: RUnsigned 128 end
14+
primitive type RInt8 <: RSigned 8 end
15+
primitive type RUInt8 <: RUnsigned 8 end
16+
primitive type RInt16 <: RSigned 16 end
17+
primitive type RUInt16 <: RUnsigned 16 end
18+
primitive type RInt32 <: RSigned 32 end
19+
primitive type RUInt32 <: RUnsigned 32 end
20+
primitive type RInt64 <: RSigned 64 end
21+
primitive type RUInt64 <: RUnsigned 64 end
22+
primitive type RInt128 <: RSigned 128 end
23+
primitive type RUInt128 <: RUnsigned 128 end
2724

2825
if Sys.WORD_SIZE == 32
2926
const RInt = RInt32
@@ -65,67 +62,45 @@ rtype(x::Union{Signed,Unsigned}) = rtype(typeof(x))
6562
# RIntegers are largely about assignment; for usage, we convert to
6663
# standard integers at the drop of a hat.
6764

68-
Base.promote_rule{T<:Number,RI<:RInteger}(::Type{T}, ::Type{RI}) =
65+
Base.promote_rule(::Type{RI}, ::Type{T}) where {T<:Number,RI<:RInteger} =
6966
promote_type(T, itype(RI))
70-
# Resolve ambiguities
71-
Base.promote_rule{RI<:RInteger}(::Type{Bool}, ::Type{RI}) =
72-
promote_type(Bool, itype(RI))
73-
Base.promote_rule{RI<:RInteger}(::Type{BigInt}, ::Type{RI}) =
74-
promote_type(BigInt, itype(RI))
75-
Base.promote_rule{RI<:RInteger}(::Type{BigFloat}, ::Type{RI}) =
76-
promote_type(BigFloat, itype(RI))
77-
Base.promote_rule{T<:Real,RI<:RInteger}(::Type{Complex{T}}, ::Type{RI}) =
78-
promote_type(Complex{T}, itype(RI))
79-
Base.promote_rule{T<:Integer,RI<:RInteger}(::Type{Rational{T}}, ::Type{RI}) =
80-
promote_type(Rational{T}, itype(RI))
81-
@compat Base.promote_rule{RI<:RInteger}(::Type{<:Irrational}, ::Type{RI}) =
82-
promote_type(Float64, itype(RI))
83-
84-
(::Type{Signed})(x::RSigned) = reinterpret(itype(x), x)
85-
(::Type{Unsigned})(x::RUnsigned) = reinterpret(itype(x), x)
86-
(::Type{RSigned})(x::Signed) = reinterpret(rtype(x), x)
87-
(::Type{RUnsigned})(x::Unsigned) = reinterpret(rtype(x), x)
88-
(::Type{Integer})(x::RSigned) = Signed(x)
89-
(::Type{Integer})(x::RUnsigned) = Unsigned(x)
90-
(::Type{RInteger})(x::Signed) = RSigned(x)
91-
(::Type{RInteger})(x::Unsigned) = RUnsigned(x)
92-
93-
# Basic conversions
94-
# @inline Base.convert{T<:RSigned}(::Type{T}, x::T) = x
95-
# @inline Base.convert{T<:RUnsigned}(::Type{T}, x::T) = x
96-
@inline Base.convert{T<:RInteger}(::Type{T}, x::T) = x
97-
@inline Base.convert{T<:RInteger}(::Type{T}, x::RInteger) =
98-
RInteger(convert(itype(T), Integer(x)))
99-
@inline Base.convert{T<:RInteger}(::Type{T}, x::Integer) = RInteger(convert(itype(T), x))
100-
@inline Base.convert{T<:RInteger}(::Type{T}, x::AbstractFloat) =
101-
RInteger(round(itype(T), x))
102-
@inline Base.convert{T<:RInteger}(::Type{T}, x::Number) =
103-
convert(T, convert(itype(T), x))
104-
105-
@inline Base.convert{T<:Number}(::Type{T}, x::RInteger) = convert(T, Integer(x))
106-
107-
# Resolve ambiguities
108-
Base.convert(::Type{Integer}, x::RInteger) = Integer(x)
109-
Base.convert(::Type{BigInt}, x::RInteger) = convert(BigInt, Integer(x))
110-
Base.convert{T<:RInteger}(::Type{T}, x::BigInt) = RInteger(convert(itype(T), x))
111-
Base.convert(::Type{BigFloat}, x::RInteger) = convert(BigFloat, Integer(x))
112-
Base.convert{T<:RInteger}(::Type{T}, x::BigFloat) = RInteger(convert(itype(T), x))
113-
Base.convert{T<:Real}(::Type{Complex{T}}, x::RInteger) = convert(Complex{T}, Integer(x))
114-
Base.convert{T<:RInteger}(::Type{T}, z::Complex) = RInteger(convert(itype(T), z))
115-
Base.convert(::Type{Complex}, x::RInteger) = Complex(x)
116-
Base.convert{T<:RInteger}(::Type{T}, x::Rational) = RInteger(convert(itype(T)), x)
117-
Base.convert{T<:Integer}(::Type{Rational{T}}, x::RInteger) =
118-
convert(Rational{T}, Integer(x))
119-
Base.convert(::Type{Rational}, x::RInteger) = convert(Rational{typeof(x)}, x)
120-
Base.convert(::Type{Float16}, x::RInteger) = convert(Float16, Integer(x))
121-
Base.convert{T<:RInteger}(::Type{T}, x::Float16) = RInteger(convert(itype(T), x))
122-
Base.convert(::Type{Bool}, x::RInteger) = convert(Bool, Integer(x))
67+
68+
Base.Signed(x::RSigned) = reinterpret(itype(x), x)
69+
Base.Unsigned(x::RUnsigned) = reinterpret(itype(x), x)
70+
RSigned(x::Signed) = reinterpret(rtype(x), x)
71+
RUnsigned(x::Unsigned) = reinterpret(rtype(x), x)
72+
Base.Integer(x::RSigned) = Signed(x)
73+
Base.Integer(x::RUnsigned) = Unsigned(x)
74+
RInteger(x::Signed) = RSigned(x)
75+
RInteger(x::Unsigned) = RUnsigned(x)
76+
77+
Base.AbstractFloat(x::RInteger) = AbstractFloat(Integer(x))
78+
79+
RInt8(x::Int8) = reinterpret(RInt8, x)
80+
RUInt8(x::UInt8) = reinterpret(RUInt8, x)
81+
RInt16(x::Int16) = reinterpret(RInt16, x)
82+
RUInt16(x::UInt16) = reinterpret(RUInt16, x)
83+
RInt32(x::Int32) = reinterpret(RInt32, x)
84+
RUInt32(x::UInt32) = reinterpret(RUInt32, x)
85+
RInt64(x::Int64) = reinterpret(RInt64, x)
86+
RUInt64(x::UInt64) = reinterpret(RUInt64, x)
87+
RInt128(x::Int128) = reinterpret(RInt128, x)
88+
RUInt128(x::UInt128) = reinterpret(RUInt128, x)
89+
90+
(::Type{R})(x::Integer) where R<:RInteger = R(convert(itype(R), x))
91+
(::Type{R})(x::Float16) where R<:RInteger = R(round(itype(R), x))
92+
(::Type{R})(x::BigFloat) where R<:RInteger = R(round(itype(R), x))
93+
(::Type{R})(x::Rational) where R<:RInteger = R(round(itype(R), x))
94+
(::Type{R})(x::Complex) where R<:RInteger = R(round(itype(R), x))
95+
(::Type{R})(x::AbstractFloat) where R<:RInteger = R(round(itype(R), x))
96+
97+
@inline Base.convert(::Type{T}, x::RInteger) where {T<:Number} = convert(T, Integer(x))
12398

12499
# rem conversions
125-
@inline Base.rem{T<:RInteger}(x::T, ::Type{T}) = T
126-
@inline Base.rem{T<:RInteger}(x::Integer, ::Type{T}) = RInteger(rem(x, itype(T)))
100+
@inline Base.rem(x::T, ::Type{T}) where {T<:RInteger} = T
101+
@inline Base.rem(x::Integer, ::Type{T}) where {T<:RInteger} = RInteger(rem(x, itype(T)))
127102
# ambs
128-
@inline Base.rem{T<:RInteger}(x::BigInt, ::Type{T}) = error("no rounding BigInt available")
103+
@inline Base.rem(x::BigInt, ::Type{T}) where {T<:RInteger} = error("no rounding BigInt available")
129104

130105

131106
Base.flipsign(x::RSigned, y::RSigned) = RInteger(flipsign(Integer(x), Integer(y)))
@@ -137,6 +112,8 @@ Base.count_ones(x::RInteger) = count_ones(Integer(x))
137112
Base.leading_zeros(x::RInteger) = leading_zeros(Integer(x))
138113
Base.trailing_zeros(x::RInteger) = trailing_zeros(Integer(x))
139114
Base.ndigits0z(x::RInteger) = Base.ndigits0z(Integer(x))
115+
Base.ndigits0zpb(x::RSigned, b::Integer) = Base.ndigits0zpb(abs(Integer(x)), Int(b))
116+
Base.ndigits0zpb(x::RUnsigned, b::Integer) = Base.ndigits0zpb(Integer(x), Int(b))
140117

141118
# A few operations preserve the type
142119
-(x::RInteger) = RInteger(-Integer(x))
@@ -153,23 +130,22 @@ Base.ndigits0z(x::RInteger) = Base.ndigits0z(Integer(x))
153130
>>>(x::RInteger, y::Int) = RInteger(Integer(x) >>> y)
154131
<<(x::RInteger, y::Int) = RInteger(Integer(x) << y)
155132

156-
+{T<:RInteger}(x::T, y::T) = RInteger(Integer(x) + Integer(y))
157-
-{T<:RInteger}(x::T, y::T) = RInteger(Integer(x) - Integer(y))
158-
*{T<:RInteger}(x::T, y::T) = RInteger(Integer(x) * Integer(y))
159-
(&){T<:RInteger}(x::T, y::T) = RInteger(Integer(x) & Integer(y))
160-
(|){T<:RInteger}(x::T, y::T) = RInteger(Integer(x) | Integer(y))
161-
# ($){T<:RInteger}(x::T, y::T) = RInteger(Integer(x) $ Integer(y))
162-
Compat.xor{T<:RInteger}(x::T, y::T) = RInteger(xor(Integer(x), Integer(y)))
133+
+(x::T, y::T) where {T<:RInteger} = RInteger(Integer(x) + Integer(y))
134+
-(x::T, y::T) where {T<:RInteger} = RInteger(Integer(x) - Integer(y))
135+
*(x::T, y::T) where {T<:RInteger} = RInteger(Integer(x) * Integer(y))
136+
(&)(x::T, y::T) where {T<:RInteger} = RInteger(Integer(x) & Integer(y))
137+
(|)(x::T, y::T) where {T<:RInteger} = RInteger(Integer(x) | Integer(y))
138+
xor(x::T, y::T) where {T<:RInteger} = RInteger(xor(Integer(x), Integer(y)))
163139

164-
Base.rem{T<:RInteger}(x::T, y::T) = RInteger(rem(Integer(x), Integer(y)))
165-
Base.mod{T<:RInteger}(x::T, y::T) = RInteger(mod(Integer(x), Integer(y)))
140+
Base.rem(x::T, y::T) where {T<:RInteger} = RInteger(rem(Integer(x), Integer(y)))
141+
Base.mod(x::T, y::T) where {T<:RInteger} = RInteger(mod(Integer(x), Integer(y)))
166142

167143
Base.unsigned(x::RSigned) = RInteger(unsigned(Integer(x)))
168144
Base.signed(x::RSigned) = RInteger(signed(Integer(x)))
169145

170146
# traits
171-
Base.typemin{T<:RInteger}(::Type{T}) = RInteger(typemin(itype(T)))
172-
Base.typemax{T<:RInteger}(::Type{T}) = RInteger(typemax(itype(T)))
173-
Base.widen{T<:RInteger}(::Type{T}) = rtype(widen(itype(T)))
147+
Base.typemin(::Type{T}) where {T<:RInteger} = RInteger(typemin(itype(T)))
148+
Base.typemax(::Type{T}) where {T<:RInteger} = RInteger(typemax(itype(T)))
149+
Base.widen(::Type{T}) where {T<:RInteger} = rtype(widen(itype(T)))
174150

175151
end # module

test/runtests.jl

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
1-
using Compat, Base.Test
2-
if VERSION < v"0.6.0-pre.alpha.229"
3-
using RoundingIntegers
4-
@test isempty(detect_ambiguities(Base, Core, RoundingIntegers))
5-
else
6-
ambs0 = detect_ambiguities(Base, Core, Compat)
7-
using RoundingIntegers
8-
ambs1 = detect_ambiguities(Base, Core, Compat, RoundingIntegers)
9-
@test isempty(setdiff(ambs1, ambs0))
10-
end
1+
using Test
2+
using RoundingIntegers
3+
@test isempty(detect_ambiguities(Base, Core, RoundingIntegers))
114

125
@testset "Basics" begin
136
r16 = RInt16(3)
@@ -62,7 +55,7 @@ end
6255
@test !signbit(r)
6356
@test copysign(r, r) === r
6457
@test unsigned(r) === RUInt(5)
65-
@test hex(r) == "5"
58+
@test string(r, base=16) == "5"
6659

6760
@test string(RInt(7.2)) == "7"
6861
end

0 commit comments

Comments
 (0)