// Carnegie Mellon University
//   Information Networking Institute and
//   School of Computer Science
//
// Master Thesis: A Monitoring Tool for Overlay Network
// By: TungFai Chan and Annie Cheng
//
// File: TestVirtualMemory.java
// Path: virtualMemory
// Description: Testing the VM suite -- only work with certain testing parameter

package eventbase.virtualMemory;
import java.io.*;
public class TestVirtualMemory {

    static public void main(String[] args) {

    VirtualMemory vm = new VirtualMemory();
    String text = "Page 0, Record 0    ";
    Record record = new Record(vm.getAvailableRID(), text.getBytes());
    vm.InsertRecord(record);

    text = "Page 0, Record 1    ";
    record = new Record(vm.getAvailableRID(), text.getBytes());
    vm.InsertRecord(record);

    text = "Page 1, Record 0    ";
    record = new Record(vm.getAvailableRID(), text.getBytes());
    vm.InsertRecord(record);

    text = "Page 1, Record 1    ";
    record = new Record(vm.getAvailableRID(), text.getBytes());
    vm.InsertRecord(record);

    text = "Page 2, Record 0    ";
    record = new Record(vm.getAvailableRID(), text.getBytes());
    vm.InsertRecord(record);

    text = "Page 2, Record 1    ";
    record = new Record(vm.getAvailableRID(), text.getBytes());
    vm.InsertRecord(record);


    text = "Page 3, Record 0    ";
    record = new Record(vm.getAvailableRID(), text.getBytes());
    vm.InsertRecord(record);

    text = "Page 3, Record 1    ";
    record = new Record(vm.getAvailableRID(), text.getBytes());
    vm.InsertRecord(record);

    record = vm.RetrieveRecord(1,0);
    record.printRecord();

    vm.printMemoryBuffer();
    vm.printReferenceBitMap();

    System.out.println("++++++++++ test 2 +++++++++++++++");
    Record record1 = vm.RetrieveRecord(0,0);
    record1.printRecord();

    System.out.println("++++++++++ test 3 +++++++++++++++");
    text = "Page 4, Record 0    ";
    record = new Record(vm.getAvailableRID(), text.getBytes());
    vm.InsertRecord(record);

    text = "Page 4, Record 1    ";
    record = new Record(vm.getAvailableRID(), text.getBytes());
    vm.InsertRecord(record);

    vm.printMemoryBuffer();
    vm.printReferenceBitMap();

    System.out.println("++++++++++ test 4 +++++++++++++++");
    record1 = vm.RetrieveRecord(2,1);
    record1.printRecord();

    vm.printMemoryBuffer();
    vm.printReferenceBitMap();

    /*
        try {
        Disk vm = new Disk();

        Page page = new Page(1);
        String text = "Hello World Again   ";
        Record rec = new Record(2, text.getBytes());

        page.insertRecordIntoPage(rec);

        vm.writePage(page);

        Page page2 = vm.readPage(1);
        Record rec2 = page2.getRecordFromPage(2);
        String text2 = new String(rec2.getBytes());
        System.out.println(text2);
        vm.close();
        }
        catch (IOException e) {
            System.err.println(e);
        }

        System.out.println("DONE");
    */
    }

}

// Only get record from page, DO NOT 'new' record individual to save memory
// use Page API to get reference to Page.record