public static void CallStaticMethodTest() { var mainMethod = testType.GetMethod("CallTestMethod"); var translateContext = new TranslateContext(testTypeAssembly.Location); var tw = new StringWriter(); var prepared = AssemblyPreparer.Prepare( translateContext, method => method.MemberEquals(mainMethod)); AssemblyWriter.InternalConvertFromMethod(tw, translateContext, prepared, mainMethod, " "); var sourceCode = tw.ToString(); var expected = new StringWriter(); expected.WriteLine(@"int32_t IL2C_TestTargetClass_CallTestMethod(void)"); expected.WriteLine(@"{"); expected.WriteLine(@" int32_t local0;"); expected.WriteLine(@""); expected.WriteLine(@" int32_t __stack0_int32_t;"); expected.WriteLine(@" int32_t __stack1_int32_t;"); expected.WriteLine(@""); expected.WriteLine(@" __stack0_int32_t = 1;"); expected.WriteLine(@" __stack1_int32_t = 2;"); expected.WriteLine(@" __stack0_int32_t = IL2C_TestTargetClass_CallStaticMethodTestType_Test(__stack0_int32_t, (int16_t)__stack1_int32_t);"); expected.WriteLine(@" local0 = __stack0_int32_t;"); expected.WriteLine(@" goto L_0000;"); expected.WriteLine(@"L_0000:"); expected.WriteLine(@" __stack0_int32_t = local0;"); expected.WriteLine(@" return __stack0_int32_t;"); expected.WriteLine(@"}"); Assert.AreEqual(expected.ToString(), sourceCode); }
public static void ConditionalBranchTest() { var mainMethod = testType.GetMethod("ConditionalBranchMainBody"); var translateContext = new TranslateContext(testTypeAssembly.Location); var tw = new StringWriter(); var prepared = AssemblyPreparer.Prepare( translateContext, method => method.MemberEquals(mainMethod)); AssemblyWriter.InternalConvertFromMethod(tw, translateContext, prepared, mainMethod, " "); var sourceCode = tw.ToString(); var expected = new StringWriter(); expected.WriteLine(@"int32_t IL2C_TestTargetClass_ConditionalBranchMainBody(int32_t a)"); expected.WriteLine(@"{"); expected.WriteLine(@" bool local0;"); expected.WriteLine(@" int32_t local1;"); expected.WriteLine(); expected.WriteLine(@" int32_t __stack0_int32_t;"); expected.WriteLine(@" int32_t __stack1_int32_t;"); expected.WriteLine(); expected.WriteLine(@" __stack0_int32_t = a;"); expected.WriteLine(@" __stack1_int32_t = 0;"); expected.WriteLine(@" __stack0_int32_t = (__stack0_int32_t > __stack1_int32_t) ? 1 : 0;"); expected.WriteLine(@" local0 = __stack0_int32_t ? true : false;"); expected.WriteLine(@" __stack0_int32_t = local0 ? 1 : 0;"); expected.WriteLine(@" if (__stack0_int32_t == 0) goto L_0000;"); expected.WriteLine(@" __stack0_int32_t = a;"); expected.WriteLine(@" __stack1_int32_t = 1;"); expected.WriteLine(@" __stack0_int32_t = __stack0_int32_t + __stack1_int32_t;"); expected.WriteLine(@" local1 = __stack0_int32_t;"); expected.WriteLine(@" goto L_0001;"); expected.WriteLine(@"L_0000:"); expected.WriteLine(@" __stack0_int32_t = a;"); expected.WriteLine(@" __stack1_int32_t = 2;"); expected.WriteLine(@" __stack0_int32_t = __stack0_int32_t + __stack1_int32_t;"); expected.WriteLine(@" local1 = __stack0_int32_t;"); expected.WriteLine(@" goto L_0001;"); expected.WriteLine(@"L_0001:"); expected.WriteLine(@" __stack0_int32_t = local1;"); expected.WriteLine(@" return __stack0_int32_t;"); expected.WriteLine(@"}"); Assert.AreEqual(expected.ToString(), sourceCode); }
public static void SimpleOverallByInt64SummationTest() { var mainMethod = testType.GetMethod("Int64MainBody"); var translateContext = new TranslateContext(testTypeAssembly.Location); var tw = new StringWriter(); var prepared = AssemblyPreparer.Prepare( translateContext, method => method.MemberEquals(mainMethod)); AssemblyWriter.InternalConvertFromMethod(tw, translateContext, prepared, mainMethod, " "); var sourceCode = tw.ToString(); var expected = new StringWriter(); expected.WriteLine(@"int64_t IL2C_TestTargetClass_Int64MainBody(void)"); expected.WriteLine(@"{"); expected.WriteLine(@" int64_t local0;"); expected.WriteLine(@" int64_t local1;"); expected.WriteLine(@" int64_t local2;"); expected.WriteLine(@" int64_t local3;"); expected.WriteLine(); expected.WriteLine(@" int32_t __stack0_int32_t;"); expected.WriteLine(@" int64_t __stack0_int64_t;"); expected.WriteLine(@" int64_t __stack1_int64_t;"); expected.WriteLine(); expected.WriteLine(@" __stack0_int32_t = 1;"); expected.WriteLine(@" __stack0_int64_t = __stack0_int32_t;"); expected.WriteLine(@" local0 = __stack0_int64_t;"); expected.WriteLine(@" __stack0_int32_t = 2;"); expected.WriteLine(@" __stack0_int64_t = __stack0_int32_t;"); expected.WriteLine(@" local1 = __stack0_int64_t;"); expected.WriteLine(@" __stack0_int64_t = local0;"); expected.WriteLine(@" __stack1_int64_t = local1;"); expected.WriteLine(@" __stack0_int64_t = __stack0_int64_t + __stack1_int64_t;"); expected.WriteLine(@" local2 = __stack0_int64_t;"); expected.WriteLine(@" __stack0_int64_t = local2;"); expected.WriteLine(@" local3 = __stack0_int64_t;"); expected.WriteLine(@" goto L_0000;"); expected.WriteLine(@"L_0000:"); expected.WriteLine(@" __stack0_int64_t = local3;"); expected.WriteLine(@" return __stack0_int64_t;"); expected.WriteLine(@"}"); Assert.AreEqual(expected.ToString(), sourceCode); }
public static void AccessValueTypeFieldTest() { Assert.Fail("TODO:"); var mainMethod = testType.GetMethod("AccessValueTypeFieldMethod"); var translateContext = new TranslateContext(testTypeAssembly.Location); var tw = new StringWriter(); var targetType = typeof(TestTargetClass.AccessValueTypeFieldTestType); var prepared = AssemblyPreparer.Prepare( translateContext, method => method.MemberEquals(mainMethod)); AssemblyWriter.InternalConvertFromMethod(tw, translateContext, prepared, mainMethod, " "); var sourceCode = tw.ToString(); var expected = new StringWriter(); expected.WriteLine(@""); Assert.AreEqual(expected.ToString(), sourceCode); }