/* 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 #include #include #include #include #include #include #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(static_cast(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; }