#################################################################
##  CS 3200 (Fall 2025), Assignment #3                         ##
##  Program File Name: testDCKB.py                             ##
##       Student Name: Todd Wareham                            ##
##         Login Name: harold                                  ##
##              MUN #: 8008765                                 ##
#################################################################

## Main program for Assigment #3.
##
##      *** DO NOT CHANGE THE CODE IN THIS FILE ***
##

import sys
from myDCKBClasses import *
from myDCKBFunctions import *


def main():

   print("\n>>> Test Suite #1\n")

   print(">>> Test #1a: DCFact1a.txt / DCClause1.txt\n")

   KB = DCKB("DCFact1a.txt", "DCClause1.txt")
   KB.printDCKB()

   print("\n### FC('D1') = " + str(PL_FC_Entails(KB, "D1")) +
            " / BC('D1') = " + str(PL_BC_Entails(KB, "D1")))
   print("### FC('D2') = " + str(PL_FC_Entails(KB, "D2")) +
          " / BC('D2') = " + str(PL_BC_Entails(KB, "D2")))

   print("\n>>> Test #1b: DCFact1b.txt / DCClause1.txt")

   KB = DCKB("DCFact1b.txt", "DCClause1.txt")

   print("\n### FC('D1') = " + str(PL_FC_Entails(KB, "D1")) +
            " / BC('D1') = " + str(PL_BC_Entails(KB, "D1")))
   print("### FC('D2') = " + str(PL_FC_Entails(KB, "D2")) +
          " / BC('D2') = " + str(PL_BC_Entails(KB, "D2")))

   print("\n>>> Test #1c: DCFact1c.txt / DCClause1.txt")

   KB = DCKB("DCFact1c.txt", "DCClause1.txt")

   print("\n### FC('D1') = " + str(PL_FC_Entails(KB, "D1")) +
            " / BC('D1') = " + str(PL_BC_Entails(KB, "D1")))
   print("### FC('D2') = " + str(PL_FC_Entails(KB, "D2")) +
          " / BC('D2') = " + str(PL_BC_Entails(KB, "D2")))

   print("\n>>> Test #1d: DCFact1d.txt / DCClause1.txt")

   KB = DCKB("DCFact1d.txt", "DCClause1.txt")

   print("\n### FC('D1') = " + str(PL_FC_Entails(KB, "D1")) +
            " / BC('D1') = " + str(PL_BC_Entails(KB, "D1")))
   print("### FC('D2') = " + str(PL_FC_Entails(KB, "D2")) +
          " / BC('D2') = " + str(PL_BC_Entails(KB, "D2")))


   print("\n>>> Test Suite #2\n")

   print(">>> Test #2a: DCFact2a.txt / DCClause2.txt\n")

   KB = DCKB("DCFact2a.txt", "DCClause2.txt")
   KB.printDCKB()

   print("\n### FC('S1') = " + str(PL_FC_Entails(KB, "S1")) +
            " / BC('S1') = " + str(PL_BC_Entails(KB, "S1")))
   print("### FC('S2') = " + str(PL_FC_Entails(KB, "S2")) +
          " / BC('S2') = " + str(PL_BC_Entails(KB, "S2")))
   print("### FC('D1') = " + str(PL_FC_Entails(KB, "D1")) +
          " / BC('D1') = " + str(PL_BC_Entails(KB, "D1")))
   print("### FC('D2') = " + str(PL_FC_Entails(KB, "D2")) +
          " / BC('D2') = " + str(PL_BC_Entails(KB, "D2")))

   print("\n>>> Test #2b: DCFact2b.txt / DCClause2.txt")

   KB = DCKB("DCFact2b.txt", "DCClause2.txt")

   print("\n### FC('S1') = " + str(PL_FC_Entails(KB, "S1")) +
            " / BC('S1') = " + str(PL_BC_Entails(KB, "S1")))
   print("### FC('S2') = " + str(PL_FC_Entails(KB, "S2")) +
          " / BC('S2') = " + str(PL_BC_Entails(KB, "S2")))
   print("### FC('D1') = " + str(PL_FC_Entails(KB, "D1")) +
          " / BC('D1') = " + str(PL_BC_Entails(KB, "D1")))
   print("### FC('D2') = " + str(PL_FC_Entails(KB, "D2")) +
          " / BC('D2') = " + str(PL_BC_Entails(KB, "D2")))


   print("\n>>> Test Suite #3\n")

   print(">>> Test #3a: DCFact3a.txt / DCClause3.txt\n")

   KB = DCKB("DCFact3a.txt", "DCClause3.txt")
   KB.printDCKB()

   print("\n### FC('P') = " + str(PL_FC_Entails(KB, "P")) +
            " / BC('P') = " + str(PL_BC_Entails(KB, "P")))
   print("### FC('M') = " + str(PL_FC_Entails(KB, "M")) +
          " / BC('M') = " + str(PL_BC_Entails(KB, "M")))
   print("### FC('Q') = " + str(PL_FC_Entails(KB, "Q")) +
          " / BC('Q') = " + str(PL_BC_Entails(KB, "Q")))
   print("### FC('D') = " + str(PL_FC_Entails(KB, "D")) +
          " / BC('D') = " + str(PL_BC_Entails(KB, "D")))

   print("\n>>> Test #3b: DCFact3b.txt / DCClause3.txt")

   KB = DCKB("DCFact3b.txt", "DCClause3.txt")

   print("\n### FC('P') = " + str(PL_FC_Entails(KB, "P")) +
            " / BC('P') = " + str(PL_BC_Entails(KB, "P")))
   print("### FC('M') = " + str(PL_FC_Entails(KB, "M")) +
          " / BC('M') = " + str(PL_BC_Entails(KB, "M")))
   print("### FC('Q') = " + str(PL_FC_Entails(KB, "Q")) +
          " / BC('Q') = " + str(PL_BC_Entails(KB, "Q")))

main()
