diff --git a/test/Manifest.toml b/test/Manifest.toml new file mode 100644 index 0000000000000000000000000000000000000000..bce8465c2ff47c0e77177204a71a0cbcfe3331d3 --- /dev/null +++ b/test/Manifest.toml @@ -0,0 +1,40 @@ +# This file is machine-generated - editing it directly is not advised + +[[Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[LinearAlgebra]] +deps = ["Libdl"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[Random]] +deps = ["Serialization"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[Test]] +deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/test/Project.toml b/test/Project.toml new file mode 100644 index 0000000000000000000000000000000000000000..f40548a16839ef4c599902a16f17d48eba38e0a7 --- /dev/null +++ b/test/Project.toml @@ -0,0 +1,4 @@ +[deps] +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/test/runtests.jl b/test/runtests.jl new file mode 100644 index 0000000000000000000000000000000000000000..a7c94ea284fb25895e7405a25bc3dd5a0c9cdc99 --- /dev/null +++ b/test/runtests.jl @@ -0,0 +1,62 @@ +using LinearAlgebra +using PolynomialMatrixEquations +using Random +using Test + +undeterminatcase = false +unstablecas = false +numberundeterminate = 0 +numberunstable = 0 + +qz_criterium = 1 + 1e-6 + +Random.seed!(123) +ncases = 20 +n=10 + +for i = 1:ncases + println("Test $i") + d_orig = randn(n, n) + e_orig = randn(n, n) + F = schur(e_orig, d_orig) + eigenvalues = F.α ./ F.β + nstable = count(abs.(eigenvalues) .< 1+1e-6) + + d = copy(d_orig) + e = copy(e_orig) + ws1 = GsSolverWs(d, e, nstable) + gs_solver!(ws1, d, e, nstable, qz_criterium) + @test d_orig*[I(nstable); ws1.g2]*ws1.g1 ≈ e_orig*[I(nstable); ws1.g2] + + a0 = Matrix([-e[:, 1:nstable] zeros(n, n-nstable)]) + a1 = Matrix([d[:, 1:nstable] -e[:, (nstable+1):n]]) + a2 = Matrix([zeros(n, nstable) d[:, (nstable+1):n]]) + + x = zeros(n, n) + ws2 = CyclicReductionWs(n) + cyclic_reduction!(x, a0, a1, a2, ws2, 1e-8, 50) + @test isapprox(a0 + a1*x + a2*x*x, zeros(n, n); atol = 1e-12) + + nstable1 = nstable + 1 + @test_throws UnstableSystemException gs_solver!(ws1, d, e, nstable + 1, qz_criterium) + + a0 = Matrix([-e[:, 1:nstable1] zeros(n, n-nstable1)]) + a1 = Matrix([d[:, 1:nstable1] -e[:, (nstable1+1):n]]) + a2 = Matrix([zeros(n, nstable1) d[:, (nstable1+1):n]]) + + x = zeros(n, n) + ws2 = CyclicReductionWs(n) + + @test_throws UnstableSystemException cyclic_reduction!(x, a0, a1, a2, ws2, 1e-8, 50) + + nstable1 = nstable - 1 + @test_throws UndeterminateSystemException gs_solver!(ws1, d, e, nstable1, qz_criterium) + + a0 = Matrix([-e[:, 1:nstable1] zeros(n, n-nstable1)]) + a1 = Matrix([d[:, 1:nstable1] -e[:, (nstable1+1):n]]) + a2 = Matrix([zeros(n, nstable1) d[:, (nstable1+1):n]]) + + x = zeros(n, n) + ws2 = CyclicReductionWs(n) + @test_throws UndeterminateSystemException cyclic_reduction!(x, a0, a1, a2, ws2, 1e-8, 50) +end diff --git a/test/testCycleReduction.jl b/test/testCycleReduction.jl deleted file mode 100644 index 67cbb8123da3ae61f93ab93ad9e1aa1f5e9d9333..0000000000000000000000000000000000000000 --- a/test/testCycleReduction.jl +++ /dev/null @@ -1,27 +0,0 @@ -using PolynomialMatrixEquations -using LinearAlgebra -using Test - -n = 3 -ws = CyclicReductionWs(n) -a0 = [0.5 0 0; 0 0.5 0; 0 0 0]; -a1 = I(n) .+ zeros(n, n) -a2 = [0 0 0; 0 0 0; 0 0 0.8] -x = zeros(n,n) -cyclic_reduction!(x,a0,a1,a2,ws,1e-8,50) -@test ws.info == 0 -@test a0 + a1*x + a2*x*x ≈ zeros(n, n) -display(x) - -cyclic_reduction_check(x,a0,a1,a2,1e-8) -a0 = [0.5 0 0; 0 1.1 0; 0 0 0]; -a1 .= I(n) .+ zeros(n, n) -a2 = [0 0 0; 0 0 0; 0 0 0.8] -cyclic_reduction!(x,a0,a1,a2,ws,1e-8,50) -@test ws.info == 1 - -a0 = [0.5 0 0; 0 0.5 0; 0 0 0]; -a1 = I(n) .+ zeros(n, n) -a2 = [0 0 0; 0 0 0; 0 0 1.2] -cyclic_reduction!(x,a0,a1,a2,ws,1e-8,50) -@test ws.info == 2 diff --git a/test/testGeneralizedSchurDecompositionSolver.jl b/test/testGeneralizedSchurDecompositionSolver.jl deleted file mode 100644 index 9b039f88dc94e6adf54b98ed6f21b76c45d0d134..0000000000000000000000000000000000000000 --- a/test/testGeneralizedSchurDecompositionSolver.jl +++ /dev/null @@ -1,35 +0,0 @@ -using PolynomialMatrixEquations -using LinearAlgebra -using Random -using Test - -Random.seed!(132) -n = 3 -d_org = randn(n,n) -e_org = randn(n,n) - -n1 = count(abs.(eigen(e, d).values) .< 1+1e-6) - -ws = GsSolverWs(d, e, n1) - -qz_criterium = 1.0 + 1e-6 -d = copy(d_org) -e = copy(e_org) -gs_solver!(ws, d , e, n1 , qz_criterium) -#@test ws.info == 0 -@test d_org*[I(n1); ws.g2]*ws.g1 ≈ e_org*[I(n1); ws.g2] - -#= -cyclic_reduction_check(x,a0,a1,a2,1e-8) -a0 = [0.5 0 0; 0 1.1 0; 0 0 0]; -a1 .= I(n) .+ zeros(n, n) -a2 = [0 0 0; 0 0 0; 0 0 0.8] -cyclic_reduction!(x,a0,a1,a2,ws,1e-8,50) -@test ws.info == 1 - -a0 = [0.5 0 0; 0 0.5 0; 0 0 0]; -a1 = I(n) .+ zeros(n, n) -a2 = [0 0 0; 0 0 0; 0 0 1.2] -cyclic_reduction!(x,a0,a1,a2,ws,1e-8,50) -@test ws.info == 2 -=#