public void UnitDivisions() { Quantity quantity, result, expected; quantity = system.Quantity("10.0km/h"); result = system.Canonical(quantity); expected = system.Quantity("2.8m/s").UnPrefixed(); Assert.True(result.Approximates(expected)); quantity = system.Quantity(60m, "/min"); result = system.Canonical(quantity); expected = system.Quantity("1/s").UnPrefixed(); Assert.True(result.Approximates(expected)); /* 120 mm[Hg] 15998640000 g.m-1.s-2 176 g/L 0.176 g.m-3 5.9 10*12/L 0.059 m-3 99 fL 0.099 m3 */ }
public static Expression ToExpression(this Quantity quantity) { quantity = System.Canonical(quantity); string searchable = quantity.LeftSearchableString(); var values = new List <ValueExpression>(); values.Add(new IndexValue("system", new StringValue(UCUM.Uri.ToString()))); values.Add(new IndexValue("value", new NumberValue(quantity.Value.ToDecimal()))); values.Add(new IndexValue("decimals", new StringValue(searchable))); values.Add(new IndexValue("unit", new StringValue(quantity.Metric.ToString()))); return(new CompositeValue(values)); }
public static BsonDocument ToBson(this Quantity quantity) { quantity = system.Canonical(quantity); string searchable = quantity.LeftSearchableString(); BsonDocument block = new BsonDocument { { "system", UCUM.Uri.ToString() }, { "value", quantity.GetValueAsBson() }, { "decimals", searchable }, { "unit", quantity.Metric.ToString() } }; return(block); }
public void TestMetricDimensions() { Quantity q = system.Quantity("2.3[psi]"); q = system.Canonical(q); Console.WriteLine(q.Metric.DimensionText); Assert.Equal("mass^1.length^-1.time^-2", q.Metric.DimensionText); }
public void LeftSearchableStringWithSlashAsCode() { Quantity q, qc; q = system.Quantity(3, "/a"); qc = system.Canonical(q); string s = qc.LeftSearchableString(); Assert.Equal("s-1E-8x9.516436344219736296402018867", s); // This creates a quantity with a value of 9.5 and an error of 1.5 // It was leading to an ArrayOutOfBoundsException when calculating SignificandText // caused by the fact that the error was of the same order as the first digit. q = system.Quantity(3M, "/a"); qc = system.Canonical(q); s = qc.LeftSearchableString(); Assert.Equal("s-1E-8x9", s); }
public void TestMmol() { Quantity input = system.Quantity("4.1234mmol"); Quantity output = system.Canonical(input); string s = output.LeftSearchableString(); Assert.AreEqual("abcd", s); }
public static Quantity Canonical(this Quantity input) { var output = input.Metric.Symbols switch { // TODO: Conversion of Celsius to its base unit Kelvin fails using the method SystemOfUnits::Canoncial // Waiting for feedback on issue: https://github.com/FirelyTeam/Fhir.Metrics/issues/7 "Cel" => new Quantity(input.Value + 273.15m, System.Metric("K")), _ => System.Canonical(input) }; return(output); }
public static Quantity Canonical(this Quantity input) { Quantity output = null; switch (input.Metric.Symbols) { // TODO: Conversion of Celsius to its base unit Kelvin fails using the method SystemOfUnits::Canoncial // Waiting for feedback on issue: https://github.com/FirelyTeam/Fhir.Metrics/issues/7 case "Cel": output = new Quantity(input.Value + 273.15m, System.Metric("K")); break; default: output = System.Canonical(input); break; } return(output); }
public void Conversion() { UcumTestSet reader = new UcumTestSet(); foreach (UcumTestSet.Conversion conversion in reader.Conversions()) { string expression = conversion.Value + conversion.SourceUnit; Quantity quantity = system.Canonical(expression); Exponential value = new Exponential(conversion.Outcome); Metric metric = system.Metric(conversion.DestUnit); try { Assert.AreEqual(metric, quantity.Metric); Assert.IsTrue(Exponential.Similar(value, quantity.Value)); } catch (Exception e) { throw new AssertFailedException(string.Format("Test {0} failed", conversion.Id), e); } } }
public void Conversion() { // this test fails, because in our opinion the input xml is incorrect. See the Data/ucum-tests.xml for the comment. UcumTestSet reader = new UcumTestSet(); foreach (UcumTestSet.Conversion conversion in reader.Conversions()) { string expression = conversion.Value + conversion.SourceUnit; Quantity quantity = system.Canonical(expression); Exponential value = new Exponential(conversion.Outcome); Metric metric = system.Metric(conversion.DestUnit); try { Assert.Equal(metric, quantity.Metric); Assert.True(Exponential.Similar(value, quantity.Value)); } catch (Exception e) { throw new AssertFailedException(string.Format("Test {0} failed", conversion.Id), e); } } }