module.exports = function compareVersion(v1, v2, v3) {
    // 增加 v3 参数，判断 v1 是否介于 v2 和 v3 之间，左闭右开：v2 <= v1 < v3
    // 返回:
    // -2: v1 < v2
    // -1: v1 == v2
    // 1: v1 == v3
    // 2: v1 > v3
    // 0: v2 < v1 < v3
    v1 = v1.split('.');
    v2 = v2.split('.');
    v3 = v3 && v3.split('.');
    let len = Math.max(v1.length, v2.length);
    if (v3) {
        len = Math.max(v1.length, v2.length, v3.length);
    }

    while (v1.length < len) {
        v1.push('0');
    }
    while (v2.length < len) {
        v2.push('0');
    }
    while (v3 && v3.length < len) {
        v3.push('0');
    }

    let comp1 = 0;
    for (let i = 0; i < len; i++) {
        let num1 = parseInt(v1[i]);
        let num2 = parseInt(v2[i]);

        if (num1 > num2) {
            comp1 = 1;
            break;
        } else if (num1 < num2) {
            comp1 = -1;
            break;
        }
    }

    if (v3) {
        let comp2 = 0;
        for (let i = 0; i < len; i++) {
            let num1 = parseInt(v1[i]);
            let num3 = parseInt(v3[i]);

            if (num1 > num3) {
                comp2 = 1;
                break;
            } else if (num1 < num3) {
                comp2 = -1;
                break;
            }
        }
        let comp3 = 0;
        for (let i = 0; i < len; i++) {
            let num2 = parseInt(v2[i]);
            let num3 = parseInt(v3[i]);

            if (num2 > num3) {
                comp3 = 1;
                break;
            } else if (num2 < num3) {
                comp3 = -1;
                break;
            }
        }
        if (comp3 <= 0) {
            if (comp1 < 0) {
                return -2;
            } else if (comp1 == 0) {
                return -1;
            } else if (comp2 == 0) {
                return 1;
            } else if (comp2 > 0) {
                return 2;
            } else {
                return 0;
            }
        } else {
            if (comp2 < 0) {
                return -2;
            } else if (comp2 == 0) {
                return -1;
            } else if (comp1 == 0) {
                return 1;
            } else if (comp1 > 0) {
                return 2;
            } else {
                return 0;
            }
        }
    } else {
        return comp1;
    }
}
