aboutsummaryrefslogtreecommitdiff
path: root/benchmark/source/BenchmarkHeap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/source/BenchmarkHeap.cpp')
-rw-r--r--benchmark/source/BenchmarkHeap.cpp238
1 files changed, 0 insertions, 238 deletions
diff --git a/benchmark/source/BenchmarkHeap.cpp b/benchmark/source/BenchmarkHeap.cpp
deleted file mode 100644
index 635cf31..0000000
--- a/benchmark/source/BenchmarkHeap.cpp
+++ /dev/null
@@ -1,238 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Copyright (c) Electronic Arts Inc. All rights reserved.
-/////////////////////////////////////////////////////////////////////////////
-
-
-#include "EASTLBenchmark.h"
-#include "EASTLTest.h"
-#include <EAStdC/EAStopwatch.h>
-#include <EASTL/heap.h>
-#include <EASTL/vector.h>
-#include <EASTL/algorithm.h>
-
-#ifdef _MSC_VER
- #pragma warning(push, 0)
- #pragma warning(disable: 4350) // behavior change: X called instead of Y
-#endif
-#include <algorithm>
-#include <vector>
-#ifdef _MSC_VER
- #pragma warning(pop)
-#endif
-
-
-using namespace EA;
-
-
-namespace
-{
- template <typename Iterator>
- void TestMakeHeapStd(EA::StdC::Stopwatch& stopwatch, Iterator first, Iterator last)
- {
- stopwatch.Restart();
- std::make_heap(first, last);
- stopwatch.Stop();
- }
-
- template <typename Iterator>
- void TestMakeHeapEa(EA::StdC::Stopwatch& stopwatch, Iterator first, Iterator last)
- {
- stopwatch.Restart();
- eastl::make_heap(first, last);
- stopwatch.Stop();
- }
-
-
-
- template <typename Iterator1, typename Iterator2>
- void TestPushHeapStd(EA::StdC::Stopwatch& stopwatch, Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
- {
- stopwatch.Restart();
- while(first2 != last2)
- {
- *last1++ = *first2++;
- std::push_heap(first1, last1);
- }
- stopwatch.Stop();
- }
-
- template <typename Iterator1, typename Iterator2>
- void TestPushHeapEa(EA::StdC::Stopwatch& stopwatch, Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
- {
- stopwatch.Restart();
- while(first2 != last2)
- {
- *last1++ = *first2++;
- eastl::push_heap(first1, last1);
- }
- stopwatch.Stop();
- }
-
-
-
- template <typename Iterator>
- void TestPopHeapStd(EA::StdC::Stopwatch& stopwatch, Iterator first, Iterator last, Iterator popEnd)
- {
- stopwatch.Restart();
- while(last != popEnd)
- std::pop_heap(first, last--);
- stopwatch.Stop();
- }
-
- template <typename Iterator>
- void TestPopHeapEa(EA::StdC::Stopwatch& stopwatch, Iterator first, Iterator last, Iterator popEnd)
- {
- stopwatch.Restart();
- while(last != popEnd)
- eastl::pop_heap(first, last--);
- stopwatch.Stop();
- }
-
-
-
- template <typename Iterator>
- void TestSortHeapStd(EA::StdC::Stopwatch& stopwatch, Iterator first, Iterator last)
- {
- stopwatch.Restart();
- std::sort_heap(first, last);
- stopwatch.Stop();
- }
-
- template <typename Iterator>
- void TestSortHeapEa(EA::StdC::Stopwatch& stopwatch, Iterator first, Iterator last)
- {
- stopwatch.Restart();
- eastl::sort_heap(first, last);
- stopwatch.Stop();
- }
-
-} // namespace
-
-
-
-void BenchmarkHeap()
-{
- EASTLTest_Printf("Heap (Priority Queue)\n");
-
- EA::UnitTest::RandGenT<uint32_t> rng(EA::UnitTest::GetRandSeed());
- EA::StdC::Stopwatch stopwatch1(EA::StdC::Stopwatch::kUnitsCPUCycles);
- EA::StdC::Stopwatch stopwatch2(EA::StdC::Stopwatch::kUnitsCPUCycles);
-
- {
- const int kArraySize = 100000;
-
- // uint32[]
- uint32_t* const pIntArrayS = new uint32_t[kArraySize * 2]; // * 2 because we will be adding more items via push_heap.
- uint32_t* const pIntArrayE = new uint32_t[kArraySize * 2]; // S means Std; E means EA.
- uint32_t* const pIntArray2 = new uint32_t[kArraySize]; // This will be used for pop_heap.
-
- eastl::generate(pIntArrayS, pIntArrayS + kArraySize, rng);
- eastl::copy(pIntArrayS, pIntArrayS + kArraySize, pIntArrayE);
- eastl::copy(pIntArrayS, pIntArrayS + kArraySize, pIntArray2);
-
-
- // vector<TestObject>
- std::vector<TestObject> stdVectorTO(kArraySize * 2);
- std::vector<TestObject> stdVectorTO2(kArraySize);
- eastl::vector<TestObject> eaVectorTO(kArraySize * 2);
- eastl::vector<TestObject> eaVectorTO2(kArraySize);
-
- for(int k = 0; k < kArraySize; k++)
- {
- stdVectorTO[k] = TestObject(pIntArrayS[k]);
- stdVectorTO2[k] = TestObject(pIntArrayS[k]);
- eaVectorTO[k] = TestObject(pIntArrayS[k]);
- eaVectorTO2[k] = TestObject(pIntArrayS[k]);
- }
-
-
- for(int i = 0; i < 2; i++)
- {
- ///////////////////////////////
- // Test make_heap
- ///////////////////////////////
-
- TestMakeHeapStd(stopwatch1, pIntArrayS, pIntArrayS + kArraySize);
- TestMakeHeapEa (stopwatch2, pIntArrayE, pIntArrayE + kArraySize);
-
- if(i == 1)
- Benchmark::AddResult("heap (uint32_t[])/make_heap", stopwatch1.GetUnits(), stopwatch1.GetElapsedTime(), stopwatch2.GetElapsedTime());
-
- TestMakeHeapStd(stopwatch1, stdVectorTO.begin(), stdVectorTO.begin() + kArraySize);
- TestMakeHeapEa (stopwatch2, eaVectorTO.begin(), eaVectorTO.begin() + kArraySize);
-
- if(i == 1)
- Benchmark::AddResult("heap (vector<TestObject>)/make_heap", stopwatch1.GetUnits(), stopwatch1.GetElapsedTime(), stopwatch2.GetElapsedTime());
-
-
-
- ///////////////////////////////
- // Test push_heap
- ///////////////////////////////
-
- TestPushHeapStd(stopwatch1, pIntArrayS, pIntArrayS + kArraySize, pIntArray2, pIntArray2 + kArraySize);
- TestPushHeapEa (stopwatch2, pIntArrayE, pIntArrayE + kArraySize, pIntArray2, pIntArray2 + kArraySize);
-
- if(i == 1)
- Benchmark::AddResult("heap (uint32_t[])/push_heap", stopwatch1.GetUnits(), stopwatch1.GetElapsedTime(), stopwatch2.GetElapsedTime());
-
- TestPushHeapStd(stopwatch1, stdVectorTO.begin(), stdVectorTO.begin() + kArraySize, stdVectorTO2.begin(), stdVectorTO2.begin() + kArraySize);
- TestPushHeapEa (stopwatch2, eaVectorTO.begin(), eaVectorTO.begin() + kArraySize, eaVectorTO2.begin(), eaVectorTO2.begin() + kArraySize);
-
- if(i == 1)
- Benchmark::AddResult("heap (vector<TestObject>)/push_heap", stopwatch1.GetUnits(), stopwatch1.GetElapsedTime(), stopwatch2.GetElapsedTime());
-
-
-
- ///////////////////////////////
- // Test pop_heap
- ///////////////////////////////
-
- TestPopHeapStd(stopwatch1, pIntArrayS, pIntArrayS + (kArraySize * 2), pIntArrayS + kArraySize); // * 2 because we used push_heap above to add more items.
- TestPopHeapEa (stopwatch2, pIntArrayE, pIntArrayE + (kArraySize * 2), pIntArrayE + kArraySize);
-
- if(i == 1)
- Benchmark::AddResult("heap (uint32_t[])/pop_heap", stopwatch1.GetUnits(), stopwatch1.GetElapsedTime(), stopwatch2.GetElapsedTime());
-
- TestPopHeapStd(stopwatch1, stdVectorTO.begin(), stdVectorTO.begin() + (kArraySize * 2), stdVectorTO.begin() + kArraySize); // * 2 because we used push_heap above to add more items.
- TestPopHeapEa (stopwatch2, eaVectorTO.begin(), eaVectorTO.begin() + (kArraySize * 2), eaVectorTO.begin() + kArraySize);
-
- if(i == 1)
- Benchmark::AddResult("heap (vector<TestObject>)/pop_heap", stopwatch1.GetUnits(), stopwatch1.GetElapsedTime(), stopwatch2.GetElapsedTime());
-
-
-
- ///////////////////////////////
- // Test sort_heap
- ///////////////////////////////
-
- TestSortHeapStd(stopwatch1, pIntArrayS, pIntArrayS + kArraySize);
- TestSortHeapEa (stopwatch2, pIntArrayE, pIntArrayE + kArraySize);
-
- if(i == 1)
- Benchmark::AddResult("heap (uint32_t[])/sort_heap", stopwatch1.GetUnits(), stopwatch1.GetElapsedTime(), stopwatch2.GetElapsedTime());
-
- TestSortHeapStd(stopwatch1, stdVectorTO.begin(), stdVectorTO.begin() + kArraySize);
- TestSortHeapEa (stopwatch2, eaVectorTO.begin(), eaVectorTO.begin() + kArraySize);
-
- if(i == 1)
- Benchmark::AddResult("heap (vector<TestObject>)/sort_heap", stopwatch1.GetUnits(), stopwatch1.GetElapsedTime(), stopwatch2.GetElapsedTime());
- }
-
- delete[] pIntArrayS;
- delete[] pIntArrayE;
- delete[] pIntArray2;
- }
-}
-
-
-
-
-
-
-
-
-
-
-
-