'use strict';

var Caml = require("@rescript/std/lib/js/caml.js");
var $$Array = require("@rescript/std/lib/js/array.js");
var Belt_Array = require("@rescript/std/lib/js/belt_Array.js");
var Belt_Range = require("@rescript/std/lib/js/belt_Range.js");
var Benchmark_Helpers$QuriSquiggleLang = require("./Benchmark_Helpers.bs.js");

function beltArray(param) {
  var x = Belt_Array.make(1000, 0);
  Belt_Range.forEach(1, 300000, (function (param) {
          Belt_Array.map(x, (function (v) {
                  return v;
                }));
        }));
}

function jsArray2(param) {
  var x = Belt_Array.make(1000, 0);
  Belt_Range.forEach(1, 300000, (function (param) {
          x.map(function (v) {
                return v;
              });
        }));
}

function ocamlArray(param) {
  var x = Belt_Array.make(1000, 0);
  Belt_Range.forEach(1, 300000, (function (param) {
          $$Array.map((function (v) {
                  return v;
                }), x);
        }));
}

function runAll(param) {
  console.log("Mapping identity function over arrays of size " + (1000).toString() + " (" + (300000).toString() + " iterations)");
  Benchmark_Helpers$QuriSquiggleLang.measure("Belt.Array.map", beltArray);
  Benchmark_Helpers$QuriSquiggleLang.measure("Js.Array2.map", jsArray2);
  Benchmark_Helpers$QuriSquiggleLang.measure("Array.map", ocamlArray);
}

var $$Map = {
  runAll: runAll
};

function jsArray2$1(param) {
  var x = Belt_Array.make(1000, 0);
  var compare = function (a, b) {
    if (a < b) {
      return -1;
    } else {
      return 1;
    }
  };
  Belt_Range.forEach(1, 30000, (function (param) {
          x.sort(compare);
        }));
}

function jsArray2withOcamlCompare(param) {
  var x = Belt_Array.make(1000, 0);
  Belt_Range.forEach(1, 30000, (function (param) {
          x.sort(Caml.float_compare);
        }));
}

function ocamlArray$1(param) {
  var x = Belt_Array.make(1000, 0);
  Belt_Range.forEach(1, 30000, (function (param) {
          $$Array.fast_sort(Caml.float_compare, x);
        }));
}

function runAll$1(param) {
  console.log("Sorting arrays of size " + (1000).toString() + " (" + (30000).toString() + " iterations)");
  Benchmark_Helpers$QuriSquiggleLang.measure("Js.Array2.sort", jsArray2$1);
  Benchmark_Helpers$QuriSquiggleLang.measure("Js.Array2.sort with Ocaml compare", jsArray2withOcamlCompare);
  Benchmark_Helpers$QuriSquiggleLang.measure("Array.fast_sort", ocamlArray$1);
}

var Sort = {
  runAll: runAll$1
};

runAll(undefined);

runAll$1(undefined);

exports.$$Map = $$Map;
exports.Sort = Sort;
/*  Not a pure module */