fix set.py
This commit is contained in:
+14
-7
@@ -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:
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user