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

var Caml_obj   = require("../runtime/caml_obj");
var Mt         = require("./mt");
var Caml_array = require("../runtime/caml_array");
var $$Array    = require("../stdlib/array");
var List       = require("../stdlib/list");

function is_sorted(x) {
  var len = x.length;
  var _i = 0;
  while(true) {
    var i = _i;
    if (i >= len - 1) {
      return /* true */1;
    }
    else if (Caml_obj.caml_lessthan(x[i], x[i + 1 | 0])) {
      _i = i + 1 | 0;
      continue ;
      
    }
    else {
      return /* false */0;
    }
  };
}

var array_suites_000 = /* tuple */[
  "init",
  function () {
    return /* Eq */{
            0: $$Array.init(5, function (x) {
                  return x;
                }),
            1: /* array */[
              0,
              1,
              2,
              3,
              4
            ],
            length: 2,
            tag: 0
          };
  }
];

var array_suites_001 = /* :: */[
  /* tuple */[
    "toList",
    function () {
      var aux = function (xs) {
        return List.fold_left(function (acc, param) {
                    return /* :: */[
                            /* tuple */[
                              $$Array.to_list(param[0]),
                              param[1]
                            ],
                            acc
                          ];
                  }, /* [] */0, xs);
      };
      var match = List.split(aux(/* :: */[
                /* tuple */[
                  /* int array */[],
                  /* [] */0
                ],
                /* [] */0
              ]));
      return /* Eq */{
              0: match[0],
              1: match[1],
              length: 2,
              tag: 0
            };
    }
  ],
  /* :: */[
    /* tuple */[
      "concat",
      function () {
        return /* Eq */{
                0: /* array */[
                  0,
                  1,
                  2,
                  3,
                  4,
                  5
                ],
                1: Caml_array.caml_array_concat(/* :: */[
                      /* int array */[
                        0,
                        1,
                        2
                      ],
                      /* :: */[
                        /* int array */[
                          3,
                          4
                        ],
                        /* :: */[
                          /* int array */[],
                          /* :: */[
                            /* int array */[5],
                            /* [] */0
                          ]
                        ]
                      ]
                    ]),
                length: 2,
                tag: 0
              };
      }
    ],
    /* :: */[
      /* tuple */[
        "make",
        function () {
          return /* Eq */{
                  0: Caml_array.caml_make_vect(100, /* "a" */97),
                  1: $$Array.init(100, function () {
                        return /* "a" */97;
                      }),
                  length: 2,
                  tag: 0
                };
        }
      ],
      /* :: */[
        /* tuple */[
          "sub",
          function () {
            return /* Eq */{
                    0: $$Array.sub(/* array */[
                          0,
                          1,
                          2,
                          3,
                          4
                        ], 2, 2),
                    1: /* int array */[
                      2,
                      3
                    ],
                    length: 2,
                    tag: 0
                  };
          }
        ],
        /* :: */[
          /* tuple */[
            "blit",
            function () {
              var u = /* int array */[
                100,
                0,
                0
              ];
              var v = $$Array.init(3, function (x) {
                    return (x << 1);
                  });
              $$Array.blit(v, 1, u, 1, 2);
              return /* Eq */{
                      0: /* tuple */[
                        /* int array */[
                          0,
                          2,
                          4
                        ],
                        /* int array */[
                          100,
                          2,
                          4
                        ]
                      ],
                      1: /* tuple */[
                        v,
                        u
                      ],
                      length: 2,
                      tag: 0
                    };
            }
          ],
          /* :: */[
            /* tuple */[
              "make",
              function () {
                return /* Eq */{
                        0: Caml_array.caml_make_vect(2, 1),
                        1: /* int array */[
                          1,
                          1
                        ],
                        length: 2,
                        tag: 0
                      };
              }
            ],
            /* :: */[
              /* tuple */[
                "sort",
                function () {
                  var u = /* int array */[
                    3,
                    0,
                    1
                  ];
                  $$Array.sort(function (x, y) {
                        return Caml_obj.caml_int_compare(x, y);
                      }, u);
                  return /* Eq */{
                          0: Caml_obj.caml_equal(/* int array */[
                                0,
                                1,
                                3
                              ], u),
                          1: /* true */1,
                          length: 2,
                          tag: 0
                        };
                }
              ],
              /* :: */[
                /* tuple */[
                  "sort_large",
                  function () {
                    var v = $$Array.init(4, function (i) {
                          return i % 17;
                        });
                    $$Array.sort(function (x, y) {
                          return Caml_obj.caml_int_compare(x, y);
                        }, v);
                    return /* Eq */{
                            0: /* true */1,
                            1: is_sorted(v),
                            length: 2,
                            tag: 0
                          };
                  }
                ],
                /* [] */0
              ]
            ]
          ]
        ]
      ]
    ]
  ]
];

var array_suites = /* :: */[
  array_suites_000,
  array_suites_001
];

Mt.from_pair_suites("array_test.ml", array_suites);

/*  Not a pure module */