content: // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
  // for details. All rights reserved. Use of this source code is governed by a
  // BSD-style license that can be found in the LICENSE file.
  
  // Patch file for dart:math library.
  import 'dart:_foreign_helper' show JS;
  import 'dart:_js_helper' show checkNum;
  
  patch double sqrt(num x)
    => JS('double', r'Math.sqrt(#)', checkNum(x));
  
  patch double sin(num x)
    => JS('double', r'Math.sin(#)', checkNum(x));
  
  patch double cos(num x)
    => JS('double', r'Math.cos(#)', checkNum(x));
  
  patch double tan(num x)
    => JS('double', r'Math.tan(#)', checkNum(x));
  
  patch double acos(num x)
    => JS('double', r'Math.acos(#)', checkNum(x));
  
  patch double asin(num x)
    => JS('double', r'Math.asin(#)', checkNum(x));
  
  patch double atan(num x)
    => JS('double', r'Math.atan(#)', checkNum(x));
  
  patch double atan2(num a, num b)
    => JS('double', r'Math.atan2(#, #)', checkNum(a), checkNum(b));
  
  patch double exp(num x)
    => JS('double', r'Math.exp(#)', checkNum(x));
  
  patch double log(num x)
    => JS('double', r'Math.log(#)', checkNum(x));
  
  patch num pow(num x, num exponent) {
    checkNum(x);
    checkNum(exponent);
    return JS('num', r'Math.pow(#, #)', x, exponent);
  }
  
  patch class Random {
    patch factory Random([int seed]) => const _Random();
  }
  
  class _Random implements Random {
    // The Dart2JS implementation of Random doesn't use a seed.
    const _Random();
  
    int nextInt(int max) {
      if (max < 0) throw new ArgumentError("negative max: $max");
      if (max > 0xFFFFFFFF) max = 0xFFFFFFFF;
      return JS("int", "(Math.random() * #) >>> 0", max);
    }
  
    /**
     * Generates a positive random floating point value uniformly distributed on
     * the range from 0.0, inclusive, to 1.0, exclusive.
     */
    double nextDouble() => JS("double", "Math.random()");
  
    /**
     * Generates a random boolean value.
     */
    bool nextBool() => JS("bool", "Math.random() < 0.5");
  }
  