示例#1
0
 private void TestParseConceptDeclarationInternal(Func <string, NativeXConceptDeclaration> parser)
 {
     Action <NativeXType> vt = t =>
     {
         NativeXFunctionType ft = (NativeXFunctionType)t;
         Assert.AreEqual("bool", ((NativeXReferenceType)ft.ReturnType).ReferencedName);
         Assert.AreEqual(2, ft.Parameters.Count);
         Assert.AreEqual("int", ((NativeXReferenceType)ft.Parameters[0]).ReferencedName);
         Assert.AreEqual("int", ((NativeXReferenceType)ft.Parameters[1]).ReferencedName);
     };
     Action <NativeXConceptDeclaration> vd_common = d =>
     {
         Assert.AreEqual("Eq", d.Name);
         Assert.AreEqual("T", d.ConceptType.ParameterName);
         Assert.AreEqual(2, d.Functions.Count);
         Assert.AreEqual("Equal", d.Functions[0].Name);
         vt(d.Functions[0].Type);
         Assert.AreEqual("NotEqual", d.Functions[1].Name);
         vt(d.Functions[1].Type);
     };
     Action <NativeXConceptDeclaration> vd1 = d =>
     {
         Assert.IsNull(d.Linking);
     };
     Action <NativeXConceptDeclaration> vd2 = d =>
     {
         Assert.AreEqual("Utility", d.Linking.LinkingAssembly);
         Assert.AreEqual("Eq", d.Linking.LinkingSymbol);
     };
     string d1 = "concept T : Eq{Equal = function bool(int,int); NotEqual = function bool(int,int);}";
     string d2 = "concept T : Eq alias Utility.Eq{Equal = function bool(int,int); NotEqual = function bool(int,int);}";
     {
         NativeXConceptDeclaration d = parser(d1);
         vd_common(d);
         vd1(d);
     }
     {
         NativeXConceptDeclaration d = parser(d2);
         vd_common(d);
         vd2(d);
     }
     {
         NativeXConceptDeclaration d = parser(g1 + d1);
         vg1(d);
         vd_common(d);
         vd1(d);
     }
     {
         NativeXConceptDeclaration d = parser(g2 + d2);
         vg2(d);
         vd_common(d);
         vd2(d);
     }
 }
示例#2
0
 private void TestParseVariableStatementInternal(Func <string, NativeXVariableStatement> parser)
 {
     {
         NativeXVariableStatement s = parser("variable function int(double) converter;");
         Assert.AreEqual("converter", s.Name);
         Assert.IsNull(s.Initializer);
         NativeXFunctionType t = (NativeXFunctionType)s.Type;
         Assert.AreEqual("int", ((NativeXReferenceType)t.ReturnType).ReferencedName);
         Assert.AreEqual(1, t.Parameters.Count);
         Assert.AreEqual("double", ((NativeXReferenceType)t.Parameters[0]).ReferencedName);
     }
     {
         NativeXVariableStatement s = parser("variable vector<string> list = null;");
         Assert.AreEqual("list", s.Name);
         Assert.AreEqual("null", ((NativeXPrimitiveExpression)s.Initializer).Code);
         NativeXInstanciatedType t = (NativeXInstanciatedType)s.Type;
         Assert.AreEqual("vector", ((NativeXReferenceType)t.ElementType).ReferencedName);
         Assert.AreEqual(1, t.GenericArguments.Count);
         Assert.AreEqual("string", ((NativeXReferenceType)t.GenericArguments[0]).ReferencedName);
     }
 }
示例#3
0
 private void TestFunctionTypeInternal(Func <string, NativeXFunctionType> parser)
 {
     {
         NativeXFunctionType t = parser("function void()");
         Assert.AreEqual("void", ((NativeXReferenceType)t.ReturnType).ReferencedName);
         Assert.AreEqual(0, t.Parameters.Count);
     }
     {
         NativeXFunctionType t = parser("function int(double*)");
         Assert.AreEqual("int", ((NativeXReferenceType)t.ReturnType).ReferencedName);
         Assert.AreEqual(1, t.Parameters.Count);
         Assert.AreEqual("double", ((NativeXReferenceType)((NativeXPointerType)t.Parameters[0]).ElementType).ReferencedName);
     }
     {
         NativeXFunctionType t = parser("function int(double*,string[1])");
         Assert.AreEqual("int", ((NativeXReferenceType)t.ReturnType).ReferencedName);
         Assert.AreEqual(2, t.Parameters.Count);
         Assert.AreEqual("double", ((NativeXReferenceType)((NativeXPointerType)t.Parameters[0]).ElementType).ReferencedName);
         Assert.AreEqual("string", ((NativeXReferenceType)((NativeXArrayType)t.Parameters[1]).ElementType).ReferencedName);
     }
 }