// Generated CODE, PLEASE EDIT WITH CARE
'use strict';

var Caml_primitive = require("../runtime/caml_primitive");
var Caml_array     = require("../runtime/caml_array");
var $$Array        = require("../stdlib/array");
var Caml_curry     = require("../runtime/caml_curry");
var List           = require("../stdlib/list");

function for_3(x) {
  var v = [0];
  var arr = $$Array.map(function (_, _$1) {
        return /* () */0;
      }, x);
  for(var i = 0 ,i_finish = x.length - 1; i<= i_finish; ++i){
    var j = (i << 1);
    arr[i] = (function(j){
    return function () {
      v[0] = v[0] + j | 0;
      return /* () */0;
    }
    }(j));
  }
  $$Array.iter(function (x) {
        return Caml_curry.app1(x, /* () */0);
      }, arr);
  return v[0];
}

function for_4(x) {
  var v = [0];
  var arr = $$Array.map(function (_, _$1) {
        return /* () */0;
      }, x);
  for(var i = 0 ,i_finish = x.length - 1; i<= i_finish; ++i){
    var j = (i << 1);
    var k = (j << 1);
    arr[i] = (function(k){
    return function () {
      v[0] = v[0] + k | 0;
      return /* () */0;
    }
    }(k));
  }
  $$Array.iter(function (x) {
        return Caml_curry.app1(x, /* () */0);
      }, arr);
  return v[0];
}

function for_5(x, u) {
  var v = [0];
  var arr = $$Array.map(function (_, _$1) {
        return /* () */0;
      }, x);
  for(var i = 0 ,i_finish = x.length - 1; i<= i_finish; ++i){
    var k = Caml_primitive.imul((u << 1), u);
    arr[i] = (function(k){
    return function () {
      v[0] = v[0] + k | 0;
      return /* () */0;
    }
    }(k));
  }
  $$Array.iter(function (x) {
        return Caml_curry.app1(x, /* () */0);
      }, arr);
  return v[0];
}

function for_6(x, u) {
  var v = [0];
  var arr = $$Array.map(function (_, _$1) {
        return /* () */0;
      }, x);
  var v4 = [0];
  var v5 = [0];
  var inspect_3 = -1;
  v4[0] = v4[0] + 1 | 0;
  for(var j = 0; j<= 1; ++j){
    v5[0] = v5[0] + 1 | 0;
    var v2 = [0];
    (function(v2){
    for(var i = 0 ,i_finish = x.length - 1; i<= i_finish; ++i){
      var k = Caml_primitive.imul((u << 1), u);
      var h = (v5[0] << 1);
      v2[0] = v2[0] + 1 | 0;
      arr[i] = (function(k,h){
      return function () {
        v[0] = (((((v[0] + k | 0) + v2[0] | 0) + v4[0] | 0) + v5[0] | 0) + h | 0) + u | 0;
        return /* () */0;
      }
      }(k,h));
    }
    }(v2));
    inspect_3 = v2[0];
  }
  $$Array.iter(function (x) {
        return Caml_curry.app1(x, /* () */0);
      }, arr);
  return /* int array */[
          v[0],
          v4[0],
          v5[0],
          inspect_3
        ];
}

function for_7() {
  var v = [0];
  var arr = Caml_array.caml_make_vect(21, function () {
        return /* () */0;
      });
  for(var i = 0; i<= 6; ++i){
    (function(i){
    for(var j = 0; j<= 2; ++j){
      arr[Caml_primitive.imul(i, 3) + j | 0] = (function(j){
      return function () {
        v[0] = (v[0] + i | 0) + j | 0;
        return /* () */0;
      }
      }(j));
    }
    }(i));
  }
  $$Array.iter(function (f) {
        return Caml_curry.app1(f, /* () */0);
      }, arr);
  return v[0];
}

function for_8() {
  var v = [0];
  var arr = Caml_array.caml_make_vect(21, function () {
        return /* () */0;
      });
  for(var i = 0; i<= 6; ++i){
    var k = (i << 1);
    (function(i,k){
    for(var j = 0; j<= 2; ++j){
      var h = i + j | 0;
      arr[Caml_primitive.imul(i, 3) + j | 0] = (function(j,h){
      return function () {
        v[0] = (((v[0] + i | 0) + j | 0) + h | 0) + k | 0;
        return /* () */0;
      }
      }(j,h));
    }
    }(i,k));
  }
  $$Array.iter(function (f) {
        return Caml_curry.app1(f, /* () */0);
      }, arr);
  return v[0];
}

function for_9() {
  var v = [/* [] */0];
  var match_000 = function (x) {
    v[0] = /* :: */[
      x,
      v[0]
    ];
    return /* () */0;
  };
  var match_001 = function () {
    return $$Array.of_list(List.rev(v[0]));
  };
  var collect = match_000;
  var vv = [0];
  var vv2 = [0];
  var arr = Caml_array.caml_make_vect(4, function () {
        return /* () */0;
      });
  var arr2 = Caml_array.caml_make_vect(2, function () {
        return /* () */0;
      });
  for(var i = 0; i<= 1; ++i){
    var v$1 = [0];
    v$1[0] = v$1[0] + i | 0;
    (function(v$1){
    for(var j = 0; j<= 1; ++j){
      v$1[0] = v$1[0] + 1 | 0;
      Caml_curry.app1(collect, v$1[0]);
      arr[(i << 1) + j | 0] = function () {
        vv[0] = vv[0] + v$1[0] | 0;
        return /* () */0;
      };
    }
    }(v$1));
    arr2[i] = (function(v$1){
    return function () {
      vv2[0] = vv2[0] + v$1[0] | 0;
      return /* () */0;
    }
    }(v$1));
  }
  $$Array.iter(function (f) {
        return Caml_curry.app1(f, /* () */0);
      }, arr);
  $$Array.iter(function (f) {
        return Caml_curry.app1(f, /* () */0);
      }, arr2);
  return /* array */[/* tuple */[
            vv[0],
            Caml_curry.app1(match_001, /* () */0),
            vv2[0]
          ]];
}

var suites_000 = /* tuple */[
  "for_loop_test_3",
  function () {
    return /* Eq */{
            0: 90,
            1: for_3(Caml_array.caml_make_vect(10, 2)),
            length: 2,
            tag: 0
          };
  }
];

var suites_001 = /* :: */[
  /* tuple */[
    "for_loop_test_4",
    function () {
      return /* Eq */{
              0: 180,
              1: for_4(Caml_array.caml_make_vect(10, 2)),
              length: 2,
              tag: 0
            };
    }
  ],
  /* :: */[
    /* tuple */[
      "for_loop_test_5",
      function () {
        return /* Eq */{
                0: 2420,
                1: for_5(Caml_array.caml_make_vect(10, 2), 11),
                length: 2,
                tag: 0
              };
      }
    ],
    /* :: */[
      /* tuple */[
        "for_loop_test_6",
        function () {
          return /* Eq */{
                  0: /* int array */[
                    30,
                    1,
                    2,
                    3
                  ],
                  1: for_6(Caml_array.caml_make_vect(3, 0), 0),
                  length: 2,
                  tag: 0
                };
        }
      ],
      /* :: */[
        /* tuple */[
          "for_loop_test_7",
          function () {
            return /* Eq */{
                    0: 84,
                    1: for_7(/* () */0),
                    length: 2,
                    tag: 0
                  };
          }
        ],
        /* :: */[
          /* tuple */[
            "for_loop_test_8",
            function () {
              return /* Eq */{
                      0: 294,
                      1: for_8(/* () */0),
                      length: 2,
                      tag: 0
                    };
            }
          ],
          /* :: */[
            /* tuple */[
              "for_loop_test_9",
              function () {
                return /* Eq */{
                        0: /* array */[/* tuple */[
                            10,
                            /* int array */[
                              1,
                              2,
                              2,
                              3
                            ],
                            5
                          ]],
                        1: for_9(/* () */0),
                        length: 2,
                        tag: 0
                      };
              }
            ],
            /* [] */0
          ]
        ]
      ]
    ]
  ]
];

var suites = /* :: */[
  suites_000,
  suites_001
];

exports.for_3  = for_3;
exports.for_4  = for_4;
exports.for_5  = for_5;
exports.for_6  = for_6;
exports.for_7  = for_7;
exports.for_8  = for_8;
exports.for_9  = for_9;
exports.suites = suites;
/* No side effect */