Skip to content

Commit d6d779a

Browse files
committed
Merge remote-tracking branch 'angularsen/master' into FixFeetInches
2 parents 70b62ce + 381e181 commit d6d779a

27 files changed

+199
-64
lines changed

Common/UnitDefinitions/CoefficientOfThermalExpansion.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
"BaseUnits": {
4343
"Θ": "DegreeFahrenheit"
4444
},
45-
"FromUnitToBaseFunc": "x*5/9",
46-
"FromBaseToUnitFunc": "x*9/5",
45+
"FromUnitToBaseFunc": "x*9/5",
46+
"FromBaseToUnitFunc": "x*5/9",
4747
"Localization": [
4848
{
4949
"Culture": "en-US",

Common/UnitDefinitions/DynamicViscosity.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,18 @@
8282
"Abbreviations": [ "lbf·s/ft²" ]
8383
}
8484
]
85+
},
86+
{
87+
"SingularName": "PoundPerFootSecond",
88+
"PluralName": "PoundsPerFootSecond",
89+
"FromUnitToBaseFunc": "x * 1.4881639",
90+
"FromBaseToUnitFunc": "x / 1.4881639",
91+
"Localization": [
92+
{
93+
"Culture": "en-US",
94+
"Abbreviations": [ "lb/ft·s" ]
95+
}
96+
]
8597
}
8698
]
8799
}

UnitsNet.NumberExtensions.Tests/GeneratedCode/NumberToDynamicViscosityExtensionsTest.g.cs

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.NumberExtensions/GeneratedCode/NumberToDynamicViscosityExtensions.g.cs

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitsNet.NumberExtensions/UnitsNet.NumberExtensions.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<!-- NuGet properties -->
33
<PropertyGroup>
44
<PackageId>UnitsNet.NumberExtensions</PackageId>
5-
<Version>4.62.0</Version>
5+
<Version>4.65.0</Version>
66
<Authors>Andreas Gullberg Larsen, Lu Li, Jon Suda</Authors>
77
<Title>Units.NET NumberExtensions</Title>
88
<Description>Adds extension methods to number types to more easily create quantities, such as 5.Meters() instead of Length.FromMeters(5).</Description>

UnitsNet.Tests/CustomCode/CoefficientOfThermalExpansionTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class CoefficientOfThermalExpansionTests : CoefficientOfThermalExpansionT
3030
{
3131
protected override double InverseDegreeCelsiusInOneInverseKelvin => 1.0;
3232

33-
protected override double InverseDegreeFahrenheitInOneInverseKelvin => 1.8;
33+
protected override double InverseDegreeFahrenheitInOneInverseKelvin => 0.5555555555555556;
3434

3535
protected override double InverseKelvinInOneInverseKelvin => 1.0;
3636
}

UnitsNet.Tests/CustomCode/DynamicViscosityTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class DynamicViscosityTests : DynamicViscosityTestsBase
1414
protected override double NewtonSecondsPerMeterSquaredInOneNewtonSecondPerMeterSquared => 1;
1515
protected override double PascalSecondsInOneNewtonSecondPerMeterSquared => 1;
1616
protected override double PoiseInOneNewtonSecondPerMeterSquared => 10;
17+
protected override double PoundsPerFootSecondInOneNewtonSecondPerMeterSquared => 0.671968994813;
1718
protected override double ReynsInOneNewtonSecondPerMeterSquared => 1.4503773773020922e-4;
1819
protected override double PoundsForceSecondPerSquareInchInOneNewtonSecondPerMeterSquared => 1.4503773773020922e-4;
1920
protected override double PoundsForceSecondPerSquareFootInOneNewtonSecondPerMeterSquared => 2.0885434233150127e-2;

UnitsNet.Tests/CustomCode/ElectricCurrentTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,12 @@ public void ElectricCurrentTimesElectricResistanceEqualsElectricPotential(float
3434
ElectricPotential potential = ElectricCurrent.FromAmperes(current) * ElectricResistance.FromOhms(resistance);
3535
Assert.Equal(expected, potential.Volts);
3636
}
37+
38+
[Fact]
39+
public void ElectricCurrentMultipliedByElectricPotentialEqualsPower()
40+
{
41+
Power p = ElectricCurrent.FromAmperes(2) * ElectricPotential.FromVolts(10);
42+
Assert.Equal(20, p.Watts);
43+
}
3744
}
3845
}

UnitsNet.Tests/CustomCode/ElectricPotentialTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,12 @@ public void ElectricPotentialDividedByElectricResistanceEqualsElectricCurrent(fl
4040
ElectricCurrent current = ElectricPotential.FromVolts(potential) / ElectricResistance.FromOhms(resistance);
4141
Assert.Equal(expected, current.Amperes);
4242
}
43+
44+
[Fact]
45+
public void ElectricPotentialMultipliedByElectricCurrentEqualsPower()
46+
{
47+
Power p = ElectricPotential.FromVolts(10) * ElectricCurrent.FromAmperes(2);
48+
Assert.Equal(20, p.Watts);
49+
}
4350
}
4451
}

UnitsNet.Tests/CustomCode/LengthTests.FeetInches.cs

Lines changed: 52 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -33,39 +33,42 @@ public void FeetInchesRoundTrip()
3333

3434
public static IEnumerable<object[]> ValidData => new List<object[]>
3535
{
36-
new object[]{"1'", 1, new CultureInfo("en-US")}, // Feet only
37-
new object[]{"1′", 1, new CultureInfo("en-US")}, // Feet only
38-
new object[]{"1,000′", 1000, new CultureInfo("en-US")}, // Feet only, with seperator
39-
new object[]{"1\"", 0.08333333, new CultureInfo("en-US")}, // Inches only
40-
new object[]{"1″", 0.08333333, new CultureInfo("en-US")}, // Inches only
41-
new object[]{"0' 1\"", 0.08333333, new CultureInfo("en-US")}, // Inches only
42-
new object[]{"0' 1″", 0.08333333, new CultureInfo("en-US")}, // Inches only
43-
new object[]{"0′ 1\"", 0.08333333, new CultureInfo("en-US")}, // Inches only
44-
new object[]{"0′ 1″", 0.08333333, new CultureInfo("en-US")}, // Inches only
45-
new object[]{"1' 1\"", 1.08333333, new CultureInfo("en-US")}, // Normal form
46-
new object[]{"1′ 1″", 1.08333333, new CultureInfo("en-US")}, // Normal form
47-
new object[]{" 1′ 1″ ", 1.08333333, new CultureInfo("en-US")}, // Normal form, requires trimming
48-
new object[]{"1'1\"", 1.08333333, new CultureInfo("en-US")}, // Without space
49-
new object[]{"1′1″", 1.08333333, new CultureInfo("en-US")}, // Without space
50-
new object[]{"1 ft 1 in", 1.08333333, new CultureInfo("en-US")},
51-
new object[]{"1ft 1in", 1.08333333, new CultureInfo("en-US")},
52-
new object[]{"-1'", -1, new CultureInfo("en-US")}, // Feet only
53-
new object[]{"-1′", -1, new CultureInfo("en-US")}, // Feet only
54-
new object[]{"-1\"", -0.08333333, new CultureInfo("en-US")}, // Inches only
55-
new object[]{"-1″", -0.08333333, new CultureInfo("en-US")}, // Inches only
56-
new object[]{"-0' 1\"", -0.08333333, new CultureInfo("en-US")}, // Inches only
57-
new object[]{"-0' 1″", -0.08333333, new CultureInfo("en-US")}, // Inches only
58-
new object[]{"-0′ 1\"", -0.08333333, new CultureInfo("en-US")}, // Inches only
59-
new object[]{"-0′ 1″", -0.08333333, new CultureInfo("en-US")}, // Inches only
60-
new object[]{"-1' 1\"", -1.08333333, new CultureInfo("en-US")}, // Normal form
61-
new object[]{"-1′ 1″", -1.08333333, new CultureInfo("en-US")}, // Normal form
62-
new object[]{" -1′ 1″ ", -1.08333333, new CultureInfo("en-US")}, // Normal form, requires trimming
63-
new object[]{"-1'1\"", -1.08333333, new CultureInfo("en-US")}, // Without space
64-
new object[]{"-1′1″", -1.08333333, new CultureInfo("en-US")}, // Without space
65-
new object[]{"-1 ft 1 in", -1.08333333, new CultureInfo("en-US")},
66-
new object[]{"-1ft 1in", -1.08333333, new CultureInfo("en-US")},
67-
new object[]{"1’000′", 1000, new CultureInfo("de-CH")}, // Feet only, with seperator
68-
new object[]{"1’000′ 6\"", 1000.5, new CultureInfo("de-CH")}, // Normal form, using separators for culture
36+
new object[]{"1'", 1, new CultureInfo("en-US", false)}, // Feet only
37+
new object[]{"1′", 1, new CultureInfo("en-US", false)}, // Feet only
38+
new object[]{"1,000′", 1000, new CultureInfo("en-US", false)}, // Feet only, with seperator
39+
new object[]{"1e3'", 1000, new CultureInfo("en-US", false)}, // Feet only, exponential notation
40+
new object[]{"1\"", 0.08333333, new CultureInfo("en-US", false)}, // Inches only
41+
new object[]{"1″", 0.08333333, new CultureInfo("en-US", false)}, // Inches only
42+
new object[]{"0' 1\"", 0.08333333, new CultureInfo("en-US", false)}, // Inches only
43+
new object[]{"0' 1″", 0.08333333, new CultureInfo("en-US", false)}, // Inches only
44+
new object[]{"0′ 1\"", 0.08333333, new CultureInfo("en-US", false)}, // Inches only
45+
new object[]{"0′ 1″", 0.08333333, new CultureInfo("en-US", false)}, // Inches only
46+
new object[]{"1' 1\"", 1.08333333, new CultureInfo("en-US", false)}, // Normal form
47+
new object[]{"1′ 1″", 1.08333333, new CultureInfo("en-US", false)}, // Normal form
48+
new object[]{" 1′ 1″ ", 1.08333333, new CultureInfo("en-US", false)}, // Normal form, requires trimming
49+
new object[]{"1'1\"", 1.08333333, new CultureInfo("en-US", false)}, // Without space
50+
new object[]{"1′1″", 1.08333333, new CultureInfo("en-US", false)}, // Without space
51+
new object[]{"1 ft 1 in", 1.08333333, new CultureInfo("en-US", false)},
52+
new object[]{"1ft 1in", 1.08333333, new CultureInfo("en-US", false)},
53+
new object[]{"-1'", -1, new CultureInfo("en-US", false)}, // Feet only
54+
new object[]{"-1′", -1, new CultureInfo("en-US", false)}, // Feet only
55+
new object[]{"-1,000′", -1000, new CultureInfo("en-US", false)}, // Feet only, with seperator
56+
new object[]{"-1e3'", -1000, new CultureInfo("en-US", false)}, // Feet only, exponential notation
57+
new object[]{"-1\"", -0.08333333, new CultureInfo("en-US", false)}, // Inches only
58+
new object[]{"-1″", -0.08333333, new CultureInfo("en-US", false)}, // Inches only
59+
new object[]{"-0' 1\"", -0.08333333, new CultureInfo("en-US", false)}, // Inches only
60+
new object[]{"-0' 1″", -0.08333333, new CultureInfo("en-US", false)}, // Inches only
61+
new object[]{"-0′ 1\"", -0.08333333, new CultureInfo("en-US", false)}, // Inches only
62+
new object[]{"-0′ 1″", -0.08333333, new CultureInfo("en-US", false)}, // Inches only
63+
new object[]{"-1' 1\"", -1.08333333, new CultureInfo("en-US", false)}, // Normal form
64+
new object[]{"-1′ 1″", -1.08333333, new CultureInfo("en-US", false)}, // Normal form
65+
new object[]{" -1′ 1″ ", -1.08333333, new CultureInfo("en-US", false)}, // Normal form, requires trimming
66+
new object[]{"-1'1\"", -1.08333333, new CultureInfo("en-US", false)}, // Without space
67+
new object[]{"-1′1″", -1.08333333, new CultureInfo("en-US", false)}, // Without space
68+
new object[]{"-1 ft 1 in", -1.08333333, new CultureInfo("en-US", false)},
69+
new object[]{"-1ft 1in", -1.08333333, new CultureInfo("en-US", false)},
70+
new object[]{"1’000′", 1000, new CultureInfo("de-CH", false)}, // Feet only, with seperator
71+
new object[]{"1’000′ 6\"", 1000.5, new CultureInfo("de-CH", false)}, // Normal form, using separators for culture
6972
};
7073

7174
[Theory]
@@ -78,22 +81,22 @@ public void TryParseFeetInches(string str, double expectedFeet, CultureInfo form
7881

7982
public static IEnumerable<object[]> InvalidData => new List<object[]>
8083
{
81-
new object[]{"a", new CultureInfo("en-US")}, // Missing or invalid apostrophe or double prime chars
82-
new object[]{"1", new CultureInfo("en-US")},
83-
new object[]{"1`", new CultureInfo("en-US")},
84-
new object[]{"1^", new CultureInfo("en-US")},
85-
new object[]{"1' 1'", new CultureInfo("en-US")}, // Feet apostrophe twice
86-
new object[]{"1′ 1′", new CultureInfo("en-US")},
87-
new object[]{"1' 1", new CultureInfo("en-US")}, // No inches double prime
88-
new object[]{"1′ 1", new CultureInfo("en-US")},
89-
new object[]{"1′ 1`", new CultureInfo("en-US")}, // Invalid inches double prime
90-
new object[]{"1' 1`", new CultureInfo("en-US")},
91-
new object[]{"1'1'", new CultureInfo("en-US")}, // Same without space
92-
new object[]{"1′1′", new CultureInfo("en-US")},
93-
new object[]{"1'1", new CultureInfo("en-US")},
94-
new object[]{"1′1", new CultureInfo("en-US")},
95-
new object[]{"1′1`", new CultureInfo("en-US")},
96-
new object[]{"1'1`", new CultureInfo("en-US")}
84+
new object[]{"a", new CultureInfo("en-US", false)}, // Missing or invalid apostrophe or double prime chars
85+
new object[]{"1", new CultureInfo("en-US", false)},
86+
new object[]{"1`", new CultureInfo("en-US", false)},
87+
new object[]{"1^", new CultureInfo("en-US", false)},
88+
new object[]{"1' 1'", new CultureInfo("en-US", false)}, // Feet apostrophe twice
89+
new object[]{"1′ 1′", new CultureInfo("en-US", false)},
90+
new object[]{"1' 1", new CultureInfo("en-US", false)}, // No inches double prime
91+
new object[]{"1′ 1", new CultureInfo("en-US", false)},
92+
new object[]{"1′ 1`", new CultureInfo("en-US", false)}, // Invalid inches double prime
93+
new object[]{"1' 1`", new CultureInfo("en-US", false)},
94+
new object[]{"1'1'", new CultureInfo("en-US", false)}, // Same without space
95+
new object[]{"1′1′", new CultureInfo("en-US", false)},
96+
new object[]{"1'1", new CultureInfo("en-US", false)},
97+
new object[]{"1′1", new CultureInfo("en-US", false)},
98+
new object[]{"1′1`", new CultureInfo("en-US", false)},
99+
new object[]{"1'1`", new CultureInfo("en-US", false)}
97100
};
98101

99102
[Theory]

0 commit comments

Comments
 (0)