--- /dev/null
+// 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));
+}
/// 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);
};
Tone::Tone(const char * parameters)
- : AudioInput("tone", parameters)
+ : AudioInput("tone", parameters), volume(1.0)
{
}
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