Internal Test: Verify the stack-like behavior of the default instance list.

ID: 368

				
					using uCalcSoftware;

var uc = 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")}");

var ucA = new uCalc();
ucA.DefineVariable("id='A'");
ucA.IsDefault = true; // Default stack: [Original, A]
Console.WriteLine($"Current default: {uCalc.DefaultInstance.EvalStr("id")}");

var ucB = new uCalc();
ucB.DefineVariable("id='B'");
ucB.IsDefault = true; // Default stack: [Original, A, B]
Console.WriteLine($"Current default: {uCalc.DefaultInstance.EvalStr("id")}");

var ucC = 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")}");
				
			
Initial default: Original
Current default: A
Current default: B
Current default: C
--- Unsetting instances ---
After unsetting B, current default: C
After unsetting C, current default: A
After unsetting A, current default: Original
				
					#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

int main() {
   uCalc uc;
   // 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'");
   cout << "Initial default: " << uCalc::DefaultInstance().EvalStr("id") << endl;

   uCalc ucA;
   ucA.DefineVariable("id='A'");
   ucA.IsDefault(true); // Default stack: [Original, A]
   cout << "Current default: " << uCalc::DefaultInstance().EvalStr("id") << endl;

   uCalc ucB;
   ucB.DefineVariable("id='B'");
   ucB.IsDefault(true); // Default stack: [Original, A, B]
   cout << "Current default: " << uCalc::DefaultInstance().EvalStr("id") << endl;

   uCalc ucC;
   ucC.DefineVariable("id='C'");
   ucC.IsDefault(true); // Default stack: [Original, A, B, C]
   cout << "Current default: " << uCalc::DefaultInstance().EvalStr("id") << endl;

   cout << "--- Unsetting instances ---" << endl;
   // Unset B. The default should remain C.
   ucB.IsDefault(false);
   cout << "After unsetting B, current default: " << uCalc::DefaultInstance().EvalStr("id") << endl;

   // Unset C. The default should revert to A.
   ucC.IsDefault(false);
   cout << "After unsetting C, current default: " << uCalc::DefaultInstance().EvalStr("id") << endl;

   // Unset A. Reverts to the original default.
   ucA.IsDefault(false);
   cout << "After unsetting A, current default: " << uCalc::DefaultInstance().EvalStr("id") << endl;
}
				
			
Initial default: Original
Current default: A
Current default: B
Current default: C
--- Unsetting instances ---
After unsetting B, current default: C
After unsetting C, current default: A
After unsetting A, current default: Original
				
					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
				
			
Initial default: Original
Current default: A
Current default: B
Current default: C
--- Unsetting instances ---
After unsetting B, current default: C
After unsetting C, current default: A
After unsetting A, current default: Original