RegexTest.java 3.5 KB
Newer Older
xindoo's avatar
xindoo 已提交
1 2
package xyz.xindoo.re;

xindoo's avatar
xindoo 已提交
3 4 5 6 7 8 9 10
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Threads;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
11

xindoo's avatar
xindoo 已提交
12 13
import java.util.List;

xindoo's avatar
xindoo 已提交
14
public class RegexTest {
xindoo's avatar
xindoo 已提交
15 16 17 18 19 20 21 22 23 24 25 26 27 28

    private static Regex regex = Regex.compile("a(b|c)*");
    private static String[] strs = {"ac", "acc", "a", "a   bcccdb", "ab", "abcd", "a3abcd", "a33333defd", "aabcabcabcabcabcabcdb",
            "abbbbbbbbb", "acccccccbad", "acccccccccccccccccccccccccb", "abbbbbbbbbbbbbbbc"};

    @Benchmark
    @Measurement(iterations = 2)
    @Threads(1)
    @Fork(0)
    @Warmup(iterations = 0)
    public void nfa() {
        for (String str : strs) {
            regex.isMatch(str);
        }
xindoo's avatar
xindoo 已提交
29
    }
xindoo's avatar
xindoo 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

    @Benchmark
    @Measurement(iterations = 2)
    @Threads(1)
    @Fork(0)
    @Warmup(iterations = 0)
    public void dfaRecursion() {
        for (String str : strs) {
            regex.isMatch(str, 1);
        }
    }

    @Benchmark
    @Measurement(iterations = 2)
    @Threads(1)
    @Fork(0)
    @Warmup(iterations = 0)
    public void dfaNonRecursion() {
        for (String str : strs) {
            regex.isDfaMatch(str);
        }
    }

    public static void main(String[] args) {
xindoo's avatar
update  
xindoo 已提交
54 55 56 57 58 59 60 61 62
        test();
//        Options options = new OptionsBuilder().include(RegexTest.class.getSimpleName()).build();
//        try {
//            new Runner(options).run();
//        } catch (Exception e) {
//            System.out.println(e.fillInStackTrace());
//        } finally {
//            System.out.println("finshed");
//        }
xindoo's avatar
xindoo 已提交
63 64
    }

xindoo's avatar
xindoo 已提交
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
     private static void test() {
        Regex regex = Regex.compile("a(b|c)*");
        List<String> res = regex.match("aabacabbbcaccc");
        regex.printNfa();
        System.out.println("");
        regex.printDfa();

        System.out.println(regex.isMatch("ac"));
        System.out.println(regex.isMatch("acc"));
        System.out.println(regex.isMatch("a"));
        System.out.println(regex.isMatch("a   bcccdb"));
        System.out.println(regex.isMatch("ab"));
        System.out.println(regex.isMatch("abcd"));
        System.out.println(regex.isMatch("a3abcd"));
        System.out.println(regex.isMatch("a33333defd"));
        System.out.println(regex.isMatch("aabcabcabcabcabcabcdb"));

        System.out.println("*********");
        System.out.println(regex.isDfaMatch("ac"));
        System.out.println(regex.isDfaMatch("acc"));
        System.out.println(regex.isDfaMatch("a"));
        System.out.println(regex.isDfaMatch("a   bcccdb"));
        System.out.println(regex.isDfaMatch("ab"));
        System.out.println(regex.isDfaMatch("abcd"));
        System.out.println(regex.isDfaMatch("a3abcd"));
        System.out.println(regex.isDfaMatch("a33333defd"));
        System.out.println(regex.isDfaMatch("aabcabcabcabcabcabcdb"));

        System.out.println("*********");
        System.out.println(regex.isMatch("ac", 1));
        System.out.println(regex.isMatch("acc", 1));
        System.out.println(regex.isMatch("a", 1));
        System.out.println(regex.isMatch("a   bcccdb", 1));
        System.out.println(regex.isMatch("ab", 1));
        System.out.println(regex.isMatch("abcd", 1));
        System.out.println(regex.isMatch("a3abcd", 1));
        System.out.println(regex.isMatch("a33333defd", 1));
        System.out.println(regex.isMatch("aabcabcabcabcabcabcdb", 1));
    }
xindoo's avatar
xindoo 已提交
104
}