Imports System
Imports uCalcSoftware
Public Module Program
   
   Public Sub MyAverage(ByVal cb As uCalc.Callback)
      Dim Total As Double = 0
      For x  As Integer = 1 To cb.ArgCount()
         Total = Total + cb.Arg(x)
      Next
      cb.Return(Total / cb.ArgCount())
   End Sub
   Public Sub Main()
      Dim uc As New uCalc()
      Dim MyArrayA = uc.DefineVariable("MyArrayA[] = {10, 20, 30, 40, 50}")
      Dim MyArrayB = uc.DefineVariable("MyArrayB[15]")
      Dim FunctionA = uc.DefineFunction("FuncA(x, y, z) = x + y + z")
      Dim FunctionB = uc.DefineFunction("FuncB(x, y, a = 12, b = 34) = x+y+a+b")
      Dim FunctionC = uc.DefineFunction("FuncC(x, y ...)", AddressOf MyAverage)
      Dim FunctionD = uc.DefineFunction("FuncD() = 1+1")
      
      Console.WriteLine($"Elements in array (from initializer): {MyArrayA.Count}")
      Console.WriteLine($"Elements in array (from size): {MyArrayB.Count}")
      Console.WriteLine($"Parameters in FuncA() (fixed): {FunctionA.Count}")
      Console.WriteLine($"Parameters in FuncB() (with optional): {FunctionB.Count}")
      Console.WriteLine($"Parameters in FuncC() (variadic): {FunctionC.Count}")
      Console.WriteLine($"Parameters in FuncD() (none): {FunctionD.Count}")
      Console.WriteLine($"Operands in '!' operator (postfix): {uc.ItemOf("!").Count}")
      Console.WriteLine($"Operands in '>' operator (infix): {uc.ItemOf(">").Count}")
   End Sub
End Module