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

Statements: 100% (17 / 17)      Branches: 100% (6 / 6)      Functions: 100% (5 / 5)      Lines: 100% (17 / 17)      Ignored: none     

All files » nodash/lib/coll/ » extra.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      1     5   5   1 1   1 2 2 2 1   1       1     5     4     2   1   1              
/* vim: set et sw=2 ts=2: */
'use strict';
 
module.exports = [ 'List', 'Thunk', 'emptyList', 'isUndefined', 'listToArray', 'typeOf', 'error',
  function (List, Thunk, emptyList, isUndefined, listToArray, typeOf, error) {
 
  var Nodash = this;
 
  var sjt = require('steinhaus-johnson-trotter');
 
  function generateList(thing) {
    var generator = sjt(thing);
 
    function gen() {
      return new Thunk(function () {
        var next = generator();
        if (isUndefined(next)) {
          return emptyList();
        }
        return new List(next, gen());
      });
    }
 
    return new List(thing, gen());
  }
 
  return {
 
    permutations: function (thing) {
      switch (typeOf(thing)) {
        case 'array':
        case 'string':
          return sjt.all(thing);
        case 'list':
          return generateList(listToArray(thing));
        default:
          error(TypeError);
      }
    }
 
  };
  
}];