@@ -3,20 +3,34 @@ import FastTransforms: clenshaw, clenshaw!, forwardrecurrence!, forwardrecurrenc
33
44@testset " clenshaw" begin
55 @testset " Chebyshev T" begin
6- c = [1 ,2 ,3 ]
7- cf = float (c)
8- @test @inferred (clenshaw (c,1 )) ≡ 1 + 2 + 3
9- @test @inferred (clenshaw (c,0 )) ≡ 1 + 0 - 3
10- @test @inferred (clenshaw (c,0.1 )) == 1 + 2 * 0.1 + 3 * cos (2 acos (0.1 ))
11- @test @inferred (clenshaw (c,[- 1 ,0 ,1 ])) == clenshaw! (c,[- 1 ,0 ,1 ]) == [2 ,- 2 ,6 ]
12- @test clenshaw (c,[- 1 ,0 ,1 ]) isa Vector{Int}
13- @test @inferred (clenshaw (Float64[],1 )) ≡ 0.0
6+ for elty in (Float64, Float32)
7+ c = [1 ,2 ,3 ]
8+ cf = elty .(c)
9+ @test @inferred (clenshaw (c,1 )) ≡ 1 + 2 + 3
10+ @test @inferred (clenshaw (c,0 )) ≡ 1 + 0 - 3
11+ @test @inferred (clenshaw (c,0.1 )) == 1 + 2 * 0.1 + 3 * cos (2 acos (0.1 ))
12+ @test @inferred (clenshaw (c,[- 1 ,0 ,1 ])) == clenshaw! (c,[- 1 ,0 ,1 ]) == [2 ,- 2 ,6 ]
13+ @test clenshaw (c,[- 1 ,0 ,1 ]) isa Vector{Int}
14+ @test @inferred (clenshaw (elty[],1 )) ≡ zero (elty)
1415
15- x = [1 ,0 ,0.1 ]
16- @test @inferred (clenshaw (c,x)) ≈ @inferred (clenshaw! (c,copy (x))) ≈
17- @inferred (clenshaw! (c,x,similar (x))) ≈
18- @inferred (clenshaw (cf,x)) ≈ @inferred (clenshaw! (cf,copy (x))) ≈
19- @inferred (clenshaw! (cf,x,similar (x))) ≈ [6 ,- 2 ,- 1.74 ]
16+ x = elty[1 ,0 ,0.1 ]
17+ @test @inferred (clenshaw (c,x)) ≈ @inferred (clenshaw! (c,copy (x))) ≈
18+ @inferred (clenshaw! (c,x,similar (x))) ≈
19+ @inferred (clenshaw (cf,x)) ≈ @inferred (clenshaw! (cf,copy (x))) ≈
20+ @inferred (clenshaw! (cf,x,similar (x))) ≈ elty[6 ,- 2 ,- 1.74 ]
21+
22+ @testset " Strided" begin
23+ cv = view (cf,:)
24+ xv = view (x,:)
25+ @test clenshaw! (cv, xv, similar (xv)) == clenshaw! (cf,x,similar (x))
26+
27+ cv2 = view (cf,1 : 2 : 3 )
28+ @test clenshaw! (cv2, xv, similar (xv)) == clenshaw ([1 ,3 ], x)
29+
30+ # modifies x and xv
31+ @test clenshaw! (cv2, xv) == xv == x == clenshaw ([1 ,3 ], elty[1 ,0 ,0.1 ])
32+ end
33+ end
2034 end
2135
2236 @testset " Chebyshev U" begin
@@ -101,6 +115,13 @@ import FastTransforms: clenshaw, clenshaw!, forwardrecurrence!, forwardrecurrenc
101115 @test v_f isa Vector{Float64}
102116
103117 j = 3
104- clenshaw ([zeros (Int,j- 1 ); 1 ; zeros (Int,N- j)], A, B, C, 1 ) == v_i[j]
118+ @test clenshaw ([zeros (Int,j- 1 ); 1 ; zeros (Int,N- j)], A, B, C, 1 ) == v_i[j]
119+ end
120+
121+ @testset " Zeros diagonal" begin
122+ N = 10 ; A = randn (N); B = Zeros {Int} (N); C = randn (N+ 1 )
123+ @test forwardrecurrence (N, A, B, C, 0.1 ) == forwardrecurrence (N, A, Vector (B), C, 0.1 )
124+ c = randn (N)
125+ @test clenshaw (c, A, B, C, 0.1 ) == clenshaw (c, A, Vector (B), C, 0.1 )
105126 end
106127end
0 commit comments