1 // RUNNABLE_PHOBOS_TEST
2 // PERMUTE_ARGS:
3 // REQUIRED_ARGS:
4 
5 import std.file;
6 import std.mmfile;
7 
8 int main()
9 {
10     static string name = "test.tmp";
11     static string s = "abcd";
12 
13     write(name, s);
14 
15     {   scope MmFile mmf = new MmFile(name);
16         string p;
17 
18         assert(mmf[0] == 'a');
19         p = cast(string)mmf[];
20         //printf("p.length = %d\n", p.length);
21         assert(p[1] == 'b');
22         p = cast(string)mmf[0 .. 4];
23         assert(p[2] == 'c');
24     }
25 
26     {   scope MmFile mmf = new MmFile(name, MmFile.Mode.read, 0, null);
27         string p;
28 
29         assert(mmf[0] == 'a');
30         p = cast(string)mmf[];
31         //printf("p.length = %d\n", p.length);
32         assert(mmf.length == 4);
33         assert(p[1] == 'b');
34         p = cast(string)mmf[0 .. 4];
35         assert(p[2] == 'c');
36     }
37 
38     remove(name);
39 
40     {   scope MmFile mmf = new MmFile(name, MmFile.Mode.readWriteNew, 4, null);
41         char[] p;
42 
43         p = cast(char[])mmf[];
44         p[] = "1234";
45         mmf[3] = '5';
46         assert(mmf[2] == '3');
47         assert(mmf[3] == '5');
48     }
49 
50     {   string p = cast(string)read(name);
51 
52         assert(p[] == "1235");
53     }
54 
55     {   scope MmFile mmf = new MmFile(name, MmFile.Mode.readWriteNew, 4, null);
56         char[] p;
57 
58         p = cast(char[])mmf[];
59         p[] = "5678";
60         mmf[3] = '5';
61         assert(mmf[2] == '7');
62         assert(mmf[3] == '5');
63         assert(cast(string)mmf[] == "5675");
64     }
65 
66     {   string p = cast(string)read(name);
67 
68         assert(p[] == "5675");
69     }
70 
71     {   scope MmFile mmf = new MmFile(name, MmFile.Mode.readWrite, 4, null);
72         char[] p;
73 
74         p = cast(char[])mmf[];
75         assert(cast(char[])mmf[] == "5675");
76         p[] = "9102";
77         mmf[2] = '5';
78         assert(cast(string)mmf[] == "9152");
79     }
80 
81     {   string p = cast(string)read(name);
82 
83         assert(p[] == "9152");
84     }
85 
86     remove(name);
87 
88     {   scope MmFile mmf = new MmFile(name, MmFile.Mode.readWrite, 4, null);
89         char[] p;
90 
91         p = cast(char[])mmf[];
92         p[] = "abcd";
93         mmf[2] = '5';
94         assert(cast(string)mmf[] == "ab5d");
95     }
96 
97     {   string p = cast(string)read(name);
98 
99         assert(p[] == "ab5d");
100     }
101 
102     {   scope MmFile mmf = new MmFile(name, MmFile.Mode.readCopyOnWrite, 4, null);
103         char[] p;
104 
105         p = cast(char[])mmf[];
106         assert(cast(string)mmf[] == "ab5d");
107         p[] = "9102";
108         mmf[2] = '5';
109         assert(cast(string)mmf[] == "9152");
110     }
111 
112     {   string p = cast(string)read(name);
113 
114         assert(p[] == "ab5d");
115     }
116 
117     remove(name);
118 
119     return 0;
120 }
121