public void Test_ThirdGridSquareCharacter() { decimal remainingLonDegrees = 3m; short lonDirection = 1; decimal expectedOut = 60m; string expectedResult = "1"; string actualResult = GridSquareHelper.GetThirdGridsquareCharacter(remainingLonDegrees, lonDirection, out decimal actualOut); Assert.AreEqual(expectedOut, actualOut); Assert.AreEqual(expectedResult, actualResult); }
/// <summary> /// Takes a DDMCoordinate objects and processes it using ConversionHelper an GridSquareHelper to return a Gridsquare string. /// If solution cannot be found a string with encoded error condition is returned and should be handled by the caller. /// </summary> /// <param name="ddmCoordinates"></param> /// <returns></returns> public string ConvertDDMtoGridsquare(DDMCoordinate ddmCoordinates) { if (ddmCoordinates == null) { return("BadInp"); } if (false == LookuptablesHelper.GenerateTableLookups()) { return("NoTbls"); } var GridsquareResult = new StringBuilder(); decimal DDMlatDegrees = ddmCoordinates.GetShortDegreesLat(); decimal DDMlonDegrees = ddmCoordinates.GetShortDegreesLon(); decimal DDMlatMinutes = ddmCoordinates.MinutesLattitude; decimal DDMlonMinutes = ddmCoordinates.MinutesLongitude; short LatDirection = ConversionHelper.ExtractPolarityNS(ddmCoordinates.ToString()); short LonDirection = ConversionHelper.ExtractPolarityEW(ddmCoordinates.ToString()); GridsquareResult.Append(GridsquareHelper.GetFirstGridsquareCharacter(DDMlonDegrees, LonDirection, out decimal remainderLon)); GridsquareResult.Append(GridsquareHelper.GetSecondGridsquareCharacter(DDMlatDegrees, LatDirection, out decimal remainderLat)); GridsquareResult.Append(GridSquareHelper.GetThirdGridsquareCharacter(remainderLon, LonDirection, out decimal minsRemainderLon)); GridsquareResult.Append(GridSquareHelper.GetFourthGridsquareCharacter(remainderLat, LatDirection)); decimal ddmLonMinsWithRemainder = LonDirection * (minsRemainderLon + DDMlonMinutes); decimal nearestEvenMultipleLon = ConversionHelper.GetNearestEvenMultiple(ddmLonMinsWithRemainder, 2); GridsquareResult.Append(GridsquareHelper.GetFifthGridsquareCharacter(LonDirection, nearestEvenMultipleLon)); decimal ddmLatMinsWithRemainder = LatDirection * DDMlatMinutes; decimal nearestEvenMultipleLat = ConversionHelper.GetNearestEvenMultiple(ddmLatMinsWithRemainder, 1); GridsquareResult.Append(GridsquareHelper.GetSixthGridsquareCharacter(LatDirection, nearestEvenMultipleLat)); if (GridsquareResult.Length != 6) { return("NoCalc"); } return(GridsquareResult.ToString()); }