www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 8435] New: BigInts don't work well in associative arrays

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435

           Summary: BigInts don't work well in associative arrays
           Product: D
           Version: D2
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Keywords: wrong-code
          Severity: normal
          Priority: P2
         Component: druntime
        AssignedTo: nobody puremagic.com
        ReportedBy: bearophile_hugs eml.cc



import std.bigint;
void main() {
    int[BigInt] aa;
    aa[BigInt(100)] = 1;
    assert(BigInt(100) in aa); // assert error
}



While this is OK:

import std.bigint;
void main() {
    int[BigInt] aa;
    auto x = BigInt(100);
    aa[x] = 1;
    assert(x in aa); // assert passes
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 25 2012
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435






-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 07 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435






-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 07 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435




This bug is caused by two problems:

1) BigInt does not define toHash(), so two different instances of BigInt will
always have a distinct hash, even if the values they represent are equal.

2) For some reason, typeid(BigInt).compare() will always return non-zero for
two distinct instances of BigInt; this causes the AA code to think the two
BigInts are not equal even if their hash is the same.

I have the fix for (1), but still investigating (2); it may be a compiler bug,
I'm not sure yet.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 07 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435






-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 07 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435




https://github.com/D-Programming-Language/phobos/pull/1402

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 08 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435






-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 08 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435




Gah, ignore the previous note, I posted it to the wrong bug.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 08 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435


Kenji Hara <k.hara.pg gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |alvaro.segura gmail.com



*** Issue 10118 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 08 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435




From bug 10118:
 Associative arrays with BigInts as keys are unusable:
 
 import std.bigint, std.stdio;
 void main()
 {
     int[BigInt] a;
     a[BigInt(3)] = 3;
     a[BigInt(3)] = 4;
     writeln(a);
 }
 
 Prints:
 
 [3:3, 3:4]
 
 Apparently duplicate keys.
 
 Probably related to Issue 8435.
 
 I thought this was a consequence of Issue 3789 because BigInt is a struct
 containing a string. But that was resolved recently, and this bug still appears
 in 2.063 beta.
-- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 08 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435




Commits pushed to master at https://github.com/D-Programming-Language/phobos

https://github.com/D-Programming-Language/phobos/commit/70d4c03fe295dfdd320488b3e5435ede3b55640b
Fix issues 8435, 10118.

https://github.com/D-Programming-Language/phobos/commit/fc12f98267b6506117d88a79fd51945d2db4c6b8


Fix issues 8435, 10118.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 22 2013
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8435


hsteoh quickfur.ath.cx changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 22 2013