diff --git a/src/ACME.jl b/src/ACME.jl index ffbec765..d78270d5 100644 --- a/src/ACME.jl +++ b/src/ACME.jl @@ -1,4 +1,4 @@ -# Copyright 2015, 2016, 2017, 2018, 2019, 2020, 2021 Martin Holters +# Copyright 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2023 Martin Holters # See accompanying license file. module ACME @@ -97,6 +97,11 @@ struct Element end end +Base.:(==)(e1::Element, e2::Element) = + all(f -> (getfield(e1, f) == getfield(e2, f))::Bool, fieldnames(Element)) +Base.hash(e::Element, h::UInt) = + foldl((h, f) -> hash(getfield(e, f), h)::UInt, fieldnames(Element); init=h) + for (n,m) in Dict(:nb => :mv, :nx => :mx, :nq => :mq, :nu => :mu) @eval ($n)(e::Element) = size(e.$m, 2) end diff --git a/test/runtests.jl b/test/runtests.jl index 169f1447..6f33609f 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,4 +1,4 @@ -# Copyright 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Martin Holters +# Copyright 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Martin Holters # See accompanying license file. include("checklic.jl") @@ -40,6 +40,16 @@ end @test !ACME.setlhs!(solver, zeros(3,3)) end +@testset "Element equality" begin + @test resistor(1e3) == resistor(1e3) + @test hash(resistor(1e3)) == hash(resistor(1e3)) + @test resistor(1e3) != resistor(2.2e3) + @test resistor(1) != voltagesource(1) + @test bjt(:npn) == bjt(:npn) + @test hash(bjt(:npn)) == hash(bjt(:npn)) + @test bjt(:npn) != bjt(:pnp) +end + @testset "simple circuits" begin @testset "empty circuit" begin circ = @circuit begin end