Fix ScaleSolution() (#13630)

This commit is contained in:
Leon Friedrich
2023-01-22 03:35:12 +13:00
committed by GitHub
parent a9b9dc0a10
commit c3e6ac2563
2 changed files with 48 additions and 2 deletions

View File

@@ -317,7 +317,7 @@ namespace Content.Shared.Chemistry.Components
if (scale == 1) if (scale == 1)
return; return;
if (scale == 0) if (scale <= 0)
{ {
RemoveAllSolution(); RemoveAllSolution();
return; return;
@@ -326,7 +326,7 @@ namespace Content.Shared.Chemistry.Components
_heatCapacity *= scale; _heatCapacity *= scale;
Volume *= scale; Volume *= scale;
for (int i = 0; i <= Contents.Count; i++) for (int i = 0; i < Contents.Count; i++)
{ {
var old = Contents[i]; var old = Contents[i];
Contents[i] = new ReagentQuantity(old.ReagentId, old.Quantity * scale); Contents[i] = new ReagentQuantity(old.ReagentId, old.Quantity * scale);

View File

@@ -3,6 +3,7 @@ using Content.Shared.FixedPoint;
using Robust.Shared.IoC; using Robust.Shared.IoC;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using NUnit.Framework; using NUnit.Framework;
using Robust.Shared.Utility;
namespace Content.Tests.Shared.Chemistry; namespace Content.Tests.Shared.Chemistry;
@@ -25,6 +26,51 @@ public sealed class Solution_Tests : ContentUnitTest
Assert.That(quantity.Int(), Is.EqualTo(1000)); Assert.That(quantity.Int(), Is.EqualTo(1000));
} }
[Test]
public void ScaleSolution()
{
var solution = new Solution();
solution.AddReagent("water", FixedPoint2.New(20));
solution.AddReagent("fire", FixedPoint2.New(30));
// Test integer scaling
{
var tmp = solution.Clone();
tmp.ScaleSolution(0);
Assert.That(tmp.Contents.Count, Is.EqualTo(0));
Assert.That(tmp.Volume, Is.EqualTo(FixedPoint2.Zero));
tmp = solution.Clone();
tmp.ScaleSolution(2);
Assert.That(tmp.Contents.Count, Is.EqualTo(2));
Assert.That(tmp.Volume, Is.EqualTo(FixedPoint2.New(100)));
Assert.That(tmp.GetReagentQuantity("water"), Is.EqualTo(FixedPoint2.New(40)));
Assert.That(tmp.GetReagentQuantity("fire"), Is.EqualTo(FixedPoint2.New(60)));
}
// Test float scaling
{
var tmp = solution.Clone();
tmp.ScaleSolution(0f);
Assert.That(tmp.Contents.Count, Is.EqualTo(0));
Assert.That(tmp.Volume, Is.EqualTo(FixedPoint2.Zero));
tmp = solution.Clone();
tmp.ScaleSolution(2f);
Assert.That(tmp.Contents.Count, Is.EqualTo(2));
Assert.That(tmp.Volume, Is.EqualTo(FixedPoint2.New(100)));
Assert.That(tmp.GetReagentQuantity("water"), Is.EqualTo(FixedPoint2.New(40)));
Assert.That(tmp.GetReagentQuantity("fire"), Is.EqualTo(FixedPoint2.New(60)));
tmp = solution.Clone();
tmp.ScaleSolution(0.3f);
Assert.That(tmp.Contents.Count, Is.EqualTo(2));
Assert.That(tmp.Volume, Is.EqualTo(FixedPoint2.New(15)));
Assert.That(tmp.GetReagentQuantity("water"), Is.EqualTo(FixedPoint2.New(6)));
Assert.That(tmp.GetReagentQuantity("fire"), Is.EqualTo(FixedPoint2.New(9)));
}
}
[Test] [Test]
public void ConstructorAddReagent() public void ConstructorAddReagent()
{ {