diff options
author | Lukas Rytz <lukas.rytz@epfl.ch> | 2009-05-20 08:24:29 +0000 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@epfl.ch> | 2009-05-20 08:24:29 +0000 |
commit | eb96cbb7bcb487b3b1c8aacad61c6594ff695b51 (patch) | |
tree | 61dea0fc18e7b103d8be7894480cd143b2f34626 /src/library | |
parent | 92be0221eac42864fdb4e60310758f4cae98a819 (diff) | |
download | scala-eb96cbb7bcb487b3b1c8aacad61c6594ff695b51.tar.gz scala-eb96cbb7bcb487b3b1c8aacad61c6594ff695b51.tar.bz2 scala-eb96cbb7bcb487b3b1c8aacad61c6594ff695b51.zip |
more debugging code for teh NoSuchElementException
Diffstat (limited to 'src/library')
-rw-r--r-- | src/library/scala/collection/mutable/HashTable.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/mutable/LinkedHashMap.scala | 46 |
2 files changed, 32 insertions, 16 deletions
diff --git a/src/library/scala/collection/mutable/HashTable.scala b/src/library/scala/collection/mutable/HashTable.scala index 1cd4698b01..ce00ac6c8a 100644 --- a/src/library/scala/collection/mutable/HashTable.scala +++ b/src/library/scala/collection/mutable/HashTable.scala @@ -131,7 +131,7 @@ trait HashTable[A] extends AnyRef { private def newThreshold(size: Int) = ((size.toLong * loadFactor)/loadFactorDenum).toInt - private def resize(newSize: Int) = { + /* debug NoSuchElementException private*/ protected def resize(newSize: Int) = { val oldTable = table table = new Array(newSize) var i = oldTable.length - 1 diff --git a/src/library/scala/collection/mutable/LinkedHashMap.scala b/src/library/scala/collection/mutable/LinkedHashMap.scala index 5c4132f72b..f2cdf99c5b 100644 --- a/src/library/scala/collection/mutable/LinkedHashMap.scala +++ b/src/library/scala/collection/mutable/LinkedHashMap.scala @@ -69,16 +69,30 @@ class LinkedHashMap[A, B] extends Map[A, B] override def elements = ordered.reverse.elements map {e => (e.key, e.value)} // debug NoSuchElementException in Pickler - var savedTableString = "" - def saveTableStringIfResize(hcode: Int) { - savedTableString = - if (tableSize + 1 > threshold) tableString(hcode) - else "" + var previousTables: List[(String, Int)] = Nil + + override protected def resize(newSize: Int) { + previousTables = (tableString(table), table.length) :: previousTables + super.resize(newSize) + // check consistency + for (i <- 0 until table.length) { + var e = table(i) + while (e != null) { + if (index(e.key.hashCode()) != i) { + println("INCONSISTENT entry at "+ i +" after resize. before:") + println("index before: "+ indx(e.key.hashCode(), previousTables.head._2)) + println(previousTables.head._1) + println("AFTER:") + println("index after: "+ index(e.key.hashCode())) + println(tableString(table)) + } + e = e.next + } + } } - def tableString(hcode: Int): String = { + def tableString(table: Array[HashEntry[A, Entry]]): String = { val sb = new StringBuilder - sb.append("index: "+ index(hcode) +"\n") for (i <- 0 until table.length) { sb.append(""+ i +": ") var e = table(i).asInstanceOf[Entry] @@ -91,14 +105,16 @@ class LinkedHashMap[A, B] extends Map[A, B] sb.toString } - def printHashTable(hcode: Int) { - if (savedTableString != "") { - println("BEFORE (add did a resize!)") - println(savedTableString) - println("AFTER") - } else { - println("TABLE after adding (no re-size was required)") + def indx(hash: Int, length: Int) = improve(hash) & (length - 1) + def printHashTable(notFoundHash: Int) { + println("Hash not found: "+ notFoundHash) + println("hashtables") + for (tb <- previousTables.reverse) { + println("with index: "+ indx(notFoundHash, tb._2)) + println(tb._1) + println(" ==> RESIZE, then:") } - println(tableString(hcode)) + println("with index: "+ index(notFoundHash)) + println(tableString(table)) } } |