<?php
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
require_once('test_helper.php');

class LongEncodingTest extends PHPUnit_Framework_TestCase
{

  function setUp()
  {
    Avro::check_platform();
  }

  static function is_64_bit() { return (PHP_INT_SIZE == 8); }
  function skip_64_bit_test_on_32_bit()
  {
    if (!self::is_64_bit())
      $this->markTestSkipped('Requires 64-bit platform');
  }

  function skip_if_no_gmp()
  {
    if (!extension_loaded('gmp'))
      $this->markTestSkipped('Requires GMP PHP Extension.');
  }

  function assert_bit_shift($expected, $actual, $shift_type,
                            $expected_binary, $actual_binary)
  {
    $this->assertEquals(
      $expected, $actual,
      sprintf("%s\nexpected: %d\n  actual: %d\nexpected b: %s\n  actual b: %s",
              $shift_type, $expected, $actual,
              $expected_binary, $actual_binary));
  }

  /**
   * @dataProvider bit_shift_provider
   */
  function test_bit_shift($val, $shift, $expected_lval, $expected_rval, $lbin, $rbin)
  {

    $this->skip_64_bit_test_on_32_bit();

    $lval = (int) ((int) $val << $shift);
    $this->assert_bit_shift($expected_lval, strval($lval),
                            'lshift', $lbin, decbin($lval));
    $rval = ((int) $val >> $shift);
    $this->assert_bit_shift($expected_rval, strval($rval),
                            'rshift', $rbin, decbin($rval));
  }

  /**
   * @dataProvider bit_shift_provider
   */
  function test_left_shift_gmp($val, $shift,
                               $expected_lval, $expected_rval,
                               $lbin, $rbin)
  {
    $this->skip_if_no_gmp();
    $lval = gmp_strval(AvroGMP::shift_left($val, $shift));
    $this->assert_bit_shift($expected_lval, $lval, 'gmp left shift',
                            $lbin, decbin((int) $lval));
  }

  /**
   * @dataProvider bit_shift_provider
   */
  function test_right_shift_gmp($val, $shift, $expected_lval, $expected_rval,
                                $lbin, $rbin)
  {
    $this->skip_if_no_gmp();
    $rval = gmp_strval(AvroGMP::shift_right($val, $shift));
    $this->assert_bit_shift($expected_rval, $rval, 'gmp right shift',
                            $rbin, decbin((int) $rval));
  }

  /**
   * @dataProvider long_provider
   */
  function test_encode_long($val, $expected_bytes)
  {
    $this->skip_64_bit_test_on_32_bit();
    $bytes = AvroIOBinaryEncoder::encode_long($val);
    $this->assertEquals($expected_bytes, $bytes);
  }

  /**
   * @dataProvider long_provider
   */
  function test_gmp_encode_long($val, $expected_bytes)
  {
    $this->skip_if_no_gmp();
    $bytes = AvroGMP::encode_long($val);
    $this->assertEquals($expected_bytes, $bytes);
  }

  /**
   * @dataProvider long_provider
   */
  function test_decode_long_from_array($expected_val, $bytes)
  {
    $this->skip_64_bit_test_on_32_bit();
    $ary = array_map('ord', str_split($bytes));
    $val = AvroIOBinaryDecoder::decode_long_from_array($ary);
    $this->assertEquals($expected_val, $val);
  }

  /**
   * @dataProvider long_provider
   */
  function test_gmp_decode_long_from_array($expected_val, $bytes)
  {
    $this->skip_if_no_gmp();
    $ary = array_map('ord', str_split($bytes));
    $val = AvroGMP::decode_long_from_array($ary);
    $this->assertEquals($expected_val, $val);
  }

  function long_provider()
  {
    return array(array('0', "\x0"),
                 array('1', "\x2"),
                 array('7', "\xe"),
                 array('10000', "\xa0\x9c\x1"),
                 array('2147483647', "\xfe\xff\xff\xff\xf"),
                 array('98765432109', "\xda\x94\x87\xee\xdf\x5"),
                 array('-1', "\x1"),
                 array('-7', "\xd"),
                 array('-10000', "\x9f\x9c\x1"),
                 array('-2147483648', "\xff\xff\xff\xff\xf"),
                 array('-98765432109', "\xd9\x94\x87\xee\xdf\x5")
      );

  }

  function bit_shift_provider()
  {
                      // val shift lval rval
    return array(
      array('0', 0, '0', '0',
            '0',
            '0'),
      array('0', 1, '0', '0',
            '0',
            '0'),
      array('0', 7, '0', '0',
            '0',
            '0'),
      array('0', 63, '0', '0',
            '0',
            '0'),
      array('1', 0, '1', '1',
            '1',
            '1'),
      array('1', 1, '2', '0',
            '10',
            '0'),
      array('1', 7, '128', '0',
            '10000000',
            '0'),
      array('1', 63, '-9223372036854775808', '0',
            '1000000000000000000000000000000000000000000000000000000000000000',
            '0'),
      array('100', 0, '100', '100',
            '1100100',
            '1100100'),
      array('100', 1, '200', '50',
            '11001000',
            '110010'),
      array('100', 7, '12800', '0',
            '11001000000000',
            '0'),
      array('100', 63, '0', '0',
            '0',
            '0'),
      array('1000000', 0, '1000000', '1000000',
            '11110100001001000000',
            '11110100001001000000'),
      array('1000000', 1, '2000000', '500000',
            '111101000010010000000',
            '1111010000100100000'),
      array('1000000', 7, '128000000', '7812',
            '111101000010010000000000000',
            '1111010000100'),
      array('1000000', 63, '0', '0',
            '0',
            '0'),
      array('2147483647', 0, '2147483647', '2147483647',
            '1111111111111111111111111111111',
            '1111111111111111111111111111111'),
      array('2147483647', 1, '4294967294', '1073741823',
            '11111111111111111111111111111110',
            '111111111111111111111111111111'),
      array('2147483647', 7, '274877906816', '16777215',
            '11111111111111111111111111111110000000',
            '111111111111111111111111'),
      array('2147483647', 63, '-9223372036854775808', '0',
            '1000000000000000000000000000000000000000000000000000000000000000',
            '0'),
      array('10000000000', 0, '10000000000', '10000000000',
            '1001010100000010111110010000000000',
            '1001010100000010111110010000000000'),
      array('10000000000', 1, '20000000000', '5000000000',
            '10010101000000101111100100000000000',
            '100101010000001011111001000000000'),
      array('10000000000', 7, '1280000000000', '78125000',
            '10010101000000101111100100000000000000000',
            '100101010000001011111001000'),
      array('10000000000', 63, '0', '0',
            '0',
            '0'),
      array('9223372036854775807', 0, '9223372036854775807', '9223372036854775807',
            '111111111111111111111111111111111111111111111111111111111111111',
            '111111111111111111111111111111111111111111111111111111111111111'),
      array('9223372036854775807', 1, '-2', '4611686018427387903',
            '1111111111111111111111111111111111111111111111111111111111111110',
            '11111111111111111111111111111111111111111111111111111111111111'),
      array('9223372036854775807', 7, '-128', '72057594037927935',
            '1111111111111111111111111111111111111111111111111111111110000000',
            '11111111111111111111111111111111111111111111111111111111'),
      array('9223372036854775807', 63, '-9223372036854775808', '0',
            '1000000000000000000000000000000000000000000000000000000000000000',
            '0'),
      array('-1', 0, '-1', '-1',
            '1111111111111111111111111111111111111111111111111111111111111111',
            '1111111111111111111111111111111111111111111111111111111111111111'),
      array('-1', 1, '-2', '-1',
            '1111111111111111111111111111111111111111111111111111111111111110',
            '1111111111111111111111111111111111111111111111111111111111111111'),
      array('-1', 7, '-128', '-1',
            '1111111111111111111111111111111111111111111111111111111110000000',
            '1111111111111111111111111111111111111111111111111111111111111111'),
      array('-1', 63, '-9223372036854775808', '-1',
            '1000000000000000000000000000000000000000000000000000000000000000',
            '1111111111111111111111111111111111111111111111111111111111111111'),
      array('-100', 0, '-100', '-100',
            '1111111111111111111111111111111111111111111111111111111110011100',
            '1111111111111111111111111111111111111111111111111111111110011100'),
      array('-100', 1, '-200', '-50',
            '1111111111111111111111111111111111111111111111111111111100111000',
            '1111111111111111111111111111111111111111111111111111111111001110'),
      array('-100', 7, '-12800', '-1',
            '1111111111111111111111111111111111111111111111111100111000000000',
            '1111111111111111111111111111111111111111111111111111111111111111'),
      array('-100', 63, '0', '-1',
            '0',
            '1111111111111111111111111111111111111111111111111111111111111111'),
      array('-1000000', 0, '-1000000', '-1000000',
            '1111111111111111111111111111111111111111111100001011110111000000',
            '1111111111111111111111111111111111111111111100001011110111000000'),
      array('-1000000', 1, '-2000000', '-500000',
            '1111111111111111111111111111111111111111111000010111101110000000',
            '1111111111111111111111111111111111111111111110000101111011100000'),
      array('-1000000', 7, '-128000000', '-7813',
            '1111111111111111111111111111111111111000010111101110000000000000',
            '1111111111111111111111111111111111111111111111111110000101111011'),
      array('-1000000', 63, '0', '-1',
            '0',
            '1111111111111111111111111111111111111111111111111111111111111111'),
      array('-2147483648', 0, '-2147483648', '-2147483648',
            '1111111111111111111111111111111110000000000000000000000000000000',
            '1111111111111111111111111111111110000000000000000000000000000000'),
      array('-2147483648', 1, '-4294967296', '-1073741824',
            '1111111111111111111111111111111100000000000000000000000000000000',
            '1111111111111111111111111111111111000000000000000000000000000000'),
      array('-2147483648', 7, '-274877906944', '-16777216',
            '1111111111111111111111111100000000000000000000000000000000000000',
            '1111111111111111111111111111111111111111000000000000000000000000'),
      array('-2147483648', 63, '0', '-1',
            '0',
            '1111111111111111111111111111111111111111111111111111111111111111'),
      array('-10000000000', 0, '-10000000000', '-10000000000',
            '1111111111111111111111111111110110101011111101000001110000000000',
            '1111111111111111111111111111110110101011111101000001110000000000'),
      array('-10000000000', 1, '-20000000000', '-5000000000',
            '1111111111111111111111111111101101010111111010000011100000000000',
            '1111111111111111111111111111111011010101111110100000111000000000'),
      array('-10000000000', 7, '-1280000000000', '-78125000',
            '1111111111111111111111101101010111111010000011100000000000000000',
            '1111111111111111111111111111111111111011010101111110100000111000'),
      array('-10000000000', 63, '0', '-1',
            '0',
            '1111111111111111111111111111111111111111111111111111111111111111'),
      array('-9223372036854775808', 0, '-9223372036854775808', '-9223372036854775808',
            '1000000000000000000000000000000000000000000000000000000000000000',
            '1000000000000000000000000000000000000000000000000000000000000000'),
      array('-9223372036854775808', 1, '0', '-4611686018427387904',
            '0',
            '1100000000000000000000000000000000000000000000000000000000000000'),
      array('-9223372036854775808', 7, '0', '-72057594037927936',
            '0',
            '1111111100000000000000000000000000000000000000000000000000000000'),
      array('-9223372036854775808', 63, '0', '-1',
            '0',
            '1111111111111111111111111111111111111111111111111111111111111111'),
      );
  }

}
