private function runOnce($n = TRUE)
{
$books = R::dispense('book', 10);
$pages = R::dispense('page', 10);
$readers = R::dispense('reader', 10);
$texts = R::dispense('text', 10);
$i = 0;
foreach ($books as $book) {
$book->name = 'book-' . $i++;
}
$i = 0;
foreach ($pages as $page) {
$page->name = 'page-' . $i++;
}
$i = 0;
foreach ($readers as $reader) {
$reader->name = 'reader-' . $i++;
}
$i = 0;
foreach ($texts as $text) {
$text->content = 'lorem ipsum -' . $i++;
}
foreach ($texts as $text) {
$pages[array_rand($pages)]->ownText[] = $text;
}
foreach ($pages as $page) {
$books[array_rand($books)]->ownPage[] = $page;
}
foreach ($readers as $reader) {
$books[array_rand($books)]->sharedReader[] = $reader;
}
$i = $noOfReaders = $noOfPages = $noOfTexts = 0;
foreach ($books as $key => $book) {
$i++;
$noOfPages += count($book->ownPage);
$noOfReaders += count($book->sharedReader);
foreach ($book->ownPage as $page) {
$noOfTexts += count($page->ownText);
}
$arr = R::exportAll($book);
echo "\nIntermediate info: " . json_encode($arr) . ": Totals = {$i},{$noOfPages},{$noOfReaders},{$noOfTexts} ";
$this->compare($book, $arr[0]);
$copiedBook = R::dup($book);
$copiedBookArray = R::exportAll($copiedBook);
$this->compare($book, $copiedBookArray[0]);
$copiedBookArrayII = $copiedBook->export();
$this->compare($book, $copiedBookArrayII);
$copyFromCopy = R::dup($copiedBook);
$copyFromCopyArray = R::exportAll($copyFromCopy);
$this->compare($book, $copyFromCopyArray[0]);
$copyFromCopyArrayII = $copyFromCopy->export();
$this->compare($book, $copyFromCopyArrayII);
$id = R::store($book);
$copiedBook = R::dup($book);
R::store($book);
//should not be damaged
$copiedBookArray = R::exportAll($copiedBook);
$originalBookArray = R::exportAll($book);
$this->compare($copiedBook, $copiedBookArray[0]);
$this->compare($book, $originalBookArray[0]);
$book = R::load('book', $id);
$this->compare($book, $originalBookArray[0]);
$copiedBook = R::dup($book);
$this->compare($copiedBook, $copiedBook->export());
R::store($copiedBook);
$this->compare($copiedBook, $copiedBook->export());
$copyFromCopy = R::dup($copiedBook);
$this->compare($copyFromCopy, $copyFromCopy->export());
R::store($copyFromCopy);
$newPage = R::dispense('page');
$newPage->name = 'new';
$copyFromCopy->ownPage[] = $newPage;
$modifiedCopy = R::dup($copyFromCopy);
$exportMod = R::exportAll($modifiedCopy);
$this->compare($modifiedCopy, $exportMod[0]);
asrt(count($modifiedCopy->ownPage), count($copiedBook->ownPage) + 1);
R::store($modifiedCopy);
if ($n) {
asrt((int) R::getCell('SELECT count(*) FROM book'), $i * 4);
asrt((int) R::getCell('SELECT count(*) FROM page'), $noOfPages * 4 + $i);
asrt((int) R::getCell('SELECT count(*) FROM text'), $noOfTexts * 4);
asrt((int) R::getCell('SELECT count(*) FROM book_reader'), $noOfReaders * 4);
asrt((int) R::getCell('SELECT count(*) FROM reader'), $noOfReaders);
}
}
if ($n) {
asrt($noOfTexts, 10);
asrt($noOfReaders, 10);
asrt($noOfPages, 10);
asrt($i, 10);
}
}