Skip to content

System.Numerics.Tensors SetSlice safety #106535

@soerenwolfers

Description

@soerenwolfers

Description

new TensorSpan<double>(array: myArrayOfLength1, lengths: new IntPtr[] { 2 }, strides: new IntPtr[]{ 0 })
.SetSlice(new TensorSpan<double>(new double[] {1d, 2d}), new NRange[] { ..2 });

writes the 2d to &myArrayOfLength1 + 1 wherever that may be.

Reproduction Steps

using System.Buffers;
using System.Diagnostics.CodeAnalysis;
using System.Numerics.Tensors;

namespace ConsoleApp1;

public abstract class Program
{
	[Experimental("SYSLIB5001")]
	public static unsafe void Main()
	{
		var ar = new double[1];
		fixed (double* pointer = ar)
		{
			var a = new TensorSpan<double>(ar.AsSpan()[..1], new IntPtr[] { 2 }, new IntPtr[]{ 0 });
			a.SetSlice(new TensorSpan<double>(new double[] {1, 3}), new NRange[] { ..2 });
			var x = *pointer;
			var y = *(pointer + 1);
			Console.WriteLine((x, y));  // (1, 2)
		}
	}
}

Expected behavior

2d should be written to the single entry of the TensorSpan.

Actual behavior

.

Regression?

No response

Known Workarounds

No response

Configuration

.NET8, Ubuntu22, x64

Other information

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions