Skip to content

Commit

Permalink
make FixedTimeZones be isbits by using ShortStrings
Browse files Browse the repository at this point in the history
Tweak comment

tweak comment

do use split with short strings

Julia needs brakets for function application
  • Loading branch information
oxinabox committed Apr 14, 2021
1 parent faa208e commit 7ba4d85
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 2 deletions.
2 changes: 2 additions & 0 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
Serialization = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
ShortStrings = "63221d1c-8677-4ff0-9126-0ff0817b4975"
Unicode = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"

[compat]
EzXML = "0.9.1, 1"
Mocking = "0.7"
RecipesBase = "0.7, 0.8, 1"
ShortStrings = "0.3.6"
julia = "1"

[extras]
Expand Down
1 change: 1 addition & 0 deletions src/TimeZones.jl
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ using Dates
using Printf
using Serialization
using RecipesBase: RecipesBase, @recipe
using ShortStrings: ShortString15
using Unicode

import Dates: TimeZone, UTC
Expand Down
8 changes: 6 additions & 2 deletions src/types/fixedtimezone.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Ideally would always use ShortString15, but it's `hash` is broken on 32-bit systems.
# https://github.com/JuliaString/MurmurHash3.jl/issues/12
const FixedTimeZoneName = Int === Int64 ? ShortString15 : String

const FIXED_TIME_ZONE_REGEX = r"""
^(?|
Z
Expand Down Expand Up @@ -30,7 +34,7 @@ const FIXED_TIME_ZONE_REGEX = r"""
A `TimeZone` with a constant offset for all of time.
"""
struct FixedTimeZone <: TimeZone
name::String
name::FixedTimeZoneName
offset::UTCOffset
end

Expand Down Expand Up @@ -72,7 +76,7 @@ UTC+15:45:21
function FixedTimeZone(s::AbstractString)
s == "Z" && return UTC_ZERO

m = match(FIXED_TIME_ZONE_REGEX, s)
m = match(FIXED_TIME_ZONE_REGEX, String(s))
m === nothing && throw(ArgumentError("Unrecognized time zone: $s"))

coefficient = m[:sign] == "-" ? -1 : 1
Expand Down
10 changes: 10 additions & 0 deletions test/types/fixedtimezone.jl
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,14 @@
fixed_tz = FixedTimeZone("UTC")
@test size(fixed_tz .== fixed_tz) == ()
end

@testset "isbits" begin
# We are not using ShortStrings on 32-bit due to hash being broken on 32-bit.
# See https://github.com/JuliaString/MurmurHash3.jl/issues/12
if Int === Int64
@test isbits(FixedTimeZone("0123"))
else
@test_broken isbits(FixedTimeZone("0123"))
end
end
end

0 comments on commit 7ba4d85

Please sign in to comment.