aboutsummaryrefslogtreecommitdiff
path: root/externals/dynarmic/tests/rand_int.h
diff options
context:
space:
mode:
Diffstat (limited to 'externals/dynarmic/tests/rand_int.h')
-rw-r--r--externals/dynarmic/tests/rand_int.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/externals/dynarmic/tests/rand_int.h b/externals/dynarmic/tests/rand_int.h
new file mode 100644
index 0000000000..3997a43130
--- /dev/null
+++ b/externals/dynarmic/tests/rand_int.h
@@ -0,0 +1,27 @@
+/* This file is part of the dynarmic project.
+ * Copyright (c) 2020 MerryMage
+ * SPDX-License-Identifier: 0BSD
+ */
+
+#pragma once
+
+#include <random>
+#include <type_traits>
+
+namespace detail {
+inline std::mt19937 g_rand_int_generator = [] {
+ std::random_device rd;
+ std::mt19937 mt{rd()};
+ return mt;
+}();
+} // namespace detail
+
+template<typename T>
+T RandInt(T min, T max) {
+ static_assert(std::is_integral_v<T>, "T must be an integral type.");
+ static_assert(!std::is_same_v<T, signed char> && !std::is_same_v<T, unsigned char>,
+ "Using char with uniform_int_distribution is undefined behavior.");
+
+ std::uniform_int_distribution<T> rand(min, max);
+ return rand(detail::g_rand_int_generator);
+}