refactor: update validation test classes to be sealed and simplify Dispose methods

This commit is contained in:
Miha Kralj
2025-12-26 16:43:23 -08:00
parent bfb0f6a322
commit 4750c2b1e8
31 changed files with 238 additions and 228 deletions
+13 -11
View File
@@ -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");
}
}
+12 -4
View File
@@ -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.");
}
}
-1
View File
@@ -322,6 +322,5 @@ public sealed class Bessel : AbstractBase, IDisposable
{
_publisher.Pub -= _handler;
}
GC.SuppressFinalize(this);
}
}
@@ -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
}
}
}
+11 -9
View File
@@ -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();
}
}
-1
View File
@@ -64,7 +64,6 @@ public sealed class Conv : AbstractBase, IDisposable
{
_source.Pub -= _subHandler;
}
GC.SuppressFinalize(this);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
+12 -4
View File
@@ -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))");
}
}
-1
View File
@@ -327,6 +327,5 @@ public sealed class Dema : AbstractBase, IDisposable
{
_publisher.Pub -= _listener;
}
GC.SuppressFinalize(this);
}
}
+12 -4
View File
@@ -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)");
}
}
+11 -4
View File
@@ -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();
}
}
+18 -16
View File
@@ -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");
}
}
+11 -4
View File
@@ -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();
}
}
+12 -4
View File
@@ -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");
}
}
+2 -11
View File
@@ -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]
+11 -9
View File
@@ -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();
}
}
+2 -11
View File
@@ -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]
+11 -4
View File
@@ -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();
}
}
+12 -4
View File
@@ -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");
}
}
+2 -11
View File
@@ -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]
+2 -11
View File
@@ -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]