0votos

Prueba unitaria algoritmo de ordenación. en JavaScript

por josejuan hace 6 años

Lo ideal es automatizar las pruebas unitarias siempre que se pueda (y no acostumbrarse a poner ejemplos concretos de forma manual).

Diseñar una (o las necesarias) pruebas unitarias para verificar la correctitud de un algoritmo de ordenación.

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
45
46
47
48
49
50
51
52
53
// Genera un test, devolviendo un vector aleatorio, ordenado y desornado (sin tenerlo que ordenar) 
function randomTest(size, maxStep) { 
  var s = function () { return ~~(Math.random() * maxStep) }, v = [], w = [], n = s(); 
  while(size--) {v.push(n += s()); w.push(n)} 
  return {shuffled: w.Shuffle(), sorted: v}; 
 
 
// Realiza un test 
function doSortTest(shuffled, sorted) { 
  if(shuffled.slice(0).Sort().Equal(sorted)) 
    return true; 
  console.log("TEST FAIL! doSortTest -> [" + shuffled.join(', ') + "] ~  [" + sorted.join(', ') + "]"); 
  return false; 
 
// Podemos hacer muchos test... 
var n = 10000; 
while(n--) { 
  var t = randomTest(10, 10); 
  if(!doSortTest(t.shuffled, t.sorted)) 
    break; 
 
// Un test de fallo (aunque también podríamos hacer muchos, claro) 
doSortTest([5, 4, 3], [1, 2, 3]); 
 
 
 
 
 
// tres definiciones sobre arrays que ¡deberían! estar 
Array.prototype.Shuffle = function () { 
  var L = this.length - 1; 
  for(var i = 0; i < L; i++) { 
    var j = i + 1 + ~~(Math.random() * (L - i)); 
    var w = this[i]; 
    this[i] = this[j]; 
    this[j] = w; 
  return this; 
Array.prototype.Equal = function (v) { 
    if(this.length != v.length) return false; 
    for(var i = 0; i < v.length; i++) if(~~this[i] != ~~v[i]) return false; 
    return true; 
 
// los enteros son enteros ¡no cadenas! 
Array.prototype.Sort = function () { 
    Array.sort(this, function(a,b){return ~~a - ~~b}); 
    return this; 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.