134 lines
4.4 KiB
C#
134 lines
4.4 KiB
C#
using Xunit;
|
|
using ThreatSource.Indicator;
|
|
using ThreatSource.Simulation;
|
|
using ThreatSource.Utils;
|
|
using ThreatSource.Tests.Simulation;
|
|
using ThreatSource.Equipment;
|
|
using ThreatSource.Jammer;
|
|
|
|
namespace ThreatSource.Tests.Indicator
|
|
{
|
|
public class LaserDesignatorTests
|
|
{
|
|
private readonly SimulationManager _simulationManager;
|
|
private readonly TestSimulationAdapter _testAdapter;
|
|
private readonly LaserDesignator _laserDesignator;
|
|
private readonly LaserDesignatorConfig _config;
|
|
private readonly Tank _tank;
|
|
|
|
public LaserDesignatorTests()
|
|
{
|
|
_simulationManager = new SimulationManager();
|
|
_testAdapter = new TestSimulationAdapter(_simulationManager);
|
|
_simulationManager.SetSimulationAdapter(_testAdapter);
|
|
|
|
_config = new LaserDesignatorConfig
|
|
{
|
|
LaserPower = 1000,
|
|
LaserDivergenceAngle = 0.001,
|
|
JammingResistanceThreshold = 1.0,
|
|
LaserWavelength = 1.06
|
|
};
|
|
|
|
var tankInitialMotion = new MotionParameters
|
|
{
|
|
Position = new Vector3D(100, 0, 0),
|
|
Orientation = new Orientation(0, 0, 0),
|
|
InitialSpeed = 0
|
|
};
|
|
|
|
var tankProperties = new EquipmentProperties
|
|
{
|
|
RadarCrossSection = 1.0,
|
|
InfraredRadiationIntensity = 10.0,
|
|
UltravioletRadiationIntensity = 10.0,
|
|
MillimeterWaveRadiationIntensity = 10.0
|
|
};
|
|
_tank = new Tank("target1", tankProperties, tankInitialMotion, _simulationManager);
|
|
_simulationManager.RegisterEntity("target1", _tank);
|
|
|
|
var designatorInitialMotion = new MotionParameters
|
|
{
|
|
Position = new Vector3D(0, 100, 0),
|
|
Orientation = new Orientation(0, 0, 0),
|
|
InitialSpeed = 0
|
|
};
|
|
|
|
_laserDesignator = new LaserDesignator(
|
|
"laser1",
|
|
"target1",
|
|
"missile1",
|
|
_config,
|
|
designatorInitialMotion,
|
|
_simulationManager
|
|
);
|
|
_simulationManager.RegisterEntity("laser1", _laserDesignator);
|
|
}
|
|
|
|
[Fact]
|
|
public void Constructor_InitializesPropertiesCorrectly()
|
|
{
|
|
Assert.Equal("laser1", _laserDesignator.Id);
|
|
Assert.Equal("target1", _laserDesignator.TargetId);
|
|
Assert.Equal("missile1", _laserDesignator.MissileId);
|
|
Assert.Equal(1000, _laserDesignator.config.LaserPower);
|
|
Assert.Equal(0.001, _laserDesignator.config.LaserDivergenceAngle);
|
|
Assert.False(_laserDesignator.IsActive);
|
|
Assert.False(_laserDesignator.IsIlluminationOn);
|
|
Assert.False(_laserDesignator.IsJammed);
|
|
}
|
|
|
|
[Fact]
|
|
public void Activate_SetsCorrectState()
|
|
{
|
|
// Act
|
|
_laserDesignator.Activate();
|
|
|
|
// Assert
|
|
Assert.True(_laserDesignator.IsActive);
|
|
}
|
|
|
|
[Fact]
|
|
public void Deactivate_SetsCorrectState()
|
|
{
|
|
// Arrange
|
|
_laserDesignator.Activate();
|
|
|
|
// Act
|
|
_laserDesignator.Deactivate();
|
|
|
|
// Assert
|
|
Assert.False(_laserDesignator.IsActive);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(1000000, true)] // 高功率干扰
|
|
[InlineData(1, false)] // 低功率干扰
|
|
public void LaserJamming_SetsCorrectJammedState(double jammingPower, bool expectedJammedState)
|
|
{
|
|
// Arrange
|
|
_laserDesignator.Activate();
|
|
|
|
// Act
|
|
_simulationManager.PublishEvent(new JammingEvent
|
|
{
|
|
Parameters = new JammingParameters
|
|
{
|
|
JammerId = "jammer1",
|
|
Power = jammingPower,
|
|
Wavelength = 1.06,
|
|
SourcePosition = new Vector3D(0, 10, 0),
|
|
Direction = new Vector3D(0, 1, 0),
|
|
AngleRange = Math.PI / 4,
|
|
Mode = JammingMode.Blocking,
|
|
Type = JammingType.Laser,
|
|
Duration = null
|
|
}
|
|
});
|
|
_laserDesignator.Update(0.1);
|
|
|
|
// Assert
|
|
Assert.Equal(expectedJammedState, _laserDesignator.IsJammed);
|
|
}
|
|
}
|
|
} |