Bläddra i källkod

Updated interop tests

Brian Fiete 5 år sedan
förälder
incheckning
da0bff04a4
2 ändrade filer med 62 tillägg och 0 borttagningar
  1. 32 0
      IDEHelper/Tests/CLib/main.cpp
  2. 30 0
      IDEHelper/Tests/src/Interop.bf

+ 32 - 0
IDEHelper/Tests/CLib/main.cpp

@@ -180,6 +180,25 @@ namespace Tests
 				return ret;
 			}
 		};
+
+		struct StructJ
+		{
+			char* mPtr;
+			intptr_t mLength;
+
+			int MethodJ0(int arg0)
+			{
+				return arg0 + (int)mLength * 100;
+			}
+
+			StructJ MethodJ1(StructJ other, int arg0)
+			{
+				StructJ ret;
+				ret.mPtr = other.mPtr;
+				ret.mLength = other.mLength + arg0;
+				return ret;
+			}
+		};
 	};
 }
 
@@ -339,6 +358,16 @@ extern "C" int Func3G(Interop::StructG* ptr)
 	return ptr[0].mA + ptr[1].mA * 100;
 }
 
+//////////////////////////////////////////////////////////////////////////
+
+extern "C" Interop::StructJ Func4J(Interop::StructJ arg0, Interop::StructJ arg1, Interop::StructJ arg2, Interop::StructJ arg3)
+{
+	Interop::StructJ ret;
+	ret.mPtr = arg0.mPtr;
+	ret.mLength = arg0.mLength + arg1.mLength * 100 + arg2.mLength * 10000 + arg3.mLength * 1000000;
+	return ret;
+}
+
 void UseIt()
 {
 	Interop::StructA sa;
@@ -368,4 +397,7 @@ void UseIt()
 	Interop::StructI si;
 	si.MethodI0(0);
 	si.MethodI1(si, 1);
+	Interop::StructJ sj;
+	sj.MethodJ0(0);
+	sj.MethodJ1(sj, 1);
 }

+ 30 - 0
IDEHelper/Tests/src/Interop.bf

@@ -119,6 +119,18 @@ namespace Tests
 			public extern StructI MethodI1(StructI sa, int32 arg0) mut;
 		}
 
+		[CRepr]
+		public struct StructJ
+		{
+			public char8* mPtr;
+			public int mLength;
+
+			[LinkName(.CPP)]
+			public extern int32 MethodJ0(int32 arg0) mut;
+			[LinkName(.CPP)]
+			public extern StructJ MethodJ1(StructJ sa, int32 arg0) mut;
+		}
+
 		[LinkName(.C)]
 		public static extern int32 Func0(int32 a, int32 b);
 
@@ -160,6 +172,9 @@ namespace Tests
 		[LinkName(.C)]
 		public static extern StructI Func2I(StructI arg0, int32 arg2);
 
+		[LinkName(.C)]
+		public static extern StructJ Func4J(StructJ arg0, StructJ arg1, StructJ arg2, StructJ arg3);
+
 		[Test]
 		public static void TestBasics()
 		{
@@ -256,6 +271,21 @@ namespace Tests
 			Test.Assert(si0.MethodI0(12) == 9012);
 			Test.Assert(si0.MethodI1(si1, 12).mA == (int8)193);
 			Test.Assert(Func2I(si0, 12).mA == 102);
+
+			StructJ sj0;
+			sj0.mPtr = "ABC";
+			sj0.mLength = 3;
+			StructJ sj1;
+			sj1.mPtr = "DEFG";
+			sj1.mLength = 4;
+			StructJ sj2;
+			sj2.mPtr = "HIJKL";
+			sj2.mLength = 5;
+			StructJ sj3;
+			sj3.mPtr = "MNOPQR";
+			sj3.mLength = 6;
+			var sjRet = Func4J(sj0, sj1, sj2, sj3);
+			Test.Assert(sjRet.mLength == 6050403);
 		}
 	}
 }