summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/test/serialize.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 12:08:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 12:08:18 +0000
commit5da14042f70711ea5cf66e034699730335462f66 (patch)
tree0f6354ccac934ed87a2d555f45be4c831cf92f4a /ml/dlib/dlib/test/serialize.cpp
parentReleasing debian version 1.44.3-2. (diff)
downloadnetdata-5da14042f70711ea5cf66e034699730335462f66.tar.xz
netdata-5da14042f70711ea5cf66e034699730335462f66.zip
Merging upstream version 1.45.3+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ml/dlib/dlib/test/serialize.cpp')
-rw-r--r--ml/dlib/dlib/test/serialize.cpp1087
1 files changed, 0 insertions, 1087 deletions
diff --git a/ml/dlib/dlib/test/serialize.cpp b/ml/dlib/dlib/test/serialize.cpp
deleted file mode 100644
index f8b3384b9..000000000
--- a/ml/dlib/dlib/test/serialize.cpp
+++ /dev/null
@@ -1,1087 +0,0 @@
-// Copyright (C) 2008 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-
-
-#include <iostream>
-#include <fstream>
-#include <sstream>
-#include <dlib/compress_stream.h>
-#include <dlib/base64.h>
-#include <string>
-#include <cstdlib>
-#include <ctime>
-#include <dlib/serialize.h>
-#include <dlib/image_transforms.h>
-
-#include "tester.h"
-
-namespace dlib
-{
- static bool operator!=(const rgb_pixel& a, const rgb_pixel& b)
- {
- return !(a.red==b.red && a.green==b.green && a.blue==b.blue);
- }
- static bool operator!=(const bgr_pixel& a, const bgr_pixel& b)
- {
- return !(a.red==b.red && a.green==b.green && a.blue==b.blue);
- }
-
- static bool operator!=(const hsi_pixel& a, const hsi_pixel& b)
- {
- return !(a.h==b.h && a.s==b.s && a.i==b.i);
- }
- static bool operator!=(const rgb_alpha_pixel& a, const rgb_alpha_pixel& b)
- {
- return !(a.red==b.red && a.green==b.green && a.blue==b.blue && a.alpha==b.alpha);
- }
-
-}
-
-namespace
-{
-
-// ----------------------------------------------------------------------------------------
-
- using namespace test;
- using namespace dlib;
- using namespace std;
-
- struct test_object
- {
- signed char i1;
- signed short i2;
- signed long i3;
- unsigned char i4;
- unsigned short i5;
- unsigned long i6;
- uint64 i7;
- int64 i8;
-
- signed char i1_0;
- signed short i2_0;
- signed long i3_0;
- unsigned char i4_0;
- unsigned short i5_0;
- unsigned long i6_0;
- uint64 i7_0;
- int64 i8_0;
-
- signed char i1_n;
- signed short i2_n;
- signed long i3_n;
-
-
- float f1;
- double f2;
- long double f3;
- float f1_inf;
- double f2_inf;
- long double f3_inf;
- float f1_ninf;
- double f2_ninf;
- long double f3_ninf;
- float f1_qnan;
- double f2_qnan;
- long double f3_qnan;
- float f1_snan;
- double f2_snan;
- long double f3_snan;
-
- std::string s1;
- std::wstring s2;
-
- int array[10];
-
- bool b_true;
- bool b_false;
-
-
- void set_state_1(
- )
- {
- i1 = 1;
- i2 = 2;
- i3 = 3;
- i4 = 4;
- i5 = 5;
- i6 = 6;
- i7 = 7;
- i8 = 8;
-
- i1_0 = 0;
- i2_0 = 0;
- i3_0 = 0;
- i4_0 = 0;
- i5_0 = 0;
- i6_0 = 0;
- i7_0 = 0;
- i8_0 = 0;
-
- i1_n = -1;
- i2_n = -2;
- i3_n = -3;
-
- f1 = 123.456f;
- f2 = 543.341;
- f3 = 5234234.23;
-
- f1_inf = numeric_limits<float>::infinity();
- f2_inf = numeric_limits<double>::infinity();
- f3_inf = numeric_limits<long double>::infinity();
- f1_ninf = -numeric_limits<float>::infinity();
- f2_ninf = -numeric_limits<double>::infinity();
- f3_ninf = -numeric_limits<long double>::infinity();
- f1_qnan = numeric_limits<float>::quiet_NaN();
- f2_qnan = numeric_limits<double>::quiet_NaN();
- f3_qnan = numeric_limits<long double>::quiet_NaN();
- f1_snan = numeric_limits<float>::signaling_NaN();
- f2_snan = numeric_limits<double>::signaling_NaN();
- f3_snan = numeric_limits<long double>::signaling_NaN();
-
- s1 = "davis";
- s2 = L"yo yo yo";
-
- for (int i = 0; i < 10; ++i)
- array[i] = i;
-
- b_true = true;
- b_false = false;
- }
-
- void set_state_2(
- )
- {
- i1 = 10;
- i2 = 20;
- i3 = 30;
- i4 = 40;
- i5 = 50;
- i6 = 60;
- i7 = 70;
- i8 = 80;
-
- i1_0 = 5;
- i2_0 = 6;
- i3_0 = 7;
- i4_0 = 8;
- i5_0 = 9;
- i6_0 = 10;
- i7_0 = 11;
- i8_0 = 12;
-
- i1_n = -13;
- i2_n = -25;
- i3_n = -12;
-
- f1 = 45.3f;
- f2 = 0.001;
- f3 = 2.332;
-
- f1_inf = f1;
- f2_inf = f2;
- f3_inf = f3;
- f1_ninf = f1;
- f2_ninf = f2;
- f3_ninf = f3;
- f1_qnan = f1;
- f2_qnan = f2;
- f3_qnan = f3;
- f1_snan = f1;
- f2_snan = f2;
- f3_snan = f3;
-
- s1 = "";
- s2 = L"";
-
- for (int i = 0; i < 10; ++i)
- array[i] = 10-i;
-
- b_true = false;
- b_false = true;
- }
-
- void assert_in_state_1 (
- )
- {
- DLIB_TEST (i1 == 1);
- DLIB_TEST (i2 == 2);
- DLIB_TEST (i3 == 3);
- DLIB_TEST (i4 == 4);
- DLIB_TEST (i5 == 5);
- DLIB_TEST (i6 == 6);
- DLIB_TEST (i7 == 7);
- DLIB_TEST (i8 == 8);
-
- DLIB_TEST (i1_0 == 0);
- DLIB_TEST (i2_0 == 0);
- DLIB_TEST (i3_0 == 0);
- DLIB_TEST (i4_0 == 0);
- DLIB_TEST (i5_0 == 0);
- DLIB_TEST (i6_0 == 0);
- DLIB_TEST (i7_0 == 0);
- DLIB_TEST (i8_0 == 0);
-
- DLIB_TEST (i1_n == -1);
- DLIB_TEST (i2_n == -2);
- DLIB_TEST (i3_n == -3);
-
- DLIB_TEST (abs(f1 -123.456) < 1e-5);
- DLIB_TEST (abs(f2 - 543.341) < 1e-10);
- DLIB_TEST (abs(f3 - 5234234.23) < 1e-10);
-
- DLIB_TEST (f1_inf == numeric_limits<float>::infinity());
- DLIB_TEST (f2_inf == numeric_limits<double>::infinity());
- DLIB_TEST (f3_inf == numeric_limits<long double>::infinity());
- DLIB_TEST (f1_ninf == -numeric_limits<float>::infinity());
- DLIB_TEST (f2_ninf == -numeric_limits<double>::infinity());
- DLIB_TEST (f3_ninf == -numeric_limits<long double>::infinity());
- DLIB_TEST (!(f1_qnan <= numeric_limits<float>::infinity() && f1_qnan >= -numeric_limits<float>::infinity() ));
- DLIB_TEST (!(f2_qnan <= numeric_limits<double>::infinity() && f1_qnan >= -numeric_limits<double>::infinity() ));
- DLIB_TEST (!(f3_qnan <= numeric_limits<long double>::infinity() && f1_qnan >= -numeric_limits<long double>::infinity() ));
- DLIB_TEST (!(f1_snan <= numeric_limits<float>::infinity() && f1_qnan >= -numeric_limits<float>::infinity() ));
- DLIB_TEST (!(f2_snan <= numeric_limits<double>::infinity() && f1_qnan >= -numeric_limits<double>::infinity() ));
- DLIB_TEST (!(f3_snan <= numeric_limits<long double>::infinity() && f1_qnan >= -numeric_limits<long double>::infinity() ));
-
- DLIB_TEST (s1 == "davis");
- DLIB_TEST (s2 == L"yo yo yo");
-
- for (int i = 0; i < 10; ++i)
- {
- DLIB_TEST (array[i] == i);
- }
-
- DLIB_TEST (b_true == true);
- DLIB_TEST (b_false == false);
-
- }
-
- void assert_in_state_2 (
- )
- {
- DLIB_TEST (i1 == 10);
- DLIB_TEST (i2 == 20);
- DLIB_TEST (i3 == 30);
- DLIB_TEST (i4 == 40);
- DLIB_TEST (i5 == 50);
- DLIB_TEST (i6 == 60);
- DLIB_TEST (i7 == 70);
- DLIB_TEST (i8 == 80);
-
- DLIB_TEST (i1_0 == 5);
- DLIB_TEST (i2_0 == 6);
- DLIB_TEST (i3_0 == 7);
- DLIB_TEST (i4_0 == 8);
- DLIB_TEST (i5_0 == 9);
- DLIB_TEST (i6_0 == 10);
- DLIB_TEST (i7_0 == 11);
- DLIB_TEST (i8_0 == 12);
-
- DLIB_TEST (i1_n == -13);
- DLIB_TEST (i2_n == -25);
- DLIB_TEST (i3_n == -12);
-
- DLIB_TEST (abs(f1 - 45.3) < 1e-5);
- DLIB_TEST (abs(f2 - 0.001) < 1e-10);
- DLIB_TEST (abs(f3 - 2.332) < 1e-10);
- DLIB_TEST (abs(f1_inf - 45.3) < 1e-5);
- DLIB_TEST (abs(f2_inf - 0.001) < 1e-10);
- DLIB_TEST (abs(f3_inf - 2.332) < 1e-10);
- DLIB_TEST (abs(f1_ninf - 45.3) < 1e-5);
- DLIB_TEST (abs(f2_ninf - 0.001) < 1e-10);
- DLIB_TEST (abs(f3_ninf - 2.332) < 1e-10);
- DLIB_TEST (abs(f1_qnan - 45.3) < 1e-5);
- DLIB_TEST (abs(f2_qnan - 0.001) < 1e-10);
- DLIB_TEST (abs(f3_qnan - 2.332) < 1e-10);
- DLIB_TEST (abs(f1_snan - 45.3) < 1e-5);
- DLIB_TEST (abs(f2_snan - 0.001) < 1e-10);
- DLIB_TEST (abs(f3_snan - 2.332) < 1e-10);
-
- DLIB_TEST (s1 == "");
- DLIB_TEST (s2 == L"");
-
- for (int i = 0; i < 10; ++i)
- {
- DLIB_TEST (array[i] == 10-i);
- }
-
- DLIB_TEST (b_true == false);
- DLIB_TEST (b_false == true);
-
- }
-
- };
-
-// ----------------------------------------------------------------------------------------
-
- void serialize (
- const test_object& item,
- std::ostream& out
- )
- {
- dlib::serialize(item.i1,out);
- dlib::serialize(item.i2,out);
- dlib::serialize(item.i3,out);
- dlib::serialize(item.i4,out);
- dlib::serialize(item.i5,out);
- dlib::serialize(item.i6,out);
- dlib::serialize(item.i7,out);
- dlib::serialize(item.i8,out);
-
- dlib::serialize(item.i1_0,out);
- dlib::serialize(item.i2_0,out);
- dlib::serialize(item.i3_0,out);
- dlib::serialize(item.i4_0,out);
- dlib::serialize(item.i5_0,out);
- dlib::serialize(item.i6_0,out);
- dlib::serialize(item.i7_0,out);
- dlib::serialize(item.i8_0,out);
-
- dlib::serialize(item.i1_n,out);
- dlib::serialize(item.i2_n,out);
- dlib::serialize(item.i3_n,out);
-
-
- dlib::serialize(item.f1,out);
- dlib::serialize(item.f2,out);
- dlib::serialize(item.f3,out);
-
- dlib::serialize(item.f1_inf,out);
- dlib::serialize(item.f2_inf,out);
- dlib::serialize(item.f3_inf,out);
- dlib::serialize(item.f1_ninf,out);
- dlib::serialize(item.f2_ninf,out);
- dlib::serialize(item.f3_ninf,out);
- dlib::serialize(item.f1_qnan,out);
- dlib::serialize(item.f2_qnan,out);
- dlib::serialize(item.f3_qnan,out);
- dlib::serialize(item.f1_snan,out);
- dlib::serialize(item.f2_snan,out);
- dlib::serialize(item.f3_snan,out);
-
- dlib::serialize(item.s1,out);
- dlib::serialize(item.s2,out);
-
- dlib::serialize(item.array,out);
-
- dlib::serialize(item.b_true,out);
- dlib::serialize(item.b_false,out);
- }
-
-// ----------------------------------------------------------------------------------------
-
- void deserialize (
- test_object& item,
- std::istream& in
- )
- {
- dlib::deserialize(item.i1,in);
- dlib::deserialize(item.i2,in);
- dlib::deserialize(item.i3,in);
- dlib::deserialize(item.i4,in);
- dlib::deserialize(item.i5,in);
- dlib::deserialize(item.i6,in);
- dlib::deserialize(item.i7,in);
- dlib::deserialize(item.i8,in);
-
- dlib::deserialize(item.i1_0,in);
- dlib::deserialize(item.i2_0,in);
- dlib::deserialize(item.i3_0,in);
- dlib::deserialize(item.i4_0,in);
- dlib::deserialize(item.i5_0,in);
- dlib::deserialize(item.i6_0,in);
- dlib::deserialize(item.i7_0,in);
- dlib::deserialize(item.i8_0,in);
-
- dlib::deserialize(item.i1_n,in);
- dlib::deserialize(item.i2_n,in);
- dlib::deserialize(item.i3_n,in);
-
-
- dlib::deserialize(item.f1,in);
- dlib::deserialize(item.f2,in);
- dlib::deserialize(item.f3,in);
-
- dlib::deserialize(item.f1_inf,in);
- dlib::deserialize(item.f2_inf,in);
- dlib::deserialize(item.f3_inf,in);
- dlib::deserialize(item.f1_ninf,in);
- dlib::deserialize(item.f2_ninf,in);
- dlib::deserialize(item.f3_ninf,in);
- dlib::deserialize(item.f1_qnan,in);
- dlib::deserialize(item.f2_qnan,in);
- dlib::deserialize(item.f3_qnan,in);
- dlib::deserialize(item.f1_snan,in);
- dlib::deserialize(item.f2_snan,in);
- dlib::deserialize(item.f3_snan,in);
-
- dlib::deserialize(item.s1,in);
- dlib::deserialize(item.s2,in);
-
- dlib::deserialize(item.array,in);
-
- dlib::deserialize(item.b_true,in);
- dlib::deserialize(item.b_false,in);
- }
-
-// ----------------------------------------------------------------------------------------
-
- // This function returns the contents of the file 'stuff.bin' but using the old
- // floating point serialization format.
- const std::string get_decoded_string()
- {
- dlib::base64::kernel_1a base64_coder;
- dlib::compress_stream::kernel_1ea compressor;
- std::ostringstream sout;
- std::istringstream sin;
-
-
- // The base64 encoded data from the file 'stuff.bin' we want to decode and return.
- sout << "AVaifX9zEbXa9aocsrcRuvnNrR3WLuuU5eLWiy0UeXmnKXGLKZz8V44gzT4CM6wnCmAHFQug8G3C";
- sout << "4cuLdNgp2ApkeLcvwFNJRENE0ShrRaxEBFEA8nah7vm8B2VmgImNblCejuP5IcDt60EaCKlqiit8";
- sout << "+JGrzYxqBm3xFS4P+qlOROdbxc7pXBmUdh0rqNSEvn0FBPdoqY/5SpHgA2yAcH8XFrM1cdu0xS3P";
- sout << "8PBcmLMJ7bFdzplwhrjuxtm4NfEOi6Rl9sU44AXycYgJd0+uH+dyoI9X3co5b3YWJtjvdVeztNAr";
- sout << "BfSPfR6oAVNfiMBG7QA=";
-
-
- // Put the data into the istream sin
- sin.str(sout.str());
- sout.str("");
-
- // Decode the base64 text into its compressed binary form
- base64_coder.decode(sin,sout);
- sin.clear();
- sin.str(sout.str());
- sout.str("");
-
- // Decompress the data into its original form
- compressor.decompress(sin,sout);
-
- // Return the decoded and decompressed data
- return sout.str();
- }
-
-
- // This function returns the contents of the file 'stuff.bin' but using the new
- // floating point serialization format.
- const std::string get_decoded_string2()
- {
- dlib::base64 base64_coder;
- dlib::compress_stream::kernel_1ea compressor;
- std::ostringstream sout;
- std::istringstream sin;
-
- // The base64 encoded data from the file 'stuff.bin' we want to decode and return.
- sout << "AVaifX9zEbXa9aocsrcRuvnNqzZLptZ5mRd46xScCIfX6sq/46hG9JwIInElG50EtJKJY/+jAWit";
- sout << "TpDBWrxBz124JRLsBz62h0D3Tqgnd8zygRx7t33Ybw40o07MrhzNEHgYavUukaPje5by78JIWHgk";
- sout << "l7nb/TK+9ndVLrAThJ4v+GiPT3kh9H1tAAAAAQhbLa06pQjhrnjTXcRox1ZBEAV9/q1zAA==";
-
- // Put the data into the istream sin
- sin.str(sout.str());
- sout.str("");
-
- // Decode the base64 text into its compressed binary form
- base64_coder.decode(sin,sout);
- sin.clear();
- sin.str(sout.str());
- sout.str("");
-
- // Decompress the data into its original form
- compressor.decompress(sin,sout);
-
- // Return the decoded and decompressed data
- return sout.str();
- }
-
-// ----------------------------------------------------------------------------------------
-
- // Declare the logger we will use in this test. The name of the tester
- // should start with "test."
- logger dlog("test.serialize");
-
- void serialize_test (
- )
- /*!
- ensures
- - runs tests on the serialization code for compliance with the specs
- !*/
- {
-
-
- print_spinner();
-
- ostringstream sout;
- test_object obj;
-
- obj.set_state_1();
- obj.assert_in_state_1();
- serialize(obj, sout);
- obj.assert_in_state_1();
-
- obj.set_state_2();
- obj.assert_in_state_2();
- serialize(obj, sout);
- obj.assert_in_state_2();
-
-
- istringstream sin(sout.str());
-
- deserialize(obj,sin);
- obj.assert_in_state_1();
- deserialize(obj,sin);
- obj.assert_in_state_2();
-
-
- // now do the same thing as above but deserialize from some stored binary
- // data to make sure the serialized values are portable between different
- // machines
-
- sin.clear();
- sin.str(get_decoded_string());
- deserialize(obj,sin);
- obj.assert_in_state_1();
- deserialize(obj,sin);
- obj.assert_in_state_2();
-
-
- sin.clear();
- sin.str(get_decoded_string2());
- deserialize(obj,sin);
- obj.assert_in_state_1();
- deserialize(obj,sin);
- obj.assert_in_state_2();
-
-
- /*
- // This is the code that produced the encoded data stored in the get_decoded_string() function
- ofstream fout("stuff.bin",ios::binary);
- obj.set_state_1();
- obj.assert_in_state_1();
- serialize(obj, fout);
- obj.assert_in_state_1();
-
- obj.set_state_2();
- obj.assert_in_state_2();
- serialize(obj, fout);
- obj.assert_in_state_2();
- */
-
-
- test_object obj2;
- obj.set_state_1();
- obj2.set_state_2();
- dlib::serialize("serialization_test.dat") << obj << obj2;
- obj.assert_in_state_1();
- obj2.assert_in_state_2();
- obj.set_state_2();
- obj2.set_state_1();
- obj.assert_in_state_2();
- obj2.assert_in_state_1();
- dlib::deserialize("serialization_test.dat") >> obj >> obj2;
- obj.assert_in_state_1();
- obj2.assert_in_state_2();
- }
-
-
- template <typename T>
- void test_vector (
- )
- {
- std::vector<T> a, b;
-
- for (int i = -10; i < 30; ++i)
- {
- a.push_back(i);
- }
-
- ostringstream sout;
- dlib::serialize(a, sout);
- istringstream sin(sout.str());
-
- dlib::deserialize(b, sin);
-
-
- DLIB_TEST(a.size() == b.size());
- DLIB_TEST(a.size() == 40);
- for (unsigned long i = 0; i < a.size(); ++i)
- {
- DLIB_TEST(a[i] == b[i]);
- }
-
- std::vector<T> c;
- sout.str("");
- dlib::serialize(c, sout);
- sin.str(sout.str());
- dlib::deserialize(a, sin);
- DLIB_TEST(a.size() == 0);
- DLIB_TEST(c.size() == 0);
- }
-
- void test_std_array (
- )
- {
- std::array<int,5> a, b;
-
- a = {1, 2, 3, 4, 5};
-
- ostringstream sout;
- dlib::serialize(a, sout);
- istringstream sin(sout.str());
-
- dlib::deserialize(b, sin);
-
-
- DLIB_TEST(a.size() == b.size());
- DLIB_TEST(a.size() == 5);
- for (unsigned long i = 0; i < a.size(); ++i)
- {
- DLIB_TEST(a[i] == b[i]);
- }
-
- std::array<int,0> aa, bb;
- sout.str("");
- dlib::serialize(aa, sout);
- sin.str(sout.str());
- dlib::deserialize(bb, sin);
- DLIB_TEST(bb.size() == 0);
- }
-
- void test_vector_bool (
- )
- {
- std::vector<bool> a, b;
-
- a.push_back(true);
- a.push_back(true);
- a.push_back(false);
- a.push_back(true);
- a.push_back(false);
- a.push_back(true);
-
- ostringstream sout;
- dlib::serialize(a, sout);
- istringstream sin(sout.str());
-
- dlib::deserialize(b, sin);
-
-
- DLIB_TEST(a.size() == b.size());
- DLIB_TEST(a.size() == 6);
- for (unsigned long i = 0; i < a.size(); ++i)
- {
- DLIB_TEST(a[i] == b[i]);
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- // This function returns the contents of the file 'matarray.dat'
- const std::string get_decoded_string_matarray_old()
- {
- dlib::base64 base64_coder;
- dlib::compress_stream::kernel_1ea compressor;
- std::ostringstream sout;
- std::istringstream sin;
-
- // The base64 encoded data from the file 'matarray.dat' we want to decode and return.
- sout << "AW852sEbTIeV+m/wLUcKJKPW+6IclviUWZcFh1daDZ0blDjPNTgPx0Lv56sIEwlG4I6C5OJzJBkZ";
- sout << "PvczLjS7IEKh6eg7amNOyEexsQSgojL1oMe2gDEfkyInUGPJV90sNS0cvp/hIB134V8JCTYUP6vH";
- sout << "9qpegLSIIQG+/NjLWyK2472vC88BJfKgkL3CPLMjQwB3tB928FNLbESDLIvpnb6q9ve68iuoyZZt";
- sout << "z3TTJxHW3MIdgzuhNomvPxfo/Q+7lC/Orj0FewUX90al6DckwzOtLVRidh/ZKpsQsxzJYQGkjdX5";
- sout << "mDzzXKqQb3Y3DnzEmwtRD9CUON3iRv1r26gHWLYorrYA";
-
-
- // Put the data into the istream sin
- sin.str(sout.str());
- sout.str("");
-
- // Decode the base64 text into its compressed binary form
- base64_coder.decode(sin,sout);
- sin.clear();
- sin.str(sout.str());
- sout.str("");
-
- // Decompress the data into its original form
- compressor.decompress(sin,sout);
-
- // Return the decoded and decompressed data
- return sout.str();
- }
-
- // This function returns the contents of the file 'matarray.dat'
- const std::string get_decoded_string_matarray()
- {
- dlib::base64 base64_coder;
- dlib::compress_stream::kernel_1ea compressor;
- std::ostringstream sout;
- std::istringstream sin;
-
- // The base64 encoded data from the file 'matarray.dat' we want to decode and return.
- sout << "gO6XH2WGbm8Xaw3a5FJbh3V823W6P2Qk/vHaAAAAARccIppHWdmViaKby7JA5PQvXjYMWUYvXRHv";
- sout << "xPdURZl1un3CT/rjT11Yry0y3+1W7GBmfBJ0gVFKGdiGuqoNAMtmzL/ll3YfEQ7ED7aB33aDTktw";
- sout << "AWVkHT+gqTbKwjP+8YvB3s3ziK640ITOAWazAghKDVl7AHGn+fjq29paBZMczuJofl8FinZUhwa9";
- sout << "Ol5gdAEQa6VZDmJUeo2soTJcEDpkW9LkRmXvjQkyEHfEHQNFDfQq4p2U+dHz4lOKlcj3VzQIeG/s";
- sout << "oxa9KhJND4aQ5xeNUUHUzFBU3XhQHlyDIn/RNdX/ZwA=";
-
-
- // Put the data into the istream sin
- sin.str(sout.str());
- sout.str("");
-
- // Decode the base64 text into its compressed binary form
- base64_coder.decode(sin,sout);
- sin.clear();
- sin.str(sout.str());
- sout.str("");
-
- // Decompress the data into its original form
- compressor.decompress(sin,sout);
-
- // Return the decoded and decompressed data
- return sout.str();
- }
-
- void setup_mats_and_arrays (
- array2d<int>& a,
- matrix<int>& m,
- array2d<unsigned char>& img1,
- array2d<rgb_pixel>& img2,
- array2d<bgr_pixel>& img3,
- array2d<rgb_alpha_pixel>& img4,
- array2d<hsi_pixel>& img5
- )
- {
- a.set_size(3,5);
- int cnt = 0;
- for (long r = 0; r < a.nr(); ++r)
- {
- for (long c = 0; c < a.nc(); ++c)
- {
- a[r][c] = cnt++;
- }
- }
- m = mat(a);
-
- img1.set_size(3,5);
- img2.set_size(3,5);
- img3.set_size(3,5);
- img4.set_size(3,5);
- img5.set_size(3,5);
-
- assign_all_pixels(img1, 0);
- assign_all_pixels(img2, 0);
- assign_all_pixels(img3, 0);
- assign_all_pixels(img4, 0);
- assign_all_pixels(img5, 0);
-
- unsigned char pcnt = 0;
- for (long r = 0; r < img1.nr(); ++r)
- {
- for (long c = 0; c < img1.nc(); ++c)
- {
- rgb_alpha_pixel temp;
- temp.red = pcnt++;
- temp.green = pcnt++;
- temp.blue = pcnt++;
- temp.alpha = 150+pcnt++;
- assign_pixel(img1[r][c], temp);
- assign_pixel(img2[r][c], temp);
- assign_pixel(img3[r][c], temp);
- assign_pixel(img4[r][c], temp);
- }
- }
-
- for (long r = 0; r < img5.nr(); ++r)
- {
- for (long c = 0; c < img5.nc(); ++c)
- {
- img5[r][c].h = pcnt++;
- img5[r][c].s = pcnt++;
- img5[r][c].i = pcnt++;
- }
- }
- }
-
-
- void test_deserialize(
- std::istream& fin
- )
- {
- array2d<int> a;
- matrix<int> m;
- array2d<unsigned char> img1;
- array2d<rgb_pixel> img2;
- array2d<bgr_pixel> img3;
- array2d<rgb_alpha_pixel> img4;
- array2d<hsi_pixel> img5;
- setup_mats_and_arrays(a,m,img1,img2,img3,img4,img5);
-
-
- array2d<unsigned char> img1_;
- array2d<rgb_pixel> img2_;
- array2d<bgr_pixel> img3_;
- array2d<rgb_alpha_pixel> img4_;
- array2d<hsi_pixel> img5_;
-
- matrix<int> m_;
- array2d<int> a_;
-
- deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));
- deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));
- deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));
- deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));
-
- deserialize(img1_, fin); DLIB_TEST(mat(img1_) == mat(img1));
- deserialize(img2_, fin); DLIB_TEST(mat(img2_) == mat(img2));
- deserialize(img3_, fin); DLIB_TEST(mat(img3_) == mat(img3));
- deserialize(img4_, fin); DLIB_TEST(mat(img4_) == mat(img4));
- deserialize(img5_, fin); DLIB_TEST(mat(img5_) == mat(img5));
- }
-
- void test_deserialize_all_array2d(
- std::istream& fin
- )
- {
- array2d<int> a;
- matrix<int> m;
- array2d<unsigned char> img1;
- array2d<rgb_pixel> img2;
- array2d<bgr_pixel> img3;
- array2d<rgb_alpha_pixel> img4;
- array2d<hsi_pixel> img5;
- setup_mats_and_arrays(a,m,img1,img2,img3,img4,img5);
-
-
- array2d<unsigned char> img1_;
- array2d<rgb_pixel> img2_;
- array2d<bgr_pixel> img3_;
- array2d<rgb_alpha_pixel> img4_;
- array2d<hsi_pixel> img5_;
-
- array2d<int> m_;
- array2d<int> a_;
-
- deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));
- deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));
- deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));
- deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));
-
- deserialize(img1_, fin); DLIB_TEST(mat(img1_) == mat(img1));
- deserialize(img2_, fin); DLIB_TEST(mat(img2_) == mat(img2));
- deserialize(img3_, fin); DLIB_TEST(mat(img3_) == mat(img3));
- deserialize(img4_, fin); DLIB_TEST(mat(img4_) == mat(img4));
- deserialize(img5_, fin); DLIB_TEST(mat(img5_) == mat(img5));
- }
-
- void test_deserialize_all_matrix(
- std::istream& fin
- )
- {
- array2d<int> a;
- matrix<int> m;
- array2d<unsigned char> img1;
- array2d<rgb_pixel> img2;
- array2d<bgr_pixel> img3;
- array2d<rgb_alpha_pixel> img4;
- array2d<hsi_pixel> img5;
- setup_mats_and_arrays(a,m,img1,img2,img3,img4,img5);
-
-
- matrix<unsigned char> img1_;
- matrix<rgb_pixel> img2_;
- matrix<bgr_pixel> img3_;
- matrix<rgb_alpha_pixel> img4_;
- matrix<hsi_pixel> img5_;
-
- matrix<int> m_;
- matrix<int> a_;
-
- deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));
- deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));
- deserialize(a_, fin); DLIB_TEST(mat(a_) == mat(a));
- deserialize(m_, fin); DLIB_TEST(mat(m_) == mat(m));
-
- deserialize(img1_, fin); DLIB_TEST(mat(img1_) == mat(img1));
- deserialize(img2_, fin); DLIB_TEST(mat(img2_) == mat(img2));
- deserialize(img3_, fin); DLIB_TEST(mat(img3_) == mat(img3));
- deserialize(img4_, fin); DLIB_TEST(mat(img4_) == mat(img4));
- deserialize(img5_, fin); DLIB_TEST(mat(img5_) == mat(img5));
- }
-
- void test_array2d_and_matrix_serialization()
- {
- ostringstream sout;
- array2d<int> a;
- matrix<int> m;
- array2d<unsigned char> img1;
- array2d<rgb_pixel> img2;
- array2d<bgr_pixel> img3;
- array2d<rgb_alpha_pixel> img4;
- array2d<hsi_pixel> img5;
- setup_mats_and_arrays(a,m,img1,img2,img3,img4,img5);
-
- serialize(a, sout);
- serialize(m, sout);
- serialize(a, sout);
- serialize(m, sout);
-
- serialize(img1, sout);
- serialize(img2, sout);
- serialize(img3, sout);
- serialize(img4, sout);
- serialize(img5, sout);
-
- // --------------------
-
- {
- istringstream sin(sout.str());
- test_deserialize(sin);
- }
- {
- istringstream sin(sout.str());
- test_deserialize_all_array2d(sin);
- }
- {
- istringstream sin(sout.str());
- test_deserialize_all_matrix(sin);
- }
-
-
- {
- istringstream sin(get_decoded_string_matarray());
- test_deserialize(sin);
- }
- {
- istringstream sin(get_decoded_string_matarray());
- test_deserialize_all_array2d(sin);
- }
- {
- istringstream sin(get_decoded_string_matarray());
- test_deserialize_all_matrix(sin);
- }
-
-
- {
- // Make sure we can still deserialize the serialization
- // format for array2d and matrix objects used by older versions
- // of dlib.
- istringstream sin(get_decoded_string_matarray_old());
- test_deserialize(sin);
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- void test_strings()
- {
- string str1 = "stuff";
- char buf[6];
- buf[0] = 0;
- buf[1] = 1;
- buf[2] = 2;
- buf[3] = 0;
- buf[4] = 3;
- buf[5] = 3;
-
- dlib::serialize("ser_test_string.dat") << str1 << buf << "morestuff" << "";
-
- string str2, str3, str4;
- char buf2[6];
- memset(buf2,0,sizeof(buf2));
- dlib::deserialize("ser_test_string.dat") >> str2 >> buf2 >> str3 >> str4;
- DLIB_TEST(str2 == "stuff");
- DLIB_TEST(str3 == "morestuff");
- DLIB_TEST(str4 == "");
- DLIB_TEST(buf2[0] == 0);
- DLIB_TEST(buf2[1] == 1);
- DLIB_TEST(buf2[2] == 2);
- DLIB_TEST(buf2[3] == 0);
- DLIB_TEST(buf2[4] == 3);
- DLIB_TEST(buf2[5] == 3);
-
-
- ofstream fout("ser_test_string.dat", ios::binary);
- dlib::serialize(str1, fout);
- dlib::serialize(buf, fout);
- dlib::serialize("morestuff", fout);
- fout.close();
- ifstream fin("ser_test_string.dat", ios::binary);
- memset(buf2,0,sizeof(buf2));
- str2.clear();
- str3.clear();
- dlib::deserialize(str2, fin);
- dlib::deserialize(buf2, fin);
- dlib::deserialize(str3, fin);
-
- DLIB_TEST(str2 == "stuff");
- DLIB_TEST(str3 == "morestuff");
- DLIB_TEST(buf2[0] == 0);
- DLIB_TEST(buf2[1] == 1);
- DLIB_TEST(buf2[2] == 2);
- DLIB_TEST(buf2[3] == 0);
- DLIB_TEST(buf2[4] == 3);
- DLIB_TEST(buf2[5] == 3);
-
-
-
- // make sure ramdump() overloads compile and work.
- {
- matrix<double,2,2> a = {1,2,3,4};
- const matrix<double,2,2> b = {3,2,3,4};
- dlib::serialize("ramdump_mat.dat") << ramdump(a) << ramdump(b);
- matrix<double,2,2> A, B;
- dlib::deserialize("ramdump_mat.dat") >> ramdump(A) >> ramdump(B);
-
- DLIB_TEST(A == a);
- DLIB_TEST(B == b);
- A = 0;
- B = 0;
- DLIB_TEST(A != a);
- DLIB_TEST(B != b);
-
- ostringstream sout;
- dlib::serialize(ramdump(a), sout);
- dlib::serialize(ramdump(b), sout);
- istringstream sin(sout.str());
- dlib::deserialize(ramdump(A), sin);
- dlib::deserialize(ramdump(B), sin);
-
- DLIB_TEST(A == a);
- DLIB_TEST(B == b);
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- class serialize_tester : public tester
- {
- /*!
- WHAT THIS OBJECT REPRESENTS
- This object represents a test for the serialization . When it is constructed
- it adds itself into the testing framework. The command line switch is
- specified as test_serialize by passing that string to the tester constructor.
- !*/
- public:
- serialize_tester (
- ) :
- tester ("test_serialize",
- "Runs tests on the serialization code.")
- {}
-
- void perform_test (
- )
- {
- serialize_test();
- test_vector<char>();
- test_vector<unsigned char>();
- test_vector<int>();
- test_vector_bool();
- test_array2d_and_matrix_serialization();
- test_strings();
- test_std_array();
- }
- } a;
-
-
-}
-
-