Test the tone class.
authorbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 18 Jan 2014 00:49:19 +0000 (00:49 +0000)
committerbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 18 Jan 2014 00:49:19 +0000 (00:49 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1373 01035d8c-6547-0410-b346-abe4f91aad63

freedv-server/CMakeLists.txt
freedv-server/source/test/tone.cpp [new file with mode: 0644]
freedv-server/source/tone.cpp

index b231b507f3baa5c0faa496c750b68f3495dc2ad6..c298838131d7444c7ba95147e3188a80577e4539 100644 (file)
@@ -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 (file)
index 0000000..c1c3f21
--- /dev/null
@@ -0,0 +1,62 @@
+// Tests for the Tone class.
+#include <drivers.h>
+#include <gtest/gtest.h>
+#include <sstream>
+
+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));
+}
index 6b84d7c7c6ef96d23fee75b5556b901ca006cddb..ca52fddd85efefb6a4f0cd3054a6a95f7eab9e8f 100644 (file)
@@ -1,10 +1,14 @@
 /// The tone audio input driver, for testing.
 
 #include "drivers.h"
+#include <stdexcept>
 
 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