|
156 | 156 | @test abs(x) == abs(Quantity(1.2, length=2 // 5))
|
157 | 157 | @test abs2(x) == Quantity(abs2(-1.2), length=4 // 5)
|
158 | 158 |
|
| 159 | + @test copy(x) == x |
| 160 | + |
159 | 161 | @test iszero(x) == false
|
160 | 162 | @test iszero(x * 0) == true
|
161 | 163 | @test isfinite(x) == true
|
|
461 | 463 | z = u"yr"
|
462 | 464 | @test utime(z) == 1
|
463 | 465 | @test ustrip(z) ≈ 60 * 60 * 24 * 365.25
|
| 466 | + @test z == uparse("yr") |
464 | 467 |
|
465 | 468 | # Test type stability of extreme range of units
|
466 | 469 | @test typeof(u"1") == DEFAULT_QUANTITY_TYPE
|
|
694 | 697 | @inferred f2(5)
|
695 | 698 | @test uexpand(f2(5)) == u"s"^5
|
696 | 699 |
|
| 700 | + @test_throws ErrorException uparse("'c'") |
697 | 701 | @test_throws ErrorException sym_uparse("'c'")
|
698 | 702 |
|
699 | 703 | # For constants which have a namespace collision, the numerical expansion is used:
|
|
734 | 738 | @test qa isa Vector{Quantity{Float64,SymbolicDimensions{Rational{Int}}}}
|
735 | 739 | DynamicQuantities.with_type_parameters(SymbolicDimensions{Float64}, Rational{Int}) == SymbolicDimensions{Rational{Int}}
|
736 | 740 |
|
| 741 | + # Many symbols in one: |
| 742 | + x = us"pm * fm * nm * μm * mm * cm * dm * m * km" |
| 743 | + y = us"s" |
| 744 | + @test inv(x) != x |
| 745 | + @test dimension(inv(x)).pm == -1 |
| 746 | + @test x != y |
| 747 | + @test y != x |
| 748 | + @test dimension(uexpand(x * y)) == dimension(u"m^9 * s") |
| 749 | + z = uexpand(x) |
| 750 | + @test x == z |
| 751 | + |
737 | 752 | @testset "Promotion with Dimensions" begin
|
738 | 753 | x = 0.5u"cm"
|
739 | 754 | y = -0.03u"m"
|
@@ -1639,12 +1654,63 @@ end
|
1639 | 1654 | @test !(Quantity(1.0) > 1.0)
|
1640 | 1655 | end
|
1641 | 1656 |
|
1642 |
| -@testset "Extra tests of `NoDims`" begin |
| 1657 | +@testset "Tests of `NoDims`" begin |
1643 | 1658 | @test promote_type(NoDims{Int16}, NoDims{Int32}) === NoDims{Int32}
|
1644 | 1659 |
|
1645 | 1660 | # Prefer other types, always:
|
1646 | 1661 | @test promote_type(Dimensions{Int16}, NoDims{Int32}) === Dimensions{Int16}
|
1647 | 1662 | @test promote_type(MyDimensions{Int16}, NoDims{Int32}) === MyDimensions{Int16}
|
| 1663 | + |
| 1664 | + # Always zero dimensions |
| 1665 | + @test iszero(dimension(1.0)) |
| 1666 | + @test iszero(dimension([1.0, 2.0])) |
| 1667 | + @test dimension(1.0) * u"1" == u"1" |
| 1668 | + @test typeof(dimension(1.0) * u"1") === typeof(u"1") |
| 1669 | + |
| 1670 | + # Even when accessed: |
| 1671 | + @test NoDims().km == 0 |
| 1672 | + @test NoDims().m != 1 |
| 1673 | + |
| 1674 | + # Even weird user-defined dimensions: |
| 1675 | + @test NoDims().cookie == 0 |
| 1676 | + |
| 1677 | + # Always returns the same type: |
| 1678 | + @test NoDims{Int32}().cookie isa Int32 |
| 1679 | + @test NoDims{Int32}().cookie == 0 |
| 1680 | +end |
| 1681 | + |
| 1682 | +@testset "Tests of SymbolicDimensionsSingleton" begin |
| 1683 | + km = SymbolicUnits.km |
| 1684 | + @test km isa Quantity{T,SymbolicDimensionsSingleton{R}} where {T,R} |
| 1685 | + @test dimension(km) isa SymbolicDimensionsSingleton |
| 1686 | + @test dimension(km) isa AbstractSymbolicDimensions |
| 1687 | + |
| 1688 | + @test dimension(km).km == 1 |
| 1689 | + @test dimension(km).m == 0 |
| 1690 | + VERSION >= v"1.9" && |
| 1691 | + @test_throws "is not available as a symbol" dimension(km).γ |
| 1692 | + @test !iszero(km) |
| 1693 | + @test inv(km) == us"km^-1" |
| 1694 | + @test inv(km) == u"km^-1" |
| 1695 | + |
| 1696 | + # Constructors |
| 1697 | + @test SymbolicDimensionsSingleton(:cm) isa SymbolicDimensionsSingleton{DEFAULT_DIM_BASE_TYPE} |
| 1698 | + @test constructorof(SymbolicDimensionsSingleton) === SymbolicDimensionsSingleton |
| 1699 | + |
| 1700 | + @test with_type_parameters( |
| 1701 | + SymbolicDimensionsSingleton{Int64}, |
| 1702 | + Int32 |
| 1703 | + ) === SymbolicDimensionsSingleton{Int32} |
| 1704 | + |
| 1705 | + @test convert( |
| 1706 | + SymbolicDimensions, |
| 1707 | + SymbolicDimensionsSingleton{Int32}(:cm) |
| 1708 | + ) isa SymbolicDimensions{Int32} |
| 1709 | + |
| 1710 | + @test copy(km) == km |
| 1711 | + |
| 1712 | + # Any operation should immediately convert it: |
| 1713 | + @test km ^ -1 isa Quantity{T,DynamicQuantities.SymbolicDimensions{R}} where {T,R} |
1648 | 1714 | end
|
1649 | 1715 |
|
1650 | 1716 | @testset "Test div" begin
|
|
0 commit comments