|
628 | 628 | @test last(v, 100) !== v
|
629 | 629 | @test last(v, 1) == [v[end]]
|
630 | 630 | end
|
| 631 | + |
| 632 | +@testset "issue #37199: offset range indices" begin |
| 633 | + # https://github.com/JuliaArrays/OffsetArrays.jl/issues/133 |
| 634 | + A0 = [1 3; 2 4] |
| 635 | + A = OffsetArray(A0, (-1,2)) |
| 636 | + |
| 637 | + r = OffsetArrays.IdOffsetRange(1:2, -1) |
| 638 | + v1 = view(A, r, 3) |
| 639 | + @test v1[0] == 1 |
| 640 | + @test v1[1] == 2 |
| 641 | + @test axes(v1, 1) == axes(r, 1) |
| 642 | + v2 = view(A, UnitRange(r), 3) |
| 643 | + for (indflat, indoffset) in enumerate(r) |
| 644 | + @test v1[indoffset] == v2[indflat] |
| 645 | + end |
| 646 | + |
| 647 | + r = OffsetArrays.IdOffsetRange(1:2, 2) |
| 648 | + v1 = view(A, 1, r) |
| 649 | + @test v1[3] == 2 |
| 650 | + @test v1[4] == 4 |
| 651 | + @test axes(v1, 1) == axes(r, 1) |
| 652 | + v2 = view(A, 1, UnitRange(r)) |
| 653 | + for (indflat, indoffset) in enumerate(r) |
| 654 | + @test v1[indoffset] == v2[indflat] |
| 655 | + end |
| 656 | + |
| 657 | + a12 = zeros(3:8, 3:4) |
| 658 | + r = OffsetArrays.IdOffsetRange(Base.OneTo(3), 5) |
| 659 | + a12[r, 4] .= 3 |
| 660 | + @test all(a12[r, 4] .== 3) |
| 661 | + @test all(a12[UnitRange(r), 4] .== 3) |
| 662 | + |
| 663 | + # https://github.com/JuliaArrays/OffsetArrays.jl/issues/100 |
| 664 | + S = view(A, axes(A)...) |
| 665 | + @test S == A |
| 666 | + @test S[0,3] == S[1] == 1 |
| 667 | + @test S[1,3] == S[2] == 2 |
| 668 | + @test S[0,4] == S[3] == 3 |
| 669 | + @test S[1,4] == S[4] == 4 |
| 670 | + @test_throws BoundsError S[1,1] |
| 671 | + @test axes(S) == OffsetArrays.IdOffsetRange.((0:1, 3:4)) |
| 672 | + S = view(A, axes(A, 1), 3) |
| 673 | + @test S == A[:, 3] |
| 674 | + @test S[0] == 1 |
| 675 | + @test S[1] == 2 |
| 676 | + @test_throws BoundsError S[length(S)] |
| 677 | + @test axes(S) == (OffsetArrays.IdOffsetRange(0:1), ) |
| 678 | + S = view(A, 1, axes(A, 2)) |
| 679 | + @test S == A[1, :] |
| 680 | + @test S[3] == 2 |
| 681 | + @test S[4] == 4 |
| 682 | + @test_throws BoundsError S[1] |
| 683 | + @test axes(S) == (OffsetArrays.IdOffsetRange(3:4), ) |
| 684 | + |
| 685 | + A0 = collect(reshape(1:24, 2, 3, 4)) |
| 686 | + A = OffsetArray(A0, (-1,2,1)) |
| 687 | + S = view(A, axes(A, 1), 3:4, axes(A, 3)) |
| 688 | + @test S == A[:, 3:4, :] |
| 689 | + @test S[0, 1, 2] == A[0, 3, 2] |
| 690 | + @test S[0, 2, 2] == A[0, 4, 2] |
| 691 | + @test S[1, 1, 2] == A[1, 3, 2] |
| 692 | + @test axes(S) == (OffsetArrays.IdOffsetRange(0:1), Base.OneTo(2), OffsetArrays.IdOffsetRange(2:5)) |
| 693 | +end |
0 commit comments