From ea6cd01b898e955b3ce1e7ee67e5dc03bd907f11 Mon Sep 17 00:00:00 2001 From: Roland Grinis Date: Tue, 13 Jul 2021 13:56:34 +0100 Subject: [PATCH] tensors testing --- .../space/kscience/kmath/noa/TestTensor.kt | 45 +++++++++++++++++-- .../space/kscience/kmath/noa/TestUtils.kt | 2 +- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/kmath-noa/src/test/kotlin/space/kscience/kmath/noa/TestTensor.kt b/kmath-noa/src/test/kotlin/space/kscience/kmath/noa/TestTensor.kt index a02c2a5fb..41da55ca2 100644 --- a/kmath-noa/src/test/kotlin/space/kscience/kmath/noa/TestTensor.kt +++ b/kmath-noa/src/test/kotlin/space/kscience/kmath/noa/TestTensor.kt @@ -18,23 +18,62 @@ internal fun NoaFloat.testingCopying(device: Device = Device.CPU): Unit { tensor[intArrayOf(1, 2, 3)] = 0.1f assertTrue(copyOfTensor.copyToArray() contentEquals array) assertEquals(0.1f, tensor[intArrayOf(1, 2, 3)]) - if(device != Device.CPU){ + if (device != Device.CPU) { val normalCpu = randNormal(intArrayOf(2, 3)) val normalGpu = normalCpu.copyToDevice(device) assertTrue(normalCpu.copyToArray() contentEquals normalGpu.copyToArray()) - val uniformGpu = randUniform(intArrayOf(3,2),device) + val uniformGpu = randUniform(intArrayOf(3, 2), device) val uniformCpu = uniformGpu.copyToDevice(Device.CPU) assertTrue(uniformGpu.copyToArray() contentEquals uniformCpu.copyToArray()) } } +internal fun NoaInt.testingViewWithNoCopy(device: Device = Device.CPU) { + val tensor = copyFromArray(intArrayOf(1, 2, 3, 4, 5, 6), shape = intArrayOf(6), device) + val viewTensor = tensor.view(intArrayOf(2, 3)) + assertTrue(viewTensor.shape contentEquals intArrayOf(2, 3)) + viewTensor[intArrayOf(0, 0)] = 10 + assertEquals(tensor[intArrayOf(0)], 10) +} class TestTensor { @Test - fun testCopying(): Unit = NoaFloat { + fun testCopying() = NoaFloat { withCuda { device -> testingCopying(device) } }!! + + @Test + fun testRequiresGrad() = NoaFloat { + val tensor = randNormal(intArrayOf(3)) + assertTrue(!tensor.requiresGrad) + tensor.requiresGrad = true + assertTrue(tensor.requiresGrad) + tensor.requiresGrad = false + assertTrue(!tensor.requiresGrad) + tensor.requiresGrad = true + val detachedTensor = tensor.detachFromGraph() + assertTrue(!detachedTensor.requiresGrad) + }!! + + @Test + fun testTypeMoving() = NoaFloat { + val tensorInt = copyFromArray(floatArrayOf(1f, 2f, 3f), intArrayOf(3)).asInt() + NoaInt { + val temporalTensor = copyFromArray(intArrayOf(4, 5, 6), intArrayOf(3)) + tensorInt swap temporalTensor + assertTrue(temporalTensor.copyToArray() contentEquals intArrayOf(1, 2, 3)) + } + assertTrue(tensorInt.asFloat().copyToArray() contentEquals floatArrayOf(4f, 5f, 6f)) + }!! + + @Test + fun testViewWithNoCopy() = NoaInt { + withCuda { device -> + testingViewWithNoCopy(device) + } + }!! + } \ No newline at end of file diff --git a/kmath-noa/src/test/kotlin/space/kscience/kmath/noa/TestUtils.kt b/kmath-noa/src/test/kotlin/space/kscience/kmath/noa/TestUtils.kt index ac82b9425..e26c7d1f3 100644 --- a/kmath-noa/src/test/kotlin/space/kscience/kmath/noa/TestUtils.kt +++ b/kmath-noa/src/test/kotlin/space/kscience/kmath/noa/TestUtils.kt @@ -53,7 +53,7 @@ class TestUtils { } @Test - fun testSetSeed(): Unit = NoaFloat { + fun testSetSeed() = NoaFloat { withCuda { device -> testingSetSeed(device) }