@@ -482,36 +482,54 @@ end
482482 ref = Dataset (a = [1 , 1 , 2 , 2 ], b = [1 , 2 , 3 , 4 ])
483483 @test flatten (ds_vec, :b ) == flatten (ds_tup, :b ) == ref
484484 @test flatten (ds_vec, " b" ) == flatten (ds_tup, " b" ) == ref
485+ @test flatten! (copy (ds_vec), :b ) == flatten (ds_tup, :b ) == ref
486+ @test flatten! (copy (ds_vec), " b" ) == flatten (ds_tup, " b" ) == ref
485487 ds_mixed_types = Dataset (a = [1 , 2 ], b = [[1 , 2 ], [" x" , " y" ]])
486488 ref_mixed_types = Dataset (a = [1 , 1 , 2 , 2 ], b = [1 , 2 , " x" , " y" ])
487489 @test flatten (ds_mixed_types, :b ) == ref_mixed_types
490+ @test flatten! (copy (ds_mixed_types), :b ) == ref_mixed_types
491+
488492 ds_three = Dataset (a = [1 , 2 , 3 ], b = [[1 , 2 ], [10 , 20 ], [100 , 200 , 300 ]])
489493 ref_three = Dataset (a = [1 , 1 , 2 , 2 , 3 , 3 , 3 ], b = [1 , 2 , 10 , 20 , 100 , 200 , 300 ])
490494 @test flatten (ds_three, :b ) == ref_three
491495 @test flatten (ds_three, " b" ) == ref_three
496+ @test flatten! (copy (ds_three), :b ) == ref_three
497+ @test flatten! (copy (ds_three), " b" ) == ref_three
492498 ds_gen = Dataset (a = [1 , 2 ], b = [(i for i in 1 : 5 ), (i for i in 6 : 10 )])
493499 ref_gen = Dataset (a = [fill (1 , 5 ); fill (2 , 5 )], b = collect (1 : 10 ))
494500 @test flatten (ds_gen, :b ) == ref_gen
495501 @test flatten (ds_gen, " b" ) == ref_gen
502+ @test flatten! (copy (ds_gen), :b ) == ref_gen
503+ @test flatten! (copy (ds_gen), " b" ) == ref_gen
496504 ds_miss = Dataset (a = [1 , 2 ], b = [Union{Missing, Int}[1 , 2 ], Union{Missing, Int}[3 , 4 ]])
497505 ref = Dataset (a = [1 , 1 , 2 , 2 ], b = [1 , 2 , 3 , 4 ])
498506 @test flatten (ds_miss, :b ) == ref
499507 @test flatten (ds_miss, " b" ) == ref
508+ @test flatten! (copy (ds_miss), :b ) == ref
509+ @test flatten! (copy (ds_miss), " b" ) == ref
500510 v1 = [[1 , 2 ], [3 , 4 ]]
501511 v2 = [[5 , 6 ], [7 , 8 ]]
502512 v = [v1, v2]
503513 ds_vec_vec = Dataset (a = [1 , 2 ], b = v)
504514 ref_vec_vec = Dataset (a = [1 , 1 , 2 , 2 ], b = [v1 ; v2])
505515 @test flatten (ds_vec_vec, :b ) == ref_vec_vec
506516 @test flatten (ds_vec_vec, " b" ) == ref_vec_vec
517+ @test flatten! (copy (ds_vec_vec), :b ) == ref_vec_vec
518+ @test flatten! (copy (ds_vec_vec), " b" ) == ref_vec_vec
507519 ds_cat = Dataset (a = [1 , 2 ], b = [CategoricalArray ([1 , 2 ]), CategoricalArray ([1 , 2 ])])
508520 ds_flat_cat = flatten (ds_cat, :b )
509521 ref_cat = Dataset (a = [1 , 1 , 2 , 2 ], b = [1 , 2 , 1 , 2 ])
510522 @test ds_flat_cat == ref_cat
511523 @test ds_flat_cat. b. val isa CategoricalArray
524+ flatten! (ds_cat, :b )
525+ ref_cat = Dataset (a = [1 , 1 , 2 , 2 ], b = [1 , 2 , 1 , 2 ])
526+ @test ds_cat == ref_cat
527+ @test ds_cat. b. val isa CategoricalArray
512528
513529 ds = Dataset (a = [1 , 2 ], b = [[1 , 2 ], [3 , 4 ]], c = [[5 , 6 ], [7 , 8 ]])
514530 @test flatten (ds, []) == ds
531+ @test flatten! (copy (ds), []) == ds
532+
515533 ref = Dataset (a = [1 , 1 , 2 , 2 ], b = [1 , 2 , 3 , 4 ], c = [5 , 6 , 7 , 8 ])
516534 @test flatten (ds, [:b , :c ]) == ref
517535 @test flatten (ds, [:c , :b ]) == ref
@@ -521,16 +539,46 @@ end
521539 @test flatten (ds, r" [bc]" ) == ref
522540 @test flatten (ds, Not (:a )) == ref
523541 @test flatten (ds, Between (:b , :c )) == ref
542+
543+ @test flatten! (copy (ds), [:b , :c ]) == ref
544+ @test flatten! (copy (ds), [:c , :b ]) == ref
545+ @test flatten! (copy (ds), [" b" , " c" ]) == ref
546+ @test flatten! (copy (ds), [" c" , " b" ]) == ref
547+ @test flatten! (copy (ds), 2 : 3 ) == ref
548+ @test flatten! (copy (ds), r" [bc]" ) == ref
549+ @test flatten! (copy (ds), Not (:a )) == ref
550+ @test flatten! (copy (ds), Between (:b , :c )) == ref
551+
524552 ds_allcols = Dataset (b = [[1 , 2 ], [3 , 4 ]], c = [[5 , 6 ], [7 , 8 ]])
525553 ref_allcols = Dataset (b = [1 , 2 , 3 , 4 ], c = [5 , 6 , 7 , 8 ])
526554 @test flatten (ds_allcols, :) == ref_allcols
555+ @test flatten! (copy (ds_allcols), :) == ref_allcols
527556 ds_bad = Dataset (a = [1 , 2 ], b = [[1 , 2 ], [3 , 4 ]], c = [[5 , 6 ], [7 ]])
528557 @test_throws ArgumentError flatten (ds_bad, [:b , :c ])
558+ @test_throws ArgumentError flatten! (copy (ds_bad), [:b , :c ])
529559 ds_vec = Dataset (a = [1 , missing ], b = [[1 , missing ], [3 , 4 ]])
530560 ds_tup = Dataset (a = [1 , missing ], b = [(1 , missing ), (3 , 4 )])
531561 ref = Dataset (a = [1 , 1 , missing , missing ], b = [1 , missing , 3 , 4 ])
532562 @test flatten (ds_vec, :b ) == flatten (ds_tup, :b ) == ref
533563 @test flatten (ds_vec, " b" ) == flatten (ds_tup, " b" ) == ref
564+ @test flatten! (copy (ds_vec), :b ) == flatten (ds_tup, :b ) == ref
565+ @test flatten! (copy (ds_vec), " b" ) == flatten (ds_tup, " b" ) == ref
566+
567+ ds_cat = Dataset (a = [1 , 2 ], b = [PooledArray ([1 , 2 ]), PooledArray ([1 , 2 ])])
568+ repeat! (ds_cat, 1000 )
569+ ds_flat_cat = flatten (ds_cat, :b )
570+ ref_cat = Dataset (a = repeat ([1 , 1 , 2 , 2 ],1000 ), b = repeat ([1 , 2 , 1 , 2 ],1000 ))
571+ @test ds_flat_cat == ref_cat
572+ flatten! (ds_cat, :b )
573+ @test ds_cat == ref_cat
574+
575+ ds_cat = Dataset (a = [1 , 2 ], b = [CategoricalArray ([1 , 2 ]), CategoricalArray ([1 , 2 ])])
576+ repeat! (ds_cat, 1000 )
577+ ds_flat_cat = flatten (ds_cat, :b )
578+ ref_cat = Dataset (a = repeat ([1 , 1 , 2 , 2 ],1000 ), b = repeat ([1 , 2 , 1 , 2 ],1000 ))
579+ @test ds_flat_cat == ref_cat
580+ flatten! (ds_cat, :b )
581+ @test ds_cat == ref_cat
534582end
535583
536584@testset " transpose - views" begin
0 commit comments