public void TestVariableAnalysis() { var patternTests = new[] { new[] { "A", "[\"A\"]", "[]" }, new[] { "A B", "[\"A\", \"B\"]", "[]" }, new[] { "A B*", "[\"A\"]", "[\"B\"]" }, new[] { "A B B", "[\"A\"]", "[\"B\"]" }, new[] { "A B A", "[\"B\"]", "[\"A\"]" }, new[] { "A B+ C", "[\"A\", \"C\"]", "[\"B\"]" }, new[] { "A B?", "[\"A\", \"B\"]", "[]" }, new[] { "(A B)* C", "[\"C\"]", "[\"A\", \"B\"]" }, new[] { "D (A B)+ (G H)? C", "[\"D\", \"G\", \"H\", \"C\"]", "[\"A\", \"B\"]" }, new[] { "A B | A C", "[\"A\", \"B\", \"C\"]", "[]" }, new[] { "(A B*) | (A+ C)", "[\"C\"]", "[\"B\", \"A\"]" }, new[] { "(A | B) | (C | A)", "[\"A\", \"B\", \"C\"]", "[]" }, }; for (var i = 0; i < patternTests.Length; i++) { var pattern = patternTests[i][0]; var expression = "select * from MyEvent#keepall match_recognize (" + " partition by string measures A.string as a_string pattern ( " + pattern + ") define A as (A.value = 1) )"; var raw = CompilerHelperSingleEPL.ParseWalk(expression, SupportStatementSpecMapEnv.Make(container)); var parent = raw.MatchRecognizeSpec.Pattern; var singles = new LinkedHashSet <string>(); var multiples = new LinkedHashSet <string>(); RowRecogHelper.RecursiveInspectVariables(parent, false, singles, multiples); var outText = "Failed in :" + pattern + " result is : single " + singles.RenderAny() + " multiple " + multiples.RenderAny(); Assert.AreEqual(patternTests[i][1], singles.RenderAny(), outText); Assert.AreEqual(patternTests[i][2], multiples.RenderAny(), outText); } }