From 406819f64e3f6624c17a15f12f1cd921d1ead1bd Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Sat, 21 Oct 2023 21:17:12 +0200 Subject: [PATCH] fix another FragmentedArrayFloatList batch adding bug + tests --- .../models/block/state/baked/BakedFace.kt | 2 +- .../floats/FragmentedArrayFloatList.kt | 2 +- .../floats/FragmentedFloatListTest.kt | 21 +++++++++++++------ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/baked/BakedFace.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/baked/BakedFace.kt index 95f2d0728..6679d680d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/baked/BakedFace.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/baked/BakedFace.kt @@ -51,7 +51,7 @@ class BakedFace( val mesh = mesh.mesh(texture) - mesh.data.ensureSize(SingleChunkMesh.WorldMeshStruct.FLOATS_PER_VERTEX * (mesh.order.size / 2)) + mesh.data.ensureSize(SingleChunkMesh.WorldMeshStruct.FLOATS_PER_VERTEX * mesh.order.size) var index = 0 val size = mesh.order.size diff --git a/src/main/java/de/bixilon/minosoft/util/collections/floats/FragmentedArrayFloatList.kt b/src/main/java/de/bixilon/minosoft/util/collections/floats/FragmentedArrayFloatList.kt index 9ecaa6ef6..72f4bb8ea 100644 --- a/src/main/java/de/bixilon/minosoft/util/collections/floats/FragmentedArrayFloatList.kt +++ b/src/main/java/de/bixilon/minosoft/util/collections/floats/FragmentedArrayFloatList.kt @@ -88,7 +88,7 @@ class FragmentedArrayFloatList( return buffer } if (left == 0) return buffer - return grow(left) + return this.incomplete.firstOrNull() ?: grow(left) } fun add(value1: Float, value2: Float) { diff --git a/src/test/java/de/bixilon/minosoft/util/collections/floats/FragmentedFloatListTest.kt b/src/test/java/de/bixilon/minosoft/util/collections/floats/FragmentedFloatListTest.kt index e6f156854..d523bda18 100644 --- a/src/test/java/de/bixilon/minosoft/util/collections/floats/FragmentedFloatListTest.kt +++ b/src/test/java/de/bixilon/minosoft/util/collections/floats/FragmentedFloatListTest.kt @@ -64,9 +64,21 @@ class FragmentedFloatListTest : DirectFloatListTest() { } assertEquals(list.size, 700) val expected = FloatArray(700) { it.toFloat() } - println(expected.contentToString()) val array = list.toArray() - println(array.contentToString()) + assertContentEquals(expected, array) + } + + @Test + fun `batch adding 7 floats and ensuring size`() { + val list = FragmentedArrayFloatList(100) + for (i in 0 until 100) { + list.ensureSize(21) + val offset = i * 7.0f + list.add(offset + 0, offset + 1, offset + 2, offset + 3, offset + 4, offset + 5, offset + 6) + } + assertEquals(list.size, 700) + val expected = FloatArray(700) { it.toFloat() } + val array = list.toArray() assertContentEquals(expected, array) } @@ -75,14 +87,11 @@ class FragmentedFloatListTest : DirectFloatListTest() { val list = FragmentedArrayFloatList(1) for (i in 0 until 100) { val offset = i * 7.0f - val a = floatArrayOf(offset + 0, offset + 1, offset + 2, offset + 3, offset + 4, offset + 5, offset + 6) - list += a + list += floatArrayOf(offset + 0, offset + 1, offset + 2, offset + 3, offset + 4, offset + 5, offset + 6) } assertEquals(list.size, 700) val expected = FloatArray(700) { it.toFloat() } - println(expected.contentToString()) val array = list.toArray() - println(array.contentToString()) assertContentEquals(expected, array) } }