From 8e9ed8d878e7fd4134f27dbe56ae8b6fbb45c51f Mon Sep 17 00:00:00 2001 From: Benjamin Deonovic Date: Fri, 9 Dec 2016 16:28:31 -0600 Subject: [PATCH 1/8] Add `one` for AbstractString From discussion in https://github.com/JuliaLang/julia/issues/19536 --- base/strings/basic.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 21a706bee25cd..00d74b057b250 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -108,6 +108,8 @@ julia> "Hello " * "world" (.*){T<:AbstractString}(v::Vector{T},s::AbstractString) = [i*s for i in v] (.*){T<:AbstractString}(s::AbstractString,v::Vector{T}) = [s*i for i in v] +one(s::AbstractString) = "" + length(s::DirectIndexString) = endof(s) """ From 047c356b830561f3e50eaeaefb33f76467a6a4f5 Mon Sep 17 00:00:00 2001 From: Benjamin Deonovic Date: Sat, 10 Dec 2016 17:01:10 -0600 Subject: [PATCH 2/8] Add doc and test --- base/strings/basic.jl | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 00d74b057b250..3d98f579eeb2a 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -108,7 +108,20 @@ julia> "Hello " * "world" (.*){T<:AbstractString}(v::Vector{T},s::AbstractString) = [i*s for i in v] (.*){T<:AbstractString}(s::AbstractString,v::Vector{T}) = [s*i for i in v] -one(s::AbstractString) = "" + +""" +``` +one{U<:AbstractString}(::Type{U}) +``` + +String multiplicative identity. + +```jldoctest +julia> "Hello world" * one(String) +"Hello world" +``` +""" +one{U<:AbstractString}(::Type{U}) = convert(U, "") length(s::DirectIndexString) = endof(s) From d8df210dec92d4a61aa3e079dfd877f3d109806e Mon Sep 17 00:00:00 2001 From: Benjamin Deonovic Date: Sat, 10 Dec 2016 17:13:44 -0600 Subject: [PATCH 3/8] delete trailing whitespace --- base/strings/basic.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 3d98f579eeb2a..e1759f8b75611 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -114,7 +114,7 @@ julia> "Hello " * "world" one{U<:AbstractString}(::Type{U}) ``` -String multiplicative identity. +String multiplicative identity. ```jldoctest julia> "Hello world" * one(String) From 49065860d984b34f2af690a746f8795aba624d02 Mon Sep 17 00:00:00 2001 From: Benjamin Deonovic Date: Sun, 11 Dec 2016 11:38:25 -0600 Subject: [PATCH 4/8] Remove doc --- base/strings/basic.jl | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index e1759f8b75611..4eb81707f1ac4 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -108,19 +108,6 @@ julia> "Hello " * "world" (.*){T<:AbstractString}(v::Vector{T},s::AbstractString) = [i*s for i in v] (.*){T<:AbstractString}(s::AbstractString,v::Vector{T}) = [s*i for i in v] - -""" -``` -one{U<:AbstractString}(::Type{U}) -``` - -String multiplicative identity. - -```jldoctest -julia> "Hello world" * one(String) -"Hello world" -``` -""" one{U<:AbstractString}(::Type{U}) = convert(U, "") length(s::DirectIndexString) = endof(s) From ba3643257a17d2ddc498ea27dc393ea00ca9cdfc Mon Sep 17 00:00:00 2001 From: Benjamin Deonovic Date: Sun, 11 Dec 2016 13:14:04 -0600 Subject: [PATCH 5/8] Change U to T --- base/strings/basic.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 4eb81707f1ac4..052f4a1192ca3 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -108,7 +108,7 @@ julia> "Hello " * "world" (.*){T<:AbstractString}(v::Vector{T},s::AbstractString) = [i*s for i in v] (.*){T<:AbstractString}(s::AbstractString,v::Vector{T}) = [s*i for i in v] -one{U<:AbstractString}(::Type{U}) = convert(U, "") +one{T<:AbstractString}(::Type{T}) = convert(U, "") length(s::DirectIndexString) = endof(s) From 4c819cb406634b49dc90806412d937ecff65713a Mon Sep 17 00:00:00 2001 From: Benjamin Deonovic Date: Sun, 11 Dec 2016 13:14:31 -0600 Subject: [PATCH 6/8] Update basic.jl --- base/strings/basic.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 052f4a1192ca3..2a7ba8bb9b4ce 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -108,7 +108,7 @@ julia> "Hello " * "world" (.*){T<:AbstractString}(v::Vector{T},s::AbstractString) = [i*s for i in v] (.*){T<:AbstractString}(s::AbstractString,v::Vector{T}) = [s*i for i in v] -one{T<:AbstractString}(::Type{T}) = convert(U, "") +one{T<:AbstractString}(::Type{T}) = convert(T, "") length(s::DirectIndexString) = endof(s) From 7bf6c7bd782e5dcc2b832bb62d9a78c931bd3370 Mon Sep 17 00:00:00 2001 From: Benjamin Deonovic Date: Sun, 11 Dec 2016 16:41:21 -0600 Subject: [PATCH 7/8] Add test --- test/strings/basic.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/strings/basic.jl b/test/strings/basic.jl index aa1ccc2559ec6..949fabb9af2f4 100644 --- a/test/strings/basic.jl +++ b/test/strings/basic.jl @@ -416,6 +416,10 @@ foobaz(ch) = reinterpret(Char, typemax(UInt32)) @test ["b","c"].*"a" == ["ba","ca"] @test ["a","b"].*["c" "d"] == ["ac" "ad"; "bc" "bd"] +@test one(String) == "" +@test prod(["*" for i in 1:3]) == "***" +@test prod(["*" for i in 1:0]) == "" + # Make sure NULL pointers are handled consistently by String @test_throws ArgumentError unsafe_string(Ptr{UInt8}(0)) @test_throws ArgumentError unsafe_string(Ptr{UInt8}(0), 10) From 99eec78946cd8c8849db34fd5e0acea76f793630 Mon Sep 17 00:00:00 2001 From: Benjamin Deonovic Date: Mon, 12 Dec 2016 14:30:50 -0600 Subject: [PATCH 8/8] Redefine for consistency --- base/strings/basic.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 2a7ba8bb9b4ce..5126aa73a6772 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -108,7 +108,7 @@ julia> "Hello " * "world" (.*){T<:AbstractString}(v::Vector{T},s::AbstractString) = [i*s for i in v] (.*){T<:AbstractString}(s::AbstractString,v::Vector{T}) = [s*i for i in v] -one{T<:AbstractString}(::Type{T}) = convert(T, "") +one{T<:AbstractString}(::Union{T,Type{T}}) = convert(T, "") length(s::DirectIndexString) = endof(s)