Commit a1c04369 authored by flothoni's avatar flothoni

compare.js: update function compare()

Use easiest comparaisons bettween two values.
fix #3288
parent 16a88095
Pipeline #28678 passed with stages
in 6 minutes and 24 seconds
...@@ -42,44 +42,12 @@ var term = "*"; ...@@ -42,44 +42,12 @@ var term = "*";
* Renvoie 1 si la deuxième chaîne doit être classée avant la première * Renvoie 1 si la deuxième chaîne doit être classée avant la première
*/ */
function compare(string1, string2) { function compare(string1, string2) {
//Variable permettant l'incrémentation dans le TantQue var comparaison_1 = string1 > string2
var i = 0; var comparaison_2 = string1 < string2
//Vérification de la présence de l'étoile (pour la comparaison d'allèles)
var boolTerm = false; if( !comparaison_1 && !comparaison_2){ return 0}
//On réduit tout en minuscule, afin de faciliter la comparaison caractère par caractère... if( comparaison_1 && !comparaison_2){ return 1}
var string1_lower = string1.toLowerCase(); if( !comparaison_1 && comparaison_2){ return -1}
var string2_lower = string2.toLowerCase();
//On sauvegarde le premier caractère de la phrase en minuscule
var charS1 = string1_lower.charAt(0);
var charS2 = string2_lower.charAt(0);
if (charS1 == term) {
charS1 = string1_lower.charAt(1);
boolTerm = true;
}
if (charS2 == term) {
charS2 = string2_lower.charAt(1);
boolTerm = true;
}
if (boolTerm === true) i = 1;
//On va trier les noms qui, pour l'instant, ne contiennent aucun nombre
var value_compare_ascii = 0;
while (value_compare_ascii === 0 && isNaN(charS1) && isNaN(charS2) && i<string1.length && i<string2.length) {
value_compare_ascii = compare_ascii(charS1, charS2);
i++;
charS1 = string1_lower.charAt(i);
charS2 = string2_lower.charAt(i);
}
if (value_compare_ascii !== 0){
return value_compare_ascii;
}
//Si l'on arrive ici, c'est qu'il n'y avait rien à comparer sur les chaînes de caractères précédemment données
//Vérification si l'un ou/et l'autre est/sont nul(s)
var value_compare_length = compare_length(string1_lower, string2_lower, i);
if (value_compare_length === undefined) {
return compare_numbers(string1_lower.substring(i,string1.length), string2_lower.substring(i, string2.length));
} else {
return value_compare_length;
}
} }
/* Fonction permettant la comparaison entre 2 caractères ascii /* Fonction permettant la comparaison entre 2 caractères ascii
......
QUnit.module("Compare", {
});
QUnit.test("compare", function(assert) {
// avec des valeurs identiques
// numbers
getted = compare("42", "42")
assert.equal(getted, 0, "identical number return 0")
// only string
getted = compare("intron-a", "intron-a")
assert.equal(getted, 0, "identical string return 0")
// string with number
getted = compare("intron-42", "intron-42")
assert.equal(getted, 0, "identical string+number retrun 0")
// * Renvoie 0 si les deux chaînes sont strictement équivalentes
// * Renvoie -1 si la première chaîne doit être classée avant la deuxième
// * Renvoie 1 si la deuxième chaîne doit être classée avant la première
getted = compare("intron-1", "intron-1-var")
assert.equal(getted, -1, "string+number have correct return")
getted = compare("intron-1-var", "intron-1")
assert.equal(getted, 1, "reverse of the previous")
getted = compare("intron-vax", "intron-var")
assert.equal(getted, 1, "string return correct order")
getted = compare("intron-1-var", "intron-1-vax")
assert.equal(getted, -1, "reverse of the previous")
getted = compare("42", "512")
assert.equal(getted, -1, "number return correct order")
getted = compare("512", "42")
assert.equal(getted, 1, "reverse of the previous")
getted = compare("042", "512")
assert.equal(getted, -1, "number with 0 at first place return correct order")
getted = compare("512", "042")
assert.equal(getted, 1, "reverse of the previous")
getted = compare("intron-42*42", "intron-512*42")
assert.equal(getted, -1, "straing, number + allele return correct order")
getted = compare("intron-512*42", "intron-42*42")
assert.equal(getted, 1, "reverse of the previous")
});
...@@ -114,5 +114,6 @@ ...@@ -114,5 +114,6 @@
<script src="./testFiles/shortcut_test.js"></script> <script src="./testFiles/shortcut_test.js"></script>
<script src="./testFiles/speed_test.js"></script> <script src="./testFiles/speed_test.js"></script>
<script src="./testFiles/tokeniser_test.js"></script> <script src="./testFiles/tokeniser_test.js"></script>
<script src="./testFiles/compare_test.js"></script>
</body> </body>
</html> </html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment