author | Kim Alvefur <zash@zash.se> |
Sat, 23 Mar 2024 20:48:19 +0100 | |
changeset 13465 | c673ff1075bd |
parent 10964 | f84e0e2faae2 |
permissions | -rw-r--r-- |
10901
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 |
local rb = require "util.ringbuffer"; |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 |
describe("util.ringbuffer", function () |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 |
describe("#new", function () |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 |
it("has a constructor", function () |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 |
assert.Function(rb.new); |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 |
end); |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 |
it("can be created", function () |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 |
assert.truthy(rb.new()); |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
end); |
10902
c6465fb3c839
util.ringbuffer: Prevent creation of zero-size buffer
Kim Alvefur <zash@zash.se>
parents:
10901
diff
changeset
|
10 |
it("won't create an empty buffer", function () |
c6465fb3c839
util.ringbuffer: Prevent creation of zero-size buffer
Kim Alvefur <zash@zash.se>
parents:
10901
diff
changeset
|
11 |
assert.has_error(function () |
c6465fb3c839
util.ringbuffer: Prevent creation of zero-size buffer
Kim Alvefur <zash@zash.se>
parents:
10901
diff
changeset
|
12 |
rb.new(0); |
c6465fb3c839
util.ringbuffer: Prevent creation of zero-size buffer
Kim Alvefur <zash@zash.se>
parents:
10901
diff
changeset
|
13 |
end); |
c6465fb3c839
util.ringbuffer: Prevent creation of zero-size buffer
Kim Alvefur <zash@zash.se>
parents:
10901
diff
changeset
|
14 |
end); |
10903
8048255ae61e
util.ringbuffer: Prevent creation of buffer with negative size
Kim Alvefur <zash@zash.se>
parents:
10902
diff
changeset
|
15 |
it("won't create a negatively sized buffer", function () |
8048255ae61e
util.ringbuffer: Prevent creation of buffer with negative size
Kim Alvefur <zash@zash.se>
parents:
10902
diff
changeset
|
16 |
assert.has_error(function () |
8048255ae61e
util.ringbuffer: Prevent creation of buffer with negative size
Kim Alvefur <zash@zash.se>
parents:
10902
diff
changeset
|
17 |
rb.new(-1); |
8048255ae61e
util.ringbuffer: Prevent creation of buffer with negative size
Kim Alvefur <zash@zash.se>
parents:
10902
diff
changeset
|
18 |
end); |
8048255ae61e
util.ringbuffer: Prevent creation of buffer with negative size
Kim Alvefur <zash@zash.se>
parents:
10902
diff
changeset
|
19 |
end); |
10901
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 |
end); |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 |
describe(":write", function () |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
local b = rb.new(); |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
it("works", function () |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 |
assert.truthy(b:write("hi")); |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
end); |
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
end); |
10953
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
27 |
|
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
28 |
describe(":discard", function () |
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
29 |
local b = rb.new(); |
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
30 |
it("works", function () |
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
31 |
assert.truthy(b:write("hello world")); |
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
32 |
assert.truthy(b:discard(6)); |
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
33 |
assert.equal(5, #b); |
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
34 |
assert.equal("world", b:read(5)); |
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
35 |
end); |
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
36 |
end); |
8b5b35baf370
util.ringbuffer: Add test for :discard()
Matthew Wild <mwild1@gmail.com>
parents:
10905
diff
changeset
|
37 |
|
10905
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
38 |
describe(":sub", function () |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
39 |
-- Helper function to compare buffer:sub() with string:sub() |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
40 |
local function test_sub(b, x, y) |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
41 |
local s = b:read(#b, true); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
42 |
local string_result, buffer_result = s:sub(x, y), b:sub(x, y); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
43 |
assert.equals(string_result, buffer_result, ("buffer:sub(%d, %s) does not match string:sub()"):format(x, y and ("%d"):format(y) or "nil")); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
44 |
end |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
45 |
|
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
46 |
it("works", function () |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
47 |
local b = rb.new(); |
10958
fc310727adfb
util.ringbuffer: Add some additional asserts to tests
Matthew Wild <mwild1@gmail.com>
parents:
10957
diff
changeset
|
48 |
assert.truthy(b:write("hello world")); |
10905
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
49 |
assert.equals("hello", b:sub(1, 5)); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
50 |
end); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
51 |
|
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
52 |
it("supports optional end parameter", function () |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
53 |
local b = rb.new(); |
10958
fc310727adfb
util.ringbuffer: Add some additional asserts to tests
Matthew Wild <mwild1@gmail.com>
parents:
10957
diff
changeset
|
54 |
assert.truthy(b:write("hello world")); |
10905
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
55 |
assert.equals("hello world", b:sub(1)); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
56 |
assert.equals("world", b:sub(-5)); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
57 |
end); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
58 |
|
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
59 |
it("is equivalent to string:sub", function () |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
60 |
local b = rb.new(6); |
10958
fc310727adfb
util.ringbuffer: Add some additional asserts to tests
Matthew Wild <mwild1@gmail.com>
parents:
10957
diff
changeset
|
61 |
assert.truthy(b:write("foobar")); |
10905
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
62 |
b:read(3); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
63 |
b:write("foo"); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
64 |
for i = -13, 13 do |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
65 |
for j = -13, 13 do |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
66 |
test_sub(b, i, j); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
67 |
end |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
68 |
end |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
69 |
end); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
70 |
end); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
71 |
|
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
72 |
describe(":byte", function () |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
73 |
-- Helper function to compare buffer:byte() with string:byte() |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
74 |
local function test_byte(b, x, y) |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
75 |
local s = b:read(#b, true); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
76 |
local string_result, buffer_result = {s:byte(x, y)}, {b:byte(x, y)}; |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
77 |
assert.same(string_result, buffer_result, ("buffer:byte(%d, %s) does not match string:byte()"):format(x, y and ("%d"):format(y) or "nil")); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
78 |
end |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
79 |
|
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
80 |
it("is equivalent to string:byte", function () |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
81 |
local b = rb.new(6); |
10964
f84e0e2faae2
util.ringbuffer: Fix accidentally committed test change (thanks buildbot)
Matthew Wild <mwild1@gmail.com>
parents:
10958
diff
changeset
|
82 |
assert.truthy(b:write("foobar")); |
10905
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
83 |
b:read(3); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
84 |
b:write("foo"); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
85 |
test_byte(b, 1); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
86 |
test_byte(b, 3); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
87 |
test_byte(b, -1); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
88 |
test_byte(b, -3); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
89 |
for i = -13, 13 do |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
90 |
for j = -13, 13 do |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
91 |
test_byte(b, i, j); |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
92 |
end |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
93 |
end |
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
94 |
end); |
10957
c3b3ac63f4c3
util.ringbuffer: Ensure unsigned chars are always returned from :byte()
Matthew Wild <mwild1@gmail.com>
parents:
10953
diff
changeset
|
95 |
|
c3b3ac63f4c3
util.ringbuffer: Ensure unsigned chars are always returned from :byte()
Matthew Wild <mwild1@gmail.com>
parents:
10953
diff
changeset
|
96 |
it("works with characters > 127", function () |
c3b3ac63f4c3
util.ringbuffer: Ensure unsigned chars are always returned from :byte()
Matthew Wild <mwild1@gmail.com>
parents:
10953
diff
changeset
|
97 |
local b = rb.new(); |
c3b3ac63f4c3
util.ringbuffer: Ensure unsigned chars are always returned from :byte()
Matthew Wild <mwild1@gmail.com>
parents:
10953
diff
changeset
|
98 |
b:write(string.char(0, 140)); |
c3b3ac63f4c3
util.ringbuffer: Ensure unsigned chars are always returned from :byte()
Matthew Wild <mwild1@gmail.com>
parents:
10953
diff
changeset
|
99 |
local r = { b:byte(1, 2) }; |
c3b3ac63f4c3
util.ringbuffer: Ensure unsigned chars are always returned from :byte()
Matthew Wild <mwild1@gmail.com>
parents:
10953
diff
changeset
|
100 |
assert.same({ 0, 140 }, r); |
c3b3ac63f4c3
util.ringbuffer: Ensure unsigned chars are always returned from :byte()
Matthew Wild <mwild1@gmail.com>
parents:
10953
diff
changeset
|
101 |
end); |
10905
5e33926f4b43
util.ringbuffer: Add :sub() and :byte() methods equivalent to the string methods
Matthew Wild <mwild1@gmail.com>
parents:
10903
diff
changeset
|
102 |
end); |
10901
37df1e757f02
util.ringbuffer: Add some initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 |
end); |