public void GivenRandomPopulatedTreeWhenTryGetNextReturnsCorrectValue() { var tree = new VanEmdeBoasTree64(); var rand = new Random(); var list = new List <ulong>(); for (int i = 0; i < 1 << 17; i++) { var elem = GetRandomUlong(rand); list.Add(elem); tree.Add(elem); } list.Sort(); var arr = list.OrderBy(x => x).Distinct().ToArray(); if (arr[0] != 0) { Assert.True(tree.TryGetNext(0, out ulong res)); Assert.Equal(arr[0], res); } for (int i = 1; i < arr.Length - 1; i++) { if (arr[i] - arr[i - 1] > 1) { Assert.True(tree.TryGetNext((arr[i] - arr[i - 1]) / 2 + arr[i - 1], out ulong next)); Assert.Equal(arr[i], next); } Assert.True(tree.TryGetNext(arr[i - 1], out ulong res)); Assert.Equal(arr[i], res); } Assert.False(tree.TryGetNext(arr[arr.Length - 1], out ulong _)); }
public void GivenEmptyTreeWhenTryGetNextReturnsFalse() { var tree = new VanEmdeBoasTree64(); Assert.False(tree.TryGetNext(ulong.MinValue, out ulong _)); }