public void Test_S2CellUnion_LeafCellsCovered() { S2CellUnion cell_union = new(); Assert.Equal(0UL, cell_union.LeafCellsCovered()); var ids = new List <S2CellId> { // One leaf cell on face 0. S2CellId.FromFace(0).ChildBegin(S2.kMaxCellLevel) }; cell_union = new S2CellUnion(ids); Assert.Equal(1UL, cell_union.LeafCellsCovered()); // Face 0 itself (which includes the previous leaf cell). ids.Add(S2CellId.FromFace(0)); cell_union = new S2CellUnion(ids); Assert.Equal(1UL << 60, cell_union.LeafCellsCovered()); // Five faces. cell_union.Expand(0); Assert.Equal(5UL << 60, cell_union.LeafCellsCovered()); // Whole world. cell_union.Expand(0); Assert.Equal(6UL << 60, cell_union.LeafCellsCovered()); // Add some disjoint cells. ids.Add(S2CellId.FromFace(1).ChildBegin(1)); ids.Add(S2CellId.FromFace(2).ChildBegin(2)); ids.Add(S2CellId.FromFace(2).ChildEnd(2).Prev()); ids.Add(S2CellId.FromFace(3).ChildBegin(14)); ids.Add(S2CellId.FromFace(4).ChildBegin(27)); ids.Add(S2CellId.FromFace(4).ChildEnd(15).Prev()); ids.Add(S2CellId.FromFace(5).ChildBegin(30)); cell_union = new S2CellUnion(ids); UInt64 expected = 1UL + (1UL << 6) + (1UL << 30) + (1UL << 32) + (2UL << 56) + (1UL << 58) + (1UL << 60); Assert.Equal(expected, cell_union.LeafCellsCovered()); }