Add ReferenceQueue test

Also cleaned up reference queue.
TODO: Add tests for missing functionality.

Bug: 10808403

Change-Id: I182f9cb69022fe542ea9e53d4c6d35cff90af332
diff --git a/runtime/gc/reference_queue.cc b/runtime/gc/reference_queue.cc
index 4003524..f4efe3c 100644
--- a/runtime/gc/reference_queue.cc
+++ b/runtime/gc/reference_queue.cc
@@ -91,15 +91,30 @@
 void ReferenceQueue::Dump(std::ostream& os) const {
   mirror::Reference* cur = list_;
   os << "Reference starting at list_=" << list_ << "\n";
-  while (cur != nullptr) {
+  if (cur == nullptr) {
+    return;
+  }
+  do {
     mirror::Reference* pending_next = cur->GetPendingNext();
-    os << "PendingNext=" << pending_next;
+    os << "Reference= " << cur << " PendingNext=" << pending_next;
     if (cur->IsFinalizerReferenceInstance()) {
       os << " Zombie=" << cur->AsFinalizerReference()->GetZombie();
     }
     os << "\n";
     cur = pending_next;
+  } while (cur != list_);
+}
+
+size_t ReferenceQueue::GetLength() const {
+  size_t count = 0;
+  mirror::Reference* cur = list_;
+  if (cur != nullptr) {
+    do {
+      ++count;
+      cur = cur->GetPendingNext();
+    } while (cur != list_);
   }
+  return count;
 }
 
 void ReferenceQueue::ClearWhiteReferences(ReferenceQueue* cleared_references,