Skip to content

Commit 9883539

Browse files
committed
bug fix in hcat!
1 parent 733780c commit 9883539

File tree

2 files changed

+62
-32
lines changed

2 files changed

+62
-32
lines changed

src/dataset/cat.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ function hcat!(ds1::Dataset, ds2::AbstractDataset;
1313
for i in 1:length(u)
1414
ds1[!, u[i]] = ds2[:, i]
1515
end
16+
for i in 1:length(u)
17+
setformat!(ds1, u[i]=>getformat(ds2, i))
18+
end
1619
_modified(_attributes(ds1))
1720
return ds1
1821
end

test/utils.jl

Lines changed: 59 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
using Test, InMemoryDatasets, PooledArrays, Random, CategoricalArrays
22

3-
@testset "make_unique - from DataFrames" begin
3+
@testset "make_unique - from DataFrames" begin
44
@test IMD.make_unique([:x, :x, :x_1, :x2], makeunique=true) == [:x, :x_2, :x_1, :x2]
55
@test_throws ArgumentError IMD.make_unique([:x, :x, :x_1, :x2], makeunique=false)
66
@test IMD.make_unique([:x, :x_1, :x2], makeunique=false) == [:x, :x_1, :x2]
7-
@test IMD.make_unique([:x, :x, :x_3, :x, :y, :x, :y, :x_1], makeunique = true) == [:x, :x_2, :x_3, :x_4, :y, :x_5, :y_1, :x_1]
7+
@test IMD.make_unique([:x, :x, :x_3, :x, :y, :x, :y, :x_1], makeunique=true) == [:x, :x_2, :x_3, :x_4, :y, :x_5, :y_1, :x_1]
88
end
99

1010
@testset "repeat count- from DataFrames" begin
1111
ds = Dataset(a=1:2, b=3:4)
1212
ref = Dataset(a=repeat(1:2, 2),
13-
b=repeat(3:4, 2))
13+
b=repeat(3:4, 2))
1414
@test repeat(ds, 2) == ref
1515
@test repeat(view(ds, 1:2, :), 2) == ref
1616

@@ -21,11 +21,11 @@ end
2121
@testset "repeat inner_outer- from DataFrames" begin
2222
ds = Dataset(a=1:2, b=3:4)
2323
ref = Dataset(a=repeat(1:2, inner=2, outer=3),
24-
b=repeat(3:4, inner=2, outer=3))
24+
b=repeat(3:4, inner=2, outer=3))
2525
@test repeat(ds, inner=2, outer=3) == ref
2626
@test repeat(view(ds, 1:2, :), inner=2, outer=3) == ref
2727

28-
@test_throws ArgumentError repeat(ds, inner=2, outer=0)
28+
@test_throws ArgumentError repeat(ds, inner=2, outer=0)
2929
@test_throws ArgumentError repeat(ds, inner=0, outer=3)
3030
@test_throws ArgumentError repeat(ds, inner=2, outer=false)
3131
@test_throws ArgumentError repeat(ds, inner=false, outer=3)
@@ -36,7 +36,7 @@ end
3636
@testset "repeat! count- from DataFrames" begin
3737
ds = Dataset(a=1:2, b=3:4)
3838
ref = Dataset(a=repeat(1:2, 2),
39-
b=repeat(3:4, 2))
39+
b=repeat(3:4, 2))
4040
a = ds.a
4141
b = ds.b
4242
repeat!(ds, 2)
@@ -60,10 +60,10 @@ end
6060
@testset "repeat! inner_outer- from DataFrames" begin
6161
ds = Dataset(a=1:2, b=3:4)
6262
ref = Dataset(a=repeat(1:2, inner=2, outer=3),
63-
b=repeat(3:4, inner=2, outer=3))
63+
b=repeat(3:4, inner=2, outer=3))
6464
a = ds.a
6565
b = ds.b
66-
repeat!(ds, inner = 2, outer = 3)
66+
repeat!(ds, inner=2, outer=3)
6767
@test ds == ref
6868
@test a == 1:2
6969
@test b == 3:4
@@ -77,11 +77,11 @@ end
7777
end
7878

7979
ds = Dataset(a=1:2, b=3:4)
80-
@test_throws ArgumentError repeat(ds, inner = 2, outer = -1)
81-
@test_throws ArgumentError repeat(ds, inner = -1, outer = 3)
80+
@test_throws ArgumentError repeat(ds, inner=2, outer=-1)
81+
@test_throws ArgumentError repeat(ds, inner=-1, outer=3)
8282
@test ds == Dataset(a=1:2, b=3:4)
8383

84-
@test_throws MethodError repeat!(view(ds, 1:2, :), inner = 2, outer = 3)
84+
@test_throws MethodError repeat!(view(ds, 1:2, :), inner=2, outer=3)
8585
end
8686

8787
@testset "funname- from DataFrames" begin
@@ -90,27 +90,54 @@ end
9090
end
9191

9292
@testset "repeat - passing `freq`" begin
93-
ds = Dataset(x1 = [1,2, missing, 0], x2 = PooledArray([1,3,1,2]), x3 = [1.2,1.2,1.1,-10.0], x4 = [2,1,1,1])
94-
@test repeat(ds, freq = 2) == ds[[1,2,2,2,3,4,4], :]
95-
@test repeat(ds, freq = :x2) == ds[[1,2,2,2,3,4,4], :]
96-
@test repeat(ds, freq = :x4) == ds[[1,1,2,3,4], :]
97-
@test repeat(ds, freq = ds[!, :x4]) == ds[[1,1,2,3,4], :]
98-
@test repeat(view(ds, :, :), freq = :x4) == ds[[1,1,2,3,4], :]
99-
@test repeat(view(ds, :, :), freq = 4) == ds[[1,1,2,3,4], :]
100-
@test_throws ArgumentError repeat(ds, freq = :x1)
101-
@test_throws ArgumentError repeat(ds, freq = 3)
93+
ds = Dataset(x1=[1, 2, missing, 0], x2=PooledArray([1, 3, 1, 2]), x3=[1.2, 1.2, 1.1, -10.0], x4=[2, 1, 1, 1])
94+
@test repeat(ds, freq=2) == ds[[1, 2, 2, 2, 3, 4, 4], :]
95+
@test repeat(ds, freq=:x2) == ds[[1, 2, 2, 2, 3, 4, 4], :]
96+
@test repeat(ds, freq=:x4) == ds[[1, 1, 2, 3, 4], :]
97+
@test repeat(ds, freq=ds[!, :x4]) == ds[[1, 1, 2, 3, 4], :]
98+
@test repeat(view(ds, :, :), freq=:x4) == ds[[1, 1, 2, 3, 4], :]
99+
@test repeat(view(ds, :, :), freq=4) == ds[[1, 1, 2, 3, 4], :]
100+
@test_throws ArgumentError repeat(ds, freq=:x1)
101+
@test_throws ArgumentError repeat(ds, freq=3)
102102

103103
repeat!(ds, 1000)
104-
@test repeat(ds, freq = 2) == ds[repeat([1,2,2,2,3,4,4], 1000), :]
105-
@test repeat(ds, freq = :x2) == ds[repeat([1,2,2,2,3,4,4], 1000), :]
106-
@test repeat(ds, freq = :x4) == ds[repeat([1,1,2,3,4],1000), :]
107-
@test repeat(ds, freq = ds[!, :x4]) == ds[repeat([1,1,2,3,4],1000), :]
108-
109-
ds = Dataset(a = 0:2, b = 2:4)
110-
@test repeat(ds, freq = :a) == Dataset(a = [1,2,2], b = [3,4,4])
111-
@test repeat(ds, freq = [2,0,2]) == Dataset(a = [0,0,2,2], b=[2,2,4,4])
112-
113-
@test repeat(ds, freq = [1000, 1000, 0]) == Dataset(a = [fill(0,1000);fill(1, 1000)], b=[fill(2,1000);fill(3, 1000)])
114-
@test repeat(view(ds,[1,2,3], [1,2]), freq = [1000, 1000, 0]) == Dataset(a = [fill(0,1000);fill(1, 1000)], b=[fill(2,1000);fill(3, 1000)])
115-
@test repeat(view(ds,[1,2,3], [1,2]), freq = [1000, 1000, 0], view = true) == Dataset(a = [fill(0,1000);fill(1, 1000)], b=[fill(2,1000);fill(3, 1000)])
104+
@test repeat(ds, freq=2) == ds[repeat([1, 2, 2, 2, 3, 4, 4], 1000), :]
105+
@test repeat(ds, freq=:x2) == ds[repeat([1, 2, 2, 2, 3, 4, 4], 1000), :]
106+
@test repeat(ds, freq=:x4) == ds[repeat([1, 1, 2, 3, 4], 1000), :]
107+
@test repeat(ds, freq=ds[!, :x4]) == ds[repeat([1, 1, 2, 3, 4], 1000), :]
108+
109+
ds = Dataset(a=0:2, b=2:4)
110+
@test repeat(ds, freq=:a) == Dataset(a=[1, 2, 2], b=[3, 4, 4])
111+
@test repeat(ds, freq=[2, 0, 2]) == Dataset(a=[0, 0, 2, 2], b=[2, 2, 4, 4])
112+
113+
@test repeat(ds, freq=[1000, 1000, 0]) == Dataset(a=[fill(0, 1000); fill(1, 1000)], b=[fill(2, 1000); fill(3, 1000)])
114+
@test repeat(view(ds, [1, 2, 3], [1, 2]), freq=[1000, 1000, 0]) == Dataset(a=[fill(0, 1000); fill(1, 1000)], b=[fill(2, 1000); fill(3, 1000)])
115+
@test repeat(view(ds, [1, 2, 3], [1, 2]), freq=[1000, 1000, 0], view=true) == Dataset(a=[fill(0, 1000); fill(1, 1000)], b=[fill(2, 1000); fill(3, 1000)])
116116
end
117+
118+
@testset "IMD.hcat! with formats" begin
119+
ds = Dataset(x=[1, 2, 3], x2=[1, 8, -9])
120+
ds2 = Dataset(y=[1, 1, 1], y2=[1.4, -5, 2.4])
121+
setformat!(ds, 2 => isodd)
122+
setformat!(ds2, 2 => abs)
123+
resds = IMD.hcat(ds, ds2)
124+
@test resds == Dataset(x=[1, 2, 3], x2=[1, 8, -9], y=[1, 1, 1], y2=[1.4, -5, 2.4])
125+
@test getformat(resds, 1) == identity
126+
@test getformat(resds, 2) == isodd
127+
@test getformat(resds, 3) == identity
128+
@test getformat(resds, 4) == abs
129+
130+
resds = IMD.hcat(ds, view(ds2, :, [2, 1]))
131+
@test resds == Dataset(x=[1, 2, 3], x2=[1, 8, -9], y2=[1.4, -5, 2.4], y=[1, 1, 1])
132+
@test getformat(resds, 1) == identity
133+
@test getformat(resds, 2) == isodd
134+
@test getformat(resds, 4) == identity
135+
@test getformat(resds, 3) == abs
136+
137+
IMD.hcat!(ds, view(ds2, :, [2, 1]))
138+
@test ds == Dataset(x=[1, 2, 3], x2=[1, 8, -9], y2=[1.4, -5, 2.4], y=[1, 1, 1])
139+
@test getformat(ds, 1) == identity
140+
@test getformat(ds, 2) == isodd
141+
@test getformat(ds, 4) == identity
142+
@test getformat(ds, 3) == abs
143+
end

0 commit comments

Comments
 (0)