| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // Copyright The OpenTelemetry Authors
- // SPDX-License-Identifier: Apache-2.0
- #include <gtest/gtest.h>
- #include <algorithm>
- #include <atomic>
- #include <cstdint>
- #include <initializer_list>
- #include <iterator>
- #include <string>
- #include <thread>
- #include <vector>
- #include "opentelemetry/nostd/span.h"
- #include "src/common/random.h"
- using opentelemetry::sdk::common::Random;
- TEST(RandomTest, GenerateRandom64)
- {
- EXPECT_NE(Random::GenerateRandom64(), Random::GenerateRandom64());
- }
- TEST(RandomTest, GenerateRandomBuffer)
- {
- uint8_t buf1_array[8] = {0};
- uint8_t buf2_array[8] = {0};
- Random::GenerateRandomBuffer(buf1_array);
- Random::GenerateRandomBuffer(buf2_array);
- EXPECT_FALSE(std::equal(std::begin(buf1_array), std::end(buf1_array), std::begin(buf2_array)));
- // Edge cases.
- for (auto size : {7, 8, 9, 16, 17})
- {
- std::vector<uint8_t> buf1_vector(size);
- std::vector<uint8_t> buf2_vector(size);
- Random::GenerateRandomBuffer(buf1_vector);
- Random::GenerateRandomBuffer(buf2_vector);
- EXPECT_FALSE(
- std::equal(std::begin(buf1_vector), std::end(buf1_vector), std::begin(buf2_vector)));
- }
- }
- void doSomethingOnce(std::atomic_uint *count)
- {
- static std::atomic_flag flag;
- if (!flag.test_and_set())
- {
- (*count)++;
- }
- }
- TEST(RandomTest, AtomicFlagMultiThreadTest)
- {
- std::vector<std::thread> threads;
- std::atomic_uint count(0);
- threads.reserve(10);
- for (int i = 0; i < 10; ++i)
- {
- threads.push_back(std::thread(doSomethingOnce, &count));
- }
- for (auto &t : threads)
- {
- t.join();
- }
- EXPECT_EQ(1, count.load());
- }
|