Hacer todo en papel a manito: sin duda es lo mejor para un examen, pero cuesta mucho saber si lo que uno hizo funciona correctamente.
Implementar: bárbaro, asi sabemos si funciona o no, pero es inaplicable para un examen, ya que no se pueden ver los estados intermedios con representación humana. Uh, ¿que dije?
Supongamos AABBAA en LzHuff, que para el examen es "A(0)B(0)E(0)eof", que luego se traduce a asc("A") + 00b + asc("B") + 00b + asc("E") + 00b + 257d, todo esto pasado por dos árboles de huffman, claro. Termina en algo tipo 3FADD023.
La implementación en ningún momento me muestra algo asi. Además tengo que resolver un montón de problemas que no me sirven para el examen, ya que para este sólo necesito un "programa mental", mucho menos riguroso que el de la computadora.
La solución se halla en el medio y consiste en implementar un programa que haga lo que necesitamos para el examen, o sea que tome AABBAA y emita "A(0)B(0)E(0)eof" , en lugar de 3FADD023. "A(0)B(0)E(0)eof" pasado por los árboles de Huffman es otro programa mental, que lo necesitamos de todos modos para el punto de compresión Huffman. Luego, la conversión a la representación hexadecimal es otro programa mental, que es trivial.
Ahora bien, para que esto no sea tan offtopic, podemos implementar ese programa con TDD. Comenzamos con:
void CompressorTest::testCompress_A(){ string reference="A'0eof"; MockedFileReader* in = new MockedFileReader("A"); MockedFileWriter* out = new MockedFileWriter(); Compressor *c = new Compressor(6,2,5); c->compress(in, out); CPPUNIT_ASSERT_EQUAL(reference, out->get()); delete in; delete out; delete c; }
Luego con
void CompressorTest::testCompress_ABE(){ string reference="A'0B'0E'0eof"; ... CPPUNIT_ASSERT_EQUAL(reference, out->get()); ... }
y asi... la buena práctica de TDD, elemento fundamental de la programación segura, es tambien útil para el estudio (malabares para no abrir otro blog con el tema de esta entrada)
No hay comentarios:
Publicar un comentario