forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			92 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								class ObjectData
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   public var id:Int;
							 | 
						||
| 
								 | 
							
								   public function new(inId:Int) id = inId;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TestObjectHash extends haxe.unit.TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   function spamAlot()
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      var values = new Array< Null<Int> >();
							 | 
						||
| 
								 | 
							
								      values[0] = null;
							 | 
						||
| 
								 | 
							
								      var h = new Map<ObjectData,Int>();
							 | 
						||
| 
								 | 
							
								      var idxToKey = new Array<ObjectData>();
							 | 
						||
| 
								 | 
							
								      for(idx in 0...3000)
							 | 
						||
| 
								 | 
							
								         idxToKey[idx] = new ObjectData(idx);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for(i in 0...2000)
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								         for(j in 0...2000)
							 | 
						||
| 
								 | 
							
								         {
							 | 
						||
| 
								 | 
							
								            var idxInt = Std.int(Math.random()*2999);
							 | 
						||
| 
								 | 
							
								            var idx = idxToKey[idxInt];
							 | 
						||
| 
								 | 
							
								            if (h.get(idx)!=values[idxInt])
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								               throw "Bad value";
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if ( (i % 4)== 1 || Math.random()>0.5 )
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								               if (h.remove(idx) != (values[idxInt]!=null))
							 | 
						||
| 
								 | 
							
								               {
							 | 
						||
| 
								 | 
							
								                  trace("Bad remove");
							 | 
						||
| 
								 | 
							
								                  throw "Error in remove!";
							 | 
						||
| 
								 | 
							
								               }
							 | 
						||
| 
								 | 
							
								               values[idxInt] = null;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								               h.set(idx,j);
							 | 
						||
| 
								 | 
							
								               values[idxInt] = j;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								         }
							 | 
						||
| 
								 | 
							
								         var keys = h.keys();
							 | 
						||
| 
								 | 
							
								         var keyed = new Array<Bool>();
							 | 
						||
| 
								 | 
							
								         for(i in 0...values.length)
							 | 
						||
| 
								 | 
							
								            keyed[i] = false;
							 | 
						||
| 
								 | 
							
								         for( key in h.keys())
							 | 
						||
| 
								 | 
							
								         {
							 | 
						||
| 
								 | 
							
								            var idxInt = key.id;
							 | 
						||
| 
								 | 
							
								            keyed[ idxInt ] = true;
							 | 
						||
| 
								 | 
							
								         }
							 | 
						||
| 
								 | 
							
								         for(i in 0...values.length)
							 | 
						||
| 
								 | 
							
								            if (keyed[i]!=(values[i]!=null))
							 | 
						||
| 
								 | 
							
								               throw "Bad value";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         var valued = new Array<Int>();
							 | 
						||
| 
								 | 
							
								         #if neko
							 | 
						||
| 
								 | 
							
								         valued[3000]=0;
							 | 
						||
| 
								 | 
							
								         for(i in 0...3000)
							 | 
						||
| 
								 | 
							
								            valued[i] = 0;
							 | 
						||
| 
								 | 
							
								         #end
							 | 
						||
| 
								 | 
							
								         for( val in h.iterator())
							 | 
						||
| 
								 | 
							
								            valued[val]++;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         for(val in values)
							 | 
						||
| 
								 | 
							
								            if (val!=null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								               if (valued[val]<1)
							 | 
						||
| 
								 | 
							
								                  throw "Not valued!";
							 | 
						||
| 
								 | 
							
								               valued[val]--;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   public function test()
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      var err = "";
							 | 
						||
| 
								 | 
							
								      try
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								         spamAlot();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      catch(e:Dynamic)
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								         trace(e);
							 | 
						||
| 
								 | 
							
								         err = e;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      assertTrue(err=="");
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |