Imports System
Imports uCalcSoftware
Public Module Program
   Public Sub Main()
      Dim uc As New uCalc()
      '// Define a variable in the original default to distinguish it.
      '// Note: This variable won't exist in the implicit 'uc' instance.
      uCalc.DefaultInstance.DefineVariable("id='Original'")
      Console.WriteLine($"Initial default: {uCalc.DefaultInstance.EvalStr("id")}")
      
      Dim ucA As New uCalc()
      ucA.DefineVariable("id='A'")
      ucA.IsDefault = true '// Default stack: [Original, A]
      Console.WriteLine($"Current default: {uCalc.DefaultInstance.EvalStr("id")}")
      
      Dim ucB As New uCalc()
      ucB.DefineVariable("id='B'")
      ucB.IsDefault = true '// Default stack: [Original, A, B]
      Console.WriteLine($"Current default: {uCalc.DefaultInstance.EvalStr("id")}")
      
      Dim ucC As New uCalc()
      ucC.DefineVariable("id='C'")
      ucC.IsDefault = true '// Default stack: [Original, A, B, C]
      Console.WriteLine($"Current default: {uCalc.DefaultInstance.EvalStr("id")}")
      
      Console.WriteLine("--- Unsetting instances ---")
      '// Unset B. The default should remain C.
      ucB.IsDefault = false
      Console.WriteLine($"After unsetting B, current default: {uCalc.DefaultInstance.EvalStr("id")}")
      
      '// Unset C. The default should revert to A.
      ucC.IsDefault = false
      Console.WriteLine($"After unsetting C, current default: {uCalc.DefaultInstance.EvalStr("id")}")
      
      '// Unset A. Reverts to the original default.
      ucA.IsDefault = false
      Console.WriteLine($"After unsetting A, current default: {uCalc.DefaultInstance.EvalStr("id")}")
   End Sub
End Module