summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2009-05-20 08:24:29 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2009-05-20 08:24:29 +0000
commiteb96cbb7bcb487b3b1c8aacad61c6594ff695b51 (patch)
tree61dea0fc18e7b103d8be7894480cd143b2f34626 /src/library
parent92be0221eac42864fdb4e60310758f4cae98a819 (diff)
downloadscala-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.scala2
-rw-r--r--src/library/scala/collection/mutable/LinkedHashMap.scala46
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))
}
}