105 lines
3.3 KiB
Java
105 lines
3.3 KiB
Java
package ch.epfl.alpano;
|
|
|
|
import static ch.epfl.test.TestRandomizer.newRandom;
|
|
import static java.lang.Math.toRadians;
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertSame;
|
|
|
|
import java.util.Random;
|
|
|
|
import org.junit.Test;
|
|
|
|
public class PanoramaTestP{
|
|
private static PanoramaParameters PARAMS() {
|
|
return new PanoramaParameters(
|
|
new GeoPoint(toRadians(46), toRadians(6)),
|
|
1000,
|
|
toRadians(180),
|
|
toRadians(60),
|
|
100_000,
|
|
9,
|
|
7);
|
|
}
|
|
|
|
@Test(expected = NullPointerException.class)
|
|
public void builderFailsWithNullParameters() {
|
|
new Panorama.Builder(null);
|
|
}
|
|
|
|
@Test
|
|
public void builderConstructorCorrectlyInitializesSamples() {
|
|
Panorama p = new Panorama.Builder(PARAMS()).build();
|
|
assertEquals(Float.POSITIVE_INFINITY, p.distanceAt(0, 0), 0);
|
|
assertEquals(0, p.longitudeAt(0, 0), 0);
|
|
assertEquals(0, p.latitudeAt(0, 0), 0);
|
|
assertEquals(0, p.elevationAt(0, 0), 0);
|
|
assertEquals(0, p.slopeAt(0, 0), 0);
|
|
}
|
|
|
|
@Test(expected = IndexOutOfBoundsException.class)
|
|
public void setDistanceAtFailsWithInvalidIndex() {
|
|
Panorama.Builder b = new Panorama.Builder(PARAMS());
|
|
b.setDistanceAt(10, 0, 1);
|
|
}
|
|
|
|
@Test
|
|
public void setLongitudeAtReturnsThis() {
|
|
Panorama.Builder b = new Panorama.Builder(PARAMS());
|
|
assertSame(b, b.setLongitudeAt(0, 0, 1));
|
|
}
|
|
|
|
@Test(expected = IllegalStateException.class)
|
|
public void setSlopeAtFailsAfterBuild() {
|
|
Panorama.Builder b = new Panorama.Builder(PARAMS());
|
|
b.build();
|
|
b.setSlopeAt(0, 0, 0);
|
|
}
|
|
|
|
@Test(expected = IllegalStateException.class)
|
|
public void buildFailsAfterBuild() {
|
|
Panorama.Builder b = new Panorama.Builder(PARAMS());
|
|
b.build();
|
|
b.build();
|
|
}
|
|
|
|
@Test
|
|
public void parametersReturnsParameters() {
|
|
PanoramaParameters ps = PARAMS();
|
|
Panorama p = new Panorama.Builder(ps).build();
|
|
assertSame(ps, p.parameters());
|
|
}
|
|
|
|
@Test
|
|
public void builderSettersWork() {
|
|
PanoramaParameters ps = PARAMS();
|
|
float[] values = new float[ps.width() * ps.height()];
|
|
Random rng = newRandom();
|
|
for (int i = 0; i < values.length; ++i)
|
|
values[i] = rng.nextFloat() + 0.5f;
|
|
|
|
Panorama.Builder b = new Panorama.Builder(ps);
|
|
for (int x = 0; x < ps.width(); ++x) {
|
|
for (int y = 0; y < ps.height(); ++y) {
|
|
float v = values[y + x * ps.height()];
|
|
b.setDistanceAt(x, y, v)
|
|
.setElevationAt(x, y, v)
|
|
.setLatitudeAt(x, y, v)
|
|
.setLongitudeAt(x, y, v)
|
|
.setSlopeAt(x, y, v);
|
|
}
|
|
}
|
|
|
|
Panorama p = b.build();
|
|
for (int x = 0; x < ps.width(); ++x) {
|
|
for (int y = 0; y < ps.height(); ++y) {
|
|
float v = values[y + x * ps.height()];
|
|
assertEquals(v, p.distanceAt(x, y), 0);
|
|
assertEquals(v, p.elevationAt(x, y), 0);
|
|
assertEquals(v, p.latitudeAt(x, y), 0);
|
|
assertEquals(v, p.longitudeAt(x, y), 0);
|
|
assertEquals(v, p.slopeAt(x, y), 0);
|
|
}
|
|
}
|
|
}
|
|
}
|