Ejemplo n.º 1
0
 public function testGetWithNoCalculatorSetDetectsCalculator()
 {
     $currentCalculator = Calculator::get();
     Calculator::set(null);
     $this->assertInstanceOf(Calculator::getNamespace(), Calculator::get());
     Calculator::set($currentCalculator);
 }
Ejemplo n.º 2
0
 /**
  * Returns a string representation of this number in the given base.
  *
  * @param int $base
  *
  * @return string
  *
  * @throws \InvalidArgumentException If the base is out of range.
  */
 public function toBase($base)
 {
     $base = (int) $base;
     if ($base === 10) {
         return $this->value;
     }
     if ($base < 2 || $base > 36) {
         throw new \InvalidArgumentException(sprintf('Base %d is out of range [2, 36]', $base));
     }
     $dictionary = '0123456789abcdefghijklmnopqrstuvwxyz';
     $calc = Calculator::get();
     $value = $this->value;
     $negative = $value[0] === '-';
     if ($negative) {
         $value = substr($value, 1);
     }
     $base = (string) $base;
     $result = '';
     while ($value !== '0') {
         list($value, $remainder) = $calc->divQR($value, $base);
         $remainder = (int) $remainder;
         $result .= $dictionary[$remainder];
     }
     if ($negative) {
         $result .= '-';
     }
     return strrev($result);
 }
Ejemplo n.º 3
0
require 'vendor/autoload.php';
/**
 * @return Calculator
 */
function getCalculatorImplementation()
{
    switch ($calculator = getenv('CALCULATOR')) {
        case 'GMP':
            $calculator = new Calculator\GmpCalculator();
            break;
        case 'BCMath':
            $calculator = new Calculator\BcMathCalculator();
            break;
        case 'Native':
            $calculator = new Calculator\NativeCalculator();
            break;
        default:
            if ($calculator === false) {
                echo 'CALCULATOR environment variable not set!' . PHP_EOL;
            } else {
                echo 'Unknown calculator: ' . $calculator . PHP_EOL;
            }
            echo 'Example usage: CALCULATOR={calculator} vendor/bin/phpunit' . PHP_EOL;
            echo 'Available calculators: GMP, BCMath, Native' . PHP_EOL;
            exit(1);
    }
    echo 'Using ', get_class($calculator), PHP_EOL;
    return $calculator;
}
Calculator::set(getCalculatorImplementation());
Ejemplo n.º 4
0
 /**
  * {@inheritdoc}
  */
 public function compareTo($that)
 {
     $that = BigNumber::of($that);
     if ($that instanceof BigInteger) {
         $that = $that->toBigDecimal();
     }
     if ($that instanceof BigDecimal) {
         $this->scaleValues($this, $that, $a, $b);
         return Calculator::get()->cmp($a, $b);
     }
     return -$that->compareTo($this);
 }