Files
RobustToolbox/Robust.UnitTesting/Shared/Utility/TextRope_Test.cs

147 lines
4.0 KiB
C#

using System.Diagnostics.CodeAnalysis;
using System.Linq;
using NUnit.Framework;
using Robust.Shared.Utility;
namespace Robust.UnitTesting.Shared.Utility;
[TestFixture]
[TestOf(typeof(Rope))]
[Parallelizable(ParallelScope.All)]
public 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;
}
}