# Add OrderedPair.py, ComplexOrderedPair.py, and Quadratic.py as
# additional files in OnlineGDB, then run this file.
from Quadratic import Quadratic

def main():
    print("=== Quadratic Main ===\n")

    # Default: f(x) = x\u00B2
    print("--- Default: f(x) = x\u00B2 ---")
    q1 = Quadratic()
    print(q1)
    print(f"f(3) = {q1.f(3)}")
    print("Roots:", q1.get_roots_description())

    # Two real roots: f(x) = x\u00B2 - 5x + 6
    print("\n--- Two real roots: x\u00B2 - 5x + 6 ---")
    q2 = Quadratic(1, -5, 6)
    print(q2)
    print("Roots:", q2.get_roots_description())

    # One repeated root: f(x) = x\u00B2 - 6x + 9
    print("\n--- One repeated root: x\u00B2 - 6x + 9 ---")
    q3 = Quadratic(1, -6, 9)
    print(q3)
    print("Roots:", q3.get_roots_description())

    # Complex roots: f(x) = x\u00B2 + 2x + 5
    print("\n--- Complex roots: x\u00B2 + 2x + 5 ---")
    q4 = Quadratic(1, 2, 5)
    print(q4)
    print("Roots:", q4.get_roots_description())

    # Setter side effects
    print("\n--- Setter side effects ---")
    q5 = Quadratic(1, 0, -4)
    print("Before:", q5)
    q5.set_b(-4)
    print("After set_b(-4):", q5)

    # Copy constructor
    print("\n--- Copy constructor ---")
    q6 = Quadratic.from_quadratic(q2)
    print("Copy of q2:", q6)

    print("\n--- Thanks for using our program! ---")

if __name__ == "__main__":
    main()
