fix set.py

This commit is contained in:
2026-07-08 10:36:49 +03:00
parent 470f852df1
commit 5fc2dcde2a
2 changed files with 44 additions and 7 deletions
+14 -7
View File
@@ -260,10 +260,10 @@ def decode_set(encoded_str: str, Mshift: int) -> List[int]:
def rpmsetcmp(str1: str, str2: str) -> int: def rpmsetcmp(str1: str, str2: str) -> int:
if str1[:3] == "set:": if str1.startswith("set:"):
str1 = str1[3:] str1 = str1[4:]
if str2[:3] == "set:": if str2.startswith("set:"):
str2 = str2[3:] str2 = str2[4:]
bpp1, Mshift1 = decode_set_init(str1) bpp1, Mshift1 = decode_set_init(str1)
bpp2, Mshift2 = decode_set_init(str2) bpp2, Mshift2 = decode_set_init(str2)
@@ -288,21 +288,28 @@ def rpmsetcmp(str1: str, str2: str) -> int:
while i < len(hash_values1) and j < len(hash_values2): while i < len(hash_values1) and j < len(hash_values2):
if hash_values1[i] < hash_values2[j]: if hash_values1[i] < hash_values2[j]:
ge = False le = False
i += 1 i += 1
elif hash_values1[i] > hash_values2[j]: elif hash_values1[i] > hash_values2[j]:
le = False ge = False
j += 1 j += 1
else: else:
i += 1 i += 1
j += 1 j += 1
if i < len(hash_values1):
le = False
if j < len(hash_values2):
ge = False
if ge and le: if ge and le:
return 0 return 0
elif ge: elif ge:
return 1 return 1
else: elif le:
return -1 return -1
else:
return -2
def set_new() -> Set: def set_new() -> Set:
+30
View File
@@ -81,6 +81,36 @@ class DownsampleSetTest(unittest.TestCase):
self.assertEqual(rpmset.downsample_set([8, 10, 14], 3), [0, 2, 6]) self.assertEqual(rpmset.downsample_set([8, 10, 14], 3), [0, 2, 6])
class RpmSetCmpTest(unittest.TestCase):
def encode_values(self, values, bpp=8):
return rpmset.encode_set(values, bpp)
def test_returns_zero_for_equal_sets(self):
set1 = self.encode_values([1, 3, 5])
set2 = self.encode_values([1, 3, 5])
self.assertEqual(rpmset.rpmsetcmp(set1, set2), 0)
def test_accepts_set_prefix(self):
set1 = "set:" + self.encode_values([1, 3, 5])
set2 = self.encode_values([1, 3, 5])
self.assertEqual(rpmset.rpmsetcmp(set1, set2), 0)
def test_returns_one_when_first_set_is_superset(self):
set1 = self.encode_values([1, 3, 5])
set2 = self.encode_values([1, 3])
self.assertEqual(rpmset.rpmsetcmp(set1, set2), 1)
def test_returns_minus_one_when_first_set_is_subset(self):
set1 = self.encode_values([1, 3])
set2 = self.encode_values([1, 3, 5])
self.assertEqual(rpmset.rpmsetcmp(set1, set2), -1)
def test_returns_minus_two_for_incomparable_sets(self):
set1 = self.encode_values([1, 3, 7])
set2 = self.encode_values([1, 3, 5])
self.assertEqual(rpmset.rpmsetcmp(set1, set2), -2)
class ModuleEntrypointTest(unittest.TestCase): class ModuleEntrypointTest(unittest.TestCase):
def test_module_has_no_main_side_effects(self): def test_module_has_no_main_side_effects(self):
output = io.StringIO() output = io.StringIO()