diceLibrarian 10e907f1f4 1
2022-08-16 15:45:06 -04:00

138 lines
3.6 KiB
Lua

string.is_match = function( text, glob )
-- use underscore variable to preserve captures
_ = { string.match( text, glob ) }
return #_ > 0
end
require( "socket.core" )
require( "init" )
local bits_format = bitwise.format
local bits_unpack = bitwise.unpack
local bits_pack = bitwise.pack
local bits_to_string = bitwise.to_string
local bits_from_string = bitwise.from_string
local bits_pack_string = bitwise.pack_string
local bits_not = bitwise.NOT
local bits_and = bitwise.AND
local bits_or = bitwise.OR
local bits_xor = bitwise.XOR
local bits_lshift = bitwise.LSHIFT
local bits_rshift = bitwise.RSHIFT
local bits_new = bitwise.new
------------------------
bitwise.check( ) -- run a consistency check first
local blist = { 0, 1, 4, 8, 16, 255, 512, 1424, 58, 104 }
print( string.rep( "-", 140 ) )
print( string.format( "%6s %6s -> %16s %16s %16s %16s %16s %16s %16s", "dec", "hex", "bin", "LSHIFT(4)", "RSHIFT(4)", "AND(#1100)", "OR(#1010)", "XOR(#1001)", "NOT()" ) )
print( string.rep( "-", 140 ) )
for i, n in ipairs( blist ) do
print( bits_format( "%6d %06X -> %16b %16b %16b %16b %16b %16b %16b", n, n, n,
LSHIFT( n, 4 ),
RSHIFT( n, 4 ),
AND( n, binary( "1100" ) ),
OR( n, binary( "1010" ) ),
XOR( n, binary( "1010" ) ),
NOT( n )
) )
end
print( string.rep( "-", 140 ) )
print( string.format( "%6s %6s -> %16s %16s %16s %16s %16s %16s %16s", "dec", "hex", "bin", "lshift(4)", "rshift(4)", "and(#1100)", "or(#1010)", "xor(#1001)", "not()" ) )
print( string.rep( "-", 140 ) )
for i, n in ipairs( blist ) do
local b = bits_unpack( n, 16 )
print( string.format( "%6d %06X -> %16s %16s %16s %16s %16s %16s %16s ", n, n, bits_to_string( b ),
bits_to_string( bits_lshift( b, 4 ) ),
bits_to_string( bits_rshift( b, 4 ) ),
bits_to_string( bits_and( b, bits_from_string( "0000000000001100" ) ) ),
bits_to_string( bits_or( b, bits_from_string( "0000000000001010" ) ) ),
bits_to_string( bits_xor( b, bits_from_string( "0000000000001001" ) ) ),
bits_to_string( bits_not( b ) )
) )
end
print( string.rep( "-", 140 ) )
local num = 5 -------------------------
print( bitwise.format( "The number %d left-shifted by 8 bits is %016b.", num, LSHIFT( num, 8 ) ) )
local t1, t2, b
-------------------------
-- STRESS TEST
-- bitwise::unpack
-------------------------
t1 = socket.gettime( )
for i = 1, 150000 do
b = bits_unpack( 65535, 2 )
end
t2 = socket.gettime( )
print( string.format( "bitwise::unpack() %0.3fs", t2 - t1 ) )
-------------------------
-- STRESS TEST
-- bitwise::from_string
-------------------------
t1 = socket.gettime( )
for i = 1, 150000 do
b = bits_from_string( "10111100" )
end
t2 = socket.gettime( )
print( string.format( "bitwise::from_string() %0.3fs", t2 - t1 ) )
-------------------------
-- STRESS TEST
-- bitwise::OR
-------------------------
t1 = socket.gettime( )
for i = 1, 150000 do
b = OR( 1024, 255 )
end
t2 = socket.gettime( )
print( string.format( "bitwise::OR() %0.3fs", t2 - t1 ) )
-------------------------
-- STRESS TEST
-- bitwise::AND
-------------------------
t1 = socket.gettime( )
for i = 1, 150000 do
b = AND( 1024, 65535 )
end
t2 = socket.gettime( )
print( string.format( "bitwise::AND() %0.3fs", t2 - t1 ) )
-------------------------
-- STRESS TEST
-- bitwise::XOR
-------------------------
t1 = socket.gettime( )
for i = 1, 150000 do
-- b = XOR( 1024, 65535 )
end
t2 = socket.gettime( )
print( string.format( "bitwise::XOR() %0.3fs", t2 - t1 ) )
-------------------------
-- STRESS TEST
-- bitwise::NOT
-------------------------
t1 = socket.gettime( )
for i = 1, 150000 do
b = NOT( 255 )
end
t2 = socket.gettime( )
print( string.format( "bitwise::NOT() %0.3fs", t2 - t1 ) )