Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/bmark/bmark_solvers.jl
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
export bmark_solvers

"""
bmark_solvers(solvers :: Vector{Function}, args...; kwargs...)
bmark_solvers(solvers :: Dict{Symbol,Any}, args...; kwargs...)

Run a set of solvers on a set of problems.

#### Arguments
* `solvers`: a vector of solvers to which each problem should be passed
* `solvers`: a dictionary of solvers to which each problem should be passed
* other positional arguments accepted by `solve_problems()`, except for a solver name

#### Keyword arguments
Expand All @@ -15,7 +15,7 @@ Any keyword argument accepted by `solve_problems()`
#### Return value
A Dict{Symbol, AbstractExecutionStats} of statistics.
"""
function bmark_solvers(solvers :: Dict{Symbol,Function}, args...;
function bmark_solvers(solvers :: Dict{Symbol,<: Any}, args...;
kwargs...)
stats = Dict{Symbol, DataFrame}()
for (name,solver) in solvers
Expand Down
6 changes: 3 additions & 3 deletions src/bmark/run_solver.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export solve_problems

"""
solve_problems(solver :: Function, problems :: Any; kwargs...)
solve_problems(solver, problems :: Any; kwargs...)

Apply a solver to a set of problems.

Expand All @@ -21,12 +21,12 @@ Apply a solver to a set of problems.
#### Return value
* a `DataFrame` where each row is a problem, minus the skipped ones if `prune` is true.
"""
function solve_problems(solver :: F, problems :: Any;
function solve_problems(solver, problems :: Any;
solver_logger :: AbstractLogger=NullLogger(),
skipif :: Function=x->false,
colstats :: Vector{Symbol} = [:name, :nvar, :ncon, :status, :elapsed_time, :objective, :dual_feas, :primal_feas],
info_hdr_override :: Dict{Symbol,String} = Dict{Symbol,String}(),
prune :: Bool=true, kwargs...) where F <: Function
prune :: Bool=true, kwargs...)
solverstr = split(string(solver), ".")[end]

f_counters = collect(fieldnames(Counters))
Expand Down
1 change: 1 addition & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ using LinearAlgebra, Logging, Test
include("dummy_solver.jl")

include("test_auxiliary.jl")
include("test_bmark.jl")
include("test_stats.jl")
include("test_logging.jl")
28 changes: 28 additions & 0 deletions test/test_bmark.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using DataFrames

mutable struct CallableSolver
end

function (solver :: CallableSolver)(nlp :: AbstractNLPModel; kwargs...)
return GenericExecutionStats(:unknown, nlp)
end

function test_bmark()
@testset "Testing bmark" begin
problems = [ADNLPModel(x -> sum(x.^k), ones(2k), name="Sum of power $k") for k = 2:4]
callable = CallableSolver()
stats = solve_problems(dummy_solver, problems)
@test stats isa DataFrame

solve_problems(callable, problems)

solvers = Dict(:dummy => dummy_solver, :callable => callable)
stats = bmark_solvers(solvers, problems)
@test stats isa Dict{Symbol, DataFrame}
for k in keys(solvers)
@test haskey(stats, k)
end
end
end

test_bmark()