/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

//-----------------------------------------------------------------------------
var BUGNUMBER = 363040;
var summary = 'Array.prototype.reduce application in array flattening';
var actual = '';
var expect = '';


//-----------------------------------------------------------------------------
test();
//-----------------------------------------------------------------------------

function test()
{
  enterFunc ('test');
  printBugNumber(BUGNUMBER);
  printStatus (summary);
 
  function flatten(arr)
  {
    function op(partial, item)
    {
      if (item instanceof Array)
        Array.prototype.push.apply(partial, flatten(item));
      else
        partial.push(item);

      return partial;
    }

    return arr.reduce(op, []);
  }

  expect = [1, 2, 3];
  actual = flatten([1, 2, 3]);      // [1, 2, 3]
  reportCompare(expect + '', actual + '', summary + ': ' + expect);

  expect = [1, 2, 3];
  actual = flatten([1, [2], 3]);    // [1, 2, 3]
  reportCompare(expect + '', actual + '', summary + ': ' + expect);

  expect = [2, 3];
  actual = flatten([[], 2, 3]);     // [2, 3]
  reportCompare(expect + '', actual + '', summary + ': ' + expect);

  expect = [1, 2, 3];
  actual = flatten([[1], 2, 3]);    // [1, 2, 3]
  reportCompare(expect + '', actual + '', summary + ': ' + expect);

  expect = [4];
  actual = flatten([[[[4]]]]);      // [4]
  reportCompare(expect + '', actual + '', summary + ': ' + expect);

  expect = [1, 2, 3];
  actual = flatten([1, [2, [3]]]);  // [1, 2, 3]
  reportCompare(expect + '', actual + '', summary + ': ' + expect);

  expect = [];
  actual = flatten([[[[[]]]]]);     // []
  reportCompare(expect + '', actual + '', summary + ': ' + expect);

  exitFunc ('test');
}
