Exemple #1
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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);
                }
            }
        }
Exemple #10
0
        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);
                }
            }
        }