var tape = require('tape')
var Hash = require('../hash')
var hex = '0A1B2C3D4E5F6G7H'

function equal (t, a, b) {
  t.equal(a.length, b.length)
  t.equal(a.toString('hex'), b.toString('hex'))
}

var hexBuf = Buffer.from('0A1B2C3D4E5F6G7H', 'utf8')
var count16 = {
  strings: ['0A1B2C3D4E5F6G7H'],
  buffers: [
    hexBuf,
    Buffer.from('80000000000000000000000000000080', 'hex')
  ]
}

var empty = {
  strings: [''],
  buffers: [
    Buffer.from('80000000000000000000000000000000', 'hex')
  ]
}

var multi = {
  strings: ['abcd', 'efhijk', 'lmnopq'],
  buffers: [
    Buffer.from('abcdefhijklmnopq', 'ascii'),
    Buffer.from('80000000000000000000000000000080', 'hex')
  ]
}

var long = {
  strings: [hex + hex],
  buffers: [
    hexBuf,
    hexBuf,
    Buffer.from('80000000000000000000000000000100', 'hex')
  ]
}

function makeTest (name, data) {
  tape(name, function (t) {
    var h = new Hash(16, 8)
    var hash = Buffer.alloc(20)
    var n = 2
    var expected = data.buffers.slice()
    // t.plan(expected.length + 1)

    h._update = function (block) {
      var e = expected.shift()
      equal(t, block, e)

      if (n < 0) {
        throw new Error('expecting only 2 calls to _update')
      }
    }
    h._hash = function () {
      return hash
    }

    data.strings.forEach(function (string) {
      h.update(string, 'ascii')
    })

    equal(t, h.digest(), hash)
    t.end()
  })
}

makeTest('Hash#update 1 in 1', count16)
makeTest('empty Hash#update', empty)
makeTest('Hash#update 1 in 3', multi)
makeTest('Hash#update 2 in 1', long)
