|
20 | 20 | num_in_numbits, |
21 | 21 | register_sqlite_functions, |
22 | 22 | ) |
| 23 | +from coverage.sqldata import NumbitsUnionAgg |
23 | 24 |
|
24 | 25 | from tests.coveragetest import CoverageTest |
25 | 26 | from tests.hypo import example, given, settings |
@@ -112,6 +113,11 @@ def setUp(self) -> None: |
112 | 113 | conn = sqlite3.connect(":memory:") |
113 | 114 | register_sqlite_functions(conn) |
114 | 115 | self.cursor = conn.cursor() |
| 116 | + conn.create_aggregate( |
| 117 | + "numbits_union_agg", |
| 118 | + 1, |
| 119 | + NumbitsUnionAgg, # type: ignore[arg-type] |
| 120 | + ) |
115 | 121 | self.cursor.execute("create table data (id int, numbits blob)") |
116 | 122 | self.cursor.executemany( |
117 | 123 | "insert into data (id, numbits) values (?, ?)", |
@@ -155,6 +161,14 @@ def test_numbits_union(self) -> None: |
155 | 161 | answer = numbits_to_nums(list(res)[0][0]) |
156 | 162 | assert expected == answer |
157 | 163 |
|
| 164 | + def test_numbits_union_aggregate(self) -> None: |
| 165 | + res = self.cursor.execute( |
| 166 | + "select numbits_union_agg(numbits) from data where id in (7, 9)", |
| 167 | + ) |
| 168 | + expected = set(range(7, 100, 7)) | set(range(9, 100, 9)) |
| 169 | + answer = set(numbits_to_nums(list(res)[0][0])) |
| 170 | + assert expected == answer |
| 171 | + |
158 | 172 | def test_numbits_intersection(self) -> None: |
159 | 173 | res = self.cursor.execute( |
160 | 174 | "select numbits_intersection(" |
|
0 commit comments