Exemplo n.º 1
0
        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());
        }