movavg 1.0.0

Generic Moving Average calculation
Documentation
<div id="movavg-generic-moving-average-calculation">
<h2>movavg - Generic Moving Average calculation</h2>
<p><a href="https://bues.ch/" rel="nofollow">https://bues.ch/</a></p>
<p>Generic <a href="https://en.wikipedia.org/wiki/Moving_average" rel="nofollow">Moving Average</a> calculation for the integer types</p>
<ul>
<li>i8, i16, i32, i64, i128, isize</li>
<li>u8, u16, u32, u64, u128, usize</li>
</ul>
<p>and float types</p>
<ul>
<li>f32, f64</li>
</ul>
</div>
<div id="usage">
<h2>Usage</h2>
<p>Add this to your Cargo.toml:</p>
<pre><span class="k">[dependencies]</span>
<span class="n">movavg</span> <span class="o">=</span> <span class="mf">1.0</span>
</pre>
<p>Example usage:</p>
<pre><span class="c1">// Integers
</span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">avg</span>: <span class="nc">MovAvg</span><span class="o">&lt;</span><span class="kt">i32</span><span class="o">&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MovAvg</span>::<span class="n">new</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span><span class="w"> </span><span class="c1">// window size = 3
</span><span class="n">assert_eq</span><span class="o">!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">10</span><span class="p">),</span><span class="w"> </span><span class="mi">10</span><span class="p">);</span><span class="w">
</span><span class="n">assert_eq</span><span class="o">!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">20</span><span class="p">),</span><span class="w"> </span><span class="mi">15</span><span class="p">);</span><span class="w">
</span><span class="n">assert_eq</span><span class="o">!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">30</span><span class="p">),</span><span class="w"> </span><span class="mi">20</span><span class="p">);</span><span class="w">
</span><span class="n">assert_eq</span><span class="o">!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">40</span><span class="p">),</span><span class="w"> </span><span class="mi">30</span><span class="p">);</span><span class="w">

</span><span class="c1">// Floats
</span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">avg</span>: <span class="nc">MovAvg</span><span class="o">&lt;</span><span class="kt">f64</span><span class="o">&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MovAvg</span>::<span class="n">new</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span><span class="w">
</span><span class="n">assert_eq</span><span class="o">!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mf">10.0</span><span class="p">),</span><span class="w"> </span><span class="mf">10.0</span><span class="p">);</span><span class="w">
</span><span class="n">assert_eq</span><span class="o">!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mf">20.0</span><span class="p">),</span><span class="w"> </span><span class="mf">15.0</span><span class="p">);</span><span class="w">
</span><span class="n">assert_eq</span><span class="o">!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mf">30.0</span><span class="p">),</span><span class="w"> </span><span class="mf">20.0</span><span class="p">);</span><span class="w">
</span><span class="n">assert_eq</span><span class="o">!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mf">40.0</span><span class="p">),</span><span class="w"> </span><span class="mf">30.0</span><span class="p">);</span><span class="w">

</span><span class="c1">// Bigger accumulator
</span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">avg</span>: <span class="nc">MovAvg</span><span class="o">&lt;</span><span class="kt">i8</span><span class="p">,</span><span class="w"> </span><span class="kt">i32</span><span class="o">&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MovAvg</span>::<span class="n">new</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span><span class="w">
</span><span class="n">assert_eq</span><span class="o">!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">100</span><span class="p">),</span><span class="w"> </span><span class="mi">100</span><span class="p">);</span><span class="w">
</span><span class="n">assert_eq</span><span class="o">!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">100</span><span class="p">),</span><span class="w"> </span><span class="mi">100</span><span class="p">);</span><span class="w"> </span><span class="c1">// This would overflow an i8 accumulator</span>
</pre>
</div>
<div id="license">
<h2>License</h2>
<p>Copyright (c) 2021 Michael Buesch &lt;<a href="mailto:m&#37;&#52;&#48;bues&#46;ch">m<span>&#64;</span>bues<span>&#46;</span>ch</a>&gt;</p>
<p>Licensed under the Apache License version 2.0 or the MIT license, at your option.</p>
</div>