From: bruceperens Date: Sat, 18 Jan 2014 00:49:19 +0000 (+0000) Subject: Test the tone class. X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=c80b7099c0ce073805a1a8a0a164f84db93af99c;p=freetel-svn-tracking.git Test the tone class. git-svn-id: https://svn.code.sf.net/p/freetel/code@1373 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/freedv-server/CMakeLists.txt b/freedv-server/CMakeLists.txt index b231b507..c2988381 100644 --- a/freedv-server/CMakeLists.txt +++ b/freedv-server/CMakeLists.txt @@ -124,6 +124,7 @@ set(Optional.sources set(Test.sources source/test/base.cpp + source/test/tone.cpp ) set(Test.headers diff --git a/freedv-server/source/test/tone.cpp b/freedv-server/source/test/tone.cpp new file mode 100644 index 00000000..c1c3f21d --- /dev/null +++ b/freedv-server/source/test/tone.cpp @@ -0,0 +1,62 @@ +// Tests for the Tone class. +#include +#include +#include + +using namespace FreeDV; + +class ToneTest : public ::testing::Test { +protected: + AudioInput * i; + + ToneTest() + : i(0) + { + } + + void SetUp() { + i = Driver::Tone(""); + } + + void TearDown() { + delete i; + } +}; + +// /// Destroy an Tone device instance. +// virtual ~Tone() = 0; +// +// /// Get the current audio level. +// /// \return The current audio level. +// /// The value is normalized to the range of 0.0 to 1.0. +// virtual float level() = 0; +// +// /// Set the current audio level. +// /// \param value The new value for the current audio level. +// /// The value must be normalized within the range of 0.0 to 1.0. +// virtual void level(float value) = 0; +// +// /// Read audio into an array of the signed 16-bit integer type. +// virtual std::size_t +// read16(int16_t * array, std::size_t length) = 0; + +TEST_F(ToneTest, InitialLevelIs1) { + EXPECT_EQ(1.0, i->level()); +} + +TEST_F(ToneTest, LevelChange) { + i->level(0.0); + EXPECT_EQ(0.0, i->level()); + i->level(0.5); + EXPECT_EQ(0.5, i->level()); + i->level(1.0); + EXPECT_EQ(1.0, i->level()); +} + +TEST_F(ToneTest, EnforcesNormalization) { + EXPECT_THROW(i->level(-1e-7), std::runtime_error); + EXPECT_THROW(i->level(1.0 + 1e-7), std::runtime_error); + EXPECT_NO_THROW(i->level(0.0)); + EXPECT_NO_THROW(i->level(0.5)); + EXPECT_NO_THROW(i->level(1.0)); +} diff --git a/freedv-server/source/tone.cpp b/freedv-server/source/tone.cpp index 6b84d7c7..ca52fddd 100644 --- a/freedv-server/source/tone.cpp +++ b/freedv-server/source/tone.cpp @@ -1,10 +1,14 @@ /// The tone audio input driver, for testing. #include "drivers.h" +#include namespace FreeDV { /// This is a test driver that provides tones. class Tone : public AudioInput { + private: + float volume; + public: /// Instantiate the tone driver. Tone(const char * parameter); @@ -21,7 +25,7 @@ namespace FreeDV { }; Tone::Tone(const char * parameters) - : AudioInput("tone", parameters) + : AudioInput("tone", parameters), volume(1.0) { } @@ -32,12 +36,16 @@ namespace FreeDV { float Tone::level() { - return 0; + return volume; } void Tone::level(float value) { + if ( value < 0.0 || value > 1.0 ) + throw std::runtime_error( + "Level set to value outside of the range 0.0..1.0"); + volume = value; } std::size_t