@@ -382,11 +382,23 @@ using Test
382382 @test f[:, 1 ] == [1.0 ]
383383 @test f[:, 2 ] == [2.0 , 3.0 ]
384384
385+ # view also respects actual inner array size
386+ @test length (view (f, :, 1 )) == 1
387+ @test length (view (f, :, 2 )) == 2
388+ @test view (f, :, 1 ) == [1.0 ]
389+ @test view (f, :, 2 ) == [2.0 , 3.0 ]
390+ @test collect (view (f, :, 1 )) == f[:, 1 ]
391+ @test collect (view (f, :, 2 )) == f[:, 2 ]
392+
385393 f2 = RaggedVectorOfArray ([[1.0 , 2.0 ], [3.0 ]])
386394 @test length (f2[:, 1 ]) == 2
387395 @test length (f2[:, 2 ]) == 1
388396 @test f2[:, 1 ] == [1.0 , 2.0 ]
389397 @test f2[:, 2 ] == [3.0 ]
398+ @test length (view (f2, :, 1 )) == 2
399+ @test length (view (f2, :, 2 )) == 1
400+ @test view (f2, :, 1 ) == [1.0 , 2.0 ]
401+ @test view (f2, :, 2 ) == [3.0 ]
390402 end
391403
392404 @testset " v3 end indexing with ragged arrays (ported)" begin
@@ -399,28 +411,60 @@ using Test
399411 @test ragged[2 , 2 ] == 4.0
400412 @test ragged[3 , 3 ] == 8.0
401413
414+ # `end` in the last (column) dimension
415+ @test ragged[:, end ] == [6.0 , 7.0 , 8.0 , 9.0 ]
416+ @test ragged[:, (end - 1 ): end ] isa RaggedVectorOfArray
417+ @test length (ragged[:, (end - 1 ): end ]) == 2
418+
419+ # `end` in first dim = max inner array length (4 here)
420+ # So ragged[end, 1] = ragged[4, 1] which is out of bounds for inner array 1
421+ @test_throws BoundsError ragged[end , 1 ] # inner[1] has only 2 elements
422+ @test_throws BoundsError ragged[end , 2 ] # inner[2] has only 3 elements
423+ @test ragged[end , 3 ] == 9.0 # inner[3] has 4 elements, end=4 works
424+
425+ # Range indexing into inner arrays
426+ @test ragged[1 : 2 , 1 ] == [1.0 , 2.0 ]
427+ @test ragged[1 : 3 , 2 ] == [3.0 , 4.0 , 5.0 ]
428+ @test ragged[1 : 4 , 3 ] == [6.0 , 7.0 , 8.0 , 9.0 ]
429+ # 1:end uses max inner length (4), so only works for longest column
430+ @test_throws BoundsError ragged[1 : end , 1 ] # 1:4 but inner[1] has 2
431+ @test_throws BoundsError ragged[1 : end , 2 ] # 1:4 but inner[2] has 3
432+ @test ragged[1 : end , 3 ] == [6.0 , 7.0 , 8.0 , 9.0 ] # 1:4 matches inner[3]
433+
402434 # Colon returns actual arrays
403435 @test ragged[:, 1 ] == [1.0 , 2.0 ]
404436 @test ragged[:, 2 ] == [3.0 , 4.0 , 5.0 ]
405437 @test ragged[:, 3 ] == [6.0 , 7.0 , 8.0 , 9.0 ]
406438
407- # Subset selection
408- r_sub = ragged[:, [2 , 3 ]]
409- @test r_sub isa RaggedVectorOfArray
410- @test r_sub[:, 1 ] == [3.0 , 4.0 , 5.0 ]
411- @test r_sub[:, 2 ] == [6.0 , 7.0 , 8.0 , 9.0 ]
439+ # Subset selection via range
440+ @test ragged[:, 2 : end ] isa RaggedVectorOfArray
441+ @test ragged[:, 2 : end ][:, 1 ] == [3.0 , 4.0 , 5.0 ]
412442
413443 ragged2 = RaggedVectorOfArray ([[1.0 , 2.0 , 3.0 , 4.0 ], [5.0 , 6.0 ], [7.0 , 8.0 , 9.0 ]])
414- @test ragged2[ 4 , 1 ] = = 4.0
415- @test ragged2[2 , 2 ] == 6.0
416- @test ragged2[3 , 3 ] == 9.0
417- @test ragged2[3 , 1 ] == 3.0
418- @test ragged2[1 , 2 ] == 5.0
419- @test ragged2[2 , 3 ] == 8.0
420- @test ragged2[2 , 1 ] == 2.0
444+ # end in first dim = max length = 4
445+ @test ragged2[end , 1 ] == 4.0 # inner[1] has 4 elements
446+ @test_throws BoundsError ragged2[end , 2 ] # inner[2] has only 2
447+ @test_throws BoundsError ragged2[end , 3 ] # inner[3] has only 3
448+ @test ragged2[end - 1 , 1 ] == 3.0 # end-1 = 3
449+ @test_throws BoundsError ragged2[end - 1 , 2 ] # 3 > length([5,6])
450+ @test ragged2[end - 1 , 3 ] == 9.0 # 3 <= length([7,8,9])
421451 @test ragged2[:, 1 ] == [1.0 , 2.0 , 3.0 , 4.0 ]
422452 @test ragged2[:, 2 ] == [5.0 , 6.0 ]
423453 @test ragged2[:, 3 ] == [7.0 , 8.0 , 9.0 ]
454+ # Explicit range indexing (not using end)
455+ @test ragged2[1 : 4 , 1 ] == [1.0 , 2.0 , 3.0 , 4.0 ]
456+ @test ragged2[1 : 2 , 2 ] == [5.0 , 6.0 ]
457+ @test ragged2[1 : 3 , 3 ] == [7.0 , 8.0 , 9.0 ]
458+ @test ragged2[2 : 4 , 1 ] == [2.0 , 3.0 , 4.0 ]
459+ @test ragged2[2 : 2 , 2 ] == [6.0 ]
460+ @test ragged2[2 : 3 , 3 ] == [8.0 , 9.0 ]
461+ # end in last dim works fine
462+ @test ragged2[:, end ] == [7.0 , 8.0 , 9.0 ]
463+ @test ragged2[:, 2 : end ] isa RaggedVectorOfArray
464+ # end in first dim = 4 (max), 1:(end-1) = 1:3
465+ @test ragged2[1 : (end - 1 ), 1 ] == [1.0 , 2.0 , 3.0 ]
466+ @test_throws BoundsError ragged2[1 : (end - 1 ), 2 ] # 1:3 but inner[2] has 2
467+ @test ragged2[1 : (end - 1 ), 3 ] == [7.0 , 8.0 , 9.0 ] # 1:3 matches inner[3]
424468 end
425469
426470 @testset " v3 push! making array ragged (ported)" begin
0 commit comments