Files
QuanTAlib/lib/momentum/rsi/tests/Rsi.Quantower.Tests.cs
T
Miha Kralj 060649192f docs: remove C# Implementation Considerations sections, clean up temp scripts, reorganize test files
- Remove 'C# Implementation Considerations' sections from 34 indicator .md files
- Delete 29 temp PowerShell scripts (_fix_mojibake.ps1, _hex_scan.ps1, etc.)
- Move test files into tests/ subdirectories for consistent project structure
- Add trader-focused bullet points to indicator documentation
2026-03-12 12:34:16 -07:00

98 lines
2.9 KiB
C#

using TradingPlatform.BusinessLayer;
using QuanTAlib;
namespace QuanTAlib.Tests;
public class RsiIndicatorTests
{
[Fact]
public void RsiIndicator_Constructor_SetsDefaults()
{
var indicator = new RsiIndicator();
Assert.Equal("RSI - Relative Strength Index", indicator.Name);
Assert.True(indicator.SeparateWindow);
Assert.True(indicator.OnBackGround);
Assert.Equal(14, indicator.Period);
}
[Fact]
public void RsiIndicator_MinHistoryDepths_EqualsPeriod()
{
var indicator = new RsiIndicator
{
Period = 20,
};
Assert.Equal(0, RsiIndicator.MinHistoryDepths);
IWatchlistIndicator watchlistIndicator = indicator;
Assert.Equal(0, watchlistIndicator.MinHistoryDepths);
}
[Fact]
public void RsiIndicator_ShortName_IncludesPeriod()
{
var indicator = new RsiIndicator
{
Period = 20,
};
indicator.Initialize();
Assert.Contains("RSI(20)", indicator.ShortName, StringComparison.Ordinal);
}
[Fact]
public void RsiIndicator_SourceCodeLink_IsValid()
{
var indicator = new RsiIndicator();
Assert.Contains("github.com", indicator.SourceCodeLink, StringComparison.Ordinal);
Assert.Contains("Rsi.Quantower.cs", indicator.SourceCodeLink, StringComparison.Ordinal);
}
[Fact]
public void RsiIndicator_Initialize_CreatesInternalRsi()
{
var indicator = new RsiIndicator();
// Initialize should not throw
indicator.Initialize();
// After init, line series should exist (RSI)
Assert.Single(indicator.LinesSeries);
}
[Fact]
public void RsiIndicator_ProcessUpdate_HistoricalBar_ComputesValue()
{
var indicator = new RsiIndicator
{
Period = 2, // Short period for testing
};
indicator.Initialize();
// Add historical data
var now = DateTime.UtcNow;
indicator.HistoricalData.AddBar(now, 100, 105, 95, 100);
indicator.HistoricalData.AddBar(now.AddMinutes(1), 100, 105, 95, 102); // Gain 2
indicator.HistoricalData.AddBar(now.AddMinutes(2), 100, 105, 95, 101); // Loss 1
// Process updates
var args = new UpdateArgs(UpdateReason.HistoricalBar);
// We need to process updates sequentially to build state
// But the mock might not support full stateful replay easily without calling ProcessUpdate multiple times
// Let's just verify it runs without error and produces a value
indicator.ProcessUpdate(args); // Bar 0
indicator.ProcessUpdate(args); // Bar 1
indicator.ProcessUpdate(args); // Bar 2
// Line series should have a value
double rsi = indicator.LinesSeries[0].GetValue(0);
// We just check it's a valid number (0-100)
Assert.True(rsi >= 0 && rsi <= 100);
}
}