public function test_ranges()
 {
     $search = new mock\Search();
     $search->addSchema('schema2');
     $search->addColumn('%pageid%');
     $search->addColumn('afirst');
     $search->addColumn('asecond');
     $search->addFilter('%pageid%', '%ag%', '~', 'AND');
     $search->addSort('%pageid%', false);
     /** @var meta\Value[][] $result */
     $result = $search->execute();
     $count = $search->getCount();
     // check result dimensions
     $this->assertEquals(12, $count, 'result count');
     $this->assertEquals(12, count($result), 'result rows');
     $this->assertEquals(3, count($result[0]), 'result columns');
     // check sorting
     $this->assertEquals('page20', $result[0][0]->getValue());
     $this->assertEquals('page19', $result[1][0]->getValue());
     $this->assertEquals('page18', $result[2][0]->getValue());
     // now add limit
     $search->setLimit(5);
     $result = $search->execute();
     $count = $search->getCount();
     // check result dimensions
     $this->assertEquals(12, $count, 'result count');
     // full result set
     $this->assertEquals(5, count($result), 'result rows');
     // wanted result set
     // check the values
     $this->assertEquals('page20', $result[0][0]->getValue());
     $this->assertEquals('page16', $result[4][0]->getValue());
     // now add offset
     $search->setOffset(5);
     $result = $search->execute();
     $count = $search->getCount();
     // check result dimensions
     $this->assertEquals(12, $count, 'result count');
     // full result set
     $this->assertEquals(5, count($result), 'result rows');
     // wanted result set
     // check the values
     $this->assertEquals('page15', $result[0][0]->getValue());
     $this->assertEquals('page11', $result[4][0]->getValue());
 }