41
41
end
42
42
43
43
@testset " IdOffsetRange" begin
44
-
44
+
45
45
function check_indexed_by (r, rindx)
46
46
for i in rindx
47
47
r[i]
@@ -1403,6 +1403,7 @@ end
1403
1403
Base. parent (x:: PointlessWrapper ) = x. parent
1404
1404
Base. size (x:: PointlessWrapper ) = size (parent (x))
1405
1405
Base. axes (x:: PointlessWrapper ) = axes (parent (x))
1406
+ Base. getindex (x:: PointlessWrapper , i... ) = x. parent[i... ]
1406
1407
1407
1408
@testset " no offset view" begin
1408
1409
# OffsetArray fallback
@@ -1415,21 +1416,56 @@ Base.axes(x::PointlessWrapper) = axes(parent(x))
1415
1416
@inferred no_offset_view (O2)
1416
1417
1417
1418
P = PointlessWrapper (A)
1418
- @test no_offset_view (P) ≡ P
1419
+ @test @inferred (no_offset_view (P)) === P
1420
+ @test @inferred (no_offset_view (A)) === A
1421
+ a0 = reshape ([1 ])
1422
+ @test @inferred (no_offset_view (a0)) === a0
1423
+ a0v = view (a0)
1424
+ @test @inferred (no_offset_view (a0v)) === a0v
1419
1425
1420
1426
# generic fallback
1421
1427
A = collect (reshape (1 : 12 , 3 , 4 ))
1422
1428
N = NegativeArray (A)
1423
1429
@test N[- 3 , - 4 ] == 1
1424
1430
V = no_offset_view (N)
1425
1431
@test collect (V) == A
1432
+ A = reshape (view ([5 ], 1 , 1 ))
1433
+ @test no_offset_view (A) == A
1426
1434
1427
1435
# bidirectional
1428
1436
B = BidirectionalVector ([1 , 2 , 3 ])
1429
1437
pushfirst! (B, 0 )
1430
1438
OB = OffsetArrays. no_offset_view (B)
1431
1439
@test axes (OB, 1 ) == 1 : 4
1432
1440
@test collect (OB) == 0 : 3
1441
+
1442
+ # issue #198
1443
+ offax = axes (OffsetVector (1 : 10 , - 5 ), 1 )
1444
+ noffax = OffsetArrays. no_offset_view (offax)
1445
+ @test noffax == - 4 : 5
1446
+ @test axes (noffax, 1 ) == 1 : 10 # ideally covered by the above, but current it isn't
1447
+ @test isa (noffax, AbstractUnitRange)
1448
+
1449
+ # SubArrays
1450
+ A = reshape (1 : 12 , 3 , 4 )
1451
+ V = view (A, OffsetArrays. IdentityUnitRange (2 : 3 ), OffsetArrays. IdentityUnitRange (2 : 3 ))
1452
+ if collect (V) == [5 8 ; 6 9 ] # julia 1.0 has a bug here
1453
+ @test OffsetArrays. no_offset_view (V) == [5 8 ; 6 9 ]
1454
+ end
1455
+ V = view (A, OffsetArrays. IdentityUnitRange (2 : 3 ), 2 )
1456
+ @test V != [5 ;6 ]
1457
+ if collect (V) == [5 ;6 ]
1458
+ @test OffsetArrays. no_offset_view (V) == [5 ;6 ]
1459
+ end
1460
+ O = OffsetArray (A, - 1 : 1 , 0 : 3 )
1461
+ V = view (O, 0 : 1 , 1 : 2 )
1462
+ @test V == OffsetArrays. no_offset_view (V) == [5 8 ; 6 9 ]
1463
+ r1, r2 = OffsetArrays. IdOffsetRange (1 : 3 , - 2 ), OffsetArrays. IdentityUnitRange (2 : 3 )
1464
+ V = view (O, r1, r2)
1465
+ @test V != collect (V)
1466
+ @test OffsetArrays. no_offset_view (V) == collect (V)
1467
+ V = @view O[:,:]
1468
+ @test IndexStyle (A) == IndexStyle (O) == IndexStyle (V) == IndexStyle (OffsetArrays. no_offset_view (V)) == IndexLinear ()
1433
1469
end
1434
1470
1435
1471
@testset " no nesting" begin
@@ -1490,6 +1526,7 @@ end
1490
1526
@testset " Adapt" begin
1491
1527
# We need another storage type, CUDA.jl defines one but we can't use that for CI
1492
1528
# let's define an appropriate method for SArrays
1529
+ Adapt. adapt_storage (:: Type{SA} , xs:: Array ) where SA<: SArray = convert (SA, xs) # ambiguity
1493
1530
Adapt. adapt_storage (:: Type{SA} , xs:: AbstractArray ) where SA<: SArray = convert (SA, xs)
1494
1531
arr = OffsetArray (rand (3 , 3 ), - 1 : 1 , - 1 : 1 )
1495
1532
s_arr = adapt (SMatrix{3 ,3 }, arr)
0 commit comments