// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

new BenchmarkSuite('BaselineNaivePromises', [1000], [
  new Benchmark('Basic', false, false, 0, Basic, Setup),
]);

var a,b,c,d,e,f,g,h,i,j,x;

function Setup() {
  x = Promise.resolve();

  j = function j(p) { return p; };
  i = function i(p) {
    return p.then(j)
            .then(j)
            .then(j)
            .then(j)
            .then(j)
            .then(j)
            .then(j)
            .then(j)
            .then(j)
            .then(j);
  };
  h = function h(p) { return p; };
  g = function g(p) { return p; };
  f = function f(p) { return p; };
  e = function e(p) { return p; };
  d = function d(p) { return p; };
  c = function c(p) { return p; };
  b = function b(p) { return p; };
  a = function a(p) { return p; };

  %PerformMicrotaskCheckpoint();
}

function Basic() {
  x.then(j)
   .then(i)
   .then(h)
   .then(g)
   .then(f)
   .then(e)
   .then(d)
   .then(c)
   .then(b)
   .then(a);
  %PerformMicrotaskCheckpoint();
}
