test(tests/bench): add C++ versions of rbmap benchmarks
This commit is contained in:
parent
8e98e4375f
commit
2c4cec184a
4 changed files with 154 additions and 0 deletions
41
tests/bench/rbmap_checkpoint_cpp_lean3.cpp
Normal file
41
tests/bench/rbmap_checkpoint_cpp_lean3.cpp
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#include <iostream>
|
||||
#include "util/rb_map.h"
|
||||
#include "util/nat.h"
|
||||
#include "util/list.h"
|
||||
using namespace lean;
|
||||
|
||||
struct nat_lt_fn {
|
||||
bool operator()(nat const & n1, nat const & n2) const { return n1 < n2; }
|
||||
};
|
||||
|
||||
typedef rb_map<nat, bool, nat_lt_fn> map;
|
||||
|
||||
list<map> mk_map(unsigned n, unsigned freq) {
|
||||
list<map> stack;
|
||||
map m;
|
||||
while (n > 0) {
|
||||
--n;
|
||||
m.insert(nat(n), n%10 == 0);
|
||||
if (n % freq == 0) stack = cons(m, stack);
|
||||
}
|
||||
stack = cons(m, stack);
|
||||
return stack;
|
||||
}
|
||||
|
||||
nat fold(map const & m) {
|
||||
nat r(0);
|
||||
m.for_each([&](nat const & k, bool v) { if (v) r = r + nat(1); });
|
||||
return r;
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv) {
|
||||
if (argc != 3) {
|
||||
std::cout << "invalid number of arguments\n";
|
||||
return 1;
|
||||
}
|
||||
unsigned n = atoi(argv[1]);
|
||||
unsigned freq = atoi(argv[2]);
|
||||
list<map> m = mk_map(n, freq);
|
||||
std::cout << fold(head(m)) << "\n";
|
||||
return 0;
|
||||
}
|
||||
41
tests/bench/rbmap_checkpoint_cpp_std.cpp
Normal file
41
tests/bench/rbmap_checkpoint_cpp_std.cpp
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#include <iostream>
|
||||
#include <map>
|
||||
#include "util/nat.h"
|
||||
#include "util/list.h"
|
||||
using namespace lean;
|
||||
|
||||
struct nat_lt_fn {
|
||||
bool operator()(nat const & n1, nat const & n2) const { return n1 < n2; }
|
||||
};
|
||||
|
||||
typedef std::map<nat, bool, nat_lt_fn> map;
|
||||
|
||||
list<map> mk_map(unsigned n, unsigned freq) {
|
||||
list<map> stack;
|
||||
map m;
|
||||
while (n > 0) {
|
||||
--n;
|
||||
m.insert(std::make_pair(nat(n), n%10 == 0));
|
||||
if (n % freq == 0) stack = cons(m, stack);
|
||||
}
|
||||
stack = cons(m, stack);
|
||||
return stack;
|
||||
}
|
||||
|
||||
nat fold(map const & m) {
|
||||
nat r(0);
|
||||
for_each(m.begin(), m.end(), [&](std::pair<nat, bool> const & p) { if (p.second) r = r + nat(1); });
|
||||
return r;
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv) {
|
||||
if (argc != 3) {
|
||||
std::cout << "invalid number of arguments\n";
|
||||
return 1;
|
||||
}
|
||||
unsigned n = atoi(argv[1]);
|
||||
unsigned freq = atoi(argv[2]);
|
||||
list<map> m = mk_map(n, freq);
|
||||
std::cout << fold(head(m)) << "\n";
|
||||
return 0;
|
||||
}
|
||||
36
tests/bench/rbmap_cpp_lean3.cpp
Normal file
36
tests/bench/rbmap_cpp_lean3.cpp
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#include <iostream>
|
||||
#include "util/rb_map.h"
|
||||
#include "util/nat.h"
|
||||
using namespace lean;
|
||||
|
||||
struct nat_lt_fn {
|
||||
bool operator()(nat const & n1, nat const & n2) const { return n1 < n2; }
|
||||
};
|
||||
|
||||
typedef rb_map<nat, bool, nat_lt_fn> map;
|
||||
|
||||
map mk_map(unsigned n) {
|
||||
map m;
|
||||
while (n > 0) {
|
||||
--n;
|
||||
m.insert(nat(n), n%10 == 0);
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
nat fold(map const & m) {
|
||||
nat r(0);
|
||||
m.for_each([&](nat const & k, bool v) { if (v) r = r + nat(1); });
|
||||
return r;
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv) {
|
||||
if (argc != 2) {
|
||||
std::cout << "invalid number of arguments\n";
|
||||
return 1;
|
||||
}
|
||||
unsigned n = atoi(argv[1]);
|
||||
map m = mk_map(n);
|
||||
std::cout << fold(m) << "\n";
|
||||
return 0;
|
||||
}
|
||||
36
tests/bench/rbmap_cpp_std.cpp
Normal file
36
tests/bench/rbmap_cpp_std.cpp
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#include <iostream>
|
||||
#include <map>
|
||||
#include "util/nat.h"
|
||||
using namespace lean;
|
||||
|
||||
struct nat_lt_fn {
|
||||
bool operator()(nat const & n1, nat const & n2) const { return n1 < n2; }
|
||||
};
|
||||
|
||||
typedef std::map<nat, bool, nat_lt_fn> map;
|
||||
|
||||
map mk_map(unsigned n) {
|
||||
map m;
|
||||
while (n > 0) {
|
||||
--n;
|
||||
m.insert(std::make_pair(nat(n), n%10 == 0));
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
nat fold(map const & m) {
|
||||
nat r(0);
|
||||
for_each(m.begin(), m.end(), [&](std::pair<nat, bool> const & p) { if (p.second) r = r + nat(1); });
|
||||
return r;
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv) {
|
||||
if (argc != 2) {
|
||||
std::cout << "invalid number of arguments\n";
|
||||
return 1;
|
||||
}
|
||||
unsigned n = atoi(argv[1]);
|
||||
map m = mk_map(n);
|
||||
std::cout << fold(m) << "\n";
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue