diff --git a/lib/feeds/gbm/ValidationTestData.cs b/lib/feeds/gbm/ValidationTestData.cs index b277ad6f..13e8ad28 100644 --- a/lib/feeds/gbm/ValidationTestData.cs +++ b/lib/feeds/gbm/ValidationTestData.cs @@ -5,7 +5,7 @@ using Skender.Stock.Indicators; namespace QuanTAlib.Tests; -public class ValidationTestData : IDisposable +public sealed class ValidationTestData : IDisposable { public TBarSeries Bars { get; } public TSeries Data { get; } @@ -35,24 +35,8 @@ public class ValidationTestData : IDisposable SkenderQuotes = quotes; } - private bool _disposed; - public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (!_disposed) - { - if (disposing) - { - // Dispose managed state (managed objects) - } - - _disposed = true; - } + // No resources to dispose } } diff --git a/lib/momentum/ao/Ao.Validation.Tests.cs b/lib/momentum/ao/Ao.Validation.Tests.cs index f3907f8a..8f270c40 100644 --- a/lib/momentum/ao/Ao.Validation.Tests.cs +++ b/lib/momentum/ao/Ao.Validation.Tests.cs @@ -10,7 +10,7 @@ using QuanTAlib.Tests; namespace QuanTAlib; -public class AoValidationTests : IDisposable +public sealed class AoValidationTests : IDisposable { private readonly ValidationTestData _data; @@ -21,16 +21,7 @@ public class AoValidationTests : IDisposable public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - _data.Dispose(); - } + _data.Dispose(); } [Fact] diff --git a/lib/momentum/apo/Apo.Validation.Tests.cs b/lib/momentum/apo/Apo.Validation.Tests.cs index cbe8f615..0ccf3caf 100644 --- a/lib/momentum/apo/Apo.Validation.Tests.cs +++ b/lib/momentum/apo/Apo.Validation.Tests.cs @@ -12,9 +12,10 @@ using OoplesFinance.StockIndicators.Enums; namespace QuanTAlib; -public class ApoValidationTests : IDisposable +public sealed class ApoValidationTests : IDisposable { private readonly ValidationTestData _testData; + private bool _disposed; public ApoValidationTests() { @@ -24,14 +25,20 @@ public class ApoValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } diff --git a/lib/momentum/macd/Macd.Validation.Tests.cs b/lib/momentum/macd/Macd.Validation.Tests.cs index f292b71e..a10d1869 100644 --- a/lib/momentum/macd/Macd.Validation.Tests.cs +++ b/lib/momentum/macd/Macd.Validation.Tests.cs @@ -12,10 +12,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class MacdValidationTests : IDisposable +public sealed class MacdValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public MacdValidationTests(ITestOutputHelper output) { @@ -26,14 +27,20 @@ public class MacdValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } @@ -238,3 +245,4 @@ public class MacdValidationTests : IDisposable _output.WriteLine("MACD Streaming validated successfully against Tulip"); } } + diff --git a/lib/momentum/rsi/Rsi.Validation.Tests.cs b/lib/momentum/rsi/Rsi.Validation.Tests.cs index efc5d836..fbe1cfd3 100644 --- a/lib/momentum/rsi/Rsi.Validation.Tests.cs +++ b/lib/momentum/rsi/Rsi.Validation.Tests.cs @@ -11,10 +11,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class RsiValidationTests : IDisposable +public sealed class RsiValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public RsiValidationTests(ITestOutputHelper output) { @@ -25,14 +26,20 @@ public class RsiValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } @@ -262,3 +269,4 @@ public class RsiValidationTests : IDisposable _output.WriteLine("RSI validated successfully against Ooples"); } } + diff --git a/lib/statistics/beta/Beta.Validation.Tests.cs b/lib/statistics/beta/Beta.Validation.Tests.cs index 40bb3064..a8b1a210 100644 --- a/lib/statistics/beta/Beta.Validation.Tests.cs +++ b/lib/statistics/beta/Beta.Validation.Tests.cs @@ -6,7 +6,7 @@ using Skender.Stock.Indicators; namespace QuanTAlib.Tests; -public class BetaValidationTests : IDisposable +public sealed class BetaValidationTests : IDisposable { private readonly ValidationTestData _data; @@ -17,16 +17,7 @@ public class BetaValidationTests : IDisposable public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - _data.Dispose(); - } + _data.Dispose(); } [Fact] diff --git a/lib/statistics/linreg/LinReg.Validation.Tests.cs b/lib/statistics/linreg/LinReg.Validation.Tests.cs index 8ae17849..a685b66e 100644 --- a/lib/statistics/linreg/LinReg.Validation.Tests.cs +++ b/lib/statistics/linreg/LinReg.Validation.Tests.cs @@ -9,7 +9,7 @@ using System.Collections.Generic; namespace QuanTAlib.Tests; -public class LinRegValidationTests : IDisposable +public sealed class LinRegValidationTests : IDisposable { private readonly ValidationTestData _data; @@ -20,16 +20,7 @@ public class LinRegValidationTests : IDisposable public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - _data.Dispose(); - } + _data.Dispose(); } [SkipLocalsInit] diff --git a/lib/statistics/median/Median.Validation.Tests.cs b/lib/statistics/median/Median.Validation.Tests.cs index ce1e9fee..486d1db9 100644 --- a/lib/statistics/median/Median.Validation.Tests.cs +++ b/lib/statistics/median/Median.Validation.Tests.cs @@ -8,22 +8,13 @@ using MathNet.Numerics.Statistics; namespace QuanTAlib.Validation; -public class MedianValidationTests : IDisposable +public sealed class MedianValidationTests : IDisposable { private readonly ValidationTestData _data = new(); public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - _data.Dispose(); - } + _data.Dispose(); } // Note: Standard TA libraries (Skender, TA-Lib, Tulip, Ooples) do not provide a diff --git a/lib/statistics/skew/Skew.Validation.Tests.cs b/lib/statistics/skew/Skew.Validation.Tests.cs index 2dacdbaa..6520a463 100644 --- a/lib/statistics/skew/Skew.Validation.Tests.cs +++ b/lib/statistics/skew/Skew.Validation.Tests.cs @@ -7,22 +7,13 @@ using MathNet.Numerics.Statistics; namespace QuanTAlib.Validation; -public class SkewValidationTests : IDisposable +public sealed class SkewValidationTests : IDisposable { private readonly ValidationTestData _data = new(); public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - _data.Dispose(); - } + _data.Dispose(); } [Fact] diff --git a/lib/trends/alma/Alma.Validation.Tests.cs b/lib/trends/alma/Alma.Validation.Tests.cs index 91c8f496..3c1c4c24 100644 --- a/lib/trends/alma/Alma.Validation.Tests.cs +++ b/lib/trends/alma/Alma.Validation.Tests.cs @@ -9,13 +9,14 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class AlmaValidationTests : IDisposable +public sealed class AlmaValidationTests : IDisposable { // Note: ALMA is not available in TA-Lib or Tulip, // validation is limited to Skender.Stock.Indicators and OoplesFinance.StockIndicators. private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public AlmaValidationTests(ITestOutputHelper output) { @@ -23,23 +24,23 @@ public class AlmaValidationTests : IDisposable _testData = new ValidationTestData(count: 1000, seed: 42); } - private bool _disposed; - public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { - if (!_disposed) + if (_disposed) { - if (disposing) - { - _testData.Dispose(); - } - _disposed = true; + return; + } + + _disposed = true; + + if (disposing) + { + _testData?.Dispose(); } } @@ -151,3 +152,4 @@ public class AlmaValidationTests : IDisposable _output.WriteLine("ALMA Batch validated successfully against Ooples"); } } + diff --git a/lib/trends/bessel/Bessel.Validation.Tests.cs b/lib/trends/bessel/Bessel.Validation.Tests.cs index 6e20fafa..9768beda 100644 --- a/lib/trends/bessel/Bessel.Validation.Tests.cs +++ b/lib/trends/bessel/Bessel.Validation.Tests.cs @@ -4,10 +4,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class BesselValidationTests : IDisposable +public sealed class BesselValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public BesselValidationTests(ITestOutputHelper output) { @@ -18,14 +19,20 @@ public class BesselValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } @@ -51,3 +58,4 @@ public class BesselValidationTests : IDisposable _output.WriteLine("Bessel validated internally: Span vs TSeries are consistent."); } } + diff --git a/lib/trends/bessel/Bessel.cs b/lib/trends/bessel/Bessel.cs index cae93835..e4995c3b 100644 --- a/lib/trends/bessel/Bessel.cs +++ b/lib/trends/bessel/Bessel.cs @@ -322,6 +322,5 @@ public sealed class Bessel : AbstractBase, IDisposable { _publisher.Pub -= _handler; } - GC.SuppressFinalize(this); } } diff --git a/lib/trends/bilateral/Bilateral.Validation.Tests.cs b/lib/trends/bilateral/Bilateral.Validation.Tests.cs index e01d9462..dda25dca 100644 --- a/lib/trends/bilateral/Bilateral.Validation.Tests.cs +++ b/lib/trends/bilateral/Bilateral.Validation.Tests.cs @@ -6,10 +6,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class BilateralValidationTests : IDisposable +public sealed class BilateralValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public BilateralValidationTests(ITestOutputHelper output) { @@ -20,14 +21,20 @@ public class BilateralValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } @@ -184,3 +191,4 @@ public class BilateralValidationTests : IDisposable } } } + diff --git a/lib/trends/conv/Conv.Validation.Tests.cs b/lib/trends/conv/Conv.Validation.Tests.cs index 42036c58..b19a38c2 100644 --- a/lib/trends/conv/Conv.Validation.Tests.cs +++ b/lib/trends/conv/Conv.Validation.Tests.cs @@ -11,7 +11,7 @@ using OoplesFinance.StockIndicators.Models; namespace QuanTAlib; -public class ConvValidationTests : IDisposable +public sealed class ConvValidationTests : IDisposable { private readonly ValidationTestData _testData; private bool _disposed; @@ -24,18 +24,20 @@ public class ConvValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { - if (!_disposed) + if (_disposed) { - if (disposing) - { - _testData.Dispose(); - } - _disposed = true; + return; + } + + _disposed = true; + + if (disposing) + { + _testData?.Dispose(); } } diff --git a/lib/trends/conv/Conv.cs b/lib/trends/conv/Conv.cs index 7548084d..c8e493e1 100644 --- a/lib/trends/conv/Conv.cs +++ b/lib/trends/conv/Conv.cs @@ -64,7 +64,6 @@ public sealed class Conv : AbstractBase, IDisposable { _source.Pub -= _subHandler; } - GC.SuppressFinalize(this); } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/lib/trends/dema/Dema.Validation.Tests.cs b/lib/trends/dema/Dema.Validation.Tests.cs index e0bebe78..c54836a4 100644 --- a/lib/trends/dema/Dema.Validation.Tests.cs +++ b/lib/trends/dema/Dema.Validation.Tests.cs @@ -9,10 +9,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class DemaValidationTests : IDisposable +public sealed class DemaValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public DemaValidationTests(ITestOutputHelper output) { @@ -23,14 +24,20 @@ public class DemaValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } @@ -188,3 +195,4 @@ public class DemaValidationTests : IDisposable _output.WriteLine("DEMA validated successfully against Ooples logic (2*EMA - EMA(EMA))"); } } + diff --git a/lib/trends/dema/Dema.cs b/lib/trends/dema/Dema.cs index 02bab1bc..8565671e 100644 --- a/lib/trends/dema/Dema.cs +++ b/lib/trends/dema/Dema.cs @@ -327,6 +327,5 @@ public sealed class Dema : AbstractBase, IDisposable { _publisher.Pub -= _listener; } - GC.SuppressFinalize(this); } } diff --git a/lib/trends/dwma/Dwma.Validation.Tests.cs b/lib/trends/dwma/Dwma.Validation.Tests.cs index 96198ac2..1101706d 100644 --- a/lib/trends/dwma/Dwma.Validation.Tests.cs +++ b/lib/trends/dwma/Dwma.Validation.Tests.cs @@ -10,10 +10,11 @@ using QuanTAlib.Tests; namespace QuanTAlib; -public class DwmaValidationTests : IDisposable +public sealed class DwmaValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public DwmaValidationTests(ITestOutputHelper output) { @@ -24,14 +25,20 @@ public class DwmaValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } @@ -179,3 +186,4 @@ public class DwmaValidationTests : IDisposable _output.WriteLine("DWMA validated against TA-Lib (Chained WMA)"); } } + diff --git a/lib/trends/ema/Ema.Validation.Tests.cs b/lib/trends/ema/Ema.Validation.Tests.cs index 7a4a19e8..bd654789 100644 --- a/lib/trends/ema/Ema.Validation.Tests.cs +++ b/lib/trends/ema/Ema.Validation.Tests.cs @@ -10,10 +10,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class EmaValidationTests : IDisposable +public sealed class EmaValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public EmaValidationTests(ITestOutputHelper output) { @@ -24,14 +25,20 @@ public class EmaValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } diff --git a/lib/trends/hma/Hma.Validation.Tests.cs b/lib/trends/hma/Hma.Validation.Tests.cs index a10a6f36..31e995f6 100644 --- a/lib/trends/hma/Hma.Validation.Tests.cs +++ b/lib/trends/hma/Hma.Validation.Tests.cs @@ -11,10 +11,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class HmaValidationTests : IDisposable +public sealed class HmaValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public HmaValidationTests(ITestOutputHelper output) { @@ -22,24 +23,24 @@ public class HmaValidationTests : IDisposable _testData = new ValidationTestData(count: 1000, seed: 42); } - private bool _disposed; - - protected virtual void Dispose(bool disposing) - { - if (!_disposed) - { - if (disposing) - { - _testData.Dispose(); - } - _disposed = true; - } - } - public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); + } + + private void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + + _disposed = true; + + if (disposing) + { + _testData?.Dispose(); + } } [Fact] @@ -191,3 +192,4 @@ public class HmaValidationTests : IDisposable _output.WriteLine("HMA Batch(TSeries) validated successfully against Ooples"); } } + diff --git a/lib/trends/htit/Htit.Validation.Tests.cs b/lib/trends/htit/Htit.Validation.Tests.cs index 2dbefcfe..eeb475c9 100644 --- a/lib/trends/htit/Htit.Validation.Tests.cs +++ b/lib/trends/htit/Htit.Validation.Tests.cs @@ -10,9 +10,10 @@ using TALib; namespace QuanTAlib.Tests; -public class HtitValidationTests : IDisposable +public sealed class HtitValidationTests : IDisposable { private readonly ValidationTestData _data; + private bool _disposed; public HtitValidationTests() { @@ -22,14 +23,20 @@ public class HtitValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _data.Dispose(); + _data?.Dispose(); } } diff --git a/lib/trends/kama/Kama.Validation.Tests.cs b/lib/trends/kama/Kama.Validation.Tests.cs index abac83e4..b168e56c 100644 --- a/lib/trends/kama/Kama.Validation.Tests.cs +++ b/lib/trends/kama/Kama.Validation.Tests.cs @@ -11,10 +11,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class KamaValidationTests : IDisposable +public sealed class KamaValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public KamaValidationTests(ITestOutputHelper output) { @@ -25,14 +26,20 @@ public class KamaValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } @@ -269,3 +276,4 @@ public class KamaValidationTests : IDisposable _output.WriteLine("KAMA validated successfully against Ooples"); } } + diff --git a/lib/trends/mgdi/Mgdi.Validation.Tests.cs b/lib/trends/mgdi/Mgdi.Validation.Tests.cs index 76d1bccc..349324ec 100644 --- a/lib/trends/mgdi/Mgdi.Validation.Tests.cs +++ b/lib/trends/mgdi/Mgdi.Validation.Tests.cs @@ -9,7 +9,7 @@ using QuanTAlib; namespace QuanTAlib.Tests; -public class MgdiValidationTests : IDisposable +public sealed class MgdiValidationTests : IDisposable { private readonly ValidationTestData _data; @@ -20,16 +20,7 @@ public class MgdiValidationTests : IDisposable public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - _data.Dispose(); - } + _data.Dispose(); } [Fact] diff --git a/lib/trends/rma/Rma.Validation.Tests.cs b/lib/trends/rma/Rma.Validation.Tests.cs index 9c9af325..9711e771 100644 --- a/lib/trends/rma/Rma.Validation.Tests.cs +++ b/lib/trends/rma/Rma.Validation.Tests.cs @@ -8,7 +8,7 @@ using Xunit; namespace QuanTAlib.Tests; -public class RmaValidationTests : IDisposable +public sealed class RmaValidationTests : IDisposable { private readonly ValidationTestData _testData; private bool _disposed; @@ -21,18 +21,20 @@ public class RmaValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { - if (!_disposed) + if (_disposed) { - if (disposing) - { - _testData.Dispose(); - } - _disposed = true; + return; + } + + _disposed = true; + + if (disposing) + { + _testData?.Dispose(); } } diff --git a/lib/trends/sma/Sma.Tolerance.Tests.cs b/lib/trends/sma/Sma.Tolerance.Tests.cs index 46557930..ce978790 100644 --- a/lib/trends/sma/Sma.Tolerance.Tests.cs +++ b/lib/trends/sma/Sma.Tolerance.Tests.cs @@ -6,7 +6,7 @@ using Xunit; namespace QuanTAlib.Tests; -public class SmaToleranceTests : IDisposable +public sealed class SmaToleranceTests : IDisposable { private readonly ValidationTestData _testData; @@ -17,16 +17,7 @@ public class SmaToleranceTests : IDisposable public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - _testData.Dispose(); - } + _testData.Dispose(); } [Fact] diff --git a/lib/trends/sma/Sma.Validation.Tests.cs b/lib/trends/sma/Sma.Validation.Tests.cs index 80f1b501..67f8747d 100644 --- a/lib/trends/sma/Sma.Validation.Tests.cs +++ b/lib/trends/sma/Sma.Validation.Tests.cs @@ -10,10 +10,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class SmaValidationTests : IDisposable +public sealed class SmaValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public SmaValidationTests(ITestOutputHelper output) { @@ -24,14 +25,20 @@ public class SmaValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } diff --git a/lib/trends/ssf/Ssf.Validation.Tests.cs b/lib/trends/ssf/Ssf.Validation.Tests.cs index 33be0418..43dbe5f9 100644 --- a/lib/trends/ssf/Ssf.Validation.Tests.cs +++ b/lib/trends/ssf/Ssf.Validation.Tests.cs @@ -7,10 +7,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class SsfValidationTests : IDisposable +public sealed class SsfValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public SsfValidationTests(ITestOutputHelper output) { @@ -21,14 +22,20 @@ public class SsfValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } @@ -68,3 +75,4 @@ public class SsfValidationTests : IDisposable _output.WriteLine("SSF validated successfully against Ooples"); } } + diff --git a/lib/trends/super/Super.Validation.Tests.cs b/lib/trends/super/Super.Validation.Tests.cs index 85df24b0..0177fc61 100644 --- a/lib/trends/super/Super.Validation.Tests.cs +++ b/lib/trends/super/Super.Validation.Tests.cs @@ -7,7 +7,7 @@ using QuanTAlib.Tests; namespace QuanTAlib; -public class SuperValidationTests : IDisposable +public sealed class SuperValidationTests : IDisposable { private readonly ValidationTestData _data; @@ -18,16 +18,7 @@ public class SuperValidationTests : IDisposable public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - _data.Dispose(); - } + _data.Dispose(); } [Fact] diff --git a/lib/trends/trima/Trima.Tolerance.Tests.cs b/lib/trends/trima/Trima.Tolerance.Tests.cs index 53af4694..b29b0403 100644 --- a/lib/trends/trima/Trima.Tolerance.Tests.cs +++ b/lib/trends/trima/Trima.Tolerance.Tests.cs @@ -6,7 +6,7 @@ using Xunit; namespace QuanTAlib.Tests; -public class TrimaToleranceTests : IDisposable +public sealed class TrimaToleranceTests : IDisposable { private readonly ValidationTestData _testData; @@ -17,16 +17,7 @@ public class TrimaToleranceTests : IDisposable public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) - { - _testData.Dispose(); - } + _testData.Dispose(); } [Fact] diff --git a/lib/volatility/atr/Atr.Validation.Tests.cs b/lib/volatility/atr/Atr.Validation.Tests.cs index 706a868c..b19d1ac6 100644 --- a/lib/volatility/atr/Atr.Validation.Tests.cs +++ b/lib/volatility/atr/Atr.Validation.Tests.cs @@ -12,10 +12,11 @@ using Xunit.Abstractions; namespace QuanTAlib.Tests; -public class AtrValidationTests : IDisposable +public sealed class AtrValidationTests : IDisposable { private readonly ValidationTestData _testData; private readonly ITestOutputHelper _output; + private bool _disposed; public AtrValidationTests(ITestOutputHelper output) { @@ -26,14 +27,20 @@ public class AtrValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { + if (_disposed) + { + return; + } + + _disposed = true; + if (disposing) { - _testData.Dispose(); + _testData?.Dispose(); } } @@ -247,3 +254,4 @@ public class AtrValidationTests : IDisposable _output.WriteLine("ATR Batch(TSeries) validated successfully against Ooples"); } } + diff --git a/lib/volume/adosc/Adosc.Validation.Tests.cs b/lib/volume/adosc/Adosc.Validation.Tests.cs index e6e4bd9f..ea762e37 100644 --- a/lib/volume/adosc/Adosc.Validation.Tests.cs +++ b/lib/volume/adosc/Adosc.Validation.Tests.cs @@ -12,7 +12,7 @@ using OoplesFinance.StockIndicators.Enums; namespace QuanTAlib; -public class AdoscValidationTests : IDisposable +public sealed class AdoscValidationTests : IDisposable { private readonly ValidationTestData _testData; private bool _disposed; @@ -25,18 +25,20 @@ public class AdoscValidationTests : IDisposable public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { - if (!_disposed) + if (_disposed) { - if (disposing) - { - _testData.Dispose(); - } - _disposed = true; + return; + } + + _disposed = true; + + if (disposing) + { + _testData?.Dispose(); } } @@ -87,7 +89,7 @@ public class AdoscValidationTests : IDisposable var adoscIndicator = Tulip.Indicators.adosc; double[][] inputs = { high, low, close, volume }; double[] options = { fastPeriod, slowPeriod }; - int start = (int)adoscIndicator.Start(options); + int start = adoscIndicator.Start(options); double[][] outputs = { new double[close.Length - start] }; adoscIndicator.Run(inputs, options, outputs); @@ -120,7 +122,7 @@ public class AdoscValidationTests : IDisposable int slowPeriod = 10; var skenderResults = _testData.SkenderQuotes.GetChaikinOsc(fastPeriod, slowPeriod).ToList(); - + // 1. Batch Mode var adosc = new Adosc(fastPeriod, slowPeriod); var result = adosc.Update(_testData.Bars);