diff --git a/example/Abnormals/BuildFailure/kgenprog.toml b/example/Abnormals/BuildFailure01/kgenprog.toml similarity index 100% rename from example/Abnormals/BuildFailure/kgenprog.toml rename to example/Abnormals/BuildFailure01/kgenprog.toml diff --git a/example/Abnormals/BuildFailure/src/example/CloseToZero.java b/example/Abnormals/BuildFailure01/src/example/CloseToZero.java similarity index 100% rename from example/Abnormals/BuildFailure/src/example/CloseToZero.java rename to example/Abnormals/BuildFailure01/src/example/CloseToZero.java diff --git a/example/Abnormals/BuildFailure/src/example/CloseToZeroTest.java b/example/Abnormals/BuildFailure01/src/example/CloseToZeroTest.java similarity index 100% rename from example/Abnormals/BuildFailure/src/example/CloseToZeroTest.java rename to example/Abnormals/BuildFailure01/src/example/CloseToZeroTest.java diff --git a/example/Abnormals/BuildFailure02/kgenprog.toml b/example/Abnormals/BuildFailure02/kgenprog.toml new file mode 100644 index 000000000..2df10afbb --- /dev/null +++ b/example/Abnormals/BuildFailure02/kgenprog.toml @@ -0,0 +1,4 @@ +root-dir = "./" +src = ["src/example/CloseToZero.java"] +test = ["src/example/CloseToZeroTest.java"] + diff --git a/example/Abnormals/BuildFailure02/src/example/CloseToZero.java b/example/Abnormals/BuildFailure02/src/example/CloseToZero.java new file mode 100644 index 000000000..cb5770a4f --- /dev/null +++ b/example/Abnormals/BuildFailure02/src/example/CloseToZero.java @@ -0,0 +1,15 @@ +package example; + +public class CloseToZero { + + public int close_to_zero(int n) { + if (n == 0) { + n++ // build failure + } else if (n > 0) { + n--; + } else { + n++; + } + return n; + } +} diff --git a/example/Abnormals/BuildFailure02/src/example/CloseToZeroTest.java b/example/Abnormals/BuildFailure02/src/example/CloseToZeroTest.java new file mode 100644 index 000000000..583670e2a --- /dev/null +++ b/example/Abnormals/BuildFailure02/src/example/CloseToZeroTest.java @@ -0,0 +1,26 @@ +package example; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class CloseToZeroTest { + @Test + public void test01() { + assertEquals(9, new CloseToZero().close_to_zero(10)); + } + + @Test + public void test02() { + assertEquals(99, new CloseToZero().close_to_zero(100)); + } + + @Test + public void test03() { + assertEquals(0, new CloseToZero().close_to_zero(0)); + } + + @Test + public void test04() { + assertEquals(-9, new CloseToZero().close_to_zero(-10)); + } +} diff --git a/src/main/java/jp/kusumotolab/kgenprog/ga/variant/VariantStore.java b/src/main/java/jp/kusumotolab/kgenprog/ga/variant/VariantStore.java index 2441a6d95..a21b91737 100644 --- a/src/main/java/jp/kusumotolab/kgenprog/ga/variant/VariantStore.java +++ b/src/main/java/jp/kusumotolab/kgenprog/ga/variant/VariantStore.java @@ -9,6 +9,7 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; import java.util.function.Function; + import io.reactivex.Single; import jp.kusumotolab.kgenprog.Configuration; import jp.kusumotolab.kgenprog.OrdinalNumber; @@ -18,7 +19,9 @@ import jp.kusumotolab.kgenprog.ga.validation.SourceCodeValidation.Input; import jp.kusumotolab.kgenprog.project.GeneratedSourceCode; import jp.kusumotolab.kgenprog.project.test.EmptyTestResults; +import jp.kusumotolab.kgenprog.project.test.TestResult; import jp.kusumotolab.kgenprog.project.test.TestResults; +import org.junit.Test; /** * kGenProg が生成する Variant を生成したり保持したりするクラス @@ -225,9 +228,14 @@ private Variant createVariant(final Gene gene, final GeneratedSourceCode sourceC .cast(Variant.class) .cache(); + // ASTはあるがビルド&テスト実行がまだされていない場合 -> ビルド&テスト実行をする + // 以前生成したのと同じソースコードが生成された場合 -> その旨のメッセージを返す + // 上記以外の場合 -> 構文エラーが発生した登見なしてメッセージを返す final Single resultsSingle = sourceCode.shouldBeTested() ? strategies.execAsyncTestExecutor(variantSingle) - .cache() : Single.just(new EmptyTestResults("build failed or reproduced.")); + .cache() : Single.just(new EmptyTestResults( + sourceCode.isReproducedSourceCode() ? "reproduced." + : sourceCode.getGenerationMessage())); variant.setTestResultsSingle(resultsSingle); final Single fitnessSingle = Single diff --git a/src/test/java/jp/kusumotolab/kgenprog/KGenProgMainTest.java b/src/test/java/jp/kusumotolab/kgenprog/KGenProgMainTest.java index 661f63143..d9e261a31 100644 --- a/src/test/java/jp/kusumotolab/kgenprog/KGenProgMainTest.java +++ b/src/test/java/jp/kusumotolab/kgenprog/KGenProgMainTest.java @@ -111,14 +111,23 @@ public void testQuickSort01() { @Test - public void testBuildFailure() { - final Path rootPath = Paths.get("example/Abnormals/BuildFailure"); + public void testBuildFailure01() { + final Path rootPath = Paths.get("example/Abnormals/BuildFailure01"); final Path productPath = rootPath.resolve(PRODUCT_NAME); final Path testPath = rootPath.resolve(TEST_NAME); final ExitStatus status = runKGenProgMain(rootPath, productPath, testPath); assertThat(status).isEqualTo(ExitStatus.FAILURE_INITIAL_BUILD); + } + @Test + public void testBuildFailure02() { + final Path rootPath = Paths.get("example/Abnormals/BuildFailure02"); + final Path productPath = rootPath.resolve(PRODUCT_NAME); + final Path testPath = rootPath.resolve(TEST_NAME); + + final ExitStatus status = runKGenProgMain(rootPath, productPath, testPath); + assertThat(status).isEqualTo(ExitStatus.FAILURE_INITIAL_BUILD); } @Test