From 5fd70dd8303ac44488fd621e6f2a9b5005ce7158 Mon Sep 17 00:00:00 2001 From: blafoo Date: Mon, 19 Sep 2011 22:03:21 +0200 Subject: Tuned regex for description and hint --- .../cgeo/geocaching/test/RegExPerformanceTest.java | 104 +++++++++++++++++++++ .../src/cgeo/geocaching/test/mock/MockedCache.java | 5 +- 2 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 tests/src/cgeo/geocaching/test/RegExPerformanceTest.java (limited to 'tests/src') diff --git a/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java b/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java new file mode 100644 index 0000000..277ec32 --- /dev/null +++ b/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java @@ -0,0 +1,104 @@ +package cgeo.geocaching.test; + +import cgeo.geocaching.Constants; +import cgeo.geocaching.test.mock.GC1ZXX2; +import cgeo.geocaching.test.mock.GC2CJPF; +import cgeo.geocaching.test.mock.MockedCache; +import cgeo.geocaching.utils.BaseUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import junit.framework.TestCase; + +/** + * Test class to compare the performance of two regular expressions on given data. + * Can be used to improve the time needed to parse the cache data + * Run As "JUnit Test" + * + * @author blafoo + */ +public class RegExPerformanceTest extends TestCase { + + // Regular expression: "" + // Input string 1: "" + // Input string 2: "" will handle a large, non-matching string almost a hundred times faster then the previous one! + + private final static Pattern PATTERN_ACTUAL = Pattern.compile("
]*>(.*?)
", Pattern.CASE_INSENSITIVE); + + private static final Pattern PATTERN_IMPROVED = Pattern.compile( + "Additional Hints" + Constants.TAG_STRONG_END + + "[^\\(]*\\(Encrypt\\)" + Constants.TAG_P_END + + Constants.NEXT_START_TAG + "
(.*?)" + Constants.TAG_DIV_END + Constants.NEXT_START_TAG + "
= group && matcherHint.group(group) != null) { + // replace linebreak and paragraph tags + String hint = Pattern.compile("<(br|p)" + Constants.NEXT_END_TAG + ">").matcher(matcherHint.group(group)).replaceAll("\n"); + if (hint != null) { + result = hint.replaceAll(Pattern.quote(Constants.TAG_P_END), "").trim(); + } + } + return result; + } + + private String parseDescription(String data, Pattern p, int group) { + String result = null; + final Matcher matcher = p.matcher(data); + if (matcher.find() && matcher.groupCount() >= group) { + result = BaseUtils.getMatch(matcher.group(group)); + } + return result; + } + + + public void testRegEx() { + + List cachesForParsing = new ArrayList(); + cachesForParsing.add(new GC2CJPF()); + cachesForParsing.add(new GC1ZXX2()); + + int ITERATIONS = 250; // 250 for an fast evaluation, 10000 else + + for (MockedCache cache : cachesForParsing) { + String page = cache.getData(); + String resultOld = parseHint(page, PATTERN_ACTUAL, 1); + String resultNew = parseHint(page, PATTERN_IMPROVED, 1); + assertEquals(resultOld, resultNew); + + long diffOld, diffNew; + + System.out.println("Parsing " + cache.getGeocode() + " " + cache.getName()); + { + System.out.println(("Result actual pattern:\t<<" + resultOld + ">>")); + + long start = System.currentTimeMillis(); + for (int j = 0; j < ITERATIONS; j++) { + parseHint(page, PATTERN_ACTUAL, 1); + } + diffOld = (System.currentTimeMillis() - start); + System.out.println("Time actual pattern:\t" + diffOld + " ms"); + } + + { + System.out.println(("Result new pattern:\t<<" + resultNew + ">>")); + long start = System.currentTimeMillis(); + for (int j = 0; j < ITERATIONS; j++) { + parseHint(page, PATTERN_IMPROVED, 1); + } + diffNew = (System.currentTimeMillis() - start); + System.out.println("Time new pattern:\t" + diffNew + " ms"); + } + Float reduction = new Float((float) diffNew * 100 / (float) diffOld); + System.out.println("Reduction to x percent:\t" + reduction.toString() + "\n"); + } + + } +} diff --git a/tests/src/cgeo/geocaching/test/mock/MockedCache.java b/tests/src/cgeo/geocaching/test/mock/MockedCache.java index 7494028..8c04a18 100644 --- a/tests/src/cgeo/geocaching/test/mock/MockedCache.java +++ b/tests/src/cgeo/geocaching/test/mock/MockedCache.java @@ -1,7 +1,7 @@ package cgeo.geocaching.test.mock; import cgeo.geocaching.ICache; -import cgeo.geocaching.cgBase; +import cgeo.geocaching.utils.BaseUtils; import java.io.BufferedReader; import java.io.IOException; @@ -27,9 +27,10 @@ public abstract class MockedCache implements ICache { buffer.append(line).append("\n"); } + br.close(); - cgBase.replaceWhitespace(buffer); + BaseUtils.replaceWhitespace(buffer); return buffer.toString(); } catch (IOException e) { -- cgit v1.1 From 1b9ebf3d001c8da6550b3ac4677921c16fdb135a Mon Sep 17 00:00:00 2001 From: blafoo Date: Sat, 24 Sep 2011 22:50:11 +0200 Subject: Pimped additional regex --- .../cgeo/geocaching/test/RegExPerformanceTest.java | 175 +++++++++++++++------ .../geocaching/test/RegExRealPerformanceTest.java | 27 ++++ .../cgeo/geocaching/test/cgeoApplicationTest.java | 4 + tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java | 20 +++ tests/src/cgeo/geocaching/test/mock/GC2CJPF.java | 20 +++ 5 files changed, 197 insertions(+), 49 deletions(-) create mode 100644 tests/src/cgeo/geocaching/test/RegExRealPerformanceTest.java (limited to 'tests/src') diff --git a/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java b/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java index 277ec32..59c1d2a 100644 --- a/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java +++ b/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java @@ -1,6 +1,5 @@ package cgeo.geocaching.test; -import cgeo.geocaching.Constants; import cgeo.geocaching.test.mock.GC1ZXX2; import cgeo.geocaching.test.mock.GC2CJPF; import cgeo.geocaching.test.mock.MockedCache; @@ -8,7 +7,6 @@ import cgeo.geocaching.utils.BaseUtils; import java.util.ArrayList; import java.util.List; -import java.util.regex.Matcher; import java.util.regex.Pattern; import junit.framework.TestCase; @@ -28,77 +26,156 @@ public class RegExPerformanceTest extends TestCase { // "a(.*)a", it's much better to use "a([^a]*)a". // The rewritten expression "" will handle a large, non-matching string almost a hundred times faster then the previous one! - private final static Pattern PATTERN_ACTUAL = Pattern.compile("
]*>(.*?)
", Pattern.CASE_INSENSITIVE); + /** Search until the start of the next tag. The tag can follow immediately */ + public static final String NEXT_START_TAG = "[^<]*"; + /** Search until the end of the actual tag. The closing tag can follow immediately */ + public static final String NEXT_END_TAG = "[^>]*"; - private static final Pattern PATTERN_IMPROVED = Pattern.compile( - "Additional Hints" + Constants.TAG_STRONG_END + - "[^\\(]*\\(Encrypt\\)" + Constants.TAG_P_END + - Constants.NEXT_START_TAG + "
(.*?)" + Constants.TAG_DIV_END + Constants.NEXT_START_TAG + "
= group && matcherHint.group(group) != null) { - // replace linebreak and paragraph tags - String hint = Pattern.compile("<(br|p)" + Constants.NEXT_END_TAG + ">").matcher(matcherHint.group(group)).replaceAll("\n"); - if (hint != null) { - result = hint.replaceAll(Pattern.quote(Constants.TAG_P_END), "").trim(); - } + /** strong tag */ + public static final String TAG_STRONG_START = ""; + /** Closing strong tag */ + public static final String TAG_STRONG_END = ""; + /** Search until the next <strong> */ + public static final String TAG_STRONG_START_NEXT = NEXT_START_TAG + TAG_STRONG_START; + /** Search until the next </strong> */ + public static final String TAG_STRONG_END_NEXT = NEXT_START_TAG + TAG_STRONG_END; + + /** div tag */ + public static final String TAG_DIV_START = "
"; + /** closing div tag */ + public static final String TAG_DIV_END = "
"; + /** Search until the next <div> */ + public static final String TAG_DIV_START_NEXT = NEXT_START_TAG + TAG_DIV_START; + /** Search until the next </div> */ + public static final String TAG_DIV_END_NEXT = NEXT_START_TAG + TAG_DIV_END; + + public final static Pattern PATTERN_DESCRIPTION_OLD = Pattern.compile("]*>" + "(.*)[^<]*
[^<]*

[^<]*

[^<]*

[^<]*\\W*Additional Hints", Pattern.CASE_INSENSITIVE); + public final static Pattern PATTERN_DESCRIPTION_NEW = Pattern.compile("(.*?)[^<]*

[^<]*

[^<]*

[^<]*

[^<]*\\W*Additional Hints"); + + public final static Pattern PATTERN_HINT_OLD = Pattern.compile("

]*>(.*?)
", Pattern.CASE_INSENSITIVE); + public final static Pattern PATTERN_HINT_NEW = Pattern.compile("
]*>(.*?)
"); + + public final static Pattern PATTERN_SHORTDESC_OLD = Pattern.compile("
[^<]*]*>((?:(?![^\\w^<]*
).)*)[^\\w^<]*
", Pattern.CASE_INSENSITIVE); + public final static Pattern PATTERN_SHORTDESC_NEW = Pattern.compile("(.*?)[^\\w^<]*
"); + + private final static Pattern PATTERN_GEOCODE_OLD = Pattern.compile("]*>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); + private final static Pattern PATTERN_GEOCODE_NEW = Pattern.compile("[^<]*]*>[^S]*Size[^:]*:[^<]*]*>[^<]*\"Size:]*>[^<]*[^<]*[^<]*[^<]*

", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); + private final static Pattern PATTERN_SIZE_NEW = Pattern.compile("
[^<]*]*>[^S]*Size[^:]*:[^<]*]*>[^<]*\"Size:]*>[^<]*[^<]*[^<]*[^<]*

"); + + private final static Pattern PATTERN_LATLON_OLD = Pattern.compile("]*>([^<]*)<\\/span>", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_LATLON_NEW = Pattern.compile("]*>(.*?)"); + + private final static Pattern PATTERN_LOCATION_OLD = Pattern.compile("]*>In ([^<]*)", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_LOCATION_NEW = Pattern.compile("In (.*?)"); + + private final static Pattern PATTERN_PERSONALNOTE_OLD = Pattern.compile("

]*>([^<]*)

", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_PERSONALNOTE_NEW = Pattern.compile("

]*>(.*?)

"); + + + public void testRegEx() { + List output = doTheTests(); + + for (String s : output) { + System.out.println(s); } - return result; } - private String parseDescription(String data, Pattern p, int group) { - String result = null; - final Matcher matcher = p.matcher(data); - if (matcher.find() && matcher.groupCount() >= group) { - result = BaseUtils.getMatch(matcher.group(group)); - } - return result; + public static List doTheTests() { + + int iterations = 1; // set the value to 1000 for real performance measurements + + List output = new ArrayList(); + + output.add("Testing pattern for hint..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_HINT_OLD, PATTERN_HINT_NEW)); + output.add("Testing pattern for description..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_DESCRIPTION_OLD, PATTERN_DESCRIPTION_NEW)); + output.add("Testing pattern for short description..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_SHORTDESC_OLD, PATTERN_SHORTDESC_NEW)); + output.add("Testing pattern for geocode..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_GEOCODE_OLD, PATTERN_GEOCODE_NEW)); + output.add("Testing pattern for cache id..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_CACHEID_OLD, PATTERN_CACHEID_NEW)); + output.add("Testing pattern for cache guid..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_GUID_OLD, PATTERN_GUID_NEW)); + output.add("Testing pattern for size..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_SIZE_OLD, PATTERN_SIZE_NEW)); + output.add("Testing pattern for latlon..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_LATLON_OLD, PATTERN_LATLON_NEW)); + output.add("Testing pattern for location..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_LOCATION_OLD, PATTERN_LOCATION_NEW)); + output.add("Testing pattern for personal note..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_PERSONALNOTE_OLD, PATTERN_PERSONALNOTE_NEW)); + + return output; } + private static List measure(int iterations, Pattern p1, Pattern p2) { - public void testRegEx() { + List output = new ArrayList(); List cachesForParsing = new ArrayList(); cachesForParsing.add(new GC2CJPF()); cachesForParsing.add(new GC1ZXX2()); - int ITERATIONS = 250; // 250 for an fast evaluation, 10000 else - for (MockedCache cache : cachesForParsing) { String page = cache.getData(); - String resultOld = parseHint(page, PATTERN_ACTUAL, 1); - String resultNew = parseHint(page, PATTERN_IMPROVED, 1); - assertEquals(resultOld, resultNew); + String result1 = BaseUtils.getMatch(page, p1, 1, ""); + String result2 = BaseUtils.getMatch(page, p2, 1, ""); + assertEquals(result1, result2); - long diffOld, diffNew; + long diff1, diff2; - System.out.println("Parsing " + cache.getGeocode() + " " + cache.getName()); + output.add("Parsing " + cache.getGeocode() + " " + cache.getName()); { - System.out.println(("Result actual pattern:\t<<" + resultOld + ">>")); - - long start = System.currentTimeMillis(); - for (int j = 0; j < ITERATIONS; j++) { - parseHint(page, PATTERN_ACTUAL, 1); - } - diffOld = (System.currentTimeMillis() - start); - System.out.println("Time actual pattern:\t" + diffOld + " ms"); + output.add("Result pattern #1:\t<<" + result1 + ">>"); + diff1 = parse(page, p1, iterations); + output.add("Time pattern #1:\t" + diff1 + " ms"); } { - System.out.println(("Result new pattern:\t<<" + resultNew + ">>")); - long start = System.currentTimeMillis(); - for (int j = 0; j < ITERATIONS; j++) { - parseHint(page, PATTERN_IMPROVED, 1); - } - diffNew = (System.currentTimeMillis() - start); - System.out.println("Time new pattern:\t" + diffNew + " ms"); + output.add("Result pattern #2:\t<<" + result2 + ">>"); + diff2 = parse(page, p2, iterations); + output.add("Time pattern #2:\t" + diff2 + " ms"); } - Float reduction = new Float((float) diffNew * 100 / (float) diffOld); - System.out.println("Reduction to x percent:\t" + reduction.toString() + "\n"); + Float reduction = new Float((float) diff2 * 100 / (float) diff1); + output.add("Reduction to x percent:\t" + reduction.toString() + "\n"); } + return output; + + } + + private static long parse(String page, Pattern pattern, int iterations) + { + long start = System.currentTimeMillis(); + for (int j = 0; j < iterations; j++) { + BaseUtils.getMatch(page, pattern, 1, ""); + } + return (System.currentTimeMillis() - start); + } + } diff --git a/tests/src/cgeo/geocaching/test/RegExRealPerformanceTest.java b/tests/src/cgeo/geocaching/test/RegExRealPerformanceTest.java new file mode 100644 index 0000000..90a7d37 --- /dev/null +++ b/tests/src/cgeo/geocaching/test/RegExRealPerformanceTest.java @@ -0,0 +1,27 @@ +package cgeo.geocaching.test; + +import cgeo.geocaching.cgSettings; + +import android.test.AndroidTestCase; +import android.util.Log; + +import java.util.List; + +/** + * Test class to compare the performance of two regular expressions on given data. + * Can be used to improve the time needed to parse the cache data + * + * @author blafoo + */ +public class RegExRealPerformanceTest extends AndroidTestCase { + + public void testRegEx() { + + List output = RegExPerformanceTest.doTheTests(); + + for (String s : output) { + Log.w(cgSettings.tag, s); + } + + } +} diff --git a/tests/src/cgeo/geocaching/test/cgeoApplicationTest.java b/tests/src/cgeo/geocaching/test/cgeoApplicationTest.java index d7140ab..0a3cdae 100644 --- a/tests/src/cgeo/geocaching/test/cgeoApplicationTest.java +++ b/tests/src/cgeo/geocaching/test/cgeoApplicationTest.java @@ -106,6 +106,10 @@ public class cgeoApplicationTest extends ApplicationTestCase { Assert.assertTrue(cacheParsed.getDescription().startsWith(cache.getDescription())); Assert.assertEquals(cache.getShortDescription(), cacheParsed.getShortDescription()); Assert.assertEquals(cache.getName(), cacheParsed.getName()); + Assert.assertEquals(cache.getCacheId(), cacheParsed.getCacheId()); + Assert.assertEquals(cache.getGuid(), cacheParsed.getGuid()); + Assert.assertEquals(cache.getLocation(), cacheParsed.getLocation()); + Assert.assertEquals(cache.getPersonalNote(), cacheParsed.getPersonalNote()); } } diff --git a/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java index 9cd653a..e150f29 100644 --- a/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java +++ b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java @@ -90,4 +90,24 @@ public class GC1ZXX2 extends MockedCache { return "Hannopoly: Eislisenstrasse "; } + @Override + public String getCacheId() { + return "1433909"; + } + + @Override + public String getGuid() { + return "36d45871-b99d-46d6-95fc-ff86ab564c98"; + } + + @Override + public String getLocation() { + return "Niedersachsen, Germany"; + } + + @Override + public String getPersonalNote() { + return ""; + } + } diff --git a/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java b/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java index 8029f93..3cd602a 100644 --- a/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java +++ b/tests/src/cgeo/geocaching/test/mock/GC2CJPF.java @@ -90,4 +90,24 @@ public class GC2CJPF extends MockedCache { return "Kinderwald KiC"; } + @Override + public String getCacheId() { + return "1811409"; + } + + @Override + public String getGuid() { + return "73246a5a-ebb9-4d4f-8db9-a951036f5376"; + } + + @Override + public String getLocation() { + return "Niedersachsen, Germany"; + } + + @Override + public String getPersonalNote() { + return ""; + } + } -- cgit v1.1 From 426ed1d6bd4336a8ca5dc3e3c05b78abfa2c6504 Mon Sep 17 00:00:00 2001 From: blafoo Date: Sun, 25 Sep 2011 14:41:43 +0200 Subject: Pimped additional regex --- .../cgeo/geocaching/test/RegExPerformanceTest.java | 62 ++++++++++++++-------- tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java | 2 +- 2 files changed, 42 insertions(+), 22 deletions(-) (limited to 'tests/src') diff --git a/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java b/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java index 59c1d2a..e77d021 100644 --- a/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java +++ b/tests/src/cgeo/geocaching/test/RegExPerformanceTest.java @@ -64,34 +64,46 @@ public class RegExPerformanceTest extends TestCase { public static final String TAG_DIV_END_NEXT = NEXT_START_TAG + TAG_DIV_END; public final static Pattern PATTERN_DESCRIPTION_OLD = Pattern.compile("]*>" + "(.*)[^<]*
[^<]*

[^<]*

[^<]*

[^<]*\\W*Additional Hints", Pattern.CASE_INSENSITIVE); - public final static Pattern PATTERN_DESCRIPTION_NEW = Pattern.compile("(.*?)[^<]*[^<]*

[^<]*

[^<]*

[^<]*\\W*Additional Hints"); + public final static Pattern PATTERN_DESCRIPTION = Pattern.compile("(.*?)[^<]*[^<]*

[^<]*

[^<]*

[^<]*\\W*Additional Hints"); public final static Pattern PATTERN_HINT_OLD = Pattern.compile("

]*>(.*?)
", Pattern.CASE_INSENSITIVE); - public final static Pattern PATTERN_HINT_NEW = Pattern.compile("
]*>(.*?)
"); + public final static Pattern PATTERN_HINT = Pattern.compile("
]*>(.*?)
"); public final static Pattern PATTERN_SHORTDESC_OLD = Pattern.compile("
[^<]*]*>((?:(?![^\\w^<]*
).)*)[^\\w^<]*", Pattern.CASE_INSENSITIVE); - public final static Pattern PATTERN_SHORTDESC_NEW = Pattern.compile("(.*?)[^\\w^<]*"); + public final static Pattern PATTERN_SHORTDESC = Pattern.compile("(.*?)[^\\w^<]*"); private final static Pattern PATTERN_GEOCODE_OLD = Pattern.compile("]*>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); - private final static Pattern PATTERN_GEOCODE_NEW = Pattern.compile("[^<]*]*>[^S]*Size[^:]*:[^<]*]*>[^<]*\"Size:]*>[^<]*[^<]*[^<]*[^<]*

", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); - private final static Pattern PATTERN_SIZE_NEW = Pattern.compile("
[^<]*]*>[^S]*Size[^:]*:[^<]*]*>[^<]*\"Size:]*>[^<]*[^<]*[^<]*[^<]*

"); + private final static Pattern PATTERN_SIZE = Pattern.compile("
[^<]*]*>[^S]*Size[^:]*:[^<]*]*>[^<]*\"Size:]*>[^<]*[^<]*[^<]*[^<]*

"); private final static Pattern PATTERN_LATLON_OLD = Pattern.compile("]*>([^<]*)<\\/span>", Pattern.CASE_INSENSITIVE); - private final static Pattern PATTERN_LATLON_NEW = Pattern.compile("]*>(.*?)"); + private final static Pattern PATTERN_LATLON = Pattern.compile("]*>(.*?)"); private final static Pattern PATTERN_LOCATION_OLD = Pattern.compile("]*>In ([^<]*)", Pattern.CASE_INSENSITIVE); - private final static Pattern PATTERN_LOCATION_NEW = Pattern.compile("In (.*?)"); + private final static Pattern PATTERN_LOCATION = Pattern.compile("In (.*?)"); private final static Pattern PATTERN_PERSONALNOTE_OLD = Pattern.compile("

]*>([^<]*)

", Pattern.CASE_INSENSITIVE); - private final static Pattern PATTERN_PERSONALNOTE_NEW = Pattern.compile("

]*>(.*?)

"); + private final static Pattern PATTERN_PERSONALNOTE = Pattern.compile("

]*>(.*?)

"); + + private final static Pattern PATTERN_NAME_OLD = Pattern.compile("]*>[^<]*([^<]+)<\\/span>[^<]*<\\/h2>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); + private final static Pattern PATTERN_NAME = Pattern.compile("(.*?)"); + + private final static Pattern PATTERN_DIFFICULTY_OLD = Pattern.compile("]*>[^<]*\"[^\"]+\"[^]*>[^<]*", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); + private final static Pattern PATTERN_DIFFICULTY = Pattern.compile("]*>[^<]*\"");]*>[^<]*\"[^\"]+\"[^]*>[^<]*", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); + private final static Pattern PATTERN_TERRAIN = Pattern.compile("]*>[^<]*\"");[^<]+", Pattern.CASE_INSENSITIVE); + private final static Pattern PATTERN_OWNERREAL = Pattern.compile(" doTheTests() { - int iterations = 1; // set the value to 1000 for real performance measurements + int iterations = 250; // set the value to 1000 for real performance measurements List output = new ArrayList(); output.add("Testing pattern for hint..."); - output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_HINT_OLD, PATTERN_HINT_NEW)); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_HINT_OLD, PATTERN_HINT)); output.add("Testing pattern for description..."); - output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_DESCRIPTION_OLD, PATTERN_DESCRIPTION_NEW)); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_DESCRIPTION_OLD, PATTERN_DESCRIPTION)); output.add("Testing pattern for short description..."); - output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_SHORTDESC_OLD, PATTERN_SHORTDESC_NEW)); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_SHORTDESC_OLD, PATTERN_SHORTDESC)); output.add("Testing pattern for geocode..."); - output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_GEOCODE_OLD, PATTERN_GEOCODE_NEW)); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_GEOCODE_OLD, PATTERN_GEOCODE)); output.add("Testing pattern for cache id..."); - output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_CACHEID_OLD, PATTERN_CACHEID_NEW)); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_CACHEID_OLD, PATTERN_CACHEID)); output.add("Testing pattern for cache guid..."); - output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_GUID_OLD, PATTERN_GUID_NEW)); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_GUID_OLD, PATTERN_GUID)); output.add("Testing pattern for size..."); - output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_SIZE_OLD, PATTERN_SIZE_NEW)); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_SIZE_OLD, PATTERN_SIZE)); output.add("Testing pattern for latlon..."); - output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_LATLON_OLD, PATTERN_LATLON_NEW)); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_LATLON_OLD, PATTERN_LATLON)); output.add("Testing pattern for location..."); - output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_LOCATION_OLD, PATTERN_LOCATION_NEW)); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_LOCATION_OLD, PATTERN_LOCATION)); output.add("Testing pattern for personal note..."); - output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_PERSONALNOTE_OLD, PATTERN_PERSONALNOTE_NEW)); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_PERSONALNOTE_OLD, PATTERN_PERSONALNOTE)); + output.add("Testing pattern for name..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_NAME_OLD, PATTERN_NAME)); + output.add("Testing pattern for difficulty..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_DIFFICULTY_OLD, PATTERN_DIFFICULTY)); + output.add("Testing pattern for terrain..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_TERRAIN_OLD, PATTERN_TERRAIN)); + output.add("Testing pattern for owner real..."); + output.addAll(RegExPerformanceTest.measure(iterations, PATTERN_OWNERREAL_OLD, PATTERN_OWNERREAL)); return output; } diff --git a/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java index e150f29..76a6e92 100644 --- a/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java +++ b/tests/src/cgeo/geocaching/test/mock/GC1ZXX2.java @@ -87,7 +87,7 @@ public class GC1ZXX2 extends MockedCache { @Override public String getName() { - return "Hannopoly: Eislisenstrasse "; + return "Hannopoly: Eislisenstrasse"; } @Override -- cgit v1.1