< Summary

Information
Class: CounterpointCollective.Utilities.LowPassFilter
Assembly: Dataflow.Composable
File(s): /builds/counterpointcollective/composabledataflowblocks/Source/Dataflow.Composable/Utilities/LowpassFilter.cs
Line coverage
100%
Covered lines: 23
Uncovered lines: 0
Coverable lines: 23
Total lines: 56
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Lock()100%11100%
.ctor(...)100%11100%
Next(...)100%22100%
GetBuffer()100%22100%

File(s)

/builds/counterpointcollective/composabledataflowblocks/Source/Dataflow.Composable/Utilities/LowpassFilter.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3
 4namespace CounterpointCollective.Utilities
 5{
 6    /// <exclude />
 7    public class LowPassFilter
 8    {
 9        private readonly int _size;
 510        private readonly Queue<double> _points = new();
 11        private double avg;
 24912        private object Lock { get; } = new();
 13
 314        public LowPassFilter(int size)
 15        {
 316            ArgumentOutOfRangeException.ThrowIfLessThan(size, 2);
 17
 318            _size = size;
 319        }
 20
 221        public LowPassFilter(int size, double init)
 22        {
 223            ArgumentOutOfRangeException.ThrowIfLessThan(size, 2);
 24
 225            _size = size;
 226            _points.Enqueue(init);
 227            avg = init;
 228        }
 29
 30        public double Next(double numIn)
 31        {
 13132            lock (Lock)
 33            {
 13134                _points.Enqueue(numIn);
 13135                if (_points.Count > _size)
 36                {
 11237                    avg -= _points.Dequeue() / _size;
 11238                    avg += numIn / _size;
 39                }
 40                else
 41                {
 1942                    avg = ((avg * (_points.Count - 1)) + numIn) / _points.Count;
 43                }
 13144                return avg;
 45            }
 13146        }
 47
 48        public double[] GetBuffer()
 49        {
 11350            lock (Lock)
 51            {
 11352                return [.. _points];
 53            }
 11354        }
 55    }
 56}