From 43987d4ce8378d0bfc4e7bb82ca5a53190f0a4b2 Mon Sep 17 00:00:00 2001 From: Felix Reimann Date: Thu, 20 Sep 2018 21:14:24 +0200 Subject: [PATCH 1/3] tests for UnboundedArchive, BoundedArchive --- .../common/archive/BoundedArchiveTest.java | 203 ++++++++++++++++++ .../common/archive/UnboundedArchiveTest.java | 63 ++++++ 2 files changed, 266 insertions(+) create mode 100644 opt4j-core/src/test/java/org/opt4j/core/common/archive/BoundedArchiveTest.java create mode 100644 opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java diff --git a/opt4j-core/src/test/java/org/opt4j/core/common/archive/BoundedArchiveTest.java b/opt4j-core/src/test/java/org/opt4j/core/common/archive/BoundedArchiveTest.java new file mode 100644 index 00000000..21c9eb56 --- /dev/null +++ b/opt4j-core/src/test/java/org/opt4j/core/common/archive/BoundedArchiveTest.java @@ -0,0 +1,203 @@ +package org.opt4j.core.common.archive; + +import java.util.Collection; +import java.util.Collections; + +import org.junit.Assert; +import org.junit.Test; +import org.opt4j.core.Individual; +import org.opt4j.core.IndividualFactory; +import org.opt4j.core.Objective; +import org.opt4j.core.Objectives; +import org.opt4j.core.common.archive.CrowdingArchiveTest.MockProblemModule; + +import com.google.inject.Guice; +import com.google.inject.Injector; + +public class BoundedArchiveTest { + @Test(expected = IllegalArgumentException.class) + public void boundedArchiveIllegalCapacity() { + BoundedArchive archive = new BoundedArchive(-1) { + + @Override + protected boolean updateWithNondominated(Collection candidates) { + Assert.fail(); + return false; + } + }; + Assert.fail("should not be creatable: " + archive); + } + + @Test + public void setCapacity() { + BoundedArchive archive = new BoundedArchive(10) { + @Override + protected boolean updateWithNondominated(Collection candidates) { + Assert.fail(); + return false; + } + }; + Assert.assertEquals(10, archive.getCapacity()); + archive.setCapacity(20); + Assert.assertEquals(20, archive.getCapacity()); + } + + @Test(expected = IllegalArgumentException.class) + public void setCapacityIllegalCapacity() { + BoundedArchive archive = new BoundedArchive(10) { + @Override + protected boolean updateWithNondominated(Collection candidates) { + Assert.fail(); + return false; + } + }; + archive.setCapacity(-1); + } + + @Test + public void addCheckedIndividual() { + Injector injector = Guice.createInjector(new MockProblemModule()); + IndividualFactory factory = injector.getInstance(IndividualFactory.class); + + Objective o0 = new Objective("o0"); + Objective o1 = new Objective("o1"); + + Individual individual1 = factory.create(); + Objectives objectivesA0 = new Objectives(); + objectivesA0.add(o0, 1); + objectivesA0.add(o1, 0); + individual1.setObjectives(objectivesA0); + + BoundedArchive archive = new BoundedArchive(1) { + @Override + protected boolean updateWithNondominated(Collection candidates) { + individuals.addAll(candidates); + return true; + } + }; + archive.addCheckedIndividual(individual1); + Assert.assertTrue(archive.contains(individual1)); + Assert.assertEquals(1, archive.size()); + } + + @Test + public void addCheckedIndividualTwice() { + Injector injector = Guice.createInjector(new MockProblemModule()); + IndividualFactory factory = injector.getInstance(IndividualFactory.class); + + Objective o0 = new Objective("o0"); + Objective o1 = new Objective("o1"); + + Individual individual1 = factory.create(); + Objectives objectivesA0 = new Objectives(); + objectivesA0.add(o0, 1); + objectivesA0.add(o1, 0); + individual1.setObjectives(objectivesA0); + + BoundedArchive archive = new BoundedArchive(1) { + @Override + protected boolean updateWithNondominated(Collection candidates) { + individuals.addAll(candidates); + return true; + } + }; + archive.addCheckedIndividual(individual1); + archive.addCheckedIndividual(individual1); + Assert.assertTrue(archive.contains(individual1)); + Assert.assertEquals(1, archive.size()); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void addCheckedIndividualDespiteArchiveFull() { + Injector injector = Guice.createInjector(new MockProblemModule()); + IndividualFactory factory = injector.getInstance(IndividualFactory.class); + + Objective o0 = new Objective("o0"); + Objective o1 = new Objective("o1"); + + Individual individual1 = factory.create(); + Objectives objectivesA0 = new Objectives(); + objectivesA0.add(o0, 1); + objectivesA0.add(o1, 0); + individual1.setObjectives(objectivesA0); + + Individual individual2 = factory.create(); + Objectives objectivesA1 = new Objectives(); + objectivesA1.add(o0, 0); + objectivesA1.add(o1, 1); + individual2.setObjectives(objectivesA1); + + BoundedArchive archive = new BoundedArchive(1) { + @Override + protected boolean updateWithNondominated(Collection candidates) { + individuals.addAll(candidates); + return true; + } + }; + archive.addCheckedIndividual(individual1); + Assert.assertTrue(archive.contains(individual1)); + Assert.assertEquals(1, archive.size()); + + archive.addCheckedIndividual(individual2); + } + + @Test + public void addCheckedIndividuals() { + Injector injector = Guice.createInjector(new MockProblemModule()); + IndividualFactory factory = injector.getInstance(IndividualFactory.class); + + Objective o0 = new Objective("o0"); + Objective o1 = new Objective("o1"); + + Individual individual1 = factory.create(); + Objectives objectivesA0 = new Objectives(); + objectivesA0.add(o0, 1); + objectivesA0.add(o1, 0); + individual1.setObjectives(objectivesA0); + + BoundedArchive archive = new BoundedArchive(1) { + @Override + protected boolean updateWithNondominated(Collection candidates) { + individuals.addAll(candidates); + return true; + } + }; + archive.addCheckedIndividuals(Collections.singleton(individual1)); + Assert.assertTrue(archive.contains(individual1)); + Assert.assertEquals(1, archive.size()); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void addCheckedIndividualsDespiteArchiveFull() { + Injector injector = Guice.createInjector(new MockProblemModule()); + IndividualFactory factory = injector.getInstance(IndividualFactory.class); + + Objective o0 = new Objective("o0"); + Objective o1 = new Objective("o1"); + + Individual individual1 = factory.create(); + Objectives objectivesA0 = new Objectives(); + objectivesA0.add(o0, 1); + objectivesA0.add(o1, 0); + individual1.setObjectives(objectivesA0); + + Individual individual2 = factory.create(); + Objectives objectivesA1 = new Objectives(); + objectivesA1.add(o0, 0); + objectivesA1.add(o1, 1); + individual2.setObjectives(objectivesA1); + + BoundedArchive archive = new BoundedArchive(1) { + @Override + protected boolean updateWithNondominated(Collection candidates) { + individuals.addAll(candidates); + return true; + } + }; + archive.addCheckedIndividuals(Collections.singleton(individual1)); + Assert.assertTrue(archive.contains(individual1)); + Assert.assertEquals(1, archive.size()); + + archive.addCheckedIndividuals(Collections.singleton(individual2)); + } +} diff --git a/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java b/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java new file mode 100644 index 00000000..e33f9092 --- /dev/null +++ b/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java @@ -0,0 +1,63 @@ +package org.opt4j.core.common.archive; + +import java.util.Collections; + +import org.junit.Assert; +import org.junit.Test; +import org.opt4j.core.Individual; +import org.opt4j.core.IndividualFactory; +import org.opt4j.core.Objective; +import org.opt4j.core.Objectives; +import org.opt4j.core.common.archive.CrowdingArchiveTest.MockProblemModule; + +import com.google.inject.Guice; +import com.google.inject.Injector; + +public class UnboundedArchiveTest { + + @Test + public void updateWithNondominated() { + Injector injector = Guice.createInjector(new MockProblemModule()); + IndividualFactory factory = injector.getInstance(IndividualFactory.class); + + Objective o0 = new Objective("o0"); + Objective o1 = new Objective("o1"); + + Individual individual = factory.create(); + Objectives objectivesA0 = new Objectives(); + objectivesA0.add(o0, 0); + objectivesA0.add(o1, 0); + individual.setObjectives(objectivesA0); + + UnboundedArchive archive = new UnboundedArchive(); + Assert.assertFalse(archive.iterator().hasNext()); + Assert.assertTrue(archive.updateWithNondominated(Collections.singleton(individual))); + Assert.assertTrue(archive.iterator().hasNext()); + Assert.assertEquals(archive.iterator().next(), individual); + } + + @Test + public void updateWithExisting() { + Injector injector = Guice.createInjector(new MockProblemModule()); + IndividualFactory factory = injector.getInstance(IndividualFactory.class); + + Objective o0 = new Objective("o0"); + Objective o1 = new Objective("o1"); + + Individual individual = factory.create(); + Objectives objectivesA0 = new Objectives(); + objectivesA0.add(o0, 0); + objectivesA0.add(o1, 0); + individual.setObjectives(objectivesA0); + + UnboundedArchive archive = new UnboundedArchive(); + archive.updateWithNondominated(Collections.singleton(individual)); + Assert.assertFalse(archive.updateWithNondominated(Collections.singleton(individual))); + } + + @Test + public void updateWithNone() { + UnboundedArchive archive = new UnboundedArchive(); + Assert.assertFalse(archive.updateWithNondominated(Collections.emptySet())); + } +} From b01a60b1765a6f68ead4cbaa0a7ede4deeaaff34 Mon Sep 17 00:00:00 2001 From: Felix Reimann Date: Tue, 25 Sep 2018 23:22:02 +0200 Subject: [PATCH 2/3] define returned type --- .../org/opt4j/core/common/archive/UnboundedArchiveTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java b/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java index e33f9092..a4a1ef02 100644 --- a/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java +++ b/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java @@ -58,6 +58,6 @@ public void updateWithExisting() { @Test public void updateWithNone() { UnboundedArchive archive = new UnboundedArchive(); - Assert.assertFalse(archive.updateWithNondominated(Collections.emptySet())); + Assert.assertFalse(archive.updateWithNondominated(Collections. emptySet())); } } From 30077d044492942018f94774013a6da791a31627 Mon Sep 17 00:00:00 2001 From: Felix Reimann Date: Fri, 28 Sep 2018 20:54:44 +0200 Subject: [PATCH 3/3] use mock individuals --- opt4j-core/build.gradle | 1 + .../common/archive/BoundedArchiveTest.java | 83 ++----------------- .../common/archive/UnboundedArchiveTest.java | 33 +------- 3 files changed, 14 insertions(+), 103 deletions(-) diff --git a/opt4j-core/build.gradle b/opt4j-core/build.gradle index adf2c8e9..e1f2d292 100644 --- a/opt4j-core/build.gradle +++ b/opt4j-core/build.gradle @@ -4,6 +4,7 @@ dependencies { compile group: 'com.google.inject', name: 'guice', version: '4.2.1' testCompile group: 'junit', name: 'junit', version: '4.12' + testCompile group: 'org.mockito', name: 'mockito-core', version: '2.22.0' } processResources { diff --git a/opt4j-core/src/test/java/org/opt4j/core/common/archive/BoundedArchiveTest.java b/opt4j-core/src/test/java/org/opt4j/core/common/archive/BoundedArchiveTest.java index 21c9eb56..834deca6 100644 --- a/opt4j-core/src/test/java/org/opt4j/core/common/archive/BoundedArchiveTest.java +++ b/opt4j-core/src/test/java/org/opt4j/core/common/archive/BoundedArchiveTest.java @@ -1,18 +1,13 @@ package org.opt4j.core.common.archive; +import static org.mockito.Mockito.mock; + import java.util.Collection; import java.util.Collections; import org.junit.Assert; import org.junit.Test; import org.opt4j.core.Individual; -import org.opt4j.core.IndividualFactory; -import org.opt4j.core.Objective; -import org.opt4j.core.Objectives; -import org.opt4j.core.common.archive.CrowdingArchiveTest.MockProblemModule; - -import com.google.inject.Guice; -import com.google.inject.Injector; public class BoundedArchiveTest { @Test(expected = IllegalArgumentException.class) @@ -56,17 +51,7 @@ protected boolean updateWithNondominated(Collection candidates) { @Test public void addCheckedIndividual() { - Injector injector = Guice.createInjector(new MockProblemModule()); - IndividualFactory factory = injector.getInstance(IndividualFactory.class); - - Objective o0 = new Objective("o0"); - Objective o1 = new Objective("o1"); - - Individual individual1 = factory.create(); - Objectives objectivesA0 = new Objectives(); - objectivesA0.add(o0, 1); - objectivesA0.add(o1, 0); - individual1.setObjectives(objectivesA0); + Individual individual1 = mock(Individual.class); BoundedArchive archive = new BoundedArchive(1) { @Override @@ -82,17 +67,7 @@ protected boolean updateWithNondominated(Collection candidates) { @Test public void addCheckedIndividualTwice() { - Injector injector = Guice.createInjector(new MockProblemModule()); - IndividualFactory factory = injector.getInstance(IndividualFactory.class); - - Objective o0 = new Objective("o0"); - Objective o1 = new Objective("o1"); - - Individual individual1 = factory.create(); - Objectives objectivesA0 = new Objectives(); - objectivesA0.add(o0, 1); - objectivesA0.add(o1, 0); - individual1.setObjectives(objectivesA0); + Individual individual1 = mock(Individual.class); BoundedArchive archive = new BoundedArchive(1) { @Override @@ -109,23 +84,8 @@ protected boolean updateWithNondominated(Collection candidates) { @Test(expected = IndexOutOfBoundsException.class) public void addCheckedIndividualDespiteArchiveFull() { - Injector injector = Guice.createInjector(new MockProblemModule()); - IndividualFactory factory = injector.getInstance(IndividualFactory.class); - - Objective o0 = new Objective("o0"); - Objective o1 = new Objective("o1"); - - Individual individual1 = factory.create(); - Objectives objectivesA0 = new Objectives(); - objectivesA0.add(o0, 1); - objectivesA0.add(o1, 0); - individual1.setObjectives(objectivesA0); - - Individual individual2 = factory.create(); - Objectives objectivesA1 = new Objectives(); - objectivesA1.add(o0, 0); - objectivesA1.add(o1, 1); - individual2.setObjectives(objectivesA1); + Individual individual1 = mock(Individual.class); + Individual individual2 = mock(Individual.class); BoundedArchive archive = new BoundedArchive(1) { @Override @@ -143,17 +103,7 @@ protected boolean updateWithNondominated(Collection candidates) { @Test public void addCheckedIndividuals() { - Injector injector = Guice.createInjector(new MockProblemModule()); - IndividualFactory factory = injector.getInstance(IndividualFactory.class); - - Objective o0 = new Objective("o0"); - Objective o1 = new Objective("o1"); - - Individual individual1 = factory.create(); - Objectives objectivesA0 = new Objectives(); - objectivesA0.add(o0, 1); - objectivesA0.add(o1, 0); - individual1.setObjectives(objectivesA0); + Individual individual1 = mock(Individual.class); BoundedArchive archive = new BoundedArchive(1) { @Override @@ -169,23 +119,8 @@ protected boolean updateWithNondominated(Collection candidates) { @Test(expected = IndexOutOfBoundsException.class) public void addCheckedIndividualsDespiteArchiveFull() { - Injector injector = Guice.createInjector(new MockProblemModule()); - IndividualFactory factory = injector.getInstance(IndividualFactory.class); - - Objective o0 = new Objective("o0"); - Objective o1 = new Objective("o1"); - - Individual individual1 = factory.create(); - Objectives objectivesA0 = new Objectives(); - objectivesA0.add(o0, 1); - objectivesA0.add(o1, 0); - individual1.setObjectives(objectivesA0); - - Individual individual2 = factory.create(); - Objectives objectivesA1 = new Objectives(); - objectivesA1.add(o0, 0); - objectivesA1.add(o1, 1); - individual2.setObjectives(objectivesA1); + Individual individual1 = mock(Individual.class); + Individual individual2 = mock(Individual.class); BoundedArchive archive = new BoundedArchive(1) { @Override diff --git a/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java b/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java index a4a1ef02..a12cfdbd 100644 --- a/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java +++ b/opt4j-core/src/test/java/org/opt4j/core/common/archive/UnboundedArchiveTest.java @@ -1,33 +1,18 @@ package org.opt4j.core.common.archive; +import static org.mockito.Mockito.mock; + import java.util.Collections; import org.junit.Assert; import org.junit.Test; import org.opt4j.core.Individual; -import org.opt4j.core.IndividualFactory; -import org.opt4j.core.Objective; -import org.opt4j.core.Objectives; -import org.opt4j.core.common.archive.CrowdingArchiveTest.MockProblemModule; - -import com.google.inject.Guice; -import com.google.inject.Injector; public class UnboundedArchiveTest { @Test public void updateWithNondominated() { - Injector injector = Guice.createInjector(new MockProblemModule()); - IndividualFactory factory = injector.getInstance(IndividualFactory.class); - - Objective o0 = new Objective("o0"); - Objective o1 = new Objective("o1"); - - Individual individual = factory.create(); - Objectives objectivesA0 = new Objectives(); - objectivesA0.add(o0, 0); - objectivesA0.add(o1, 0); - individual.setObjectives(objectivesA0); + Individual individual = mock(Individual.class); UnboundedArchive archive = new UnboundedArchive(); Assert.assertFalse(archive.iterator().hasNext()); @@ -38,17 +23,7 @@ public void updateWithNondominated() { @Test public void updateWithExisting() { - Injector injector = Guice.createInjector(new MockProblemModule()); - IndividualFactory factory = injector.getInstance(IndividualFactory.class); - - Objective o0 = new Objective("o0"); - Objective o1 = new Objective("o1"); - - Individual individual = factory.create(); - Objectives objectivesA0 = new Objectives(); - objectivesA0.add(o0, 0); - objectivesA0.add(o1, 0); - individual.setObjectives(objectivesA0); + Individual individual = mock(Individual.class); UnboundedArchive archive = new UnboundedArchive(); archive.updateWithNondominated(Collections.singleton(individual));