const test = require('tap').test
const BitBuffer = require('core/bit-buffer')
const NumericData = require('core/numeric-data')
const Mode = require('core/mode')

const testData = [
  {
    data: 8,
    length: 1,
    bitLength: 4,
    dataBit: [128]
  },
  {
    data: 16,
    length: 2,
    bitLength: 7,
    dataBit: [32]
  },
  {
    data: 128,
    length: 3,
    bitLength: 10,
    dataBit: [32, 0]
  },
  {
    data: 12345,
    length: 5,
    bitLength: 17,

    // (123)d -> (0001111011)b 10bit
    //  (45)d ->    (0101101)b  7bit
    //
    //  (00011110)b -> (30)d
    //  (11010110)b -> (214)d
    //  (10000000)b -> (128)d
    dataBit: [30, 214, 128]
  }
]

test('Numeric Data', function (t) {
  testData.forEach(function (data) {
    const numericData = new NumericData(data.data)

    t.equal(numericData.mode, Mode.NUMERIC, 'Mode should be NUMERIC')
    t.equal(numericData.getLength(), data.length, 'Should return correct length')
    t.equal(numericData.getBitsLength(), data.bitLength, 'Should return correct bit length')

    const bitBuffer = new BitBuffer()
    numericData.write(bitBuffer)
    t.deepEqual(bitBuffer.buffer, data.dataBit, 'Should write correct data to buffer')
  })

  t.end()
})