public void ReadWord_RightParen() { StringReader reader = new StringReader(")"); string word = PartialThinning.ReadWord(reader, ')'); Assert.AreEqual("", word); Assert.AreEqual(')', reader.Peek()); Assert.AreEqual(0, reader.Index); }
public void ReadWord_Range() { StringReader reader = new StringReader("40-110"); string word = PartialThinning.ReadWord(reader, '('); Assert.AreEqual("40-110", word); Assert.AreEqual(-1, reader.Peek()); Assert.AreEqual(6, reader.Index); }
public void ReadWord_PercentageRightParen() { StringReader reader = new StringReader("10.5%)\t"); string word = PartialThinning.ReadWord(reader, ')'); Assert.AreEqual("10.5%", word); Assert.AreEqual(')', reader.Peek()); Assert.AreEqual(5, reader.Index); }
public void ReadWord_RangeWhitespace() { StringReader reader = new StringReader("1-35\t"); string word = PartialThinning.ReadWord(reader, '('); Assert.AreEqual("1-35", word); Assert.AreEqual('\t', reader.Peek()); Assert.AreEqual(4, reader.Index); }
public void ReadWord_AgeWhiteSpace() { StringReader reader = new StringReader("70 "); string word = PartialThinning.ReadWord(reader, '('); Assert.AreEqual("70", word); Assert.AreEqual(' ', reader.Peek()); Assert.AreEqual(2, reader.Index); }
public void ReadWord_AgeLeftParen() { StringReader reader = new StringReader("200(75%)"); string word = PartialThinning.ReadWord(reader, '('); Assert.AreEqual("200", word); Assert.AreEqual('(', reader.Peek()); Assert.AreEqual(3, reader.Index); }
public void ReadWord_Empty() { StringReader reader = new StringReader(""); string word = PartialThinning.ReadWord(reader, '('); Assert.AreEqual("", word); Assert.AreEqual(-1, reader.Peek()); Assert.AreEqual(0, reader.Index); }
public void ReadWord_RangeLeftParen() { StringReader reader = new StringReader("55-90( 10%)\t"); string word = PartialThinning.ReadWord(reader, '('); Assert.AreEqual("55-90", word); Assert.AreEqual('(', reader.Peek()); Assert.AreEqual(5, reader.Index); }
public void ReadPercentage_WhitespaceAfterLParen() { StringReader reader = new StringReader("( 8%)a"); int index; InputValue <Percentage> percentage = PartialThinning.ReadPercentage(reader, out index); Assert.IsNotNull(percentage); Assert.AreEqual("( 8%)", percentage.String); Assert.AreEqual(0.08, (double)(percentage.Actual)); Assert.AreEqual(0, index); Assert.AreEqual('a', reader.Peek()); }
//--------------------------------------------------------------------- /// <summary> /// Creates a cohort selection method for a specific set of ages and /// age ranges. /// </summary> /// <remarks> /// This overrides the base method so it can use the PartialThinning /// class to handle cohort selections with percentages. /// </remarks> protected override void CreateAdditionalCohortSelectionMethodFor(ISpecies species, IList <ushort> ages, IList <AgeRange> ranges) { if (!PartialThinning.CreateAdditionalCohortSelectorFor(species, ages, ranges)) { // There were no percentages specified for this species' ages // and ranges. So just create and store a whole cohort // selector using the base method. base.CreateAdditionalCohortSelectionMethodFor(species, ages, ranges); } }
public void ReadPercentage_Whitespace() { StringReader reader = new StringReader("( 55.5%\t)"); int index; InputValue <Percentage> percentage = PartialThinning.ReadPercentage(reader, out index); Assert.IsNotNull(percentage); Assert.AreEqual("( 55.5%\t)", percentage.String); Assert.AreEqual(0.555, (double)(percentage.Actual)); Assert.AreEqual(0, index); Assert.AreEqual(-1, reader.Peek()); }
public void ReadAgeOrRange_RangeWhitespacePercentage() { StringReader reader = new StringReader(" 1-100 (22.2%)Hi"); int index; eventHandlerCalled = false; expectedRange = new AgeRange(1, 100); expectedPercentage = Percentage.Parse("22.2%"); InputValue <AgeRange> ageRange = PartialThinning.ReadAgeOrRange(reader, out index); Assert.IsTrue(eventHandlerCalled); Assert.AreEqual(1, index); Assert.AreEqual('H', reader.Peek()); }
public void ReadAgeOrRange_RangePercentage() { StringReader reader = new StringReader("30-75(10%)"); int index; eventHandlerCalled = false; expectedRange = new AgeRange(30, 75); expectedPercentage = Percentage.Parse("10%"); InputValue <AgeRange> ageRange = PartialThinning.ReadAgeOrRange(reader, out index); Assert.IsTrue(eventHandlerCalled); Assert.AreEqual(0, index); Assert.AreEqual(-1, reader.Peek()); }
public void ReadAgeOrRange_AgeWhitespacePercentage() { StringReader reader = new StringReader("66 ( 50% )\t"); int index; eventHandlerCalled = false; expectedRange = new AgeRange(66, 66); expectedPercentage = Percentage.Parse("50%"); InputValue <AgeRange> ageRange = PartialThinning.ReadAgeOrRange(reader, out index); Assert.IsTrue(eventHandlerCalled); Assert.AreEqual(0, index); Assert.AreEqual('\t', reader.Peek()); }
//--------------------------------------------------------------------- /// <summary> /// Creates a cohort selection method for a specific set of ages and /// age ranges. /// </summary> /// <remarks> /// This overrides the base method so it can use the PartialThinning /// class to handle cohort selections with percentages. Added support /// for InsectDefoliation via LandCover cohort selections /// </remarks> protected override void CreateCohortSelectionMethodFor(ISpecies species, IList <ushort> ages, IList <AgeRange> ranges) { if (LandCover.LandCover.DontParseTrees) { if (!PartialThinning.CreateCohortSelectorFor(species, ages, ranges)) { base.CreateCohortSelectionMethodFor(species, ages, ranges); } } else if (!LandCover.LandCover.CreateCohortSelectorFor(species, ages, ranges)) { base.CreateCohortSelectionMethodFor(species, ages, ranges); } }
public void ReadAgeOrRange_Multiple() { StringReader reader = new StringReader(" 1-40 (50%) 50(65%)\t 65-70 71-107 ( 15% ) 109"); int index; //0123456789_123456789_^123456789_123456789_12345678 eventHandlerCalled = false; expectedRange = new AgeRange(1, 40); expectedPercentage = Percentage.Parse("50%"); InputValue <AgeRange> ageRange = PartialThinning.ReadAgeOrRange(reader, out index); Assert.IsTrue(eventHandlerCalled); Assert.AreEqual(1, index); Assert.AreEqual(' ', reader.Peek()); eventHandlerCalled = false; expectedRange = new AgeRange(50, 50); expectedPercentage = Percentage.Parse("65%"); ageRange = PartialThinning.ReadAgeOrRange(reader, out index); Assert.IsTrue(eventHandlerCalled); Assert.AreEqual(13, index); Assert.AreEqual('\t', reader.Peek()); eventHandlerCalled = false; expectedRange = new AgeRange(65, 70); expectedPercentage = null; ageRange = PartialThinning.ReadAgeOrRange(reader, out index); Assert.IsTrue(eventHandlerCalled); Assert.AreEqual(22, index); Assert.AreEqual('7', reader.Peek()); eventHandlerCalled = false; expectedRange = new AgeRange(71, 107); expectedPercentage = Percentage.Parse("15%"); ageRange = PartialThinning.ReadAgeOrRange(reader, out index); Assert.IsTrue(eventHandlerCalled); Assert.AreEqual(29, index); Assert.AreEqual(' ', reader.Peek()); eventHandlerCalled = false; expectedRange = new AgeRange(109, 109); expectedPercentage = null; ageRange = PartialThinning.ReadAgeOrRange(reader, out index); Assert.IsTrue(eventHandlerCalled); Assert.AreEqual(45, index); Assert.AreEqual(-1, reader.Peek()); }
//--------------------------------------------------------------------- private void TryReadPercentage(string input, string expectedValue, string expectedError) { StringReader reader = new StringReader(input); int index; try { InputValue <Percentage> percentage = PartialThinning.ReadPercentage(reader, out index); } catch (InputValueException exc) { Data.Output.WriteLine(); Data.Output.WriteLine(exc.Message); Assert.AreEqual(expectedValue, exc.Value); MultiLineText multiLineMesg = exc.MultiLineMessage; string lastLine = multiLineMesg[multiLineMesg.Count - 1]; Assert.AreEqual(expectedError, lastLine.Trim()); throw exc; } }
//--------------------------------------------------------------------- protected void ReadLandUses() { InputVar <string> name = new InputVar <string>("LandUse"); InputVar <ushort> mapCode = new InputVar <ushort>("MapCode"); InputVar <bool> allowHarvest = new InputVar <bool>("AllowHarvest?"); InputVar <string> landCoverChangeType = new InputVar <string>("LandCoverChange"); Dictionary <string, int> nameLineNumbers = new Dictionary <string, int>(); Dictionary <ushort, int> mapCodeLineNumbers = new Dictionary <ushort, int>(); PartialThinning.InitializeClass(); while (!AtEndOfInput) { int nameLineNum = LineNumber; ReadVar(name); int lineNumber; if (nameLineNumbers.TryGetValue(name.Value.Actual, out lineNumber)) { throw new InputValueException(name.Value.String, "The land use \"{0}\" was previously used on line {1}", name.Value.Actual, lineNumber); } else { nameLineNumbers[name.Value.Actual] = nameLineNum; } int mapCodeLineNum = LineNumber; ReadVar(mapCode); if (mapCodeLineNumbers.TryGetValue(mapCode.Value.Actual, out lineNumber)) { throw new InputValueException(mapCode.Value.String, "The map code \"{0}\" was previously used on line {1}", mapCode.Value.Actual, lineNumber); } else { mapCodeLineNumbers[mapCode.Value.Actual] = mapCodeLineNum; } ReadVar(allowHarvest); // By default, a land use allows trees to establish. bool allowEstablishment = true; if (ReadPreventEstablishment()) { allowEstablishment = false; } Dictionary <string, LandCover.IChange> landCoverChanges = new Dictionary <string, LandCover.IChange>(); List <LandCover.IChange> landCoverList = new List <LandCover.IChange>(); ReadVar(landCoverChangeType); LandCover.IChange landCoverChange = ProcessLandCoverChange(landCoverChangeType); landCoverChanges[landCoverChange.Type] = landCoverChange; landCoverList.Add(landCoverChange); while (ReadOptionalVar(landCoverChangeType)) //Get extra LandCoverChanges { if (landCoverChanges.TryGetValue(landCoverChangeType.Value.Actual, out landCoverChange)) { throw new InputValueException(landCoverChangeType.Value.String, "The land cover change \"{0}\" has already been defined for land use: {1}", landCoverChangeType.Value.Actual, name.Value.Actual); } else { landCoverChange = ProcessLandCoverChange(landCoverChangeType); landCoverChanges[landCoverChange.Type] = landCoverChange; landCoverList.Add(landCoverChange); } } LandCover.IChange[] changes = new LandCover.IChange[landCoverList.Count]; for (int i = 0; i < landCoverList.Count; i++) { changes[i] = landCoverList[i]; } LandUse landUse = new LandUse(name.Value.Actual, mapCode.Value.Actual, allowHarvest.Value.Actual, allowEstablishment, changes); LandUseRegistry.Register(landUse); } }