private static FilterSpecPlanPathForge FindPath( SupportFilterPlanPath pathExpected, IList<FilterSpecPlanPathForge> pathsReceived) { var tripletsExpected = SortTriplets(pathExpected.Triplets); FilterSpecPlanPathForge found = null; foreach (var pathReceived in pathsReceived) { if (pathExpected.Triplets.Length != pathReceived.Triplets.Length) { continue; } var tripletsReceived = SortTriplets(pathReceived.Triplets); var matches = true; for (var i = 0; i < tripletsReceived.Length; i++) { var expected = tripletsExpected[i]; var received = tripletsReceived[i]; if (!expected.Lookupable.Equals(received.Param.Lookupable.Expression) || !expected.Op.Equals(received.Param.FilterOperator)) { matches = false; break; } var builder = new StringBuilder(); received.Param.ValueExprToString(builder, 0); var value = builder.ToString(); if (expected.Op == EQUAL) { var textExpected = FilterSpecParamConstantForge.ValueExprToString(expected.Value); if (!textExpected.Equals(value)) { matches = false; break; } } else if (expected.Op == BOOLEAN_EXPRESSION || expected.Op == REBOOL) { var textExpected = FilterSpecParamExprNodeForge.ValueExprToString(expected.Value); if (!textExpected.Equals(value)) { matches = false; break; } } else { throw new IllegalStateException("Filter op " + expected.Op + " not handled"); } } if (matches) { if (found != null) { throw new IllegalStateException("Multiple matches"); } found = pathReceived; } } return found; }
private static void AssertPlanPath( SupportFilterPlanPath pathExpected, FilterSpecPlanPathForge pathReceived) { AssertExpressionOpt(pathExpected.ControlNegate, pathReceived.PathNegate); Assert.AreEqual(pathExpected.Triplets.Length, pathReceived.Triplets.Length); var tripletsReceived = SortTriplets(pathReceived.Triplets); var tripletsExpected = SortTriplets(pathExpected.Triplets); for (var i = 0; i < tripletsExpected.Length; i++) { AssertPlanPathTriplet(tripletsExpected[i], tripletsReceived[i]); } }