diff --git a/benchmarks/IndexStd/IndexStd.cpp b/benchmarks/IndexStd/IndexStd.cpp new file mode 100644 index 000000000..06a09b9a7 --- /dev/null +++ b/benchmarks/IndexStd/IndexStd.cpp @@ -0,0 +1,45 @@ +#include +#include +#include +#include +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + Vector w = AliceWords(); + + std::vector q; + + for(auto s : w) + q.push_back(s.ToStd()); + + for(int i = 0; i < 100; i++) { + Index ndx; + std::set st; + std::set hst; + { + RTIMING("Index"); + for(const String& s : w) + ndx.FindAdd(s); + } + { + RTIMING("set"); + for(const std::string& s : q) + st.insert(s); + } + { + RTIMING("unordered_set"); + for(const std::string& s : q) + hst.insert(s); + } + ONCELOCK { + RDUMP(ndx.GetCount()); + RDUMP(st.size()); + RDUMP(hst.size()); + } + } +} diff --git a/benchmarks/IndexStd/IndexStd.upp b/benchmarks/IndexStd/IndexStd.upp new file mode 100644 index 000000000..906703c87 --- /dev/null +++ b/benchmarks/IndexStd/IndexStd.upp @@ -0,0 +1,10 @@ +uses + Core, + TestData; + +file + IndexStd.cpp; + +mainconfig + "" = ""; + diff --git a/benchmarks/Vector/Vector.cpp b/benchmarks/Vector/Vector.cpp index 16ac5bfa1..e393f8f27 100644 --- a/benchmarks/Vector/Vector.cpp +++ b/benchmarks/Vector/Vector.cpp @@ -6,41 +6,38 @@ using namespace Upp; CONSOLE_APP_MAIN { - const int N = 2500; + const int N = 200; - Buffer data(N); + Vector data; Buffer sdata(N); for(int i = 0; i < N; i++) { - data[i] = AsString(i); + data << AsString(i); sdata[i] = data[i].ToStd(); } RDUMP(sizeof(std::string)); RDUMP(sizeof(String)); - for(int j = 0; j < N; j++) { + for(int q = 100000; q--;) { { RTIMING("vector::push_back"); std::vector v; - for(int i = 0; i < j; i++) + for(int i = 0; i < N; i++) v.push_back(sdata[i]); } { RTIMING("vector::push_back"); std::vector v; - for(int i = 0; i < j; i++) + for(int i = 0; i < N; i++) v.push_back(data[i]); } { RTIMING("Vector::Add"); Vector v; - for(int i = 0; i < j; i++) + for(int i = 0; i < N; i++) v.Add(data[i]); } - } - - for(int j = 0; j < 100; j++) { { RTIMING("vector::insert"); std::vector v; @@ -59,5 +56,39 @@ CONSOLE_APP_MAIN for(int i = 0; i < N; i++) v.Insert(0, data[i]); } + { + std::vector v; + for(int i = 0; i < N; i++) + v.insert(v.begin(), sdata[i]); + RTIMING("vector::erase"); + while(v.size()) + v.erase(v.begin()); + } + { + std::vector v(~sdata, ~sdata + N); + RTIMING("vector::erase"); + while(v.size()) + v.erase(v.begin()); + } + { + Vector v; + for(int i = 0; i < N; i++) + v.Insert(0, data[i]); + RTIMING("Vector::Remove"); + while(v.GetCount()) + v.Remove(0); + } + for(int j = 0; j < 100; j++) { + { + std::vector v(~sdata, ~sdata + N); + RTIMING("std::remove_if"); + v.erase(std::remove_if(v.begin(), v.end(), [](const std::string& h) { return h[0] == '1'; }), v.end()); + } + { + Vector v = clone(data); + RTIMING("Vector::RemoveIf"); + v.RemoveIf([&](int i) { return v[i][0] == '1'; }); + } + } } }