hooks.beforeEach(function() {
    slicedArray = emberA([]);
    initArray(emberA([]));

    funcStub = sinon.stub(slicedArray, 'pop').returns(returnValue);

    macro = normalizeArray2('pop');
  });
  test('it allows default value override', function(assert) {
    macro = normalizeArray2('pop', () => true);

    compute({
      assert,
      computed: macro('array'),
      strictEqual: true
    });
  });
  test('it calls ember funcs on array', function(assert) {
    macro = normalizeArray2('compact');

    compute({
      assert,
      computed: macro('array'),
      properties: {
        array: [1, null, undefined]
      },
      deepEqual: [1]
    });
  });
  test('it calls prop on array', function(assert) {
    macro = normalizeArray2('length');

    compute({
      assert,
      computed: macro('array'),
      properties: {
        array: [1, 2, 3]
      },
      strictEqual: 3
    });
  });
  test('default value is a new copy every recalculation', function(assert) {
    macro = normalizeArray2('pop', () => []);

    let { subject } = compute({
      computed: macro('array')
    });

    let result = subject.get('computed');

    subject.set('array', null);

    assert.notEqual(subject.get('computed'), result);
  });
  test('it calls func on ember data arrays', function(assert) {
    let arrayPromise = ArrayPromiseProxy.create({
      promise: resolve(originalArray)
    });

    funcStub = sinon.stub(arrayPromise, 'isEvery').returns(returnValue);

    macro = normalizeArray2('isEvery');

    let { result } = compute({
      computed: macro('array', 'firstParam', 'secondParam'),
      properties: {
        array: arrayPromise,
        firstParam,
        secondParam
      }
    });

    assert.strictEqual(funcStub.thisValues[0], arrayPromise);
    assert.deepEqual(funcStub.args, [[firstParam, secondParam]]);
    assert.strictEqual(result, returnValue);
  });