Code coverage report for nodash/lib/coll/fold.js

Statements: 100% (48 / 48)      Branches: 100% (23 / 23)      Functions: 100% (7 / 7)      Lines: 100% (48 / 48)      Ignored: none     

All files » nodash/lib/coll/ » fold.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106      1     5   5     40     39 144   39   1 3 3   1         3     3 3 19   3         5     1 4   1   4 1   3         1     1 1 3   1         7 3   4 4 4 7   4       11 11     10 10 51 23     10   1 1 1 3 2     1            
/* vim: set et sw=2 ts=2: */
'use strict';
 
module.exports = [ 'List', 'Stream', 'typeOf', 'lazy', 'emptyList',
  function (List, Stream, typeOf, lazy, emptyList) {
 
  var Nodash = this;
 
  return {
    
    'foldl foldl\' reduceLeft': function (f, x, xs) {
      switch (typeOf(xs)) {
        case 'array':
        case 'string':
          for (var i = 0; i < xs.length; i += 1) {
            x = f(x, xs[i]);
          }
          return x;
        case 'list':
          while (!xs.isEmpty()) {
            x = f(xs.head(), x);
            xs = xs.tail();
          }
          return x;
      }
    },
 
    'foldl1 foldl1\'': function (f, xs) {
      switch (typeOf(xs)) {
        case 'array':
        case 'string':
          var x = xs[0];
          for (var i = 1; i < xs.length; i += 1) {
            x = f(xs[i], x);
          }
          return x;
      }
    },
 
    'foldr reduceRight': function (f, x, xs) {
      switch (typeOf(xs)) {
        case 'array':
        case 'string':
          for (var i = xs.length - 1; i >= 0; i -= 1) {
            x = f(xs[i], x);
          }
          return x;
        case 'list':
          if (xs.isEmpty()) {
            return x;
          }
          return f(Nodash.foldr(f, x, xs.tail()), xs.head());
      }
    },
 
    foldr1: function (f, xs) {
      switch (typeOf(xs)) {
        case 'array':
        case 'string':
          var x = xs[xs.length - 1];
          for (var i = xs.length - 2; i >= 0; i -= 1) {
            x = f(xs[i], x);
          }
          return x;
      }
    },
 
    concat: function (xs) {
      if (Nodash.isString(xs[0])) {
        return xs.join('');
      }
      var zs = [];
      var ks = Object.keys(xs);
      for (var i = 0; i < ks.length; i++) {
        [].push.apply(zs, xs[ks[i]]);
      }
      return zs;
    },
 
    filter: function (p, xs) {
      var ys;
      switch (typeOf(xs)) {
        case 'array':
        case 'string':
          ys = [];
          for (var i = 0; i < xs.length; i++) {
            if (p(xs[i])) {
              ys.push(xs[i]);
            }
          }
          return Nodash.isString(xs) ? Nodash.arrayToString(ys) : ys;
        default:
          ys = {};
          var ks = Object.keys(xs);
          for (var j = 0; j < ks.length; j++) {
            if (p(xs[ks[j]])) {
              ys[ks[j]] = xs[ks[j]];
            }
          }
          return ys;
      }
    }
 
  };
}];