lean4-htt/src/tests/util/serializer.cpp

99 lines
2.3 KiB
C++

/*
Copyright (c) 2013 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
*/
#include <iostream>
#include <sstream>
#include <string>
#include <cstring>
#include <vector>
#include <functional>
#include <cmath>
#include "runtime/debug.h"
#include "util/test.h"
#include "util/list.h"
#include "util/name.h"
#include "util/init_module.h"
using namespace lean;
void display(std::ostringstream const & out) {
std::cout << "OUT: ";
auto str = out.str();
for (auto c : str) {
std::cout << static_cast<int>(static_cast<unsigned char>(c)) << " ";
}
std::cout << "\n";
}
static void tst1() {
std::ostringstream out;
serializer s(out);
s.write_int(10); s.write_int(-20); s.write_bool(false); s.write_string("hello"); s.write_int(30);
display(out);
std::istringstream in(out.str());
deserializer d(in);
lean_assert(d.read_int() == 10);
lean_assert(d.read_int() == -20);
lean_assert(!d.read_bool());
lean_assert(d.read_string() == "hello");
lean_assert(d.read_int() == 30);
}
static void tst2() {
}
static void tst3() {
std::ostringstream out;
serializer s(out);
name n1{"foo", "bla"};
name n2(n1, 10);
name n3(n2, "tst");
name n4(n1, "hello");
name n5("simple");
s << n1 << n2 << n3 << n4 << n2 << n5;
display(out);
std::istringstream in(out.str());
deserializer d(in);
name m1, m2, m3, m4, m5, m6;
d >> m1 >> m2 >> m3 >> m4 >> m5 >> m6;
lean_assert(n1 == m1);
lean_assert(n2 == m2);
lean_assert(n3 == m3);
lean_assert(n4 == m4);
lean_assert(n2 == m5);
lean_assert(n5 == m6);
}
static void tst4() {
std::ostringstream out;
serializer s(out);
double d1, d2, d3, d4, d5;
d1 = 0.1;
d2 = -0.3;
d3 = 0.0;
d4 = 12317.123;
d5 = std::atan(1.0)*4;
s << d1 << d2 << d3 << d4 << d5;
std::istringstream in(out.str());
deserializer d(in);
double o1, o2, o3, o4, o5;
d >> o1 >> o2 >> o3 >> o4 >> o5;
lean_assert_eq(d1, o1);
lean_assert_eq(d2, o2);
lean_assert_eq(d3, o3);
lean_assert_eq(d4, o4);
lean_assert_eq(d5, o5);
}
int main() {
save_stack_info();
initialize_util_module();
tst1();
tst2();
tst3();
tst4();
finalize_util_module();
return has_violations() ? 1 : 0;
}