public string MakeReadable(IConversionExpressionWithValue expression) { IList <decimal> conversionFactors = new List <decimal> { ConversionFactors.ImperialTonToPound, ConversionFactors.HundredWeightToPound, ConversionFactors.StoneToPound, ConversionFactors.MultiplicationByOne, ConversionFactors.OunceToPound, ConversionFactors.DrachmToPound, ConversionFactors.GrainToPound }; IList <string> abbreviations = new List <string> { UnitAbbreviations.ImperialTon, UnitAbbreviations.HundredWeight, UnitAbbreviations.Stone, UnitAbbreviations.Pound, UnitAbbreviations.Ounce, UnitAbbreviations.Drachm, UnitAbbreviations.Grain }; return(CreateFrom(expression.Value, UnitAbbreviations.Pound, conversionFactors, abbreviations)); }
public string MakeReadable(IConversionExpressionWithValue expression) { IList <decimal> conversionFactors = new List <decimal> { ConversionFactors.FathomToFeet, ConversionFactors.LeagueToFeet, ConversionFactors.MileToFeet, ConversionFactors.FurlongToFeet, ConversionFactors.ChainToFeet, ConversionFactors.YardToFeet, ConversionFactors.MultiplicationByOne, ConversionFactors.InchToFeet, ConversionFactors.ThouToFeet }; IList <string> abbreviations = new List <string> { UnitAbbreviations.Fathom, UnitAbbreviations.League, UnitAbbreviations.Mile, UnitAbbreviations.Furlong, UnitAbbreviations.Chain, UnitAbbreviations.Yard, UnitAbbreviations.Foot, UnitAbbreviations.Inch, UnitAbbreviations.Though }; return(CreateFrom(expression.Value, UnitAbbreviations.Foot, conversionFactors, abbreviations)); }
static string CreateUnitIfImperial(IConversionExpressionWithValue expression) { if (expression is ImperialLengthExpression) { var readabilityCreator = new ImperialLengthReadabilityCreator(); return(readabilityCreator.MakeReadable(expression)); } if (expression is ImperialAreaExpression) { var readabilityCreator = new ImperialAreaReadabilityCreator(); return(readabilityCreator.MakeReadable(expression)); } if (expression is ImperialVolumeExpression) { var readabilityCreator = new ImperialVolumeReadabilityCreator(); return(readabilityCreator.MakeReadable(expression)); } if (expression is ImperialMassExpression) { var readabilityCreator = new ImperialMassReadabilityCreator(); return(readabilityCreator.MakeReadable(expression)); } throw new InvalidExpressionException(); }
public string MakeReadable(IConversionExpressionWithValue expression) { var result = CreateUnitIfMetric(expression); if (result != null) { return(result); } result = CreateUnitIfImperial(expression); return(result); }
public string MakeReadable(IConversionExpressionWithValue expression) { IList <decimal> conversionFactors = new List <decimal> { ConversionFactors.AcreToSquareFoot, ConversionFactors.RoodToSquareFoot, ConversionFactors.PerchToSquareFoot, ConversionFactors.MultiplicationByOne }; IList <string> abbreviations = new List <string> { UnitAbbreviations.Acre, UnitAbbreviations.Rood, UnitAbbreviations.Perch, UnitAbbreviations.Squarefoot }; return(CreateFrom(expression.Value, UnitAbbreviations.Squarefoot, conversionFactors, abbreviations)); }
public string MakeReadable(IConversionExpressionWithValue expression) { IList <decimal> conversionFactors = new List <decimal> { ConversionFactors.GallonToFluidOunce, ConversionFactors.QuartToFluidOunce, ConversionFactors.PintToFluidOunce, ConversionFactors.GillToFluidOunce, ConversionFactors.MultiplicationByOne }; IList <string> abbreviations = new List <string> { UnitAbbreviations.Gallon, UnitAbbreviations.Quart, UnitAbbreviations.Pint, UnitAbbreviations.Gill, UnitAbbreviations.FluidOunce }; return(CreateFrom(expression.Value, UnitAbbreviations.FluidOunce, conversionFactors, abbreviations)); }
void Calculate(IArithmeticConversionOperation operation) { if (operation.Left.GetType() != operation.Right.GetType()) { CreateReplacement(operation); } else { CreateReplacementIfBothSidesOfTheOperationNeedToBeConvertedForMetric(operation); CreateReplacementIfBothSidesOfTheOperationNeedToBeConvertedForImperial(operation); CalculateIfNoConversionIsNeeded(operation); } if (operation.HasParent) { operation.Parent.ReplaceChild(operation, mReplacement); } else { mResult = (IConversionExpressionWithValue)mReplacement; } }
string CreateUnitIfMetric(IConversionExpressionWithValue expression) { if (expression is MetricLengthExpression) { if (expression.Value <= (decimal)0.01) { expression.Value /= ConversionFactors.MetricDivisionOneThousand; Unit = UnitAbbreviations.Millimeters; } else if (expression.Value <= (decimal)0.1) { expression.Value /= ConversionFactors.MetricDivisionOneHundred; Unit = UnitAbbreviations.Centimeters; } else if (expression.Value > 999) { expression.Value /= ConversionFactors.MetricMultiplicationOneThousand; Unit = UnitAbbreviations.Kilometers; } else { Unit = UnitAbbreviations.Meters; } } else if (expression is MetricAreaExpression) { if (expression.Value <= (decimal)1E-5) { expression.Value /= ConversionFactors.MetricDivisionOneMillion; Unit = UnitAbbreviations.Squaremillimeters; } else if (expression.Value <= (decimal)1E-3) { expression.Value /= ConversionFactors.MetricDivisionTenThousand; Unit = UnitAbbreviations.Squarecentimeters; } else if (expression.Value >= (decimal)1E5) { expression.Value /= ConversionFactors.MetricMultiplicationOneMillion; Unit = UnitAbbreviations.Squarekilometers; } else if (expression.Value >= (decimal)1E3) { expression.Value /= ConversionFactors.MetricMultiplicationMeterToha; Unit = UnitAbbreviations.Hectas; } else { Unit = UnitAbbreviations.Sqauremeters; } } else if (expression is MetricVolumeExpression) { if (expression.Value <= (decimal)0.01) { expression.Value /= ConversionFactors.MetricDivisionOneThousand; Unit = UnitAbbreviations.Milliliters; } else if (expression.Value <= (decimal)0.1) { expression.Value /= ConversionFactors.MetricDivisionOneHundred; Unit = UnitAbbreviations.Centiliters; } else if (expression.Value >= 100) { expression.Value /= ConversionFactors.MetricMultiplicationOneHundred; Unit = UnitAbbreviations.Hectoliters; } else { Unit = UnitAbbreviations.Liters; } } else if (expression is MetricMassExpression) { if (expression.Value <= (decimal)0.01) { expression.Value /= ConversionFactors.MetricDivisionOneThousand; Unit = UnitAbbreviations.Milligram; } else if (expression.Value >= 999999) { expression.Value /= ConversionFactors.MetricMultiplicationOneMillion; Unit = UnitAbbreviations.Ton; } else if (expression.Value >= 999) { expression.Value /= ConversionFactors.MetricMultiplicationOneThousand; Unit = UnitAbbreviations.Kilogram; } else { Unit = UnitAbbreviations.Gram; } } if (Unit != null) { return($"{expression.Value} {Unit}"); } return(null); }
public void ReadableOutput(IConversionExpressionWithValue input, string expectedOutput) { mUnderTest.MakeReadable(input).Should().Be(expectedOutput); }