feat: Add batch processing scripts for complex calculator creation and verification, and update the calculator list.
This commit is contained in:
76
verify_batch_5.py
Normal file
76
verify_batch_5.py
Normal file
@@ -0,0 +1,76 @@
|
||||
import urllib.request
|
||||
import re
|
||||
import json
|
||||
import time
|
||||
|
||||
# Batch 5 Registry for Verification
|
||||
batch_5_registry = [
|
||||
{"url": "https://howdoyouconvert.com/calculator/fahrenheit-to-celsius/?ao_noptimize=1", "f": 5/9, "o": -32 * 5/9, "v1": 32, "ev2": 0},
|
||||
{"url": "https://howdoyouconvert.com/calculator/fahrenheit-to-celsius/?ao_noptimize=1", "f": 5/9, "o": -32 * 5/9, "v1": 212, "ev2": 100},
|
||||
{"url": "https://howdoyouconvert.com/calculator/feet-per-second-to-meters-per-second/?ao_noptimize=1", "f": 0.3048, "o": 0, "v1": 1, "ev2": 0.3048},
|
||||
{"url": "https://howdoyouconvert.com/calculator/fluid-ounces-to-milliliters/?ao_noptimize=1", "f": 29.5735296, "o": 0, "v1": 1, "ev2": 29.5735296},
|
||||
{"url": "https://howdoyouconvert.com/calculator/gallons-per-minute-to-liters-per-second/?ao_noptimize=1", "f": 0.0630901964, "o": 0, "v1": 1, "ev2": 0.0630901964},
|
||||
{"url": "https://howdoyouconvert.com/calculator/grains-to-grams/?ao_noptimize=1", "f": 0.06479891, "o": 0, "v1": 1, "ev2": 0.06479891},
|
||||
{"url": "https://howdoyouconvert.com/calculator/grams-to-milligrams/?ao_noptimize=1", "f": 1000.0, "o": 0, "v1": 1, "ev2": 1000},
|
||||
{"url": "https://howdoyouconvert.com/calculator/grams-to-ounces/?ao_noptimize=1", "f": 0.0352739619, "o": 0, "v1": 100, "ev2": 3.52739619},
|
||||
{"url": "https://howdoyouconvert.com/calculator/grams-to-pennyweights/?ao_noptimize=1", "f": 0.643014931, "o": 0, "v1": 100, "ev2": 64.3014931},
|
||||
{"url": "https://howdoyouconvert.com/calculator/grams-to-troy-ounces/?ao_noptimize=1", "f": 0.0321507466, "o": 0, "v1": 100, "ev2": 3.21507466},
|
||||
{"url": "https://howdoyouconvert.com/calculator/gray-to-rad/?ao_noptimize=1", "f": 100.0, "o": 0, "v1": 1, "ev2": 100},
|
||||
]
|
||||
|
||||
def verify_math(calc):
|
||||
print(f"\n--- Verifying {calc['url']} with v1={calc['v1']} ---")
|
||||
headers = {"User-Agent": "Mozilla/5.0"}
|
||||
try:
|
||||
req = urllib.request.Request(calc['url'], headers=headers)
|
||||
resp = urllib.request.urlopen(req).read().decode('utf-8')
|
||||
|
||||
scripts = re.findall(r'<script.*?>\s*(.*?)\s*</script>', resp, re.DOTALL)
|
||||
logic_script = ""
|
||||
for s in scripts:
|
||||
if "calculate1" in s and "document.getElementById" in s:
|
||||
logic_script = s
|
||||
break
|
||||
|
||||
if not logic_script:
|
||||
print("FAILED: Logic script not found.")
|
||||
return False
|
||||
|
||||
# Extract formula: let val2 = val1 * factor + offset;
|
||||
fwd_match = re.search(r'let val2 = val1 \* (.*?) \+ (.*?);', logic_script)
|
||||
rev_match = re.search(r'let val1 = \(val2 - (.*?)\) \/ (.*?);', logic_script)
|
||||
|
||||
if not fwd_match or not rev_match:
|
||||
print("FAILED: Could not parse logic components.")
|
||||
return False
|
||||
|
||||
m_actual = float(fwd_match.group(1))
|
||||
b_actual = float(fwd_match.group(2))
|
||||
|
||||
print(f"Detected Formula: y = {m_actual}x + {b_actual}")
|
||||
|
||||
# Test math locally
|
||||
v2 = calc['v1'] * m_actual + b_actual
|
||||
v1 = (v2 - b_actual) / m_actual
|
||||
|
||||
print(f"Test v1={calc['v1']} -> v2={v2} (Expected {calc['ev2']})")
|
||||
|
||||
# Allow small floating point difference
|
||||
if abs(v2 - calc['ev2']) < max(1e-7, calc['ev2'] * 1e-7) and abs(v1 - calc['v1']) < 1e-7:
|
||||
print("SUCCESS")
|
||||
return True
|
||||
else:
|
||||
print("FAILED math check")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"ERROR: {e}")
|
||||
return False
|
||||
|
||||
all_ok = True
|
||||
for c in batch_5_registry:
|
||||
if not verify_math(c): all_ok = False
|
||||
time.sleep(1)
|
||||
|
||||
if all_ok: print("\nALL BATCH 5 VERIFIED.")
|
||||
else: print("\nBATCH 5 FAILED.")
|
||||
Reference in New Issue
Block a user