forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			108 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			108 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package tests; | ||
|  | import externs.Rectangle; | ||
|  | 
 | ||
|  | class TestRectangle extends haxe.unit.TestCase | ||
|  | { | ||
|  |    static var statRect:Rectangle; | ||
|  |    static var statRectPtr:RectanglePtr; | ||
|  | 
 | ||
|  |    static var statRectProp(get,set):Rectangle; | ||
|  |    static var statRectPtrProp(get,set):RectanglePtr; | ||
|  | 
 | ||
|  |    var memRect:Rectangle; | ||
|  |    var memRectPtr:RectanglePtr; | ||
|  | 
 | ||
|  |    var memRectProp(get,set):Rectangle; | ||
|  |    var memRectPtrProp(get,set):RectanglePtr; | ||
|  | 
 | ||
|  |    static function get_statRectProp() return statRect; | ||
|  |    static function set_statRectProp(val:Rectangle) return statRect=val; | ||
|  |    static function get_statRectPtrProp() return statRectPtr; | ||
|  |    static function set_statRectPtrProp(val:RectanglePtr) return statRectPtr=val; | ||
|  | 
 | ||
|  | 
 | ||
|  |    function get_memRectProp() return memRect; | ||
|  |    function set_memRectProp(val:Rectangle) return memRect=val; | ||
|  |    function get_memRectPtrProp() return memRectPtr; | ||
|  |    function set_memRectPtrProp(val:RectanglePtr) return memRectPtr=val; | ||
|  | 
 | ||
|  | 
 | ||
|  |    public function testRect() | ||
|  |    { | ||
|  |       // Struct - copy semantic | ||
|  |       var rectangle = Rectangle.make(3,4); | ||
|  |       assertTrue( rectangle.area()==0 ); | ||
|  | 
 | ||
|  |       var rect2 = rectangle; | ||
|  |       rect2.width = 2; | ||
|  |       rect2.height = 4; | ||
|  |       assertTrue( rect2.area()==8 ); | ||
|  |       assertTrue( rectangle.area()==0 ); | ||
|  | 
 | ||
|  | 
 | ||
|  |       // Take address ... | ||
|  |       var rectPtr:RectanglePtr = rectangle; | ||
|  | 
 | ||
|  |       // Pointer-like sysntax | ||
|  |       rectPtr.width = 3; | ||
|  |       rectPtr.height = 5; | ||
|  |       var dynamicPtr:Dynamic  = rectPtr; | ||
|  | 
 | ||
|  |       assertTrue( rectPtr.area()==15 ); | ||
|  |       // Same object | ||
|  |       assertTrue( rectangle.area()==15 ); | ||
|  | 
 | ||
|  |       var dynamicCopy:Dynamic = rectangle; // 3,4  3x5 | ||
|  | 
 | ||
|  |       rectangle.width = 10; | ||
|  |       rectangle.height = 10; | ||
|  |       assertTrue( rectangle.area()==100 ); | ||
|  | 
 | ||
|  |       // points to original object | ||
|  |       var fromDynamic:RectanglePtr = rectPtr; | ||
|  |       assertTrue( fromDynamic.area()==100 ); | ||
|  | 
 | ||
|  |       // Restore from Dynamic ... | ||
|  |       rectangle = dynamicCopy; | ||
|  |       assertTrue( rectangle.area()==15 ); | ||
|  |    } | ||
|  | 
 | ||
|  |    public function testReflect() | ||
|  |    { | ||
|  |       statRect = Rectangle.make(1,2,3,4); | ||
|  |       memRect = Rectangle.make(4,5,6,7); | ||
|  |       // This is not correct in the GC moving case ... | ||
|  |       //statRectPtr = memRect; | ||
|  |       statRectPtr = Rectangle.create(1,1,2,2); | ||
|  |       memRectPtr = statRect; | ||
|  | 
 | ||
|  |       assertTrue( statRectProp.area()==12 ); | ||
|  |       assertTrue( memRectProp.area()==42 ); | ||
|  |       assertTrue( statRectPtrProp.area()==4 ); | ||
|  |       assertTrue( memRectPtrProp.area()==12 ); | ||
|  | 
 | ||
|  |       var d:Dynamic = this; | ||
|  |       var r:Rectangle = d.memRect; | ||
|  |       assertTrue( r.area()==42 ); | ||
|  |       var prop:Rectangle = Reflect.getProperty(d,"memRectProp"); | ||
|  |       assertTrue( prop.area()==42 ); | ||
|  |       var propPtr:RectanglePtr = Reflect.getProperty(d,"memRectPtrProp"); | ||
|  |       assertTrue( propPtr.area()==12 ); | ||
|  | 
 | ||
|  |       var d:Dynamic = TestRectangle; | ||
|  |       var r:Rectangle = d.statRect; | ||
|  |       assertTrue( r.area()==12 ); | ||
|  |       var prop:Rectangle = Reflect.getProperty(d,"statRectProp"); | ||
|  |       assertTrue( prop.area()==12 ); | ||
|  |       var propPtr:RectanglePtr = Reflect.getProperty(d,"statRectPtrProp"); | ||
|  |       assertTrue( propPtr.area()==4 ); | ||
|  | 
 | ||
|  | 
 | ||
|  |       // No longer valid | ||
|  |       statRectPtr.delete(); | ||
|  |       statRectPtr = null; | ||
|  |    } | ||
|  | } | ||
|  | 
 | ||
|  | 
 |