Skip to content

Commit e9a437d

Browse files
committed
Refactor test/ranges.jl range construction
1 parent e32e94e commit e9a437d

File tree

1 file changed

+107
-15
lines changed

1 file changed

+107
-15
lines changed

test/ranges.jl

Lines changed: 107 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,107 @@
44
@test_throws ArgumentError range(start=1, step=1, stop=2, length=10)
55
@test_throws ArgumentError range(start=1, step=1, stop=10, length=11)
66

7-
r = 3.0:2:11
8-
@test r == range(start=first(r), step=step(r), stop=last(r) )
9-
@test r == range(start=first(r), step=step(r), length=length(r))
10-
@test r == range(start=first(r), stop=last(r), length=length(r))
11-
@test r == range( step=step(r), stop=last(r), length=length(r))
7+
@testset "range(; kw...)" begin
8+
r = 3.0:2:11
9+
let start=first(r), stop=last(r), step=step(r), length=length(r)
10+
@test r === range(; start, stop, step )
11+
@test r === range(; start, stop, length)
12+
@test r == range(; stop, step, length)
13+
@test r === range(; start, step, length)
14+
end
1215

13-
r = 4:9
14-
@test r === range(start=first(r), stop=last(r) )
15-
@test r === range(start=first(r), length=length(r))
16-
@test r === range( stop=last(r), length=length(r))
17-
@test r === range(first(r), last(r) )
18-
# the next ones use ==, because it changes the eltype
19-
@test r == range(first(r), last(r), length(r) )
20-
@test r == range(start=first(r), stop=last(r), length=length(r))
16+
r = 4:9
17+
let start=first(r), stop=last(r), step=step(r), length=length(r)
18+
@test r === range(; start, stop )
19+
@test r === range(; stop, length)
20+
@test r === range(; start, length)
21+
# the next ones use ==, because it changes the eltype
22+
@test r == range(; start, stop, length)
23+
@test r == range(; start, step, length)
24+
end
25+
26+
r = 1:5
27+
let start=first(r), step=step(r), stop=last(r), length=length(r)
28+
@test r === range(; start, stop )
29+
@test r === range(; stop, length)
30+
# the next three lines uses ==, because it changes the eltype
31+
@test r == range(; start, stop, length)
32+
@test r == range(; start, step, length)
33+
end
34+
for T = (Int8, Rational{Int16}, UInt32, Float64, Char)
35+
@test typeof(range(start=T(5), length=3)) === typeof(range(stop=T(5), length=3))
36+
end
37+
end
38+
@testset "range(start, stop)" begin
39+
r = 2:11
40+
let start=first(r), stop=last(r), step=step(r), length=length(r)
41+
q = range(start, stop)
42+
@test q === r
43+
@test eltype( range( UInt8(start), UInt8(stop) ) ) == UInt8
44+
@test eltype( range( UInt8(start), BigInt(stop) ) ) == BigInt
45+
@test eltype( range( UInt8(start), Int(stop) ) ) == Int
46+
# One positional argument
47+
@test q === range( start; stop )
48+
@test q === range( start; length)
49+
# Two positional arguments
50+
@test q === range( start, stop )
51+
@test q == range( start, stop; step )
52+
@test q == range( start, stop; length)
53+
# All keyword arguments
54+
@test q === range(; start, stop )
55+
@test q == range(; start, stop, step )
56+
@test q == range(; start, stop, length)
57+
@test q == range(; stop, length)
58+
end
2159

22-
for T = (Int8, Rational{Int16}, UInt32, Float64, Char)
23-
@test typeof(range(start=T(5), length=3)) === typeof(range(stop=T(5), length=3))
60+
r = 2.8:20.0
61+
let start=first(r), stop=last(r), step=step(r), length=length(r)
62+
q = range(start, stop)
63+
@test q === r
64+
# One positional argument
65+
@test q === range( start; stop )
66+
@test q === range( start; length)
67+
# Two positional arguments
68+
@test q === range( start, stop )
69+
@test q == range( start, stop; step )
70+
@test q == range( start, stop; length)
71+
# All keyword arguments
72+
@test q === range(; start, stop )
73+
@test q == range(; start, stop, step )
74+
@test q == range(; start, stop, length)
75+
@test q range(; stop, length)
76+
end
77+
end
78+
@testset "range(start, stop, length)" begin
79+
r = 3:12
80+
let start=first(r), stop=last(r), step=step(r), length=length(r)
81+
q = range(start, stop, length)
82+
@test q == r
83+
# One positional argument
84+
@test q == range( start; stop )
85+
@test q == range( start; length)
86+
# Two positional arguments
87+
@test q == range( start, stop )
88+
@test q == range( start, stop; step )
89+
@test q == range( start, stop; length)
90+
# All keyword arguments
91+
@test q == range(; start, stop )
92+
@test q == range(; start, stop, step )
93+
@test q == range(; start, stop, length)
94+
@test q == range(; stop, length)
95+
end
96+
97+
r = 3.5:0.5:12.5
98+
let start=first(r), stop=last(r), step=step(r), length=length(r)
99+
q = range(start, stop, length)
100+
@test q == r
101+
# Two positional arguments
102+
@test q == range( start, stop; step )
103+
@test q == range( start, stop; length)
104+
# All keyword arguments
105+
@test q == range(; start, stop, step )
106+
@test q == range(; start, stop, length)
107+
end
24108
end
25109
end
26110

@@ -1448,10 +1532,18 @@ end
14481532

14491533
@testset "Bad range calls" begin
14501534
@test_throws ArgumentError range(1)
1535+
@test_throws ArgumentError range(1.1)
14511536
@test_throws ArgumentError range(nothing)
14521537
@test_throws ArgumentError range(1, step=4)
14531538
@test_throws ArgumentError range(nothing, length=2)
1539+
@test_throws ArgumentError range(; step=1, length=6)
1540+
@test_throws ArgumentError range(; step=2, stop=7.5)
14541541
@test_throws ArgumentError range(1.0, step=0.25, stop=2.0, length=5)
1542+
@test_throws ArgumentError range(; stop=5.5)
1543+
@test_throws ArgumentError range(; stop=nothing)
1544+
@test_throws ArgumentError range(; length=7)
1545+
@test_throws ArgumentError range(; length=nothing)
1546+
@test_throws TypeError range(; length=5.5)
14551547
end
14561548

14571549
@testset "issue #23300#issuecomment-371575548" begin

0 commit comments

Comments
 (0)