Pr/1235 Review (#1250)
* Add simple implementation for strangler pattern. * Add strangler pattern in pom.xml. * change package name * Revert "change package name" This reverts commit 430bd9073ea7bea6430586a0953c77f1798aacc8. * Code review for strangler Delete final of method parameters. Add final to private members. Change package name. * Revert "Code review for strangler" This reverts commit d5063567083e0348d678a938bd749e17343bcb8e. * Revert "Revert "Code review for strangler"" This reverts commit c8fd65fda782749c4f74f6de85da0f271d3c48a8. * Remove unnecessary files
This commit is contained in:
parent
5192beb5dd
commit
6fe219d644
1
pom.xml
1
pom.xml
@ -190,6 +190,7 @@
|
|||||||
<module>combinator</module>
|
<module>combinator</module>
|
||||||
<module>update-method</module>
|
<module>update-method</module>
|
||||||
<module>leader-followers</module>
|
<module>leader-followers</module>
|
||||||
|
<module>strangler</module>
|
||||||
<module>arrange-act-assert</module>
|
<module>arrange-act-assert</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
|
31
strangler/README.md
Normal file
31
strangler/README.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
layout: pattern
|
||||||
|
title: Strangler
|
||||||
|
folder: strangler
|
||||||
|
permalink: /patterns/strangler/
|
||||||
|
categories: Structural
|
||||||
|
tags:
|
||||||
|
- Extensibility
|
||||||
|
---
|
||||||
|
|
||||||
|
## Intent
|
||||||
|
Incrementally migrate a legacy system by gradually replacing specific pieces of functionality
|
||||||
|
with new applications and services. As features from the legacy system are replaced, the new
|
||||||
|
system eventually covers all the old system's features and may has its own new features, then
|
||||||
|
strangling the old system and allowing you to decommission it.
|
||||||
|
|
||||||
|
## Class diagram
|
||||||
|

|
||||||
|
|
||||||
|
## Applicability
|
||||||
|
This strangler pattern is a safe way to phase one thing out for something better, cheaper, or
|
||||||
|
more expandable. Especially when you want to update legacy system with new techniques and need
|
||||||
|
continuously develop new features at the same time. Note that this pattern indeed need extra effort,
|
||||||
|
so usually use it when the system is not so simple.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
* [Strangler pattern](https://docs.microsoft.com/en-us/azure/architecture/patterns/strangler#context-and-problem)
|
||||||
|
* [Legacy Application Strangulation : Case Studies](https://paulhammant.com/2013/07/14/legacy-application-strangulation-case-studies/)
|
||||||
|
|
||||||
|
|
BIN
strangler/etc/strangler.png
Normal file
BIN
strangler/etc/strangler.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 76 KiB |
61
strangler/etc/strangler.puml
Normal file
61
strangler/etc/strangler.puml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
@startuml
|
||||||
|
|
||||||
|
package com.iluwatar.strangler {
|
||||||
|
class App {
|
||||||
|
+ main(args : String[]) {static}
|
||||||
|
}
|
||||||
|
|
||||||
|
class OldArithmetic {
|
||||||
|
- LOGGER : Logger {static}
|
||||||
|
- VERSION : String {static}
|
||||||
|
- source : OldSource
|
||||||
|
+ sum(nums : int...)
|
||||||
|
+ mul(nums : int...)
|
||||||
|
}
|
||||||
|
|
||||||
|
class HalfArithmetic {
|
||||||
|
- LOGGER : Logger {static}
|
||||||
|
- VERSION : String {static}
|
||||||
|
- oldSource : OldSource
|
||||||
|
- newSource : HalfSource
|
||||||
|
+ sum(nums : int...)
|
||||||
|
+ mul(nums : int...)
|
||||||
|
+ ifHasZero(nums : int...)
|
||||||
|
}
|
||||||
|
|
||||||
|
class NewArithmetic {
|
||||||
|
- LOGGER : Logger {static}
|
||||||
|
- VERSION : String {static}
|
||||||
|
- source : NewSource
|
||||||
|
+ sum(nums : int...)
|
||||||
|
+ mul(nums : int...)
|
||||||
|
+ ifHasZero(nums : int...)
|
||||||
|
}
|
||||||
|
|
||||||
|
class OldSource {
|
||||||
|
- LOGGER : Logger {static}
|
||||||
|
- VERSION : String {static}
|
||||||
|
+ accumulateSum(nums : int...)
|
||||||
|
+ accumulateMul(nums : int...)
|
||||||
|
}
|
||||||
|
|
||||||
|
class HalfSource {
|
||||||
|
- LOGGER : Logger {static}
|
||||||
|
- VERSION : String {static}
|
||||||
|
+ accumulateSum(nums : int...)
|
||||||
|
+ ifNonZero(nums : int...)
|
||||||
|
}
|
||||||
|
|
||||||
|
class NewSource {
|
||||||
|
- LOGGER : Logger {static}
|
||||||
|
- VERSION : String {static}
|
||||||
|
+ accumulateSum(nums : int...)
|
||||||
|
+ accumulateMul(nums : int...)
|
||||||
|
+ ifNonZero(nums : int...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OldArithmetic o--> OldSource
|
||||||
|
HalfArithmetic o--> OldSource
|
||||||
|
HalfArithmetic o--> HalfSource
|
||||||
|
NewArithmetic o--> NewSource
|
||||||
|
@enduml
|
66
strangler/pom.xml
Normal file
66
strangler/pom.xml
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The MIT License
|
||||||
|
Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
-->
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>java-design-patterns</artifactId>
|
||||||
|
<groupId>com.iluwatar</groupId>
|
||||||
|
<version>1.23.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>strangler</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<configuration>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<mainClass>com.iluwatar.strangler.App</mainClass>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
69
strangler/src/main/java/com/iluwatar/strangler/App.java
Normal file
69
strangler/src/main/java/com/iluwatar/strangler/App.java
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* <p>The Strangler pattern is a software design pattern that incrementally migrate a legacy
|
||||||
|
* system by gradually replacing specific pieces of functionality with new applications and
|
||||||
|
* services. As features from the legacy system are replaced, the new system eventually
|
||||||
|
* replaces all of the old system's features, strangling the old system and allowing you
|
||||||
|
* to decommission it.</p>
|
||||||
|
*
|
||||||
|
* <p>This pattern is not only about updating but also enhancement.</p>
|
||||||
|
*
|
||||||
|
* <p>In this example, {@link OldArithmetic} indicates old system and its implementation depends
|
||||||
|
* on its source ({@link OldSource}). Now we tend to update system with new techniques and
|
||||||
|
* new features. In reality, the system may too complex, so usually need gradual migration.
|
||||||
|
* {@link HalfArithmetic} indicates system in the process of migration, its implementation
|
||||||
|
* depends on old one ({@link OldSource}) and under development one ({@link HalfSource}). The
|
||||||
|
* {@link HalfSource} covers part of {@link OldSource} and add new functionality. You can release
|
||||||
|
* this version system with new features, which also supports old version system functionalities.
|
||||||
|
* After whole migration, the new system ({@link NewArithmetic}) only depends on new source
|
||||||
|
* ({@link NewSource}).</p>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class App {
|
||||||
|
/**
|
||||||
|
* Program entry point.
|
||||||
|
* @param args command line args
|
||||||
|
*/
|
||||||
|
public static void main(final String[] args) {
|
||||||
|
final var nums = new int[]{1, 2, 3, 4, 5};
|
||||||
|
//Before migration
|
||||||
|
final var oldSystem = new OldArithmetic(new OldSource());
|
||||||
|
oldSystem.sum(nums);
|
||||||
|
oldSystem.mul(nums);
|
||||||
|
//In process of migration
|
||||||
|
final var halfSystem = new HalfArithmetic(new HalfSource(), new OldSource());
|
||||||
|
halfSystem.sum(nums);
|
||||||
|
halfSystem.mul(nums);
|
||||||
|
halfSystem.ifHasZero(nums);
|
||||||
|
//After migration
|
||||||
|
final var newSystem = new NewArithmetic(new NewSource());
|
||||||
|
newSystem.sum(nums);
|
||||||
|
newSystem.mul(nums);
|
||||||
|
newSystem.ifHasZero(nums);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* System under migration. Depends on old version source ({@link OldSource}) and
|
||||||
|
* developing one ({@link HalfSource}).
|
||||||
|
*/
|
||||||
|
public class HalfArithmetic {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(HalfArithmetic.class);
|
||||||
|
private static final String VERSION = "1.5";
|
||||||
|
|
||||||
|
private final HalfSource newSource;
|
||||||
|
private final OldSource oldSource;
|
||||||
|
|
||||||
|
public HalfArithmetic(HalfSource newSource, OldSource oldSource) {
|
||||||
|
this.newSource = newSource;
|
||||||
|
this.oldSource = oldSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accumulate sum.
|
||||||
|
* @param nums numbers need to add together
|
||||||
|
* @return accumulate sum
|
||||||
|
*/
|
||||||
|
public int sum(int... nums) {
|
||||||
|
LOGGER.info("Arithmetic sum {}", VERSION);
|
||||||
|
return newSource.accumulateSum(nums);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accumulate multiplication.
|
||||||
|
* @param nums numbers need to multiply together
|
||||||
|
* @return accumulate multiplication
|
||||||
|
*/
|
||||||
|
public int mul(int... nums) {
|
||||||
|
LOGGER.info("Arithmetic mul {}", VERSION);
|
||||||
|
return oldSource.accumulateMul(nums);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chech if has any zero.
|
||||||
|
* @param nums numbers need to check
|
||||||
|
* @return if has any zero, return true, else, return false
|
||||||
|
*/
|
||||||
|
public boolean ifHasZero(int... nums) {
|
||||||
|
LOGGER.info("Arithmetic check zero {}", VERSION);
|
||||||
|
return !newSource.ifNonZero(nums);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source under development. Replace part of old source and has added some new features.
|
||||||
|
*/
|
||||||
|
public class HalfSource {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(HalfSource.class);
|
||||||
|
private static final String VERSION = "1.5";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implement accumulate sum with new technique.
|
||||||
|
* Replace old one in {@link OldSource}
|
||||||
|
*/
|
||||||
|
public int accumulateSum(int... nums) {
|
||||||
|
LOGGER.info("Source module {}", VERSION);
|
||||||
|
return Arrays.stream(nums).reduce(0, Integer::sum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if all number is not zero.
|
||||||
|
* New feature.
|
||||||
|
*/
|
||||||
|
public boolean ifNonZero(int... nums) {
|
||||||
|
LOGGER.info("Source module {}", VERSION);
|
||||||
|
return Arrays.stream(nums).allMatch(num -> num != 0);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* System after whole migration. Only depends on new version source ({@link NewSource}).
|
||||||
|
*/
|
||||||
|
public class NewArithmetic {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(NewArithmetic.class);
|
||||||
|
private static final String VERSION = "2.0";
|
||||||
|
|
||||||
|
private final NewSource source;
|
||||||
|
|
||||||
|
public NewArithmetic(NewSource source) {
|
||||||
|
this.source = source;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accumulate sum.
|
||||||
|
* @param nums numbers need to add together
|
||||||
|
* @return accumulate sum
|
||||||
|
*/
|
||||||
|
public int sum(int... nums) {
|
||||||
|
LOGGER.info("Arithmetic sum {}", VERSION);
|
||||||
|
return source.accumulateSum(nums);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accumulate multiplication.
|
||||||
|
* @param nums numbers need to multiply together
|
||||||
|
* @return accumulate multiplication
|
||||||
|
*/
|
||||||
|
public int mul(int... nums) {
|
||||||
|
LOGGER.info("Arithmetic mul {}", VERSION);
|
||||||
|
return source.accumulateMul(nums);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chech if has any zero.
|
||||||
|
* @param nums numbers need to check
|
||||||
|
* @return if has any zero, return true, else, return false
|
||||||
|
*/
|
||||||
|
public boolean ifHasZero(int... nums) {
|
||||||
|
LOGGER.info("Arithmetic check zero {}", VERSION);
|
||||||
|
return !source.ifNonZero(nums);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* New source. Completely covers functionalities of old source with new techniques
|
||||||
|
* and also has some new features.
|
||||||
|
*/
|
||||||
|
public class NewSource {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(NewSource.class);
|
||||||
|
private static final String VERSION = "2.0";
|
||||||
|
|
||||||
|
public int accumulateSum(int... nums) {
|
||||||
|
LOGGER.info("Source module {}", VERSION);
|
||||||
|
return Arrays.stream(nums).reduce(0, Integer::sum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implement accumulate multiply with new technique.
|
||||||
|
* Replace old one in {@link OldSource}
|
||||||
|
*/
|
||||||
|
public int accumulateMul(int... nums) {
|
||||||
|
LOGGER.info("Source module {}", VERSION);
|
||||||
|
return Arrays.stream(nums).reduce(1, (a, b) -> a * b);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean ifNonZero(int... nums) {
|
||||||
|
LOGGER.info("Source module {}", VERSION);
|
||||||
|
return Arrays.stream(nums).allMatch(num -> num != 0);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Old version system depends on old version source ({@link OldSource}).
|
||||||
|
*/
|
||||||
|
public class OldArithmetic {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(OldArithmetic.class);
|
||||||
|
private static final String VERSION = "1.0";
|
||||||
|
|
||||||
|
private final OldSource source;
|
||||||
|
|
||||||
|
public OldArithmetic(OldSource source) {
|
||||||
|
this.source = source;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accumulate sum.
|
||||||
|
* @param nums numbers need to add together
|
||||||
|
* @return accumulate sum
|
||||||
|
*/
|
||||||
|
public int sum(int... nums) {
|
||||||
|
LOGGER.info("Arithmetic sum {}", VERSION);
|
||||||
|
return source.accumulateSum(nums);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accumulate multiplication.
|
||||||
|
* @param nums numbers need to multiply together
|
||||||
|
* @return accumulate multiplication
|
||||||
|
*/
|
||||||
|
public int mul(int... nums) {
|
||||||
|
LOGGER.info("Arithmetic mul {}", VERSION);
|
||||||
|
return source.accumulateMul(nums);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Old source with techniques out of date.
|
||||||
|
*/
|
||||||
|
public class OldSource {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(OldSource.class);
|
||||||
|
private static final String VERSION = "1.0";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implement accumulate sum with old technique.
|
||||||
|
*/
|
||||||
|
public int accumulateSum(int... nums) {
|
||||||
|
LOGGER.info("Source module {}", VERSION);
|
||||||
|
var sum = 0;
|
||||||
|
for (final var num : nums) {
|
||||||
|
sum += num;
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implement accumulate multiply with old technique.
|
||||||
|
*/
|
||||||
|
public int accumulateMul(int... nums) {
|
||||||
|
LOGGER.info("Source module {}", VERSION);
|
||||||
|
var sum = 1;
|
||||||
|
for (final var num : nums) {
|
||||||
|
sum *= num;
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
}
|
36
strangler/src/test/java/com/iluwatar/strangler/AppTest.java
Normal file
36
strangler/src/test/java/com/iluwatar/strangler/AppTest.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application test
|
||||||
|
*/
|
||||||
|
public class AppTest {
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
App.main(new String[]{});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test methods in HalfArithmetic
|
||||||
|
*/
|
||||||
|
class HalfArithmeticTest {
|
||||||
|
private static final HalfArithmetic arithmetic = new HalfArithmetic(new HalfSource(), new OldSource());
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSum() {
|
||||||
|
assertEquals(0, arithmetic.sum(-1, 0, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMul() {
|
||||||
|
assertEquals(0, arithmetic.mul(-1, 0, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIfHasZero() {
|
||||||
|
assertTrue(arithmetic.ifHasZero(-1, 0, 1));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test methods in HalfSource
|
||||||
|
*/
|
||||||
|
public class HalfSourceTest {
|
||||||
|
private static final HalfSource source = new HalfSource();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAccumulateSum() {
|
||||||
|
assertEquals(0, source.accumulateSum(-1, 0, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIfNonZero() {
|
||||||
|
assertFalse(source.ifNonZero(-1, 0, 1));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test methods in NewArithmetic
|
||||||
|
*/
|
||||||
|
class NewArithmeticTest {
|
||||||
|
private static final NewArithmetic arithmetic = new NewArithmetic(new NewSource());
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSum() {
|
||||||
|
assertEquals(0, arithmetic.sum(-1, 0, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMul() {
|
||||||
|
assertEquals(0, arithmetic.mul(-1, 0, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIfHasZero() {
|
||||||
|
assertTrue(arithmetic.ifHasZero(-1, 0, 1));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test methods in NewSource
|
||||||
|
*/
|
||||||
|
public class NewSourceTest {
|
||||||
|
private static final NewSource source = new NewSource();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAccumulateSum() {
|
||||||
|
assertEquals(0, source.accumulateSum(-1, 0, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAccumulateMul() {
|
||||||
|
assertEquals(0, source.accumulateMul(-1, 0, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIfNonZero() {
|
||||||
|
assertFalse(source.ifNonZero(-1, 0, 1));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test methods in OldArithmetic
|
||||||
|
*/
|
||||||
|
class OldArithmeticTest {
|
||||||
|
private static final OldArithmetic arithmetic = new OldArithmetic(new OldSource());
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSum() {
|
||||||
|
assertEquals(0, arithmetic.sum(-1, 0, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMul() {
|
||||||
|
assertEquals(0, arithmetic.mul(-1, 0, 1));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License
|
||||||
|
* Copyright © 2014-2019 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.iluwatar.strangler;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test methods in OldSource
|
||||||
|
*/
|
||||||
|
public class OldSourceTest {
|
||||||
|
private static final OldSource source = new OldSource();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAccumulateSum() {
|
||||||
|
assertEquals(0, source.accumulateSum(-1, 0, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAccumulateMul() {
|
||||||
|
assertEquals(0, source.accumulateMul(-1, 0, 1));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user