Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
May 16, 2014 Bug with std.string.indexOf and case sensivity | ||||
---|---|---|---|---|
| ||||
Hello, I was playing around with indexOf when I noticed that the parameter CaseSensitive seems to have a weird behavior. Let's say the following code: string str = "Les chemises sont sèches"; write(std.string.indexOf(str, "Les")); // Returns 0, as expected write(std.string.indexOf(str, "les", CaseSensitive.no)); // Returns -1 while it should return 0 write(std.string.indexOf(str, "Les", CaseSensitive.yes)); // Returns -1 while it should return 0 I'm using DMD 2.065 and if I am not mistaken, I think it was working fine with DMD 2.064. Or is it that I do not understand what CaseSensitive really do? Alexandre L. |
May 17, 2014 Re: Bug with std.string.indexOf and case sensivity | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alexandre L. | On 05/16/2014 04:52 PM, Alexandre L. wrote:
> Hello,
> I was playing around with indexOf when I noticed that the parameter
> CaseSensitive seems to have a weird behavior.
>
> Let's say the following code:
>
> string str = "Les chemises sont sèches";
>
> write(std.string.indexOf(str, "Les")); // Returns 0, as expected
> write(std.string.indexOf(str, "les", CaseSensitive.no)); // Returns -1
> while it should return 0
> write(std.string.indexOf(str, "Les", CaseSensitive.yes)); // Returns -1
> while it should return 0
>
> I'm using DMD 2.065 and if I am not mistaken, I think it was working
> fine with DMD 2.064. Or is it that I do not understand what
> CaseSensitive really do?
>
> Alexandre L.
All return 0 with dmd git head.
Ali
|
May 17, 2014 Re: Bug with std.string.indexOf and case sensivity | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Saturday, 17 May 2014 at 00:31:14 UTC, Ali Çehreli wrote:
> On 05/16/2014 04:52 PM, Alexandre L. wrote:
>> Hello,
>> I was playing around with indexOf when I noticed that the parameter
>> CaseSensitive seems to have a weird behavior.
>>
>> Let's say the following code:
>>
>> string str = "Les chemises sont sèches";
>>
>> write(std.string.indexOf(str, "Les")); // Returns 0, as expected
>> write(std.string.indexOf(str, "les", CaseSensitive.no)); // Returns -1
>> while it should return 0
>> write(std.string.indexOf(str, "Les", CaseSensitive.yes)); // Returns -1
>> while it should return 0
>>
>> I'm using DMD 2.065 and if I am not mistaken, I think it was working
>> fine with DMD 2.064. Or is it that I do not understand what
>> CaseSensitive really do?
>>
>> Alexandre L.
>
> All return 0 with dmd git head.
>
> Ali
Hi Ali,
Thanks for your reply. I'm not working with the git head so it seems the issue was probably fixed after?
Note that I am compiling as
"dmd -w -O -unittest"
I'll try to fetch git head and get everything working.
Alexandre L.
|
May 17, 2014 Re: Bug with std.string.indexOf and case sensivity | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alexandre L. |
> I'll try to fetch git head and get everything working.
>
> Alexandre L.
Nevermind that.
For some reasons, the bug was happening when my main.d file looked like this:
import std.stdio;
//import std.string; // will work when imported
int main()
{
string str = "Les chemises";
// doesnt work
write(std.string.indexOf(str, "Les", CaseSensivity.yes));
return 0;
}
---
While it works when importing std.string. Note that I was using exactly the same enum (at least, I thought ?) than std.string
enum CaseSensivity { no, yes }
Whatever, it works now. I just need to don't forget to import std.string.
Alexandre L.
|
May 17, 2014 Re: Bug with std.string.indexOf and case sensivity | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alexandre L. | On 05/16/2014 05:55 PM, Alexandre L. wrote: > >> I'll try to fetch git head and get everything working. >> >> Alexandre L. > > Nevermind that. > For some reasons, the bug was happening when my main.d file looked like > this: > > import std.stdio; > //import std.string; // will work when imported > > int main() > { > string str = "Les chemises"; > // doesnt work > write(std.string.indexOf(str, "Les", CaseSensivity.yes)); I can't explain right now how it happens but I suspect that there is an implicit conversion issue and your enum literal is taken as the startIdx parameter of one of the many overloads of indexOf. Ali > return 0; > } > > --- > While it works when importing std.string. Note that I was using exactly > the same enum (at least, I thought ?) than std.string > > enum CaseSensivity { no, yes } > > Whatever, it works now. I just need to don't forget to import std.string. > > Alexandre L. |
May 17, 2014 Re: Bug with std.string.indexOf and case sensivity | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Saturday, 17 May 2014 at 01:08:47 UTC, Ali Çehreli wrote:
> On 05/16/2014 05:55 PM, Alexandre L. wrote:
>
> >
> >> I'll try to fetch git head and get everything working.
> >>
> >> Alexandre L.
> >
> > Nevermind that.
> > For some reasons, the bug was happening when my main.d file
> looked like
> > this:
> >
> > import std.stdio;
> > //import std.string; // will work when imported
> >
> > int main()
> > {
> > string str = "Les chemises";
> > // doesnt work
> > write(std.string.indexOf(str, "Les", CaseSensivity.yes));
>
> I can't explain right now how it happens but I suspect that there is an implicit conversion issue and your enum literal is taken as the startIdx parameter of one of the many overloads of indexOf.
>
> Ali
>
> > return 0;
> > }
> >
> > ---
> > While it works when importing std.string. Note that I was
> using exactly
> > the same enum (at least, I thought ?) than std.string
> >
> > enum CaseSensivity { no, yes }
> >
> > Whatever, it works now. I just need to don't forget to import
> std.string.
> >
> > Alexandre L.
That would make perfect sense.
Thanks for the help. I'll try to investigate further later.
Alexandre L.
|
Copyright © 1999-2021 by the D Language Foundation