From 4e0fbce1517af18eb25888d557f0d4cb5da90ece Mon Sep 17 00:00:00 2001 From: Lunkle Date: Sat, 2 Nov 2024 15:41:19 -0400 Subject: [PATCH 1/3] Update pull_request.yml --- .github/workflows/pull_request.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 6091511..e3a55b2 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -4,6 +4,7 @@ on: pull_request: branches: - main + - dev jobs: build: From 8c77a42ab05e8f574edc2a229ca48a4f1f016ba3 Mon Sep 17 00:00:00 2001 From: Lunkle Date: Fri, 1 Nov 2024 23:03:48 -0400 Subject: [PATCH 2/3] Add `ColourTest` class to test `Colour` methods * Add test methods for `rgb`, `rgba`, `hsl`, `r`, `g`, `b`, `a`, `normalizedR`, `normalizedG`, `normalizedB`, `normalizedA`, `toVector`, and `toRangedVector` methods * Add additional assertions for testing the normalized functions * Test more interesting values for the normalized functions --- src/test/java/common/colour/ColourTest.java | 91 +++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/test/java/common/colour/ColourTest.java diff --git a/src/test/java/common/colour/ColourTest.java b/src/test/java/common/colour/ColourTest.java new file mode 100644 index 0000000..4a282ca --- /dev/null +++ b/src/test/java/common/colour/ColourTest.java @@ -0,0 +1,91 @@ +package common.colour; + +import common.math.Vector4f; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +public class ColourTest { + + @Test + public void testRgb() { + int colour = Colour.rgb(255, 0, 0); + assertEquals(255, Colour.r(colour)); + assertEquals(0, Colour.g(colour)); + assertEquals(0, Colour.b(colour)); + assertEquals(255, Colour.a(colour)); + } + + @Test + public void testRgba() { + int colour = Colour.rgba(255, 0, 0, 128); + assertEquals(255, Colour.r(colour)); + assertEquals(0, Colour.g(colour)); + assertEquals(0, Colour.b(colour)); + assertEquals(128, Colour.a(colour)); + } + + @Test + public void testHsl() { + int colour = Colour.hsl(0, 1, 0.5f); + assertEquals(255, Colour.r(colour)); + assertEquals(0, Colour.g(colour)); + assertEquals(0, Colour.b(colour)); + assertEquals(255, Colour.a(colour)); + } + + @Test + public void testNormalizedR() { + int colour = Colour.rgb(255, 0, 0); + assertEquals(1.0f, Colour.normalizedR(colour)); + assertEquals(0.0f, Colour.normalizedG(colour)); + assertEquals(0.0f, Colour.normalizedB(colour)); + assertEquals(1.0f, Colour.normalizedA(colour)); + } + + @Test + public void testNormalizedG() { + int colour = Colour.rgb(0, 255, 0); + assertEquals(0.0f, Colour.normalizedR(colour)); + assertEquals(1.0f, Colour.normalizedG(colour)); + assertEquals(0.0f, Colour.normalizedB(colour)); + assertEquals(1.0f, Colour.normalizedA(colour)); + } + + @Test + public void testNormalizedB() { + int colour = Colour.rgb(0, 0, 255); + assertEquals(0.0f, Colour.normalizedR(colour)); + assertEquals(0.0f, Colour.normalizedG(colour)); + assertEquals(1.0f, Colour.normalizedB(colour)); + assertEquals(1.0f, Colour.normalizedA(colour)); + } + + @Test + public void testNormalizedA() { + int colour = Colour.rgba(0, 0, 0, 255); + assertEquals(0.0f, Colour.normalizedR(colour)); + assertEquals(0.0f, Colour.normalizedG(colour)); + assertEquals(0.0f, Colour.normalizedB(colour)); + assertEquals(1.0f, Colour.normalizedA(colour)); + } + + @Test + public void testToVector() { + int colour = Colour.rgba(255, 0, 0, 128); + Vector4f vector = Colour.toVector(colour); + assertEquals(255, vector.x(), 0.01); + assertEquals(0, vector.y(), 0.01); + assertEquals(0, vector.z(), 0.01); + assertEquals(128, vector.w(), 0.01); + } + + @Test + public void testToRangedVector() { + int colour = Colour.rgba(255, 0, 0, 128); + Vector4f vector = Colour.toRangedVector(colour); + assertEquals(1.0f, vector.x(), 0.01); + assertEquals(0.0f, vector.y(), 0.01); + assertEquals(0.0f, vector.z(), 0.01); + assertEquals(0.5f, vector.w(), 0.01); + } +} From 07859a396cc1f3abbb1de6964e90d4349d27d157 Mon Sep 17 00:00:00 2001 From: Lunkle Date: Sun, 8 Dec 2024 15:40:41 -0500 Subject: [PATCH 3/3] Create JavaUtil.java --- src/main/java/common/java/JavaUtil.java | 153 ++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 src/main/java/common/java/JavaUtil.java diff --git a/src/main/java/common/java/JavaUtil.java b/src/main/java/common/java/JavaUtil.java new file mode 100644 index 0000000..c76a313 --- /dev/null +++ b/src/main/java/common/java/JavaUtil.java @@ -0,0 +1,153 @@ +package common.java; + +import static java.lang.System.arraycopy; +import static java.util.Arrays.*; + +public class JavaUtil { + + public static T[] concat(T[] first, T[] second) { + T[] result = copyOf(first, first.length + second.length); + arraycopy(second, 0, result, first.length, second.length); + return result; + } + + public static T[] flatten(T[][] array) { + int length = 0; + for (T[] subArray : array) { + length += subArray.length; + } + T[] result = copyOf(array[0], length); + int offset = array[0].length; + for (int i = 1; i < array.length; i++) { + arraycopy(array[i], 0, result, offset, array[i].length); + offset += array[i].length; + } + return result; + } + + @SuppressWarnings("unchecked") + public static Pair[] enumerate(T[] array) { + Pair[] result = new Pair[array.length]; + for (int i = 0; i < array.length; i++) { + result[i] = new Pair<>(i, array[i]); + } + return result; + } + + @SuppressWarnings("unchecked") + public static Triple[] enumerate(T[][] array) { + Triple[] result = new Triple[array.length * array[0].length]; + int index = 0; + for (int i = 0; i < array.length; i++) { + for (int j = 0; j < array[i].length; j++) { + result[index++] = new Triple<>(i, j, array[i][j]); + } + } + return result; + } + + public static class Pair { + public A a; + public B b; + + public Pair(A a, B b) { + this.a = a; + this.b = b; + } + + public A a() { + return a; + } + + public B b() { + return b; + } + + public A x() { + return a; + } + + public B y() { + return b; + } + + public A first() { + return a; + } + + public B second() { + return b; + } + + public A left() { + return a; + } + + public B right() { + return b; + } + + } + + public static class Triple { + public A a; + public B b; + public C c; + + public Triple(A a, B b, C c) { + this.a = a; + this.b = b; + this.c = c; + } + + public A a() { + return a; + } + + public B b() { + return b; + } + + public C c() { + return c; + } + + public A x() { + return a; + } + + public B y() { + return b; + } + + public C z() { + return c; + } + + public A first() { + return a; + } + + public B second() { + return b; + } + + public C third() { + return c; + } + + public A left() { + return a; + } + + public B middle() { + return b; + } + + public C right() { + return c; + } + + } + +}