blob: 1ec823a5744d6ab8c10f899c3e162fa7909ddf2e [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/media/audio/audio_core/stream_usage.h"
#include <gtest/gtest.h>
namespace media::audio {
namespace {
TEST(StreamUsageTest, ToString) {
EXPECT_STREQ("RenderUsage::BACKGROUND",
StreamUsage::WithRenderUsage(RenderUsage::BACKGROUND).ToString());
EXPECT_STREQ("RenderUsage::MEDIA", StreamUsage::WithRenderUsage(RenderUsage::MEDIA).ToString());
EXPECT_STREQ("RenderUsage::INTERRUPTION",
StreamUsage::WithRenderUsage(RenderUsage::INTERRUPTION).ToString());
EXPECT_STREQ("RenderUsage::SYSTEM_AGENT",
StreamUsage::WithRenderUsage(RenderUsage::SYSTEM_AGENT).ToString());
EXPECT_STREQ("RenderUsage::COMMUNICATION",
StreamUsage::WithRenderUsage(RenderUsage::COMMUNICATION).ToString());
EXPECT_STREQ("RenderUsage::ULTRASOUND",
StreamUsage::WithRenderUsage(RenderUsage::ULTRASOUND).ToString());
EXPECT_STREQ("CaptureUsage::BACKGROUND",
StreamUsage::WithCaptureUsage(CaptureUsage::BACKGROUND).ToString());
EXPECT_STREQ("CaptureUsage::FOREGROUND",
StreamUsage::WithCaptureUsage(CaptureUsage::FOREGROUND).ToString());
EXPECT_STREQ("CaptureUsage::SYSTEM_AGENT",
StreamUsage::WithCaptureUsage(CaptureUsage::SYSTEM_AGENT).ToString());
EXPECT_STREQ("CaptureUsage::COMMUNICATION",
StreamUsage::WithCaptureUsage(CaptureUsage::COMMUNICATION).ToString());
EXPECT_STREQ("CaptureUsage::LOOPBACK",
StreamUsage::WithCaptureUsage(CaptureUsage::LOOPBACK).ToString());
EXPECT_STREQ("CaptureUsage::ULTRASOUND",
StreamUsage::WithCaptureUsage(CaptureUsage::ULTRASOUND).ToString());
}
TEST(StreamUsageMaskTest, Coherent) {
for (const auto& set_usage : kStreamUsages) {
StreamUsageMask usage_mask;
usage_mask.insert(set_usage);
for (const auto& check_usage : kStreamUsages) {
EXPECT_EQ(usage_mask.contains(check_usage), set_usage == check_usage);
}
}
}
TEST(StreamUsageMaskTest, CopyAssign) {
StreamUsageMask usage_mask({StreamUsage::WithRenderUsage(RenderUsage::MEDIA)});
StreamUsageMask copy_constructed(usage_mask);
EXPECT_EQ(usage_mask, copy_constructed);
StreamUsageMask copy_assigned;
copy_assigned = usage_mask;
EXPECT_EQ(usage_mask, copy_assigned);
}
constexpr bool StreamUsageMaskConstexprTest() {
StreamUsageMask usage_mask({StreamUsage::WithRenderUsage(RenderUsage::MEDIA)});
StreamUsageMask copied = usage_mask;
if (usage_mask != copied) {
return false;
}
if (!usage_mask.contains(StreamUsage::WithRenderUsage(RenderUsage::MEDIA))) {
return false;
}
if (usage_mask.is_empty()) {
return false;
}
usage_mask.erase(StreamUsage::WithRenderUsage(RenderUsage::MEDIA));
if (usage_mask.contains(StreamUsage::WithRenderUsage(RenderUsage::MEDIA))) {
return false;
}
if (!usage_mask.is_empty()) {
return false;
}
StreamUsageMask usage_mask2({StreamUsage::WithRenderUsage(RenderUsage::MEDIA),
StreamUsage::WithRenderUsage(RenderUsage::COMMUNICATION)});
usage_mask.insert_all(usage_mask2);
if (!usage_mask.contains(StreamUsage::WithRenderUsage(RenderUsage::MEDIA))) {
return false;
}
if (!usage_mask.contains(StreamUsage::WithRenderUsage(RenderUsage::COMMUNICATION))) {
return false;
}
if (usage_mask.is_empty()) {
return false;
}
return true;
}
static_assert(StreamUsageMaskConstexprTest() == true);
} // namespace
} // namespace media::audio