#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

#define tf(IsTrue) ((IsTrue) ? "True" : "False")

int main() {
   uCalc uc;
   // Internal Test: Verifying names of different item types and edge cases.

   // 1. Operator with symbolic name
   auto plusOp = uc.ItemOf("+", ItemIs::Infix);
   cout << "Operator Name: '" << plusOp.Name() << "'" << endl;

   // 2. Token with internal name
   auto token = uc.ExpressionTokens()[TokenType::AlphaNumeric];
   cout << "Token Name: '" << token.Name() << "'" << endl;

   // 3. Empty/invalid item
   auto emptyItem = uc.ItemOf("NonExistentItem");
   cout << "Empty Item Name: '" << emptyItem.Name() << "'" << endl;
   cout << "Is Found: " << tf(!emptyItem.IsProperty(ItemIs::NotFound)) << endl;
}