Test zlib wrapper's handling of large data
authorPerttu Ahola <celeron55@gmail.com>
Sun, 22 Jul 2012 17:27:55 +0000 (20:27 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Sun, 22 Jul 2012 17:27:55 +0000 (20:27 +0300)
src/test.cpp

index 6a0e991e201c334d08dca90fba39ffdd6c917b8c..ee77d0dc83a2bbf44907878179f99855ac91b5f7 100644 (file)
@@ -40,6 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "inventory.h"
 #include "util/numeric.h"
 #include "util/serialize.h"
+#include "noise.h" // PseudoRandom used for random data for compression
 
 /*
        Asserts that the exception occurs
@@ -415,6 +416,39 @@ struct TestCompress: public TestBase
                }
 
                }
+
+               // Test zlib wrapper with large amounts of data (larger than it's
+               // internal buffers)
+               {
+                       infostream<<"Test: Testing zlib wrappers with a large amount "
+                                       <<"of pseudorandom data"<<std::endl;
+                       u32 size = 50000;
+                       infostream<<"Test: Input size of large compressZlib is "
+                                       <<size<<std::endl;
+                       std::string data_in;
+                       data_in.resize(size);
+                       PseudoRandom pseudorandom(9420);
+                       for(u32 i=0; i<size; i++)
+                               data_in[i] = pseudorandom.range(0,255);
+                       std::ostringstream os_compressed(std::ios::binary);
+                       compressZlib(data_in, os_compressed);
+                       infostream<<"Test: Output size of large compressZlib is "
+                                       <<os_compressed.str().size()<<std::endl;
+                       std::istringstream is_compressed(os_compressed.str(), std::ios::binary);
+                       std::ostringstream os_decompressed(std::ios::binary);
+                       decompressZlib(is_compressed, os_decompressed);
+                       infostream<<"Test: Output size of large decompressZlib is "
+                                       <<os_decompressed.str().size()<<std::endl;
+                       std::string str_decompressed = os_decompressed.str();
+                       UTEST(str_decompressed.size() == data_in.size(), "Output size not"
+                                       " equal (output: %i, input: %i)",
+                                       str_decompressed.size(), data_in.size());
+                       for(u32 i=0; i<size && i<str_decompressed.size(); i++){
+                               UTEST(str_decompressed[i] == data_in[i],
+                                               "index out[%i]=%i differs from in[%i]=%i",
+                                               i, str_decompressed[i], i, data_in[i]);
+                       }
+               }
        }
 };