public void TestReshapeFloat2DPointToTheSameStorage()
        {
            var x = FloatTorchTensor.Create(5, 10);

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                for (int j = 0; j < x.Dimensions[1]; j++)
                {
                    float tmp = (float)(i + j);
                    x[i, j] = tmp;
                }
            }

            Tensor <float> y = x.Reshape(new int[] { 10, 5 });

            x[4, 9] = 0;
            y[3, 4] = 0;

            for (int i = 0; i < 1; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    Assert.Equal(x[i, j], y[i * 2 + j / 5, j % 5]);
                }
            }
        }
        public void TestReshapeFloat1DFail()
        {
            Tensor <float> x = FloatTorchTensor.Create(10);

            x.Fill((float)1);

            Assert.Throws <ArgumentException>(() => x.Reshape(new int[] { 9 }));
        }
        public void TestShapeAndStridesFloat4D()
        {
            var x = FloatTorchTensor.Create(10, 10, 3, 10);

            for (int i = 0; i < 4; i++)
            {
                Assert.Equal(x.Dimensions[0], (int)x.TorchSharpTensor.GetTensorDimension(0));
                Assert.Equal(x.Strides[0], (int)x.TorchSharpTensor.GetTensorStride(0));
            }
        }
        public void TestFillFloat1D()
        {
            Tensor <float> x = FloatTorchTensor.Create(10);

            x.Fill((float)30);

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                Assert.Equal(30, x[i]);
            }
        }
        public void TestFillBySetFloat1D()
        {
            Tensor <float> x = FloatTorchTensor.Create(10);

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                x[i] = (float)30;
            }

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                Assert.Equal(x[i], (float)30);
            }
        }
        public void TestCloneEmptyFloat1D()
        {
            Tensor <float> x = FloatTorchTensor.Create(10);

            x.Fill((float)1);

            Tensor <float> y = x.CloneEmpty();

            Assert.Equal(y.Dimensions.ToArray(), x.Dimensions.ToArray());

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                Assert.Equal(y[i], (float)0);
            }
        }
        public void TestDanglingMemoryFloat()
        {
            Memory <float> buffer;

            using (var x = FloatTorchTensor.Create(10))
            {
                x.Fill(33);
                buffer = x.Buffer;
            }

            var arr = buffer.ToArray();

            for (int i = 0; i < 10; i++)
            {
                Assert.Equal(33, arr[i]);
            }
        }
        public void TestReshapeFloat2D()
        {
            var x = FloatTorchTensor.Create(5, 10);

            var y = x.Reshape(new int[] { 10, 5 });

            for (int i = 0; i < 2; i++)
            {
                Assert.Equal(x.Dimensions[0], (int)x.TorchSharpTensor.GetTensorDimension(0));
                Assert.Equal(x.Strides[0], (int)x.TorchSharpTensor.GetTensorStride(0));
            }

            Equals(x.Dimensions.ToArray(), new int[] { 5, 10 });
            Equals(x.Strides.ToArray(), new int[] { 1, 10 });
            Equals(y.Dimensions.ToArray(), new int[] { 10, 5 });
            Equals(y.Strides.ToArray(), new int[] { 1, 5 });
        }
        public void TestReshapeFloat1D()
        {
            Tensor <float> x = FloatTorchTensor.Create(10);

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                x[i] = (float)i;
            }

            Tensor <float> y = x.Reshape(new int[] { 10 });

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                Assert.Equal(y[i], (float)i);
                Assert.Equal(x[i], (float)i);
            }
        }
        public void TestCloneFloat1D()
        {
            Tensor <float> x = FloatTorchTensor.Create(10);

            x.Fill((float)1);

            Tensor <float> y = x.Clone();

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                Assert.Equal(x[i], y[i]);
            }

            y[5] = (float)0;

            Assert.NotEqual(x[5], y[5]);
        }
        public void TestReshapeFloat1DPointToTheSameStorage()
        {
            Tensor <float> x = FloatTorchTensor.Create(10);

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                x[i] = (float)i;
            }

            Tensor <float> y = x.Reshape(new int[] { 10 });

            y[5] = (float)0;

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                Assert.Equal(y[i], x[i]);
            }
        }
        public void TestFillBySetFloat2D()
        {
            Tensor <float> x = FloatTorchTensor.Create(10, 10);

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                for (int j = 0; j < x.Dimensions[1]; j++)
                {
                    x[i, j] = (float)30;
                }
            }

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                for (int j = 0; j < x.Dimensions[1]; j++)
                {
                    Assert.Equal(x[i, j], (float)30);
                }
            }
        }
        public void TestFillEquivalanceFloat2D()
        {
            var x = FloatTorchTensor.Create(10, 10);

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                for (int j = 0; j < x.Dimensions[1]; j++)
                {
                    float tmp = (float)(i + j);
                    x[i, j] = tmp;
                }
            }

            for (int i = 0; i < x.Dimensions[0]; i++)
            {
                for (int j = 0; j < x.Dimensions[1]; j++)
                {
                    Assert.Equal(x[i, j], x.TorchSharpTensor[i, j]);
                }
            }
        }
        public void TestCreationFloat4D()
        {
            Tensor <float> x = FloatTorchTensor.Create(10, 10, 3, 10);

            Assert.NotNull(x);
        }
 public void TestCreationFloat0D()
 {
     Assert.Throws <ArgumentOutOfRangeException>(() => FloatTorchTensor.Create());
 }