Skip to content

Commit ec17e62

Browse files
committed
RFC: Support JuliaFolds interfaces
1 parent fe14a82 commit ec17e62

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed

Project.toml

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@ version = "1.2.16"
55

66
[deps]
77
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
8+
FGenerators = "4fd0377b-cfdc-4941-97f4-8d7ddbb8981e"
89
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
10+
SplittablesBase = "171d559e-b47b-412a-8079-5efa626c420e"
911

1012
[compat]
1113
julia = "1"
1214

1315
[extras]
16+
Folds = "41a02a25-b8f0-4f67-bc48-60067656b558"
17+
SplittablesTesting = "3bda5eb5-c32a-4f64-8618-df3be8968470"
1418
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
1519

1620
[targets]
17-
test = ["Test"]
21+
test = ["Folds", "SplittablesTesting", "Test"]

src/SentinelArrays.jl

+1
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ end
451451

452452
include("chainedvector.jl")
453453
include("missingvector.jl")
454+
include("folds.jl")
454455

455456
include("precompile.jl")
456457
_precompile_()

src/folds.jl

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using FGenerators: @fgenerator, @yield
2+
using SplittablesBase: SplittablesBase
3+
4+
@fgenerator(A::ChainedVector) do
5+
for array in A.arrays
6+
for x in array
7+
@yield x
8+
end
9+
end
10+
end
11+
12+
function SplittablesBase.halve(A::ChainedVector)
13+
chunk = searchsortedfirst(A.inds, length(A) ÷ 2)
14+
left = @view A.arrays[1:chunk]
15+
right = @view A.arrays[chunk+1:end]
16+
return (Iterators.flatten(left), Iterators.flatten(right))
17+
end

test/runtests.jl

+20-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using SentinelArrays, Test, Random
1+
using SentinelArrays, Test, Random, SplittablesTesting, Folds
22

33
@testset "SentinelArrays" begin
44

@@ -580,4 +580,23 @@ deleteat!(c2, Int[])
580580
end
581581
end
582582

583+
unitrange_chainedvectors = map(1:100) do seed
584+
rng = MersenneTwister(seed)
585+
ends = cumsum(rand(rng, 0:9, rand(rng, 1:100)))
586+
starts = pushfirst!(ends[1:end-1] .+ 1, 1)
587+
cv = ChainedVector((:).(starts, ends))
588+
return (label = "seed=$seed", data = cv)
589+
end
590+
591+
@testset "Folds" begin
592+
@testset "$label" for (label, data) in unitrange_chainedvectors
593+
@test Folds.collect(data, SequentialEx()) == 1:length(data)
594+
@test Folds.collect(data) == 1:length(data)
595+
end
596+
end
597+
598+
@testset "SplittablesBase" begin
599+
SplittablesTesting.test_unordered(unitrange_chainedvectors)
600+
end
601+
583602
end

0 commit comments

Comments
 (0)