-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathta6.py
executable file
·82 lines (65 loc) · 4.22 KB
/
ta6.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/env python
import random
from irradix import encode, decode, set_precision, l1encode, l1decode
from vbyte import vbyte_encode, vbyte_decode # Import the VByte functions
set_precision(100) # enough to cover the 32 digits below
# Generate a random integer with logarithmic bias
def generate_random_integer():
if random.random() < 0.05:
return 0
# Generate a random number of digits
num_digits = random.randint(1, 32)
lower_bound = 10**(num_digits - 1)
upper_bound = 10**num_digits - 1
return random.randint(lower_bound, upper_bound)
# Test function to encode and decode a list of random integers (small sequences)
def test_random_integers_small():
num_tests = 1000 # Number of tests to run
for i in range(num_tests):
# Generate a random list of integers with a length between 1 and 10
original_numbers = [generate_random_integer() for _ in range(random.randint(1, 10))]
print(f"\nSmall Test {i+1}:\nOriginal Numbers (length: {len(original_numbers)}): {original_numbers}")
# Encode the list of integers using the original encode/decode
encoded_chunks = encode(original_numbers)
decoded_numbers = decode(encoded_chunks)
print(f"\nDecoded Numbers (length: {len(decoded_numbers)}): {decoded_numbers}")
assert decoded_numbers == original_numbers, f"Small Test {i+1} failed! Decoded numbers do not match the original."
# Encode the list of integers using the l1encode/l1decode
encoded_chunks_l1 = l1encode(original_numbers)
decoded_numbers_l1 = l1decode(encoded_chunks_l1)
print(f"\nDecoded Numbers with l1 (length: {len(decoded_numbers_l1)}): {decoded_numbers_l1}")
assert decoded_numbers_l1 == original_numbers, f"Small L1 Test {i+1} failed! Decoded numbers do not match the original."
# Encode the list of integers using the VByte encode/decode
encoded_chunks_vbyte = vbyte_encode(original_numbers)
decoded_numbers_vbyte = vbyte_decode(encoded_chunks_vbyte)
print(f"\nDecoded Numbers with VByte (length: {len(decoded_numbers_vbyte)}): {decoded_numbers_vbyte}")
assert decoded_numbers_vbyte == original_numbers, f"Small VByte Test {i+1} failed! Decoded numbers do not match the original."
print(f"All {num_tests} small tests passed successfully!")
# Test function to encode and decode a list of random integers (large sequences)
def test_random_integers_large():
num_tests = 100 # Number of tests to run
for i in range(num_tests):
# Generate a random list of integers with a length between 1000 and 10000
sequence_length = random.randint(1000, 10000)
original_numbers = [generate_random_integer() for _ in range(sequence_length)]
print(f"\nLarge Test {i+1}:\nOriginal Numbers (length: {len(original_numbers)}): {original_numbers[:5]}...")
# Encode the list of integers using the original encode/decode
encoded_chunks = encode(original_numbers)
decoded_numbers = decode(encoded_chunks)
print(f"\nDecoded Numbers (length: {len(decoded_numbers)}): {decoded_numbers[:5]}...")
assert decoded_numbers == original_numbers, f"Large Test {i+1} failed! Decoded numbers do not match the original."
# Encode the list of integers using the l1encode/l1decode
encoded_chunks_l1 = l1encode(original_numbers)
decoded_numbers_l1 = l1decode(encoded_chunks_l1)
print(f"\nDecoded Numbers with l1 (length: {len(decoded_numbers_l1)}): {decoded_numbers_l1[:5]}...")
assert decoded_numbers_l1 == original_numbers, f"Large L1 Test {i+1} failed! Decoded numbers do not match the original."
# Encode the list of integers using the VByte encode/decode
encoded_chunks_vbyte = vbyte_encode(original_numbers)
decoded_numbers_vbyte = vbyte_decode(encoded_chunks_vbyte)
print(f"\nDecoded Numbers with VByte (length: {len(decoded_numbers_vbyte)}): {decoded_numbers_vbyte[:5]}...")
assert decoded_numbers_vbyte == original_numbers, f"Large VByte Test {i+1} failed! Decoded numbers do not match the original."
print(f"All {num_tests} large tests passed successfully!")
# Run both tests
if __name__ == "__main__":
test_random_integers_small()
test_random_integers_large()