From 2b6366656f15d63985a2a5b7d5a73c2364de1132 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Tue, 11 Dec 2012 11:04:40 -0500 Subject: [PATCH] BF: make sorting of date templates stable Before, it would first do stable sort followed with explicit reverse. Now reverse is given as an argument to sort, and it results in actually preserving the order in case of e.g. no sorting needed --- server/datedetector.py | 5 +++-- testcases/datedetectortestcase.py | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/server/datedetector.py b/server/datedetector.py index 7301ec91..5b1f3c6c 100644 --- a/server/datedetector.py +++ b/server/datedetector.py @@ -194,7 +194,8 @@ class DateDetector: self.__lock.acquire() try: logSys.debug("Sorting the template list") - self.__templates.sort(lambda x, y: cmp(x.getHits(), y.getHits())) - self.__templates.reverse() + self.__templates.sort(lambda x, y: cmp(x.getHits(), y.getHits()), reverse=True) + t = self.__templates[0] + logSys.debug("Winning template: %s with %d hits" % (t.getName(), t.getHits())) finally: self.__lock.release() diff --git a/testcases/datedetectortestcase.py b/testcases/datedetectortestcase.py index 1f73cd1e..d6946144 100644 --- a/testcases/datedetectortestcase.py +++ b/testcases/datedetectortestcase.py @@ -78,6 +78,14 @@ class DateDetectorTest(unittest.TestCase): self.assertEqual(self.__datedetector.getTime(log)[:6], date[:6]) self.assertEqual(self.__datedetector.getUnixTime(log), dateUnix) + def testStableSortTemplate(self): + old_names = [x.getName() for x in self.__datedetector.getTemplates()] + self.__datedetector.sortTemplate() + # If there were no hits -- sorting should not change the order + for old_name, n in zip(old_names, self.__datedetector.getTemplates()): + self.assertEqual(old_name, n.getName()) # "Sort must be stable" + + # def testDefaultTempate(self): # self.__datedetector.setDefaultRegex("^\S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2}") # self.__datedetector.setDefaultPattern("%b %d %H:%M:%S")