Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
odow committed Aug 8, 2023
1 parent 524ea5d commit 37469b6
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/sets.jl
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ A short-cut for the [`MOI.Parameter`](@ref) set.
```jldoctest
julia> model = Model();
julia> @variable(model, x in Parameter(2.0))
julia> @variable(model, x in Parameter(2))
x
julia> print(model)
Expand Down
50 changes: 34 additions & 16 deletions src/variables.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1099,47 +1099,65 @@ parameter.
Errors if one does not exist.
See also [`is_parameter`](@ref), [`set_parameter`](@ref).
See also [`is_parameter`](@ref), [`set_parameter_value`](@ref),
[`parameter_value`](@ref).
"""
function ParameterRef(x::GenericVariableRef)
return ParameterRef(owner_model(x), _parameter_index(x), ScalarShape())
return ConstraintRef(owner_model(x), _parameter_index(x), ScalarShape())
end

function _parameter_index(x::GenericVariableRef)
S = MOI.Parameter{value_type(typeof(x))}
return MOI.ConstraintIndex{MOI.VariableIndex,S}(index(x).value)
F, S = MOI.VariableIndex, MOI.Parameter{value_type(typeof(x))}
return MOI.ConstraintIndex{F,S}(index(x).value)
end

"""
is_parameter(x::GenericVariableRef)
Return `true` if `x` is constrained to be a parameter.
See also [`ParameterRef`](@ref), [`set_parameter`](@ref).
See also [`ParameterRef`](@ref), [`set_parameter_value`](@ref),
[`parameter_value`](@ref).
"""
function is_parameter(x::GenericVariableRef)
return _moi_is_parameter(backend(owner_model(x)), x)
end

function _moi_is_parameter(moi_backend, x::GenericVariableRef)
return MOI.is_valid(moi_backend, _parameter_index(x))
return MOI.is_valid(backend(owner_model(x)), _parameter_index(x))::Bool
end

"""
set_parameter(x::GenericVariableRef, value)
set_parameter_value(x::GenericVariableRef, value)
Update the parameter constraint on the variable `x` to `value`.
See also [`ParameterRef`](@ref), [`is_parameter`](@ref).
See also [`ParameterRef`](@ref), [`is_parameter`](@ref),
[`parameter_value`](@ref).
"""
function set_parameter(x::GenericVariableRef, value)
function set_parameter_value(x::GenericVariableRef, value)
T = value_type(typeof(x))
model = owner_model(x)
model.is_model_dirty = true
set = MOI.Parameter(value)
set = MOI.Parameter{T}(convert(T, value))
MOI.set(backend(model), MOI.ConstraintSet(), _parameter_index(x), set)
return
end

"""
parameter_value(x::GenericVariableRef, value)
Update the parameter constraint on the variable `x` to `value`.
See also [`ParameterRef`](@ref), [`is_parameter`](@ref),
[`set_parameter_value`](@ref).
"""
function parameter_value(x::GenericVariableRef)
S = MOI.Parameter{value_type(typeof(x))}
set = MOI.get(
backend(owner_model(x)),
MOI.ConstraintSet(),
_parameter_index(x),
)::S
return set.value
end

"""
start_value(v::GenericVariableRef)
Expand Down Expand Up @@ -1337,7 +1355,7 @@ function add_variable(
var_index = _moi_add_constrained_variable(
backend(model),
variable.scalar_variable,
variable.set,
model_convert(model, variable.set),
name,
T,
)
Expand Down Expand Up @@ -1440,7 +1458,7 @@ function add_variable(
var_indices = _moi_add_constrained_variables(
backend(model),
variable.scalar_variables,
variable.set,
model_convert(model, variable.set),
_vectorize_names(names, variable.shape),
T,
)
Expand Down
16 changes: 16 additions & 0 deletions test/test_variable.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1471,4 +1471,20 @@ function test_variable_dimension_mismatch()
return
end

function test_parameter()
model = Model()
@variable(model, x in Parameter(2))
p = ParameterRef(x)
@test p isa ConstraintRef
F, S = MOI.VariableIndex,MOI.Parameter{Float64}
@test index(p) == MOI.ConstraintIndex{F,S}(index(x).value)
@test is_parameter(x)
@test parameter_value(x) == 2.0
set_parameter_value(x, 3.4)
@test parameter_value(x) == 3.4
set_parameter_value(x, Int32(3))
@test parameter_value(x) === 3.0
return
end

end # module TestVariable

0 comments on commit 37469b6

Please sign in to comment.