#=
 Copyright 2013 - 2015 Marco Nehmeier (nehmeier@informatik.uni-wuerzburg.de)
 Copyright 2015 Oliver Heimlich (oheim@posteo.de)

 Original author: Marco Nehmeier (unit tests in libieeep1788)
 Converted into portable ITL format by Oliver Heimlich with minor corrections.

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
=#
#Language imports

#Test library imports
using Base.Test

#Arithmetic library imports
using IntervalArithmetic

#Preamble
setprecision(53)
setprecision(Interval, Float64)
setrounding(Interval, :tight)
# Set full format, and show decorations
@format full

@testset "minimal_pos_test" begin
    @test +Interval(1.0, 2.0) == Interval(1.0, 2.0)
    @test +∅ == ∅
    @test +entireinterval(Float64) == entireinterval(Float64)
    @test +Interval(1.0, Inf) == Interval(1.0, Inf)
    @test +Interval(-Inf, -1.0) == Interval(-Inf, -1.0)
    @test +Interval(0.0, 2.0) == Interval(0.0, 2.0)
    @test +Interval(-0.0, 2.0) == Interval(0.0, 2.0)
    @test +Interval(-2.5, -0.0) == Interval(-2.5, 0.0)
    @test +Interval(-2.5, 0.0) == Interval(-2.5, 0.0)
    @test +Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test +Interval(0.0, 0.0) == Interval(0.0, 0.0)
end

@testset "minimal_pos_dec_test" begin
    @test +DecoratedInterval(∅, trv) == DecoratedInterval(∅, trv)
    @test decoration(+DecoratedInterval(∅, trv)) == decoration(DecoratedInterval(∅, trv))
    @test +DecoratedInterval(entireinterval(Float64), def) == DecoratedInterval(entireinterval(Float64), def)
    @test decoration(+DecoratedInterval(entireinterval(Float64), def)) == decoration(DecoratedInterval(entireinterval(Float64), def))
    @test +DecoratedInterval(Interval(1.0, 2.0), com) == DecoratedInterval(Interval(1.0, 2.0), com)
    @test decoration(+DecoratedInterval(Interval(1.0, 2.0), com)) == decoration(DecoratedInterval(Interval(1.0, 2.0), com))
end

@testset "minimal_neg_test" begin
    @test -(Interval(1.0, 2.0)) == Interval(-2.0, -1.0)
    @test -(∅) == ∅
    @test -(entireinterval(Float64)) == entireinterval(Float64)
    @test -(Interval(1.0, Inf)) == Interval(-Inf, -1.0)
    @test -(Interval(-Inf, 1.0)) == Interval(-1.0, Inf)
    @test -(Interval(0.0, 2.0)) == Interval(-2.0, 0.0)
    @test -(Interval(-0.0, 2.0)) == Interval(-2.0, 0.0)
    @test -(Interval(-2.0, 0.0)) == Interval(0.0, 2.0)
    @test -(Interval(-2.0, -0.0)) == Interval(0.0, 2.0)
    @test -(Interval(0.0, -0.0)) == Interval(0.0, 0.0)
    @test -(Interval(-0.0, -0.0)) == Interval(0.0, 0.0)
end

@testset "minimal_neg_dec_test" begin
    @test -(DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(-(DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test -(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(entireinterval(Float64), def)
    @test decoration(-(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(entireinterval(Float64), def))
    @test -(DecoratedInterval(Interval(1.0, 2.0), com)) == DecoratedInterval(Interval(-2.0, -1.0), com)
    @test decoration(-(DecoratedInterval(Interval(1.0, 2.0), com))) == decoration(DecoratedInterval(Interval(-2.0, -1.0), com))
end

@testset "minimal_add_test" begin
    @test ∅ + ∅ == ∅
    @test Interval(-1.0, 1.0) + ∅ == ∅
    @test ∅ + Interval(-1.0, 1.0) == ∅
    @test ∅ + entireinterval(Float64) == ∅
    @test entireinterval(Float64) + ∅ == ∅
    @test entireinterval(Float64) + Interval(-Inf, 1.0) == entireinterval(Float64)
    @test entireinterval(Float64) + Interval(-1.0, 1.0) == entireinterval(Float64)
    @test entireinterval(Float64) + Interval(-1.0, Inf) == entireinterval(Float64)
    @test entireinterval(Float64) + entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-Inf, 1.0) + entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-1.0, 1.0) + entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-1.0, Inf) + entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-Inf, 2.0) + Interval(-Inf, 4.0) == Interval(-Inf, 6.0)
    @test Interval(-Inf, 2.0) + Interval(3.0, 4.0) == Interval(-Inf, 6.0)
    @test Interval(-Inf, 2.0) + Interval(3.0, Inf) == entireinterval(Float64)
    @test Interval(1.0, 2.0) + Interval(-Inf, 4.0) == Interval(-Inf, 6.0)
    @test Interval(1.0, 2.0) + Interval(3.0, 4.0) == Interval(4.0, 6.0)
    @test Interval(1.0, 2.0) + Interval(3.0, Inf) == Interval(4.0, Inf)
    @test Interval(1.0, Inf) + Interval(-Inf, 4.0) == entireinterval(Float64)
    @test Interval(1.0, Inf) + Interval(3.0, 4.0) == Interval(4.0, Inf)
    @test Interval(1.0, Inf) + Interval(3.0, Inf) == Interval(4.0, Inf)
    @test Interval(1.0, 0x1.fffffffffffffp1023) + Interval(3.0, 4.0) == Interval(4.0, Inf)
    @test Interval(-0x1.fffffffffffffp1023, 2.0) + Interval(-3.0, 4.0) == Interval(-Inf, 6.0)
    @test Interval(-0x1.fffffffffffffp1023, 2.0) + Interval(-3.0, 0x1.fffffffffffffp1023) == entireinterval(Float64)
    @test Interval(1.0, 0x1.fffffffffffffp1023) + Interval(0.0, 0.0) == Interval(1.0, 0x1.fffffffffffffp1023)
    @test Interval(1.0, 0x1.fffffffffffffp1023) + Interval(-0.0, -0.0) == Interval(1.0, 0x1.fffffffffffffp1023)
    @test Interval(0.0, 0.0) + Interval(-3.0, 4.0) == Interval(-3.0, 4.0)
    @test Interval(-0.0, -0.0) + Interval(-3.0, 0x1.fffffffffffffp1023) == Interval(-3.0, 0x1.fffffffffffffp1023)
    @test Interval(0x1.ffffffffffffp+0, 0x1.ffffffffffffp+0) + Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4) == Interval(0x1.0ccccccccccc4p+1, 0x1.0ccccccccccc5p+1)
    @test Interval(0x1.ffffffffffffp+0, 0x1.ffffffffffffp+0) + Interval(-0x1.999999999999ap-4, -0x1.999999999999ap-4) == Interval(0x1.e666666666656p+0, 0x1.e666666666657p+0)
    @test Interval(-0x1.ffffffffffffp+0, 0x1.ffffffffffffp+0) + Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4) == Interval(-0x1.e666666666657p+0, 0x1.0ccccccccccc5p+1)
end

@testset "minimal_add_dec_test" begin
    @test DecoratedInterval(Interval(1.0, 2.0), com) + DecoratedInterval(Interval(5.0, 7.0), com) == DecoratedInterval(Interval(6.0, 9.0), com)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), com) + DecoratedInterval(Interval(5.0, 7.0), com)) == decoration(DecoratedInterval(Interval(6.0, 9.0), com))
    @test DecoratedInterval(Interval(1.0, 2.0), com) + DecoratedInterval(Interval(5.0, 7.0), def) == DecoratedInterval(Interval(6.0, 9.0), def)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), com) + DecoratedInterval(Interval(5.0, 7.0), def)) == decoration(DecoratedInterval(Interval(6.0, 9.0), def))
    @test DecoratedInterval(Interval(1.0, 2.0), com) + DecoratedInterval(Interval(5.0, 0x1.fffffffffffffp1023), com) == DecoratedInterval(Interval(6.0, Inf), dac)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), com) + DecoratedInterval(Interval(5.0, 0x1.fffffffffffffp1023), com)) == decoration(DecoratedInterval(Interval(6.0, Inf), dac))
    @test DecoratedInterval(Interval(-0x1.fffffffffffffp1023, 2.0), com) + DecoratedInterval(Interval(-0.1, 5.0), com) == DecoratedInterval(Interval(-Inf, 7.0), dac)
    @test decoration(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, 2.0), com) + DecoratedInterval(Interval(-0.1, 5.0), com)) == decoration(DecoratedInterval(Interval(-Inf, 7.0), dac))
    @test DecoratedInterval(Interval(1.0, 2.0), trv) + DecoratedInterval(∅, trv) == DecoratedInterval(∅, trv)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), trv) + DecoratedInterval(∅, trv)) == decoration(DecoratedInterval(∅, trv))
end

@testset "minimal_sub_test" begin
    @test ∅ - ∅ == ∅
    @test Interval(-1.0, 1.0) - ∅ == ∅
    @test ∅ - Interval(-1.0, 1.0) == ∅
    @test ∅ - entireinterval(Float64) == ∅
    @test entireinterval(Float64) - ∅ == ∅
    @test entireinterval(Float64) - Interval(-Inf, 1.0) == entireinterval(Float64)
    @test entireinterval(Float64) - Interval(-1.0, 1.0) == entireinterval(Float64)
    @test entireinterval(Float64) - Interval(-1.0, Inf) == entireinterval(Float64)
    @test entireinterval(Float64) - entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-Inf, 1.0) - entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-1.0, 1.0) - entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-1.0, Inf) - entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-Inf, 2.0) - Interval(-Inf, 4.0) == entireinterval(Float64)
    @test Interval(-Inf, 2.0) - Interval(3.0, 4.0) == Interval(-Inf, -1.0)
    @test Interval(-Inf, 2.0) - Interval(3.0, Inf) == Interval(-Inf, -1.0)
    @test Interval(1.0, 2.0) - Interval(-Inf, 4.0) == Interval(-3.0, Inf)
    @test Interval(1.0, 2.0) - Interval(3.0, 4.0) == Interval(-3.0, -1.0)
    @test Interval(1.0, 2.0) - Interval(3.0, Inf) == Interval(-Inf, -1.0)
    @test Interval(1.0, Inf) - Interval(-Inf, 4.0) == Interval(-3.0, Inf)
    @test Interval(1.0, Inf) - Interval(3.0, 4.0) == Interval(-3.0, Inf)
    @test Interval(1.0, Inf) - Interval(3.0, Inf) == entireinterval(Float64)
    @test Interval(1.0, 0x1.fffffffffffffp1023) - Interval(-3.0, 4.0) == Interval(-3.0, Inf)
    @test Interval(-0x1.fffffffffffffp1023, 2.0) - Interval(3.0, 4.0) == Interval(-Inf, -1.0)
    @test Interval(-0x1.fffffffffffffp1023, 2.0) - Interval(-0x1.fffffffffffffp1023, 4.0) == entireinterval(Float64)
    @test Interval(1.0, 0x1.fffffffffffffp1023) - Interval(0.0, 0.0) == Interval(1.0, 0x1.fffffffffffffp1023)
    @test Interval(1.0, 0x1.fffffffffffffp1023) - Interval(-0.0, -0.0) == Interval(1.0, 0x1.fffffffffffffp1023)
    @test Interval(0.0, 0.0) - Interval(-3.0, 4.0) == Interval(-4.0, 3.0)
    @test Interval(-0.0, -0.0) - Interval(-3.0, 0x1.fffffffffffffp1023) == Interval(-0x1.fffffffffffffp1023, 3.0)
    @test Interval(0x1.ffffffffffffp+0, 0x1.ffffffffffffp+0) - Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4) == Interval(0x1.e666666666656p+0, 0x1.e666666666657p+0)
    @test Interval(0x1.ffffffffffffp+0, 0x1.ffffffffffffp+0) - Interval(-0x1.999999999999ap-4, -0x1.999999999999ap-4) == Interval(0x1.0ccccccccccc4p+1, 0x1.0ccccccccccc5p+1)
    @test Interval(-0x1.ffffffffffffp+0, 0x1.ffffffffffffp+0) - Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4) == Interval(-0x1.0ccccccccccc5p+1, 0x1.e666666666657p+0)
end

@testset "minimal_sub_dec_test" begin
    @test DecoratedInterval(Interval(1.0, 2.0), com) - DecoratedInterval(Interval(5.0, 7.0), com) == DecoratedInterval(Interval(-6.0, -3.0), com)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), com) - DecoratedInterval(Interval(5.0, 7.0), com)) == decoration(DecoratedInterval(Interval(-6.0, -3.0), com))
    @test DecoratedInterval(Interval(1.0, 2.0), com) - DecoratedInterval(Interval(5.0, 7.0), def) == DecoratedInterval(Interval(-6.0, -3.0), def)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), com) - DecoratedInterval(Interval(5.0, 7.0), def)) == decoration(DecoratedInterval(Interval(-6.0, -3.0), def))
    @test DecoratedInterval(Interval(-1.0, 2.0), com) - DecoratedInterval(Interval(5.0, 0x1.fffffffffffffp1023), com) == DecoratedInterval(Interval(-Inf, -3.0), dac)
    @test decoration(DecoratedInterval(Interval(-1.0, 2.0), com) - DecoratedInterval(Interval(5.0, 0x1.fffffffffffffp1023), com)) == decoration(DecoratedInterval(Interval(-Inf, -3.0), dac))
    @test DecoratedInterval(Interval(-0x1.fffffffffffffp1023, 2.0), com) - DecoratedInterval(Interval(-1.0, 5.0), com) == DecoratedInterval(Interval(-Inf, 3.0), dac)
    @test decoration(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, 2.0), com) - DecoratedInterval(Interval(-1.0, 5.0), com)) == decoration(DecoratedInterval(Interval(-Inf, 3.0), dac))
    @test DecoratedInterval(Interval(1.0, 2.0), trv) - DecoratedInterval(∅, trv) == DecoratedInterval(∅, trv)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), trv) - DecoratedInterval(∅, trv)) == decoration(DecoratedInterval(∅, trv))
end

@testset "minimal_mul_test" begin
    @test ∅ * ∅ == ∅
    @test Interval(-1.0, 1.0) * ∅ == ∅
    @test ∅ * Interval(-1.0, 1.0) == ∅
    @test ∅ * entireinterval(Float64) == ∅
    @test entireinterval(Float64) * ∅ == ∅
    @test Interval(0.0, 0.0) * ∅ == ∅
    @test ∅ * Interval(0.0, 0.0) == ∅
    @test Interval(-0.0, -0.0) * ∅ == ∅
    @test ∅ * Interval(-0.0, -0.0) == ∅
    @test entireinterval(Float64) * Interval(0.0, 0.0) == Interval(0.0, 0.0)
    @test entireinterval(Float64) * Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test entireinterval(Float64) * Interval(-5.0, -1.0) == entireinterval(Float64)
    @test entireinterval(Float64) * Interval(-5.0, 3.0) == entireinterval(Float64)
    @test entireinterval(Float64) * Interval(1.0, 3.0) == entireinterval(Float64)
    @test entireinterval(Float64) * Interval(-Inf, -1.0) == entireinterval(Float64)
    @test entireinterval(Float64) * Interval(-Inf, 3.0) == entireinterval(Float64)
    @test entireinterval(Float64) * Interval(-5.0, Inf) == entireinterval(Float64)
    @test entireinterval(Float64) * Interval(1.0, Inf) == entireinterval(Float64)
    @test entireinterval(Float64) * entireinterval(Float64) == entireinterval(Float64)
    @test Interval(1.0, Inf) * Interval(0.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(1.0, Inf) * Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(1.0, Inf) * Interval(-5.0, -1.0) == Interval(-Inf, -1.0)
    @test Interval(1.0, Inf) * Interval(-5.0, 3.0) == entireinterval(Float64)
    @test Interval(1.0, Inf) * Interval(1.0, 3.0) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) * Interval(-Inf, -1.0) == Interval(-Inf, -1.0)
    @test Interval(1.0, Inf) * Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(1.0, Inf) * Interval(-5.0, Inf) == entireinterval(Float64)
    @test Interval(1.0, Inf) * Interval(1.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) * entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-1.0, Inf) * Interval(0.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, Inf) * Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, Inf) * Interval(-5.0, -1.0) == Interval(-Inf, 5.0)
    @test Interval(-1.0, Inf) * Interval(-5.0, 3.0) == entireinterval(Float64)
    @test Interval(-1.0, Inf) * Interval(1.0, 3.0) == Interval(-3.0, Inf)
    @test Interval(-1.0, Inf) * Interval(-Inf, -1.0) == entireinterval(Float64)
    @test Interval(-1.0, Inf) * Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-1.0, Inf) * Interval(-5.0, Inf) == entireinterval(Float64)
    @test Interval(-1.0, Inf) * Interval(1.0, Inf) == entireinterval(Float64)
    @test Interval(-1.0, Inf) * entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-Inf, 3.0) * Interval(0.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(-Inf, 3.0) * Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(-Inf, 3.0) * Interval(-5.0, -1.0) == Interval(-15.0, Inf)
    @test Interval(-Inf, 3.0) * Interval(-5.0, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, 3.0) * Interval(1.0, 3.0) == Interval(-Inf, 9.0)
    @test Interval(-Inf, 3.0) * Interval(-Inf, -1.0) == entireinterval(Float64)
    @test Interval(-Inf, 3.0) * Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, 3.0) * Interval(-5.0, Inf) == entireinterval(Float64)
    @test Interval(-Inf, 3.0) * Interval(1.0, Inf) == entireinterval(Float64)
    @test Interval(-Inf, 3.0) * entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-Inf, -3.0) * Interval(0.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(-Inf, -3.0) * Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(-Inf, -3.0) * Interval(-5.0, -1.0) == Interval(3.0, Inf)
    @test Interval(-Inf, -3.0) * Interval(-5.0, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, -3.0) * Interval(1.0, 3.0) == Interval(-Inf, -3.0)
    @test Interval(-Inf, -3.0) * Interval(-Inf, -1.0) == Interval(3.0, Inf)
    @test Interval(-Inf, -3.0) * Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, -3.0) * Interval(-5.0, Inf) == entireinterval(Float64)
    @test Interval(-Inf, -3.0) * Interval(1.0, Inf) == Interval(-Inf, -3.0)
    @test Interval(-Inf, -3.0) * entireinterval(Float64) == entireinterval(Float64)
    @test Interval(0.0, 0.0) * Interval(0.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) * Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) * Interval(-5.0, -1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) * Interval(-5.0, 3.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) * Interval(1.0, 3.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) * Interval(-Inf, -1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) * Interval(-Inf, 3.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) * Interval(-5.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) * Interval(1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) * entireinterval(Float64) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) * Interval(0.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) * Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) * Interval(-5.0, -1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) * Interval(-5.0, 3.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) * Interval(1.0, 3.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) * Interval(-Inf, -1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) * Interval(-Inf, 3.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) * Interval(-5.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) * Interval(1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) * entireinterval(Float64) == Interval(0.0, 0.0)
    @test Interval(1.0, 5.0) * Interval(0.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(1.0, 5.0) * Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(1.0, 5.0) * Interval(-5.0, -1.0) == Interval(-25.0, -1.0)
    @test Interval(1.0, 5.0) * Interval(-5.0, 3.0) == Interval(-25.0, 15.0)
    @test Interval(1.0, 5.0) * Interval(1.0, 3.0) == Interval(1.0, 15.0)
    @test Interval(1.0, 5.0) * Interval(-Inf, -1.0) == Interval(-Inf, -1.0)
    @test Interval(1.0, 5.0) * Interval(-Inf, 3.0) == Interval(-Inf, 15.0)
    @test Interval(1.0, 5.0) * Interval(-5.0, Inf) == Interval(-25.0, Inf)
    @test Interval(1.0, 5.0) * Interval(1.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, 5.0) * entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-1.0, 5.0) * Interval(0.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, 5.0) * Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, 5.0) * Interval(-5.0, -1.0) == Interval(-25.0, 5.0)
    #min max
    @test Interval(-1.0, 5.0) * Interval(-5.0, 3.0) == Interval(-25.0, 15.0)
    @test Interval(-10.0, 2.0) * Interval(-5.0, 3.0) == Interval(-30.0, 50.0)
    @test Interval(-1.0, 5.0) * Interval(-1.0, 10.0) == Interval(-10.0, 50.0)
    @test Interval(-2.0, 2.0) * Interval(-5.0, 3.0) == Interval(-10.0, 10.0)
    #end min max
    @test Interval(-1.0, 5.0) * Interval(1.0, 3.0) == Interval(-3.0, 15.0)
    @test Interval(-1.0, 5.0) * Interval(-Inf, -1.0) == entireinterval(Float64)
    @test Interval(-1.0, 5.0) * Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-1.0, 5.0) * Interval(-5.0, Inf) == entireinterval(Float64)
    @test Interval(-1.0, 5.0) * Interval(1.0, Inf) == entireinterval(Float64)
    @test Interval(-1.0, 5.0) * entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-10.0, -5.0) * Interval(0.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(-10.0, -5.0) * Interval(-0.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(-10.0, -5.0) * Interval(-5.0, -1.0) == Interval(5.0, 50.0)
    @test Interval(-10.0, -5.0) * Interval(-5.0, 3.0) == Interval(-30.0, 50.0)
    @test Interval(-10.0, -5.0) * Interval(1.0, 3.0) == Interval(-30.0, -5.0)
    @test Interval(-10.0, -5.0) * Interval(-Inf, -1.0) == Interval(5.0, Inf)
    @test Interval(-10.0, -5.0) * Interval(-Inf, 3.0) == Interval(-30.0, Inf)
    @test Interval(-10.0, -5.0) * Interval(-5.0, Inf) == Interval(-Inf, 50.0)
    @test Interval(-10.0, -5.0) * Interval(1.0, Inf) == Interval(-Inf, -5.0)
    @test Interval(-10.0, -5.0) * entireinterval(Float64) == entireinterval(Float64)
    @test Interval(0x1.999999999999ap-4, 0x1.ffffffffffffp+0) * Interval(-0x1.ffffffffffffp+0, Inf) == Interval(-0x1.fffffffffffe1p+1, Inf)
    @test Interval(-0x1.999999999999ap-4, 0x1.ffffffffffffp+0) * Interval(-0x1.ffffffffffffp+0, -0x1.999999999999ap-4) == Interval(-0x1.fffffffffffe1p+1, 0x1.999999999998ep-3)
    @test Interval(-0x1.999999999999ap-4, 0x1.999999999999ap-4) * Interval(-0x1.ffffffffffffp+0, 0x1.999999999999ap-4) == Interval(-0x1.999999999998ep-3, 0x1.999999999998ep-3)
    @test Interval(-0x1.ffffffffffffp+0, -0x1.999999999999ap-4) * Interval(0x1.999999999999ap-4, 0x1.ffffffffffffp+0) == Interval(-0x1.fffffffffffe1p+1, -0x1.47ae147ae147bp-7)
end

@testset "minimal_mul_dec_test" begin
    @test DecoratedInterval(Interval(1.0, 2.0), com) * DecoratedInterval(Interval(5.0, 7.0), com) == DecoratedInterval(Interval(5.0, 14.0), com)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), com) * DecoratedInterval(Interval(5.0, 7.0), com)) == decoration(DecoratedInterval(Interval(5.0, 14.0), com))
    @test DecoratedInterval(Interval(1.0, 2.0), com) * DecoratedInterval(Interval(5.0, 7.0), def) == DecoratedInterval(Interval(5.0, 14.0), def)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), com) * DecoratedInterval(Interval(5.0, 7.0), def)) == decoration(DecoratedInterval(Interval(5.0, 14.0), def))
    @test DecoratedInterval(Interval(1.0, 2.0), com) * DecoratedInterval(Interval(5.0, 0x1.fffffffffffffp1023), com) == DecoratedInterval(Interval(5.0, Inf), dac)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), com) * DecoratedInterval(Interval(5.0, 0x1.fffffffffffffp1023), com)) == decoration(DecoratedInterval(Interval(5.0, Inf), dac))
    @test DecoratedInterval(Interval(-0x1.fffffffffffffp1023, 2.0), com) * DecoratedInterval(Interval(-1.0, 5.0), com) == DecoratedInterval(Interval(-Inf, 0x1.fffffffffffffp1023), dac)
    @test decoration(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, 2.0), com) * DecoratedInterval(Interval(-1.0, 5.0), com)) == decoration(DecoratedInterval(Interval(-Inf, 0x1.fffffffffffffp1023), dac))
    @test DecoratedInterval(Interval(1.0, 2.0), trv) * DecoratedInterval(∅, trv) == DecoratedInterval(∅, trv)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), trv) * DecoratedInterval(∅, trv)) == decoration(DecoratedInterval(∅, trv))
end

@testset "minimal_div_test" begin
    @test ∅ / ∅ == ∅
    @test Interval(-1.0, 1.0) / ∅ == ∅
    @test ∅ / Interval(-1.0, 1.0) == ∅
    @test ∅ / Interval(0.1, 1.0) == ∅
    @test ∅ / Interval(-1.0, -0.1) == ∅
    @test ∅ / entireinterval(Float64) == ∅
    @test entireinterval(Float64) / ∅ == ∅
    @test Interval(0.0, 0.0) / ∅ == ∅
    @test ∅ / Interval(0.0, 0.0) == ∅
    @test Interval(-0.0, -0.0) / ∅ == ∅
    @test ∅ / Interval(-0.0, -0.0) == ∅
    @test entireinterval(Float64) / Interval(-5.0, -3.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(3.0, 5.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(-Inf, -3.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(3.0, Inf) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(0.0, 0.0) == ∅
    @test entireinterval(Float64) / Interval(-0.0, -0.0) == ∅
    @test entireinterval(Float64) / Interval(-3.0, 0.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(-3.0, -0.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(0.0, 3.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(-Inf, 0.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(-0.0, 3.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(-Inf, -0.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(0.0, Inf) == entireinterval(Float64)
    @test entireinterval(Float64) / Interval(-0.0, Inf) == entireinterval(Float64)
    @test entireinterval(Float64) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-30.0, -15.0) / Interval(-5.0, -3.0) == Interval(3.0, 10.0)
    @test Interval(-30.0, -15.0) / Interval(3.0, 5.0) == Interval(-10.0, -3.0)
    @test Interval(-30.0, -15.0) / Interval(-Inf, -3.0) == Interval(0.0, 10.0)
    @test Interval(-30.0, -15.0) / Interval(3.0, Inf) == Interval(-10.0, 0.0)
    @test Interval(-30.0, -15.0) / Interval(0.0, 0.0) == ∅
    @test Interval(-30.0, -15.0) / Interval(-3.0, 0.0) == Interval(5.0, Inf)
    @test Interval(-30.0, -15.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(-30.0, -15.0) / Interval(-3.0, -0.0) == Interval(5.0, Inf)
    @test Interval(-30.0, -15.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-30.0, -15.0) / Interval(0.0, 3.0) == Interval(-Inf, -5.0)
    @test Interval(-30.0, -15.0) / Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(-30.0, -15.0) / Interval(-0.0, 3.0) == Interval(-Inf, -5.0)
    @test Interval(-30.0, -15.0) / Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(-30.0, -15.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-30.0, -15.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-30.0, -15.0) / Interval(0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-30.0, -15.0) / Interval(-0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-30.0, -15.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(-5.0, -3.0) == Interval(-5.0, 10.0)
    @test Interval(-30.0, 15.0) / Interval(3.0, 5.0) == Interval(-10.0, 5.0)
    @test Interval(-30.0, 15.0) / Interval(-Inf, -3.0) == Interval(-5.0, 10.0)
    @test Interval(-30.0, 15.0) / Interval(3.0, Inf) == Interval(-10.0, 5.0)
    @test Interval(-30.0, 15.0) / Interval(0.0, 0.0) == ∅
    @test Interval(-30.0, 15.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(-30.0, 15.0) / Interval(-3.0, 0.0) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(-3.0, -0.0) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(0.0, 3.0) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(-Inf, 0.0) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(-0.0, 3.0) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(-Inf, -0.0) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(0.0, Inf) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / Interval(-0.0, Inf) == entireinterval(Float64)
    @test Interval(-30.0, 15.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(15.0, 30.0) / Interval(-5.0, -3.0) == Interval(-10.0, -3.0)
    @test Interval(15.0, 30.0) / Interval(3.0, 5.0) == Interval(3.0, 10.0)
    @test Interval(15.0, 30.0) / Interval(-Inf, -3.0) == Interval(-10.0, 0.0)
    @test Interval(15.0, 30.0) / Interval(3.0, Inf) == Interval(0.0, 10.0)
    @test Interval(15.0, 30.0) / Interval(0.0, 0.0) == ∅
    @test Interval(15.0, 30.0) / Interval(-3.0, 0.0) == Interval(-Inf, -5.0)
    @test Interval(15.0, 30.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(15.0, 30.0) / Interval(-3.0, -0.0) == Interval(-Inf, -5.0)
    @test Interval(15.0, 30.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(15.0, 30.0) / Interval(0.0, 3.0) == Interval(5.0, Inf)
    @test Interval(15.0, 30.0) / Interval(-Inf, 0.0) == Interval(-Inf, 0.0)
    @test Interval(15.0, 30.0) / Interval(-0.0, 3.0) == Interval(5.0, Inf)
    @test Interval(15.0, 30.0) / Interval(-Inf, -0.0) == Interval(-Inf, 0.0)
    @test Interval(15.0, 30.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(15.0, 30.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(15.0, 30.0) / Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(15.0, 30.0) / Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(15.0, 30.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(0.0, 0.0) / Interval(-5.0, -3.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(3.0, 5.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(-Inf, -3.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(3.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(0.0, 0.0) == ∅
    @test Interval(0.0, 0.0) / Interval(-3.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(0.0, 0.0) / Interval(-3.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(-3.0, 3.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(0.0, 3.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(-Inf, 0.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(-0.0, 3.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(-Inf, -0.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(-Inf, 3.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(-3.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / Interval(-0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) / entireinterval(Float64) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(-5.0, -3.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(3.0, 5.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(-Inf, -3.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(3.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(0.0, 0.0) == ∅
    @test Interval(-0.0, -0.0) / Interval(-3.0, 0.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(-0.0, -0.0) / Interval(-3.0, -0.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(-3.0, 3.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(0.0, 3.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(-Inf, 0.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(-0.0, 3.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(-Inf, -0.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(-Inf, 3.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(-3.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / Interval(-0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) / entireinterval(Float64) == Interval(0.0, 0.0)
    @test Interval(-Inf, -15.0) / Interval(-5.0, -3.0) == Interval(3.0, Inf)
    @test Interval(-Inf, -15.0) / Interval(3.0, 5.0) == Interval(-Inf, -3.0)
    @test Interval(-Inf, -15.0) / Interval(-Inf, -3.0) == Interval(0.0, Inf)
    @test Interval(-Inf, -15.0) / Interval(3.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-Inf, -15.0) / Interval(0.0, 0.0) == ∅
    @test Interval(-Inf, -15.0) / Interval(-3.0, 0.0) == Interval(5.0, Inf)
    @test Interval(-Inf, -15.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(-Inf, -15.0) / Interval(-3.0, -0.0) == Interval(5.0, Inf)
    @test Interval(-Inf, -15.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, -15.0) / Interval(0.0, 3.0) == Interval(-Inf, -5.0)
    @test Interval(-Inf, -15.0) / Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(-Inf, -15.0) / Interval(-0.0, 3.0) == Interval(-Inf, -5.0)
    @test Interval(-Inf, -15.0) / Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(-Inf, -15.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, -15.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-Inf, -15.0) / Interval(0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-Inf, -15.0) / Interval(-0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-Inf, -15.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(-5.0, -3.0) == Interval(-5.0, Inf)
    @test Interval(-Inf, 15.0) / Interval(3.0, 5.0) == Interval(-Inf, 5.0)
    @test Interval(-Inf, 15.0) / Interval(-Inf, -3.0) == Interval(-5.0, Inf)
    @test Interval(-Inf, 15.0) / Interval(3.0, Inf) == Interval(-Inf, 5.0)
    @test Interval(-Inf, 15.0) / Interval(0.0, 0.0) == ∅
    @test Interval(-Inf, 15.0) / Interval(-3.0, 0.0) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(-Inf, 15.0) / Interval(-3.0, -0.0) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(0.0, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(-Inf, 0.0) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(-0.0, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(-Inf, -0.0) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(0.0, Inf) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / Interval(-0.0, Inf) == entireinterval(Float64)
    @test Interval(-Inf, 15.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(-5.0, -3.0) == Interval(-Inf, 5.0)
    @test Interval(-15.0, Inf) / Interval(3.0, 5.0) == Interval(-5.0, Inf)
    @test Interval(-15.0, Inf) / Interval(-Inf, -3.0) == Interval(-Inf, 5.0)
    @test Interval(-15.0, Inf) / Interval(3.0, Inf) == Interval(-5.0, Inf)
    @test Interval(-15.0, Inf) / Interval(0.0, 0.0) == ∅
    @test Interval(-15.0, Inf) / Interval(-3.0, 0.0) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(-0.0, -0.0) == ∅
    @test Interval(-15.0, Inf) / Interval(-3.0, -0.0) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(0.0, 3.0) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(-Inf, 0.0) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(-0.0, 3.0) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(-Inf, -0.0) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(0.0, Inf) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / Interval(-0.0, Inf) == entireinterval(Float64)
    @test Interval(-15.0, Inf) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(15.0, Inf) / Interval(-5.0, -3.0) == Interval(-Inf, -3.0)
    @test Interval(15.0, Inf) / Interval(3.0, 5.0) == Interval(3.0, Inf)
    @test Interval(15.0, Inf) / Interval(-Inf, -3.0) == Interval(-Inf, 0.0)
    @test Interval(15.0, Inf) / Interval(3.0, Inf) == Interval(0.0, Inf)
    @test Interval(15.0, Inf) / Interval(0.0, 0.0) == ∅
    @test Interval(15.0, Inf) / Interval(-3.0, 0.0) == Interval(-Inf, -5.0)
    @test Interval(15.0, Inf) / Interval(-0.0, -0.0) == ∅
    @test Interval(15.0, Inf) / Interval(-3.0, -0.0) == Interval(-Inf, -5.0)
    @test Interval(15.0, Inf) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(15.0, Inf) / Interval(0.0, 3.0) == Interval(5.0, Inf)
    @test Interval(15.0, Inf) / Interval(-Inf, 0.0) == Interval(-Inf, 0.0)
    @test Interval(15.0, Inf) / Interval(-0.0, 3.0) == Interval(5.0, Inf)
    @test Interval(15.0, Inf) / Interval(-Inf, -0.0) == Interval(-Inf, 0.0)
    @test Interval(15.0, Inf) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(15.0, Inf) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(15.0, Inf) / Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(15.0, Inf) / Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(15.0, Inf) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-30.0, 0.0) / Interval(-5.0, -3.0) == Interval(0.0, 10.0)
    @test Interval(-30.0, 0.0) / Interval(3.0, 5.0) == Interval(-10.0, 0.0)
    @test Interval(-30.0, 0.0) / Interval(-Inf, -3.0) == Interval(0.0, 10.0)
    @test Interval(-30.0, 0.0) / Interval(3.0, Inf) == Interval(-10.0, 0.0)
    @test Interval(-30.0, 0.0) / Interval(0.0, 0.0) == ∅
    @test Interval(-30.0, 0.0) / Interval(-3.0, 0.0) == Interval(0.0, Inf)
    @test Interval(-30.0, 0.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(-30.0, 0.0) / Interval(-3.0, -0.0) == Interval(0.0, Inf)
    @test Interval(-30.0, 0.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-30.0, 0.0) / Interval(0.0, 3.0) == Interval(-Inf, 0.0)
    @test Interval(-30.0, 0.0) / Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(-30.0, 0.0) / Interval(-0.0, 3.0) == Interval(-Inf, 0.0)
    @test Interval(-30.0, 0.0) / Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(-30.0, 0.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-30.0, 0.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-30.0, 0.0) / Interval(0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-30.0, 0.0) / Interval(-0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-30.0, 0.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-30.0, -0.0) / Interval(-5.0, -3.0) == Interval(0.0, 10.0)
    @test Interval(-30.0, -0.0) / Interval(3.0, 5.0) == Interval(-10.0, 0.0)
    @test Interval(-30.0, -0.0) / Interval(-Inf, -3.0) == Interval(0.0, 10.0)
    @test Interval(-30.0, -0.0) / Interval(3.0, Inf) == Interval(-10.0, 0.0)
    @test Interval(-30.0, -0.0) / Interval(0.0, 0.0) == ∅
    @test Interval(-30.0, -0.0) / Interval(-3.0, 0.0) == Interval(0.0, Inf)
    @test Interval(-30.0, -0.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(-30.0, -0.0) / Interval(-3.0, -0.0) == Interval(0.0, Inf)
    @test Interval(-30.0, -0.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-30.0, -0.0) / Interval(0.0, 3.0) == Interval(-Inf, 0.0)
    @test Interval(-30.0, -0.0) / Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(-30.0, -0.0) / Interval(-0.0, 3.0) == Interval(-Inf, 0.0)
    @test Interval(-30.0, -0.0) / Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(-30.0, -0.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-30.0, -0.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-30.0, -0.0) / Interval(0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-30.0, -0.0) / Interval(-0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-30.0, -0.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(0.0, 30.0) / Interval(-5.0, -3.0) == Interval(-10.0, 0.0)
    @test Interval(0.0, 30.0) / Interval(3.0, 5.0) == Interval(0.0, 10.0)
    @test Interval(0.0, 30.0) / Interval(-Inf, -3.0) == Interval(-10.0, 0.0)
    @test Interval(0.0, 30.0) / Interval(3.0, Inf) == Interval(0.0, 10.0)
    @test Interval(0.0, 30.0) / Interval(0.0, 0.0) == ∅
    @test Interval(0.0, 30.0) / Interval(-3.0, 0.0) == Interval(-Inf, 0.0)
    @test Interval(0.0, 30.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(0.0, 30.0) / Interval(-3.0, -0.0) == Interval(-Inf, 0.0)
    @test Interval(0.0, 30.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(0.0, 30.0) / Interval(0.0, 3.0) == Interval(0.0, Inf)
    @test Interval(0.0, 30.0) / Interval(-Inf, 0.0) == Interval(-Inf, 0.0)
    @test Interval(0.0, 30.0) / Interval(-0.0, 3.0) == Interval(0.0, Inf)
    @test Interval(0.0, 30.0) / Interval(-Inf, -0.0) == Interval(-Inf, 0.0)
    @test Interval(0.0, 30.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(0.0, 30.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(0.0, 30.0) / Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 30.0) / Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 30.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-0.0, 30.0) / Interval(-5.0, -3.0) == Interval(-10.0, 0.0)
    @test Interval(-0.0, 30.0) / Interval(3.0, 5.0) == Interval(0.0, 10.0)
    @test Interval(-0.0, 30.0) / Interval(-Inf, -3.0) == Interval(-10.0, 0.0)
    @test Interval(-0.0, 30.0) / Interval(3.0, Inf) == Interval(0.0, 10.0)
    @test Interval(-0.0, 30.0) / Interval(0.0, 0.0) == ∅
    @test Interval(-0.0, 30.0) / Interval(-3.0, 0.0) == Interval(-Inf, 0.0)
    @test Interval(-0.0, 30.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(-0.0, 30.0) / Interval(-3.0, -0.0) == Interval(-Inf, 0.0)
    @test Interval(-0.0, 30.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-0.0, 30.0) / Interval(0.0, 3.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 30.0) / Interval(-Inf, 0.0) == Interval(-Inf, 0.0)
    @test Interval(-0.0, 30.0) / Interval(-0.0, 3.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 30.0) / Interval(-Inf, -0.0) == Interval(-Inf, 0.0)
    @test Interval(-0.0, 30.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-0.0, 30.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-0.0, 30.0) / Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 30.0) / Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 30.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-Inf, 0.0) / Interval(-5.0, -3.0) == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) / Interval(3.0, 5.0) == Interval(-Inf, 0.0)
    @test Interval(-Inf, 0.0) / Interval(-Inf, -3.0) == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) / Interval(3.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-Inf, 0.0) / Interval(0.0, 0.0) == ∅
    @test Interval(-Inf, 0.0) / Interval(-3.0, 0.0) == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(-Inf, 0.0) / Interval(-3.0, -0.0) == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, 0.0) / Interval(0.0, 3.0) == Interval(-Inf, 0.0)
    @test Interval(-Inf, 0.0) / Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) / Interval(-0.0, 3.0) == Interval(-Inf, 0.0)
    @test Interval(-Inf, 0.0) / Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, 0.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-Inf, 0.0) / Interval(0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-Inf, 0.0) / Interval(-0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-Inf, 0.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-Inf, -0.0) / Interval(-5.0, -3.0) == Interval(0.0, Inf)
    @test Interval(-Inf, -0.0) / Interval(3.0, 5.0) == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) / Interval(-Inf, -3.0) == Interval(0.0, Inf)
    @test Interval(-Inf, -0.0) / Interval(3.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) / Interval(0.0, 0.0) == ∅
    @test Interval(-Inf, -0.0) / Interval(-3.0, 0.0) == Interval(0.0, Inf)
    @test Interval(-Inf, -0.0) / Interval(-0.0, -0.0) == ∅
    @test Interval(-Inf, -0.0) / Interval(-3.0, -0.0) == Interval(0.0, Inf)
    @test Interval(-Inf, -0.0) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, -0.0) / Interval(0.0, 3.0) == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) / Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(-Inf, -0.0) / Interval(-0.0, 3.0) == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) / Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(-Inf, -0.0) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-Inf, -0.0) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-Inf, -0.0) / Interval(0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) / Interval(-0.0, Inf) == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(0.0, Inf) / Interval(-5.0, -3.0) == Interval(-Inf, 0.0)
    @test Interval(0.0, Inf) / Interval(3.0, 5.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) / Interval(-Inf, -3.0) == Interval(-Inf, 0.0)
    @test Interval(0.0, Inf) / Interval(3.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) / Interval(0.0, 0.0) == ∅
    @test Interval(0.0, Inf) / Interval(-3.0, 0.0) == Interval(-Inf, 0.0)
    @test Interval(0.0, Inf) / Interval(-0.0, -0.0) == ∅
    @test Interval(0.0, Inf) / Interval(-3.0, -0.0) == Interval(-Inf, 0.0)
    @test Interval(0.0, Inf) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(0.0, Inf) / Interval(0.0, 3.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) / Interval(-Inf, 0.0) == Interval(-Inf, 0.0)
    @test Interval(0.0, Inf) / Interval(-0.0, 3.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) / Interval(-Inf, -0.0) == Interval(-Inf, 0.0)
    @test Interval(0.0, Inf) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(0.0, Inf) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(0.0, Inf) / Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) / Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-0.0, Inf) / Interval(-5.0, -3.0) == Interval(-Inf, 0.0)
    @test Interval(-0.0, Inf) / Interval(3.0, 5.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) / Interval(-Inf, -3.0) == Interval(-Inf, 0.0)
    @test Interval(-0.0, Inf) / Interval(3.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) / Interval(0.0, 0.0) == ∅
    @test Interval(-0.0, Inf) / Interval(-3.0, 0.0) == Interval(-Inf, 0.0)
    @test Interval(-0.0, Inf) / Interval(-0.0, -0.0) == ∅
    @test Interval(-0.0, Inf) / Interval(-3.0, -0.0) == Interval(-Inf, 0.0)
    @test Interval(-0.0, Inf) / Interval(-3.0, 3.0) == entireinterval(Float64)
    @test Interval(-0.0, Inf) / Interval(0.0, 3.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) / Interval(-Inf, 0.0) == Interval(-Inf, 0.0)
    @test Interval(-0.0, Inf) / Interval(-0.0, 3.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) / Interval(-Inf, -0.0) == Interval(-Inf, 0.0)
    @test Interval(-0.0, Inf) / Interval(-Inf, 3.0) == entireinterval(Float64)
    @test Interval(-0.0, Inf) / Interval(-3.0, Inf) == entireinterval(Float64)
    @test Interval(-0.0, Inf) / Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) / Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) / entireinterval(Float64) == entireinterval(Float64)
    @test Interval(-2.0, -1.0) / Interval(-10.0, -3.0) == Interval(0x1.9999999999999p-4, 0x1.5555555555556p-1)
    @test Interval(-2.0, -1.0) / Interval(0.0, 10.0) == Interval(-Inf, -0x1.9999999999999p-4)
    @test Interval(-2.0, -1.0) / Interval(-0.0, 10.0) == Interval(-Inf, -0x1.9999999999999p-4)
    @test Interval(-1.0, 2.0) / Interval(10.0, Inf) == Interval(-0x1.999999999999ap-4, 0x1.999999999999ap-3)
    @test Interval(1.0, 3.0) / Interval(-Inf, -10.0) == Interval(-0x1.3333333333334p-2, 0.0)
    @test Interval(-Inf, -1.0) / Interval(1.0, 3.0) == Interval(-Inf, -0x1.5555555555555p-2)
end

@testset "minimal_div_dec_test" begin
    @test DecoratedInterval(Interval(-2.0, -1.0), com) / DecoratedInterval(Interval(-10.0, -3.0), com) == DecoratedInterval(Interval(0x1.9999999999999p-4, 0x1.5555555555556p-1), com)
    @test decoration(DecoratedInterval(Interval(-2.0, -1.0), com) / DecoratedInterval(Interval(-10.0, -3.0), com)) == decoration(DecoratedInterval(Interval(0x1.9999999999999p-4, 0x1.5555555555556p-1), com))
    @test DecoratedInterval(Interval(-200.0, -1.0), com) / DecoratedInterval(Interval(0x0.0000000000001p-1022, 10.0), com) == DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), dac)
    @test decoration(DecoratedInterval(Interval(-200.0, -1.0), com) / DecoratedInterval(Interval(0x0.0000000000001p-1022, 10.0), com)) == decoration(DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), dac))
    @test DecoratedInterval(Interval(-2.0, -1.0), com) / DecoratedInterval(Interval(0.0, 10.0), com) == DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv)
    @test decoration(DecoratedInterval(Interval(-2.0, -1.0), com) / DecoratedInterval(Interval(0.0, 10.0), com)) == decoration(DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv))
    @test DecoratedInterval(Interval(1.0, 3.0), def) / DecoratedInterval(Interval(-Inf, -10.0), dac) == DecoratedInterval(Interval(-0x1.3333333333334p-2, 0.0), def)
    @test decoration(DecoratedInterval(Interval(1.0, 3.0), def) / DecoratedInterval(Interval(-Inf, -10.0), dac)) == decoration(DecoratedInterval(Interval(-0x1.3333333333334p-2, 0.0), def))
    @test DecoratedInterval(Interval(1.0, 2.0), trv) / DecoratedInterval(∅, trv) == DecoratedInterval(∅, trv)
    @test decoration(DecoratedInterval(Interval(1.0, 2.0), trv) / DecoratedInterval(∅, trv)) == decoration(DecoratedInterval(∅, trv))
end

@testset "minimal_recip_test" begin
    @test inv(Interval(-50.0, -10.0)) == Interval(-0x1.999999999999ap-4, -0x1.47ae147ae147ap-6)
    @test (Interval(-50.0, -10.0))^(-1) == Interval(-0x1.999999999999ap-4, -0x1.47ae147ae147ap-6)
    @test (Interval(-50.0, -10.0))^(-1//1) == Interval(-0x1.999999999999ap-4, -0x1.47ae147ae147ap-6)
    @test (Interval(-50.0, -10.0))^(-1.0) == Interval(-0x1.999999999999ap-4, -0x1.47ae147ae147ap-6)
    @test 1 /(Interval(-50.0, -10.0)) == Interval(-0x1.999999999999ap-4, -0x1.47ae147ae147ap-6)
    @test inv(Interval(10.0, 50.0)) == Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4)
    @test (Interval(10.0, 50.0))^(-1) == Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4)
    @test (Interval(10.0, 50.0))^(-1//1) == Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4)
    @test (Interval(10.0, 50.0))^(-1.0) == Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4)
    @test 1 /(Interval(10.0, 50.0)) == Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4)
    @test inv(Interval(-Inf, -10.0)) == Interval(-0x1.999999999999ap-4, 0.0)
    @test (Interval(-Inf, -10.0))^(-1) == Interval(-0x1.999999999999ap-4, 0.0)
    @test (Interval(-Inf, -10.0))^(-1//1) == Interval(-0x1.999999999999ap-4, 0.0)
    @test (Interval(-Inf, -10.0))^(-1.0) == Interval(-0x1.999999999999ap-4, 0.0)
    @test 1 /(Interval(-Inf, -10.0)) == Interval(-0x1.999999999999ap-4, 0.0)
    @test inv(Interval(10.0, Inf)) == Interval(0.0, 0x1.999999999999ap-4)
    @test (Interval(10.0, Inf))^(-1) == Interval(0.0, 0x1.999999999999ap-4)
    @test (Interval(10.0, Inf))^(-1//1) == Interval(0.0, 0x1.999999999999ap-4)
    @test (Interval(10.0, Inf))^(-1.0) == Interval(0.0, 0x1.999999999999ap-4)
    @test 1 /(Interval(10.0, Inf)) == Interval(0.0, 0x1.999999999999ap-4)
    @test inv(Interval(0.0, 0.0)) == ∅
    @test (Interval(0.0, 0.0))^(-1) == ∅
    @test (Interval(0.0, 0.0))^(-1//1) == ∅
    @test (Interval(0.0, 0.0))^(-1.0) == ∅
    @test 1 /(Interval(0.0, 0.0)) == ∅
    @test inv(Interval(-0.0, -0.0)) == ∅
    @test (Interval(-0.0, -0.0))^(-1) == ∅
    @test (Interval(-0.0, -0.0))^(-1//1) == ∅
    @test (Interval(-0.0, -0.0))^(-1.0) == ∅
    @test 1 /(Interval(-0.0, -0.0)) == ∅
    @test inv(Interval(-10.0, 0.0)) == Interval(-Inf, -0x1.9999999999999p-4)
    @test (Interval(-10.0, 0.0))^(-1) == Interval(-Inf, -0x1.9999999999999p-4)
    @test (Interval(-10.0, 0.0))^(-1//1) == Interval(-Inf, -0x1.9999999999999p-4)
    @test (Interval(-10.0, 0.0))^(-1.0) == Interval(-Inf, -0x1.9999999999999p-4)
    @test 1 /(Interval(-10.0, 0.0)) == Interval(-Inf, -0x1.9999999999999p-4)
    @test inv(Interval(-10.0, -0.0)) == Interval(-Inf, -0x1.9999999999999p-4)
    @test (Interval(-10.0, -0.0))^(-1) == Interval(-Inf, -0x1.9999999999999p-4)
    @test (Interval(-10.0, -0.0))^(-1//1) == Interval(-Inf, -0x1.9999999999999p-4)
    @test (Interval(-10.0, -0.0))^(-1.0) == Interval(-Inf, -0x1.9999999999999p-4)
    @test 1 /(Interval(-10.0, -0.0)) == Interval(-Inf, -0x1.9999999999999p-4)
    @test inv(Interval(-10.0, 10.0)) == entireinterval(Float64)
    @test (Interval(-10.0, 10.0))^(-1) == entireinterval(Float64)
    @test (Interval(-10.0, 10.0))^(-1//1) == entireinterval(Float64)
    @test (Interval(-10.0, 10.0))^(-1.0) == entireinterval(Float64)
    @test 1 /(Interval(-10.0, 10.0)) == entireinterval(Float64)
    @test inv(Interval(0.0, 10.0)) == Interval(0x1.9999999999999p-4, Inf)
    @test (Interval(0.0, 10.0))^(-1) == Interval(0x1.9999999999999p-4, Inf)
    @test (Interval(0.0, 10.0))^(-1//1) == Interval(0x1.9999999999999p-4, Inf)
    @test (Interval(0.0, 10.0))^(-1.0) == Interval(0x1.9999999999999p-4, Inf)
    @test 1 /(Interval(0.0, 10.0)) == Interval(0x1.9999999999999p-4, Inf)
    @test inv(Interval(-0.0, 10.0)) == Interval(0x1.9999999999999p-4, Inf)
    @test (Interval(-0.0, 10.0))^(-1) == Interval(0x1.9999999999999p-4, Inf)
    @test (Interval(-0.0, 10.0))^(-1//1) == Interval(0x1.9999999999999p-4, Inf)
    @test (Interval(-0.0, 10.0))^(-1.0) == Interval(0x1.9999999999999p-4, Inf)
    @test 1 /(Interval(-0.0, 10.0)) == Interval(0x1.9999999999999p-4, Inf)
    @test inv(Interval(-Inf, 0.0)) == Interval(-Inf, 0.0)
    @test (Interval(-Inf, 0.0))^(-1) == Interval(-Inf, 0.0)
    @test (Interval(-Inf, 0.0))^(-1//1) == Interval(-Inf, 0.0)
    @test (Interval(-Inf, 0.0))^(-1.0) == Interval(-Inf, 0.0)
    @test 1 /(Interval(-Inf, 0.0)) == Interval(-Inf, 0.0)
    @test inv(Interval(-Inf, -0.0)) == Interval(-Inf, 0.0)
    @test (Interval(-Inf, -0.0))^(-1) == Interval(-Inf, 0.0)
    @test (Interval(-Inf, -0.0))^(-1//1) == Interval(-Inf, 0.0)
    @test (Interval(-Inf, -0.0))^(-1.0) == Interval(-Inf, 0.0)
    @test 1 /(Interval(-Inf, -0.0)) == Interval(-Inf, 0.0)
    @test inv(Interval(-Inf, 10.0)) == entireinterval(Float64)
    @test (Interval(-Inf, 10.0))^(-1) == entireinterval(Float64)
    @test (Interval(-Inf, 10.0))^(-1//1) == entireinterval(Float64)
    @test (Interval(-Inf, 10.0))^(-1.0) == entireinterval(Float64)
    @test 1 /(Interval(-Inf, 10.0)) == entireinterval(Float64)
    @test inv(Interval(-10.0, Inf)) == entireinterval(Float64)
    @test (Interval(-10.0, Inf))^(-1) == entireinterval(Float64)
    @test (Interval(-10.0, Inf))^(-1//1) == entireinterval(Float64)
    @test (Interval(-10.0, Inf))^(-1.0) == entireinterval(Float64)
    @test 1 /(Interval(-10.0, Inf)) == entireinterval(Float64)
    @test inv(Interval(0.0, Inf)) == Interval(0.0, Inf)
    @test (Interval(0.0, Inf))^(-1) == Interval(0.0, Inf)
    @test (Interval(0.0, Inf))^(-1//1) == Interval(0.0, Inf)
    @test (Interval(0.0, Inf))^(-1.0) == Interval(0.0, Inf)
    @test 1 /(Interval(0.0, Inf)) == Interval(0.0, Inf)
    @test inv(Interval(-0.0, Inf)) == Interval(0.0, Inf)
    @test (Interval(-0.0, Inf))^(-1) == Interval(0.0, Inf)
    @test (Interval(-0.0, Inf))^(-1//1) == Interval(0.0, Inf)
    @test (Interval(-0.0, Inf))^(-1.0) == Interval(0.0, Inf)
    @test 1 /(Interval(-0.0, Inf)) == Interval(0.0, Inf)
    @test inv(entireinterval(Float64)) == entireinterval(Float64)
    @test (entireinterval(Float64))^(-1) == entireinterval(Float64)
    @test (entireinterval(Float64))^(-1//1) == entireinterval(Float64)
    @test (entireinterval(Float64))^(-1.0) == entireinterval(Float64)
    @test 1 /(entireinterval(Float64)) == entireinterval(Float64)
end

@testset "minimal_recip_dec_test" begin
    @test inv(DecoratedInterval(Interval(10.0, 50.0), com)) == DecoratedInterval(Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4), com)
    @test decoration(inv(DecoratedInterval(Interval(10.0, 50.0), com))) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4), com))
    @test (DecoratedInterval(Interval(10.0, 50.0), com))^(-1) == DecoratedInterval(Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4), com)
    @test decoration((DecoratedInterval(Interval(10.0, 50.0), com))^(-1)) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4), com))
    @test (DecoratedInterval(Interval(10.0, 50.0), com))^(-1//1) == DecoratedInterval(Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4), com)
    @test decoration((DecoratedInterval(Interval(10.0, 50.0), com))^(-1//1)) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4), com))
    @test (DecoratedInterval(Interval(10.0, 50.0), com))^(-1.0) == DecoratedInterval(Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4), com)
    @test decoration((DecoratedInterval(Interval(10.0, 50.0), com))^(-1.0)) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4), com))
    @test 1 /(DecoratedInterval(Interval(10.0, 50.0), com)) == DecoratedInterval(Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4), com)
    @test decoration(1 /(DecoratedInterval(Interval(10.0, 50.0), com))) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147ap-6, 0x1.999999999999ap-4), com))
    @test inv(DecoratedInterval(Interval(-Inf, -10.0), dac)) == DecoratedInterval(Interval(-0x1.999999999999ap-4, 0.0), dac)
    @test decoration(inv(DecoratedInterval(Interval(-Inf, -10.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.999999999999ap-4, 0.0), dac))
    @test (DecoratedInterval(Interval(-Inf, -10.0), dac))^(-1) == DecoratedInterval(Interval(-0x1.999999999999ap-4, 0.0), dac)
    @test decoration((DecoratedInterval(Interval(-Inf, -10.0), dac))^(-1)) == decoration(DecoratedInterval(Interval(-0x1.999999999999ap-4, 0.0), dac))
    @test (DecoratedInterval(Interval(-Inf, -10.0), dac))^(-1//1) == DecoratedInterval(Interval(-0x1.999999999999ap-4, 0.0), dac)
    @test decoration((DecoratedInterval(Interval(-Inf, -10.0), dac))^(-1//1)) == decoration(DecoratedInterval(Interval(-0x1.999999999999ap-4, 0.0), dac))
    @test (DecoratedInterval(Interval(-Inf, -10.0), dac))^(-1.0) == DecoratedInterval(Interval(-0x1.999999999999ap-4, 0.0), dac)
    @test decoration((DecoratedInterval(Interval(-Inf, -10.0), dac))^(-1.0)) == decoration(DecoratedInterval(Interval(-0x1.999999999999ap-4, 0.0), dac))
    @test 1 /(DecoratedInterval(Interval(-Inf, -10.0), dac)) == DecoratedInterval(Interval(-0x1.999999999999ap-4, 0.0), dac)
    @test decoration(1 /(DecoratedInterval(Interval(-Inf, -10.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.999999999999ap-4, 0.0), dac))
    @test inv(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), def)) == DecoratedInterval(Interval(-Inf, -0x0.4p-1022), def)
    @test decoration(inv(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), def))) == decoration(DecoratedInterval(Interval(-Inf, -0x0.4p-1022), def))
    @test (DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), def))^(-1) == DecoratedInterval(Interval(-Inf, -0x0.4p-1022), def)
    @test decoration((DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), def))^(-1)) == decoration(DecoratedInterval(Interval(-Inf, -0x0.4p-1022), def))
    @test (DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), def))^(-1//1) == DecoratedInterval(Interval(-Inf, -0x0.4p-1022), def)
    @test decoration((DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), def))^(-1//1)) == decoration(DecoratedInterval(Interval(-Inf, -0x0.4p-1022), def))
    @test (DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), def))^(-1.0) == DecoratedInterval(Interval(-Inf, -0x0.4p-1022), def)
    @test decoration((DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), def))^(-1.0)) == decoration(DecoratedInterval(Interval(-Inf, -0x0.4p-1022), def))
    @test 1 /(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), def)) == DecoratedInterval(Interval(-Inf, -0x0.4p-1022), def)
    @test decoration(1 /(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), def))) == decoration(DecoratedInterval(Interval(-Inf, -0x0.4p-1022), def))
    @test inv(DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(∅, trv)
    @test decoration(inv(DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(∅, trv))
    @test (DecoratedInterval(Interval(0.0, 0.0), com))^(-1) == DecoratedInterval(∅, trv)
    @test decoration((DecoratedInterval(Interval(0.0, 0.0), com))^(-1)) == decoration(DecoratedInterval(∅, trv))
    @test (DecoratedInterval(Interval(0.0, 0.0), com))^(-1//1) == DecoratedInterval(∅, trv)
    @test decoration((DecoratedInterval(Interval(0.0, 0.0), com))^(-1//1)) == decoration(DecoratedInterval(∅, trv))
    @test (DecoratedInterval(Interval(0.0, 0.0), com))^(-1.0) == DecoratedInterval(∅, trv)
    @test decoration((DecoratedInterval(Interval(0.0, 0.0), com))^(-1.0)) == decoration(DecoratedInterval(∅, trv))
    @test 1 /(DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(∅, trv)
    @test decoration(1 /(DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(∅, trv))
    @test inv(DecoratedInterval(Interval(-10.0, 0.0), com)) == DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv)
    @test decoration(inv(DecoratedInterval(Interval(-10.0, 0.0), com))) == decoration(DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv))
    @test (DecoratedInterval(Interval(-10.0, 0.0), com))^(-1) == DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv)
    @test decoration((DecoratedInterval(Interval(-10.0, 0.0), com))^(-1)) == decoration(DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv))
    @test (DecoratedInterval(Interval(-10.0, 0.0), com))^(-1//1) == DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv)
    @test decoration((DecoratedInterval(Interval(-10.0, 0.0), com))^(-1//1)) == decoration(DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv))
    @test (DecoratedInterval(Interval(-10.0, 0.0), com))^(-1.0) == DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv)
    @test decoration((DecoratedInterval(Interval(-10.0, 0.0), com))^(-1.0)) == decoration(DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv))
    @test 1 /(DecoratedInterval(Interval(-10.0, 0.0), com)) == DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv)
    @test decoration(1 /(DecoratedInterval(Interval(-10.0, 0.0), com))) == decoration(DecoratedInterval(Interval(-Inf, -0x1.9999999999999p-4), trv))
    @test inv(DecoratedInterval(Interval(-10.0, Inf), dac)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(inv(DecoratedInterval(Interval(-10.0, Inf), dac))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test (DecoratedInterval(Interval(-10.0, Inf), dac))^(-1) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration((DecoratedInterval(Interval(-10.0, Inf), dac))^(-1)) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test (DecoratedInterval(Interval(-10.0, Inf), dac))^(-1//1) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration((DecoratedInterval(Interval(-10.0, Inf), dac))^(-1//1)) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test (DecoratedInterval(Interval(-10.0, Inf), dac))^(-1.0) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration((DecoratedInterval(Interval(-10.0, Inf), dac))^(-1.0)) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test 1 /(DecoratedInterval(Interval(-10.0, Inf), dac)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(1 /(DecoratedInterval(Interval(-10.0, Inf), dac))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test inv(DecoratedInterval(Interval(-0.0, Inf), dac)) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(inv(DecoratedInterval(Interval(-0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test (DecoratedInterval(Interval(-0.0, Inf), dac))^(-1) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration((DecoratedInterval(Interval(-0.0, Inf), dac))^(-1)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test (DecoratedInterval(Interval(-0.0, Inf), dac))^(-1//1) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration((DecoratedInterval(Interval(-0.0, Inf), dac))^(-1//1)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test (DecoratedInterval(Interval(-0.0, Inf), dac))^(-1.0) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration((DecoratedInterval(Interval(-0.0, Inf), dac))^(-1.0)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test 1 /(DecoratedInterval(Interval(-0.0, Inf), dac)) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(1 /(DecoratedInterval(Interval(-0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test inv(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(inv(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test (DecoratedInterval(entireinterval(Float64), def))^(-1) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration((DecoratedInterval(entireinterval(Float64), def))^(-1)) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test (DecoratedInterval(entireinterval(Float64), def))^(-1//1) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration((DecoratedInterval(entireinterval(Float64), def))^(-1//1)) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test (DecoratedInterval(entireinterval(Float64), def))^(-1.0) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration((DecoratedInterval(entireinterval(Float64), def))^(-1.0)) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test 1 /(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(1 /(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
end

@testset "minimal_sqr_test" begin
    @test ∅ ^2 == ∅
    @test ∅ ^(2//1) == ∅
    @test ∅ ^(2.0) == ∅
    @test entireinterval(Float64) ^2 == Interval(0.0, Inf)
    @test entireinterval(Float64) ^(2//1) == Interval(0.0, Inf)
    @test entireinterval(Float64) ^(2.0) == Interval(0.0, Inf)
    @test Interval(-Inf, -0x0.0000000000001p-1022) ^2 == Interval(0.0, Inf)
    @test Interval(-Inf, -0x0.0000000000001p-1022) ^(2//1) == Interval(0.0, Inf)
    @test Interval(-Inf, -0x0.0000000000001p-1022) ^(2.0) == Interval(0.0, Inf)
    @test Interval(-1.0, 1.0) ^2 == Interval(0.0, 1.0)
    @test Interval(-1.0, 1.0) ^(2//1) == Interval(0.0, 1.0)
    @test Interval(-1.0, 1.0) ^(2.0) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^2 == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^(2//1) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^(2.0) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^2 == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^(2//1) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^(2.0) == Interval(0.0, 1.0)
    @test Interval(-5.0, 3.0) ^2 == Interval(0.0, 25.0)
    @test Interval(-5.0, 3.0) ^(2//1) == Interval(0.0, 25.0)
    @test Interval(-5.0, 3.0) ^(2.0) == Interval(0.0, 25.0)
    @test Interval(-5.0, 0.0) ^2 == Interval(0.0, 25.0)
    @test Interval(-5.0, 0.0) ^(2//1) == Interval(0.0, 25.0)
    @test Interval(-5.0, 0.0) ^(2.0) == Interval(0.0, 25.0)
    @test Interval(-5.0, -0.0) ^2 == Interval(0.0, 25.0)
    @test Interval(-5.0, -0.0) ^(2//1) == Interval(0.0, 25.0)
    @test Interval(-5.0, -0.0) ^(2.0) == Interval(0.0, 25.0)
    @test Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4) ^2 == Interval(0x1.47ae147ae147bp-7, 0x1.47ae147ae147cp-7)
    @test Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4) ^(2//1) == Interval(0x1.47ae147ae147bp-7, 0x1.47ae147ae147cp-7)
    @test Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4) ^(2.0) == Interval(0x1.47ae147ae147bp-7, 0x1.47ae147ae147cp-7)
    @test Interval(-0x1.ffffffffffffp+0, 0x1.999999999999ap-4) ^2 == Interval(0.0, 0x1.fffffffffffe1p+1)
    @test Interval(-0x1.ffffffffffffp+0, 0x1.999999999999ap-4) ^(2//1) == Interval(0.0, 0x1.fffffffffffe1p+1)
    @test Interval(-0x1.ffffffffffffp+0, 0x1.999999999999ap-4) ^(2.0) == Interval(0.0, 0x1.fffffffffffe1p+1)
    @test Interval(-0x1.ffffffffffffp+0, -0x1.ffffffffffffp+0) ^2 == Interval(0x1.fffffffffffep+1, 0x1.fffffffffffe1p+1)
    @test Interval(-0x1.ffffffffffffp+0, -0x1.ffffffffffffp+0) ^(2//1) == Interval(0x1.fffffffffffep+1, 0x1.fffffffffffe1p+1)
    @test Interval(-0x1.ffffffffffffp+0, -0x1.ffffffffffffp+0) ^(2.0) == Interval(0x1.fffffffffffep+1, 0x1.fffffffffffe1p+1)
end

@testset "minimal_sqr_dec_test" begin
    @test DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), com) ^2 == DecoratedInterval(Interval(0.0, Inf), dac)
    @test decoration(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), com) ^2) == decoration(DecoratedInterval(Interval(0.0, Inf), dac))
    @test DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), com) ^(2//1) == DecoratedInterval(Interval(0.0, Inf), dac)
    @test decoration(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), com) ^(2//1)) == decoration(DecoratedInterval(Interval(0.0, Inf), dac))
    @test DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), com) ^(2.0) == DecoratedInterval(Interval(0.0, Inf), dac)
    @test decoration(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, -0x0.0000000000001p-1022), com) ^(2.0)) == decoration(DecoratedInterval(Interval(0.0, Inf), dac))
    @test DecoratedInterval(Interval(-1.0, 1.0), def) ^2 == DecoratedInterval(Interval(0.0, 1.0), def)
    @test decoration(DecoratedInterval(Interval(-1.0, 1.0), def) ^2) == decoration(DecoratedInterval(Interval(0.0, 1.0), def))
    @test DecoratedInterval(Interval(-1.0, 1.0), def) ^(2//1) == DecoratedInterval(Interval(0.0, 1.0), def)
    @test decoration(DecoratedInterval(Interval(-1.0, 1.0), def) ^(2//1)) == decoration(DecoratedInterval(Interval(0.0, 1.0), def))
    @test DecoratedInterval(Interval(-1.0, 1.0), def) ^(2.0) == DecoratedInterval(Interval(0.0, 1.0), def)
    @test decoration(DecoratedInterval(Interval(-1.0, 1.0), def) ^(2.0)) == decoration(DecoratedInterval(Interval(0.0, 1.0), def))
    @test DecoratedInterval(Interval(-5.0, 3.0), com) ^2 == DecoratedInterval(Interval(0.0, 25.0), com)
    @test decoration(DecoratedInterval(Interval(-5.0, 3.0), com) ^2) == decoration(DecoratedInterval(Interval(0.0, 25.0), com))
    @test DecoratedInterval(Interval(-5.0, 3.0), com) ^(2//1) == DecoratedInterval(Interval(0.0, 25.0), com)
    @test decoration(DecoratedInterval(Interval(-5.0, 3.0), com) ^(2//1)) == decoration(DecoratedInterval(Interval(0.0, 25.0), com))
    @test DecoratedInterval(Interval(-5.0, 3.0), com) ^(2.0) == DecoratedInterval(Interval(0.0, 25.0), com)
    @test decoration(DecoratedInterval(Interval(-5.0, 3.0), com) ^(2.0)) == decoration(DecoratedInterval(Interval(0.0, 25.0), com))
    @test DecoratedInterval(Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4), com) ^2 == DecoratedInterval(Interval(0x1.47ae147ae147bp-7, 0x1.47ae147ae147cp-7), com)
    @test decoration(DecoratedInterval(Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4), com) ^2) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147bp-7, 0x1.47ae147ae147cp-7), com))
    @test DecoratedInterval(Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4), com) ^(2//1) == DecoratedInterval(Interval(0x1.47ae147ae147bp-7, 0x1.47ae147ae147cp-7), com)
    @test decoration(DecoratedInterval(Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4), com) ^(2//1)) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147bp-7, 0x1.47ae147ae147cp-7), com))
    @test DecoratedInterval(Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4), com) ^(2.0) == DecoratedInterval(Interval(0x1.47ae147ae147bp-7, 0x1.47ae147ae147cp-7), com)
    @test decoration(DecoratedInterval(Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4), com) ^(2.0)) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147bp-7, 0x1.47ae147ae147cp-7), com))
end

@testset "minimal_sqrt_test" begin
    @test sqrt(∅) == ∅
    @test (∅)^(1/2) == ∅
    @test (∅)^(0.5) == ∅
    @test (∅)^(1//2) == ∅
    @test sqrt(entireinterval(Float64)) == Interval(0.0, Inf)
    @test (entireinterval(Float64))^(1/2) == Interval(0.0, Inf)
    @test (entireinterval(Float64))^(0.5) == Interval(0.0, Inf)
    @test (entireinterval(Float64))^(1//2) == Interval(0.0, Inf)
    @test sqrt(Interval(-Inf, -0x0.0000000000001p-1022)) == ∅
    @test (Interval(-Inf, -0x0.0000000000001p-1022))^(1/2) == ∅
    @test (Interval(-Inf, -0x0.0000000000001p-1022))^(0.5) == ∅
    @test (Interval(-Inf, -0x0.0000000000001p-1022))^(1//2) == ∅
    @test sqrt(Interval(-1.0, 1.0)) == Interval(0.0, 1.0)
    @test (Interval(-1.0, 1.0))^(1/2) == Interval(0.0, 1.0)
    @test (Interval(-1.0, 1.0))^(0.5) == Interval(0.0, 1.0)
    @test (Interval(-1.0, 1.0))^(1//2) == Interval(0.0, 1.0)
    @test sqrt(Interval(0.0, 1.0)) == Interval(0.0, 1.0)
    @test (Interval(0.0, 1.0))^(1/2) == Interval(0.0, 1.0)
    @test (Interval(0.0, 1.0))^(0.5) == Interval(0.0, 1.0)
    @test (Interval(0.0, 1.0))^(1//2) == Interval(0.0, 1.0)
    @test sqrt(Interval(-0.0, 1.0)) == Interval(0.0, 1.0)
    @test (Interval(-0.0, 1.0))^(1/2) == Interval(0.0, 1.0)
    @test (Interval(-0.0, 1.0))^(0.5) == Interval(0.0, 1.0)
    @test (Interval(-0.0, 1.0))^(1//2) == Interval(0.0, 1.0)
    @test sqrt(Interval(-5.0, 25.0)) == Interval(0.0, 5.0)
    @test (Interval(-5.0, 25.0))^(1/2) == Interval(0.0, 5.0)
    @test (Interval(-5.0, 25.0))^(0.5) == Interval(0.0, 5.0)
    @test (Interval(-5.0, 25.0))^(1//2) == Interval(0.0, 5.0)
    @test sqrt(Interval(0.0, 25.0)) == Interval(0.0, 5.0)
    @test (Interval(0.0, 25.0))^(1/2) == Interval(0.0, 5.0)
    @test (Interval(0.0, 25.0))^(0.5) == Interval(0.0, 5.0)
    @test (Interval(0.0, 25.0))^(1//2) == Interval(0.0, 5.0)
    @test sqrt(Interval(-0.0, 25.0)) == Interval(0.0, 5.0)
    @test (Interval(-0.0, 25.0))^(1/2) == Interval(0.0, 5.0)
    @test (Interval(-0.0, 25.0))^(0.5) == Interval(0.0, 5.0)
    @test (Interval(-0.0, 25.0))^(1//2) == Interval(0.0, 5.0)
    @test sqrt(Interval(-5.0, Inf)) == Interval(0.0, Inf)
    @test (Interval(-5.0, Inf))^(1/2) == Interval(0.0, Inf)
    @test (Interval(-5.0, Inf))^(0.5) == Interval(0.0, Inf)
    @test (Interval(-5.0, Inf))^(1//2) == Interval(0.0, Inf)
    @test sqrt(Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4)) == Interval(0x1.43d136248490fp-2, 0x1.43d136248491p-2)
    @test (Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4))^(1/2) == Interval(0x1.43d136248490fp-2, 0x1.43d136248491p-2)
    @test (Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4))^(0.5) == Interval(0x1.43d136248490fp-2, 0x1.43d136248491p-2)
    @test (Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4))^(1//2) == Interval(0x1.43d136248490fp-2, 0x1.43d136248491p-2)
    @test sqrt(Interval(-0x1.ffffffffffffp+0, 0x1.999999999999ap-4)) == Interval(0.0, 0x1.43d136248491p-2)
    @test (Interval(-0x1.ffffffffffffp+0, 0x1.999999999999ap-4))^(1/2) == Interval(0.0, 0x1.43d136248491p-2)
    @test (Interval(-0x1.ffffffffffffp+0, 0x1.999999999999ap-4))^(0.5) == Interval(0.0, 0x1.43d136248491p-2)
    @test (Interval(-0x1.ffffffffffffp+0, 0x1.999999999999ap-4))^(1//2) == Interval(0.0, 0x1.43d136248491p-2)
    @test sqrt(Interval(0x1.999999999999ap-4, 0x1.ffffffffffffp+0)) == Interval(0x1.43d136248490fp-2, 0x1.6a09e667f3bc7p+0)
    @test (Interval(0x1.999999999999ap-4, 0x1.ffffffffffffp+0))^(1/2) == Interval(0x1.43d136248490fp-2, 0x1.6a09e667f3bc7p+0)
    @test (Interval(0x1.999999999999ap-4, 0x1.ffffffffffffp+0))^(0.5) == Interval(0x1.43d136248490fp-2, 0x1.6a09e667f3bc7p+0)
    @test (Interval(0x1.999999999999ap-4, 0x1.ffffffffffffp+0))^(1//2) == Interval(0x1.43d136248490fp-2, 0x1.6a09e667f3bc7p+0)
end

@testset "minimal_sqrt_dec_test" begin
    @test sqrt(DecoratedInterval(Interval(1.0, 4.0), com)) == DecoratedInterval(Interval(1.0, 2.0), com)
    @test decoration(sqrt(DecoratedInterval(Interval(1.0, 4.0), com))) == decoration(DecoratedInterval(Interval(1.0, 2.0), com))
    @test (DecoratedInterval(Interval(1.0, 4.0), com))^(1/2) == DecoratedInterval(Interval(1.0, 2.0), com)
    @test decoration((DecoratedInterval(Interval(1.0, 4.0), com))^(1/2)) == decoration(DecoratedInterval(Interval(1.0, 2.0), com))
    @test (DecoratedInterval(Interval(1.0, 4.0), com))^(0.5) == DecoratedInterval(Interval(1.0, 2.0), com)
    @test decoration((DecoratedInterval(Interval(1.0, 4.0), com))^(0.5)) == decoration(DecoratedInterval(Interval(1.0, 2.0), com))
    @test (DecoratedInterval(Interval(1.0, 4.0), com))^(1//2) == DecoratedInterval(Interval(1.0, 2.0), com)
    @test decoration((DecoratedInterval(Interval(1.0, 4.0), com))^(1//2)) == decoration(DecoratedInterval(Interval(1.0, 2.0), com))
    @test sqrt(DecoratedInterval(Interval(-5.0, 25.0), com)) == DecoratedInterval(Interval(0.0, 5.0), trv)
    @test decoration(sqrt(DecoratedInterval(Interval(-5.0, 25.0), com))) == decoration(DecoratedInterval(Interval(0.0, 5.0), trv))
    @test (DecoratedInterval(Interval(-5.0, 25.0), com))^(1/2) == DecoratedInterval(Interval(0.0, 5.0), trv)
    @test decoration((DecoratedInterval(Interval(-5.0, 25.0), com))^(1/2)) == decoration(DecoratedInterval(Interval(0.0, 5.0), trv))
    @test (DecoratedInterval(Interval(-5.0, 25.0), com))^(0.5) == DecoratedInterval(Interval(0.0, 5.0), trv)
    @test decoration((DecoratedInterval(Interval(-5.0, 25.0), com))^(0.5)) == decoration(DecoratedInterval(Interval(0.0, 5.0), trv))
    @test (DecoratedInterval(Interval(-5.0, 25.0), com))^(1//2) == DecoratedInterval(Interval(0.0, 5.0), trv)
    @test decoration((DecoratedInterval(Interval(-5.0, 25.0), com))^(1//2)) == decoration(DecoratedInterval(Interval(0.0, 5.0), trv))
    @test sqrt(DecoratedInterval(Interval(0.0, 25.0), def)) == DecoratedInterval(Interval(0.0, 5.0), def)
    @test decoration(sqrt(DecoratedInterval(Interval(0.0, 25.0), def))) == decoration(DecoratedInterval(Interval(0.0, 5.0), def))
    @test (DecoratedInterval(Interval(0.0, 25.0), def))^(1/2) == DecoratedInterval(Interval(0.0, 5.0), def)
    @test decoration((DecoratedInterval(Interval(0.0, 25.0), def))^(1/2)) == decoration(DecoratedInterval(Interval(0.0, 5.0), def))
    @test (DecoratedInterval(Interval(0.0, 25.0), def))^(0.5) == DecoratedInterval(Interval(0.0, 5.0), def)
    @test decoration((DecoratedInterval(Interval(0.0, 25.0), def))^(0.5)) == decoration(DecoratedInterval(Interval(0.0, 5.0), def))
    @test (DecoratedInterval(Interval(0.0, 25.0), def))^(1//2) == DecoratedInterval(Interval(0.0, 5.0), def)
    @test decoration((DecoratedInterval(Interval(0.0, 25.0), def))^(1//2)) == decoration(DecoratedInterval(Interval(0.0, 5.0), def))
    @test sqrt(DecoratedInterval(Interval(-5.0, Inf), dac)) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(sqrt(DecoratedInterval(Interval(-5.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test (DecoratedInterval(Interval(-5.0, Inf), dac))^(1/2) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration((DecoratedInterval(Interval(-5.0, Inf), dac))^(1/2)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test (DecoratedInterval(Interval(-5.0, Inf), dac))^(0.5) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration((DecoratedInterval(Interval(-5.0, Inf), dac))^(0.5)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test (DecoratedInterval(Interval(-5.0, Inf), dac))^(1//2) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration((DecoratedInterval(Interval(-5.0, Inf), dac))^(1//2)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
end

@testset "minimal_fma_test" begin
    @test fma(∅, ∅, ∅) == ∅
    @test fma(Interval(-1.0, 1.0), ∅, ∅) == ∅
    @test fma(∅, Interval(-1.0, 1.0), ∅) == ∅
    @test fma(∅, entireinterval(Float64), ∅) == ∅
    @test fma(entireinterval(Float64), ∅, ∅) == ∅
    @test fma(Interval(0.0, 0.0), ∅, ∅) == ∅
    @test fma(Interval(-0.0, -0.0), ∅, ∅) == ∅
    @test fma(∅, Interval(0.0, 0.0), ∅) == ∅
    @test fma(∅, Interval(-0.0, -0.0), ∅) == ∅
    @test fma(entireinterval(Float64), Interval(0.0, 0.0), ∅) == ∅
    @test fma(entireinterval(Float64), Interval(-0.0, -0.0), ∅) == ∅
    @test fma(entireinterval(Float64), Interval(-5.0, -1.0), ∅) == ∅
    @test fma(entireinterval(Float64), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(entireinterval(Float64), Interval(1.0, 3.0), ∅) == ∅
    @test fma(entireinterval(Float64), Interval(-Inf, -1.0), ∅) == ∅
    @test fma(entireinterval(Float64), Interval(-Inf, 3.0), ∅) == ∅
    @test fma(entireinterval(Float64), Interval(-5.0, Inf), ∅) == ∅
    @test fma(entireinterval(Float64), Interval(1.0, Inf), ∅) == ∅
    @test fma(entireinterval(Float64), entireinterval(Float64), ∅) == ∅
    @test fma(Interval(1.0, Inf), Interval(0.0, 0.0), ∅) == ∅
    @test fma(Interval(1.0, Inf), Interval(-0.0, -0.0), ∅) == ∅
    @test fma(Interval(1.0, Inf), Interval(-5.0, -1.0), ∅) == ∅
    @test fma(Interval(1.0, Inf), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(Interval(1.0, Inf), Interval(1.0, 3.0), ∅) == ∅
    @test fma(Interval(1.0, Inf), Interval(-Inf, -1.0), ∅) == ∅
    @test fma(Interval(1.0, Inf), Interval(-Inf, 3.0), ∅) == ∅
    @test fma(Interval(1.0, Inf), Interval(-5.0, Inf), ∅) == ∅
    @test fma(Interval(1.0, Inf), Interval(1.0, Inf), ∅) == ∅
    @test fma(Interval(1.0, Inf), entireinterval(Float64), ∅) == ∅
    @test fma(Interval(-1.0, Inf), Interval(0.0, 0.0), ∅) == ∅
    @test fma(Interval(-1.0, Inf), Interval(-0.0, -0.0), ∅) == ∅
    @test fma(Interval(-1.0, Inf), Interval(-5.0, -1.0), ∅) == ∅
    @test fma(Interval(-1.0, Inf), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(Interval(-1.0, Inf), Interval(1.0, 3.0), ∅) == ∅
    @test fma(Interval(-1.0, Inf), Interval(-Inf, -1.0), ∅) == ∅
    @test fma(Interval(-1.0, Inf), Interval(-Inf, 3.0), ∅) == ∅
    @test fma(Interval(-1.0, Inf), Interval(-5.0, Inf), ∅) == ∅
    @test fma(Interval(-1.0, Inf), Interval(1.0, Inf), ∅) == ∅
    @test fma(Interval(-1.0, Inf), entireinterval(Float64), ∅) == ∅
    @test fma(Interval(-Inf, 3.0), Interval(0.0, 0.0), ∅) == ∅
    @test fma(Interval(-Inf, 3.0), Interval(-0.0, -0.0), ∅) == ∅
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, -1.0), ∅) == ∅
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(Interval(-Inf, 3.0), Interval(1.0, 3.0), ∅) == ∅
    @test fma(Interval(-Inf, 3.0), Interval(-Inf, -1.0), ∅) == ∅
    @test fma(Interval(-Inf, 3.0), Interval(-Inf, 3.0), ∅) == ∅
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, Inf), ∅) == ∅
    @test fma(Interval(-Inf, 3.0), Interval(1.0, Inf), ∅) == ∅
    @test fma(Interval(-Inf, 3.0), entireinterval(Float64), ∅) == ∅
    @test fma(Interval(-Inf, -3.0), Interval(0.0, 0.0), ∅) == ∅
    @test fma(Interval(-Inf, -3.0), Interval(-0.0, -0.0), ∅) == ∅
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, -1.0), ∅) == ∅
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(Interval(-Inf, -3.0), Interval(1.0, 3.0), ∅) == ∅
    @test fma(Interval(-Inf, -3.0), Interval(-Inf, -1.0), ∅) == ∅
    @test fma(Interval(-Inf, -3.0), Interval(-Inf, 3.0), ∅) == ∅
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, Inf), ∅) == ∅
    @test fma(Interval(-Inf, -3.0), Interval(1.0, Inf), ∅) == ∅
    @test fma(Interval(-Inf, -3.0), entireinterval(Float64), ∅) == ∅
    @test fma(Interval(0.0, 0.0), Interval(0.0, 0.0), ∅) == ∅
    @test fma(Interval(0.0, 0.0), Interval(-0.0, -0.0), ∅) == ∅
    @test fma(Interval(0.0, 0.0), Interval(-5.0, -1.0), ∅) == ∅
    @test fma(Interval(0.0, 0.0), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(Interval(0.0, 0.0), Interval(1.0, 3.0), ∅) == ∅
    @test fma(Interval(0.0, 0.0), Interval(-Inf, -1.0), ∅) == ∅
    @test fma(Interval(0.0, 0.0), Interval(-Inf, 3.0), ∅) == ∅
    @test fma(Interval(0.0, 0.0), Interval(-5.0, Inf), ∅) == ∅
    @test fma(Interval(0.0, 0.0), Interval(1.0, Inf), ∅) == ∅
    @test fma(Interval(0.0, 0.0), entireinterval(Float64), ∅) == ∅
    @test fma(Interval(-0.0, -0.0), Interval(0.0, 0.0), ∅) == ∅
    @test fma(Interval(-0.0, -0.0), Interval(-0.0, -0.0), ∅) == ∅
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, -1.0), ∅) == ∅
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(Interval(-0.0, -0.0), Interval(1.0, 3.0), ∅) == ∅
    @test fma(Interval(-0.0, -0.0), Interval(-Inf, -1.0), ∅) == ∅
    @test fma(Interval(-0.0, -0.0), Interval(-Inf, 3.0), ∅) == ∅
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, Inf), ∅) == ∅
    @test fma(Interval(-0.0, -0.0), Interval(1.0, Inf), ∅) == ∅
    @test fma(Interval(-0.0, -0.0), entireinterval(Float64), ∅) == ∅
    @test fma(Interval(1.0, 5.0), Interval(0.0, 0.0), ∅) == ∅
    @test fma(Interval(1.0, 5.0), Interval(-0.0, -0.0), ∅) == ∅
    @test fma(Interval(1.0, 5.0), Interval(-5.0, -1.0), ∅) == ∅
    @test fma(Interval(1.0, 5.0), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(Interval(1.0, 5.0), Interval(1.0, 3.0), ∅) == ∅
    @test fma(Interval(1.0, 5.0), Interval(-Inf, -1.0), ∅) == ∅
    @test fma(Interval(1.0, 5.0), Interval(-Inf, 3.0), ∅) == ∅
    @test fma(Interval(1.0, 5.0), Interval(-5.0, Inf), ∅) == ∅
    @test fma(Interval(1.0, 5.0), Interval(1.0, Inf), ∅) == ∅
    @test fma(Interval(1.0, 5.0), entireinterval(Float64), ∅) == ∅
    @test fma(Interval(-1.0, 5.0), Interval(0.0, 0.0), ∅) == ∅
    @test fma(Interval(-1.0, 5.0), Interval(-0.0, -0.0), ∅) == ∅
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, -1.0), ∅) == ∅
    #min max
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(Interval(-10.0, 2.0), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(Interval(-1.0, 5.0), Interval(-1.0, 10.0), ∅) == ∅
    @test fma(Interval(-2.0, 2.0), Interval(-5.0, 3.0), ∅) == ∅
    #end min max
    @test fma(Interval(-1.0, 5.0), Interval(1.0, 3.0), ∅) == ∅
    @test fma(Interval(-1.0, 5.0), Interval(-Inf, -1.0), ∅) == ∅
    @test fma(Interval(-1.0, 5.0), Interval(-Inf, 3.0), ∅) == ∅
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, Inf), ∅) == ∅
    @test fma(Interval(-1.0, 5.0), Interval(1.0, Inf), ∅) == ∅
    @test fma(Interval(-1.0, 5.0), entireinterval(Float64), ∅) == ∅
    @test fma(Interval(-10.0, -5.0), Interval(0.0, 0.0), ∅) == ∅
    @test fma(Interval(-10.0, -5.0), Interval(-0.0, -0.0), ∅) == ∅
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, -1.0), ∅) == ∅
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, 3.0), ∅) == ∅
    @test fma(Interval(-10.0, -5.0), Interval(1.0, 3.0), ∅) == ∅
    @test fma(Interval(-10.0, -5.0), Interval(-Inf, -1.0), ∅) == ∅
    @test fma(Interval(-10.0, -5.0), Interval(-Inf, 3.0), ∅) == ∅
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, Inf), ∅) == ∅
    @test fma(Interval(-10.0, -5.0), Interval(1.0, Inf), ∅) == ∅
    @test fma(Interval(-10.0, -5.0), entireinterval(Float64), ∅) == ∅
    @test fma(∅, ∅, Interval(-Inf, 2.0)) == ∅
    @test fma(Interval(-1.0, 1.0), ∅, Interval(-Inf, 2.0)) == ∅
    @test fma(∅, Interval(-1.0, 1.0), Interval(-Inf, 2.0)) == ∅
    @test fma(∅, entireinterval(Float64), Interval(-Inf, 2.0)) == ∅
    @test fma(entireinterval(Float64), ∅, Interval(-Inf, 2.0)) == ∅
    @test fma(Interval(0.0, 0.0), ∅, Interval(-Inf, 2.0)) == ∅
    @test fma(Interval(-0.0, -0.0), ∅, Interval(-Inf, 2.0)) == ∅
    @test fma(∅, Interval(0.0, 0.0), Interval(-Inf, 2.0)) == ∅
    @test fma(∅, Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == ∅
    @test fma(entireinterval(Float64), Interval(0.0, 0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(entireinterval(Float64), Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(entireinterval(Float64), Interval(-5.0, -1.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(1.0, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-Inf, -1.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-Inf, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-5.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(1.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), entireinterval(Float64), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(0.0, 0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(1.0, Inf), Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(1.0, Inf), Interval(-5.0, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 1.0)
    @test fma(Interval(1.0, Inf), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(1.0, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-Inf, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 1.0)
    @test fma(Interval(1.0, Inf), Interval(-Inf, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-5.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(1.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), entireinterval(Float64), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(0.0, 0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-1.0, Inf), Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 7.0)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(1.0, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-Inf, -1.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-Inf, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(1.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), entireinterval(Float64), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(0.0, 0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-Inf, 3.0), Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, -1.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(1.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 11.0)
    @test fma(Interval(-Inf, 3.0), Interval(-Inf, -1.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-Inf, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(1.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), entireinterval(Float64), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(0.0, 0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-Inf, -3.0), Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, -1.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(1.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, -1.0)
    @test fma(Interval(-Inf, -3.0), Interval(-Inf, -1.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-Inf, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(1.0, Inf), Interval(-Inf, 2.0)) == Interval(-Inf, -1.0)
    @test fma(Interval(-Inf, -3.0), entireinterval(Float64), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(0.0, 0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(1.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-Inf, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-Inf, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, Inf), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(1.0, Inf), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(0.0, 0.0), entireinterval(Float64), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(0.0, 0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(1.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-Inf, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-Inf, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, Inf), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(1.0, Inf), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-0.0, -0.0), entireinterval(Float64), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(1.0, 5.0), Interval(0.0, 0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(1.0, 5.0), Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 1.0)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 17.0)
    @test fma(Interval(1.0, 5.0), Interval(1.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 17.0)
    @test fma(Interval(1.0, 5.0), Interval(-Inf, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 1.0)
    @test fma(Interval(1.0, 5.0), Interval(-Inf, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 17.0)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(1.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), entireinterval(Float64), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(0.0, 0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-1.0, 5.0), Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 7.0)
    #min max
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 17.0)
    @test fma(Interval(-10.0, 2.0), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 52.0)
    @test fma(Interval(-1.0, 5.0), Interval(-1.0, 10.0), Interval(-Inf, 2.0)) == Interval(-Inf, 52.0)
    @test fma(Interval(-2.0, 2.0), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 12.0)
    #end min max
    @test fma(Interval(-1.0, 5.0), Interval(1.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 17.0)
    @test fma(Interval(-1.0, 5.0), Interval(-Inf, -1.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-Inf, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(1.0, Inf), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), entireinterval(Float64), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(0.0, 0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-10.0, -5.0), Interval(-0.0, -0.0), Interval(-Inf, 2.0)) == Interval(-Inf, 2.0)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, -1.0), Interval(-Inf, 2.0)) == Interval(-Inf, 52.0)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, 52.0)
    @test fma(Interval(-10.0, -5.0), Interval(1.0, 3.0), Interval(-Inf, 2.0)) == Interval(-Inf, -3.0)
    @test fma(Interval(-10.0, -5.0), Interval(-Inf, -1.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(-Inf, 3.0), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, Inf), Interval(-Inf, 2.0)) == Interval(-Inf, 52.0)
    @test fma(Interval(-10.0, -5.0), Interval(1.0, Inf), Interval(-Inf, 2.0)) == Interval(-Inf, -3.0)
    @test fma(Interval(-10.0, -5.0), entireinterval(Float64), Interval(-Inf, 2.0)) == entireinterval(Float64)
    @test fma(∅, ∅, Interval(-2.0, 2.0)) == ∅
    @test fma(Interval(-1.0, 1.0), ∅, Interval(-2.0, 2.0)) == ∅
    @test fma(∅, Interval(-1.0, 1.0), Interval(-2.0, 2.0)) == ∅
    @test fma(∅, entireinterval(Float64), Interval(-2.0, 2.0)) == ∅
    @test fma(entireinterval(Float64), ∅, Interval(-2.0, 2.0)) == ∅
    @test fma(Interval(0.0, 0.0), ∅, Interval(-2.0, 2.0)) == ∅
    @test fma(Interval(-0.0, -0.0), ∅, Interval(-2.0, 2.0)) == ∅
    @test fma(∅, Interval(0.0, 0.0), Interval(-2.0, 2.0)) == ∅
    @test fma(∅, Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == ∅
    @test fma(entireinterval(Float64), Interval(0.0, 0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(entireinterval(Float64), Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(entireinterval(Float64), Interval(-5.0, -1.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(1.0, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-Inf, -1.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-Inf, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-5.0, Inf), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(1.0, Inf), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), entireinterval(Float64), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(0.0, 0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(1.0, Inf), Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(1.0, Inf), Interval(-5.0, -1.0), Interval(-2.0, 2.0)) == Interval(-Inf, 1.0)
    @test fma(Interval(1.0, Inf), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(1.0, 3.0), Interval(-2.0, 2.0)) == Interval(-1.0, Inf)
    @test fma(Interval(1.0, Inf), Interval(-Inf, -1.0), Interval(-2.0, 2.0)) == Interval(-Inf, 1.0)
    @test fma(Interval(1.0, Inf), Interval(-Inf, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-5.0, Inf), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(1.0, Inf), Interval(-2.0, 2.0)) == Interval(-1.0, Inf)
    @test fma(Interval(1.0, Inf), entireinterval(Float64), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(0.0, 0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-1.0, Inf), Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, -1.0), Interval(-2.0, 2.0)) == Interval(-Inf, 7.0)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(1.0, 3.0), Interval(-2.0, 2.0)) == Interval(-5.0, Inf)
    @test fma(Interval(-1.0, Inf), Interval(-Inf, -1.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-Inf, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, Inf), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(1.0, Inf), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), entireinterval(Float64), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(0.0, 0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-Inf, 3.0), Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, -1.0), Interval(-2.0, 2.0)) == Interval(-17.0, Inf)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(1.0, 3.0), Interval(-2.0, 2.0)) == Interval(-Inf, 11.0)
    @test fma(Interval(-Inf, 3.0), Interval(-Inf, -1.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-Inf, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, Inf), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(1.0, Inf), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), entireinterval(Float64), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(0.0, 0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-Inf, -3.0), Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, -1.0), Interval(-2.0, 2.0)) == Interval(1.0, Inf)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(1.0, 3.0), Interval(-2.0, 2.0)) == Interval(-Inf, -1.0)
    @test fma(Interval(-Inf, -3.0), Interval(-Inf, -1.0), Interval(-2.0, 2.0)) == Interval(1.0, Inf)
    @test fma(Interval(-Inf, -3.0), Interval(-Inf, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, Inf), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(1.0, Inf), Interval(-2.0, 2.0)) == Interval(-Inf, -1.0)
    @test fma(Interval(-Inf, -3.0), entireinterval(Float64), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(0.0, 0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, -1.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(1.0, 3.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-Inf, -1.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-Inf, 3.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, Inf), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(0.0, 0.0), Interval(1.0, Inf), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(0.0, 0.0), entireinterval(Float64), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(0.0, 0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, -1.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(1.0, 3.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-Inf, -1.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-Inf, 3.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, Inf), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-0.0, -0.0), Interval(1.0, Inf), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-0.0, -0.0), entireinterval(Float64), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(1.0, 5.0), Interval(0.0, 0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(1.0, 5.0), Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, -1.0), Interval(-2.0, 2.0)) == Interval(-27.0, 1.0)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == Interval(-27.0, 17.0)
    @test fma(Interval(1.0, 5.0), Interval(1.0, 3.0), Interval(-2.0, 2.0)) == Interval(-1.0, 17.0)
    @test fma(Interval(1.0, 5.0), Interval(-Inf, -1.0), Interval(-2.0, 2.0)) == Interval(-Inf, 1.0)
    @test fma(Interval(1.0, 5.0), Interval(-Inf, 3.0), Interval(-2.0, 2.0)) == Interval(-Inf, 17.0)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, Inf), Interval(-2.0, 2.0)) == Interval(-27.0, Inf)
    @test fma(Interval(1.0, 5.0), Interval(1.0, Inf), Interval(-2.0, 2.0)) == Interval(-1.0, Inf)
    @test fma(Interval(1.0, 5.0), entireinterval(Float64), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(0.0, 0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-1.0, 5.0), Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, -1.0), Interval(-2.0, 2.0)) == Interval(-27.0, 7.0)
    #min max
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == Interval(-27.0, 17.0)
    @test fma(Interval(-10.0, 2.0), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == Interval(-32.0, 52.0)
    @test fma(Interval(-1.0, 5.0), Interval(-1.0, 10.0), Interval(-2.0, 2.0)) == Interval(-12.0, 52.0)
    @test fma(Interval(-2.0, 2.0), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == Interval(-12.0, 12.0)
    #end min max
    @test fma(Interval(-1.0, 5.0), Interval(1.0, 3.0), Interval(-2.0, 2.0)) == Interval(-5.0, 17.0)
    @test fma(Interval(-1.0, 5.0), Interval(-Inf, -1.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-Inf, 3.0), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, Inf), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(1.0, Inf), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), entireinterval(Float64), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(0.0, 0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-10.0, -5.0), Interval(-0.0, -0.0), Interval(-2.0, 2.0)) == Interval(-2.0, 2.0)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, -1.0), Interval(-2.0, 2.0)) == Interval(3.0, 52.0)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, 3.0), Interval(-2.0, 2.0)) == Interval(-32.0, 52.0)
    @test fma(Interval(-10.0, -5.0), Interval(1.0, 3.0), Interval(-2.0, 2.0)) == Interval(-32.0, -3.0)
    @test fma(Interval(-10.0, -5.0), Interval(-Inf, -1.0), Interval(-2.0, 2.0)) == Interval(3.0, Inf)
    @test fma(Interval(-10.0, -5.0), Interval(-Inf, 3.0), Interval(-2.0, 2.0)) == Interval(-32.0, Inf)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, Inf), Interval(-2.0, 2.0)) == Interval(-Inf, 52.0)
    @test fma(Interval(-10.0, -5.0), Interval(1.0, Inf), Interval(-2.0, 2.0)) == Interval(-Inf, -3.0)
    @test fma(Interval(-10.0, -5.0), entireinterval(Float64), Interval(-2.0, 2.0)) == entireinterval(Float64)
    @test fma(∅, ∅, Interval(-2.0, Inf)) == ∅
    @test fma(Interval(-1.0, 1.0), ∅, Interval(-2.0, Inf)) == ∅
    @test fma(∅, Interval(-1.0, 1.0), Interval(-2.0, Inf)) == ∅
    @test fma(∅, entireinterval(Float64), Interval(-2.0, Inf)) == ∅
    @test fma(entireinterval(Float64), ∅, Interval(-2.0, Inf)) == ∅
    @test fma(Interval(0.0, 0.0), ∅, Interval(-2.0, Inf)) == ∅
    @test fma(Interval(-0.0, -0.0), ∅, Interval(-2.0, Inf)) == ∅
    @test fma(∅, Interval(0.0, 0.0), Interval(-2.0, Inf)) == ∅
    @test fma(∅, Interval(-0.0, -0.0), Interval(-2.0, Inf)) == ∅
    @test fma(entireinterval(Float64), Interval(0.0, 0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(entireinterval(Float64), Interval(-0.0, -0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(entireinterval(Float64), Interval(-5.0, -1.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(1.0, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-Inf, -1.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-Inf, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-5.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(1.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), entireinterval(Float64), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(0.0, 0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(1.0, Inf), Interval(-0.0, -0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(1.0, Inf), Interval(-5.0, -1.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(1.0, 3.0), Interval(-2.0, Inf)) == Interval(-1.0, Inf)
    @test fma(Interval(1.0, Inf), Interval(-Inf, -1.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-Inf, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-5.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(1.0, Inf), Interval(-2.0, Inf)) == Interval(-1.0, Inf)
    @test fma(Interval(1.0, Inf), entireinterval(Float64), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(0.0, 0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-1.0, Inf), Interval(-0.0, -0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, -1.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(1.0, 3.0), Interval(-2.0, Inf)) == Interval(-5.0, Inf)
    @test fma(Interval(-1.0, Inf), Interval(-Inf, -1.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-Inf, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(1.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), entireinterval(Float64), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(0.0, 0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-Inf, 3.0), Interval(-0.0, -0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, -1.0), Interval(-2.0, Inf)) == Interval(-17.0, Inf)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(1.0, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-Inf, -1.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-Inf, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(1.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), entireinterval(Float64), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(0.0, 0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-Inf, -3.0), Interval(-0.0, -0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, -1.0), Interval(-2.0, Inf)) == Interval(1.0, Inf)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(1.0, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-Inf, -1.0), Interval(-2.0, Inf)) == Interval(1.0, Inf)
    @test fma(Interval(-Inf, -3.0), Interval(-Inf, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(1.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), entireinterval(Float64), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(0.0, 0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(0.0, 0.0), Interval(-0.0, -0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, -1.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(0.0, 0.0), Interval(1.0, 3.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(0.0, 0.0), Interval(-Inf, -1.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(0.0, 0.0), Interval(-Inf, 3.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, Inf), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(0.0, 0.0), Interval(1.0, Inf), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(0.0, 0.0), entireinterval(Float64), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-0.0, -0.0), Interval(0.0, 0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-0.0, -0.0), Interval(-0.0, -0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, -1.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-0.0, -0.0), Interval(1.0, 3.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-0.0, -0.0), Interval(-Inf, -1.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-0.0, -0.0), Interval(-Inf, 3.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, Inf), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-0.0, -0.0), Interval(1.0, Inf), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-0.0, -0.0), entireinterval(Float64), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(1.0, 5.0), Interval(0.0, 0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(1.0, 5.0), Interval(-0.0, -0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, -1.0), Interval(-2.0, Inf)) == Interval(-27.0, Inf)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == Interval(-27.0, Inf)
    @test fma(Interval(1.0, 5.0), Interval(1.0, 3.0), Interval(-2.0, Inf)) == Interval(-1.0, Inf)
    @test fma(Interval(1.0, 5.0), Interval(-Inf, -1.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(-Inf, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, Inf), Interval(-2.0, Inf)) == Interval(-27.0, Inf)
    @test fma(Interval(1.0, 5.0), Interval(1.0, Inf), Interval(-2.0, Inf)) == Interval(-1.0, Inf)
    @test fma(Interval(1.0, 5.0), entireinterval(Float64), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-0.0, -0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-1.0, 5.0), Interval(0.0, 0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, -1.0), Interval(-2.0, Inf)) == Interval(-27.0, Inf)
    #min max
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == Interval(-27.0, Inf)
    @test fma(Interval(-10.0, 2.0), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == Interval(-32.0, Inf)
    @test fma(Interval(-1.0, 5.0), Interval(-1.0, 10.0), Interval(-2.0, Inf)) == Interval(-12.0, Inf)
    @test fma(Interval(-2.0, 2.0), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == Interval(-12.0, Inf)
    #end min max
    @test fma(Interval(-1.0, 5.0), Interval(1.0, 3.0), Interval(-2.0, Inf)) == Interval(-5.0, Inf)
    @test fma(Interval(-1.0, 5.0), Interval(-Inf, -1.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-Inf, 3.0), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(1.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), entireinterval(Float64), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(0.0, 0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-10.0, -5.0), Interval(-0.0, -0.0), Interval(-2.0, Inf)) == Interval(-2.0, Inf)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, -1.0), Interval(-2.0, Inf)) == Interval(3.0, Inf)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, 3.0), Interval(-2.0, Inf)) == Interval(-32.0, Inf)
    @test fma(Interval(-10.0, -5.0), Interval(1.0, 3.0), Interval(-2.0, Inf)) == Interval(-32.0, Inf)
    @test fma(Interval(-10.0, -5.0), Interval(-Inf, -1.0), Interval(-2.0, Inf)) == Interval(3.0, Inf)
    @test fma(Interval(-10.0, -5.0), Interval(-Inf, 3.0), Interval(-2.0, Inf)) == Interval(-32.0, Inf)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(1.0, Inf), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), entireinterval(Float64), Interval(-2.0, Inf)) == entireinterval(Float64)
    @test fma(∅, ∅, entireinterval(Float64)) == ∅
    @test fma(Interval(-1.0, 1.0), ∅, entireinterval(Float64)) == ∅
    @test fma(∅, Interval(-1.0, 1.0), entireinterval(Float64)) == ∅
    @test fma(∅, entireinterval(Float64), entireinterval(Float64)) == ∅
    @test fma(entireinterval(Float64), ∅, entireinterval(Float64)) == ∅
    @test fma(Interval(0.0, 0.0), ∅, entireinterval(Float64)) == ∅
    @test fma(Interval(-0.0, -0.0), ∅, entireinterval(Float64)) == ∅
    @test fma(∅, Interval(0.0, 0.0), entireinterval(Float64)) == ∅
    @test fma(∅, Interval(-0.0, -0.0), entireinterval(Float64)) == ∅
    @test fma(entireinterval(Float64), Interval(0.0, 0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-0.0, -0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-5.0, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(1.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-Inf, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-Inf, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(-5.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), Interval(1.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(entireinterval(Float64), entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(0.0, 0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-0.0, -0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-5.0, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(1.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-Inf, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-Inf, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(-5.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), Interval(1.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, Inf), entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(0.0, 0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-0.0, -0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(1.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-Inf, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-Inf, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(-5.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), Interval(1.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, Inf), entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(0.0, 0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-0.0, -0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(1.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-Inf, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-Inf, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(-5.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), Interval(1.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, 3.0), entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(0.0, 0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-0.0, -0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(1.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-Inf, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-Inf, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(-5.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), Interval(1.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-Inf, -3.0), entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(0.0, 0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(-0.0, -0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(1.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(-Inf, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(-Inf, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(-5.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), Interval(1.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.0, 0.0), entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-0.0, -0.0), Interval(0.0, 0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-0.0, -0.0), Interval(-0.0, -0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-0.0, -0.0), Interval(1.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-0.0, -0.0), Interval(-Inf, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-0.0, -0.0), Interval(-Inf, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-0.0, -0.0), Interval(-5.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-0.0, -0.0), Interval(1.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-0.0, -0.0), entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(0.0, 0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(-0.0, -0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(1.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(-Inf, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(-Inf, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(-5.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), Interval(1.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(1.0, 5.0), entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(0.0, 0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-0.0, -0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    #min max
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, 2.0), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-1.0, 10.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-2.0, 2.0), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    #end min max
    @test fma(Interval(-1.0, 5.0), Interval(1.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-Inf, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-Inf, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(-5.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), Interval(1.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-1.0, 5.0), entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(0.0, 0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(-0.0, -0.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(1.0, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(-Inf, -1.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(-Inf, 3.0), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(-5.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), Interval(1.0, Inf), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(-10.0, -5.0), entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test fma(Interval(0.1, 0.5), Interval(-5.0, 3.0), Interval(-0.1, 0.1)) == Interval(-0x1.4cccccccccccdp+1, 0x1.999999999999ap+0)
    @test fma(Interval(-0.5, 0.2), Interval(-5.0, 3.0), Interval(-0.1, 0.1)) == Interval(-0x1.999999999999ap+0, 0x1.4cccccccccccdp+1)
    @test fma(Interval(-0.5, -0.1), Interval(2.0, 3.0), Interval(-0.1, 0.1)) == Interval(-0x1.999999999999ap+0, -0x1.999999999999ap-4)
    @test fma(Interval(-0.5, -0.1), Interval(-Inf, 3.0), Interval(-0.1, 0.1)) == Interval(-0x1.999999999999ap+0, Inf)
end

@testset "minimal_fma_dec_test" begin
    @test fma(DecoratedInterval(Interval(-0.5, -0.1), com), DecoratedInterval(Interval(-Inf, 3.0), dac), DecoratedInterval(Interval(-0.1, 0.1), com)) == DecoratedInterval(Interval(-0x1.999999999999ap+0, Inf), dac)
    @test decoration(fma(DecoratedInterval(Interval(-0.5, -0.1), com), DecoratedInterval(Interval(-Inf, 3.0), dac), DecoratedInterval(Interval(-0.1, 0.1), com))) == decoration(DecoratedInterval(Interval(-0x1.999999999999ap+0, Inf), dac))
    @test fma(DecoratedInterval(Interval(1.0, 2.0), com), DecoratedInterval(Interval(1.0, 0x1.fffffffffffffp1023), com), DecoratedInterval(Interval(0.0, 1.0), com)) == DecoratedInterval(Interval(1.0, Inf), dac)
    @test decoration(fma(DecoratedInterval(Interval(1.0, 2.0), com), DecoratedInterval(Interval(1.0, 0x1.fffffffffffffp1023), com), DecoratedInterval(Interval(0.0, 1.0), com))) == decoration(DecoratedInterval(Interval(1.0, Inf), dac))
    @test fma(DecoratedInterval(Interval(1.0, 2.0), com), DecoratedInterval(Interval(1.0, 2.0), com), DecoratedInterval(Interval(2.0, 5.0), com)) == DecoratedInterval(Interval(3.0, 9.0), com)
    @test decoration(fma(DecoratedInterval(Interval(1.0, 2.0), com), DecoratedInterval(Interval(1.0, 2.0), com), DecoratedInterval(Interval(2.0, 5.0), com))) == decoration(DecoratedInterval(Interval(3.0, 9.0), com))
end

@testset "minimal_pown_test" begin
    @test ∅ ^ 0 == ∅
    @test entireinterval(Float64) ^ 0 == Interval(1.0, 1.0)
    @test Interval(0.0, 0.0) ^ 0 == Interval(1.0, 1.0)
    @test Interval(-0.0, -0.0) ^ 0 == Interval(1.0, 1.0)
    @test Interval(13.1, 13.1) ^ 0 == Interval(1.0, 1.0)
    @test Interval(-7451.145, -7451.145) ^ 0 == Interval(1.0, 1.0)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ 0 == Interval(1.0, 1.0)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ 0 == Interval(1.0, 1.0)
    @test Interval(0.0, Inf) ^ 0 == Interval(1.0, 1.0)
    @test Interval(-0.0, Inf) ^ 0 == Interval(1.0, 1.0)
    @test Interval(-Inf, 0.0) ^ 0 == Interval(1.0, 1.0)
    @test Interval(-Inf, -0.0) ^ 0 == Interval(1.0, 1.0)
    @test Interval(-324.3, 2.5) ^ 0 == Interval(1.0, 1.0)
    @test ∅ ^ 2 == ∅
    @test entireinterval(Float64) ^ 2 == Interval(0.0, Inf)
    @test Interval(0.0, 0.0) ^ 2 == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ 2 == Interval(0.0, 0.0)
    @test Interval(13.1, 13.1) ^ 2 == Interval(0x1.573851eb851ebp+7, 0x1.573851eb851ecp+7)
    @test Interval(-7451.145, -7451.145) ^ 2 == Interval(0x1.a794a4e7cfaadp+25, 0x1.a794a4e7cfaaep+25)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ 2 == Interval(0x1.fffffffffffffp1023, Inf)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ 2 == Interval(0x1.fffffffffffffp1023, Inf)
    @test Interval(0.0, Inf) ^ 2 == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ 2 == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) ^ 2 == Interval(0.0, Inf)
    @test Interval(-Inf, -0.0) ^ 2 == Interval(0.0, Inf)
    @test Interval(-324.3, 2.5) ^ 2 == Interval(0.0, 0x1.9ad27d70a3d72p+16)
    @test Interval(0.01, 2.33) ^ 2 == Interval(0x1.a36e2eb1c432cp-14, 0x1.5b7318fc50482p+2)
    @test Interval(-1.9, -0.33) ^ 2 == Interval(0x1.be0ded288ce7p-4, 0x1.ce147ae147ae1p+1)
    @test ∅ ^ 8 == ∅
    @test entireinterval(Float64) ^ 8 == Interval(0.0, Inf)
    @test Interval(0.0, 0.0) ^ 8 == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ 8 == Interval(0.0, 0.0)
    @test Interval(13.1, 13.1) ^ 8 == Interval(0x1.9d8fd495853f5p+29, 0x1.9d8fd495853f6p+29)
    @test Interval(-7451.145, -7451.145) ^ 8 == Interval(0x1.dfb1bb622e70dp+102, 0x1.dfb1bb622e70ep+102)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ 8 == Interval(0x1.fffffffffffffp1023, Inf)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ 8 == Interval(0x1.fffffffffffffp1023, Inf)
    @test Interval(0.0, Inf) ^ 8 == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ 8 == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) ^ 8 == Interval(0.0, Inf)
    @test Interval(-Inf, -0.0) ^ 8 == Interval(0.0, Inf)
    @test Interval(-324.3, 2.5) ^ 8 == Interval(0.0, 0x1.a87587109655p+66)
    @test Interval(0.01, 2.33) ^ 8 == Interval(0x1.cd2b297d889bdp-54, 0x1.b253d9f33ce4dp+9)
    @test Interval(-1.9, -0.33) ^ 8 == Interval(0x1.26f1fcdd502a3p-13, 0x1.53abd7bfc4fc6p+7)
    @test ∅ ^ 1 == ∅
    @test entireinterval(Float64) ^ 1 == entireinterval(Float64)
    @test Interval(0.0, 0.0) ^ 1 == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ 1 == Interval(0.0, 0.0)
    @test Interval(13.1, 13.1) ^ 1 == Interval(13.1, 13.1)
    @test Interval(-7451.145, -7451.145) ^ 1 == Interval(-7451.145, -7451.145)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ 1 == Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ 1 == Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023)
    @test Interval(0.0, Inf) ^ 1 == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ 1 == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) ^ 1 == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) ^ 1 == Interval(-Inf, 0.0)
    @test Interval(-324.3, 2.5) ^ 1 == Interval(-324.3, 2.5)
    @test Interval(0.01, 2.33) ^ 1 == Interval(0.01, 2.33)
    @test Interval(-1.9, -0.33) ^ 1 == Interval(-1.9, -0.33)
    @test ∅ ^ 3 == ∅
    @test entireinterval(Float64) ^ 3 == entireinterval(Float64)
    @test Interval(0.0, 0.0) ^ 3 == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ 3 == Interval(0.0, 0.0)
    @test Interval(13.1, 13.1) ^ 3 == Interval(0x1.1902e978d4fdep+11, 0x1.1902e978d4fdfp+11)
    @test Interval(-7451.145, -7451.145) ^ 3 == Interval(-0x1.81460637b9a3dp+38, -0x1.81460637b9a3cp+38)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ 3 == Interval(0x1.fffffffffffffp1023, Inf)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ 3 == Interval(-Inf, -0x1.fffffffffffffp1023)
    @test Interval(0.0, Inf) ^ 3 == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ 3 == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) ^ 3 == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) ^ 3 == Interval(-Inf, 0.0)
    @test Interval(-324.3, 2.5) ^ 3 == Interval(-0x1.0436d2f418938p+25, 0x1.f4p+3)
    @test Interval(0.01, 2.33) ^ 3 == Interval(0x1.0c6f7a0b5ed8dp-20, 0x1.94c75e6362a6p+3)
    @test Interval(-1.9, -0.33) ^ 3 == Interval(-0x1.b6f9db22d0e55p+2, -0x1.266559f6ec5b1p-5)
    @test ∅ ^ 7 == ∅
    @test entireinterval(Float64) ^ 7 == entireinterval(Float64)
    @test Interval(0.0, 0.0) ^ 7 == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ 7 == Interval(0.0, 0.0)
    @test Interval(13.1, 13.1) ^ 7 == Interval(0x1.f91d1b185493bp+25, 0x1.f91d1b185493cp+25)
    @test Interval(-7451.145, -7451.145) ^ 7 == Interval(-0x1.07b1da32f9b59p+90, -0x1.07b1da32f9b58p+90)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ 7 == Interval(0x1.fffffffffffffp1023, Inf)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ 7 == Interval(-Inf, -0x1.fffffffffffffp1023)
    @test Interval(0.0, Inf) ^ 7 == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ 7 == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) ^ 7 == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) ^ 7 == Interval(-Inf, 0.0)
    @test Interval(-324.3, 2.5) ^ 7 == Interval(-0x1.4f109959e6d7fp+58, 0x1.312dp+9)
    @test Interval(0.01, 2.33) ^ 7 == Interval(0x1.6849b86a12b9bp-47, 0x1.74d0373c76313p+8)
    @test Interval(-1.9, -0.33) ^ 7 == Interval(-0x1.658c775099757p+6, -0x1.bee30301bf47ap-12)
    @test ∅ ^ -2 == ∅
    @test entireinterval(Float64) ^ -2 == Interval(0.0, Inf)
    @test Interval(0.0, 0.0) ^ -2 == ∅
    @test Interval(-0.0, -0.0) ^ -2 == ∅
    @test Interval(13.1, 13.1) ^ -2 == Interval(0x1.7de3a077d1568p-8, 0x1.7de3a077d1569p-8)
    @test Interval(-7451.145, -7451.145) ^ -2 == Interval(0x1.3570290cd6e14p-26, 0x1.3570290cd6e15p-26)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ -2 == Interval(0x0p+0, 0x0.0000000000001p-1022)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ -2 == Interval(0x0p+0, 0x0.0000000000001p-1022)
    @test Interval(0.0, Inf) ^ -2 == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ -2 == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) ^ -2 == Interval(0.0, Inf)
    @test Interval(-Inf, -0.0) ^ -2 == Interval(0.0, Inf)
    @test Interval(-324.3, 2.5) ^ -2 == Interval(0x1.3f0c482c977c9p-17, Inf)
    @test Interval(0.01, 2.33) ^ -2 == Interval(0x1.793d85ef38e47p-3, 0x1.388p+13)
    @test Interval(-1.9, -0.33) ^ -2 == Interval(0x1.1ba81104f6c8p-2, 0x1.25d8fa1f801e1p+3)
    @test ∅ ^ -8 == ∅
    @test entireinterval(Float64) ^ -8 == Interval(0.0, Inf)
    @test Interval(0.0, 0.0) ^ -8 == ∅
    @test Interval(-0.0, -0.0) ^ -8 == ∅
    @test Interval(13.1, 13.1) ^ -8 == Interval(0x1.3cef39247ca6dp-30, 0x1.3cef39247ca6ep-30)
    @test Interval(-7451.145, -7451.145) ^ -8 == Interval(0x1.113d9ef0a99acp-103, 0x1.113d9ef0a99adp-103)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ -8 == Interval(0x0p+0, 0x0.0000000000001p-1022)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ -8 == Interval(0x0p+0, 0x0.0000000000001p-1022)
    @test Interval(0.0, Inf) ^ -8 == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ -8 == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) ^ -8 == Interval(0.0, Inf)
    @test Interval(-Inf, -0.0) ^ -8 == Interval(0.0, Inf)
    @test Interval(-324.3, 2.5) ^ -8 == Interval(0x1.34cc3764d1e0cp-67, Inf)
    @test Interval(0.01, 2.33) ^ -8 == Interval(0x1.2dc80db11ab7cp-10, 0x1.1c37937e08p+53)
    @test Interval(-1.9, -0.33) ^ -8 == Interval(0x1.81e104e61630dp-8, 0x1.bc64f21560e34p+12)
    @test ∅ ^ -1 == ∅
    @test entireinterval(Float64) ^ -1 == entireinterval(Float64)
    @test Interval(0.0, 0.0) ^ -1 == ∅
    @test Interval(-0.0, -0.0) ^ -1 == ∅
    @test Interval(13.1, 13.1) ^ -1 == Interval(0x1.38abf82ee6986p-4, 0x1.38abf82ee6987p-4)
    @test Interval(-7451.145, -7451.145) ^ -1 == Interval(-0x1.197422c9048bfp-13, -0x1.197422c9048bep-13)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ -1 == Interval(0x0.4p-1022, 0x0.4000000000001p-1022)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ -1 == Interval(-0x0.4000000000001p-1022, -0x0.4p-1022)
    @test Interval(0.0, Inf) ^ -1 == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ -1 == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) ^ -1 == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) ^ -1 == Interval(-Inf, 0.0)
    @test Interval(-324.3, 2.5) ^ -1 == entireinterval(Float64)
    @test Interval(0.01, 2.33) ^ -1 == Interval(0x1.b77c278dbbe13p-2, 0x1.9p+6)
    @test Interval(-1.9, -0.33) ^ -1 == Interval(-0x1.83e0f83e0f83ep+1, -0x1.0d79435e50d79p-1)
    @test ∅ ^ -3 == ∅
    @test entireinterval(Float64) ^ -3 == entireinterval(Float64)
    @test Interval(0.0, 0.0) ^ -3 == ∅
    @test Interval(-0.0, -0.0) ^ -3 == ∅
    @test Interval(13.1, 13.1) ^ -3 == Interval(0x1.d26df4d8b1831p-12, 0x1.d26df4d8b1832p-12)
    @test Interval(-7451.145, -7451.145) ^ -3 == Interval(-0x1.54347ded91b19p-39, -0x1.54347ded91b18p-39)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ -3 == Interval(0x0p+0, 0x0.0000000000001p-1022)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ -3 == Interval(-0x0.0000000000001p-1022, -0x0p+0)
    @test Interval(0.0, Inf) ^ -3 == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ -3 == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) ^ -3 == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) ^ -3 == Interval(-Inf, 0.0)
    @test Interval(-324.3, 2.5) ^ -3 == entireinterval(Float64)
    @test Interval(0.01, 2.33) ^ -3 == Interval(0x1.43cfba61aacabp-4, 0x1.e848p+19)
    @test Interval(-1.9, -0.33) ^ -3 == Interval(-0x1.bd393ce9e8e7cp+4, -0x1.2a95f6f7c066cp-3)
    @test ∅ ^ -7 == ∅
    @test entireinterval(Float64) ^ -7 == entireinterval(Float64)
    @test Interval(0.0, 0.0) ^ -7 == ∅
    @test Interval(-0.0, -0.0) ^ -7 == ∅
    @test Interval(13.1, 13.1) ^ -7 == Interval(0x1.037d76c912dbcp-26, 0x1.037d76c912dbdp-26)
    @test Interval(-7451.145, -7451.145) ^ -7 == Interval(-0x1.f10f41fb8858fp-91, -0x1.f10f41fb8858ep-91)
    @test Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023) ^ -7 == Interval(0x0p+0, 0x0.0000000000001p-1022)
    @test Interval(-0x1.fffffffffffffp1023, -0x1.fffffffffffffp1023) ^ -7 == Interval(-0x0.0000000000001p-1022, -0x0p+0)
    @test Interval(0.0, Inf) ^ -7 == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ -7 == Interval(0.0, Inf)
    @test Interval(-Inf, 0.0) ^ -7 == Interval(-Inf, 0.0)
    @test Interval(-Inf, -0.0) ^ -7 == Interval(-Inf, 0.0)
    @test Interval(-324.3, 2.5) ^ -7 == entireinterval(Float64)
    @test Interval(0.01, 2.33) ^ -7 == Interval(0x1.5f934d64162a9p-9, 0x1.6bcc41e9p+46)
    @test Interval(-1.9, -0.33) ^ -7 == Interval(-0x1.254cdd3711ddbp+11, -0x1.6e95c4a761e19p-7)
end

@testset "minimal_pown_dec_test" begin
    @test DecoratedInterval(Interval(-5.0, 10.0), com) ^ 0 == DecoratedInterval(Interval(1.0, 1.0), com)
    @test decoration(DecoratedInterval(Interval(-5.0, 10.0), com) ^ 0) == decoration(DecoratedInterval(Interval(1.0, 1.0), com))
    @test DecoratedInterval(Interval(-Inf, 15.0), dac) ^ 0 == DecoratedInterval(Interval(1.0, 1.0), dac)
    @test decoration(DecoratedInterval(Interval(-Inf, 15.0), dac) ^ 0) == decoration(DecoratedInterval(Interval(1.0, 1.0), dac))
    @test DecoratedInterval(Interval(-3.0, 5.0), def) ^ 2 == DecoratedInterval(Interval(0.0, 25.0), def)
    @test decoration(DecoratedInterval(Interval(-3.0, 5.0), def) ^ 2) == decoration(DecoratedInterval(Interval(0.0, 25.0), def))
    @test DecoratedInterval(Interval(-0x1.fffffffffffffp1023, 2.0), com) ^ 2 == DecoratedInterval(Interval(0.0, Inf), dac)
    @test decoration(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, 2.0), com) ^ 2) == decoration(DecoratedInterval(Interval(0.0, Inf), dac))
    @test DecoratedInterval(Interval(-3.0, 5.0), dac) ^ 3 == DecoratedInterval(Interval(-27.0, 125.0), dac)
    @test decoration(DecoratedInterval(Interval(-3.0, 5.0), dac) ^ 3) == decoration(DecoratedInterval(Interval(-27.0, 125.0), dac))
    @test DecoratedInterval(Interval(-0x1.fffffffffffffp1023, 2.0), com) ^ 3 == DecoratedInterval(Interval(-Inf, 8.0), dac)
    @test decoration(DecoratedInterval(Interval(-0x1.fffffffffffffp1023, 2.0), com) ^ 3) == decoration(DecoratedInterval(Interval(-Inf, 8.0), dac))
    @test DecoratedInterval(Interval(3.0, 5.0), com) ^ -2 == DecoratedInterval(Interval(0x1.47ae147ae147ap-5, 0x1.c71c71c71c71dp-4), com)
    @test decoration(DecoratedInterval(Interval(3.0, 5.0), com) ^ -2) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147ap-5, 0x1.c71c71c71c71dp-4), com))
    @test DecoratedInterval(Interval(-5.0, -3.0), def) ^ -2 == DecoratedInterval(Interval(0x1.47ae147ae147ap-5, 0x1.c71c71c71c71dp-4), def)
    @test decoration(DecoratedInterval(Interval(-5.0, -3.0), def) ^ -2) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147ap-5, 0x1.c71c71c71c71dp-4), def))
    @test DecoratedInterval(Interval(-5.0, 3.0), com) ^ -2 == DecoratedInterval(Interval(0x1.47ae147ae147ap-5, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-5.0, 3.0), com) ^ -2) == decoration(DecoratedInterval(Interval(0x1.47ae147ae147ap-5, Inf), trv))
    @test DecoratedInterval(Interval(3.0, 5.0), dac) ^ -3 == DecoratedInterval(Interval(0x1.0624dd2f1a9fbp-7, 0x1.2f684bda12f69p-5), dac)
    @test decoration(DecoratedInterval(Interval(3.0, 5.0), dac) ^ -3) == decoration(DecoratedInterval(Interval(0x1.0624dd2f1a9fbp-7, 0x1.2f684bda12f69p-5), dac))
    @test DecoratedInterval(Interval(-3.0, 5.0), com) ^ -3 == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(DecoratedInterval(Interval(-3.0, 5.0), com) ^ -3) == decoration(DecoratedInterval(entireinterval(Float64), trv))
end

@testset "minimal_pow_test" begin
    @test ∅ ^ ∅ == ∅
    @test ∅ ^ entireinterval(Float64) == ∅
    @test ∅ ^ Interval(-Inf, -1.0) == ∅
    @test ∅ ^ Interval(-Inf, 0.0) == ∅
    @test ∅ ^ Interval(-Inf, -0.0) == ∅
    @test ∅ ^ Interval(0.0, Inf) == ∅
    @test ∅ ^ Interval(-0.0, Inf) == ∅
    @test ∅ ^ Interval(1.0, Inf) == ∅
    @test ∅ ^ Interval(-3.0, 5.0) == ∅
    @test ∅ ^ Interval(0.0, 0.0) == ∅
    @test ∅ ^ Interval(-0.0, -0.0) == ∅
    @test ∅ ^ Interval(-5.0, -5.0) == ∅
    @test ∅ ^ Interval(5.0, 5.0) == ∅
    @test Interval(0.1, 0.5) ^ ∅ == ∅
    @test Interval(0.1, 0.5) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(0.1, 0.5) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(0.1, 0.5) ^ Interval(0.0, 1.0) == Interval(0x1.999999999999ap-4, 1.0)
    @test Interval(0.1, 0.5) ^ Interval(-0.0, 1.0) == Interval(0x1.999999999999ap-4, 1.0)
    @test Interval(0.1, 0.5) ^ Interval(0.0, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 1.0)
    @test Interval(0.1, 0.5) ^ Interval(-0.0, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 1.0)
    @test Interval(0.1, 0.5) ^ Interval(0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(0.1, 0.5) ^ Interval(-0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(0.1, 0.5) ^ Interval(0.1, 0.1) == Interval(0x1.96b230bcdc434p-1, 0x1.ddb680117ab13p-1)
    @test Interval(0.1, 0.5) ^ Interval(0.1, 1.0) == Interval(0x1.999999999999ap-4, 0x1.ddb680117ab13p-1)
    @test Interval(0.1, 0.5) ^ Interval(0.1, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 0x1.ddb680117ab13p-1)
    @test Interval(0.1, 0.5) ^ Interval(0.1, Inf) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(0.1, 0.5) ^ Interval(1.0, 1.0) == Interval(0x1.999999999999ap-4, 0x1p-1)
    @test Interval(0.1, 0.5) ^ Interval(1.0, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 0x1p-1)
    @test Interval(0.1, 0.5) ^ Interval(1.0, Inf) == Interval(0.0, 0x1p-1)
    @test Interval(0.1, 0.5) ^ Interval(2.5, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 0x1.6a09e667f3bcdp-3)
    @test Interval(0.1, 0.5) ^ Interval(2.5, Inf) == Interval(0.0, 0x1.6a09e667f3bcdp-3)
    @test Interval(0.1, 0.5) ^ Interval(-0.1, 0.1) == Interval(0x1.96b230bcdc434p-1, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 0.5) ^ Interval(-0.1, 1.0) == Interval(0x1.999999999999ap-4, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 0.5) ^ Interval(-0.1, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 0.5) ^ Interval(-0.1, Inf) == Interval(0.0, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 0.5) ^ Interval(-1.0, 0.1) == Interval(0x1.96b230bcdc434p-1, 0x1.4p+3)
    @test Interval(0.1, 0.5) ^ Interval(-1.0, 1.0) == Interval(0x1.999999999999ap-4, 0x1.4p+3)
    @test Interval(0.1, 0.5) ^ Interval(-1.0, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 0x1.4p+3)
    @test Interval(0.1, 0.5) ^ Interval(-1.0, Inf) == Interval(0.0, 0x1.4p+3)
    @test Interval(0.1, 0.5) ^ Interval(-2.5, 0.1) == Interval(0x1.96b230bcdc434p-1, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 0.5) ^ Interval(-2.5, 1.0) == Interval(0x1.999999999999ap-4, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 0.5) ^ Interval(-2.5, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 0.5) ^ Interval(-2.5, Inf) == Interval(0.0, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 0.5) ^ Interval(-Inf, 0.1) == Interval(0x1.96b230bcdc434p-1, Inf)
    @test Interval(0.1, 0.5) ^ Interval(-Inf, 1.0) == Interval(0x1.999999999999ap-4, Inf)
    @test Interval(0.1, 0.5) ^ Interval(-Inf, 2.5) == Interval(0x1.9e7c6e43390b7p-9, Inf)
    @test Interval(0.1, 0.5) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(0.1, 0.5) ^ Interval(-1.0, 0.0) == Interval(1.0, 0x1.4p+3)
    @test Interval(0.1, 0.5) ^ Interval(-1.0, -0.0) == Interval(1.0, 0x1.4p+3)
    @test Interval(0.1, 0.5) ^ Interval(-2.5, 0.0) == Interval(1.0, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 0.5) ^ Interval(-2.5, -0.0) == Interval(1.0, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 0.5) ^ Interval(-Inf, 0.0) == Interval(1.0, Inf)
    @test Interval(0.1, 0.5) ^ Interval(-Inf, -0.0) == Interval(1.0, Inf)
    @test Interval(0.1, 0.5) ^ Interval(-0.1, -0.1) == Interval(0x1.125fbee250664p+0, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 0.5) ^ Interval(-1.0, -0.1) == Interval(0x1.125fbee250664p+0, 0x1.4p+3)
    @test Interval(0.1, 0.5) ^ Interval(-2.5, -0.1) == Interval(0x1.125fbee250664p+0, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 0.5) ^ Interval(-Inf, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(0.1, 0.5) ^ Interval(-1.0, -1.0) == Interval(0x1p+1, 0x1.4p+3)
    @test Interval(0.1, 0.5) ^ Interval(-2.5, -1.0) == Interval(0x1p+1, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 0.5) ^ Interval(-Inf, -1.0) == Interval(0x1p+1, Inf)
    @test Interval(0.1, 0.5) ^ Interval(-2.5, -2.5) == Interval(0x1.6a09e667f3bccp+2, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 0.5) ^ Interval(-Inf, -2.5) == Interval(0x1.6a09e667f3bccp+2, Inf)
    @test Interval(0.1, 1.0) ^ ∅ == ∅
    @test Interval(0.1, 1.0) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(0.0, 1.0) == Interval(0x1.999999999999ap-4, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(-0.0, 1.0) == Interval(0x1.999999999999ap-4, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(0.0, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(-0.0, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(-0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(0.1, 0.1) == Interval(0x1.96b230bcdc434p-1, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(0.1, 1.0) == Interval(0x1.999999999999ap-4, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(0.1, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(0.1, Inf) == Interval(0.0, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(1.0, 1.0) == Interval(0x1.999999999999ap-4, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(1.0, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(1.0, Inf) == Interval(0.0, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(2.5, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(2.5, Inf) == Interval(0.0, 1.0)
    @test Interval(0.1, 1.0) ^ Interval(-0.1, 0.1) == Interval(0x1.96b230bcdc434p-1, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 1.0) ^ Interval(-0.1, 1.0) == Interval(0x1.999999999999ap-4, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 1.0) ^ Interval(-0.1, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 1.0) ^ Interval(-0.1, Inf) == Interval(0.0, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 1.0) ^ Interval(-1.0, 0.1) == Interval(0x1.96b230bcdc434p-1, 0x1.4p+3)
    @test Interval(0.1, 1.0) ^ Interval(-1.0, 1.0) == Interval(0x1.999999999999ap-4, 0x1.4p+3)
    @test Interval(0.1, 1.0) ^ Interval(-1.0, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 0x1.4p+3)
    @test Interval(0.1, 1.0) ^ Interval(-1.0, Inf) == Interval(0.0, 0x1.4p+3)
    @test Interval(0.1, 1.0) ^ Interval(-2.5, 0.1) == Interval(0x1.96b230bcdc434p-1, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 1.0) ^ Interval(-2.5, 1.0) == Interval(0x1.999999999999ap-4, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 1.0) ^ Interval(-2.5, 2.5) == Interval(0x1.9e7c6e43390b7p-9, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 1.0) ^ Interval(-2.5, Inf) == Interval(0.0, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 1.0) ^ Interval(-Inf, 0.1) == Interval(0x1.96b230bcdc434p-1, Inf)
    @test Interval(0.1, 1.0) ^ Interval(-Inf, 1.0) == Interval(0x1.999999999999ap-4, Inf)
    @test Interval(0.1, 1.0) ^ Interval(-Inf, 2.5) == Interval(0x1.9e7c6e43390b7p-9, Inf)
    @test Interval(0.1, 1.0) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(0.1, 1.0) ^ Interval(-0.1, 0.0) == Interval(1.0, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 1.0) ^ Interval(-0.1, -0.0) == Interval(1.0, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 1.0) ^ Interval(-1.0, 0.0) == Interval(1.0, 0x1.4p+3)
    @test Interval(0.1, 1.0) ^ Interval(-1.0, -0.0) == Interval(1.0, 0x1.4p+3)
    @test Interval(0.1, 1.0) ^ Interval(-2.5, 0.0) == Interval(1.0, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 1.0) ^ Interval(-2.5, -0.0) == Interval(1.0, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 1.0) ^ Interval(-Inf, 0.0) == Interval(1.0, Inf)
    @test Interval(0.1, 1.0) ^ Interval(-Inf, -0.0) == Interval(1.0, Inf)
    @test Interval(0.1, 1.0) ^ Interval(-0.1, -0.1) == Interval(1.0, 0x1.4248ef8fc2604p+0)
    @test Interval(0.1, 1.0) ^ Interval(-1.0, -0.1) == Interval(1.0, 0x1.4p+3)
    @test Interval(0.1, 1.0) ^ Interval(-2.5, -0.1) == Interval(1.0, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 1.0) ^ Interval(-Inf, -0.1) == Interval(1.0, Inf)
    @test Interval(0.1, 1.0) ^ Interval(-1.0, -1.0) == Interval(1.0, 0x1.4p+3)
    @test Interval(0.1, 1.0) ^ Interval(-2.5, -1.0) == Interval(1.0, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 1.0) ^ Interval(-Inf, -1.0) == Interval(1.0, Inf)
    @test Interval(0.1, 1.0) ^ Interval(-2.5, -2.5) == Interval(1.0, 0x1.3c3a4edfa9758p+8)
    @test Interval(0.1, 1.0) ^ Interval(-Inf, -2.5) == Interval(1.0, Inf)
    @test Interval(0.5, 1.5) ^ ∅ == ∅
    @test Interval(0.5, 1.5) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(0.5, 1.5) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(0.5, 1.5) ^ Interval(0.0, 1.0) == Interval(0.5, 1.5)
    @test Interval(0.5, 1.5) ^ Interval(-0.0, 1.0) == Interval(0.5, 1.5)
    @test Interval(0.5, 1.5) ^ Interval(0.0, 2.5) == Interval(0x1.6a09e667f3bccp-3, 0x1.60b9fd68a4555p+1)
    @test Interval(0.5, 1.5) ^ Interval(-0.0, 2.5) == Interval(0x1.6a09e667f3bccp-3, 0x1.60b9fd68a4555p+1)
    @test Interval(0.5, 1.5) ^ Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(0.1, 0.1) == Interval(0x1.ddb680117ab12p-1, 0x1.0a97dce72a0cbp+0)
    @test Interval(0.5, 1.5) ^ Interval(0.1, 1.0) == Interval(0.5, 1.5)
    @test Interval(0.5, 1.5) ^ Interval(0.1, 2.5) == Interval(0x1.6a09e667f3bccp-3, 0x1.60b9fd68a4555p+1)
    @test Interval(0.5, 1.5) ^ Interval(0.1, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(1.0, 1.0) == Interval(0.5, 1.5)
    @test Interval(0.5, 1.5) ^ Interval(1.0, 2.5) == Interval(0x1.6a09e667f3bccp-3, 0x1.60b9fd68a4555p+1)
    @test Interval(0.5, 1.5) ^ Interval(1.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(2.5, 2.5) == Interval(0x1.6a09e667f3bccp-3, 0x1.60b9fd68a4555p+1)
    @test Interval(0.5, 1.5) ^ Interval(2.5, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-0.1, 0.1) == Interval(0x1.ddb680117ab12p-1, 0x1.125fbee250665p+0)
    @test Interval(0.5, 1.5) ^ Interval(-0.1, 1.0) == Interval(0x1p-1, 0x1.8p+0)
    @test Interval(0.5, 1.5) ^ Interval(-0.1, 2.5) == Interval(0x1.6a09e667f3bccp-3, 0x1.60b9fd68a4555p+1)
    @test Interval(0.5, 1.5) ^ Interval(-0.1, Inf) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-1.0, 0.1) == Interval(0x1.5555555555555p-1, 0x1p+1)
    @test Interval(0.5, 1.5) ^ Interval(-1.0, 1.0) == Interval(0x1p-1, 0x1p+1)
    @test Interval(0.5, 1.5) ^ Interval(-1.0, 2.5) == Interval(0x1.6a09e667f3bccp-3, 0x1.60b9fd68a4555p+1)
    @test Interval(0.5, 1.5) ^ Interval(-1.0, Inf) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-2.5, 0.1) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, 1.5) ^ Interval(-2.5, 1.0) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, 1.5) ^ Interval(-2.5, 2.5) == Interval(0x1.6a09e667f3bccp-3, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, 1.5) ^ Interval(-2.5, Inf) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-Inf, 0.1) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-Inf, 1.0) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-Inf, 2.5) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ entireinterval(Float64) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-1.0, 0.0) == Interval(0x1.5555555555555p-1, 0x1p+1)
    @test Interval(0.5, 1.5) ^ Interval(-1.0, -0.0) == Interval(0x1.5555555555555p-1, 0x1p+1)
    @test Interval(0.5, 1.5) ^ Interval(-2.5, 0.0) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, 1.5) ^ Interval(-2.5, -0.0) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, 1.5) ^ Interval(-Inf, 0.0) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-Inf, -0.0) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-0.1, -0.1) == Interval(0x1.eba7c9e4d31e9p-1, 0x1.125fbee250665p+0)
    @test Interval(0.5, 1.5) ^ Interval(-1.0, -0.1) == Interval(0x1.5555555555555p-1, 0x1p+1)
    @test Interval(0.5, 1.5) ^ Interval(-2.5, -0.1) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, 1.5) ^ Interval(-Inf, -0.1) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-1.0, -1.0) == Interval(0x1.5555555555555p-1, 0x1p+1)
    @test Interval(0.5, 1.5) ^ Interval(-2.5, -1.0) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, 1.5) ^ Interval(-Inf, -1.0) == Interval(0x0p+0, Inf)
    @test Interval(0.5, 1.5) ^ Interval(-2.5, -2.5) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, 1.5) ^ Interval(-Inf, -2.5) == Interval(0x0p+0, Inf)
    @test Interval(0.5, Inf) ^ ∅ == ∅
    @test Interval(0.5, Inf) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(0.5, Inf) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(0.5, Inf) ^ Interval(0.0, 1.0) == Interval(0.5, Inf)
    @test Interval(0.5, Inf) ^ Interval(-0.0, 1.0) == Interval(0.5, Inf)
    @test Interval(0.5, Inf) ^ Interval(0.0, 2.5) == Interval(0x1.6a09e667f3bccp-3, Inf)
    @test Interval(0.5, Inf) ^ Interval(-0.0, 2.5) == Interval(0x1.6a09e667f3bccp-3, Inf)
    @test Interval(0.5, Inf) ^ Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(0.1, 0.1) == Interval(0x1.ddb680117ab12p-1, Inf)
    @test Interval(0.5, Inf) ^ Interval(0.1, 1.0) == Interval(0.5, Inf)
    @test Interval(0.5, Inf) ^ Interval(0.1, 2.5) == Interval(0x1.6a09e667f3bccp-3, Inf)
    @test Interval(0.5, Inf) ^ Interval(0.1, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(1.0, 1.0) == Interval(0.5, Inf)
    @test Interval(0.5, Inf) ^ Interval(1.0, 2.5) == Interval(0x1.6a09e667f3bccp-3, Inf)
    @test Interval(0.5, Inf) ^ Interval(1.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(2.5, 2.5) == Interval(0x1.6a09e667f3bccp-3, Inf)
    @test Interval(0.5, Inf) ^ Interval(2.5, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-1.0, 0.0) == Interval(0.0, 0x1p+1)
    @test Interval(0.5, Inf) ^ Interval(-1.0, -0.0) == Interval(0.0, 0x1p+1)
    @test Interval(0.5, Inf) ^ Interval(-2.5, 0.0) == Interval(0.0, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, Inf) ^ Interval(-2.5, -0.0) == Interval(0.0, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, Inf) ^ Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-0.1, -0.1) == Interval(0.0, 0x1.125fbee250665p+0)
    @test Interval(0.5, Inf) ^ Interval(-1.0, -0.1) == Interval(0.0, 0x1p+1)
    @test Interval(0.5, Inf) ^ Interval(-2.5, -0.1) == Interval(0.0, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, Inf) ^ Interval(-Inf, -0.1) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-1.0, -1.0) == Interval(0.0, 0x1p+1)
    @test Interval(0.5, Inf) ^ Interval(-2.5, -1.0) == Interval(0.0, 0x1.6a09e667f3bcdp+2)
    @test Interval(0.5, Inf) ^ Interval(-Inf, -1.0) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-Inf, -2.5) == Interval(0.0, Inf)
    @test Interval(0.5, Inf) ^ Interval(-2.5, -2.5) == Interval(0.0, 0x1.6a09e667f3bcdp+2)
    @test Interval(1.0, 1.5) ^ ∅ == ∅
    @test Interval(1.0, 1.5) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(0.0, 1.0) == Interval(1.0, 0x1.8p+0)
    @test Interval(1.0, 1.5) ^ Interval(-0.0, 1.0) == Interval(1.0, 0x1.8p+0)
    @test Interval(1.0, 1.5) ^ Interval(0.0, 2.5) == Interval(1.0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.0, 1.5) ^ Interval(-0.0, 2.5) == Interval(1.0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.0, 1.5) ^ Interval(0.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, 1.5) ^ Interval(-0.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, 1.5) ^ Interval(0.1, 0.1) == Interval(1.0, 0x1.0a97dce72a0cbp+0)
    @test Interval(1.0, 1.5) ^ Interval(0.1, 1.0) == Interval(1.0, 0x1.8p+0)
    @test Interval(1.0, 1.5) ^ Interval(0.1, 2.5) == Interval(1.0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.0, 1.5) ^ Interval(0.1, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, 1.5) ^ Interval(1.0, 1.0) == Interval(1.0, 0x1.8p+0)
    @test Interval(1.0, 1.5) ^ Interval(1.0, 2.5) == Interval(1.0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.0, 1.5) ^ Interval(1.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, 1.5) ^ Interval(2.5, 2.5) == Interval(1.0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.0, 1.5) ^ Interval(2.5, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, 1.5) ^ Interval(-0.1, 0.1) == Interval(0x1.eba7c9e4d31e9p-1, 0x1.0a97dce72a0cbp+0)
    @test Interval(1.0, 1.5) ^ Interval(-0.1, 1.0) == Interval(0x1.eba7c9e4d31e9p-1, 0x1.8p+0)
    @test Interval(1.0, 1.5) ^ Interval(-0.1, 2.5) == Interval(0x1.eba7c9e4d31e9p-1, 0x1.60b9fd68a4555p+1)
    @test Interval(1.0, 1.5) ^ Interval(-0.1, Inf) == Interval(0x1.eba7c9e4d31e9p-1, Inf)
    @test Interval(1.0, 1.5) ^ Interval(-1.0, 0.1) == Interval(0x1.5555555555555p-1, 0x1.0a97dce72a0cbp+0)
    @test Interval(1.0, 1.5) ^ Interval(-1.0, 1.0) == Interval(0x1.5555555555555p-1, 0x1.8p+0)
    @test Interval(1.0, 1.5) ^ Interval(-1.0, 2.5) == Interval(0x1.5555555555555p-1, 0x1.60b9fd68a4555p+1)
    @test Interval(1.0, 1.5) ^ Interval(-1.0, Inf) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(1.0, 1.5) ^ Interval(-2.5, 0.1) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.0a97dce72a0cbp+0)
    @test Interval(1.0, 1.5) ^ Interval(-2.5, 1.0) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.8p+0)
    @test Interval(1.0, 1.5) ^ Interval(-2.5, 2.5) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.60b9fd68a4555p+1)
    @test Interval(1.0, 1.5) ^ Interval(-2.5, Inf) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(1.0, 1.5) ^ Interval(-Inf, 0.1) == Interval(0x0p+0, 0x1.0a97dce72a0cbp+0)
    @test Interval(1.0, 1.5) ^ Interval(-Inf, 1.0) == Interval(0x0p+0, 0x1.8p+0)
    @test Interval(1.0, 1.5) ^ Interval(-Inf, 2.5) == Interval(0x0p+0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.0, 1.5) ^ entireinterval(Float64) == Interval(0x0p+0, Inf)
    @test Interval(1.0, 1.5) ^ Interval(-1.0, 0.0) == Interval(0x1.5555555555555p-1, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-1.0, -0.0) == Interval(0x1.5555555555555p-1, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-2.5, 0.0) == Interval(0x1.7398bf1d1ee6fp-2, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-2.5, -0.0) == Interval(0x1.7398bf1d1ee6fp-2, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-Inf, 0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-Inf, -0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-0.1, -0.1) == Interval(0x1.eba7c9e4d31e9p-1, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-1.0, -0.1) == Interval(0x1.5555555555555p-1, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-2.5, -0.1) == Interval(0x1.7398bf1d1ee6fp-2, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-Inf, -0.1) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-1.0, -1.0) == Interval(0x1.5555555555555p-1, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-2.5, -1.0) == Interval(0x1.7398bf1d1ee6fp-2, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-Inf, -1.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-2.5, -2.5) == Interval(0x1.7398bf1d1ee6fp-2, 1.0)
    @test Interval(1.0, 1.5) ^ Interval(-Inf, -2.5) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ ∅ == ∅
    @test Interval(1.0, Inf) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(0.0, 1.0) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-0.0, 1.0) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(0.0, 2.5) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-0.0, 2.5) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(0.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-0.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(0.1, 0.1) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(0.1, 1.0) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(0.1, 2.5) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(0.1, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(1.0, 1.0) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(1.0, 2.5) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(1.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(2.5, 2.5) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(2.5, Inf) == Interval(1.0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-0.1, 0.1) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-0.1, 1.0) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-0.1, 2.5) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-0.1, Inf) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-1.0, 0.1) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-1.0, 1.0) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-1.0, 2.5) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-1.0, Inf) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-2.5, 0.1) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-2.5, 1.0) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-2.5, 2.5) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-2.5, Inf) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-Inf, 0.1) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-Inf, 1.0) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-Inf, 2.5) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ entireinterval(Float64) == Interval(0x0p+0, Inf)
    @test Interval(1.0, Inf) ^ Interval(-1.0, 0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-1.0, -0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-2.5, 0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-2.5, -0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-Inf, 0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-Inf, -0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-0.1, -0.1) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-1.0, -0.1) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-2.5, -0.1) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-Inf, -0.1) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-1.0, -1.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-2.5, -1.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-Inf, -1.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-2.5, -2.5) == Interval(0x0p+0, 1.0)
    @test Interval(1.0, Inf) ^ Interval(-Inf, -2.5) == Interval(0x0p+0, 1.0)
    @test Interval(1.1, 1.5) ^ ∅ == ∅
    @test Interval(1.1, 1.5) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(1.1, 1.5) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(1.1, 1.5) ^ Interval(0.0, 1.0) == Interval(1.0, 0x1.8p+0)
    @test Interval(1.1, 1.5) ^ Interval(-0.0, 1.0) == Interval(1.0, 0x1.8p+0)
    @test Interval(1.1, 1.5) ^ Interval(0.0, 2.5) == Interval(1.0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.1, 1.5) ^ Interval(-0.0, 2.5) == Interval(1.0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.1, 1.5) ^ Interval(0.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.1, 1.5) ^ Interval(-0.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.1, 1.5) ^ Interval(0.1, 0.1) == Interval(0x1.02739c65d58bfp+0, 0x1.0a97dce72a0cbp+0)
    @test Interval(1.1, 1.5) ^ Interval(0.1, 1.0) == Interval(0x1.02739c65d58bfp+0, 0x1.8p+0)
    @test Interval(1.1, 1.5) ^ Interval(0.1, 2.5) == Interval(0x1.02739c65d58bfp+0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.1, 1.5) ^ Interval(0.1, Inf) == Interval(0x1.02739c65d58bfp+0, Inf)
    @test Interval(1.1, 1.5) ^ Interval(1.0, 1.0) == Interval(0x1.199999999999ap+0, 0x1.8p+0)
    @test Interval(1.1, 1.5) ^ Interval(1.0, 2.5) == Interval(0x1.199999999999ap+0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.1, 1.5) ^ Interval(1.0, Inf) == Interval(0x1.199999999999ap+0, Inf)
    @test Interval(1.1, 1.5) ^ Interval(2.5, 2.5) == Interval(0x1.44e1080833b25p+0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.1, 1.5) ^ Interval(2.5, Inf) == Interval(0x1.44e1080833b25p+0, Inf)
    @test Interval(1.1, 1.5) ^ Interval(-0.1, 0.1) == Interval(0x1.eba7c9e4d31e9p-1, 0x1.0a97dce72a0cbp+0)
    @test Interval(1.1, 1.5) ^ Interval(-0.1, 1.0) == Interval(0x1.eba7c9e4d31e9p-1, 0x1.8p+0)
    @test Interval(1.1, 1.5) ^ Interval(-0.1, 2.5) == Interval(0x1.eba7c9e4d31e9p-1, 0x1.60b9fd68a4555p+1)
    @test Interval(1.1, 1.5) ^ Interval(-0.1, Inf) == Interval(0x1.eba7c9e4d31e9p-1, Inf)
    @test Interval(1.1, 1.5) ^ Interval(-1.0, 0.1) == Interval(0x1.5555555555555p-1, 0x1.0a97dce72a0cbp+0)
    @test Interval(1.1, 1.5) ^ Interval(-1.0, 1.0) == Interval(0x1.5555555555555p-1, 0x1.8p+0)
    @test Interval(1.1, 1.5) ^ Interval(-1.0, 2.5) == Interval(0x1.5555555555555p-1, 0x1.60b9fd68a4555p+1)
    @test Interval(1.1, 1.5) ^ Interval(-1.0, Inf) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(1.1, 1.5) ^ Interval(-2.5, 0.1) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.0a97dce72a0cbp+0)
    @test Interval(1.1, 1.5) ^ Interval(-2.5, 1.0) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.8p+0)
    @test Interval(1.1, 1.5) ^ Interval(-2.5, 2.5) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.60b9fd68a4555p+1)
    @test Interval(1.1, 1.5) ^ Interval(-2.5, Inf) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(1.1, 1.5) ^ Interval(-Inf, 0.1) == Interval(0x0p+0, 0x1.0a97dce72a0cbp+0)
    @test Interval(1.1, 1.5) ^ Interval(-Inf, 1.0) == Interval(0x0p+0, 0x1.8p+0)
    @test Interval(1.1, 1.5) ^ Interval(-Inf, 2.5) == Interval(0x0p+0, 0x1.60b9fd68a4555p+1)
    @test Interval(1.1, 1.5) ^ entireinterval(Float64) == Interval(0x0p+0, Inf)
    @test Interval(1.1, 1.5) ^ Interval(-1.0, 0.0) == Interval(0x1.5555555555555p-1, 1.0)
    @test Interval(1.1, 1.5) ^ Interval(-1.0, -0.0) == Interval(0x1.5555555555555p-1, 1.0)
    @test Interval(1.1, 1.5) ^ Interval(-2.5, 0.0) == Interval(0x1.7398bf1d1ee6fp-2, 1.0)
    @test Interval(1.1, 1.5) ^ Interval(-2.5, -0.0) == Interval(0x1.7398bf1d1ee6fp-2, 1.0)
    @test Interval(1.1, 1.5) ^ Interval(-Inf, 0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.1, 1.5) ^ Interval(-Inf, -0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.1, 1.5) ^ Interval(-0.1, -0.1) == Interval(0x1.eba7c9e4d31e9p-1, 0x1.fb24af5281928p-1)
    @test Interval(1.1, 1.5) ^ Interval(-1.0, -0.1) == Interval(0x1.5555555555555p-1, 0x1.fb24af5281928p-1)
    @test Interval(1.1, 1.5) ^ Interval(-2.5, -0.1) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.fb24af5281928p-1)
    @test Interval(1.1, 1.5) ^ Interval(-Inf, -0.1) == Interval(0x0p+0, 0x1.fb24af5281928p-1)
    @test Interval(1.1, 1.5) ^ Interval(-1.0, -1.0) == Interval(0x1.5555555555555p-1, 0x1.d1745d1745d17p-1)
    @test Interval(1.1, 1.5) ^ Interval(-2.5, -1.0) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.d1745d1745d17p-1)
    @test Interval(1.1, 1.5) ^ Interval(-Inf, -1.0) == Interval(0x0p+0, 0x1.d1745d1745d17p-1)
    @test Interval(1.1, 1.5) ^ Interval(-2.5, -2.5) == Interval(0x1.7398bf1d1ee6fp-2, 0x1.9372d999784c8p-1)
    @test Interval(1.1, 1.5) ^ Interval(-Inf, -2.5) == Interval(0x0p+0, 0x1.9372d999784c8p-1)
    @test Interval(1.1, Inf) ^ ∅ == ∅
    @test Interval(1.1, Inf) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(1.1, Inf) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(1.1, Inf) ^ Interval(0.0, 1.0) == Interval(1.0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-0.0, 1.0) == Interval(1.0, Inf)
    @test Interval(1.1, Inf) ^ Interval(0.0, 2.5) == Interval(1.0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-0.0, 2.5) == Interval(1.0, Inf)
    @test Interval(1.1, Inf) ^ Interval(0.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-0.0, Inf) == Interval(1.0, Inf)
    @test Interval(1.1, Inf) ^ Interval(0.1, 0.1) == Interval(0x1.02739c65d58bfp+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(0.1, 1.0) == Interval(0x1.02739c65d58bfp+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(0.1, 2.5) == Interval(0x1.02739c65d58bfp+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(0.1, Inf) == Interval(0x1.02739c65d58bfp+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(1.0, 1.0) == Interval(0x1.199999999999ap+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(1.0, 2.5) == Interval(0x1.199999999999ap+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(1.0, Inf) == Interval(0x1.199999999999ap+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(2.5, 2.5) == Interval(0x1.44e1080833b25p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(2.5, Inf) == Interval(0x1.44e1080833b25p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-0.1, 0.1) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-0.1, 1.0) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-0.1, 2.5) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-0.1, Inf) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-1.0, 0.1) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-1.0, 1.0) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-1.0, 2.5) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-1.0, Inf) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-2.5, 0.1) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-2.5, 1.0) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-2.5, 2.5) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-2.5, Inf) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-Inf, 0.1) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-Inf, 1.0) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-Inf, 2.5) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ entireinterval(Float64) == Interval(0x0p+0, Inf)
    @test Interval(1.1, Inf) ^ Interval(-1.0, 0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.1, Inf) ^ Interval(-1.0, -0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.1, Inf) ^ Interval(-2.5, 0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.1, Inf) ^ Interval(-2.5, -0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.1, Inf) ^ Interval(-Inf, 0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.1, Inf) ^ Interval(-Inf, -0.0) == Interval(0x0p+0, 1.0)
    @test Interval(1.1, Inf) ^ Interval(-0.1, -0.1) == Interval(0x0p+0, 0x1.fb24af5281928p-1)
    @test Interval(1.1, Inf) ^ Interval(-1.0, -0.1) == Interval(0x0p+0, 0x1.fb24af5281928p-1)
    @test Interval(1.1, Inf) ^ Interval(-2.5, -0.1) == Interval(0x0p+0, 0x1.fb24af5281928p-1)
    @test Interval(1.1, Inf) ^ Interval(-Inf, -0.1) == Interval(0x0p+0, 0x1.fb24af5281928p-1)
    @test Interval(1.1, Inf) ^ Interval(-1.0, -1.0) == Interval(0x0p+0, 0x1.d1745d1745d17p-1)
    @test Interval(1.1, Inf) ^ Interval(-2.5, -1.0) == Interval(0x0p+0, 0x1.d1745d1745d17p-1)
    @test Interval(1.1, Inf) ^ Interval(-Inf, -1.0) == Interval(0x0p+0, 0x1.d1745d1745d17p-1)
    @test Interval(1.1, Inf) ^ Interval(-2.5, -2.5) == Interval(0x0p+0, 0x1.9372d999784c8p-1)
    @test Interval(1.1, Inf) ^ Interval(-Inf, -2.5) == Interval(0x0p+0, 0x1.9372d999784c8p-1)
    @test Interval(0.0, 0.5) ^ ∅ == ∅
    @test Interval(0.0, 0.5) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(0.0, 0.5) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(0.0, 0.5) ^ Interval(0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(0.0, 0.5) ^ Interval(-0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(0.0, 0.5) ^ Interval(0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(0.0, 0.5) ^ Interval(-0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(0.0, 0.5) ^ Interval(0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(0.0, 0.5) ^ Interval(-0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(0.0, 0.5) ^ Interval(0.1, 0.1) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(0.0, 0.5) ^ Interval(0.1, 1.0) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(0.0, 0.5) ^ Interval(0.1, 2.5) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(0.0, 0.5) ^ Interval(0.1, Inf) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(0.0, 0.5) ^ Interval(1.0, 1.0) == Interval(0.0, 0.5)
    @test Interval(0.0, 0.5) ^ Interval(1.0, 2.5) == Interval(0.0, 0.5)
    @test Interval(0.0, 0.5) ^ Interval(1.0, Inf) == Interval(0.0, 0.5)
    @test Interval(0.0, 0.5) ^ Interval(2.5, 2.5) == Interval(0.0, 0x1.6a09e667f3bcdp-3)
    @test Interval(0.0, 0.5) ^ Interval(2.5, Inf) == Interval(0.0, 0x1.6a09e667f3bcdp-3)
    @test Interval(0.0, 0.5) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-1.0, 0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-1.0, -0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-2.5, 0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-2.5, -0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-Inf, 0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-Inf, -0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-0.1, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-1.0, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-2.5, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-Inf, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-1.0, -1.0) == Interval(0x1p+1, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-2.5, -1.0) == Interval(0x1p+1, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-Inf, -1.0) == Interval(0x1p+1, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-2.5, -2.5) == Interval(0x1.6a09e667f3bccp+2, Inf)
    @test Interval(0.0, 0.5) ^ Interval(-Inf, -2.5) == Interval(0x1.6a09e667f3bccp+2, Inf)
    @test Interval(0.0, 1.0) ^ ∅ == ∅
    @test Interval(0.0, 1.0) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(-0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(-0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(-0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(0.1, 0.1) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(0.1, 1.0) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(0.1, 2.5) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(0.1, Inf) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(1.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(1.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(1.0, Inf) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(2.5, 2.5) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(2.5, Inf) == Interval(0.0, 1.0)
    @test Interval(0.0, 1.0) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-0.1, 0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-0.1, -0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-1.0, 0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-1.0, -0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-2.5, 0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-2.5, -0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-Inf, 0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-Inf, -0.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-0.1, -0.1) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-1.0, -0.1) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-2.5, -0.1) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-Inf, -0.1) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-1.0, -1.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-2.5, -1.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-Inf, -1.0) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-2.5, -2.5) == Interval(1.0, Inf)
    @test Interval(0.0, 1.0) ^ Interval(-Inf, -2.5) == Interval(1.0, Inf)
    @test Interval(0.0, 1.5) ^ ∅ == ∅
    @test Interval(0.0, 1.5) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(0.0, 1.5) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(0.0, 1.5) ^ Interval(0.0, 1.0) == Interval(0.0, 1.5)
    @test Interval(0.0, 1.5) ^ Interval(-0.0, 1.0) == Interval(0.0, 1.5)
    @test Interval(0.0, 1.5) ^ Interval(0.0, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(0.0, 1.5) ^ Interval(-0.0, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(0.0, 1.5) ^ Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(0.1, 0.1) == Interval(0.0, 0x1.0a97dce72a0cbp+0)
    @test Interval(0.0, 1.5) ^ Interval(0.1, 1.0) == Interval(0.0, 1.5)
    @test Interval(0.0, 1.5) ^ Interval(0.1, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(0.0, 1.5) ^ Interval(0.1, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(1.0, 1.0) == Interval(0.0, 1.5)
    @test Interval(0.0, 1.5) ^ Interval(1.0, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(0.0, 1.5) ^ Interval(1.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(2.5, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(0.0, 1.5) ^ Interval(2.5, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-1.0, 0.0) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-1.0, -0.0) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-2.5, 0.0) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-2.5, -0.0) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-0.1, -0.1) == Interval(0x1.eba7c9e4d31e9p-1, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-1.0, -0.1) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-2.5, -0.1) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-Inf, -0.1) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-1.0, -1.0) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-2.5, -1.0) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-Inf, -1.0) == Interval(0.0, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-2.5, -2.5) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(0.0, 1.5) ^ Interval(-Inf, -2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ ∅ == ∅
    @test Interval(0.0, Inf) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(0.0, Inf) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(0.0, Inf) ^ Interval(0.0, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-0.0, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(0.0, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-0.0, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(0.1, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(1.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(2.5, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-1.0, 0.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-1.0, -0.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-2.5, 0.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-2.5, -0.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-0.1, -0.1) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-1.0, -0.1) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-2.5, -0.1) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-Inf, -0.1) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-1.0, -1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-2.5, -1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-Inf, -1.0) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-Inf, -2.5) == Interval(0.0, Inf)
    @test Interval(0.0, Inf) ^ Interval(-2.5, -2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ ∅ == ∅
    @test Interval(-0.0, 0.5) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(-0.0, 0.5) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(-0.0, 0.5) ^ Interval(0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.0, 0.5) ^ Interval(-0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.0, 0.5) ^ Interval(0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.0, 0.5) ^ Interval(-0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.0, 0.5) ^ Interval(0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.0, 0.5) ^ Interval(-0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.0, 0.5) ^ Interval(0.1, 0.1) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(-0.0, 0.5) ^ Interval(0.1, 1.0) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(-0.0, 0.5) ^ Interval(0.1, 2.5) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(-0.0, 0.5) ^ Interval(0.1, Inf) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(-0.0, 0.5) ^ Interval(1.0, 1.0) == Interval(0.0, 0.5)
    @test Interval(-0.0, 0.5) ^ Interval(1.0, 2.5) == Interval(0.0, 0.5)
    @test Interval(-0.0, 0.5) ^ Interval(1.0, Inf) == Interval(0.0, 0.5)
    @test Interval(-0.0, 0.5) ^ Interval(2.5, 2.5) == Interval(0.0, 0x1.6a09e667f3bcdp-3)
    @test Interval(-0.0, 0.5) ^ Interval(2.5, Inf) == Interval(0.0, 0x1.6a09e667f3bcdp-3)
    @test Interval(-0.0, 0.5) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-1.0, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-1.0, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-2.5, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-2.5, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-Inf, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-Inf, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-0.1, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-1.0, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-2.5, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-Inf, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-1.0, -1.0) == Interval(0x1p+1, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-2.5, -1.0) == Interval(0x1p+1, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-Inf, -1.0) == Interval(0x1p+1, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-2.5, -2.5) == Interval(0x1.6a09e667f3bccp+2, Inf)
    @test Interval(-0.0, 0.5) ^ Interval(-Inf, -2.5) == Interval(0x1.6a09e667f3bccp+2, Inf)
    @test Interval(-0.0, 1.0) ^ ∅ == ∅
    @test Interval(-0.0, 1.0) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(-0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(-0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(-0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(0.1, 0.1) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(0.1, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(0.1, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(0.1, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(1.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(1.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(1.0, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(2.5, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(2.5, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.0, 1.0) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-0.1, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-0.1, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-1.0, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-1.0, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-2.5, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-2.5, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-Inf, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-Inf, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-0.1, -0.1) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-1.0, -0.1) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-2.5, -0.1) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-Inf, -0.1) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-1.0, -1.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-2.5, -1.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-Inf, -1.0) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-2.5, -2.5) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.0) ^ Interval(-Inf, -2.5) == Interval(1.0, Inf)
    @test Interval(-0.0, 1.5) ^ ∅ == ∅
    @test Interval(-0.0, 1.5) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(-0.0, 1.5) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(-0.0, 1.5) ^ Interval(0.0, 1.0) == Interval(0.0, 1.5)
    @test Interval(-0.0, 1.5) ^ Interval(-0.0, 1.0) == Interval(0.0, 1.5)
    @test Interval(-0.0, 1.5) ^ Interval(0.0, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(-0.0, 1.5) ^ Interval(-0.0, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(-0.0, 1.5) ^ Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(0.1, 0.1) == Interval(0.0, 0x1.0a97dce72a0cbp+0)
    @test Interval(-0.0, 1.5) ^ Interval(0.1, 1.0) == Interval(0.0, 1.5)
    @test Interval(-0.0, 1.5) ^ Interval(0.1, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(-0.0, 1.5) ^ Interval(0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(1.0, 1.0) == Interval(0.0, 1.5)
    @test Interval(-0.0, 1.5) ^ Interval(1.0, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(-0.0, 1.5) ^ Interval(1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(2.5, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(-0.0, 1.5) ^ Interval(2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-1.0, 0.0) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-1.0, -0.0) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-2.5, 0.0) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-2.5, -0.0) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-0.1, -0.1) == Interval(0x1.eba7c9e4d31e9p-1, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-1.0, -0.1) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-2.5, -0.1) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-Inf, -0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-1.0, -1.0) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-2.5, -1.0) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-Inf, -1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-2.5, -2.5) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(-0.0, 1.5) ^ Interval(-Inf, -2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ ∅ == ∅
    @test Interval(-0.0, Inf) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(-0.0, Inf) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(-0.0, Inf) ^ Interval(0.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-0.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(0.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-0.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-1.0, 0.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-1.0, -0.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-2.5, 0.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-2.5, -0.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-0.1, -0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-1.0, -0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-2.5, -0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-Inf, -0.1) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-1.0, -1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-2.5, -1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-Inf, -1.0) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-Inf, -2.5) == Interval(0.0, Inf)
    @test Interval(-0.0, Inf) ^ Interval(-2.5, -2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ ∅ == ∅
    @test Interval(-0.1, 0.5) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(-0.1, 0.5) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(-0.1, 0.5) ^ Interval(0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.1, 0.5) ^ Interval(-0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.1, 0.5) ^ Interval(0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.1, 0.5) ^ Interval(-0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.1, 0.5) ^ Interval(0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.1, 0.5) ^ Interval(-0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.1, 0.5) ^ Interval(0.1, 0.1) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(-0.1, 0.5) ^ Interval(0.1, 1.0) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(-0.1, 0.5) ^ Interval(0.1, 2.5) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(-0.1, 0.5) ^ Interval(0.1, Inf) == Interval(0.0, 0x1.ddb680117ab13p-1)
    @test Interval(-0.1, 0.5) ^ Interval(1.0, 1.0) == Interval(0.0, 0.5)
    @test Interval(-0.1, 0.5) ^ Interval(1.0, 2.5) == Interval(0.0, 0.5)
    @test Interval(-0.1, 0.5) ^ Interval(1.0, Inf) == Interval(0.0, 0.5)
    @test Interval(-0.1, 0.5) ^ Interval(2.5, 2.5) == Interval(0.0, 0x1.6a09e667f3bcdp-3)
    @test Interval(-0.1, 0.5) ^ Interval(2.5, Inf) == Interval(0.0, 0x1.6a09e667f3bcdp-3)
    @test Interval(-0.1, 0.5) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-1.0, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-1.0, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-2.5, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-2.5, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-Inf, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-Inf, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-0.1, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-1.0, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-2.5, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-Inf, -0.1) == Interval(0x1.125fbee250664p+0, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-1.0, -1.0) == Interval(0x1p+1, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-2.5, -1.0) == Interval(0x1p+1, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-Inf, -1.0) == Interval(0x1p+1, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-2.5, -2.5) == Interval(0x1.6a09e667f3bccp+2, Inf)
    @test Interval(-0.1, 0.5) ^ Interval(-Inf, -2.5) == Interval(0x1.6a09e667f3bccp+2, Inf)
    @test Interval(-0.1, 1.0) ^ ∅ == ∅
    @test Interval(-0.1, 1.0) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(-0.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(-0.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(-0.0, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(0.1, 0.1) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(0.1, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(0.1, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(0.1, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(1.0, 1.0) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(1.0, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(1.0, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(2.5, 2.5) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(2.5, Inf) == Interval(0.0, 1.0)
    @test Interval(-0.1, 1.0) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-0.1, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-0.1, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-1.0, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-1.0, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-2.5, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-2.5, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-Inf, 0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-Inf, -0.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-0.1, -0.1) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-1.0, -0.1) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-2.5, -0.1) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-Inf, -0.1) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-1.0, -1.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-2.5, -1.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-Inf, -1.0) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-2.5, -2.5) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.0) ^ Interval(-Inf, -2.5) == Interval(1.0, Inf)
    @test Interval(-0.1, 1.5) ^ ∅ == ∅
    @test Interval(-0.1, 1.5) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(-0.1, 1.5) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(-0.1, 1.5) ^ Interval(0.0, 1.0) == Interval(0.0, 1.5)
    @test Interval(-0.1, 1.5) ^ Interval(-0.0, 1.0) == Interval(0.0, 1.5)
    @test Interval(-0.1, 1.5) ^ Interval(0.0, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(-0.1, 1.5) ^ Interval(-0.0, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(-0.1, 1.5) ^ Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(0.1, 0.1) == Interval(0.0, 0x1.0a97dce72a0cbp+0)
    @test Interval(-0.1, 1.5) ^ Interval(0.1, 1.0) == Interval(0.0, 1.5)
    @test Interval(-0.1, 1.5) ^ Interval(0.1, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(-0.1, 1.5) ^ Interval(0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(1.0, 1.0) == Interval(0.0, 1.5)
    @test Interval(-0.1, 1.5) ^ Interval(1.0, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(-0.1, 1.5) ^ Interval(1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(2.5, 2.5) == Interval(0.0, 0x1.60b9fd68a4555p+1)
    @test Interval(-0.1, 1.5) ^ Interval(2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-1.0, 0.0) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-1.0, -0.0) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-2.5, 0.0) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-2.5, -0.0) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-0.1, -0.1) == Interval(0x1.eba7c9e4d31e9p-1, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-1.0, -0.1) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-2.5, -0.1) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-Inf, -0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-1.0, -1.0) == Interval(0x1.5555555555555p-1, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-2.5, -1.0) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-Inf, -1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-2.5, -2.5) == Interval(0x1.7398bf1d1ee6fp-2, Inf)
    @test Interval(-0.1, 1.5) ^ Interval(-Inf, -2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ ∅ == ∅
    @test Interval(-0.1, Inf) ^ Interval(0.0, 0.0) == Interval(1.0, 1.0)
    @test Interval(-0.1, Inf) ^ Interval(-0.0, -0.0) == Interval(1.0, 1.0)
    @test Interval(-0.1, Inf) ^ Interval(0.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-0.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(0.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-0.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-0.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-0.1, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-0.1, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-0.1, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-0.1, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-1.0, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-1.0, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-1.0, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-1.0, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-2.5, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-2.5, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-2.5, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-2.5, Inf) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-Inf, 0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-Inf, 1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-Inf, 2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ entireinterval(Float64) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-1.0, 0.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-1.0, -0.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-2.5, 0.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-2.5, -0.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-Inf, 0.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-Inf, -0.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-0.1, -0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-1.0, -0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-2.5, -0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-Inf, -0.1) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-1.0, -1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-2.5, -1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-Inf, -1.0) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-Inf, -2.5) == Interval(0.0, Inf)
    @test Interval(-0.1, Inf) ^ Interval(-2.5, -2.5) == Interval(0.0, Inf)
    @test Interval(0.0, 0.0) ^ ∅ == ∅
    @test Interval(0.0, 0.0) ^ Interval(0.0, 0.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-0.0, -0.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-1.0, 0.1) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-2.5, 0.1) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-2.5, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-Inf, 0.1) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-Inf, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-Inf, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ entireinterval(Float64) == Interval(0.0, 0.0)
    @test Interval(0.0, 0.0) ^ Interval(-1.0, 0.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-1.0, -0.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-2.5, 0.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-2.5, -0.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-Inf, 0.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-Inf, -0.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-0.1, -0.1) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-1.0, -0.1) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-2.5, -0.1) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-Inf, -0.1) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-1.0, -1.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-2.5, -1.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-Inf, -1.0) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-Inf, -2.5) == ∅
    @test Interval(0.0, 0.0) ^ Interval(-2.5, -2.5) == ∅
    @test Interval(-0.0, -0.0) ^ ∅ == ∅
    @test Interval(-0.0, -0.0) ^ Interval(0.0, 0.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-0.0, -0.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-1.0, 0.1) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-2.5, 0.1) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-2.5, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-Inf, 0.1) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-Inf, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-Inf, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ entireinterval(Float64) == Interval(0.0, 0.0)
    @test Interval(-0.0, -0.0) ^ Interval(-1.0, 0.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-1.0, -0.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-2.5, 0.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-2.5, -0.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-Inf, 0.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-Inf, -0.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-0.1, -0.1) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-1.0, -0.1) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-2.5, -0.1) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-Inf, -0.1) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-1.0, -1.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-2.5, -1.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-Inf, -1.0) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-Inf, -2.5) == ∅
    @test Interval(-0.0, -0.0) ^ Interval(-2.5, -2.5) == ∅
    @test Interval(-0.0, 0.0) ^ ∅ == ∅
    @test Interval(-0.0, 0.0) ^ Interval(0.0, 0.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-0.0, -0.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-1.0, 0.1) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-2.5, 0.1) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-2.5, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-Inf, 0.1) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-Inf, 1.0) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-Inf, 2.5) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ entireinterval(Float64) == Interval(0.0, 0.0)
    @test Interval(-0.0, 0.0) ^ Interval(-1.0, 0.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-1.0, -0.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-2.5, 0.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-2.5, -0.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-Inf, 0.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-Inf, -0.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-0.1, -0.1) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-1.0, -0.1) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-2.5, -0.1) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-Inf, -0.1) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-1.0, -1.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-2.5, -1.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-Inf, -1.0) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-Inf, -2.5) == ∅
    @test Interval(-0.0, 0.0) ^ Interval(-2.5, -2.5) == ∅
    @test Interval(0.0, -0.0) ^ ∅ == ∅
    @test Interval(0.0, -0.0) ^ Interval(0.0, 0.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-0.0, -0.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-1.0, 0.1) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-2.5, 0.1) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-2.5, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-Inf, 0.1) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-Inf, 1.0) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-Inf, 2.5) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ entireinterval(Float64) == Interval(0.0, 0.0)
    @test Interval(0.0, -0.0) ^ Interval(-1.0, 0.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-1.0, -0.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-2.5, 0.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-2.5, -0.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-Inf, 0.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-Inf, -0.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-0.1, -0.1) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-1.0, -0.1) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-2.5, -0.1) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-Inf, -0.1) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-1.0, -1.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-2.5, -1.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-Inf, -1.0) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-Inf, -2.5) == ∅
    @test Interval(0.0, -0.0) ^ Interval(-2.5, -2.5) == ∅
    @test Interval(-1.0, 0.0) ^ ∅ == ∅
    @test Interval(-1.0, 0.0) ^ Interval(0.0, 0.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-0.0, -0.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-1.0, 0.1) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-2.5, 0.1) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-2.5, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-Inf, 0.1) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-Inf, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-Inf, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ entireinterval(Float64) == Interval(0.0, 0.0)
    @test Interval(-1.0, 0.0) ^ Interval(-1.0, 0.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-1.0, -0.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-2.5, 0.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-2.5, -0.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-Inf, 0.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-Inf, -0.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-0.1, -0.1) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-1.0, -0.1) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-2.5, -0.1) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-Inf, -0.1) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-1.0, -1.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-2.5, -1.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-Inf, -1.0) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-Inf, -2.5) == ∅
    @test Interval(-1.0, 0.0) ^ Interval(-2.5, -2.5) == ∅
    @test Interval(-1.0, -0.0) ^ ∅ == ∅
    @test Interval(-1.0, -0.0) ^ Interval(0.0, 0.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-0.0, -0.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-0.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-0.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-0.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-0.1, 0.1) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-0.1, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-0.1, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-0.1, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-1.0, 0.1) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-1.0, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-1.0, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-1.0, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-2.5, 0.1) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-2.5, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-2.5, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-2.5, Inf) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-Inf, 0.1) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-Inf, 1.0) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-Inf, 2.5) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ entireinterval(Float64) == Interval(0.0, 0.0)
    @test Interval(-1.0, -0.0) ^ Interval(-1.0, 0.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-1.0, -0.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-2.5, 0.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-2.5, -0.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-Inf, 0.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-Inf, -0.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-0.1, -0.1) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-1.0, -0.1) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-2.5, -0.1) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-Inf, -0.1) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-1.0, -1.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-2.5, -1.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-Inf, -1.0) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-Inf, -2.5) == ∅
    @test Interval(-1.0, -0.0) ^ Interval(-2.5, -2.5) == ∅
    @test Interval(-1.0, -0.1) ^ ∅ == ∅
    @test Interval(-1.0, -0.1) ^ Interval(0.0, 0.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-0.0, -0.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(0.0, 1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-0.0, 1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(0.0, 2.5) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-0.0, 2.5) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(0.0, Inf) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-0.0, Inf) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(0.1, 0.1) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(0.1, 1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(0.1, 2.5) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(0.1, Inf) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(1.0, 1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(1.0, 2.5) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(1.0, Inf) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(2.5, 2.5) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(2.5, Inf) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-0.1, 0.1) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-0.1, 1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-0.1, 2.5) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-0.1, Inf) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-1.0, 0.1) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-1.0, 1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-1.0, 2.5) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-1.0, Inf) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-2.5, 0.1) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-2.5, 1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-2.5, 2.5) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-2.5, Inf) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-Inf, 0.1) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-Inf, 1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-Inf, 2.5) == ∅
    @test Interval(-1.0, -0.1) ^ entireinterval(Float64) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-1.0, 0.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-1.0, -0.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-2.5, 0.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-2.5, -0.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-Inf, 0.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-Inf, -0.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-0.1, -0.1) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-1.0, -0.1) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-2.5, -0.1) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-Inf, -0.1) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-1.0, -1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-2.5, -1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-Inf, -1.0) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-Inf, -2.5) == ∅
    @test Interval(-1.0, -0.1) ^ Interval(-2.5, -2.5) == ∅
end

@testset "minimal_pow_dec_test" begin
    @test DecoratedInterval(Interval(0.1, 0.5), com) ^ DecoratedInterval(Interval(0.0, 1.0), com) == DecoratedInterval(Interval(0x1.999999999999ap-4, 1.0), com)
    @test decoration(DecoratedInterval(Interval(0.1, 0.5), com) ^ DecoratedInterval(Interval(0.0, 1.0), com)) == decoration(DecoratedInterval(Interval(0x1.999999999999ap-4, 1.0), com))
    @test DecoratedInterval(Interval(0.1, 0.5), com) ^ DecoratedInterval(Interval(0.1, 0.1), def) == DecoratedInterval(Interval(0x1.96b230bcdc434p-1, 0x1.ddb680117ab13p-1), def)
    @test decoration(DecoratedInterval(Interval(0.1, 0.5), com) ^ DecoratedInterval(Interval(0.1, 0.1), def)) == decoration(DecoratedInterval(Interval(0x1.96b230bcdc434p-1, 0x1.ddb680117ab13p-1), def))
    @test DecoratedInterval(Interval(0.1, 0.5), trv) ^ DecoratedInterval(Interval(-2.5, 2.5), dac) == DecoratedInterval(Interval(0x1.9e7c6e43390b7p-9, 0x1.3c3a4edfa9758p+8), trv)
    @test decoration(DecoratedInterval(Interval(0.1, 0.5), trv) ^ DecoratedInterval(Interval(-2.5, 2.5), dac)) == decoration(DecoratedInterval(Interval(0x1.9e7c6e43390b7p-9, 0x1.3c3a4edfa9758p+8), trv))
    @test DecoratedInterval(Interval(0.1, 0.5), com) ^ DecoratedInterval(Interval(-2.5, Inf), dac) == DecoratedInterval(Interval(0.0, 0x1.3c3a4edfa9758p+8), dac)
    @test decoration(DecoratedInterval(Interval(0.1, 0.5), com) ^ DecoratedInterval(Interval(-2.5, Inf), dac)) == decoration(DecoratedInterval(Interval(0.0, 0x1.3c3a4edfa9758p+8), dac))
    @test DecoratedInterval(Interval(0.1, 0.5), trv) ^ DecoratedInterval(Interval(-Inf, 0.1), dac) == DecoratedInterval(Interval(0x1.96b230bcdc434p-1, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.1, 0.5), trv) ^ DecoratedInterval(Interval(-Inf, 0.1), dac)) == decoration(DecoratedInterval(Interval(0x1.96b230bcdc434p-1, Inf), trv))
    @test DecoratedInterval(Interval(0.1, 1.0), com) ^ DecoratedInterval(Interval(0.0, 2.5), com) == DecoratedInterval(Interval(0x1.9e7c6e43390b7p-9, 1.0), com)
    @test decoration(DecoratedInterval(Interval(0.1, 1.0), com) ^ DecoratedInterval(Interval(0.0, 2.5), com)) == decoration(DecoratedInterval(Interval(0x1.9e7c6e43390b7p-9, 1.0), com))
    @test DecoratedInterval(Interval(0.1, 1.0), def) ^ DecoratedInterval(Interval(1.0, 1.0), dac) == DecoratedInterval(Interval(0x1.999999999999ap-4, 1.0), def)
    @test decoration(DecoratedInterval(Interval(0.1, 1.0), def) ^ DecoratedInterval(Interval(1.0, 1.0), dac)) == decoration(DecoratedInterval(Interval(0x1.999999999999ap-4, 1.0), def))
    @test DecoratedInterval(Interval(0.1, 1.0), trv) ^ DecoratedInterval(Interval(-2.5, 1.0), def) == DecoratedInterval(Interval(0x1.999999999999ap-4, 0x1.3c3a4edfa9758p+8), trv)
    @test decoration(DecoratedInterval(Interval(0.1, 1.0), trv) ^ DecoratedInterval(Interval(-2.5, 1.0), def)) == decoration(DecoratedInterval(Interval(0x1.999999999999ap-4, 0x1.3c3a4edfa9758p+8), trv))
    @test DecoratedInterval(Interval(0.5, 1.5), dac) ^ DecoratedInterval(Interval(0.1, 0.1), com) == DecoratedInterval(Interval(0x1.ddb680117ab12p-1, 0x1.0a97dce72a0cbp+0), dac)
    @test decoration(DecoratedInterval(Interval(0.5, 1.5), dac) ^ DecoratedInterval(Interval(0.1, 0.1), com)) == decoration(DecoratedInterval(Interval(0x1.ddb680117ab12p-1, 0x1.0a97dce72a0cbp+0), dac))
    @test DecoratedInterval(Interval(0.5, 1.5), def) ^ DecoratedInterval(Interval(-2.5, 0.1), trv) == DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2), trv)
    @test decoration(DecoratedInterval(Interval(0.5, 1.5), def) ^ DecoratedInterval(Interval(-2.5, 0.1), trv)) == decoration(DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2), trv))
    @test DecoratedInterval(Interval(0.5, 1.5), com) ^ DecoratedInterval(Interval(-2.5, -2.5), com) == DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2), com)
    @test decoration(DecoratedInterval(Interval(0.5, 1.5), com) ^ DecoratedInterval(Interval(-2.5, -2.5), com)) == decoration(DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, 0x1.6a09e667f3bcdp+2), com))
    @test DecoratedInterval(Interval(0.5, Inf), dac) ^ DecoratedInterval(Interval(0.1, 0.1), com) == DecoratedInterval(Interval(0x1.ddb680117ab12p-1, Inf), dac)
    @test decoration(DecoratedInterval(Interval(0.5, Inf), dac) ^ DecoratedInterval(Interval(0.1, 0.1), com)) == decoration(DecoratedInterval(Interval(0x1.ddb680117ab12p-1, Inf), dac))
    @test DecoratedInterval(Interval(0.5, Inf), def) ^ DecoratedInterval(Interval(-2.5, -0.0), com) == DecoratedInterval(Interval(0.0, 0x1.6a09e667f3bcdp+2), def)
    @test decoration(DecoratedInterval(Interval(0.5, Inf), def) ^ DecoratedInterval(Interval(-2.5, -0.0), com)) == decoration(DecoratedInterval(Interval(0.0, 0x1.6a09e667f3bcdp+2), def))
    @test DecoratedInterval(Interval(1.0, 1.5), com) ^ DecoratedInterval(Interval(-0.1, 0.1), def) == DecoratedInterval(Interval(0x1.eba7c9e4d31e9p-1, 0x1.0a97dce72a0cbp+0), def)
    @test decoration(DecoratedInterval(Interval(1.0, 1.5), com) ^ DecoratedInterval(Interval(-0.1, 0.1), def)) == decoration(DecoratedInterval(Interval(0x1.eba7c9e4d31e9p-1, 0x1.0a97dce72a0cbp+0), def))
    @test DecoratedInterval(Interval(1.0, 1.5), trv) ^ DecoratedInterval(Interval(-0.1, -0.1), com) == DecoratedInterval(Interval(0x1.eba7c9e4d31e9p-1, 1.0), trv)
    @test decoration(DecoratedInterval(Interval(1.0, 1.5), trv) ^ DecoratedInterval(Interval(-0.1, -0.1), com)) == decoration(DecoratedInterval(Interval(0x1.eba7c9e4d31e9p-1, 1.0), trv))
    @test DecoratedInterval(Interval(1.0, Inf), dac) ^ DecoratedInterval(Interval(1.0, 1.0), dac) == DecoratedInterval(Interval(1.0, Inf), dac)
    @test decoration(DecoratedInterval(Interval(1.0, Inf), dac) ^ DecoratedInterval(Interval(1.0, 1.0), dac)) == decoration(DecoratedInterval(Interval(1.0, Inf), dac))
    @test DecoratedInterval(Interval(1.0, Inf), def) ^ DecoratedInterval(Interval(-1.0, -0.0), dac) == DecoratedInterval(Interval(0x0p+0, 1.0), def)
    @test decoration(DecoratedInterval(Interval(1.0, Inf), def) ^ DecoratedInterval(Interval(-1.0, -0.0), dac)) == decoration(DecoratedInterval(Interval(0x0p+0, 1.0), def))
    @test DecoratedInterval(Interval(1.1, 1.5), def) ^ DecoratedInterval(Interval(1.0, 2.5), com) == DecoratedInterval(Interval(0x1.199999999999ap+0, 0x1.60b9fd68a4555p+1), def)
    @test decoration(DecoratedInterval(Interval(1.1, 1.5), def) ^ DecoratedInterval(Interval(1.0, 2.5), com)) == decoration(DecoratedInterval(Interval(0x1.199999999999ap+0, 0x1.60b9fd68a4555p+1), def))
    @test DecoratedInterval(Interval(1.1, 1.5), com) ^ DecoratedInterval(Interval(-0.1, -0.1), com) == DecoratedInterval(Interval(0x1.eba7c9e4d31e9p-1, 0x1.fb24af5281928p-1), com)
    @test decoration(DecoratedInterval(Interval(1.1, 1.5), com) ^ DecoratedInterval(Interval(-0.1, -0.1), com)) == decoration(DecoratedInterval(Interval(0x1.eba7c9e4d31e9p-1, 0x1.fb24af5281928p-1), com))
    @test DecoratedInterval(Interval(1.1, Inf), dac) ^ DecoratedInterval(Interval(0.1, Inf), dac) == DecoratedInterval(Interval(0x1.02739c65d58bfp+0, Inf), dac)
    @test decoration(DecoratedInterval(Interval(1.1, Inf), dac) ^ DecoratedInterval(Interval(0.1, Inf), dac)) == decoration(DecoratedInterval(Interval(0x1.02739c65d58bfp+0, Inf), dac))
    @test DecoratedInterval(Interval(1.1, Inf), def) ^ DecoratedInterval(Interval(-2.5, Inf), dac) == DecoratedInterval(Interval(0x0p+0, Inf), def)
    @test decoration(DecoratedInterval(Interval(1.1, Inf), def) ^ DecoratedInterval(Interval(-2.5, Inf), dac)) == decoration(DecoratedInterval(Interval(0x0p+0, Inf), def))
    @test DecoratedInterval(Interval(1.1, Inf), trv) ^ DecoratedInterval(Interval(-Inf, -1.0), def) == DecoratedInterval(Interval(0x0p+0, 0x1.d1745d1745d17p-1), trv)
    @test decoration(DecoratedInterval(Interval(1.1, Inf), trv) ^ DecoratedInterval(Interval(-Inf, -1.0), def)) == decoration(DecoratedInterval(Interval(0x0p+0, 0x1.d1745d1745d17p-1), trv))
    @test DecoratedInterval(Interval(0.0, 0.5), com) ^ DecoratedInterval(Interval(0.1, 0.1), com) == DecoratedInterval(Interval(0.0, 0x1.ddb680117ab13p-1), com)
    @test decoration(DecoratedInterval(Interval(0.0, 0.5), com) ^ DecoratedInterval(Interval(0.1, 0.1), com)) == decoration(DecoratedInterval(Interval(0.0, 0x1.ddb680117ab13p-1), com))
    @test DecoratedInterval(Interval(0.0, 0.5), com) ^ DecoratedInterval(Interval(2.5, Inf), dac) == DecoratedInterval(Interval(0.0, 0x1.6a09e667f3bcdp-3), dac)
    @test decoration(DecoratedInterval(Interval(0.0, 0.5), com) ^ DecoratedInterval(Interval(2.5, Inf), dac)) == decoration(DecoratedInterval(Interval(0.0, 0x1.6a09e667f3bcdp-3), dac))
    @test DecoratedInterval(Interval(0.0, 0.5), com) ^ DecoratedInterval(Interval(-Inf, -2.5), dac) == DecoratedInterval(Interval(0x1.6a09e667f3bccp+2, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 0.5), com) ^ DecoratedInterval(Interval(-Inf, -2.5), dac)) == decoration(DecoratedInterval(Interval(0x1.6a09e667f3bccp+2, Inf), trv))
    @test DecoratedInterval(Interval(0.0, 1.0), com) ^ DecoratedInterval(Interval(0.0, 0.0), com) == DecoratedInterval(Interval(1.0, 1.0), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 1.0), com) ^ DecoratedInterval(Interval(0.0, 0.0), com)) == decoration(DecoratedInterval(Interval(1.0, 1.0), trv))
    @test DecoratedInterval(Interval(0.0, 1.0), def) ^ DecoratedInterval(Interval(0.0, 2.5), dac) == DecoratedInterval(Interval(0.0, 1.0), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 1.0), def) ^ DecoratedInterval(Interval(0.0, 2.5), dac)) == decoration(DecoratedInterval(Interval(0.0, 1.0), trv))
    @test DecoratedInterval(Interval(0.0, 1.0), dac) ^ DecoratedInterval(Interval(1.0, 2.5), com) == DecoratedInterval(Interval(0.0, 1.0), dac)
    @test decoration(DecoratedInterval(Interval(0.0, 1.0), dac) ^ DecoratedInterval(Interval(1.0, 2.5), com)) == decoration(DecoratedInterval(Interval(0.0, 1.0), dac))
    @test DecoratedInterval(Interval(0.0, 1.0), com) ^ DecoratedInterval(Interval(-2.5, 0.1), dac) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 1.0), com) ^ DecoratedInterval(Interval(-2.5, 0.1), dac)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(0.0, 1.0), def) ^ DecoratedInterval(entireinterval(Float64), def) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 1.0), def) ^ DecoratedInterval(entireinterval(Float64), def)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(0.0, 1.0), dac) ^ DecoratedInterval(Interval(-0.1, 0.0), com) == DecoratedInterval(Interval(1.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 1.0), dac) ^ DecoratedInterval(Interval(-0.1, 0.0), com)) == decoration(DecoratedInterval(Interval(1.0, Inf), trv))
    @test DecoratedInterval(Interval(0.0, 1.0), com) ^ DecoratedInterval(Interval(-Inf, 0.0), dac) == DecoratedInterval(Interval(1.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 1.0), com) ^ DecoratedInterval(Interval(-Inf, 0.0), dac)) == decoration(DecoratedInterval(Interval(1.0, Inf), trv))
    @test DecoratedInterval(Interval(0.0, 1.0), def) ^ DecoratedInterval(Interval(-Inf, -2.5), dac) == DecoratedInterval(Interval(1.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 1.0), def) ^ DecoratedInterval(Interval(-Inf, -2.5), dac)) == decoration(DecoratedInterval(Interval(1.0, Inf), trv))
    @test DecoratedInterval(Interval(0.0, 1.5), com) ^ DecoratedInterval(Interval(0.0, 2.5), com) == DecoratedInterval(Interval(0.0, 0x1.60b9fd68a4555p+1), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 1.5), com) ^ DecoratedInterval(Interval(0.0, 2.5), com)) == decoration(DecoratedInterval(Interval(0.0, 0x1.60b9fd68a4555p+1), trv))
    @test DecoratedInterval(Interval(0.0, 1.5), def) ^ DecoratedInterval(Interval(2.5, 2.5), dac) == DecoratedInterval(Interval(0.0, 0x1.60b9fd68a4555p+1), def)
    @test decoration(DecoratedInterval(Interval(0.0, 1.5), def) ^ DecoratedInterval(Interval(2.5, 2.5), dac)) == decoration(DecoratedInterval(Interval(0.0, 0x1.60b9fd68a4555p+1), def))
    @test DecoratedInterval(Interval(0.0, 1.5), dac) ^ DecoratedInterval(Interval(-1.0, 0.0), com) == DecoratedInterval(Interval(0x1.5555555555555p-1, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 1.5), dac) ^ DecoratedInterval(Interval(-1.0, 0.0), com)) == decoration(DecoratedInterval(Interval(0x1.5555555555555p-1, Inf), trv))
    @test DecoratedInterval(Interval(0.0, 1.5), com) ^ DecoratedInterval(Interval(-2.5, -2.5), def) == DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 1.5), com) ^ DecoratedInterval(Interval(-2.5, -2.5), def)) == decoration(DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, Inf), trv))
    @test DecoratedInterval(Interval(0.0, Inf), dac) ^ DecoratedInterval(Interval(0.1, 0.1), com) == DecoratedInterval(Interval(0.0, Inf), dac)
    @test decoration(DecoratedInterval(Interval(0.0, Inf), dac) ^ DecoratedInterval(Interval(0.1, 0.1), com)) == decoration(DecoratedInterval(Interval(0.0, Inf), dac))
    @test DecoratedInterval(Interval(0.0, Inf), def) ^ DecoratedInterval(Interval(-1.0, 1.0), dac) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, Inf), def) ^ DecoratedInterval(Interval(-1.0, 1.0), dac)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(0.0, Inf), trv) ^ DecoratedInterval(Interval(-Inf, -1.0), def) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, Inf), trv) ^ DecoratedInterval(Interval(-Inf, -1.0), def)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(0.0, Inf), dac) ^ DecoratedInterval(Interval(-2.5, -2.5), dac) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(0.0, Inf), dac) ^ DecoratedInterval(Interval(-2.5, -2.5), dac)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 0.5), com) ^ DecoratedInterval(Interval(0.0, Inf), dac) == DecoratedInterval(Interval(0.0, 1.0), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 0.5), com) ^ DecoratedInterval(Interval(0.0, Inf), dac)) == decoration(DecoratedInterval(Interval(0.0, 1.0), trv))
    @test DecoratedInterval(Interval(-0.0, 0.5), def) ^ DecoratedInterval(Interval(0.1, Inf), def) == DecoratedInterval(Interval(0.0, 0x1.ddb680117ab13p-1), def)
    @test decoration(DecoratedInterval(Interval(-0.0, 0.5), def) ^ DecoratedInterval(Interval(0.1, Inf), def)) == decoration(DecoratedInterval(Interval(0.0, 0x1.ddb680117ab13p-1), def))
    @test DecoratedInterval(Interval(-0.0, 0.5), dac) ^ DecoratedInterval(Interval(2.5, 2.5), com) == DecoratedInterval(Interval(0.0, 0x1.6a09e667f3bcdp-3), dac)
    @test decoration(DecoratedInterval(Interval(-0.0, 0.5), dac) ^ DecoratedInterval(Interval(2.5, 2.5), com)) == decoration(DecoratedInterval(Interval(0.0, 0x1.6a09e667f3bcdp-3), dac))
    @test DecoratedInterval(Interval(-0.0, 0.5), trv) ^ DecoratedInterval(Interval(-2.5, -0.0), dac) == DecoratedInterval(Interval(1.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 0.5), trv) ^ DecoratedInterval(Interval(-2.5, -0.0), dac)) == decoration(DecoratedInterval(Interval(1.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 0.5), com) ^ DecoratedInterval(Interval(-Inf, -0.1), def) == DecoratedInterval(Interval(0x1.125fbee250664p+0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 0.5), com) ^ DecoratedInterval(Interval(-Inf, -0.1), def)) == decoration(DecoratedInterval(Interval(0x1.125fbee250664p+0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 0.5), def) ^ DecoratedInterval(Interval(-Inf, -2.5), dac) == DecoratedInterval(Interval(0x1.6a09e667f3bccp+2, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 0.5), def) ^ DecoratedInterval(Interval(-Inf, -2.5), dac)) == decoration(DecoratedInterval(Interval(0x1.6a09e667f3bccp+2, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 1.0), com) ^ DecoratedInterval(Interval(2.5, 2.5), dac) == DecoratedInterval(Interval(0.0, 1.0), dac)
    @test decoration(DecoratedInterval(Interval(-0.0, 1.0), com) ^ DecoratedInterval(Interval(2.5, 2.5), dac)) == decoration(DecoratedInterval(Interval(0.0, 1.0), dac))
    @test DecoratedInterval(Interval(-0.0, 1.0), dac) ^ DecoratedInterval(Interval(-1.0, Inf), def) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 1.0), dac) ^ DecoratedInterval(Interval(-1.0, Inf), def)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 1.0), com) ^ DecoratedInterval(entireinterval(Float64), def) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 1.0), com) ^ DecoratedInterval(entireinterval(Float64), def)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 1.0), def) ^ DecoratedInterval(Interval(-2.5, -2.5), com) == DecoratedInterval(Interval(1.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 1.0), def) ^ DecoratedInterval(Interval(-2.5, -2.5), com)) == decoration(DecoratedInterval(Interval(1.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 1.0), dac) ^ DecoratedInterval(Interval(-Inf, -2.5), def) == DecoratedInterval(Interval(1.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 1.0), dac) ^ DecoratedInterval(Interval(-Inf, -2.5), def)) == decoration(DecoratedInterval(Interval(1.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 1.5), com) ^ DecoratedInterval(Interval(0.1, 2.5), dac) == DecoratedInterval(Interval(0.0, 0x1.60b9fd68a4555p+1), dac)
    @test decoration(DecoratedInterval(Interval(-0.0, 1.5), com) ^ DecoratedInterval(Interval(0.1, 2.5), dac)) == decoration(DecoratedInterval(Interval(0.0, 0x1.60b9fd68a4555p+1), dac))
    @test DecoratedInterval(Interval(-0.0, 1.5), def) ^ DecoratedInterval(Interval(-1.0, 0.0), trv) == DecoratedInterval(Interval(0x1.5555555555555p-1, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 1.5), def) ^ DecoratedInterval(Interval(-1.0, 0.0), trv)) == decoration(DecoratedInterval(Interval(0x1.5555555555555p-1, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 1.5), dac) ^ DecoratedInterval(Interval(-2.5, -0.1), def) == DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 1.5), dac) ^ DecoratedInterval(Interval(-2.5, -0.1), def)) == decoration(DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 1.5), com) ^ DecoratedInterval(Interval(-2.5, -2.5), com) == DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 1.5), com) ^ DecoratedInterval(Interval(-2.5, -2.5), com)) == decoration(DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, 1.5), def) ^ DecoratedInterval(Interval(-Inf, -2.5), dac) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, 1.5), def) ^ DecoratedInterval(Interval(-Inf, -2.5), dac)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, Inf), dac) ^ DecoratedInterval(Interval(-0.1, Inf), dac) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, Inf), dac) ^ DecoratedInterval(Interval(-0.1, Inf), dac)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, Inf), def) ^ DecoratedInterval(Interval(-2.5, -0.0), com) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, Inf), def) ^ DecoratedInterval(Interval(-2.5, -0.0), com)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, Inf), trv) ^ DecoratedInterval(Interval(-Inf, 0.0), def) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, Inf), trv) ^ DecoratedInterval(Interval(-Inf, 0.0), def)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, Inf), dac) ^ DecoratedInterval(Interval(-Inf, -0.0), trv) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, Inf), dac) ^ DecoratedInterval(Interval(-Inf, -0.0), trv)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.0, Inf), def) ^ DecoratedInterval(Interval(-Inf, -1.0), def) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.0, Inf), def) ^ DecoratedInterval(Interval(-Inf, -1.0), def)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, 0.5), def) ^ DecoratedInterval(Interval(0.1, Inf), dac) == DecoratedInterval(Interval(0.0, 0x1.ddb680117ab13p-1), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 0.5), def) ^ DecoratedInterval(Interval(0.1, Inf), dac)) == decoration(DecoratedInterval(Interval(0.0, 0x1.ddb680117ab13p-1), trv))
    @test DecoratedInterval(Interval(-0.1, 0.5), com) ^ DecoratedInterval(Interval(-0.1, -0.1), com) == DecoratedInterval(Interval(0x1.125fbee250664p+0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 0.5), com) ^ DecoratedInterval(Interval(-0.1, -0.1), com)) == decoration(DecoratedInterval(Interval(0x1.125fbee250664p+0, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, 0.5), dac) ^ DecoratedInterval(Interval(-Inf, -2.5), def) == DecoratedInterval(Interval(0x1.6a09e667f3bccp+2, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 0.5), dac) ^ DecoratedInterval(Interval(-Inf, -2.5), def)) == decoration(DecoratedInterval(Interval(0x1.6a09e667f3bccp+2, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, 1.0), com) ^ DecoratedInterval(Interval(0.0, 0.0), com) == DecoratedInterval(Interval(1.0, 1.0), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 1.0), com) ^ DecoratedInterval(Interval(0.0, 0.0), com)) == decoration(DecoratedInterval(Interval(1.0, 1.0), trv))
    @test DecoratedInterval(Interval(-0.1, 1.0), dac) ^ DecoratedInterval(Interval(-Inf, 2.5), dac) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 1.0), dac) ^ DecoratedInterval(Interval(-Inf, 2.5), dac)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, 1.0), def) ^ DecoratedInterval(Interval(-Inf, -1.0), def) == DecoratedInterval(Interval(1.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 1.0), def) ^ DecoratedInterval(Interval(-Inf, -1.0), def)) == decoration(DecoratedInterval(Interval(1.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, 1.0), com) ^ DecoratedInterval(Interval(-2.5, -2.5), com) == DecoratedInterval(Interval(1.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 1.0), com) ^ DecoratedInterval(Interval(-2.5, -2.5), com)) == decoration(DecoratedInterval(Interval(1.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, 1.0), trv) ^ DecoratedInterval(Interval(-Inf, -2.5), trv) == DecoratedInterval(Interval(1.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 1.0), trv) ^ DecoratedInterval(Interval(-Inf, -2.5), trv)) == decoration(DecoratedInterval(Interval(1.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, 1.5), trv) ^ DecoratedInterval(Interval(0.0, 2.5), com) == DecoratedInterval(Interval(0.0, 0x1.60b9fd68a4555p+1), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 1.5), trv) ^ DecoratedInterval(Interval(0.0, 2.5), com)) == decoration(DecoratedInterval(Interval(0.0, 0x1.60b9fd68a4555p+1), trv))
    @test DecoratedInterval(Interval(-0.1, 1.5), com) ^ DecoratedInterval(Interval(2.5, 2.5), dac) == DecoratedInterval(Interval(0.0, 0x1.60b9fd68a4555p+1), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 1.5), com) ^ DecoratedInterval(Interval(2.5, 2.5), dac)) == decoration(DecoratedInterval(Interval(0.0, 0x1.60b9fd68a4555p+1), trv))
    @test DecoratedInterval(Interval(-0.1, 1.5), dac) ^ DecoratedInterval(Interval(-1.0, 0.0), trv) == DecoratedInterval(Interval(0x1.5555555555555p-1, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 1.5), dac) ^ DecoratedInterval(Interval(-1.0, 0.0), trv)) == decoration(DecoratedInterval(Interval(0x1.5555555555555p-1, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, 1.5), com) ^ DecoratedInterval(Interval(-0.1, -0.1), com) == DecoratedInterval(Interval(0x1.eba7c9e4d31e9p-1, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 1.5), com) ^ DecoratedInterval(Interval(-0.1, -0.1), com)) == decoration(DecoratedInterval(Interval(0x1.eba7c9e4d31e9p-1, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, 1.5), def) ^ DecoratedInterval(Interval(-2.5, -2.5), def) == DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, 1.5), def) ^ DecoratedInterval(Interval(-2.5, -2.5), def)) == decoration(DecoratedInterval(Interval(0x1.7398bf1d1ee6fp-2, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, Inf), dac) ^ DecoratedInterval(Interval(-0.1, 2.5), com) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, Inf), dac) ^ DecoratedInterval(Interval(-0.1, 2.5), com)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, Inf), def) ^ DecoratedInterval(Interval(-2.5, 0.0), def) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, Inf), def) ^ DecoratedInterval(Interval(-2.5, 0.0), def)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(-0.1, Inf), dac) ^ DecoratedInterval(Interval(-2.5, -2.5), trv) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(DecoratedInterval(Interval(-0.1, Inf), dac) ^ DecoratedInterval(Interval(-2.5, -2.5), trv)) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test DecoratedInterval(Interval(0.0, 0.0), com) ^ DecoratedInterval(Interval(1.0, Inf), dac) == DecoratedInterval(Interval(0.0, 0.0), dac)
    @test decoration(DecoratedInterval(Interval(0.0, 0.0), com) ^ DecoratedInterval(Interval(1.0, Inf), dac)) == decoration(DecoratedInterval(Interval(0.0, 0.0), dac))
    @test DecoratedInterval(Interval(0.0, 0.0), com) ^ DecoratedInterval(Interval(-2.5, 0.1), com) == DecoratedInterval(Interval(0.0, 0.0), trv)
    @test decoration(DecoratedInterval(Interval(0.0, 0.0), com) ^ DecoratedInterval(Interval(-2.5, 0.1), com)) == decoration(DecoratedInterval(Interval(0.0, 0.0), trv))
    @test DecoratedInterval(Interval(0.0, 0.0), dac) ^ DecoratedInterval(Interval(-1.0, 0.0), def) == DecoratedInterval(∅, trv)
    @test decoration(DecoratedInterval(Interval(0.0, 0.0), dac) ^ DecoratedInterval(Interval(-1.0, 0.0), def)) == decoration(DecoratedInterval(∅, trv))
    @test DecoratedInterval(Interval(-1.0, -0.1), com) ^ DecoratedInterval(Interval(-0.1, 1.0), def) == DecoratedInterval(∅, trv)
    @test decoration(DecoratedInterval(Interval(-1.0, -0.1), com) ^ DecoratedInterval(Interval(-0.1, 1.0), def)) == decoration(DecoratedInterval(∅, trv))
    @test DecoratedInterval(Interval(-1.0, -0.1), dac) ^ DecoratedInterval(Interval(-0.1, 2.5), com) == DecoratedInterval(∅, trv)
    @test decoration(DecoratedInterval(Interval(-1.0, -0.1), dac) ^ DecoratedInterval(Interval(-0.1, 2.5), com)) == decoration(DecoratedInterval(∅, trv))
    @test DecoratedInterval(Interval(-1.0, -0.1), def) ^ DecoratedInterval(Interval(-0.1, Inf), trv) == DecoratedInterval(∅, trv)
    @test decoration(DecoratedInterval(Interval(-1.0, -0.1), def) ^ DecoratedInterval(Interval(-0.1, Inf), trv)) == decoration(DecoratedInterval(∅, trv))
end

@testset "minimal_exp_test" begin
    @test exp(∅) == ∅
    @test exp(Interval(-Inf, 0.0)) == Interval(0.0, 1.0)
    @test exp(Interval(-Inf, -0.0)) == Interval(0.0, 1.0)
    @test exp(Interval(0.0, Inf)) == Interval(1.0, Inf)
    @test exp(Interval(-0.0, Inf)) == Interval(1.0, Inf)
    @test exp(entireinterval(Float64)) == Interval(0.0, Inf)
    @test exp(Interval(-Inf, 0x1.62e42fefa39fp+9)) == Interval(0.0, Inf)
    @test exp(Interval(0x1.62e42fefa39fp+9, 0x1.62e42fefa39fp+9)) == Interval(0x1.fffffffffffffp+1023, Inf)
    @test exp(Interval(0.0, 0x1.62e42fefa39ep+9)) == Interval(1.0, 0x1.fffffffffc32bp+1023)
    @test exp(Interval(-0.0, 0x1.62e42fefa39ep+9)) == Interval(1.0, 0x1.fffffffffc32bp+1023)
    @test exp(Interval(-0x1.6232bdd7abcd3p+9, 0x1.62e42fefa39ep+9)) == Interval(0x0.ffffffffffe7bp-1022, 0x1.fffffffffc32bp+1023)
    @test exp(Interval(-0x1.6232bdd7abcd3p+8, 0x1.62e42fefa39ep+9)) == Interval(0x1.ffffffffffe7bp-512, 0x1.fffffffffc32bp+1023)
    @test exp(Interval(-0x1.6232bdd7abcd3p+8, 0.0)) == Interval(0x1.ffffffffffe7bp-512, 1.0)
    @test exp(Interval(-0x1.6232bdd7abcd3p+8, -0.0)) == Interval(0x1.ffffffffffe7bp-512, 1.0)
    @test exp(Interval(-0x1.6232bdd7abcd3p+8, 1.0)) == Interval(0x1.ffffffffffe7bp-512, 0x1.5bf0a8b14576ap+1)
    @test exp(Interval(1.0, 5.0)) == Interval(0x1.5bf0a8b145769p+1, 0x1.28d389970339p+7)
    @test exp(Interval(-0x1.a934f0979a372p+1, 0x1.ceaecfea8085ap+0)) == Interval(0x1.2797f0a337a5fp-5, 0x1.86091cc9095c5p+2)
    @test exp(Interval(0x1.87f42b972949cp-1, 0x1.8b55484710029p+6)) == Interval(0x1.1337e9e45812ap+1, 0x1.805a5c88021b6p+142)
    @test exp(Interval(0x1.78025c8b3fd39p+3, 0x1.9fd8eef3fa79bp+4)) == Interval(0x1.ef461a783114cp+16, 0x1.691d36c6b008cp+37)
end

@testset "minimal_exp_dec_test" begin
    @test exp(DecoratedInterval(Interval(0x1.62e42fefa39fp+9, 0x1.62e42fefa39fp+9), com)) == DecoratedInterval(Interval(0x1.fffffffffffffp+1023, Inf), dac)
    @test decoration(exp(DecoratedInterval(Interval(0x1.62e42fefa39fp+9, 0x1.62e42fefa39fp+9), com))) == decoration(DecoratedInterval(Interval(0x1.fffffffffffffp+1023, Inf), dac))
    @test exp(DecoratedInterval(Interval(0.0, 0x1.62e42fefa39ep+9), def)) == DecoratedInterval(Interval(1.0, 0x1.fffffffffc32bp+1023), def)
    @test decoration(exp(DecoratedInterval(Interval(0.0, 0x1.62e42fefa39ep+9), def))) == decoration(DecoratedInterval(Interval(1.0, 0x1.fffffffffc32bp+1023), def))
end

@testset "minimal_exp2_test" begin
    @test exp2(∅) == ∅
    @test exp2(Interval(-Inf, 0.0)) == Interval(0.0, 1.0)
    @test exp2(Interval(-Inf, -0.0)) == Interval(0.0, 1.0)
    @test exp2(Interval(0.0, Inf)) == Interval(1.0, Inf)
    @test exp2(Interval(-0.0, Inf)) == Interval(1.0, Inf)
    @test exp2(entireinterval(Float64)) == Interval(0.0, Inf)
    @test exp2(Interval(-Inf, 1024.0)) == Interval(0.0, Inf)
    @test exp2(Interval(1024.0, 1024.0)) == Interval(0x1.fffffffffffffp+1023, Inf)
    @test exp2(Interval(0.0, 1023.0)) == Interval(1.0, 0x1p+1023)
    @test exp2(Interval(-0.0, 1023.0)) == Interval(1.0, 0x1p+1023)
    @test exp2(Interval(-1022.0, 1023.0)) == Interval(0x1p-1022, 0x1p+1023)
    @test exp2(Interval(-1022.0, 0.0)) == Interval(0x1p-1022, 1.0)
    @test exp2(Interval(-1022.0, -0.0)) == Interval(0x1p-1022, 1.0)
    @test exp2(Interval(-1022.0, 1.0)) == Interval(0x1p-1022, 2.0)
    @test exp2(Interval(1.0, 5.0)) == Interval(2.0, 32.0)
    @test exp2(Interval(-0x1.a934f0979a372p+1, 0x1.ceaecfea8085ap+0)) == Interval(0x1.9999999999998p-4, 0x1.c000000000001p+1)
    @test exp2(Interval(0x1.87f42b972949cp-1, 0x1.8b55484710029p+6)) == Interval(0x1.b333333333332p+0, 0x1.c81fd88228b4fp+98)
    @test exp2(Interval(0x1.78025c8b3fd39p+3, 0x1.9fd8eef3fa79bp+4)) == Interval(0x1.aea0000721857p+11, 0x1.fca0555555559p+25)
end

@testset "minimal_exp2_dec_test" begin
    @test exp2(DecoratedInterval(Interval(1024.0, 1024.0), com)) == DecoratedInterval(Interval(0x1.fffffffffffffp+1023, Inf), dac)
    @test decoration(exp2(DecoratedInterval(Interval(1024.0, 1024.0), com))) == decoration(DecoratedInterval(Interval(0x1.fffffffffffffp+1023, Inf), dac))
    @test exp2(DecoratedInterval(Interval(0x1.87f42b972949cp-1, 0x1.8b55484710029p+6), def)) == DecoratedInterval(Interval(0x1.b333333333332p+0, 0x1.c81fd88228b4fp+98), def)
    @test decoration(exp2(DecoratedInterval(Interval(0x1.87f42b972949cp-1, 0x1.8b55484710029p+6), def))) == decoration(DecoratedInterval(Interval(0x1.b333333333332p+0, 0x1.c81fd88228b4fp+98), def))
end

@testset "minimal_exp10_test" begin
    @test exp10(∅) == ∅
    @test exp10(Interval(-Inf, 0.0)) == Interval(0.0, 1.0)
    @test exp10(Interval(-Inf, -0.0)) == Interval(0.0, 1.0)
    @test exp10(Interval(0.0, Inf)) == Interval(1.0, Inf)
    @test exp10(Interval(-0.0, Inf)) == Interval(1.0, Inf)
    @test exp10(entireinterval(Float64)) == Interval(0.0, Inf)
    @test exp10(Interval(-Inf, 0x1.34413509f79ffp+8)) == Interval(0.0, Inf)
    @test exp10(Interval(0x1.34413509f79ffp+8, 0x1.34413509f79ffp+8)) == Interval(0x1.fffffffffffffp+1023, Inf)
    @test exp10(Interval(0.0, 0x1.34413509f79fep+8)) == Interval(1.0, 0x1.ffffffffffba1p+1023)
    @test exp10(Interval(-0.0, 0x1.34413509f79fep+8)) == Interval(1.0, 0x1.ffffffffffba1p+1023)
    @test exp10(Interval(-0x1.33a7146f72a42p+8, 0x1.34413509f79fep+8)) == Interval(0x0.fffffffffffe3p-1022, 0x1.ffffffffffba1p+1023)
    @test exp10(Interval(-0x1.22p+7, 0x1.34413509f79fep+8)) == Interval(0x1.3faac3e3fa1f3p-482, 0x1.ffffffffffba1p+1023)
    @test exp10(Interval(-0x1.22p+7, 0.0)) == Interval(0x1.3faac3e3fa1f3p-482, 1.0)
    @test exp10(Interval(-0x1.22p+7, -0.0)) == Interval(0x1.3faac3e3fa1f3p-482, 1.0)
    @test exp10(Interval(-0x1.22p+7, 1.0)) == Interval(0x1.3faac3e3fa1f3p-482, 10.0)
    @test exp10(Interval(1.0, 5.0)) == Interval(10.0, 100000.0)
    @test exp10(Interval(-0x1.a934f0979a372p+1, 0x1.ceaecfea8085ap+0)) == Interval(0x1.f3a8254311f9ap-12, 0x1.00b18ad5b7d56p+6)
    @test exp10(Interval(0x1.87f42b972949cp-1, 0x1.8b55484710029p+6)) == Interval(0x1.75014b7296807p+2, 0x1.3eec1d47dfb2bp+328)
    @test exp10(Interval(0x1.78025c8b3fd39p+3, 0x1.9fd8eef3fa79bp+4)) == Interval(0x1.0608d2279a811p+39, 0x1.43af5d4271cb8p+86)
end

@testset "minimal_exp10_dec_test" begin
    @test exp10(DecoratedInterval(Interval(0x1.34413509f79ffp+8, 0x1.34413509f79ffp+8), com)) == DecoratedInterval(Interval(0x1.fffffffffffffp+1023, Inf), dac)
    @test decoration(exp10(DecoratedInterval(Interval(0x1.34413509f79ffp+8, 0x1.34413509f79ffp+8), com))) == decoration(DecoratedInterval(Interval(0x1.fffffffffffffp+1023, Inf), dac))
    @test exp10(DecoratedInterval(Interval(0x1.87f42b972949cp-1, 0x1.8b55484710029p+6), def)) == DecoratedInterval(Interval(0x1.75014b7296807p+2, 0x1.3eec1d47dfb2bp+328), def)
    @test decoration(exp10(DecoratedInterval(Interval(0x1.87f42b972949cp-1, 0x1.8b55484710029p+6), def))) == decoration(DecoratedInterval(Interval(0x1.75014b7296807p+2, 0x1.3eec1d47dfb2bp+328), def))
end

@testset "minimal_log_test" begin
    @test log(∅) == ∅
    @test log(Interval(-Inf, 0.0)) == ∅
    @test log(Interval(-Inf, -0.0)) == ∅
    @test log(Interval(0.0, 1.0)) == Interval(-Inf, 0.0)
    @test log(Interval(-0.0, 1.0)) == Interval(-Inf, 0.0)
    @test log(Interval(1.0, Inf)) == Interval(0.0, Inf)
    @test log(Interval(0.0, Inf)) == entireinterval(Float64)
    @test log(Interval(-0.0, Inf)) == entireinterval(Float64)
    @test log(entireinterval(Float64)) == entireinterval(Float64)
    @test log(Interval(0.0, 0x1.fffffffffffffp1023)) == Interval(-Inf, 0x1.62e42fefa39fp+9)
    @test log(Interval(-0.0, 0x1.fffffffffffffp1023)) == Interval(-Inf, 0x1.62e42fefa39fp+9)
    @test log(Interval(1.0, 0x1.fffffffffffffp1023)) == Interval(0.0, 0x1.62e42fefa39fp+9)
    @test log(Interval(0x0.0000000000001p-1022, 0x1.fffffffffffffp1023)) == Interval(-0x1.74385446d71c4p9, +0x1.62e42fefa39fp9)
    @test log(Interval(0x0.0000000000001p-1022, 1.0)) == Interval(-0x1.74385446d71c4p9, 0.0)
    @test log(Interval(0x1.5bf0a8b145769p+1, 0x1.5bf0a8b145769p+1)) == Interval(0x1.fffffffffffffp-1, 0x1p+0)
    @test log(Interval(0x1.5bf0a8b14576ap+1, 0x1.5bf0a8b14576ap+1)) == Interval(0x1p+0, 0x1.0000000000001p+0)
    @test log(Interval(0x0.0000000000001p-1022, 0x1.5bf0a8b14576ap+1)) == Interval(-0x1.74385446d71c4p9, 0x1.0000000000001p+0)
    @test log(Interval(0x1.5bf0a8b145769p+1, 32.0)) == Interval(0x1.fffffffffffffp-1, 0x1.bb9d3beb8c86cp+1)
    @test log(Interval(0x1.999999999999ap-4, 0x1.cp+1)) == Interval(-0x1.26bb1bbb55516p+1, 0x1.40b512eb53d6p+0)
    @test log(Interval(0x1.b333333333333p+0, 0x1.c81fd88228b2fp+98)) == Interval(0x1.0fae81914a99p-1, 0x1.120627f6ae7f1p+6)
    @test log(Interval(0x1.aea0000721861p+11, 0x1.fca055555554cp+25)) == Interval(0x1.04a1363db1e63p+3, 0x1.203e52c0256b5p+4)
end

@testset "minimal_log_dec_test" begin
    @test log(DecoratedInterval(Interval(0x0.0000000000001p-1022, 0x1.fffffffffffffp1023), com)) == DecoratedInterval(Interval(-0x1.74385446d71c4p9, 0x1.62e42fefa39fp+9), com)
    @test decoration(log(DecoratedInterval(Interval(0x0.0000000000001p-1022, 0x1.fffffffffffffp1023), com))) == decoration(DecoratedInterval(Interval(-0x1.74385446d71c4p9, 0x1.62e42fefa39fp+9), com))
    @test log(DecoratedInterval(Interval(0.0, 1.0), com)) == DecoratedInterval(Interval(-Inf, 0.0), trv)
    @test decoration(log(DecoratedInterval(Interval(0.0, 1.0), com))) == decoration(DecoratedInterval(Interval(-Inf, 0.0), trv))
    @test log(DecoratedInterval(Interval(0x1.5bf0a8b14576ap+1, 0x1.5bf0a8b14576ap+1), def)) == DecoratedInterval(Interval(0x1p+0, 0x1.0000000000001p+0), def)
    @test decoration(log(DecoratedInterval(Interval(0x1.5bf0a8b14576ap+1, 0x1.5bf0a8b14576ap+1), def))) == decoration(DecoratedInterval(Interval(0x1p+0, 0x1.0000000000001p+0), def))
end

@testset "minimal_log2_test" begin
    @test log2(∅) == ∅
    @test log2(Interval(-Inf, 0.0)) == ∅
    @test log2(Interval(-Inf, -0.0)) == ∅
    @test log2(Interval(0.0, 1.0)) == Interval(-Inf, 0.0)
    @test log2(Interval(-0.0, 1.0)) == Interval(-Inf, 0.0)
    @test log2(Interval(1.0, Inf)) == Interval(0.0, Inf)
    @test log2(Interval(0.0, Inf)) == entireinterval(Float64)
    @test log2(Interval(-0.0, Inf)) == entireinterval(Float64)
    @test log2(entireinterval(Float64)) == entireinterval(Float64)
    @test log2(Interval(0.0, 0x1.fffffffffffffp1023)) == Interval(-Inf, 1024.0)
    @test log2(Interval(-0.0, 0x1.fffffffffffffp1023)) == Interval(-Inf, 1024.0)
    @test log2(Interval(1.0, 0x1.fffffffffffffp1023)) == Interval(0.0, 1024.0)
    @test log2(Interval(0x0.0000000000001p-1022, 0x1.fffffffffffffp1023)) == Interval(-1074.0, 1024.0)
    @test log2(Interval(0x0.0000000000001p-1022, 1.0)) == Interval(-1074.0, 0.0)
    @test log2(Interval(0x0.0000000000001p-1022, 2.0)) == Interval(-1074.0, 1.0)
    @test log2(Interval(2.0, 32.0)) == Interval(1.0, 5.0)
    @test log2(Interval(0x1.999999999999ap-4, 0x1.cp+1)) == Interval(-0x1.a934f0979a372p+1, 0x1.ceaecfea8085ap+0)
    @test log2(Interval(0x1.b333333333333p+0, 0x1.c81fd88228b2fp+98)) == Interval(0x1.87f42b972949cp-1, 0x1.8b55484710029p+6)
    @test log2(Interval(0x1.aea0000721861p+11, 0x1.fca055555554cp+25)) == Interval(0x1.78025c8b3fd39p+3, 0x1.9fd8eef3fa79bp+4)
end

@testset "minimal_log2_dec_test" begin
    @test log2(DecoratedInterval(Interval(0x0.0000000000001p-1022, 0x1.fffffffffffffp1023), com)) == DecoratedInterval(Interval(-1074.0, 1024.0), com)
    @test decoration(log2(DecoratedInterval(Interval(0x0.0000000000001p-1022, 0x1.fffffffffffffp1023), com))) == decoration(DecoratedInterval(Interval(-1074.0, 1024.0), com))
    @test log2(DecoratedInterval(Interval(0x0.0000000000001p-1022, Inf), dac)) == DecoratedInterval(Interval(-1074.0, Inf), dac)
    @test decoration(log2(DecoratedInterval(Interval(0x0.0000000000001p-1022, Inf), dac))) == decoration(DecoratedInterval(Interval(-1074.0, Inf), dac))
    @test log2(DecoratedInterval(Interval(2.0, 32.0), def)) == DecoratedInterval(Interval(1.0, 5.0), def)
    @test decoration(log2(DecoratedInterval(Interval(2.0, 32.0), def))) == decoration(DecoratedInterval(Interval(1.0, 5.0), def))
    @test log2(DecoratedInterval(Interval(0.0, 0x1.fffffffffffffp1023), com)) == DecoratedInterval(Interval(-Inf, 1024.0), trv)
    @test decoration(log2(DecoratedInterval(Interval(0.0, 0x1.fffffffffffffp1023), com))) == decoration(DecoratedInterval(Interval(-Inf, 1024.0), trv))
end

@testset "minimal_log10_test" begin
    @test log10(∅) == ∅
    @test log10(Interval(-Inf, 0.0)) == ∅
    @test log10(Interval(-Inf, -0.0)) == ∅
    @test log10(Interval(0.0, 1.0)) == Interval(-Inf, 0.0)
    @test log10(Interval(-0.0, 1.0)) == Interval(-Inf, 0.0)
    @test log10(Interval(1.0, Inf)) == Interval(0.0, Inf)
    @test log10(Interval(0.0, Inf)) == entireinterval(Float64)
    @test log10(Interval(-0.0, Inf)) == entireinterval(Float64)
    @test log10(entireinterval(Float64)) == entireinterval(Float64)
    @test log10(Interval(0.0, 0x1.fffffffffffffp1023)) == Interval(-Inf, 0x1.34413509f79ffp+8)
    @test log10(Interval(-0.0, 0x1.fffffffffffffp1023)) == Interval(-Inf, 0x1.34413509f79ffp+8)
    @test log10(Interval(1.0, 0x1.fffffffffffffp1023)) == Interval(0.0, 0x1.34413509f79ffp+8)
    @test log10(Interval(0x0.0000000000001p-1022, 0x1.fffffffffffffp1023)) == Interval(-0x1.434e6420f4374p+8, +0x1.34413509f79ffp+8)
    @test log10(Interval(0x0.0000000000001p-1022, 1.0)) == Interval(-0x1.434e6420f4374p+8, 0.0)
    @test log10(Interval(0x0.0000000000001p-1022, 10.0)) == Interval(-0x1.434e6420f4374p+8, 1.0)
    @test log10(Interval(10.0, 100000.0)) == Interval(1.0, 5.0)
    @test log10(Interval(0x1.999999999999ap-4, 0x1.cp+1)) == Interval(-0x1p+0, 0x1.1690163290f4p-1)
    @test log10(Interval(0x1.999999999999ap-4, 0x1.999999999999ap-4)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test log10(Interval(0x1.b333333333333p+0, 0x1.c81fd88228b2fp+98)) == Interval(0x1.d7f59aa5becb9p-3, 0x1.dc074d84e5aabp+4)
    @test log10(Interval(0x1.aea0000721861p+11, 0x1.fca055555554cp+25)) == Interval(0x1.c4c29dd829191p+1, 0x1.f4baebba4fa4p+2)
end

@testset "minimal_log10_dec_test" begin
    @test log10(DecoratedInterval(Interval(0x0.0000000000001p-1022, 0x1.fffffffffffffp1023), com)) == DecoratedInterval(Interval(-0x1.434e6420f4374p+8, 0x1.34413509f79ffp+8), com)
    @test decoration(log10(DecoratedInterval(Interval(0x0.0000000000001p-1022, 0x1.fffffffffffffp1023), com))) == decoration(DecoratedInterval(Interval(-0x1.434e6420f4374p+8, 0x1.34413509f79ffp+8), com))
    @test log10(DecoratedInterval(Interval(0.0, 0x1.fffffffffffffp1023), dac)) == DecoratedInterval(Interval(-Inf, 0x1.34413509f79ffp+8), trv)
    @test decoration(log10(DecoratedInterval(Interval(0.0, 0x1.fffffffffffffp1023), dac))) == decoration(DecoratedInterval(Interval(-Inf, 0x1.34413509f79ffp+8), trv))
end

@testset "minimal_sin_test" begin
    @test sin(∅) == ∅
    @test sin(Interval(0.0, Inf)) == Interval(-1.0, 1.0)
    @test sin(Interval(-0.0, Inf)) == Interval(-1.0, 1.0)
    @test sin(Interval(-Inf, 0.0)) == Interval(-1.0, 1.0)
    @test sin(Interval(-Inf, -0.0)) == Interval(-1.0, 1.0)
    @test sin(entireinterval(Float64)) == Interval(-1.0, 1.0)
    @test sin(Interval(0.0, 0.0)) == Interval(0.0, 0.0)
    @test sin(Interval(-0.0, -0.0)) == Interval(0.0, 0.0)
    @test sin(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d18p+0)) == Interval(0x1.fffffffffffffp-1, 0x1p+0)
    @test sin(Interval(0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)) == Interval(0x1.fffffffffffffp-1, 0x1p+0)
    @test sin(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)) == Interval(0x1.fffffffffffffp-1, 0x1p+0)
    @test sin(Interval(0.0, 0x1.921fb54442d18p+0)) == Interval(0.0, 0x1p+0)
    @test sin(Interval(-0.0, 0x1.921fb54442d18p+0)) == Interval(0.0, 0x1p+0)
    @test sin(Interval(0.0, 0x1.921fb54442d19p+0)) == Interval(0.0, 0x1p+0)
    @test sin(Interval(-0.0, 0x1.921fb54442d19p+0)) == Interval(0.0, 0x1p+0)
    @test sin(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d18p+1)) == Interval(0x1.1a62633145c06p-53, 0x1.1a62633145c07p-53)
    @test sin(Interval(0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)) == Interval(-0x1.72cece675d1fdp-52, -0x1.72cece675d1fcp-52)
    @test sin(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)) == Interval(-0x1.72cece675d1fdp-52, 0x1.1a62633145c07p-53)
    @test sin(Interval(0.0, 0x1.921fb54442d18p+1)) == Interval(0.0, 1.0)
    @test sin(Interval(-0.0, 0x1.921fb54442d18p+1)) == Interval(0.0, 1.0)
    @test sin(Interval(0.0, 0x1.921fb54442d19p+1)) == Interval(-0x1.72cece675d1fdp-52, 1.0)
    @test sin(Interval(-0.0, 0x1.921fb54442d19p+1)) == Interval(-0x1.72cece675d1fdp-52, 1.0)
    @test sin(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d18p+1)) == Interval(0x1.1a62633145c06p-53, 0x1p+0)
    @test sin(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1)) == Interval(-0x1.72cece675d1fdp-52, 0x1p+0)
    @test sin(Interval(0x1.921fb54442d19p+0, 0x1.921fb54442d18p+1)) == Interval(0x1.1a62633145c06p-53, 0x1p+0)
    @test sin(Interval(0x1.921fb54442d19p+0, 0x1.921fb54442d19p+1)) == Interval(-0x1.72cece675d1fdp-52, 0x1p+0)
    @test sin(Interval(-0x1.921fb54442d18p+0, -0x1.921fb54442d18p+0)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test sin(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d19p+0)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test sin(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test sin(Interval(-0x1.921fb54442d18p+0, 0.0)) == Interval(-0x1p+0, 0.0)
    @test sin(Interval(-0x1.921fb54442d18p+0, -0.0)) == Interval(-0x1p+0, 0.0)
    @test sin(Interval(-0x1.921fb54442d19p+0, 0.0)) == Interval(-0x1p+0, 0.0)
    @test sin(Interval(-0x1.921fb54442d19p+0, -0.0)) == Interval(-0x1p+0, 0.0)
    @test sin(Interval(-0x1.921fb54442d18p+1, -0x1.921fb54442d18p+1)) == Interval(-0x1.1a62633145c07p-53, -0x1.1a62633145c06p-53)
    @test sin(Interval(-0x1.921fb54442d19p+1, -0x1.921fb54442d19p+1)) == Interval(0x1.72cece675d1fcp-52, 0x1.72cece675d1fdp-52)
    @test sin(Interval(-0x1.921fb54442d19p+1, -0x1.921fb54442d18p+1)) == Interval(-0x1.1a62633145c07p-53, 0x1.72cece675d1fdp-52)
    @test sin(Interval(-0x1.921fb54442d18p+1, 0.0)) == Interval(-1.0, 0.0)
    @test sin(Interval(-0x1.921fb54442d18p+1, -0.0)) == Interval(-1.0, 0.0)
    @test sin(Interval(-0x1.921fb54442d19p+1, 0.0)) == Interval(-1.0, 0x1.72cece675d1fdp-52)
    @test sin(Interval(-0x1.921fb54442d19p+1, -0.0)) == Interval(-1.0, 0x1.72cece675d1fdp-52)
    @test sin(Interval(-0x1.921fb54442d18p+1, -0x1.921fb54442d18p+0)) == Interval(-0x1p+0, -0x1.1a62633145c06p-53)
    @test sin(Interval(-0x1.921fb54442d19p+1, -0x1.921fb54442d18p+0)) == Interval(-0x1p+0, 0x1.72cece675d1fdp-52)
    @test sin(Interval(-0x1.921fb54442d18p+1, -0x1.921fb54442d19p+0)) == Interval(-0x1p+0, -0x1.1a62633145c06p-53)
    @test sin(Interval(-0x1.921fb54442d19p+1, -0x1.921fb54442d19p+0)) == Interval(-0x1p+0, 0x1.72cece675d1fdp-52)
    @test sin(Interval(-0x1.921fb54442d18p+0, 0x1.921fb54442d18p+0)) == Interval(-0x1p+0, 0x1p+0)
    @test sin(Interval(-0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)) == Interval(-0x1p+0, 0x1p+0)
    @test sin(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d18p+0)) == Interval(-0x1p+0, 0x1p+0)
    @test sin(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)) == Interval(-0x1p+0, 0x1p+0)
    @test sin(Interval(-0.7, 0.1)) == Interval(-0x1.49d6e694619b9p-1, 0x1.98eaecb8bcb2dp-4)
    @test sin(Interval(1.0, 2.0)) == Interval(0x1.aed548f090ceep-1, 1.0)
    @test sin(Interval(-3.2, -2.9)) == Interval(-0x1.e9fb8d64830e3p-3, 0x1.de33739e82d33p-5)
    @test sin(Interval(2.0, 3.0)) == Interval(0x1.210386db6d55bp-3, 0x1.d18f6ead1b446p-1)
end

@testset "minimal_sin_dec_test" begin
    @test sin(DecoratedInterval(Interval(-0x1.921fb54442d18p+1, -0x1.921fb54442d18p+0), def)) == DecoratedInterval(Interval(-0x1p+0, -0x1.1a62633145c06p-53), def)
    @test decoration(sin(DecoratedInterval(Interval(-0x1.921fb54442d18p+1, -0x1.921fb54442d18p+0), def))) == decoration(DecoratedInterval(Interval(-0x1p+0, -0x1.1a62633145c06p-53), def))
    @test sin(DecoratedInterval(Interval(-Inf, -0.0), trv)) == DecoratedInterval(Interval(-1.0, 1.0), trv)
    @test decoration(sin(DecoratedInterval(Interval(-Inf, -0.0), trv))) == decoration(DecoratedInterval(Interval(-1.0, 1.0), trv))
    @test sin(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(-1.0, 1.0), def)
    @test decoration(sin(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(-1.0, 1.0), def))
end

@testset "minimal_cos_test" begin
    @test cos(∅) == ∅
    @test cos(Interval(0.0, Inf)) == Interval(-1.0, 1.0)
    @test cos(Interval(-0.0, Inf)) == Interval(-1.0, 1.0)
    @test cos(Interval(-Inf, 0.0)) == Interval(-1.0, 1.0)
    @test cos(Interval(-Inf, -0.0)) == Interval(-1.0, 1.0)
    @test cos(entireinterval(Float64)) == Interval(-1.0, 1.0)
    @test cos(Interval(0.0, 0.0)) == Interval(1.0, 1.0)
    @test cos(Interval(-0.0, -0.0)) == Interval(1.0, 1.0)
    @test cos(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d18p+0)) == Interval(0x1.1a62633145c06p-54, 0x1.1a62633145c07p-54)
    @test cos(Interval(0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)) == Interval(-0x1.72cece675d1fdp-53, -0x1.72cece675d1fcp-53)
    @test cos(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)) == Interval(-0x1.72cece675d1fdp-53, 0x1.1a62633145c07p-54)
    @test cos(Interval(0.0, 0x1.921fb54442d18p+0)) == Interval(0x1.1a62633145c06p-54, 1.0)
    @test cos(Interval(-0.0, 0x1.921fb54442d18p+0)) == Interval(0x1.1a62633145c06p-54, 1.0)
    @test cos(Interval(0.0, 0x1.921fb54442d19p+0)) == Interval(-0x1.72cece675d1fdp-53, 1.0)
    @test cos(Interval(-0.0, 0x1.921fb54442d19p+0)) == Interval(-0x1.72cece675d1fdp-53, 1.0)
    @test cos(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d18p+1)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test cos(Interval(0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test cos(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test cos(Interval(0.0, 0x1.921fb54442d18p+1)) == Interval(-1.0, 1.0)
    @test cos(Interval(-0.0, 0x1.921fb54442d18p+1)) == Interval(-1.0, 1.0)
    @test cos(Interval(0.0, 0x1.921fb54442d19p+1)) == Interval(-1.0, 1.0)
    @test cos(Interval(-0.0, 0x1.921fb54442d19p+1)) == Interval(-1.0, 1.0)
    @test cos(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d18p+1)) == Interval(-1.0, 0x1.1a62633145c07p-54)
    @test cos(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1)) == Interval(-1.0, 0x1.1a62633145c07p-54)
    @test cos(Interval(0x1.921fb54442d19p+0, 0x1.921fb54442d18p+1)) == Interval(-1.0, -0x1.72cece675d1fcp-53)
    @test cos(Interval(0x1.921fb54442d19p+0, 0x1.921fb54442d19p+1)) == Interval(-1.0, -0x1.72cece675d1fcp-53)
    @test cos(Interval(-0x1.921fb54442d18p+0, -0x1.921fb54442d18p+0)) == Interval(0x1.1a62633145c06p-54, 0x1.1a62633145c07p-54)
    @test cos(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d19p+0)) == Interval(-0x1.72cece675d1fdp-53, -0x1.72cece675d1fcp-53)
    @test cos(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)) == Interval(-0x1.72cece675d1fdp-53, 0x1.1a62633145c07p-54)
    @test cos(Interval(-0x1.921fb54442d18p+0, 0.0)) == Interval(0x1.1a62633145c06p-54, 1.0)
    @test cos(Interval(-0x1.921fb54442d18p+0, -0.0)) == Interval(0x1.1a62633145c06p-54, 1.0)
    @test cos(Interval(-0x1.921fb54442d19p+0, 0.0)) == Interval(-0x1.72cece675d1fdp-53, 1.0)
    @test cos(Interval(-0x1.921fb54442d19p+0, -0.0)) == Interval(-0x1.72cece675d1fdp-53, 1.0)
    @test cos(Interval(-0x1.921fb54442d18p+1, -0x1.921fb54442d18p+1)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test cos(Interval(-0x1.921fb54442d19p+1, -0x1.921fb54442d19p+1)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test cos(Interval(-0x1.921fb54442d19p+1, -0x1.921fb54442d18p+1)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test cos(Interval(-0x1.921fb54442d18p+1, 0.0)) == Interval(-1.0, 1.0)
    @test cos(Interval(-0x1.921fb54442d18p+1, -0.0)) == Interval(-1.0, 1.0)
    @test cos(Interval(-0x1.921fb54442d19p+1, 0.0)) == Interval(-1.0, 1.0)
    @test cos(Interval(-0x1.921fb54442d19p+1, -0.0)) == Interval(-1.0, 1.0)
    @test cos(Interval(-0x1.921fb54442d18p+1, -0x1.921fb54442d18p+0)) == Interval(-1.0, 0x1.1a62633145c07p-54)
    @test cos(Interval(-0x1.921fb54442d19p+1, -0x1.921fb54442d18p+0)) == Interval(-1.0, 0x1.1a62633145c07p-54)
    @test cos(Interval(-0x1.921fb54442d18p+1, -0x1.921fb54442d19p+0)) == Interval(-1.0, -0x1.72cece675d1fcp-53)
    @test cos(Interval(-0x1.921fb54442d19p+1, -0x1.921fb54442d19p+0)) == Interval(-1.0, -0x1.72cece675d1fcp-53)
    @test cos(Interval(-0x1.921fb54442d18p+0, 0x1.921fb54442d18p+0)) == Interval(0x1.1a62633145c06p-54, 1.0)
    @test cos(Interval(-0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)) == Interval(-0x1.72cece675d1fdp-53, 1.0)
    @test cos(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d18p+0)) == Interval(-0x1.72cece675d1fdp-53, 1.0)
    @test cos(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)) == Interval(-0x1.72cece675d1fdp-53, 1.0)
    @test cos(Interval(-0.7, 0.1)) == Interval(0x1.87996529f9d92p-1, 1.0)
    @test cos(Interval(1.0, 2.0)) == Interval(-0x1.aa22657537205p-2, 0x1.14a280fb5068cp-1)
    @test cos(Interval(-3.2, -2.9)) == Interval(-1.0, -0x1.f1216dba340c8p-1)
    @test cos(Interval(2.0, 3.0)) == Interval(-0x1.fae04be85e5d3p-1, -0x1.aa22657537204p-2)
end

@testset "minimal_cos_dec_test" begin
    @test cos(DecoratedInterval(Interval(-0x1.921fb54442d18p+0, -0x1.921fb54442d18p+0), trv)) == DecoratedInterval(Interval(0x1.1a62633145c06p-54, 0x1.1a62633145c07p-54), trv)
    @test decoration(cos(DecoratedInterval(Interval(-0x1.921fb54442d18p+0, -0x1.921fb54442d18p+0), trv))) == decoration(DecoratedInterval(Interval(0x1.1a62633145c06p-54, 0x1.1a62633145c07p-54), trv))
    @test cos(DecoratedInterval(Interval(-Inf, -0.0), def)) == DecoratedInterval(Interval(-1.0, 1.0), def)
    @test decoration(cos(DecoratedInterval(Interval(-Inf, -0.0), def))) == decoration(DecoratedInterval(Interval(-1.0, 1.0), def))
    @test cos(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(-1.0, 1.0), def)
    @test decoration(cos(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(-1.0, 1.0), def))
end

@testset "minimal_tan_test" begin
    @test tan(∅) == ∅
    @test tan(Interval(0.0, Inf)) == entireinterval(Float64)
    @test tan(Interval(-0.0, Inf)) == entireinterval(Float64)
    @test tan(Interval(-Inf, 0.0)) == entireinterval(Float64)
    @test tan(Interval(-Inf, -0.0)) == entireinterval(Float64)
    @test tan(entireinterval(Float64)) == entireinterval(Float64)
    @test tan(Interval(0.0, 0.0)) == Interval(0.0, 0.0)
    @test tan(Interval(-0.0, -0.0)) == Interval(0.0, 0.0)
    @test tan(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d18p+0)) == Interval(0x1.d02967c31cdb4p+53, 0x1.d02967c31cdb5p+53)
    @test tan(Interval(0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)) == Interval(-0x1.617a15494767bp+52, -0x1.617a15494767ap+52)
    @test tan(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)) == entireinterval(Float64)
    @test tan(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d18p+1)) == Interval(-0x1.1a62633145c07p-53, -0x1.1a62633145c06p-53)
    @test tan(Interval(0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)) == Interval(0x1.72cece675d1fcp-52, 0x1.72cece675d1fdp-52)
    @test tan(Interval(0.0, 0x1.921fb54442d18p+0)) == Interval(0.0, 0x1.d02967c31cdb5p+53)
    @test tan(Interval(-0.0, 0x1.921fb54442d18p+0)) == Interval(0.0, 0x1.d02967c31cdb5p+53)
    @test tan(Interval(0.0, 0x1.921fb54442d19p+0)) == entireinterval(Float64)
    @test tan(Interval(-0.0, 0x1.921fb54442d19p+0)) == entireinterval(Float64)
    @test tan(Interval(0.0, 0x1.921fb54442d18p+1)) == entireinterval(Float64)
    @test tan(Interval(-0.0, 0x1.921fb54442d18p+1)) == entireinterval(Float64)
    @test tan(Interval(0.0, 0x1.921fb54442d19p+1)) == entireinterval(Float64)
    @test tan(Interval(-0.0, 0x1.921fb54442d19p+1)) == entireinterval(Float64)
    @test tan(Interval(0x1p-51, 0x1.921fb54442d18p+1)) == entireinterval(Float64)
    @test tan(Interval(0x1p-51, 0x1.921fb54442d19p+1)) == entireinterval(Float64)
    @test tan(Interval(0x1p-52, 0x1.921fb54442d18p+1)) == entireinterval(Float64)
    @test tan(Interval(0x1p-52, 0x1.921fb54442d19p+1)) == entireinterval(Float64)
    @test tan(Interval(-0x1.921fb54442d18p+0, 0x1.921fb54442d18p+0)) == Interval(-0x1.d02967c31cdb5p+53, 0x1.d02967c31cdb5p+53)
    @test tan(Interval(-0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)) == entireinterval(Float64)
    @test tan(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d18p+0)) == entireinterval(Float64)
    @test tan(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)) == entireinterval(Float64)
    @test tan(Interval(-0x1.555475a31a4bep-2, 0x1.999999999999ap-4)) == Interval(-0x1.628f4fd931fefp-2, 0x1.9af8877430b81p-4)
    @test tan(Interval(0x1.4e18e147ae148p+12, 0x1.4e2028f5c28f6p+12)) == Interval(-0x1.d6d67b035b6b4p+2, -0x1.7e42b0760e3f3p+0)
    @test tan(Interval(0x1.4e18e147ae148p+12, 0x1.546028f5c28f6p+12)) == entireinterval(Float64)
    @test tan(Interval(0x1.fae147ae147aep-1, 0x1.028f5c28f5c29p+0)) == Interval(0x1.860fadcc59064p+0, 0x1.979ad0628469dp+0)
end

@testset "minimal_tan_dec_test" begin
    @test tan(DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(tan(DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test tan(DecoratedInterval(Interval(0.0, Inf), dac)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(0.0, Inf), dac))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(-0.0, Inf), def)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(-0.0, Inf), def))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(-Inf, 0.0), trv)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(-Inf, 0.0), trv))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(-Inf, -0.0), dac)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(-Inf, -0.0), dac))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(Interval(0.0, 0.0), com)
    @test decoration(tan(DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), com))
    @test tan(DecoratedInterval(Interval(-0.0, -0.0), def)) == DecoratedInterval(Interval(0.0, 0.0), def)
    @test decoration(tan(DecoratedInterval(Interval(-0.0, -0.0), def))) == decoration(DecoratedInterval(Interval(0.0, 0.0), def))
    @test tan(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d18p+0), com)) == DecoratedInterval(Interval(0x1.d02967c31cdb4p+53, 0x1.d02967c31cdb5p+53), com)
    @test decoration(tan(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d18p+0), com))) == decoration(DecoratedInterval(Interval(0x1.d02967c31cdb4p+53, 0x1.d02967c31cdb5p+53), com))
    @test tan(DecoratedInterval(Interval(0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), def)) == DecoratedInterval(Interval(-0x1.617a15494767bp+52, -0x1.617a15494767ap+52), def)
    @test decoration(tan(DecoratedInterval(Interval(0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), def))) == decoration(DecoratedInterval(Interval(-0x1.617a15494767bp+52, -0x1.617a15494767ap+52), def))
    @test tan(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), dac)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), dac))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d18p+1), trv)) == DecoratedInterval(Interval(-0x1.1a62633145c07p-53, -0x1.1a62633145c06p-53), trv)
    @test decoration(tan(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d18p+1), trv))) == decoration(DecoratedInterval(Interval(-0x1.1a62633145c07p-53, -0x1.1a62633145c06p-53), trv))
    @test tan(DecoratedInterval(Interval(0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), com)) == DecoratedInterval(Interval(0x1.72cece675d1fcp-52, 0x1.72cece675d1fdp-52), com)
    @test decoration(tan(DecoratedInterval(Interval(0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), com))) == decoration(DecoratedInterval(Interval(0x1.72cece675d1fcp-52, 0x1.72cece675d1fdp-52), com))
    @test tan(DecoratedInterval(Interval(0.0, 0x1.921fb54442d18p+0), dac)) == DecoratedInterval(Interval(0.0, 0x1.d02967c31cdb5p+53), dac)
    @test decoration(tan(DecoratedInterval(Interval(0.0, 0x1.921fb54442d18p+0), dac))) == decoration(DecoratedInterval(Interval(0.0, 0x1.d02967c31cdb5p+53), dac))
    @test tan(DecoratedInterval(Interval(-0.0, 0x1.921fb54442d18p+0), com)) == DecoratedInterval(Interval(0.0, 0x1.d02967c31cdb5p+53), com)
    @test decoration(tan(DecoratedInterval(Interval(-0.0, 0x1.921fb54442d18p+0), com))) == decoration(DecoratedInterval(Interval(0.0, 0x1.d02967c31cdb5p+53), com))
    @test tan(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(-0.0, 0x1.921fb54442d19p+0), def)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(-0.0, 0x1.921fb54442d19p+0), def))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(0.0, 0x1.921fb54442d18p+1), dac)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(0.0, 0x1.921fb54442d18p+1), dac))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(-0.0, 0x1.921fb54442d18p+1), com)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(-0.0, 0x1.921fb54442d18p+1), com))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(-0.0, 0x1.921fb54442d19p+1), def)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(-0.0, 0x1.921fb54442d19p+1), def))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(0x1p-51, 0x1.921fb54442d18p+1), dac)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(0x1p-51, 0x1.921fb54442d18p+1), dac))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(0x1p-51, 0x1.921fb54442d19p+1), com)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(0x1p-51, 0x1.921fb54442d19p+1), com))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(0x1p-52, 0x1.921fb54442d18p+1), trv)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(0x1p-52, 0x1.921fb54442d18p+1), trv))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(0x1p-52, 0x1.921fb54442d19p+1), def)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(0x1p-52, 0x1.921fb54442d19p+1), def))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(-0x1.921fb54442d18p+0, 0x1.921fb54442d18p+0), com)) == DecoratedInterval(Interval(-0x1.d02967c31cdb5p+53, 0x1.d02967c31cdb5p+53), com)
    @test decoration(tan(DecoratedInterval(Interval(-0x1.921fb54442d18p+0, 0x1.921fb54442d18p+0), com))) == decoration(DecoratedInterval(Interval(-0x1.d02967c31cdb5p+53, 0x1.d02967c31cdb5p+53), com))
    @test tan(DecoratedInterval(Interval(-0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(-0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d18p+0), def)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d18p+0), def))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), dac)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), dac))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(-0x1.555475a31a4bep-2, 0x1.999999999999ap-4), com)) == DecoratedInterval(Interval(-0x1.628f4fd931fefp-2, 0x1.9af8877430b81p-4), com)
    @test decoration(tan(DecoratedInterval(Interval(-0x1.555475a31a4bep-2, 0x1.999999999999ap-4), com))) == decoration(DecoratedInterval(Interval(-0x1.628f4fd931fefp-2, 0x1.9af8877430b81p-4), com))
    @test tan(DecoratedInterval(Interval(0x1.4e18e147ae148p+12, 0x1.4e2028f5c28f6p+12), dac)) == DecoratedInterval(Interval(-0x1.d6d67b035b6b4p+2, -0x1.7e42b0760e3f3p+0), dac)
    @test decoration(tan(DecoratedInterval(Interval(0x1.4e18e147ae148p+12, 0x1.4e2028f5c28f6p+12), dac))) == decoration(DecoratedInterval(Interval(-0x1.d6d67b035b6b4p+2, -0x1.7e42b0760e3f3p+0), dac))
    @test tan(DecoratedInterval(Interval(0x1.4e18e147ae148p+12, 0x1.546028f5c28f6p+12), def)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(tan(DecoratedInterval(Interval(0x1.4e18e147ae148p+12, 0x1.546028f5c28f6p+12), def))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test tan(DecoratedInterval(Interval(0x1.fae147ae147aep-1, 0x1.028f5c28f5c29p+0), trv)) == DecoratedInterval(Interval(0x1.860fadcc59064p+0, 0x1.979ad0628469dp+0), trv)
    @test decoration(tan(DecoratedInterval(Interval(0x1.fae147ae147aep-1, 0x1.028f5c28f5c29p+0), trv))) == decoration(DecoratedInterval(Interval(0x1.860fadcc59064p+0, 0x1.979ad0628469dp+0), trv))
end

@testset "minimal_asin_test" begin
    @test asin(∅) == ∅
    @test asin(Interval(0.0, Inf)) == Interval(0.0, 0x1.921fb54442d19p+0)
    @test asin(Interval(-0.0, Inf)) == Interval(0.0, 0x1.921fb54442d19p+0)
    @test asin(Interval(-Inf, 0.0)) == Interval(-0x1.921fb54442d19p+0, 0.0)
    @test asin(Interval(-Inf, -0.0)) == Interval(-0x1.921fb54442d19p+0, 0.0)
    @test asin(entireinterval(Float64)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test asin(Interval(-1.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test asin(Interval(-Inf, -1.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test asin(Interval(1.0, Inf)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test asin(Interval(-1.0, -1.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test asin(Interval(1.0, 1.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test asin(Interval(0.0, 0.0)) == Interval(0.0, 0.0)
    @test asin(Interval(-0.0, -0.0)) == Interval(0.0, 0.0)
    @test asin(Interval(-Inf, -0x1.0000000000001p+0)) == ∅
    @test asin(Interval(0x1.0000000000001p+0, Inf)) == ∅
    @test asin(Interval(-0x1.999999999999ap-4, 0x1.999999999999ap-4)) == Interval(-0x1.9a49276037885p-4, 0x1.9a49276037885p-4)
    @test asin(Interval(-0x1.51eb851eb851fp-2, 0x1.fffffffffffffp-1)) == Interval(-0x1.585ff6e341c3fp-2, 0x1.921fb50442d19p+0)
    @test asin(Interval(-0x1.fffffffffffffp-1, 0x1.fffffffffffffp-1)) == Interval(-0x1.921fb50442d19p+0, 0x1.921fb50442d19p+0)
end

@testset "minimal_asin_dec_test" begin
    @test asin(DecoratedInterval(Interval(0.0, Inf), dac)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv)
    @test decoration(asin(DecoratedInterval(Interval(0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv))
    @test asin(DecoratedInterval(Interval(-Inf, 0.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), trv)
    @test decoration(asin(DecoratedInterval(Interval(-Inf, 0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), trv))
    @test asin(DecoratedInterval(Interval(-1.0, 1.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), com)
    @test decoration(asin(DecoratedInterval(Interval(-1.0, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), com))
    @test asin(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(asin(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test asin(DecoratedInterval(Interval(-0x1.51eb851eb851fp-2, 0x1.fffffffffffffp-1), def)) == DecoratedInterval(Interval(-0x1.585ff6e341c3fp-2, 0x1.921fb50442d19p+0), def)
    @test decoration(asin(DecoratedInterval(Interval(-0x1.51eb851eb851fp-2, 0x1.fffffffffffffp-1), def))) == decoration(DecoratedInterval(Interval(-0x1.585ff6e341c3fp-2, 0x1.921fb50442d19p+0), def))
end

@testset "minimal_acos_test" begin
    @test acos(∅) == ∅
    @test acos(Interval(0.0, Inf)) == Interval(0.0, 0x1.921fb54442d19p+0)
    @test acos(Interval(-0.0, Inf)) == Interval(0.0, 0x1.921fb54442d19p+0)
    @test acos(Interval(-Inf, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1)
    @test acos(Interval(-Inf, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1)
    @test acos(entireinterval(Float64)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test acos(Interval(-1.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test acos(Interval(-Inf, -1.0)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test acos(Interval(1.0, Inf)) == Interval(0.0, 0.0)
    @test acos(Interval(-1.0, -1.0)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test acos(Interval(1.0, 1.0)) == Interval(0.0, 0.0)
    @test acos(Interval(0.0, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test acos(Interval(-0.0, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test acos(Interval(-Inf, -0x1.0000000000001p+0)) == ∅
    @test acos(Interval(0x1.0000000000001p+0, Inf)) == ∅
    @test acos(Interval(-0x1.999999999999ap-4, 0x1.999999999999ap-4)) == Interval(0x1.787b22ce3f59p+0, 0x1.abc447ba464a1p+0)
    @test acos(Interval(-0x1.51eb851eb851fp-2, 0x1.fffffffffffffp-1)) == Interval(0x1p-26, 0x1.e837b2fd13428p+0)
    @test acos(Interval(-0x1.fffffffffffffp-1, 0x1.fffffffffffffp-1)) == Interval(0x1p-26, 0x1.921fb52442d19p+1)
end

@testset "minimal_acos_dec_test" begin
    @test acos(DecoratedInterval(Interval(0.0, Inf), dac)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv)
    @test decoration(acos(DecoratedInterval(Interval(0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv))
    @test acos(DecoratedInterval(Interval(-Inf, 0.0), def)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1), trv)
    @test decoration(acos(DecoratedInterval(Interval(-Inf, 0.0), def))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1), trv))
    @test acos(DecoratedInterval(Interval(-1.0, 1.0), com)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), com)
    @test decoration(acos(DecoratedInterval(Interval(-1.0, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), com))
    @test acos(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(acos(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test acos(DecoratedInterval(Interval(-0x1.51eb851eb851fp-2, 0x1.fffffffffffffp-1), def)) == DecoratedInterval(Interval(0x1p-26, 0x1.e837b2fd13428p+0), def)
    @test decoration(acos(DecoratedInterval(Interval(-0x1.51eb851eb851fp-2, 0x1.fffffffffffffp-1), def))) == decoration(DecoratedInterval(Interval(0x1p-26, 0x1.e837b2fd13428p+0), def))
end

@testset "minimal_atan_test" begin
    @test atan(∅) == ∅
    @test atan(Interval(0.0, Inf)) == Interval(0.0, 0x1.921fb54442d19p+0)
    @test atan(Interval(-0.0, Inf)) == Interval(0.0, 0x1.921fb54442d19p+0)
    @test atan(Interval(-Inf, 0.0)) == Interval(-0x1.921fb54442d19p+0, 0.0)
    @test atan(Interval(-Inf, -0.0)) == Interval(-0x1.921fb54442d19p+0, 0.0)
    @test atan(entireinterval(Float64)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan(Interval(0.0, 0.0)) == Interval(0.0, 0.0)
    @test atan(Interval(-0.0, -0.0)) == Interval(0.0, 0.0)
    @test atan(Interval(1.0, 0x1.4c2463567c5acp+25)) == Interval(0x1.921fb54442d18p-1, 0x1.921fb4e19abd7p+0)
    @test atan(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9)) == Interval(-0x1.921fb54440cebp+0, -0x1.91abe5c1e4c6dp+0)
end

@testset "minimal_atan_dec_test" begin
    @test atan(DecoratedInterval(Interval(0.0, Inf), dac)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), dac)
    @test decoration(atan(DecoratedInterval(Interval(0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), dac))
    @test atan(DecoratedInterval(Interval(-Inf, 0.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), def)
    @test decoration(atan(DecoratedInterval(Interval(-Inf, 0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), def))
    @test atan(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), def)
    @test decoration(atan(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), def))
    @test atan(DecoratedInterval(Interval(1.0, 0x1.4c2463567c5acp+25), trv)) == DecoratedInterval(Interval(0x1.921fb54442d18p-1, 0x1.921fb4e19abd7p+0), trv)
    @test decoration(atan(DecoratedInterval(Interval(1.0, 0x1.4c2463567c5acp+25), trv))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p-1, 0x1.921fb4e19abd7p+0), trv))
    @test atan(DecoratedInterval(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9), com)) == DecoratedInterval(Interval(-0x1.921fb54440cebp+0, -0x1.91abe5c1e4c6dp+0), com)
    @test decoration(atan(DecoratedInterval(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54440cebp+0, -0x1.91abe5c1e4c6dp+0), com))
end

@testset "minimal_atan2_test" begin
    @test atan2(∅, ∅) == ∅
    @test atan2(∅, entireinterval(Float64)) == ∅
    @test atan2(∅, Interval(0.0, 0.0)) == ∅
    @test atan2(∅, Interval(-0.0, 0.0)) == ∅
    @test atan2(∅, Interval(0.0, -0.0)) == ∅
    @test atan2(∅, Interval(-0.0, -0.0)) == ∅
    @test atan2(∅, Interval(-2.0, -0.1)) == ∅
    @test atan2(∅, Interval(-2.0, 0.0)) == ∅
    @test atan2(∅, Interval(-2.0, -0.0)) == ∅
    @test atan2(∅, Interval(-2.0, 1.0)) == ∅
    @test atan2(∅, Interval(0.0, 1.0)) == ∅
    @test atan2(∅, Interval(-0.0, 1.0)) == ∅
    @test atan2(∅, Interval(0.1, 1.0)) == ∅
    @test atan2(entireinterval(Float64), ∅) == ∅
    @test atan2(entireinterval(Float64), entireinterval(Float64)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(entireinterval(Float64), Interval(0.0, 0.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(entireinterval(Float64), Interval(0.0, -0.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(entireinterval(Float64), Interval(-0.0, 0.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(entireinterval(Float64), Interval(-0.0, -0.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(entireinterval(Float64), Interval(-2.0, -0.1)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(entireinterval(Float64), Interval(-2.0, 0.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(entireinterval(Float64), Interval(-2.0, -0.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(entireinterval(Float64), Interval(-2.0, 1.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(entireinterval(Float64), Interval(0.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(entireinterval(Float64), Interval(-0.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(entireinterval(Float64), Interval(0.1, 1.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.0, 0.0), ∅) == ∅
    @test atan2(Interval(0.0, 0.0), entireinterval(Float64)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, 0.0), Interval(0.0, 0.0)) == ∅
    @test atan2(Interval(0.0, 0.0), Interval(-0.0, 0.0)) == ∅
    @test atan2(Interval(0.0, 0.0), Interval(0.0, -0.0)) == ∅
    @test atan2(Interval(0.0, 0.0), Interval(-0.0, -0.0)) == ∅
    @test atan2(Interval(0.0, 0.0), Interval(-2.0, -0.1)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, 0.0), Interval(-2.0, 0.0)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, 0.0), Interval(-2.0, -0.0)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, 0.0), Interval(-2.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, 0.0), Interval(0.0, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(0.0, 0.0), Interval(-0.0, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(0.0, 0.0), Interval(0.1, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(-0.0, 0.0), ∅) == ∅
    @test atan2(Interval(-0.0, 0.0), entireinterval(Float64)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, 0.0), Interval(0.0, 0.0)) == ∅
    @test atan2(Interval(-0.0, 0.0), Interval(-0.0, 0.0)) == ∅
    @test atan2(Interval(-0.0, 0.0), Interval(0.0, -0.0)) == ∅
    @test atan2(Interval(-0.0, 0.0), Interval(-0.0, -0.0)) == ∅
    @test atan2(Interval(-0.0, 0.0), Interval(-2.0, -0.1)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, 0.0), Interval(-2.0, 0.0)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, 0.0), Interval(-2.0, -0.0)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, 0.0), Interval(-2.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, 0.0), Interval(0.0, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(-0.0, 0.0), Interval(-0.0, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(-0.0, 0.0), Interval(0.1, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(0.0, -0.0), ∅) == ∅
    @test atan2(Interval(0.0, -0.0), entireinterval(Float64)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, -0.0), Interval(0.0, 0.0)) == ∅
    @test atan2(Interval(0.0, -0.0), Interval(-0.0, 0.0)) == ∅
    @test atan2(Interval(0.0, -0.0), Interval(0.0, -0.0)) == ∅
    @test atan2(Interval(0.0, -0.0), Interval(-0.0, -0.0)) == ∅
    @test atan2(Interval(0.0, -0.0), Interval(-2.0, -0.1)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, -0.0), Interval(-2.0, 0.0)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, -0.0), Interval(-2.0, -0.0)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, -0.0), Interval(-2.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, -0.0), Interval(0.0, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(0.0, -0.0), Interval(-0.0, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(0.0, -0.0), Interval(0.1, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(-0.0, -0.0), ∅) == ∅
    @test atan2(Interval(-0.0, -0.0), entireinterval(Float64)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, -0.0), Interval(0.0, 0.0)) == ∅
    @test atan2(Interval(-0.0, -0.0), Interval(-0.0, 0.0)) == ∅
    @test atan2(Interval(-0.0, -0.0), Interval(0.0, -0.0)) == ∅
    @test atan2(Interval(-0.0, -0.0), Interval(-0.0, -0.0)) == ∅
    @test atan2(Interval(-0.0, -0.0), Interval(-2.0, -0.1)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, -0.0), Interval(-2.0, 0.0)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, -0.0), Interval(-2.0, -0.0)) == Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, -0.0), Interval(-2.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, -0.0), Interval(0.0, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(-0.0, -0.0), Interval(-0.0, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(-0.0, -0.0), Interval(0.1, 1.0)) == Interval(0.0, 0.0)
    @test atan2(Interval(-2.0, -0.1), ∅) == ∅
    @test atan2(Interval(-2.0, -0.1), entireinterval(Float64)) == Interval(-0x1.921fb54442d19p+1, 0.0)
    @test atan2(Interval(-2.0, -0.1), Interval(0.0, 0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, -0.1), Interval(0.0, -0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, -0.1), Interval(-0.0, 0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, -0.1), Interval(0.0, -0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, -0.1), Interval(-2.0, -0.1)) == Interval(-0x1.8bbaabde5e29cp+1, -0x1.9ee9c8100c211p+0)
    @test atan2(Interval(-2.0, -0.1), Interval(-2.0, 0.0)) == Interval(-0x1.8bbaabde5e29cp+1, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, -0.1), Interval(-2.0, -0.0)) == Interval(-0x1.8bbaabde5e29cp+1, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, -0.1), Interval(-2.0, 1.0)) == Interval(-0x1.8bbaabde5e29cp+1, -0x1.983e282e2cc4cp-4)
    @test atan2(Interval(-2.0, -0.1), Interval(0.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.983e282e2cc4cp-4)
    @test atan2(Interval(-2.0, -0.1), Interval(-0.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.983e282e2cc4cp-4)
    @test atan2(Interval(-2.0, -0.1), Interval(0.1, 1.0)) == Interval(-0x1.8555a2787982p+0, -0x1.983e282e2cc4cp-4)
    @test atan2(Interval(-2.0, 0.0), ∅) == ∅
    @test atan2(Interval(-2.0, 0.0), entireinterval(Float64)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, 0.0), Interval(0.0, 0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, 0.0), Interval(-0.0, 0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, 0.0), Interval(0.0, -0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, 0.0), Interval(-0.0, -0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, 0.0), Interval(-2.0, -0.1)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, 0.0), Interval(-2.0, 0.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, 0.0), Interval(-2.0, -0.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, 0.0), Interval(-2.0, 1.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, 0.0), Interval(0.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, 0.0)
    @test atan2(Interval(-2.0, 0.0), Interval(-0.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, 0.0)
    @test atan2(Interval(-2.0, 0.0), Interval(0.1, 1.0)) == Interval(-0x1.8555a2787982p+0, 0.0)
    @test atan2(Interval(-2.0, -0.0), ∅) == ∅
    @test atan2(Interval(-2.0, -0.0), entireinterval(Float64)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, -0.0), Interval(0.0, 0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, -0.0), Interval(-0.0, 0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, -0.0), Interval(0.0, -0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, -0.0), Interval(-0.0, -0.0)) == Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0)
    @test atan2(Interval(-2.0, -0.0), Interval(-2.0, -0.1)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, -0.0), Interval(-2.0, 0.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, -0.0), Interval(-2.0, -0.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, -0.0), Interval(-2.0, 1.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, -0.0), Interval(0.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, 0.0)
    @test atan2(Interval(-2.0, -0.0), Interval(-0.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, 0.0)
    @test atan2(Interval(-2.0, -0.0), Interval(0.1, 1.0)) == Interval(-0x1.8555a2787982p+0, 0.0)
    @test atan2(Interval(-2.0, 1.0), ∅) == ∅
    @test atan2(Interval(-2.0, 1.0), entireinterval(Float64)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, 1.0), Interval(0.0, 0.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-2.0, 1.0), Interval(-0.0, 0.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-2.0, 1.0), Interval(0.0, -0.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-2.0, 1.0), Interval(-0.0, -0.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-2.0, 1.0), Interval(-2.0, -0.1)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, 1.0), Interval(-2.0, 0.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, 1.0), Interval(-2.0, -0.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, 1.0), Interval(-2.0, 1.0)) == Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-2.0, 1.0), Interval(0.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-2.0, 1.0), Interval(-0.0, 1.0)) == Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-2.0, 1.0), Interval(0.1, 1.0)) == Interval(-0x1.8555a2787982p+0, 0x1.789bd2c160054p+0)
    @test atan2(Interval(-0.0, 1.0), ∅) == ∅
    @test atan2(Interval(-0.0, 1.0), entireinterval(Float64)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, 1.0), Interval(0.0, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-0.0, 1.0), Interval(-0.0, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-0.0, 1.0), Interval(0.0, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-0.0, 1.0), Interval(-0.0, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-0.0, 1.0), Interval(-2.0, -0.1)) == Interval(0x1.aba397c7259ddp+0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, 1.0), Interval(-2.0, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, 1.0), Interval(-2.0, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, 1.0), Interval(-2.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(-0.0, 1.0), Interval(0.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-0.0, 1.0), Interval(-0.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(-0.0, 1.0), Interval(0.1, 1.0)) == Interval(0.0, 0x1.789bd2c160054p+0)
    @test atan2(Interval(0.0, 1.0), ∅) == ∅
    @test atan2(Interval(0.0, 1.0), entireinterval(Float64)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, 1.0), Interval(0.0, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.0, 1.0), Interval(-0.0, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.0, 1.0), Interval(0.0, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.0, 1.0), Interval(-0.0, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.0, 1.0), Interval(-2.0, -0.1)) == Interval(0x1.aba397c7259ddp+0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, 1.0), Interval(-2.0, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, 1.0), Interval(-2.0, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, 1.0), Interval(-2.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.0, 1.0), Interval(0.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.0, 1.0), Interval(-0.0, 1.0)) == Interval(0.0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.0, 1.0), Interval(0.1, 1.0)) == Interval(0.0, 0x1.789bd2c160054p+0)
    @test atan2(Interval(0.1, 1.0), ∅) == ∅
    @test atan2(Interval(0.1, 1.0), entireinterval(Float64)) == Interval(0.0, 0x1.921fb54442d19p+1)
    @test atan2(Interval(0.1, 1.0), Interval(0.0, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.1, 1.0), Interval(-0.0, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.1, 1.0), Interval(0.0, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.1, 1.0), Interval(-0.0, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.1, 1.0), Interval(-2.0, -0.1)) == Interval(0x1.aba397c7259ddp+0, 0x1.8bbaabde5e29cp+1)
    @test atan2(Interval(0.1, 1.0), Interval(-2.0, 0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.8bbaabde5e29cp+1)
    @test atan2(Interval(0.1, 1.0), Interval(-2.0, -0.0)) == Interval(0x1.921fb54442d18p+0, 0x1.8bbaabde5e29cp+1)
    @test atan2(Interval(0.1, 1.0), Interval(-2.0, 1.0)) == Interval(0x1.983e282e2cc4cp-4, 0x1.8bbaabde5e29cp+1)
    @test atan2(Interval(0.1, 1.0), Interval(0.0, 1.0)) == Interval(0x1.983e282e2cc4cp-4, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.1, 1.0), Interval(-0.0, 1.0)) == Interval(0x1.983e282e2cc4cp-4, 0x1.921fb54442d19p+0)
    @test atan2(Interval(0.1, 1.0), Interval(0.1, 1.0)) == Interval(0x1.983e282e2cc4cp-4, 0x1.789bd2c160054p+0)
end

@testset "minimal_atan2_dec_test" begin
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-0.0, 0.0), dac)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-0.0, 0.0), dac))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(0.0, -0.0), def)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(0.0, -0.0), def))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-0.0, -0.0), trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-0.0, -0.0), trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-2.0, -0.1), com)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-2.0, -0.1), com))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-2.0, 0.0), dac)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-2.0, 0.0), dac))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-2.0, -0.0), def)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-2.0, -0.0), def))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-2.0, 1.0), trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-2.0, 1.0), trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(0.0, 1.0), com)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(0.0, 1.0), com))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-0.0, 1.0), dac)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(-0.0, 1.0), dac))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(0.1, 1.0), def)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(∅, trv), DecoratedInterval(Interval(0.1, 1.0), def))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(0.0, -0.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(0.0, -0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-0.0, 0.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-0.0, 0.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-0.0, -0.0), trv)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-0.0, -0.0), trv))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-2.0, -0.1), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), def)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-2.0, -0.1), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), def))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-2.0, 0.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-2.0, 0.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-2.0, -0.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-2.0, -0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-2.0, 1.0), trv)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-2.0, 1.0), trv))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(0.0, 1.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(0.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-0.0, 1.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(-0.0, 1.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(0.1, 1.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), def)
    @test decoration(atan2(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(0.1, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), def))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), com), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), com), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), dac), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), dac), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), def), DecoratedInterval(Interval(0.0, 0.0), trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), def), DecoratedInterval(Interval(0.0, 0.0), trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), trv), DecoratedInterval(Interval(-0.0, 0.0), dac)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), trv), DecoratedInterval(Interval(-0.0, 0.0), dac))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), com), DecoratedInterval(Interval(0.0, -0.0), def)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), com), DecoratedInterval(Interval(0.0, -0.0), def))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), dac), DecoratedInterval(Interval(-0.0, -0.0), com)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), dac), DecoratedInterval(Interval(-0.0, -0.0), com))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), com), DecoratedInterval(Interval(-2.0, -0.1), dac)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), dac)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), com), DecoratedInterval(Interval(-2.0, -0.1), dac))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), dac))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), trv), DecoratedInterval(Interval(-2.0, 0.0), com)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), trv), DecoratedInterval(Interval(-2.0, 0.0), com))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), com), DecoratedInterval(Interval(-2.0, -0.0), trv)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), com), DecoratedInterval(Interval(-2.0, -0.0), trv))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), dac), DecoratedInterval(Interval(-2.0, 1.0), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), dac), DecoratedInterval(Interval(-2.0, 1.0), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), def), DecoratedInterval(Interval(0.0, 1.0), com)) == DecoratedInterval(Interval(0.0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), def), DecoratedInterval(Interval(0.0, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), trv), DecoratedInterval(Interval(-0.0, 1.0), dac)) == DecoratedInterval(Interval(0.0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), trv), DecoratedInterval(Interval(-0.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(0.0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 0.0), com), DecoratedInterval(Interval(0.1, 1.0), com)) == DecoratedInterval(Interval(0.0, 0.0), com)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 0.0), com), DecoratedInterval(Interval(0.1, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), com))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), com), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), com), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), dac), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), dac), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), def), DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), def), DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), trv), DecoratedInterval(Interval(-0.0, 0.0), trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), trv), DecoratedInterval(Interval(-0.0, 0.0), trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), com), DecoratedInterval(Interval(0.0, -0.0), def)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), com), DecoratedInterval(Interval(0.0, -0.0), def))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), dac), DecoratedInterval(Interval(-0.0, -0.0), com)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), dac), DecoratedInterval(Interval(-0.0, -0.0), com))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), dac), DecoratedInterval(Interval(-2.0, -0.1), dac)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), dac)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), dac), DecoratedInterval(Interval(-2.0, -0.1), dac))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), dac))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), trv), DecoratedInterval(Interval(-2.0, 0.0), com)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), trv), DecoratedInterval(Interval(-2.0, 0.0), com))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), com), DecoratedInterval(Interval(-2.0, -0.0), trv)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), com), DecoratedInterval(Interval(-2.0, -0.0), trv))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), dac), DecoratedInterval(Interval(-2.0, 1.0), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), dac), DecoratedInterval(Interval(-2.0, 1.0), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), com), DecoratedInterval(Interval(0.0, 1.0), com)) == DecoratedInterval(Interval(0.0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), com), DecoratedInterval(Interval(0.0, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), def), DecoratedInterval(Interval(-0.0, 1.0), dac)) == DecoratedInterval(Interval(0.0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), def), DecoratedInterval(Interval(-0.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(0.0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 0.0), com), DecoratedInterval(Interval(0.1, 1.0), com)) == DecoratedInterval(Interval(0.0, 0.0), com)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 0.0), com), DecoratedInterval(Interval(0.1, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), com))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), dac), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), dac), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), def), DecoratedInterval(Interval(0.0, 0.0), dac)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), def), DecoratedInterval(Interval(0.0, 0.0), dac))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), trv), DecoratedInterval(Interval(-0.0, 0.0), com)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), trv), DecoratedInterval(Interval(-0.0, 0.0), com))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), dac), DecoratedInterval(Interval(0.0, -0.0), def)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), dac), DecoratedInterval(Interval(0.0, -0.0), def))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(Interval(-0.0, -0.0), trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(Interval(-0.0, -0.0), trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(Interval(-2.0, -0.1), dac)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), dac)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(Interval(-2.0, -0.1), dac))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), dac))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), def), DecoratedInterval(Interval(-2.0, 0.0), com)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), def), DecoratedInterval(Interval(-2.0, 0.0), com))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(Interval(-2.0, -0.0), dac)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(Interval(-2.0, -0.0), dac))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), dac), DecoratedInterval(Interval(-2.0, 1.0), com)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), dac), DecoratedInterval(Interval(-2.0, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(Interval(0.0, 1.0), trv)) == DecoratedInterval(Interval(0.0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(Interval(0.0, 1.0), trv))) == decoration(DecoratedInterval(Interval(0.0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), def), DecoratedInterval(Interval(-0.0, 1.0), com)) == DecoratedInterval(Interval(0.0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), def), DecoratedInterval(Interval(-0.0, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(Interval(0.1, 1.0), def)) == DecoratedInterval(Interval(0.0, 0.0), def)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, -0.0), com), DecoratedInterval(Interval(0.1, 1.0), def))) == decoration(DecoratedInterval(Interval(0.0, 0.0), def))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), com), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), com), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), def), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), def), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), dac), DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), dac), DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), trv), DecoratedInterval(Interval(-0.0, 0.0), def)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), trv), DecoratedInterval(Interval(-0.0, 0.0), def))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), com), DecoratedInterval(Interval(0.0, -0.0), trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), com), DecoratedInterval(Interval(0.0, -0.0), trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), dac), DecoratedInterval(Interval(-0.0, -0.0), com)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), dac), DecoratedInterval(Interval(-0.0, -0.0), com))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), def), DecoratedInterval(Interval(-2.0, -0.1), dac)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), def)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), def), DecoratedInterval(Interval(-2.0, -0.1), dac))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), def))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), trv), DecoratedInterval(Interval(-2.0, 0.0), def)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), trv), DecoratedInterval(Interval(-2.0, 0.0), def))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), dac), DecoratedInterval(Interval(-2.0, -0.0), trv)) == DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), dac), DecoratedInterval(Interval(-2.0, -0.0), trv))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), def), DecoratedInterval(Interval(-2.0, 1.0), com)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), def), DecoratedInterval(Interval(-2.0, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), com), DecoratedInterval(Interval(0.0, 1.0), com)) == DecoratedInterval(Interval(0.0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), com), DecoratedInterval(Interval(0.0, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), trv), DecoratedInterval(Interval(-0.0, 1.0), dac)) == DecoratedInterval(Interval(0.0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), trv), DecoratedInterval(Interval(-0.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(0.0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, -0.0), com), DecoratedInterval(Interval(0.1, 1.0), com)) == DecoratedInterval(Interval(0.0, 0.0), com)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, -0.0), com), DecoratedInterval(Interval(0.1, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), com))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), dac), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), dac), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), def), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0.0), def)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), def), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0.0), def))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), trv), DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), trv), DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), com), DecoratedInterval(Interval(0.0, -0.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), dac)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), com), DecoratedInterval(Interval(0.0, -0.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), dac))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), dac), DecoratedInterval(Interval(-0.0, 0.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), def)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), dac), DecoratedInterval(Interval(-0.0, 0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), def))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), com), DecoratedInterval(Interval(0.0, -0.0), trv)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), com), DecoratedInterval(Interval(0.0, -0.0), trv))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), def), DecoratedInterval(Interval(-2.0, -0.1), com)) == DecoratedInterval(Interval(-0x1.8bbaabde5e29cp+1, -0x1.9ee9c8100c211p+0), def)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), def), DecoratedInterval(Interval(-2.0, -0.1), com))) == decoration(DecoratedInterval(Interval(-0x1.8bbaabde5e29cp+1, -0x1.9ee9c8100c211p+0), def))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), com), DecoratedInterval(Interval(-2.0, 0.0), def)) == DecoratedInterval(Interval(-0x1.8bbaabde5e29cp+1, -0x1.921fb54442d18p+0), def)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), com), DecoratedInterval(Interval(-2.0, 0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.8bbaabde5e29cp+1, -0x1.921fb54442d18p+0), def))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), trv), DecoratedInterval(Interval(-2.0, -0.0), dac)) == DecoratedInterval(Interval(-0x1.8bbaabde5e29cp+1, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), trv), DecoratedInterval(Interval(-2.0, -0.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.8bbaabde5e29cp+1, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), def), DecoratedInterval(Interval(-2.0, 1.0), trv)) == DecoratedInterval(Interval(-0x1.8bbaabde5e29cp+1, -0x1.983e282e2cc4cp-4), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), def), DecoratedInterval(Interval(-2.0, 1.0), trv))) == decoration(DecoratedInterval(Interval(-0x1.8bbaabde5e29cp+1, -0x1.983e282e2cc4cp-4), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), com), DecoratedInterval(Interval(0.0, 1.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.983e282e2cc4cp-4), def)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), com), DecoratedInterval(Interval(0.0, 1.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.983e282e2cc4cp-4), def))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), dac), DecoratedInterval(Interval(-0.0, 1.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.983e282e2cc4cp-4), dac)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), dac), DecoratedInterval(Interval(-0.0, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.983e282e2cc4cp-4), dac))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.1), com), DecoratedInterval(Interval(0.1, 1.0), com)) == DecoratedInterval(Interval(-0x1.8555a2787982p+0, -0x1.983e282e2cc4cp-4), com)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.1), com), DecoratedInterval(Interval(0.1, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.8555a2787982p+0, -0x1.983e282e2cc4cp-4), com))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), def), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), def), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), def), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), def), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), dac), DecoratedInterval(Interval(0.0, 0.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), dac), DecoratedInterval(Interval(0.0, 0.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), trv), DecoratedInterval(Interval(-0.0, 0.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), trv), DecoratedInterval(Interval(-0.0, 0.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), com), DecoratedInterval(Interval(0.0, -0.0), trv)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), com), DecoratedInterval(Interval(0.0, -0.0), trv))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), def), DecoratedInterval(Interval(-0.0, -0.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), def), DecoratedInterval(Interval(-0.0, -0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), com), DecoratedInterval(Interval(-2.0, -0.1), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), def)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), com), DecoratedInterval(Interval(-2.0, -0.1), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), def))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), dac), DecoratedInterval(Interval(-2.0, 0.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), dac), DecoratedInterval(Interval(-2.0, 0.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), com), DecoratedInterval(Interval(-2.0, -0.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), com), DecoratedInterval(Interval(-2.0, -0.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), trv), DecoratedInterval(Interval(-2.0, 1.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), trv), DecoratedInterval(Interval(-2.0, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), def), DecoratedInterval(Interval(0.0, 1.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), def), DecoratedInterval(Interval(0.0, 1.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), com), DecoratedInterval(Interval(-0.0, 1.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), com), DecoratedInterval(Interval(-0.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 0.0), com), DecoratedInterval(Interval(0.1, 1.0), com)) == DecoratedInterval(Interval(-0x1.8555a2787982p+0, 0.0), com)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 0.0), com), DecoratedInterval(Interval(0.1, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.8555a2787982p+0, 0.0), com))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), trv), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), trv), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), dac), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), dac), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), com), DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), com), DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), def), DecoratedInterval(Interval(-0.0, 0.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), def), DecoratedInterval(Interval(-0.0, 0.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), dac), DecoratedInterval(Interval(0.0, -0.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), dac), DecoratedInterval(Interval(0.0, -0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), com), DecoratedInterval(Interval(-0.0, -0.0), trv)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), com), DecoratedInterval(Interval(-0.0, -0.0), trv))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, -0x1.921fb54442d18p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), def), DecoratedInterval(Interval(-2.0, -0.1), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), def)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), def), DecoratedInterval(Interval(-2.0, -0.1), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), def))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), com), DecoratedInterval(Interval(-2.0, 0.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), com), DecoratedInterval(Interval(-2.0, 0.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), dac), DecoratedInterval(Interval(-2.0, -0.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), dac), DecoratedInterval(Interval(-2.0, -0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), def), DecoratedInterval(Interval(-2.0, 1.0), trv)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), def), DecoratedInterval(Interval(-2.0, 1.0), trv))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), trv), DecoratedInterval(Interval(0.0, 1.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), trv), DecoratedInterval(Interval(0.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), com), DecoratedInterval(Interval(-0.0, 1.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), com), DecoratedInterval(Interval(-0.0, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0.0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, -0.0), com), DecoratedInterval(Interval(0.1, 1.0), com)) == DecoratedInterval(Interval(-0x1.8555a2787982p+0, 0.0), com)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, -0.0), com), DecoratedInterval(Interval(0.1, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.8555a2787982p+0, 0.0), com))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), def), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), def), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), dac), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), dac), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), def), DecoratedInterval(Interval(0.0, 0.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), def), DecoratedInterval(Interval(0.0, 0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), com), DecoratedInterval(Interval(-0.0, 0.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), com), DecoratedInterval(Interval(-0.0, 0.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), trv), DecoratedInterval(Interval(0.0, -0.0), trv)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), trv), DecoratedInterval(Interval(0.0, -0.0), trv))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), com), DecoratedInterval(Interval(-0.0, -0.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), com), DecoratedInterval(Interval(-0.0, -0.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), dac), DecoratedInterval(Interval(-2.0, -0.1), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), def)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), dac), DecoratedInterval(Interval(-2.0, -0.1), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), def))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), def), DecoratedInterval(Interval(-2.0, 0.0), def)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), def), DecoratedInterval(Interval(-2.0, 0.0), def))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), trv), DecoratedInterval(Interval(-2.0, -0.0), trv)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), trv), DecoratedInterval(Interval(-2.0, -0.0), trv))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), dac), DecoratedInterval(Interval(-2.0, 1.0), com)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), dac), DecoratedInterval(Interval(-2.0, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+1, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), com), DecoratedInterval(Interval(0.0, 1.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), com), DecoratedInterval(Interval(0.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), trv), DecoratedInterval(Interval(-0.0, 1.0), dac)) == DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), trv), DecoratedInterval(Interval(-0.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(-0x1.921fb54442d19p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-2.0, 1.0), com), DecoratedInterval(Interval(0.1, 1.0), com)) == DecoratedInterval(Interval(-0x1.8555a2787982p+0, 0x1.789bd2c160054p+0), com)
    @test decoration(atan2(DecoratedInterval(Interval(-2.0, 1.0), com), DecoratedInterval(Interval(0.1, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.8555a2787982p+0, 0x1.789bd2c160054p+0), com))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), com), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), com), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), dac), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), dac), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), def), DecoratedInterval(Interval(0.0, 0.0), def)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), def), DecoratedInterval(Interval(0.0, 0.0), def))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), trv), DecoratedInterval(Interval(-0.0, 0.0), trv)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), trv), DecoratedInterval(Interval(-0.0, 0.0), trv))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), dac), DecoratedInterval(Interval(0.0, -0.0), dac)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), dac), DecoratedInterval(Interval(0.0, -0.0), dac))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), com), DecoratedInterval(Interval(-0.0, -0.0), def)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), com), DecoratedInterval(Interval(-0.0, -0.0), def))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), com), DecoratedInterval(Interval(-2.0, -0.1), com)) == DecoratedInterval(Interval(0x1.aba397c7259ddp+0, 0x1.921fb54442d19p+1), dac)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), com), DecoratedInterval(Interval(-2.0, -0.1), com))) == decoration(DecoratedInterval(Interval(0x1.aba397c7259ddp+0, 0x1.921fb54442d19p+1), dac))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), def), DecoratedInterval(Interval(-2.0, 0.0), com)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), def), DecoratedInterval(Interval(-2.0, 0.0), com))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), def), DecoratedInterval(Interval(-2.0, -0.0), def)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), def), DecoratedInterval(Interval(-2.0, -0.0), def))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), dac), DecoratedInterval(Interval(-2.0, 1.0), dac)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), dac), DecoratedInterval(Interval(-2.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), dac), DecoratedInterval(Interval(0.0, 1.0), dac)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), dac), DecoratedInterval(Interval(0.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), trv), DecoratedInterval(Interval(-0.0, 1.0), com)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), trv), DecoratedInterval(Interval(-0.0, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(-0.0, 1.0), trv), DecoratedInterval(Interval(0.1, 1.0), com)) == DecoratedInterval(Interval(0.0, 0x1.789bd2c160054p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(-0.0, 1.0), trv), DecoratedInterval(Interval(0.1, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0x1.789bd2c160054p+0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), def), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), def), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(0.0, 0.0), def)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(0.0, 0.0), def))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), trv), DecoratedInterval(Interval(-0.0, 0.0), trv)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), trv), DecoratedInterval(Interval(-0.0, 0.0), trv))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), trv), DecoratedInterval(Interval(0.0, -0.0), dac)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), trv), DecoratedInterval(Interval(0.0, -0.0), dac))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), def), DecoratedInterval(Interval(-0.0, -0.0), com)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), def), DecoratedInterval(Interval(-0.0, -0.0), com))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(-2.0, -0.1), dac)) == DecoratedInterval(Interval(0x1.aba397c7259ddp+0, 0x1.921fb54442d19p+1), dac)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(-2.0, -0.1), dac))) == decoration(DecoratedInterval(Interval(0x1.aba397c7259ddp+0, 0x1.921fb54442d19p+1), dac))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), def), DecoratedInterval(Interval(-2.0, 0.0), trv)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), def), DecoratedInterval(Interval(-2.0, 0.0), trv))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(-2.0, -0.0), dac)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(-2.0, -0.0), dac))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(-2.0, 1.0), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(-2.0, 1.0), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(0.0, 1.0), trv)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(0.0, 1.0), trv))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(-0.0, 1.0), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), dac), DecoratedInterval(Interval(-0.0, 1.0), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(0.0, 1.0), com), DecoratedInterval(Interval(0.1, 1.0), com)) == DecoratedInterval(Interval(0.0, 0x1.789bd2c160054p+0), com)
    @test decoration(atan2(DecoratedInterval(Interval(0.0, 1.0), com), DecoratedInterval(Interval(0.1, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0x1.789bd2c160054p+0), com))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), dac), DecoratedInterval(∅, trv)) == DecoratedInterval(∅, trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), dac), DecoratedInterval(∅, trv))) == decoration(DecoratedInterval(∅, trv))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), dac), DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), def)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), dac), DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(0.0, 0x1.921fb54442d19p+1), def))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), def), DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), def)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), def), DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), def))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), trv), DecoratedInterval(Interval(-0.0, 0.0), def)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), trv), DecoratedInterval(Interval(-0.0, 0.0), def))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), trv), DecoratedInterval(Interval(0.0, -0.0), def)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), trv), DecoratedInterval(Interval(0.0, -0.0), def))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), trv))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), dac), DecoratedInterval(Interval(-0.0, -0.0), def)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), def)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), dac), DecoratedInterval(Interval(-0.0, -0.0), def))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.921fb54442d19p+0), def))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), com), DecoratedInterval(Interval(-2.0, -0.1), trv)) == DecoratedInterval(Interval(0x1.aba397c7259ddp+0, 0x1.8bbaabde5e29cp+1), trv)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), com), DecoratedInterval(Interval(-2.0, -0.1), trv))) == decoration(DecoratedInterval(Interval(0x1.aba397c7259ddp+0, 0x1.8bbaabde5e29cp+1), trv))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), com), DecoratedInterval(Interval(-2.0, 0.0), dac)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.8bbaabde5e29cp+1), dac)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), com), DecoratedInterval(Interval(-2.0, 0.0), dac))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.8bbaabde5e29cp+1), dac))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), com), DecoratedInterval(Interval(-2.0, -0.0), dac)) == DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.8bbaabde5e29cp+1), dac)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), com), DecoratedInterval(Interval(-2.0, -0.0), dac))) == decoration(DecoratedInterval(Interval(0x1.921fb54442d18p+0, 0x1.8bbaabde5e29cp+1), dac))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), def), DecoratedInterval(Interval(-2.0, 1.0), dac)) == DecoratedInterval(Interval(0x1.983e282e2cc4cp-4, 0x1.8bbaabde5e29cp+1), def)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), def), DecoratedInterval(Interval(-2.0, 1.0), dac))) == decoration(DecoratedInterval(Interval(0x1.983e282e2cc4cp-4, 0x1.8bbaabde5e29cp+1), def))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), def), DecoratedInterval(Interval(0.0, 1.0), def)) == DecoratedInterval(Interval(0x1.983e282e2cc4cp-4, 0x1.921fb54442d19p+0), def)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), def), DecoratedInterval(Interval(0.0, 1.0), def))) == decoration(DecoratedInterval(Interval(0x1.983e282e2cc4cp-4, 0x1.921fb54442d19p+0), def))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), dac), DecoratedInterval(Interval(-0.0, 1.0), def)) == DecoratedInterval(Interval(0x1.983e282e2cc4cp-4, 0x1.921fb54442d19p+0), def)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), dac), DecoratedInterval(Interval(-0.0, 1.0), def))) == decoration(DecoratedInterval(Interval(0x1.983e282e2cc4cp-4, 0x1.921fb54442d19p+0), def))
    @test atan2(DecoratedInterval(Interval(0.1, 1.0), dac), DecoratedInterval(Interval(0.1, 1.0), def)) == DecoratedInterval(Interval(0x1.983e282e2cc4cp-4, 0x1.789bd2c160054p+0), def)
    @test decoration(atan2(DecoratedInterval(Interval(0.1, 1.0), dac), DecoratedInterval(Interval(0.1, 1.0), def))) == decoration(DecoratedInterval(Interval(0x1.983e282e2cc4cp-4, 0x1.789bd2c160054p+0), def))
end

@testset "minimal_sinh_test" begin
    @test sinh(∅) == ∅
    @test sinh(Interval(0.0, Inf)) == Interval(0.0, Inf)
    @test sinh(Interval(-0.0, Inf)) == Interval(0.0, Inf)
    @test sinh(Interval(-Inf, 0.0)) == Interval(-Inf, 0.0)
    @test sinh(Interval(-Inf, -0.0)) == Interval(-Inf, 0.0)
    @test sinh(entireinterval(Float64)) == entireinterval(Float64)
    @test sinh(Interval(0.0, 0.0)) == Interval(0.0, 0.0)
    @test sinh(Interval(-0.0, -0.0)) == Interval(0.0, 0.0)
    @test sinh(Interval(1.0, 0x1.2c903022dd7aap+8)) == Interval(0x1.2cd9fc44eb982p+0, 0x1.89bca168970c6p+432)
    @test sinh(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9)) == Interval(-Inf, -0x1.53045b4f849dep+815)
    @test sinh(Interval(-0x1.199999999999ap+0, 0x1.2666666666666p+1)) == Interval(-0x1.55ecfe1b2b215p+0, 0x1.3bf72ea61af1bp+2)
end

@testset "minimal_sinh_dec_test" begin
    @test sinh(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(entireinterval(Float64), def)
    @test decoration(sinh(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(entireinterval(Float64), def))
    @test sinh(DecoratedInterval(Interval(0.0, Inf), dac)) == DecoratedInterval(Interval(0.0, Inf), dac)
    @test decoration(sinh(DecoratedInterval(Interval(0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, Inf), dac))
    @test sinh(DecoratedInterval(Interval(-Inf, 0.0), def)) == DecoratedInterval(Interval(-Inf, 0.0), def)
    @test decoration(sinh(DecoratedInterval(Interval(-Inf, 0.0), def))) == decoration(DecoratedInterval(Interval(-Inf, 0.0), def))
    @test sinh(DecoratedInterval(Interval(1.0, 0x1.2c903022dd7aap+8), com)) == DecoratedInterval(Interval(0x1.2cd9fc44eb982p+0, 0x1.89bca168970c6p+432), com)
    @test decoration(sinh(DecoratedInterval(Interval(1.0, 0x1.2c903022dd7aap+8), com))) == decoration(DecoratedInterval(Interval(0x1.2cd9fc44eb982p+0, 0x1.89bca168970c6p+432), com))
    @test sinh(DecoratedInterval(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9), com)) == DecoratedInterval(Interval(-Inf, -0x1.53045b4f849dep+815), dac)
    @test decoration(sinh(DecoratedInterval(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9), com))) == decoration(DecoratedInterval(Interval(-Inf, -0x1.53045b4f849dep+815), dac))
end

@testset "minimal_cosh_test" begin
    @test cosh(∅) == ∅
    @test cosh(Interval(0.0, Inf)) == Interval(1.0, Inf)
    @test cosh(Interval(-0.0, Inf)) == Interval(1.0, Inf)
    @test cosh(Interval(-Inf, 0.0)) == Interval(1.0, Inf)
    @test cosh(Interval(-Inf, -0.0)) == Interval(1.0, Inf)
    @test cosh(entireinterval(Float64)) == Interval(1.0, Inf)
    @test cosh(Interval(0.0, 0.0)) == Interval(1.0, 1.0)
    @test cosh(Interval(-0.0, -0.0)) == Interval(1.0, 1.0)
    @test cosh(Interval(1.0, 0x1.2c903022dd7aap+8)) == Interval(0x1.8b07551d9f55p+0, 0x1.89bca168970c6p+432)
    @test cosh(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9)) == Interval(0x1.53045b4f849dep+815, Inf)
    @test cosh(Interval(-0x1.199999999999ap+0, 0x1.2666666666666p+1)) == Interval(1.0, 0x1.4261d2b7d6181p+2)
end

@testset "minimal_cosh_dec_test" begin
    @test cosh(DecoratedInterval(Interval(0.0, Inf), dac)) == DecoratedInterval(Interval(1.0, Inf), dac)
    @test decoration(cosh(DecoratedInterval(Interval(0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(1.0, Inf), dac))
    @test cosh(DecoratedInterval(Interval(-Inf, 0.0), def)) == DecoratedInterval(Interval(1.0, Inf), def)
    @test decoration(cosh(DecoratedInterval(Interval(-Inf, 0.0), def))) == decoration(DecoratedInterval(Interval(1.0, Inf), def))
    @test cosh(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(1.0, Inf), def)
    @test decoration(cosh(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(1.0, Inf), def))
    @test cosh(DecoratedInterval(Interval(1.0, 0x1.2c903022dd7aap+8), def)) == DecoratedInterval(Interval(0x1.8b07551d9f55p+0, 0x1.89bca168970c6p+432), def)
    @test decoration(cosh(DecoratedInterval(Interval(1.0, 0x1.2c903022dd7aap+8), def))) == decoration(DecoratedInterval(Interval(0x1.8b07551d9f55p+0, 0x1.89bca168970c6p+432), def))
    @test cosh(DecoratedInterval(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9), com)) == DecoratedInterval(Interval(0x1.53045b4f849dep+815, Inf), dac)
    @test decoration(cosh(DecoratedInterval(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9), com))) == decoration(DecoratedInterval(Interval(0x1.53045b4f849dep+815, Inf), dac))
end

@testset "minimal_tanh_test" begin
    @test tanh(∅) == ∅
    @test tanh(Interval(0.0, Inf)) == Interval(0.0, 1.0)
    @test tanh(Interval(-0.0, Inf)) == Interval(0.0, 1.0)
    @test tanh(Interval(-Inf, 0.0)) == Interval(-1.0, 0.0)
    @test tanh(Interval(-Inf, -0.0)) == Interval(-1.0, 0.0)
    @test tanh(entireinterval(Float64)) == Interval(-1.0, 1.0)
    @test tanh(Interval(0.0, 0.0)) == Interval(0.0, 0.0)
    @test tanh(Interval(-0.0, -0.0)) == Interval(0.0, 0.0)
    @test tanh(Interval(1.0, 0x1.2c903022dd7aap+8)) == Interval(0x1.85efab514f394p-1, 0x1p+0)
    @test tanh(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9)) == Interval(-0x1p+0, -0x1.fffffffffffffp-1)
    @test tanh(Interval(-0x1.199999999999ap+0, 0x1.2666666666666p+1)) == Interval(-0x1.99db01fde2406p-1, 0x1.f5cf31e1c8103p-1)
end

@testset "minimal_tanh_dec_test" begin
    @test tanh(DecoratedInterval(Interval(0.0, Inf), dac)) == DecoratedInterval(Interval(0.0, 1.0), dac)
    @test decoration(tanh(DecoratedInterval(Interval(0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, 1.0), dac))
    @test tanh(DecoratedInterval(Interval(-Inf, 0.0), def)) == DecoratedInterval(Interval(-1.0, 0.0), def)
    @test decoration(tanh(DecoratedInterval(Interval(-Inf, 0.0), def))) == decoration(DecoratedInterval(Interval(-1.0, 0.0), def))
    @test tanh(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(-1.0, 1.0), def)
    @test decoration(tanh(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(-1.0, 1.0), def))
    @test tanh(DecoratedInterval(Interval(1.0, 0x1.2c903022dd7aap+8), com)) == DecoratedInterval(Interval(0x1.85efab514f394p-1, 0x1p+0), com)
    @test decoration(tanh(DecoratedInterval(Interval(1.0, 0x1.2c903022dd7aap+8), com))) == decoration(DecoratedInterval(Interval(0x1.85efab514f394p-1, 0x1p+0), com))
    @test tanh(DecoratedInterval(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9), trv)) == DecoratedInterval(Interval(-0x1p+0, -0x1.fffffffffffffp-1), trv)
    @test decoration(tanh(DecoratedInterval(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9), trv))) == decoration(DecoratedInterval(Interval(-0x1p+0, -0x1.fffffffffffffp-1), trv))
end

@testset "minimal_asinh_test" begin
    @test asinh(∅) == ∅
    @test asinh(Interval(0.0, Inf)) == Interval(0.0, Inf)
    @test asinh(Interval(-0.0, Inf)) == Interval(0.0, Inf)
    @test asinh(Interval(-Inf, 0.0)) == Interval(-Inf, 0.0)
    @test asinh(Interval(-Inf, -0.0)) == Interval(-Inf, 0.0)
    @test asinh(entireinterval(Float64)) == entireinterval(Float64)
    @test asinh(Interval(0.0, 0.0)) == Interval(0.0, 0.0)
    @test asinh(Interval(-0.0, -0.0)) == Interval(0.0, 0.0)
    @test asinh(Interval(1.0, 0x1.2c903022dd7aap+8)) == Interval(0x1.c34366179d426p-1, 0x1.9986127438a87p+2)
    @test asinh(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9)) == Interval(-0x1.bb86380a6cc45p+4, -0x1.c204d8eb20827p+2)
    @test asinh(Interval(-0x1.199999999999ap+0, 0x1.2666666666666p+1)) == Interval(-0x1.e693df6edf1e7p-1, 0x1.91fdc64de0e51p+0)
end

@testset "minimal_asinh_dec_test" begin
    @test asinh(DecoratedInterval(Interval(0.0, Inf), dac)) == DecoratedInterval(Interval(0.0, Inf), dac)
    @test decoration(asinh(DecoratedInterval(Interval(0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, Inf), dac))
    @test asinh(DecoratedInterval(Interval(-Inf, 0.0), trv)) == DecoratedInterval(Interval(-Inf, 0.0), trv)
    @test decoration(asinh(DecoratedInterval(Interval(-Inf, 0.0), trv))) == decoration(DecoratedInterval(Interval(-Inf, 0.0), trv))
    @test asinh(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(entireinterval(Float64), def)
    @test decoration(asinh(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(entireinterval(Float64), def))
    @test asinh(DecoratedInterval(Interval(1.0, 0x1.2c903022dd7aap+8), com)) == DecoratedInterval(Interval(0x1.c34366179d426p-1, 0x1.9986127438a87p+2), com)
    @test decoration(asinh(DecoratedInterval(Interval(1.0, 0x1.2c903022dd7aap+8), com))) == decoration(DecoratedInterval(Interval(0x1.c34366179d426p-1, 0x1.9986127438a87p+2), com))
    @test asinh(DecoratedInterval(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9), def)) == DecoratedInterval(Interval(-0x1.bb86380a6cc45p+4, -0x1.c204d8eb20827p+2), def)
    @test decoration(asinh(DecoratedInterval(Interval(-0x1.fd219490eaac1p+38, -0x1.1af1c9d74f06dp+9), def))) == decoration(DecoratedInterval(Interval(-0x1.bb86380a6cc45p+4, -0x1.c204d8eb20827p+2), def))
end

@testset "minimal_acosh_test" begin
    @test acosh(∅) == ∅
    @test acosh(Interval(0.0, Inf)) == Interval(0.0, Inf)
    @test acosh(Interval(-0.0, Inf)) == Interval(0.0, Inf)
    @test acosh(Interval(1.0, Inf)) == Interval(0.0, Inf)
    @test acosh(Interval(-Inf, 1.0)) == Interval(0.0, 0.0)
    @test acosh(Interval(-Inf, 0x1.fffffffffffffp-1)) == ∅
    @test acosh(entireinterval(Float64)) == Interval(0.0, Inf)
    @test acosh(Interval(1.0, 1.0)) == Interval(0.0, 0.0)
    @test acosh(Interval(1.0, 0x1.2c903022dd7aap+8)) == Interval(0.0, 0x1.9985fb3d532afp+2)
    @test acosh(Interval(0x1.199999999999ap+0, 0x1.2666666666666p+1)) == Interval(0x1.c636c1a882f2cp-2, 0x1.799c88e79140dp+0)
    @test acosh(Interval(0x1.14d4e82b2b26fp+15, 0x1.72dbe91c837b5p+29)) == Interval(0x1.656510b4baec3p+3, 0x1.52a415ee8455ap+4)
end

@testset "minimal_acosh_dec_test" begin
    @test acosh(DecoratedInterval(Interval(0.0, Inf), dac)) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(acosh(DecoratedInterval(Interval(0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test acosh(DecoratedInterval(Interval(1.0, Inf), dac)) == DecoratedInterval(Interval(0.0, Inf), dac)
    @test decoration(acosh(DecoratedInterval(Interval(1.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, Inf), dac))
    @test acosh(DecoratedInterval(entireinterval(Float64), def)) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(acosh(DecoratedInterval(entireinterval(Float64), def))) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test acosh(DecoratedInterval(Interval(1.0, 1.0), com)) == DecoratedInterval(Interval(0.0, 0.0), com)
    @test decoration(acosh(DecoratedInterval(Interval(1.0, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), com))
    @test acosh(DecoratedInterval(Interval(0.9, 1.0), com)) == DecoratedInterval(Interval(0.0, 0.0), trv)
    @test decoration(acosh(DecoratedInterval(Interval(0.9, 1.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), trv))
    @test acosh(DecoratedInterval(Interval(1.0, 0x1.2c903022dd7aap+8), dac)) == DecoratedInterval(Interval(0.0, 0x1.9985fb3d532afp+2), dac)
    @test decoration(acosh(DecoratedInterval(Interval(1.0, 0x1.2c903022dd7aap+8), dac))) == decoration(DecoratedInterval(Interval(0.0, 0x1.9985fb3d532afp+2), dac))
    @test acosh(DecoratedInterval(Interval(0.9, 0x1.2c903022dd7aap+8), com)) == DecoratedInterval(Interval(0.0, 0x1.9985fb3d532afp+2), trv)
    @test decoration(acosh(DecoratedInterval(Interval(0.9, 0x1.2c903022dd7aap+8), com))) == decoration(DecoratedInterval(Interval(0.0, 0x1.9985fb3d532afp+2), trv))
    @test acosh(DecoratedInterval(Interval(0x1.14d4e82b2b26fp+15, 0x1.72dbe91c837b5p+29), def)) == DecoratedInterval(Interval(0x1.656510b4baec3p+3, 0x1.52a415ee8455ap+4), def)
    @test decoration(acosh(DecoratedInterval(Interval(0x1.14d4e82b2b26fp+15, 0x1.72dbe91c837b5p+29), def))) == decoration(DecoratedInterval(Interval(0x1.656510b4baec3p+3, 0x1.52a415ee8455ap+4), def))
end

@testset "minimal_atanh_test" begin
    @test atanh(∅) == ∅
    @test atanh(Interval(0.0, Inf)) == Interval(0.0, Inf)
    @test atanh(Interval(-0.0, Inf)) == Interval(0.0, Inf)
    @test atanh(Interval(1.0, Inf)) == ∅
    @test atanh(Interval(-Inf, 0.0)) == Interval(-Inf, 0.0)
    @test atanh(Interval(-Inf, -0.0)) == Interval(-Inf, 0.0)
    @test atanh(Interval(-Inf, -1.0)) == ∅
    @test atanh(Interval(-1.0, 1.0)) == entireinterval(Float64)
    @test atanh(Interval(0.0, 0.0)) == Interval(0.0, 0.0)
    @test atanh(Interval(-0.0, -0.0)) == Interval(0.0, 0.0)
    @test atanh(Interval(-1.0, -1.0)) == ∅
    @test atanh(Interval(1.0, 1.0)) == ∅
    @test atanh(entireinterval(Float64)) == entireinterval(Float64)
    @test atanh(Interval(0x1.4c0420f6f08ccp-2, 0x1.fffffffffffffp-1)) == Interval(0x1.5871dd2df9102p-2, 0x1.2b708872320e2p+4)
    @test atanh(Interval(-0x1.ffb88e9eb6307p-1, 0x1.999999999999ap-4)) == Interval(-0x1.06a3a97d7979cp+2, 0x1.9af93cd234413p-4)
end

@testset "minimal_atanh_dec_test" begin
    @test atanh(DecoratedInterval(Interval(0.0, Inf), dac)) == DecoratedInterval(Interval(0.0, Inf), trv)
    @test decoration(atanh(DecoratedInterval(Interval(0.0, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, Inf), trv))
    @test atanh(DecoratedInterval(Interval(-Inf, 0.0), def)) == DecoratedInterval(Interval(-Inf, 0.0), trv)
    @test decoration(atanh(DecoratedInterval(Interval(-Inf, 0.0), def))) == decoration(DecoratedInterval(Interval(-Inf, 0.0), trv))
    @test atanh(DecoratedInterval(Interval(-1.0, 1.0), com)) == DecoratedInterval(entireinterval(Float64), trv)
    @test decoration(atanh(DecoratedInterval(Interval(-1.0, 1.0), com))) == decoration(DecoratedInterval(entireinterval(Float64), trv))
    @test atanh(DecoratedInterval(Interval(0.0, 0.0), com)) == DecoratedInterval(Interval(0.0, 0.0), com)
    @test decoration(atanh(DecoratedInterval(Interval(0.0, 0.0), com))) == decoration(DecoratedInterval(Interval(0.0, 0.0), com))
    @test atanh(DecoratedInterval(Interval(1.0, 1.0), def)) == DecoratedInterval(∅, trv)
    @test decoration(atanh(DecoratedInterval(Interval(1.0, 1.0), def))) == decoration(DecoratedInterval(∅, trv))
    @test atanh(DecoratedInterval(Interval(0x1.4c0420f6f08ccp-2, 0x1.fffffffffffffp-1), com)) == DecoratedInterval(Interval(0x1.5871dd2df9102p-2, 0x1.2b708872320e2p+4), com)
    @test decoration(atanh(DecoratedInterval(Interval(0x1.4c0420f6f08ccp-2, 0x1.fffffffffffffp-1), com))) == decoration(DecoratedInterval(Interval(0x1.5871dd2df9102p-2, 0x1.2b708872320e2p+4), com))
    @test atanh(DecoratedInterval(Interval(-1.0, 0x1.fffffffffffffp-1), com)) == DecoratedInterval(Interval(-Inf, 0x1.2b708872320e2p+4), trv)
    @test decoration(atanh(DecoratedInterval(Interval(-1.0, 0x1.fffffffffffffp-1), com))) == decoration(DecoratedInterval(Interval(-Inf, 0x1.2b708872320e2p+4), trv))
    @test atanh(DecoratedInterval(Interval(-0x1.ffb88e9eb6307p-1, 0x1.999999999999ap-4), def)) == DecoratedInterval(Interval(-0x1.06a3a97d7979cp+2, 0x1.9af93cd234413p-4), def)
    @test decoration(atanh(DecoratedInterval(Interval(-0x1.ffb88e9eb6307p-1, 0x1.999999999999ap-4), def))) == decoration(DecoratedInterval(Interval(-0x1.06a3a97d7979cp+2, 0x1.9af93cd234413p-4), def))
    @test atanh(DecoratedInterval(Interval(-0x1.ffb88e9eb6307p-1, 1.0), com)) == DecoratedInterval(Interval(-0x1.06a3a97d7979cp+2, Inf), trv)
    @test decoration(atanh(DecoratedInterval(Interval(-0x1.ffb88e9eb6307p-1, 1.0), com))) == decoration(DecoratedInterval(Interval(-0x1.06a3a97d7979cp+2, Inf), trv))
end

@testset "minimal_sign_test" begin
    @test sign(∅) == ∅
    @test sign(Interval(1.0, 2.0)) == Interval(1.0, 1.0)
    @test sign(Interval(-1.0, 2.0)) == Interval(-1.0, 1.0)
    @test sign(Interval(-1.0, 0.0)) == Interval(-1.0, 0.0)
    @test sign(Interval(0.0, 2.0)) == Interval(0.0, 1.0)
    @test sign(Interval(-0.0, 2.0)) == Interval(0.0, 1.0)
    @test sign(Interval(-5.0, -2.0)) == Interval(-1.0, -1.0)
    @test sign(Interval(0.0, 0.0)) == Interval(0.0, 0.0)
    @test sign(Interval(-0.0, -0.0)) == Interval(0.0, 0.0)
    @test sign(Interval(-0.0, 0.0)) == Interval(0.0, 0.0)
    @test sign(entireinterval(Float64)) == Interval(-1.0, 1.0)
end

@testset "minimal_sign_dec_test" begin
    @test sign(DecoratedInterval(Interval(1.0, 2.0), com)) == DecoratedInterval(Interval(1.0, 1.0), com)
    @test decoration(sign(DecoratedInterval(Interval(1.0, 2.0), com))) == decoration(DecoratedInterval(Interval(1.0, 1.0), com))
    @test sign(DecoratedInterval(Interval(-1.0, 2.0), com)) == DecoratedInterval(Interval(-1.0, 1.0), def)
    @test decoration(sign(DecoratedInterval(Interval(-1.0, 2.0), com))) == decoration(DecoratedInterval(Interval(-1.0, 1.0), def))
    @test sign(DecoratedInterval(Interval(-1.0, 0.0), com)) == DecoratedInterval(Interval(-1.0, 0.0), def)
    @test decoration(sign(DecoratedInterval(Interval(-1.0, 0.0), com))) == decoration(DecoratedInterval(Interval(-1.0, 0.0), def))
    @test sign(DecoratedInterval(Interval(0.0, 2.0), com)) == DecoratedInterval(Interval(0.0, 1.0), def)
    @test decoration(sign(DecoratedInterval(Interval(0.0, 2.0), com))) == decoration(DecoratedInterval(Interval(0.0, 1.0), def))
    @test sign(DecoratedInterval(Interval(-0.0, 2.0), def)) == DecoratedInterval(Interval(0.0, 1.0), def)
    @test decoration(sign(DecoratedInterval(Interval(-0.0, 2.0), def))) == decoration(DecoratedInterval(Interval(0.0, 1.0), def))
    @test sign(DecoratedInterval(Interval(-5.0, -2.0), trv)) == DecoratedInterval(Interval(-1.0, -1.0), trv)
    @test decoration(sign(DecoratedInterval(Interval(-5.0, -2.0), trv))) == decoration(DecoratedInterval(Interval(-1.0, -1.0), trv))
    @test sign(DecoratedInterval(Interval(0.0, 0.0), dac)) == DecoratedInterval(Interval(0.0, 0.0), dac)
    @test decoration(sign(DecoratedInterval(Interval(0.0, 0.0), dac))) == decoration(DecoratedInterval(Interval(0.0, 0.0), dac))
end

@testset "minimal_ceil_test" begin
    @test ceil(∅) == ∅
    @test round(∅, RoundUp) == ∅
    @test ceil(entireinterval(Float64)) == entireinterval(Float64)
    @test round(entireinterval(Float64), RoundUp) == entireinterval(Float64)
    @test ceil(Interval(1.1, 2.0)) == Interval(2.0, 2.0)
    @test round(Interval(1.1, 2.0), RoundUp) == Interval(2.0, 2.0)
    @test ceil(Interval(-1.1, 2.0)) == Interval(-1.0, 2.0)
    @test round(Interval(-1.1, 2.0), RoundUp) == Interval(-1.0, 2.0)
    @test ceil(Interval(-1.1, 0.0)) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, 0.0), RoundUp) == Interval(-1.0, 0.0)
    @test ceil(Interval(-1.1, -0.0)) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.0), RoundUp) == Interval(-1.0, 0.0)
    @test ceil(Interval(-1.1, -0.4)) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.4), RoundUp) == Interval(-1.0, 0.0)
    @test ceil(Interval(-1.9, 2.2)) == Interval(-1.0, 3.0)
    @test round(Interval(-1.9, 2.2), RoundUp) == Interval(-1.0, 3.0)
    @test ceil(Interval(-1.0, 2.2)) == Interval(-1.0, 3.0)
    @test round(Interval(-1.0, 2.2), RoundUp) == Interval(-1.0, 3.0)
    @test ceil(Interval(0.0, 2.2)) == Interval(0.0, 3.0)
    @test round(Interval(0.0, 2.2), RoundUp) == Interval(0.0, 3.0)
    @test ceil(Interval(-0.0, 2.2)) == Interval(0.0, 3.0)
    @test round(Interval(-0.0, 2.2), RoundUp) == Interval(0.0, 3.0)
    @test ceil(Interval(-1.5, Inf)) == Interval(-1.0, Inf)
    @test round(Interval(-1.5, Inf), RoundUp) == Interval(-1.0, Inf)
    @test ceil(Interval(0x1.fffffffffffffp1023, Inf)) == Interval(0x1.fffffffffffffp1023, Inf)
    @test round(Interval(0x1.fffffffffffffp1023, Inf), RoundUp) == Interval(0x1.fffffffffffffp1023, Inf)
    @test ceil(Interval(-Inf, 2.2)) == Interval(-Inf, 3.0)
    @test round(Interval(-Inf, 2.2), RoundUp) == Interval(-Inf, 3.0)
    @test ceil(Interval(-Inf, -0x1.fffffffffffffp1023)) == Interval(-Inf, -0x1.fffffffffffffp1023)
    @test round(Interval(-Inf, -0x1.fffffffffffffp1023), RoundUp) == Interval(-Inf, -0x1.fffffffffffffp1023)
end

@testset "minimal_ceil_dec_test" begin
    @test ceil(DecoratedInterval(Interval(1.1, 2.0), com)) == DecoratedInterval(Interval(2.0, 2.0), dac)
    @test decoration(ceil(DecoratedInterval(Interval(1.1, 2.0), com))) == decoration(DecoratedInterval(Interval(2.0, 2.0), dac))
    @test round(DecoratedInterval(Interval(1.1, 2.0), com), RoundUp) == DecoratedInterval(Interval(2.0, 2.0), dac)
    @test decoration(round(DecoratedInterval(Interval(1.1, 2.0), com), RoundUp)) == decoration(DecoratedInterval(Interval(2.0, 2.0), dac))
    @test ceil(DecoratedInterval(Interval(-1.1, 2.0), com)) == DecoratedInterval(Interval(-1.0, 2.0), def)
    @test decoration(ceil(DecoratedInterval(Interval(-1.1, 2.0), com))) == decoration(DecoratedInterval(Interval(-1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(-1.1, 2.0), com), RoundUp) == DecoratedInterval(Interval(-1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.1, 2.0), com), RoundUp)) == decoration(DecoratedInterval(Interval(-1.0, 2.0), def))
    @test ceil(DecoratedInterval(Interval(-1.1, 0.0), dac)) == DecoratedInterval(Interval(-1.0, 0.0), def)
    @test decoration(ceil(DecoratedInterval(Interval(-1.1, 0.0), dac))) == decoration(DecoratedInterval(Interval(-1.0, 0.0), def))
    @test round(DecoratedInterval(Interval(-1.1, 0.0), dac), RoundUp) == DecoratedInterval(Interval(-1.0, 0.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.1, 0.0), dac), RoundUp)) == decoration(DecoratedInterval(Interval(-1.0, 0.0), def))
    @test ceil(DecoratedInterval(Interval(-1.1, -0.0), trv)) == DecoratedInterval(Interval(-1.0, 0.0), trv)
    @test decoration(ceil(DecoratedInterval(Interval(-1.1, -0.0), trv))) == decoration(DecoratedInterval(Interval(-1.0, 0.0), trv))
    @test round(DecoratedInterval(Interval(-1.1, -0.0), trv), RoundUp) == DecoratedInterval(Interval(-1.0, 0.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-1.1, -0.0), trv), RoundUp)) == decoration(DecoratedInterval(Interval(-1.0, 0.0), trv))
    @test ceil(DecoratedInterval(Interval(-1.1, -0.4), dac)) == DecoratedInterval(Interval(-1.0, 0.0), def)
    @test decoration(ceil(DecoratedInterval(Interval(-1.1, -0.4), dac))) == decoration(DecoratedInterval(Interval(-1.0, 0.0), def))
    @test round(DecoratedInterval(Interval(-1.1, -0.4), dac), RoundUp) == DecoratedInterval(Interval(-1.0, 0.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.1, -0.4), dac), RoundUp)) == decoration(DecoratedInterval(Interval(-1.0, 0.0), def))
    @test ceil(DecoratedInterval(Interval(-1.9, 2.2), com)) == DecoratedInterval(Interval(-1.0, 3.0), def)
    @test decoration(ceil(DecoratedInterval(Interval(-1.9, 2.2), com))) == decoration(DecoratedInterval(Interval(-1.0, 3.0), def))
    @test round(DecoratedInterval(Interval(-1.9, 2.2), com), RoundUp) == DecoratedInterval(Interval(-1.0, 3.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.9, 2.2), com), RoundUp)) == decoration(DecoratedInterval(Interval(-1.0, 3.0), def))
    @test ceil(DecoratedInterval(Interval(-1.0, 2.2), dac)) == DecoratedInterval(Interval(-1.0, 3.0), def)
    @test decoration(ceil(DecoratedInterval(Interval(-1.0, 2.2), dac))) == decoration(DecoratedInterval(Interval(-1.0, 3.0), def))
    @test round(DecoratedInterval(Interval(-1.0, 2.2), dac), RoundUp) == DecoratedInterval(Interval(-1.0, 3.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.0, 2.2), dac), RoundUp)) == decoration(DecoratedInterval(Interval(-1.0, 3.0), def))
    @test ceil(DecoratedInterval(Interval(0.0, 2.2), trv)) == DecoratedInterval(Interval(0.0, 3.0), trv)
    @test decoration(ceil(DecoratedInterval(Interval(0.0, 2.2), trv))) == decoration(DecoratedInterval(Interval(0.0, 3.0), trv))
    @test round(DecoratedInterval(Interval(0.0, 2.2), trv), RoundUp) == DecoratedInterval(Interval(0.0, 3.0), trv)
    @test decoration(round(DecoratedInterval(Interval(0.0, 2.2), trv), RoundUp)) == decoration(DecoratedInterval(Interval(0.0, 3.0), trv))
    @test ceil(DecoratedInterval(Interval(-0.0, 2.2), def)) == DecoratedInterval(Interval(0.0, 3.0), def)
    @test decoration(ceil(DecoratedInterval(Interval(-0.0, 2.2), def))) == decoration(DecoratedInterval(Interval(0.0, 3.0), def))
    @test round(DecoratedInterval(Interval(-0.0, 2.2), def), RoundUp) == DecoratedInterval(Interval(0.0, 3.0), def)
    @test decoration(round(DecoratedInterval(Interval(-0.0, 2.2), def), RoundUp)) == decoration(DecoratedInterval(Interval(0.0, 3.0), def))
    @test ceil(DecoratedInterval(Interval(-1.5, Inf), trv)) == DecoratedInterval(Interval(-1.0, Inf), trv)
    @test decoration(ceil(DecoratedInterval(Interval(-1.5, Inf), trv))) == decoration(DecoratedInterval(Interval(-1.0, Inf), trv))
    @test round(DecoratedInterval(Interval(-1.5, Inf), trv), RoundUp) == DecoratedInterval(Interval(-1.0, Inf), trv)
    @test decoration(round(DecoratedInterval(Interval(-1.5, Inf), trv), RoundUp)) == decoration(DecoratedInterval(Interval(-1.0, Inf), trv))
    @test ceil(DecoratedInterval(Interval(0x1.fffffffffffffp1023, Inf), dac)) == DecoratedInterval(Interval(0x1.fffffffffffffp1023, Inf), def)
    @test decoration(ceil(DecoratedInterval(Interval(0x1.fffffffffffffp1023, Inf), dac))) == decoration(DecoratedInterval(Interval(0x1.fffffffffffffp1023, Inf), def))
    @test round(DecoratedInterval(Interval(0x1.fffffffffffffp1023, Inf), dac), RoundUp) == DecoratedInterval(Interval(0x1.fffffffffffffp1023, Inf), def)
    @test decoration(round(DecoratedInterval(Interval(0x1.fffffffffffffp1023, Inf), dac), RoundUp)) == decoration(DecoratedInterval(Interval(0x1.fffffffffffffp1023, Inf), def))
    @test ceil(DecoratedInterval(Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023), com)) == DecoratedInterval(Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023), dac)
    @test decoration(ceil(DecoratedInterval(Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023), com))) == decoration(DecoratedInterval(Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023), dac))
    @test round(DecoratedInterval(Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023), com), RoundUp) == DecoratedInterval(Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023), dac)
    @test decoration(round(DecoratedInterval(Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023), com), RoundUp)) == decoration(DecoratedInterval(Interval(0x1.fffffffffffffp1023, 0x1.fffffffffffffp1023), dac))
    @test ceil(DecoratedInterval(Interval(-Inf, 2.2), trv)) == DecoratedInterval(Interval(-Inf, 3.0), trv)
    @test decoration(ceil(DecoratedInterval(Interval(-Inf, 2.2), trv))) == decoration(DecoratedInterval(Interval(-Inf, 3.0), trv))
    @test round(DecoratedInterval(Interval(-Inf, 2.2), trv), RoundUp) == DecoratedInterval(Interval(-Inf, 3.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-Inf, 2.2), trv), RoundUp)) == decoration(DecoratedInterval(Interval(-Inf, 3.0), trv))
    @test ceil(DecoratedInterval(Interval(-Inf, -0x1.fffffffffffffp1023), dac)) == DecoratedInterval(Interval(-Inf, -0x1.fffffffffffffp1023), def)
    @test decoration(ceil(DecoratedInterval(Interval(-Inf, -0x1.fffffffffffffp1023), dac))) == decoration(DecoratedInterval(Interval(-Inf, -0x1.fffffffffffffp1023), def))
    @test round(DecoratedInterval(Interval(-Inf, -0x1.fffffffffffffp1023), dac), RoundUp) == DecoratedInterval(Interval(-Inf, -0x1.fffffffffffffp1023), def)
    @test decoration(round(DecoratedInterval(Interval(-Inf, -0x1.fffffffffffffp1023), dac), RoundUp)) == decoration(DecoratedInterval(Interval(-Inf, -0x1.fffffffffffffp1023), def))
end

@testset "minimal_floor_test" begin
    @test floor(∅) == ∅
    @test round(∅, RoundDown) == ∅
    @test floor(entireinterval(Float64)) == entireinterval(Float64)
    @test round(entireinterval(Float64), RoundDown) == entireinterval(Float64)
    @test floor(Interval(1.1, 2.0)) == Interval(1.0, 2.0)
    @test round(Interval(1.1, 2.0), RoundDown) == Interval(1.0, 2.0)
    @test floor(Interval(-1.1, 2.0)) == Interval(-2.0, 2.0)
    @test round(Interval(-1.1, 2.0), RoundDown) == Interval(-2.0, 2.0)
    @test floor(Interval(-1.1, 0.0)) == Interval(-2.0, 0.0)
    @test round(Interval(-1.1, 0.0), RoundDown) == Interval(-2.0, 0.0)
    @test floor(Interval(-1.1, -0.0)) == Interval(-2.0, 0.0)
    @test round(Interval(-1.1, -0.0), RoundDown) == Interval(-2.0, 0.0)
    @test floor(Interval(-1.1, -0.4)) == Interval(-2.0, -1.0)
    @test round(Interval(-1.1, -0.4), RoundDown) == Interval(-2.0, -1.0)
    @test floor(Interval(-1.9, 2.2)) == Interval(-2.0, 2.0)
    @test round(Interval(-1.9, 2.2), RoundDown) == Interval(-2.0, 2.0)
    @test floor(Interval(-1.0, 2.2)) == Interval(-1.0, 2.0)
    @test round(Interval(-1.0, 2.2), RoundDown) == Interval(-1.0, 2.0)
    @test floor(Interval(0.0, 2.2)) == Interval(0.0, 2.0)
    @test round(Interval(0.0, 2.2), RoundDown) == Interval(0.0, 2.0)
    @test floor(Interval(-0.0, 2.2)) == Interval(0.0, 2.0)
    @test round(Interval(-0.0, 2.2), RoundDown) == Interval(0.0, 2.0)
    @test floor(Interval(-1.5, Inf)) == Interval(-2.0, Inf)
    @test round(Interval(-1.5, Inf), RoundDown) == Interval(-2.0, Inf)
    @test floor(Interval(-Inf, 2.2)) == Interval(-Inf, 2.0)
    @test round(Interval(-Inf, 2.2), RoundDown) == Interval(-Inf, 2.0)
end

@testset "minimal_floor_dec_test" begin
    @test floor(DecoratedInterval(Interval(1.1, 2.0), com)) == DecoratedInterval(Interval(1.0, 2.0), def)
    @test decoration(floor(DecoratedInterval(Interval(1.1, 2.0), com))) == decoration(DecoratedInterval(Interval(1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(1.1, 2.0), com), RoundDown) == DecoratedInterval(Interval(1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(1.1, 2.0), com), RoundDown)) == decoration(DecoratedInterval(Interval(1.0, 2.0), def))
    @test floor(DecoratedInterval(Interval(-1.1, 2.0), def)) == DecoratedInterval(Interval(-2.0, 2.0), def)
    @test decoration(floor(DecoratedInterval(Interval(-1.1, 2.0), def))) == decoration(DecoratedInterval(Interval(-2.0, 2.0), def))
    @test round(DecoratedInterval(Interval(-1.1, 2.0), def), RoundDown) == DecoratedInterval(Interval(-2.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.1, 2.0), def), RoundDown)) == decoration(DecoratedInterval(Interval(-2.0, 2.0), def))
    @test floor(DecoratedInterval(Interval(-1.1, 0.0), dac)) == DecoratedInterval(Interval(-2.0, 0.0), def)
    @test decoration(floor(DecoratedInterval(Interval(-1.1, 0.0), dac))) == decoration(DecoratedInterval(Interval(-2.0, 0.0), def))
    @test round(DecoratedInterval(Interval(-1.1, 0.0), dac), RoundDown) == DecoratedInterval(Interval(-2.0, 0.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.1, 0.0), dac), RoundDown)) == decoration(DecoratedInterval(Interval(-2.0, 0.0), def))
    @test floor(DecoratedInterval(Interval(-1.2, -1.1), com)) == DecoratedInterval(Interval(-2.0, -2.0), com)
    @test decoration(floor(DecoratedInterval(Interval(-1.2, -1.1), com))) == decoration(DecoratedInterval(Interval(-2.0, -2.0), com))
    @test round(DecoratedInterval(Interval(-1.2, -1.1), com), RoundDown) == DecoratedInterval(Interval(-2.0, -2.0), com)
    @test decoration(round(DecoratedInterval(Interval(-1.2, -1.1), com), RoundDown)) == decoration(DecoratedInterval(Interval(-2.0, -2.0), com))
    @test floor(DecoratedInterval(Interval(-1.1, -0.4), def)) == DecoratedInterval(Interval(-2.0, -1.0), def)
    @test decoration(floor(DecoratedInterval(Interval(-1.1, -0.4), def))) == decoration(DecoratedInterval(Interval(-2.0, -1.0), def))
    @test round(DecoratedInterval(Interval(-1.1, -0.4), def), RoundDown) == DecoratedInterval(Interval(-2.0, -1.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.1, -0.4), def), RoundDown)) == decoration(DecoratedInterval(Interval(-2.0, -1.0), def))
    @test floor(DecoratedInterval(Interval(-1.9, 2.2), com)) == DecoratedInterval(Interval(-2.0, 2.0), def)
    @test decoration(floor(DecoratedInterval(Interval(-1.9, 2.2), com))) == decoration(DecoratedInterval(Interval(-2.0, 2.0), def))
    @test round(DecoratedInterval(Interval(-1.9, 2.2), com), RoundDown) == DecoratedInterval(Interval(-2.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.9, 2.2), com), RoundDown)) == decoration(DecoratedInterval(Interval(-2.0, 2.0), def))
    @test floor(DecoratedInterval(Interval(-1.0, 2.2), trv)) == DecoratedInterval(Interval(-1.0, 2.0), trv)
    @test decoration(floor(DecoratedInterval(Interval(-1.0, 2.2), trv))) == decoration(DecoratedInterval(Interval(-1.0, 2.0), trv))
    @test round(DecoratedInterval(Interval(-1.0, 2.2), trv), RoundDown) == DecoratedInterval(Interval(-1.0, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-1.0, 2.2), trv), RoundDown)) == decoration(DecoratedInterval(Interval(-1.0, 2.0), trv))
    @test floor(DecoratedInterval(Interval(0.0, 2.2), trv)) == DecoratedInterval(Interval(0.0, 2.0), trv)
    @test decoration(floor(DecoratedInterval(Interval(0.0, 2.2), trv))) == decoration(DecoratedInterval(Interval(0.0, 2.0), trv))
    @test round(DecoratedInterval(Interval(0.0, 2.2), trv), RoundDown) == DecoratedInterval(Interval(0.0, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(0.0, 2.2), trv), RoundDown)) == decoration(DecoratedInterval(Interval(0.0, 2.0), trv))
    @test floor(DecoratedInterval(Interval(-0.0, 2.2), com)) == DecoratedInterval(Interval(0.0, 2.0), def)
    @test decoration(floor(DecoratedInterval(Interval(-0.0, 2.2), com))) == decoration(DecoratedInterval(Interval(0.0, 2.0), def))
    @test round(DecoratedInterval(Interval(-0.0, 2.2), com), RoundDown) == DecoratedInterval(Interval(0.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-0.0, 2.2), com), RoundDown)) == decoration(DecoratedInterval(Interval(0.0, 2.0), def))
    @test floor(DecoratedInterval(Interval(-1.5, Inf), dac)) == DecoratedInterval(Interval(-2.0, Inf), def)
    @test decoration(floor(DecoratedInterval(Interval(-1.5, Inf), dac))) == decoration(DecoratedInterval(Interval(-2.0, Inf), def))
    @test round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundDown) == DecoratedInterval(Interval(-2.0, Inf), def)
    @test decoration(round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundDown)) == decoration(DecoratedInterval(Interval(-2.0, Inf), def))
    @test floor(DecoratedInterval(Interval(-Inf, 2.2), trv)) == DecoratedInterval(Interval(-Inf, 2.0), trv)
    @test decoration(floor(DecoratedInterval(Interval(-Inf, 2.2), trv))) == decoration(DecoratedInterval(Interval(-Inf, 2.0), trv))
    @test round(DecoratedInterval(Interval(-Inf, 2.2), trv), RoundDown) == DecoratedInterval(Interval(-Inf, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-Inf, 2.2), trv), RoundDown)) == decoration(DecoratedInterval(Interval(-Inf, 2.0), trv))
end

@testset "minimal_trunc_test" begin
    @test trunc(∅) == ∅
    @test round(∅, RoundToZero) == ∅
    @test trunc(entireinterval(Float64)) == entireinterval(Float64)
    @test round(entireinterval(Float64), RoundToZero) == entireinterval(Float64)
    @test trunc(Interval(1.1, 2.1)) == Interval(1.0, 2.0)
    @test round(Interval(1.1, 2.1), RoundToZero) == Interval(1.0, 2.0)
    @test trunc(Interval(-1.1, 2.0)) == Interval(-1.0, 2.0)
    @test round(Interval(-1.1, 2.0), RoundToZero) == Interval(-1.0, 2.0)
    @test trunc(Interval(-1.1, 0.0)) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, 0.0), RoundToZero) == Interval(-1.0, 0.0)
    @test trunc(Interval(-1.1, -0.0)) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.0), RoundToZero) == Interval(-1.0, 0.0)
    @test trunc(Interval(-1.1, -0.4)) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.4), RoundToZero) == Interval(-1.0, 0.0)
    @test trunc(Interval(-1.9, 2.2)) == Interval(-1.0, 2.0)
    @test round(Interval(-1.9, 2.2), RoundToZero) == Interval(-1.0, 2.0)
    @test trunc(Interval(-1.0, 2.2)) == Interval(-1.0, 2.0)
    @test round(Interval(-1.0, 2.2), RoundToZero) == Interval(-1.0, 2.0)
    @test trunc(Interval(0.0, 2.2)) == Interval(0.0, 2.0)
    @test round(Interval(0.0, 2.2), RoundToZero) == Interval(0.0, 2.0)
    @test trunc(Interval(-0.0, 2.2)) == Interval(0.0, 2.0)
    @test round(Interval(-0.0, 2.2), RoundToZero) == Interval(0.0, 2.0)
    @test trunc(Interval(-1.5, Inf)) == Interval(-1.0, Inf)
    @test round(Interval(-1.5, Inf), RoundToZero) == Interval(-1.0, Inf)
    @test trunc(Interval(-Inf, 2.2)) == Interval(-Inf, 2.0)
    @test round(Interval(-Inf, 2.2), RoundToZero) == Interval(-Inf, 2.0)
end

@testset "minimal_trunc_dec_test" begin
    @test trunc(DecoratedInterval(Interval(1.1, 2.1), com)) == DecoratedInterval(Interval(1.0, 2.0), def)
    @test decoration(trunc(DecoratedInterval(Interval(1.1, 2.1), com))) == decoration(DecoratedInterval(Interval(1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(1.1, 2.1), com), RoundToZero) == DecoratedInterval(Interval(1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(1.1, 2.1), com), RoundToZero)) == decoration(DecoratedInterval(Interval(1.0, 2.0), def))
    @test trunc(DecoratedInterval(Interval(1.1, 1.9), com)) == DecoratedInterval(Interval(1.0, 1.0), com)
    @test decoration(trunc(DecoratedInterval(Interval(1.1, 1.9), com))) == decoration(DecoratedInterval(Interval(1.0, 1.0), com))
    @test round(DecoratedInterval(Interval(1.1, 1.9), com), RoundToZero) == DecoratedInterval(Interval(1.0, 1.0), com)
    @test decoration(round(DecoratedInterval(Interval(1.1, 1.9), com), RoundToZero)) == decoration(DecoratedInterval(Interval(1.0, 1.0), com))
    @test trunc(DecoratedInterval(Interval(-1.1, 2.0), dac)) == DecoratedInterval(Interval(-1.0, 2.0), def)
    @test decoration(trunc(DecoratedInterval(Interval(-1.1, 2.0), dac))) == decoration(DecoratedInterval(Interval(-1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(-1.1, 2.0), dac), RoundToZero) == DecoratedInterval(Interval(-1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.1, 2.0), dac), RoundToZero)) == decoration(DecoratedInterval(Interval(-1.0, 2.0), def))
    @test trunc(DecoratedInterval(Interval(-1.1, 0.0), trv)) == DecoratedInterval(Interval(-1.0, 0.0), trv)
    @test decoration(trunc(DecoratedInterval(Interval(-1.1, 0.0), trv))) == decoration(DecoratedInterval(Interval(-1.0, 0.0), trv))
    @test round(DecoratedInterval(Interval(-1.1, 0.0), trv), RoundToZero) == DecoratedInterval(Interval(-1.0, 0.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-1.1, 0.0), trv), RoundToZero)) == decoration(DecoratedInterval(Interval(-1.0, 0.0), trv))
    @test trunc(DecoratedInterval(Interval(-1.1, -0.0), def)) == DecoratedInterval(Interval(-1.0, 0.0), def)
    @test decoration(trunc(DecoratedInterval(Interval(-1.1, -0.0), def))) == decoration(DecoratedInterval(Interval(-1.0, 0.0), def))
    @test round(DecoratedInterval(Interval(-1.1, -0.0), def), RoundToZero) == DecoratedInterval(Interval(-1.0, 0.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.1, -0.0), def), RoundToZero)) == decoration(DecoratedInterval(Interval(-1.0, 0.0), def))
    @test trunc(DecoratedInterval(Interval(-1.1, -0.4), com)) == DecoratedInterval(Interval(-1.0, 0.0), def)
    @test decoration(trunc(DecoratedInterval(Interval(-1.1, -0.4), com))) == decoration(DecoratedInterval(Interval(-1.0, 0.0), def))
    @test round(DecoratedInterval(Interval(-1.1, -0.4), com), RoundToZero) == DecoratedInterval(Interval(-1.0, 0.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.1, -0.4), com), RoundToZero)) == decoration(DecoratedInterval(Interval(-1.0, 0.0), def))
    @test trunc(DecoratedInterval(Interval(-1.9, 2.2), def)) == DecoratedInterval(Interval(-1.0, 2.0), def)
    @test decoration(trunc(DecoratedInterval(Interval(-1.9, 2.2), def))) == decoration(DecoratedInterval(Interval(-1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(-1.9, 2.2), def), RoundToZero) == DecoratedInterval(Interval(-1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.9, 2.2), def), RoundToZero)) == decoration(DecoratedInterval(Interval(-1.0, 2.0), def))
    @test trunc(DecoratedInterval(Interval(-1.0, 2.2), dac)) == DecoratedInterval(Interval(-1.0, 2.0), def)
    @test decoration(trunc(DecoratedInterval(Interval(-1.0, 2.2), dac))) == decoration(DecoratedInterval(Interval(-1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(-1.0, 2.2), dac), RoundToZero) == DecoratedInterval(Interval(-1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.0, 2.2), dac), RoundToZero)) == decoration(DecoratedInterval(Interval(-1.0, 2.0), def))
    @test trunc(DecoratedInterval(Interval(-1.5, Inf), dac)) == DecoratedInterval(Interval(-1.0, Inf), def)
    @test decoration(trunc(DecoratedInterval(Interval(-1.5, Inf), dac))) == decoration(DecoratedInterval(Interval(-1.0, Inf), def))
    @test round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundToZero) == DecoratedInterval(Interval(-1.0, Inf), def)
    @test decoration(round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundToZero)) == decoration(DecoratedInterval(Interval(-1.0, Inf), def))
    @test trunc(DecoratedInterval(Interval(-Inf, 2.2), trv)) == DecoratedInterval(Interval(-Inf, 2.0), trv)
    @test decoration(trunc(DecoratedInterval(Interval(-Inf, 2.2), trv))) == decoration(DecoratedInterval(Interval(-Inf, 2.0), trv))
    @test round(DecoratedInterval(Interval(-Inf, 2.2), trv), RoundToZero) == DecoratedInterval(Interval(-Inf, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-Inf, 2.2), trv), RoundToZero)) == decoration(DecoratedInterval(Interval(-Inf, 2.0), trv))
end

@testset "minimal_roundTiesToEven_test" begin
    @test round(∅) == ∅
    @test round(∅, RoundNearest) == ∅
    @test round(∅, RoundTiesToEven) == ∅
    @test round(entireinterval(Float64)) == entireinterval(Float64)
    @test round(entireinterval(Float64), RoundNearest) == entireinterval(Float64)
    @test round(entireinterval(Float64), RoundTiesToEven) == entireinterval(Float64)
    @test round(Interval(1.1, 2.1)) == Interval(1.0, 2.0)
    @test round(Interval(1.1, 2.1), RoundNearest) == Interval(1.0, 2.0)
    @test round(Interval(1.1, 2.1), RoundTiesToEven) == Interval(1.0, 2.0)
    @test round(Interval(-1.1, 2.0)) == Interval(-1.0, 2.0)
    @test round(Interval(-1.1, 2.0), RoundNearest) == Interval(-1.0, 2.0)
    @test round(Interval(-1.1, 2.0), RoundTiesToEven) == Interval(-1.0, 2.0)
    @test round(Interval(-1.1, -0.4)) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.4), RoundNearest) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.4), RoundTiesToEven) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, 0.0)) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, 0.0), RoundNearest) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, 0.0), RoundTiesToEven) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.0)) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.0), RoundNearest) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.0), RoundTiesToEven) == Interval(-1.0, 0.0)
    @test round(Interval(-1.9, 2.2)) == Interval(-2.0, 2.0)
    @test round(Interval(-1.9, 2.2), RoundNearest) == Interval(-2.0, 2.0)
    @test round(Interval(-1.9, 2.2), RoundTiesToEven) == Interval(-2.0, 2.0)
    @test round(Interval(-1.0, 2.2)) == Interval(-1.0, 2.0)
    @test round(Interval(-1.0, 2.2), RoundNearest) == Interval(-1.0, 2.0)
    @test round(Interval(-1.0, 2.2), RoundTiesToEven) == Interval(-1.0, 2.0)
    @test round(Interval(1.5, 2.1)) == Interval(2.0, 2.0)
    @test round(Interval(1.5, 2.1), RoundNearest) == Interval(2.0, 2.0)
    @test round(Interval(1.5, 2.1), RoundTiesToEven) == Interval(2.0, 2.0)
    @test round(Interval(-1.5, 2.0)) == Interval(-2.0, 2.0)
    @test round(Interval(-1.5, 2.0), RoundNearest) == Interval(-2.0, 2.0)
    @test round(Interval(-1.5, 2.0), RoundTiesToEven) == Interval(-2.0, 2.0)
    @test round(Interval(-1.1, -0.5)) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.5), RoundNearest) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.5), RoundTiesToEven) == Interval(-1.0, 0.0)
    @test round(Interval(-1.9, 2.5)) == Interval(-2.0, 2.0)
    @test round(Interval(-1.9, 2.5), RoundNearest) == Interval(-2.0, 2.0)
    @test round(Interval(-1.9, 2.5), RoundTiesToEven) == Interval(-2.0, 2.0)
    @test round(Interval(0.0, 2.5)) == Interval(0.0, 2.0)
    @test round(Interval(0.0, 2.5), RoundNearest) == Interval(0.0, 2.0)
    @test round(Interval(0.0, 2.5), RoundTiesToEven) == Interval(0.0, 2.0)
    @test round(Interval(-0.0, 2.5)) == Interval(0.0, 2.0)
    @test round(Interval(-0.0, 2.5), RoundNearest) == Interval(0.0, 2.0)
    @test round(Interval(-0.0, 2.5), RoundTiesToEven) == Interval(0.0, 2.0)
    @test round(Interval(-1.5, 2.5)) == Interval(-2.0, 2.0)
    @test round(Interval(-1.5, 2.5), RoundNearest) == Interval(-2.0, 2.0)
    @test round(Interval(-1.5, 2.5), RoundTiesToEven) == Interval(-2.0, 2.0)
    @test round(Interval(-1.5, Inf)) == Interval(-2.0, Inf)
    @test round(Interval(-1.5, Inf), RoundNearest) == Interval(-2.0, Inf)
    @test round(Interval(-1.5, Inf), RoundTiesToEven) == Interval(-2.0, Inf)
    @test round(Interval(-Inf, 2.2)) == Interval(-Inf, 2.0)
    @test round(Interval(-Inf, 2.2), RoundNearest) == Interval(-Inf, 2.0)
    @test round(Interval(-Inf, 2.2), RoundTiesToEven) == Interval(-Inf, 2.0)
end

@testset "minimal_roundTiesToEven_dec_test" begin
    @test round(DecoratedInterval(Interval(1.1, 2.1), com)) == DecoratedInterval(Interval(1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(1.1, 2.1), com))) == decoration(DecoratedInterval(Interval(1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(1.1, 2.1), com), RoundNearest) == DecoratedInterval(Interval(1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(1.1, 2.1), com), RoundNearest)) == decoration(DecoratedInterval(Interval(1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(1.1, 2.1), com), RoundTiesToEven) == DecoratedInterval(Interval(1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(1.1, 2.1), com), RoundTiesToEven)) == decoration(DecoratedInterval(Interval(1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(-1.1, 2.0), trv)) == DecoratedInterval(Interval(-1.0, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-1.1, 2.0), trv))) == decoration(DecoratedInterval(Interval(-1.0, 2.0), trv))
    @test round(DecoratedInterval(Interval(-1.1, 2.0), trv), RoundNearest) == DecoratedInterval(Interval(-1.0, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-1.1, 2.0), trv), RoundNearest)) == decoration(DecoratedInterval(Interval(-1.0, 2.0), trv))
    @test round(DecoratedInterval(Interval(-1.1, 2.0), trv), RoundTiesToEven) == DecoratedInterval(Interval(-1.0, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-1.1, 2.0), trv), RoundTiesToEven)) == decoration(DecoratedInterval(Interval(-1.0, 2.0), trv))
    @test round(DecoratedInterval(Interval(-1.6, -1.5), com)) == DecoratedInterval(Interval(-2.0, -2.0), dac)
    @test decoration(round(DecoratedInterval(Interval(-1.6, -1.5), com))) == decoration(DecoratedInterval(Interval(-2.0, -2.0), dac))
    @test round(DecoratedInterval(Interval(-1.6, -1.5), com), RoundNearest) == DecoratedInterval(Interval(-2.0, -2.0), dac)
    @test decoration(round(DecoratedInterval(Interval(-1.6, -1.5), com), RoundNearest)) == decoration(DecoratedInterval(Interval(-2.0, -2.0), dac))
    @test round(DecoratedInterval(Interval(-1.6, -1.5), com), RoundTiesToEven) == DecoratedInterval(Interval(-2.0, -2.0), dac)
    @test decoration(round(DecoratedInterval(Interval(-1.6, -1.5), com), RoundTiesToEven)) == decoration(DecoratedInterval(Interval(-2.0, -2.0), dac))
    @test round(DecoratedInterval(Interval(-1.6, -1.4), com)) == DecoratedInterval(Interval(-2.0, -1.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.6, -1.4), com))) == decoration(DecoratedInterval(Interval(-2.0, -1.0), def))
    @test round(DecoratedInterval(Interval(-1.6, -1.4), com), RoundNearest) == DecoratedInterval(Interval(-2.0, -1.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.6, -1.4), com), RoundNearest)) == decoration(DecoratedInterval(Interval(-2.0, -1.0), def))
    @test round(DecoratedInterval(Interval(-1.6, -1.4), com), RoundTiesToEven) == DecoratedInterval(Interval(-2.0, -1.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.6, -1.4), com), RoundTiesToEven)) == decoration(DecoratedInterval(Interval(-2.0, -1.0), def))
    @test round(DecoratedInterval(Interval(-1.5, Inf), dac)) == DecoratedInterval(Interval(-2.0, Inf), def)
    @test decoration(round(DecoratedInterval(Interval(-1.5, Inf), dac))) == decoration(DecoratedInterval(Interval(-2.0, Inf), def))
    @test round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundNearest) == DecoratedInterval(Interval(-2.0, Inf), def)
    @test decoration(round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundNearest)) == decoration(DecoratedInterval(Interval(-2.0, Inf), def))
    @test round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundTiesToEven) == DecoratedInterval(Interval(-2.0, Inf), def)
    @test decoration(round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundTiesToEven)) == decoration(DecoratedInterval(Interval(-2.0, Inf), def))
    @test round(DecoratedInterval(Interval(-Inf, 2.2), trv)) == DecoratedInterval(Interval(-Inf, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-Inf, 2.2), trv))) == decoration(DecoratedInterval(Interval(-Inf, 2.0), trv))
    @test round(DecoratedInterval(Interval(-Inf, 2.2), trv), RoundNearest) == DecoratedInterval(Interval(-Inf, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-Inf, 2.2), trv), RoundNearest)) == decoration(DecoratedInterval(Interval(-Inf, 2.0), trv))
    @test round(DecoratedInterval(Interval(-Inf, 2.2), trv), RoundTiesToEven) == DecoratedInterval(Interval(-Inf, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-Inf, 2.2), trv), RoundTiesToEven)) == decoration(DecoratedInterval(Interval(-Inf, 2.0), trv))
end

@testset "minimal_roundTiesToAway_test" begin
    @test round(∅, RoundNearestTiesAway) == ∅
    @test round(∅, RoundTiesToAway) == ∅
    @test round(entireinterval(Float64), RoundNearestTiesAway) == entireinterval(Float64)
    @test round(entireinterval(Float64), RoundTiesToAway) == entireinterval(Float64)
    @test round(Interval(1.1, 2.1), RoundNearestTiesAway) == Interval(1.0, 2.0)
    @test round(Interval(1.1, 2.1), RoundTiesToAway) == Interval(1.0, 2.0)
    @test round(Interval(-1.1, 2.0), RoundNearestTiesAway) == Interval(-1.0, 2.0)
    @test round(Interval(-1.1, 2.0), RoundTiesToAway) == Interval(-1.0, 2.0)
    @test round(Interval(-1.1, 0.0), RoundNearestTiesAway) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, 0.0), RoundTiesToAway) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.0), RoundNearestTiesAway) == Interval(-1.0, -0.0)
    @test round(Interval(-1.1, -0.0), RoundTiesToAway) == Interval(-1.0, -0.0)
    @test round(Interval(-1.1, -0.4), RoundNearestTiesAway) == Interval(-1.0, 0.0)
    @test round(Interval(-1.1, -0.4), RoundTiesToAway) == Interval(-1.0, 0.0)
    @test round(Interval(-1.9, 2.2), RoundNearestTiesAway) == Interval(-2.0, 2.0)
    @test round(Interval(-1.9, 2.2), RoundTiesToAway) == Interval(-2.0, 2.0)
    @test round(Interval(-1.0, 2.2), RoundNearestTiesAway) == Interval(-1.0, 2.0)
    @test round(Interval(-1.0, 2.2), RoundTiesToAway) == Interval(-1.0, 2.0)
    @test round(Interval(0.5, 2.1), RoundNearestTiesAway) == Interval(1.0, 2.0)
    @test round(Interval(0.5, 2.1), RoundTiesToAway) == Interval(1.0, 2.0)
    @test round(Interval(-2.5, 2.0), RoundNearestTiesAway) == Interval(-3.0, 2.0)
    @test round(Interval(-2.5, 2.0), RoundTiesToAway) == Interval(-3.0, 2.0)
    @test round(Interval(-1.1, -0.5), RoundNearestTiesAway) == Interval(-1.0, -1.0)
    @test round(Interval(-1.1, -0.5), RoundTiesToAway) == Interval(-1.0, -1.0)
    @test round(Interval(-1.9, 2.5), RoundNearestTiesAway) == Interval(-2.0, 3.0)
    @test round(Interval(-1.9, 2.5), RoundTiesToAway) == Interval(-2.0, 3.0)
    @test round(Interval(-1.5, 2.5), RoundNearestTiesAway) == Interval(-2.0, 3.0)
    @test round(Interval(-1.5, 2.5), RoundTiesToAway) == Interval(-2.0, 3.0)
    @test round(Interval(0.0, 2.5), RoundNearestTiesAway) == Interval(0.0, 3.0)
    @test round(Interval(0.0, 2.5), RoundTiesToAway) == Interval(0.0, 3.0)
    @test round(Interval(-0.0, 2.5), RoundNearestTiesAway) == Interval(0.0, 3.0)
    @test round(Interval(-0.0, 2.5), RoundTiesToAway) == Interval(0.0, 3.0)
    @test round(Interval(-1.5, Inf), RoundNearestTiesAway) == Interval(-2.0, Inf)
    @test round(Interval(-1.5, Inf), RoundTiesToAway) == Interval(-2.0, Inf)
    @test round(Interval(-Inf, 2.2), RoundNearestTiesAway) == Interval(-Inf, 2.0)
    @test round(Interval(-Inf, 2.2), RoundTiesToAway) == Interval(-Inf, 2.0)
end

@testset "minimal_roundTiesToAway_dec_test" begin
    @test round(DecoratedInterval(Interval(1.1, 2.1), com), RoundNearestTiesAway) == DecoratedInterval(Interval(1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(1.1, 2.1), com), RoundNearestTiesAway)) == decoration(DecoratedInterval(Interval(1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(1.1, 2.1), com), RoundTiesToAway) == DecoratedInterval(Interval(1.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(1.1, 2.1), com), RoundTiesToAway)) == decoration(DecoratedInterval(Interval(1.0, 2.0), def))
    @test round(DecoratedInterval(Interval(-1.9, 2.2), com), RoundNearestTiesAway) == DecoratedInterval(Interval(-2.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.9, 2.2), com), RoundNearestTiesAway)) == decoration(DecoratedInterval(Interval(-2.0, 2.0), def))
    @test round(DecoratedInterval(Interval(-1.9, 2.2), com), RoundTiesToAway) == DecoratedInterval(Interval(-2.0, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-1.9, 2.2), com), RoundTiesToAway)) == decoration(DecoratedInterval(Interval(-2.0, 2.0), def))
    @test round(DecoratedInterval(Interval(1.9, 2.2), com), RoundNearestTiesAway) == DecoratedInterval(Interval(2.0, 2.0), com)
    @test decoration(round(DecoratedInterval(Interval(1.9, 2.2), com), RoundNearestTiesAway)) == decoration(DecoratedInterval(Interval(2.0, 2.0), com))
    @test round(DecoratedInterval(Interval(1.9, 2.2), com), RoundTiesToAway) == DecoratedInterval(Interval(2.0, 2.0), com)
    @test decoration(round(DecoratedInterval(Interval(1.9, 2.2), com), RoundTiesToAway)) == decoration(DecoratedInterval(Interval(2.0, 2.0), com))
    @test round(DecoratedInterval(Interval(-1.0, 2.2), trv), RoundNearestTiesAway) == DecoratedInterval(Interval(-1.0, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-1.0, 2.2), trv), RoundNearestTiesAway)) == decoration(DecoratedInterval(Interval(-1.0, 2.0), trv))
    @test round(DecoratedInterval(Interval(-1.0, 2.2), trv), RoundTiesToAway) == DecoratedInterval(Interval(-1.0, 2.0), trv)
    @test decoration(round(DecoratedInterval(Interval(-1.0, 2.2), trv), RoundTiesToAway)) == decoration(DecoratedInterval(Interval(-1.0, 2.0), trv))
    @test round(DecoratedInterval(Interval(2.5, 2.6), com), RoundNearestTiesAway) == DecoratedInterval(Interval(3.0, 3.0), dac)
    @test decoration(round(DecoratedInterval(Interval(2.5, 2.6), com), RoundNearestTiesAway)) == decoration(DecoratedInterval(Interval(3.0, 3.0), dac))
    @test round(DecoratedInterval(Interval(2.5, 2.6), com), RoundTiesToAway) == DecoratedInterval(Interval(3.0, 3.0), dac)
    @test decoration(round(DecoratedInterval(Interval(2.5, 2.6), com), RoundTiesToAway)) == decoration(DecoratedInterval(Interval(3.0, 3.0), dac))
    @test round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundNearestTiesAway) == DecoratedInterval(Interval(-2.0, Inf), def)
    @test decoration(round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundNearestTiesAway)) == decoration(DecoratedInterval(Interval(-2.0, Inf), def))
    @test round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundTiesToAway) == DecoratedInterval(Interval(-2.0, Inf), def)
    @test decoration(round(DecoratedInterval(Interval(-1.5, Inf), dac), RoundTiesToAway)) == decoration(DecoratedInterval(Interval(-2.0, Inf), def))
    @test round(DecoratedInterval(Interval(-Inf, 2.2), def), RoundNearestTiesAway) == DecoratedInterval(Interval(-Inf, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-Inf, 2.2), def), RoundNearestTiesAway)) == decoration(DecoratedInterval(Interval(-Inf, 2.0), def))
    @test round(DecoratedInterval(Interval(-Inf, 2.2), def), RoundTiesToAway) == DecoratedInterval(Interval(-Inf, 2.0), def)
    @test decoration(round(DecoratedInterval(Interval(-Inf, 2.2), def), RoundTiesToAway)) == decoration(DecoratedInterval(Interval(-Inf, 2.0), def))
end

@testset "minimal_abs_test" begin
    @test abs(∅) == ∅
    @test abs(entireinterval(Float64)) == Interval(0.0, Inf)
    @test abs(Interval(1.1, 2.1)) == Interval(1.1, 2.1)
    @test abs(Interval(-1.1, 2.0)) == Interval(0.0, 2.0)
    @test abs(Interval(-1.1, 0.0)) == Interval(0.0, 1.1)
    @test abs(Interval(-1.1, -0.0)) == Interval(0.0, 1.1)
    @test abs(Interval(-1.1, -0.4)) == Interval(0.4, 1.1)
    @test abs(Interval(-1.9, 0.2)) == Interval(0.0, 1.9)
    @test abs(Interval(0.0, 0.2)) == Interval(0.0, 0.2)
    @test abs(Interval(-0.0, 0.2)) == Interval(0.0, 0.2)
    @test abs(Interval(-1.5, Inf)) == Interval(0.0, Inf)
    @test abs(Interval(-Inf, -2.2)) == Interval(2.2, Inf)
end

@testset "minimal_abs_dec_test" begin
    @test abs(DecoratedInterval(Interval(-1.1, 2.0), com)) == DecoratedInterval(Interval(0.0, 2.0), com)
    @test decoration(abs(DecoratedInterval(Interval(-1.1, 2.0), com))) == decoration(DecoratedInterval(Interval(0.0, 2.0), com))
    @test abs(DecoratedInterval(Interval(-1.1, 0.0), dac)) == DecoratedInterval(Interval(0.0, 1.1), dac)
    @test decoration(abs(DecoratedInterval(Interval(-1.1, 0.0), dac))) == decoration(DecoratedInterval(Interval(0.0, 1.1), dac))
    @test abs(DecoratedInterval(Interval(-1.1, -0.0), def)) == DecoratedInterval(Interval(0.0, 1.1), def)
    @test decoration(abs(DecoratedInterval(Interval(-1.1, -0.0), def))) == decoration(DecoratedInterval(Interval(0.0, 1.1), def))
    @test abs(DecoratedInterval(Interval(-1.1, -0.4), trv)) == DecoratedInterval(Interval(0.4, 1.1), trv)
    @test decoration(abs(DecoratedInterval(Interval(-1.1, -0.4), trv))) == decoration(DecoratedInterval(Interval(0.4, 1.1), trv))
    @test abs(DecoratedInterval(Interval(-1.9, 0.2), dac)) == DecoratedInterval(Interval(0.0, 1.9), dac)
    @test decoration(abs(DecoratedInterval(Interval(-1.9, 0.2), dac))) == decoration(DecoratedInterval(Interval(0.0, 1.9), dac))
    @test abs(DecoratedInterval(Interval(0.0, 0.2), def)) == DecoratedInterval(Interval(0.0, 0.2), def)
    @test decoration(abs(DecoratedInterval(Interval(0.0, 0.2), def))) == decoration(DecoratedInterval(Interval(0.0, 0.2), def))
    @test abs(DecoratedInterval(Interval(-0.0, 0.2), com)) == DecoratedInterval(Interval(0.0, 0.2), com)
    @test decoration(abs(DecoratedInterval(Interval(-0.0, 0.2), com))) == decoration(DecoratedInterval(Interval(0.0, 0.2), com))
    @test abs(DecoratedInterval(Interval(-1.5, Inf), dac)) == DecoratedInterval(Interval(0.0, Inf), dac)
    @test decoration(abs(DecoratedInterval(Interval(-1.5, Inf), dac))) == decoration(DecoratedInterval(Interval(0.0, Inf), dac))
end

@testset "minimal_min_test" begin
    @test min(∅, Interval(1.0, 2.0)) == ∅
    @test min(Interval(1.0, 2.0), ∅) == ∅
    @test min(∅, ∅) == ∅
    @test min(entireinterval(Float64), Interval(1.0, 2.0)) == Interval(-Inf, 2.0)
    @test min(Interval(1.0, 2.0), entireinterval(Float64)) == Interval(-Inf, 2.0)
    @test min(entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test min(∅, entireinterval(Float64)) == ∅
    @test min(Interval(1.0, 5.0), Interval(2.0, 4.0)) == Interval(1.0, 4.0)
    @test min(Interval(0.0, 5.0), Interval(2.0, 4.0)) == Interval(0.0, 4.0)
    @test min(Interval(-0.0, 5.0), Interval(2.0, 4.0)) == Interval(0.0, 4.0)
    @test min(Interval(1.0, 5.0), Interval(2.0, 8.0)) == Interval(1.0, 5.0)
    @test min(Interval(1.0, 5.0), entireinterval(Float64)) == Interval(-Inf, 5.0)
    @test min(Interval(-7.0, -5.0), Interval(2.0, 4.0)) == Interval(-7.0, -5.0)
    @test min(Interval(-7.0, 0.0), Interval(2.0, 4.0)) == Interval(-7.0, 0.0)
    @test min(Interval(-7.0, -0.0), Interval(2.0, 4.0)) == Interval(-7.0, 0.0)
end

@testset "minimal_min_dec_test" begin
    @test min(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(1.0, 2.0), com)) == DecoratedInterval(Interval(-Inf, 2.0), def)
    @test decoration(min(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(1.0, 2.0), com))) == decoration(DecoratedInterval(Interval(-Inf, 2.0), def))
    @test min(DecoratedInterval(Interval(-7.0, -5.0), trv), DecoratedInterval(Interval(2.0, 4.0), def)) == DecoratedInterval(Interval(-7.0, -5.0), trv)
    @test decoration(min(DecoratedInterval(Interval(-7.0, -5.0), trv), DecoratedInterval(Interval(2.0, 4.0), def))) == decoration(DecoratedInterval(Interval(-7.0, -5.0), trv))
    @test min(DecoratedInterval(Interval(-7.0, 0.0), dac), DecoratedInterval(Interval(2.0, 4.0), def)) == DecoratedInterval(Interval(-7.0, 0.0), def)
    @test decoration(min(DecoratedInterval(Interval(-7.0, 0.0), dac), DecoratedInterval(Interval(2.0, 4.0), def))) == decoration(DecoratedInterval(Interval(-7.0, 0.0), def))
    @test min(DecoratedInterval(Interval(-7.0, -0.0), com), DecoratedInterval(Interval(2.0, 4.0), com)) == DecoratedInterval(Interval(-7.0, 0.0), com)
    @test decoration(min(DecoratedInterval(Interval(-7.0, -0.0), com), DecoratedInterval(Interval(2.0, 4.0), com))) == decoration(DecoratedInterval(Interval(-7.0, 0.0), com))
end

@testset "minimal_max_test" begin
    @test max(∅, Interval(1.0, 2.0)) == ∅
    @test max(Interval(1.0, 2.0), ∅) == ∅
    @test max(∅, ∅) == ∅
    @test max(entireinterval(Float64), Interval(1.0, 2.0)) == Interval(1.0, Inf)
    @test max(Interval(1.0, 2.0), entireinterval(Float64)) == Interval(1.0, Inf)
    @test max(entireinterval(Float64), entireinterval(Float64)) == entireinterval(Float64)
    @test max(∅, entireinterval(Float64)) == ∅
    @test max(Interval(1.0, 5.0), Interval(2.0, 4.0)) == Interval(2.0, 5.0)
    @test max(Interval(1.0, 5.0), Interval(2.0, 8.0)) == Interval(2.0, 8.0)
    @test max(Interval(-1.0, 5.0), entireinterval(Float64)) == Interval(-1.0, Inf)
    @test max(Interval(-7.0, -5.0), Interval(2.0, 4.0)) == Interval(2.0, 4.0)
    @test max(Interval(-7.0, -5.0), Interval(0.0, 4.0)) == Interval(0.0, 4.0)
    @test max(Interval(-7.0, -5.0), Interval(-0.0, 4.0)) == Interval(0.0, 4.0)
    @test max(Interval(-7.0, -5.0), Interval(-2.0, 0.0)) == Interval(-2.0, 0.0)
    @test max(Interval(-7.0, -5.0), Interval(-2.0, -0.0)) == Interval(-2.0, 0.0)
end

@testset "minimal_max_dec_test" begin
    @test max(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(1.0, 2.0), com)) == DecoratedInterval(Interval(1.0, Inf), def)
    @test decoration(max(DecoratedInterval(entireinterval(Float64), def), DecoratedInterval(Interval(1.0, 2.0), com))) == decoration(DecoratedInterval(Interval(1.0, Inf), def))
    @test max(DecoratedInterval(Interval(-7.0, -5.0), trv), DecoratedInterval(Interval(2.0, 4.0), def)) == DecoratedInterval(Interval(2.0, 4.0), trv)
    @test decoration(max(DecoratedInterval(Interval(-7.0, -5.0), trv), DecoratedInterval(Interval(2.0, 4.0), def))) == decoration(DecoratedInterval(Interval(2.0, 4.0), trv))
    @test max(DecoratedInterval(Interval(-7.0, 5.0), dac), DecoratedInterval(Interval(2.0, 4.0), def)) == DecoratedInterval(Interval(2.0, 5.0), def)
    @test decoration(max(DecoratedInterval(Interval(-7.0, 5.0), dac), DecoratedInterval(Interval(2.0, 4.0), def))) == decoration(DecoratedInterval(Interval(2.0, 5.0), def))
    @test max(DecoratedInterval(Interval(3.0, 3.5), com), DecoratedInterval(Interval(2.0, 4.0), com)) == DecoratedInterval(Interval(3.0, 4.0), com)
    @test decoration(max(DecoratedInterval(Interval(3.0, 3.5), com), DecoratedInterval(Interval(2.0, 4.0), com))) == decoration(DecoratedInterval(Interval(3.0, 4.0), com))
end
# FactCheck.exitstatus()