1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
local rb = require "util.ringbuffer";
describe("util.ringbuffer", function ()
describe("#new", function ()
it("has a constructor", function ()
assert.Function(rb.new);
end);
it("can be created", function ()
assert.truthy(rb.new());
end);
it("won't create an empty buffer", function ()
assert.has_error(function ()
rb.new(0);
end);
end);
it("won't create a negatively sized buffer", function ()
assert.has_error(function ()
rb.new(-1);
end);
end);
end);
describe(":write", function ()
local b = rb.new();
it("works", function ()
assert.truthy(b:write("hi"));
end);
end);
describe(":discard", function ()
local b = rb.new();
it("works", function ()
assert.truthy(b:write("hello world"));
assert.truthy(b:discard(6));
assert.equal(5, #b);
assert.equal("world", b:read(5));
end);
end);
describe(":sub", function ()
-- Helper function to compare buffer:sub() with string:sub()
local function test_sub(b, x, y)
local s = b:read(#b, true);
local string_result, buffer_result = s:sub(x, y), b:sub(x, y);
assert.equals(string_result, buffer_result, ("buffer:sub(%d, %s) does not match string:sub()"):format(x, y and ("%d"):format(y) or "nil"));
end
it("works", function ()
local b = rb.new();
assert.truthy(b:write("hello world"));
assert.equals("hello", b:sub(1, 5));
end);
it("supports optional end parameter", function ()
local b = rb.new();
assert.truthy(b:write("hello world"));
assert.equals("hello world", b:sub(1));
assert.equals("world", b:sub(-5));
end);
it("is equivalent to string:sub", function ()
local b = rb.new(6);
assert.truthy(b:write("foobar"));
b:read(3);
b:write("foo");
for i = -13, 13 do
for j = -13, 13 do
test_sub(b, i, j);
end
end
end);
end);
describe(":byte", function ()
-- Helper function to compare buffer:byte() with string:byte()
local function test_byte(b, x, y)
local s = b:read(#b, true);
local string_result, buffer_result = {s:byte(x, y)}, {b:byte(x, y)};
assert.same(string_result, buffer_result, ("buffer:byte(%d, %s) does not match string:byte()"):format(x, y and ("%d"):format(y) or "nil"));
end
it("is equivalent to string:byte", function ()
local b = rb.new(6);
assert.truthy(b:write("foo"..string.char(0, 140).."obar"));
b:read(3);
b:write("foo");
test_byte(b, 1);
test_byte(b, 3);
test_byte(b, -1);
test_byte(b, -3);
for i = -13, 13 do
for j = -13, 13 do
test_byte(b, i, j);
end
end
end);
it("works with characters > 127", function ()
local b = rb.new();
b:write(string.char(0, 140));
local r = { b:byte(1, 2) };
assert.same({ 0, 140 }, r);
end);
end);
end);
|