public void Constructor_ReturnsTriangleWave()
 {
     double[] dutyCycles = { 0.0, 0.5, 1.0 };
     foreach (var dutyCycle in dutyCycles)
     {
         TriangleWave tw = new TriangleWave(dutyCycle);
         Assert.IsInstanceOfType(tw, typeof(TriangleWave));
     }
 }
        public void Value_ReturnsDouble()
        {
            double dutyCycle = 0.25;

            double[]     phases = { 0.0, 0.2, dutyCycle *Constants._2PI, 3.0, Constants._2PI };
            TriangleWave tw     = new TriangleWave(dutyCycle);

            foreach (double phase in phases)
            {
                Assert.IsInstanceOfType(tw.Value(phase), typeof(double));
            }
        }
        public void TestTriangleWave()
        {
            Calibration.Initialize();

            IBGCStream stream =
                new TriangleWave(1f, 440f)
                .Window(DURATION)
                .Normalize(LEVEL);

            bool success = WaveEncoding.SaveStream(
                filepath: DataManagement.PathForDataFile("Test", "triangleWave.wav"),
                stream: stream,
                overwrite: true);

            Assert.IsTrue(success);
        }
        public void Constructor_ThrowsArgumentOutOfRangeException_ForDutyCycleGreatherThan1()
        {
            double dutyCycle = 1.000001;

            try
            {
                TriangleWave sw = new TriangleWave(dutyCycle);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Assert.IsInstanceOfType(e, typeof(ArgumentOutOfRangeException));
                StringAssert.Contains(e.Message, Constants.DutyCycleAbove1);
                return;
            }
            Assert.Fail();
        }
        public void Constructor_ThrowsArgumentOutOfRangeException_ForNegativeDutyCycle()
        {
            double dutyCycle = -1.0;

            try
            {
                TriangleWave tw = new TriangleWave(dutyCycle);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Assert.IsInstanceOfType(e, typeof(ArgumentOutOfRangeException));
                StringAssert.Contains(e.Message, Constants.DutyCycleNegativeMessage);
                return;
            }
            Assert.Fail();
        }
        public void Value_ReturnsKnownResults_ForKnownPhases_BeforeAndAfterSetDutyCycle()
        {
            double initialDutyCycle = 0.25;

            double[]     initialPhases         = { 0.0, initialDutyCycle / 2.0 * Math.PI, initialDutyCycle *Math.PI, 3.0 / 2.0 * initialDutyCycle * Math.PI, Constants._2PI };
            double[]     initialexpectedValues = { 0.0, 0.5, 1.0, 0.5, 0.0 };
            TriangleWave tw = new TriangleWave(initialDutyCycle);

            TestMethods.TestKnownInputsAgainstKnownResults(tw, initialPhases, initialexpectedValues);

            double finalDutyCycle = 0.6;

            double[] finalPhases         = { 0.0, finalDutyCycle / 2.0 * Math.PI, finalDutyCycle *Math.PI, 3.0 / 2.0 * finalDutyCycle * Math.PI, Constants._2PI };
            double[] finalExpectedValues = { 0.0, 0.5, 1.0, 0.5, 0.0 };
            tw.DutyCycle = finalDutyCycle;
            TestMethods.TestKnownInputsAgainstKnownResults(tw, finalPhases, finalExpectedValues);
        }
        public void Value_ReturnsKnownValues_ForKnownPhases()
        {
            double dutyCycle = 0.32;

            double[]     phases         = { 0.0, 0.08 * Constants._2PI, 0.24 * Constants._2PI, 0.32 * Constants._2PI, 0.99 * Constants._2PI, Constants._2PI };
            double[]     expectedValues = { 0.0, 0.5, 0.5, 0.0, 0.0, 0.0 };
            TriangleWave tw             = new TriangleWave(dutyCycle);

            Assert.AreEqual(phases.Length, expectedValues.Length, "Known inputs and results test sets do not contain the same number of values.");
            for (int count = 0; count < phases.Length; count++)
            {
                double phase    = phases[count];
                double actual   = tw.Value(phase);
                double expected = expectedValues[count];
                string message  = string.Format("Phase: {0}\nExpected: {1}\nActual:{2}", phase, expected, actual);
                Assert.AreEqual(actual, expected, message);
            }
        }
 public void Value_Returns1_AtHalfDutyCyclePhase_ForDutyCycleGreaterThan0()
 {
     double[] dutyCycles = { 0.5, 1.0 };
     foreach (double dutyCycle in dutyCycles)
     {
         TriangleWave tw       = new TriangleWave(dutyCycle);
         double       phase    = dutyCycle * Constants._2PI / 2.0;
         double       actual   = tw.Value(phase);
         double       expected = 1.0;
         if (actual != expected)
         {
             String message = "";
             message += "Duty Cycle: " + dutyCycle;
             message += "\nPhase: " + phase;
             message += "\nExpected: " + expected;
             message += "\nActual: " + actual;
             Assert.AreEqual(expected, tw.Value(phase), message);
         }
     }
 }
 public void Value_Returns0_AtBothEndsOfPeriod()
 {
     double[] dutyCycles = { 0.0, 0.5, 1.0 };
     double[] phases     = { 0.0, 2 * Math.PI };
     foreach (double dutyCycle in dutyCycles)
     {
         TriangleWave tw = new TriangleWave(dutyCycle);
         foreach (double phase in phases)
         {
             double expected = 0.0;
             double actual   = tw.Value(phase);
             if (actual != expected)
             {
                 String message = "";
                 message += "Duty Cycle: " + dutyCycle;
                 message += "\nPhase: " + phase;
                 message += "\nExpected: " + expected;
                 message += "\nActual: " + actual;
                 Assert.AreEqual(0.0, tw.Value(phase), message);
             }
         }
     }
 }
Beispiel #10
0
        private void DrawTriangleWave()
        {
            // Set the x axis range to be the period of the wave.
            m_GraphXAxisRange = double.Parse(textBox_Period.Text);

            // Get the amplitude of the wave from the user
            double amplitude = Convert.ToDouble(textBox_Amplitude.Text);

            // Get the phase of the wave from the user
            double phase = Convert.ToDouble(textBox_Phase.Text);

            // Create the Triangle wave
            m_TriangleWave = new TriangleWave(amplitude,
                                              m_GraphXAxisRange,
                                              (int)phase,
                                              m_SamplingPeriod);

            // Set the graph y axis limits
            m_GraphAxisYMax = Math.Round(amplitude + (amplitude / 4), 2);
            m_GraphAxisYMin = -1 * m_GraphAxisYMax;

            // Set the current wave
            m_currentWave = m_TriangleWave;
        }
 public Harmonic(CustomSoundProvider provider)
 {
     Sine = new SineWave(provider);
     Square = new SquareWave(provider);
     Triangle = new TriangleWave(provider);
     Sawtooth = new SawtoothWave(provider);
     Amplitude = 0.25f;
 }