88- set_member
99- list_to_set
1010"""
11+
1112import time
1213
1314import pytest
@@ -22,8 +23,10 @@ def extract_values(result_list):
2223 """Extract raw values from a list of typed literals."""
2324 if not result_list :
2425 return []
25- return [item ["@value" ] if isinstance (item , dict ) and "@value" in item else item
26- for item in result_list ]
26+ return [
27+ item ["@value" ] if isinstance (item , dict ) and "@value" in item else item
28+ for item in result_list
29+ ]
2730
2831
2932class TestWOQLSetOperations :
@@ -35,14 +38,14 @@ def setup_teardown(self, docker_url):
3538 self .client = Client (docker_url , user_agent = test_user_agent )
3639 self .client .connect ()
3740 self .db_name = "test_woql_set_operations"
38-
41+
3942 # Create database for tests
4043 if self .db_name in self .client .list_databases ():
4144 self .client .delete_database (self .db_name )
4245 self .client .create_database (self .db_name )
43-
46+
4447 yield
45-
48+
4649 # Cleanup
4750 self .client .delete_database (self .db_name )
4851
@@ -51,9 +54,9 @@ def test_set_difference_basic(self):
5154 query = WOQLQuery ().woql_and (
5255 WOQLQuery ().eq ("v:ListA" , [1 , 2 , 3 , 4 ]),
5356 WOQLQuery ().eq ("v:ListB" , [2 , 4 ]),
54- WOQLQuery ().set_difference ("v:ListA" , "v:ListB" , "v:Diff" )
57+ WOQLQuery ().set_difference ("v:ListA" , "v:ListB" , "v:Diff" ),
5558 )
56-
59+
5760 result = self .client .query (query )
5861 assert len (result ["bindings" ]) == 1
5962 assert extract_values (result ["bindings" ][0 ]["Diff" ]) == [1 , 3 ]
@@ -63,9 +66,9 @@ def test_set_difference_subset(self):
6366 query = WOQLQuery ().woql_and (
6467 WOQLQuery ().eq ("v:ListA" , [1 , 2 ]),
6568 WOQLQuery ().eq ("v:ListB" , [1 , 2 , 3 ]),
66- WOQLQuery ().set_difference ("v:ListA" , "v:ListB" , "v:Diff" )
69+ WOQLQuery ().set_difference ("v:ListA" , "v:ListB" , "v:Diff" ),
6770 )
68-
71+
6972 result = self .client .query (query )
7073 assert len (result ["bindings" ]) == 1
7174 assert result ["bindings" ][0 ]["Diff" ] == []
@@ -75,9 +78,9 @@ def test_set_difference_empty_list(self):
7578 query = WOQLQuery ().woql_and (
7679 WOQLQuery ().eq ("v:ListA" , []),
7780 WOQLQuery ().eq ("v:ListB" , [1 ]),
78- WOQLQuery ().set_difference ("v:ListA" , "v:ListB" , "v:Diff" )
81+ WOQLQuery ().set_difference ("v:ListA" , "v:ListB" , "v:Diff" ),
7982 )
80-
83+
8184 result = self .client .query (query )
8285 assert len (result ["bindings" ]) == 1
8386 assert result ["bindings" ][0 ]["Diff" ] == []
@@ -87,9 +90,9 @@ def test_set_intersection_basic(self):
8790 query = WOQLQuery ().woql_and (
8891 WOQLQuery ().eq ("v:ListA" , [1 , 2 , 3 ]),
8992 WOQLQuery ().eq ("v:ListB" , [2 , 3 , 4 ]),
90- WOQLQuery ().set_intersection ("v:ListA" , "v:ListB" , "v:Common" )
93+ WOQLQuery ().set_intersection ("v:ListA" , "v:ListB" , "v:Common" ),
9194 )
92-
95+
9396 result = self .client .query (query )
9497 assert len (result ["bindings" ]) == 1
9598 assert extract_values (result ["bindings" ][0 ]["Common" ]) == [2 , 3 ]
@@ -99,9 +102,9 @@ def test_set_intersection_no_common(self):
99102 query = WOQLQuery ().woql_and (
100103 WOQLQuery ().eq ("v:ListA" , [1 , 2 ]),
101104 WOQLQuery ().eq ("v:ListB" , [3 , 4 ]),
102- WOQLQuery ().set_intersection ("v:ListA" , "v:ListB" , "v:Common" )
105+ WOQLQuery ().set_intersection ("v:ListA" , "v:ListB" , "v:Common" ),
103106 )
104-
107+
105108 result = self .client .query (query )
106109 assert len (result ["bindings" ]) == 1
107110 assert result ["bindings" ][0 ]["Common" ] == []
@@ -111,9 +114,9 @@ def test_set_union_basic(self):
111114 query = WOQLQuery ().woql_and (
112115 WOQLQuery ().eq ("v:ListA" , [1 , 2 ]),
113116 WOQLQuery ().eq ("v:ListB" , [2 , 3 ]),
114- WOQLQuery ().set_union ("v:ListA" , "v:ListB" , "v:All" )
117+ WOQLQuery ().set_union ("v:ListA" , "v:ListB" , "v:All" ),
115118 )
116-
119+
117120 result = self .client .query (query )
118121 assert len (result ["bindings" ]) == 1
119122 assert extract_values (result ["bindings" ][0 ]["All" ]) == [1 , 2 , 3 ]
@@ -123,40 +126,38 @@ def test_set_union_removes_duplicates(self):
123126 query = WOQLQuery ().woql_and (
124127 WOQLQuery ().eq ("v:ListA" , [1 , 1 , 2 ]),
125128 WOQLQuery ().eq ("v:ListB" , [2 , 2 ]),
126- WOQLQuery ().set_union ("v:ListA" , "v:ListB" , "v:All" )
129+ WOQLQuery ().set_union ("v:ListA" , "v:ListB" , "v:All" ),
127130 )
128-
131+
129132 result = self .client .query (query )
130133 assert len (result ["bindings" ]) == 1
131134 assert extract_values (result ["bindings" ][0 ]["All" ]) == [1 , 2 ]
132135
133136 def test_set_member_success (self ):
134137 """Test set_member succeeds for element in set."""
135138 query = WOQLQuery ().woql_and (
136- WOQLQuery ().eq ("v:MySet" , [1 , 2 , 3 ]),
137- WOQLQuery ().set_member (2 , "v:MySet" )
139+ WOQLQuery ().eq ("v:MySet" , [1 , 2 , 3 ]), WOQLQuery ().set_member (2 , "v:MySet" )
138140 )
139-
141+
140142 result = self .client .query (query )
141143 assert len (result ["bindings" ]) == 1
142144
143145 def test_set_member_failure (self ):
144146 """Test set_member fails for element not in set."""
145147 query = WOQLQuery ().woql_and (
146- WOQLQuery ().eq ("v:MySet" , [1 , 2 , 3 ]),
147- WOQLQuery ().set_member (5 , "v:MySet" )
148+ WOQLQuery ().eq ("v:MySet" , [1 , 2 , 3 ]), WOQLQuery ().set_member (5 , "v:MySet" )
148149 )
149-
150+
150151 result = self .client .query (query )
151152 assert len (result ["bindings" ]) == 0
152153
153154 def test_list_to_set (self ):
154155 """Test list_to_set removes duplicates and sorts."""
155156 query = WOQLQuery ().woql_and (
156157 WOQLQuery ().eq ("v:MyList" , [3 , 1 , 2 , 1 ]),
157- WOQLQuery ().list_to_set ("v:MyList" , "v:MySet" )
158+ WOQLQuery ().list_to_set ("v:MyList" , "v:MySet" ),
158159 )
159-
160+
160161 result = self .client .query (query )
161162 assert len (result ["bindings" ]) == 1
162163 assert extract_values (result ["bindings" ][0 ]["MySet" ]) == [1 , 2 , 3 ]
@@ -165,19 +166,19 @@ def test_performance_large_sets(self):
165166 """Test set operations handle large sets efficiently."""
166167 list_a = list (range (1000 ))
167168 list_b = list (range (500 , 1500 ))
168-
169+
169170 query = WOQLQuery ().woql_and (
170171 WOQLQuery ().eq ("v:ListA" , list_a ),
171172 WOQLQuery ().eq ("v:ListB" , list_b ),
172- WOQLQuery ().set_difference ("v:ListA" , "v:ListB" , "v:Diff" )
173+ WOQLQuery ().set_difference ("v:ListA" , "v:ListB" , "v:Diff" ),
173174 )
174-
175+
175176 start_time = time .time ()
176177 result = self .client .query (query )
177178 elapsed = time .time () - start_time
178-
179+
179180 assert len (result ["bindings" ]) == 1
180181 assert len (result ["bindings" ][0 ]["Diff" ]) == 500
181-
182+
182183 # Should complete in under 1 second with O(n log n) algorithm
183184 assert elapsed < 1.0
0 commit comments