@@ -5,19 +5,24 @@ function _test_matrix_equal(A::SparseMatrixCSC, B::SparseMatrixCSC)
55 @test A. rowval == B. rowval
66 @test A. colptr == B. colptr
77end
8- function _test_matrix_equal (A:: MatOI.SparseMatrixCSRtoCSC , B:: SparseMatrixCSC )
8+ function _test_matrix_equal (A:: MatOI.SparseMatrixCSRtoCSC{Tv, Ti, I} , B:: SparseMatrixCSC ) where {Tv, Ti, I}
99 @test A. m == B. m
1010 @test A. n == B. n
1111 @test A. nzval ≈ B. nzval atol= ATOL rtol= RTOL
12- @test A. rowval == B. rowval .- 1
13- @test A. colptr == B. colptr .- 1
12+ if I <: MatOI.OneBasedIndexing
13+ @test A. rowval == B. rowval
14+ @test A. colptr == B. colptr
15+ else
16+ @test A. rowval == B. rowval .- 1
17+ @test A. colptr == B. colptr .- 1
18+ end
1419 sA = convert (typeof (B), A)
1520 @test typeof (sA) == typeof (B)
1621 _test_matrix_equal (sA, B)
1722end
1823
1924# _psd1test: https://github.com/jump-dev/MathOptInterface.jl/blob/master/src/Test/contconic.jl#L2417
20- function psd1 (:: Type{T} ) where T
25+ function psd1 (:: Type{T} , :: Type{I} ) where {T, I}
2126 # We use `MockOptimizer` to have indices xor'ed so that it tests that we don't assumes they are `1:n`.
2227 model = MOIU. MockOptimizer (MOIU. Model {T} ())
2328
@@ -66,7 +71,7 @@ function psd1(::Type{T}) where T
6671 )
6772 MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
6873
69- conic_form = MatOI. GeometricConicForm {T, MatOI.SparseMatrixCSRtoCSC{T, Int}, Vector{T}} ([MOI. PositiveSemidefiniteConeTriangle, MOI. SecondOrderCone, MOI. Zeros])
74+ conic_form = MatOI. GeometricConicForm {T, MatOI.SparseMatrixCSRtoCSC{T, Int, I }, Vector{T}} ([MOI. PositiveSemidefiniteConeTriangle, MOI. SecondOrderCone, MOI. Zeros])
7075 index_map = MOI. copy_to (conic_form, model)
7176
7277 @test conic_form. c' ≈ T[2 2 2 0 2 2 1 0 0 ]
8489
8590# Taken from `MOI.Test.psdt2test`.
8691# find equivalent diffcp program here - https://github.com/AKS1996/jump-gsoc-2020/blob/master/diffcp_sdp_3_py.ipynb
87- function psd2 (:: Type{T} , η:: T = T (10 ), α:: T = T (4 )/ T (5 ), δ:: T = T (9 )/ T (10 )) where T
92+ function psd2 (:: Type{T} , :: Type{I} , η:: T = T (10 ), α:: T = T (4 )/ T (5 ), δ:: T = T (9 )/ T (10 )) where {T, I}
8893 # We use `MockOptimizer` to have indices xor'ed so that it tests that we don't assumes they are `1:n`.
8994 model = MOIU. MockOptimizer (MOIU. Model {T} ())
9095
@@ -126,7 +131,7 @@ function psd2(::Type{T}, η::T = T(10), α::T = T(4)/T(5), δ::T = T(9)/T(10)) w
126131 MOI. set (model, MOI. ObjectiveFunction {MOI.ScalarAffineFunction{T}} (), MOI. ScalarAffineFunction ([MOI. ScalarAffineTerm (one (T), x[7 ])], zero (T)))
127132 MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
128133
129- conic_form = MatOI. GeometricConicForm {T, MatOI.SparseMatrixCSRtoCSC{T, Int}, Vector{T}} ([MOI. Nonnegatives, MOI. Zeros, MOI. PositiveSemidefiniteConeTriangle])
134+ conic_form = MatOI. GeometricConicForm {T, MatOI.SparseMatrixCSRtoCSC{T, Int, I }, Vector{T}} ([MOI. Nonnegatives, MOI. Zeros, MOI. PositiveSemidefiniteConeTriangle])
130135 index_map = MOI. copy_to (conic_form, model)
131136
132137 @test conic_form. c ≈ [zeros (T, 6 ); one (T)]
@@ -142,7 +147,7 @@ function psd2(::Type{T}, η::T = T(10), α::T = T(4)/T(5), δ::T = T(9)/T(10)) w
142147 )
143148end
144149
145- @testset " PSD $T " for T in [Float64, BigFloat]
146- psd1 (T)
147- psd2 (T)
150+ @testset " PSD $T , $I " for T in [Float64, BigFloat], I in [MatOI . ZeroBasedIndexing, MatOI . OneBasedIndexing ]
151+ psd1 (T, I )
152+ psd2 (T, I )
148153end
0 commit comments