-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtest.lua
123 lines (91 loc) · 2.59 KB
/
test.lua
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
local bf = require("bitfield")
bitfield = bf.bitfield
bitrange = bf.bitrange
typeof = function(x,n)
local t, m = type(x), {}
if t == n then return true end
if t == "userdata" or t == "table" then
m = getmetatable(x)
if m then m = m.__type end
if m then return m == n end
end
return false
end
print("** Test: " .. bf._VERSION .. " **")
print("** Initialise **")
v = "11001" t = bitfield(v)
print(v, tostring(t), #t, tostring(typeof(t, "bitfield")))
t = bitfield(true, false, false)
print("100", tostring(t), #t)
v = 12 t = bitfield(6, v)
print(v, t[bitrange("unsigned")], #t)
print("101011", tostring(bitfield(6,bitfield("101"),bitfield("011"))))
print("00", bitfield(2))
print("11", bitfield(2,"1"))
print("0011", bitfield(4,bitfield("11")))
print("1111", bitfield(4,"1",bitfield("11")))
print("** Concatenate **")
t = true .. false .. true .. false
print("1010", tostring(t), #t)
t = bitfield("10") .. true .. bitfield("0")
print("1010", tostring(t), #t)
print("** Full length, mutate, compare **")
t1 = bitfield(256,"10")
t2 = bitfield(t1)
print(tostring(t1))
print("t1 == t2", tostring(t1 == t2))
for i=1, 256 do t2[i] = not t1[i] end
print(tostring(t2))
print("t1 == t2", tostring(t1 == t2))
print("** Mutate **")
t1 = bitfield("1101110")
t1[3] = bitfield(1)
t1[8] = true -- out of range set should not raise error
print("1101010", tostring(t1))
print("false", tostring(t1[8]))
print("** Range indexing **")
t1 = bitfield("10011111001")
print(9, t1[bitrange("unsigned",1,4)])
print("true", tostring(t1[bitrange(7)]))
t1[bitrange(7)] = false
print("false", tostring(t1[bitrange(7)]))
t1[bitrange("bitfield", 8, 11)] = bitfield("0110")
print("0110", tostring(t1[bitrange("bitfield", 8, 11)]))
t = bitfield(6)
t[bitrange("binary",1,4)] = "1010"
print("001010", t)
f1 = bitfield("1010101010")
v = f1[bitrange("packed")]
f2 = bitfield(#f1)
f2[bitrange("packed")] = v
print(f1, f2, #v)
print("** Range names **")
f1 = bitfield{
flag1 = bitrange(1),
flag2 = bitrange(2),
count = bitrange(3,14),
subr = bitrange("bitfield",15,16)
}
print(#f1)
f1.flag1 = true
f1.count = 2345
f1.subr = bitfield("01")
print("true", tostring(f1.flag1))
print(2345, tostring(f1.count))
print("01", tostring(f1.subr))
print('** Named Constants **')
nt = {
flag1 = bitrange(1),
count = bitrange(2,5),
on = bitrange("uconst",true),
off = bitrange("uconst",false),
val = bitrange("const",2,5,"1110")
}
f1 = bitfield(nt)
print("false", tostring(f1.flag1))
f1.flag1 = 'on'
print("true", tostring(f1.flag1))
f1.count = 'val'
print("14", tostring(f1.count))
print("11100", bitfield(nt,'val'))
print("11101", bitfield(nt,'val', "1"))