[Zope-Checkins] CVS: Zope/lib/python/Products/ZCTextIndex/tests - testIndex.py:1.11.74.3
Casey Duncan
casey@zope.com
Thu, 5 Jun 2003 15:02:21 -0400
Update of /cvs-repository/Zope/lib/python/Products/ZCTextIndex/tests
In directory cvs.zope.org:/tmp/cvs-serv14371/tests
Modified Files:
Tag: casey-zctextindex-fewer-conflicts-branch
testIndex.py
Log Message:
Fix flaw in query mechanism by removing a len(BTree) and replacing it with a cached length lookup. This should improve performance and scalability.
Add document_count method for this purpose. This method is overridden by a BTree.Length.Length object in instances.
Added code to opportunistically cache the length when the index is changed
Added tests for length, and upgrade code
Updated interface
=== Zope/lib/python/Products/ZCTextIndex/tests/testIndex.py 1.11.74.2 => 1.11.74.3 ===
--- Zope/lib/python/Products/ZCTextIndex/tests/testIndex.py:1.11.74.2 Thu Jun 5 00:41:58 2003
+++ Zope/lib/python/Products/ZCTextIndex/tests/testIndex.py Thu Jun 5 15:02:20 2003
@@ -15,6 +15,7 @@
import os
from unittest import TestCase, TestSuite, main, makeSuite
+from BTrees.Length import Length
from Products.ZCTextIndex.Lexicon import Lexicon, Splitter
from Products.ZCTextIndex.CosineIndex import CosineIndex
from Products.ZCTextIndex.OkapiIndex import OkapiIndex
@@ -35,6 +36,8 @@
self.assert_(self.index.has_doc(DOCID))
self.assert_(self.index._docweight[DOCID])
self.assertEqual(len(self.index._docweight), 1)
+ self.assertEqual(
+ len(self.index._docweight), self.index.document_count())
self.assertEqual(len(self.index._wordinfo), 5)
self.assertEqual(len(self.index._docwords), 1)
self.assertEqual(len(self.index.get_words(DOCID)), 5)
@@ -49,6 +52,8 @@
self.test_index_document(DOCID)
self.index.unindex_doc(DOCID)
self.assertEqual(len(self.index._docweight), 0)
+ self.assertEqual(
+ len(self.index._docweight), self.index.document_count())
self.assertEqual(len(self.index._wordinfo), 0)
self.assertEqual(len(self.index._docwords), 0)
self.assertEqual(len(self.index._wordinfo),
@@ -61,6 +66,8 @@
self.index.index_doc(DOCID, doc)
self.assert_(self.index._docweight[DOCID])
self.assertEqual(len(self.index._docweight), 2)
+ self.assertEqual(
+ len(self.index._docweight), self.index.document_count())
self.assertEqual(len(self.index._wordinfo), 8)
self.assertEqual(len(self.index._docwords), 2)
self.assertEqual(len(self.index.get_words(DOCID)), 4)
@@ -83,6 +90,8 @@
self.index.unindex_doc(1)
DOCID = 2
self.assertEqual(len(self.index._docweight), 1)
+ self.assertEqual(
+ len(self.index._docweight), self.index.document_count())
self.assert_(self.index._docweight[DOCID])
self.assertEqual(len(self.index._wordinfo), 4)
self.assertEqual(len(self.index._docwords), 1)
@@ -102,6 +111,8 @@
self.assertEqual(len(self.index.get_words(DOCID)), 7)
self.assertEqual(len(self.index._wordinfo),
self.index.length())
+ self.assertEqual(
+ len(self.index._docweight), self.index.document_count())
wids = self.lexicon.termToWordIds("repeat")
self.assertEqual(len(wids), 1)
repititive_wid = wids[0]
@@ -211,9 +222,9 @@
copy.index_doc(1, 'Then again, who asked you?')
get_transaction().commit()
-class TestTotalDocLenUpgrade(TestCase):
+class TestUpgrade(TestCase):
- def test_query_before_upgrade(self):
+ def test_query_before_totaldoclen_upgrade(self):
self.index1 = OkapiIndex(Lexicon(Splitter()))
self.index1.index_doc(0, 'The quiet of night')
# Revert index1 back to a long to simulate an older index instance
@@ -236,13 +247,40 @@
self.index2.unindex_doc(0)
self.assertEqual(
self.index1._totaldoclen(), self.index2._totaldoclen())
+
+ def test_query_before_document_count_upgrade(self):
+ self.index1 = OkapiIndex(Lexicon(Splitter()))
+ self.index1.index_doc(0, 'The quiet of night')
+ # Revert index1 back to a long to simulate an older index instance
+ del self.index1.document_count
+ self.assertEqual(len(self.index1.search('night')), 1)
+
+ def test_upgrade_document_count(self):
+ self.index1 = OkapiIndex(Lexicon())
+ self.index2 = OkapiIndex(Lexicon())
+ self.index1.index_doc(0, 'The quiet of night')
+ self.index2.index_doc(0, 'The quiet of night')
+ # Revert index1 back to simulate an older index instance
+ del self.index1.document_count
+ self.index1.index_doc(1, 'gazes upon my shadow')
+ self.index2.index_doc(1, 'gazes upon my shadow')
+ self.assert_(self.index1.document_count.__class__ is Length)
+ self.assertEqual(
+ self.index1.document_count(), self.index2.document_count())
+ del self.index1.document_count
+ self.index1.unindex_doc(0)
+ self.index2.unindex_doc(0)
+ self.assert_(self.index1.document_count.__class__ is Length)
+ self.assertEqual(
+ self.index1.document_count(), self.index2.document_count())
+
def test_suite():
return TestSuite((makeSuite(CosineIndexTest),
makeSuite(OkapiIndexTest),
makeSuite(TestIndexConflict),
- makeSuite(TestTotalDocLenUpgrade),
+ makeSuite(TestUpgrade),
))
if __name__=='__main__':