X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/blobdiff_plain/1c52e3a9be7b82d6ad8f42245ecbd916c7c34d77..f0a17b3d23f3f277957d3e97ac1c7c1869d6d4cc:/src/main.cpp diff --git a/src/main.cpp b/src/main.cpp index 266ba1d..069b3ac 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,6 +3,7 @@ #include "btree.h" #include "clave_fija.h" #include "random.h" +#include "keymanager.h" int main (int argc, char *argv[]) { @@ -17,6 +18,7 @@ int main (int argc, char *argv[]) altas = atoi (argv[2]); bajas = atoi (argv[3]); + KeyManager km; BTree tree ("test.idx", bloque); std::list lst; @@ -24,39 +26,57 @@ int main (int argc, char *argv[]) Random::Init (); Random::Ints (lst, altas); - double paltas = bajas / (double)altas; + double paltas = bajas / (double)(altas + bajas); it = lst.begin (); - uint i = 0; while (it != lst.end ()) { ClaveFija c(*it); double l = Random::Double (0.0f, 1.0f); std::cout << l << " >= " << paltas << std::endl; - if (l >= paltas) { + if (!km.Size() // si no tenemos claves agregadas, mejor que hagamos un alta + || l >= paltas) { tree.AddKey (c); - i++; + km.AddValue (*it); + it++; } else { /* Tengo que borrar una clave entre 0 e "i" de la lista * porque son las que ya agregue. */ - int aborrar = (int)Random::Double (0, i) - 1; - std::list::iterator otro = lst.begin (); - int j = 0; - while (j < aborrar) { - otro++; - j++; - } - ClaveFija c(*otro); + ClaveFija c(km.GetRandom ()); tree.DelKey (c); std::string sss = c; std::cout << "Clave Borrada " << sss << std::endl; } + } + + km.PrintInfo (); + + std::list l = km.GetList (); + it = l.begin (); + int bien = 0; + int mal = 0; + while (it != l.end ()) { + ClaveFija c(*it); + BTreeFindResult *r; + r = tree.FindKey (c); + if (r != NULL) { + std::cout << "** Clave " << (*it) << " encontrada.\n"; + bien++; + delete r; + } else { + std::cout << "** Clave " << (*it) << " NO encontrada.\n"; + mal++; + } it++; } - /* TODO : Hacer verificacion de claves :) */ + std::cout << "\n\n === Resultados ===\n"; + std::cout << " Hist : " << bien << "\n"; + std::cout << " Miss : " << mal << "\n"; + std::cout << " Total : " << (bien+mal) << "\n"; + return 0; }