public void NearestBelowTest() { Assert.Equal(0UL, ZCurve.NearestBelow(0, 0)); Assert.Equal(0UL, ZCurve.NearestBelow(0, 1)); Assert.Equal(1UL, ZCurve.NearestBelow(0, 2)); Assert.Equal(2UL, ZCurve.NearestBelow(0, 3)); Assert.Equal(0x2AAAAAAAUL, ZCurve.NearestBelow(0, 31)); Assert.Equal(0x2AAAAAAAAAAAAAAAUL, ZCurve.NearestBelow(0, 63)); // 55 = Z(7,5) // 0111b 0101b => 0011 0111b Assert.Equal(54UL, ZCurve.NearestBelow(55, 0)); Assert.Equal(53UL, ZCurve.NearestBelow(55, 1)); Assert.Equal(51UL, ZCurve.NearestBelow(55, 2)); Assert.Equal(55UL, ZCurve.NearestBelow(55, 3)); Assert.Equal(39UL, ZCurve.NearestBelow(55, 4)); Assert.Equal(31UL, ZCurve.NearestBelow(55, 5)); Assert.Equal(55UL, ZCurve.NearestBelow(55, 6)); Assert.Equal(63UL, ZCurve.NearestBelow(55, 7)); Assert.Equal(ZCurve.Encode(7, 0x7FFF), ZCurve.NearestBelow(55, 31)); Assert.Equal(ZCurve.Encode(7, int.MaxValue), ZCurve.NearestBelow(55, 63)); // TODO More }