From 75fe85713997d24aae4c6b32016793ac07ebf231 Mon Sep 17 00:00:00 2001 From: Riccardo Azzolini Date: Fri, 5 Oct 2018 22:14:27 +0200 Subject: [PATCH] Implement SubFunctionPattern --- .../dsl/patterns/SubFunctionPattern.java | 31 +++++++++++++++++++ .../warppi/math/rules/dsl/PatternTest.java | 22 +++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 core/src/main/java/it/cavallium/warppi/math/rules/dsl/patterns/SubFunctionPattern.java diff --git a/core/src/main/java/it/cavallium/warppi/math/rules/dsl/patterns/SubFunctionPattern.java b/core/src/main/java/it/cavallium/warppi/math/rules/dsl/patterns/SubFunctionPattern.java new file mode 100644 index 00000000..4f33ec1b --- /dev/null +++ b/core/src/main/java/it/cavallium/warppi/math/rules/dsl/patterns/SubFunctionPattern.java @@ -0,0 +1,31 @@ +package it.cavallium.warppi.math.rules.dsl.patterns; + +import it.cavallium.warppi.math.Function; +import it.cavallium.warppi.math.rules.dsl.Pattern; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +/** + * Matches and generates any function as a named sub-function. + */ +public class SubFunctionPattern implements Pattern { + private final String name; + + public SubFunctionPattern(String name) { + this.name = name; + } + + @Override + public Optional> match(Function function) { + HashMap subFunctions = new HashMap<>(); + subFunctions.put(name, function); + return Optional.of(subFunctions); + } + + @Override + public Function replace(Map subFunctions) { + return subFunctions.get(name); + } +} diff --git a/core/src/test/java/it/cavallium/warppi/math/rules/dsl/PatternTest.java b/core/src/test/java/it/cavallium/warppi/math/rules/dsl/PatternTest.java index 21951b1b..0f7c1651 100644 --- a/core/src/test/java/it/cavallium/warppi/math/rules/dsl/PatternTest.java +++ b/core/src/test/java/it/cavallium/warppi/math/rules/dsl/PatternTest.java @@ -1,8 +1,30 @@ package it.cavallium.warppi.math.rules.dsl; +import it.cavallium.warppi.math.Function; +import it.cavallium.warppi.math.functions.Number; +import it.cavallium.warppi.math.functions.Sum; +import it.cavallium.warppi.math.rules.dsl.patterns.SubFunctionPattern; import org.junit.Test; +import java.util.Map; +import java.util.Optional; + import static org.junit.Assert.*; public class PatternTest { + @Test + public void subFunctionPattern() { + final Pattern pattern = new SubFunctionPattern("x"); + + final Function func = new Sum( + null, + new Number(null, 1), + new Number(null, 2) + ); + + final Optional> subFunctions = pattern.match(func); + assertTrue(subFunctions.isPresent()); + + assertEquals(func, pattern.replace(subFunctions.get())); + } } \ No newline at end of file