private static SupportFilterPlanTriplet[] SortTriplets(SupportFilterPlanTriplet[] triplets) { var sorted = new SupportFilterPlanTriplet[triplets.Length]; Array.Copy(triplets, 0, sorted, 0, triplets.Length); Array.Sort(sorted, (o1, o2) => { var comparedLookupable = o1.Lookupable.CompareTo(o2.Lookupable); if (comparedLookupable != 0) { return comparedLookupable; } var comparison = o1.Op.CompareTo(o2.Op); if (comparison != 0) { return comparison; } throw new IllegalStateException("Comparator does not support value comparison"); }); return sorted; }
private static void AssertPlanPathTriplet( SupportFilterPlanTriplet tripletExpected, FilterSpecPlanPathTripletForge tripletReceived) { AssertExpressionOpt(tripletExpected.ControlConfirm, tripletReceived.TripletConfirm); Assert.AreEqual(tripletExpected.Lookupable, tripletReceived.Param.Lookupable.Expression); Assert.AreEqual(tripletExpected.Op, tripletReceived.Param.FilterOperator); var @out = new StringBuilder(); tripletReceived.Param.ValueExprToString(@out, 0); if (tripletExpected.Op == EQUAL) { var expected = FilterSpecParamConstantForge.ValueExprToString(tripletExpected.Value); Assert.AreEqual(expected, @out.ToString()); } else if (tripletExpected.Op == BOOLEAN_EXPRESSION || tripletExpected.Op == REBOOL) { var expected = FilterSpecParamExprNodeForge.ValueExprToString(tripletExpected.Value); Assert.AreEqual(expected, @out.ToString()); } else { Assert.Fail("operator value to-string not supported yet"); } }