// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/**
 * @fileoverview Tests for byte util.
 */

var test = require('prova');

var ByteUtil = require('./../../src/vdl/byte-util.js');

test('emptyOrAllZero', function(t) {
  var tests = [
    {
      input: new Uint8Array([]),
      expectedOutput: true
    },
    {
      input: new Uint8Array([0x00]),
      expectedOutput: true
    },
    {
      input: new Uint8Array([0xff]),
      expectedOutput: false
    },
    {
      input: new Uint8Array([0x00, 0x00]),
      expectedOutput: true
    },
    {
      input: new Uint8Array([0x00, 0xaa, 0x00]),
      expectedOutput: false
    }
  ];

  for (var i = 0; i < tests.length; i++) {
    var test = tests[i];
    var inputCopy = new Uint8Array(test.input);
    var result = ByteUtil.emptyOrAllZero(inputCopy);
    t.equals(result, test.expectedOutput, 'for input ' +
      ByteUtil.bytes2Hex(test.input) + ' expected ' +
      test.expectedOutput + ', but got ' + result);
  }
  t.end();
});

test('allOne', function(t) {
  var tests = [
    {
      input: new Uint8Array([]),
      expectedOutput: false
    },
    {
      input: new Uint8Array([0xff]),
      expectedOutput: true
    },
    {
      input: new Uint8Array([0x00]),
      expectedOutput: false
    },
    {
      input: new Uint8Array([0x07]),
      expectedOutput: false
    },
    {
      input: new Uint8Array([0xff, 0x04, 0xff]),
      expectedOutput: false
    },
    {
      input: new Uint8Array([0xff, 0xff, 0xff]),
      expectedOutput: true
    }
  ];

  for (var i = 0; i < tests.length; i++) {
    var test = tests[i];
    var inputCopy = new Uint8Array(test.input);
    var result = ByteUtil.allOne(inputCopy);
    t.equals(result, test.expectedOutput, 'for input ' +
      ByteUtil.bytes2Hex(test.input) + ' expected ' +
      test.expectedOutput + ', but got ' + result);
  }
  t.end();
});

test('shiftLeftOne', function(t) {
  var tests = [
    {
      input: new Uint8Array([]),
      expectedOutput: new Uint8Array([])
    },
    {
      input: new Uint8Array([0x00]),
      expectedOutput: new Uint8Array([0x00])
    },
    {
      input: new Uint8Array([0x55]),
      expectedOutput: new Uint8Array([0xaa])
    },
    {
      input: new Uint8Array([0x80]),
      expectedOutput: new Uint8Array([0x01, 0x00])
    },
    {
      input: new Uint8Array([0xff]),
      expectedOutput: new Uint8Array([0x01, 0xfe])
    },
    {
      input: new Uint8Array([0x00, 0x80]),
      expectedOutput: new Uint8Array([0x01, 0x00])
    },
    {
      input: new Uint8Array([0x80, 0x00]),
      expectedOutput: new Uint8Array([0x01, 0x00, 0x00])
    },
    {
      input: new Uint8Array([0x88, 0x44, 0x33, 0x22, 0x11]),
      expectedOutput: new Uint8Array([0x01, 0x10, 0x88, 0x66, 0x44, 0x22])
    }
  ];
  for (var i = 0; i < tests.length; i++) {
    var test = tests[i];
    var inputCopy = new Uint8Array(test.input);
    inputCopy = ByteUtil.shiftLeftOne(inputCopy);
    t.deepEquals(inputCopy, test.expectedOutput, 'for input ' +
      ByteUtil.bytes2Hex(test.input) + ' expected ' +
      ByteUtil.bytes2Hex(test.expectedOutput) + ', but got ' +
      ByteUtil.bytes2Hex(inputCopy));
  }
  t.end();
});

test('shiftRightOne', function(t) {
  var tests = [
    {
      input: new Uint8Array([]),
      expectedOutput: new Uint8Array([])
    },
    {
      input: new Uint8Array([0x00]),
      expectedOutput: new Uint8Array([0x00])
    },
    {
      input: new Uint8Array([0xff]),
      expectedOutput: new Uint8Array([0x7f])
    },
    {
      input: new Uint8Array([0x7f]),
      expectedOutput: new Uint8Array([0x3f])
    },
    {
      input: new Uint8Array([0x10]),
      expectedOutput: new Uint8Array([0x08])
    },
    {
      input: new Uint8Array([0x55]),
      expectedOutput: new Uint8Array([0x2a])
    },
    {
      input: new Uint8Array([0x01, 0x00]),
      expectedOutput: new Uint8Array([0x00, 0x80])
    },
    {
      input: new Uint8Array([0x10, 0x00]),
      expectedOutput: new Uint8Array([0x08, 0x00])
    },
    {
      input: new Uint8Array([0x10, 0x88, 0x66, 0x44, 0x22]),
      expectedOutput: new Uint8Array([0x08, 0x44, 0x33, 0x22, 0x11])
    },
    {
      input: new Uint8Array([0x90, 0x88, 0x66, 0x44, 0x22]),
      expectedOutput: new Uint8Array([0x48, 0x44, 0x33, 0x22, 0x11])
    }
  ];
  for (var i = 0; i < tests.length; i++) {
    var test = tests[i];
    var inputCopy = new Uint8Array(test.input);
    inputCopy = ByteUtil.shiftRightOne(inputCopy);
    t.deepEquals(inputCopy, test.expectedOutput, 'for input ' +
      ByteUtil.bytes2Hex(test.input) + ' expected ' +
      ByteUtil.bytes2Hex(test.expectedOutput) + ', but got ' +
      ByteUtil.bytes2Hex(inputCopy));
  }
  t.end();
});

test('twosComplement', function(t) {
  var tests = [
    {
      input: new Uint8Array([]),
      expectedOutput: new Uint8Array([])
    },
    {
      input: new Uint8Array([0x00]),
      expectedOutput: new Uint8Array([0x00])
    },
    {
      input: new Uint8Array([0xff]),
      expectedOutput: new Uint8Array([0x01])
    },
    {
      input: new Uint8Array([0x80]),
      expectedOutput: new Uint8Array([0x80])
    },
    {
      input: new Uint8Array([0xa8]),
      expectedOutput: new Uint8Array([0x58])
    },
    {
      input: new Uint8Array([0x34, 0x48]),
      expectedOutput: new Uint8Array([0xcb, 0xb8])
    },
    {
      input: new Uint8Array([0x79, 0x71]),
      expectedOutput: new Uint8Array([0x86, 0x8f])
    },
    {
      input: new Uint8Array([0x80, 0x00]),
      expectedOutput: new Uint8Array([0x80, 0x00])
    },
    {
      input: new Uint8Array([0x00, 0x00]),
      expectedOutput: new Uint8Array([0x00, 0x00])
    },
    {
      input: new Uint8Array([0xff, 0xff]),
      expectedOutput: new Uint8Array([0x00, 0x01])
    },
  ];
  for (var i = 0; i < tests.length; i++) {
    var test = tests[i];
    var inputCopy = new Uint8Array(test.input);
    inputCopy = ByteUtil.twosComplement(inputCopy);
    t.deepEquals(inputCopy, test.expectedOutput, 'for input ' +
      ByteUtil.bytes2Hex(test.input) + ' expected ' +
      ByteUtil.bytes2Hex(test.expectedOutput) + ', but got ' +
      ByteUtil.bytes2Hex(inputCopy));
  }
  t.end();
});

test('decrement', function(t) {
  var tests = [
    {
      input: new Uint8Array([0x01]),
      expectedOutput: new Uint8Array([0x00])
    },
    {
      input: new Uint8Array([0x02]),
      expectedOutput: new Uint8Array([0x01])
    },
    {
      input: new Uint8Array([0x03]),
      expectedOutput: new Uint8Array([0x02])
    },
    {
      input: new Uint8Array([0x01, 0x01]),
      expectedOutput: new Uint8Array([0x01, 0x00])
    },
    {
      input: new Uint8Array([0x01, 0x00]),
      expectedOutput: new Uint8Array([0x00, 0xff])
    },
    {
      input: new Uint8Array([0x05, 0x00, 0x00]),
      expectedOutput: new Uint8Array([0x04, 0xff, 0xff])
    }
  ];

  for (var i = 0; i < tests.length; i++) {
    var test = tests[i];
    var inputCopy = new Uint8Array(test.input);
    inputCopy = ByteUtil.decrement(inputCopy);
    t.deepEquals(inputCopy, test.expectedOutput, 'for input ' +
      ByteUtil.bytes2Hex(test.input) + ' expected ' +
      ByteUtil.bytes2Hex(test.expectedOutput) + ', but got ' +
      ByteUtil.bytes2Hex(inputCopy));
  }
  t.end();
});

test('increment', function(t) {
  var tests = [
    {
      input: new Uint8Array([]),
      expectedOutput: new Uint8Array([0x01])
    },
    {
      input: new Uint8Array([0x00]),
      expectedOutput: new Uint8Array([0x01])
    },
    {
      input: new Uint8Array([0x01]),
      expectedOutput: new Uint8Array([0x02])
    },
    {
      input: new Uint8Array([0x02]),
      expectedOutput: new Uint8Array([0x03])
    },
    {
      input: new Uint8Array([0x01, 0x00]),
      expectedOutput: new Uint8Array([0x01, 0x01])
    },
    {
      input: new Uint8Array([0x00, 0xff]),
      expectedOutput: new Uint8Array([0x01, 0x0])
    },
    {
      input: new Uint8Array([0x80]),
      expectedOutput: new Uint8Array([0x81])
    },
    {
      input: new Uint8Array([0xff]),
      expectedOutput: new Uint8Array([0x01, 0x00])
    },
    {
      input: new Uint8Array([0x00, 0xff, 0xff]),
      expectedOutput: new Uint8Array([0x01, 0x00, 0x00])
    },
    {
      input: new Uint8Array([0xff, 0xff]),
      expectedOutput: new Uint8Array([0x01, 0x00, 0x00])
    },
    {
      input: new Uint8Array([0xff, 0x00, 0x00]),
      expectedOutput: new Uint8Array([0xff, 0x00, 0x01])
    }
  ];

  for (var i = 0; i < tests.length; i++) {
    var test = tests[i];
    var inputCopy = new Uint8Array(test.input);
    inputCopy = ByteUtil.increment(inputCopy);
    t.deepEquals(inputCopy, test.expectedOutput, 'for input ' +
      ByteUtil.bytes2Hex(test.input) + ' expected ' +
      ByteUtil.bytes2Hex(test.expectedOutput) + ', but got ' +
      ByteUtil.bytes2Hex(inputCopy));
  }
  t.end();
});

test('bytes2Hex and hex2Bytes', function(t) {
  var tests = [
    {
      bytes: new Uint8Array([]),
      hex: ''
    },
    {
      bytes: new Uint8Array([0x00]),
      hex: '00'
    },
    {
      bytes: new Uint8Array([0x01, 0x77, 0x09]),
      hex: '017709'
    }
  ];
  for (var i = 0; i < tests.length; i++) {
    var test = tests[i];
    var hex = ByteUtil.bytes2Hex(test.bytes);
    t.equals(hex, test.hex, 'expected ' + test.hex + ', but got ' + hex);

    var bytes = ByteUtil.hex2Bytes(test.hex);
    t.deepEquals(bytes, test.bytes, 'expected bytes[' +
      ByteUtil.bytes2Hex(test.bytes) + '], but got bytes[' +
      ByteUtil.bytes2Hex(bytes) +']');
  }
  t.end();
});
