예제 #1
0
 private void SaveAndVerifyNotEmpty(ISiteModel model)
 {
     model.Machines.ForEach(x => model.MachinesTargetValues[x.InternalSiteModelMachineIndex]?.SaveMachineEventsToPersistentStore(model.PrimaryStorageProxy));
     model.SaveToPersistentStoreForTAGFileIngest(model.PrimaryStorageProxy);
     model.PrimaryStorageProxy.Commit();
     IsModelEmpty(model, false).Should().BeFalse();
 }
예제 #2
0
        public static void AddSingleSubGridWithPasses(ISiteModel siteModel, int cellX, int cellY, IEnumerable <CellPass>[,] passes)
        {
            // Construct the sub grid to hold the cell being tested
            var leaf = siteModel.Grid.ConstructPathToCell(cellX, cellY, SubGridPathConstructionType.CreateLeaf) as IServerLeafSubGrid;

            leaf.Should().NotBeNull();

            leaf.AllocateLeafFullPassStacks();
            leaf.CreateDefaultSegment();
            leaf.AllocateFullPassStacks(leaf.Directory.SegmentDirectory.First());
            leaf.AllocateLeafLatestPassGrid();

            // Add the leaf to the site model existence map
            siteModel.ExistenceMap[leaf.OriginX >> SubGridTreeConsts.SubGridIndexBitsPerLevel, leaf.OriginY >> SubGridTreeConsts.SubGridIndexBitsPerLevel] = true;

            siteModel.Grid.CountLeafSubGridsInMemory().Should().Be(1);

            SubGridUtilities.SubGridDimensionalIterator((x, y) =>
            {
                CellPass[] _passes = passes[x, y].ToArray();

                byte subGridX = (byte)((cellX + x) & SubGridTreeConsts.SubGridLocalKeyMask);
                byte subGridY = (byte)((cellY + y) & SubGridTreeConsts.SubGridLocalKeyMask);

                foreach (var pass in _passes)
                {
                    leaf.AddPass(subGridX, subGridY, pass);
                }

                // Assign global latest cell pass to the appropriate pass
                leaf.Directory.GlobalLatestCells[subGridX, subGridY] = _passes.Last();

                // Ensure the pass data existence map records the existence of a non null value in the cell
                leaf.Directory.GlobalLatestCells.PassDataExistenceMap[subGridX, subGridY] = true;
            });

            var siteModelExtent = siteModel.Grid.GetCellExtents(cellX, cellY);

            siteModelExtent.Include(siteModel.Grid.GetCellExtents(cellX + SubGridTreeConsts.SubGridTreeDimension, cellY + SubGridTreeConsts.SubGridTreeDimension));
            siteModel.SiteModelExtent.Set(siteModelExtent.MinX, siteModelExtent.MinY, siteModelExtent.MaxX, siteModelExtent.MaxY);

            // Save the leaf information just created
            siteModel.Grid.SaveLeafSubGrid(leaf, siteModel.PrimaryStorageProxy, siteModel.PrimaryStorageProxy, new List <ISubGridSpatialAffinityKey>());

            siteModel.SaveToPersistentStoreForTAGFileIngest(siteModel.PrimaryStorageProxy);
        }
예제 #3
0
        public static void AddMultipleCellsWithPasses(ISiteModel siteModel, int cellX, int cellY,
                                                      List <CellPass[]> passesList, int expectedCellCount = -1, int expectedPassCount = -1)
        {
            // Construct the sub grid to hold the cell being tested
            IServerLeafSubGrid leaf = siteModel.Grid.ConstructPathToCell(cellX, cellY, SubGridPathConstructionType.CreateLeaf) as IServerLeafSubGrid;

            leaf.Should().NotBeNull();

            leaf.AllocateLeafFullPassStacks();
            leaf.CreateDefaultSegment();
            leaf.AllocateFullPassStacks(leaf.Directory.SegmentDirectory.First());
            leaf.AllocateLeafLatestPassGrid();

            // Add the leaf to the site model existence map
            siteModel.ExistenceMap[leaf.OriginX >> SubGridTreeConsts.SubGridIndexBitsPerLevel, leaf.OriginY >> SubGridTreeConsts.SubGridIndexBitsPerLevel] = true;

            long totalCells = 0;

            for (var i = 0; i < passesList.Count; i++)
            {
                //CellPass[] _passes = passes.ToArray();

                byte subGridX = (byte)(cellX & SubGridTreeConsts.SubGridLocalKeyMask);
                byte subGridY = (byte)(cellY & SubGridTreeConsts.SubGridLocalKeyMask);

                foreach (var pass in passesList[i])
                {
                    leaf.AddPass(subGridX, subGridY, pass);
                }

                var cellPasses = leaf.Cells.PassesData[i].PassesData.ExtractCellPasses(subGridX, subGridY);
                if (expectedPassCount > -1)
                {
                    ((int)cellPasses.PassCount).Should().Be(expectedPassCount);
                }

                // Assign global latest cell pass to the appropriate pass
                leaf.Directory.GlobalLatestCells[subGridX, subGridY] = cellPasses.Passes.Last();

                // Ensure the pass data existence map records the existence of a non null value in the cell
                leaf.Directory.GlobalLatestCells.PassDataExistenceMap[subGridX, subGridY] = true;

                if (expectedCellCount > -1)
                {
                    // Count the number of non-null elevation cells to verify a correct setup
                    siteModel.Grid.Root.ScanSubGrids(siteModel.Grid.FullCellExtent(), x =>
                    {
                        totalCells += leaf.Directory.GlobalLatestCells.PassDataExistenceMap.CountBits();
                        return(true);
                    });
                }

                siteModel.SiteModelExtent.Include(siteModel.Grid.GetCellExtents(cellX, cellY));
            }

            totalCells.Should().Be(expectedCellCount);

            // Save the leaf information just created
            siteModel.Grid.SaveLeafSubGrid(leaf, siteModel.PrimaryStorageProxy, siteModel.PrimaryStorageProxy, new List <ISubGridSpatialAffinityKey>());

            siteModel.SaveToPersistentStoreForTAGFileIngest(siteModel.PrimaryStorageProxy);
        }