diff --git a/Project.toml b/Project.toml index 3be0269..a0c5c9a 100644 --- a/Project.toml +++ b/Project.toml @@ -17,11 +17,13 @@ Unitful = "1" julia = "1" [extras] +Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" +JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" NBInclude = "0db19996-df87-5ea3-a455-e3a50d440464" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Documenter", "NBInclude", "Printf", "Test", "SafeTestsets"] +test = ["Documenter", "NBInclude", "Printf", "Test", "SafeTestsets", "Aqua"] diff --git a/src/DiscreteEvents.jl b/src/DiscreteEvents.jl index dcdd44c..b353347 100644 --- a/src/DiscreteEvents.jl +++ b/src/DiscreteEvents.jl @@ -29,7 +29,8 @@ module DiscreteEvents "Gives the package version." const version = v"0.3.5" -using Unitful, Random, DataStructures, Logging, .Threads, Distributions +using Unitful, Random, DataStructures, Logging, .Threads +import Distributions: Distribution import Unitful: FreeUnits, Time include("types.jl") @@ -48,7 +49,7 @@ include("macros.jl") export Clock, RTClock, setUnit!, 𝐶, Action, Timing, at, after, every, before, until, - tau, sample_time!, fun, event!, periodic!, register!, + tau, sample_time!, fun, event!, periodic!, incr!, run!, stop!, resume!, sync!, resetClock!, Prc, process!, interrupt!, delay!, wait!, now!, createRTClock, stopRTClock, diff --git a/src/clock.jl b/src/clock.jl index 7ca3e7f..2e7753e 100644 --- a/src/clock.jl +++ b/src/clock.jl @@ -327,7 +327,7 @@ function step!(clk::Clock, ::Idle, σ::Run) clk.ac[ix].load += token.t break elseif token isa Forward - assign(clk, token.ev, token.id) + _assign(clk, token.ev, token.id) elseif token isa Error return nothing else diff --git a/src/threads.jl b/src/threads.jl index 05dd7a5..8426651 100644 --- a/src/threads.jl +++ b/src/threads.jl @@ -130,7 +130,7 @@ function fork!(master::Clock) put!(master.ac[i].forth, Startup(Ref(master))) # send pointer and id end else - println(stderr, "clock already has $(length(clk.ac)) active clocks!") + println(stderr, "clock already has $(length(master.ac)) active clocks!") end else println(stderr, "no parallel threads available!") diff --git a/src/types.jl b/src/types.jl index 2c52f44..ace6d0e 100644 --- a/src/types.jl +++ b/src/types.jl @@ -136,7 +136,7 @@ mutable struct Prc arg::Tuple kw::Base.Iterators.Pairs - Prc( id, f::Function, arg...; kw...) = new(id, nothing, nothing, f, arg, kw) + Prc(id, f::Function, arg...; kw...) = new(id, nothing, nothing, f, arg, kw) Prc(f::Function, arg...; kw...) = new(1, nothing, nothing, f, arg, kw) end diff --git a/test/runtests.jl b/test/runtests.jl index cb35eeb..48358ac 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -28,4 +28,11 @@ end @safetestset "examples" begin include("test_examples.jl") end +# if VERSION ≥ v"1.8" +# @safetestset "Aqua" begin include("test_aqua.jl") end +# end +# if get(ENV,"JET_TEST","") == "true" +# @safetestset "JET" begin include("test_jet.jl") end +# end + println(".... finished testing DiscreteEvents.jl ....") diff --git a/test/test_aqua.jl b/test/test_aqua.jl new file mode 100644 index 0000000..a04569d --- /dev/null +++ b/test/test_aqua.jl @@ -0,0 +1,7 @@ +using DiscreteEvents +using Aqua + +Aqua.test_all(DiscreteEvents; + ambiguities = false +) +Aqua.test_ambiguities(DiscreteEvents) \ No newline at end of file diff --git a/test/test_jet.jl b/test/test_jet.jl new file mode 100644 index 0000000..6910fc6 --- /dev/null +++ b/test/test_jet.jl @@ -0,0 +1,27 @@ +using DiscreteEvents +using JET +using Test + +using JET: ReportPass, BasicPass, InferenceErrorReport, UncaughtExceptionReport + +# Custom report pass that ignores `UncaughtExceptionReport` +# Too coarse currently, but it serves to ignore the various +# "may throw" messages for runtime errors we raise on purpose +# (mostly on malformed user input) +struct MayThrowIsOk <: ReportPass end + +# ignores `UncaughtExceptionReport` analyzed by `JETAnalyzer` +(::MayThrowIsOk)(::Type{UncaughtExceptionReport}, @nospecialize(_...)) = return + +# forward to `BasicPass` for everything else +function (::MayThrowIsOk)(report_type::Type{<:InferenceErrorReport}, @nospecialize(args...)) + BasicPass()(report_type, args...) +end + +@testset "JET checks" begin + rep = report_package("DiscreteEvents"; + report_pass=MayThrowIsOk(), + ) + @show rep + @test_broken length(JET.get_reports(rep)) == 0 +end \ No newline at end of file