private void TestInverse <aType, PathType>(string expr, string exceptedResult, bool reverse = false) { var inverse = new Inverter(CreateParser()); var interpreter = new Interpreter(); String argName = "a", resName = "Path"; if (reverse) { Swap(ref argName, ref resName); //swap(ref expr, ref exceptedResult); } var aParam = new Parameter(argName, typeof(aType)); var resParam = Expression.Parameter(typeof(PathType), resName); var resParam2 = new Parameter(resName, typeof(PathType)); var realInverseExpr = inverse.InverseExpression(interpreter.Parse(expr, aParam).Expression, resParam).Expression.ToString(); var expectedInverseExpr = interpreter.Parse(exceptedResult, resParam2).Expression.ToString(); Assert.AreEqual(expectedInverseExpr, realInverseExpr); }