summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/resonance-audio/resonance_audio/geometrical_acoustics/parallel_for_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/resonance-audio/resonance_audio/geometrical_acoustics/parallel_for_test.cc')
-rw-r--r--src/3rdparty/resonance-audio/resonance_audio/geometrical_acoustics/parallel_for_test.cc65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/3rdparty/resonance-audio/resonance_audio/geometrical_acoustics/parallel_for_test.cc b/src/3rdparty/resonance-audio/resonance_audio/geometrical_acoustics/parallel_for_test.cc
new file mode 100644
index 000000000..2e1ec563a
--- /dev/null
+++ b/src/3rdparty/resonance-audio/resonance_audio/geometrical_acoustics/parallel_for_test.cc
@@ -0,0 +1,65 @@
+/*
+Copyright 2018 Google Inc. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS-IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+#include "geometrical_acoustics/parallel_for.h"
+
+#include <array>
+#include <atomic>
+#include <condition_variable>
+#include <mutex>
+
+#include "third_party/googletest/googletest/include/gtest/gtest.h"
+
+namespace vraudio {
+
+namespace {
+
+// Tests multi-threaded increment of a single variable, using increasing numbers
+// of threads.
+TEST(ParallelForTest, IncreasingThreadCounts) {
+ const size_t kNumIterations = 1000;
+ for (unsigned int num_threads = 1; num_threads < 16; ++num_threads) {
+ std::mutex mutex;
+ std::condition_variable condition_variable;
+ size_t index = 0;
+ ParallelFor(num_threads, kNumIterations, [&](const size_t i) {
+ std::unique_lock<std::mutex> lock(mutex);
+ while (i != index) {
+ condition_variable.wait(lock);
+ }
+ ++index;
+ condition_variable.notify_all();
+ });
+ EXPECT_EQ(kNumIterations, index);
+ }
+}
+
+// Tests recursive use of ParallelFor().
+TEST(ParallelForTest, RecursiveParallelFor) {
+ std::atomic<int> counter(0);
+ ParallelFor(16U, 16, [&](const size_t i) {
+ ParallelFor(16U, 16, [&](const size_t j) {
+ for (int k = 0; k < 16; ++k) {
+ ++counter;
+ }
+ });
+ });
+ EXPECT_EQ(16 * 16 * 16, counter.load());
+}
+
+} // namespace
+
+} // namespace vraudio