THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Divide the input into 2 lists:
Sequentially write objects and fragments that occupy the whole page. The data page is taken from reuse bucket, if there is no page in reuse bucket - allocate a new one.
For remaining (regular) objects (including the "heads" of large objects), find Find the most free page with enough space for data row in FreeList (allocate new one if there is no such page - allocate new one) and fill it up to the end.
TBD: describe the implementation.
...