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

using namespace std;
using namespace uCalcSoftware;

int main() {
   uCalc uc;
   // Check default data type
   cout << uc.DefaultDataType().Name() << endl;

   // This examples shows setting the default data type in 3
   // different ways: by BuiltInType enum, DataType ojbect,
   // or data type by name (string)

   // Change default default data type
   uc.DefaultDataType(uc.DataTypeOf(BuiltInType::Integer_16));
   cout << uc.DefaultDataType().Name() << endl;

   // Test new default (returns integers instead of double)

   uc.DefineFunction("ff(x, y) = (x + y)/3");
   // same as ff(x As int16, y As int16) As int16 = ...

   uc.DefineFunction("gg(x) = x*100");
   // same as gg(x As int16) As int16 = ...

   cout << uc.Eval("ff(4, 12)") << endl;
   cout << uc.Eval("gg(6.1)") << endl;

   uc.SetDefaultDataType("Single");
   cout << uc.DefaultDataType().Name() << endl;

   // Change back to original default (double)
   uc.SetDefaultDataType(BuiltInType::Float_Double);

   // Verify that default is now double
   cout << uc.DefaultDataType().Name() << endl;
}