Code coverage report for master/naturalCmp.js

Statements: 94.74% (18 / 19)      Branches: 85% (17 / 20)      Functions: 100% (1 / 1)      Lines: 93.75% (15 / 16)      Ignored: none     

All files » master/ » naturalCmp.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 301 49 41 40   39         39 58     58 34 34 34 16   18       5 5        
module.exports = function naturalCmp(str1, str2) {
  if (str1 == str2) return 0;
  if (!str1) return -1;
  if (!str2) return 1;
 
  var cmpRegex = /(\.\d+|\d+|\D+)/g,
    tokens1 = String(str1).match(cmpRegex),
    tokens2 = String(str2).match(cmpRegex),
    count = Math.min(tokens1.length, tokens2.length);
 
  for (var i = 0; i < count; i++) {
    var a = tokens1[i],
      b = tokens2[i];
 
    if (a !== b) {
      var num1 = +a;
      var num2 = +b;
      if (num1 === num1 && num2 === num2) {
        return num1 > num2 ? 1 : -1;
      }
      return a < b ? -1 : 1;
    }
  }
 
  Eif (tokens1.length != tokens2.length)
    return tokens1.length - tokens2.length;
 
  return str1 < str2 ? -1 : 1;
};