/**
  *
  */
 public function testWrite_WriteObjects_ObjectsWritten()
 {
     $batchSizes = array(10, 30, 100, 300);
     foreach ($batchSizes as $size) {
         $owners = array();
         $dogs = array();
         $cats = array();
         $writer = new \BatchedWriter($size);
         for ($i = 0; $i < 100; $i++) {
             $owner = new Human();
             $owner->Name = 'Human ' . $i;
             $dog = new Dog();
             $dog->Name = 'Dog ' . $i;
             $cat = new Cat();
             $cat->Name = 'Cat ' . $i;
             $owner->onAfterExistsCallback(function ($owner) use($dog, $writer) {
                 $dog->OwnerID = $owner->ID;
                 $writer->write($dog);
             });
             $dog->onAfterExistsCallback(function ($dog) use($cat, $writer) {
                 $cat->EnemyID = $dog->ID;
                 $writer->write($cat);
             });
             $owners[] = $owner;
             $dogs[] = $dog;
             $cats[] = $cat;
         }
         // writes dogs first time
         $writer->write($dogs);
         // dogs written again from owner callback
         $writer->write($owners);
         $writer->finish();
         $owners = Human::get();
         $dogs = Dog::get();
         $cats = Cat::get();
         $this->assertEquals(100, $owners->Count());
         $this->assertEquals(100, $dogs->Count());
         $this->assertEquals(100, $cats->Count());
         for ($i = 0; $i < 100; $i++) {
             $owner = $owners[$i];
             $dog = $dogs[$i];
             $cat = $cats[$i];
             $this->assertEquals($owner->ID, $dog->OwnerID);
             $this->assertEquals($dog->ID, $cat->EnemyID);
         }
         $writer->delete($owners);
         $writer->delete($dogs);
         $writer->delete($cats);
         $writer->finish();
         $this->assertEquals(0, Human::get()->Count());
         $this->assertEquals(0, Dog::get()->Count());
         $this->assertEquals(0, Cat::get()->Count());
     }
 }
 /**
  * @param $objects
  */
 public function delete($objects)
 {
     $this->batchWriter->delete($objects);
 }