package org.apache.commons.codec.language.bm; import org.junit.Test; /** * Tests performance for {@link PhoneticEngine}. * <p> * See <a href="https://issues.apache.org/jira/browse/CODEC-174">[CODEC-174] Improve performance of Beider Morse * encoder</a>. * </p> * <p> * Results for November 7, 2013, project SVN revision 1539678. * </p> * <p> * Environment: * </p> * <ul> * <li>java version "1.7.0_45"</li> * <li>Java(TM) SE Runtime Environment (build 1.7.0_45-b18)</li> * <li>Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)</li> * <li>OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows")</li> * </ul> * <ol> * <li>Time for encoding 80,000 times the input 'Angelo': 33,039 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 32,297 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 32,857 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': <b>31,561 millis.</b></li> * <li>Time for encoding 80,000 times the input 'Angelo': 32,665 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 32,215 millis.</li> * </ol> * <p> * On this file's revision 1539678, with patch <a * href="https://issues.apache.org/jira/secure/attachment/12611963/CODEC-174-change-rules-storage-to-Map.patch" * >CODEC-174-change-rules-storage-to-Map</a>: * </p> * <ol> * <li>Time for encoding 80,000 times the input 'Angelo': 18,196 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,858 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,644 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': <b>13,591 millis.</b></li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,861 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,696 millis.</li> * </ol> * <p> * Patch applied, committed revision 1539783. * </p> * <p> * On this file's revision 1539783, with patch <a * href="https://issues.apache.org/jira/secure/attachment/12611962/CODEC-174-delete-subsequence-cache.patch" * >CODEC-174-delete-subsequence-cache.patch</a>: * </p> * <ol> * <li>Time for encoding 80,000 times the input 'Angelo': 13,547 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': <b>13,501 millis.</b></li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,528 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 17,110 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,910 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 16,969 millis.</li> * </ol> * <p> * Patch not applied. * </p> * <p> * On this file's revision 1539787, with patch <a * href="https://issues.apache.org/jira/secure/attachment/12612178/CODEC-174-reuse-set-in-PhonemeBuilder.patch" * >CODEC-174-reuse-set-in-PhonemeBuilder.patch</a>: * </p> * <ol> * <li>Time for encoding 80,000 times the input 'Angelo': 13,724 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,451 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,742 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': <b>13,186 millis.</b></li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,600 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 16,405 millis.</li> * </ol> * <p> * Patch applied, committed revision 1539788. * </p> * <p> * Before patch https://issues.apache.org/jira/secure/attachment/12613371/CODEC-174-refactor-restrictTo-method-in-SomeLanguages.patch * </p> * <ol> * <li>Time for encoding 80,000 times the input 'Angelo': 13,133 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,064 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': <b>12,838 millis.</b></li> * <li>Time for encoding 80,000 times the input 'Angelo': 12,970 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,122 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 13,293 millis.</li> * </ol> * <p> * After patch https://issues.apache.org/jira/secure/attachment/12613371/CODEC-174-refactor-restrictTo-method-in-SomeLanguages.patch * </p> * <ol> * <li>Time for encoding 80,000 times the input 'Angelo': 11,576 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 11,506 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 11,361 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': <b>11,142 millis.</b></li> * <li>Time for encoding 80,000 times the input 'Angelo': 11,430 millis.</li> * <li>Time for encoding 80,000 times the input 'Angelo': 11,297 millis.</li> * </ol> * <p> * Patch applied, committed revision 1541234. * </p> */ public class PhoneticEnginePerformanceTest { private static final int LOOP = 80000; @Test public void test() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , true); final String input = "Angelo"; final long startMillis = System.currentTimeMillis(); for (int i = 0 ; i < (LOOP) ; i++) { engine.encode(input); } final long totalMillis = (System.currentTimeMillis()) - startMillis; System.out.println(String.format("Time for encoding %,d times the input \'%s\': %,d millis.", LOOP, input, totalMillis)); fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } @Test(timeout = 1000) public void test_add85() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test_add85"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , true); final String input = "Angelo"; final long startMillis = System.currentTimeMillis(); for (int i = 0 ; i < (LOOP) ; i++) { engine.encode(input); engine.encode(input); } final long totalMillis = (System.currentTimeMillis()) - startMillis; System.out.println(String.format("Time for encoding %,d times the input \'%s\': %,d millis.", LOOP, input, totalMillis)); fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } @Test(timeout = 1000) public void test_add86() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test_add86"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , true); final String input = "Angelo"; final long startMillis = System.currentTimeMillis(); for (int i = 0 ; i < (LOOP) ; i++) { engine.encode(input); } final long totalMillis = (System.currentTimeMillis()) - startMillis; System.out.println(String.format("Time for encoding %,d times the input \'%s\': %,d millis.", LOOP, input, totalMillis)); System.out.println(String.format("Time for encoding %,d times the input \'%s\': %,d millis.", LOOP, input, totalMillis)); fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } @Test public void test_literalMutation231() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test_literalMutation231"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , false); final String input = "Angelo"; final long startMillis = System.currentTimeMillis(); for (int i = 0 ; i < (LOOP) ; i++) { engine.encode(input); } final long totalMillis = (System.currentTimeMillis()) - startMillis; System.out.println(String.format("Time for encoding %,d times the input \'%s\': %,d millis.", LOOP, input, totalMillis)); fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } @Test public void test_literalMutation232() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test_literalMutation232"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , true); final String input = "bar"; final long startMillis = System.currentTimeMillis(); for (int i = 0 ; i < (LOOP) ; i++) { engine.encode(input); } final long totalMillis = (System.currentTimeMillis()) - startMillis; System.out.println(String.format("Time for encoding %,d times the input \'%s\': %,d millis.", LOOP, input, totalMillis)); fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } @Test public void test_literalMutation233() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test_literalMutation233"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , true); final String input = "Angelo"; final long startMillis = System.currentTimeMillis(); for (int i = 1 ; i < (LOOP) ; i++) { engine.encode(input); } final long totalMillis = (System.currentTimeMillis()) - startMillis; System.out.println(String.format("Time for encoding %,d times the input \'%s\': %,d millis.", LOOP, input, totalMillis)); fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } @Test public void test_literalMutation234() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test_literalMutation234"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , true); final String input = "Angelo"; final long startMillis = System.currentTimeMillis(); for (int i = -1 ; i < (LOOP) ; i++) { engine.encode(input); } final long totalMillis = (System.currentTimeMillis()) - startMillis; System.out.println(String.format("Time for encoding %,d times the input \'%s\': %,d millis.", LOOP, input, totalMillis)); fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } @Test public void test_literalMutation235() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test_literalMutation235"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , true); final String input = "Angelo"; final long startMillis = System.currentTimeMillis(); for (int i = 0 ; i < (LOOP) ; i++) { engine.encode(input); } final long totalMillis = (System.currentTimeMillis()) - startMillis; System.out.println(String.format("Time for encoding %,d times the input \'%s\': %,d millis.", LOOP, input, totalMillis)); fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } @Test public void test_literalMutation236() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test_literalMutation236"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , true); final String input = "Angelo"; final long startMillis = System.currentTimeMillis(); for (int i = 0 ; i < (LOOP) ; i++) { engine.encode(input); } final long totalMillis = (System.currentTimeMillis()) - startMillis; System.out.println(String.format("foo", LOOP, input, totalMillis)); fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } @Test(timeout = 1000) public void test_remove68() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test_remove68"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , true); final String input = "Angelo"; final long startMillis = System.currentTimeMillis(); for (int i = 0 ; i < (LOOP) ; i++) { } final long totalMillis = (System.currentTimeMillis()) - startMillis; System.out.println(String.format("Time for encoding %,d times the input \'%s\': %,d millis.", LOOP, input, totalMillis)); fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } @Test(timeout = 1000) public void test_remove69() { fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "test_remove69"); final PhoneticEngine engine = new PhoneticEngine(NameType.GENERIC , RuleType.APPROX , true); final String input = "Angelo"; final long startMillis = System.currentTimeMillis(); for (int i = 0 ; i < (LOOP) ; i++) { engine.encode(input); } final long totalMillis = (System.currentTimeMillis()) - startMillis; fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread()); } }