diff --git a/build.gradle b/build.gradle index cef5ac569d5ab9d774fc7ff8cbe367b909b26c6a..4ae919156a0da760378a0dcb48f3b02d7a1d66d4 100644 --- a/build.gradle +++ b/build.gradle @@ -13,9 +13,9 @@ repositories { } dependencies { - testImplementation('org.junit.jupiter:junit-jupiter-api:5.7.2', - 'org.hamcrest:hamcrest-library:2.2', 'net.obvj:junit-utils:1.3.1') - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.2' + testImplementation('org.junit.jupiter:junit-jupiter-api:5.8.1', + 'org.assertj:assertj-core:3.21.0') + testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.8.1') } test { @@ -24,4 +24,4 @@ test { application { mainClassName = "Main" -} \ No newline at end of file +} diff --git a/src/main/java/ByteGrayColor.java b/src/main/java/ByteGrayColor.java index bf54f4e4c01456eba44d67aa9016d99e2dee7ec1..8d53f239169899caa27eb8c3059141d7a097951a 100644 --- a/src/main/java/ByteGrayColor.java +++ b/src/main/java/ByteGrayColor.java @@ -13,10 +13,6 @@ public class ByteGrayColor implements GrayColor { private final int grayLevel; - public ByteGrayColor(){ - this.grayLevel = MINIMUM_GRAY_LEVEL; - } - public ByteGrayColor(int grayLevel) { this.grayLevel = grayLevel; } diff --git a/src/main/java/DecreaseGrayLevels.java b/src/main/java/DecreaseGrayLevels.java index cae28945b6f3d4a10d2748bcce02d4c904319a7e..0c0494bd02bb5ba2c2a70390e4bf166b5150a636 100755 --- a/src/main/java/DecreaseGrayLevels.java +++ b/src/main/java/DecreaseGrayLevels.java @@ -19,10 +19,14 @@ public class DecreaseGrayLevels implements Transform { } private void modifyPixel(GrayImage image, int x, int y) { - int numberOfIntervals = nbGrayLevels - 1; - double sizeOfIntervals = 1. / (double) numberOfIntervals; double luminosity = image.getPixelGrayColor(x, y).getLuminosity(); - double newLuminosity = Math.floor(luminosity * numberOfIntervals) * sizeOfIntervals; + double newLuminosity = getDecreaseGrayLevelsLuminosity(luminosity); image.setPixel(new ByteGrayColor(newLuminosity), x, y); } + + double getDecreaseGrayLevelsLuminosity(double luminosity) { + int numberOfIntervals = nbGrayLevels - 1; + double sizeOfIntervals = 1. / (double) numberOfIntervals; + return Math.floor(luminosity * numberOfIntervals) * sizeOfIntervals; + } } diff --git a/src/main/java/Display.java b/src/main/java/Display.java index cdf672f38fd794b6a15ca90ad401e6854f227987..03bd1b0d57569d287047ea66557d704bd545f13d 100644 --- a/src/main/java/Display.java +++ b/src/main/java/Display.java @@ -21,8 +21,8 @@ public class Display implements Initializable { this.image = MatrixGrayImage.createImageFromPGMFile("images/luminy.pgm"); - Transform transform = new CompositeTransform(new Transform[] {new DecreaseGrayLevels(8), new Outline(0.05), new Invert()}); - + //Transform transform = new CompositeTransform(new Transform[] {new DecreaseGrayLevels(8), new Outline(0.05), new Invert()}); + Transform transform = new Outline(0.025); transform.applyTo(image); image.writeIntoPGMFormat("/Users/arnaudlabourel/luminy.pgm"); render(); diff --git a/src/test/java/ByteGrayColorTest.java b/src/test/java/ByteGrayColorTest.java index ddca387ebbc3eac44600779f4a13c3af49e89f9a..ce60ed89f0043dbb8f1878ae9ae4448c0a182034 100644 --- a/src/test/java/ByteGrayColorTest.java +++ b/src/test/java/ByteGrayColorTest.java @@ -1,23 +1,54 @@ import org.junit.jupiter.api.Test; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.closeTo; -import static org.hamcrest.Matchers.is; +import static org.assertj.core.api.Assertions.*; public class ByteGrayColorTest { @Test public void testGetLuminosity_whenColorCreatedWithGrayLevel(){ ByteGrayColor black = new ByteGrayColor(0); ByteGrayColor white = new ByteGrayColor(255); - assertThat(black.getLuminosity(), is(closeTo(0.,.0001))); - assertThat(white.getLuminosity(), is(closeTo(1.,.0001))); + assertThat(black.getLuminosity()).isCloseTo(0., within(.01)); + assertThat(white.getLuminosity()).isCloseTo(1., within(.01)); } @Test public void testGetLuminosity_whenColorCreatedWithLuminosity(){ ByteGrayColor color1 = new ByteGrayColor(.25); ByteGrayColor color2 = new ByteGrayColor(.75); - assertThat(color1.getLuminosity(), is(closeTo(.25,.01))); - assertThat(color2.getLuminosity(), is(closeTo(.75,.01))); + assertThat(color1.getLuminosity()).isCloseTo(.25, within(.01)); + assertThat(color2.getLuminosity()).isCloseTo(.75, within(.01)); + } + + @Test + public void testCompareTo_whenColorsCreatedWithGrayLevel(){ + ByteGrayColor color1 = new ByteGrayColor(100); + ByteGrayColor color2 = new ByteGrayColor(100); + ByteGrayColor color3 = new ByteGrayColor(150); + assertThat(color1.compareTo(color3)).isNegative(); + assertThat(color3.compareTo(color1)).isPositive(); + assertThat(color1.compareTo(color3)).isEqualTo(-(color3.compareTo(color1))); + assertThat(color1.compareTo(color2)).isZero(); + } + + @Test + public void testCompareTo_whenColorsCreatedWithLuminosity(){ + ByteGrayColor color1 = new ByteGrayColor(0.20); + ByteGrayColor color2 = new ByteGrayColor(0.20); + ByteGrayColor color3 = new ByteGrayColor(0.60); + assertThat(color1.compareTo(color3)).isNegative(); + assertThat(color3.compareTo(color1)).isPositive(); + assertThat(color1.compareTo(color3)).isEqualTo(-(color3.compareTo(color1))); + assertThat(color1.compareTo(color2)).isZero(); + } + + @Test + public void testCompareTo_whenColorsCreatedWithLuminosityAndGrayLevel(){ + ByteGrayColor color1 = new ByteGrayColor(0.); + ByteGrayColor color2 = new ByteGrayColor(0); + ByteGrayColor color3 = new ByteGrayColor(100); + assertThat(color1.compareTo(color3)).isNegative(); + assertThat(color3.compareTo(color1)).isPositive(); + assertThat(color1.compareTo(color3)).isEqualTo(-(color3.compareTo(color1))); + assertThat(color1.compareTo(color2)).isZero(); } } diff --git a/src/test/java/DecreaseGrayLevelsTest.java b/src/test/java/DecreaseGrayLevelsTest.java new file mode 100644 index 0000000000000000000000000000000000000000..5ae652b57224140a47983d4fff7c035d16bdcaaa --- /dev/null +++ b/src/test/java/DecreaseGrayLevelsTest.java @@ -0,0 +1,13 @@ +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.*; + +public class DecreaseGrayLevelsTest { + @Test + void testGetDecreaseGrayLevelsLuminosity(){ + DecreaseGrayLevels decreaseGrayLevels = new DecreaseGrayLevels(5); + assertThat(decreaseGrayLevels.getDecreaseGrayLevelsLuminosity(0.125)).isCloseTo(0, within(.01)); + assertThat(decreaseGrayLevels.getDecreaseGrayLevelsLuminosity(0.625)).isCloseTo(0.5, within(.01)); + assertThat(decreaseGrayLevels.getDecreaseGrayLevelsLuminosity(1.)).isCloseTo(1., within(.01)); + } +} diff --git a/src/test/java/MatrixGrayImageTest.java b/src/test/java/MatrixGrayImageTest.java index 0664e25844ec0df36fef9024d04ea814c08f741e..72e61003a07e683217990f7025cddb57a974730d 100644 --- a/src/test/java/MatrixGrayImageTest.java +++ b/src/test/java/MatrixGrayImageTest.java @@ -1,23 +1,31 @@ import org.junit.jupiter.api.Test; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; - +import static org.assertj.core.api.Assertions.*; class MatrixGrayImageTest { @Test - void getWidth() { - assertThat(new MatrixGrayImage(0,0).getWidth(), is(equalTo(0))); - assertThat(new MatrixGrayImage(10,20).getWidth(), is(equalTo(10))); - assertThat(new MatrixGrayImage(400,300).getWidth(), is(equalTo(400))); + void testGetWidth() { + assertThat(new MatrixGrayImage(0,0).getWidth()).isEqualTo(0); + assertThat(new MatrixGrayImage(10,20).getWidth()).isEqualTo(10); + assertThat(new MatrixGrayImage(400,300).getWidth()).isEqualTo(400); + } + + @Test + void testGetHeight() { + assertThat(new MatrixGrayImage(0,0).getHeight()).isEqualTo(0); + assertThat(new MatrixGrayImage(10,20).getHeight()).isEqualTo(20); + assertThat(new MatrixGrayImage(400,300).getHeight()).isEqualTo(300); } @Test - void getHeight() { - assertThat(new MatrixGrayImage(0,0).getHeight(), is(equalTo(0))); - assertThat(new MatrixGrayImage(10,20).getHeight(), is(equalTo(20))); - assertThat(new MatrixGrayImage(400,300).getHeight(), is(equalTo(300))); + void testGetPixel_whenPixelHasBeenSet() { + GrayColor grey1 = new ByteGrayColor(0.2); + GrayColor grey2 = new ByteGrayColor(0.8); + MatrixGrayImage image = new MatrixGrayImage(10, 10); + image.setPixel(grey1, 1, 1); + assertThat(image.getPixelGrayColor(1,1)).isEqualTo(grey1); + image.setPixel(grey2, 3, 9); + assertThat(image.getPixelGrayColor(3,9)).isEqualTo(grey2); } } \ No newline at end of file