private static FilterSpecPlanPathTripletForge[] SortTriplets(FilterSpecPlanPathTripletForge[] triplets) { var sorted = new FilterSpecPlanPathTripletForge[triplets.Length]; Array.Copy(triplets, 0, sorted, 0, triplets.Length); Array.Sort(sorted, (o1, o2) => { var comparedLookupable = o1.Param.Lookupable.Expression.CompareTo(o2.Param.Lookupable.Expression); if (comparedLookupable != 0) { return comparedLookupable; } var comparison = o1.Param.FilterOperator.CompareTo(o2.Param.FilterOperator); 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"); } }