@@ -84,3 +84,55 @@ three_halves_pi = 3*big_pi/2
8484
8585 end
8686end
87+
88+ @testset " Testing slope newton1d" begin
89+
90+ f(x) = exp(x^ 2 ) - cos(x) # double root
91+ f1(x) = x^ 4 - 10 x^ 3 + 35 x^ 2 - 50 x + 24 # four unique roots
92+ f2(x) = 4567 x^ 2 - 9134 x + 4567 # double root
93+ f3(x) = (x^ 2 - 2 )^ 2 # two double roots
94+ f4(x) = sin(x) - x # triple root at 0
95+ f5(x) = (x^ 2 - 1 )^ 4 * (x^ 2 - 2 )^ 4 # two quadruple roots
96+
97+ rts1 = slope_newton1d(sin, - 5 .. 5 )
98+ rts2 = slope_newton1d(f, - ∞.. ∞)
99+ rts3 = slope_newton1d(f1, - 10 .. 10 )
100+ rts4 = slope_newton1d(f2, - 10 .. 11 )
101+ rts5 = slope_newton1d(f3, - 10 .. 10 )
102+ rts6 = slope_newton1d(f4, - 10 .. 10 )
103+ rts7 = slope_newton1d(f5, - 10 .. 10 )
104+
105+ @test length(rts1) == 3
106+ L = [ - pi_interval(Float64), 0 .. 0 , pi_interval(Float64)]
107+ for i = 1 : length(rts1)
108+ @test L[i] in rts1[i]. interval && :unique == rts1[i]. status
109+ end
110+
111+ @test length(rts2) == 1
112+ @test (0 .. 0 ) == rts2[1 ]. interval && :unknown == rts2[1 ]. status
113+
114+ @test length(rts3) == 4
115+ L = [1 , 2 , 3 , 4 ]
116+ for i = 1 : length(rts3)
117+ @test L[i] in rts3[i]. interval && :unique == rts3[i]. status
118+ end
119+
120+ @test length(rts4) == 1
121+ @test 1 in rts4[1 ]. interval && :unknown == rts4[1 ]. status
122+
123+ L1 = [- sqrt(2 ), sqrt(2 )]
124+ for i = 1 : length(rts5)
125+ @test L1[i] in rts5[i]. interval && :unknown == rts5[i]. status
126+ end
127+
128+
129+ @test length(rts6) == 1
130+ @test 0 in rts6[1 ]. interval && :unknown == rts6[1 ]. status
131+
132+ @test length(rts7) == 4
133+ L = [- sqrt(2 ), - 1 , 1 , sqrt(2 )]
134+ for i = 1 : length(rts7)
135+ @test L[i] in rts7[i]. interval && :unknown == rts7[i]. status
136+ end
137+
138+ end
0 commit comments