add math and image
This commit is contained in:
16
src/test/java/eu/jonahbauer/raytracing/math/RayTest.java
Normal file
16
src/test/java/eu/jonahbauer/raytracing/math/RayTest.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package eu.jonahbauer.raytracing.math;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class RayTest {
|
||||
|
||||
@Test
|
||||
void at() {
|
||||
var origin = new Vec3(0, 0, 0);
|
||||
var direction = new Vec3(1, 2, 3);
|
||||
var ray = new Ray(origin, direction);
|
||||
assertEquals(new Vec3(5, 10, 15), ray.at(5));
|
||||
}
|
||||
}
|
61
src/test/java/eu/jonahbauer/raytracing/math/Vec3Test.java
Normal file
61
src/test/java/eu/jonahbauer/raytracing/math/Vec3Test.java
Normal file
@@ -0,0 +1,61 @@
|
||||
package eu.jonahbauer.raytracing.math;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class Vec3Test {
|
||||
|
||||
@Test
|
||||
void plus() {
|
||||
var a = new Vec3(1, 2, 3);
|
||||
var b = new Vec3(-1, 1, -2);
|
||||
assertEquals(new Vec3(0, 3, 1), a.plus(b));
|
||||
}
|
||||
|
||||
@Test
|
||||
void minus() {
|
||||
var a = new Vec3(1, 2, 3);
|
||||
var b = new Vec3(-1, 1, -2);
|
||||
assertEquals(new Vec3(2, 1, 5), a.minus(b));
|
||||
}
|
||||
|
||||
@Test
|
||||
void timesVec() {
|
||||
var a = new Vec3(1, 2, 3);
|
||||
var b = new Vec3(-1, 1, -2);
|
||||
assertEquals(-5, a.times(b));
|
||||
}
|
||||
|
||||
@Test
|
||||
void timeScalar() {
|
||||
var a = new Vec3(1, 2, 3);
|
||||
var b = 2.5;
|
||||
assertEquals(new Vec3(2.5, 5, 7.5), a.times(b));
|
||||
}
|
||||
|
||||
@Test
|
||||
void div() {
|
||||
var a = new Vec3(1, 2, 3);
|
||||
var b = 2;
|
||||
assertEquals(new Vec3(0.5, 1, 1.5), a.div(b));
|
||||
}
|
||||
|
||||
@Test
|
||||
void squared() {
|
||||
var a = new Vec3(1, 2, 3);
|
||||
assertEquals(14, a.squared());
|
||||
}
|
||||
|
||||
@Test
|
||||
void length() {
|
||||
var a = new Vec3(3, 4, 0);
|
||||
assertEquals(5, a.length());
|
||||
}
|
||||
|
||||
@Test
|
||||
void unit() {
|
||||
var a = new Vec3(3, 4, 0);
|
||||
assertEquals(new Vec3(0.6, 0.8, 0), a.unit());
|
||||
}
|
||||
}
|
47
src/test/java/eu/jonahbauer/raytracing/render/ImageTest.java
Normal file
47
src/test/java/eu/jonahbauer/raytracing/render/ImageTest.java
Normal file
@@ -0,0 +1,47 @@
|
||||
package eu.jonahbauer.raytracing.render;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class ImageTest {
|
||||
|
||||
@Test
|
||||
void test(@TempDir Path dir) throws IOException {
|
||||
var image = new Image(256, 256);
|
||||
|
||||
for (var y = 0; y < image.height(); y++) {
|
||||
for (var x = 0; x < image.width(); x++) {
|
||||
var r = (double) x / (image.width() - 1);
|
||||
var g = (double) y / (image.height() - 1);
|
||||
var b = 0;
|
||||
|
||||
image.set(x, y, r, g, b);
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println(dir);
|
||||
ImageIO.write(image, dir.resolve("img.ppm"));
|
||||
|
||||
String expected;
|
||||
String actual;
|
||||
|
||||
try (var in = Objects.requireNonNull(ImageTest.class.getResourceAsStream("simple_image.ppm"))) {
|
||||
expected = new String(in.readAllBytes(), StandardCharsets.US_ASCII);
|
||||
}
|
||||
|
||||
try (var in = Files.newInputStream(dir.resolve("img.ppm"))) {
|
||||
actual = new String(in.readAllBytes(), StandardCharsets.US_ASCII);
|
||||
}
|
||||
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
}
|
65539
src/test/resources/eu/jonahbauer/raytracing/render/simple_image.ppm
Normal file
65539
src/test/resources/eu/jonahbauer/raytracing/render/simple_image.ppm
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user