// RUNNABLE_PHOBOS_TEST
// PERMUTE_ARGS:
// REQUIRED_ARGS:

import std.file;
import std.mmfile;

int main()
{
    static string name = "test.tmp";
    static string s = "abcd";

    write(name, s);

    {   scope MmFile mmf = new MmFile(name);
        string p;

        assert(mmf[0] == 'a');
        p = cast(string)mmf[];
        //printf("p.length = %d\n", p.length);
        assert(p[1] == 'b');
        p = cast(string)mmf[0 .. 4];
        assert(p[2] == 'c');
    }

    {   scope MmFile mmf = new MmFile(name, MmFile.Mode.read, 0, null);
        string p;

        assert(mmf[0] == 'a');
        p = cast(string)mmf[];
        //printf("p.length = %d\n", p.length);
        assert(mmf.length == 4);
        assert(p[1] == 'b');
        p = cast(string)mmf[0 .. 4];
        assert(p[2] == 'c');
    }

    remove(name);

    {   scope MmFile mmf = new MmFile(name, MmFile.Mode.readWriteNew, 4, null);
        char[] p;

        p = cast(char[])mmf[];
        p[] = "1234";
        mmf[3] = '5';
        assert(mmf[2] == '3');
        assert(mmf[3] == '5');
    }

    {   string p = cast(string)read(name);

        assert(p[] == "1235");
    }

    {   scope MmFile mmf = new MmFile(name, MmFile.Mode.readWriteNew, 4, null);
        char[] p;

        p = cast(char[])mmf[];
        p[] = "5678";
        mmf[3] = '5';
        assert(mmf[2] == '7');
        assert(mmf[3] == '5');
        assert(cast(string)mmf[] == "5675");
    }

    {   string p = cast(string)read(name);

        assert(p[] == "5675");
    }

    {   scope MmFile mmf = new MmFile(name, MmFile.Mode.readWrite, 4, null);
        char[] p;

        p = cast(char[])mmf[];
        assert(cast(char[])mmf[] == "5675");
        p[] = "9102";
        mmf[2] = '5';
        assert(cast(string)mmf[] == "9152");
    }

    {   string p = cast(string)read(name);

        assert(p[] == "9152");
    }

    remove(name);

    {   scope MmFile mmf = new MmFile(name, MmFile.Mode.readWrite, 4, null);
        char[] p;

        p = cast(char[])mmf[];
        p[] = "abcd";
        mmf[2] = '5';
        assert(cast(string)mmf[] == "ab5d");
    }

    {   string p = cast(string)read(name);

        assert(p[] == "ab5d");
    }

    {   scope MmFile mmf = new MmFile(name, MmFile.Mode.readCopyOnWrite, 4, null);
        char[] p;

        p = cast(char[])mmf[];
        assert(cast(string)mmf[] == "ab5d");
        p[] = "9102";
        mmf[2] = '5';
        assert(cast(string)mmf[] == "9152");
    }

    {   string p = cast(string)read(name);

        assert(p[] == "ab5d");
    }

    remove(name);

    return 0;
}
