Skip to content

Commit

Permalink
test: Adding testing for new function
Browse files Browse the repository at this point in the history
  • Loading branch information
pesap committed Aug 27, 2024
1 parent 096af58 commit 18ff011
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/PowerSystems.jl
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,9 @@ export get_compression_settings
export CompressionSettings
export CompressionTypes

# Parsing functions
export create_poly_cost

#export make_time_series
export get_bus_numbers
export get_name
Expand Down
48 changes: 48 additions & 0 deletions test/test_power_system_table_data.jl
Original file line number Diff line number Diff line change
Expand Up @@ -181,3 +181,51 @@ end
g = get_components(ThermalStandard, sys)
@test get_variable.(get_operation_cost.(g)) == get_variable.(get_operation_cost.(g))
end

@testset "Test create_poly_cost function" begin

cost_colnames = ["heat_rate_a0", "heat_rate_a1", "heat_rate_a2"]

# Coefficients for a CC using natura gas
a2 = -0.000531607
a1 = 0.060554675
a0 = 8.951100118

# First test that return quadratic if all coefficients are provided.
# We convert the coefficients to string to mimic parsing from csv
example_generator = (name="test-gen", heat_rate_a0=string(a0), heat_rate_a1=string(a1), heat_rate_a2=string(a2))
cost_curve, fixed_cost = create_poly_cost(example_generator, cost_colnames)
@assert cost_curve isa QuadraticCurve
@assert isapprox(get_quadratic_term(cost_curve), a2, atol=0.01)
@assert isapprox(get_proportional_term(cost_curve), a1, atol=0.01)
@assert isapprox(get_constant_term(cost_curve), a0, atol=0.01)

# Test return linear with both proportional and constant term
example_generator = (name="test-gen", heat_rate_a0=string(a0), heat_rate_a1=string(a1), heat_rate_a2=nothing)
cost_curve, fixed_cost = create_poly_cost(example_generator, cost_colnames)
@assert cost_curve isa LinearCurve
@assert isapprox(get_proportional_term(cost_curve), a1, atol=0.01)
@assert isapprox(get_constant_term(cost_curve), a0, atol=0.01)

# Test return linear with just proportional term
example_generator = (name="test-gen", heat_rate_a0=nothing, heat_rate_a1=string(a1), heat_rate_a2=nothing)
cost_curve, fixed_cost = create_poly_cost(example_generator, cost_colnames)
@assert cost_curve isa LinearCurve
@assert isapprox(get_proportional_term(cost_curve), a1, atol=0.01)

# Test raises error if a2 is passed but other coefficients are nothing
example_generator = (name="test-gen", heat_rate_a0=nothing, heat_rate_a1=nothing, heat_rate_a2=string(a2))
@test_throws IS.DataFormatError create_poly_cost(example_generator, cost_colnames)
example_generator = (name="test-gen", heat_rate_a0=nothing, heat_rate_a1=string(a1), heat_rate_a2=string(a2))
@test_throws IS.DataFormatError create_poly_cost(example_generator, cost_colnames)
example_generator = (name="test-gen", heat_rate_a0=string(a0), heat_rate_a1=nothing, heat_rate_a2=string(a2))
@test_throws IS.DataFormatError create_poly_cost(example_generator, cost_colnames)

# Test that it works with zero proportional and constant term
example_generator = (name="test-gen", heat_rate_a0=string(0.0), heat_rate_a1=string(0.0), heat_rate_a2=string(a2))
cost_curve, fixed_cost = create_poly_cost(example_generator, cost_colnames)
@assert cost_curve isa QuadraticCurve
@assert isapprox(get_quadratic_term(cost_curve), a2, atol=0.01)
@assert isapprox(get_proportional_term(cost_curve), 0.0, atol=0.01)
@assert isapprox(get_constant_term(cost_curve), 0.0, atol=0.01)
end

0 comments on commit 18ff011

Please sign in to comment.