protected static void Verify(ExpectedTreeChanges expectedGrowth, OrganonWarnings expectedWarnings, TestStand stand, OrganonVariant variant) { Assert.IsTrue(stand.AgeInYears >= 0); Assert.IsTrue(stand.AgeInYears <= TestConstant.Maximum.StandAgeInYears); Assert.IsTrue(stand.BreastHeightAgeInYears >= 0); Assert.IsTrue(stand.BreastHeightAgeInYears <= TestConstant.Maximum.StandAgeInYears); Assert.IsTrue(stand.NumberOfPlots >= 1); Assert.IsTrue(stand.NumberOfPlots <= 36); Assert.IsTrue(stand.TreesBySpecies.Count > 0); Assert.IsTrue(stand.GetTreeRecordCount() > 0); foreach (Trees treesOfSpecies in stand.TreesBySpecies.Values) { FiaCode species = treesOfSpecies.Species; Assert.IsTrue(Enum.IsDefined(typeof(FiaCode), species)); for (int treeIndex = 0; treeIndex < treesOfSpecies.Count; ++treeIndex) { // primary tree data float crownRatio = treesOfSpecies.CrownRatio[treeIndex]; Assert.IsTrue(crownRatio >= 0.0F); Assert.IsTrue(crownRatio <= 1.0F); float dbhInInches = treesOfSpecies.Dbh[treeIndex]; Assert.IsTrue(dbhInInches >= 0.0F); Assert.IsTrue(dbhInInches <= TestConstant.Maximum.DiameterInInches); float expansionFactor = treesOfSpecies.LiveExpansionFactor[treeIndex]; Assert.IsTrue(expansionFactor >= 0.0F); Assert.IsTrue(expansionFactor <= TestConstant.Maximum.ExpansionFactor); float heightInFeet = treesOfSpecies.Height[treeIndex]; Assert.IsTrue(heightInFeet >= 0.0F); Assert.IsTrue(heightInFeet <= TestConstant.Maximum.HeightInFeet); float deadExpansionFactor = treesOfSpecies.DeadExpansionFactor[treeIndex]; Assert.IsTrue(deadExpansionFactor >= 0.0F); Assert.IsTrue(deadExpansionFactor <= TestConstant.Maximum.ExpansionFactor); Assert.IsTrue(expansionFactor + deadExpansionFactor <= TestConstant.Maximum.ExpansionFactor); // diameter and height growth float diameterGrowthInInches = treesOfSpecies.DbhGrowth[treeIndex]; if (expectedGrowth.HasFlag(ExpectedTreeChanges.DiameterGrowth)) { Assert.IsTrue(diameterGrowthInInches > 0.0F, "{0}: {1} {2} did not grow in diameter.", variant.TreeModel, treesOfSpecies.Species, treeIndex); Assert.IsTrue(diameterGrowthInInches <= 0.1F * TestConstant.Maximum.DiameterInInches); } else if (expectedGrowth.HasFlag(ExpectedTreeChanges.DiameterGrowthOrNoChange)) { Assert.IsTrue(diameterGrowthInInches >= 0.0F); Assert.IsTrue(diameterGrowthInInches <= 0.1F * TestConstant.Maximum.DiameterInInches); } else { Assert.IsTrue(diameterGrowthInInches == 0.0F); } float heightGrowthInFeet = treesOfSpecies.HeightGrowth[treeIndex]; if (expectedGrowth.HasFlag(ExpectedTreeChanges.HeightGrowth)) { Assert.IsTrue(heightGrowthInFeet > 0.0F, "{0}: {1} {2} did not grow in height.", variant.TreeModel, treesOfSpecies.Species, treeIndex); Assert.IsTrue(heightGrowthInFeet <= 0.1F * TestConstant.Maximum.HeightInFeet); } else if (expectedGrowth.HasFlag(ExpectedTreeChanges.HeightGrowthOrNoChange)) { Assert.IsTrue(heightGrowthInFeet >= 0.0F, "{0}: {1} {2} decreased in height.", variant.TreeModel, treesOfSpecies.Species, treeIndex); Assert.IsTrue(heightGrowthInFeet <= 0.1F * TestConstant.Maximum.HeightInFeet); } else { Assert.IsTrue(heightGrowthInFeet == 0.0F); } // for now, ignore warnings on height exceeding potential height // Assert.IsTrue(stand.TreeWarnings[treeWarningIndex] == 0); } for (int treeIndex = treesOfSpecies.Count; treeIndex < treesOfSpecies.Capacity; ++treeIndex) { Assert.IsTrue(treesOfSpecies.CrownRatio[treeIndex] == 0.0F); Assert.IsTrue(treesOfSpecies.Dbh[treeIndex] == 0.0F); Assert.IsTrue(treesOfSpecies.DeadExpansionFactor[treeIndex] == 0.0F); Assert.IsTrue(treesOfSpecies.Height[treeIndex] == 0.0F); Assert.IsTrue(treesOfSpecies.LiveExpansionFactor[treeIndex] == 0.0F); } } Assert.IsTrue(stand.Warnings.BigSixHeightAbovePotential == false); Assert.IsTrue(stand.Warnings.LessThan50TreeRecords == expectedWarnings.HasFlag(OrganonWarnings.LessThan50TreeRecords)); Assert.IsTrue(stand.Warnings.HemlockSiteIndexOutOfRange == expectedWarnings.HasFlag(OrganonWarnings.HemlockSiteIndex)); Assert.IsTrue(stand.Warnings.OtherSpeciesBasalAreaTooHigh == false); Assert.IsTrue(stand.Warnings.SiteIndexOutOfRange == false); if (variant.TreeModel != TreeModel.OrganonSmc) { // for now, ignore SMC warning for breast height age < 10 Assert.IsTrue(stand.Warnings.TreesOld == false); } // for now, ignore stand.Warnings.TreesYoung }
protected static void Verify(ExpectedTreeChanges expectedGrowth, TreeLifeAndDeath treeGrowth, TestStand initialStand, TestStand finalStand) { foreach (Trees finalTreesOfSpecies in finalStand.TreesBySpecies.Values) { float[] diameterGrowthOfSpecies = treeGrowth.TotalDbhGrowthInInches[finalTreesOfSpecies.Species]; float[] deathOfSpecies = treeGrowth.TotalDeadExpansionFactor[finalTreesOfSpecies.Species]; float[] heightGrowthOfSpecies = treeGrowth.TotalHeightGrowthInFeet[finalTreesOfSpecies.Species]; Trees initialTreesOfSpecies = initialStand.TreesBySpecies[finalTreesOfSpecies.Species]; for (int treeIndex = 0; treeIndex < finalTreesOfSpecies.Count; ++treeIndex) { float totalDbhGrowth = diameterGrowthOfSpecies[treeIndex]; if (expectedGrowth.HasFlag(ExpectedTreeChanges.DiameterGrowth)) { Assert.IsTrue(totalDbhGrowth > 0.0F); Assert.IsTrue(totalDbhGrowth <= TestConstant.Maximum.DiameterInInches); } else if (expectedGrowth.HasFlag(ExpectedTreeChanges.DiameterGrowthOrNoChange)) { Assert.IsTrue(totalDbhGrowth >= 0.0F); Assert.IsTrue(totalDbhGrowth <= TestConstant.Maximum.DiameterInInches); } else { Assert.IsTrue(totalDbhGrowth == 0.0F); } float totalHeightGrowth = heightGrowthOfSpecies[treeIndex]; if (expectedGrowth.HasFlag(ExpectedTreeChanges.HeightGrowth)) { Assert.IsTrue(totalHeightGrowth > 0.0F); Assert.IsTrue(totalHeightGrowth <= TestConstant.Maximum.HeightInFeet); } else if (expectedGrowth.HasFlag(ExpectedTreeChanges.HeightGrowthOrNoChange)) { Assert.IsTrue(totalHeightGrowth >= 0.0F); Assert.IsTrue(totalHeightGrowth <= TestConstant.Maximum.HeightInFeet); } else { Assert.IsTrue(totalHeightGrowth == 0.0F); } float totalDeadExpansionFactor = deathOfSpecies[treeIndex]; Assert.IsTrue(totalDeadExpansionFactor >= 0.0F); Assert.IsTrue(totalDeadExpansionFactor <= TestConstant.Maximum.ExpansionFactor); float initialTotalExpansionFactor = initialTreesOfSpecies.LiveExpansionFactor[treeIndex] + initialTreesOfSpecies.DeadExpansionFactor[treeIndex]; float finalTotalExpansionFactor = finalTreesOfSpecies.LiveExpansionFactor[treeIndex] + totalDeadExpansionFactor; float expansionFactorRatio = finalTotalExpansionFactor / initialTotalExpansionFactor; Assert.IsTrue(expansionFactorRatio >= 0.999F); if (expectedGrowth.HasFlag(ExpectedTreeChanges.ExpansionFactorConservedOrIncreased)) { Assert.IsTrue(initialTotalExpansionFactor >= 0.0F); } else { Assert.IsTrue(initialTotalExpansionFactor > 0.0F); Assert.IsTrue(finalTotalExpansionFactor > 0.0F); Assert.IsTrue(expansionFactorRatio <= 1.001F); } Assert.IsTrue(finalTotalExpansionFactor <= TestConstant.Maximum.ExpansionFactor); } for (int treeIndex = finalTreesOfSpecies.Count; treeIndex < finalTreesOfSpecies.Capacity; ++treeIndex) { Assert.IsTrue(diameterGrowthOfSpecies[treeIndex] == 0.0F); Assert.IsTrue(deathOfSpecies[treeIndex] == 0.0F); Assert.IsTrue(heightGrowthOfSpecies[treeIndex] == 0.0F); Assert.IsTrue(initialTreesOfSpecies.DbhGrowth[treeIndex] == 0.0F); Assert.IsTrue(initialTreesOfSpecies.HeightGrowth[treeIndex] == 0.0F); Assert.IsTrue(finalTreesOfSpecies.DbhGrowth[treeIndex] == 0.0F); Assert.IsTrue(finalTreesOfSpecies.HeightGrowth[treeIndex] == 0.0F); } } }
protected static void Verify(ExpectedTreeChanges expectedGrowth, TestStand stand, OrganonVariant variant) { OrganonTest.Verify(expectedGrowth, OrganonWarnings.None, stand, variant); }