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;
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |