108 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Haxe
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Haxe
		
	
	
		
			Executable File
		
	
	
	
	
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;
 | 
						|
   }
 | 
						|
}
 | 
						|
 | 
						|
 |