from pathlib import Path
import numberdb.sage as numberdb
from sage.rings.real_arb import RealBallField
from generate import compute, polygon_mean
import program
F=RealBallField(500)
for n,region in [(3,'equilateral-triangle'),(4,'unit-square'),(5,'regular-pentagon'),(6,'regular-hexagon'),(7,'regular-heptagon'),(8,'regular-octagon')]:
    R=1/(2*(F.pi()/n).sin()) if n in (3,4) else F(1)
    value=program.mean_regular_polygon(n,R)
    expected=compute(region)
    assert value.is_finite() and expected.is_finite()
    assert value.overlaps(expected), (n,region)
# Explicit rectangle and simplified row expressions against the generator.
for a,b,region in [(1,1,'unit-square'),(1,2,'rectangle-1x2')]:
    a,b=F(a),F(b)
    d=(a*a+b*b).sqrt()
    v=(2*a*b*d+a**3*((b+d)/a).log()+b**3*((a+d)/b).log())/(12*a*b)
    assert v.overlaps(compute(region))
print('Program and displayed rectangle formula checked across every applicable stored region.')
