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:
ZhouSky 2020-07-04 17:05:46 +08:00 committed by GitHub
parent 5192beb5dd
commit 6fe219d644
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 927 additions and 0 deletions

View File

@ -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
View 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
![alt text](./etc/strangler.png "Strangler")
## 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View 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
View 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>

View 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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View 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[]{});
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}