From bea685f1830342db8e802f645bb26a2c9e272f60 Mon Sep 17 00:00:00 2001 From: odow Date: Tue, 22 Oct 2024 15:04:51 +1300 Subject: [PATCH] Improve test coverage --- src/algorithms/Chalmet.jl | 2 +- src/algorithms/DominguezRios.jl | 2 +- src/algorithms/KirlikSayin.jl | 2 +- src/algorithms/TambyVanderpooten.jl | 2 +- test/algorithms/EpsilonConstraint.jl | 1 + test/test_model.jl | 50 ++++++++++++++++++++++++++++ 6 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/algorithms/Chalmet.jl b/src/algorithms/Chalmet.jl index 0b3fd79..4eb44a7 100644 --- a/src/algorithms/Chalmet.jl +++ b/src/algorithms/Chalmet.jl @@ -17,7 +17,7 @@ Research. 25(2), 292-300 * `MOI.TimeLimitSec()`: terminate if the time limit is exceeded and return the list of current solutions. """ -mutable struct Chalmet <: AbstractAlgorithm end +struct Chalmet <: AbstractAlgorithm end function _solve_constrained_model( model::Optimizer, diff --git a/src/algorithms/DominguezRios.jl b/src/algorithms/DominguezRios.jl index 327e0b2..516724e 100644 --- a/src/algorithms/DominguezRios.jl +++ b/src/algorithms/DominguezRios.jl @@ -17,7 +17,7 @@ Sciences, 565(7), 210-228. * `MOI.TimeLimitSec()`: terminate if the time limit is exceeded and return the list of current solutions. """ -mutable struct DominguezRios <: AbstractAlgorithm end +struct DominguezRios <: AbstractAlgorithm end mutable struct _DominguezRiosBox l::Vector{Float64} diff --git a/src/algorithms/KirlikSayin.jl b/src/algorithms/KirlikSayin.jl index eed6943..b8c429a 100644 --- a/src/algorithms/KirlikSayin.jl +++ b/src/algorithms/KirlikSayin.jl @@ -22,7 +22,7 @@ is solved for each rectangle. * `MOI.TimeLimitSec()`: terminate if the time limit is exceeded and return the list of current solutions. """ -mutable struct KirlikSayin <: AbstractAlgorithm end +struct KirlikSayin <: AbstractAlgorithm end struct _Rectangle l::Vector{Float64} diff --git a/src/algorithms/TambyVanderpooten.jl b/src/algorithms/TambyVanderpooten.jl index 50af408..9b5b830 100644 --- a/src/algorithms/TambyVanderpooten.jl +++ b/src/algorithms/TambyVanderpooten.jl @@ -23,7 +23,7 @@ reformulation is solved using one of the defining points as a starting solution. * `MOI.TimeLimitSec()`: terminate if the time limit is exceeded and return the list of current solutions. """ -mutable struct TambyVanderpooten <: AbstractAlgorithm end +struct TambyVanderpooten <: AbstractAlgorithm end function _update_search_region( U_N::Dict{Vector{Float64},Vector{Vector{Vector{Float64}}}}, diff --git a/test/algorithms/EpsilonConstraint.jl b/test/algorithms/EpsilonConstraint.jl index d20c5e6..1607760 100644 --- a/test/algorithms/EpsilonConstraint.jl +++ b/test/algorithms/EpsilonConstraint.jl @@ -285,6 +285,7 @@ function test_deprecated() model = MOA.Optimizer(HiGHS.Optimizer) MOI.set(model, MOA.Algorithm(), MOA.EpsilonConstraint()) @test MOI.supports(model, MOA.ObjectiveAbsoluteTolerance(1)) + @test MOA.default(MOA.ObjectiveAbsoluteTolerance(1)) == 0.0 @test_logs (:warn,) MOI.set(model, MOA.ObjectiveAbsoluteTolerance(1), 1.0) @test_logs (:warn,) MOI.get(model, MOA.ObjectiveAbsoluteTolerance(1)) return diff --git a/test/test_model.jl b/test/test_model.jl index 263f60a..56cce2a 100644 --- a/test/test_model.jl +++ b/test/test_model.jl @@ -123,6 +123,56 @@ function test_unnsupported_attributes() return end +function test_invalid_model() + model = MOA.Optimizer(HiGHS.Optimizer) + MOI.optimize!(model) + @test MOI.get(model, MOI.TerminationStatus()) == MOI.INVALID_MODEL + return +end + +function test_raw_optimizer_attribuute() + model = MOA.Optimizer(HiGHS.Optimizer) + attr = MOI.RawOptimizerAttribute("presolve") + @test MOI.supports(model, attr) + @test MOI.get(model, attr) == "choose" + MOI.set(model, attr, "off") + @test MOI.get(model, attr) == "off" + return +end + +function test_algorithm() + model = MOA.Optimizer(HiGHS.Optimizer) + @test MOI.supports(model, MOA.Algorithm()) + @test MOI.get(model, MOA.Algorithm()) == nothing + MOI.set(model, MOA.Algorithm(), MOA.Chalmet()) + @test MOI.get(model, MOA.Algorithm()) == MOA.Chalmet() + return +end + +function test_copy_to() + src = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()) + MOI.set(src, MOA.Algorithm(), MOA.Chalmet()) + x = MOI.add_variables(src, 2) + MOI.add_constraint.(src, x, MOI.GreaterThan(0.0)) + f = MOI.Utilities.operate(vcat, Float64, 1.0 .* x...) + MOI.set(src, MOI.ObjectiveFunction{typeof(f)}(), f) + MOI.set(src, MOI.ObjectiveSense(), MOI.MAX_SENSE) + dest = MOA.Optimizer(HiGHS.Optimizer) + index_map = MOI.copy_to(dest, src) + MOI.set(dest, MOI.Silent(), true) + MOI.optimize!(dest) + @test MOI.get(dest, MOI.NumberOfVariables()) == 2 + return +end + +function test_scalarise() + x = MOI.VariableIndex.(1:2) + f = MOI.VectorOfVariables(x) + g = MOA._scalarise(f, [0.2, 0.8]) + @test isapprox(g, 0.2 * x[1] + 0.8 * x[2]) + return +end + end TestModel.run_tests()