Files
RobustToolbox/Robust.Shared.Tests/Utility/TextRope_Test.cs
PJB3005 788e9386fd Split up test project
Robust.UnitTesting was both ALL tests for RT, and also API surface for content tests.

Tests are now split into separate projects as appropriate, and the API side has also been split off.
2025-12-16 01:36:53 +01:00

145 lines
4.0 KiB
C#

using NUnit.Framework;
using Robust.Shared.Utility;
namespace Robust.Shared.Tests.Utility;
[TestFixture]
[TestOf(typeof(Rope))]
[Parallelizable(ParallelScope.All)]
internal static class TextRope_Test
{
[Test]
public static void TestCalcWeight()
{
// Just using the example from Wikipedia:
// https://commons.wikimedia.org/wiki/File:Vector_Rope_example.svg
BuildExample(out var tree);
Assert.Multiple(() =>
{
Assert.That(tree.NodeN.Weight, Is.EqualTo(6));
Assert.That(tree.NodeM.Weight, Is.EqualTo(1));
Assert.That(tree.NodeK.Weight, Is.EqualTo(4));
Assert.That(tree.NodeJ.Weight, Is.EqualTo(2));
Assert.That(tree.NodeF.Weight, Is.EqualTo(3));
Assert.That(tree.NodeE.Weight, Is.EqualTo(6));
Assert.That(tree.NodeH.Weight, Is.EqualTo(1));
Assert.That(tree.NodeG.Weight, Is.EqualTo(2));
Assert.That(tree.NodeC.Weight, Is.EqualTo(6));
Assert.That(tree.NodeD.Weight, Is.EqualTo(6));
Assert.That(tree.NodeB.Weight, Is.EqualTo(9));
Assert.That(tree.NodeA.Weight, Is.EqualTo(22));
});
}
[Test]
public static void TestCollect()
{
var tree = BuildExample(out _);
var leaves = Rope.CollectLeaves(tree).Select(x => x.Text).ToArray();
Assert.That(leaves, Is.EquivalentTo(new[]
{
"Hello ", "my ", "na", "me i", "s", " Simon"
}));
}
[Test]
public static void TestCollectReverse()
{
var tree = BuildExample(out _);
var leaves = Rope.CollectLeavesReverse(tree).Select(x => x.Text).ToArray();
Assert.That(leaves, Is.EquivalentTo(new[]
{
"Hello ", "my ", "na", "me i", "s", " Simon"
}.Reverse()));
}
[Test]
public static void TestCollapse()
{
var tree = BuildExample(out _);
Assert.That(Rope.Collapse(tree), Is.EqualTo("Hello my name is Simon"));
}
[Test]
public static void TestSplit()
{
var tree = BuildExample(out _);
var (left, right) = Rope.Split(tree, 7);
Assert.Multiple(() =>
{
Assert.That(Rope.Collapse(left), Is.EqualTo("Hello m"));
Assert.That(Rope.Collapse(right), Is.EqualTo("y name is Simon"));
});
}
[Test]
public static void TestDelete()
{
var tree = BuildExample(out _);
tree = Rope.Delete(tree, 2, 11);
Assert.That(Rope.Collapse(tree), Is.EqualTo("He is Simon"));
}
[Test]
public static void TestEnumerateRunesReverseSub()
{
var tree = BuildExample(out _);
var runes = Rope.EnumerateRunesReverse(tree, 10);
Assert.That(
runes,
Is.EquivalentTo("Hello my n".EnumerateRunes().Reverse()));
}
private static Rope.Node BuildExample(out ExampleTree tree)
{
tree = default;
tree.NodeN = new Rope.Leaf(" Simon");
tree.NodeM = new Rope.Leaf("s");
tree.NodeK = new Rope.Leaf("me i");
tree.NodeJ = new Rope.Leaf("na");
tree.NodeF = new Rope.Leaf("my ");
tree.NodeE = new Rope.Leaf("Hello ");
tree.NodeH = new Rope.Branch(tree.NodeM, tree.NodeN);
tree.NodeG = new Rope.Branch(tree.NodeJ, tree.NodeK);
tree.NodeC = new Rope.Branch(tree.NodeE, tree.NodeF);
tree.NodeD = new Rope.Branch(tree.NodeG, tree.NodeH);
tree.NodeB = new Rope.Branch(tree.NodeC, tree.NodeD);
tree.NodeA = new Rope.Branch(tree.NodeB, null);
return tree.NodeA;
}
public struct ExampleTree
{
public Rope.Node NodeN;
public Rope.Node NodeM;
public Rope.Node NodeK;
public Rope.Node NodeJ;
public Rope.Node NodeF;
public Rope.Node NodeE;
public Rope.Node NodeH;
public Rope.Node NodeG;
public Rope.Node NodeC;
public Rope.Node NodeD;
public Rope.Node NodeB;
public Rope.Node NodeA;
}
}