Version string comparer

Compare version strings

by bladnman

HTML

<script src="https://raw.github.com/carhartl/jquery-cookie/master/jquery.cookie.js"></script>
<script src="http://qubedpeas.com/files/currentVersion/QPTools.js"></script>
<div id="log" class="log"></div>

CSS

.runButton {
    width:   125px;
    margin:  20px;
}
.log {
   padding:10px; 
    margin: 20px; 
    border: 1px dotted #ccc; 
    color:#888; 
    font-face: arial; 
    font-size:12px; 
    background: #fbfbfb; 
}

JavaScript

/* ************************************ */
function runTest() {
    log("----------- [ LESS ] -------------");
    test("1", "2");
    test("1.0", "2.0");
    test("1.00", "2.00");
    test("1.00.0", "2.00.0");
    test("1.00.0", "2");   
    test("1.1", "1.1.0.0.1"); 
    
    log("----------- [ MORE ] -------------");
    test("11", "2");
    test("11.0", "2.0");
    test("11.00", "2.00");
    test("11.00.0", "2.00.0");
    test("11.00.0", "2");   
    test("1.1.0.1.0", "1.1.0.0.1"); 
    
    log("----------- [ EQUAL ] -------------");
    test("1", "1");
    test("1.1", "1.1");
    test("1.1.0.1.0", "1.1.0.1.0");
    
    
    
    log("----------- [ ODD ITEMS ] -------------");    
    test(null, null);
    test("1a", "1b");
    test("1a.0.1", "1b.0.1");
    test("1a.0.2", "1b.0.1");
    test("1a.0.2");
}
function test(v1, v2) {
    
    // same
    if (isVersionEqualTo(v1, v2)) {
        log(v1 + " = " + v2);
    }
    
    // less
    else if (isVersionLessThan(v1, v2)) {
        log(v1 + " < " + v2);
    }
    
    // more
    else if (isVersionGreaterThan(v1, v2)) {
        log(v1 + " > " + v2);
    }
}

runTest();
function isVersionGreaterThan(v1, v2) {
    return compareVersions (v1, v2, "==") == -1;
}
function isVersionLessThan(v1, v2) {
    return compareVersions (v1, v2, "==") == 1;
}
function isVersionEqualTo(v1, v2) {
    return compareVersions (v1, v2, "==") == 0;
}
function compareVersions(v1, v2) {
    
    v1 = QPU.getStringValue(v1);
    v2 = QPU.getStringValue(v2);
    
    var v1parts = v1.split('.'), 
        v2parts = v2.split('.');
    
    var maxLen = Math.max(v1parts.length, v2parts.length);
    var part1, part2;
    for(var i = 0; i < maxLen; i++) {
        part1 = QPU.getIntValue(v1parts[i]);
        part2 = QPU.getIntValue(v2parts[i]);
        
        if (part1 < part2) {
            return 1;
        }
        
        else if (part1 > part2) {
            return -1;
        }
    }
    
    return 0;
}


/*...