diff --git a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/Tensor.cs b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/Tensor.cs index cb2854ca7a2842..ff5539e2a29d66 100644 --- a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/Tensor.cs +++ b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/Tensor.cs @@ -1620,7 +1620,7 @@ public static Tensor Resize(Tensor tensor, ReadOnlySpan lengths) if (tensor.IsDense) { - ReadOnlySpan span = MemoryMarshal.CreateSpan(ref Unsafe.Add(ref tensor.AsTensorSpan()._reference, tensor._start), tensor._values.Length - tensor._start); + ReadOnlySpan span = MemoryMarshal.CreateSpan(ref tensor.AsReadOnlyTensorSpan()._reference, (int)tensor.FlattenedLength); Span ospan = MemoryMarshal.CreateSpan(ref output.AsTensorSpan()._reference, (int)output.FlattenedLength); if (newSize >= span.Length) { diff --git a/src/libraries/System.Numerics.Tensors/tests/TensorTests.cs b/src/libraries/System.Numerics.Tensors/tests/TensorTests.cs index 814ef0aa909223..a3492a2caeef0f 100644 --- a/src/libraries/System.Numerics.Tensors/tests/TensorTests.cs +++ b/src/libraries/System.Numerics.Tensors/tests/TensorTests.cs @@ -1352,6 +1352,45 @@ public static void TensorResizeTests() Assert.Equal(0, t1[1, 4]); } + [Fact] + public static void TensorResizeWithStartTests() + { + Tensor t0 = Tensor.Create([1, 2, 3, 4, 5, 6], start: 2, lengths: [4], strides: []); + Tensor t1 = Tensor.Resize(t0, [4]); + Assert.Equal([4], t1.Lengths); + Assert.Equal(3, t1[0]); + Assert.Equal(4, t1[1]); + Assert.Equal(5, t1[2]); + Assert.Equal(6, t1[3]); + + t1 = Tensor.Resize(t0, [6]); + Assert.Equal([6], t1.Lengths); + Assert.Equal(3, t1[0]); + Assert.Equal(4, t1[1]); + Assert.Equal(5, t1[2]); + Assert.Equal(6, t1[3]); + Assert.Equal(0, t1[4]); + Assert.Equal(0, t1[5]); + + t1 = Tensor.Resize(t0, [2]); + Assert.Equal([2], t1.Lengths); + Assert.Equal(3, t1[0]); + Assert.Equal(4, t1[1]); + + t1 = Tensor.Resize(t0, [1, 1]); + Assert.Equal([1, 1], t1.Lengths); + Assert.Equal(3, t1[0, 0]); + + t1 = Tensor.Resize(t0, [2, 3]); + Assert.Equal([2, 3], t1.Lengths); + Assert.Equal(3, t1[0, 0]); + Assert.Equal(4, t1[0, 1]); + Assert.Equal(5, t1[0, 2]); + Assert.Equal(6, t1[1, 0]); + Assert.Equal(0, t1[1, 1]); + Assert.Equal(0, t1[1, 2]); + } + [Fact] public static void TensorSplitTests() {