test(function() {
  assert_true((self.performance !== undefined), "self.performance exists");
  assert_equals(typeof self.performance, "object", "self.performance is an object");
  assert_equals((typeof self.performance.now), "function", "self.performance.now() is a function");
  assert_equals(typeof self.performance.now(), "number", "self.performance.now() returns a number");
}, "self.performance.now() is a function that returns a number");

test(function() {
  assert_true(self.performance.now() > 0);
}, "self.performance.now() returns a positive number");

test(function() {
    var now1 = self.performance.now();
    var now2 = self.performance.now();
    assert_true((now2-now1) >= 0);
  }, "self.performance.now() difference is not negative");

async_test(function() {
  // Check whether the performance.now() method is close to Date() within 30ms (due to inaccuracies)
  var initial_hrt = self.performance.now();
  var initial_date = Date.now();
  this.step_timeout(function() {
    var final_hrt = self.performance.now();
    var final_date = Date.now();
    assert_approx_equals(final_hrt - initial_hrt, final_date - initial_date, 30, 'High resolution time value increased by approximately the same amount as time from date object');
    this.done();
  }, 2000);
}, 'High resolution time has approximately the right relative magnitude');
