public void Move() { var arr = new int[500]; for (int i = 0; i < arr.Length; i++) { arr[i] = (i + 1) % arr.Length; } var rnd = new Random(); var db = new PathDoubling(arr); for (int i = 0; i < 500; i++) { for (int k = 0; k < 20; k++) { db.Move(i, k).Should().Be((i + k) % arr.Length); } } Span <ulong> ks = stackalloc ulong[1]; for (int t = 0; t < 128; t++) { rnd.NextBytes(ks.Cast <ulong, byte>()); var k = ks[0]; for (int i = 0; i < 500; i++) { db.Move(i, k).Should().Be((int)(((uint)i + k) % (uint)arr.Length)); if ((long)k >= 0) { db.Move(i, (long)k).Should().Be((int)(((uint)i + k) % (uint)arr.Length)); } } } }
public void Tree() { var arr = new int[7] { -1, 0, 2, 1, 3, 2, 1, }; var db = new PathDoubling(arr); db.Move(0, 1).Should().Be(-1); db.Move(1, 1).Should().Be(0); db.Move(2, 1).Should().Be(2); db.Move(3, 1).Should().Be(1); db.Move(4, 1).Should().Be(3); db.Move(5, 1).Should().Be(2); db.Move(6, 1).Should().Be(1); db.Move(0, 2).Should().Be(-1); db.Move(1, 2).Should().Be(-1); db.Move(2, 2).Should().Be(2); db.Move(3, 2).Should().Be(0); db.Move(4, 2).Should().Be(1); db.Move(5, 2).Should().Be(2); db.Move(6, 2).Should().Be(0); db.Move(0, 3).Should().Be(-1); db.Move(1, 3).Should().Be(-1); db.Move(2, 3).Should().Be(2); db.Move(3, 3).Should().Be(-1); db.Move(4, 3).Should().Be(0); db.Move(5, 3).Should().Be(2); db.Move(6, 3).Should().Be(-1); db.Move(0, 4).Should().Be(-1); db.Move(1, 4).Should().Be(-1); db.Move(2, 4).Should().Be(2); db.Move(3, 4).Should().Be(-1); db.Move(4, 4).Should().Be(-1); db.Move(5, 4).Should().Be(2); db.Move(6, 4).Should().Be(-1); db.Move(0, 5).Should().Be(-1); db.Move(1, 5).Should().Be(-1); db.Move(2, 5).Should().Be(2); db.Move(3, 5).Should().Be(-1); db.Move(4, 5).Should().Be(-1); db.Move(5, 5).Should().Be(2); db.Move(6, 5).Should().Be(-1); db.Move(0, 1L << 20).Should().Be(-1); db.Move(1, 1L << 20).Should().Be(-1); db.Move(2, 1L << 20).Should().Be(2); db.Move(3, 1L << 20).Should().Be(-1); db.Move(4, 1L << 20).Should().Be(-1); db.Move(5, 1L << 20).Should().Be(2); db.Move(6, 1L << 20).Should().Be(-1); }