diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TStringTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TStringTest.java index 015f93b70e7..9e05ae1abcf 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TStringTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TStringTest.java @@ -20,8 +20,10 @@ import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.nio.charset.StandardCharsets; +import org.bytedeco.javacpp.Pointer; import org.junit.jupiter.api.Test; import org.tensorflow.ndarray.NdArray; import org.tensorflow.ndarray.NdArrays; @@ -103,5 +105,30 @@ public void initializingTensorWithRawBytes() { } } + @Test + public void testNoLeaks() throws Exception { + System.gc(); + Thread.sleep(100); + + for (int i = 0; i < 1000; i++) { + TString.scalarOf(A_LARGE_STRING).close(); + } + + System.gc(); + Thread.sleep(100); + long bytesBefore = Pointer.physicalBytes(); + + for (int i = 0; i < 1000; i++) { + TString.scalarOf(A_LARGE_STRING).close(); + } + + System.gc(); + Thread.sleep(100); + long bytesAfter = Pointer.physicalBytes(); + + assertTrue(Math.abs(bytesAfter - bytesBefore) < 10_000_000); + } + + private static final String A_LARGE_STRING = new String(new byte[1_000_000]); private static final String BABY_CHICK = "\uD83D\uDC25"; }