AnyankaKeys/Python/gemini.01.benchmark.py
2026-02-16 06:55:51 +01:00

81 lines
2.8 KiB
Python

import timeit
import secrets
import math
primes = (0x3FFFFFFB, 0x3FFFFF29, 0x3FFFFF0B, 0x2FFFFFFF, 0x2FFFFF5B)
# --- Lógica Actual (Bucle) ---
def get_multiplier_current(i, multiplier, primes, p_len, jumps, jump):
value = (i + multiplier + primes[(i + jump) % p_len]) & 0x3FFFFFFF
for _ in range(jumps):
shift = 13 + i % 8
if i & 1:
value ^= (value >> shift)
else:
value ^= (value << shift)
value = (value + primes[i := (i + jump) % p_len]) & 0x3FFFFFFF
return value
# --- Lógica Optimizada (Unrolled) ---
def get_multiplier_fast(i, multiplier, primes, p_len, jump):
# Asumiendo que jumps siempre es 3
value = (i + multiplier + primes[(i + jump) % p_len]) & 0x3FFFFFFF
# Salto 1
shift = 13 + i % 8
value ^= (value >> shift if i & 1 else value << shift)
value = (value + primes[i := (i + jump) % p_len]) & 0x3FFFFFFF
# Salto 2
shift = 13 + i % 8
value ^= (value >> shift if i & 1 else value << shift)
value = (value + primes[i := (i + jump) % p_len]) & 0x3FFFFFFF
# Salto 3
shift = 13 + i % 8
value ^= (value >> shift if i & 1 else value << shift)
value = (value + primes[i := (i + jump) % p_len]) & 0x3FFFFFFF
return value
# --- 2. Lógica con While ---
def get_multiplier_while(i, multiplier, primes, p_len, jumps, jump):
value = (i + multiplier + primes[(i + jump) % p_len]) & 0x3FFFFFFF
count = 0
while count < jumps:
shift = 13 + i % 8
if i & 1:
value ^= (value >> shift)
else:
value ^= (value << shift)
value = (value + primes[i := (i + jump) % p_len]) & 0x3FFFFFFF
count += 1
return value
def get_multiplier_callback(multiplier, primes, p_len, jumps, jump, i = 0):
value = ((value ^ (
value >> shift if i & 1 else value << shift
)) + self.__primes[
i := (i + self.__multiplier_jump) % self.__primes_l
]) & 0x3FFFFFFF
# --- Configuración del Test ---
primes = (0x3FFFFFFB, 0x3FFFFF29, 0x3FFFFF0B, 0x2FFFFFFF, 0x2FFFFF5B)
setup_code = """
from __main__ import get_multiplier_current, get_multiplier_fast, primes
import secrets
"""
# Ejecución de 1 millón de iteraciones
n = 1_000_000
t_current = timeit.timeit(lambda: get_multiplier_current(5, 1, primes, 5, 3, 7), setup=setup_code, number=n)
t_fast = timeit.timeit(lambda: get_multiplier_fast(5, 1, primes, 5, 7), setup=setup_code, number=n)
t_secrets = timeit.timeit(lambda: secrets.token_bytes(4), setup=setup_code, number=n)
t_while = timeit.timeit(lambda: get_multiplier_while(5, 1, primes, 5, 3, 7), setup=setup_code, number=n)
print(f"--- Resultados ({n} iteraciones) ---")
print(f"Anyanka (Bucle): {t_current:.4f} seg")
print(f"Anyanka (Unrolled): {t_fast:.4f} seg")
print(f"Secrets (Cripto): {t_secrets:.4f} seg")
print(f"Anyanka (While): {t_while:.4f} seg")