#include #include #include #include #include #include #include #ifdef _WIN32 #define NOMINMAX #include #include #endif #define private public #include #undef private using namespace XCEngine::Audio; namespace { #ifdef _WIN32 TEST(WaveOutBackend, ProcessAudioCopiesOnlyRequestedSamplesIntoPendingMixBuffer) { WaveOut::WaveOutBackend backend; backend.m_pendingMixBuffer.assign(8, 1.0f); float input[] = {0.25f, -0.5f, 0.75f, -1.0f}; backend.ProcessAudio(input, 2, 2, 48000); ASSERT_EQ(backend.m_pendingMixBuffer.size(), 8u); EXPECT_TRUE(backend.m_hasPendingMix); EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[0], 0.25f); EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[1], -0.5f); EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[2], 0.75f); EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[3], -1.0f); EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[4], 0.0f); EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[5], 0.0f); EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[6], 0.0f); EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[7], 0.0f); } TEST(WaveOutBackend, SetDeviceAcceptsDefaultDeviceBeforeInitialize) { WaveOut::WaveOutBackend backend; EXPECT_TRUE(backend.SetDevice("Default Device")); EXPECT_EQ(backend.m_deviceName, "Default Device"); EXPECT_TRUE(backend.m_requestedDeviceName.empty()); } TEST(WaveOutBackend, SetDeviceRejectsHotSwitchAfterOpen) { WaveOut::WaveOutBackend backend; backend.m_deviceName = "Default Device"; backend.m_hWaveOut = reinterpret_cast(1); EXPECT_FALSE(backend.SetDevice("Some Other Device")); EXPECT_EQ(backend.m_deviceName, "Default Device"); backend.m_hWaveOut = nullptr; } TEST(WaveOutBackend, FillPcm16BufferClampsSamplesToPcm16Range) { std::vector input = {-2.0f, -0.5f, 0.5f, 2.0f}; std::vector output(4, 123); WaveOut::WaveOutBackend::FillPcm16Buffer(output, input); ASSERT_EQ(output.size(), 4u); EXPECT_EQ(output[0], -32767); EXPECT_EQ(output[1], -16383); EXPECT_EQ(output[2], 16383); EXPECT_EQ(output[3], 32767); } #endif } // namespace