67 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								class TestIntHash extends haxe.unit.TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   function spamAlot()
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      var values = new Array< Null<Int> >();
							 | 
						||
| 
								 | 
							
								      values[0] = null;
							 | 
						||
| 
								 | 
							
								      var h = new Map<Int,Int>();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for(i in 0...2000)
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								         for(j in 0...2000)
							 | 
						||
| 
								 | 
							
								         {
							 | 
						||
| 
								 | 
							
								            var idx = Std.int(Math.random()*2999);
							 | 
						||
| 
								 | 
							
								            if (h.get(idx)!=values[idx])
							 | 
						||
| 
								 | 
							
								               throw "Bad value";
							 | 
						||
| 
								 | 
							
								            if ( (i % 4)== 1 || Math.random()>0.5 )
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								               if (h.remove(idx) != (values[idx]!=null))
							 | 
						||
| 
								 | 
							
								                  throw "Error in remove!";
							 | 
						||
| 
								 | 
							
								               values[idx] = null;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								               h.set(idx,j);
							 | 
						||
| 
								 | 
							
								               values[idx] = j;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								         }
							 | 
						||
| 
								 | 
							
								         var keys = h.keys();
							 | 
						||
| 
								 | 
							
								         var keyed = new Array<Bool>();
							 | 
						||
| 
								 | 
							
								         for(i in 0...values.length)
							 | 
						||
| 
								 | 
							
								            keyed[i] = false;
							 | 
						||
| 
								 | 
							
								         for( key in h.keys())
							 | 
						||
| 
								 | 
							
								            keyed[ key ] = true;
							 | 
						||
| 
								 | 
							
								         for(i in 0...values.length)
							 | 
						||
| 
								 | 
							
								            if (keyed[i]!=(values[i]!=null))
							 | 
						||
| 
								 | 
							
								              throw "Bad value";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         var valued = new Array<Int>();
							 | 
						||
| 
								 | 
							
								         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:String)
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								         err = e;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      assertTrue(err=="");
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |