| describe('decoder', function() | |
| -- Decode simple function | |
| local bytecode = require('bpf.ljbytecode') | |
| local f = function (x) return x + 1 end | |
| it('should decode functions', function() | |
| -- Make sure it calls LJ decoder | |
| local bc = bytecode.decoder(f) | |
| assert.truthy(bc) | |
| -- Decode bytecode bytecode to instructions | |
| local jutil = require("jit.util") | |
| spy.on(jutil, 'funcbc') | |
| local pc, op = bc() | |
| -- Check bytecode for sanity (starts with ADDVN(x, 1)) | |
| assert.equal(pc, 1) | |
| assert.equal(op, 'ADDVN') | |
| for pc, op in bc do | |
| assert.truthy(pc and op) | |
| end | |
| assert.spy(jutil.funcbc).was.called() | |
| end) | |
| it('should fail on bad input', function() | |
| assert.has_error(function() bytecode.decoder(nil)() end) | |
| assert.has_error(function() bytecode.decoder(5)() end) | |
| assert.has_error(function() bytecode.decoder('test')() end) | |
| end) | |
| it('should dump bytecode', function() | |
| bytecode.dump(f) | |
| end) | |
| end) |