From 70c1c8be6a87551036f7b7a4f79a694326da6010 Mon Sep 17 00:00:00 2001 From: Wiktor Phillips Date: Mon, 1 Aug 2022 23:32:43 -0400 Subject: [PATCH] hashing for discrete cb conditions --- src/systems/callbacks.jl | 2 +- test/funcaffect.jl | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/systems/callbacks.jl b/src/systems/callbacks.jl index acb311f168..7b4e59913a 100644 --- a/src/systems/callbacks.jl +++ b/src/systems/callbacks.jl @@ -201,7 +201,7 @@ function Base.:(==)(e1::SymbolicDiscreteCallback, e2::SymbolicDiscreteCallback) isequal(e1.condition, e2.condition) && isequal(e1.affects, e2.affects) end function Base.hash(cb::SymbolicDiscreteCallback, s::UInt) - s = foldr(hash, cb.condition, init = s) + s = hash(cb.condition, s) cb.affects isa AbstractVector ? foldr(hash, cb.affects, init = s) : hash(cb.affects, s) end diff --git a/test/funcaffect.jl b/test/funcaffect.jl index 6de1d3d5d3..988b779619 100644 --- a/test/funcaffect.jl +++ b/test/funcaffect.jl @@ -16,13 +16,14 @@ i4 = findfirst(==(4.0), sol[:t]) @test sol.u[i4 + 1][1] > 10.0 # callback -cb = ModelingToolkit.SymbolicDiscreteCallback([t ~ 0], +cb = ModelingToolkit.SymbolicDiscreteCallback(t == 0, (f = affect1!, sts = [], pars = [], ctx = [1])) -cb1 = ModelingToolkit.SymbolicDiscreteCallback([t ~ 0], (affect1!, [], [], [1])) +cb1 = ModelingToolkit.SymbolicDiscreteCallback(t == 0, (affect1!, [], [], [1])) @test ModelingToolkit.affects(cb) isa ModelingToolkit.FunctionalAffect @test cb == cb1 @test ModelingToolkit.SymbolicDiscreteCallback(cb) === cb # passthrough +@test hash(cb) == hash(cb1) cb = ModelingToolkit.SymbolicContinuousCallback([t ~ 0], (f = affect1!, sts = [], pars = [], @@ -30,6 +31,7 @@ cb = ModelingToolkit.SymbolicContinuousCallback([t ~ 0], cb1 = ModelingToolkit.SymbolicContinuousCallback([t ~ 0], (affect1!, [], [], [1])) @test cb == cb1 @test ModelingToolkit.SymbolicContinuousCallback(cb) === cb # passthrough +@test hash(cb) == hash(cb1) # named tuple sys1 = ODESystem(eqs, t, [u], [], name = :sys,