Пример #1
0
        public void TestMethod1()
        {
            MovingAverage avg = new MovingAverage(2);

            Assert.AreEqual(0, avg.GetAverage());

            avg.AddValue(100);
            Assert.AreEqual(100, avg.GetAverage());

            avg.AddValue(50);
            Assert.AreEqual(75, avg.GetAverage());

            avg.AddValue(0);
            Assert.AreEqual(25, avg.GetAverage());

            avg.AddValue(1000);
            Assert.AreEqual(500, avg.GetAverage());
        }
Пример #2
0
        public void Consume(short[] input, int length)
        {
            int offset = 0, n = length;

            if (m_start)
            {
                while (length > 0)
                {
                    m_average.AddValue(Math.Abs(input[offset]));
                    if (m_average.GetAverage() > m_threshold)
                    {
                        m_start = false;
                        break;
                    }
                    offset++;
                    length--;
                }
            }

            // TODO: workaround pointer magic: shift array data.
            if (offset > 0)
            {
                for (int i = 0; i < n - offset; i++)
                {
                    input[i] = input[i + offset];
                }

                // Not necessary?
                for (int i = n - offset; i < n; i++)
                {
                    input[i] = 0;
                }
            }

            if (length > 0)
            {
                m_consumer.Consume(input, length);
            }
        }