Comparison

spec/util_dbuffer_spec.lua @ 12764:bf6d2f9fad4d

util.dbuffer: Add a bunch of missing test cases Found via mutation testing.
author Matthew Wild <mwild1@gmail.com>
date Tue, 11 Oct 2022 11:38:32 +0100
parent 11637:19cddf92fcc2
comparison
equal deleted inserted replaced
12763:d26eefe98d09 12764:bf6d2f9fad4d
4 it("has a constructor", function () 4 it("has a constructor", function ()
5 assert.Function(dbuffer.new); 5 assert.Function(dbuffer.new);
6 end); 6 end);
7 it("can be created", function () 7 it("can be created", function ()
8 assert.truthy(dbuffer.new()); 8 assert.truthy(dbuffer.new());
9 assert.truthy(dbuffer.new(1));
10 assert.truthy(dbuffer.new(1024));
9 end); 11 end);
10 it("won't create an empty buffer", function () 12 it("won't create an empty buffer", function ()
11 assert.falsy(dbuffer.new(0)); 13 assert.falsy(dbuffer.new(0));
12 end); 14 end);
13 it("won't create a negatively sized buffer", function () 15 it("won't create a negatively sized buffer", function ()
14 assert.falsy(dbuffer.new(-1)); 16 assert.falsy(dbuffer.new(-1));
15 end); 17 end);
16 end); 18 end);
17 describe(":write", function () 19 describe(":write", function ()
18 local b = dbuffer.new(); 20 local b = dbuffer.new(10, 3);
19 it("works", function () 21 it("works", function ()
20 assert.truthy(b:write("hi")); 22 assert.truthy(b:write("hi"));
23 end);
24 it("fails when the buffer is full", function ()
25 local ret = b:write(" there world, this is a long piece of data");
26 assert.is_falsy(ret);
27 end);
28 it("works when max_chunks is reached", function ()
29 -- Chunks are an optimization, dbuffer should collapse chunks when needed
30 for _ = 1, 8 do
31 assert.truthy(b:write("!"));
32 end
33 assert.falsy(b:write("!")); -- Length reached
21 end); 34 end);
22 end); 35 end);
23 36
24 describe(":read", function () 37 describe(":read", function ()
25 it("supports optional bytes parameter", function () 38 it("supports optional bytes parameter", function ()
31 assert.equal("h", b:read(1)); 44 assert.equal("h", b:read(1));
32 45
33 assert.equal("ello", b:read()); 46 assert.equal("ello", b:read());
34 assert.equal(" ", b:read()); 47 assert.equal(" ", b:read());
35 assert.equal("world", b:read()); 48 assert.equal("world", b:read());
49 end);
50 it("fails when there is not enough data in the buffer", function ()
51 local b = dbuffer.new(12);
52 b:write("hello");
53 b:write(" ");
54 b:write("world");
55 assert.is_falsy(b:read(12));
56 assert.is_falsy(b:read(13));
36 end); 57 end);
37 end); 58 end);
38 59
39 describe(":read_until", function () 60 describe(":read_until", function ()
40 it("works", function () 61 it("works", function ()
66 assert.truthy(b:discard(6)); 87 assert.truthy(b:discard(6));
67 assert.equal(5, b:length()); 88 assert.equal(5, b:length());
68 assert.equal(5, b:len()); 89 assert.equal(5, b:len());
69 assert.equal("world", b:read(5)); 90 assert.equal("world", b:read(5));
70 end); 91 end);
92 it("works across chunks", function ()
93 assert.truthy(b:write("hello"));
94 assert.truthy(b:write(" "));
95 assert.truthy(b:write("world"));
96 assert.truthy(b:discard(3));
97 assert.equal(8, b:length());
98 assert.truthy(b:discard(3));
99 assert.equal(5, b:length());
100 assert.equal("world", b:read(5));
101 end);
102 it("can discard the entire buffer", function ()
103 assert.equal(b:len(), 0);
104 assert.truthy(b:write("hello world"));
105 assert.truthy(b:discard(11));
106 assert.equal(0, b:len());
107 assert.truthy(b:write("hello world"));
108 assert.truthy(b:discard(12));
109 assert.equal(0, b:len());
110 assert.truthy(b:write("hello world"));
111 assert.truthy(b:discard(128));
112 assert.equal(0, b:len());
113 end);
114 it("works on an empty buffer", function ()
115 assert.truthy(dbuffer.new():discard());
116 assert.truthy(dbuffer.new():discard(0));
117 assert.truthy(dbuffer.new():discard(1));
118 end);
71 end); 119 end);
72 120
73 describe(":collapse()", function () 121 describe(":collapse()", function ()
122 it("works", function ()
123 local b = dbuffer.new();
124 b:write("hello");
125 b:write(" ");
126 b:write("world");
127 b:collapse(6);
128 local ret, bytes = b:read_chunk();
129 assert.equal("hello ", ret);
130 assert.equal(6, bytes);
131 end);
74 it("works on an empty buffer", function () 132 it("works on an empty buffer", function ()
75 local b = dbuffer.new(); 133 local b = dbuffer.new();
76 b:collapse(); 134 b:collapse();
77 end); 135 end);
78 end); 136 end);
113 for j = -13, 13 do 171 for j = -13, 13 do
114 test_sub(b, i, j); 172 test_sub(b, i, j);
115 end 173 end
116 end 174 end
117 end); 175 end);
176
177 it("works on an empty buffer", function ()
178 local b = dbuffer.new();
179 assert.equal("", b:sub(1, 12));
180 end);
118 end); 181 end);
119 182
120 describe(":byte", function () 183 describe(":byte", function ()
121 -- Helper function to compare buffer:byte() with string:byte() 184 -- Helper function to compare buffer:byte() with string:byte()
122 local s = "hello world" 185 local s = "hello world"
123 local function test_byte(b, x, y) 186 local function test_byte(b, x, y)
124 local string_result, buffer_result = {s:byte(x, y)}, {b:byte(x, y)}; 187 local string_result, buffer_result = {s:byte(x, y)}, {b:byte(x, y)};
125 assert.same(string_result, buffer_result, ("buffer:byte(%d, %s) does not match string:byte()"):format(x, y and ("%d"):format(y) or "nil")); 188 assert.same(
189 string_result,
190 buffer_result,
191 ("buffer:byte(%s, %s) does not match string:byte()"):format(x and ("%d"):format(x) or "nil", y and ("%d"):format(y) or "nil")
192 );
126 end 193 end
127 194
128 it("is equivalent to string:byte", function () 195 it("is equivalent to string:byte", function ()
129 local b = dbuffer.new(11); 196 local b = dbuffer.new(11);
130 assert.truthy(b:write(s)); 197 assert.truthy(b:write(s));
131 test_byte(b, 1); 198 test_byte(b, 1);
132 test_byte(b, 3); 199 test_byte(b, 3);
133 test_byte(b, -1); 200 test_byte(b, -1);
134 test_byte(b, -3); 201 test_byte(b, -3);
202 test_byte(b, nil, 5);
135 for i = -13, 13 do 203 for i = -13, 13 do
136 for j = -13, 13 do 204 for j = -13, 13 do
137 test_byte(b, i, j); 205 test_byte(b, i, j);
138 end 206 end
139 end 207 end