diff --git a/test/runtests.jl b/test/runtests.jl index 89d41e23..60fa6733 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -112,5 +112,6 @@ pmap(test_one_problem, list_problems) include("test-scalable.jl") include("test-meta-fields.jl") +include("test-generate-meta.jl") rmprocs() diff --git a/test/test-generate-meta.jl b/test/test-generate-meta.jl new file mode 100644 index 00000000..7e95a7fb --- /dev/null +++ b/test/test-generate-meta.jl @@ -0,0 +1,60 @@ +using Distributed, NLPModels, NLPModelsJuMP, OptimizationProblems, Test +import ADNLPModels + +include(joinpath(@__DIR__, "utils.jl")) + +# All 22 keys that every meta Dict must contain. +const _ALL_META_KEYS = [ + ":nvar", + ":variable_nvar", + ":ncon", + ":variable_ncon", + ":minimize", + ":name", + ":has_equalities_only", + ":has_inequalities_only", + ":has_bounds", + ":has_fixed_variables", + ":objtype", + ":contype", + ":best_known_lower_bound", + ":best_known_upper_bound", + ":is_feasible", + ":defined_everywhere", + ":origin", + ":url", + ":notes", + ":origin_notes", + ":reference", + ":lib", +] + +@testset "generate_meta: all 22 meta keys are emitted" begin + nlp = OptimizationProblems.ADNLPProblems.arwhead() + str = generate_meta(nlp, "arwhead") + for key in _ALL_META_KEYS + @test occursin(key, str) + end +end + +@testset "generate_meta: six getter functions are emitted" begin + nlp = OptimizationProblems.ADNLPProblems.arwhead() + str = generate_meta(nlp, "arwhead") + for suffix in ("nvar", "ncon", "nlin", "nnln", "nequ", "nineq") + @test occursin("get_arwhead_$suffix", str) + end +end + +@testset "generate_meta: output is parseable Julia" begin + nlp = OptimizationProblems.ADNLPProblems.arwhead() + str = generate_meta(nlp, "arwhead") + @test Meta.parse("begin\n$str\nend") isa Expr +end + +@testset "generate_meta: constrained problem emits all 22 keys" begin + nlp = OptimizationProblems.ADNLPProblems.hs7() + str = generate_meta(nlp, "hs7") + for key in _ALL_META_KEYS + @test occursin(key, str) + end +end diff --git a/test/utils.jl b/test/utils.jl index 765d94f7..dc7f562c 100644 --- a/test/utils.jl +++ b/test/utils.jl @@ -1,7 +1,7 @@ using ADNLPModels, Distributed, NLPModels, NLPModelsJuMP, OptimizationProblems, Test path = dirname(@__FILE__) -include(joinpath(path, "test-utils.jl")) +@isdefined(ndef) || include(joinpath(path, "test-utils.jl")) # create_meta_files(String["catmix", "gasoil", "glider", "methanol", "pinene", "rocket", "steering"]) function create_meta_files(pb_names::Vector{String}; kwargs...) @@ -106,6 +106,11 @@ function generate_meta( :is_feasible => $(feasible), :defined_everywhere => $(missing), :origin => :$(origin), + :url => \"\", + :notes => raw\"\"\"\"\"\", + :origin_notes => raw\"\"\"\"\"\", + :reference => raw\"\"\"\"\"\", + :lib => \"\", ) get_$(name)_nvar(; n::Integer = default_nvar, kwargs...) = $nvar_formula get_$(name)_ncon(; n::Integer = default_nvar, kwargs...) = $ncon_formula