@@ -5,47 +5,46 @@ using Test
5
5
6
6
@testset " Constructing intervals" begin
7
7
# Naive constructors, with no conversion involved
8
- @test Interval (1.0 ) ≛ Interval ( Interval ( 1.0 )) ≛ Interval {Float64} ( Interval (1.0 ))
9
- @test Interval ( 1 ) ≛ Interval ( 1.0 , 1.0 )
10
- @test size (Interval (1 )) == () # Match the `size` behaviour of `Number`
11
- @test Interval (big (1 )) ≛ Interval (1.0 , 1.0 )
12
- @test_broken Interval (1 // 10 ) ≛ Interval {Rational{Int}} (1 // 10 , 1 // 10 )
13
- @test_broken Interval (BigInt (1 )// 10 ) ≛ Interval {Rational{BigInt}} (1 // 10 , 1 // 10 )
14
- @test Interval ( (1.0 , 2.0 ) ) ≛ Interval (1.0 , 2.0 )
15
- @test_broken Interval { Rational{Int}} ( 1 ) ≛ Interval (1 // 1 )
16
- @test Interval {BigFloat} ( 1 ) ≛ Interval {BigFloat} (big (1.0 ), big (1.0 ))
8
+ @test Interval {Float64} (1.0 , 1.0 ) ≛ interval ( 1 ) ≛ interval ( interval (1.0 )) ≛
9
+ interval (Float64, interval ( 1.0 ) )
10
+ @test size (interval (1 )) == () # Match the `size` behaviour of `Number`
11
+ @test interval (big (1 )) ≛ Interval {Float64} (1.0 , 1.0 )
12
+ @test_broken interval (1 // 10 ) ≛ Interval {Rational{Int}} (1 // 10 , 1 // 10 )
13
+ @test_broken interval (BigInt (1 )// 10 ) ≛ Interval {Rational{BigInt}} (1 // 10 , 1 // 10 )
14
+ @test interval ( (1.0 , 2.0 ) ) ≛ Interval {Float64} (1.0 , 2.0 )
15
+ @test_broken interval ( Rational{Int}, 1 ) ≛ interval (1 // 1 )
16
+ @test interval (BigFloat, 1 ) ≛ Interval {BigFloat} (big (1.0 ), big (1.0 ))
17
17
18
18
# Irrational
19
19
for irr in (π, ℯ)
20
20
@test @interval (- irr, irr). hi == (- irr.. irr). hi
21
- @test 0 .. irr ≛ hull (interval (0 ), Interval {Float64} ( irr))
21
+ @test 0 .. irr ≛ hull (interval (0 ), interval (Float64, irr))
22
22
@test (1.2 .. irr). hi == @interval (1.2 , irr). hi
23
- @test irr.. irr ≛ Interval {Float64} (irr)
24
- @test Interval (irr) ≛ @interval (irr)
25
- @test Interval (irr, irr) ≛ Interval (irr)
26
- @test Interval {Float32} (irr, irr) ≛ Interval {Float32} (irr)
23
+ @test irr.. irr ≛ interval (Float64, irr)
24
+ @test interval (irr) ≛ @interval (irr) ≛ interval (irr, irr)
25
+ @test Interval {Float32} (irr, irr) ≛ interval (Float32, irr)
27
26
end
28
27
29
- @test_broken ℯ.. big (4 ) ≛ hull (Interval {BigFloat} ( π), interval (4 ))
30
- @test π.. big (4 ) ≛ hull (Interval {BigFloat} ( π), interval (4 ))
28
+ @test_broken ℯ.. big (4 ) ≛ hull (interval (BigFloat, π), interval (4 ))
29
+ @test π.. big (4 ) ≛ hull (interval (BigFloat, π), interval (4 ))
31
30
32
- @test ℯ.. pi ≛ hull (@interval (ℯ), Interval {Float64} ( π))
33
- @test big (ℯ) in Interval (ℯ, π)
34
- @test big (π) in Interval (ℯ, π)
35
- @test big (ℯ) in Interval (0 , ℯ)
36
- @test big (π) in Interval (π, 4 )
31
+ @test ℯ.. pi ≛ hull (@interval (ℯ), interval (Float64, π))
32
+ @test big (ℯ) in interval (ℯ, π)
33
+ @test big (π) in interval (ℯ, π)
34
+ @test big (ℯ) in interval (0 , ℯ)
35
+ @test big (π) in interval (π, 4 )
37
36
38
37
@test big (ℯ) in Interval {Float32} (ℯ, π)
39
38
@test big (π) in Interval {Float32} (ℯ, π)
40
39
@test big (ℯ) in Interval {Float32} (0 , ℯ)
41
40
@test big (π) in Interval {Float32} (π, 4 )
42
41
43
- @test interval (Interval ( pi )) ≛ Interval ( pi )
44
- @test interval (Interval (NaN , - Inf )) ≛ emptyinterval ()
42
+ @test interval (interval (π )) ≛ interval (π )
43
+ @test interval (Interval {Float64} (NaN , - Inf )) ≛ emptyinterval ()
45
44
46
45
# a < Inf and b > -Inf
47
- @test @interval (" 1e300" ) ≛ Interval (9.999999999999999e299 , 1.0e300 )
48
- @test @interval (" -1e307" ) ≛ Interval (- 1.0000000000000001e307 , - 1.0e307 )
46
+ @test @interval (" 1e300" ) ≛ Interval {Float64} (9.999999999999999e299 , 1.0e300 )
47
+ @test @interval (" -1e307" ) ≛ Interval {Float64} (- 1.0000000000000001e307 , - 1.0e307 )
49
48
50
49
# Disallowed construction with a > b
51
50
@test_logs (:warn ,) @test isempty (@interval (2 , 1 ))
@@ -58,15 +57,15 @@ using Test
58
57
@test_logs (:warn ,) @test isempty (interval (Inf , Inf ))
59
58
60
59
# Conversion to Interval without type
61
- @test convert (Interval, 1 ) ≛ Interval ( 1.0 )
62
- @test convert (Interval, pi ) ≛ @interval ( pi )
63
- @test convert (Interval, ℯ) ≛ @interval ( ℯ)
64
- @test convert (Interval, BigInt ( 1 )) ≛ Interval ( BigInt (1 ))
65
- @test convert (Interval, 1 // 10 ) ≛ @interval ( 1 // 10 )
66
- @test convert (Interval, Interval (0.1 , 0.2 )) === Interval (0.1 , 0.2 )
60
+ @test_throws MethodError convert (Interval, 1 )
61
+ @test_throws MethodError convert (Interval, π )
62
+ @test_throws MethodError convert (Interval, ℯ)
63
+ @test_throws MethodError convert (Interval, BigInt (1 ))
64
+ @test_throws MethodError convert (Interval, 1 // 10 )
65
+ @test convert (Interval, Interval {Float64} (0.1 , 0.2 )) === Interval {Float64} (0.1 , 0.2 )
67
66
68
67
a = @interval (0.1 )
69
- b = @interval (pi )
68
+ b = @interval (π )
70
69
71
70
@test @floatinterval (" 0.1" ) ⊆ a
72
71
@test typeof (a) == Interval{Float64}
@@ -89,17 +88,17 @@ using Test
89
88
# TODO Actually use the rounding mode here
90
89
for rounding in (:wide , :narrow )
91
90
a = @interval (0.1 , 0.2 )
92
- @test a ⊆ Interval (0.09999999999999999 , 0.20000000000000004 )
91
+ @test a ⊆ interval (0.09999999999999999 , 0.20000000000000004 )
93
92
94
93
b = @interval (0.1 )
95
- @test b ⊆ Interval (0.09999999999999999 , 0.10000000000000002 )
96
- @test b ⊆ Interval (0.09999999999999999 , 0.20000000000000004 )
94
+ @test b ⊆ interval (0.09999999999999999 , 0.10000000000000002 )
95
+ @test b ⊆ interval (0.09999999999999999 , 0.20000000000000004 )
97
96
@test float (b) ⊆ a
98
97
99
98
c = @interval (" 0.1" , " 0.2" )
100
99
@test c ⊆ a # c is narrower than a
101
- @test Interval (1 // 2 ) ≛ Interval (0.5 )
102
- @test_broken Interval (1 // 10 ). lo == rationalize (0.1 )
100
+ @test interval (1 // 2 ) ≛ interval (0.5 )
101
+ @test_broken interval (1 // 10 ). lo == rationalize (0.1 )
103
102
end
104
103
105
104
@test string (emptyinterval ()) == " ∅"
@@ -116,13 +115,13 @@ end
116
115
@test typeof (a)== Interval{Float64}
117
116
@test typeof (big (a)) == Interval{BigFloat}
118
117
119
- @test @floatinterval (123412341234123412341241234 ) ≛ Interval (1.234123412341234e26 , 1.2341234123412342e26 )
118
+ @test @floatinterval (123412341234123412341241234 ) ≛ interval (1.234123412341234e26 , 1.2341234123412342e26 )
120
119
@test @interval (big " 3" ) ≛ @floatinterval (3 )
121
120
122
- @test @floatinterval (big " 1e10000" ) ≛ Interval (prevfloat (∞), ∞)
121
+ @test @floatinterval (big " 1e10000" ) ≛ interval (prevfloat (∞), ∞)
123
122
124
123
a = big (10 )^ 10000
125
- @test @floatinterval (a) ≛ Interval (prevfloat (∞), ∞)
124
+ @test @floatinterval (a) ≛ interval (prevfloat (∞), ∞)
126
125
end
127
126
128
127
#=
@@ -147,11 +146,11 @@ end
147
146
@test_logs (:warn , ) @test isempty (4 .. π)
148
147
@test_logs (:warn , ) @test isempty (NaN .. 3 )
149
148
@test_logs (:warn , ) @test isempty (3 .. NaN )
150
- @test 1 .. π ≛ Interval (1 , π)
149
+ @test 1 .. π ≛ Interval {Float64} (1 , π)
151
150
end
152
151
153
152
@testset " ± tests" begin
154
- @test 3 ± 1 ≛ Interval (2.0 , 4.0 )
153
+ @test 3 ± 1 ≛ Interval {Float64} (2.0 , 4.0 )
155
154
@test 3 ± 0.5 ≛ 2.5 .. 3.5
156
155
@test 3 ± 0.1 ≛ 2.9 .. 3.1
157
156
@test 0.5 ± 1 ≛ - 0.5 .. 1.5
169
168
end
170
169
171
170
@testset " Promotion between intervals" begin
172
- x = Interval {Float64} ( π)
173
- y = Interval {BigFloat} ( π)
171
+ x = interval (Float64, π)
172
+ y = interval (BigFloat, π)
174
173
x_, y_ = promote (x, y)
175
174
176
175
@test promote_type (typeof (x), typeof (y)) == Interval{BigFloat}
185
184
@test typeof (@interval Float16 1 2 ) == Interval{Float16}
186
185
187
186
# PR 496
188
- @test eltype (Interval (1 , 2 )) == Interval{Float64}
189
- @test IntervalArithmetic. numtype (Interval (1 , 2 )) == Float64
190
- @test all ([1 2 ; 3 4 ] * Interval (- 1 , 1 ) .≛ [- 1 .. 1 - 2 .. 2 ;- 3 .. 3 - 4 .. 4 ])
187
+ @test eltype (interval (1 , 2 )) == Interval{Float64}
188
+ @test IntervalArithmetic. numtype (interval (1 , 2 )) == Float64
189
+ @test all ([1 2 ; 3 4 ] * interval (- 1 , 1 ) .≛ [- 1 .. 1 - 2 .. 2 ;- 3 .. 3 - 4 .. 4 ])
191
190
192
191
@test eltype (IntervalBox (1 .. 2 , 2 .. 3 )) == Interval{Float64}
193
192
@test IntervalArithmetic. numtype (IntervalBox (1 .. 2 , 2 .. 3 )) == Float64
@@ -200,19 +199,19 @@ end
200
199
a = convert (Interval{Float64}, @biginterval (3 , 4 ))
201
200
@test typeof (a) == Interval{Float64}
202
201
203
- pi64, pi32 = Interval {Float64} ( pi ), Interval {Float32} ( pi )
202
+ pi64, pi32 = interval (Float64, pi ), interval (Float32, pi )
204
203
x, y = promote (pi64, pi32)
205
204
@test x ≛ pi64
206
205
@test y ≛ Interval {Float64} (pi32)
207
206
end
208
207
209
208
@testset " Interval{T} constructor" begin
210
- @test Interval {Float64} (1 ) ≛ 1 .. 1
209
+ @test Interval {Float64} (1 , 1 ) ≛ 1 .. 1
211
210
# no rounding
212
- @test Interval {Float64} (1.1 ) ≛ Interval (1.1 , 1.1 )
211
+ @test bounds ( Interval {Float64} (1.1 , 1.1 )) == (1.1 , 1.1 )
213
212
214
- @test Interval {BigFloat} (1 ) ≛ @biginterval (1 , 1 )
215
- @test Interval {BigFloat} (big " 1.1" ) ≛ Interval (big " 1.1" , big " 1.1" )
213
+ @test Interval {BigFloat} (1 , 1 ) ≛ @biginterval (1 , 1 )
214
+ @test bounds ( Interval {BigFloat} (big " 1.1" , big " 1.1 " )) == (big " 1.1" , big " 1.1" )
216
215
end
217
216
218
217
# issue 206:
@@ -221,19 +220,19 @@ end
221
220
222
221
a = I " [2/3, 1.1]"
223
222
b = @interval (" [2/3, 1.1]" )
224
- c = Interval (0.6666666666666666 , 1.1 )
223
+ c = interval (0.6666666666666666 , 1.1 )
225
224
@test a ≛ b
226
225
@test b ≛ c
227
226
228
227
a = I " [1]"
229
228
b = @interval (" [1]" )
230
- c = Interval (1.0 , 1.0 )
229
+ c = interval (1.0 , 1.0 )
231
230
@test a ≛ b
232
231
@test b ≛ c
233
232
234
233
a = I " [-0x1.3p-1, 2/3]"
235
234
b = @interval (" [-0x1.3p-1, 2/3]" )
236
- c = Interval (- 0.59375 , 0.6666666666666667 )
235
+ c = interval (- 0.59375 , 0.6666666666666667 )
237
236
@test a ≛ b
238
237
@test b ≛ c
239
238
end
@@ -254,21 +253,21 @@ end
254
253
end
255
254
256
255
@testset " Interval{T}(x::Interval)" begin
257
- @test Interval {Float64} (3 .. 4 ) ≛ Interval (3.0 , 4.0 )
256
+ @test Interval {Float64} (3 .. 4 ) ≛ Interval {Float64} (3.0 , 4.0 )
258
257
@test Interval {BigFloat} (3 .. 4 ) ≛ Interval {BigFloat} (3 , 4 )
259
258
end
260
259
261
260
@testset " @interval with fields" begin
262
261
a = 3 .. 4
263
262
x = @interval (a. lo, 2 * a. hi)
264
- @test Interval (3 , 8 ) ⊆ x
263
+ @test interval (3 , 8 ) ⊆ x
265
264
end
266
265
267
266
@testset " @interval with user-defined function" begin
268
267
f (x) = x. lo == Inf ? one (x) : x/ (1 + x) # monotonic
269
268
270
269
x = 3 .. 4
271
- @test Interval (0.75 , 0.8 ) ⊆ @interval (f (x. lo), f (x. hi))
270
+ @test interval (0.75 , 0.8 ) ⊆ @interval (f (x. lo), f (x. hi))
272
271
end
273
272
274
273
# issue 192:
0 commit comments