X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/blobdiff_plain/a356d91d88f7f3399d80e922f70e10a8f422a3ba..b733cd4a9d1fcc19c3652b17fbd3065d0e0a72c7:/src/main.cpp diff --git a/src/main.cpp b/src/main.cpp index 3c30c4a..e4f0326 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,18 +2,88 @@ #include "btree.h" #include "clave_fija.h" +#include "random.h" +#include "keymanager.h" int main (int argc, char *argv[]) { - BTree tree ("test.idx", 64); + if (argc != 4) { + std::cout << "Uso: " << argv[0] << " \n"; + std::cout << "\tEl tamaƱo de bloque usado es 512*2^.\n"; + return 1; + } + + int bloque = 128 << (atoi (argv[1]) + 2); + int altas = atoi (argv[2]); + int bajas = atoi (argv[3]); + + KeyManager km; + BTree tree ("test.idx", bloque); + + std::list lst; + std::list::iterator it; + Random::Init (); + Random::Ints (lst, altas); + + double paltas = bajas / (double)(altas + bajas); + + it = lst.begin (); + while (it != lst.end ()) { + ClaveFija c(*it, 0); - for (int i=0; i<=13; i++) { - ClaveFija c(i); + double l = Random::Double (0.0f, 1.0f); + std::cout << l << " >= " << paltas << std::endl; + if (!km.Size() // si no tenemos claves agregadas, mejor que hagamos un alta + || l >= paltas) { + try { + tree.AddKey (c); + km.AddValue (*it); + } catch (Exception *e) { + std::cout << e->Message () << std::endl; + } + it++; + } else { + /* Tengo que borrar una clave entre 0 e "i" de la lista + * porque son las que ya agregue. */ + ClaveFija c(km.GetRandom (), 0); - std::cout << "Agregando " << i << std::endl; - tree.AddKey (c); + try { + tree.DelKey (c); + std::string sss = c; + std::cout << "Clave Borrada " << sss << std::endl; + } catch (Exception *e) { + std::cout << e->Message () << std::endl; + } + } } - return 0; + km.PrintInfo (); + + std::list l = km.GetList (); + it = l.begin (); + int bien = 0; + int mal = 0; + while (it != l.end ()) { + ClaveFija c(*it, 0); + 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++; + } + + std::cout << "\n\n === Resultados ===\n"; + std::cout << " Hist : " << bien << "\n"; + std::cout << " Miss : " << mal << "\n"; + std::cout << " Total : " << (bien+mal) << "\n"; + + return mal; }