public void TestBackReference() { var regex = new Regex(@"(...?)\1*"); var str = CharSetString.Parse("OREOR[EO][OR][OR][ER]ORE"); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("OREOREOREORE", str.ToString()); }
public void TestAddConstraints3() { var regex = new Regex("(A|BC|DEF)(GHI|JK|L)"); var str = CharSetString.UnconstrainedStringOfLength(4); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("[ABD][CEG][FHJ][IKL]", str.ToString()); }
public void TestAddConstraints1() { var regex = new Regex("X*"); var str = CharSetString.UnconstrainedStringOfLength(7); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("XXXXXXX", str.ToString()); }
public void TestLaterMatchesConstrainEarlierMatches() { var reg = new Regex("(.)\\1"); var str = CharSetString.Parse(".A"); reg.AddConstraints(str); Assert.AreEqual( @"AA", str.ToString()); }
public void TestInnerMatchesOfDifferentLengths() { var reg = new Regex("(AAA|B)+"); var rrm = (RegexRepetitionModifier)reg.Atoms[0]; var possMatches = rrm.GeneratePossibleMatches(0, CharSetString.UnconstrainedStringOfLength(4)); Assert.AreEqual( @"AAAB BAAA BBBB", String.Join("\r\n", possMatches)); }
public void TestRegexParseToStringRoundTrip() { var mitMysteryHunt2013Clues = new [] { ".*H.*H.*", "(DI|NS|TH|OM)*", "F.*[AO].*[AO].*", "(O|RHH|MM)*", ".*", "C*MC(CCC|MM)*", "[^C]*[^R]*III.*", "(...?)\\1*", "([^X]|XCC)*", "(RR|HHH)*.?", "N.*X.X.X.*E", "R*D*M*", ".(C|HH)*", ".*SE.*UE.*", ".*LR.*RL.*", ".*OXR.*", "([^CEM]|EM)*", "(HHX|[^HX])*", ".*PRR.*DDC.*", ".*", "[AM]*CM(RC)*R?", "([^CM]|MM|CC)*", "(E|CR|MN)*", "P+(..)\\1.*", "[CHMNOR]*I[CHMNOR]*", "(ND|ET|IN)[^X]*", ".*G.*V.*H.*", "[CR]*", ".*XEXM*", ".*DD.*CCM.*", ".*XHCR.*X.*", ".*(.)(.)(.)(.)\\4\\3\\2\\1.*", ".*(IN|SE|HI)", "[^C]*MMM[^C]*", ".*(.)C\\1X\\1.*", "[CEIMU]*OH[AEMOR]*", "(RX|[^R])*", "[^M]*M[^M]*", "(S|MM|HHH)*" }; foreach (var regexStr in mitMysteryHunt2013Clues) { var regex = new Regex(regexStr); Assert.AreEqual(regexStr, regex.ToString()); } }
public void TestBackReferences2() { var regex = new Regex(@"(...?)\1*"); var str = CharSetString.Parse("ABC..."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("ABCABC", str.ToString()); str = CharSetString.Parse("AB...."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("AB.[AB][AB].", str.ToString()); str = CharSetString.Parse("ABA..."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("ABA[AB][AB][AB]", str.ToString()); }
public void TestBackReferences1() { var regex = new Regex(@"(ABC)\1"); var str = CharSetString.Parse("ABC..."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("ABCABC", str.ToString()); str = CharSetString.Parse("ABCA.."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("ABCABC", str.ToString()); str = CharSetString.Parse("ABCB.."); ExceptionAssert.AssertThrows<CharSet.EmptyIntersectionException>(() => regex.AddConstraints(str)); }
public void TestAddConstraints4() { var regex = new Regex("X+Y+Z+"); var str = CharSetString.UnconstrainedStringOfLength(5); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("X[XY][XYZ][YZ]Z", str.ToString()); str = CharSetString.Parse("...X.."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("XXXXYZ", str.ToString()); str = CharSetString.Parse("..Z.."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("XYZZZ", str.ToString()); }
public void TestAddConstraints2() { var regex = new Regex("X*YX*"); var str = CharSetString.UnconstrainedStringOfLength(7); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("[XY][XY][XY][XY][XY][XY][XY]", str.ToString()); str = CharSetString.Parse("..Y...."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("XXYXXXX", str.ToString()); str = CharSetString.Parse("..Y"); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("XXY", str.ToString()); }
public void TestAddConstraints5() { var regex = new Regex("(DI|NS|TH|OM)*"); var strOneChoice = CharSetString.Parse("[DNT][HI]"); Assert.IsTrue(regex.AddConstraints(strOneChoice)); Assert.AreEqual("[DT][HI]", strOneChoice.ToString()); var strSecondChoice = CharSetString.Parse("[^C][CEMN]"); Assert.IsTrue(regex.AddConstraints(strSecondChoice)); Assert.AreEqual("OM", strSecondChoice.ToString()); var strTwoChoices = CharSetString.Parse("[DNT][HI][^C][CEMN]"); Assert.IsTrue(regex.AddConstraints(strTwoChoices)); Assert.AreEqual("[DT][HI]OM", strTwoChoices.ToString()); var str = CharSetString.Parse("[DNT][HI][^C][CEMN][AEHMOR][AM].[HMS]"); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("[DT][HI]OMOM[NOT][HMS]", str.ToString()); }
public void TestBackReferences3() { var regex = new Regex(@".*(.)(.)(.)(.)\4\3\2\1.*"); var str = CharSetString.Parse("ABCD...."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("ABCDDCBA", str.ToString()); str = CharSetString.Parse("....DCBA"); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("ABCDDCBA", str.ToString()); // This is an interesting one: with close inspection we can see here that the match // must be: ABCDECBAE. str = CharSetString.Parse("ABCDE...ABC.."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("ABCDECBAABCE.", str.ToString()); // Not enough info here to deduce anything str = CharSetString.Parse("..ABCD......"); Assert.IsFalse(regex.AddConstraints(str)); Assert.AreEqual("..ABCD......", str.ToString()); }
/// <param name="clues"> /// The clues as a 3xN grid /// </param> public HexRegexCrossword(Regex[,] clues) { if (3 != clues.GetUpperBound(0) + 1 || 0 != clues.GetLowerBound(0) || 0 != clues.GetLowerBound(1)) { throw new ArgumentException("The clue array must be 3 X rowCount"); } Clues = clues; RowCount = clues.GetUpperBound(1) + 1; SideLength = (RowCount + 1)/2; GridRows = new CharSetString[3, RowCount]; // Build up a grid of cells by Q/R. // The max coord will be < +/- sideLength // Since coords may be negative, this array is offset by +sideLength _cellsByQROffsetBySideLength = new CharSet[2 * SideLength, 2 * SideLength]; for (int axis = 0; axis < 3; axis++) { for (int idx = -(SideLength - 1); idx <= (SideLength - 1); idx++) { var row = new List<CharSet>(); for (int offset = 0;; offset++) { var qr = AxisIdxOffsetToQR(axis, idx, offset); var cell = GetCellByQR(qr); if (cell == null) // qr is out of range { break; } row.Add(cell); } GridRows[axis, idx + (SideLength - 1)] = new CharSetString(row); } } }
public void TestMultipleBackReferences() { var regex = new Regex(@"(.)C\1X\1"); var str = CharSetString.Parse(".C.X."); Assert.IsFalse(regex.AddConstraints(str)); str = CharSetString.Parse(".C.X[AB]"); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("[AB]C[AB]X[AB]", str.ToString()); str = CharSetString.Parse(".C[AB]X."); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("[AB]C[AB]X[AB]", str.ToString()); str = CharSetString.Parse(".C[AB]XB"); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("BCBXB", str.ToString()); }
public void TestOrConstraint() { var regex = new Regex("(ND|ET|IN)[^X]*"); var str = CharSetString.UnconstrainedStringOfLength(7); Assert.IsTrue(regex.AddConstraints(str)); Assert.AreEqual("[EIN][DNT][^X][^X][^X][^X][^X]", str.ToString()); }