Use groupby()
diff --git a/test/shaping/hb_test_tools.py b/test/shaping/hb_test_tools.py
index 70a9ce1..d3c0939 100644
--- a/test/shaping/hb_test_tools.py
+++ b/test/shaping/hb_test_tools.py
@@ -150,7 +150,8 @@
 
 	@staticmethod
 	def filter_failures (f):
-		for lines in DiffHelpers.separate_test_cases (f):
+		for key, lines in DiffHelpers.separate_test_cases (f):
+			lines = list (lines)
 			if not DiffHelpers.test_passed (lines):
 				for l in lines: yield l
 
@@ -160,7 +161,7 @@
 	def print_stat (f):
 		passed = 0
 		failed = 0
-		for lines in DiffHelpers.separate_test_cases (f):
+		for key, lines in DiffHelpers.separate_test_cases (f):
 			if DiffHelpers.test_passed (lines):
 				passed += 1
 			else:
@@ -176,22 +177,11 @@
 		   have a colon character, groups them by identifier,
 		   yielding lists of all lines with the same identifier.'''
 
-		acc = []
-		iden = None
-		for l in f:
-			if ':' not in l:
-				if acc: yield acc
-				acc = []
-				iden = None
-				yield [l]
-				continue
-			l_iden = l[1:l.index (':')]
-			if acc and iden != l_iden:
-				yield acc
-				acc = []
-			iden = l_iden
-			acc.append (l)
-		if acc: yield acc
+		def identifier (l):
+			if ':' in l[1:]:
+				return l[1:l.index (':')]
+			return l
+		return groupby (f, key=identifier)
 
 	@staticmethod
 	def test_passed (lines):