feat(api): make ImVec2/ImVec4 math operations immutable (#317)

resolves #302 

Updated math operations (`plus`, `minus`, `times`, `div`) for `ImVec2` and `ImVec4` to return new instances instead of modifying the existing ones, ensuring immutability.
This commit is contained in:
SpaiR authored and GitHub committed 2025-01-29 20:35:53 +02:00
1 parent 02691fdabe
commit d27e3aa10b
6 files changed
+147 -65

No files matched your search

@@ -4,6 +4,8 @@ import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.assertSame;
class ImVec2Test {
@Nested
@@ -34,16 +36,20 @@ class ImVec2Test {
class set {
@Test
void withFloats() {
final ImVec2 value = new ImVec2().set(1, 2);
final ImVec2 original = new ImVec2();
final ImVec2 value = original.set(1, 2);
assertEquals(1, value.x);
assertEquals(2, value.y);
assertSame(original, value);
}
@Test
void withImVec2() {
final ImVec2 value = new ImVec2().set(new ImVec2(1, 2));
final ImVec2 original = new ImVec2();
final ImVec2 value = original.set(new ImVec2(1, 2));
assertEquals(1, value.x);
assertEquals(2, value.y);
assertSame(original, value);
}
}
@@ -51,16 +57,20 @@ class ImVec2Test {
class plus {
@Test
void withFloats() {
final ImVec2 value = new ImVec2(5, 5).plus(1, 2);
final ImVec2 original = new ImVec2(5, 5);
final ImVec2 value = original.plus(1, 2);
assertEquals(6, value.x);
assertEquals(7, value.y);
assertNotSame(original, value);
}
@Test
void withImVec2() {
final ImVec2 value = new ImVec2(5, 5).plus(new ImVec2(1, 2));
final ImVec2 original = new ImVec2(5, 5);
final ImVec2 value = original.plus(new ImVec2(1, 2));
assertEquals(6, value.x);
assertEquals(7, value.y);
assertNotSame(original, value);
}
}
@@ -68,16 +78,20 @@ class ImVec2Test {
class minus {
@Test
void withFloats() {
final ImVec2 value = new ImVec2(5, 5).minus(1, 2);
final ImVec2 original = new ImVec2(5, 5);
final ImVec2 value = original.minus(1, 2);
assertEquals(4, value.x);
assertEquals(3, value.y);
assertNotSame(original, value);
}
@Test
void withImVec2() {
final ImVec2 value = new ImVec2(5, 5).minus(new ImVec2(1, 2));
final ImVec2 original = new ImVec2(5, 5);
final ImVec2 value = original.minus(new ImVec2(1, 2));
assertEquals(4, value.x);
assertEquals(3, value.y);
assertNotSame(original, value);
}
}
@@ -85,16 +99,41 @@ class ImVec2Test {
class times {
@Test
void withFloats() {
final ImVec2 value = new ImVec2(5, 5).times(1, 2);
final ImVec2 original = new ImVec2(5, 5);
final ImVec2 value = original.times(1, 2);
assertEquals(5, value.x);
assertEquals(10, value.y);
assertNotSame(original, value);
}
@Test
void withImVec2() {
final ImVec2 value = new ImVec2(5, 5).times(new ImVec2(1, 2));
final ImVec2 original = new ImVec2(5, 5);
final ImVec2 value = original.times(new ImVec2(1, 2));
assertEquals(5, value.x);
assertEquals(10, value.y);
assertNotSame(original, value);
}
}
@Nested
class div {
@Test
void withFloats() {
final ImVec2 original = new ImVec2(10, 10);
final ImVec2 value = original.div(5, 2);
assertEquals(2, value.x);
assertEquals(5, value.y);
assertNotSame(original, value);
}
@Test
void withImVec2() {
final ImVec2 original = new ImVec2(10, 10);
final ImVec2 value = original.div(new ImVec2(5, 2));
assertEquals(2, value.x);
assertEquals(5, value.y);
assertNotSame(original, value);
}
}
}
@@ -4,6 +4,8 @@ import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.assertSame;
class ImVec4Test {
@Nested
@@ -27,7 +29,7 @@ class ImVec4Test {
}
@Test
void fromImVec2() {
void fromImVec4() {
final ImVec4 value = new ImVec4(new ImVec4(1, 2, 3, 4));
assertEquals(1, value.x);
assertEquals(2, value.y);
@@ -40,20 +42,24 @@ class ImVec4Test {
class set {
@Test
void withFloats() {
final ImVec4 value = new ImVec4().set(1, 2, 3, 4);
final ImVec4 original = new ImVec4(1, 2, 3, 4);
final ImVec4 value = original.set(1, 2, 3, 4);
assertEquals(1, value.x);
assertEquals(2, value.y);
assertEquals(3, value.z);
assertEquals(4, value.w);
assertSame(original, value);
}
@Test
void withImVec4() {
final ImVec4 value = new ImVec4().set(new ImVec4(1, 2, 3, 4));
final ImVec4 original = new ImVec4(1, 2, 3, 4);
final ImVec4 value = original.set(new ImVec4(1, 2, 3, 4));
assertEquals(1, value.x);
assertEquals(2, value.y);
assertEquals(3, value.z);
assertEquals(4, value.w);
assertSame(original, value);
}
}
@@ -61,16 +67,24 @@ class ImVec4Test {
class plus {
@Test
void withFloats() {
final ImVec4 value = new ImVec4(5, 5, 5, 5).plus(1, 2, 3, 4);
final ImVec4 original = new ImVec4(5, 5, 5, 5);
final ImVec4 value = original.plus(1, 2, 3, 4);
assertEquals(6, value.x);
assertEquals(7, value.y);
assertEquals(8, value.z);
assertEquals(9, value.w);
assertNotSame(original, value);
}
@Test
void withImVec4() {
final ImVec4 value = new ImVec4(5, 5, 5, 5).plus(new ImVec4(1, 2, 3, 4));
final ImVec4 original = new ImVec4(5, 5, 5, 5);
final ImVec4 value = original.plus(new ImVec4(1, 2, 3, 4));
assertEquals(6, value.x);
assertEquals(7, value.y);
assertEquals(8, value.z);
assertEquals(9, value.w);
assertNotSame(original, value);
}
}
@@ -78,20 +92,24 @@ class ImVec4Test {
class minus {
@Test
void withFloats() {
final ImVec4 value = new ImVec4(5, 5, 5, 5).minus(1, 2, 3, 4);
final ImVec4 original = new ImVec4(5, 5, 5, 5);
final ImVec4 value = original.minus(1, 2, 3, 4);
assertEquals(4, value.x);
assertEquals(3, value.y);
assertEquals(2, value.z);
assertEquals(1, value.w);
assertNotSame(original, value);
}
@Test
void withImVec4() {
final ImVec4 value = new ImVec4(5, 5, 5, 5).minus(new ImVec4(1, 2, 3, 4));
final ImVec4 original = new ImVec4(5, 5, 5, 5);
final ImVec4 value = original.minus(new ImVec4(1, 2, 3, 4));
assertEquals(4, value.x);
assertEquals(3, value.y);
assertEquals(2, value.z);
assertEquals(1, value.w);
assertNotSame(original, value);
}
}
@@ -99,20 +117,49 @@ class ImVec4Test {
class times {
@Test
void withFloats() {
final ImVec4 value = new ImVec4(5, 5, 5, 5).times(1, 2, 3, 4);
final ImVec4 original = new ImVec4(5, 5, 5, 5);
final ImVec4 value = original.times(1, 2, 3, 4);
assertEquals(5, value.x);
assertEquals(10, value.y);
assertEquals(15, value.z);
assertEquals(20, value.w);
assertNotSame(original, value);
}
@Test
void withImVec4() {
final ImVec4 value = new ImVec4(5, 5, 5, 5).times(new ImVec4(1, 2, 3, 4));
final ImVec4 original = new ImVec4(5, 5, 5, 5);
final ImVec4 value = original.times(new ImVec4(1, 2, 3, 4));
assertEquals(5, value.x);
assertEquals(10, value.y);
assertEquals(15, value.z);
assertEquals(20, value.w);
assertNotSame(original, value);
}
}
@Nested
class div {
@Test
void withFloats() {
final ImVec4 original = new ImVec4(10, 10, 15, 15);
final ImVec4 value = original.div(5, 2, 3, 5);
assertEquals(2, value.x);
assertEquals(5, value.y);
assertEquals(5, value.z);
assertEquals(3, value.w);
assertNotSame(original, value);
}
@Test
void withImVec4() {
final ImVec4 original = new ImVec4(10, 10, 15, 15);
final ImVec4 value = original.div(new ImVec4(5, 2, 3, 5));
assertEquals(2, value.x);
assertEquals(5, value.y);
assertEquals(5, value.z);
assertEquals(3, value.w);
assertNotSame(original, value);
}
}
}