diff --git a/interfaces/daqp-julia/src/api.jl b/interfaces/daqp-julia/src/api.jl index 2ec375c..7fd82d2 100644 --- a/interfaces/daqp-julia/src/api.jl +++ b/interfaces/daqp-julia/src/api.jl @@ -181,6 +181,7 @@ function avi(H::Matrix{Float64},f::Vector{Float64}, A::Matrix{Float64},bupper::Vector{Float64},blower::Vector{Float64}=Float64[],sense::Vector{Cint}=Cint[];A_rowmaj=false,settings=nothing, primal_start::Vector{Cdouble}=Cdouble[], dual_start::Vector{Cdouble}=Cdouble[]) d = DAQPBase.Model() + !isnothing(settings) && DAQPBase.settings(d,settings) exitflag,setup_time = DAQPBase.setup(d,QPj(H,f,A,bupper,blower,sense;A_rowmaj,is_avi=true); primal_start,dual_start,init_mask=DAQP_UPDATE_eliminate) return DAQPBase.solve(d;setup_time); diff --git a/interfaces/daqp-julia/test/core_tests.jl b/interfaces/daqp-julia/test/core_tests.jl index 18cbc71..8fe5b91 100644 --- a/interfaces/daqp-julia/test/core_tests.jl +++ b/interfaces/daqp-julia/test/core_tests.jl @@ -417,6 +417,12 @@ end @test norm(xref-x) < tol; end + # Test avi interface by passing settings + xref,H,f,A,b = generate_test_avi(n,m) + s = settings(DAQPBase.Model(), Dict(:iter_limit => 1)) + _,_,exitflag,_ = DAQPBase.avi(H,f,A,b; settings=s) + @test exitflag == DAQPBase.ITERLIMIT + # Test that update does not cause a segfault for AVIs n = 10; m = 50 xref,H,f,A,b = generate_test_avi(n,m); diff --git a/interfaces/daqp-julia/test/utils.jl b/interfaces/daqp-julia/test/utils.jl index 3fd7607..314ef1e 100644 --- a/interfaces/daqp-julia/test/utils.jl +++ b/interfaces/daqp-julia/test/utils.jl @@ -179,7 +179,7 @@ function generate_test_avi(n,m) M,N = rand(n,n),randn(n,n) sym = M'*M asym = N-N' - H = sym/norm(sym) + asym/(asym) + H = sym/norm(sym) + asym/norm(asym) # f to satisfy stationarity f = -H*x-A[AS,:]'*λ[AS]