blob: 00723b8dab534d21e248425347333545b17eb952 [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/lib/format/traits.h"
#include <cstdint>
#include <type_traits>
#include <gtest/gtest.h>
namespace media::audio {
namespace {
using ASF = fuchsia::media::AudioSampleFormat;
TEST(TraitsTest, Unsigned8) {
using Traits = SampleFormatTraits<ASF::UNSIGNED_8>;
EXPECT_TRUE(static_cast<bool>(std::is_same<Traits::SampleT, std::uint8_t>::value));
EXPECT_EQ(sizeof(Traits::SampleT), sizeof(uint8_t));
EXPECT_EQ(Traits::kSilentValue, 0x80);
EXPECT_EQ(Traits::kUnityValue, 0xFF);
EXPECT_FLOAT_EQ(Traits::ToFloat(0x00), -1.0f);
EXPECT_GT(Traits::ToFloat(Traits::kUnityValue), 0.99f);
std::string unity_str = Traits::ToString(Traits::kUnityValue);
EXPECT_EQ(stoi(unity_str, 0, 16), Traits::kUnityValue);
EXPECT_EQ(unity_str.length(), Traits::kCharsPerSample);
}
TEST(TraitsTest, Signed16) {
using Traits = SampleFormatTraits<ASF::SIGNED_16>;
EXPECT_TRUE(static_cast<bool>(std::is_same<Traits::SampleT, std::int16_t>::value));
EXPECT_EQ(sizeof(Traits::SampleT), sizeof(int16_t));
EXPECT_EQ(Traits::kSilentValue, 0x0000);
EXPECT_EQ(Traits::kUnityValue, 0x7FFF);
EXPECT_FLOAT_EQ(Traits::ToFloat(0x8000), -1.0f);
EXPECT_GT(Traits::ToFloat(Traits::kUnityValue), 0.9999f);
std::string unity_str = Traits::ToString(Traits::kUnityValue);
EXPECT_EQ(stoi(unity_str, 0, 16), Traits::kUnityValue);
EXPECT_EQ(unity_str.length(), Traits::kCharsPerSample);
}
TEST(TraitsTest, Signed24) {
using Traits = SampleFormatTraits<ASF::SIGNED_24_IN_32>;
EXPECT_TRUE(static_cast<bool>(std::is_same<Traits::SampleT, std::int32_t>::value));
EXPECT_EQ(sizeof(Traits::SampleT), sizeof(int32_t));
EXPECT_EQ(Traits::kSilentValue, 0x00000000);
EXPECT_EQ(Traits::kUnityValue, 0x7FFFFF00);
EXPECT_FLOAT_EQ(Traits::ToFloat(0x80000000), -1.0f);
EXPECT_GT(Traits::ToFloat(Traits::kUnityValue), 0.999999f);
std::string unity_str = Traits::ToString(Traits::kUnityValue);
EXPECT_EQ(stol(unity_str, 0, 16), Traits::kUnityValue) << Traits::kUnityValue;
EXPECT_EQ(unity_str.length(), Traits::kCharsPerSample);
}
TEST(TraitsTest, Float32) {
using Traits = SampleFormatTraits<ASF::FLOAT>;
EXPECT_TRUE(std::is_floating_point<Traits::SampleT>::value);
EXPECT_EQ(sizeof(Traits::SampleT), sizeof(float));
EXPECT_FLOAT_EQ(Traits::kSilentValue, 0.0f);
EXPECT_FLOAT_EQ(Traits::kUnityValue, 1.0f);
EXPECT_FLOAT_EQ(Traits::ToFloat(-1.0f), -1.0f);
EXPECT_FLOAT_EQ(Traits::ToFloat(Traits::kUnityValue), 1.0f);
std::string unity_str = Traits::ToString(Traits::kUnityValue);
EXPECT_FLOAT_EQ(stof(unity_str), Traits::kUnityValue);
EXPECT_EQ(unity_str.length(), Traits::kCharsPerSample);
}
} // namespace
} // namespace media::audio