lean2/src/tests/util/splay_map.cpp
Leonardo de Moura 54e63fd4de feat(splay_tree): add fold and for_each templates for splay_tree and splay_map
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2013-09-26 18:18:20 -07:00

50 lines
1.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 "util/test.h"
#include "util/splay_map.h"
#include "util/name.h"
using namespace lean;
struct int_cmp { int operator()(int i1, int i2) const { return i1 < i2 ? -1 : (i1 > i2 ? 1 : 0); } };
typedef splay_map<int, name, int_cmp> int2name;
static void tst0() {
int2name m1;
m1[10] = name("t1");
m1[20] = name("t2");
int2name m2(m1);
m2[10] = name("t3");
lean_assert(m1[10] == name("t1"));
lean_assert(m1[20] == name("t2"));
lean_assert(m2[10] == name("t3"));
lean_assert(m2[20] == name("t2"));
lean_assert(m2.size() == 2);
lean_assert(m2[100] == name());
lean_assert(m2.size() == 3);
lean_assert(m2[100] == name());
lean_assert(m2.size() == 3);
}
static void tst1() {
int2name m;
m[10] = name("t1");
m[20] = name("t2");
lean_assert(fold(m, [](int k, name const &, int a) { return k + a; }, 0) == 30);
std::ostringstream out;
for_each(m, [&](int, name const & v) { out << v << " "; });
std::cout << out.str() << "\n";
lean_assert(out.str() == "t1 t2 ");
}
int main() {
tst0();
tst1();
return has_violations() ? 1 : 0;
}