public void Equals_RelativeTolerance_IsImplemented()
        {
            var v = Permeance.FromPerms(1);

            Assert.True(v.Equals(Permeance.FromPerms(1), PermsTolerance, ComparisonType.Relative));
            Assert.False(v.Equals(Permeance.Zero, PermsTolerance, ComparisonType.Relative));
        }
        public void DefaultCtor_ReturnsQuantityWithZeroValueAndBaseUnit()
        {
            var quantity = new Permeance();

            Assert.Equal(0, quantity.Value);
            Assert.Equal(PermeanceUnit.Perm, quantity.Unit);
        }
        public void ConversionRoundTrip()
        {
            Permeance perm = Permeance.FromPerms(1);

            AssertEx.EqualTolerance(1, Permeance.FromGrainsPerHourSquareFootInchOfMercurys(perm.GrainsPerHourSquareFootInchOfMercurys).Perms, GrainsPerHourSquareFootInchOfMercurysTolerance);
            AssertEx.EqualTolerance(1, Permeance.FromPerms(perm.Perms).Perms, PermsTolerance);
        }
        public void As()
        {
            var perm = Permeance.FromPerms(1);

            AssertEx.EqualTolerance(GrainsPerHourSquareFootInchOfMercurysInOnePerm, perm.As(PermeanceUnit.GrainsPerHourSquareFootInchOfMercury), GrainsPerHourSquareFootInchOfMercurysTolerance);
            AssertEx.EqualTolerance(PermsInOnePerm, perm.As(PermeanceUnit.Perm), PermsTolerance);
        }
        public void PermToPermeanceUnits()
        {
            Permeance perm = Permeance.FromPerms(1);

            AssertEx.EqualTolerance(GrainsPerHourSquareFootInchOfMercurysInOnePerm, perm.GrainsPerHourSquareFootInchOfMercurys, GrainsPerHourSquareFootInchOfMercurysTolerance);
            AssertEx.EqualTolerance(PermsInOnePerm, perm.Perms, PermsTolerance);
        }
        public void Equals_SameType_IsImplemented()
        {
            var a = Permeance.FromPerms(1);
            var b = Permeance.FromPerms(2);

            Assert.True(a.Equals(a));
            Assert.False(a.Equals(b));
        }
        public void CompareToIsImplemented()
        {
            Permeance perm = Permeance.FromPerms(1);

            Assert.Equal(0, perm.CompareTo(perm));
            Assert.True(perm.CompareTo(Permeance.Zero) > 0);
            Assert.True(Permeance.Zero.CompareTo(perm) < 0);
        }
        public void Equals_QuantityAsObject_IsImplemented()
        {
            object a = Permeance.FromPerms(1);
            object b = Permeance.FromPerms(2);

            Assert.True(a.Equals(a));
            Assert.False(a.Equals(b));
            Assert.False(a.Equals((object)null));
        }
        public void ArithmeticOperators()
        {
            Permeance v = Permeance.FromPerms(1);

            AssertEx.EqualTolerance(-1, -v.Perms, PermsTolerance);
            AssertEx.EqualTolerance(2, (Permeance.FromPerms(3) - v).Perms, PermsTolerance);
            AssertEx.EqualTolerance(2, (v + v).Perms, PermsTolerance);
            AssertEx.EqualTolerance(10, (v * 10).Perms, PermsTolerance);
            AssertEx.EqualTolerance(10, (10 * v).Perms, PermsTolerance);
            AssertEx.EqualTolerance(2, (Permeance.FromPerms(10) / 5).Perms, PermsTolerance);
            AssertEx.EqualTolerance(2, Permeance.FromPerms(10) / Permeance.FromPerms(5), PermsTolerance);
        }
        public void From_ValueAndUnit_ReturnsQuantityWithSameValueAndUnit()
        {
            var quantity00 = Permeance.From(1, PermeanceUnit.GrainsPerHourSquareFootInchOfMercury);

            AssertEx.EqualTolerance(1, quantity00.GrainsPerHourSquareFootInchOfMercurys, GrainsPerHourSquareFootInchOfMercurysTolerance);
            Assert.Equal(PermeanceUnit.GrainsPerHourSquareFootInchOfMercury, quantity00.Unit);

            var quantity01 = Permeance.From(1, PermeanceUnit.Perm);

            AssertEx.EqualTolerance(1, quantity01.Perms, PermsTolerance);
            Assert.Equal(PermeanceUnit.Perm, quantity01.Unit);
        }
        public void ToUnit()
        {
            var perm = Permeance.FromPerms(1);

            var grainsperhoursquarefootinchofmercuryQuantity = perm.ToUnit(PermeanceUnit.GrainsPerHourSquareFootInchOfMercury);

            AssertEx.EqualTolerance(GrainsPerHourSquareFootInchOfMercurysInOnePerm, (double)grainsperhoursquarefootinchofmercuryQuantity.Value, GrainsPerHourSquareFootInchOfMercurysTolerance);
            Assert.Equal(PermeanceUnit.GrainsPerHourSquareFootInchOfMercury, grainsperhoursquarefootinchofmercuryQuantity.Unit);

            var permQuantity = perm.ToUnit(PermeanceUnit.Perm);

            AssertEx.EqualTolerance(PermsInOnePerm, (double)permQuantity.Value, PermsTolerance);
            Assert.Equal(PermeanceUnit.Perm, permQuantity.Unit);
        }
        public void ComparisonOperators()
        {
            Permeance onePerm  = Permeance.FromPerms(1);
            Permeance twoPerms = Permeance.FromPerms(2);

            Assert.True(onePerm < twoPerms);
            Assert.True(onePerm <= twoPerms);
            Assert.True(twoPerms > onePerm);
            Assert.True(twoPerms >= onePerm);

            Assert.False(onePerm > twoPerms);
            Assert.False(onePerm >= twoPerms);
            Assert.False(twoPerms < onePerm);
            Assert.False(twoPerms <= onePerm);
        }
        public void EqualityOperators()
        {
            var a = Permeance.FromPerms(1);
            var b = Permeance.FromPerms(2);

            // ReSharper disable EqualExpressionComparison

            Assert.True(a == a);
            Assert.False(a != a);

            Assert.True(a != b);
            Assert.False(a == b);

            Assert.False(a == null);
            Assert.False(null == a);

// ReSharper restore EqualExpressionComparison
        }
        public void Permeance_QuantityInfo_ReturnsQuantityInfoDescribingQuantity()
        {
            var quantity = new Permeance(1, PermeanceUnit.Perm);

            QuantityInfo <PermeanceUnit> quantityInfo = quantity.QuantityInfo;

            Assert.Equal(Permeance.Zero, quantityInfo.Zero);
            Assert.Equal("Permeance", quantityInfo.Name);
            Assert.Equal(QuantityType.Permeance, quantityInfo.QuantityType);

            var units     = EnumUtils.GetEnumValues <PermeanceUnit>().Except(new[] { PermeanceUnit.Undefined }).ToArray();
            var unitNames = units.Select(x => x.ToString());

            // Obsolete members
#pragma warning disable 618
            Assert.Equal(units, quantityInfo.Units);
            Assert.Equal(unitNames, quantityInfo.UnitNames);
#pragma warning restore 618
        }
        public void Convert_ToSByte_EqualsValueAsSameType()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Equal((sbyte)quantity.Value, Convert.ToSByte(quantity));
        }
        public void NegationOperator_ReturnsQuantity_WithNegatedValue(double value)
        {
            var quantity = Permeance.FromPerms(value);

            Assert.Equal(Permeance.FromPerms(-value), -quantity);
        }
        public void Convert_ToInt32_EqualsValueAsSameType()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Equal((int)quantity.Value, Convert.ToInt32(quantity));
        }
        public void Convert_ChangeType_InvalidType_ThrowsInvalidCastException()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Throws <InvalidCastException>(() => Convert.ChangeType(quantity, typeof(QuantityFormatter)));
        }
        public void GetHashCode_Equals()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Equal(new { Permeance.QuantityType, quantity.Value, quantity.Unit }.GetHashCode(), quantity.GetHashCode());
        }
        public void Convert_ChangeType_QuantityType_EqualsQuantityType()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Equal(QuantityType.Permeance, Convert.ChangeType(quantity, typeof(QuantityType)));
        }
        public void Convert_ChangeType_BaseDimensions_EqualsBaseDimensions()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Equal(Permeance.BaseDimensions, Convert.ChangeType(quantity, typeof(BaseDimensions)));
        }
        public void Convert_ChangeType_UnitType_EqualsUnit()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Equal(quantity.Unit, Convert.ChangeType(quantity, typeof(PermeanceUnit)));
        }
        public void Convert_ChangeType_SelfType_EqualsSelf()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Equal(quantity, Convert.ChangeType(quantity, typeof(Permeance)));
        }
        public void Convert_ToUInt64_EqualsValueAsSameType()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Equal((ulong)quantity.Value, Convert.ToUInt64(quantity));
        }
 public void NumberToGrainsPerHourSquareFootInchOfMercurysTest() =>
 Assert.Equal(Permeance.FromGrainsPerHourSquareFootInchOfMercurys(2), 2.GrainsPerHourSquareFootInchOfMercurys());
 public static Permeance GrainsPerHourSquareFootInchOfMercurys <T>(this T value) =>
 Permeance.FromGrainsPerHourSquareFootInchOfMercurys(Convert.ToDouble(value));
 public void NumberToPermsTest() =>
 Assert.Equal(Permeance.FromPerms(2), 2.Perms());
        public void Convert_ToSingle_EqualsValueAsSameType()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Equal((float)quantity.Value, Convert.ToSingle(quantity));
        }
 public static Permeance Perms <T>(this T value) =>
 Permeance.FromPerms(Convert.ToDouble(value));
        public void Convert_ToString_EqualsToString()
        {
            var quantity = Permeance.FromPerms(1.0);

            Assert.Equal(quantity.ToString(), Convert.ToString(quantity));
        }