public static void Run() { Test_SimpleStructOnClass obj = UObject.NewObject <Test_SimpleStructOnClass>(); Tests.Assert(obj != null, "Test_SimpleStructOnClass NewObject"); UClass uclass = obj.GetClass(); Tests.AssertEqual(uclass, UClass.GetClass(obj.GetType()), "Test_SimpleStructOnClass GetClass/Type"); // Create another obj of the same type for comparisons of Test_SimpleStructOnClass other = UObject.NewObject <Test_SimpleStructOnClass>(); // Test BlittableStruct default state string msg = "BlittableStruct default state"; Tests.AssertDefault(obj.BlittableStruct.Val1, uclass, msg); Tests.AssertDefault(obj.BlittableStruct.Val2, uclass, msg); Tests.AssertDefault(obj.BlittableStruct.Val3, uclass, msg); Tests.AssertDefault(obj.BlittableStruct.Val4, uclass, msg); Tests.AssertDefault(obj.BlittableStruct.Val5, uclass, msg); Tests.AssertDefault(obj.BlittableStruct.Val6, uclass, msg); Tests.AssertDefault(obj.BlittableStruct.Val7, uclass, msg); Tests.AssertDefault(obj.BlittableStruct.Val8, uclass, msg); Tests.AssertDefault(obj.BlittableStruct.Val9, uclass, msg); Tests.AssertDefault(obj.BlittableStruct.Val10, uclass, msg); Tests.AssertDefault(obj.BlittableStruct.Val11, uclass, msg); // Test Struct default state msg = "Struct default state"; Tests.AssertDefault(obj.Struct.Val0, uclass, msg); Tests.AssertDefault(obj.Struct.Val1, uclass, msg); Tests.AssertDefault(obj.Struct.Val2, uclass, msg); Tests.AssertDefault(obj.Struct.Val3, uclass, msg); Tests.AssertDefault(obj.Struct.Val4, uclass, msg); Tests.AssertDefault(obj.Struct.Val5, uclass, msg); Tests.AssertDefault(obj.Struct.Val6, uclass, msg); Tests.AssertDefault(obj.Struct.Val7, uclass, msg); Tests.AssertDefault(obj.Struct.Val8, uclass, msg); Tests.AssertDefault(obj.Struct.Val9, uclass, msg); Tests.AssertDefault(obj.Struct.Val10, uclass, msg); //Tests.AssertDefault(obj.Struct.Val11, uclass, msg);// delegate will be non-null from struct marshaler //Tests.AssertDefault(obj.Struct.Val12, uclass, msg);// delegate will be non-null from struct marshaler Tests.AssertDefault(obj.Struct.Val13, uclass, msg); Tests.AssertDefault(obj.Struct.Val14, uclass, msg); Tests.AssertDefault(obj.Struct.Val15, uclass, msg); Tests.AssertDefault(obj.Struct.Val16, uclass, msg); Tests.AssertDefault(obj.Struct.Val17, uclass, msg); Tests.AssertDefault(obj.Struct.Val18, uclass, msg); Tests.AssertDefault(obj.Struct.Val19, uclass, msg); Tests.AssertDefault(obj.Struct.Val20, uclass, msg); //Tests.AssertDefault(obj.Struct.Val21, uclass, msg);// string will be non null from struct marshaler Tests.AssertDefault(obj.Struct.Val22, uclass, msg); Test_SimpleBlittableStruct blittableStructVal = obj.BlittableStruct; blittableStructVal.Val1 = 1; blittableStructVal.Val2 = 2; blittableStructVal.Val3 = 3; blittableStructVal.Val4 = 4; blittableStructVal.Val5 = 5; blittableStructVal.Val6 = 6; blittableStructVal.Val7 = 7; blittableStructVal.Val8 = 8; blittableStructVal.Val9 = 9; blittableStructVal.Val10 = 10; blittableStructVal.Val11 = new FName("Hello world"); obj.BlittableStruct = blittableStructVal; Tests.AssertEqual(obj.BlittableStruct, blittableStructVal, uclass, "modify BlittableStruct"); Test_SimpleStruct structVal = obj.Struct; structVal.Val0 = true; structVal.Val1 = 1; structVal.Val2 = 2; structVal.Val3 = 3; structVal.Val4 = 4; structVal.Val5 = 5; structVal.Val6 = 6; structVal.Val7 = 7; structVal.Val8 = 8; structVal.Val9 = 9; structVal.Val10 = 10; structVal.Val11.Bind(obj.BindToStructDelegate); structVal.Val12.Bind(obj.BindToStructMulticastDelegate1); structVal.Val12.Bind(obj.BindToStructMulticastDelegate2); structVal.Val12.Bind(obj.BindToStructMulticastDelegate3); structVal.Val13 = other; structVal.Val14 = Test_SimpleEnum.Val3; structVal.Val15 = new Test_SimpleBlittableStruct() { Val1 = 1, Val2 = 2, Val3 = 3, Val4 = 4, Val5 = 5, Val6 = 6, Val7 = 7, Val8 = 8, Val9 = 9, Val10 = 10, Val11 = new FName("Hello world") }; structVal.Val16.SetClass <Test_SimpleStructOnClass>(); structVal.Val17.Set(other); structVal.Val18.Set(obj); structVal.Val19.SetClass <Test_SimpleStructOnClass>(); structVal.Val20.Value = UClass.GetClass <Test_SimpleStructOnClass>(); structVal.Val21 = "Hello!"; structVal.Val22 = new FName("Hello FName"); Tests.Assert(structVal.Val11.IsBound, uclass, ".Val11.IsBound"); Tests.Assert(structVal.Val12.IsBound, uclass, ".Val12.IsBound"); obj.Struct = structVal; //Tests.AssertEqual(obj.Struct, structVal, uclass, "modify Struct"); // We can't test equals of struct value due to new instances of delegates created on each struct marshal // TODO: Replace delegates with structs so they dont require allocation of new managed classes on marshaling Test_SimpleStruct newStructVal = obj.Struct; Tests.AssertEqual(newStructVal.Val0, true, uclass, ".Val0"); Tests.AssertEqual(newStructVal.Val1, 1, uclass, ".Val1"); Tests.AssertEqual(newStructVal.Val2, 2, uclass, ".Val2"); Tests.AssertEqual(newStructVal.Val3, 3, uclass, ".Val3"); Tests.AssertEqual(newStructVal.Val4, 4, uclass, ".Val4"); Tests.AssertEqual(newStructVal.Val5, 5, uclass, ".Val5"); Tests.AssertEqual(newStructVal.Val6, 6u, uclass, ".Val6"); Tests.AssertEqual(newStructVal.Val7, 7, uclass, ".Val7"); Tests.AssertEqual(newStructVal.Val8, 8u, uclass, ".Val8"); Tests.AssertEqual(newStructVal.Val9, 9.0f, uclass, ".Val9"); Tests.AssertEqual(newStructVal.Val10, 10.0, uclass, ".Val10"); //Tests.AssertEqual(newStructVal.Val11, , uclass, ".Val11"); //Tests.AssertEqual(newStructVal.Val12, , uclass, ".Val12"); Tests.AssertEqual(newStructVal.Val13, other, uclass, ".Val13"); Tests.AssertEqual(newStructVal.Val14, Test_SimpleEnum.Val3, uclass, ".Val14"); Tests.AssertEqual(newStructVal.Val15, structVal.Val15, uclass, ".Val15"); Tests.AssertEqual(obj.Struct.Val16.Value, UClass.GetClass <Test_SimpleStructOnClass>(), uclass, ".Val16"); Tests.AssertEqual(obj.Struct.Val17.Get(), other, uclass, ".Val17"); Tests.AssertEqual(obj.Struct.Val18.Get(), obj, uclass, ".Val18"); Tests.AssertEqual(obj.Struct.Val19.Value, UClass.GetClass <Test_SimpleStructOnClass>(), uclass, ".Val19"); Tests.AssertEqual(obj.Struct.Val20.Value, UClass.GetClass <Test_SimpleStructOnClass>(), uclass, ".Val20"); // Test the delegates double param3 = 44.3; string param4; TSoftClass <UObject> someClass = structVal.Val11.Invoke(13, "inParam2", ref param3, out param4); Tests.AssertEqual(param3, 99.88, uclass, ".BindToStructDelegate.param3"); Tests.AssertEqual(param4, "outParam4", uclass, ".BindToStructDelegate.param4"); Tests.AssertEqual(someClass.Value, UClass.GetClass <Test_SimpleStructOnClass>(), uclass, ".BindToStructDelegate." + UFunction.ReturnValuePropName); // Test the multicast delegate int param3Multicast = 1; structVal.Val12.Invoke(3u, "param2", ref param3Multicast); Tests.AssertEqual(param3Multicast, 4, ".BindToStructMulticastDelegate.param3"); }
public static void Run() { Test_SimpleBlittableStruct.Run(); Test_SimpleStruct.Run(); Test_SimpleStructOnClass.Run(); }