Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ OhMyThreads.jl Changelog
Unreleased
------------
- ![Enhancement][badge-enhancement] `SerialScheduler` now accepts and ignores arguments passed to it to make switching schedulers easier [#162][gh-pr-162].
- ![Enhancement][badge-enhancement] `tmap`, `tmap!`, `tforeach`, `tmapreduce`, `treducemap`, and `treduce` are now compatible with [ProgressMeter.jl](https://github.com/timholy/ProgressMeter.jl), so you can do e.g. `@showprogress tmap(...)`[#164][gh-pr-164].

Version 0.8.3
------------
Expand Down
6 changes: 5 additions & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,18 @@ TaskLocalValues = "ed4db957-447d-4319-bfb6-7fa9ae7ecf34"

[weakdeps]
Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a"
ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca"

[extensions]
MarkdownExt = "Markdown"
ProgressMeterExt = "ProgressMeter"

[compat]
Aqua = "0.8"
BangBang = "0.3.40, 0.4"
ChunkSplitters = "3.1"
Markdown = "1"
ProgressMeter = "1.10"
ScopedValues = "1.3"
StableTasks = "0.1.5"
TaskLocalValues = "0.1"
Expand All @@ -29,7 +32,8 @@ julia = "1.10"

[extras]
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["Test", "Aqua"]
test = ["Test", "Aqua", "ProgressMeter"]
14 changes: 14 additions & 0 deletions ext/ProgressMeterExt.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module ProgressMeterExt

using OhMyThreads: tmap, tmap!, tforeach, tmapreduce, treducemap, treduce
using ProgressMeter: ProgressMeter, ncalls_map, ncalls_reduce

ProgressMeter.ncalls(::typeof(tmap), ::Function, args...) = ncalls_map(args...)
ProgressMeter.ncalls(::typeof(tmap), ::Function, ::Type, args...) = ncalls_map(args...)
ProgressMeter.ncalls(::typeof(tmap!), ::Function, args...) = ncalls_map(args...)
ProgressMeter.ncalls(::typeof(tforeach), ::Function, args...) = ncalls_map(args...)
ProgressMeter.ncalls(::typeof(tmapreduce), ::Function, ::Function, args...) = ncalls_map(args...)
ProgressMeter.ncalls(::typeof(treducemap), ::Function, ::Function, args...) = ncalls_map(args...)
ProgressMeter.ncalls(::typeof(treduce), ::Function, arg) = ncalls_reduce(arg)

end
49 changes: 49 additions & 0 deletions test/ProgressMeterExt.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using Test, OhMyThreads, ProgressMeter

@testset "ProgressMeterExt" begin
data = rand(1000)

@testset "tmap" begin
map_result = map(sin, data)
@testset for scheduler in (:dynamic, :static, :serial)
@test (@showprogress desc="tmap ($scheduler)" tmap(sin, data; scheduler)) ≈ map_result
end
# greedy requires explicit output type
@test (@showprogress desc="tmap (greedy)" tmap(sin, Float64, data; scheduler = :greedy)) ≈ map_result
end

@testset "tmap!" begin
@testset for scheduler in (:dynamic, :static, :greedy, :serial)
out = similar(data)
@showprogress desc="tmap! ($scheduler)" tmap!(sin, out, data; scheduler)
@test out ≈ map(sin, data)
end
end

@testset "tforeach" begin
@testset for scheduler in (:dynamic, :static, :greedy, :serial)
@test (@showprogress desc="tforeach ($scheduler)" tforeach(sin, data; scheduler)) |> isnothing
end
end

@testset "tmapreduce" begin
mapreduce_result = mapreduce(sin, +, data)
@testset for scheduler in (:dynamic, :static, :greedy, :serial)
@test (@showprogress desc="tmapreduce ($scheduler)" tmapreduce(sin, +, data; scheduler)) ≈ mapreduce_result
end
end

@testset "treducemap" begin
mapreduce_result = mapreduce(sin, +, data)
@testset for scheduler in (:dynamic, :static, :greedy, :serial)
@test (@showprogress desc="treducemap ($scheduler)" treducemap(+, sin, data; scheduler)) ≈ mapreduce_result
end
end

@testset "treduce" begin
reduce_result = reduce(+, data)
@testset for scheduler in (:dynamic, :static, :greedy, :serial)
@test (@showprogress desc="treduce ($scheduler)" treduce(+, data; scheduler)) ≈ reduce_result
end
end
end
2 changes: 2 additions & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -840,3 +840,5 @@ if Threads.nthreads() > 1
end

# Todo way more testing, and easier tests to deal with

include("ProgressMeterExt.jl")
Loading