SelfTest.pas

File name
C:\Users\Andreas Rejbrand\Documents\Dev\AlgoSim\SelfTest.pas
Date exported
Time exported
Formatting processor
TPascalFormattingProcessor
unit SelfTest;

{ **************************************************************************** }
{ Rejbrand AlgoSim Automatic Tests                                             }
{ Copyright © 2019-2022 Andreas Rejbrand                                       }
{ https://english.rejbrand.se/                                                 }
{ **************************************************************************** }

{$DEFINE QuickTest}

interface

uses
  Windows, SysUtils, Types, Classes, Graphics, ASNum, ASKernelDefs, ASKernel,
  ASExpression, ASObjects, ASStructs, ASObjStore, ASPropMan, ASPropStores,
  ASFcnMgr, ASFcnExp, ASExecutionContext, ASFormatters, ASFunctions,
  ASTokenizer, ASParser, ASStrFcns, Generics.Defaults, Generics.Collections,
  ASColors, ASPixmap, ASSounds, UITypes;

type
  TSelfTestProgressEvent = procedure(ATotal, APerformed, ASucceeded,
    AFailed: Integer) of object;
  TSelfTestChapterEvent = procedure(AChapterNumber: Integer;
    const AChapterName: string) of object;

procedure Run(AKernel: TASKernel; AProgressEvent: TSelfTestProgressEvent = nil;
  AChapterEvent: TSelfTestChapterEvent = nil);

implementation

uses
  Math, StrUtils, DateUtils, Character, Clipbrd, MatLits, Registry, IOUtils,
  PngImage, ASMidi, SelfTestUI;

const
  TotalCount = 495436;

{$REGION 'Infrastructure'}

var
  ElapsedTime: Double;

type
  TSelfTester = class
  strict private
  type
    TTestItem = record
      Expr: string;
      Expected, Actual: string;
      constructor Create(const AExpr, AExpected, AActual: string);
      function ToString: string;
    end;
  const
    RealMatrixNames = AnsiString('ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖabcdfghjklmnopqrstuvwxyzåä');
    ComplexMatrixNames = AnsiString('ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖabcdfghjklmnopqrstuvwxyzåäöüë');
    CharSamples = 'GHNÖÅÉÏÔÂÑΓΒΘЧmbåñõéïγεφю75610½¼¾⅛ⅷ፹Ⅳ⑭〤⑽⒖㉑.,!?-;:()∫∅∂⌬⌨'#32#9#13#10#$A0#1#2#7#24#27#28#31;
  var
    FKernel: TASKernel;
    FTestCount,
    FSuccessCount,
    FFailCount: Integer;
    FChapterNumber: Integer;
    FFailList: TList<TTestItem>;
    FEps: TASR;
    FProgressEvent: TSelfTestProgressEvent;
    FChapterEvent: TSelfTestChapterEvent;
    FLastStatTime: UInt64;
    procedure Log(const AText: string; const AClass: string = '');
    procedure SendProgress(AForce: Boolean = False);
    procedure Chapter(const AChapterName: string);
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: TAlgosimObject;
      ATestSingleLine: Boolean = False; const AExpSingleLine: string = ''); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: ExceptClass;
      const AErrorMessage: string = ''); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: TASI;
      TestSL: Boolean = False; const SL: string = ''); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: TRationalNumber;
      TestSL: Boolean = False; const SL: string = ''); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: TASR;
      TestSL: Boolean = False; const SL: string = ''); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: TASC;
      TestSL: Boolean = False; const SL: string = ''); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: string;
      TestSL: Boolean = False; const SL: string = ''); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: array of TASR); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: array of TASC); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; AColCount: Integer; const AExpected: array of TASR); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; AColCount: Integer; const AExpected: array of TASC); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: TRGB;
      TestSL: Boolean = False; const SL: string = ''); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: THSV;
      TestSL: Boolean = False; const SL: string = ''); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: THSL;
      TestSL: Boolean = False; const SL: string = ''); overload;
        procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: Boolean); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: TASOSignal); overload;
    procedure Test(ALineNumber: Integer; const AExpr: string; const AExpected: TASOSignal;
      const AErrorMessage: string); overload;
    procedure TestSL(ALineNumber: Integer; const AExpr, AExpected: string);
    procedure TestML(ALineNumber: Integer; const AExpr, AExpected: string);
    procedure TestDuration(ALineNumber: Integer; const AMaxDur: Double); overload;
    procedure TestDuration(ALineNumber: Integer; const AMinDur, AMaxDur: Double); overload;
    procedure TestExternal(ALineNumber: Integer; const ATestName: string; AAssertion: Boolean);
    procedure TestNumFmt(ALineNumber: Integer; const ARatValue: string; ANumberFormat: TNumberFormat;
      ANumDigits: Integer; const AExpOutput: array of string); overload;
    procedure TestNumFmt(ALineNumber: Integer; const ARatValue: string; ANumberFormat: TNumberFormat;
      const AExpOutput: array of string); overload;
    procedure Eps(const AEpsilon: TASR = 0);
    function _ASOEq(A, B: TAlgosimObject): Boolean;
    procedure TestSeq;
    function Name(const AFirst, ALast: string): TAlgosimStructure;
    function Person(const AFirstName, ALastName, ASex: string;
      AAge: Integer): TAlgosimStructure;
    function Jane: TAlgosimStructure;
    function Mike: TAlgosimStructure;
    function John: TAlgosimStructure;
    function Sarah: TAlgosimStructure;
    function Mary: TAlgosimStructure;
    function SPerson(const AName: string; AAge: Integer;
      const ASex: string = ''): TAlgosimStructure;
    procedure TestRealMatrixQ(ALineNumber: Integer; const AFcnName: string;
      const APositives: AnsiString);
    procedure TestRealMatrixQImplies(ALineNumber: Integer; const ALeft, ARight: string);
    procedure TestComplexMatrixQ(ALineNumber: Integer; const AFcnName: string;
      const APositives: AnsiString);
    procedure TestComplexMatrixQImplies(ALineNumber: Integer; const ALeft, ARight: string);
    function LoremIpsum(AParagraphs: Integer): string;
    procedure TestCharType(ALineNumber: Integer; const AFcnName: string;
      const APositives: string);
    procedure TestDefVars;
    procedure FailListNotify(Sender: TObject; const Item: TSelfTester.TTestItem;
      Action: TCollectionNotification);
  public
    constructor Create(AKernel: TASKernel);
    procedure RunTests;
    destructor Destroy; override;
    property OnProgress: TSelfTestProgressEvent read FProgressEvent write FProgressEvent;
    property OnChapter: TSelfTestChapterEvent read FChapterEvent write FChapterEvent;
  end;

procedure Run(AKernel: TASKernel; AProgressEvent: TSelfTestProgressEvent;
  AChapterEvent: TSelfTestChapterEvent);
begin
  with TSelfTester.Create(AKernel) do
    try
      OnProgress := AProgressEvent;
      OnChapter := AChapterEvent;
      RunTests;
    finally
      Free;
    end;
end;

{ TSelfTester.TTestItem }

constructor TSelfTester.TTestItem.Create(const AExpr, AExpected,
  AActual: string);
begin
  Self.Expr := AExpr;
  Self.Expected := AExpected;
  Self.Actual := AActual;
end;

function TSelfTester.TTestItem.ToString: string;
begin
  Result :=
    '--------------------------------------------'#13#10 +
    'Test failed.'#13#10 +
    Self.Expr + #13#10 +
    '  Expected: ' + Self.Expected + #13#10 +
    '    Actual: ' + Self.Actual + #13#10 +
    '--------------------------------------------'#13#10;
end;

{ TSelfTester }

procedure TSelfTester.Chapter(const AChapterName: string);
begin
  Inc(FChapterNumber);
  if Assigned(FChapterEvent) then
    FChapterEvent(FChapterNumber, AChapterName);
end;

constructor TSelfTester.Create(AKernel: TASKernel);
begin
  FFailList := TList<TTestItem>.Create;
  FFailList.OnNotify := FailListNotify;
  FKernel := AKernel;
  FKernel.ClearAllVars;
  FKernel.LoadDefVars;
  FKernel.ClearAllBuffers;
  FKernel.ClearCommandHistory;
  FEps := -1;
end;

destructor TSelfTester.Destroy;
begin
  FFailList.Free;
  FKernel.ClearCommandHistory;
  FKernel.ClearAllBuffers;
  FKernel.ClearAllVars;
  FKernel.LoadDefVars;
  inherited;
end;

procedure TSelfTester.Eps(const AEpsilon: TASR);
begin
  FEps := AEpsilon;
end;

procedure TSelfTester.FailListNotify(Sender: TObject;
  const Item: TSelfTester.TTestItem; Action: TCollectionNotification);
begin

end;

procedure TSelfTester.Log(const AText: string; const AClass: string);
begin
  FKernel.Perform(CLIENT_COMMAND_PRINT, 0, NativeInt(PChar(AText)),
    NativeInt(PChar(AClass)), 0);
end;

function TSelfTester.LoremIpsum(AParagraphs: Integer): string;
const
  Para =
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor ' +
    'incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis ' +
    'nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ' +
    'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu ' +
    'fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in ' +
    'culpa qui officia deserunt mollit anim id est laborum.';
var
  p: PChar;
  i: Integer;
const
  CRLF: string = #13#10;
begin

  if AParagraphs < 1 then
    Exit('');

  SetLength(Result, AParagraphs * Para.Length + (AParagraphs - 1) * CRLF.Length);

  p := PChar(Result);

  for i := 1 to AParagraphs do
  begin
    MoveChars(Para[1], p^, Para.Length);
    Inc(p, Para.Length);
    if i < AParagraphs then
    begin
      MoveChars(CRLF[1], p^, CRLF.Length);
      Inc(p, CRLF.Length);
    end;
  end;

end;

procedure TSelfTester.RunTests;
var
  OldSeed: Integer;
begin
  SendProgress;
  OldSeed := RandSeed;
  RandSeed := 9617237;
  try
    TestSeq;
  finally
    RandSeed := OldSeed;
  end;
  SendProgress(True);
end;

function TSelfTester.Name(const AFirst, ALast: string): TAlgosimStructure;
begin
  Result := TAlgosimStructure.CreateWithValue(
    ['first', 'last'],
    [ASO(AFirst), ASO(ALast)]
  );
end;

function TSelfTester.Person(const AFirstName, ALastName, ASex: string; AAge: Integer): TAlgosimStructure;
begin
  Result := TAlgosimStructure.CreateWithValue(
    ['name', 'sex', 'age'],
    [Name(AFirstName, ALastName), ASO(ASex), ASOInt(AAge)]
  );
end;

function TSelfTester.Jane: TAlgosimStructure;
begin
  Jane := Person('Jane', 'Smith', 'female', 40);
end;

function TSelfTester.John: TAlgosimStructure;
begin
  John := Person('John', 'Stone', 'male', 69);
end;

function TSelfTester.Mary: TAlgosimStructure;
begin
  Mary := TAlgosimStructure.CreateWithValue(
    ['mother', 'father'],
    [Jane, Mike]
  );
end;

function TSelfTester.Mike: TAlgosimStructure;
begin
  Mike := Person('Mike', 'Doe', 'male', 45);
end;

function TSelfTester.Sarah: TAlgosimStructure;
begin
  Sarah := Person('Sarah', 'Lester', 'female', 25);
end;

procedure TSelfTester.SendProgress(AForce: Boolean);
begin
  if not AForce and (GetTickCount64 - FLastStatTime < 100) then
    Exit;
  if Assigned(FProgressEvent) then
  begin
    FProgressEvent(TotalCount, FTestCount, FSuccessCount, FFailCount);
  end;
  FLastStatTime := GetTickCount64;
end;

function TSelfTester.SPerson(const AName: string;
  AAge: Integer; const ASex: string): TAlgosimStructure;
begin
  if ASex.IsEmpty then
    Result := TAlgosimStructure.CreateWithValue(
      ['name', 'age'],
      [ASO(AName), ASOInt(AAge)]
    )
  else
    Result := TAlgosimStructure.CreateWithValue(
      ['name', 'age', 'sex'],
      [ASO(AName), ASOInt(AAge), ASO(ASex)]
    )
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: array of TASR);
begin
  Test(ALineNumber, AExpr, ASO(TRealVector.Create(AExpected)));
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr, AExpected: string;
  TestSL: Boolean = False; const SL: string = '');
begin
  Test(ALineNumber, AExpr, ASO(AExpected), TestSL, SL);
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: TASC;
  TestSL: Boolean; const SL: string);
begin
  Test(ALineNumber, AExpr, ASO(AExpected), TestSL, SL);
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: TRationalNumber;
  TestSL: Boolean; const SL: string);
begin
  if TestSL then
    Test(ALineNumber, 'SetNumberFormat((' + AExpr + '), "fraction")', ASORat(AExpected), TestSL, SL)
  else
    Test(ALineNumber, AExpr, ASORat(AExpected), TestSL, SL);
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: TASI;
  TestSL: Boolean; const SL: string);
begin
  Test(ALineNumber, AExpr, ASOInt(AExpected), TestSL, SL);
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: TAlgosimObject;
  ATestSingleLine: Boolean = False; const AExpSingleLine: string = '');
var
  res: TAlgosimObject;
begin
  try
    Inc(FTestCount);
    try
      res := FKernel.Evaluate(AExpr);
    except
      on E: Exception do
      begin
        Inc(FFailCount);
        FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + AExpr, AExpected.ClassName + '(' + AExpected.ToString + ')', E.ClassName + E.Message));
        Log(FFailList.Last.ToString, 'Error');
        Exit;
      end;
    end;
    if
      (res.ClassType = AExpected.ClassType) and
      _ASOEq(res, AExpected) and
      (not ATestSingleLine or res.GetAsSingleLineText(FKernel.FormatOptions).Equals(AExpSingleLine))
    then
      Inc(FSuccessCount)
    else
    begin
      Inc(FFailCount);
      if not (res.ClassType = AExpected.ClassType) or not _ASOEq(res, AExpected) then
      begin
        if res is TAlgosimFailure then
          FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + AExpr, AExpected.ClassName + '(' + AExpected.ToString + ')', res.ClassName + '(' + TAlgosimFailure(res).FailureReason + ')'))
        else
          FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + AExpr, AExpected.ClassName + '(' + AExpected.ToString + ')', res.ClassName + '(' + res.ToString + ')'))
      end
      else
        FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + AExpr, AExpSingleLine, res.GetAsSingleLineText(FKernel.FormatOptions)));
      Log(FFailList.Last.ToString, 'Error');
    end;
  finally
    FEps := -1; // noexcept
    AExpected.Free;
    SendProgress;
  end;
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: ExceptClass;
  const AErrorMessage: string);
var
  res: TAlgosimObject;
begin
  Inc(FTestCount);
  try
    res := FKernel.Evaluate(AExpr);
  except
    on E: Exception do
    begin
      if (E is AExpected) and (AErrorMessage.IsEmpty or E.Message.ToLower.Contains(AErrorMessage.ToLower)) then
        Inc(FSuccessCount)
      else
      begin
        Inc(FFailCount);
        if not (E is AExpected) then
          FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + AExpr, AExpected.ClassName, E.ClassName))
        else
          FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + AExpr, AExpected.ClassName + ': ' + AErrorMessage, E.ClassName + ': ' + E.Message));
        Log(FFailList.Last.ToString, 'Error');
      end;
      SendProgress;
      Exit;
    end;
  end;
  Inc(FFailCount);
  FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + AExpr, AExpected.ClassName, res.ClassName + '(' + res.ToString + ')'));
  Log(FFailList.Last.ToString, 'Error');
  SendProgress;
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: TASR;
  TestSL: Boolean; const SL: string);
begin
  Test(ALineNumber, AExpr, ASO(AExpected), TestSL, SL);
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: array of TASC);
begin
  Test(ALineNumber, AExpr, ASO(TComplexVector.Create(AExpected)));
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; AColCount: Integer;
  const AExpected: array of TASC);
begin
  Test(ALineNumber, AExpr, ASO(TComplexMatrix.Create(AExpected, AColCount)));
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; AColCount: Integer;
  const AExpected: array of TASR);
begin
  Test(ALineNumber, AExpr, ASO(TRealMatrix.Create(AExpected, AColCount)));
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: TRGB;
  TestSL: Boolean = False; const SL: string = '');
begin
  Test(ALineNumber, AExpr, ASO(AExpected), TestSL, SL);
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: Boolean);
begin
  Test(ALineNumber, AExpr, ASO(AExpected));
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: TASOSignal);
begin
  Test(ALineNumber, AExpr, ASO(AExpected));
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: TASOSignal;
  const AErrorMessage: string);
var
  res: TAlgosimObject;
begin
  Assert(AExpected = failure);
  Inc(FTestCount);
  try
    res := FKernel.Evaluate(AExpr);
  except
    on E: Exception do
    begin
      Inc(FFailCount);
      FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + AExpr, 'failure' + ' (' + AErrorMessage + ')', E.ClassName));
      Log(FFailList.Last.ToString, 'Error');
      SendProgress;
      Exit;
    end;
  end;
  if
    (res is TAlgosimFailure)
      and
    TAlgosimFailure(res).FailureReason.ToLower.Contains(AErrorMessage.ToLower)
  then
    Inc(FSuccessCount)
  else
  begin
    Inc(FFailCount);
    if not (res is TAlgosimFailure) then
      FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + AExpr, 'failure', res.ClassName + '(' + res.ToString + ')'))
    else
      FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + AExpr, 'failure (' + AErrorMessage + ')', TAlgosimFailure(res).FailureReason));
    Log(FFailList.Last.ToString, 'Error');
  end;
  SendProgress;
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: THSL;
  TestSL: Boolean; const SL: string);
begin
  Test(ALineNumber, AExpr, ASO(AExpected), TestSL, SL);
end;

procedure TSelfTester.Test(ALineNumber: Integer; const AExpr: string; const AExpected: THSV;
  TestSL: Boolean; const SL: string);
begin
  Test(ALineNumber, AExpr, ASO(AExpected), TestSL, SL);
end;

procedure TSelfTester.TestCharType(ALineNumber: Integer; const AFcnName, APositives: string);
begin
  for var c in CharSamples do
    Test(ALineNumber, Format('%s("%s")', [AFcnName, c]), Pos(c, APositives) <> 0);
end;

procedure TSelfTester.TestComplexMatrixQ(ALineNumber: Integer; const AFcnName: string;
  const APositives: AnsiString);
var
  c: AnsiChar;
  x: set of AnsiChar;
begin
  x := [];
  for c in ComplexMatrixNames do
    Include(x, c);
  for c in APositives do
  begin
    Test(ALineNumber, Format('%s(%s)', [AFcnName, c]), True);
    Exclude(x, c);
  end;
  for c in x do
    Test(ALineNumber, Format('%s(%s)', [AFcnName, c]), False);
end;

procedure TSelfTester.TestComplexMatrixQImplies(ALineNumber: Integer;
  const ALeft, ARight: string);
begin
  for var c in ComplexMatrixNames do
    Test(ALineNumber, Format('%s(%s) ⇒ %s(%s)', [ALeft, c, ARight, c]), True);
end;

procedure TSelfTester.TestDefVars;
begin
  Eps; Test({LINENUM}574, 'e', 2.7182818284590452353602874);
  Eps; Test({LINENUM}575, 'π', 3.1415926535897932384626433);
       Test({LINENUM}576, 'ℎ', 6.62607015E-34); // No blasted [epsilons] [here]! No, sir. Not one, single, bloody [epsilon]! Not one! [...] No, sir! Not one blasted, miserable ...
  Eps; Test({LINENUM}577, 'ℏ', 6.62607015E-34 / (2*3.1415926535897932384626433));
  Test({LINENUM}578, 'i', ImaginaryUnit); Test({LINENUM}0, 'i^2', TASC(-1));
  Test({LINENUM}579, 'true', True);
  Test({LINENUM}580, 'false', False);
  Test({LINENUM}581, 'otherwise', True);
  Test({LINENUM}582, '∅', TAlgosimSet.Create); Test({LINENUM}0, 'type(∅)', 'set'); Test({LINENUM}0, '#∅', 0); Test({LINENUM}0, '∅ = {}', True);
  Test({LINENUM}583, '¶', sLineBreak);
end;

procedure TSelfTester.TestDuration(ALineNumber: Integer; const AMinDur, AMaxDur: Double);
begin
  Test(ALineNumber,
    AMinDur.ToString(TFormatSettings.Invariant) +
    '≤' +
    ElapsedTime.ToString(TFormatSettings.Invariant) +
    '∧' +
    ElapsedTime.ToString(TFormatSettings.Invariant) +
    '≤' +
    AMaxDur.ToString(TFormatSettings.Invariant),
    True
  );
end;

procedure TSelfTester.TestExternal(ALineNumber: Integer; const ATestName: string;
  AAssertion: Boolean);
begin
  if AAssertion then
    Inc(FSuccessCount)
  else
  begin
    Inc(FFailCount);
    FFailList.Add(TTestItem.Create(ALineNumber.ToString + #9 + ATestName, 'Success', 'Failure'));
    Log(FFailList.Last.ToString, 'Error');
  end;
end;

procedure TSelfTester.TestDuration(ALineNumber: Integer; const AMaxDur: Double);
begin
  Test(ALineNumber,
    ElapsedTime.ToString(TFormatSettings.Invariant) +
    '≤' +
    AMaxDur.ToString(TFormatSettings.Invariant),
    True
  );
end;

procedure TSelfTester.TestSL(ALineNumber: Integer; const AExpr, AExpected: string);
begin
  Test(ALineNumber, 'AsSingleLine(' + AExpr + ')', AExpected);
end;

procedure TSelfTester.TestML(ALineNumber: Integer; const AExpr, AExpected: string);
begin
  Test(ALineNumber, 'AsMultiLine(' + AExpr + ')', AExpected);
end;

procedure TSelfTester.TestNumFmt(ALineNumber: Integer; const ARatValue: string;
  ANumberFormat: TNumberFormat; const AExpOutput: array of string);
begin
  TestNumFmt(ALineNumber, ARatValue, ANumberFormat, -1, AExpOutput);
end;

procedure TSelfTester.TestNumFmt(ALineNumber: Integer; const ARatValue: string;
  ANumberFormat: TNumberFormat; ANumDigits: Integer;
  const AExpOutput: array of string);

const
  NumFmtStrs: array[TNumberFormat] of string =
    ('default', 'fraction', 'fixed', 'scientific', 'power');

type
  TPrettyExpTestMode = (petmImplicit, petmOn, petmOff);

const
  PrettyExpTestModes = [Low(TPrettyExpTestMode)..High(TPrettyExpTestMode)];

  function ApplySettings(const S: string; AImplicitDef: Boolean;
    APrettyExp: TPrettyExpTestMode; ADigitGrouping: Integer): string;
  begin
    Result := S;
    if not AImplicitDef then
      Result := Format('SetNumberFormat(%s, "%s")', [Result, NumFmtStrs[ANumberFormat]]);
    if ANumDigits <> -1 then
      Result := Format('(%s) \ %d', [Result, ANumDigits]);
    if APrettyExp <> petmImplicit then
      Result := Format('SetPrettyExp(%s, %s)', [Result, IfThen(APrettyExp = petmOn, 'true', 'false')]);
    if ADigitGrouping <> -1 then
      Result := Format('SetDigitGrouping(%s, %d)', [Result, ADigitGrouping]);
  end;

  function ForceRat(const S: string): string;
  begin
    Result := Format('ToFraction(%s)', [S]);
  end;

  function ForceReal(const S: string): string;
  begin
    Result := Format('RealNumber(%s)', [S]);
  end;

  function ForceCplx(const S: string): string;
  begin
    Result := Format('ComplexNumber(%s)', [S]);
  end;

  function Unpretty(const S: string; APETM: TPrettyExpTestMode): string;
  begin
    if APETM = petmOff then
      Result := S
        .Replace('⋅10^−', 'E−')
        .Replace('⋅10^', 'E' + IfThen(ANumberFormat = nfExponent, '+'))
    else
      Result := S;
  end;

  function DoDigGr(const S: string; ADigGr: Integer): string;

    procedure DeE(var S: string);
    var
      i: Integer;
    begin
      i := S.Length;
      while (i > 0) and (S[i] <> 'E') and (S[i] <> 'e') and (S[i] <> DOT_OPERATOR) do
        Dec(i);
      if i > 0 then
        SetLength(S, i - 1);
    end;

  var
    p: Integer;
    Sgn, IntPart, IntPartGrpd, FracPart, FracPartGrpd, Suffix: string;
    i, j: Integer;
  begin

    if ADigGr < 1 then
      Exit(S);

    p := Pos('/', S);
    if p <> 0 then
      Exit(DoDigGr(Copy(S, 1, Pred(p)), ADigGr) + '/' + DoDigGr(Copy(S, Succ(p)), ADigGr));

    if IndexStr(Copy(S, 1, 1), [MINUS_SIGN, '-', '+']) <> -1 then
      Sgn := S[1];

    p := Pos('.', S);
    IntPart := Copy(S, 1 + Sgn.Length, IfThen(p = 0, MaxInt, p - 1 - Sgn.Length));
    if p <> 0 then
      FracPart := Copy(S, Succ(p));

    DeE(IntPart);
    DeE(FracPart);

    p := Pos('E', S);
    if p = 0 then
      p := Pos('e', S);
    if p = 0 then
      p := Pos(DOT_OPERATOR, S);
    if p <> 0 then
      Suffix := Copy(S, p);

    if not IntPart.IsEmpty then
    begin
      SetLength(IntPartGrpd, IntPart.Length + Ceil(IntPart.Length / ADigGr) - 1);
      j := 0;
      for i := 1 to IntPart.Length do
      begin
        if (i <> 1) and ((IntPart.Length - i + 1) mod ADigGr = 0) then
        begin
          Inc(j);
          IntPartGrpd[j] := FIGURE_SPACE;
        end;
        Inc(j);
        IntPartGrpd[j] := IntPart[i];
      end;
      Assert(j = IntPartGrpd.Length);
    end;

    if not FracPart.IsEmpty then
    begin
      SetLength(FracPartGrpd, FracPart.Length + Ceil(FracPart.Length / ADigGr) - 1);
      j := 0;
      for i := 1 to FracPart.Length do
      begin
        if (i <> 1) and (Pred(i) mod ADigGr = 0) then
        begin
          Inc(j);
          FracPartGrpd[j] := FIGURE_SPACE;
        end;
        Inc(j);
        FracPartGrpd[j] := FracPart[i];
      end;
      Assert(j = FracPartGrpd.Length);
    end;

    Result := Sgn + IntPartGrpd + IfThen(not FracPart.IsEmpty, '.') + FracPartGrpd + Suffix;

  end;

  function NZ(const S: string): Boolean;
  var
    i: Integer;
  begin
    for i := 1 to S.Length do
      if S[i].IsInArray(['E', 'e', DOT_OPERATOR]) then
        Break
      else if CharInSet(S[i], ['1'..'9']) then
        Exit(True);
    Result := False;
  end;

const
  Sgns: array[Boolean] of string = ('', MINUS_SIGN);

var
  dummy: Int64;
  i: Integer;
  LExpOutput: array[0..3] of string;
  ImplVals: array of Boolean;
  b: Boolean;
  petm: TPrettyExpTestMode;
  neg: Boolean;
  LRatValue: string;
  DigGr: Integer;

begin

  if not (Length(AExpOutput) in [1, 2, 3, 4]) then
    raise Exception.Create('TSelfTester.TestNumFmt: Incorrect array length.');

  for i := Low(LExpOutput) to High(LExpOutput) do
    LExpOutput[i] := AExpOutput[Min(i, High(AExpOutput))]
      .Replace('E', '⋅10^')
      .Replace(HYPHEN_MINUS, MINUS_SIGN)
      .Replace(#32, FIGURE_SPACE);

  if ANumberFormat = nfDefault then
    ImplVals := [False, True]
  else
    ImplVals := [False];

  for DigGr in TArray<Integer>.Create(-1, 0, 1, 2, 3, 4, 5) do
    for neg in [False, True] do
      for petm in PrettyExpTestModes do
        for b in ImplVals do
        begin

          if neg then
            LRatValue := '-' + ARatValue
          else
            LRatValue := ARatValue;

          if TryStrToInt64(ARatValue, dummy) then
          begin
            if LExpOutput[0] <> '*' then
              TestSL(ALineNumber, ApplySettings(LRatValue, b, petm, DigGr), Sgns[neg and NZ(LExpOutput[0])] + DoDigGr(Unpretty(LExpOutput[0], petm), DigGr));
          end
          else
            if LExpOutput[0] <> '!' then
              raise Exception.CreateFmt('TSelfTester.TestNumFmt: Cannot convert "%s" to an integer.', [LRatValue]);

          if (LExpOutput[1] <> '*') and not b then
            TestSL(ALineNumber, ApplySettings(ForceRat(LRatValue), b, petm, DigGr), Sgns[neg and NZ(LExpOutput[1])] + DoDigGr(Unpretty(LExpOutput[1], petm), DigGr));
          if LExpOutput[2] <> '*' then
            TestSL(ALineNumber, ApplySettings(ForceReal(LRatValue), b, petm, DigGr), Sgns[neg and NZ(LExpOutput[2])] + DoDigGr(Unpretty(LExpOutput[2], petm), DigGr));
          if LExpOutput[3] <> '*' then
            TestSL(ALineNumber, ApplySettings(ForceCplx(LRatValue), b, petm, DigGr), Sgns[neg and NZ(LExpOutput[3])] + DoDigGr(Unpretty(LExpOutput[3], petm), DigGr));

        end;

end;

function Rat(p, q: TASI): TRationalNumber;
begin
  Result := TRationalNumber.Create(p, q);
end;

function fs(const S: string): string;
var
  i: Integer;
begin
  Result := S;
  for i := 1 to S.Length do
    if Result[i] = #32 then
      Result[i] := FIGURE_SPACE;
end;

function mm(const S: string): string;
var
  i: Integer;
begin
  Result := S;
  for i := 1 to S.Length do
    if Result[i] = '-' then
      Result[i] := MINUS_SIGN
    else if Result[i] = '*' then
      Result[i] := DOT_OPERATOR;
end;


function TSelfTester._ASOEq(A, B: TAlgosimObject): Boolean;
begin
  if FEps >= 0 then
    Result := SameASO(A, B, FEps)
  else
    Result := A.Equals(B) or ((A is TAlgosimNullObject) and (B is TAlgosimNullObject));
end;

function intset(const AInts: array of TASI): TAlgosimSet;
var
  i: TASI;
begin
  Result := TAlgosimSet.Create;
  try
    for i in AInts do
      Result.AddElement(ASOInt(i));
  except
    Result.Free;
    raise;
  end;
end;

function asoset(const AElements: array of const): TAlgosimSet;
var
  i: Integer;
begin
  Result := TAlgosimSet.Create;
  try
    for i := Low(AElements) to High(AElements) do
      case AElements[i].VType of
        vtInteger:
          Result.AddElement(ASO(AElements[i].VInteger));
        vtInt64:
          Result.AddElement(ASO(AElements[i].VInt64^));
        vtBoolean:
          Result.AddElement(ASO(AElements[i].VBoolean));
        vtExtended:
          Result.AddElement(ASO(AElements[i].VExtended^));
        vtString:
          Result.AddElement(ASO(string(AElements[i].VString^)));
        vtUnicodeString:
          Result.AddElement(ASO(UnicodeString(AElements[i].VUnicodeString)));
        vtWideChar:
          Result.AddElement(ASO(AElements[i].VWideChar));
      else
        raise Exception.Create('asoset: Unsupported variant type.');
      end;
  except
    Result.Free;
    raise;
  end;
end;

function asosetex(const AElements: array of TAlgosimObject): TAlgosimSet;
var
  i: Integer;
  LastAdded: Integer;
begin
  LastAdded := -1;
  Result := TAlgosimSet.Create;
  try
    for i := Low(AElements) to High(AElements) do
    begin
      Result.AddElement(AElements[i]);
      LastAdded := i;
    end;
  except
    Result.Free;
    for i := LastAdded + 1 to High(AElements) do
      AElements[i].Free;
    raise;
  end;
end;

function asoarr(const AElements: array of const): TAlgosimArray;
var
  i: Integer;
begin
  Result := TAlgosimArray.Create;
  try
    for i := Low(AElements) to High(AElements) do
      case AElements[i].VType of
        vtInteger:
          Result.AddElement(ASO(AElements[i].VInteger));
        vtInt64:
          Result.AddElement(ASO(AElements[i].VInt64^));
        vtBoolean:
          Result.AddElement(ASO(AElements[i].VBoolean));
        vtExtended:
          Result.AddElement(ASO(AElements[i].VExtended^));
        vtString:
          Result.AddElement(ASO(string(AElements[i].VString^)));
        vtUnicodeString:
          Result.AddElement(ASO(UnicodeString(AElements[i].VUnicodeString)));
        vtWideChar:
          Result.AddElement(ASO(AElements[i].VWideChar));
      else
        raise Exception.Create('asoarr: Unsupported variant type.');
      end;
  except
    Result.Free;
    raise;
  end;
end;

function asoarrex(const AElements: array of TAlgosimObject): TAlgosimArray;
var
  i: Integer;
  LastAdded: Integer;
begin
  LastAdded := -1;
  Result := TAlgosimArray.Create;
  try
    for i := Low(AElements) to High(AElements) do
    begin
      Result.AddElement(AElements[i]);
      LastAdded := i;
    end;
  except
    Result.Free;
    for i := LastAdded + 1 to High(AElements) do
      AElements[i].Free;
    raise;
  end;
end;

function intarr(const AInts: array of TASI): TAlgosimArray;
var
  i: TASI;
begin
  Result := TAlgosimArray.Create;
  try
    for i in AInts do
      Result.AddElement(ASOInt(i));
  except
    Result.Free;
    raise;
  end;
end;

function intarrN(const AInts: array of TASI): TAlgosimArray;
var
  i: TASI;
begin
  Result := TAlgosimArray.Create;
  try
    for i in AInts do
      if i <> -1 then
        Result.AddElement(ASOInt(i))
      else
        Result.AddElement(ASO(null))
  except
    Result.Free;
    raise;
  end;
end;

function chrarr(const AChrs: array of Char): TAlgosimArray;
var
  c: Char;
begin
  Result := TAlgosimArray.Create;
  try
    for c in AChrs do
      Result.AddElement(ASO(c));
  except
    Result.Free;
    raise;
  end;
end;

function strarr(const AStrs: array of string): TAlgosimArray;
var
  s: string;
begin
  Result := TAlgosimArray.Create;
  try
    for s in AStrs do
      Result.AddElement(ASO(s));
  except
    Result.Free;
    raise;
  end;
end;

function idx2(A, B: Int64): TAlgosimArray;
begin
  Result := intarr([A, B]);
end;

function freq(AVal, AFreq: Int64): TAlgosimArray; overload;
begin
  Result := intarr([AVal, AFreq]);
end;

function freq(AVal: TASR; AFreq: Int64): TAlgosimArray; overload;
begin
  Result := asoarr([AVal, AFreq]);
end;

function freq(AVal: TASC; AFreq: Int64): TAlgosimArray; overload;
begin
  Result := asoarrex([ASO(AVal), ASOInt(AFreq)]);
end;

function freq(const AVal: string; AFreq: Int64): TAlgosimArray; overload;
begin
  Result := asoarrex([ASO(AVal), ASOInt(AFreq)]);
end;

function freq(AVal: Boolean; AFreq: Int64): TAlgosimArray; overload;
begin
  Result := asoarrex([ASO(AVal), ASOInt(AFreq)]);
end;

function freq(AVal: TAlgosimObject; AFreq: Int64): TAlgosimArray; overload;
begin
  Result := asoarrex([AVal, ASOInt(AFreq)]);
end;

var
  _hpc1, _hpc2, _hpcf: Int64;

procedure StartStopwatch;
begin
  ElapsedTime := 0.0;
  QueryPerformanceFrequency(_hpcf);
  QueryPerformanceCounter(_hpc1);
end;

procedure StopStopwatch;
begin
  QueryPerformanceCounter(_hpc2);
  ElapsedTime := (_hpc2 - _hpc1) / _hpcf;
end;


const
  SmallPrimes: array[0..999] of Integer =
    (
      2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
      79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163,
      167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251,
      257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349,
      353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443,
      449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557,
      563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647,
      653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757,
      761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
      877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983,
      991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063,
      1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163,
      1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259,
      1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361,
      1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453,
      1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549,
      1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621,
      1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733,
      1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847,
      1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949,
      1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039,
      2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137,
      2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251,
      2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347,
      2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437,
      2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551,
      2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671,
      2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741,
      2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843,
      2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957,
      2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067,
      3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191,
      3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307,
      3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391,
      3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517,
      3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607,
      3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701,
      3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821,
      3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919,
      3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021,
      4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133,
      4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243,
      4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357,
      4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481,
      4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591,
      4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691,
      4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801,
      4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937,
      4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021,
      5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147,
      5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273,
      5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399,
      5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483,
      5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591,
      5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701,
      5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821,
      5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903,
      5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053,
      6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163,
      6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271,
      6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361,
      6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491,
      6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619,
      6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733,
      6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841,
      6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961,
      6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057,
      7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207,
      7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321,
      7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477,
      7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559,
      7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669,
      7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759,
      7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901,
      7907, 7919
    );

const
  JacobiSymbolValues: array[1..59] of array[1..30] of Integer =
    (
      (1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1, -1,  1,  0,  1, -1, -1,  1,  0,  1, -1, -1,  1,  0,  1, -1, -1,  1,  0,  1, -1, -1,  1,  0,  1, -1, -1,  1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1, -1,  1, -1, -1,  0,  1,  1, -1,  1, -1, -1,  0,  1,  1, -1,  1, -1, -1,  0,  1,  1, -1,  1, -1, -1,  0,  1,  1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1,  1,  1,  1, -1, -1, -1,  1, -1,  0,  1, -1,  1,  1,  1, -1, -1, -1,  1, -1,  0,  1, -1,  1,  1,  1, -1, -1, -1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1,  1,  1, -1, -1, -1, -1,  1,  1, -1,  1,  0,  1, -1,  1,  1, -1, -1, -1, -1,  1,  1, -1,  1,  0,  1, -1,  1,  1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1,  0,  1,  0,  0, -1,  1,  0,  0, -1,  0, -1, -1,  0,  1,  1,  0,  1,  0,  0, -1,  1,  0,  0, -1,  0, -1, -1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1, -1,  1, -1, -1, -1,  1,  1, -1, -1, -1,  1, -1,  1,  1,  0,  1,  1, -1,  1, -1, -1, -1,  1,  1, -1, -1, -1,  1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1, -1,  1,  1,  1,  1, -1,  1, -1,  1, -1, -1, -1, -1,  1,  1, -1,  0,  1, -1, -1,  1,  1,  1,  1, -1,  1, -1,  1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1,  0,  1,  1,  0,  0, -1,  0, -1, -1,  0, -1,  0,  0,  1,  1,  0, -1,  1,  0,  1, -1,  0,  1,  1,  0,  0, -1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1,  1,  1, -1,  1, -1,  1,  1, -1, -1,  1,  1, -1, -1,  1, -1,  1, -1, -1, -1, -1,  0,  1,  1,  1,  1, -1,  1, -1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1,  1,  1,  0,  1,  1,  1,  1,  0,  1,  1,  1,  1,  0,  1,  1,  1,  1,  0,  1,  1,  1,  1,  0,  1,  1,  1,  1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1, -1,  1,  1,  1,  1, -1,  1, -1, -1, -1,  1, -1, -1,  1, -1, -1, -1,  1, -1,  1,  1,  1,  1, -1, -1,  1,  0,  1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1, -1,  1,  1, -1,  1,  1,  1,  1, -1, -1, -1,  1, -1,  1, -1,  1,  1,  1, -1, -1, -1, -1,  1, -1, -1,  1, -1, -1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1,  0,  1, -1,  0, -1,  1,  0, -1,  0,  0, -1, -1,  0,  1,  1,  0, -1, -1,  0,  0, -1,  0,  1, -1,  0, -1,  1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1,  1,  1,  0, -1,  0, -1,  1,  0,  1,  1,  1,  0,  0,  1,  1, -1, -1,  0,  0, -1, -1, -1,  0, -1,  1,  0,  1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1,  1,  1, -1, -1,  1, -1,  1,  1,  1,  1, -1, -1, -1,  1, -1, -1, -1, -1,  1, -1, -1, -1,  1,  1,  1,  1, -1,  1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1,  0,  1,  1,  0, -1,  1,  0,  1,  1,  0,  0, -1,  0,  1, -1,  0, -1,  1,  0,  1, -1,  0,  1,  0,  0, -1, -1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1, -1,  1,  1, -1, -1,  1,  1,  1, -1, -1, -1, -1, -1,  1, -1,  1, -1,  1,  1, -1,  1, -1,  1, -1, -1, -1, -1, -1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1, -1,  1, -1,  1, -1, -1,  1,  1,  1, -1,  1,  1,  1,  1,  1, -1, -1, -1,  1, -1,  1,  1,  1, -1, -1, -1, -1, -1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1,  0,  1,  0,  0, -1, -1,  0,  0,  1,  0, -1,  1,  0,  1, -1,  0,  1,  0,  0, -1, -1,  0,  0,  1,  0, -1,  1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1,  1,  1, -1,  1,  1,  1,  1, -1, -1,  1, -1,  1, -1,  1,  1,  1, -1, -1,  1, -1, -1,  1,  1, -1,  1,  1, -1, -1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  0,  1,  1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1,  0,  1,  1,  0, -1, -1,  0, -1,  1,  0,  1,  1,  0,  1,  0,  0,  1,  1,  0, -1,  1,  0,  1, -1,  0, -1,  1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1, -1,  1, -1,  1,  1, -1,  1,  1,  1, -1,  1, -1,  1,  1,  1, -1, -1, -1, -1, -1, -1,  1,  1, -1, -1,  1,  1, -1),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1, -1,  1,  0, -1,  1,  1,  1,  0,  0, -1,  1,  1,  0,  1,  1,  1, -1,  0, -1,  0, -1, -1,  0,  1, -1,  1, -1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1,  1,  0,  1, -1,  0,  1,  1,  0, -1, -1,  0, -1,  1,  0,  1, -1,  0,  0, -1,  0, -1, -1,  0,  1, -1,  0,  1,  1,  0),
      (0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0),
      (1, -1,  1,  1,  1, -1,  1, -1,  1, -1, -1,  1, -1, -1,  1,  1,  1, -1,  1,  1,  1,  1, -1, -1,  1,  1,  1,  1,  1, -1)
    );

  KroneckerSymbolValues: array[1..30] of array[1..30] of TASI =
  (
    (1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1),
    (1,  0, -1,  0, -1,  0,  1,  0,  1,  0, -1,  0, -1,  0,  1,  0,  1,  0, -1,  0, -1,  0,  1,  0,  1,  0, -1,  0, -1,  0),
    (1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0),
    (1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0),
    (1, -1, -1,  1,  0,  1, -1, -1,  1,  0,  1, -1, -1,  1,  0,  1, -1, -1,  1,  0,  1, -1, -1,  1,  0,  1, -1, -1,  1,  0),
    (1,  0,  0,  0,  1,  0,  1,  0,  0,  0,  1,  0, -1,  0,  0,  0, -1,  0, -1,  0,  0,  0, -1,  0,  1,  0,  0,  0,  1,  0),
    (1,  1, -1,  1, -1, -1,  0,  1,  1, -1,  1, -1, -1,  0,  1,  1, -1,  1, -1, -1,  0,  1,  1, -1,  1, -1, -1,  0,  1,  1),
    (1,  0, -1,  0, -1,  0,  1,  0,  1,  0, -1,  0, -1,  0,  1,  0,  1,  0, -1,  0, -1,  0,  1,  0,  1,  0, -1,  0, -1,  0),
    (1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0,  1,  1,  0),
    (1,  0,  1,  0,  0,  0, -1,  0,  1,  0, -1,  0,  1,  0,  0,  0, -1,  0, -1,  0, -1,  0, -1,  0,  0,  0,  1,  0, -1,  0),
    (1, -1,  1,  1,  1, -1, -1, -1,  1, -1,  0,  1, -1,  1,  1,  1, -1, -1, -1,  1, -1,  0,  1, -1,  1,  1,  1, -1, -1, -1),
    (1,  0,  0,  0, -1,  0,  1,  0,  0,  0, -1,  0,  1,  0,  0,  0, -1,  0,  1,  0,  0,  0, -1,  0,  1,  0,  0,  0, -1,  0),
    (1, -1,  1,  1, -1, -1, -1, -1,  1,  1, -1,  1,  0,  1, -1,  1,  1, -1, -1, -1, -1,  1,  1, -1,  1,  0,  1, -1,  1,  1),
    (1,  0,  1,  0,  1,  0,  0,  0,  1,  0, -1,  0,  1,  0,  1,  0, -1,  0,  1,  0,  0,  0,  1,  0,  1,  0,  1,  0, -1,  0),
    (1,  1,  0,  1,  0,  0, -1,  1,  0,  0, -1,  0, -1, -1,  0,  1,  1,  0,  1,  0,  0, -1,  1,  0,  0, -1,  0, -1, -1,  0),
    (1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0),
    (1,  1, -1,  1, -1, -1, -1,  1,  1, -1, -1, -1,  1, -1,  1,  1,  0,  1,  1, -1,  1, -1, -1, -1,  1,  1, -1, -1, -1,  1),
    (1,  0,  0,  0, -1,  0,  1,  0,  0,  0, -1,  0, -1,  0,  0,  0,  1,  0, -1,  0,  0,  0,  1,  0,  1,  0,  0,  0, -1,  0),
    (1, -1, -1,  1,  1,  1,  1, -1,  1, -1,  1, -1, -1, -1, -1,  1,  1, -1,  0,  1, -1, -1,  1,  1,  1,  1, -1,  1, -1,  1),
    (1,  0, -1,  0,  0,  0, -1,  0,  1,  0,  1,  0, -1,  0,  0,  0, -1,  0,  1,  0,  1,  0, -1,  0,  0,  0, -1,  0,  1,  0),
    (1, -1,  0,  1,  1,  0,  0, -1,  0, -1, -1,  0, -1,  0,  0,  1,  1,  0, -1,  1,  0,  1, -1,  0,  1,  1,  0,  0, -1,  0),
    (1,  0, -1,  0, -1,  0, -1,  0,  1,  0,  0,  0,  1,  0,  1,  0, -1,  0,  1,  0,  1,  0,  1,  0,  1,  0, -1,  0,  1,  0),
    (1,  1,  1,  1, -1,  1, -1,  1,  1, -1, -1,  1,  1, -1, -1,  1, -1,  1, -1, -1, -1, -1,  0,  1,  1,  1,  1, -1,  1, -1),
    (1,  0,  0,  0,  1,  0,  1,  0,  0,  0,  1,  0, -1,  0,  0,  0, -1,  0, -1,  0,  0,  0, -1,  0,  1,  0,  0,  0,  1,  0),
    (1,  1,  1,  1,  0,  1,  1,  1,  1,  0,  1,  1,  1,  1,  0,  1,  1,  1,  1,  0,  1,  1,  1,  1,  0,  1,  1,  1,  1,  0),
    (1,  0, -1,  0,  1,  0, -1,  0,  1,  0,  1,  0,  0,  0, -1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0, -1,  0, -1,  0),
    (1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0,  1, -1,  0),
    (1,  0, -1,  0, -1,  0,  0,  0,  1,  0,  1,  0, -1,  0,  1,  0, -1,  0, -1,  0,  0,  0,  1,  0,  1,  0, -1,  0,  1,  0),
    (1, -1, -1,  1,  1,  1,  1, -1,  1, -1, -1, -1,  1, -1, -1,  1, -1, -1, -1,  1, -1,  1,  1,  1,  1, -1, -1,  1,  0,  1),
    (1,  0,  0,  0,  0,  0, -1,  0,  0,  0,  1,  0,  1,  0,  0,  0,  1,  0, -1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  1,  0)
  );

  Totients: array[1..500] of TASI =
    (
      1, 1, 2, 2, 4, 2, 6, 4, 6, 4, 10, 4, 12, 6, 8, 8, 16, 6, 18, 8, 12, 10, 22, 8, 20, 12, 18, 12, 28, 8, 30, 16, 20, 16,
      24, 12, 36, 18, 24, 16, 40, 12, 42, 20, 24, 22, 46, 16, 42, 20, 32, 24, 52, 18, 40, 24, 36, 28, 58, 16, 60, 30, 36, 32,
      48, 20, 66, 32, 44, 24, 70, 24, 72, 36, 40, 36, 60, 24, 78, 32, 54, 40, 82, 24, 64, 42, 56, 40, 88, 24, 72, 44, 60, 46,
      72, 32, 96, 42, 60, 40, 100, 32, 102, 48, 48, 52, 106, 36, 108, 40, 72, 48, 112, 36, 88, 56, 72, 58, 96, 32, 110, 60,
      80, 60, 100, 36, 126, 64, 84, 48, 130, 40, 108, 66, 72, 64, 136, 44, 138, 48, 92, 70, 120, 48, 112, 72, 84, 72, 148,
      40, 150, 72, 96, 60, 120, 48, 156, 78, 104, 64, 132, 54, 162, 80, 80, 82, 166, 48, 156, 64, 108, 84, 172, 56, 120, 80,
      116, 88, 178, 48, 180, 72, 120, 88, 144, 60, 160, 92, 108, 72, 190, 64, 192, 96, 96, 84, 196, 60, 198, 80, 132, 100,
      168, 64, 160, 102, 132, 96, 180, 48, 210, 104, 140, 106, 168, 72, 180, 108, 144, 80, 192, 72, 222, 96, 120, 112, 226,
      72, 228, 88, 120, 112, 232, 72, 184, 116, 156, 96, 238, 64, 240, 110, 162, 120, 168, 80, 216, 120, 164, 100, 250, 72,
      220, 126, 128, 128, 256, 84, 216, 96, 168, 130, 262, 80, 208, 108, 176, 132, 268, 72, 270, 128, 144, 136, 200, 88, 276,
      138, 180, 96, 280, 92, 282, 140, 144, 120, 240, 96, 272, 112, 192, 144, 292, 84, 232, 144, 180, 148, 264, 80, 252, 150,
      200, 144, 240, 96, 306, 120, 204, 120, 310, 96, 312, 156, 144, 156, 316, 104, 280, 128, 212, 132, 288, 108, 240, 162,
      216, 160, 276, 80, 330, 164, 216, 166, 264, 96, 336, 156, 224, 128, 300, 108, 294, 168, 176, 172, 346, 112, 348, 120,
      216, 160, 352, 116, 280, 176, 192, 178, 358, 96, 342, 180, 220, 144, 288, 120, 366, 176, 240, 144, 312, 120, 372, 160,
      200, 184, 336, 108, 378, 144, 252, 190, 382, 128, 240, 192, 252, 192, 388, 96, 352, 168, 260, 196, 312, 120, 396, 198,
      216, 160, 400, 132, 360, 200, 216, 168, 360, 128, 408, 160, 272, 204, 348, 132, 328, 192, 276, 180, 418, 96, 420, 210,
      276, 208, 320, 140, 360, 212, 240, 168, 430, 144, 432, 180, 224, 216, 396, 144, 438, 160, 252, 192, 442, 144, 352, 222,
      296, 192, 448, 120, 400, 224, 300, 226, 288, 144, 456, 228, 288, 176, 460, 120, 462, 224, 240, 232, 466, 144, 396, 184,
      312, 232, 420, 156, 360, 192, 312, 238, 478, 128, 432, 240, 264, 220, 384, 162, 486, 240, 324, 168, 490, 160, 448, 216,
      240, 240, 420, 164, 498, 200
    );

  Radicals: array[1..78] of TASI =
    (
      1, 2, 3, 2, 5, 6, 7, 2, 3, 10, 11, 6, 13, 14, 15, 2, 17, 6, 19, 10, 21, 22, 23, 6, 5, 26, 3, 14, 29, 30, 31, 2, 33, 34,
      35, 6, 37, 38, 39, 10, 41, 42, 43, 22, 15, 46, 47, 6, 7, 10, 51, 26, 53, 6, 55, 14, 57, 58, 59, 30, 61, 62, 21, 2, 65,
      66, 67, 34, 69, 70, 71, 6, 73, 74, 15, 38, 77, 78
    );

function IntInArray(const AValue: Integer; const AArray: array of Integer): Boolean;
var
  i: Integer;
begin
  for i := Low(AArray) to High(AArray) do
    if AArray[i] = AValue then
      Exit(True);
  Result := False;
end;

function IsSmallPrime(const AValue: Integer): Boolean;
begin
  if AValue > SmallPrimes[High(SmallPrimes)] then
    raise Exception.Create('IsSmallPrime: Prime candidate not small enough.');
  Result := IntInArray(AValue, SmallPrimes);
end;

procedure TSelfTester.TestRealMatrixQ(ALineNumber: Integer; const AFcnName: string;
  const APositives: AnsiString);
var
  c: AnsiChar;
  x: set of AnsiChar;
begin
  x := [];
  for c in RealMatrixNames do
    Include(x, c);
  for c in APositives do
  begin
    Test(ALineNumber, Format('%s(%s)', [AFcnName, c]), True);
    Exclude(x, c);
  end;
  for c in x do
    Test(ALineNumber, Format('%s(%s)', [AFcnName, c]), False);
end;

procedure TSelfTester.TestRealMatrixQImplies(ALineNumber: Integer;
  const ALeft, ARight: string);
var
  c: AnsiChar;
begin
  for c in RealMatrixNames do
    Test(ALineNumber, Format('%s(%s) ⇒ %s(%s)', [ALeft, c, ARight, c]), True);
end;

procedure AvoidDateChange;
begin
  if SecondOfTheDay(Now) > 86397 then
    Sleep(5000);
end;


{$ENDREGION}

procedure TSelfTester.TestSeq;
var
  _i, _j: Integer;
  _x: TASR;
  fn, _s, _s2: string;
  _xarr, _yarr: TArray<TASR>;
  _cxarr, _cyarr: TArray<TASC>;
  _sxarr, _syarr: TArray<string>;
  _st: TStructType;
  _bin: TArray<Byte>;
  _bm: TBitmap;
  _png: TPngImage;
//label
//  Bookmark;
begin

  Test({LINENUM}1391, 'SaveHistory(false)', null);

//  goto Bookmark;

  //
  //
  //  CHAPTER 1
  //  Literals and basic output formatting. Member access by value.
  //
  //

  Chapter('Literals, output formatting, member access by value');

  //
  // Integers
  //

  Test({LINENUM}1408, '0', 0, True, '0');
  Test({LINENUM}1409, '1', 1, True, '1');
  Test({LINENUM}1410, '2', 2, True, '2');
  Test({LINENUM}1411, '-1', -1, True, MINUS_SIGN + '1');
  Test({LINENUM}1412, HYPHEN_MINUS + '1', -1, True, MINUS_SIGN + '1');         Assert(HYPHEN_MINUS = #$2D);
  Test({LINENUM}1413, MINUS_SIGN + '1', -1, True, MINUS_SIGN + '1');           Assert(MINUS_SIGN = #$2212);
  Test({LINENUM}1414, '123', 123, True, '123');
  Test({LINENUM}1415, '-123', -123, True, MINUS_SIGN + '123');
  Test({LINENUM}1416, '123456789', 123456789, True, '123456789');
  Test({LINENUM}1417, '-123456789', -123456789, True, MINUS_SIGN + '123456789');
  Test({LINENUM}1418, '123456789123', 123456789123, True, '123456789123');
  Test({LINENUM}1419, '-123456789123', -123456789123, True, MINUS_SIGN + '123456789123');
  Test({LINENUM}1420, '123456789123456', 123456789123456, True, '123456789123456');
  Test({LINENUM}1421, '-123456789123456', -123456789123456, True, MINUS_SIGN + '123456789123456');
  Test({LINENUM}1422, '123456789123456789', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1423, '-123456789123456789', -123456789123456789, True, MINUS_SIGN + '123456789123456789');

  Test({LINENUM}1425, '10#0', 0, True, '0');
  Test({LINENUM}1426, '10#1', 1, True, '1');
  Test({LINENUM}1427, '-10#1', -1, True, MINUS_SIGN + '1');
  Test({LINENUM}1428, '10#123456', 123456, True, '123456');
  Test({LINENUM}1429, '-10#123456', -123456, True, MINUS_SIGN + '123456');

  Test({LINENUM}1431, '16#0', 0, True, '0');
  Test({LINENUM}1432, '16#1', 1, True, '1');
  Test({LINENUM}1433, '16#10', 16, True, '16');
  Test({LINENUM}1434, '16#FF', 255, True, '255');
  Test({LINENUM}1435, '-16#FF', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1436, '-16#ff', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1437, '-16#Ff', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1438, '-16#fF', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1439, '16#FFFFFFFF', 4294967295, True, '4294967295');
  Test({LINENUM}1440, '16#FFFFFFFFFFFFFFF', 1152921504606846975, True, '1152921504606846975');
  Test({LINENUM}1441, '16#fffffffffffffff', 1152921504606846975, True, '1152921504606846975');
  Test({LINENUM}1442, '16#20', 32, True, '32');
  Test({LINENUM}1443, '16#123ABCDEF', 4893429231, True, '4893429231');
  Test({LINENUM}1444, '16#A1B8EF81FA81FBA', 728332961084612538, True, '728332961084612538');
  Test({LINENUM}1445, '-16#A1B8EF81FA81FBA', -728332961084612538, True, MINUS_SIGN + '728332961084612538');
  Test({LINENUM}1446, '16#7FFFFFFFFFFFFFFF', 9223372036854775807, True, '9223372036854775807');
  Test({LINENUM}1447, '-16#7FFFFFFFFFFFFFFF', -9223372036854775807, True, MINUS_SIGN + '9223372036854775807');
  Test({LINENUM}1448, '16#8000000000000000', ESyntaxException, 'invalid numeric literal');

  Test({LINENUM}1450, '8#0', 0, True, '0');
  Test({LINENUM}1451, '8#1', 1, True, '1');
  Test({LINENUM}1452, '8#10', 8, True, '8');
  Test({LINENUM}1453, '8#11', 9, True, '9');
  Test({LINENUM}1454, '8#12', 10, True, '10');
  Test({LINENUM}1455, '8#15260', 6832, True, '6832');
  Test({LINENUM}1456, '8#4741716513576', 339557914494, True, '339557914494');
  Test({LINENUM}1457, '8#115651564324324455454', 1402087635523099436, True, '1402087635523099436');
  Test({LINENUM}1458, '-8#115651564324324455454', -1402087635523099436, True, MINUS_SIGN + '1402087635523099436');
  Test({LINENUM}1459, '8#777777777777777777777', 9223372036854775807, True, '9223372036854775807');
  Test({LINENUM}1460, '8#1000000000000000000000', ESyntaxException, 'invalid numeric literal');

  Test({LINENUM}1462, '2#0', 0, True, '0');
  Test({LINENUM}1463, '2#1', 1, True, '1');
  Test({LINENUM}1464, '2#10', 2, True, '2');
  Test({LINENUM}1465, '2#100', 4, True, '4');
  Test({LINENUM}1466, '2#1000', 8, True, '8');
  Test({LINENUM}1467, '2#10000', 16, True, '16');
  Test({LINENUM}1468, '2#100000', 32, True, '32');
  Test({LINENUM}1469, '2#1000000', 64, True, '64');
  Test({LINENUM}1470, '2#10000000', 128, True, '128');
  Test({LINENUM}1471, '2#100000000', 256, True, '256');
  Test({LINENUM}1472, '2#1000000000', 512, True, '512');
  Test({LINENUM}1473, '2#10000000000', 1024, True, '1024');
  Test({LINENUM}1474, '2#1000000000000000000000000', 16777216, True, '16777216');
  Test({LINENUM}1475, '2#100000000000000000000000000000000', 4294967296, True, '4294967296');
  Test({LINENUM}1476, '2#10000000000000000000000000000000000000000', 1099511627776, True, '1099511627776');
  Test({LINENUM}1477, '2#1011101010110110101100', 3059116, True, '3059116');
  Test({LINENUM}1478, '2#1001110101110100101010101010101', 1320834389, True, '1320834389');
  Test({LINENUM}1479, '-2#1001110101110100101010101010101', -1320834389, True, MINUS_SIGN + '1320834389');
  Test({LINENUM}1480, '2#101011110101010110101010101010101010101010110101010101010100110', 6317095989821483686, True, '6317095989821483686');
  Test({LINENUM}1481, '-2#101011110101010110101010101010101010101010110101010101010100110', -6317095989821483686, True, MINUS_SIGN + '6317095989821483686');
  Test({LINENUM}1482, '2#111111111111111111111111111111111111111111111111111111111111111', 9223372036854775807, True, '9223372036854775807');
  Test({LINENUM}1483, '2#1000000000000000000000000000000000000000000000000000000000000000', ESyntaxException, 'invalid numeric literal');

  Test({LINENUM}1485, '5#0', 0);
  Test({LINENUM}1486, '5#1', 1);
  Test({LINENUM}1487, '5#10', 5);
  Test({LINENUM}1488, '5#11', 6);
  Test({LINENUM}1489, '5#100', 25);
  Test({LINENUM}1490, '5#110', 30);
  Test({LINENUM}1491, '5#111', 31);
  Test({LINENUM}1492, '5#112', 32);
  Test({LINENUM}1493, '5#1000', 125);
  Test({LINENUM}1494, '5#123', 38);
  Test({LINENUM}1495, '5#1104332401304422434310311212', 9223372036854775807, True, '9223372036854775807');
  Test({LINENUM}1496, '5#1104332401304422434310311213', ESyntaxException, 'invalid numeric literal');

  Test({LINENUM}1498, '20#0', 0);
  Test({LINENUM}1499, '20#1', 1);
  Test({LINENUM}1500, '20#2', 2);
  Test({LINENUM}1501, '20#3', 3);
  Test({LINENUM}1502, '20#4', 4);
  Test({LINENUM}1503, '20#9', 9);
  Test({LINENUM}1504, '20#A', 10);
  Test({LINENUM}1505, '20#B', 11);
  Test({LINENUM}1506, '20#C', 12);
  Test({LINENUM}1507, '20#D', 13);
  Test({LINENUM}1508, '20#E', 14);
  Test({LINENUM}1509, '20#F', 15);
  Test({LINENUM}1510, '20#G', 16);
  Test({LINENUM}1511, '20#H', 17);
  Test({LINENUM}1512, '20#I', 18);
  Test({LINENUM}1513, '20#J', 19);
  Test({LINENUM}1514, '20#K', ESyntaxException, 'invalid base-20 digit "K" in numeric literal "20#K"');
  Test({LINENUM}1515, '20#10', 20);
  Test({LINENUM}1516, '20#11', 21);
  Test({LINENUM}1517, '20#12', 22);
  Test({LINENUM}1518, '20#123', 443);
  Test({LINENUM}1519, '20#1000', 8000);
  Test({LINENUM}1520, '20#a', 10);
  Test({LINENUM}1521, '20#b', 11);
  Test({LINENUM}1522, '20#c', 12);
  Test({LINENUM}1523, '20#5cbfjia3fh26ja7', 9223372036854775807, True, '9223372036854775807');
  Test({LINENUM}1524, '20#5cbfjia3fh26ja8', ESyntaxException, 'invalid numeric literal');

  Test({LINENUM}1526, '2#11010101010', 1706);
  Test({LINENUM}1527, '2#11010101020', ESyntaxException, 'invalid base-2 digit "2" in numeric literal "2#11010101020"');

  Test({LINENUM}1529, '10#123456', 123456);
  Test({LINENUM}1530, '10#12345A', ESyntaxException, 'invalid base-10 digit "A" in numeric literal "10#12345A"');

  Test({LINENUM}1532, '16#12345A', 1193050);
  Test({LINENUM}1533, '16#12345B', 1193051);
  Test({LINENUM}1534, '16#12345C', 1193052);
  Test({LINENUM}1535, '16#12345D', 1193053);
  Test({LINENUM}1536, '16#12345E', 1193054);
  Test({LINENUM}1537, '16#12345F', 1193055);
  Test({LINENUM}1538, '16#12345G', ESyntaxException, 'invalid base-16 digit "G" in numeric literal "16#12345G"');
  Test({LINENUM}1539, '16#123460', 1193056);
  Test({LINENUM}1540, '16#12345f', 1193055);

  Test({LINENUM}1542, '8#1234567', 342391);
  Test({LINENUM}1543, '8#1234568', ESyntaxException, 'invalid base-8 digit "8" in numeric literal "8#1234568"');
  Test({LINENUM}1544, '8#1234570', 342392);

  Test({LINENUM}1546, '36#AZ', 395);
  Test({LINENUM}1547, '36#ZZZZZ', 60466175);
  Test({LINENUM}1548, '36#az', 395);
  Test({LINENUM}1549, '36#zzzzz', 60466175);
  Test({LINENUM}1550, '36#ZzzzZ', 60466175);
  Test({LINENUM}1551, '36#1q7tyotd8hj0j', 8189181848448181891, True, '8189181848448181891');
  Test({LINENUM}1552, '-36#1q7tyotd8hj0j', -8189181848448181891, True, MINUS_SIGN + '8189181848448181891');
  Test({LINENUM}1553, '36#1y2p0ij32e8e7', 9223372036854775807, True, '9223372036854775807');
  Test({LINENUM}1554, '36#1y2p0ij32e8e8', ESyntaxException, 'invalid numeric literal');

  Test({LINENUM}1556, '1#156', ESyntaxException, 'invalid number base 1 in numeric literal "1#156"');
  Test({LINENUM}1557, '0#0', ESyntaxException, 'invalid number base 0 in numeric literal "0#0"');
  Test({LINENUM}1558, '37#123', ESyntaxException, 'invalid number base 37 in numeric literal "37#123"');
  Test({LINENUM}1559, '16#katt', ESyntaxException, 'invalid base-16 digit "k" in numeric literal "16#katt"');

  Test({LINENUM}1561, '36#0', 0, True, '0');
  Test({LINENUM}1562, '36#1', 1, True, '1');
  Test({LINENUM}1563, '36#2', 2, True, '2');
  Test({LINENUM}1564, '36#3', 3);
  Test({LINENUM}1565, '36#4', 4);
  Test({LINENUM}1566, '36#5', 5);
  Test({LINENUM}1567, '36#6', 6);
  Test({LINENUM}1568, '36#7', 7);
  Test({LINENUM}1569, '36#8', 8);
  Test({LINENUM}1570, '36#9', 9);
  Test({LINENUM}1571, '36#A', 10);
  Test({LINENUM}1572, '36#B', 11);
  Test({LINENUM}1573, '36#C', 12);
  Test({LINENUM}1574, '36#D', 13, True, '13');
  Test({LINENUM}1575, '36#E', 14);
  Test({LINENUM}1576, '36#F', 15);
  Test({LINENUM}1577, '36#G', 16);
  Test({LINENUM}1578, '36#H', 17);
  Test({LINENUM}1579, '36#I', 18);
  Test({LINENUM}1580, '36#J', 19);
  Test({LINENUM}1581, '36#K', 20);
  Test({LINENUM}1582, '36#L', 21);
  Test({LINENUM}1583, '36#M', 22);
  Test({LINENUM}1584, '36#N', 23);
  Test({LINENUM}1585, '36#O', 24, True, '24');
  Test({LINENUM}1586, '36#P', 25);
  Test({LINENUM}1587, '36#Q', 26);
  Test({LINENUM}1588, '36#R', 27);
  Test({LINENUM}1589, '36#S', 28);
  Test({LINENUM}1590, '36#T', 29);
  Test({LINENUM}1591, '36#U', 30);
  Test({LINENUM}1592, '36#V', 31);
  Test({LINENUM}1593, '36#W', 32);
  Test({LINENUM}1594, '36#X', 33);
  Test({LINENUM}1595, '36#Y', 34);
  Test({LINENUM}1596, '36#Z', 35, True, '35');
  Test({LINENUM}1597, '36#10', 36, True, '36');
  Test({LINENUM}1598, '36#11', 37, True, '37');

  Test({LINENUM}1600, '16#abc', 2748);
  Test({LINENUM}1601, '16#abc#2', ESyntaxException, 'invalid numeric literal "16#abc#2"');
  Test({LINENUM}1602, '1#2#3', ESyntaxException, 'invalid numeric literal "1#2#3"');

  // Format: number base

  Test({LINENUM}1606, '255', 255, True, '255');
  Test({LINENUM}1607, 'SetNumberBase(255, 10)', 255, True, '255');
  Test({LINENUM}1608, 'SetNumberBase(255, 16)', 255, True, 'FF');
  Test({LINENUM}1609, 'SetNumberBase(255, 2)', 255, True, '11111111');
  Test({LINENUM}1610, 'SetNumberBase(255, 3)', 255, True, '100110');
  Test({LINENUM}1611, 'SetNumberBase(30, 30)', 30, True, '10');
  Test({LINENUM}1612, 'SetNumberBase(36, 36)', 36, True, '10');
  Test({LINENUM}1613, 'SetNumberBase(2#11111111, 2)', 255, True, '11111111');
  Test({LINENUM}1614, 'SetNumberBase(2#11111111, 16)', 255, True, 'FF');

  Test({LINENUM}1616, 'SetNumberBase(255, 1)', failure, 'Invalid number base 1.');
  Test({LINENUM}1617, 'SetNumberBase(255, 37)', failure, 'Invalid number base 37.');
  Test({LINENUM}1618, 'SetNumberBase(255, 999)', failure, 'Invalid number base 999.');
  Test({LINENUM}1619, 'SetNumberBase(255, 0)', 255, True, '255');
  Test({LINENUM}1620, 'SetNumberBase(255, -1)', failure, 'A non-negative integer was expected as argument 2, but "-1" was given.');
  Test({LINENUM}1621, 'SetNumberBase(255, 2.2)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}1622, 'SetNumberBase(255, "t")', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}1623, 'SetNumberBase(255, 16, 5)', failure, 'Too many arguments.');
  Test({LINENUM}1624, 'SetNumberBase(255)', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}1626, '-0', 0, True, '0');
  Test({LINENUM}1627, '-255', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1628, 'SetNumberBase(-255, 0)', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1629, 'SetNumberBase(-255, 10)', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1630, 'SetNumberBase(-255, 16)', -255, True, MINUS_SIGN + 'FF');
  Test({LINENUM}1631, 'SetNumberBase(-255, 2)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}1632, 'SetNumberBase(-255, 3)', -255, True, MINUS_SIGN + '100110');
  Test({LINENUM}1633, 'SetNumberBase(-30, 30)', -30, True, MINUS_SIGN + '10');
  Test({LINENUM}1634, 'SetNumberBase(-36, 36)', -36, True, MINUS_SIGN + '10');
  Test({LINENUM}1635, 'SetNumberBase(-2#11111111, 2)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}1636, 'SetNumberBase(-2#11111111, 16)', -255, True, MINUS_SIGN + 'FF');

  Test({LINENUM}1638, 'SetNumberBase(123456789123456, 0)', 123456789123456, True, '123456789123456');
  Test({LINENUM}1639, 'SetNumberBase(123456789123456, 10)', 123456789123456, True, '123456789123456');
  Test({LINENUM}1640, 'SetNumberBase(123456789123456, 16)', 123456789123456, True, '7048860F9180');
  Test({LINENUM}1641, 'SetNumberBase(123456789123456, 8)', 123456789123456, True, '3404420603710600');
  Test({LINENUM}1642, 'SetNumberBase(123456789123456, 2)', 123456789123456, True, '11100000100100010000110000011111001000110000000');
  Test({LINENUM}1643, 'SetNumberBase(123456789123456, 3)', 123456789123456, True, '121012010100112220101001120010');
  Test({LINENUM}1644, 'SetNumberBase(123456789123456, 32)', 123456789123456, True, '3G9230V4C0');
  Test({LINENUM}1645, 'SetNumberBase(123456789123456, 36)', 123456789123456, True, '17RF9KOMTC');

  Test({LINENUM}1647, 'SetNumberBase(-123456789123456, 0)', -123456789123456, True, MINUS_SIGN + '123456789123456');
  Test({LINENUM}1648, 'SetNumberBase(-123456789123456, 10)', -123456789123456, True, MINUS_SIGN + '123456789123456');
  Test({LINENUM}1649, 'SetNumberBase(-123456789123456, 16)', -123456789123456, True, MINUS_SIGN + '7048860F9180');
  Test({LINENUM}1650, 'SetNumberBase(-123456789123456, 8)', -123456789123456, True, MINUS_SIGN + '3404420603710600');
  Test({LINENUM}1651, 'SetNumberBase(-123456789123456, 2)', -123456789123456, True, MINUS_SIGN + '11100000100100010000110000011111001000110000000');
  Test({LINENUM}1652, 'SetNumberBase(-123456789123456, 3)', -123456789123456, True, MINUS_SIGN + '121012010100112220101001120010');
  Test({LINENUM}1653, 'SetNumberBase(-123456789123456, 32)', -123456789123456, True, MINUS_SIGN + '3G9230V4C0');
  Test({LINENUM}1654, 'SetNumberBase(-123456789123456, 36)', -123456789123456, True, MINUS_SIGN + '17RF9KOMTC');

  Test({LINENUM}1656, 'SetNumberBase(123456789123456789, 0)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1657, 'SetNumberBase(123456789123456789, 10)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1658, 'SetNumberBase(123456789123456789, 16)', 123456789123456789, True, '1B69B4BACD05F15');
  Test({LINENUM}1659, 'SetNumberBase(123456789123456789, 8)', 123456789123456789, True, '6664664565464057425');
  Test({LINENUM}1660, 'SetNumberBase(123456789123456789, 2)', 123456789123456789, True, '110110110100110110100101110101100110100000101111100010101');
  Test({LINENUM}1661, 'SetNumberBase(123456789123456789, 3)', 123456789123456789, True, '211012121210012202221200111210202100');
  Test({LINENUM}1662, 'SetNumberBase(8482137697523097365, 2)', 8482137697523097365, True, '111010110110110100110110100101110101100110100000101111100010101');

  Test({LINENUM}1664, 'SetNumberBase(-123456789123456789, 0)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1665, 'SetNumberBase(-123456789123456789, 10)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1666, 'SetNumberBase(-123456789123456789, 16)', -123456789123456789, True, MINUS_SIGN + '1B69B4BACD05F15');
  Test({LINENUM}1667, 'SetNumberBase(-123456789123456789, 8)', -123456789123456789, True, MINUS_SIGN + '6664664565464057425');
  Test({LINENUM}1668, 'SetNumberBase(-123456789123456789, 2)', -123456789123456789, True, MINUS_SIGN + '110110110100110110100101110101100110100000101111100010101');
  Test({LINENUM}1669, 'SetNumberBase(-123456789123456789, 3)', -123456789123456789, True, MINUS_SIGN + '211012121210012202221200111210202100');
  Test({LINENUM}1670, 'SetNumberBase(-8482137697523097365, 2)', -8482137697523097365, True, MINUS_SIGN + '111010110110110100110110100101110101100110100000101111100010101');

  Test({LINENUM}1672, 'SetNumberBase(0, 0)', 0, True, '0');
  Test({LINENUM}1673, 'SetNumberBase(0, 2)', 0, True, '0');
  Test({LINENUM}1674, 'SetNumberBase(0, 5)', 0, True, '0');
  Test({LINENUM}1675, 'SetNumberBase(0, 8)', 0, True, '0');
  Test({LINENUM}1676, 'SetNumberBase(0, 10)', 0, True, '0');
  Test({LINENUM}1677, 'SetNumberBase(0, 16)', 0, True, '0');
  Test({LINENUM}1678, 'SetNumberBase(0, 36)', 0, True, '0');

  Test({LINENUM}1680, 'SetNumberBase(1, 0)', 1, True, '1');
  Test({LINENUM}1681, 'SetNumberBase(1, 2)', 1, True, '1');
  Test({LINENUM}1682, 'SetNumberBase(1, 5)', 1, True, '1');
  Test({LINENUM}1683, 'SetNumberBase(1, 8)', 1, True, '1');
  Test({LINENUM}1684, 'SetNumberBase(1, 10)', 1, True, '1');
  Test({LINENUM}1685, 'SetNumberBase(1, 16)', 1, True, '1');
  Test({LINENUM}1686, 'SetNumberBase(1, 36)', 1, True, '1');

  Test({LINENUM}1688, 'SetNumberBase(2, 0)', 2, True, '2');
  Test({LINENUM}1689, 'SetNumberBase(2, 2)', 2, True, '10');
  Test({LINENUM}1690, 'SetNumberBase(2, 5)', 2, True, '2');
  Test({LINENUM}1691, 'SetNumberBase(2, 8)', 2, True, '2');
  Test({LINENUM}1692, 'SetNumberBase(2, 10)', 2, True, '2');
  Test({LINENUM}1693, 'SetNumberBase(2, 16)', 2, True, '2');
  Test({LINENUM}1694, 'SetNumberBase(2, 36)', 2, True, '2');

  Test({LINENUM}1696, 'SetNumberBase(-2, 0)', -2, True, MINUS_SIGN + '2');
  Test({LINENUM}1697, 'SetNumberBase(-2, 2)', -2, True, MINUS_SIGN + '10');
  Test({LINENUM}1698, 'SetNumberBase(-2, 5)', -2, True, MINUS_SIGN + '2');
  Test({LINENUM}1699, 'SetNumberBase(-2, 8)', -2, True, MINUS_SIGN + '2');
  Test({LINENUM}1700, 'SetNumberBase(-2, 10)', -2, True, MINUS_SIGN + '2');
  Test({LINENUM}1701, 'SetNumberBase(-2, 16)', -2, True, MINUS_SIGN + '2');
  Test({LINENUM}1702, 'SetNumberBase(-2, 36)', -2, True, MINUS_SIGN + '2');

  Test({LINENUM}1704, 'SetNumberBase(2, 2)', 2, True, '10');
  Test({LINENUM}1705, 'SetNumberBase(3, 3)', 3, True, '10');
  Test({LINENUM}1706, 'SetNumberBase(4, 4)', 4, True, '10');
  Test({LINENUM}1707, 'SetNumberBase(5, 5)', 5, True, '10');
  Test({LINENUM}1708, 'SetNumberBase(6, 6)', 6, True, '10');
  Test({LINENUM}1709, 'SetNumberBase(7, 7)', 7, True, '10');
  Test({LINENUM}1710, 'SetNumberBase(8, 8)', 8, True, '10');
  Test({LINENUM}1711, 'SetNumberBase(9, 9)', 9, True, '10');
  Test({LINENUM}1712, 'SetNumberBase(10, 10)', 10, True, '10');
  Test({LINENUM}1713, 'SetNumberBase(11, 11)', 11, True, '10');

  Test({LINENUM}1715, 'SetNumberBase(0, 36)', 0, True, '0');
  Test({LINENUM}1716, 'SetNumberBase(1, 36)', 1, True, '1');
  Test({LINENUM}1717, 'SetNumberBase(2, 36)', 2, True, '2');
  Test({LINENUM}1718, 'SetNumberBase(3, 36)', 3, True, '3');
  Test({LINENUM}1719, 'SetNumberBase(4, 36)', 4, True, '4');
  Test({LINENUM}1720, 'SetNumberBase(5, 36)', 5, True, '5');
  Test({LINENUM}1721, 'SetNumberBase(6, 36)', 6, True, '6');
  Test({LINENUM}1722, 'SetNumberBase(7, 36)', 7, True, '7');
  Test({LINENUM}1723, 'SetNumberBase(8, 36)', 8, True, '8');
  Test({LINENUM}1724, 'SetNumberBase(9, 36)', 9, True, '9');
  Test({LINENUM}1725, 'SetNumberBase(10, 36)', 10, True, 'A');
  Test({LINENUM}1726, 'SetNumberBase(11, 36)', 11, True, 'B');
  Test({LINENUM}1727, 'SetNumberBase(12, 36)', 12, True, 'C');
  Test({LINENUM}1728, 'SetNumberBase(13, 36)', 13, True, 'D');
  Test({LINENUM}1729, 'SetNumberBase(14, 36)', 14, True, 'E');
  Test({LINENUM}1730, 'SetNumberBase(15, 36)', 15, True, 'F');
  Test({LINENUM}1731, 'SetNumberBase(16, 36)', 16, True, 'G');
  Test({LINENUM}1732, 'SetNumberBase(17, 36)', 17, True, 'H');
  Test({LINENUM}1733, 'SetNumberBase(18, 36)', 18, True, 'I');
  Test({LINENUM}1734, 'SetNumberBase(19, 36)', 19, True, 'J');
  Test({LINENUM}1735, 'SetNumberBase(20, 36)', 20, True, 'K');
  Test({LINENUM}1736, 'SetNumberBase(21, 36)', 21, True, 'L');
  Test({LINENUM}1737, 'SetNumberBase(22, 36)', 22, True, 'M');
  Test({LINENUM}1738, 'SetNumberBase(23, 36)', 23, True, 'N');
  Test({LINENUM}1739, 'SetNumberBase(24, 36)', 24, True, 'O');
  Test({LINENUM}1740, 'SetNumberBase(25, 36)', 25, True, 'P');
  Test({LINENUM}1741, 'SetNumberBase(26, 36)', 26, True, 'Q');
  Test({LINENUM}1742, 'SetNumberBase(27, 36)', 27, True, 'R');
  Test({LINENUM}1743, 'SetNumberBase(28, 36)', 28, True, 'S');
  Test({LINENUM}1744, 'SetNumberBase(29, 36)', 29, True, 'T');
  Test({LINENUM}1745, 'SetNumberBase(30, 36)', 30, True, 'U');
  Test({LINENUM}1746, 'SetNumberBase(31, 36)', 31, True, 'V');
  Test({LINENUM}1747, 'SetNumberBase(32, 36)', 32, True, 'W');
  Test({LINENUM}1748, 'SetNumberBase(33, 36)', 33, True, 'X');
  Test({LINENUM}1749, 'SetNumberBase(34, 36)', 34, True, 'Y');
  Test({LINENUM}1750, 'SetNumberBase(35, 36)', 35, True, 'Z');
  Test({LINENUM}1751, 'SetNumberBase(36, 36)', 36, True, '10');
  Test({LINENUM}1752, 'SetNumberBase(37, 36)', 37, True, '11');

  Test({LINENUM}1754, 'SetNumberBase(856324759261834725, 2)', 856324759261834725, True, '101111100010010001101101010011100000001011000110110111100101');
  Test({LINENUM}1755, 'SetNumberBase(856324759261834725, 3)', 856324759261834725, True, '12201001010002100111010102020021220020');
  Test({LINENUM}1756, 'SetNumberBase(856324759261834725, 4)', 856324759261834725, True, '233202101231103200023012313211');
  Test({LINENUM}1757, 'SetNumberBase(856324759261834725, 5)', 856324759261834725, True, '24140410144323432012202400');
  Test({LINENUM}1758, 'SetNumberBase(856324759261834725, 6)', 856324759261834725, True, '103011414431331422425353');
  Test({LINENUM}1759, 'SetNumberBase(856324759261834725, 7)', 856324759261834725, True, '1350602331133464501312');
  Test({LINENUM}1760, 'SetNumberBase(856324759261834725, 8)', 856324759261834725, True, '57422155234013066745');
  Test({LINENUM}1761, 'SetNumberBase(856324759261834725, 16)', 856324759261834725, True, 'BE246D4E02C6DE5');
  Test({LINENUM}1762, 'SetNumberBase(856324759261834725, 32)', 856324759261834725, True, 'NOI6QJG2ORF5');
  Test({LINENUM}1763, 'SetNumberBase(856324759261834725, 36)', 856324759261834725, True, '6I7PSJLAEQXX');

  Test({LINENUM}1765, 'SetNumberBase(-856324759261834725, 2)', -856324759261834725, True, MINUS_SIGN + '101111100010010001101101010011100000001011000110110111100101');
  Test({LINENUM}1766, 'SetNumberBase(-856324759261834725, 3)', -856324759261834725, True, MINUS_SIGN + '12201001010002100111010102020021220020');
  Test({LINENUM}1767, 'SetNumberBase(-856324759261834725, 4)', -856324759261834725, True, MINUS_SIGN + '233202101231103200023012313211');
  Test({LINENUM}1768, 'SetNumberBase(-856324759261834725, 5)', -856324759261834725, True, MINUS_SIGN + '24140410144323432012202400');
  Test({LINENUM}1769, 'SetNumberBase(-856324759261834725, 6)', -856324759261834725, True, MINUS_SIGN + '103011414431331422425353');
  Test({LINENUM}1770, 'SetNumberBase(-856324759261834725, 7)', -856324759261834725, True, MINUS_SIGN + '1350602331133464501312');
  Test({LINENUM}1771, 'SetNumberBase(-856324759261834725, 8)', -856324759261834725, True, MINUS_SIGN + '57422155234013066745');
  Test({LINENUM}1772, 'SetNumberBase(-856324759261834725, 16)', -856324759261834725, True, MINUS_SIGN + 'BE246D4E02C6DE5');
  Test({LINENUM}1773, 'SetNumberBase(-856324759261834725, 32)', -856324759261834725, True, MINUS_SIGN + 'NOI6QJG2ORF5');
  Test({LINENUM}1774, 'SetNumberBase(-856324759261834725, 36)', -856324759261834725, True, MINUS_SIGN + '6I7PSJLAEQXX');

  Test({LINENUM}1776, 'SetNumberBase(9223372036854775807, 0)', 9223372036854775807, True, '9223372036854775807');
  Test({LINENUM}1777, 'SetNumberBase(9223372036854775807, 10)', 9223372036854775807, True, '9223372036854775807');
  Test({LINENUM}1778, 'SetNumberBase(9223372036854775807, 2)', 9223372036854775807, True, '111111111111111111111111111111111111111111111111111111111111111');
  Test({LINENUM}1779, 'SetNumberBase(9223372036854775807, 8)', 9223372036854775807, True, '777777777777777777777');
  Test({LINENUM}1780, 'SetNumberBase(9223372036854775807, 16)', 9223372036854775807, True, '7FFFFFFFFFFFFFFF');
  Test({LINENUM}1781, 'SetNumberBase(9223372036854775807, 36)', 9223372036854775807, True, '1Y2P0IJ32E8E7');

  // Format: Minimum length

  Test({LINENUM}1785, 'SetMinLength(123, 0)', 123, True, '123');
  Test({LINENUM}1786, 'SetMinLength(123, 1)', 123, True, '123');
  Test({LINENUM}1787, 'SetMinLength(123, 2)', 123, True, '123');
  Test({LINENUM}1788, 'SetMinLength(123, 3)', 123, True, '123');
  Test({LINENUM}1789, 'SetMinLength(123, 4)', 123, True, '0123');
  Test({LINENUM}1790, 'SetMinLength(123, 5)', 123, True, '00123');
  Test({LINENUM}1791, 'SetMinLength(123, 6)', 123, True, '000123');
  Test({LINENUM}1792, 'SetMinLength(123, 7)', 123, True, '0000123');
  Test({LINENUM}1793, 'SetMinLength(123, 8)', 123, True, '00000123');
  Test({LINENUM}1794, 'SetMinLength(123, 9)', 123, True, '000000123');
  Test({LINENUM}1795, 'SetMinLength(123, 10)', 123, True, '0000000123');
  Test({LINENUM}1796, 'SetMinLength(123, 11)', 123, True, '00000000123');
  Test({LINENUM}1797, 'SetMinLength(123, 12)', 123, True, '000000000123');
  Test({LINENUM}1798, 'SetMinLength(123, 13)', 123, True, '0000000000123');
  Test({LINENUM}1799, 'SetMinLength(123, 14)', 123, True, '00000000000123');
  Test({LINENUM}1800, 'SetMinLength(123, 15)', 123, True, '000000000000123');
  Test({LINENUM}1801, 'SetMinLength(123, 16)', 123, True, '0000000000000123');
  Test({LINENUM}1802, 'SetMinLength(123, 17)', 123, True, '00000000000000123');
  Test({LINENUM}1803, 'SetMinLength(123, 18)', 123, True, '000000000000000123');
  Test({LINENUM}1804, 'SetMinLength(123, 19)', 123, True, '0000000000000000123');
  Test({LINENUM}1805, 'SetMinLength(123, 20)', 123, True, '00000000000000000123');

  Test({LINENUM}1807, 'SetMinLength(-123, 0)', -123, True, MINUS_SIGN + '123');
  Test({LINENUM}1808, 'SetMinLength(-123, 1)', -123, True, MINUS_SIGN + '123');
  Test({LINENUM}1809, 'SetMinLength(-123, 2)', -123, True, MINUS_SIGN + '123');
  Test({LINENUM}1810, 'SetMinLength(-123, 3)', -123, True, MINUS_SIGN + '123');
  Test({LINENUM}1811, 'SetMinLength(-123, 4)', -123, True, MINUS_SIGN + '0123');
  Test({LINENUM}1812, 'SetMinLength(-123, 5)', -123, True, MINUS_SIGN + '00123');
  Test({LINENUM}1813, 'SetMinLength(-123, 6)', -123, True, MINUS_SIGN + '000123');
  Test({LINENUM}1814, 'SetMinLength(-123, 7)', -123, True, MINUS_SIGN + '0000123');
  Test({LINENUM}1815, 'SetMinLength(-123, 8)', -123, True, MINUS_SIGN + '00000123');
  Test({LINENUM}1816, 'SetMinLength(-123, 9)', -123, True, MINUS_SIGN + '000000123');
  Test({LINENUM}1817, 'SetMinLength(-123, 10)', -123, True, MINUS_SIGN + '0000000123');
  Test({LINENUM}1818, 'SetMinLength(-123, 11)', -123, True, MINUS_SIGN + '00000000123');
  Test({LINENUM}1819, 'SetMinLength(-123, 12)', -123, True, MINUS_SIGN + '000000000123');
  Test({LINENUM}1820, 'SetMinLength(-123, 13)', -123, True, MINUS_SIGN + '0000000000123');
  Test({LINENUM}1821, 'SetMinLength(-123, 14)', -123, True, MINUS_SIGN + '00000000000123');
  Test({LINENUM}1822, 'SetMinLength(-123, 15)', -123, True, MINUS_SIGN + '000000000000123');
  Test({LINENUM}1823, 'SetMinLength(-123, 16)', -123, True, MINUS_SIGN + '0000000000000123');
  Test({LINENUM}1824, 'SetMinLength(-123, 17)', -123, True, MINUS_SIGN + '00000000000000123');
  Test({LINENUM}1825, 'SetMinLength(-123, 18)', -123, True, MINUS_SIGN + '000000000000000123');
  Test({LINENUM}1826, 'SetMinLength(-123, 19)', -123, True, MINUS_SIGN + '0000000000000000123');
  Test({LINENUM}1827, 'SetMinLength(-123, 20)', -123, True, MINUS_SIGN + '00000000000000000123');

  Test({LINENUM}1829, 'SetMinLength(123, 100)', 123, True, '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123');
  Test({LINENUM}1830, 'SetMinLength(-123, 100)', -123, True, MINUS_SIGN + '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123');

  Test({LINENUM}1832, 'SetMinLength(0, 0)', 0, True, '0');
  Test({LINENUM}1833, 'SetMinLength(0, 1)', 0, True, '0');
  Test({LINENUM}1834, 'SetMinLength(0, 2)', 0, True, '00');
  Test({LINENUM}1835, 'SetMinLength(0, 3)', 0, True, '000');
  Test({LINENUM}1836, 'SetMinLength(0, 4)', 0, True, '0000');
  Test({LINENUM}1837, 'SetMinLength(0, 5)', 0, True, '00000');
  Test({LINENUM}1838, 'SetMinLength(0, 6)', 0, True, '000000');
  Test({LINENUM}1839, 'SetMinLength(0, 20)', 0, True, '00000000000000000000');
  Test({LINENUM}1840, 'SetMinLength(0, 100)', 0, True, '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');

  Test({LINENUM}1842, 'SetMinLength(-0, 0)', 0, True, '0');
  Test({LINENUM}1843, 'SetMinLength(-0, 1)', 0, True, '0');
  Test({LINENUM}1844, 'SetMinLength(-0, 2)', 0, True, '00');
  Test({LINENUM}1845, 'SetMinLength(-0, 3)', 0, True, '000');
  Test({LINENUM}1846, 'SetMinLength(-0, 4)', 0, True, '0000');
  Test({LINENUM}1847, 'SetMinLength(-0, 5)', 0, True, '00000');
  Test({LINENUM}1848, 'SetMinLength(-0, 6)', 0, True, '000000');
  Test({LINENUM}1849, 'SetMinLength(-0, 20)', 0, True, '00000000000000000000');
  Test({LINENUM}1850, 'SetMinLength(-0, 100)', 0, True, '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');

  Test({LINENUM}1852, 'SetMinLength(123456789123456789, 0)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1853, 'SetMinLength(123456789123456789, 1)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1854, 'SetMinLength(123456789123456789, 2)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1855, 'SetMinLength(123456789123456789, 3)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1856, 'SetMinLength(123456789123456789, 4)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1857, 'SetMinLength(123456789123456789, 5)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1858, 'SetMinLength(123456789123456789, 6)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1859, 'SetMinLength(123456789123456789, 7)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1860, 'SetMinLength(123456789123456789, 8)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1861, 'SetMinLength(123456789123456789, 9)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1862, 'SetMinLength(123456789123456789, 10)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1863, 'SetMinLength(123456789123456789, 11)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1864, 'SetMinLength(123456789123456789, 12)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1865, 'SetMinLength(123456789123456789, 13)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1866, 'SetMinLength(123456789123456789, 14)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1867, 'SetMinLength(123456789123456789, 15)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1868, 'SetMinLength(123456789123456789, 16)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1869, 'SetMinLength(123456789123456789, 17)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1870, 'SetMinLength(123456789123456789, 18)', 123456789123456789, True, '123456789123456789');
  Test({LINENUM}1871, 'SetMinLength(123456789123456789, 19)', 123456789123456789, True, '0123456789123456789');
  Test({LINENUM}1872, 'SetMinLength(123456789123456789, 20)', 123456789123456789, True, '00123456789123456789');
  Test({LINENUM}1873, 'SetMinLength(123456789123456789, 21)', 123456789123456789, True, '000123456789123456789');
  Test({LINENUM}1874, 'SetMinLength(123456789123456789, 22)', 123456789123456789, True, '0000123456789123456789');
  Test({LINENUM}1875, 'SetMinLength(123456789123456789, 100)', 123456789123456789, True, '0000000000000000000000000000000000000000000000000000000000000000000000000000000000123456789123456789');

  Test({LINENUM}1877, 'SetMinLength(-123456789123456789, 0)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1878, 'SetMinLength(-123456789123456789, 1)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1879, 'SetMinLength(-123456789123456789, 2)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1880, 'SetMinLength(-123456789123456789, 3)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1881, 'SetMinLength(-123456789123456789, 4)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1882, 'SetMinLength(-123456789123456789, 5)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1883, 'SetMinLength(-123456789123456789, 6)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1884, 'SetMinLength(-123456789123456789, 7)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1885, 'SetMinLength(-123456789123456789, 8)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1886, 'SetMinLength(-123456789123456789, 9)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1887, 'SetMinLength(-123456789123456789, 10)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1888, 'SetMinLength(-123456789123456789, 11)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1889, 'SetMinLength(-123456789123456789, 12)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1890, 'SetMinLength(-123456789123456789, 13)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1891, 'SetMinLength(-123456789123456789, 14)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1892, 'SetMinLength(-123456789123456789, 15)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1893, 'SetMinLength(-123456789123456789, 16)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1894, 'SetMinLength(-123456789123456789, 17)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1895, 'SetMinLength(-123456789123456789, 18)', -123456789123456789, True, MINUS_SIGN + '123456789123456789');
  Test({LINENUM}1896, 'SetMinLength(-123456789123456789, 19)', -123456789123456789, True, MINUS_SIGN + '0123456789123456789');
  Test({LINENUM}1897, 'SetMinLength(-123456789123456789, 20)', -123456789123456789, True, MINUS_SIGN + '00123456789123456789');
  Test({LINENUM}1898, 'SetMinLength(-123456789123456789, 21)', -123456789123456789, True, MINUS_SIGN + '000123456789123456789');
  Test({LINENUM}1899, 'SetMinLength(-123456789123456789, 22)', -123456789123456789, True, MINUS_SIGN + '0000123456789123456789');
  Test({LINENUM}1900, 'SetMinLength(-123456789123456789, 100)', -123456789123456789, True, MINUS_SIGN + '0000000000000000000000000000000000000000000000000000000000000000000000000000000000123456789123456789');

  Test({LINENUM}1902, 'SetMinLength(123, 255)', 123, True, StringOfChar('0', 252) + '123');
  Test({LINENUM}1903, 'SetMinLength(123, 256)', failure, 'Invalid minimum length 256.');
  Test({LINENUM}1904, 'SetMinLength(123, -1)', failure, 'A non-negative integer was expected as argument 2, but "-1" was given.');
  Test({LINENUM}1905, 'SetMinLength(123, 7.6)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}1906, 'SetMinLength(123, "h")', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}1907, 'SetMinLength(123, 10, 20)', failure, 'Too many arguments.');
  Test({LINENUM}1908, 'SetMinLength(123)', failure, 'Too few arguments. A required argument of type integer is missing.');

  // Format: number base + minimum length

  Test({LINENUM}1912, 'SetMinLength(SetNumberBase(255, 10), 0)', 255, True, '255');
  Test({LINENUM}1913, 'SetMinLength(SetNumberBase(255, 10), 1)', 255, True, '255');
  Test({LINENUM}1914, 'SetMinLength(SetNumberBase(255, 10), 2)', 255, True, '255');
  Test({LINENUM}1915, 'SetMinLength(SetNumberBase(255, 10), 3)', 255, True, '255');
  Test({LINENUM}1916, 'SetMinLength(SetNumberBase(255, 10), 4)', 255, True, '0255');
  Test({LINENUM}1917, 'SetMinLength(SetNumberBase(255, 10), 8)', 255, True, '00000255');
  Test({LINENUM}1918, 'SetMinLength(SetNumberBase(255, 10), 16)', 255, True, '0000000000000255');
  Test({LINENUM}1919, 'SetMinLength(SetNumberBase(255, 10), 100)', 255, True, '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000255');

  Test({LINENUM}1921, 'SetMinLength(SetNumberBase(-255, 10), 0)', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1922, 'SetMinLength(SetNumberBase(-255, 10), 1)', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1923, 'SetMinLength(SetNumberBase(-255, 10), 2)', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1924, 'SetMinLength(SetNumberBase(-255, 10), 3)', -255, True, MINUS_SIGN + '255');
  Test({LINENUM}1925, 'SetMinLength(SetNumberBase(-255, 10), 4)', -255, True, MINUS_SIGN + '0255');
  Test({LINENUM}1926, 'SetMinLength(SetNumberBase(-255, 10), 8)', -255, True, MINUS_SIGN + '00000255');
  Test({LINENUM}1927, 'SetMinLength(SetNumberBase(-255, 10), 16)', -255, True, MINUS_SIGN + '0000000000000255');
  Test({LINENUM}1928, 'SetMinLength(SetNumberBase(-255, 10), 100)', -255, True, MINUS_SIGN + '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000255');

  Test({LINENUM}1930, 'SetMinLength(SetNumberBase(0, 10), 0)', 0, True, '0');
  Test({LINENUM}1931, 'SetMinLength(SetNumberBase(0, 10), 1)', 0, True, '0');
  Test({LINENUM}1932, 'SetMinLength(SetNumberBase(0, 10), 2)', 0, True, '00');
  Test({LINENUM}1933, 'SetMinLength(SetNumberBase(0, 10), 8)', 0, True, '00000000');
  Test({LINENUM}1934, 'SetMinLength(SetNumberBase(0, 10), 100)', 0, True, '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');

  Test({LINENUM}1936, 'SetMinLength(SetNumberBase(255, 16), 0)', 255, True, 'FF');
  Test({LINENUM}1937, 'SetMinLength(SetNumberBase(255, 16), 1)', 255, True, 'FF');
  Test({LINENUM}1938, 'SetMinLength(SetNumberBase(255, 16), 2)', 255, True, 'FF');
  Test({LINENUM}1939, 'SetMinLength(SetNumberBase(255, 16), 3)', 255, True, '0FF');
  Test({LINENUM}1940, 'SetMinLength(SetNumberBase(255, 16), 4)', 255, True, '00FF');
  Test({LINENUM}1941, 'SetMinLength(SetNumberBase(255, 16), 8)', 255, True, '000000FF');
  Test({LINENUM}1942, 'SetMinLength(SetNumberBase(255, 16), 16)', 255, True, '00000000000000FF');
  Test({LINENUM}1943, 'SetMinLength(SetNumberBase(255, 16), 100)', 255, True, '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FF');

  Test({LINENUM}1945, 'SetMinLength(SetNumberBase(-255, 16), 0)', -255, True, MINUS_SIGN + 'FF');
  Test({LINENUM}1946, 'SetMinLength(SetNumberBase(-255, 16), 1)', -255, True, MINUS_SIGN + 'FF');
  Test({LINENUM}1947, 'SetMinLength(SetNumberBase(-255, 16), 2)', -255, True, MINUS_SIGN + 'FF');
  Test({LINENUM}1948, 'SetMinLength(SetNumberBase(-255, 16), 3)', -255, True, MINUS_SIGN + '0FF');
  Test({LINENUM}1949, 'SetMinLength(SetNumberBase(-255, 16), 4)', -255, True, MINUS_SIGN + '00FF');
  Test({LINENUM}1950, 'SetMinLength(SetNumberBase(-255, 16), 8)', -255, True, MINUS_SIGN + '000000FF');
  Test({LINENUM}1951, 'SetMinLength(SetNumberBase(-255, 16), 16)', -255, True, MINUS_SIGN + '00000000000000FF');
  Test({LINENUM}1952, 'SetMinLength(SetNumberBase(-255, 16), 100)', -255, True, MINUS_SIGN + '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FF');

  Test({LINENUM}1954, 'SetMinLength(SetNumberBase(0, 16), 0)', 0, True, '0');
  Test({LINENUM}1955, 'SetMinLength(SetNumberBase(0, 16), 1)', 0, True, '0');
  Test({LINENUM}1956, 'SetMinLength(SetNumberBase(0, 16), 2)', 0, True, '00');
  Test({LINENUM}1957, 'SetMinLength(SetNumberBase(0, 16), 8)', 0, True, '00000000');
  Test({LINENUM}1958, 'SetMinLength(SetNumberBase(0, 16), 100)', 0, True, '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');

  Test({LINENUM}1960, 'SetMinLength(SetNumberBase(123456789123456789, 16), 0)', 123456789123456789, True, '1B69B4BACD05F15');
  Test({LINENUM}1961, 'SetMinLength(SetNumberBase(123456789123456789, 16), 1)', 123456789123456789, True, '1B69B4BACD05F15');
  Test({LINENUM}1962, 'SetMinLength(SetNumberBase(123456789123456789, 16), 8)', 123456789123456789, True, '1B69B4BACD05F15');
  Test({LINENUM}1963, 'SetMinLength(SetNumberBase(123456789123456789, 16), 15)', 123456789123456789, True, '1B69B4BACD05F15');
  Test({LINENUM}1964, 'SetMinLength(SetNumberBase(123456789123456789, 16), 16)', 123456789123456789, True, '01B69B4BACD05F15');
  Test({LINENUM}1965, 'SetMinLength(SetNumberBase(123456789123456789, 16), 32)', 123456789123456789, True, '000000000000000001B69B4BACD05F15');

  Test({LINENUM}1967, 'SetMinLength(SetNumberBase(-123456789123456789, 16), 0)', -123456789123456789, True, MINUS_SIGN + '1B69B4BACD05F15');
  Test({LINENUM}1968, 'SetMinLength(SetNumberBase(-123456789123456789, 16), 1)', -123456789123456789, True, MINUS_SIGN + '1B69B4BACD05F15');
  Test({LINENUM}1969, 'SetMinLength(SetNumberBase(-123456789123456789, 16), 8)', -123456789123456789, True, MINUS_SIGN + '1B69B4BACD05F15');
  Test({LINENUM}1970, 'SetMinLength(SetNumberBase(-123456789123456789, 16), 15)', -123456789123456789, True, MINUS_SIGN + '1B69B4BACD05F15');
  Test({LINENUM}1971, 'SetMinLength(SetNumberBase(-123456789123456789, 16), 16)', -123456789123456789, True, MINUS_SIGN + '01B69B4BACD05F15');
  Test({LINENUM}1972, 'SetMinLength(SetNumberBase(-123456789123456789, 16), 32)', -123456789123456789, True, MINUS_SIGN + '000000000000000001B69B4BACD05F15');

  Test({LINENUM}1974, 'SetMinLength(SetNumberBase(255, 2), 0)', 255, True, '11111111');
  Test({LINENUM}1975, 'SetMinLength(SetNumberBase(255, 2), 1)', 255, True, '11111111');
  Test({LINENUM}1976, 'SetMinLength(SetNumberBase(255, 2), 2)', 255, True, '11111111');
  Test({LINENUM}1977, 'SetMinLength(SetNumberBase(255, 2), 3)', 255, True, '11111111');
  Test({LINENUM}1978, 'SetMinLength(SetNumberBase(255, 2), 4)', 255, True, '11111111');
  Test({LINENUM}1979, 'SetMinLength(SetNumberBase(255, 2), 5)', 255, True, '11111111');
  Test({LINENUM}1980, 'SetMinLength(SetNumberBase(255, 2), 6)', 255, True, '11111111');
  Test({LINENUM}1981, 'SetMinLength(SetNumberBase(255, 2), 7)', 255, True, '11111111');
  Test({LINENUM}1982, 'SetMinLength(SetNumberBase(255, 2), 8)', 255, True, '11111111');
  Test({LINENUM}1983, 'SetMinLength(SetNumberBase(255, 2), 9)', 255, True, '011111111');
  Test({LINENUM}1984, 'SetMinLength(SetNumberBase(255, 2), 10)', 255, True, '0011111111');
  Test({LINENUM}1985, 'SetMinLength(SetNumberBase(255, 2), 11)', 255, True, '00011111111');
  Test({LINENUM}1986, 'SetMinLength(SetNumberBase(255, 2), 12)', 255, True, '000011111111');
  Test({LINENUM}1987, 'SetMinLength(SetNumberBase(255, 2), 13)', 255, True, '0000011111111');
  Test({LINENUM}1988, 'SetMinLength(SetNumberBase(255, 2), 14)', 255, True, '00000011111111');
  Test({LINENUM}1989, 'SetMinLength(SetNumberBase(255, 2), 15)', 255, True, '000000011111111');
  Test({LINENUM}1990, 'SetMinLength(SetNumberBase(255, 2), 16)', 255, True, '0000000011111111');
  Test({LINENUM}1991, 'SetMinLength(SetNumberBase(255, 2), 32)', 255, True, '00000000000000000000000011111111');

  Test({LINENUM}1993, 'SetMinLength(SetNumberBase(-255, 2), 0)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}1994, 'SetMinLength(SetNumberBase(-255, 2), 1)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}1995, 'SetMinLength(SetNumberBase(-255, 2), 2)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}1996, 'SetMinLength(SetNumberBase(-255, 2), 3)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}1997, 'SetMinLength(SetNumberBase(-255, 2), 4)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}1998, 'SetMinLength(SetNumberBase(-255, 2), 5)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}1999, 'SetMinLength(SetNumberBase(-255, 2), 6)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}2000, 'SetMinLength(SetNumberBase(-255, 2), 7)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}2001, 'SetMinLength(SetNumberBase(-255, 2), 8)', -255, True, MINUS_SIGN + '11111111');
  Test({LINENUM}2002, 'SetMinLength(SetNumberBase(-255, 2), 9)', -255, True, MINUS_SIGN + '011111111');
  Test({LINENUM}2003, 'SetMinLength(SetNumberBase(-255, 2), 10)', -255, True, MINUS_SIGN + '0011111111');
  Test({LINENUM}2004, 'SetMinLength(SetNumberBase(-255, 2), 11)', -255, True, MINUS_SIGN + '00011111111');
  Test({LINENUM}2005, 'SetMinLength(SetNumberBase(-255, 2), 12)', -255, True, MINUS_SIGN + '000011111111');
  Test({LINENUM}2006, 'SetMinLength(SetNumberBase(-255, 2), 13)', -255, True, MINUS_SIGN + '0000011111111');
  Test({LINENUM}2007, 'SetMinLength(SetNumberBase(-255, 2), 14)', -255, True, MINUS_SIGN + '00000011111111');
  Test({LINENUM}2008, 'SetMinLength(SetNumberBase(-255, 2), 15)', -255, True, MINUS_SIGN + '000000011111111');
  Test({LINENUM}2009, 'SetMinLength(SetNumberBase(-255, 2), 16)', -255, True, MINUS_SIGN + '0000000011111111');
  Test({LINENUM}2010, 'SetMinLength(SetNumberBase(-255, 2), 32)', -255, True, MINUS_SIGN + '00000000000000000000000011111111');

  Test({LINENUM}2012, 'SetMinLength(SetNumberBase(0, 2), 0)', 0, True, '0');
  Test({LINENUM}2013, 'SetMinLength(SetNumberBase(0, 2), 1)', 0, True, '0');
  Test({LINENUM}2014, 'SetMinLength(SetNumberBase(0, 2), 2)', 0, True, '00');
  Test({LINENUM}2015, 'SetMinLength(SetNumberBase(0, 2), 8)', 0, True, '00000000');
  Test({LINENUM}2016, 'SetMinLength(SetNumberBase(0, 2), 100)', 0, True, '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');

  Test({LINENUM}2018, 'SetMinLength(SetNumberBase(123456789123456789, 2), 0)', 123456789123456789, True, '110110110100110110100101110101100110100000101111100010101');
  Test({LINENUM}2019, 'SetMinLength(SetNumberBase(123456789123456789, 2), 1)', 123456789123456789, True, '110110110100110110100101110101100110100000101111100010101');
  Test({LINENUM}2020, 'SetMinLength(SetNumberBase(123456789123456789, 2), 32)', 123456789123456789, True, '110110110100110110100101110101100110100000101111100010101');
  Test({LINENUM}2021, 'SetMinLength(SetNumberBase(123456789123456789, 2), 57)', 123456789123456789, True, '110110110100110110100101110101100110100000101111100010101');
  Test({LINENUM}2022, 'SetMinLength(SetNumberBase(123456789123456789, 2), 64)', 123456789123456789, True, '0000000110110110100110110100101110101100110100000101111100010101');

  Test({LINENUM}2024, 'SetMinLength(SetNumberBase(-123456789123456789, 2), 0)', -123456789123456789, True, MINUS_SIGN + '110110110100110110100101110101100110100000101111100010101');
  Test({LINENUM}2025, 'SetMinLength(SetNumberBase(-123456789123456789, 2), 1)', -123456789123456789, True, MINUS_SIGN + '110110110100110110100101110101100110100000101111100010101');
  Test({LINENUM}2026, 'SetMinLength(SetNumberBase(-123456789123456789, 2), 32)', -123456789123456789, True, MINUS_SIGN + '110110110100110110100101110101100110100000101111100010101');
  Test({LINENUM}2027, 'SetMinLength(SetNumberBase(-123456789123456789, 2), 57)', -123456789123456789, True, MINUS_SIGN + '110110110100110110100101110101100110100000101111100010101');
  Test({LINENUM}2028, 'SetMinLength(SetNumberBase(-123456789123456789, 2), 64)', -123456789123456789, True, MINUS_SIGN + '0000000110110110100110110100101110101100110100000101111100010101');

  Test({LINENUM}2030, 'SetMinLength(SetNumberBase(9223372036854775807, 36), 16)', 9223372036854775807, True, '0001Y2P0IJ32E8E7');

  Test({LINENUM}2032, 'SetNumberBase(SetMinLength(-255, 8), 16)', -255, True, MINUS_SIGN + '000000FF');
  Test({LINENUM}2033, 'SetNumberBase(SetMinLength(123456789123456789, 64), 2)', 123456789123456789, True, '0000000110110110100110110100101110101100110100000101111100010101');

  // Format: digit grouping

  Test({LINENUM}2037, 'SetDigitGrouping(123456789, 3)', 123456789, True, fs('123 456 789'));

  Test({LINENUM}2039, 'SetDigitGrouping(123456789, 0)', 123456789, True, fs('123456789'));
  Test({LINENUM}2040, 'SetDigitGrouping(123456789, 1)', 123456789, True, fs('1 2 3 4 5 6 7 8 9'));
  Test({LINENUM}2041, 'SetDigitGrouping(123456789, 2)', 123456789, True, fs('1 23 45 67 89'));
  Test({LINENUM}2042, 'SetDigitGrouping(123456789, 3)', 123456789, True, fs('123 456 789'));
  Test({LINENUM}2043, 'SetDigitGrouping(123456789, 4)', 123456789, True, fs('1 2345 6789'));
  Test({LINENUM}2044, 'SetDigitGrouping(123456789, 5)', 123456789, True, fs('1234 56789'));
  Test({LINENUM}2045, 'SetDigitGrouping(123456789, 6)', 123456789, True, fs('123 456789'));
  Test({LINENUM}2046, 'SetDigitGrouping(123456789, 7)', 123456789, True, fs('12 3456789'));
  Test({LINENUM}2047, 'SetDigitGrouping(123456789, 8)', 123456789, True, fs('1 23456789'));
  Test({LINENUM}2048, 'SetDigitGrouping(123456789, 9)', 123456789, True, fs('123456789'));
  Test({LINENUM}2049, 'SetDigitGrouping(123456789, 10)', 123456789, True, fs('123456789'));
  Test({LINENUM}2050, 'SetDigitGrouping(123456789, 11)', 123456789, True, fs('123456789'));
  Test({LINENUM}2051, 'SetDigitGrouping(123456789, 12)', 123456789, True, fs('123456789'));
  Test({LINENUM}2052, 'SetDigitGrouping(123456789, 13)', 123456789, True, fs('123456789'));
  Test({LINENUM}2053, 'SetDigitGrouping(123456789, 14)', 123456789, True, fs('123456789'));
  Test({LINENUM}2054, 'SetDigitGrouping(123456789, 15)', 123456789, True, fs('123456789'));
  Test({LINENUM}2055, 'SetDigitGrouping(123456789, 16)', 123456789, True, fs('123456789'));

  Test({LINENUM}2057, 'SetDigitGrouping(-123456789, 0)', -123456789, True, MINUS_SIGN + fs('123456789'));
  Test({LINENUM}2058, 'SetDigitGrouping(-123456789, 1)', -123456789, True, MINUS_SIGN + fs('1 2 3 4 5 6 7 8 9'));
  Test({LINENUM}2059, 'SetDigitGrouping(-123456789, 2)', -123456789, True, MINUS_SIGN + fs('1 23 45 67 89'));
  Test({LINENUM}2060, 'SetDigitGrouping(-123456789, 3)', -123456789, True, MINUS_SIGN + fs('123 456 789'));
  Test({LINENUM}2061, 'SetDigitGrouping(-123456789, 4)', -123456789, True, MINUS_SIGN + fs('1 2345 6789'));
  Test({LINENUM}2062, 'SetDigitGrouping(-123456789, 5)', -123456789, True, MINUS_SIGN + fs('1234 56789'));
  Test({LINENUM}2063, 'SetDigitGrouping(-123456789, 6)', -123456789, True, MINUS_SIGN + fs('123 456789'));
  Test({LINENUM}2064, 'SetDigitGrouping(-123456789, 7)', -123456789, True, MINUS_SIGN + fs('12 3456789'));
  Test({LINENUM}2065, 'SetDigitGrouping(-123456789, 8)', -123456789, True, MINUS_SIGN + fs('1 23456789'));
  Test({LINENUM}2066, 'SetDigitGrouping(-123456789, 9)', -123456789, True, MINUS_SIGN + fs('123456789'));
  Test({LINENUM}2067, 'SetDigitGrouping(-123456789, 10)', -123456789, True, MINUS_SIGN + fs('123456789'));
  Test({LINENUM}2068, 'SetDigitGrouping(-123456789, 11)', -123456789, True, MINUS_SIGN + fs('123456789'));
  Test({LINENUM}2069, 'SetDigitGrouping(-123456789, 12)', -123456789, True, MINUS_SIGN + fs('123456789'));
  Test({LINENUM}2070, 'SetDigitGrouping(-123456789, 13)', -123456789, True, MINUS_SIGN + fs('123456789'));
  Test({LINENUM}2071, 'SetDigitGrouping(-123456789, 14)', -123456789, True, MINUS_SIGN + fs('123456789'));
  Test({LINENUM}2072, 'SetDigitGrouping(-123456789, 15)', -123456789, True, MINUS_SIGN + fs('123456789'));
  Test({LINENUM}2073, 'SetDigitGrouping(-123456789, 16)', -123456789, True, MINUS_SIGN + fs('123456789'));

  Test({LINENUM}2075, 'SetDigitGrouping(0, 0)', 0, True, fs('0'));
  Test({LINENUM}2076, 'SetDigitGrouping(0, 1)', 0, True, fs('0'));
  Test({LINENUM}2077, 'SetDigitGrouping(0, 2)', 0, True, fs('0'));
  Test({LINENUM}2078, 'SetDigitGrouping(0, 3)', 0, True, fs('0'));
  Test({LINENUM}2079, 'SetDigitGrouping(0, 4)', 0, True, fs('0'));
  Test({LINENUM}2080, 'SetDigitGrouping(0, 5)', 0, True, fs('0'));
  Test({LINENUM}2081, 'SetDigitGrouping(0, 6)', 0, True, fs('0'));
  Test({LINENUM}2082, 'SetDigitGrouping(0, 7)', 0, True, fs('0'));
  Test({LINENUM}2083, 'SetDigitGrouping(0, 8)', 0, True, fs('0'));
  Test({LINENUM}2084, 'SetDigitGrouping(0, 9)', 0, True, fs('0'));
  Test({LINENUM}2085, 'SetDigitGrouping(0, 10)', 0, True, fs('0'));
  Test({LINENUM}2086, 'SetDigitGrouping(0, 11)', 0, True, fs('0'));
  Test({LINENUM}2087, 'SetDigitGrouping(0, 12)', 0, True, fs('0'));
  Test({LINENUM}2088, 'SetDigitGrouping(0, 13)', 0, True, fs('0'));
  Test({LINENUM}2089, 'SetDigitGrouping(0, 14)', 0, True, fs('0'));
  Test({LINENUM}2090, 'SetDigitGrouping(0, 15)', 0, True, fs('0'));
  Test({LINENUM}2091, 'SetDigitGrouping(0, 16)', 0, True, fs('0'));

  Test({LINENUM}2093, 'SetDigitGrouping(123456789123456789, 0)', 123456789123456789, True, fs('123456789123456789'));
  Test({LINENUM}2094, 'SetDigitGrouping(123456789123456789, 1)', 123456789123456789, True, fs('1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9'));
  Test({LINENUM}2095, 'SetDigitGrouping(123456789123456789, 2)', 123456789123456789, True, fs('12 34 56 78 91 23 45 67 89'));
  Test({LINENUM}2096, 'SetDigitGrouping(123456789123456789, 3)', 123456789123456789, True, fs('123 456 789 123 456 789'));
  Test({LINENUM}2097, 'SetDigitGrouping(123456789123456789, 4)', 123456789123456789, True, fs('12 3456 7891 2345 6789'));
  Test({LINENUM}2098, 'SetDigitGrouping(123456789123456789, 5)', 123456789123456789, True, fs('123 45678 91234 56789'));
  Test({LINENUM}2099, 'SetDigitGrouping(123456789123456789, 6)', 123456789123456789, True, fs('123456 789123 456789'));
  Test({LINENUM}2100, 'SetDigitGrouping(123456789123456789, 7)', 123456789123456789, True, fs('1234 5678912 3456789'));
  Test({LINENUM}2101, 'SetDigitGrouping(123456789123456789, 8)', 123456789123456789, True, fs('12 34567891 23456789'));
  Test({LINENUM}2102, 'SetDigitGrouping(123456789123456789, 9)', 123456789123456789, True, fs('123456789 123456789'));
  Test({LINENUM}2103, 'SetDigitGrouping(123456789123456789, 10)', 123456789123456789, True, fs('12345678 9123456789'));
  Test({LINENUM}2104, 'SetDigitGrouping(123456789123456789, 12)', 123456789123456789, True, fs('123456 789123456789'));
  Test({LINENUM}2105, 'SetDigitGrouping(123456789123456789, 16)', 123456789123456789, True, fs('12 3456789123456789'));
  Test({LINENUM}2106, 'SetDigitGrouping(123456789123456789, 18)', 123456789123456789, True, fs('123456789123456789'));
  Test({LINENUM}2107, 'SetDigitGrouping(123456789123456789, 19)', 123456789123456789, True, fs('123456789123456789'));
  Test({LINENUM}2108, 'SetDigitGrouping(123456789123456789, 20)', 123456789123456789, True, fs('123456789123456789'));

  Test({LINENUM}2110, 'SetDigitGrouping(-123456789123456789, 0)', -123456789123456789, True, MINUS_SIGN + fs('123456789123456789'));
  Test({LINENUM}2111, 'SetDigitGrouping(-123456789123456789, 1)', -123456789123456789, True, MINUS_SIGN + fs('1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9'));
  Test({LINENUM}2112, 'SetDigitGrouping(-123456789123456789, 2)', -123456789123456789, True, MINUS_SIGN + fs('12 34 56 78 91 23 45 67 89'));
  Test({LINENUM}2113, 'SetDigitGrouping(-123456789123456789, 3)', -123456789123456789, True, MINUS_SIGN + fs('123 456 789 123 456 789'));
  Test({LINENUM}2114, 'SetDigitGrouping(-123456789123456789, 4)', -123456789123456789, True, MINUS_SIGN + fs('12 3456 7891 2345 6789'));
  Test({LINENUM}2115, 'SetDigitGrouping(-123456789123456789, 5)', -123456789123456789, True, MINUS_SIGN + fs('123 45678 91234 56789'));
  Test({LINENUM}2116, 'SetDigitGrouping(-123456789123456789, 6)', -123456789123456789, True, MINUS_SIGN + fs('123456 789123 456789'));
  Test({LINENUM}2117, 'SetDigitGrouping(-123456789123456789, 7)', -123456789123456789, True, MINUS_SIGN + fs('1234 5678912 3456789'));
  Test({LINENUM}2118, 'SetDigitGrouping(-123456789123456789, 8)', -123456789123456789, True, MINUS_SIGN + fs('12 34567891 23456789'));
  Test({LINENUM}2119, 'SetDigitGrouping(-123456789123456789, 9)', -123456789123456789, True, MINUS_SIGN + fs('123456789 123456789'));
  Test({LINENUM}2120, 'SetDigitGrouping(-123456789123456789, 10)', -123456789123456789, True, MINUS_SIGN + fs('12345678 9123456789'));
  Test({LINENUM}2121, 'SetDigitGrouping(-123456789123456789, 12)', -123456789123456789, True, MINUS_SIGN + fs('123456 789123456789'));
  Test({LINENUM}2122, 'SetDigitGrouping(-123456789123456789, 16)', -123456789123456789, True, MINUS_SIGN + fs('12 3456789123456789'));
  Test({LINENUM}2123, 'SetDigitGrouping(-123456789123456789, 18)', -123456789123456789, True, MINUS_SIGN + fs('123456789123456789'));
  Test({LINENUM}2124, 'SetDigitGrouping(-123456789123456789, 19)', -123456789123456789, True, MINUS_SIGN + fs('123456789123456789'));
  Test({LINENUM}2125, 'SetDigitGrouping(-123456789123456789, 20)', -123456789123456789, True, MINUS_SIGN + fs('123456789123456789'));

  Test({LINENUM}2127, 'SetDigitGrouping(7, 0)', 7, True, fs('7'));
  Test({LINENUM}2128, 'SetDigitGrouping(7, 1)', 7, True, fs('7'));
  Test({LINENUM}2129, 'SetDigitGrouping(7, 2)', 7, True, fs('7'));
  Test({LINENUM}2130, 'SetDigitGrouping(7, 3)', 7, True, fs('7'));
  Test({LINENUM}2131, 'SetDigitGrouping(7, 4)', 7, True, fs('7'));
  Test({LINENUM}2132, 'SetDigitGrouping(7, 5)', 7, True, fs('7'));
  Test({LINENUM}2133, 'SetDigitGrouping(7, 6)', 7, True, fs('7'));
  Test({LINENUM}2134, 'SetDigitGrouping(7, 7)', 7, True, fs('7'));
  Test({LINENUM}2135, 'SetDigitGrouping(7, 8)', 7, True, fs('7'));
  Test({LINENUM}2136, 'SetDigitGrouping(7, 9)', 7, True, fs('7'));
  Test({LINENUM}2137, 'SetDigitGrouping(7, 10)', 7, True, fs('7'));
  Test({LINENUM}2138, 'SetDigitGrouping(7, 11)', 7, True, fs('7'));
  Test({LINENUM}2139, 'SetDigitGrouping(7, 12)', 7, True, fs('7'));
  Test({LINENUM}2140, 'SetDigitGrouping(7, 13)', 7, True, fs('7'));
  Test({LINENUM}2141, 'SetDigitGrouping(7, 14)', 7, True, fs('7'));
  Test({LINENUM}2142, 'SetDigitGrouping(7, 15)', 7, True, fs('7'));
  Test({LINENUM}2143, 'SetDigitGrouping(7, 16)', 7, True, fs('7'));

  Test({LINENUM}2145, 'SetDigitGrouping(-7, 0)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2146, 'SetDigitGrouping(-7, 1)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2147, 'SetDigitGrouping(-7, 2)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2148, 'SetDigitGrouping(-7, 3)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2149, 'SetDigitGrouping(-7, 4)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2150, 'SetDigitGrouping(-7, 5)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2151, 'SetDigitGrouping(-7, 6)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2152, 'SetDigitGrouping(-7, 7)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2153, 'SetDigitGrouping(-7, 8)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2154, 'SetDigitGrouping(-7, 9)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2155, 'SetDigitGrouping(-7, 10)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2156, 'SetDigitGrouping(-7, 11)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2157, 'SetDigitGrouping(-7, 12)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2158, 'SetDigitGrouping(-7, 13)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2159, 'SetDigitGrouping(-7, 14)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2160, 'SetDigitGrouping(-7, 15)', -7, True, MINUS_SIGN + fs('7'));
  Test({LINENUM}2161, 'SetDigitGrouping(-7, 16)', -7, True, MINUS_SIGN + fs('7'));

  Test({LINENUM}2163, 'SetDigitGrouping(123456, 127)', 123456, True, fs('123456'));
  Test({LINENUM}2164, 'SetDigitGrouping(123456, 128)', failure, 'Invalid digit grouping size 128.');
  Test({LINENUM}2165, 'SetDigitGrouping(123456, -1)', 123456, True, fs('123456'));
  Test({LINENUM}2166, 'SetDigitGrouping(123456, 2.2)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}2167, 'SetDigitGrouping(123456, "k")', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}2168, 'SetDigitGrouping(123456, 2, 2)', failure, 'Too many arguments.');
  Test({LINENUM}2169, 'SetDigitGrouping(123456)', failure, 'Too few arguments. A required argument of type integer is missing.');

  // Format: minimum length + digit grouping

  Test({LINENUM}2173, 'SetMinLength(SetDigitGrouping(123, 0), 0)', 123, True, fs('123'));
  Test({LINENUM}2174, 'SetMinLength(SetDigitGrouping(123, 0), 6)', 123, True, fs('000123'));
  Test({LINENUM}2175, 'SetMinLength(SetDigitGrouping(123, 1), 6)', 123, True, fs('0 0 0 1 2 3'));
  Test({LINENUM}2176, 'SetMinLength(SetDigitGrouping(123, 2), 6)', 123, True, fs('00 01 23'));
  Test({LINENUM}2177, 'SetMinLength(SetDigitGrouping(123, 3), 6)', 123, True, fs('000 123'));
  Test({LINENUM}2178, 'SetMinLength(SetDigitGrouping(123, 4), 6)', 123, True, fs('00 0123'));
  Test({LINENUM}2179, 'SetMinLength(SetDigitGrouping(123, 5), 6)', 123, True, fs('0 00123'));
  Test({LINENUM}2180, 'SetMinLength(SetDigitGrouping(123, 6), 6)', 123, True, fs('000123'));
  Test({LINENUM}2181, 'SetMinLength(SetDigitGrouping(123, 7), 6)', 123, True, fs('000123'));
  Test({LINENUM}2182, 'SetMinLength(SetDigitGrouping(123, 4), 16)', 123, True, fs('0000 0000 0000 0123'));

  Test({LINENUM}2184, 'SetMinLength(SetDigitGrouping(-123, 0), 0)', -123, True, MINUS_SIGN + fs('123'));
  Test({LINENUM}2185, 'SetMinLength(SetDigitGrouping(-123, 0), 6)', -123, True, MINUS_SIGN + fs('000123'));
  Test({LINENUM}2186, 'SetMinLength(SetDigitGrouping(-123, 1), 6)', -123, True, MINUS_SIGN + fs('0 0 0 1 2 3'));
  Test({LINENUM}2187, 'SetMinLength(SetDigitGrouping(-123, 2), 6)', -123, True, MINUS_SIGN + fs('00 01 23'));
  Test({LINENUM}2188, 'SetMinLength(SetDigitGrouping(-123, 3), 6)', -123, True, MINUS_SIGN + fs('000 123'));
  Test({LINENUM}2189, 'SetMinLength(SetDigitGrouping(-123, 4), 6)', -123, True, MINUS_SIGN + fs('00 0123'));
  Test({LINENUM}2190, 'SetMinLength(SetDigitGrouping(-123, 5), 6)', -123, True, MINUS_SIGN + fs('0 00123'));
  Test({LINENUM}2191, 'SetMinLength(SetDigitGrouping(-123, 6), 6)', -123, True, MINUS_SIGN + fs('000123'));
  Test({LINENUM}2192, 'SetMinLength(SetDigitGrouping(-123, 7), 6)', -123, True, MINUS_SIGN + fs('000123'));
  Test({LINENUM}2193, 'SetMinLength(SetDigitGrouping(-123, 4), 16)', -123, True, MINUS_SIGN + fs('0000 0000 0000 0123'));

  Test({LINENUM}2195, 'SetMinLength(SetDigitGrouping(0, 0), 0)', 0, True, fs('0'));
  Test({LINENUM}2196, 'SetMinLength(SetDigitGrouping(0, 0), 8)', 0, True, fs('00000000'));
  Test({LINENUM}2197, 'SetMinLength(SetDigitGrouping(0, 2), 8)', 0, True, fs('00 00 00 00'));
  Test({LINENUM}2198, 'SetMinLength(SetDigitGrouping(0, 3), 8)', 0, True, fs('00 000 000'));
  Test({LINENUM}2199, 'SetMinLength(SetDigitGrouping(0, 4), 8)', 0, True, fs('0000 0000'));
  Test({LINENUM}2200, 'SetMinLength(SetDigitGrouping(0, 6), 8)', 0, True, fs('00 000000'));
  Test({LINENUM}2201, 'SetMinLength(SetDigitGrouping(0, 7), 8)', 0, True, fs('0 0000000'));
  Test({LINENUM}2202, 'SetMinLength(SetDigitGrouping(0, 8), 8)', 0, True, fs('00000000'));
  Test({LINENUM}2203, 'SetMinLength(SetDigitGrouping(0, 9), 8)', 0, True, fs('00000000'));

  // Format: number base + digit grouping

  Test({LINENUM}2207, 'SetDigitGrouping(SetNumberBase(123456, 10), 0)', 123456, True, fs('123456'));
  Test({LINENUM}2208, 'SetDigitGrouping(SetNumberBase(123456, 10), 2)', 123456, True, fs('12 34 56'));
  Test({LINENUM}2209, 'SetDigitGrouping(SetNumberBase(123456, 10), 3)', 123456, True, fs('123 456'));

  Test({LINENUM}2211, 'SetDigitGrouping(SetNumberBase(-123456, 10), 0)', -123456, True, MINUS_SIGN + fs('123456'));
  Test({LINENUM}2212, 'SetDigitGrouping(SetNumberBase(-123456, 10), 2)', -123456, True, MINUS_SIGN + fs('12 34 56'));
  Test({LINENUM}2213, 'SetDigitGrouping(SetNumberBase(-123456, 10), 3)', -123456, True, MINUS_SIGN + fs('123 456'));

  Test({LINENUM}2215, 'SetDigitGrouping(SetNumberBase(0, 10), 0)', 0, True, fs('0'));
  Test({LINENUM}2216, 'SetDigitGrouping(SetNumberBase(0, 10), 2)', 0, True, fs('0'));
  Test({LINENUM}2217, 'SetDigitGrouping(SetNumberBase(0, 10), 3)', 0, True, fs('0'));

  Test({LINENUM}2219, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 0)', 123456789123456789, True, fs('1B69B4BACD05F15'));
  Test({LINENUM}2220, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 1)', 123456789123456789, True, fs('1 B 6 9 B 4 B A C D 0 5 F 1 5'));
  Test({LINENUM}2221, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 2)', 123456789123456789, True, fs('1 B6 9B 4B AC D0 5F 15'));
  Test({LINENUM}2222, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 3)', 123456789123456789, True, fs('1B6 9B4 BAC D05 F15'));
  Test({LINENUM}2223, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 4)', 123456789123456789, True, fs('1B6 9B4B ACD0 5F15'));
  Test({LINENUM}2224, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 5)', 123456789123456789, True, fs('1B69B 4BACD 05F15'));
  Test({LINENUM}2225, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 6)', 123456789123456789, True, fs('1B6 9B4BAC D05F15'));
  Test({LINENUM}2226, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 7)', 123456789123456789, True, fs('1 B69B4BA CD05F15'));
  Test({LINENUM}2227, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 8)', 123456789123456789, True, fs('1B69B4B ACD05F15'));
  Test({LINENUM}2228, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 9)', 123456789123456789, True, fs('1B69B4 BACD05F15'));
  Test({LINENUM}2229, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 10)', 123456789123456789, True, fs('1B69B 4BACD05F15'));
  Test({LINENUM}2230, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 12)', 123456789123456789, True, fs('1B6 9B4BACD05F15'));
  Test({LINENUM}2231, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 14)', 123456789123456789, True, fs('1 B69B4BACD05F15'));
  Test({LINENUM}2232, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 15)', 123456789123456789, True, fs('1B69B4BACD05F15'));
  Test({LINENUM}2233, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 16)', 123456789123456789, True, fs('1B69B4BACD05F15'));
  Test({LINENUM}2234, 'SetDigitGrouping(SetNumberBase(123456789123456789, 16), 32)', 123456789123456789, True, fs('1B69B4BACD05F15'));

  Test({LINENUM}2236, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 0)', -123456789123456789, True, MINUS_SIGN + fs('1B69B4BACD05F15'));
  Test({LINENUM}2237, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 1)', -123456789123456789, True, MINUS_SIGN + fs('1 B 6 9 B 4 B A C D 0 5 F 1 5'));
  Test({LINENUM}2238, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 2)', -123456789123456789, True, MINUS_SIGN + fs('1 B6 9B 4B AC D0 5F 15'));
  Test({LINENUM}2239, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 3)', -123456789123456789, True, MINUS_SIGN + fs('1B6 9B4 BAC D05 F15'));
  Test({LINENUM}2240, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 4)', -123456789123456789, True, MINUS_SIGN + fs('1B6 9B4B ACD0 5F15'));
  Test({LINENUM}2241, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 5)', -123456789123456789, True, MINUS_SIGN + fs('1B69B 4BACD 05F15'));
  Test({LINENUM}2242, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 6)', -123456789123456789, True, MINUS_SIGN + fs('1B6 9B4BAC D05F15'));
  Test({LINENUM}2243, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 7)', -123456789123456789, True, MINUS_SIGN + fs('1 B69B4BA CD05F15'));
  Test({LINENUM}2244, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 8)', -123456789123456789, True, MINUS_SIGN + fs('1B69B4B ACD05F15'));
  Test({LINENUM}2245, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 9)', -123456789123456789, True, MINUS_SIGN + fs('1B69B4 BACD05F15'));
  Test({LINENUM}2246, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 10)', -123456789123456789, True, MINUS_SIGN + fs('1B69B 4BACD05F15'));
  Test({LINENUM}2247, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 12)', -123456789123456789, True, MINUS_SIGN + fs('1B6 9B4BACD05F15'));
  Test({LINENUM}2248, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 14)', -123456789123456789, True, MINUS_SIGN + fs('1 B69B4BACD05F15'));
  Test({LINENUM}2249, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 15)', -123456789123456789, True, MINUS_SIGN + fs('1B69B4BACD05F15'));
  Test({LINENUM}2250, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 16)', -123456789123456789, True, MINUS_SIGN + fs('1B69B4BACD05F15'));
  Test({LINENUM}2251, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 32)', -123456789123456789, True, MINUS_SIGN + fs('1B69B4BACD05F15'));

  Test({LINENUM}2253, 'SetDigitGrouping(SetNumberBase(0, 16), 0)', 0, True, fs('0'));
  Test({LINENUM}2254, 'SetDigitGrouping(SetNumberBase(0, 16), 1)', 0, True, fs('0'));
  Test({LINENUM}2255, 'SetDigitGrouping(SetNumberBase(0, 16), 2)', 0, True, fs('0'));
  Test({LINENUM}2256, 'SetDigitGrouping(SetNumberBase(0, 16), 3)', 0, True, fs('0'));

  Test({LINENUM}2258, 'SetDigitGrouping(SetNumberBase(123, 2), 0)', 123, True, fs('1111011'));
  Test({LINENUM}2259, 'SetDigitGrouping(SetNumberBase(123, 2), 1)', 123, True, fs('1 1 1 1 0 1 1'));
  Test({LINENUM}2260, 'SetDigitGrouping(SetNumberBase(123, 2), 2)', 123, True, fs('1 11 10 11'));
  Test({LINENUM}2261, 'SetDigitGrouping(SetNumberBase(123, 2), 3)', 123, True, fs('1 111 011'));
  Test({LINENUM}2262, 'SetDigitGrouping(SetNumberBase(123, 2), 4)', 123, True, fs('111 1011'));
  Test({LINENUM}2263, 'SetDigitGrouping(SetNumberBase(123, 2), 5)', 123, True, fs('11 11011'));
  Test({LINENUM}2264, 'SetDigitGrouping(SetNumberBase(123, 2), 6)', 123, True, fs('1 111011'));
  Test({LINENUM}2265, 'SetDigitGrouping(SetNumberBase(123, 2), 7)', 123, True, fs('1111011'));
  Test({LINENUM}2266, 'SetDigitGrouping(SetNumberBase(123, 2), 8)', 123, True, fs('1111011'));
  Test({LINENUM}2267, 'SetDigitGrouping(SetNumberBase(123, 2), 64)', 123, True, fs('1111011'));

  Test({LINENUM}2269, 'SetDigitGrouping(SetNumberBase(-123, 2), 0)', -123, True, MINUS_SIGN + fs('1111011'));
  Test({LINENUM}2270, 'SetDigitGrouping(SetNumberBase(-123, 2), 1)', -123, True, MINUS_SIGN + fs('1 1 1 1 0 1 1'));
  Test({LINENUM}2271, 'SetDigitGrouping(SetNumberBase(-123, 2), 2)', -123, True, MINUS_SIGN + fs('1 11 10 11'));
  Test({LINENUM}2272, 'SetDigitGrouping(SetNumberBase(-123, 2), 3)', -123, True, MINUS_SIGN + fs('1 111 011'));
  Test({LINENUM}2273, 'SetDigitGrouping(SetNumberBase(-123, 2), 4)', -123, True, MINUS_SIGN + fs('111 1011'));
  Test({LINENUM}2274, 'SetDigitGrouping(SetNumberBase(-123, 2), 5)', -123, True, MINUS_SIGN + fs('11 11011'));
  Test({LINENUM}2275, 'SetDigitGrouping(SetNumberBase(-123, 2), 6)', -123, True, MINUS_SIGN + fs('1 111011'));
  Test({LINENUM}2276, 'SetDigitGrouping(SetNumberBase(-123, 2), 7)', -123, True, MINUS_SIGN + fs('1111011'));
  Test({LINENUM}2277, 'SetDigitGrouping(SetNumberBase(-123, 2), 8)', -123, True, MINUS_SIGN + fs('1111011'));
  Test({LINENUM}2278, 'SetDigitGrouping(SetNumberBase(-123, 2), 64)', -123, True, MINUS_SIGN + fs('1111011'));

  Test({LINENUM}2280, 'SetDigitGrouping(SetNumberBase(123456789123456789, 2), 0)', 123456789123456789, True, fs('110110110100110110100101110101100110100000101111100010101'));
  Test({LINENUM}2281, 'SetDigitGrouping(SetNumberBase(123456789123456789, 2), 1)', 123456789123456789, True, fs('1 1 0 1 1 0 1 1 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 1 0 1 0 1'));
  Test({LINENUM}2282, 'SetDigitGrouping(SetNumberBase(123456789123456789, 2), 2)', 123456789123456789, True, fs('1 10 11 01 10 10 01 10 11 01 00 10 11 10 10 11 00 11 01 00 00 01 01 11 11 00 01 01 01'));
  Test({LINENUM}2283, 'SetDigitGrouping(SetNumberBase(123456789123456789, 2), 8)', 123456789123456789, True, fs('1 10110110 10011011 01001011 10101100 11010000 01011111 00010101'));
  Test({LINENUM}2284, 'SetDigitGrouping(SetNumberBase(123456789123456789, 2), 32)', 123456789123456789, True, fs('1101101101001101101001011 10101100110100000101111100010101'));

  Test({LINENUM}2286, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 2), 0)', -123456789123456789, True, MINUS_SIGN + fs('110110110100110110100101110101100110100000101111100010101'));
  Test({LINENUM}2287, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 2), 1)', -123456789123456789, True, MINUS_SIGN + fs('1 1 0 1 1 0 1 1 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 1 0 1 0 1'));
  Test({LINENUM}2288, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 2), 2)', -123456789123456789, True, MINUS_SIGN + fs('1 10 11 01 10 10 01 10 11 01 00 10 11 10 10 11 00 11 01 00 00 01 01 11 11 00 01 01 01'));
  Test({LINENUM}2289, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 2), 8)', -123456789123456789, True, MINUS_SIGN + fs('1 10110110 10011011 01001011 10101100 11010000 01011111 00010101'));
  Test({LINENUM}2290, 'SetDigitGrouping(SetNumberBase(-123456789123456789, 2), 32)', -123456789123456789, True, MINUS_SIGN + fs('1101101101001101101001011 10101100110100000101111100010101'));

  Test({LINENUM}2292, 'SetDigitGrouping(SetNumberBase(0, 2), 0)', 0, True, fs('0'));
  Test({LINENUM}2293, 'SetDigitGrouping(SetNumberBase(0, 2), 1)', 0, True, fs('0'));
  Test({LINENUM}2294, 'SetDigitGrouping(SetNumberBase(0, 2), 2)', 0, True, fs('0'));
  Test({LINENUM}2295, 'SetDigitGrouping(SetNumberBase(0, 2), 3)', 0, True, fs('0'));

  Test({LINENUM}2297, 'SetDigitGrouping(SetNumberBase(9223372036854775807, 36), 0)', 9223372036854775807, True, fs('1Y2P0IJ32E8E7'));
  Test({LINENUM}2298, 'SetDigitGrouping(SetNumberBase(9223372036854775807, 36), 1)', 9223372036854775807, True, fs('1 Y 2 P 0 I J 3 2 E 8 E 7'));
  Test({LINENUM}2299, 'SetDigitGrouping(SetNumberBase(9223372036854775807, 36), 2)', 9223372036854775807, True, fs('1 Y2 P0 IJ 32 E8 E7'));
  Test({LINENUM}2300, 'SetDigitGrouping(SetNumberBase(9223372036854775807, 36), 3)', 9223372036854775807, True, fs('1 Y2P 0IJ 32E 8E7'));
  Test({LINENUM}2301, 'SetDigitGrouping(SetNumberBase(9223372036854775807, 36), 4)', 9223372036854775807, True, fs('1 Y2P0 IJ32 E8E7'));
  Test({LINENUM}2302, 'SetDigitGrouping(SetNumberBase(9223372036854775807, 36), 8)', 9223372036854775807, True, fs('1Y2P0 IJ32E8E7'));
  Test({LINENUM}2303, 'SetDigitGrouping(SetNumberBase(9223372036854775807, 36), 16)', 9223372036854775807, True, fs('1Y2P0IJ32E8E7'));

  Test({LINENUM}2305, 'SetDigitGrouping(SetNumberBase(-9223372036854775807, 36), 0)', -9223372036854775807, True, MINUS_SIGN + fs('1Y2P0IJ32E8E7'));
  Test({LINENUM}2306, 'SetDigitGrouping(SetNumberBase(-9223372036854775807, 36), 1)', -9223372036854775807, True, MINUS_SIGN + fs('1 Y 2 P 0 I J 3 2 E 8 E 7'));
  Test({LINENUM}2307, 'SetDigitGrouping(SetNumberBase(-9223372036854775807, 36), 2)', -9223372036854775807, True, MINUS_SIGN + fs('1 Y2 P0 IJ 32 E8 E7'));
  Test({LINENUM}2308, 'SetDigitGrouping(SetNumberBase(-9223372036854775807, 36), 3)', -9223372036854775807, True, MINUS_SIGN + fs('1 Y2P 0IJ 32E 8E7'));
  Test({LINENUM}2309, 'SetDigitGrouping(SetNumberBase(-9223372036854775807, 36), 4)', -9223372036854775807, True, MINUS_SIGN + fs('1 Y2P0 IJ32 E8E7'));
  Test({LINENUM}2310, 'SetDigitGrouping(SetNumberBase(-9223372036854775807, 36), 8)', -9223372036854775807, True, MINUS_SIGN + fs('1Y2P0 IJ32E8E7'));
  Test({LINENUM}2311, 'SetDigitGrouping(SetNumberBase(-9223372036854775807, 36), 16)', -9223372036854775807, True, MINUS_SIGN + fs('1Y2P0IJ32E8E7'));

  Test({LINENUM}2313, 'SetDigitGrouping(SetNumberBase(0, 36), 4)', 0, True, fs('0'));

  // Format: number base + digit grouping + minimum length

  Test({LINENUM}2317, 'SetMinLength(SetDigitGrouping(SetNumberBase(123456, 10), 3), 10)', 123456, True, fs('0 000 123 456'));
  Test({LINENUM}2318, 'SetMinLength(SetDigitGrouping(SetNumberBase(123456, 16), 2), 8)', 123456, True, fs('00 01 E2 40'));
  Test({LINENUM}2319, 'SetMinLength(SetDigitGrouping(SetNumberBase(123456, 2), 8), 32)', 123456, True, fs('00000000 00000001 11100010 01000000'));
  Test({LINENUM}2320, 'SetMinLength(SetDigitGrouping(SetNumberBase(123456, 2), 4), 32)', 123456, True, fs('0000 0000 0000 0001 1110 0010 0100 0000'));

  Test({LINENUM}2322, 'SetMinLength(SetDigitGrouping(SetNumberBase(123456789123456789, 10), 3), 20)', 123456789123456789, True, fs('00 123 456 789 123 456 789'));
  Test({LINENUM}2323, 'SetMinLength(SetDigitGrouping(SetNumberBase(123456789123456789, 16), 2), 16)', 123456789123456789, True, fs('01 B6 9B 4B AC D0 5F 15'));
  Test({LINENUM}2324, 'SetMinLength(SetDigitGrouping(SetNumberBase(123456789123456789, 2), 8), 64)', 123456789123456789, True, fs('00000001 10110110 10011011 01001011 10101100 11010000 01011111 00010101'));

  Test({LINENUM}2326, 'SetMinLength(SetDigitGrouping(SetNumberBase(9223372036854775807, 10), 3), 20)', 9223372036854775807, True, fs('09 223 372 036 854 775 807'));
  Test({LINENUM}2327, 'SetMinLength(SetDigitGrouping(SetNumberBase(9223372036854775807, 16), 2), 16)', 9223372036854775807, True, fs('7F FF FF FF FF FF FF FF'));
  Test({LINENUM}2328, 'SetMinLength(SetDigitGrouping(SetNumberBase(9223372036854775807, 2), 8), 64)', 9223372036854775807, True, fs('01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111'));

  Test({LINENUM}2330, 'SetMinLength(SetDigitGrouping(SetNumberBase(-123456, 10), 3), 10)', -123456, True, MINUS_SIGN + fs('0 000 123 456'));
  Test({LINENUM}2331, 'SetMinLength(SetDigitGrouping(SetNumberBase(-123456, 16), 2), 8)', -123456, True, MINUS_SIGN + fs('00 01 E2 40'));
  Test({LINENUM}2332, 'SetMinLength(SetDigitGrouping(SetNumberBase(-123456, 2), 8), 32)', -123456, True, MINUS_SIGN + fs('00000000 00000001 11100010 01000000'));
  Test({LINENUM}2333, 'SetMinLength(SetDigitGrouping(SetNumberBase(-123456, 2), 4), 32)', -123456, True, MINUS_SIGN + fs('0000 0000 0000 0001 1110 0010 0100 0000'));

  Test({LINENUM}2335, 'SetMinLength(SetDigitGrouping(SetNumberBase(-123456789123456789, 10), 3), 20)', -123456789123456789, True, MINUS_SIGN + fs('00 123 456 789 123 456 789'));
  Test({LINENUM}2336, 'SetMinLength(SetDigitGrouping(SetNumberBase(-123456789123456789, 16), 2), 16)', -123456789123456789, True, MINUS_SIGN + fs('01 B6 9B 4B AC D0 5F 15'));
  Test({LINENUM}2337, 'SetMinLength(SetDigitGrouping(SetNumberBase(-123456789123456789, 2), 8), 64)', -123456789123456789, True, MINUS_SIGN + fs('00000001 10110110 10011011 01001011 10101100 11010000 01011111 00010101'));

  Test({LINENUM}2339, 'SetMinLength(SetDigitGrouping(SetNumberBase(-9223372036854775807, 10), 3), 20)', -9223372036854775807, True, MINUS_SIGN + fs('09 223 372 036 854 775 807'));
  Test({LINENUM}2340, 'SetMinLength(SetDigitGrouping(SetNumberBase(-9223372036854775807, 16), 2), 16)', -9223372036854775807, True, MINUS_SIGN + fs('7F FF FF FF FF FF FF FF'));
  Test({LINENUM}2341, 'SetMinLength(SetDigitGrouping(SetNumberBase(-9223372036854775807, 2), 8), 64)', -9223372036854775807, True, MINUS_SIGN + fs('01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111'));

  Test({LINENUM}2343, 'SetMinLength(SetDigitGrouping(SetNumberBase(853624750053, 2), 8), 64)', 853624750053, True, fs('00000000 00000000 00000000 11000110 10111111 11111111 11111111 11100101'));
  Test({LINENUM}2344, 'SetMinLength(SetDigitGrouping(SetNumberBase(-853624750053, 2), 8), 64)', -853624750053, True, MINUS_SIGN + fs('00000000 00000000 00000000 11000110 10111111 11111111 11111111 11100101'));

  Test({LINENUM}2346, 'SetMinLength(SetDigitGrouping(SetNumberBase(853624750053, 2), 8), 32)', 853624750053, True, fs('11000110 10111111 11111111 11111111 11100101'));
  Test({LINENUM}2347, 'SetMinLength(SetDigitGrouping(SetNumberBase(-853624750053, 2), 8), 32)', -853624750053, True, MINUS_SIGN + fs('11000110 10111111 11111111 11111111 11100101'));

  Test({LINENUM}2349, 'SetNumberBase(SetMinLength(SetDigitGrouping(853624750053, 8), 64), 2)', 853624750053, True, fs('00000000 00000000 00000000 11000110 10111111 11111111 11111111 11100101'));
  Test({LINENUM}2350, 'SetNumberBase(SetNumberBase(SetDigitGrouping(SetMinLength(853624750053, 64), 8), 36), 2)', 853624750053, True, fs('00000000 00000000 00000000 11000110 10111111 11111111 11111111 11100101'));
  Test({LINENUM}2351, 'SetMinLength(SetNumberBase(SetNumberBase(SetDigitGrouping(SetMinLength(853624750053, 255), 8), 36), 2), 64)', 853624750053, True, fs('00000000 00000000 00000000 11000110 10111111 11111111 11111111 11100101'));

  Test({LINENUM}2353, 'SetMinLength(SetDigitGrouping(SetNumberBase(0, 10), 3), 10)', 0, True, fs('0 000 000 000'));
  Test({LINENUM}2354, 'SetMinLength(SetDigitGrouping(SetNumberBase(0, 16), 2), 8)', 0, True, fs('00 00 00 00'));
  Test({LINENUM}2355, 'SetMinLength(SetDigitGrouping(SetNumberBase(0, 2), 8), 32)', 0, True, fs('00000000 00000000 00000000 00000000'));
  Test({LINENUM}2356, 'SetMinLength(SetDigitGrouping(SetNumberBase(0, 2), 4), 32)', 0, True, fs('0000 0000 0000 0000 0000 0000 0000 0000'));


  //
  // Rational numbers (and the division operator on integers, and operators on rationals)
  //

  Test({LINENUM}2363, '1/2', Rat(1, 2), True, '1/2');
  Test({LINENUM}2364, '1/3', Rat(1, 3), True, '1/3');
  Test({LINENUM}2365, '1/1000000', Rat(1, 1000000), True, '1/1000000');
  Test({LINENUM}2366, '1237/17', Rat(1237, 17), True, '1237/17');
  Test({LINENUM}2367, '1237/1238', Rat(1237, 1238), True, '1237/1238');

  Test({LINENUM}2369, '-1/2', Rat(-1, 2), True, MINUS_SIGN + '1/2');
  Test({LINENUM}2370, '-1/3', Rat(-1, 3), True, MINUS_SIGN + '1/3');
  Test({LINENUM}2371, '-1/1000000', Rat(-1, 1000000), True, MINUS_SIGN + '1/1000000');
  Test({LINENUM}2372, '-1237/17', Rat(-1237, 17), True, MINUS_SIGN + '1237/17');
  Test({LINENUM}2373, '-1237/1238', Rat(-1237, 1238), True, MINUS_SIGN + '1237/1238');

  Test({LINENUM}2375, '1/1', 1, True, '1');
  Test({LINENUM}2376, '2/2', 1, True, '1');
  Test({LINENUM}2377, '987654321/987654321', 1, True, '1');
  Test({LINENUM}2378, '987654320/987654321', Rat(987654320, 987654321), True, '987654320/987654321');

  Test({LINENUM}2380, '-1/1', -1, True, MINUS_SIGN + '1');
  Test({LINENUM}2381, '-2/2', -1, True, MINUS_SIGN + '1');
  Test({LINENUM}2382, '-987654321/987654321', -1, True, MINUS_SIGN + '1');
  Test({LINENUM}2383, '-987654320/987654321', Rat(-987654320, 987654321), True, MINUS_SIGN + '987654320/987654321');

  Test({LINENUM}2385, '0/2', 0, True, '0');
  Test({LINENUM}2386, '0/3', 0, True, '0');
  Test({LINENUM}2387, '0/1000000', 0, True, '0');
  Test({LINENUM}2388, '0/17', 0, True, '0');
  Test({LINENUM}2389, '0/1238', 0, True, '0');

  Test({LINENUM}2391, '4/20', Rat(1, 5), True, '1/5');
  Test({LINENUM}2392, '40/200', Rat(1, 5), True, '1/5');
  Test({LINENUM}2393, '400000000/2000000000', Rat(1, 5), True, '1/5');
  Test({LINENUM}2394, '40000000000000/200000000000000', Rat(1, 5), True, '1/5');

  Test({LINENUM}2396, '-4/20', Rat(-1, 5), True, MINUS_SIGN + '1/5');
  Test({LINENUM}2397, '-40/200', Rat(-1, 5), True, MINUS_SIGN + '1/5');
  Test({LINENUM}2398, '-400000000/2000000000', Rat(-1, 5), True, MINUS_SIGN + '1/5');
  Test({LINENUM}2399, '-40000000000000/200000000000000', Rat(-1, 5), True, MINUS_SIGN + '1/5');

  Test({LINENUM}2401, '83250/47250', Rat(37, 21), True, '37/21');

  Test({LINENUM}2403, '1/3 + 1/4', Rat(7, 12), True, '7/12');
  Test({LINENUM}2404, '1/3 - 1/4', Rat(1, 12), True, '1/12');
  Test({LINENUM}2405, '(1/3) ⋅ (1/4)', Rat(1, 12), True, '1/12');
  Test({LINENUM}2406, '(7/3) ⋅ (3/4)', Rat(7, 4), True, '7/4');
  Test({LINENUM}2407, '(7/3) ⋅ (5/4)', Rat(35, 12), True, '35/12');
  Test({LINENUM}2408, '(7/3) / (3/4)', Rat(28, 9), True, '28/9');
  Test({LINENUM}2409, '(7/3) / (5/4)', Rat(28, 15), True, '28/15');

  Test({LINENUM}2411, '1/3 ⋅ 1/4', Rat(1, 12), True, '1/12');
  Test({LINENUM}2412, '7/3 ⋅ 3/4', Rat(7, 4), True, '7/4');
  Test({LINENUM}2413, '7/3 ⋅ 5/4', Rat(35, 12), True, '35/12');

  Test({LINENUM}2415, '(7/3) / (7/4)', Rat(4, 3), True, '4/3');
  Test({LINENUM}2416, '-(7/3) / (7/4)', Rat(-4, 3), True, MINUS_SIGN + '4/3');
  Test({LINENUM}2417, '(-7/3) / (7/4)', Rat(-4, 3), True, MINUS_SIGN + '4/3');
  Test({LINENUM}2418, '(7/-3) / (7/4)', Rat(-4, 3), True, MINUS_SIGN + '4/3');
  Test({LINENUM}2419, '(7/3) / -(7/4)', Rat(-4, 3), True, MINUS_SIGN + '4/3');
  Test({LINENUM}2420, '(7/3) / (-7/4)', Rat(-4, 3), True, MINUS_SIGN + '4/3');
  Test({LINENUM}2421, '(7/3) / (7/-4)', Rat(-4, 3), True, MINUS_SIGN + '4/3');
  Test({LINENUM}2422, '-(-7/-3) / -(-7/-4)', Rat(4, 3), True, '4/3');
  Test({LINENUM}2423, '--(-7/-3) / -(-7/-4)', Rat(-4, 3), True, MINUS_SIGN + '4/3');
  Test({LINENUM}2424, '-(-(-7/-3) / -(-7/-4))', Rat(-4, 3), True, MINUS_SIGN + '4/3');

  Test({LINENUM}2426, '0/3 + 1/4', Rat(1, 4), True, '1/4');
  Test({LINENUM}2427, '0 + 1/4', Rat(1, 4), True, '1/4');
  Test({LINENUM}2428, '(0/3) ⋅ (1/4)', Rat(0, 1), True, '0');
  Test({LINENUM}2429, '0 ⋅ (1/4)', Rat(0, 1), True, '0');

  Test({LINENUM}2431, '1/7 + 5', Rat(36, 7), True, '36/7');
  Test({LINENUM}2432, '1/7 - 5', Rat(-34, 7), True, MINUS_SIGN + '34/7');

  Test({LINENUM}2434, '5 + 1/7', Rat(36, 7), True, '36/7');
  Test({LINENUM}2435, '5 - 1/7', Rat(34, 7), True, '34/7');

  Test({LINENUM}2437, '5 ⋅ 1/7', Rat(5, 7), True, '5/7');
  Test({LINENUM}2438, '(5 ⋅ 1)/7', Rat(5, 7), True, '5/7');
  Test({LINENUM}2439, '5 ⋅ (1/7)', Rat(5, 7), True, '5/7');

  Test({LINENUM}2441, '123456789123456789/123456789123456', Rat(41152263041152263, 41152263041152), True, '41152263041152263/41152263041152');
  Test({LINENUM}2442, '-123456789123456789/123456789123456', Rat(-41152263041152263, 41152263041152), True, MINUS_SIGN + '41152263041152263/41152263041152');
  Test({LINENUM}2443, '123456789123456789/-123456789123456', Rat(-41152263041152263, 41152263041152), True, MINUS_SIGN + '41152263041152263/41152263041152');
  Test({LINENUM}2444, '-123456789123456789/--123456789123456', Rat(-41152263041152263, 41152263041152), True, MINUS_SIGN + '41152263041152263/41152263041152');
  Test({LINENUM}2445, '-(-(---123456789123456789/--123456789123456))', Rat(-41152263041152263, 41152263041152), True, MINUS_SIGN + '41152263041152263/41152263041152');
  Test({LINENUM}2446, '-(-(---123456789123456789/-(--123456789123456)))', Rat(41152263041152263, 41152263041152), True, '41152263041152263/41152263041152');

  Test({LINENUM}2448, '9223372036854775807/9223372036854775807', 1, True, '1');
  Test({LINENUM}2449, '9223372036854775806/9223372036854775807', Rat(9223372036854775806, 9223372036854775807), True, '9223372036854775806/9223372036854775807');

  Test({LINENUM}2451, '-9223372036854775807/9223372036854775807', -1, True, MINUS_SIGN + '1');
  Test({LINENUM}2452, '-9223372036854775806/9223372036854775807', Rat(-9223372036854775806, 9223372036854775807), True, MINUS_SIGN + '9223372036854775806/9223372036854775807');

  Test({LINENUM}2454, '1/357 + 512/879 - 12/67 + 22/17', Rat(3972039, 2336089), True, '3972039/2336089');
  Test({LINENUM}2455, '52/75 + 94/73 - 12/85 + 6523/51 + 152/7', Rat(32892473, 217175), True, '32892473/217175');
  Test({LINENUM}2456, '2/84 - 8563/1 + 5892/7 - 2/9853', Rat(-3195259013, 413826), True, MINUS_SIGN + '3195259013/413826');
  Test({LINENUM}2457, '532/751 + 9583/9571 - 9856/8522 + 3/7 - 89/2', Rat(-18659885062139, 428782273934), True, MINUS_SIGN + '18659885062139/428782273934');
  Test({LINENUM}2458, '15236/8562712 + 9/2', Rat(4818430, 1070339), True, '4818430/1070339');
  Test({LINENUM}2459, '21/5784632 - 8/3', Rat(-6610999, 2479128), True, MINUS_SIGN + '6610999/2479128');
  Test({LINENUM}2460, '2/7 ⋅ 5/1 ⋅ 5/9 ⋅ 3/7 ⋅ 7/2 ⋅ 2/7 ⋅ 1/3 ⋅ 6/4 ⋅ 7/2 ⋅ 4/6 ⋅ 9/8 ⋅ 2/7 ⋅ 7/1 ⋅ 4/5 ⋅ 6/8', Rat(15, 28), True, '15/28');
  Test({LINENUM}2461, '2/7 ⋅ 5/1 ⋅ 5/9 ⋅ 3/7 ⋅ 7/2 ⋅ 2/7 ⋅ 1/3 ⋅ 6/0 ⋅ 7/2 ⋅ 4/6 ⋅ 9/8 ⋅ 2/7 ⋅ 7/1 ⋅ 4/5 ⋅ 6/8', failure, 'division by zero');
  Test({LINENUM}2462, '598 ⋅ 752/411856', Rat(28106, 25741), True, '28106/25741');
  Test({LINENUM}2463, '752/411856 ⋅ 598', Rat(28106, 25741), True, '28106/25741');
  Test({LINENUM}2464, '0 ⋅ 752/411856', 0, True, '0');
  Test({LINENUM}2465, '0 ⋅ (752/411856)', Rat(0, 1), True, '0');

//  Test({LINENUM}2467, '9223372036854775806/9223372036854775807 + 1/9223372036854775807', Rat(1, 1), True, '1');

  Test({LINENUM}2469, 'SetNumberBase(SetMinLength(SetDigitGrouping(255/256, 2), 8), 16)', Rat(255, 256), True, fs('00 00 00 FF/00 00 01 00'));


  //
  // Real numbers
  //

  Test({LINENUM}2476, '3.1415', 3.1415, True, '3.1415');
  Test({LINENUM}2477, '-3.1415', -3.1415, True, MINUS_SIGN + '3.1415');

  Test({LINENUM}2479, '3.141592653589793238', 3.141592653589793238, True, '3.14159265359');
  Test({LINENUM}2480, '-3.141592653589793238', -3.141592653589793238, True, MINUS_SIGN + '3.14159265359');

  Test({LINENUM}2482, '3', 3, True, '3');
  Test({LINENUM}2483, '3.', 3.0, True, '3');

  Test({LINENUM}2485, '-3', -3, True, MINUS_SIGN + '3');
  Test({LINENUM}2486, '-3.', -3.0, True, MINUS_SIGN + '3');

  Test({LINENUM}2488, '.1415', 0.1415, True, '0.1415');
  Test({LINENUM}2489, '-.1415', -0.1415, True, MINUS_SIGN + '0.1415');

  Test({LINENUM}2491, '.', 0.0, True, '0');
  Test({LINENUM}2492, '+.', 0.0, True, '0');
  Test({LINENUM}2493, '-.', 0.0, True, '0');
  Test({LINENUM}2494, '.+.', 0.0, True, '0');

  Test({LINENUM}2496, '123456.789', 123456.789, True, '123456.789');
  Test({LINENUM}2497, '-123456.789', -123456.789, True, MINUS_SIGN + '123456.789');

  Test({LINENUM}2499, '1/2', Rat(1, 2), True, '1/2');
  Test({LINENUM}2500, '1./2', 0.5, True, '0.5');
  Test({LINENUM}2501, '1/2.', 0.5, True, '0.5');

  Test({LINENUM}2503, '1/3', Rat(1, 3), True, '1/3');
  Test({LINENUM}2504, '1./3', 1/3, True, '0.333333333333');
  Test({LINENUM}2505, '1/3.', 1/3, True, '0.333333333333');

  Test({LINENUM}2507, '-1/2', Rat(-1, 2), True, MINUS_SIGN + '1/2');
  Test({LINENUM}2508, '-1./2', -0.5, True, MINUS_SIGN + '0.5');
  Test({LINENUM}2509, '-1/2.', -0.5, True, MINUS_SIGN + '0.5');

  Test({LINENUM}2511, '-1/3', Rat(-1, 3), True, MINUS_SIGN + '1/3');
  Test({LINENUM}2512, '-1./3', -1/3, True, MINUS_SIGN + '0.333333333333');
  Test({LINENUM}2513, '-1/3.', -1/3, True, MINUS_SIGN + '0.333333333333');

  // Format: default, number of digits

  Test({LINENUM}2517, '1./3', 1/3, True, '0.333333333333');
  Test({LINENUM}2518, '1./3 \ 2', 1/3, True, '0.33');
  Test({LINENUM}2519, '1./3 \ 3', 1/3, True, '0.333');
  Test({LINENUM}2520, '1./3 \ 4', 1/3, True, '0.3333');
  Test({LINENUM}2521, '1./3 \ 5', 1/3, True, '0.33333');
  Test({LINENUM}2522, '1./3 \ 12', 1/3, True, '0.333333333333');
  Test({LINENUM}2523, '1./3 \ 16', 1/3, True, '0.3333333333333333');

  Test({LINENUM}2525, '-1./3', -1/3, True, MINUS_SIGN + '0.333333333333');
  Test({LINENUM}2526, '-1./3 \ 2', -1/3, True, MINUS_SIGN + '0.33');
  Test({LINENUM}2527, '-1./3 \ 3', -1/3, True, MINUS_SIGN + '0.333');
  Test({LINENUM}2528, '-1./3 \ 4', -1/3, True, MINUS_SIGN + '0.3333');
  Test({LINENUM}2529, '-1./3 \ 5', -1/3, True, MINUS_SIGN + '0.33333');
  Test({LINENUM}2530, '-1./3 \ 12', -1/3, True, MINUS_SIGN + '0.333333333333');
  Test({LINENUM}2531, '-1./3 \ 16', -1/3, True, MINUS_SIGN + '0.3333333333333333');

  Test({LINENUM}2533, '1./3', 1/3, True, '0.333333333333'); // operator \ maps to SetMaxLen
  Test({LINENUM}2534, 'SetMaxLen(1./3, 2)', 1/3, True, '0.33');
  Test({LINENUM}2535, 'SetMaxLen(1./3, 3)', 1/3, True, '0.333');
  Test({LINENUM}2536, 'SetMaxLen(1./3, 4)', 1/3, True, '0.3333');
  Test({LINENUM}2537, 'SetMaxLen(1./3, 5)', 1/3, True, '0.33333');
  Test({LINENUM}2538, 'SetMaxLen(1./3, 12)', 1/3, True, '0.333333333333');
  Test({LINENUM}2539, 'SetMaxLen(1./3, 16)', 1/3, True, '0.3333333333333333');

  Test({LINENUM}2541, '-1./3', -1/3, True, MINUS_SIGN + '0.333333333333');
  Test({LINENUM}2542, 'SetMaxLen(-1./3, 2)', -1/3, True, MINUS_SIGN + '0.33');
  Test({LINENUM}2543, 'SetMaxLen(-1./3, 3)', -1/3, True, MINUS_SIGN + '0.333');
  Test({LINENUM}2544, 'SetMaxLen(-1./3, 4)', -1/3, True, MINUS_SIGN + '0.3333');
  Test({LINENUM}2545, 'SetMaxLen(-1./3, 5)', -1/3, True, MINUS_SIGN + '0.33333');
  Test({LINENUM}2546, 'SetMaxLen(-1./3, 12)', -1/3, True, MINUS_SIGN + '0.333333333333');
  Test({LINENUM}2547, 'SetMaxLen(-1./3, 16)', -1/3, True, MINUS_SIGN + '0.3333333333333333');

  Test({LINENUM}2549, '1./3', 1/3, True, '0.333333333333'); // SetMaxLen works like SetNumDigits when arg 1 is a number and arg 2 is >= 0
  Test({LINENUM}2550, 'SetNumDigits(1./3, 2)', 1/3, True, '0.33');
  Test({LINENUM}2551, 'SetNumDigits(1./3, 3)', 1/3, True, '0.333');
  Test({LINENUM}2552, 'SetNumDigits(1./3, 4)', 1/3, True, '0.3333');
  Test({LINENUM}2553, 'SetNumDigits(1./3, 5)', 1/3, True, '0.33333');
  Test({LINENUM}2554, 'SetNumDigits(1./3, 12)', 1/3, True, '0.333333333333');
  Test({LINENUM}2555, 'SetNumDigits(1./3, 16)', 1/3, True, '0.3333333333333333');

  Test({LINENUM}2557, '-1./3', -1/3, True, MINUS_SIGN + '0.333333333333');
  Test({LINENUM}2558, 'SetNumDigits(-1./3, 2)', -1/3, True, MINUS_SIGN + '0.33');
  Test({LINENUM}2559, 'SetNumDigits(-1./3, 3)', -1/3, True, MINUS_SIGN + '0.333');
  Test({LINENUM}2560, 'SetNumDigits(-1./3, 4)', -1/3, True, MINUS_SIGN + '0.3333');
  Test({LINENUM}2561, 'SetNumDigits(-1./3, 5)', -1/3, True, MINUS_SIGN + '0.33333');
  Test({LINENUM}2562, 'SetNumDigits(-1./3, 12)', -1/3, True, MINUS_SIGN + '0.333333333333');
  Test({LINENUM}2563, 'SetNumDigits(-1./3, 16)', -1/3, True, MINUS_SIGN + '0.3333333333333333');

  Test({LINENUM}2565, 'SetNumDigits(1./3, -1)', 1/3, True, '0.333333333333'); // SetNumDigits: negative count means inherit
  Test({LINENUM}2566, 'SetMaxLen(1./3, -1)', failure, 'A non-negative integer was expected as argument 2, but "-1" was given.'); // SetMaxLength requires a non-negative second argument
  Test({LINENUM}2567, '1./3 \ -1', failure, 'A non-negative integer was expected as argument 2, but "-1" was given.'); // SetMaxLength requires a non-negative second argument

  Test({LINENUM}2569, 'SetNumDigits(1./3, "a")', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}2570, 'SetMaxLen(1./3, "a")', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}2571, '1./3 \ "a"', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');

  Test({LINENUM}2573, 'SetNumDigits(1./3, 6, 10)', failure, 'Too many arguments.');
  Test({LINENUM}2574, 'SetNumDigits(1./3)', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}2576, '2./3', 2/3, True, '0.666666666667');
  Test({LINENUM}2577, '2./3 \ 2', 2/3, True, '0.67');
  Test({LINENUM}2578, '2./3 \ 3', 2/3, True, '0.667');
  Test({LINENUM}2579, '2./3 \ 4', 2/3, True, '0.6667');
  Test({LINENUM}2580, '2./3 \ 5', 2/3, True, '0.66667');
  Test({LINENUM}2581, '2./3 \ 12', 2/3, True, '0.666666666667');
  Test({LINENUM}2582, '2./3 \ 16', 2/3, True, '0.6666666666666667');

  Test({LINENUM}2584, '-2./3', -2/3, True, MINUS_SIGN + '0.666666666667');
  Test({LINENUM}2585, '-2./3 \ 2', -2/3, True, MINUS_SIGN + '0.67');
  Test({LINENUM}2586, '-2./3 \ 3', -2/3, True, MINUS_SIGN + '0.667');
  Test({LINENUM}2587, '-2./3 \ 4', -2/3, True, MINUS_SIGN + '0.6667');
  Test({LINENUM}2588, '-2./3 \ 5', -2/3, True, MINUS_SIGN + '0.66667');
  Test({LINENUM}2589, '-2./3 \ 12', -2/3, True, MINUS_SIGN + '0.666666666667');
  Test({LINENUM}2590, '-2./3 \ 16', -2/3, True, MINUS_SIGN + '0.6666666666666667');

  // Exp literals and default format's exp notation

  Test({LINENUM}2594, '7E20', 7E20, True, mm('7*10^20'));
  Test({LINENUM}2595, '1E20 + 7E20', 8E20, True, mm('8*10^20'));
  Test({LINENUM}2596, '7E-20', 7E-20, True, mm('7*10^-20'));
  Eps; Test({LINENUM}2597, '1E-20 + 7E-20', 8E-20, True, mm('8*10^-20'));
  Test({LINENUM}2598, '123.45E20', 123.45E20, True, mm('1.2345*10^22'));
  Test({LINENUM}2599, '123.45E-20', 123.45E-20, True, mm('1.2345*10^-18'));
  Test({LINENUM}2600, '-123.45E20', -123.45E20, True, mm('-1.2345*10^22'));
  Test({LINENUM}2601, '-123.45E-20', -123.45E-20, True, mm('-1.2345*10^-18'));
  Test({LINENUM}2602, '3E3 + 2E2 + 1E1 + 0E0 + 1E-1 + 2E-2 + 3E-3', 3210.123, True, mm('3210.123'));
  Test({LINENUM}2603, '-3E3 - 2E2 - 1E1 - 0E0 - 1E-1 - 2E-2 - 3E-3', -3210.123, True, mm('-3210.123'));
  Test({LINENUM}2604, '1E0', 1.0, True, '1');
  Test({LINENUM}2605, '7E0', 7.0, True, '7');
  Test({LINENUM}2606, '123456.123456E0', 123456.123456, True, '123456.123456');
  Test({LINENUM}2607, '-123456.123456E0', -123456.123456, True, MINUS_SIGN + '123456.123456');
  Test({LINENUM}2608, '12300000000000000000000000000000000000000000', 1.23E43, True, mm('1.23*10^43'));
  Test({LINENUM}2609, '-12300000000000000000000000000000000000000000', -1.23E43, True, mm('-1.23*10^43'));
  Test({LINENUM}2610, '0.0000000000000000000123', 1.23E-20, True, mm('1.23*10^-20'));
  Test({LINENUM}2611, '-0.0000000000000000000123', -1.23E-20, True, mm('-1.23*10^-20'));
  Test({LINENUM}2612, '1E20', 1E20, True, mm('1*10^20')); // a future version might skip the "1*" part
  Test({LINENUM}2613, '1E-20', 1E-20, True, mm('1*10^-20')); // -"-

  Test({LINENUM}2615, '123456.', 123456.0, True, '123456');
  Test({LINENUM}2616, '123456. \ 8', 123456.0, True, '123456');
  Test({LINENUM}2617, '123456. \ 6', 123456.0, True, '123456');
  Test({LINENUM}2618, '123456. \ 5', 123456.0, True, mm('1.2346*10^5'));
  Test({LINENUM}2619, '123456. \ 4', 123456.0, True, mm('1.235*10^5'));
  Test({LINENUM}2620, '123456. \ 3', 123456.0, True, mm('1.23*10^5'));
  Test({LINENUM}2621, '123456. \ 2', 123456.0, True, mm('1.2*10^5'));

  Test({LINENUM}2623, '-123456.', -123456.0, True, MINUS_SIGN + '123456');
  Test({LINENUM}2624, '-123456. \ 8', -123456.0, True, MINUS_SIGN + '123456');
  Test({LINENUM}2625, '-123456. \ 6', -123456.0, True, MINUS_SIGN + '123456');
  Test({LINENUM}2626, '-123456. \ 5', -123456.0, True, mm('-1.2346*10^5'));
  Test({LINENUM}2627, '-123456. \ 4', -123456.0, True, mm('-1.235*10^5'));
  Test({LINENUM}2628, '-123456. \ 3', -123456.0, True, mm('-1.23*10^5'));
  Test({LINENUM}2629, '-123456. \ 2', -123456.0, True, mm('-1.2*10^5'));

  // Format: default, pretty exp notation

  Test({LINENUM}2633, '7E20', 7E20, True, mm('7*10^20'));
  Test({LINENUM}2634, 'SetPrettyExp(7E20, true)', 7E20, True, mm('7*10^20'));
  Test({LINENUM}2635, 'SetPrettyExp(7E20, false)', 7E20, True, mm('7E20'));

  Test({LINENUM}2637, '7E-20', 7E-20, True, mm('7*10^-20'));
  Test({LINENUM}2638, 'SetPrettyExp(7E-20, true)', 7E-20, True, mm('7*10^-20'));
  Test({LINENUM}2639, 'SetPrettyExp(7E-20, false)', 7E-20, True, mm('7E-20'));

  Test({LINENUM}2641, '-7E20', -7E20, True, mm('-7*10^20'));
  Test({LINENUM}2642, 'SetPrettyExp(-7E20, true)', -7E20, True, mm('-7*10^20'));
  Test({LINENUM}2643, 'SetPrettyExp(-7E20, false)', -7E20, True, mm('-7E20'));

  Test({LINENUM}2645, '-7E-20', -7E-20, True, mm('-7*10^-20'));
  Test({LINENUM}2646, 'SetPrettyExp(-7E-20, true)', -7E-20, True, mm('-7*10^-20'));
  Test({LINENUM}2647, 'SetPrettyExp(-7E-20, false)', -7E-20, True, mm('-7E-20'));

  Test({LINENUM}2649, '-123456. \ 2', -123456.0, True, mm('-1.2*10^5'));
  Test({LINENUM}2650, 'SetPrettyExp(-123456., true) \ 2', -123456.0, True, mm('-1.2*10^5'));
  Test({LINENUM}2651, 'SetPrettyExp(-123456., false) \ 2', -123456.0, True, mm('-1.2E5'));
  Test({LINENUM}2652, 'SetPrettyExp(-123456. \ 2, false)', -123456.0, True, mm('-1.2E5'));

  Test({LINENUM}2654, 'SetPrettyExp(7E20, 7)', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}2655, 'SetPrettyExp(7E20)', failure, 'Too few arguments. A required argument of type boolean is missing.');
  Test({LINENUM}2656, 'SetPrettyExp(7E20, true, 2)', failure, 'Too many arguments.');

  // Format: fixed, number of digits

  Test({LINENUM}2660, '123.45678', 123.45678, True, '123.45678');
  Test({LINENUM}2661, 'SetNumberFormat(123.45678, "inherited")', 123.45678, True, '123.45678');
  Test({LINENUM}2662, 'SetNumberFormat(123.45678, "default")', 123.45678, True, '123.45678');
  Test({LINENUM}2663, 'SetNumberFormat(123.45678, "fixed")', 123.45678, True, '123.456780000000');
  Test({LINENUM}2664, 'SetNumberFormat(123.45678, "fixed") \ 10', 123.45678, True, '123.4567800000');
  Test({LINENUM}2665, 'SetNumberFormat(123.45678, "fixed") \ 8', 123.45678, True, '123.45678000');
  Test({LINENUM}2666, 'SetNumberFormat(123.45678, "fixed") \ 6', 123.45678, True, '123.456780');
  Test({LINENUM}2667, 'SetNumberFormat(123.45678, "fixed") \ 3', 123.45678, True, '123.457');
  Test({LINENUM}2668, 'SetNumberFormat(123.45678, "fixed") \ 2', 123.45678, True, '123.46');
  Test({LINENUM}2669, 'SetNumberFormat(123.45678, "fixed") \ 1', 123.45678, True, '123.5');
  Test({LINENUM}2670, 'SetNumberFormat(123.45678, "fixed") \ 0', 123.45678, True, '123');

  Test({LINENUM}2672, 'SetNumberFormat(123.45678, "default") \ 10', 123.45678, True, '123.45678');
  Test({LINENUM}2673, 'SetNumberFormat(123.45678, "default") \ 8', 123.45678, True, '123.45678');
  Test({LINENUM}2674, 'SetNumberFormat(123.45678, "default") \ 6', 123.45678, True, '123.457');
  Test({LINENUM}2675, 'SetNumberFormat(123.45678, "default") \ 3', 123.45678, True, '123');
  Test({LINENUM}2676, 'SetNumberFormat(123.45678, "default") \ 2', 123.45678, True, mm('1.2*10^2'));

  Test({LINENUM}2678, '-123.45678', -123.45678, True, MINUS_SIGN + '123.45678');
  Test({LINENUM}2679, 'SetNumberFormat(-123.45678, "inherited")', -123.45678, True, MINUS_SIGN + '123.45678');
  Test({LINENUM}2680, 'SetNumberFormat(-123.45678, "default")', -123.45678, True, MINUS_SIGN + '123.45678');
  Test({LINENUM}2681, 'SetNumberFormat(-123.45678, "fixed")', -123.45678, True, MINUS_SIGN + '123.456780000000');
  Test({LINENUM}2682, 'SetNumberFormat(-123.45678, "fixed") \ 10', -123.45678, True, MINUS_SIGN + '123.4567800000');
  Test({LINENUM}2683, 'SetNumberFormat(-123.45678, "fixed") \ 8', -123.45678, True, MINUS_SIGN + '123.45678000');
  Test({LINENUM}2684, 'SetNumberFormat(-123.45678, "fixed") \ 6', -123.45678, True, MINUS_SIGN + '123.456780');
  Test({LINENUM}2685, 'SetNumberFormat(-123.45678, "fixed") \ 3', -123.45678, True, MINUS_SIGN + '123.457');
  Test({LINENUM}2686, 'SetNumberFormat(-123.45678, "fixed") \ 2', -123.45678, True, MINUS_SIGN + '123.46');
  Test({LINENUM}2687, 'SetNumberFormat(-123.45678, "fixed") \ 1', -123.45678, True, MINUS_SIGN + '123.5');
  Test({LINENUM}2688, 'SetNumberFormat(-123.45678, "fixed") \ 0', -123.45678, True, MINUS_SIGN + '123');

  Test({LINENUM}2690, 'SetNumberFormat(-123.45678, "default") \ 10', -123.45678, True, MINUS_SIGN + '123.45678');
  Test({LINENUM}2691, 'SetNumberFormat(-123.45678, "default") \ 8', -123.45678, True, MINUS_SIGN + '123.45678');
  Test({LINENUM}2692, 'SetNumberFormat(-123.45678, "default") \ 6', -123.45678, True, MINUS_SIGN + '123.457');
  Test({LINENUM}2693, 'SetNumberFormat(-123.45678, "default") \ 3', -123.45678, True, MINUS_SIGN + '123');
  Test({LINENUM}2694, 'SetNumberFormat(-123.45678, "default") \ 2', -123.45678, True, mm('-1.2*10^2'));

  // Format: fixed, large and small numbers

  Test({LINENUM}2698, 'SetNumberFormat(123.456E20, "fixed")', 123.456E20, True, mm('1.23456*10^22')); // reasonable to give up "fixed"
  Test({LINENUM}2699, 'SetNumberFormat(-123.456E20, "fixed")', -123.456E20, True, mm('-1.23456*10^22'));

  Test({LINENUM}2701, 'SetNumberFormat(123.456E-20, "fixed") \ 10', 123.456E-20, True, mm('0.0000000000')); // obvious
  Test({LINENUM}2702, 'SetNumberFormat(-123.456E-20, "fixed") \ 10', -123.456E-20, True, mm('0.0000000000'));

  // Format: scientific

  Test({LINENUM}2706, '123.4567', 123.4567, True, '123.4567');
  Test({LINENUM}2707, 'SetNumberFormat(123.4567, "default") \ 10', 123.4567, True, mm('123.4567'));
  Test({LINENUM}2708, 'SetNumberFormat(123.4567, "fixed") \ 10', 123.4567, True, mm('123.4567000000'));
  Test({LINENUM}2709, 'SetNumberFormat(123.4567, "scientific") \ 10', 123.4567, True, mm('1.234567000*10^2'));

  Test({LINENUM}2711, 'SetNumberFormat(123.4567, "default") \ 8', 123.4567, True, mm('123.4567'));
  Test({LINENUM}2712, 'SetNumberFormat(123.4567, "fixed") \ 8', 123.4567, True, mm('123.45670000'));
  Test({LINENUM}2713, 'SetNumberFormat(123.4567, "scientific") \ 8', 123.4567, True, mm('1.2345670*10^2'));

  Test({LINENUM}2715, 'SetNumberFormat(123.4567, "default") \ 6', 123.4567, True, mm('123.457'));
  Test({LINENUM}2716, 'SetNumberFormat(123.4567, "fixed") \ 6', 123.4567, True, mm('123.456700'));
  Test({LINENUM}2717, 'SetNumberFormat(123.4567, "scientific") \ 6', 123.4567, True, mm('1.23457*10^2'));

  Test({LINENUM}2719, 'SetNumberFormat(123.4567, "default") \ 4', 123.4567, True, mm('123.5'));
  Test({LINENUM}2720, 'SetNumberFormat(123.4567, "fixed") \ 4', 123.4567, True, mm('123.4567'));
  Test({LINENUM}2721, 'SetNumberFormat(123.4567, "scientific") \ 4', 123.4567, True, mm('1.235*10^2'));

  Test({LINENUM}2723, 'SetNumberFormat(123.4567, "default") \ 2', 123.4567, True, mm('1.2*10^2'));
  Test({LINENUM}2724, 'SetNumberFormat(123.4567, "fixed") \ 2', 123.4567, True, mm('123.46'));
  Test({LINENUM}2725, 'SetNumberFormat(123.4567, "scientific") \ 2', 123.4567, True, mm('1.2*10^2'));

  Test({LINENUM}2727, '-123.4567', -123.4567, True, MINUS_SIGN + '123.4567');
  Test({LINENUM}2728, 'SetNumberFormat(-123.4567, "default") \ 10', -123.4567, True, mm('-123.4567'));
  Test({LINENUM}2729, 'SetNumberFormat(-123.4567, "fixed") \ 10', -123.4567, True, mm('-123.4567000000'));
  Test({LINENUM}2730, 'SetNumberFormat(-123.4567, "scientific") \ 10', -123.4567, True, mm('-1.234567000*10^2'));

  Test({LINENUM}2732, 'SetNumberFormat(-123.4567, "default") \ 8', -123.4567, True, mm('-123.4567'));
  Test({LINENUM}2733, 'SetNumberFormat(-123.4567, "fixed") \ 8', -123.4567, True, mm('-123.45670000'));
  Test({LINENUM}2734, 'SetNumberFormat(-123.4567, "scientific") \ 8', -123.4567, True, mm('-1.2345670*10^2'));

  Test({LINENUM}2736, 'SetNumberFormat(-123.4567, "default") \ 6', -123.4567, True, mm('-123.457'));
  Test({LINENUM}2737, 'SetNumberFormat(-123.4567, "fixed") \ 6', -123.4567, True, mm('-123.456700'));
  Test({LINENUM}2738, 'SetNumberFormat(-123.4567, "scientific") \ 6', -123.4567, True, mm('-1.23457*10^2'));

  Test({LINENUM}2740, 'SetNumberFormat(-123.4567, "default") \ 4', -123.4567, True, mm('-123.5'));
  Test({LINENUM}2741, 'SetNumberFormat(-123.4567, "fixed") \ 4', -123.4567, True, mm('-123.4567'));
  Test({LINENUM}2742, 'SetNumberFormat(-123.4567, "scientific") \ 4', -123.4567, True, mm('-1.235*10^2'));

  Test({LINENUM}2744, 'SetNumberFormat(-123.4567, "default") \ 2', -123.4567, True, mm('-1.2*10^2'));
  Test({LINENUM}2745, 'SetNumberFormat(-123.4567, "fixed") \ 2', -123.4567, True, mm('-123.46'));
  Test({LINENUM}2746, 'SetNumberFormat(-123.4567, "scientific") \ 2', -123.4567, True, mm('-1.2*10^2'));

  // Format: scientific, pretty exp off

  Test({LINENUM}2750, 'SetPrettyExp(SetNumberFormat(-123.4567, "default"), false) \ 2', -123.4567, True, mm('-1.2E2'));
  Test({LINENUM}2751, 'SetPrettyExp(SetNumberFormat(-123.4567, "fixed"), false) \ 2', -123.4567, True, mm('-123.46'));
  Test({LINENUM}2752, 'SetPrettyExp(SetNumberFormat(-123.4567, "scientific"), false) \ 2', -123.4567, True, mm('-1.2E+2'));

  Test({LINENUM}2754, 'SetPrettyExp(1E20, false)', 1E20, True, '1E20');
  Test({LINENUM}2755, 'SetPrettyExp(SetNumberFormat(1E20, "default") \ 4, false)', 1E20, True, '1E20');
  Test({LINENUM}2756, 'SetPrettyExp(SetNumberFormat(1E20, "scientific") \ 4, false)', 1E20, True, '1.000E+20');

  Test({LINENUM}2758, 'SetPrettyExp(-1E20, false)', -1E20, True, mm('-1E20'));
  Test({LINENUM}2759, 'SetPrettyExp(SetNumberFormat(-1E20, "default") \ 4, false)', -1E20, True, mm('-1E20'));
  Test({LINENUM}2760, 'SetPrettyExp(SetNumberFormat(-1E20, "scientific") \ 4, false)', -1E20, True, mm('-1.000E+20'));

  Test({LINENUM}2762, 'SetPrettyExp(1E-20, false)', 1E-20, True, mm('1E-20'));
  Test({LINENUM}2763, 'SetPrettyExp(SetNumberFormat(1E-20, "default") \ 4, false)', 1E-20, True, mm('1E-20'));
  Test({LINENUM}2764, 'SetPrettyExp(SetNumberFormat(1E-20, "scientific") \ 4, false)', 1E-20, True, mm('1.000E-20'));

  // Format: digit grouping (default style, no exps)

  Test({LINENUM}2768, 'SetDigitGrouping(123456.123456, -1)', 123456.123456, True, '123456.123456');
  Test({LINENUM}2769, 'SetDigitGrouping(123456.123456, 0)', 123456.123456, True, '123456.123456');
  Test({LINENUM}2770, 'SetDigitGrouping(123456.123456, 1)', 123456.123456, True, fs('1 2 3 4 5 6.1 2 3 4 5 6'));
  Test({LINENUM}2771, 'SetDigitGrouping(123456.123456, 2)', 123456.123456, True, fs('12 34 56.12 34 56'));
  Test({LINENUM}2772, 'SetDigitGrouping(123456.123456, 3)', 123456.123456, True, fs('123 456.123 456'));
  Test({LINENUM}2773, 'SetDigitGrouping(123456.123456, 4)', 123456.123456, True, fs('12 3456.1234 56'));
  Test({LINENUM}2774, 'SetDigitGrouping(123456.123456, 5)', 123456.123456, True, fs('1 23456.12345 6'));
  Test({LINENUM}2775, 'SetDigitGrouping(123456.123456, 6)', 123456.123456, True, fs('123456.123456'));
  Test({LINENUM}2776, 'SetDigitGrouping(123456.123456, 7)', 123456.123456, True, fs('123456.123456'));
  Test({LINENUM}2777, 'SetDigitGrouping(123456.123456, 8)', 123456.123456, True, fs('123456.123456'));

  Test({LINENUM}2779, 'SetDigitGrouping(-123456.123456, -1)', -123456.123456, True, MINUS_SIGN + '123456.123456');
  Test({LINENUM}2780, 'SetDigitGrouping(-123456.123456, 0)', -123456.123456, True, MINUS_SIGN + '123456.123456');
  Test({LINENUM}2781, 'SetDigitGrouping(-123456.123456, 1)', -123456.123456, True, MINUS_SIGN + fs('1 2 3 4 5 6.1 2 3 4 5 6'));
  Test({LINENUM}2782, 'SetDigitGrouping(-123456.123456, 2)', -123456.123456, True, MINUS_SIGN + fs('12 34 56.12 34 56'));
  Test({LINENUM}2783, 'SetDigitGrouping(-123456.123456, 3)', -123456.123456, True, MINUS_SIGN + fs('123 456.123 456'));
  Test({LINENUM}2784, 'SetDigitGrouping(-123456.123456, 4)', -123456.123456, True, MINUS_SIGN + fs('12 3456.1234 56'));
  Test({LINENUM}2785, 'SetDigitGrouping(-123456.123456, 5)', -123456.123456, True, MINUS_SIGN + fs('1 23456.12345 6'));
  Test({LINENUM}2786, 'SetDigitGrouping(-123456.123456, 6)', -123456.123456, True, MINUS_SIGN + fs('123456.123456'));
  Test({LINENUM}2787, 'SetDigitGrouping(-123456.123456, 7)', -123456.123456, True, MINUS_SIGN + fs('123456.123456'));
  Test({LINENUM}2788, 'SetDigitGrouping(-123456.123456, 8)', -123456.123456, True, MINUS_SIGN + fs('123456.123456'));

  // Format: digit grouping (default style, with exps)

  Test({LINENUM}2792, 'SetDigitGrouping(1.23456123456E20, -1)', 1.23456123456E20, True, mm(fs('1.23456123456*10^20')));
  Test({LINENUM}2793, 'SetDigitGrouping(1.23456123456E20, 0)', 1.23456123456E20, True, mm(fs('1.23456123456*10^20')));
  Test({LINENUM}2794, 'SetDigitGrouping(1.23456123456E20, 1)', 1.23456123456E20, True, mm(fs('1.2 3 4 5 6 1 2 3 4 5 6*10^20')));
  Test({LINENUM}2795, 'SetDigitGrouping(1.23456123456E20, 2)', 1.23456123456E20, True, mm(fs('1.23 45 61 23 45 6*10^20')));
  Test({LINENUM}2796, 'SetDigitGrouping(1.23456123456E20, 3)', 1.23456123456E20, True, mm(fs('1.234 561 234 56*10^20')));
  Test({LINENUM}2797, 'SetDigitGrouping(1.23456123456E20, 4)', 1.23456123456E20, True, mm(fs('1.2345 6123 456*10^20')));
  Test({LINENUM}2798, 'SetDigitGrouping(1.23456123456E20, 5)', 1.23456123456E20, True, mm(fs('1.23456 12345 6*10^20')));
  Test({LINENUM}2799, 'SetDigitGrouping(1.23456123456E20, 6)', 1.23456123456E20, True, mm(fs('1.234561 23456*10^20')));
  Test({LINENUM}2800, 'SetDigitGrouping(1.23456123456E20, 7)', 1.23456123456E20, True, mm(fs('1.2345612 3456*10^20')));
  Test({LINENUM}2801, 'SetDigitGrouping(1.23456123456E20, 8)', 1.23456123456E20, True, mm(fs('1.23456123 456*10^20')));
  Test({LINENUM}2802, 'SetDigitGrouping(1.23456123456E20, 9)', 1.23456123456E20, True, mm(fs('1.234561234 56*10^20')));
  Test({LINENUM}2803, 'SetDigitGrouping(1.23456123456E20, 10)', 1.23456123456E20, True, mm(fs('1.2345612345 6*10^20')));
  Test({LINENUM}2804, 'SetDigitGrouping(1.23456123456E20, 11)', 1.23456123456E20, True, mm(fs('1.23456123456*10^20')));
  Test({LINENUM}2805, 'SetDigitGrouping(1.23456123456E20, 12)', 1.23456123456E20, True, mm(fs('1.23456123456*10^20')));

  Test({LINENUM}2807, 'SetDigitGrouping(1.23456123456E-20, -1)', 1.23456123456E-20, True, mm(fs('1.23456123456*10^-20')));
  Test({LINENUM}2808, 'SetDigitGrouping(1.23456123456E-20, 0)', 1.23456123456E-20, True, mm(fs('1.23456123456*10^-20')));
  Test({LINENUM}2809, 'SetDigitGrouping(1.23456123456E-20, 1)', 1.23456123456E-20, True, mm(fs('1.2 3 4 5 6 1 2 3 4 5 6*10^-20')));
  Test({LINENUM}2810, 'SetDigitGrouping(1.23456123456E-20, 2)', 1.23456123456E-20, True, mm(fs('1.23 45 61 23 45 6*10^-20')));
  Test({LINENUM}2811, 'SetDigitGrouping(1.23456123456E-20, 3)', 1.23456123456E-20, True, mm(fs('1.234 561 234 56*10^-20')));
  Test({LINENUM}2812, 'SetDigitGrouping(1.23456123456E-20, 4)', 1.23456123456E-20, True, mm(fs('1.2345 6123 456*10^-20')));
  Test({LINENUM}2813, 'SetDigitGrouping(1.23456123456E-20, 5)', 1.23456123456E-20, True, mm(fs('1.23456 12345 6*10^-20')));
  Test({LINENUM}2814, 'SetDigitGrouping(1.23456123456E-20, 6)', 1.23456123456E-20, True, mm(fs('1.234561 23456*10^-20')));
  Test({LINENUM}2815, 'SetDigitGrouping(1.23456123456E-20, 7)', 1.23456123456E-20, True, mm(fs('1.2345612 3456*10^-20')));
  Test({LINENUM}2816, 'SetDigitGrouping(1.23456123456E-20, 8)', 1.23456123456E-20, True, mm(fs('1.23456123 456*10^-20')));
  Test({LINENUM}2817, 'SetDigitGrouping(1.23456123456E-20, 9)', 1.23456123456E-20, True, mm(fs('1.234561234 56*10^-20')));
  Test({LINENUM}2818, 'SetDigitGrouping(1.23456123456E-20, 10)', 1.23456123456E-20, True, mm(fs('1.2345612345 6*10^-20')));
  Test({LINENUM}2819, 'SetDigitGrouping(1.23456123456E-20, 11)', 1.23456123456E-20, True, mm(fs('1.23456123456*10^-20')));
  Test({LINENUM}2820, 'SetDigitGrouping(1.23456123456E-20, 12)', 1.23456123456E-20, True, mm(fs('1.23456123456*10^-20')));

  Test({LINENUM}2822, 'SetDigitGrouping(-1.23456123456E20, -1)', -1.23456123456E20, True, mm(fs('-1.23456123456*10^20')));
  Test({LINENUM}2823, 'SetDigitGrouping(-1.23456123456E20, 0)', -1.23456123456E20, True, mm(fs('-1.23456123456*10^20')));
  Test({LINENUM}2824, 'SetDigitGrouping(-1.23456123456E20, 1)', -1.23456123456E20, True, mm(fs('-1.2 3 4 5 6 1 2 3 4 5 6*10^20')));
  Test({LINENUM}2825, 'SetDigitGrouping(-1.23456123456E20, 2)', -1.23456123456E20, True, mm(fs('-1.23 45 61 23 45 6*10^20')));
  Test({LINENUM}2826, 'SetDigitGrouping(-1.23456123456E20, 3)', -1.23456123456E20, True, mm(fs('-1.234 561 234 56*10^20')));
  Test({LINENUM}2827, 'SetDigitGrouping(-1.23456123456E20, 4)', -1.23456123456E20, True, mm(fs('-1.2345 6123 456*10^20')));
  Test({LINENUM}2828, 'SetDigitGrouping(-1.23456123456E20, 5)', -1.23456123456E20, True, mm(fs('-1.23456 12345 6*10^20')));
  Test({LINENUM}2829, 'SetDigitGrouping(-1.23456123456E20, 6)', -1.23456123456E20, True, mm(fs('-1.234561 23456*10^20')));
  Test({LINENUM}2830, 'SetDigitGrouping(-1.23456123456E20, 7)', -1.23456123456E20, True, mm(fs('-1.2345612 3456*10^20')));
  Test({LINENUM}2831, 'SetDigitGrouping(-1.23456123456E20, 8)', -1.23456123456E20, True, mm(fs('-1.23456123 456*10^20')));
  Test({LINENUM}2832, 'SetDigitGrouping(-1.23456123456E20, 9)', -1.23456123456E20, True, mm(fs('-1.234561234 56*10^20')));
  Test({LINENUM}2833, 'SetDigitGrouping(-1.23456123456E20, 10)', -1.23456123456E20, True, mm(fs('-1.2345612345 6*10^20')));
  Test({LINENUM}2834, 'SetDigitGrouping(-1.23456123456E20, 11)', -1.23456123456E20, True, mm(fs('-1.23456123456*10^20')));
  Test({LINENUM}2835, 'SetDigitGrouping(-1.23456123456E20, 12)', -1.23456123456E20, True, mm(fs('-1.23456123456*10^20')));

  Test({LINENUM}2837, 'SetDigitGrouping(-1.23456123456E-20, -1)', -1.23456123456E-20, True, mm(fs('-1.23456123456*10^-20')));
  Test({LINENUM}2838, 'SetDigitGrouping(-1.23456123456E-20, 0)', -1.23456123456E-20, True, mm(fs('-1.23456123456*10^-20')));
  Test({LINENUM}2839, 'SetDigitGrouping(-1.23456123456E-20, 1)', -1.23456123456E-20, True, mm(fs('-1.2 3 4 5 6 1 2 3 4 5 6*10^-20')));
  Test({LINENUM}2840, 'SetDigitGrouping(-1.23456123456E-20, 2)', -1.23456123456E-20, True, mm(fs('-1.23 45 61 23 45 6*10^-20')));
  Test({LINENUM}2841, 'SetDigitGrouping(-1.23456123456E-20, 3)', -1.23456123456E-20, True, mm(fs('-1.234 561 234 56*10^-20')));
  Test({LINENUM}2842, 'SetDigitGrouping(-1.23456123456E-20, 4)', -1.23456123456E-20, True, mm(fs('-1.2345 6123 456*10^-20')));
  Test({LINENUM}2843, 'SetDigitGrouping(-1.23456123456E-20, 5)', -1.23456123456E-20, True, mm(fs('-1.23456 12345 6*10^-20')));
  Test({LINENUM}2844, 'SetDigitGrouping(-1.23456123456E-20, 6)', -1.23456123456E-20, True, mm(fs('-1.234561 23456*10^-20')));
  Test({LINENUM}2845, 'SetDigitGrouping(-1.23456123456E-20, 7)', -1.23456123456E-20, True, mm(fs('-1.2345612 3456*10^-20')));
  Test({LINENUM}2846, 'SetDigitGrouping(-1.23456123456E-20, 8)', -1.23456123456E-20, True, mm(fs('-1.23456123 456*10^-20')));
  Test({LINENUM}2847, 'SetDigitGrouping(-1.23456123456E-20, 9)', -1.23456123456E-20, True, mm(fs('-1.234561234 56*10^-20')));
  Test({LINENUM}2848, 'SetDigitGrouping(-1.23456123456E-20, 10)', -1.23456123456E-20, True, mm(fs('-1.2345612345 6*10^-20')));
  Test({LINENUM}2849, 'SetDigitGrouping(-1.23456123456E-20, 11)', -1.23456123456E-20, True, mm(fs('-1.23456123456*10^-20')));
  Test({LINENUM}2850, 'SetDigitGrouping(-1.23456123456E-20, 12)', -1.23456123456E-20, True, mm(fs('-1.23456123456*10^-20')));

  // Format: digit grouping (fixed)

  Test({LINENUM}2854, 'SetNumberFormat(1234.56789, "fixed") \ 6', 1234.56789, True, '1234.567890');
  Test({LINENUM}2855, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 6, -1)', 1234.56789, True, fs('1234.567890'));
  Test({LINENUM}2856, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 6, 0)', 1234.56789, True, fs('1234.567890'));
  Test({LINENUM}2857, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 6, 1)', 1234.56789, True, fs('1 2 3 4.5 6 7 8 9 0'));
  Test({LINENUM}2858, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 6, 2)', 1234.56789, True, fs('12 34.56 78 90'));
  Test({LINENUM}2859, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 6, 3)', 1234.56789, True, fs('1 234.567 890'));
  Test({LINENUM}2860, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 6, 4)', 1234.56789, True, fs('1234.5678 90'));
  Test({LINENUM}2861, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 6, 5)', 1234.56789, True, fs('1234.56789 0'));
  Test({LINENUM}2862, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 6, 6)', 1234.56789, True, fs('1234.567890'));
  Test({LINENUM}2863, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 6, 7)', 1234.56789, True, fs('1234.567890'));
  Test({LINENUM}2864, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 6, 8)', 1234.56789, True, fs('1234.567890'));

  Test({LINENUM}2866, 'SetNumberFormat(1234.56789, "fixed") \ 10', 1234.56789, True, '1234.5678900000');
  Test({LINENUM}2867, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, -1)', 1234.56789, True, fs('1234.5678900000'));
  Test({LINENUM}2868, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 0)', 1234.56789, True, fs('1234.5678900000'));
  Test({LINENUM}2869, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 1)', 1234.56789, True, fs('1 2 3 4.5 6 7 8 9 0 0 0 0 0'));
  Test({LINENUM}2870, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 2)', 1234.56789, True, fs('12 34.56 78 90 00 00'));
  Test({LINENUM}2871, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 3)', 1234.56789, True, fs('1 234.567 890 000 0'));
  Test({LINENUM}2872, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 4)', 1234.56789, True, fs('1234.5678 9000 00'));
  Test({LINENUM}2873, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 5)', 1234.56789, True, fs('1234.56789 00000'));
  Test({LINENUM}2874, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 6)', 1234.56789, True, fs('1234.567890 0000'));
  Test({LINENUM}2875, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 7)', 1234.56789, True, fs('1234.5678900 000'));
  Test({LINENUM}2876, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 8)', 1234.56789, True, fs('1234.56789000 00'));
  Test({LINENUM}2877, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 9)', 1234.56789, True, fs('1234.567890000 0'));
  Test({LINENUM}2878, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 10)', 1234.56789, True, fs('1234.5678900000'));
  Test({LINENUM}2879, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 11)', 1234.56789, True, fs('1234.5678900000'));
  Test({LINENUM}2880, 'SetDigitGrouping(SetNumberFormat(1234.56789, "fixed") \ 10, 12)', 1234.56789, True, fs('1234.5678900000'));

  Test({LINENUM}2882, 'SetNumberFormat(-1234.56789, "fixed") \ 6', -1234.56789, True, mm('-1234.567890'));
  Test({LINENUM}2883, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 6, -1)', -1234.56789, True, fs(mm('-1234.567890')));
  Test({LINENUM}2884, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 6, 0)', -1234.56789, True, fs(mm('-1234.567890')));
  Test({LINENUM}2885, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 6, 1)', -1234.56789, True, fs(mm('-1 2 3 4.5 6 7 8 9 0')));
  Test({LINENUM}2886, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 6, 2)', -1234.56789, True, fs(mm('-12 34.56 78 90')));
  Test({LINENUM}2887, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 6, 3)', -1234.56789, True, fs(mm('-1 234.567 890')));
  Test({LINENUM}2888, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 6, 4)', -1234.56789, True, fs(mm('-1234.5678 90')));
  Test({LINENUM}2889, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 6, 5)', -1234.56789, True, fs(mm('-1234.56789 0')));
  Test({LINENUM}2890, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 6, 6)', -1234.56789, True, fs(mm('-1234.567890')));
  Test({LINENUM}2891, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 6, 7)', -1234.56789, True, fs(mm('-1234.567890')));
  Test({LINENUM}2892, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 6, 8)', -1234.56789, True, fs(mm('-1234.567890')));

  Test({LINENUM}2894, 'SetNumberFormat(-1234.56789, "fixed") \ 10', -1234.56789, True, mm('-1234.5678900000'));
  Test({LINENUM}2895, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, -1)', -1234.56789, True, fs(mm('-1234.5678900000')));
  Test({LINENUM}2896, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 0)', -1234.56789, True, fs(mm('-1234.5678900000')));
  Test({LINENUM}2897, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 1)', -1234.56789, True, fs(mm('-1 2 3 4.5 6 7 8 9 0 0 0 0 0')));
  Test({LINENUM}2898, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 2)', -1234.56789, True, fs(mm('-12 34.56 78 90 00 00')));
  Test({LINENUM}2899, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 3)', -1234.56789, True, fs(mm('-1 234.567 890 000 0')));
  Test({LINENUM}2900, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 4)', -1234.56789, True, fs(mm('-1234.5678 9000 00')));
  Test({LINENUM}2901, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 5)', -1234.56789, True, fs(mm('-1234.56789 00000')));
  Test({LINENUM}2902, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 6)', -1234.56789, True, fs(mm('-1234.567890 0000')));
  Test({LINENUM}2903, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 7)', -1234.56789, True, fs(mm('-1234.5678900 000')));
  Test({LINENUM}2904, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 8)', -1234.56789, True, fs(mm('-1234.56789000 00')));
  Test({LINENUM}2905, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 9)', -1234.56789, True, fs(mm('-1234.567890000 0')));
  Test({LINENUM}2906, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 10)', -1234.56789, True, fs(mm('-1234.5678900000')));
  Test({LINENUM}2907, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 11)', -1234.56789, True, fs(mm('-1234.5678900000')));
  Test({LINENUM}2908, 'SetDigitGrouping(SetNumberFormat(-1234.56789, "fixed") \ 10, 12)', -1234.56789, True, fs(mm('-1234.5678900000')));


  //
  // Complex numbers
  //

  Test({LINENUM}2915, 'i', ImaginaryUnit, True, 'i');
  Test({LINENUM}2916, '−i', -ImaginaryUnit, True, '−i');
  Test({LINENUM}2917, '77⋅i', 77*ImaginaryUnit, True, '77⋅i');
  Test({LINENUM}2918, '−77⋅i', -77*ImaginaryUnit, True, '−77⋅i');
  Test({LINENUM}2919, '−1⋅i', -ImaginaryUnit, True, '−i');
  Test({LINENUM}2920, 'i^2', TASC(-1), True, mm('-1'));
  Test({LINENUM}2921, '1+i', 1 + ImaginaryUnit, True, mm('1 + i'));
  Test({LINENUM}2922, '7.5+i', 7.5 + ImaginaryUnit, True, mm('7.5 + i'));
  Test({LINENUM}2923, '7.5-i', 7.5 - ImaginaryUnit, True, mm('7.5 - i'));
  Test({LINENUM}2924, '2+3⋅i', 2 + 3*ImaginaryUnit, True, mm('2 + 3*i'));
  Test({LINENUM}2925, '-1+i', -1 + ImaginaryUnit, True, mm('-1 + i'));
  Test({LINENUM}2926, '-2+3⋅i', -2 + 3*ImaginaryUnit, True, mm('-2 + 3*i'));
  Test({LINENUM}2927, '1-i', 1 - ImaginaryUnit, True, mm('1 - i'));
  Test({LINENUM}2928, '2-3⋅i', 2 - 3*ImaginaryUnit, True, mm('2 - 3*i'));
  Test({LINENUM}2929, '-1-i', -1 - ImaginaryUnit, True, mm('-1 - i'));
  Test({LINENUM}2930, '-2-3⋅i', -2 - 3*ImaginaryUnit, True, mm('-2 - 3*i'));
  Test({LINENUM}2931, 'sqrt(-1)', ImaginaryUnit, True, 'i');
  Eps; Test({LINENUM}2932, 'i^i', TASC(exp(-pi/2)));
  Eps; Test({LINENUM}2933, 'arcsin(-2)', -1.57079632679489662 + 1.31695789692481671*ImaginaryUnit);
  Test({LINENUM}2934, '1/3 + i/3', 1/3 + ImaginaryUnit/3, True, '0.333333333333 + 0.333333333333⋅i');
  Test({LINENUM}2935, '(1/3 + i/3) \ 5', 1/3 + ImaginaryUnit/3, True, '0.33333 + 0.33333⋅i');
  Test({LINENUM}2936, '(1/3 + i/3) \ 2', 1/3 + ImaginaryUnit/3, True, '0.33 + 0.33⋅i');


  //
  // Booleans
  //

  Test({LINENUM}2943, 'true', true);
  Test({LINENUM}2944, 'false', false);
  Test({LINENUM}2945, 'true ∧ true ∧ true', true);
  Test({LINENUM}2946, 'false ∧ true ∧ true', false);
  Test({LINENUM}2947, 'true ∧ false ∧ true', false);
  Test({LINENUM}2948, 'true ∧ true ∧ false', false);
  Test({LINENUM}2949, 'false ∨ false ∨ false ∨ false', false);
  Test({LINENUM}2950, 'false ∨ false ∨ true ∨ false', true);
  Test({LINENUM}2951, '¬false', true);
  Test({LINENUM}2952, '¬true', false);
  Test({LINENUM}2953, '¬¬¬¬¬¬¬¬¬¬true', true);
  Test({LINENUM}2954, '¬¬¬¬¬¬¬¬¬¬¬true', false);


  //
  // Strings
  //

  Test({LINENUM}2961, '"Lorem ipsum"', 'Lorem ipsum', True, 'Lorem ipsum');
  Test({LINENUM}2962, '"cat"', 'cat', True, 'cat');
  Test({LINENUM}2963, '""', '', True, '');
  Test({LINENUM}2964, '"Lorem" + " " + "ipsum"', 'Lorem ipsum', True, 'Lorem ipsum');
  Test({LINENUM}2965, '"Lorem" ~ " " ~ "ipsum"', 'Lorem ipsum', True, 'Lorem ipsum');
  Test({LINENUM}2966, '"cat" + "" + ""', 'cat', True, 'cat');
  Test({LINENUM}2967, '"cat" ~ "" ~ ""', 'cat', True, 'cat');
  Test({LINENUM}2968, '"" + "cat"', 'cat', True, 'cat');
  Test({LINENUM}2969, '"" ~ "cat"', 'cat', True, 'cat');
  Test({LINENUM}2970, '"" + ""', '', True, '');
  Test({LINENUM}2971, '"" ~ ""', '', True, '');

  _s2 := DupeString('cat ', 250) + '…';           Assert(_s2.Length - 1 = 1000);

  _s := 'cat' + DupeString(' cat', 100);
  Test({LINENUM}2976, '"' + _s + '"', _s, True, _s);

  _s := 'cat' + DupeString(' cat', 1000);
  Test({LINENUM}2979, '"' + _s + '"', _s, True, _s2);

  _s := 'cat' + DupeString(' cat', 10000);
  Test({LINENUM}2982, '"' + _s + '"', _s, True, _s2);

  _s := 'cat' + DupeString(' cat', 100000);
  Test({LINENUM}2985, '"' + _s + '"', _s, True, _s2);

  _s := 'cat' + DupeString(' cat', 1000000);
  Test({LINENUM}2988, '"' + _s + '"', _s, True, _s2);

  _s := 'cat' + DupeString(' cat', 10000000);
  Test({LINENUM}2991, '"' + _s + '"', _s, True, _s2);

  _s := 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
  Test({LINENUM}2994, '"' + _s + '"', _s, True, _s);
  Test({LINENUM}2995, '"' + _s + '" \11', _s, True, 'Lorem ipsum…');
  Test({LINENUM}2996, '"' + _s + '" \5', _s, True, 'Lorem…');
  Test({LINENUM}2997, '"' + _s + '" \2', _s, True, 'Lo…');
  Test({LINENUM}2998, '"' + _s + '" \1', _s, True, 'L…');

  Test({LINENUM}3000, 'SetMaxLen("' + _s + '", 11)', _s, True, 'Lorem ipsum…');

  Test({LINENUM}3002, '"' + _s + '" \0', _s, True, _s);
  Test({LINENUM}3003, 'SetMaxLen("' + _s + '", 0)', _s, True, _s);

  Test({LINENUM}3005, '"' + _s + '" \ -1', failure, 'A non-negative integer was expected as argument 2, but "-1" was given.');
  Test({LINENUM}3006, 'SetMaxLen("' + _s + '", -1)', failure, 'A non-negative integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}3008, '"alfa" + ¶ + "beta"', 'alfa'#13#10'beta', True, 'alfa↲beta');
  TestSL({LINENUM}3009, '"alfa" + ¶ + "beta"', 'alfa↲beta');
  TestML({LINENUM}3010, '"alfa" + ¶ + "beta"', 'alfa'#13#10'beta');

  Test({LINENUM}3012, '"A new book named ""Cats""."', 'A new book named "Cats".', True, 'A new book named "Cats".');
  Test({LINENUM}3013, '"The empty string is """"."', 'The empty string is "".', True, 'The empty string is "".');
  Test({LINENUM}3014, '""""""', '""', True, '""');

  Test({LINENUM}3016, '"alfa beta', ESyntaxException, 'Unterminated string literal "alfa beta" starting at column 1.');
  Test({LINENUM}3017, '"alfa" + "beta', ESyntaxException, 'Unterminated string literal "beta" starting at column 10.');
  Test({LINENUM}3018, '"', ESyntaxException, 'Unterminated string literal "" starting at column 1.');
  Test({LINENUM}3019, '"""""', ESyntaxException, 'Unterminated string literal """""" starting at column 1.');

  Test({LINENUM}3021, '"Dogs are cute."[1]', 'D');
  Test({LINENUM}3022, '"Dogs are cute."[2]', 'o');
  Test({LINENUM}3023, '"Dogs are cute."[3]', 'g');
  Test({LINENUM}3024, '"Dogs are cute."[4]', 's');
  Test({LINENUM}3025, '"Dogs are cute."[5]', ' ');
  Test({LINENUM}3026, '"Dogs are cute."[6]', 'a');
  Test({LINENUM}3027, '"Dogs are cute."[7]', 'r');
  Test({LINENUM}3028, '"Dogs are cute."[8]', 'e');
  Test({LINENUM}3029, '"Dogs are cute."[9]', ' ');
  Test({LINENUM}3030, '"Dogs are cute."[10]', 'c');
  Test({LINENUM}3031, '"Dogs are cute."[11]', 'u');
  Test({LINENUM}3032, '"Dogs are cute."[12]', 't');
  Test({LINENUM}3033, '"Dogs are cute."[13]', 'e');
  Test({LINENUM}3034, '"Dogs are cute."[14]', '.');

  Test({LINENUM}3036, '"Dogs are cute."[15]', failure, 'Index 15 out of bounds.');

  Test({LINENUM}3038, '"Dogs are cute."[-1]', '.');
  Test({LINENUM}3039, '"Dogs are cute."[-2]', 'e');
  Test({LINENUM}3040, '"Dogs are cute."[-3]', 't');
  Test({LINENUM}3041, '"Dogs are cute."[-4]', 'u');
  Test({LINENUM}3042, '"Dogs are cute."[-5]', 'c');
  Test({LINENUM}3043, '"Dogs are cute."[-6]', ' ');
  Test({LINENUM}3044, '"Dogs are cute."[-7]', 'e');
  Test({LINENUM}3045, '"Dogs are cute."[-8]', 'r');
  Test({LINENUM}3046, '"Dogs are cute."[-9]', 'a');
  Test({LINENUM}3047, '"Dogs are cute."[-10]', ' ');
  Test({LINENUM}3048, '"Dogs are cute."[-11]', 's');
  Test({LINENUM}3049, '"Dogs are cute."[-12]', 'g');
  Test({LINENUM}3050, '"Dogs are cute."[-13]', 'o');
  Test({LINENUM}3051, '"Dogs are cute."[-14]', 'D');

  Test({LINENUM}3053, '"Dogs are cute."[-15]', failure, 'Index -15 out of bounds.');

  Test({LINENUM}3055, '"Dogs are cute."[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}3057, '"Dogs are cute."[5] ≔ "G"', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3058, '"Dogs are cute."[-2] ≔ "G"', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3059, '"Dogs are cute."[25] ≔ "G"', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3060, '"Dogs are cute."[-25] ≔ "G"', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3061, '"Dogs are cute."[0] ≔ "G"', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}3063, '("A" + "B")[1]', 'A');
  Test({LINENUM}3064, '("A" + "B")[2]', 'B');
  Test({LINENUM}3065, '("A" + "B")[3]', failure, 'Index 3 out of bounds.');

  Test({LINENUM}3067, '("A" + "B")[-1]', 'B');
  Test({LINENUM}3068, '("A" + "B")[-2]', 'A');
  Test({LINENUM}3069, '("A" + "B")[-3]', failure, 'Index -3 out of bounds.');

  Test({LINENUM}3071, '("A" + "B")[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}3073, '""[-3]', failure, 'Index -3 out of bounds.');
  Test({LINENUM}3074, '""[-2]', failure, 'Index -2 out of bounds.');
  Test({LINENUM}3075, '""[-1]', failure, 'Index -1 out of bounds.');
  Test({LINENUM}3076, '""[0]', failure, 'Index 0 out of bounds.');
  Test({LINENUM}3077, '""[1]', failure, 'Index 1 out of bounds.');
  Test({LINENUM}3078, '""[2]', failure, 'Index 2 out of bounds.');
  Test({LINENUM}3079, '""[3]', failure, 'Index 3 out of bounds.');

  Test({LINENUM}3081, 'struct("a": 42, "b": "dog").b[1]', 'd');
  Test({LINENUM}3082, 'struct("a": 42, "b": "dog").b[2]', 'o');
  Test({LINENUM}3083, 'struct("a": 42, "b": "dog").b[3]', 'g');
  Test({LINENUM}3084, 'struct("a": 42, "b": "dog").b[4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}3086, 'struct("a": 42, "b": "dog").b[-1]', 'g');
  Test({LINENUM}3087, 'struct("a": 42, "b": "dog").b[-2]', 'o');
  Test({LINENUM}3088, 'struct("a": 42, "b": "dog").b[-3]', 'd');
  Test({LINENUM}3089, 'struct("a": 42, "b": "dog").b[-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}3091, 'struct("a": 42, "b": "dog").b[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}3093, 'struct("a": 42, "b": "dog").b[2] ≔ "a"', failure, 'Left side cannot be assigned to.');


  //
  // Real vectors
  //

  Test({LINENUM}3100, '❨1, 0, 0❩', [1, 0, 0]);                                                  // ❨❩
  Test({LINENUM}3101, '❨1, 2, 3❩', [1, 2, 3]);
  Test({LINENUM}3102, '❨1, -1❩', [1, -1]);
  Test({LINENUM}3103, '❨1❩', [1]);
  Test({LINENUM}3104, '❨0❩', [0]);
  Test({LINENUM}3105, '❨-1❩', [-1]);

  Test({LINENUM}3107, '❨2, −3, 1❩[1]', 2.0);
  Test({LINENUM}3108, '❨2, −3, 1❩[2]', -3.0);
  Test({LINENUM}3109, '❨2, −3, 1❩[3]', 1.0);
  Test({LINENUM}3110, '❨2, −3, 1❩[4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}3112, '❨2, −3, 1❩[-1]', 1.0);
  Test({LINENUM}3113, '❨2, −3, 1❩[-2]', -3.0);
  Test({LINENUM}3114, '❨2, −3, 1❩[-3]', 2.0);
  Test({LINENUM}3115, '❨2, −3, 1❩[-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}3117, '❨2, −3, 1❩[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}3119, '❨2, −3, 1❩[2] ≔ 3', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3120, '❨2, −3, 1❩[20] ≔ 3', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}3122, 'vector(1, 2, 3)', [1, 2, 3]);

  Test({LINENUM}3124, '❨1, 2, 3❩ + ❨10, 100, 1000❩', [11, 102, 1003]);

  TestSL({LINENUM}3126, '❨1, 2, 3❩', '(1, 2, 3)');
  TestML({LINENUM}3127, '❨1, 2, 3❩', ' ⎛1⎞'#13#10'e⎜2⎟'#13#10' ⎝3⎠');

  TestML({LINENUM}3129, '❨1❩', '(1)');
  TestML({LINENUM}3130, '❨1, 2❩', ' ⎛1⎞'#13#10'e⎝2⎠');
  TestML({LINENUM}3131, '❨1, 2, 3❩', ' ⎛1⎞'#13#10'e⎜2⎟'#13#10' ⎝3⎠');

  Test({LINENUM}3133, 'SequenceVector(100)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]);
  TestSL({LINENUM}3134, 'SequenceVector(100)', '(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,'+' 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,'+' 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)');
  TestML({LINENUM}3135, 'SequenceVector(100)', '(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,'+' 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,'+' 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)'); // (way) beyond default vertical until

  Test({LINENUM}3137, 'SequenceVector(200)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200]);
  TestSL({LINENUM}3138, 'SequenceVector(200)', '(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, '+'33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, '+'67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, …)');
  TestML({LINENUM}3139, 'SequenceVector(200)', '(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, '+'33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, '+'67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, …)'); // (way) beyond default vertical until

  Test({LINENUM}3141, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3142, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩', '(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)');

  Test({LINENUM}3144, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 10', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3145, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 10', '(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)');

  Test({LINENUM}3147, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 9', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3148, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 9', '(1, 2, 3, 4, 5, 6, 7, 8, 9, …)');

  Test({LINENUM}3150, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 5', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3151, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 5', '(1, 2, 3, 4, 5, …)');

  Test({LINENUM}3153, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 2', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3154, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 2', '(1, 2, …)');

  Test({LINENUM}3156, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 1', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3157, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 1', '(1, …)');

  Test({LINENUM}3159, '❨1, 2, 3, 4, 5, 6❩', [1, 2, 3, 4, 5, 6]);
  TestSL({LINENUM}3160, '❨1, 2, 3, 4, 5, 6❩', '(1, 2, 3, 4, 5, 6)');
  TestML({LINENUM}3161, '❨1, 2, 3, 4, 5, 6❩', ' ⎛1⎞'#13#10' ⎜2⎟'#13#10' ⎜3⎟'#13#10'e⎜4⎟'#13#10' ⎜5⎟'#13#10' ⎝6⎠');

  Test({LINENUM}3163, '❨1, 2, 3, 4, 5, 6❩ \ 3', [1, 2, 3, 4, 5, 6]);
  TestSL({LINENUM}3164, '❨1, 2, 3, 4, 5, 6❩ \ 3', '(1, 2, 3, …)');
  TestML({LINENUM}3165, '❨1, 2, 3, 4, 5, 6❩ \ 3', ' ⎛1⎞'#13#10' ⎜2⎟'#13#10'e⎜3⎟'#13#10' ⎝⋮⎠');

  Test({LINENUM}3167, '❨❩', ESyntaxException, 'Empty bracket at column 1.'); // would make sense to allow syntactically, to get vector's error message instead
  Test({LINENUM}3168, 'vector()', failure, 'A vector must have dimension at least one.');

  Test({LINENUM}3170, '❨1, 1/2, 1/3❩', [1, 1/2, 1/3]);
  TestML({LINENUM}3171, '❨1, 1/2, 1/3❩', ' ⎛      1       ⎞'#13#10'e⎜     0.5      ⎟'#13#10' ⎝0.333333333333⎠');
  TestML({LINENUM}3172, 'SetNumDigits(❨1, 1/2, 1/3❩, 4)', ' ⎛  1   ⎞'#13#10'e⎜ 0.5  ⎟'#13#10' ⎝0.3333⎠');
  TestML({LINENUM}3173, 'SetNumDigits(❨1/2, 1/3, 1/4❩, 4) \ 2', ' ⎛ 0.5  ⎞'#13#10'e⎜0.3333⎟'#13#10' ⎝  ⋮   ⎠');

  TestSL({LINENUM}3175, '❨1, 1/2, 1/3❩', '(1, 0.5, 0.333333333333)');
  TestSL({LINENUM}3176, 'SetNumDigits(❨1, 1/2, 1/3❩, 4)', '(1, 0.5, 0.3333)');
  TestSL({LINENUM}3177, 'SetNumDigits(❨1/2, 1/3, 1/4❩, 4) \ 2', '(0.5, 0.3333, …)');

  TestML({LINENUM}3179, 'SetDigitGrouping(❨12432435, 65426277, 763763588, 62565245246, 415❩, 3)', ' ⎛  12 432 435  ⎞'#13#10' ⎜  65 426 277  ⎟'#13#10'e⎜ 763 763 588  ⎟'#13#10' ⎜62 565 245 246⎟'#13#10' ⎝     415      ⎠');
  TestSL({LINENUM}3180, 'SetDigitGrouping(❨12432435, 65426277, 763763588, 62565245246, 415❩, 3)', '(12 432 435, 65 426 277, 763 763 588, 62 565 245 246, 415)');


  //
  // Complex vectors
  //

  Test({LINENUM}3187, '❨i, 0, 0❩', [ImaginaryUnit, 0, 0]);                                      // ❨❩
  Test({LINENUM}3188, '❨i, 2, 3❩', [ImaginaryUnit, 2, 3]);
  Test({LINENUM}3189, '❨i, -1❩', [ImaginaryUnit, -1]);
  Test({LINENUM}3190, '❨i❩', [ImaginaryUnit]);
  Test({LINENUM}3191, '❨-i❩', [-ImaginaryUnit]);

  TestML({LINENUM}3193, '❨i❩', '(i)');
  TestML({LINENUM}3194, '❨i, 2❩', ' ⎛i⎞'#13#10'e⎝2⎠');
  TestML({LINENUM}3195, '❨i, 2, 3❩', ' ⎛i⎞'#13#10'e⎜2⎟'#13#10' ⎝3⎠');

  Test({LINENUM}3197, '❨2, −3, i❩[1]', TASC(2.0));
  Test({LINENUM}3198, '❨2, −3, i❩[2]', TASC(-3.0));
  Test({LINENUM}3199, '❨2, −3, i❩[3]', ImaginaryUnit);
  Test({LINENUM}3200, '❨2, −3, i❩[4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}3202, '❨2, −3, i❩[-1]', ImaginaryUnit);
  Test({LINENUM}3203, '❨2, −3, i❩[-2]', TASC(-3.0));
  Test({LINENUM}3204, '❨2, −3, i❩[-3]', TASC(2.0));
  Test({LINENUM}3205, '❨2, −3, i❩[-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}3207, '❨2, −3, i❩[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}3209, '❨2, −3, i❩[2] ≔ 3', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3210, '❨2, −3, i❩[20] ≔ 3', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}3212, 'vector(i, 2, 3)', [ImaginaryUnit, 2, 3]);

  Test({LINENUM}3214, '❨i, 2, 3❩ + ❨10, 100, 1000❩', [ImaginaryUnit + 10, 102, 1003]);

  TestSL({LINENUM}3216, '❨i, 2, 3❩', '(i, 2, 3)');
  TestML({LINENUM}3217, '❨i, 2, 3❩', ' ⎛i⎞'#13#10'e⎜2⎟'#13#10' ⎝3⎠');

  Test({LINENUM}3219, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩', [ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3220, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩', '(i, 2, 3, 4, 5, 6, 7, 8, 9, 10)');

  Test({LINENUM}3222, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 10', [ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3223, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 10', '(i, 2, 3, 4, 5, 6, 7, 8, 9, 10)');

  Test({LINENUM}3225, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 9', [ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3226, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 9', '(i, 2, 3, 4, 5, 6, 7, 8, 9, …)');

  Test({LINENUM}3228, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 5', [ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3229, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 5', '(i, 2, 3, 4, 5, …)');

  Test({LINENUM}3231, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 2', [ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3232, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 2', '(i, 2, …)');

  Test({LINENUM}3234, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 1', [ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  TestSL({LINENUM}3235, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 1', '(i, …)');

  Test({LINENUM}3237, '❨i, 2, 3, 4, 5, 6❩', [ImaginaryUnit, 2, 3, 4, 5, 6]);
  TestSL({LINENUM}3238, '❨i, 2, 3, 4, 5, 6❩', '(i, 2, 3, 4, 5, 6)');
  TestML({LINENUM}3239, '❨i, 2, 3, 4, 5, 6❩', ' ⎛i⎞'#13#10' ⎜2⎟'#13#10' ⎜3⎟'#13#10'e⎜4⎟'#13#10' ⎜5⎟'#13#10' ⎝6⎠');

  Test({LINENUM}3241, '❨i, 2, 3, 4, 5, 6❩ \ 3', [ImaginaryUnit, 2, 3, 4, 5, 6]);
  TestSL({LINENUM}3242, '❨i, 2, 3, 4, 5, 6❩ \ 3', '(i, 2, 3, …)');
  TestML({LINENUM}3243, '❨i, 2, 3, 4, 5, 6❩ \ 3', ' ⎛i⎞'#13#10' ⎜2⎟'#13#10'e⎜3⎟'#13#10' ⎝⋮⎠');

  Test({LINENUM}3245, '❨i, 1/2, 1/3❩', [ImaginaryUnit, 1/2, 1/3]);
  TestML({LINENUM}3246, '❨i, 1/2, 1/3❩', ' ⎛      i       ⎞'#13#10'e⎜     0.5      ⎟'#13#10' ⎝0.333333333333⎠');
  TestML({LINENUM}3247, 'SetNumDigits(❨i, 1/2, 1/3❩, 4)', ' ⎛  i   ⎞'#13#10'e⎜ 0.5  ⎟'#13#10' ⎝0.3333⎠');
  TestML({LINENUM}3248, 'SetNumDigits(❨i/2, 1/3, 1/4❩, 4) \ 2', ' ⎛0.5⋅i ⎞'#13#10'e⎜0.3333⎟'#13#10' ⎝  ⋮   ⎠');

  TestSL({LINENUM}3250, '❨i, 1/2, 1/3❩', '(i, 0.5, 0.333333333333)');
  TestSL({LINENUM}3251, 'SetNumDigits(❨i, 1/2, 1/3❩, 4)', '(i, 0.5, 0.3333)');
  TestSL({LINENUM}3252, 'SetNumDigits(❨i/2, 1/3, 1/4❩, 4) \ 2', '(0.5⋅i, 0.3333, …)');

  TestML({LINENUM}3254, 'SetDigitGrouping(❨12432435, 65426277, 763763588, 62565245246⋅i, 415❩, 3)', ' ⎛   12 432 435   ⎞'#13#10' ⎜   65 426 277   ⎟'#13#10'e⎜  763 763 588   ⎟'#13#10' ⎜62 565 245 246⋅i⎟'#13#10' ⎝      415       ⎠');
  TestSL({LINENUM}3255, 'SetDigitGrouping(❨12432435, 65426277, 763763588, 62565245246⋅i, 415❩, 3)', '(12 432 435, 65 426 277, 763 763 588, 62 565 245 246⋅i, 415)');


  //
  // Real matrices
  //

  Test({LINENUM}3262, '❨❨1, 2❩, ❨3, 4❩❩', 2, [1, 2, 3, 4]);                                     // ❨❩
  Test({LINENUM}3263, 'matrix(2, 1, 2, 3, 4)', 2, [1, 2, 3, 4]);
  Test({LINENUM}3264, 'matrix(1, 1, 2, 3, 4)', 1, [1, 2, 3, 4]);
  Test({LINENUM}3265, 'matrix(4, 1, 2, 3, 4)', 4, [1, 2, 3, 4]);
  Test({LINENUM}3266, 'matrix(3, 1, 2, 3, 4)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}3267, 'matrix(0, 1, 2, 3, 4)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}3268, '❨❨1, 2❩, ❨3, 4❩❩ + ❨❨1, 10❩, ❨100, 1000❩❩', 2, [2, 12, 103, 1004]);
  Test({LINENUM}3269, '❨❨1❩, ❨2❩, ❨3❩❩', 1, [1, 2, 3]);
  Test({LINENUM}3270, '❨❨1, 2, 3❩❩', 3, [1, 2, 3]);
  Test({LINENUM}3271, '❨❨1, 2❩, ❨3❩❩', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}3272, 'ZeroMatrix(3)', 3, [0, 0, 0, 0, 0, 0, 0, 0, 0]);
  Test({LINENUM}3273, 'ZeroMatrix(2, 3)', 3, [0, 0, 0, 0, 0, 0]);
  Test({LINENUM}3274, 'IdentityMatrix(3)', 3, [1, 0, 0, 0, 1, 0, 0, 0, 1]);
  TestML({LINENUM}3275, 'IdentityMatrix(5)', '⎛1  0  0  0  0⎞'#13#10'⎜0  1  0  0  0⎟'#13#10'⎜0  0  1  0  0⎟'#13#10'⎜0  0  0  1  0⎟'#13#10'⎝0  0  0  0  1⎠');
  TestML({LINENUM}3276, 'IdentityMatrix(5) \ 5', '⎛1  0  0  0  0⎞'#13#10'⎜0  1  0  0  0⎟'#13#10'⎜0  0  1  0  0⎟'#13#10'⎜0  0  0  1  0⎟'#13#10'⎝0  0  0  0  1⎠');
  TestML({LINENUM}3277, 'IdentityMatrix(5) \ 4', '⎛1  0  0  0  ⋯⎞'#13#10'⎜0  1  0  0  ⋯⎟'#13#10'⎜0  0  1  0  ⋯⎟'#13#10'⎜0  0  0  1  ⋯⎟'#13#10'⎝⋮  ⋮  ⋮  ⋮  ⋱⎠');
  TestML({LINENUM}3278, 'IdentityMatrix(5) \ 3', '⎛1  0  0  ⋯⎞'#13#10'⎜0  1  0  ⋯⎟'#13#10'⎜0  0  1  ⋯⎟'#13#10'⎝⋮  ⋮  ⋮  ⋱⎠');
  TestML({LINENUM}3279, 'IdentityMatrix(5) \ 2', '⎛1  0  ⋯⎞'#13#10'⎜0  1  ⋯⎟'#13#10'⎝⋮  ⋮  ⋱⎠');
  TestML({LINENUM}3280, 'IdentityMatrix(5) \ 1', '⎛1  ⋯⎞'#13#10'⎝⋮  ⋱⎠');
  TestML({LINENUM}3281, 'IdentityMatrix(5) \ 0', '⎛1  0  0  0  0⎞'#13#10'⎜0  1  0  0  0⎟'#13#10'⎜0  0  1  0  0⎟'#13#10'⎜0  0  0  1  0⎟'#13#10'⎝0  0  0  0  1⎠');
  Test({LINENUM}3282, 'IdentityMatrix(5) \ -1', failure, 'A non-negative integer was expected as argument 2, but "-1" was given.');
  TestSL({LINENUM}3283, 'IdentityMatrix(5)', '((1, 0, 0, 0, 0), (0, 1, 0, 0, 0), (0, 0, 1, 0, 0), (0, 0, 0, 1, 0), (0, 0, 0, 0, 1))');
  TestSL({LINENUM}3284, 'IdentityMatrix(5) \ 5', '((1, 0, 0, 0, 0), (0, 1, 0, 0, 0), (0, 0, 1, 0, 0), (0, 0, 0, 1, 0), (0, 0, 0, 0, 1))');
  TestSL({LINENUM}3285, 'IdentityMatrix(5) \ 4', '((1, 0, 0, 0, …), (0, 1, 0, 0, …), (0, 0, 1, 0, …), (0, 0, 0, 1, …), …)');
  TestSL({LINENUM}3286, 'IdentityMatrix(5) \ 3', '((1, 0, 0, …), (0, 1, 0, …), (0, 0, 1, …), …)');
  TestSL({LINENUM}3287, 'IdentityMatrix(5) \ 2', '((1, 0, …), (0, 1, …), …)');
  TestSL({LINENUM}3288, 'IdentityMatrix(5) \ 1', '((1, …), …)');
  TestSL({LINENUM}3289, 'IdentityMatrix(5) \ 0', '((1, 0, 0, 0, 0), (0, 1, 0, 0, 0), (0, 0, 1, 0, 0), (0, 0, 0, 1, 0), (0, 0, 0, 0, 1))');
  TestML({LINENUM}3290, 'ZeroMatrix(5, 8)', '⎛0  0  0  0  0  0  0  0⎞'#13#10'⎜0  0  0  0  0  0  0  0⎟'#13#10'⎜0  0  0  0  0  0  0  0⎟'#13#10'⎜0  0  0  0  0  0  0  0⎟'#13#10'⎝0  0  0  0  0  0  0  0⎠');
  TestML({LINENUM}3291, 'ZeroMatrix(5, 8) \ 12', '⎛0  0  0  0  0  0  0  0⎞'#13#10'⎜0  0  0  0  0  0  0  0⎟'#13#10'⎜0  0  0  0  0  0  0  0⎟'#13#10'⎜0  0  0  0  0  0  0  0⎟'#13#10'⎝0  0  0  0  0  0  0  0⎠');
  TestML({LINENUM}3292, 'ZeroMatrix(5, 8) \ 8', '⎛0  0  0  0  0  0  0  0⎞'#13#10'⎜0  0  0  0  0  0  0  0⎟'#13#10'⎜0  0  0  0  0  0  0  0⎟'#13#10'⎜0  0  0  0  0  0  0  0⎟'#13#10'⎝0  0  0  0  0  0  0  0⎠');
  TestML({LINENUM}3293, 'ZeroMatrix(5, 8) \ 7', '⎛0  0  0  0  0  0  0  ⋯⎞'#13#10'⎜0  0  0  0  0  0  0  ⋯⎟'#13#10'⎜0  0  0  0  0  0  0  ⋯⎟'#13#10'⎜0  0  0  0  0  0  0  ⋯⎟'#13#10'⎝0  0  0  0  0  0  0  ⋯⎠');
  TestML({LINENUM}3294, 'ZeroMatrix(5, 8) \ 4', '⎛0  0  0  0  ⋯⎞'#13#10'⎜0  0  0  0  ⋯⎟'#13#10'⎜0  0  0  0  ⋯⎟'#13#10'⎜0  0  0  0  ⋯⎟'#13#10'⎝⋮  ⋮  ⋮  ⋮  ⋱⎠');

  TestML({LINENUM}3296, 'IdentityMatrix(1)', '(1)');
  TestML({LINENUM}3297, 'IdentityMatrix(2)', '⎛1  0⎞'#13#10'⎝0  1⎠');
  TestML({LINENUM}3298, 'IdentityMatrix(3)', '⎛1  0  0⎞'#13#10'⎜0  1  0⎟'#13#10'⎝0  0  1⎠');
  TestML({LINENUM}3299, 'IdentityMatrix(4)', '⎛1  0  0  0⎞'#13#10'⎜0  1  0  0⎟'#13#10'⎜0  0  1  0⎟'#13#10'⎝0  0  0  1⎠');

  Test({LINENUM}3301, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2)', 5, [1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, -2, 4, 5, 8, -9, 2]);
  Test({LINENUM}3302, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 10', 5, [1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, -2, 4, 5, 8, -9, 2]);
  Test({LINENUM}3303, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 8', 5, [1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, -2, 4, 5, 8, -9, 2]);
  Test({LINENUM}3304, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 5', 5, [1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, -2, 4, 5, 8, -9, 2]);
  Test({LINENUM}3305, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 2', 5, [1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, -2, 4, 5, 8, -9, 2]);
  Test({LINENUM}3306, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 1', 5, [1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, -2, 4, 5, 8, -9, 2]);
  Test({LINENUM}3307, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 0', 5, [1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, -2, 4, 5, 8, -9, 2]);

  TestML({LINENUM}3309, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2)', '⎛ 1   5   3   4   7⎞'#13#10'⎜ 6   5   4   3   8⎟'#13#10'⎜ 7   6   5   3  −2⎟'#13#10'⎝ 4   5   8  −9   2⎠');
  TestML({LINENUM}3310, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 10', '⎛ 1   5   3   4   7⎞'#13#10'⎜ 6   5   4   3   8⎟'#13#10'⎜ 7   6   5   3  −2⎟'#13#10'⎝ 4   5   8  −9   2⎠');
  TestML({LINENUM}3311, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 6', '⎛ 1   5   3   4   7⎞'#13#10'⎜ 6   5   4   3   8⎟'#13#10'⎜ 7   6   5   3  −2⎟'#13#10'⎝ 4   5   8  −9   2⎠');
  TestML({LINENUM}3312, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 5', '⎛ 1   5   3   4   7⎞'#13#10'⎜ 6   5   4   3   8⎟'#13#10'⎜ 7   6   5   3  −2⎟'#13#10'⎝ 4   5   8  −9   2⎠');
  TestML({LINENUM}3313, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 0', '⎛ 1   5   3   4   7⎞'#13#10'⎜ 6   5   4   3   8⎟'#13#10'⎜ 7   6   5   3  −2⎟'#13#10'⎝ 4   5   8  −9   2⎠');
  TestML({LINENUM}3314, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 4', '⎛ 1   5   3   4  ⋯ ⎞'#13#10'⎜ 6   5   4   3  ⋯ ⎟'#13#10'⎜ 7   6   5   3  ⋯ ⎟'#13#10'⎝ 4   5   8  −9  ⋯ ⎠');
  TestML({LINENUM}3315, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 3', '⎛1  5  3  ⋯⎞'#13#10'⎜6  5  4  ⋯⎟'#13#10'⎜7  6  5  ⋯⎟'#13#10'⎝⋮  ⋮  ⋮  ⋱⎠');
  TestML({LINENUM}3316, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 2', '⎛1  5  ⋯⎞'#13#10'⎜6  5  ⋯⎟'#13#10'⎝⋮  ⋮  ⋱⎠');
  TestML({LINENUM}3317, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 1', '⎛1  ⋯⎞'#13#10'⎝⋮  ⋱⎠');

  TestSL({LINENUM}3319, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2)', '((1, 5, 3, 4, 7), (6, 5, 4, 3, 8), (7, 6, 5, 3, −2), (4, 5, 8, −9, 2))');
  TestSL({LINENUM}3320, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 10', '((1, 5, 3, 4, 7), (6, 5, 4, 3, 8), (7, 6, 5, 3, −2), (4, 5, 8, −9, 2))');
  TestSL({LINENUM}3321, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 6', '((1, 5, 3, 4, 7), (6, 5, 4, 3, 8), (7, 6, 5, 3, −2), (4, 5, 8, −9, 2))');
  TestSL({LINENUM}3322, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 5', '((1, 5, 3, 4, 7), (6, 5, 4, 3, 8), (7, 6, 5, 3, −2), (4, 5, 8, −9, 2))');
  TestSL({LINENUM}3323, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 0', '((1, 5, 3, 4, 7), (6, 5, 4, 3, 8), (7, 6, 5, 3, −2), (4, 5, 8, −9, 2))');
  TestSL({LINENUM}3324, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 4', '((1, 5, 3, 4, …), (6, 5, 4, 3, …), (7, 6, 5, 3, …), (4, 5, 8, −9, …))');
  TestSL({LINENUM}3325, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 3', '((1, 5, 3, …), (6, 5, 4, …), (7, 6, 5, …), …)');
  TestSL({LINENUM}3326, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 2', '((1, 5, …), (6, 5, …), …)');
  TestSL({LINENUM}3327, 'matrix(5, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 1', '((1, …), …)');

  Test({LINENUM}3329, 'matrix(2, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2)', 2, [1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, -2, 4, 5, 8, -9, 2]);
  TestML({LINENUM}3330, 'matrix(2, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 10', '⎛ 1   5⎞'#13#10'⎜ 3   4⎟'#13#10'⎜ 7   6⎟'#13#10'⎜ 5   4⎟'#13#10'⎜ 3   8⎟'#13#10'⎜ 7   6⎟'#13#10'⎜ 5   3⎟'#13#10'⎜−2   4⎟'#13#10'⎜ 5   8⎟'#13#10'⎝−9   2⎠');
  TestSL({LINENUM}3331, 'matrix(2, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 10', '((1, 5), (3, 4), (7, 6), (5, 4), (3, 8), (7, 6), (5, 3), (−2, 4), (5, 8), (−9, 2))');
  TestML({LINENUM}3332, 'matrix(2, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 5', '⎛1  5⎞'#13#10'⎜3  4⎟'#13#10'⎜7  6⎟'#13#10'⎜5  4⎟'#13#10'⎜3  8⎟'#13#10'⎝⋮  ⋮⎠');
  TestSL({LINENUM}3333, 'matrix(2, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 5', '((1, 5), (3, 4), (7, 6), (5, 4), (3, 8), …)');

  Test({LINENUM}3335, 'matrix(4, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2)', 4, [1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, -2, 4, 5, 8, -9, 2]);
  TestML({LINENUM}3336, 'matrix(4, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2)', '⎛ 1   5   3   4⎞'#13#10'⎜ 7   6   5   4⎟'#13#10'⎜ 3   8   7   6⎟'#13#10'⎜ 5   3  −2   4⎟'#13#10'⎝ 5   8  −9   2⎠');
  TestML({LINENUM}3337, 'matrix(4, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 3', '⎛1  5  3  ⋯⎞'#13#10'⎜7  6  5  ⋯⎟'#13#10'⎜3  8  7  ⋯⎟'#13#10'⎝⋮  ⋮  ⋮  ⋱⎠');
  TestSL({LINENUM}3338, 'matrix(4, 1, 5, 3, 4, 7, 6, 5, 4, 3, 8, 7, 6, 5, 3, −2, 4, 5, 8, −9, 2) \ 3', '((1, 5, 3, …), (7, 6, 5, …), (3, 8, 7, …), …)');

  TestML({LINENUM}3340, 'IdentityMatrix(3)/3', '⎛0.333333333333               0               0⎞'#13#10'⎜             0  0.333333333333               0⎟'#13#10'⎝             0               0  0.333333333333⎠');
  TestML({LINENUM}3341, 'SetNumDigits(IdentityMatrix(3)/3, 10)', '⎛0.3333333333             0             0⎞'#13#10'⎜           0  0.3333333333             0⎟'#13#10'⎝           0             0  0.3333333333⎠');
  TestML({LINENUM}3342, 'SetNumDigits(IdentityMatrix(3)/3, 4)', '⎛0.3333       0       0⎞'#13#10'⎜     0  0.3333       0⎟'#13#10'⎝     0       0  0.3333⎠');
  TestML({LINENUM}3343, 'SetNumDigits(IdentityMatrix(3)/3, 4) \ 2', '⎛0.3333       0    ⋯   ⎞'#13#10'⎜     0  0.3333    ⋯   ⎟'#13#10'⎝  ⋮       ⋮       ⋱   ⎠');

  TestSL({LINENUM}3345, 'IdentityMatrix(3)/3', '((0.333333333333, 0, 0), (0, 0.333333333333, 0), (0, 0, 0.333333333333))');
  TestSL({LINENUM}3346, 'SetNumDigits(IdentityMatrix(3)/3, 10)', '((0.3333333333, 0, 0), (0, 0.3333333333, 0), (0, 0, 0.3333333333))');
  TestSL({LINENUM}3347, 'SetNumDigits(IdentityMatrix(3)/3, 4)', '((0.3333, 0, 0), (0, 0.3333, 0), (0, 0, 0.3333))');
  TestSL({LINENUM}3348, 'SetNumDigits(IdentityMatrix(3)/3, 4) \ 2', '((0.3333, 0, …), (0, 0.3333, …), …)');

  TestML({LINENUM}3350, 'SetDigitGrouping(SetNumDigits(IdentityMatrix(3)/3, 6), 3)', '⎛0.333 333          0          0⎞'#13#10'⎜        0  0.333 333          0⎟'#13#10'⎝        0          0  0.333 333⎠');
  TestSL({LINENUM}3351, 'SetDigitGrouping(SetNumDigits(IdentityMatrix(3)/3, 6), 3)', '((0.333 333, 0, 0), (0, 0.333 333, 0), (0, 0, 0.333 333))');

  Test({LINENUM}3353, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1]', 10.0);
  Test({LINENUM}3354, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[2]', 20.0);
  Test({LINENUM}3355, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[3]', 30.0);
  Test({LINENUM}3356, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[4]', 40.0);
  Test({LINENUM}3357, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[5]', 50.0);
  Test({LINENUM}3358, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[6]', 60.0);
  Test({LINENUM}3359, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[7]', failure, 'Index 7 out of bounds.');

  Test({LINENUM}3361, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-1]', 60.0);
  Test({LINENUM}3362, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-2]', 50.0);
  Test({LINENUM}3363, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-3]', 40.0);
  Test({LINENUM}3364, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-4]', 30.0);
  Test({LINENUM}3365, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-5]', 20.0);
  Test({LINENUM}3366, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-6]', 10.0);
  Test({LINENUM}3367, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-7]', failure, 'Index -7 out of bounds.');

  Test({LINENUM}3369, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}3371, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, 0]', failure, 'Index (1, 0) out of bounds.');
  Test({LINENUM}3372, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, 1]', 10.0);
  Test({LINENUM}3373, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, 2]', 20.0);
  Test({LINENUM}3374, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, 3]', 30.0);
  Test({LINENUM}3375, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, 4]', failure, 'Index (1, 4) out of bounds.');
  Test({LINENUM}3376, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[2, 1]', 40.0);
  Test({LINENUM}3377, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[2, 2]', 50.0);
  Test({LINENUM}3378, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[2, 3]', 60.0);
  Test({LINENUM}3379, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[2, 4]', failure, 'Index (2, 4) out of bounds.');
  Test({LINENUM}3380, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[3, 1]', failure, 'Index (3, 1) out of bounds.');

  Test({LINENUM}3382, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, -1]', 30.0);
  Test({LINENUM}3383, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, -2]', 20.0);
  Test({LINENUM}3384, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, -3]', 10.0);
  Test({LINENUM}3385, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, -4]', failure, 'Index (1, -4) out of bounds.');

  Test({LINENUM}3387, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-1, 1]', 40.0);
  Test({LINENUM}3388, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-1, 2]', 50.0);
  Test({LINENUM}3389, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-1, 3]', 60.0);
  Test({LINENUM}3390, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-1, 4]', failure, 'Index (-1, 4) out of bounds.');

  Test({LINENUM}3392, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-2, 1]', 10.0);
  Test({LINENUM}3393, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-2, 2]', 20.0);
  Test({LINENUM}3394, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-2, 3]', 30.0);
  Test({LINENUM}3395, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-2, 4]', failure, 'Index (-2, 4) out of bounds.');

  Test({LINENUM}3397, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-1, 0]', failure, 'Index (-1, 0) out of bounds.');
  Test({LINENUM}3398, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-1, -1]', 60.0);
  Test({LINENUM}3399, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-1, -2]', 50.0);
  Test({LINENUM}3400, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-2, -1]', 30.0);
  Test({LINENUM}3401, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-2, -2]', 20.0);

  Test({LINENUM}3403, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, 0)]', failure, 'Index (1, 0) out of bounds.');
  Test({LINENUM}3404, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, 1)]', 10.0);
  Test({LINENUM}3405, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, 2)]', 20.0);
  Test({LINENUM}3406, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, 3)]', 30.0);
  Test({LINENUM}3407, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, 4)]', failure, 'Index (1, 4) out of bounds.');
  Test({LINENUM}3408, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(2, 1)]', 40.0);
  Test({LINENUM}3409, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(2, 2)]', 50.0);
  Test({LINENUM}3410, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(2, 3)]', 60.0);
  Test({LINENUM}3411, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(2, 4)]', failure, 'Index (2, 4) out of bounds.');
  Test({LINENUM}3412, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(3, 1)]', failure, 'Index (3, 1) out of bounds.');

  Test({LINENUM}3414, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, -1)]', 30.0);
  Test({LINENUM}3415, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, -2)]', 20.0);
  Test({LINENUM}3416, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, -3)]', 10.0);
  Test({LINENUM}3417, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, -4)]', failure, 'Index (1, -4) out of bounds.');

  Test({LINENUM}3419, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 1)]', 40.0);
  Test({LINENUM}3420, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 2)]', 50.0);
  Test({LINENUM}3421, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 3)]', 60.0);
  Test({LINENUM}3422, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 4)]', failure, 'Index (-1, 4) out of bounds.');

  Test({LINENUM}3424, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-2, 1)]', 10.0);
  Test({LINENUM}3425, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-2, 2)]', 20.0);
  Test({LINENUM}3426, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-2, 3)]', 30.0);
  Test({LINENUM}3427, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-2, 4)]', failure, 'Index (-2, 4) out of bounds.');

  Test({LINENUM}3429, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 0)]', failure, 'Index (-1, 0) out of bounds.');
  Test({LINENUM}3430, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-1, -1)]', 60.0);
  Test({LINENUM}3431, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-1, -2)]', 50.0);
  Test({LINENUM}3432, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-2, -1)]', 30.0);
  Test({LINENUM}3433, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-2, -2)]', 20.0);

  Test({LINENUM}3435, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3436, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[2] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3437, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[6] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3438, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[7] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3439, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-1] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3440, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[0] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3441, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-20] ≔ 100', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}3443, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, 1] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3444, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, 2] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3445, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, 5] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3446, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[1, -1] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3447, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[2, 2] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3448, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[2, 100] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3449, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[2, -4] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3450, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[2, 0] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3451, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[-1, 1] ≔ 100', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}3453, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, 1)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3454, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, 2)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3455, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, 5)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3456, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(1, -1)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3457, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(2, 2)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3458, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(2, 100)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3459, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(2, -4)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3460, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(2, 0)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3461, '❨❨10, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 1)] ≔ 100', failure, 'Left side cannot be assigned to.');


  //
  // Complex matrices
  //

  Test({LINENUM}3468, '❨❨i, 2❩, ❨3, 4❩❩', 2, [ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}3469, 'matrix(2, i, 2, 3, 4)', 2, [ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}3470, '❨❨i❩, ❨2❩, ❨3❩, ❨4❩❩', 1, [ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}3471, '❨❨i, 2, 3, 4❩❩', 4, [ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}3472, '❨❨i, 2❩, ❨3, 4, 5❩❩', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}3473, '❨❨i, 2❩, ❨3, 4❩❩ + ❨❨1, 0❩, ❨0, i❩❩', 2, [1+ImaginaryUnit, 2, 3, 4+ImaginaryUnit]);
  TestML({LINENUM}3474, '❨❨i, 2❩, ❨3, 4❩❩ + ❨❨1, 0❩, ❨0, i❩❩', '⎛1 + i      2⎞'#13#10'⎝    3  4 + i⎠');
  TestSL({LINENUM}3475, '❨❨i, 2❩, ❨3, 4❩❩ + ❨❨1, 0❩, ❨0, i❩❩', '((1 + i, 2), (3, 4 + i))');

  TestML({LINENUM}3477, 'i⋅IdentityMatrix(1)', '(i)');
  TestML({LINENUM}3478, 'i⋅IdentityMatrix(2)', '⎛i  0⎞'#13#10'⎝0  i⎠');
  TestML({LINENUM}3479, 'i⋅IdentityMatrix(3)', '⎛i  0  0⎞'#13#10'⎜0  i  0⎟'#13#10'⎝0  0  i⎠');
  TestML({LINENUM}3480, 'i⋅IdentityMatrix(4)', '⎛i  0  0  0⎞'#13#10'⎜0  i  0  0⎟'#13#10'⎜0  0  i  0⎟'#13#10'⎝0  0  0  i⎠');

  Test({LINENUM}3482, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3)', 5, [3, ImaginaryUnit, 5, 7, ImaginaryUnit, 2, ImaginaryUnit, 3, 4, 5, 1, ImaginaryUnit, ImaginaryUnit, 2, 3]);
  TestML({LINENUM}3483, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3)', '⎛3  i  5  7  i⎞'#13#10'⎜2  i  3  4  5⎟'#13#10'⎝1  i  i  2  3⎠');
  TestML({LINENUM}3484, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 0', '⎛3  i  5  7  i⎞'#13#10'⎜2  i  3  4  5⎟'#13#10'⎝1  i  i  2  3⎠');
  TestML({LINENUM}3485, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 10', '⎛3  i  5  7  i⎞'#13#10'⎜2  i  3  4  5⎟'#13#10'⎝1  i  i  2  3⎠');
  TestML({LINENUM}3486, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 5', '⎛3  i  5  7  i⎞'#13#10'⎜2  i  3  4  5⎟'#13#10'⎝1  i  i  2  3⎠');
  TestML({LINENUM}3487, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 4', '⎛3  i  5  7  ⋯⎞'#13#10'⎜2  i  3  4  ⋯⎟'#13#10'⎝1  i  i  2  ⋯⎠');
  TestML({LINENUM}3488, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 3', '⎛3  i  5  ⋯⎞'#13#10'⎜2  i  3  ⋯⎟'#13#10'⎝1  i  i  ⋯⎠');
  TestML({LINENUM}3489, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 2', '⎛3  i  ⋯⎞'#13#10'⎜2  i  ⋯⎟'#13#10'⎝⋮  ⋮  ⋱⎠');
  TestML({LINENUM}3490, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 1', '⎛3  ⋯⎞'#13#10'⎝⋮  ⋱⎠');
  TestSL({LINENUM}3491, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3)', '((3, i, 5, 7, i), (2, i, 3, 4, 5), (1, i, i, 2, 3))');
  TestSL({LINENUM}3492, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 0', '((3, i, 5, 7, i), (2, i, 3, 4, 5), (1, i, i, 2, 3))');
  TestSL({LINENUM}3493, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 10', '((3, i, 5, 7, i), (2, i, 3, 4, 5), (1, i, i, 2, 3))');
  TestSL({LINENUM}3494, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 5', '((3, i, 5, 7, i), (2, i, 3, 4, 5), (1, i, i, 2, 3))');
  TestSL({LINENUM}3495, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 4', '((3, i, 5, 7, …), (2, i, 3, 4, …), (1, i, i, 2, …))');
  TestSL({LINENUM}3496, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 3', '((3, i, 5, …), (2, i, 3, …), (1, i, i, …))');
  TestSL({LINENUM}3497, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 2', '((3, i, …), (2, i, …), …)');
  TestSL({LINENUM}3498, 'matrix(5, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \ 1', '((3, …), …)');

  Test({LINENUM}3500, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3)', 3, [3, ImaginaryUnit, 5, 7, ImaginaryUnit, 2, ImaginaryUnit, 3, 4, 5, 1, ImaginaryUnit, ImaginaryUnit, 2, 3]);
  TestML({LINENUM}3501, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3)', '⎛3  i  5⎞'#13#10'⎜7  i  2⎟'#13#10'⎜i  3  4⎟'#13#10'⎜5  1  i⎟'#13#10'⎝i  2  3⎠');
  TestML({LINENUM}3502, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \0', '⎛3  i  5⎞'#13#10'⎜7  i  2⎟'#13#10'⎜i  3  4⎟'#13#10'⎜5  1  i⎟'#13#10'⎝i  2  3⎠');
  TestML({LINENUM}3503, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \10', '⎛3  i  5⎞'#13#10'⎜7  i  2⎟'#13#10'⎜i  3  4⎟'#13#10'⎜5  1  i⎟'#13#10'⎝i  2  3⎠');
  TestML({LINENUM}3504, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \5', '⎛3  i  5⎞'#13#10'⎜7  i  2⎟'#13#10'⎜i  3  4⎟'#13#10'⎜5  1  i⎟'#13#10'⎝i  2  3⎠');
  TestML({LINENUM}3505, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \4', '⎛3  i  5⎞'#13#10'⎜7  i  2⎟'#13#10'⎜i  3  4⎟'#13#10'⎜5  1  i⎟'#13#10'⎝⋮  ⋮  ⋮⎠');
  TestML({LINENUM}3506, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \3', '⎛3  i  5⎞'#13#10'⎜7  i  2⎟'#13#10'⎜i  3  4⎟'#13#10'⎝⋮  ⋮  ⋮⎠');
  TestML({LINENUM}3507, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \2', '⎛3  i  ⋯⎞'#13#10'⎜7  i  ⋯⎟'#13#10'⎝⋮  ⋮  ⋱⎠');
  TestML({LINENUM}3508, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \1', '⎛3  ⋯⎞'#13#10'⎝⋮  ⋱⎠');
  TestSL({LINENUM}3509, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3)', '((3, i, 5), (7, i, 2), (i, 3, 4), (5, 1, i), (i, 2, 3))');
  TestSL({LINENUM}3510, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \0', '((3, i, 5), (7, i, 2), (i, 3, 4), (5, 1, i), (i, 2, 3))');
  TestSL({LINENUM}3511, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \10', '((3, i, 5), (7, i, 2), (i, 3, 4), (5, 1, i), (i, 2, 3))');
  TestSL({LINENUM}3512, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \5', '((3, i, 5), (7, i, 2), (i, 3, 4), (5, 1, i), (i, 2, 3))');
  TestSL({LINENUM}3513, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \4', '((3, i, 5), (7, i, 2), (i, 3, 4), (5, 1, i), …)');
  TestSL({LINENUM}3514, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \3', '((3, i, 5), (7, i, 2), (i, 3, 4), …)');
  TestSL({LINENUM}3515, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \2', '((3, i, …), (7, i, …), …)');
  TestSL({LINENUM}3516, 'matrix(3, 3, i, 5, 7, i, 2, i, 3, 4, 5, 1, i, i, 2, 3) \1', '((3, …), …)');

  TestML({LINENUM}3518, '❨❨1/3, i/3❩, ❨1/2, 1/4❩❩', '⎛  0.333333333333  0.333333333333⋅i⎞'#13#10'⎝             0.5              0.25⎠');
  TestML({LINENUM}3519, 'SetNumDigits(❨❨1/3, i/3❩, ❨1/2, 1/4❩❩, 4)', '⎛  0.3333  0.3333⋅i⎞'#13#10'⎝     0.5      0.25⎠');
  TestML({LINENUM}3520, 'SetNumDigits(❨❨1/3, i/3❩, ❨1/2, 1/4❩❩, 4) \ 1', '⎛0.3333    ⋯   ⎞'#13#10'⎝  ⋮       ⋱   ⎠');
  TestSL({LINENUM}3521, '❨❨1/3, i/3❩, ❨1/2, 1/4❩❩', '((0.333333333333, 0.333333333333⋅i), (0.5, 0.25))');
  TestSL({LINENUM}3522, 'SetNumDigits(❨❨1/3, i/3❩, ❨1/2, 1/4❩❩, 4)', '((0.3333, 0.3333⋅i), (0.5, 0.25))');
  TestSL({LINENUM}3523, 'SetNumDigits(❨❨1/3, i/3❩, ❨1/2, 1/4❩❩, 4) \ 1', '((0.3333, …), …)');

  Test({LINENUM}3525, '❨❨1, 2❩, ❨3, 4❩❩ + ❨❨i, 0❩, ❨0, i❩❩', 2, [1+ImaginaryUnit, 2, 3, 4+ImaginaryUnit]);
  Test({LINENUM}3526, '❨❨i, −i❩, ❨−i, i❩❩ + IdentityMatrix(2)', 2, [1+ImaginaryUnit, -ImaginaryUnit, -ImaginaryUnit, 1+ImaginaryUnit]);

  TestML({LINENUM}3528, 'SetDigitGrouping(❨❨12345, 12345⋅i❩❩, 3)', '(  12 345  12 345⋅i)');
  TestSL({LINENUM}3529, 'SetDigitGrouping(❨❨12345, 12345⋅i❩❩, 3)', '((12 345, 12 345⋅i))');

  Test({LINENUM}3531, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1]', ImaginaryUnit);
  Test({LINENUM}3532, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[2]', TASC(20.0));
  Test({LINENUM}3533, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[3]', TASC(30.0));
  Test({LINENUM}3534, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[4]', TASC(40.0));
  Test({LINENUM}3535, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[5]', TASC(50.0));
  Test({LINENUM}3536, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[6]', TASC(60.0));
  Test({LINENUM}3537, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[7]', failure, 'Index 7 out of bounds.');

  Test({LINENUM}3539, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-1]', TASC(60.0));
  Test({LINENUM}3540, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-2]', TASC(50.0));
  Test({LINENUM}3541, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-3]', TASC(40.0));
  Test({LINENUM}3542, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-4]', TASC(30.0));
  Test({LINENUM}3543, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-5]', TASC(20.0));
  Test({LINENUM}3544, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-6]', ImaginaryUnit);
  Test({LINENUM}3545, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-7]', failure, 'Index -7 out of bounds.');

  Test({LINENUM}3547, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}3549, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, 0]', failure, 'Index (1, 0) out of bounds.');
  Test({LINENUM}3550, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, 1]', ImaginaryUnit);
  Test({LINENUM}3551, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, 2]', TASC(20.0));
  Test({LINENUM}3552, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, 3]', TASC(30.0));
  Test({LINENUM}3553, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, 4]', failure, 'Index (1, 4) out of bounds.');
  Test({LINENUM}3554, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[2, 1]', TASC(40.0));
  Test({LINENUM}3555, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[2, 2]', TASC(50.0));
  Test({LINENUM}3556, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[2, 3]', TASC(60.0));
  Test({LINENUM}3557, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[2, 4]', failure, 'Index (2, 4) out of bounds.');
  Test({LINENUM}3558, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[3, 1]', failure, 'Index (3, 1) out of bounds.');

  Test({LINENUM}3560, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, -1]', TASC(30.0));
  Test({LINENUM}3561, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, -2]', TASC(20.0));
  Test({LINENUM}3562, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, -3]', ImaginaryUnit);
  Test({LINENUM}3563, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, -4]', failure, 'Index (1, -4) out of bounds.');

  Test({LINENUM}3565, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-1, 1]', TASC(40.0));
  Test({LINENUM}3566, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-1, 2]', TASC(50.0));
  Test({LINENUM}3567, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-1, 3]', TASC(60.0));
  Test({LINENUM}3568, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-1, 4]', failure, 'Index (-1, 4) out of bounds.');

  Test({LINENUM}3570, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-2, 1]', ImaginaryUnit);
  Test({LINENUM}3571, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-2, 2]', TASC(20.0));
  Test({LINENUM}3572, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-2, 3]', TASC(30.0));
  Test({LINENUM}3573, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-2, 4]', failure, 'Index (-2, 4) out of bounds.');

  Test({LINENUM}3575, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-1, 0]', failure, 'Index (-1, 0) out of bounds.');
  Test({LINENUM}3576, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-1, -1]', TASC(60.0));
  Test({LINENUM}3577, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-1, -2]', TASC(50.0));
  Test({LINENUM}3578, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-2, -1]', TASC(30.0));
  Test({LINENUM}3579, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-2, -2]', TASC(20.0));

  Test({LINENUM}3581, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, 0)]', failure, 'Index (1, 0) out of bounds.');
  Test({LINENUM}3582, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, 1)]', ImaginaryUnit);
  Test({LINENUM}3583, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, 2)]', TASC(20.0));
  Test({LINENUM}3584, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, 3)]', TASC(30.0));
  Test({LINENUM}3585, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, 4)]', failure, 'Index (1, 4) out of bounds.');
  Test({LINENUM}3586, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(2, 1)]', TASC(40.0));
  Test({LINENUM}3587, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(2, 2)]', TASC(50.0));
  Test({LINENUM}3588, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(2, 3)]', TASC(60.0));
  Test({LINENUM}3589, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(2, 4)]', failure, 'Index (2, 4) out of bounds.');
  Test({LINENUM}3590, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(3, 1)]', failure, 'Index (3, 1) out of bounds.');

  Test({LINENUM}3592, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, -1)]', TASC(30.0));
  Test({LINENUM}3593, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, -2)]', TASC(20.0));
  Test({LINENUM}3594, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, -3)]', ImaginaryUnit);
  Test({LINENUM}3595, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, -4)]', failure, 'Index (1, -4) out of bounds.');

  Test({LINENUM}3597, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 1)]', TASC(40.0));
  Test({LINENUM}3598, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 2)]', TASC(50.0));
  Test({LINENUM}3599, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 3)]', TASC(60.0));
  Test({LINENUM}3600, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 4)]', failure, 'Index (-1, 4) out of bounds.');

  Test({LINENUM}3602, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-2, 1)]', ImaginaryUnit);
  Test({LINENUM}3603, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-2, 2)]', TASC(20.0));
  Test({LINENUM}3604, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-2, 3)]', TASC(30.0));
  Test({LINENUM}3605, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-2, 4)]', failure, 'Index (-2, 4) out of bounds.');

  Test({LINENUM}3607, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 0)]', failure, 'Index (-1, 0) out of bounds.');
  Test({LINENUM}3608, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-1, -1)]', TASC(60.0));
  Test({LINENUM}3609, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-1, -2)]', TASC(50.0));
  Test({LINENUM}3610, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-2, -1)]', TASC(30.0));
  Test({LINENUM}3611, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-2, -2)]', TASC(20.0));

  Test({LINENUM}3613, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3614, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[2] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3615, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[6] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3616, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[7] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3617, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-1] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3618, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[0] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3619, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-20] ≔ 100', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}3621, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, 1] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3622, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, 2] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3623, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, 5] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3624, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[1, -1] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3625, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[2, 2] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3626, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[2, 100] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3627, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[2, -4] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3628, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[2, 0] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3629, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[-1, 1] ≔ 100', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}3631, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, 1)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3632, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, 2)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3633, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, 5)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3634, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(1, -1)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3635, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(2, 2)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3636, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(2, 100)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3637, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(2, -4)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3638, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(2, 0)] ≔ 100', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}3639, '❨❨i, 20, 30❩, ❨40, 50, 60❩❩[''(-1, 1)] ≔ 100', failure, 'Left side cannot be assigned to.');


  //
  // Colours
  //

  Test({LINENUM}3646, 'color("red")', TRGB(clRed), True, 'rgba(1.000, 0.000, 0.000, 1.000)');
  Test({LINENUM}3647, 'color("lime")', TRGB(clLime), True, 'rgba(0.000, 1.000, 0.000, 1.000)');
  Test({LINENUM}3648, 'color("blue")', TRGB(clBlue), True, 'rgba(0.000, 0.000, 1.000, 1.000)');
  Test({LINENUM}3649, 'color("white")', TRGB(clWhite), True, 'rgba(1.000, 1.000, 1.000, 1.000)');
  Test({LINENUM}3650, 'color("black")', TRGB(clBlack), True, 'rgba(0.000, 0.000, 0.000, 1.000)');
  Test({LINENUM}3651, 'color("yellow")', TRGB(clYellow), True, 'rgba(1.000, 1.000, 0.000, 1.000)');
  Test({LINENUM}3652, 'color("aqua")', TRGB(clAqua), True, 'rgba(0.000, 1.000, 1.000, 1.000)');
  Test({LINENUM}3653, 'color("fuchsia")', TRGB(clFuchsia), True, 'rgba(1.000, 0.000, 1.000, 1.000)');
  Test({LINENUM}3654, 'rgb(0.2, 0.3, 0.4)', TRGB.Create(0.2, 0.3, 0.4), True, 'rgba(0.200, 0.300, 0.400, 1.000)');
  TestML({LINENUM}3655, 'GetRGB(rgb(1/3, 1/7, 1/9)) @ (x ↦ SetNumDigits(x, 4))', 'red: 0.3333'#13#10'green: 0.1429'#13#10'blue: 0.1111');
  TestSL({LINENUM}3656, 'GetRGB(rgb(1/3, 1/7, 1/9)) @ (x ↦ SetNumDigits(x, 4))', '(red: 0.3333, green: 0.1429, blue: 0.1111)');


  //
  // Lists
  //

  Test({LINENUM}3663, '''(1, 2, "cat", ❨1, 0❩)',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASO('cat'), ASO(ASR2(1, 0))]
    )
  );

  Test({LINENUM}3669, '''(1, 2, "cat", ❨1, 0❩)[1]', 1);
  Test({LINENUM}3670, '''(1, 2, "cat", ❨1, 0❩)[2]', 2);
  Test({LINENUM}3671, '''(1, 2, "cat", ❨1, 0❩)[3]', 'cat');
  Test({LINENUM}3672, '''(1, 2, "cat", ❨1, 0❩)[4]', ASO(ASR2(1, 0)));
  Test({LINENUM}3673, '''(1, 2, "cat", ❨1, 0❩)[5]', failure, 'Index 5 out of bounds.');

  Test({LINENUM}3675, '''(1, 2, "cat", ❨1, 0❩)[-1]', ASO(ASR2(1, 0)));
  Test({LINENUM}3676, '''(1, 2, "cat", ❨1, 0❩)[-2]', 'cat');
  Test({LINENUM}3677, '''(1, 2, "cat", ❨1, 0❩)[-3]', 2);
  Test({LINENUM}3678, '''(1, 2, "cat", ❨1, 0❩)[-4]', 1);
  Test({LINENUM}3679, '''(1, 2, "cat", ❨1, 0❩)[-5]', failure, 'Index -5 out of bounds.');

  Test({LINENUM}3681, '''(1, 2, "cat", ❨1, 0❩)[0]', failure, 'Index 0 out of bounds.');

  TestML({LINENUM}3683, '''(1, 2, 3)', '1'#13#10'2'#13#10'3');
  TestSL({LINENUM}3684, '''(1, 2, 3)', '(1, 2, 3)');

  TestML({LINENUM}3686, '''(123)', '123');
  TestSL({LINENUM}3687, '''(123)', '(123)');

  TestML({LINENUM}3689, '''(1/3, 1/7, 1/9)', '0.333333333333'#13#10'0.142857142857'#13#10'0.111111111111');
  TestML({LINENUM}3690, '''(1/3, 1/7, 1/9) @ RealNumber', '0.333333333333'#13#10'0.142857142857'#13#10'0.111111111111');
  TestML({LINENUM}3691, '''(1/3, 1/7, 1/9) @ RealNumber @ (x ↦ SetNumDigits(x, 4))', '0.3333'#13#10'0.1429'#13#10'0.1111');
  TestML({LINENUM}3692, '''(1/3, 1/7, 1/9) @ ToFraction', '1/3'#13#10'1/7'#13#10'1/9');

  TestSL({LINENUM}3694, '''(1/3, 1/7, 1/9)', '(0.333333333333, 0.142857142857, 0.111111111111)');
  TestSL({LINENUM}3695, '''(1/3, 1/7, 1/9) @ RealNumber', '(0.333333333333, 0.142857142857, 0.111111111111)');
  TestSL({LINENUM}3696, '''(1/3, 1/7, 1/9) @ RealNumber @ (x ↦ SetNumDigits(x, 4))', '(0.3333, 0.1429, 0.1111)');
  TestSL({LINENUM}3697, '''(1/3, 1/7, 1/9) @ ToFraction', '(1/3, 1/7, 1/9)');

  TestML({LINENUM}3699, 'SequenceList(100)', '1'#13#10'2'#13#10'3'#13#10'4'#13#10'5'#13#10'6'#13#10'7'#13#10'8'#13#10'9'#13#10'10'#13#10'11'#13#10'12'#13#10'13'#13#10'14'#13#10'15'#13#10'16'
    +#13#10'17'#13#10'18'#13#10'19'#13#10'20'#13#10'21'#13#10'22'#13#10'23'#13#10'24'+#13#10'25'#13#10'26'#13#10'27'#13#10'28'#13#10'29'#13#10'30'#13#10'31'#13#10'32'#13#10'33'#13#10'34'#13#10'35'+#13#10'36'#13#10'37'#13#10'38'#13#10'39'#13#10'40'#13#10'41'#13#10'42'#13#10'43'#13#10'44'#13#10'45'#13#10'46'+#13#10'47'#13#10'48'#13#10'49'#13#10'50'#13#10'51'#13#10'52'#13#10'53'#13#10'54'#13#10'55'#13#10'56'
    +#13#10'57'#13#10'58'#13#10'59'#13#10'60'#13#10'61'#13#10'62'#13#10'63'#13#10'64'#13#10'65'#13#10'66'#13#10'67'#13#10'68'
    +#13#10'69'#13#10'70'#13#10'71'#13#10'72'#13#10'73'#13#10'74'#13#10'75'#13#10'76'#13#10'77'#13#10'78'#13#10'79'#13#10'80'#13#10'81'#13#10'82'#13#10'83'#13#10'84'#13#10'85'#13#10'86'#13#10'87'#13#10'88'#13#10'89'#13#10'90'#13#10'91'#13#10'92'#13#10'93'#13#10'94'#13#10'95'#13#10'96'#13#10'97'#13#10'98'#13#10'99'#13#10'100');
  TestSL({LINENUM}3703, 'SequenceList(100)', '(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, '+'21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, '+'46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)');

  TestML({LINENUM}3705, 'SequenceList(200)', '1'#13#10'2'#13#10'3'#13#10'4'#13#10'5'#13#10'6'#13#10'7'#13#10'8'#13#10'9'#13#10'10'#13#10'11'#13#10'12'#13#10'13'#13#10'14'#13#10'15'#13#10'16'
    +#13#10'17'#13#10'18'#13#10'19'#13#10'20'#13#10'21'#13#10'22'#13#10'23'#13#10'24'
    +#13#10'25'#13#10'26'#13#10'27'#13#10'28'#13#10'29'#13#10'30'#13#10'31'#13#10'32'#13#10'33'#13#10'34'#13#10'35'
    +#13#10'36'#13#10'37'#13#10'38'#13#10'39'#13#10'40'#13#10'41'#13#10'42'#13#10'43'#13#10'44'#13#10'45'#13#10'46'
    +#13#10'47'#13#10'48'#13#10'49'#13#10'50'#13#10'51'#13#10'52'#13#10'53'#13#10'54'#13#10'55'#13#10'56'
    +#13#10'57'#13#10'58'#13#10'59'#13#10'60'#13#10'61'#13#10'62'#13#10'63'#13#10'64'#13#10'65'#13#10'66'#13#10'67'#13#10'68'
    +#13#10'69'#13#10'70'#13#10'71'#13#10'72'#13#10'73'#13#10'74'#13#10'75'#13#10'76'#13#10'77'#13#10'78'#13#10'79'#13#10'80'#13#10'81'#13#10'82'#13#10'83'#13#10'84'#13#10'85'#13#10'86'#13#10'87'#13#10'88'#13#10'89'#13#10'90'#13#10'91'#13#10'92'#13#10'93'#13#10'94'#13#10'95'#13#10'96'#13#10'97'#13#10'98'#13#10'99'#13#10'100'#13#10'⋮');
  TestSL({LINENUM}3712, 'SequenceList(200)', '(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, '+'21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, '+'46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, …)');

  TestML({LINENUM}3714, '''(1, 2, 3, 4, 5) \ 0', '1'#13#10'2'#13#10'3'#13#10'4'#13#10'5');
  TestML({LINENUM}3715, '''(1, 2, 3, 4, 5) \ 10', '1'#13#10'2'#13#10'3'#13#10'4'#13#10'5');
  TestML({LINENUM}3716, '''(1, 2, 3, 4, 5) \ 5', '1'#13#10'2'#13#10'3'#13#10'4'#13#10'5');
  TestML({LINENUM}3717, '''(1, 2, 3, 4, 5) \ 4', '1'#13#10'2'#13#10'3'#13#10'4'#13#10'⋮');
  TestML({LINENUM}3718, '''(1, 2, 3, 4, 5) \ 3', '1'#13#10'2'#13#10'3'#13#10'⋮');
  TestML({LINENUM}3719, '''(1, 2, 3, 4, 5) \ 2', '1'#13#10'2'#13#10'⋮');
  TestML({LINENUM}3720, '''(1, 2, 3, 4, 5) \ 1', '1'#13#10'⋮');

  TestSL({LINENUM}3722, '''(1, 2, 3, 4, 5) \ 0', '(1, 2, 3, 4, 5)');
  TestSL({LINENUM}3723, '''(1, 2, 3, 4, 5) \ 10', '(1, 2, 3, 4, 5)');
  TestSL({LINENUM}3724, '''(1, 2, 3, 4, 5) \ 5', '(1, 2, 3, 4, 5)');
  TestSL({LINENUM}3725, '''(1, 2, 3, 4, 5) \ 4', '(1, 2, 3, 4, …)');
  TestSL({LINENUM}3726, '''(1, 2, 3, 4, 5) \ 3', '(1, 2, 3, …)');
  TestSL({LINENUM}3727, '''(1, 2, 3, 4, 5) \ 2', '(1, 2, …)');
  TestSL({LINENUM}3728, '''(1, 2, 3, 4, 5) \ 1', '(1, …)');

  TestML({LINENUM}3730, '''()', '');
  TestSL({LINENUM}3731, '''()', '()');

  TestSL({LINENUM}3733, 'list(1, 2, 3)', '(1, 2, 3)');
  TestSL({LINENUM}3734, 'list(1, 2, 3) \2', '(1, 2, …)');

  Test({LINENUM}3736, '''(1, 2, "cat", ❨1, 0❩)[3][1]', 'c');
  Test({LINENUM}3737, '''(1, 2, "cat", ❨1, 0❩)[3][2]', 'a');
  Test({LINENUM}3738, '''(1, 2, "cat", ❨1, 0❩)[3][3]', 't');
  Test({LINENUM}3739, '''(1, 2, "cat", ❨1, 0❩)[3][4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}3741, '''(1, 2, "cat", ❨1, 0❩)[3][-1]', 't');
  Test({LINENUM}3742, '''(1, 2, "cat", ❨1, 0❩)[3][-2]', 'a');
  Test({LINENUM}3743, '''(1, 2, "cat", ❨1, 0❩)[3][-3]', 'c');
  Test({LINENUM}3744, '''(1, 2, "cat", ❨1, 0❩)[3][-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}3746, '''(1, 2, "cat", ❨1, 0❩)[3][0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}3748, '''(1, 2, "cat", ❨1, 0❩)[3][1] ≔ "C"', failure, 'Left side cannot be assigned to.');


  //
  // Structures
  //

  Test({LINENUM}3755, 'struct("a": 42, "b": "dog")',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('dog')]
    )
  );

  TestML({LINENUM}3762, 'struct("a": 1, "b": 2, "c": 3)', 'a: 1'#13#10'b: 2'#13#10'c: 3');
  TestSL({LINENUM}3763, 'struct("a": 1, "b": 2, "c": 3)', '(a: 1, b: 2, c: 3)');

  TestML({LINENUM}3765, 'struct("a": 1, "b": 2, "c": 3) @ square', 'a: 1'#13#10'b: 4'#13#10'c: 9');
  TestSL({LINENUM}3766, 'struct("a": 1, "b": 2, "c": 3) @ square', '(a: 1, b: 4, c: 9)');

  TestML({LINENUM}3768, 'struct("a": 1/3)', 'a: 0.333333333333');
  TestSL({LINENUM}3769, 'struct("a": 1/3)', '(a: 0.333333333333)');

  TestML({LINENUM}3771, 'struct("a": 1/3) @ ToFraction', 'a: 1/3');
  TestSL({LINENUM}3772, 'struct("a": 1/3) @ ToFraction', '(a: 1/3)');

  TestML({LINENUM}3774, 'struct("a": 1/3) @ (x ↦ SetNumDigits(x, 4))', 'a: 0.3333');
  TestSL({LINENUM}3775, 'struct("a": 1/3) @ (x ↦ SetNumDigits(x, 4))', '(a: 0.3333)');

  TestML({LINENUM}3777, 's1 ≔ struct("a": 1, "b": 2); s2 ≔ struct("a": 10, "b": 20); struct("first": s1, "second": s2)',
    'first.a: 1'#13#10'first.b: 2'#13#10'second.a: 10'#13#10'second.b: 20');
  TestSL({LINENUM}3779, 's1 ≔ struct("a": 1, "b": 2); s2 ≔ struct("a": 10, "b": 20); struct("first": s1, "second": s2)',
    '(first: (a: 1, b: 2), second: (a: 10, b: 20))');

  Test({LINENUM}3782, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  TestML({LINENUM}3783, 'name("Andreas", "Rejbrand")', 'first: Andreas'#13#10'last: Rejbrand');
  TestSL({LINENUM}3784, 'name("Andreas", "Rejbrand")', '(first: Andreas, last: Rejbrand)');
  TestML({LINENUM}3785, 'person("Andreas", "Rejbrand", "male", 31)', 'name.first: Andreas'#13#10'name.last: Rejbrand'#13#10'sex: male'#13#10'age: 31');
  TestSL({LINENUM}3786, 'person("Andreas", "Rejbrand", "male", 31)', '(name: (first: Andreas, last: Rejbrand), sex: male, age: 31)');
  Test({LINENUM}3787, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
  TestML({LINENUM}3788, 'struct("mother": Jane, "father": Mike)', 'mother.name.first: Jane'#13#10'mother.name.last: Smith'#13#10'mother.sex: female'#13#10'mother.age: 40'#13#10'father.name.first: Mike'#13#10'father.name.last: Doe'#13#10'father.sex: male'#13#10'father.age: 45');
  TestSL({LINENUM}3789, 'struct("mother": Jane, "father": Mike)', '(mother: (name: (first: Jane, last: Smith), sex: female, age: 40), father: (name: (first: Mike, last: Doe), sex: male, age: 45))');

  TestML({LINENUM}3791, '''(Jane, Mike)', '(name: (first: Jane, last: Smith), sex: female, age: 40)'#13#10'(name: (first: Mike, last: Doe), sex: male, age: 45)');
  TestSL({LINENUM}3792, '''(Jane, Mike)', '((name: (first: Jane, last: Smith), sex: female, age: 40), (name: (first: Mike, last: Doe), sex: male, age: 45))');

  Test({LINENUM}3794, 'delete(s1); delete(s2); delete(name); delete(person); delete(Jane); delete(Mike);', null);

  TestML({LINENUM}3796, 'struct("a": struct("b": struct("c": struct("d": struct("e": struct("f": 42))))))', 'a.b.c.d.e.f: 42');
  TestSL({LINENUM}3797, 'struct("a": struct("b": struct("c": struct("d": struct("e": struct("f": 42))))))', '(a: (b: (c: (d: (e: (f: 42))))))');

  TestML({LINENUM}3799, 'struct("a": ''(1, 2, 3), "b": ''(10, 20, 30))', 'a: (1, 2, 3)'#13#10'b: (10, 20, 30)');
  TestSL({LINENUM}3800, 'struct("a": ''(1, 2, 3), "b": ''(10, 20, 30))', '(a: (1, 2, 3), b: (10, 20, 30))');

  TestML({LINENUM}3802, 'struct("a": ❨1, 2, 3❩, "b": ❨10, 20, 30❩)', 'a: (1, 2, 3)'#13#10'b: (10, 20, 30)');
  TestSL({LINENUM}3803, 'struct("a": ❨1, 2, 3❩, "b": ❨10, 20, 30❩)', '(a: (1, 2, 3), b: (10, 20, 30))');

  TestML({LINENUM}3805, 'struct("a": ❨1, 2, 3❩, "b": IdentityMatrix(2))', 'a: (1, 2, 3)'#13#10'b: ((1, 0), (0, 1))');
  TestSL({LINENUM}3806, 'struct("a": ❨1, 2, 3❩, "b": IdentityMatrix(2))', '(a: (1, 2, 3), b: ((1, 0), (0, 1)))');

  Test({LINENUM}3808, 'struct("a": 42, "b": "dog").a', 42);
  Test({LINENUM}3809, 'struct("a": 42, "b": "dog").b', 'dog');
  Test({LINENUM}3810, 'struct("a": 42, "b": "dog").c', failure, 'There is no member named "c".');

  Test({LINENUM}3812, 'struct("a": 42, "b": "dog")["a"]', 42);
  Test({LINENUM}3813, 'struct("a": 42, "b": "dog")["b"]', 'dog');
  Test({LINENUM}3814, 'struct("a": 42, "b": "dog")["c"]', failure, 'There is no member named "c".');

  Test({LINENUM}3816, 'struct("a": 42, "b": "dog")[1]', 42);
  Test({LINENUM}3817, 'struct("a": 42, "b": "dog")[2]', 'dog');
  Test({LINENUM}3818, 'struct("a": 42, "b": "dog")[3]', failure, 'Index 3 out of bounds.');

  Test({LINENUM}3820, 'struct("a": 42, "b": "dog")[-1]', 'dog');
  Test({LINENUM}3821, 'struct("a": 42, "b": "dog")[-2]', 42);
  Test({LINENUM}3822, 'struct("a": 42, "b": "dog")[-3]', failure, 'Index -3 out of bounds.');

  Test({LINENUM}3824, 'struct("a": 42, "b": "dog")[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}3826, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [
        ASOInt(42),
        ASO('dog'),
        TAlgosimStructure.CreateWithValue(
          ['dog', 'rat'],
          [ASO('Sally'), ASO('Fiona')]
        )
      ]
    )
  );

  Test({LINENUM}3840, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).a', 42);
  Test({LINENUM}3841, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).b', 'dog');
  Test({LINENUM}3842, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c',
    TAlgosimStructure.CreateWithValue(
      ['dog', 'rat'],
      [ASO('Sally'), ASO('Fiona')]
    )
  );

  Test({LINENUM}3849, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["a"]', 42);
  Test({LINENUM}3850, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["b"]', 'dog');
  Test({LINENUM}3851, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"]',
    TAlgosimStructure.CreateWithValue(
      ['dog', 'rat'],
      [ASO('Sally'), ASO('Fiona')]
    )
  );

  Test({LINENUM}3858, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[1]', 42);
  Test({LINENUM}3859, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[2]', 'dog');
  Test({LINENUM}3860, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3]',
    TAlgosimStructure.CreateWithValue(
      ['dog', 'rat'],
      [ASO('Sally'), ASO('Fiona')]
    )
  );

  Test({LINENUM}3867, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-3]', 42);
  Test({LINENUM}3868, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-2]', 'dog');
  Test({LINENUM}3869, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1]',
    TAlgosimStructure.CreateWithValue(
      ['dog', 'rat'],
      [ASO('Sally'), ASO('Fiona')]
    )
  );

  Test({LINENUM}3876, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c.rat',
    'Fiona'
  );
  Test({LINENUM}3879, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c["rat"]',
    'Fiona'
  );
  Test({LINENUM}3882, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c[2]',
    'Fiona'
  );
  Test({LINENUM}3885, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c[-1]',
    'Fiona'
  );

  Test({LINENUM}3889, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"].rat',
    'Fiona'
  );
  Test({LINENUM}3892, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"]["rat"]',
    'Fiona'
  );
  Test({LINENUM}3895, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"][2]',
    'Fiona'
  );
  Test({LINENUM}3898, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"][-1]',
    'Fiona'
  );

  Test({LINENUM}3902, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3].rat',
    'Fiona'
  );
  Test({LINENUM}3905, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3]["rat"]',
    'Fiona'
  );
  Test({LINENUM}3908, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3][2]',
    'Fiona'
  );
  Test({LINENUM}3911, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3][-1]',
    'Fiona'
  );

  Test({LINENUM}3915, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1].rat',
    'Fiona'
  );
  Test({LINENUM}3918, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1]["rat"]',
    'Fiona'
  );
  Test({LINENUM}3921, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1][2]',
    'Fiona'
  );
  Test({LINENUM}3924, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1][-1]',
    'Fiona'
  );

  // ---

  Test({LINENUM}3930, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c.dog',
    'Sally'
  );
  Test({LINENUM}3933, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c["dog"]',
    'Sally'
  );
  Test({LINENUM}3936, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c[1]',
    'Sally'
  );
  Test({LINENUM}3939, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c[-2]',
    'Sally'
  );

  Test({LINENUM}3943, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"].dog',
    'Sally'
  );
  Test({LINENUM}3946, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"]["dog"]',
    'Sally'
  );
  Test({LINENUM}3949, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"][1]',
    'Sally'
  );
  Test({LINENUM}3952, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"][-2]',
    'Sally'
  );

  Test({LINENUM}3956, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3].dog',
    'Sally'
  );
  Test({LINENUM}3959, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3]["dog"]',
    'Sally'
  );
  Test({LINENUM}3962, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3][1]',
    'Sally'
  );
  Test({LINENUM}3965, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3][-2]',
    'Sally'
  );

  Test({LINENUM}3969, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1].dog',
    'Sally'
  );
  Test({LINENUM}3972, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1]["dog"]',
    'Sally'
  );
  Test({LINENUM}3975, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1][1]',
    'Sally'
  );
  Test({LINENUM}3978, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1][-2]',
    'Sally'
  );

  // ---

  Test({LINENUM}3984, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1].cat',
    failure, 'There is no member named "cat".'
  );
  Test({LINENUM}3987, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1]["cat"]',
    failure, 'There is no member named "cat".'
  );
  Test({LINENUM}3990, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1][3]',
    failure, 'Index 3 out of bounds.'
  );
  Test({LINENUM}3993, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[-1][-3]',
    failure, 'Index -3 out of bounds.'
  );


  // ---

  Test({LINENUM}4000, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c.dog ≔ "Molly"',
    failure, 'Left side cannot be assigned to.');

  Test({LINENUM}4003, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c ≔ "Molly"',
    failure, 'Left side cannot be assigned to.');

  Test({LINENUM}4006, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"]["dog"] ≔ "Molly"',
    failure, 'Left side cannot be assigned to.');

  Test({LINENUM}4009, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"] ≔ "Molly"',
    failure, 'Left side cannot be assigned to.');

  Test({LINENUM}4012, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3]["dog"] ≔ "Molly"',
    failure, 'Left side cannot be assigned to.');

  Test({LINENUM}4015, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3] ≔ "Molly"',
    failure, 'Left side cannot be assigned to.');

  Test({LINENUM}4018, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c["dog"] ≔ "Molly"',
    failure, 'Left side cannot be assigned to.');

  Test({LINENUM}4021, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"].dog ≔ "Molly"',
    failure, 'Left side cannot be assigned to.');

  // ---

  Test({LINENUM}4026, 'struct("a": 42, "b": "dog").b[1]', 'd');
  Test({LINENUM}4027, 'struct("a": 42, "b": "dog").b[2]', 'o');
  Test({LINENUM}4028, 'struct("a": 42, "b": "dog").b[3]', 'g');
  Test({LINENUM}4029, 'struct("a": 42, "b": "dog").b[4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}4031, 'struct("a": 42, "b": "dog").b[-1]', 'g');
  Test({LINENUM}4032, 'struct("a": 42, "b": "dog").b[-2]', 'o');
  Test({LINENUM}4033, 'struct("a": 42, "b": "dog").b[-3]', 'd');
  Test({LINENUM}4034, 'struct("a": 42, "b": "dog").b[-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}4036, 'struct("a": 42, "b": "dog").b[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}4038, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c.rat[1]',
    'F'
  );

  Test({LINENUM}4042, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"].rat[2]',
    'i'
  );

  Test({LINENUM}4046, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3].rat[3]',
    'o'
  );

  Test({LINENUM}4050, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"]["rat"][4]',
    'n'
  );

  Test({LINENUM}4054, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3][2][5]',
    'a'
  );

  Test({LINENUM}4058, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c["rat"][6]',
    failure, 'Index 6 out of bounds.'
  );

  Test({LINENUM}4062, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3]["rat"][-1]',
    'a'
  );

  // ---

  Test({LINENUM}4068, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c.rat[1] ≔ "H"',
    failure, 'Left side cannot be assigned to.'
  );

  Test({LINENUM}4072, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"].rat[2] ≔ "H"',
    failure, 'Left side cannot be assigned to.'
  );

  Test({LINENUM}4076, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3].rat[3] ≔ "H"',
    failure, 'Left side cannot be assigned to.'
  );

  Test({LINENUM}4080, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))["c"]["rat"][4] ≔ "H"',
    failure, 'Left side cannot be assigned to.'
  );

  Test({LINENUM}4084, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3][2][5] ≔ "H"',
    failure, 'Left side cannot be assigned to.'
  );

  Test({LINENUM}4088, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona")).c["rat"][6] ≔ "H"',
    failure, 'Left side cannot be assigned to.'
  );

  Test({LINENUM}4092, 'struct("a": 42, "b": "dog", "c": struct("dog": "Sally", "rat": "Fiona"))[3]["rat"][-1] ≔ "H"',
    failure, 'Left side cannot be assigned to.'
  );


  //
  // Sets
  //

  TestML({LINENUM}4101, '{42}', '{42}');
  TestSL({LINENUM}4102, '{42}', '{42}');
  TestML({LINENUM}4103, '{}', '∅');
  TestSL({LINENUM}4104, '{}', '∅');
  TestML({LINENUM}4105, '∅', '∅');
  TestSL({LINENUM}4106, '∅', '∅');
  Test({LINENUM}4107, '#{}', 0);
  Test({LINENUM}4108, '#∅', 0);
  Test({LINENUM}4109, '#{1, 2, 3}', 3);
  Test({LINENUM}4110, '#{1, 2, 3, 2}', 3);
  Test({LINENUM}4111, '#{1, 2, 3, 1, 2, 3, 1, 2, 3, 3, 2, 1, 2, 3}', 3);
  Test({LINENUM}4112, '#{1, 2, 3, 1, 2, 3, 1, 4, 2, 3, 3, 2, 1, 2, 3}', 4);
  TestSL({LINENUM}4113, '{1/3} @ ToFraction', '{1/3}');
  TestSL({LINENUM}4114, '{1/3}', '{0.333333333333}');
  TestSL({LINENUM}4115, '{1/3} @ (x ↦ SetNumDigits(x, 4))', '{0.3333}');

  Test({LINENUM}4117, '{42}', intset([42]));
  Test({LINENUM}4118, '{42, 42, 42, 42}', intset([42]));
  Test({LINENUM}4119, '{}', intset([]));
  Test({LINENUM}4120, '{1, 2, 3}', intset([1, 2, 3]));
  Test({LINENUM}4121, '{1, 2, 3, 3, 3, 3}', intset([1, 2, 3]));
  Test({LINENUM}4122, '{1, 3, 2}', intset([1, 2, 3]));
  Test({LINENUM}4123, '{3, 2, 1}', intset([1, 2, 3]));
  Test({LINENUM}4124, '{3, 2, 2, 2, 3, 1}', intset([1, 2, 3]));

  Test({LINENUM}4126, '{1, 2, 3} = {3, 2, 1}', True);
  Test({LINENUM}4127, '{1, 2, 3} = {2, 3, 1}', True);
  Test({LINENUM}4128, '{1, 2, 3} = {2, 3, 1, 1, 1, 1}', True);
  Test({LINENUM}4129, '{1, 2, 3} = {1, 1, 2, 3}', True);
  Test({LINENUM}4130, '{1, 2, 3} = {1, 1, 2, 2, 3, 3}', True);
  Test({LINENUM}4131, '{1, 2, 3} = {3.0, 2, 1/2 + 1/2}', True);
  Test({LINENUM}4132, '{1, 2, 2, 3} = {1, 1, 2, 3}', True);
  Test({LINENUM}4133, '{1, 2, 2, 3} ≠ {1, 1, 2, 3, 4}', True);

  Test({LINENUM}4135, '{1} = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}', true);

  Test({LINENUM}4137, '{10} @ type', asoset(['integer']));
  Test({LINENUM}4138, '{10, 10.0} @ type', asoset(['integer']));
  Test({LINENUM}4139, '{10.0} @ type', asoset(['integer']));
  Test({LINENUM}4140, '{10.2} @ type', asoset(['real number']));
  Test({LINENUM}4141, '{10.0, 10} @ type', asoset(['integer']));

  Test({LINENUM}4143, '{0} @ type', asoset(['integer']));
  Test({LINENUM}4144, '{0, 0.0} @ type', asoset(['integer']));
  Test({LINENUM}4145, '{0, 1/2 - 1/2} @ type', asoset(['integer']));
  Test({LINENUM}4146, '{0, i - i} @ type', asoset(['integer']));

  Test({LINENUM}4148, '{0.0} @ type', asoset(['integer']));
  Test({LINENUM}4149, '{0.0, 0} @ type', asoset(['integer']));
  Test({LINENUM}4150, '{0.0, 1/2 - 1/2} @ type', asoset(['integer']));
  Test({LINENUM}4151, '{0.0, i - i} @ type', asoset(['integer']));

  Test({LINENUM}4153, '{1/2 - 1/2} @ type', asoset(['rational number']));
  Test({LINENUM}4154, '{1/2 - 1/2, 0} @ type', asoset(['rational number']));
  Test({LINENUM}4155, '{1/2 - 1/2, 0.0} @ type', asoset(['rational number']));
  Test({LINENUM}4156, '{1/2 - 1/2, i - i} @ type', asoset(['rational number']));

  Test({LINENUM}4158, '{i - i} @ type', asoset(['integer']));
  Test({LINENUM}4159, '{i - i, 0} @ type', asoset(['integer']));
  Test({LINENUM}4160, '{i - i, 0.0} @ type', asoset(['integer']));
  Test({LINENUM}4161, '{i - i, 1/2 - 1/2} @ type', asoset(['integer']));

  Test({LINENUM}4163, '{10, 20, 30} @ type', asoset(['integer']));
  Test({LINENUM}4164, '{10, 20, 20, 30} @ type', asoset(['integer']));
  Test({LINENUM}4165, '{10, 20, 20.0, 30} @ type', asoset(['integer']));
  Test({LINENUM}4166, '{10, 20.0, 30} @ type', asoset(['integer']));
  Test({LINENUM}4167, '{10, 20.5, 30} @ type', asoset(['integer', 'real number']));
  Test({LINENUM}4168, '{10, 20.0, 20, 30} @ type', asoset(['integer']));
  Test({LINENUM}4169, '{10, 20.5, 20, 30} @ type', asoset(['integer', 'real number']));

  Test({LINENUM}4171, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', asosetex(
    [
      ASO(ASR3(1, 0, 0)),
      ASO(ASR3(0, 1, 0)),
      ASO(ASR3(0, 0, 1))
    ]));

  Test({LINENUM}4178, '{❨1, 0, 0❩, ❨1, 0, 0❩, ❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', asosetex(
    [
      ASO(ASR3(1, 0, 0)),
      ASO(ASR3(0, 1, 0)),
      ASO(ASR3(0, 0, 1))
    ]));
  Test({LINENUM}4184, '{❨1, 0, 0❩, ❨1, 0, 0❩, ❨1, i-i, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', asosetex(
    [
      ASO(ASR3(1, 0, 0)),
      ASO(ASR3(0, 1, 0)),
      ASO(ASR3(0, 0, 1))
    ]));


  //
  // Binary data
  //

  TestML({LINENUM}4196, 'BinaryData("test")', '74 00 65 00 73 00 74 00');
  TestSL({LINENUM}4197, 'BinaryData("test")', '74 00 65 00 73 00 74 00');
  TestML({LINENUM}4198, 'BinaryData(0)', '00 00 00 00 00 00 00 00');
  TestSL({LINENUM}4199, 'BinaryData(0)', '00 00 00 00 00 00 00 00');
  TestML({LINENUM}4200, 'BinaryData(255)', 'FF 00 00 00 00 00 00 00');
  TestSL({LINENUM}4201, 'BinaryData(255)', 'FF 00 00 00 00 00 00 00');
  TestML({LINENUM}4202, 'BinaryData(16#12ABCDEF123456)', '56 34 12 EF CD AB 12 00');
  TestSL({LINENUM}4203, 'BinaryData(16#12ABCDEF123456)', '56 34 12 EF CD AB 12 00');
  TestML({LINENUM}4204, 'BinaryData("∫")', '2B 22');
  TestSL({LINENUM}4205, 'BinaryData("∫")', '2B 22');
  TestML({LINENUM}4206, 'BinaryData("")', '');
  TestSL({LINENUM}4207, 'BinaryData("")', '');





  //
  //
  //  CHAPTER 2
  //  Syntax and operators.
  //
  //

  Chapter('Syntax and operators');

  //
  // Syntax
  //

  Test({LINENUM}4226, '1+1', 2, True, '2');
  Test({LINENUM}4227, '1 + 1', 2, True, '2');
  Test({LINENUM}4228, ' 1 + 1 ', 2, True, '2');
  Test({LINENUM}4229, '     1   +   1  ', 2, True, '2');
  Test({LINENUM}4230, '1'#13#10'+1', 2, True, '2');
  Test({LINENUM}4231, '1'#13#10#9'+1', 2, True, '2');
  Test({LINENUM}4232, '   1   '#9#9#13#10#9'  +1'#13#10#13#10, 2, True, '2');
  Test({LINENUM}4233, '1++1', 2, True, '2');
  Test({LINENUM}4234, '+1+1', 2, True, '2');
  Test({LINENUM}4235, '+1+(+1)', 2, True, '2');
  Test({LINENUM}4236, '(1)+(1)', 2, True, '2');
  Test({LINENUM}4237, '(1+1)', 2, True, '2');
  Test({LINENUM}4238, '((1)+(1))', 2, True, '2');
  Test({LINENUM}4239, '((((1))))+((1))', 2, True, '2');
  Test({LINENUM}4240, '(((1))+((((1)))))', 2, True, '2');
  Test({LINENUM}4241, '+1+(+1)', 2, True, '2');
  Test({LINENUM}4242, '(+1)+(+1)', 2, True, '2');
  Test({LINENUM}4243, '((+1)+(+1))', 2, True, '2');
  Test({LINENUM}4244, '((+(1))+(+((1))))', 2, True, '2');
  Test({LINENUM}4245, '( ( +(1  ) ) + ( +( ( 1) )) )', 2, True, '2');
  Test({LINENUM}4246, '++( +( + (1  ) ) + ( +( + ( + +1) )) )', 2, True, '2');
  Test({LINENUM}4247, '+++++++++++++1', 1, True, '1');
  Test({LINENUM}4248, '(+(+(+(+(+(+(+(+(+(+(+(+(+(1))))))))))))))', 1, True, '1');
  Test({LINENUM}4249, '+'#13#10'1', 1, True, '1');
  Test({LINENUM}4250, '1'#13#10'+'#13#10'2', 3, True, '3');

  Test({LINENUM}4252, '−5', -5, True, '−5');
  Test({LINENUM}4253, '6−2', 4, True, '4');
  Test({LINENUM}4254, '3−8', -5, True, '−5');
  Test({LINENUM}4255, '-5', -5, True, '−5');
  Test({LINENUM}4256, '6-2', 4, True, '4');
  Test({LINENUM}4257, '3-8', -5, True, '−5');
  Test({LINENUM}4258, '−−2', 2, True, '2');
  Test({LINENUM}4259, '−−−2', -2, True, '−2');
  Test({LINENUM}4260, '−−−−2', 2, True, '2');
  Test({LINENUM}4261, '−(−(−(−2)))', 2, True, '2');
  Test({LINENUM}4262, '(−(−(−(−(2)))))', 2, True, '2');
  Test({LINENUM}4263, ' ( −( −(−(   −(  2)  ))  ) )', 2, True, '2');
  Test({LINENUM}4264, ' ( −( −(−(-   −(  2)  ))  ) )', -2, True, '−2');

  Test({LINENUM}4266, '1+6+3+8+2+9', 29, True, '29');
  Test({LINENUM}4267, '1 + 6 + 3 + 8 + 2 + 9', 29, True, '29');
  Test({LINENUM}4268, '1 + 6 + (3 + 8) + 2 + 9', 29, True, '29');
  Test({LINENUM}4269, '1 + ((6 + (3 + 8)) + (2 + 9))', 29, True, '29');
  Test({LINENUM}4270, '1 + ((6 + (3 + 8)) - (-2 - 9))', 29, True, '29');

  Test({LINENUM}4272, '2563 − 500 − 60 − 3', 2000, True, '2000');
  Test({LINENUM}4273, '2563 − (500 + 60 + 3)', 2000, True, '2000');
  Test({LINENUM}4274, '2563 − 500 + 60 + 3', 2126, True, '2126');

  Test({LINENUM}4276, '1+2⋅3', 7, True, '7');
  Test({LINENUM}4277, '(1+2)⋅3', 9, True, '9');
  Test({LINENUM}4278, '[1+2]⋅3', 9, True, '9');
  Test({LINENUM}4279, '-3 ⋅ -7', 21, True, '21');
  Test({LINENUM}4280, '(-3) ⋅ (-7)', 21, True, '21');
  Test({LINENUM}4281, '-(-3) ⋅ (-7)', -21, True, '−21');

  Test({LINENUM}4283, '5⋅4⋅3⋅2⋅1', 120, True, '120');
  Test({LINENUM}4284, '(5⋅4)⋅(3⋅[2⋅1])', 120, True, '120');

  Test({LINENUM}4286, '7 ⋅ (300 − [20 + 1])', 1953, True, '1953');
  Test({LINENUM}4287, '7 ⋅ (300 − 20 + 1)', 1967, True, '1967');
  Test({LINENUM}4288, '7 ⋅ 300 − 20 + 1', 2081, True, '2081');

  Test({LINENUM}4290, '-[7 ⋅ (300 − [20 + 1])] ⋅ (-1)', 1953, True, '1953');
  Test({LINENUM}4291, '-[7 ⋅ (300 − [20 + 1])] ⋅ -1', 1953, True, '1953');
  Test({LINENUM}4292, '---------[----7 ⋅ (--300 − --[--20 + ----1])] ⋅ -------1', 1953, True, '1953');
  Test({LINENUM}4293, '---------[----7 ⋅ (--300 − --[(-(-(20))) + -(--(-1))])] ⋅ -------1', 1953, True, '1953');

  Test({LINENUM}4295, '1.2-0.2', 1.0, True, '1');
  Test({LINENUM}4296, '(-1.2)-(-0.2)', -1.0, True, '−1');

  Test({LINENUM}4298, '2^10', 1024, True, '1024');
  Test({LINENUM}4299, '(2^3)^2', 64, True, '64');
  Test({LINENUM}4300, '2^(3^2)', 512, True, '512');
  Test({LINENUM}4301, '2^3^2', 512, True, '512');
  Test({LINENUM}4302, '3^2^3', 6561, True, '6561');
  Test({LINENUM}4303, '(3^2)^3', 729, True, '729');
  Test({LINENUM}4304, '−2^6', -64, True, '−64');
  Test({LINENUM}4305, '(−2)^6', 64, True, '64');
  Test({LINENUM}4306, '−(2^6)', -64, True, '−64');
  Test({LINENUM}4307, '2^-6', Rat(1, 64), True, '1/64');
  Test({LINENUM}4308, '-2^-6', Rat(-1, 64), True, '−1/64');

  Test({LINENUM}4310, '5!', 120, True, '120');
  Test({LINENUM}4311, '−5!', -120, True, '−120');
  Test({LINENUM}4312, '3!!', 720, True, '720');
  Test({LINENUM}4313, '1+3!!+2', 723, True, '723');

  Eps; Test({LINENUM}4315, '5% ⋅ 1100', 55.0, True, '55');

  Test({LINENUM}4317, '0.3 ⋅ 0.5', 0.15, True, '0.15');

  Test({LINENUM}4319, '100/5/10', 2, True, '2');
  Test({LINENUM}4320, '(100/5)/10', 2, True, '2');
  Test({LINENUM}4321, '100/(5/10)', Rat(200, 1), True, '200');

  Eps; Test({LINENUM}4323, '((7/[3+2])−5!+(4−5/3)^2)⋅(23−(5.369−2.15+3.1^3)⋅(3.11−0.5^3)^−2)', -2183.36671533110680270263782464652813044688670725050277755);

  Test({LINENUM}4325, '1/5^-1', Rat(5, 1), True, '5');
  Test({LINENUM}4326, '1/(1/5)', Rat(5, 1), True, '5');
  Test({LINENUM}4327, '1/-(1/5^-1)', Rat(-1, 5), True, '−1/5');

  Test({LINENUM}4329, '−√100', -10.0, True, '−10');
  Test({LINENUM}4330, '10−√100', 0.0, True, '0');
  Test({LINENUM}4331, '√100−10', 0.0, True, '0');
  Test({LINENUM}4332, '√100−19', -9.0, True, '−9');
  Test({LINENUM}4333, '√(100−19)', 9.0, True, '9');
  Test({LINENUM}4334, '√25^2', 25.0, True, '25');
  Test({LINENUM}4335, '√√16', 2.0, True, '2');
  Test({LINENUM}4336, '√(√16)', 2.0, True, '2');
  Test({LINENUM}4337, '√(√(16))', 2.0, True, '2');

  Test({LINENUM}4339, '√−(−20−5)', 5.0, True, '5');
  Test({LINENUM}4340, '√−−−(−20−5)', 5.0, True, '5');
  Test({LINENUM}4341, '√(−(−(−(−20−5))))', 5.0, True, '5');
  Test({LINENUM}4342, '−√−−−(−20−5)', -5.0, True, '−5');
  Test({LINENUM}4343, '−√−−√−−16', -2.0, True, '−2');

  Eps; Test({LINENUM}4345, '5!%', 1.2, True, '1.2');
  Eps; Test({LINENUM}4346, '3!!%', 7.2, True, '7.2');
  Eps; Test({LINENUM}4347, '-3!!%', -7.2, True, '−7.2');
  Eps; Test({LINENUM}4348, '---3!!%', -7.2, True, '−7.2');
  Eps; Test({LINENUM}4349, '----3!!%', 7.2, True, '7.2');
  Eps; Test({LINENUM}4350, '-(3!)!%', -7.2, True, '−7.2');
  Eps; Test({LINENUM}4351, '-(3!!)%', -7.2, True, '−7.2');
  Eps; Test({LINENUM}4352, '-((3!)!)%', -7.2, True, '−7.2');
  Eps; Test({LINENUM}4353, '---((-(((3!)!)%)))', 7.2, True, '7.2');
  Eps; Test({LINENUM}4354, '---((-(((3!)!))%))', 7.2, True, '7.2');
  Eps; Test({LINENUM}4355, '---((-(((3!)!)))%)', 7.2, True, '7.2');
  Eps; Test({LINENUM}4356, '---((-(((3!)!))))%', 7.2, True, '7.2');
  Eps; Test({LINENUM}4357, '1%%%%%', 1E-10);
  Eps; Test({LINENUM}4358, '(1%)%%%%', 1E-10);
  Eps; Test({LINENUM}4359, '(1%%)%%%', 1E-10);
  Eps; Test({LINENUM}4360, '((1%)%)%%%', 1E-10);
  Eps; Test({LINENUM}4361, '(((((1%)%)%)%)%)', 1E-10);
  Eps; Test({LINENUM}4362, '(((((-1%)%)%)%)%)', -1E-10);
  Eps; Test({LINENUM}4363, '-(-((((-1%)%)%)%)%)', -1E-10);
  Eps; Test({LINENUM}4364, '-(-((------((-1%)%)%)%)%)', -1E-10);
  Eps; Test({LINENUM}4365, '-(-((------((-0%)%)%)%)%)', 0.0);
  Test({LINENUM}4366, '360°', 2*Pi);

  Test({LINENUM}4368, '1!!!!!!!!!!!', 1, True, '1');
  Test({LINENUM}4369, '----------1!!!!!!!!!!!', 1, True, '1');
  Eps; Test({LINENUM}4370, '----------1!!!!!!!!!!!%', 0.01, True, '0.01');
  Eps; Test({LINENUM}4371, '----------1!!!!!!!!!!!%%%%%', 1E-10);
  Eps; Test({LINENUM}4372, '--−---−-----1!!!!!!!!!!!%%%%%', 1E-10);
  Eps; Test({LINENUM}4373, '--−---−-----1!!!!!!!!!!!%%%%%°', 1E-10 * pi/180);
  Eps; Test({LINENUM}4374, '--−---−-----1!!!!!!!!!!!%%%%%°°', 1E-10 * pi*pi/(180*180));
  Test({LINENUM}4375, '0%%°%%°%%°', 0.0);
  Test({LINENUM}4376, '-----0%%°%%°%%°', 0.0);

  Test({LINENUM}4378, '250 +', ESyntaxException, 'Operand missing after operator + at column 5.');
  Test({LINENUM}4379, '250 −', ESyntaxException, 'Operand missing after operator − at column 5.');
  Test({LINENUM}4380, '250 ⋅', ESyntaxException, 'Operand missing after operator ⋅ at column 5.');
  Test({LINENUM}4381, '250 /', ESyntaxException, 'Operand missing after operator / at column 5.');

  Test({LINENUM}4383, '+5', 5, True, '5');
  Test({LINENUM}4384, '−5', -5, True, '−5');
  Test({LINENUM}4385, '⋅5', ESyntaxException, 'Operand missing before operator ⋅ at column 1.');
  Test({LINENUM}4386, '/5', ESyntaxException, 'Operand missing before operator / at column 1.');

  Test({LINENUM}4388, '2 + (+ 4)', 6, True, '6');
  Test({LINENUM}4389, '2 + (− 4)', -2, True, '−2');
  Test({LINENUM}4390, '2 + (⋅ 4)', ESyntaxException, 'Operand missing before operator ⋅ at column 6.');
  Test({LINENUM}4391, '2 + (/ 4)', ESyntaxException, 'Operand missing before operator / at column 6.');

  Test({LINENUM}4393, '1 + 3 /', ESyntaxException, 'Operand missing after operator / at column 7.');
  Test({LINENUM}4394, '1 + (3 /)', ESyntaxException, 'Operand missing after operator / at column 8.');

  Test({LINENUM}4396, '!', ESyntaxException, 'Operand missing before operator ! at column 1.');
  Test({LINENUM}4397, '5+(!)', ESyntaxException, 'Operand missing before operator ! at column 4.');
  Test({LINENUM}4398, '5+(5!)', 125, True, '125');

  Test({LINENUM}4400, '10 + √36', 16.0, True, '16');
  Test({LINENUM}4401, '10 + √', ESyntaxException, 'Operand missing after operator √ at column 6.');
  Test({LINENUM}4402, '10 + √+36', 16.0, True, '16');
  Test({LINENUM}4403, '(10 + √)+36', ESyntaxException, 'Operand missing after operator √ at column 7.');

  Test({LINENUM}4405, '2^-1', Rat(1, 2), True, '1/2');
  Test({LINENUM}4406, '2.^-1.', 0.5, True, '0.5');

  Test({LINENUM}4408, '3⋅⋅6', ESyntaxException, 'Operand missing before operator ⋅ at column 3.');
  Test({LINENUM}4409, '3//6', ESyntaxException, 'Operand missing before operator / at column 3.');
  Test({LINENUM}4410, '3^^6', ESyntaxException, 'Operand missing before operator ^ at column 3.');
  Test({LINENUM}4411, '3/^6', ESyntaxException, 'Operand missing before operator ^ at column 3.');
  Test({LINENUM}4412, '3^⋅6', ESyntaxException, 'Operand missing before operator ⋅ at column 3.');
  Test({LINENUM}4413, '3⋅⋅⋅6', ESyntaxException, 'Operand missing before operator ⋅ at column 3.');
  Test({LINENUM}4414, '3/⋅^6', ESyntaxException, 'Operand missing before operator ⋅ at column 3.');
  Test({LINENUM}4415, '3⋅/^6', ESyntaxException, 'Operand missing before operator / at column 3.');
  Test({LINENUM}4416, '3⋅^/6', ESyntaxException, 'Operand missing before operator ^ at column 3.');

  Test({LINENUM}4418, '4**+8***+3**', 15, True, '15');
  Test({LINENUM}4419, '*4', ESyntaxException, 'Operand missing before operator * at column 1.');
  Test({LINENUM}4420, '**4', ESyntaxException, 'Operand missing before operator * at column 1.');
  Test({LINENUM}4421, '(4+i)*', 4-ImaginaryUnit, True, '4 − i');
  Test({LINENUM}4422, '(4+i)**', 4+ImaginaryUnit, True, '4 + i');
  Test({LINENUM}4423, '(4*+i**)**', 4+ImaginaryUnit, True, '4 + i');

  Test({LINENUM}4425, '100⋅[1+(2+7)⋅(5−2)^(6−9−2)]', Rat(2800, 27), True, '2800/27');
  Test({LINENUM}4426, '100⋅[1+(2+7)⋅(5−2^(6−9−2)]', ESyntaxException, 'Closing bracket ] at column 26 doesn''t match the most recent opening bracket ( at column 14.');
  Test({LINENUM}4427, '100⋅[1+(2+7)⋅(5−2)^(6−9−2]', ESyntaxException, 'Closing bracket ] at column 26 doesn''t match the most recent opening bracket ( at column 20.');
  Test({LINENUM}4428, '100⋅[1+(2+7)⋅5−2)^(6−9−2)]', ESyntaxException, 'Closing bracket ) at column 17 doesn''t match the most recent opening bracket [ at column 5.');
  Test({LINENUM}4429, '100⋅[1+(2+7)⋅(5−2)^(6−9−2)', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "[".');
  Test({LINENUM}4430, '100⋅[1+(2+7)⋅(5−2)^(6−9−2)]]', ESyntaxException, 'Negative bracket level starting at column 28.');
  Test({LINENUM}4431, '100)⋅[1+(2+7)⋅(5−2)^(6−9−2)]', ESyntaxException, 'Negative bracket level starting at column 4.');

  Test({LINENUM}4433, '(1+7)⋅(2+7)', 72, True, '72');
  Test({LINENUM}4434, '[1+7]⋅[2+7]', 72, True, '72');
  Test({LINENUM}4435, '[1+7]⋅(2+7)', 72, True, '72');
  Test({LINENUM}4436, '[1+7]⋅[2+7)', ESyntaxException, 'Closing bracket ) at column 11 doesn''t match the most recent opening bracket [ at column 7.');
  Test({LINENUM}4437, '(1+7)⋅(2+7', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "(".');
  Test({LINENUM}4438, '7+((1+7)⋅(2+7', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "((".');
  Test({LINENUM}4439, '[7+((1+7)⋅(2+7', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "[((".');
  Test({LINENUM}4440, '(4+7)⋅(1+3]', ESyntaxException, 'Closing bracket ] at column 11 doesn''t match the most recent opening bracket ( at column 7.');
  Test({LINENUM}4441, '(4+7)⋅(1+(3)]', ESyntaxException, 'Closing bracket ] at column 13 doesn''t match the most recent opening bracket ( at column 7.');
  Test({LINENUM}4442, '(4+7)⋅(1+3))', ESyntaxException, 'Negative bracket level starting at column 12.');
  Test({LINENUM}4443, '1 + (4+7)⋅(1+3)) + 3', ESyntaxException, 'Negative bracket level starting at column 16.');
  Test({LINENUM}4444, '1 + (4+7)⋅() + 3', ESyntaxException, 'Empty bracket at column 11.');
  Test({LINENUM}4445, '1 + (4+7)⋅[] + 3', ESyntaxException, 'Empty bracket at column 11.');
  Test({LINENUM}4446, '((((((((((', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "((((((((((".');
  Test({LINENUM}4447, '((((((((([', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "((((((((([".');
  Test({LINENUM}4448, '[(((((((([', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "[(((((((([".');
  Test({LINENUM}4449, '((([(((1)))])))', 1, True, '1');
  Test({LINENUM}4450, '((([((()))])))', ESyntaxException, 'Empty bracket at column 7.');
  Test({LINENUM}4451, '((([(((1)))]))', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "(".');
  Test({LINENUM}4452, '((([(((1)))]', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "(((".');
  Test({LINENUM}4453, '((([(((1)))', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "((([".');
  Test({LINENUM}4454, '((([(((1)', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "((([((".');
  Test({LINENUM}4455, '((([(((1', ESyntaxException, 'There is at least one open bracket at the end of the expression. The following brackets are open: "((([(((".');
  Test({LINENUM}4456, '((([(((1)))))))', ESyntaxException, 'Closing bracket ) at column 12 doesn''t match the most recent opening bracket [ at column 4.');
  Test({LINENUM}4457, '((([(((1)))])))]', ESyntaxException, 'Negative bracket level starting at column 16.');
  Test({LINENUM}4458, '((([(((1)))])))] + 2 + 3', ESyntaxException, 'Negative bracket level starting at column 16.');
  Test({LINENUM}4459, '((([(((1)))]))) + 2 + 3', 6, True, '6');

  Test({LINENUM}4461, '"alfa" + "beta', ESyntaxException, 'Unterminated string literal "beta" starting at column 10.');
  Test({LINENUM}4462, '10⋅("alfa" + "beta)', ESyntaxException, 'Unterminated string literal "beta)" starting at column 14.');
  Test({LINENUM}4463, '10⋅("alfa" + "beta")', 'alfabetaalfabetaalfabetaalfabetaalfabetaalfabetaalfabetaalfabetaalfabetaalfabeta');
  Test({LINENUM}4464, '"', ESyntaxException, 'Unterminated string literal "" starting at column 1.');
  Test({LINENUM}4465, '"test" + "', ESyntaxException, 'Unterminated string literal "" starting at column 10.');
  Test({LINENUM}4466, '"This is a ""good"" thing."', 'This is a "good" thing.');

  Test({LINENUM}4468, '123 456', ESyntaxException, 'Adjacent values at column 5; a comma or operator was expected.');
  Test({LINENUM}4469, 'cat dog', ESyntaxException, 'Adjacent values at column 5; a comma or operator was expected.');
  Test({LINENUM}4470, '(1+2)3', ESyntaxException, 'Adjacent values at column 6; a comma or operator was expected.');
  Test({LINENUM}4471, '1(2+3)', failure, 'An object of type function was expected as argument 1, but an object of type integer was given.');

  Test({LINENUM}4473, '"alfa" + "beta + "gamma"', ESyntaxException, 'Adjacent values at column 19; a comma or operator was expected.');

  Test({LINENUM}4475, '5! 7!', ESyntaxException, 'Adjacent values at column 4; a comma or operator was expected.');
  Test({LINENUM}4476, 'sin(5! 7!)', ESyntaxException, 'Adjacent values at column 8; a comma or operator was expected.');

  Test({LINENUM}4478, '5! (7!)', ESyntaxException, 'Adjacent values at column 4; a comma or operator was expected.');
  Test({LINENUM}4479, 'sin(5! (7!))', ESyntaxException, 'Adjacent values at column 8; a comma or operator was expected.');

  Test({LINENUM}4481, '5!(5)', ESyntaxException, 'Adjacent values at column 3; a comma or operator was expected.');
  Test({LINENUM}4482, ' 5!(5)', ESyntaxException, 'Adjacent values at column 4; a comma or operator was expected.');
  Test({LINENUM}4483, ' 5! (5)', ESyntaxException, 'Adjacent values at column 5; a comma or operator was expected.');
  Test({LINENUM}4484, ' 5!   (5)', ESyntaxException, 'Adjacent values at column 7; a comma or operator was expected.');
  Test({LINENUM}4485, '( 5!   (5))', ESyntaxException, 'Adjacent values at column 8; a comma or operator was expected.');

  Test({LINENUM}4487, '1', 1, True, '1');
  Test({LINENUM}4488, '1; 2', 2, True, '2');
  Test({LINENUM}4489, '1; 2; 3', 3, True, '3');
  Test({LINENUM}4490, '1; 2; 3; 4', 4, True, '4');

  Test({LINENUM}4492, '1;', null);
  Test({LINENUM}4493, '1; 2;', null);
  Test({LINENUM}4494, '1; 2; 3;', null);
  Test({LINENUM}4495, '1; 2; 3; 4;', null);

  Eps; Test({LINENUM}4497, '41⋅(4325−[123+56^2−20%+(21−52+23+48−30)/2])^2', 46171963.04, True, '46171963.04');
  Test({LINENUM}4498, '41⋅(4325−[123+56^2−20%+(21−52+23+48−30)/2])^2; "cat"', 'cat', True, 'cat');
  Test({LINENUM}4499, '41⋅(4325−[123+56^2−20%+(21−52+23+48−30)/2])^2;', null);
  Test({LINENUM}4500, 'x ≔ 5; x^2', 25, True, '25');
  Test({LINENUM}4501, 'x ≔ 5; x ≔ x^2; x ≔ 10⋅x; x ≔ 2⋅x; x ≔ x/5; x', 100, True, '100');
  Test({LINENUM}4502, 'f ≔ x ↦ 2⋅x^2; f(7)', 98, True, '98');
  Test({LINENUM}4503, 'f ≔ x ↦ 2⋅x^2; y ≔ f(7); y + 2', 100, True, '100');
  Test({LINENUM}4504, 'delete(f); delete(x); delete(y);', null);
  Test({LINENUM}4505, 'g ≔ x ↦ √(2⋅x);', null);
  Test({LINENUM}4506, 'g(50)', 10.0, True, '10');
  Test({LINENUM}4507, 'delete(g)', success);

  Test({LINENUM}4509, '0;', null);
  Test({LINENUM}4510, '.;', null);
  Test({LINENUM}4511, '.;.;', null);
  Test({LINENUM}4512, '.;.', 0.0);

  Test({LINENUM}4514, '([1;])', null);
  Test({LINENUM}4515, 'type([1;])', 'null');
  Test({LINENUM}4516, 'type([1;]);', null);
  Test({LINENUM}4517, 'type(type([1;]);)', 'null');
  Test({LINENUM}4518, 'type(type([1;]););', null);
  Test({LINENUM}4519, 'type(type(1;););', null);

  Test({LINENUM}4521, ';', ESyntaxException, 'Operand missing before operator ; at column 1.');
  Test({LINENUM}4522, '; 5^2', ESyntaxException, 'Operand missing before operator ; at column 1.');
  Test({LINENUM}4523, '7+(; 5^2)', ESyntaxException, 'Operand missing before operator ; at column 4.');
  Test({LINENUM}4524, '7+(10; 5^2)', 32);
  Test({LINENUM}4525, '7;;8', ESyntaxException, 'Operand missing before operator ; at column 3.');
  Test({LINENUM}4526, '7 ;; 8', ESyntaxException, 'Operand missing before operator ; at column 4.');
  Test({LINENUM}4527, '7 ; ; 8', ESyntaxException, 'Operand missing before operator ; at column 5.');
  Test({LINENUM}4528, '7 ;'#9'; 8', ESyntaxException, 'Operand missing before operator ; at column 5.');
  Test({LINENUM}4529, '7 ;'#13#10'; 8', ESyntaxException, 'Operand missing before operator ; at column 6.');


  //
  // Stack overflow protection
  //

  // If any of the following tests crashes the process, the self test is considered to have failed!

  Test({LINENUM}4538, StringOfChar(MINUS_SIGN, 200) + '1', +1);
  Test({LINENUM}4539, StringOfChar(MINUS_SIGN, 201) + '1', -1);
  Test({LINENUM}4540, 'i' + StringOfChar('*', 200), +ImaginaryUnit);
  Test({LINENUM}4541, 'i' + StringOfChar('*', 201), -ImaginaryUnit);

  Test({LINENUM}4543, StringOfChar(MINUS_SIGN, 255) + '1', -1);
  Test({LINENUM}4544, 'i' + StringOfChar('*', 255), -ImaginaryUnit);

  Test({LINENUM}4546, StringOfChar(MINUS_SIGN, 256) + '1', EParseException, 'Expression is too deep.');
  Test({LINENUM}4547, 'i' + StringOfChar('*', 256), EParseException, 'Expression is too deep.');

  // Collapsible operators

  Test({LINENUM}4551, DupeString('123; ', 200) + '123456', 123456);
{$IFNDEF QuickTest}
  Test({LINENUM}4553, DupeString('123; ', 1000) + '123456', 123456);
  Test({LINENUM}4554, DupeString('123; ', 1023) + '123456', 123456);
  Test({LINENUM}4555, DupeString('123; ', 1024) + '123456', EParseException, 'Expression is too deep.');

  Test({LINENUM}4557, '1' + DupeString('+1', 999), 1000);
  Test({LINENUM}4558, '1' + DupeString('+1', 1023), 1024);
  Test({LINENUM}4559, '1' + DupeString('+1', 1024), EParseException, 'Expression is too deep.');
{$ENDIF}

  // TODO: Parser should have better time complexity (in general).
  // TODO: Collapsible operators should not be parsed using recursion; there
  //       should not be a limit to how many operands a collapsible operator has.
  //       1M should not be an issue.



  //
  // Operators
  //

  // Unary plus (=identity)

  Test({LINENUM}4575, '+7', 7, True, '7');
  Test({LINENUM}4576, '+7.8', 7.8, True, '7.8');
  Test({LINENUM}4577, '+(-7)', -7, True, '−7');
  Test({LINENUM}4578, '+(-7.8)', -7.8, True, '−7.8');
  Test({LINENUM}4579, '+(7/3)', Rat(7, 3), True, '7/3');
  Test({LINENUM}4580, '+(-7/3)', Rat(-7, 3), True, '−7/3');
  Test({LINENUM}4581, '+i', ImaginaryUnit, True, 'i');
  Test({LINENUM}4582, '+48566935847526514', 48566935847526514, True, '48566935847526514');
  Test({LINENUM}4583, '+(2+3⋅i)', 2+3*ImaginaryUnit, True, '2 + 3⋅i');
  Test({LINENUM}4584, '+(−2−3⋅i)', -2-3*ImaginaryUnit, True, '−2 − 3⋅i');
  Test({LINENUM}4585, '+❨1, 2, 3❩', [1, 2, 3]);
  Test({LINENUM}4586, '+❨1, 2, 3⋅i❩', [1, 2, 3*ImaginaryUnit]);
  Test({LINENUM}4587, '+❨1, -2, 3⋅i❩', [1, -2, 3*ImaginaryUnit]);
  Test({LINENUM}4588, '+❨❨5, 6❩, ❨−5, −6❩❩', 2, [5, 6, -5, -6]);
  Test({LINENUM}4589, '+❨❨5, 6❩, ❨−5⋅i, −6❩❩', 2, [5, 6, -5*ImaginaryUnit, -6]);
  Test({LINENUM}4590, '+"cat"', 'cat', True, 'cat');
  Test({LINENUM}4591, '+true', true);
  Test({LINENUM}4592, '+false', false);
  Test({LINENUM}4593, '+color("red")', TRGB.Create(1, 0, 0));
  TestSL({LINENUM}4594, '+''(1,2)', '(1, 2)');
  Test({LINENUM}4595, '+(0;)', null);
  TestSL({LINENUM}4596, '+{}', '∅');
  TestSL({LINENUM}4597, '+{"cat"}', '{cat}');
  TestSL({LINENUM}4598, '+BinaryData("A")', '41 00');
  TestSL({LINENUM}4599, '+struct("a": 42)', '(a: 42)');
  Test({LINENUM}4600, 'f ≔ x ↦ x^2; (+f)(4)', 16);
  Test({LINENUM}4601, '+delete(f)', success);

  // Unary minus

  Test({LINENUM}4605, '−0', 0, True, '0');
  Test({LINENUM}4606, '−0.0', 0.0, True, '0');
  Test({LINENUM}4607, '−0.0⋅i', TASC(0.0), True, '0');
  Test({LINENUM}4608, '−5', -5, True, '−5');
  Test({LINENUM}4609, '−(−5)', 5, True, '5');
  Test({LINENUM}4610, '−5.9', -5.9, True, '−5.9');
  Test({LINENUM}4611, '−(−5.9)', 5.9, True, '5.9');
  Test({LINENUM}4612, '−(2/3)', Rat(-2, 3), True, '−2/3');
  Test({LINENUM}4613, '−(−2/3)', Rat(2, 3), True, '2/3');
  Test({LINENUM}4614, '−((−2)/3)', Rat(2, 3), True, '2/3');
  Test({LINENUM}4615, '−(−(2/3))', Rat(2, 3), True, '2/3');
  Test({LINENUM}4616, '−π', -Pi, True, '−3.14159265359');
  Test({LINENUM}4617, '−(−π)', Pi, True, '3.14159265359');
  Test({LINENUM}4618, '−i', -ImaginaryUnit, True, '−i');
  Test({LINENUM}4619, '−3⋅i', -3*ImaginaryUnit, True, '−3⋅i');
  Test({LINENUM}4620, '−(−3⋅i)', 3*ImaginaryUnit, True, '3⋅i');
  Test({LINENUM}4621, '−(5+3⋅i)', -5-3*ImaginaryUnit, True, '−5 − 3⋅i');
  Test({LINENUM}4622, '−(5−3⋅i)', -5+3*ImaginaryUnit, True, '−5 + 3⋅i');
  Test({LINENUM}4623, '−(−5−3⋅i)', 5+3*ImaginaryUnit, True, '5 + 3⋅i');
  Test({LINENUM}4624, '−(−5.4−3.2⋅i)', 5.4+3.2*ImaginaryUnit, True, '5.4 + 3.2⋅i');
  Test({LINENUM}4625, '−48566935847526514', -48566935847526514, True, '−48566935847526514');

  Test({LINENUM}4627, '−❨8, 5.5, 3, 2❩', [-8, -5.5, -3, -2]);
  Test({LINENUM}4628, '−❨8, −5.5, 3, 2❩', [-8, 5.5, -3, -2]);
  Test({LINENUM}4629, '−❨8, −5.5, 3⋅i, 2❩', [-8, 5.5, -3*ImaginaryUnit, -2]);
  Test({LINENUM}4630, '−❨i, 2❩', [-ImaginaryUnit, -2]);
  Test({LINENUM}4631, '−❨1−i, 2❩', [-1+ImaginaryUnit, -2]);
  Test({LINENUM}4632, '−❨1❩', [-1]);
  Test({LINENUM}4633, '−❨i❩', [-ImaginaryUnit]);
  Test({LINENUM}4634, '−❨−1❩', [1]);
  Test({LINENUM}4635, '−❨−i❩', [ImaginaryUnit]);
  Test({LINENUM}4636, '−❨0❩', [0]);
  Test({LINENUM}4637, '−❨0, 0❩', [0, 0]);

  Test({LINENUM}4639, '−❨❨10, 20❩, ❨30, 40❩❩', 2, [-10, -20, -30, -40]);
  Test({LINENUM}4640, '−❨❨−10, 20❩, ❨30, 40❩❩', 2, [10, -20, -30, -40]);
  Test({LINENUM}4641, '−❨❨10, 20❩, ❨30, 40⋅i❩❩', 2, [-10, -20, -30, -40*ImaginaryUnit]);
  Test({LINENUM}4642, '−❨❨10, 20❩, ❨−30, −40⋅i❩❩', 2, [-10, -20, 30, 40*ImaginaryUnit]);

  Test({LINENUM}4644, '−"test"', failure, 'Cannot compute unary minus of an object of type "string".');
  Test({LINENUM}4645, '−true', failure, 'Cannot compute unary minus of an object of type "boolean".');
  Test({LINENUM}4646, '−false', failure, 'Cannot compute unary minus of an object of type "boolean".');
  Test({LINENUM}4647, '−(0;)', failure, 'Cannot compute unary minus of an object of type "null".');
  Test({LINENUM}4648, 'a ≔ 4; −delete(a)', failure, 'Cannot compute unary minus of an object of type "success indication".');

  // Binary plus

  // - two numbers

  Test({LINENUM}4654, '1+1', 2, True, '2');
  Test({LINENUM}4655, '75283954 + 59852361', 135136315, True, '135136315');
  Test({LINENUM}4656, '500 + (-100)', 400, True, '400');
  Test({LINENUM}4657, '(-60) + 300', 240, True, '240');
  Test({LINENUM}4658, '(-60) + (-300)', -360, True, '−360');
  Test({LINENUM}4659, '48566935847526514 + 17584986538592057', 66151922386118571, True, '66151922386118571');
  Test({LINENUM}4660, '48566935847526514 + (-17584986538592057)', 30981949308934457, True, '30981949308934457');
  Test({LINENUM}4661, '(-17584986538592057) + 48566935847526514', 30981949308934457, True, '30981949308934457');
  Test({LINENUM}4662, '(-48566935847526514) + 17584986538592057', -30981949308934457, True, '−30981949308934457');
  Test({LINENUM}4663, '17584986538592057 + (-48566935847526514)', -30981949308934457, True, '−30981949308934457');
//  Test({LINENUM}4664, '9223372036854775807 + 0', 9223372036854775807, True, '9223372036854775807'); // TODO: see if it can be improved
  Test({LINENUM}4665, '0 + 9223372036854775807', 9223372036854775807, True, '9223372036854775807');
  Test({LINENUM}4666, '1000 + 200 + 30 + 4', 1234, True, '1234');

  Test({LINENUM}4668, '2/7 + 1/7', Rat(3, 7), True, '3/7');
  Test({LINENUM}4669, '3/7 + (-1/7)', Rat(2, 7), True, '2/7');
  Test({LINENUM}4670, '(-3/7) + (-1/7)', Rat(-4, 7), True, '−4/7');
  Test({LINENUM}4671, '(-3/7) + 1/7', Rat(-2, 7), True, '−2/7');
  Test({LINENUM}4672, '1/7 + 1/7 + 2/7 + 3/7', Rat(1, 1), True, '1');
  Test({LINENUM}4673, '1/7 + 1/7 + 2/7 + 4/7 + 0 + (-1/7)', Rat(1, 1), True, '1');
  Test({LINENUM}4674, '3/8 + 1/8', Rat(1, 2), True, '1/2');
  Test({LINENUM}4675, '11/10 + (-1/10)', Rat(1, 1), True, '1');
  Test({LINENUM}4676, '11/10 + 1/10', Rat(6, 5), True, '6/5');

  Test({LINENUM}4678, '5/12 + 3', Rat(41, 12), True, '41/12');
  Test({LINENUM}4679, '5/12 + (-1)', Rat(-7, 12), True, '−7/12');
  Test({LINENUM}4680, '1 + 2/3', Rat(5, 3), True, '5/3');
  Test({LINENUM}4681, '1 + (-2/3)', Rat(1, 3), True, '1/3');
  Test({LINENUM}4682, '0 + (-2/3)', Rat(-2, 3), True, '−2/3');
  Test({LINENUM}4683, '17584986538592057 + 1/2', Rat(35169973077184115, 2), True, '35169973077184115/2');
  Test({LINENUM}4684, '17584986538592057 + (-1/2)', Rat(35169973077184113, 2), True, '35169973077184113/2');

  Test({LINENUM}4686, '12.3 + 0.5', 12.8, True, '12.8');
  Test({LINENUM}4687, '12.3 + (−0.5)', 11.8, True, '11.8');
  Test({LINENUM}4688, '(−12.3) + (−0.5)', -12.8, True, '−12.8');
  Test({LINENUM}4689, '(−12.3) + 0.5', -11.8, True, '−11.8');

  Test({LINENUM}4691, '123456.789123 + 654321.000321', 777777.789444, True, '777777.789444');
  Test({LINENUM}4692, '123456.789123 + (-0.789123)', 123456.0, True, '123456');

  Test({LINENUM}4694, '123.456 + 5', 128.456, True, '128.456');
  Test({LINENUM}4695, '123.456 + (-5)', 118.456, True, '118.456');
  Test({LINENUM}4696, '(-123.456) + (-5)', -128.456, True, '−128.456');
  Test({LINENUM}4697, '(-123.456) + 5', -118.456, True, '−118.456');

  Test({LINENUM}4699, '5.25 + 1/4', 5.5, True, '5.5');
  Test({LINENUM}4700, '5.25 + (-1/4)', 5.0, True, '5');
  Test({LINENUM}4701, '(-5.25) + (-1/4)', -5.5, True, '−5.5');
  Test({LINENUM}4702, '(-5.25) + 1/4', -5.0, True, '−5');
  Test({LINENUM}4703, '1/4 + 5.25', 5.5, True, '5.5');
  Test({LINENUM}4704, '(-1/4) + 5.25', 5.0, True, '5');
  Test({LINENUM}4705, '(-1/4) + (-5.25)', -5.5, True, '−5.5');
  Test({LINENUM}4706, '1/4 + (-5.25)', -5.0, True, '−5');
  Test({LINENUM}4707, '17584986538592057 + 0.5', 17584986538592057.5);
  Test({LINENUM}4708, '17584986538592057 + (-0.5)', 17584986538592056.5);

  Test({LINENUM}4710, '(2 + 3⋅i) + (7 + 2⋅i)', 9 + 5*ImaginaryUnit, True, '9 + 5⋅i');
  Test({LINENUM}4711, '2 + 3⋅i + 7 + 2⋅i', 9 + 5*ImaginaryUnit, True, '9 + 5⋅i');
  Test({LINENUM}4712, '(2 + 3⋅i) + (-7 - 2⋅i)', -5 + ImaginaryUnit, True, '−5 + i');
  Test({LINENUM}4713, 'i + i', 2*ImaginaryUnit, True, '2⋅i');
  Test({LINENUM}4714, 'i + (-i)', TASC(0.0), True, '0');
  Test({LINENUM}4715, '123.456 + (1 + 2.2⋅i)', 124.456 + 2.2*ImaginaryUnit, True, '124.456 + 2.2⋅i');
  Test({LINENUM}4716, '1/4 + i/5', 1/4 + ImaginaryUnit/5, True, '0.25 + 0.2⋅i');
  Test({LINENUM}4717, '(1 + 2.2⋅i) + 123.456', 124.456 + 2.2*ImaginaryUnit, True, '124.456 + 2.2⋅i');
  Test({LINENUM}4718, 'i/5 + 1/4', 1/4 + ImaginaryUnit/5, True, '0.25 + 0.2⋅i');
  Test({LINENUM}4719, 'i + 1/i', TASC(0.0), True, '0');

  Test({LINENUM}4721, '8305843009213693952 + 8305843009213693952', 16611686018427387904.0);
  Test({LINENUM}4722, '52E20 + 8E20', 60E20);

  Test({LINENUM}4724, '(-8305843009213693952) + (-8305843009213693952)', -16611686018427387904.0);
  Test({LINENUM}4725, '(-52E20) + (-8E20)', -60E20);

  Test({LINENUM}4727, '2E500 + 3E500', 5E500);
  Eps; Test({LINENUM}4728, '(-2E500) + 3E500', 1E500);
  Eps; Test({LINENUM}4729, '2E500 + (-3E500)', -1E500);

  Test({LINENUM}4731, '1 + 2 + 3 + 4 + 5', 15);               // + is a collapsing operator, so these tests are not unnecessary
  Eps; Test({LINENUM}4732, '1.1 + 2.2 + 3.3', 6.6);
  Test({LINENUM}4733, '1 + 2 + 0.5', 3.5);
  Test({LINENUM}4734, '1 + 2 + 1/2', Rat(7, 2));
  Test({LINENUM}4735, '1 + 2 + 1/2 + 0.1', 3.6);
  Test({LINENUM}4736, '1 + 2 + 1/2 + 0.1 + i', 3.6 + ImaginaryUnit);

  // - two vectors

  Test({LINENUM}4740, '❨1, 2, 3❩ + ❨10, 20, 30❩', [11, 22, 33]);
  Test({LINENUM}4741, '❨1, 2, 3❩ + ❨1, -2, -3❩', [2, 0, 0]);
  Test({LINENUM}4742, '❨1, 2, 3❩ + ❨-1, -2, -3❩', [0, 0, 0]);
  Test({LINENUM}4743, '❨1, 0❩ + ❨0.2, -0.1❩', [1.2, -0.1]);
  Test({LINENUM}4744, '❨7❩ + ❨2❩', [9]);
  Test({LINENUM}4745, '❨-7❩ + ❨7❩', [0]);
  Test({LINENUM}4746, '❨7/2, 0❩ + ❨3/2, 1❩', [5, 1]);
  Test({LINENUM}4747, '❨1, 0, 0❩ + ❨1, 1❩', failure, 'Cannot add two vectors of unequal dimension.');

  Test({LINENUM}4749, '❨1, 2, 3❩ + ❨i, 20, 30❩', [1 + ImaginaryUnit, 22, 33]);
  Test({LINENUM}4750, '❨i, 2, 3❩ + ❨i, 20, 30❩', [2*ImaginaryUnit, 22, 33]);
  Test({LINENUM}4751, '❨i, 2, 3❩ + ❨10, 20, 30❩', [10 + ImaginaryUnit, 22, 33]);

  Test({LINENUM}4753, '❨1, 2, 3❩ + ❨i, 20❩', failure, 'Cannot add two vectors of unequal dimension.');
  Test({LINENUM}4754, '❨i, 2, 3❩ + ❨i, 20❩', failure, 'Cannot add two vectors of unequal dimension.');
  Test({LINENUM}4755, '❨i, 2, 3❩ + ❨10, 20❩', failure, 'Cannot add two vectors of unequal dimension.');

  Test({LINENUM}4757, '❨3, 5, 8, 43, 8, 5, 2, 3, 4, 5❩ + ❨54, 2, 8, 7, 5, 6, 9, 4, 2, 5❩', [57, 7, 16, 50, 13, 11, 11, 7, 6, 10]);
  Test({LINENUM}4758, '❨3, 5, 8, 43, 8, 5, 2, 3, 4, 5❩ + ❨54, 2, 8, 7, 5, 6, 9, 4, 2, 5 + i❩', [57, 7, 16, 50, 13, 11, 11, 7, 6, 10 + ImaginaryUnit]);

  Test({LINENUM}4760, '❨1, 2, 3❩ + ❨10, 20, 30❩ + ❨100, 200, 300❩', [111, 222, 333]);

  // - two matrices

  Test({LINENUM}4764, '❨❨1, 2❩, ❨3, 4❩❩ + ❨❨10, 20❩, ❨30, 40❩❩', 2, [11, 22, 33, 44]);
  Test({LINENUM}4765, '❨❨1❩, ❨10❩, ❨100❩❩ + ❨❨2❩, ❨20❩, ❨32❩❩', 1, [3, 30, 132]);
  Test({LINENUM}4766, '❨❨5, 7, 9, 11❩❩ + ❨❨10, 20, 30, 20❩❩', 4, [15, 27, 39, 31]);
  Test({LINENUM}4767, '❨❨1, 2, 3, 4❩, ❨10, 20, 30, 40❩❩ + ❨❨100, 100, 200, 200❩, ❨1000, 2000, 3000, 1000❩❩', 4, [101, 102, 203, 204, 1010, 2020, 3030, 1040]);
  Test({LINENUM}4768, '❨❨6❩❩ + ❨❨-7❩❩', 1, [-1]);

  Test({LINENUM}4770, '❨❨1, 2❩, ❨3, 4❩❩ + ❨❨2❩, ❨20❩, ❨32❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4771, '❨❨1, 2❩, ❨3, 4❩❩ + ❨❨2❩, ❨20❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4772, '❨❨1, 2, 3, 4❩, ❨10, 20, 30, 40❩❩ + ❨❨10, 20, 30, 20❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4773, '❨❨10, 20, 30, 40❩❩ + ❨❨20❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4774, '❨❨2❩, ❨20❩, ❨32❩❩ + ❨❨20❩❩', failure, 'Cannot add two matrices of different sizes.');

  Test({LINENUM}4776, '❨❨1, 2❩, ❨3, 4❩❩ + ❨❨10, 20❩, ❨30, 40⋅i❩❩', 2, [11, 22, 33, 4 + 40*ImaginaryUnit]);
  Test({LINENUM}4777, '❨❨-i, 2❩, ❨3, 4❩❩ + ❨❨10, 20❩, ❨30, 40❩❩', 2, [10-ImaginaryUnit, 22, 33, 44]);
  Test({LINENUM}4778, '❨❨-i, 2❩, ❨3, 4❩❩ + ❨❨10, i❩, ❨30, 40❩❩', 2, [10-ImaginaryUnit, 2+ImaginaryUnit, 33, 44]);
  Test({LINENUM}4779, '❨❨-i, 2❩, ❨3, 4⋅i❩❩ + ❨❨i, i❩, ❨30, 40❩❩', 2, [0, 2+ImaginaryUnit, 33, 40 + 4*ImaginaryUnit]);

  Test({LINENUM}4781, '❨❨1, 2❩, ❨3, 4❩❩ + ❨❨i❩, ❨20❩, ❨32❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4782, '❨❨1, 2❩, ❨3, 4❩❩ + ❨❨i❩, ❨20❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4783, '❨❨1, 2, 3, 4❩, ❨10, 20, 30, 40❩❩ + ❨❨10, i, 30, 20❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4784, '❨❨10, 20, 30, 40❩❩ + ❨❨i❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4785, '❨❨2❩, ❨20❩, ❨32❩❩ + ❨❨i❩❩', failure, 'Cannot add two matrices of different sizes.');

  Test({LINENUM}4787, '❨❨1, 2❩, ❨i, 4❩❩ + ❨❨2❩, ❨20❩, ❨32❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4788, '❨❨1, i❩, ❨3, 4❩❩ + ❨❨2❩, ❨20❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4789, '❨❨1, i, 3, 4❩, ❨10, 20, 30, 40❩❩ + ❨❨10, 20, 30, 20❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4790, '❨❨10, i, 30, 40❩❩ + ❨❨20❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4791, '❨❨i❩, ❨20❩, ❨32❩❩ + ❨❨20❩❩', failure, 'Cannot add two matrices of different sizes.');

  Test({LINENUM}4793, '❨❨1, 2❩, ❨3, i❩❩ + ❨❨i❩, ❨20❩, ❨32❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4794, '❨❨1, 2❩, ❨i, 4❩❩ + ❨❨2❩, ❨i❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4795, '❨❨1, 2, i, 4❩, ❨10, 20, i, 40❩❩ + ❨❨10, i, 30, 20❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4796, '❨❨10, 20, i, 40❩❩ + ❨❨i❩❩', failure, 'Cannot add two matrices of different sizes.');
  Test({LINENUM}4797, '❨❨i❩, ❨20❩, ❨32❩❩ + ❨❨i❩❩', failure, 'Cannot add two matrices of different sizes.');

  Test({LINENUM}4799, '❨❨1, 2❩, ❨3❩❩ + ❨❨2❩, ❨20❩❩', failure, 'Attempt to create a non-rectangular matrix');
  Test({LINENUM}4800, '❨❨1❩, ❨3, 4❩❩ + ❨❨2❩, ❨20❩❩', failure, 'Attempt to create a non-rectangular matrix');

  Test({LINENUM}4802, '❨❨1, 2❩, ❨3, 4❩❩ + ❨❨10, 20❩, ❨30, 40❩❩ + ❨❨100, 200❩, ❨300, 400❩❩', 2, [111, 222, 333, 444]);

  // - two strings

  Test({LINENUM}4806, '"alfa" + "beta"', 'alfabeta', True, 'alfabeta');
  Test({LINENUM}4807, '"alfa" + ""', 'alfa', True, 'alfa');
  Test({LINENUM}4808, '"" + "beta"', 'beta', True, 'beta');
  Test({LINENUM}4809, '"" + ""', '', True, '');
  Test({LINENUM}4810, '"Name: " + """" + "Sir" + """"', 'Name: "Sir"', True, 'Name: "Sir"');

  // - string + any non-string object

  Test({LINENUM}4814, '"alfa " + 12', 'alfa 12', True, 'alfa 12');
  Test({LINENUM}4815, '"alfa " + 1/2', 'alfa 0.5', True, 'alfa 0.5');
  Test({LINENUM}4816, '"alfa " + 1.2', 'alfa 1.2', True, 'alfa 1.2');
  Test({LINENUM}4817, '"alfa " + true', 'alfa true', True, 'alfa true');
  Test({LINENUM}4818, '"alfa " + false', 'alfa false', True, 'alfa false');
  Test({LINENUM}4819, '"alfa " + (1 + 2⋅i)', 'alfa 1 + 2⋅i', True, 'alfa 1 + 2⋅i');
  Test({LINENUM}4820, '"alfa " + 1 + 2⋅i', 'alfa 12⋅i', True, 'alfa 12⋅i');
  Test({LINENUM}4821, '"alfa " + ❨1, 2, 3❩', 'alfa (1, 2, 3)', True, 'alfa (1, 2, 3)');
  Test({LINENUM}4822, '"alfa " + ❨1, 2, i❩', 'alfa (1, 2, i)', True, 'alfa (1, 2, i)');
  Test({LINENUM}4823, '"alfa " + ❨❨1, 2❩, ❨3, 4❩❩', 'alfa ((1, 2), (3, 4))', True, 'alfa ((1, 2), (3, 4))');
  Test({LINENUM}4824, '"alfa " + ❨❨i, 2❩, ❨3, 4❩❩', 'alfa ((i, 2), (3, 4))', True, 'alfa ((i, 2), (3, 4))');
  Test({LINENUM}4825, '"alfa " + ''(1, 2, 3)', 'alfa (1, 2, 3)', True, 'alfa (1, 2, 3)');
  Test({LINENUM}4826, '"alfa " + struct("a": 42)', 'alfa (a: 42)', True, 'alfa (a: 42)');
  Test({LINENUM}4827, '"alfa " + {5}', 'alfa {5}', True, 'alfa {5}');
  Test({LINENUM}4828, '"alfa " + {}', 'alfa ∅', True, 'alfa ∅');
  Test({LINENUM}4829, '"alfa " + color("red")', 'alfa rgba(1.000, 0.000, 0.000, 1.000)', True, 'alfa rgba(1.000, 0.000, 0.000, 1.000)');
  Test({LINENUM}4830, '"alfa " + BinaryData("a")', 'alfa 61 00', True, 'alfa 61 00');
  Test({LINENUM}4831, '"alfa " + (.;)', 'alfa ', True, 'alfa ');

  // - vector + number

  Test({LINENUM}4835, '❨1, 2, 3❩ + 1', [2, 3, 4]);
  Test({LINENUM}4836, '❨1, 2, 3❩ + (-1)', [0, 1, 2]);
  Test({LINENUM}4837, '❨1, 2, 3❩ + 10', [11, 12, 13]);
  Test({LINENUM}4838, '❨1, 2, 3❩ + 10.5', [11.5, 12.5, 13.5]);
  Test({LINENUM}4839, '❨1, 2, 3❩ + 1/2', [1.5, 2.5, 3.5]);
  Test({LINENUM}4840, '❨1, 2, 3❩ + i', [1 + ImaginaryUnit, 2 + ImaginaryUnit, 3 + ImaginaryUnit]);
  Test({LINENUM}4841, '❨1, 2, 3❩ + (2 + 3⋅i)', [3 + 3*ImaginaryUnit, 4 + 3*ImaginaryUnit, 5 + 3*ImaginaryUnit]);

  Test({LINENUM}4843, '❨1, 2.1, 3❩ + 1', [2, 3.1, 4]);
  Test({LINENUM}4844, '❨1, 1/2, 3❩ + 1', [2, 1.5, 4]);
  Test({LINENUM}4845, '❨1, 1/2, 3❩ + 1/2', [1.5, 1.0, 3.5]);

  Test({LINENUM}4847, '❨1.1, 2.1, 3❩ + 1', [2.1, 3.1, 4]);
  Test({LINENUM}4848, '❨1.1, 1/2, 3❩ + 1', [2.1, 1.5, 4]);
  Test({LINENUM}4849, '❨1.1, 1/2, 3❩ + 1/2', [1.6, 1.0, 3.5]);

  Test({LINENUM}4851, '❨i, 2, 3❩ + 1', [ImaginaryUnit + 1, 3, 4]);
  Test({LINENUM}4852, '❨i, 2, 3❩ + (-1)', [ImaginaryUnit - 1, 1, 2]);
  Test({LINENUM}4853, '❨i, 2, 3❩ + 10', [ImaginaryUnit + 10, 12, 13]);
  Test({LINENUM}4854, '❨i, 2, 3❩ + 10.5', [ImaginaryUnit + 10.5, 12.5, 13.5]);
  Test({LINENUM}4855, '❨i, 2, 3❩ + 1/2', [ImaginaryUnit + 0.5, 2.5, 3.5]);
  Test({LINENUM}4856, '❨i, 2, 3❩ + i', [2*ImaginaryUnit, 2 + ImaginaryUnit, 3 + ImaginaryUnit]);
  Test({LINENUM}4857, '❨i, 2, 3❩ + (2 + 3⋅i)', [2 + 4*ImaginaryUnit, 4 + 3*ImaginaryUnit, 5 + 3*ImaginaryUnit]);

  // - matrix + number

  Test({LINENUM}4861, '❨❨1, 2❩, ❨3, 4❩❩ + 1', 2, [2, 3, 4, 5]);
  Test({LINENUM}4862, '❨❨1, 2❩, ❨3, 4❩❩ + (-1)', 2, [0, 1, 2, 3]);
  Test({LINENUM}4863, '❨❨1, 2❩, ❨3, 4❩❩ + 10', 2, [11, 12, 13, 14]);
  Test({LINENUM}4864, '❨❨1❩, ❨10❩, ❨100❩❩ + 1/2', 1, [1.5, 10.5, 100.5]);
  Test({LINENUM}4865, '❨❨1, 2, 3, 4❩, ❨10, 20, 30, 40❩❩ + 0.5', 4, [1.5, 2.5, 3.5, 4.5, 10.5, 20.5, 30.5, 40.5]);
  Test({LINENUM}4866, '❨❨10, 20, 30, 40❩❩ + i', 4, [10 + ImaginaryUnit, 20 + ImaginaryUnit, 30 + ImaginaryUnit, 40 + ImaginaryUnit]);

  Test({LINENUM}4868, '❨❨1.1, 2❩, ❨3, 4❩❩ + 1', 2, [2.1, 3, 4, 5]);
  Eps; Test({LINENUM}4869, '❨❨1.1, 2❩, ❨3, 4❩❩ + (-1)', 2, [0.1, 1, 2, 3]);
  Test({LINENUM}4870, '❨❨1.1, 2❩, ❨3, 4❩❩ + 10', 2, [11.1, 12, 13, 14]);

  Test({LINENUM}4872, '❨❨i, 2❩, ❨3, 4❩❩ + 1', 2, [ImaginaryUnit + 1, 3, 4, 5]);
  Test({LINENUM}4873, '❨❨i, 2❩, ❨3, 4❩❩ + (-1)', 2, [ImaginaryUnit - 1, 1, 2, 3]);
  Test({LINENUM}4874, '❨❨i, 2❩, ❨3, 4❩❩ + 10', 2, [ImaginaryUnit + 10, 12, 13, 14]);
  Test({LINENUM}4875, '❨❨i❩, ❨10❩, ❨100❩❩ + 1/2', 1, [ImaginaryUnit + 0.5, 10.5, 100.5]);
  Test({LINENUM}4876, '❨❨i, 2, 3, 4❩, ❨10, 20, 30, 40❩❩ + 0.5', 4, [ImaginaryUnit + 0.5, 2.5, 3.5, 4.5, 10.5, 20.5, 30.5, 40.5]);
  Test({LINENUM}4877, '❨❨i, 20, 30, 40❩❩ + i', 4, [2*ImaginaryUnit, 20 + ImaginaryUnit, 30 + ImaginaryUnit, 40 + ImaginaryUnit]);

  // - two sounds: postponed

  // - other combinations (testing the operator's collapsing nature)

  Test({LINENUM}4883, '❨1, 2, 3❩ + ❨10, 20, 30❩ + 100', [111, 122, 133]);

  // - invalid operands

  Test({LINENUM}4887, '5 + "test"', failure, 'Invalid function arguments.');
  Test({LINENUM}4888, '❨1, 0, 0❩ + "test"', failure, 'Invalid function arguments.');
  Test({LINENUM}4889, '❨❨i, 2❩, ❨3, 4❩❩ + "test"', failure, 'Invalid function arguments.');
  Test({LINENUM}4890, '❨1, 0, 0❩ + true', failure, 'Invalid function arguments.');
  Test({LINENUM}4891, '❨❨i, 2❩, ❨3, 4❩❩ + date()', failure, 'Invalid function arguments.');
  Test({LINENUM}4892, '1 + ❨1, 0, 0❩', failure, 'Invalid function arguments.');
  Test({LINENUM}4893, '1 + ❨❨i, 2❩, ❨3, 4❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}4894, 'false + "test"', failure, 'Invalid function arguments.');
  Test({LINENUM}4895, 'false + 42', failure, 'Invalid function arguments.');
  Test({LINENUM}4896, '❨❨i, 2❩, ❨3, 4❩❩ + (0;)', failure, 'Invalid function arguments.');
  Test({LINENUM}4897, 'color("red") + ''(1, 2, 3, 4, 5)', failure, 'Invalid function arguments.');
  Test({LINENUM}4898, 'color("red") + false', failure, 'Invalid function arguments.');
  Test({LINENUM}4899, 'color("red") + time()', failure, 'Invalid function arguments.');
  Test({LINENUM}4900, 'color("red") + ❨❨i, 2❩, ❨3, 4❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}4901, 'color("red") + "nice"', failure, 'Invalid function arguments.');
  Test({LINENUM}4902, 'BinaryData("a") + ❨❨i, 2❩, ❨3, 4❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}4903, 'BinaryData("a") + now()', failure, 'Invalid function arguments.');
  Test({LINENUM}4904, '(0;) + (0;)', failure, 'Invalid function arguments.');

  // Binary minus

  // - two numbers

  Test({LINENUM}4910, '10 - 7', 3, True, '3');
  Test({LINENUM}4911, '10 - 21', -11, True, '−11');
  Test({LINENUM}4912, '10 - 1/2', Rat(19, 2), True, '19/2');
  Test({LINENUM}4913, '10 - 0.5', 9.5, True, '9.5');
  Test({LINENUM}4914, '10 − 7', 3, True, '3');
  Test({LINENUM}4915, '10 − 21', -11, True, '−11');
  Test({LINENUM}4916, '10 − 1/2', Rat(19, 2), True, '19/2');
  Test({LINENUM}4917, '10 − 0.5', 9.5, True, '9.5');

  Test({LINENUM}4919, '10 - (-7)', 17, True, '17');
  Test({LINENUM}4920, '10 - (-21)', 31, True, '31');
  Test({LINENUM}4921, '10 - (-1/2)', Rat(21, 2), True, '21/2');
  Test({LINENUM}4922, '10 − (−1/2)', Rat(21, 2), True, '21/2');
  Test({LINENUM}4923, '10 - (-0.5)', 10.5, True, '10.5');
  Test({LINENUM}4924, '10 − (−0.5)', 10.5, True, '10.5');

  Test({LINENUM}4926, '17584986538592057 - 57', 17584986538592000, True, '17584986538592000');
  Test({LINENUM}4927, '17584986538592057 - (-3)', 17584986538592060, True, '17584986538592060');
  Test({LINENUM}4928, '17584986538592057 - 07584986538592057', 10000000000000000, True, '10000000000000000');

  Test({LINENUM}4930, '10 - i', 10 - ImaginaryUnit, True, '10 − i');
  Test({LINENUM}4931, '10 - (5.4 + 2.3 ⋅ i)', 4.6 - 2.3*ImaginaryUnit, True, '4.6 − 2.3⋅i');

  Test({LINENUM}4933, '7/3 - 1', Rat(4, 3), True, '4/3');
  Test({LINENUM}4934, '7/3 - 1/3', Rat(2, 1), True, '2');
  Test({LINENUM}4935, '7/3 - 2/3', Rat(5, 3), True, '5/3');
  Test({LINENUM}4936, '7/3 - 1/4', Rat(25, 12), True, '25/12');
  Test({LINENUM}4937, '7/2 - 0.5', 3.0, True, '3');
  Test({LINENUM}4938, '1/2 - i', 0.5 - ImaginaryUnit, True, '0.5 − i');
  Test({LINENUM}4939, '1/2 − i', 0.5 - ImaginaryUnit, True, '0.5 − i');
  Test({LINENUM}4940, '1/2 - (5.4 + 2.3 ⋅ i)', -4.9 - 2.3*ImaginaryUnit, True, '−4.9 − 2.3⋅i');

  Test({LINENUM}4942, '10.61 - 1', 9.61, True, '9.61');
  Test({LINENUM}4943, '10.5 - 1/2', 10.0, True, '10');
  Test({LINENUM}4944, '10.6 - 1/2', 10.1, True, '10.1');
  Eps; Test({LINENUM}4945, '10.61 - 1.3', 9.31, True, '9.31');
  Test({LINENUM}4946, '0.5 - i', 0.5 - ImaginaryUnit, True, '0.5 − i');
  Test({LINENUM}4947, '0.5 - (5.4 + 2.3 ⋅ i)', -4.9 - 2.3*ImaginaryUnit, True, '−4.9 − 2.3⋅i');

  Test({LINENUM}4949, '(5.4 + 2.3 ⋅ i) - (3.2 - 1.1 ⋅ i)', 2.2 + 3.4*ImaginaryUnit, True, '2.2 + 3.4⋅i');
  Test({LINENUM}4950, '(5.4 + 2.3 ⋅ i) − (3.2 − 1.1 ⋅ i)', 2.2 + 3.4*ImaginaryUnit, True, '2.2 + 3.4⋅i');

  Test({LINENUM}4952, '0 − 0', 0, True, '0');
  Test({LINENUM}4953, '0.0 − 0', 0.0, True, '0');
  Test({LINENUM}4954, '0 − 0.0', 0.0, True, '0');
  Test({LINENUM}4955, '0.0 − 0.0', 0.0, True, '0');
  Test({LINENUM}4956, '3.2 − 0.0', 3.2, True, '3.2');
  Test({LINENUM}4957, '0 − 1', -1, True, '−1');
  Test({LINENUM}4958, '0 − 1.2', -1.2, True, '−1.2');
  Test({LINENUM}4959, '0 − 1/2', Rat(-1, 2), True, '−1/2');

  Test({LINENUM}4961, '(-8305843009213693952) - 8305843009213693952', -16611686018427387904.0);
  Test({LINENUM}4962, '50E100 - 27E100', 23E100);
  Test({LINENUM}4963, '50E100 - (-27E100)', 77E100);
  Test({LINENUM}4964, '(-50E100) - 27E100', -77E100);

  // - two vectors

  Test({LINENUM}4968, '❨1, 1, 0❩ − ❨0, 1, 2❩', [1, 0, -2]);
  Test({LINENUM}4969, '❨1, 1, 0❩ − ❨0, −1, 2❩', [1, 2, -2]);
  Test({LINENUM}4970, '❨1, 1, 0❩ − ❨0, −1❩', failure, 'Cannot subtract two vectors of unequal dimension.');

  Test({LINENUM}4972, '❨i, 1, 0❩ − ❨0, 1, 2❩', [ImaginaryUnit, 0, -2]);
  Test({LINENUM}4973, '❨i, 1, 0❩ − ❨0, −1, 2❩', [ImaginaryUnit, 2, -2]);
  Test({LINENUM}4974, '❨i, 1, 0❩ − ❨0, −1❩', failure, 'Cannot subtract two vectors of unequal dimension.');

  Test({LINENUM}4976, '❨1, 1, 0❩ − ❨i, 1, 2❩', [1 - ImaginaryUnit, 0, -2]);
  Test({LINENUM}4977, '❨1, 1, 0❩ − ❨i, −1, 2❩', [1 - ImaginaryUnit, 2, -2]);
  Test({LINENUM}4978, '❨1, 1, 0❩ − ❨i, −1❩', failure, 'Cannot subtract two vectors of unequal dimension.');

  Test({LINENUM}4980, '❨i, 1, i❩ − ❨i, 1, 2❩', [0, 0, ImaginaryUnit-2]);
  Test({LINENUM}4981, '❨i, 1, i❩ − ❨i, −1, 2❩', [0, 2, ImaginaryUnit-2]);
  Test({LINENUM}4982, '❨i, 1, i❩ − ❨i, −1❩', failure, 'Cannot subtract two vectors of unequal dimension.');

  Test({LINENUM}4984, '❨2, 5, 3.5, 1, −2, 4❩ − ❨−3.4, 5, 6, 7, 0, 0❩', [5.4, 0, -2.5, -6, -2, 4]);
  Test({LINENUM}4985, '❨2, 5, 3.5, 1, −2, 4❩ − ❨−3.4, 5, 6, 7, 0❩', failure, 'Cannot subtract two vectors of unequal dimension.');
  Test({LINENUM}4986, '❨2, 5, 3.5, 1, −2, 4❩ − ❨−3.4, 5, 6, 7, 0, 0, 0❩', failure, 'Cannot subtract two vectors of unequal dimension.');

  Test({LINENUM}4988, '❨1, 0❩ − ❨1, 1❩', [0, -1]);
  Test({LINENUM}4989, '❨1, 0❩ − ❨1/2, 0.5❩', [0.5, -0.5]);
  Test({LINENUM}4990, '❨1, 0❩ − ❨1, i❩', [0, -ImaginaryUnit]);

  Test({LINENUM}4992, '❨1❩ − ❨3❩', [-2]);

  // - two matrices

  Test({LINENUM}4996, '❨❨1, 2❩, ❨3, 4❩❩ − ❨❨3, 1❩, ❨2, 0❩❩', 2, [-2, 1, 1, 4]);
  Test({LINENUM}4997, '❨❨1, 2❩, ❨−3, 4❩❩ − ❨❨3, 1❩, ❨2, 0❩❩', 2, [-2, 1, -5, 4]);
  Test({LINENUM}4998, '❨❨1❩, ❨2❩, ❨3❩, ❨4❩❩ − ❨❨0❩, ❨1❩, ❨5❩, ❨−2❩❩', 1, [1, 1, -2, 6]);
  Test({LINENUM}4999, '❨❨5, 4, 3, 7❩❩ − ❨❨1, 2, 3, 6❩❩', 4, [4, 2, 0, 1]);

  Test({LINENUM}5001, '❨❨i, 2❩, ❨3, 4❩❩ − ❨❨3, 1❩, ❨2, 0❩❩', 2, [ImaginaryUnit - 3, 1, 1, 4]);
  Test({LINENUM}5002, '❨❨i, 2❩, ❨−3, 4❩❩ − ❨❨3, 1❩, ❨2, 0❩❩', 2, [ImaginaryUnit - 3, 1, -5, 4]);
  Test({LINENUM}5003, '❨❨i❩, ❨2❩, ❨3❩, ❨4❩❩ − ❨❨0❩, ❨1❩, ❨5❩, ❨−2❩❩', 1, [ImaginaryUnit, 1, -2, 6]);
  Test({LINENUM}5004, '❨❨5⋅i, 4, 3, 7❩❩ − ❨❨1, 2, 3, 6❩❩', 4, [5*ImaginaryUnit - 1, 2, 0, 1]);

  Test({LINENUM}5006, '❨❨1, 2❩, ❨3, 4❩❩ − ❨❨3⋅i, 1❩, ❨2, 0❩❩', 2, [1-3*ImaginaryUnit, 1, 1, 4]);
  Test({LINENUM}5007, '❨❨1, 2❩, ❨−3, 4❩❩ − ❨❨3⋅i, 1❩, ❨2, 0❩❩', 2, [1-3*ImaginaryUnit, 1, -5, 4]);
  Test({LINENUM}5008, '❨❨1❩, ❨2❩, ❨3❩, ❨4❩❩ − ❨❨i❩, ❨1❩, ❨5❩, ❨−2❩❩', 1, [1-ImaginaryUnit, 1, -2, 6]);
  Test({LINENUM}5009, '❨❨5, 4, 3, 7❩❩ − ❨❨i, 2, 3, 6❩❩', 4, [5-ImaginaryUnit, 2, 0, 1]);

  Test({LINENUM}5011, '❨❨i, 2❩, ❨3, 4❩❩ − ❨❨3⋅i, 1❩, ❨2, 0❩❩', 2, [-2*ImaginaryUnit, 1, 1, 4]);
  Test({LINENUM}5012, '❨❨i, 2❩, ❨−3, 4❩❩ − ❨❨3⋅i, 1❩, ❨2, 0❩❩', 2, [-2*ImaginaryUnit, 1, -5, 4]);
  Test({LINENUM}5013, '❨❨i❩, ❨2❩, ❨3❩, ❨4❩❩ − ❨❨i❩, ❨1❩, ❨5❩, ❨−2❩❩', 1, [0*ImaginaryUnit, 1, -2, 6]);
  Test({LINENUM}5014, '❨❨5⋅i, 4, 3, 7❩❩ − ❨❨i, 2, 3, 6❩❩', 4, [4*ImaginaryUnit, 2, 0, 1]);

  Test({LINENUM}5016, '❨❨1, 2❩, ❨3, 4❩❩ − ❨❨1❩, ❨2❩, ❨3❩, ❨4❩❩', failure, 'Cannot subtract two matrices of different sizes.');
  Test({LINENUM}5017, '❨❨i, 2❩, ❨3, 4❩❩ − ❨❨1❩, ❨2❩, ❨3❩, ❨4❩❩', failure, 'Cannot subtract two matrices of different sizes.');
  Test({LINENUM}5018, '❨❨1, 2❩, ❨3, 4❩❩ − ❨❨i❩, ❨2❩, ❨3❩, ❨4❩❩', failure, 'Cannot subtract two matrices of different sizes.');
  Test({LINENUM}5019, '❨❨i, 2❩, ❨3, 4❩❩ − ❨❨i❩, ❨2❩, ❨3❩, ❨4❩❩', failure, 'Cannot subtract two matrices of different sizes.');

  Test({LINENUM}5021, '❨❨5, 4, 3, 7❩❩ − ❨❨1, 2, 3❩❩', failure, 'Cannot subtract two matrices of different sizes.');
  Test({LINENUM}5022, '❨❨i, 4, 3, 7❩❩ − ❨❨1, 2, 3❩❩', failure, 'Cannot subtract two matrices of different sizes.');
  Test({LINENUM}5023, '❨❨5, 4, 3, 7❩❩ − ❨❨i, 2, 3❩❩', failure, 'Cannot subtract two matrices of different sizes.');
  Test({LINENUM}5024, '❨❨i, 4, 3, 7❩❩ − ❨❨i, 2, 3❩❩', failure, 'Cannot subtract two matrices of different sizes.');

  // - vector minus number

  Test({LINENUM}5028, '❨1, 2, 3❩ − 1', [0, 1, 2]);
  Test({LINENUM}5029, '❨1, 2, 3❩ − (−1)', [2, 3, 4]);
  Test({LINENUM}5030, '❨1, 2, 3❩ − 1/2', [0.5, 1.5, 2.5]);
  Test({LINENUM}5031, '❨1, 2, 3❩ − (−1/2)', [1.5, 2.5, 3.5]);
  Test({LINENUM}5032, '❨1, 2, 3❩ − 0.5', [0.5, 1.5, 2.5]);
  Test({LINENUM}5033, '❨1, 2, 3❩ − (−0.5)', [1.5, 2.5, 3.5]);
  Test({LINENUM}5034, '❨1, 2, 3❩ − i', [1-ImaginaryUnit, 2-ImaginaryUnit, 3-ImaginaryUnit]);
  Test({LINENUM}5035, '❨1, 2, 3❩ − (−i)', [1+ImaginaryUnit, 2+ImaginaryUnit, 3+ImaginaryUnit]);
  Test({LINENUM}5036, '❨1, 2, 3❩ − (2+i)', [-1-ImaginaryUnit, -ImaginaryUnit, 1-ImaginaryUnit]);

  Test({LINENUM}5038, '❨i, 2, 3❩ − 1', [ImaginaryUnit - 1, 1, 2]);
  Test({LINENUM}5039, '❨i, 2, 3❩ − (−1)', [ImaginaryUnit + 1, 3, 4]);
  Test({LINENUM}5040, '❨i, 2, 3❩ − 1/2', [ImaginaryUnit - 0.5, 1.5, 2.5]);
  Test({LINENUM}5041, '❨i, 2, 3❩ − (−1/2)', [ImaginaryUnit + 0.5, 2.5, 3.5]);
  Test({LINENUM}5042, '❨i, 2, 3❩ − 0.5', [ImaginaryUnit - 0.5, 1.5, 2.5]);
  Test({LINENUM}5043, '❨i, 2, 3❩ − (−0.5)', [ImaginaryUnit + 0.5, 2.5, 3.5]);
  Test({LINENUM}5044, '❨i, 2, 3❩ − i', [0, 2-ImaginaryUnit, 3-ImaginaryUnit]);
  Test({LINENUM}5045, '❨i, 2, 3❩ − (−i)', [2*ImaginaryUnit, 2+ImaginaryUnit, 3+ImaginaryUnit]);
  Test({LINENUM}5046, '❨i, 2, 3❩ − (2+i)', [-2, -ImaginaryUnit, 1-ImaginaryUnit]);

  Test({LINENUM}5048, '❨1, 2, 3, 4, 5❩ − 1', [0, 1, 2, 3, 4]);
  Test({LINENUM}5049, '❨1❩ − 10', [-9]);

  // - matrix minus number

  Test({LINENUM}5053, '❨❨1, 2❩, ❨3, 4❩❩ − 1', 2, [0, 1, 2, 3]);
  Test({LINENUM}5054, '❨❨1, 2❩, ❨3, 4❩❩ − (−1)', 2, [2, 3, 4, 5]);
  Test({LINENUM}5055, '❨❨1, 2❩, ❨3, 4❩❩ − 1/2', 2, [0.5, 1.5, 2.5, 3.5]);
  Test({LINENUM}5056, '❨❨1, 2❩, ❨3, 4❩❩ − (−1/2)', 2, [1.5, 2.5, 3.5, 4.5]);
  Test({LINENUM}5057, '❨❨1, 2❩, ❨3, 4❩❩ − 0.5', 2, [0.5, 1.5, 2.5, 3.5]);
  Test({LINENUM}5058, '❨❨1, 2❩, ❨3, 4❩❩ − (−0.5)', 2, [1.5, 2.5, 3.5, 4.5]);
  Test({LINENUM}5059, '❨❨1, 2❩, ❨3, 4❩❩ − i', 2, [1 - ImaginaryUnit, 2 - ImaginaryUnit, 3 - ImaginaryUnit, 4 - ImaginaryUnit]);
  Test({LINENUM}5060, '❨❨1, 2❩, ❨3, 4❩❩ − (−i)', 2, [1 + ImaginaryUnit, 2 + ImaginaryUnit, 3 + ImaginaryUnit, 4 + ImaginaryUnit]);

  Test({LINENUM}5062, '❨❨i, 2❩, ❨3, 4❩❩ − 1', 2, [ImaginaryUnit - 1, 1, 2, 3]);
  Test({LINENUM}5063, '❨❨i, 2❩, ❨3, 4❩❩ − (−1)', 2, [ImaginaryUnit + 1, 3, 4, 5]);
  Test({LINENUM}5064, '❨❨i, 2❩, ❨3, 4❩❩ − 1/2', 2, [ImaginaryUnit - 0.5, 1.5, 2.5, 3.5]);
  Test({LINENUM}5065, '❨❨i, 2❩, ❨3, 4❩❩ − (−1/2)', 2, [ImaginaryUnit + 0.5, 2.5, 3.5, 4.5]);
  Test({LINENUM}5066, '❨❨i, 2❩, ❨3, 4❩❩ − 0.5', 2, [ImaginaryUnit - 0.5, 1.5, 2.5, 3.5]);
  Test({LINENUM}5067, '❨❨i, 2❩, ❨3, 4❩❩ − (−0.5)', 2, [ImaginaryUnit + 0.5, 2.5, 3.5, 4.5]);
  Test({LINENUM}5068, '❨❨i, 2❩, ❨3, 4❩❩ − i', 2, [0, 2 - ImaginaryUnit, 3 - ImaginaryUnit, 4 - ImaginaryUnit]);
  Test({LINENUM}5069, '❨❨i, 2❩, ❨3, 4❩❩ − (−i)', 2, [2*ImaginaryUnit, 2 + ImaginaryUnit, 3 + ImaginaryUnit, 4 + ImaginaryUnit]);

  Test({LINENUM}5071, '❨❨5, 4, 3, 7❩❩ − 2', 4, [3, 2, 1, 5]);
  Test({LINENUM}5072, '❨❨5⋅i, 4, 3, 7❩❩ − 2', 4, [-2 + 5*ImaginaryUnit, 2, 1, 5]);
  Test({LINENUM}5073, '❨❨5⋅i, 4, 3, 7❩❩ − 2⋅i', 4, [3*ImaginaryUnit, 4 - 2*ImaginaryUnit, 3 - 2*ImaginaryUnit, 7 - 2*ImaginaryUnit]);
  Test({LINENUM}5074, '❨❨5, 4, 3, 7❩❩ − 2⋅i', 4, [5 - 2*ImaginaryUnit, 4 - 2*ImaginaryUnit, 3 - 2*ImaginaryUnit, 7 - 2*ImaginaryUnit]);

  Test({LINENUM}5076, '❨❨123❩❩ - 100', 1, [23]);

  // - two sounds: postponed

  // - invalid operands

  Test({LINENUM}5082, '"alfa" - "beta"', failure, 'Invalid function arguments.');
  Test({LINENUM}5083, '"alfa" - 1', failure, 'Invalid function arguments.');
  Test({LINENUM}5084, '5 − "test"', failure, 'Invalid function arguments.');
  Test({LINENUM}5085, '❨1, 0, 0❩ − "test"', failure, 'Invalid function arguments.');
  Test({LINENUM}5086, '❨❨i, 2❩, ❨3, 4❩❩ − "test"', failure, 'Invalid function arguments.');
  Test({LINENUM}5087, '❨1, 0, 0❩ − true', failure, 'Invalid function arguments.');
  Test({LINENUM}5088, '❨❨i, 2❩, ❨3, 4❩❩ − date()', failure, 'Invalid function arguments.');
  Test({LINENUM}5089, '1 − ❨1, 0, 0❩', failure, 'Invalid function arguments.');
  Test({LINENUM}5090, '1 − ❨❨i, 2❩, ❨3, 4❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}5091, 'false − "test"', failure, 'Invalid function arguments.');
  Test({LINENUM}5092, 'false − 42', failure, 'Invalid function arguments.');
  Test({LINENUM}5093, '❨❨i, 2❩, ❨3, 4❩❩ − (0;)', failure, 'Invalid function arguments.');
  Test({LINENUM}5094, 'color("red") − ''(1, 2, 3, 4, 5)', failure, 'Invalid function arguments.');
  Test({LINENUM}5095, 'color("red") − false', failure, 'Invalid function arguments.');
  Test({LINENUM}5096, 'color("red") − time()', failure, 'Invalid function arguments.');
  Test({LINENUM}5097, 'color("red") − ❨❨i, 2❩, ❨3, 4❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}5098, 'color("red") − "nice"', failure, 'Invalid function arguments.');
  Test({LINENUM}5099, 'BinaryData("a") − ❨❨i, 2❩, ❨3, 4❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}5100, 'BinaryData("a") − now()', failure, 'Invalid function arguments.');
  Test({LINENUM}5101, '(0;) − (0;)', failure, 'Invalid function arguments.');

  // Multiplication (cdot)

  // - two numbers

  Test({LINENUM}5107, '7⋅8', 56, True, '56');
  Test({LINENUM}5108, '(-7)⋅8', -56, True, '−56');
  Test({LINENUM}5109, '7⋅(-8)', -56, True, '−56');
  Test({LINENUM}5110, '(-7)⋅(-8)', 56, True, '56');

  Test({LINENUM}5112, '7.0⋅8', 56.0, True, '56');
  Test({LINENUM}5113, '(-7.0)⋅8', -56.0, True, '−56');
  Test({LINENUM}5114, '7.0⋅(-8)', -56.0, True, '−56');
  Test({LINENUM}5115, '(-7.0)⋅(-8)', 56.0, True, '56');

  Test({LINENUM}5117, '7⋅8.0', 56.0, True, '56');
  Test({LINENUM}5118, '(-7)⋅8.0', -56.0, True, '−56');
  Test({LINENUM}5119, '7⋅(-8.0)', -56.0, True, '−56');
  Test({LINENUM}5120, '(-7)⋅(-8.0)', 56.0, True, '56');

  Test({LINENUM}5122, '7⋅(1/2)', Rat(7, 2), True, '7/2');
  Test({LINENUM}5123, '7⋅(-1/2)', Rat(-7, 2), True, '−7/2');
  Test({LINENUM}5124, '(-7)⋅(1/2)', Rat(-7, 2), True, '−7/2');
  Test({LINENUM}5125, '(-7)⋅(-1/2)', Rat(7, 2), True, '7/2');

  Test({LINENUM}5127, '7⋅0.5', 3.5, True, '3.5');
  Test({LINENUM}5128, '7⋅(-0.5)', -3.5, True, '−3.5');
  Test({LINENUM}5129, '(-7)⋅0.5', -3.5, True, '−3.5');
  Test({LINENUM}5130, '(-7)⋅(-0.5)', 3.5, True, '3.5');

  Test({LINENUM}5132, '7⋅i', 7*ImaginaryUnit, True, '7⋅i');
  Test({LINENUM}5133, '7⋅(-i)', -7*ImaginaryUnit, True, '−7⋅i');
  Test({LINENUM}5134, '7 ⋅ (2 - 3⋅i)', 14 - 21*ImaginaryUnit, True, '14 − 21⋅i');

  Test({LINENUM}5136, '(1/2) ⋅ 5', Rat(5, 2), True, '5/2');
  Test({LINENUM}5137, '(1/2) ⋅ (-5)', Rat(-5, 2), True, '−5/2');
  Test({LINENUM}5138, '(-1/2) ⋅ 5', Rat(-5, 2), True, '−5/2');
  Test({LINENUM}5139, '(-1/2) ⋅ (-5)', Rat(5, 2), True, '5/2');

  Test({LINENUM}5141, '(3/5) ⋅ (2/7)', Rat(6, 35), True, '6/35');
  Test({LINENUM}5142, '(3/5) ⋅ (-2/7)', Rat(-6, 35), True, '−6/35');
  Test({LINENUM}5143, '(-3/5) ⋅ (2/7)', Rat(-6, 35), True, '−6/35');
  Test({LINENUM}5144, '(-3/5) ⋅ (-2/7)', Rat(6, 35), True, '6/35');

  Test({LINENUM}5146, '(3/7) ⋅ (7/3)', Rat(1, 1), True, '1');
  Test({LINENUM}5147, '(3/7) ⋅ (-7/3)', Rat(-1, 1), True, '−1');
  Test({LINENUM}5148, '(-3/7) ⋅ (7/3)', Rat(-1, 1), True, '−1');
  Test({LINENUM}5149, '(-3/7) ⋅ (-7/3)', Rat(1, 1), True, '1');

  Test({LINENUM}5151, '(7/12) ⋅ (4/3)', Rat(7, 9), True, '7/9');
  Test({LINENUM}5152, '(-7/12) ⋅ (4/3)', Rat(-7, 9), True, '−7/9');
  Test({LINENUM}5153, '(7/12) ⋅ (-4/3)', Rat(-7, 9), True, '−7/9');
  Test({LINENUM}5154, '(-7/12) ⋅ (-4/3)', Rat(7, 9), True, '7/9');

  Eps; Test({LINENUM}5156, '(3/5) ⋅ 0.1', 0.06, True, '0.06');
  Test({LINENUM}5157, '(3/5) ⋅ i', 0.6*ImaginaryUnit, True, '0.6⋅i');
  Test({LINENUM}5158, '(3/5) ⋅ (-i)', -0.6*ImaginaryUnit, True, '−0.6⋅i');
  Eps; Test({LINENUM}5159, '(3/5) ⋅ (3.2 + 3.6⋅i)', 1.92 + 2.16*ImaginaryUnit, True, '1.92 + 2.16⋅i');

  Test({LINENUM}5161, '0.6 ⋅ 5', 3.0, True, '3');
  Test({LINENUM}5162, '0.6 ⋅ 1/2', 0.3, True, '0.3');
  Test({LINENUM}5163, '0.6 ⋅ 0.5', 0.3, True, '0.3');
  Test({LINENUM}5164, '0.6 ⋅ i', 0.6*ImaginaryUnit, True, '0.6⋅i');

  Test({LINENUM}5166, 'i ⋅ 5', 5*ImaginaryUnit, True, '5⋅i');
  Test({LINENUM}5167, '(-i) ⋅ 5', -5*ImaginaryUnit, True, '−5⋅i');
  Test({LINENUM}5168, 'i ⋅ (-5)', -5*ImaginaryUnit, True, '−5⋅i');
  Test({LINENUM}5169, '(-i) ⋅ (-5)', 5*ImaginaryUnit, True, '5⋅i');

  Test({LINENUM}5171, 'i ⋅ (1/2)', ImaginaryUnit/2, True, '0.5⋅i');
  Test({LINENUM}5172, 'i ⋅ 0.5', ImaginaryUnit/2, True, '0.5⋅i');
  Test({LINENUM}5173, 'i ⋅ i', TASC(-1.0), True, '−1');

  Eps; Test({LINENUM}5175, '(2.4 + 0.5⋅i)⋅(-2.4 + 9.2⋅i)', -10.36 + 20.88*ImaginaryUnit, True, '−10.36 + 20.88⋅i');

  Test({LINENUM}5177, '8305843009213693952 ⋅ 2', 16611686018427387904.0);
  Test({LINENUM}5178, '8305843009213693952 ⋅ 10000', 8.305843009213693952E22);
  Test({LINENUM}5179, '2⋅25E50', 50E50);
  Test({LINENUM}5180, '36E100 ⋅ 2E100', 72E200);

  Test({LINENUM}5182, '(-8305843009213693952) ⋅ 2', -16611686018427387904.0);
  Test({LINENUM}5183, '(-8305843009213693952) ⋅ 10000', -8.305843009213693952E22);
  Test({LINENUM}5184, '2⋅(-25E50)', -50E50);
  Test({LINENUM}5185, '(-36E100) ⋅ 2E100', -72E200);

  Test({LINENUM}5187, '1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ 5', 120);
  Test({LINENUM}5188, '1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ 5.0', 120.0);
  Test({LINENUM}5189, '1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ (5/2)', Rat(60, 1));

  // - vector inner (dot, scalar) product

  Test({LINENUM}5193, '❨1, 2, 3❩ ⋅ ❨5, 2, −1❩', 6.0, True, '6');
  Test({LINENUM}5194, '❨1, 0, 0❩ ⋅ ❨0, 1, 0❩', 0.0, True, '0');
  Test({LINENUM}5195, '❨1, 0, 0❩ ⋅ ❨1, 0, 0❩', 1.0, True, '1');

  Test({LINENUM}5197, '❨6, 4, 2❩ ⋅ ❨i, 3, 1❩', 14 - 6*ImaginaryUnit, True, '14 − 6⋅i');
  Test({LINENUM}5198, '❨1, 0, 0❩ ⋅ ❨2 + i, 4, 6❩', 2 - ImaginaryUnit, True, '2 − i');

  Test({LINENUM}5200, '❨2⋅i, 5, 3❩ ⋅ ❨1, 2, 1❩', 13 + 2*ImaginaryUnit, True, '13 + 2⋅i');
  Test({LINENUM}5201, '❨5+7⋅i, 2, 3❩ ⋅ ❨1, 0, 0❩', 5 + 7*ImaginaryUnit, True, '5 + 7⋅i');

  Test({LINENUM}5203, '❨3 + i, −2 − 5⋅i, 4 + 2⋅i❩ ⋅ ❨−5, −2 − 7⋅i, 3⋅i❩', 30 - 21*ImaginaryUnit, True, '30 − 21⋅i');
  Test({LINENUM}5204, '❨1, i, −1❩ ⋅ ❨1, i, −1❩', TASC(3.0), True, '3');

  Test({LINENUM}5206, '❨1, 0❩ ⋅ ❨0, 1❩', 0.0, True, '0');
  Test({LINENUM}5207, '❨1.0, 0❩ ⋅ ❨5.2, 1.3❩', 5.2, True, '5.2');

  Test({LINENUM}5209, '❨1, 2, 3❩ ⋅ ❨5, 2, −1❩ ⋅ ❨4, 5, 2❩', [24, 30, 12]);
  Test({LINENUM}5210, '❨1, 2, 3❩ ⋅ ❨5, 2, −1❩ ⋅ ❨4, 5, 2❩ ⋅ ❨2, 1, 7❩', 48.0 + 30 + 84);

  Test({LINENUM}5212, '❨1, 0❩ ⋅ ❨0, 2, 3, 4❩', failure, 'Cannot compute dot product of two vectors of unequal dimension.');
  Test({LINENUM}5213, '❨1, 0❩ ⋅ ❨0, 2, 3❩', failure, 'Cannot compute dot product of two vectors of unequal dimension.');
  Test({LINENUM}5214, '❨1, 0❩ ⋅ ❨0, 2❩', 0.0, True, '0');

  // - matrix multiplication

  Test({LINENUM}5218, '❨❨2, 0❩, ❨0, 3❩❩ ⋅ ❨❨1, 2❩, ❨3, 4❩❩', 2, [2, 4, 9, 12]);
  Test({LINENUM}5219, '❨❨4, 1, 2❩, ❨3, 5, 1❩, ❨−3, 5, 1❩❩ ⋅ ❨❨6, −4, 2❩, ❨−3, 7, 5❩, ❨0, 2, 1❩❩', 3, [21, -5, 15, 3, 25, 32, -33, 49, 20]);
  Test({LINENUM}5220, 'IdentityMatrix(3) ⋅ ❨❨6, −4, 2❩, ❨−3, 7, 5❩, ❨0, 2, 1❩❩', 3, [6, -4, 2, -3, 7, 5, 0, 2, 1]);
  Test({LINENUM}5221, '❨❨4, 1, 2❩, ❨3, 5, 1❩, ❨−3, 5, 1❩❩ ⋅ IdentityMatrix(3)', 3, [4, 1, 2, 3, 5, 1, -3, 5, 1]);

  Test({LINENUM}5223, '❨❨1, 2❩, ❨5, −2❩, ❨5, 2❩❩ ⋅ ❨❨5, 6, 4, 2, 1❩, ❨4, −2, 3, 4, 6❩❩', 5, [13, 2, 10, 10, 13, 17, 34, 14, 2, -7, 33, 26, 26, 18, 17]);
  Test({LINENUM}5224, '❨❨1, 5, 4, 2❩, ❨−5, 2, 3, 4❩❩⋅❨❨1, 2❩, ❨−2, 1❩, ❨0, 3❩, ❨2, −3❩❩', 2, [-5, 13, -1, -11]);
  Test({LINENUM}5225, '❨❨4, 5, 1, 2, 3❩❩ ⋅ ❨❨2❩, ❨7❩, ❨−3❩, ❨4❩, ❨6❩❩', 1, [66]);
  Test({LINENUM}5226, '❨❨2❩, ❨7❩, ❨−3❩, ❨4❩, ❨6❩❩ ⋅ ❨❨4, 5, 1❩❩', 3, [8, 10, 2, 28, 35, 7, -12, -15, -3, 16, 20, 4, 24, 30, 6]);
  Test({LINENUM}5227, '❨❨7❩❩ ⋅ ❨❨9❩❩', 1, [63]);

  Test({LINENUM}5229, '❨❨3, i❩, ❨1, 2❩❩ ⋅ ❨❨4, 2❩, ❨1, 2❩❩', 2, [12 + ImaginaryUnit, 6 + 2*ImaginaryUnit, 6, 6]);
  Test({LINENUM}5230, '❨❨3, 2❩, ❨2, 1❩❩ ⋅ ❨❨i, i❩, ❨1, 2❩❩', 2, [2 + 3*ImaginaryUnit, 4 + 3*ImaginaryUnit, 1 + 2*ImaginaryUnit, 2 + 2*ImaginaryUnit]);

  Test({LINENUM}5232, '❨❨3, 2 + i, 2❩, ❨−2 − i, 1 + 2⋅i, 6❩, ❨0, i, 2❩❩ ⋅ ❨❨2, 3, 1❩, ❨0, 3, i❩, ❨1 + 2⋅i, 4, 6❩❩', 3, [8 + 4*ImaginaryUnit, 23 + 3*ImaginaryUnit, 14 + 2*ImaginaryUnit, 2 + 10*ImaginaryUnit, 21 + 3*ImaginaryUnit, 32, 2 + 4*ImaginaryUnit, 8 + 3*ImaginaryUnit, 11]);

  Test({LINENUM}5234, '❨❨3, 2❩, ❨3, −2❩❩ ⋅ ❨❨3, 2❩, ❨1, 2❩, ❨3, 2❩❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');
  Test({LINENUM}5235, '❨❨3, 2❩, ❨3, −2❩❩ ⋅ ❨❨3, 2❩❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');

  Test({LINENUM}5237, '❨❨3, i❩, ❨3, −2❩❩ ⋅ ❨❨3, 2❩, ❨1, 2❩, ❨3, 2❩❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');
  Test({LINENUM}5238, '❨❨3, i❩, ❨3, −2❩❩ ⋅ ❨❨3, 2❩❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');

  Test({LINENUM}5240, '❨❨3, 2❩, ❨3, −2❩❩ ⋅ ❨❨i, 2❩, ❨1, 2❩, ❨3, 2❩❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');
  Test({LINENUM}5241, '❨❨3, 2❩, ❨3, −2❩❩ ⋅ ❨❨i, 2❩❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');

  Test({LINENUM}5243, '❨❨3, i❩, ❨3, −2❩❩ ⋅ ❨❨3, i❩, ❨1, 2❩, ❨3, 2❩❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');
  Test({LINENUM}5244, '❨❨3, 2❩, ❨3, −i❩❩ ⋅ ❨❨3, i❩❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');

  Test({LINENUM}5246, '❨❨4, 5, 1, 2, 3❩❩ ⋅ ❨❨2❩, ❨7❩, ❨−3❩, ❨4❩, ❨6❩, ❨6❩❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');
  Test({LINENUM}5247, '❨❨4, 5, 1, 2, 3❩❩ ⋅ ❨❨2❩, ❨7❩, ❨−3❩, ❨4❩❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');

  Test({LINENUM}5249, '❨❨2, 0❩, ❨0, 3❩❩ ⋅ ❨❨1, 2❩, ❨3, 4❩❩ ⋅ IdentityMatrix(2)', 2, [2, 4, 9, 12]);

  // - matrix times vector (linear transformation)

  Test({LINENUM}5253, 'IdentityMatrix(2) ⋅ ❨3, 2❩', [3, 2]);
  Test({LINENUM}5254, 'IdentityMatrix(2) ⋅ ❨1.2, −2.3❩', [1.2, -2.3]);
  Test({LINENUM}5255, '❨❨2, 0❩, ❨0, 3❩❩ ⋅ ❨5, 7❩', [10, 21]);
  Test({LINENUM}5256, '❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 0❩❩ ⋅ ❨4, 5, 2❩', [4, 5, 0]);
  Test({LINENUM}5257, '❨❨cos(π/2), −sin(π/2)❩, ❨sin(π/2), cos(π/2)❩❩ ⋅ ❨1, 1❩', [-1, 1]);
  Test({LINENUM}5258, '❨❨1, 1❩, ❨0, 1❩❩ ⋅ ❨2, 3❩', [5, 3]);
  Test({LINENUM}5259, '❨❨1, 1❩, ❨0, 1❩, ❨0, -1❩❩ ⋅ ❨2, 3❩', [5, 3, -3]);

  Test({LINENUM}5261, '❨❨1, 1❩, ❨0, 1❩❩ ⋅ ❨2, 3, 4❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');
  Test({LINENUM}5262, '❨❨1, 1❩, ❨0, 1❩, ❨0, 1❩❩ ⋅ ❨2, 3, 4❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');
  Test({LINENUM}5263, '❨❨1, 1❩, ❨0, 1❩❩ ⋅ ❨2❩', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');

  // - vector times number or number times vector

  Test({LINENUM}5267, '❨1, 2, −3❩ ⋅ 2', [2, 4, -6]);
  Test({LINENUM}5268, '❨1, 2, −3❩ ⋅ (1/2)', [0.5, 1, -1.5]);
  Test({LINENUM}5269, '❨1, 2, −3❩ ⋅ 0.5', [0.5, 1, -1.5]);
  Test({LINENUM}5270, '❨1, 2, −3❩ ⋅ i', [ImaginaryUnit, 2*ImaginaryUnit, -3*ImaginaryUnit]);
  Test({LINENUM}5271, '❨i, 2, −3❩ ⋅ 2', [2*ImaginaryUnit, 4, -6]);
  Test({LINENUM}5272, '❨i, 2, −3❩ ⋅ (1/2)', [0.5*ImaginaryUnit, 1, -1.5]);
  Test({LINENUM}5273, '❨i, 2, −3❩ ⋅ 0.5', [0.5*ImaginaryUnit, 1, -1.5]);
  Test({LINENUM}5274, '❨i, 2, −3❩ ⋅ i', [-1, 2*ImaginaryUnit, -3*ImaginaryUnit]);

  Test({LINENUM}5276, '2 ⋅ ❨1, 2, −3❩', [2, 4, -6]);
  Test({LINENUM}5277, '(1/2) ⋅ ❨1, 2, −3❩', [0.5, 1, -1.5]);
  Test({LINENUM}5278, '0.5 ⋅ ❨1, 2, −3❩', [0.5, 1, -1.5]);
  Test({LINENUM}5279, 'i ⋅ ❨1, 2, −3❩', [ImaginaryUnit, 2*ImaginaryUnit, -3*ImaginaryUnit]);
  Test({LINENUM}5280, '2 ⋅ ❨i, 2, −3❩', [2*ImaginaryUnit, 4, -6]);
  Test({LINENUM}5281, '(1/2) ⋅ ❨i, 2, −3❩', [0.5*ImaginaryUnit, 1, -1.5]);
  Test({LINENUM}5282, '0.5 ⋅ ❨i, 2, −3❩', [0.5*ImaginaryUnit, 1, -1.5]);
  Test({LINENUM}5283, 'i ⋅ ❨i, 2, −3❩', [-1, 2*ImaginaryUnit, -3*ImaginaryUnit]);

  Test({LINENUM}5285, '❨1.1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ ⋅ 10', [11, 20, 30, 40, 50, 60, 70, 80, 90, 100]);
  Test({LINENUM}5286, '❨1.1, 2, 3, 4, 5, 6, 7, 8 + 7⋅i, 9, 10❩ ⋅ 10', [11, 20, 30, 40, 50, 60, 70, 80 + 70*ImaginaryUnit, 90, 100]);
  Test({LINENUM}5287, '10⋅❨1.1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩', [11, 20, 30, 40, 50, 60, 70, 80, 90, 100]);
  Test({LINENUM}5288, '10⋅❨1.1, 2, 3, 4, 5, 6, 7, 8 + 7⋅i, 9, 10❩', [11, 20, 30, 40, 50, 60, 70, 80 + 70*ImaginaryUnit, 90, 100]);

  Test({LINENUM}5290, '❨1, 2, −3❩ ⋅ 2 ⋅ 10', [20, 40, -60]);

  // - matrix times number or number times matrix

  Test({LINENUM}5294, '❨❨1, 2❩, ❨3, 4❩❩ ⋅ 10', 2, [10, 20, 30, 40]);
  Test({LINENUM}5295, '❨❨1, 2❩, ❨3, 4❩❩ ⋅ (1/2)', 2, [0.5, 1, 1.5, 2]);
  Test({LINENUM}5296, '❨❨1, 2❩, ❨3, 4❩❩ ⋅ 0.5', 2, [0.5, 1, 1.5, 2]);
  Test({LINENUM}5297, '❨❨1, 2❩, ❨3, 4❩❩ ⋅ i', 2, [ImaginaryUnit, 2*ImaginaryUnit, 3*ImaginaryUnit, 4*ImaginaryUnit]);
  Test({LINENUM}5298, '❨❨i, 2❩, ❨3, 4❩❩ ⋅ 10', 2, [10*ImaginaryUnit, 20, 30, 40]);
  Test({LINENUM}5299, '❨❨i, 2❩, ❨3, 4❩❩ ⋅ (1/2)', 2, [0.5*ImaginaryUnit, 1, 1.5, 2]);
  Test({LINENUM}5300, '❨❨i, 2❩, ❨3, 4❩❩ ⋅ 0.5', 2, [0.5*ImaginaryUnit, 1, 1.5, 2]);
  Test({LINENUM}5301, '❨❨i, 2❩, ❨3, 4❩❩ ⋅ i', 2, [-1, 2*ImaginaryUnit, 3*ImaginaryUnit, 4*ImaginaryUnit]);

  Test({LINENUM}5303, '10 ⋅ ❨❨1, 2❩, ❨3, 4❩❩', 2, [10, 20, 30, 40]);
  Test({LINENUM}5304, '(1/2) ⋅ ❨❨1, 2❩, ❨3, 4❩❩', 2, [0.5, 1, 1.5, 2]);
  Test({LINENUM}5305, '0.5 ⋅ ❨❨1, 2❩, ❨3, 4❩❩', 2, [0.5, 1, 1.5, 2]);
  Test({LINENUM}5306, 'i ⋅ ❨❨1, 2❩, ❨3, 4❩❩', 2, [ImaginaryUnit, 2*ImaginaryUnit, 3*ImaginaryUnit, 4*ImaginaryUnit]);
  Test({LINENUM}5307, '10 ⋅ ❨❨i, 2❩, ❨3, 4❩❩', 2, [10*ImaginaryUnit, 20, 30, 40]);
  Test({LINENUM}5308, '(1/2) ⋅ ❨❨i, 2❩, ❨3, 4❩❩', 2, [0.5*ImaginaryUnit, 1, 1.5, 2]);
  Test({LINENUM}5309, '0.5 ⋅ ❨❨i, 2❩, ❨3, 4❩❩', 2, [0.5*ImaginaryUnit, 1, 1.5, 2]);
  Test({LINENUM}5310, 'i ⋅ ❨❨i, 2❩, ❨3, 4❩❩', 2, [-1, 2*ImaginaryUnit, 3*ImaginaryUnit, 4*ImaginaryUnit]);

  Test({LINENUM}5312, '10 ⋅ ❨❨1, 3, 4❩, ❨2, 1, 3❩, ❨4, 6, 7❩, ❨1, 2, 3❩, ❨5, 6, 7❩❩', 3, [10, 30, 40, 20, 10, 30, 40, 60, 70, 10, 20, 30, 50, 60, 70]);
  Test({LINENUM}5313, '10 ⋅ ❨❨i, 3, 4❩, ❨2, 1, 3❩, ❨4, 6, 7❩, ❨1, 2, 3❩, ❨5, 6, 7❩❩', 3, [10*ImaginaryUnit, 30, 40, 20, 10, 30, 40, 60, 70, 10, 20, 30, 50, 60, 70]);

  Test({LINENUM}5315, '❨❨1, 2❩, ❨3, 4❩❩ ⋅ 10 ⋅ 10', 2, [100, 200, 300, 400]);
  Test({LINENUM}5316, '10 ⋅ ❨❨1, 2❩, ❨3, 4❩❩ ⋅ 10', 2, [100, 200, 300, 400]);
  Test({LINENUM}5317, '10 ⋅ 10 ⋅ ❨❨1, 2❩, ❨3, 4❩❩', 2, [100, 200, 300, 400]);

  // - string times non-negative 32-bit signed integer

  Test({LINENUM}5321, '0 ⋅ "test"', '', True, '');
  Test({LINENUM}5322, '1 ⋅ "test"', 'test', True, 'test');
  Test({LINENUM}5323, '2 ⋅ "test"', 'testtest', True, 'testtest');
  Test({LINENUM}5324, '3 ⋅ "test"', 'testtesttest', True, 'testtesttest');
  Test({LINENUM}5325, '4 ⋅ "test"', 'testtesttesttest', True, 'testtesttesttest');
  Test({LINENUM}5326, '5 ⋅ "test"', 'testtesttesttesttest', True, 'testtesttesttesttest');

  _s := DupeString('test', 1000);
  Test({LINENUM}5329, '1000 ⋅ "test"', _s);

  _s := DupeString('test', 10000);
  Test({LINENUM}5332, '10000 ⋅ "test"', _s);

  _s := DupeString('test', 100000);
  Test({LINENUM}5335, '100000 ⋅ "test"', _s);

  _s := DupeString('test', 1000000);
  Test({LINENUM}5338, '1000000 ⋅ "test"', _s);

  Test({LINENUM}5340, '"test" ⋅ 0', '', True, '');
  Test({LINENUM}5341, '"test" ⋅ 1', 'test', True, 'test');
  Test({LINENUM}5342, '"test" ⋅ 2', 'testtest', True, 'testtest');
  Test({LINENUM}5343, '"test" ⋅ 3', 'testtesttest', True, 'testtesttest');
  Test({LINENUM}5344, '"test" ⋅ 4', 'testtesttesttest', True, 'testtesttesttest');
  Test({LINENUM}5345, '"test" ⋅ 5', 'testtesttesttesttest', True, 'testtesttesttesttest');

  _s := DupeString('test', 1000);
  Test({LINENUM}5348, '"test" ⋅ 1000', _s);

  _s := DupeString('test', 10000);
  Test({LINENUM}5351, '"test" ⋅ 10000', _s);

  _s := DupeString('test', 100000);
  Test({LINENUM}5354, '"test" ⋅ 100000', _s);

  _s := DupeString('test', 1000000);
  Test({LINENUM}5357, '"test" ⋅ 1000000', _s);

  Test({LINENUM}5359, '"test" ⋅ -2', failure, 'Invalid function arguments.');
  Test({LINENUM}5360, '(-2) ⋅ "test"', failure, 'Invalid function arguments.');

  Test({LINENUM}5362, '2 ⋅ 2 ⋅ "test"', 'testtesttesttest', True, 'testtesttesttest');
  Test({LINENUM}5363, '2 ⋅ "test" ⋅ 2', 'testtesttesttest', True, 'testtesttesttest');
  Test({LINENUM}5364, '"test" ⋅ 2 ⋅ 2', 'testtesttesttest', True, 'testtesttesttest');

  Test({LINENUM}5366, '("test" ⋅ 2) ⋅ 2', 'testtesttesttest', True, 'testtesttesttest'); // same as without parentheses
  Test({LINENUM}5367, '"test" ⋅ (2 ⋅ 2)', 'testtesttesttest', True, 'testtesttesttest'); // same result, but faster (albeit unnoticeably; in theory, for huge strings)

  // - sound overloads: postponed

  // - invalid operands

  Test({LINENUM}5373, '"test" ⋅ "again"', failure, 'Invalid function arguments.');
  Test({LINENUM}5374, '"test" ⋅ ❨3, 2❩', failure, 'Invalid function arguments.');
  Test({LINENUM}5375, '❨3, 2❩ ⋅ "test"', failure, 'Invalid function arguments.');
  Test({LINENUM}5376, '"test" ⋅ ❨❨3, 2❩, ❨3, −2❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}5377, '❨❨3, 2❩, ❨3, −2❩❩ ⋅ "test"', failure, 'Invalid function arguments.');
  Test({LINENUM}5378, 'date() ⋅ time()', failure, 'Invalid function arguments.');
  Test({LINENUM}5379, '5 ⋅ time()', failure, 'Invalid function arguments.');
  Test({LINENUM}5380, 'date() ⋅ 5', failure, 'Invalid function arguments.');
  Test({LINENUM}5381, 'true ⋅ 7', failure, 'Invalid function arguments.');
  Test({LINENUM}5382, '5 ⋅ false', failure, 'Invalid function arguments.');
  Test({LINENUM}5383, '5 ⋅ color("red")', failure, 'Invalid function arguments.');
  Test({LINENUM}5384, '5 ⋅ (.;)', failure, 'Invalid function arguments.');
  Test({LINENUM}5385, '(.;) ⋅ 10', failure, 'Invalid function arguments.');
  Test({LINENUM}5386, '(.;) ⋅ (.;)', failure, 'Invalid function arguments.');

  // Division

  // - two numbers

  Test({LINENUM}5392, '8642 / 1', 8642, True, '8642');
  Test({LINENUM}5393, '(-8642) / 1', -8642, True, '−8642');
  Test({LINENUM}5394, '8642 / (-1)', -8642, True, '−8642');
  Test({LINENUM}5395, '(-8642) / (-1)', 8642, True, '8642');

  Test({LINENUM}5397, '8642 / 2', 4321, True, '4321');
  Test({LINENUM}5398, '(-8642) / 2', -4321, True, '−4321');
  Test({LINENUM}5399, '8642 / (-2)', -4321, True, '−4321');
  Test({LINENUM}5400, '(-8642) / (-2)', 4321, True, '4321');

  Test({LINENUM}5402, '8642 / 29', 298, True, '298');
  Test({LINENUM}5403, '(-8642) / 29', -298, True, '−298');
  Test({LINENUM}5404, '8642 / (-29)', -298, True, '−298');
  Test({LINENUM}5405, '(-8642) / (-29)', 298, True, '298');

  Test({LINENUM}5407, '8642 / 149', 58, True, '58');
  Test({LINENUM}5408, '(-8642) / 149', -58, True, '−58');
  Test({LINENUM}5409, '8642 / (-149)', -58, True, '−58');
  Test({LINENUM}5410, '(-8642) / (-149)', 58, True, '58');

  Test({LINENUM}5412, '8642 / 4321', 2, True, '2');
  Test({LINENUM}5413, '(-8642) / 4321', -2, True, '−2');
  Test({LINENUM}5414, '8642 / (-4321)', -2, True, '−2');
  Test({LINENUM}5415, '(-8642) / (-4321)', 2, True, '2');

  Test({LINENUM}5417, '8642 / 8642', 1, True, '1');
  Test({LINENUM}5418, '(-8642) / 8642', -1, True, '−1');
  Test({LINENUM}5419, '8642 / (-8642)', -1, True, '−1');
  Test({LINENUM}5420, '(-8642) / (-8642)', 1, True, '1');

  Test({LINENUM}5422, '8642 / 3', Rat(8642, 3), True, '8642/3');
  Test({LINENUM}5423, '(-8642) / 3', Rat(-8642, 3), True, '−8642/3');
  Test({LINENUM}5424, '8642 / (-3)', Rat(-8642, 3), True, '−8642/3');
  Test({LINENUM}5425, '(-8642) / (-3)', Rat(8642, 3), True, '8642/3');

  Test({LINENUM}5427, '8642 / 123', Rat(8642, 123), True, '8642/123');
  Test({LINENUM}5428, '(-8642) / 123', Rat(-8642, 123), True, '−8642/123');
  Test({LINENUM}5429, '8642 / (-123)', Rat(-8642, 123), True, '−8642/123');
  Test({LINENUM}5430, '(-8642) / (-123)', Rat(8642, 123), True, '8642/123');

  Test({LINENUM}5432, '8642 / 124', Rat(4321, 62), True, '4321/62');
  Test({LINENUM}5433, '(-8642) / 124', Rat(-4321, 62), True, '−4321/62');
  Test({LINENUM}5434, '8642 / (-124)', Rat(-4321, 62), True, '−4321/62');
  Test({LINENUM}5435, '(-8642) / (-124)', Rat(4321, 62), True, '4321/62');

  Test({LINENUM}5437, '8642 / (1/2)', Rat(17284, 1), True, '17284');
  Test({LINENUM}5438, '8642 / (-1/2)', Rat(-17284, 1), True, '−17284');
  Test({LINENUM}5439, '(-8642) / (1/2)', Rat(-17284, 1), True, '−17284');
  Test({LINENUM}5440, '(-8642) / (-1/2)', Rat(17284, 1), True, '17284');

  Test({LINENUM}5442, '8642 / 0.5', 17284.0, True, '17284');
  Test({LINENUM}5443, '8642 / (-0.5)', -17284.0, True, '−17284');
  Test({LINENUM}5444, '(-8642) / 0.5', -17284.0, True, '−17284');
  Test({LINENUM}5445, '(-8642) / (-0.5)', 17284.0, True, '17284');

  Test({LINENUM}5447, '8642 / i', -8642*ImaginaryUnit, True, '−8642⋅i');
  Test({LINENUM}5448, '8642 / (-i)', 8642*ImaginaryUnit, True, '8642⋅i');
  Test({LINENUM}5449, '(-8642) / i', 8642*ImaginaryUnit, True, '8642⋅i');
  Test({LINENUM}5450, '(-8642) / (-i)', -8642*ImaginaryUnit, True, '−8642⋅i');

  Test({LINENUM}5452, '8642 / (2 + 6⋅i)', 432.1 - 1296.3*ImaginaryUnit, True, '432.1 − 1296.3⋅i');

  Test({LINENUM}5454, '4148888755878 / 8526387', 486594, True, '486594');

  Test({LINENUM}5456, '18364155781664328 / 738526387', 24865944, True, '24865944');
  Test({LINENUM}5457, '18364155781664328 / (-738526387)', -24865944, True, '−24865944');
  Test({LINENUM}5458, '(-18364155781664328) / 738526387', -24865944, True, '−24865944');
  Test({LINENUM}5459, '(-18364155781664328) / (-738526387)', 24865944, True, '24865944');

  Test({LINENUM}5461, '2189862929181664328 / 9738526387', 224865944, True, '224865944');
  Test({LINENUM}5462, '2189862929181664328 / (-9738526387)', -224865944, True, '−224865944');
  Test({LINENUM}5463, '(-2189862929181664328) / 9738526387', -224865944, True, '−224865944');
  Test({LINENUM}5464, '(-2189862929181664328) / (-9738526387)', 224865944, True, '224865944');

  Test({LINENUM}5466, '2189862929181664328 / 2', 1094931464590832164, True, '1094931464590832164');
  Test({LINENUM}5467, '2189862929181664328 / (-2)', -1094931464590832164, True, '−1094931464590832164');
  Test({LINENUM}5468, '(-2189862929181664328) / 2', -1094931464590832164, True, '−1094931464590832164');
  Test({LINENUM}5469, '(-2189862929181664328) / (-2)', 1094931464590832164, True, '1094931464590832164');

  Test({LINENUM}5471, '2189862929181664328 / 1094931464590832164', 2, True, '2');
  Test({LINENUM}5472, '2189862929181664328 / (-1094931464590832164)', -2, True, '−2');
  Test({LINENUM}5473, '(-2189862929181664328) / 1094931464590832164', -2, True, '−2');
  Test({LINENUM}5474, '(-2189862929181664328) / (-1094931464590832164)', 2, True, '2');

  Test({LINENUM}5476, '1094931464590832164 / 2189862929181664328', Rat(1, 2), True, '1/2');
  Test({LINENUM}5477, '1094931464590832164 / (-2189862929181664328)', Rat(-1, 2), True, '−1/2');
  Test({LINENUM}5478, '(-1094931464590832164) / 2189862929181664328', Rat(-1, 2), True, '−1/2');
  Test({LINENUM}5479, '(-1094931464590832164) / (-2189862929181664328)', Rat(1, 2), True, '1/2');

  Test({LINENUM}5481, '2189862929181664328 / 1', 2189862929181664328, True, '2189862929181664328');
  Test({LINENUM}5482, '2189862929181664328 / (-1)', -2189862929181664328, True, '−2189862929181664328');
  Test({LINENUM}5483, '(-2189862929181664328) / 1', -2189862929181664328, True, '−2189862929181664328');
  Test({LINENUM}5484, '(-2189862929181664328) / (-1)', 2189862929181664328, True, '2189862929181664328');

  Test({LINENUM}5486, '2189862929181664328 / i', -2189862929181664328 * ImaginaryUnit);
  Test({LINENUM}5487, '2189862929181664328 / (-i)', 2189862929181664328 * ImaginaryUnit);
  Test({LINENUM}5488, '(-2189862929181664328) / i', 2189862929181664328 * ImaginaryUnit);
  Test({LINENUM}5489, '(-2189862929181664328) / (-i)', -2189862929181664328 * ImaginaryUnit);

  Test({LINENUM}5491, '5/0', failure, 'Division by zero');
  Test({LINENUM}5492, '5/0.0', failure, 'Division by zero');
  Test({LINENUM}5493, '5/(1/3-1/3)', failure, 'Division by zero');
  Test({LINENUM}5494, '5/(i-i)', failure); // TODO: specify error message
  Test({LINENUM}5495, '2189862929181664328/0', failure, 'Division by zero');

  Test({LINENUM}5497, '(8/9) / 3', Rat(8, 27), True, '8/27');
  Test({LINENUM}5498, '(8/9) / -3', Rat(-8, 27), True, '−8/27');
  Test({LINENUM}5499, '(-8/9) / 3', Rat(-8, 27), True, '−8/27');
  Test({LINENUM}5500, '(-8/9) / -3', Rat(8, 27), True, '8/27');

  Test({LINENUM}5502, '(8/9) / (4/5)', Rat(10, 9), True, '10/9');
  Test({LINENUM}5503, '(8/9) / (-4/5)', Rat(-10, 9), True, '−10/9');
  Test({LINENUM}5504, '(-8/9) / (4/5)', Rat(-10, 9), True, '−10/9');
  Test({LINENUM}5505, '(-8/9) / (-4/5)', Rat(10, 9), True, '10/9');

  Test({LINENUM}5507, '(1/2) / 0.5', 1.0, True, '1');
  Test({LINENUM}5508, '(1/2) / -0.5', -1.0, True, '−1');
  Test({LINENUM}5509, '(-1/2) / 0.5', -1.0, True, '−1');
  Test({LINENUM}5510, '(-1/2) / -0.5', 1.0, True, '1');

  Test({LINENUM}5512, '(59/60) / i', -(59/60)*ImaginaryUnit);
  Test({LINENUM}5513, '(59/60) / -i', (59/60)*ImaginaryUnit);
  Test({LINENUM}5514, '(-59/60) / i', (59/60)*ImaginaryUnit);
  Test({LINENUM}5515, '(-59/60) / -i', -(59/60)*ImaginaryUnit);

  Test({LINENUM}5517, '(587312/895731) / (1452879/635217921)', Rat(41452345290928, 144598751061), True, '41452345290928/144598751061');
  Test({LINENUM}5518, '(587312/895731) / (-1452879/635217921)', Rat(-41452345290928, 144598751061), True, '−41452345290928/144598751061');
  Test({LINENUM}5519, '(-587312/895731) / (1452879/635217921)', Rat(-41452345290928, 144598751061), True, '−41452345290928/144598751061');
  Test({LINENUM}5520, '(-587312/895731) / (-1452879/635217921)', Rat(41452345290928, 144598751061), True, '41452345290928/144598751061');

  Test({LINENUM}5522, '(2/3)/0', failure, 'Division by zero');
  Test({LINENUM}5523, '(2/3)/0.0', failure, 'Division by zero');
  Test({LINENUM}5524, '(2/3)/(1/3-1/3)', failure, 'Division by zero');
  Test({LINENUM}5525, '(2/3)/(i-i)', failure); // TODO: specify error message

  Test({LINENUM}5527, '123456.789 / 2', 61728.3945, True, '61728.3945');
  Test({LINENUM}5528, '123456.789 / -2', -61728.3945, True, '−61728.3945');
  Test({LINENUM}5529, '(-123456.789) / 2', -61728.3945, True, '−61728.3945');
  Test({LINENUM}5530, '(-123456.789) / -2', 61728.3945, True, '61728.3945');

  Test({LINENUM}5532, '123456.789 / (1/2)', 246913.578, True, '246913.578');
  Test({LINENUM}5533, '123456.789 / (-1/2)', -246913.578, True, '−246913.578');
  Test({LINENUM}5534, '(-123456.789) / (1/2)', -246913.578, True, '−246913.578');
  Test({LINENUM}5535, '(-123456.789) / (-1/2)', 246913.578, True, '246913.578');

  Test({LINENUM}5537, '123456.789 / 0.5', 246913.578, True, '246913.578');
  Test({LINENUM}5538, '123456.789 / -0.5', -246913.578, True, '−246913.578');
  Test({LINENUM}5539, '(-123456.789) / 0.5', -246913.578, True, '−246913.578');
  Test({LINENUM}5540, '(-123456.789) / -0.5', 246913.578, True, '246913.578');

  Test({LINENUM}5542, '123456.789 / i', -123456.789*ImaginaryUnit, True, '−123456.789⋅i');
  Test({LINENUM}5543, '123456.789 / -i', 123456.789*ImaginaryUnit, True, '123456.789⋅i');
  Test({LINENUM}5544, '(-123456.789) / i', 123456.789*ImaginaryUnit, True, '123456.789⋅i');
  Test({LINENUM}5545, '(-123456.789) / -i', -123456.789*ImaginaryUnit, True, '−123456.789⋅i');

  Test({LINENUM}5547, '12.3 / (1 + 2⋅i)', 2.46 - 4.92*ImaginaryUnit, True, '2.46 − 4.92⋅i');
  Eps; Test({LINENUM}5548, '5268.5212 / (545.62 − 5.189⋅i)', 9.655153273823309642705 + 0.09182322923989068167588*ImaginaryUnit);

  Test({LINENUM}5550, '4.82E20 / 2', 2.41E20, True, '2.41⋅10^20');
  Test({LINENUM}5551, '4.82E20 / -2', -2.41E20, True, '−2.41⋅10^20');
  Test({LINENUM}5552, '(-4.82E20) / 2', -2.41E20, True, '−2.41⋅10^20');
  Test({LINENUM}5553, '(-4.82E20) / -2', 2.41E20, True, '2.41⋅10^20');

  Test({LINENUM}5555, '5.0/0', failure, 'Division by zero');
  Test({LINENUM}5556, '5.0/0.0', failure, 'Division by zero');
  Test({LINENUM}5557, '5.0/(1/3-1/3)', failure, 'Division by zero');
  Test({LINENUM}5558, '5.0/(i-i)', failure); // TODO: specify error message

  Test({LINENUM}5560, 'i/2', ImaginaryUnit/2, True, '0.5⋅i');
  Test({LINENUM}5561, 'i/(1/2)', 2*ImaginaryUnit, True, '2⋅i');
  Test({LINENUM}5562, 'i/i', TASC(1), True, '1');

  Test({LINENUM}5564, '(7 - 3⋅i) / 2', 3.5 - 1.5*ImaginaryUnit, True, '3.5 − 1.5⋅i');
  Test({LINENUM}5565, '(7 - 3⋅i) / (1/2)', 14 - 6*ImaginaryUnit, True, '14 − 6⋅i');
  Test({LINENUM}5566, '(7 - 3⋅i) / 0.5', 14 - 6*ImaginaryUnit, True, '14 − 6⋅i');
  Test({LINENUM}5567, '(7 - 3⋅i) / i', -3 - 7*ImaginaryUnit, True, '−3 − 7⋅i');

  Eps; Test({LINENUM}5569, '(7 - 3⋅i) / (-2 + 20⋅i)', -0.18316831683168316831683168 - 0.3316831683168316831683*ImaginaryUnit);

  Test({LINENUM}5571, 'i/0', failure); // TODO: specify error message
  Test({LINENUM}5572, 'i/0.0', failure); // TODO: specify error message
  Test({LINENUM}5573, 'i/(1/3-1/3)', failure); // TODO: specify error message
  Test({LINENUM}5574, 'i/(i-i)', failure); // TODO: specify error message

  Test({LINENUM}5576, '8305843009213693952 / 0.1', 83058430092136939520.0);
  Test({LINENUM}5577, '5E20 / 2', 2.5E20);
  Test({LINENUM}5578, '5E200 / 2', 2.5E200);
  Test({LINENUM}5579, '5E20 / 2E20', 2.5);

  Test({LINENUM}5581, '(-8305843009213693952) / 0.1', -83058430092136939520.0);
  Test({LINENUM}5582, '(-5E20) / 2', -2.5E20);
  Test({LINENUM}5583, '(-5E200) / 2', -2.5E200);
  Test({LINENUM}5584, '(-5E20) / 2E20', -2.5);

  Test({LINENUM}5586, '8305843009213693952 / -0.1', -83058430092136939520.0);
  Test({LINENUM}5587, '5E20 / -2', -2.5E20);
  Test({LINENUM}5588, '5E200 / -2', -2.5E200);
  Test({LINENUM}5589, '5E20 / -2E20', -2.5);


  // - vector and number

  Test({LINENUM}5594, '❨5, 0, 1❩ / 1', [5, 0, 1]);
  Test({LINENUM}5595, '❨5, 0, 1❩ / 2', [2.5, 0, 0.5]);
  Test({LINENUM}5596, '❨5, 0, 1❩ / 3', [5/3, 0, 1/3]);
  Test({LINENUM}5597, '❨5, 0, 1❩ / 4', [1.25, 0, 0.25]);
  Test({LINENUM}5598, '❨5, 0, 1❩ / 5', [1, 0, 0.2]);
  Test({LINENUM}5599, '❨5, 0, 1❩ / 6', [5/6, 0, 1/6]);
  Test({LINENUM}5600, '❨5, 0, 1❩ / 7', [5/7, 0, 1/7]);
  Test({LINENUM}5601, '❨5, 0, 1❩ / 8', [5/8, 0, 1/8]);
  Test({LINENUM}5602, '❨5, 0, 1❩ / 9', [5/9, 0, 1/9]);
  Test({LINENUM}5603, '❨5, 0, 1❩ / 10', [0.5, 0, 0.1]);

  Test({LINENUM}5605, '❨5, 0, 1❩ / -1', [-5, 0, -1]);
  Test({LINENUM}5606, '❨5, 0, 1❩ / -2', [-2.5, 0, -0.5]);
  Test({LINENUM}5607, '❨5, 0, 1❩ / -3', [-5/3, 0, -1/3]);
  Test({LINENUM}5608, '❨5, 0, 1❩ / -4', [-1.25, 0, -0.25]);
  Test({LINENUM}5609, '❨5, 0, 1❩ / -5', [-1, 0, -0.2]);
  Test({LINENUM}5610, '❨5, 0, 1❩ / -6', [-5/6, 0, -1/6]);
  Test({LINENUM}5611, '❨5, 0, 1❩ / -7', [-5/7, 0, -1/7]);
  Test({LINENUM}5612, '❨5, 0, 1❩ / -8', [-5/8, 0, -1/8]);
  Test({LINENUM}5613, '❨5, 0, 1❩ / -9', [-5/9, 0, -1/9]);
  Test({LINENUM}5614, '❨5, 0, 1❩ / -10', [-0.5, 0, -0.1]);

  Test({LINENUM}5616, '❨5, 0, 1❩ / (1/2)', [10, 0, 2]);
  Test({LINENUM}5617, '❨5, 0, 1❩ / (-1/2)', [-10, 0, -2]);
  Test({LINENUM}5618, '❨5, 0, 1❩ / 0.5', [10, 0, 2]);
  Test({LINENUM}5619, '❨5, 0, 1❩ / -0.5', [-10, 0, -2]);

  Test({LINENUM}5621, '❨5, 0, 1❩ / i', [-5*ImaginaryUnit, 0, -ImaginaryUnit]);
  Test({LINENUM}5622, '❨5, 0, 1❩ / (2+i)', [2-ImaginaryUnit, 0, 0.4 - 0.2*ImaginaryUnit]);

  Test({LINENUM}5624, '❨5, 0, 1❩ / 0', failure, 'Division by zero');
  Test({LINENUM}5625, '❨5, 0, 1❩ / 0.0', failure, 'Division by zero');
  Test({LINENUM}5626, '❨5, 0, 1❩ / (1/3-1/3)', failure, 'Division by zero');
  Test({LINENUM}5627, '❨5, 0, 1❩ / (i-i)', failure); // TODO: specify error message

  Test({LINENUM}5629, '❨5, i, 1❩ / 1', [5, ImaginaryUnit, 1]);
  Test({LINENUM}5630, '❨5, i, 1❩ / 2', [2.5, 0.5*ImaginaryUnit, 0.5]);
  Test({LINENUM}5631, '❨5, i, 1❩ / 3', [5/3, ImaginaryUnit/3, 1/3]);
  Test({LINENUM}5632, '❨5, i, 1❩ / 4', [1.25, 0.25*ImaginaryUnit, 0.25]);
  Test({LINENUM}5633, '❨5, i, 1❩ / 5', [1, 0.2*ImaginaryUnit, 0.2]);
  Test({LINENUM}5634, '❨5, i, 1❩ / 6', [5/6, ImaginaryUnit/6, 1/6]);
  Test({LINENUM}5635, '❨5, i, 1❩ / 7', [5/7, ImaginaryUnit/7, 1/7]);
  Test({LINENUM}5636, '❨5, i, 1❩ / 8', [5/8, ImaginaryUnit/8, 1/8]);
  Test({LINENUM}5637, '❨5, i, 1❩ / 9', [5/9, ImaginaryUnit/9, 1/9]);
  Test({LINENUM}5638, '❨5, i, 1❩ / 10', [0.5, 0.1*ImaginaryUnit, 0.1]);

  Test({LINENUM}5640, '❨5, i, 1❩ / -1', [-5, -ImaginaryUnit, -1]);
  Test({LINENUM}5641, '❨5, i, 1❩ / -2', [-2.5, -0.5*ImaginaryUnit, -0.5]);
  Test({LINENUM}5642, '❨5, i, 1❩ / -3', [-5/3, -ImaginaryUnit/3, -1/3]);
  Test({LINENUM}5643, '❨5, i, 1❩ / -4', [-1.25, -0.25*ImaginaryUnit, -0.25]);
  Test({LINENUM}5644, '❨5, i, 1❩ / -5', [-1, -0.2*ImaginaryUnit, -0.2]);
  Test({LINENUM}5645, '❨5, i, 1❩ / -6', [-5/6, -ImaginaryUnit/6, -1/6]);
  Test({LINENUM}5646, '❨5, i, 1❩ / -7', [-5/7, -ImaginaryUnit/7, -1/7]);
  Test({LINENUM}5647, '❨5, i, 1❩ / -8', [-5/8, -ImaginaryUnit/8, -1/8]);
  Test({LINENUM}5648, '❨5, i, 1❩ / -9', [-5/9, -ImaginaryUnit/9, -1/9]);
  Test({LINENUM}5649, '❨5, i, 1❩ / -10', [-0.5, -0.1*ImaginaryUnit, -0.1]);

  Test({LINENUM}5651, '❨5, i, 1❩ / (1/2)', [10, 2*ImaginaryUnit, 2]);
  Test({LINENUM}5652, '❨5, i, 1❩ / (-1/2)', [-10, -2*ImaginaryUnit, -2]);
  Test({LINENUM}5653, '❨5, i, 1❩ / 0.5', [10, 2*ImaginaryUnit, 2]);
  Test({LINENUM}5654, '❨5, i, 1❩ / -0.5', [-10, -2*ImaginaryUnit, -2]);

  Test({LINENUM}5656, '❨5, i, 1❩ / i', [-5*ImaginaryUnit, 1, -ImaginaryUnit]);
  Test({LINENUM}5657, '❨5, i, 1❩ / (2+i)', [2-ImaginaryUnit, 0.2 + 0.4*ImaginaryUnit, 0.4 - 0.2*ImaginaryUnit]);

  Test({LINENUM}5659, '❨5, i, 1❩ / 0', failure); // TODO: specify error message
  Test({LINENUM}5660, '❨5, i, 1❩ / 0.0', failure); // TODO: specify error message
  Test({LINENUM}5661, '❨5, i, 1❩ / (1/3-1/3)', failure); // TODO: specify error message
  Test({LINENUM}5662, '❨5, i, 1❩ / (i-i)', failure); // TODO: specify error message

  Test({LINENUM}5664, '❨10, 20, 30, 40, 50, 60, 70, 80, 90, 100❩ / 10', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  Test({LINENUM}5665, '❨i, 20, 30, 40, 50, 60, 70, 80, 90, 100❩ / 10', [ImaginaryUnit/10, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

  // - matrix and number

  Test({LINENUM}5669, '❨❨1, 2❩, ❨3, 4❩❩ / 1', 2, [1, 2, 3, 4]);
  Test({LINENUM}5670, '❨❨1, 2❩, ❨3, 4❩❩ / 2', 2, [1/2, 2/2, 3/2, 4/2]);
  Test({LINENUM}5671, '❨❨1, 2❩, ❨3, 4❩❩ / 3', 2, [1/3, 2/3, 3/3, 4/3]);
  Test({LINENUM}5672, '❨❨1, 2❩, ❨3, 4❩❩ / 4', 2, [1/4, 2/4, 3/4, 4/4]);
  Test({LINENUM}5673, '❨❨1, 2❩, ❨3, 4❩❩ / 5', 2, [1/5, 2/5, 3/5, 4/5]);
  Test({LINENUM}5674, '❨❨1, 2❩, ❨3, 4❩❩ / 6', 2, [1/6, 2/6, 3/6, 4/6]);
  Test({LINENUM}5675, '❨❨1, 2❩, ❨3, 4❩❩ / 7', 2, [1/7, 2/7, 3/7, 4/7]);
  Test({LINENUM}5676, '❨❨1, 2❩, ❨3, 4❩❩ / 8', 2, [1/8, 2/8, 3/8, 4/8]);
  Test({LINENUM}5677, '❨❨1, 2❩, ❨3, 4❩❩ / 9', 2, [1/9, 2/9, 3/9, 4/9]);
  Test({LINENUM}5678, '❨❨1, 2❩, ❨3, 4❩❩ / 10', 2, [1/10, 2/10, 3/10, 4/10]);

  Test({LINENUM}5680, '❨❨1, 2❩, ❨3, 4❩❩ / -1', 2, [-1, -2, -3, -4]);
  Test({LINENUM}5681, '❨❨1, 2❩, ❨3, 4❩❩ / -2', 2, [-1/2, -2/2, -3/2, -4/2]);
  Test({LINENUM}5682, '❨❨1, 2❩, ❨3, 4❩❩ / -3', 2, [-1/3, -2/3, -3/3, -4/3]);
  Test({LINENUM}5683, '❨❨1, 2❩, ❨3, 4❩❩ / -4', 2, [-1/4, -2/4, -3/4, -4/4]);
  Test({LINENUM}5684, '❨❨1, 2❩, ❨3, 4❩❩ / -5', 2, [-1/5, -2/5, -3/5, -4/5]);
  Test({LINENUM}5685, '❨❨1, 2❩, ❨3, 4❩❩ / -6', 2, [-1/6, -2/6, -3/6, -4/6]);
  Test({LINENUM}5686, '❨❨1, 2❩, ❨3, 4❩❩ / -7', 2, [-1/7, -2/7, -3/7, -4/7]);
  Test({LINENUM}5687, '❨❨1, 2❩, ❨3, 4❩❩ / -8', 2, [-1/8, -2/8, -3/8, -4/8]);
  Test({LINENUM}5688, '❨❨1, 2❩, ❨3, 4❩❩ / -9', 2, [-1/9, -2/9, -3/9, -4/9]);
  Test({LINENUM}5689, '❨❨1, 2❩, ❨3, 4❩❩ / -10', 2, [-1/10, -2/10, -3/10, -4/10]);

  Test({LINENUM}5691, '❨❨1, 2❩, ❨3, 4❩❩ / (1/2)', 2, [2, 4, 6, 8]);
  Test({LINENUM}5692, '❨❨1, 2❩, ❨3, 4❩❩ / (-1/2)', 2, [-2, -4, -6, -8]);
  Test({LINENUM}5693, '❨❨1, 2❩, ❨3, 4❩❩ / 0.5', 2, [2, 4, 6, 8]);
  Test({LINENUM}5694, '❨❨1, 2❩, ❨3, 4❩❩ / -0.5', 2, [-2, -4, -6, -8]);

  Test({LINENUM}5696, '❨❨1, 2❩, ❨3, 4❩❩ / i', 2, [-ImaginaryUnit, -2*ImaginaryUnit, -3*ImaginaryUnit, -4*ImaginaryUnit]);
  Test({LINENUM}5697, '❨❨1, 2❩, ❨3, 4❩❩ / (1+i)', 2, [0.5-0.5*ImaginaryUnit, 1-ImaginaryUnit, 1.5-1.5*ImaginaryUnit, 2-2*ImaginaryUnit]);

  Test({LINENUM}5699, '❨❨1, 2❩, ❨3, 4❩❩ / 0', failure, 'Division by zero');
  Test({LINENUM}5700, '❨❨1, 2❩, ❨3, 4❩❩ / 0.0', failure, 'Division by zero');
  Test({LINENUM}5701, '❨❨1, 2❩, ❨3, 4❩❩ / (1/3-1/3)', failure, 'Division by zero');
  Test({LINENUM}5702, '❨❨1, 2❩, ❨3, 4❩❩ / (i-i)', failure); // TODO: specify error message

  Test({LINENUM}5704, '❨❨i, 2❩, ❨3, 4❩❩ / 1', 2, [ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}5705, '❨❨i, 2❩, ❨3, 4❩❩ / 2', 2, [ImaginaryUnit/2, 2/2, 3/2, 4/2]);
  Test({LINENUM}5706, '❨❨i, 2❩, ❨3, 4❩❩ / 3', 2, [ImaginaryUnit/3, 2/3, 3/3, 4/3]);
  Test({LINENUM}5707, '❨❨i, 2❩, ❨3, 4❩❩ / 4', 2, [ImaginaryUnit/4, 2/4, 3/4, 4/4]);
  Test({LINENUM}5708, '❨❨i, 2❩, ❨3, 4❩❩ / 5', 2, [ImaginaryUnit/5, 2/5, 3/5, 4/5]);
  Test({LINENUM}5709, '❨❨i, 2❩, ❨3, 4❩❩ / 6', 2, [ImaginaryUnit/6, 2/6, 3/6, 4/6]);
  Test({LINENUM}5710, '❨❨i, 2❩, ❨3, 4❩❩ / 7', 2, [ImaginaryUnit/7, 2/7, 3/7, 4/7]);
  Test({LINENUM}5711, '❨❨i, 2❩, ❨3, 4❩❩ / 8', 2, [ImaginaryUnit/8, 2/8, 3/8, 4/8]);
  Test({LINENUM}5712, '❨❨i, 2❩, ❨3, 4❩❩ / 9', 2, [ImaginaryUnit/9, 2/9, 3/9, 4/9]);
  Test({LINENUM}5713, '❨❨i, 2❩, ❨3, 4❩❩ / 10', 2, [ImaginaryUnit/10, 2/10, 3/10, 4/10]);

  Test({LINENUM}5715, '❨❨i, 2❩, ❨3, 4❩❩ / -1', 2, [-ImaginaryUnit, -2, -3, -4]);
  Test({LINENUM}5716, '❨❨i, 2❩, ❨3, 4❩❩ / -2', 2, [-ImaginaryUnit/2, -2/2, -3/2, -4/2]);
  Test({LINENUM}5717, '❨❨i, 2❩, ❨3, 4❩❩ / -3', 2, [-ImaginaryUnit/3, -2/3, -3/3, -4/3]);
  Test({LINENUM}5718, '❨❨i, 2❩, ❨3, 4❩❩ / -4', 2, [-ImaginaryUnit/4, -2/4, -3/4, -4/4]);
  Test({LINENUM}5719, '❨❨i, 2❩, ❨3, 4❩❩ / -5', 2, [-ImaginaryUnit/5, -2/5, -3/5, -4/5]);
  Test({LINENUM}5720, '❨❨i, 2❩, ❨3, 4❩❩ / -6', 2, [-ImaginaryUnit/6, -2/6, -3/6, -4/6]);
  Test({LINENUM}5721, '❨❨i, 2❩, ❨3, 4❩❩ / -7', 2, [-ImaginaryUnit/7, -2/7, -3/7, -4/7]);
  Test({LINENUM}5722, '❨❨i, 2❩, ❨3, 4❩❩ / -8', 2, [-ImaginaryUnit/8, -2/8, -3/8, -4/8]);
  Test({LINENUM}5723, '❨❨i, 2❩, ❨3, 4❩❩ / -9', 2, [-ImaginaryUnit/9, -2/9, -3/9, -4/9]);
  Test({LINENUM}5724, '❨❨i, 2❩, ❨3, 4❩❩ / -10', 2, [-ImaginaryUnit/10, -2/10, -3/10, -4/10]);

  Test({LINENUM}5726, '❨❨i, 2❩, ❨3, 4❩❩ / (1/2)', 2, [2*ImaginaryUnit, 4, 6, 8]);
  Test({LINENUM}5727, '❨❨i, 2❩, ❨3, 4❩❩ / (-1/2)', 2, [-2*ImaginaryUnit, -4, -6, -8]);
  Test({LINENUM}5728, '❨❨i, 2❩, ❨3, 4❩❩ / 0.5', 2, [2*ImaginaryUnit, 4, 6, 8]);
  Test({LINENUM}5729, '❨❨i, 2❩, ❨3, 4❩❩ / -0.5', 2, [-2*ImaginaryUnit, -4, -6, -8]);

  Test({LINENUM}5731, '❨❨i, 2❩, ❨3, 4❩❩ / i', 2, [1, -2*ImaginaryUnit, -3*ImaginaryUnit, -4*ImaginaryUnit]);
  Test({LINENUM}5732, '❨❨i, 2❩, ❨3, 4❩❩ / (1+i)', 2, [0.5+0.5*ImaginaryUnit, 1-ImaginaryUnit, 1.5-1.5*ImaginaryUnit, 2-2*ImaginaryUnit]);

  Test({LINENUM}5734, '❨❨i, 2❩, ❨3, 4❩❩ / 0', failure); // TODO: specify error message
  Test({LINENUM}5735, '❨❨i, 2❩, ❨3, 4❩❩ / 0.0', failure); // TODO: specify error message
  Test({LINENUM}5736, '❨❨i, 2❩, ❨3, 4❩❩ / (1/3-1/3)', failure); // TODO: specify error message
  Test({LINENUM}5737, '❨❨i, 2❩, ❨3, 4❩❩ / (i-i)', failure); // TODO: specify error message

  Test({LINENUM}5739, '❨❨1, 4, 2, 3, 0, 2, 1❩, ❨4, 3, 2, 6, 0, −2, 3❩❩ / 2', 7, [0.5, 2, 1, 1.5, 0, 1, 0.5, 2, 1.5, 1, 3, 0, -1, 1.5]);
  Test({LINENUM}5740, '❨❨i, 4, 2, 3, 0, 2, 1❩, ❨4, 3, 2, 6, 0, −2, 3❩❩ / 2', 7, [0.5*ImaginaryUnit, 2, 1, 1.5, 0, 1, 0.5, 2, 1.5, 1, 3, 0, -1, 1.5]);
  Test({LINENUM}5741, '❨❨7❩❩ / 5', 1, [7/5]);
  Test({LINENUM}5742, '❨❨i❩❩ / 5', 1, [ImaginaryUnit/5]);

  // - invalid operands

  Test({LINENUM}5746, '"alfa" / 2', failure, 'Invalid function arguments.');
  Test({LINENUM}5747, 'true / 2', failure, 'Invalid function arguments.');
  Test({LINENUM}5748, 'now() / 2', failure, 'Invalid function arguments.');
  Test({LINENUM}5749, 'color("red") / 2', failure, 'Invalid function arguments.');
  Test({LINENUM}5750, '(.;) / 2', failure, 'Invalid function arguments.');
  Test({LINENUM}5751, '"alfa" / "beta"', failure, 'Invalid function arguments.');
  Test({LINENUM}5752, '25 / "beta"', failure, 'Invalid function arguments.');
  Test({LINENUM}5753, 'true / false', failure, 'Invalid function arguments.');
  Test({LINENUM}5754, 'false / "gamma"', failure, 'Invalid function arguments.');
  Test({LINENUM}5755, 'date() / "epsilon"', failure, 'Invalid function arguments.');
  Test({LINENUM}5756, 'date() / time()', failure, 'Invalid function arguments.');
  Test({LINENUM}5757, 'color("red") / false', failure, 'Invalid function arguments.');
  Test({LINENUM}5758, '(.;) / date()', failure, 'Invalid function arguments.');
  Test({LINENUM}5759, '9 / date()', failure, 'Invalid function arguments.');
  Test({LINENUM}5760, '"gamma" / date()', failure, 'Invalid function arguments.');
  Test({LINENUM}5761, '10 / (.;)', failure, 'Invalid function arguments.');
  Test({LINENUM}5762, '❨5, 0, 1❩ / ❨5, 2, 1❩', failure, 'Invalid function arguments.');
  Test({LINENUM}5763, '❨5, 0, 1❩ / "alfa"', failure, 'Invalid function arguments.');
  Test({LINENUM}5764, '❨5, 0, 1❩ / true', failure, 'Invalid function arguments.');
  Test({LINENUM}5765, '❨5, 0, 1❩ / date()', failure, 'Invalid function arguments.');
  Test({LINENUM}5766, '❨5, 0, 1❩ / color("red")', failure, 'Invalid function arguments.');
  Test({LINENUM}5767, 'color("red") / ❨5, 0, 1❩', failure, 'Invalid function arguments.');
  Test({LINENUM}5768, 'false / ❨5, 0, 1❩', failure, 'Invalid function arguments.');
  Test({LINENUM}5769, '"test" / ❨5, 0, 1❩', failure, 'Invalid function arguments.');
  Test({LINENUM}5770, '123 / ❨5, 0, 1❩', failure, 'Invalid function arguments.');

  // Exponentiation (power)

  // - two numbers

  Test({LINENUM}5776, '2^0', 1);
  Test({LINENUM}5777, '2^1', 2);
  Test({LINENUM}5778, '2^2', 4);
  Test({LINENUM}5779, '2^3', 8);
  Test({LINENUM}5780, '2^4', 16);
  Test({LINENUM}5781, '2^5', 32);
  Test({LINENUM}5782, '2^6', 64);
  Test({LINENUM}5783, '2^7', 128);
  Test({LINENUM}5784, '2^8', 256);
  Test({LINENUM}5785, '2^9', 512);
  Test({LINENUM}5786, '2^10', 1024);
  Test({LINENUM}5787, '2^11', 2048);
  Test({LINENUM}5788, '2^12', 4096);
  Test({LINENUM}5789, '2^13', 8192);
  Test({LINENUM}5790, '2^14', 16384);
  Test({LINENUM}5791, '2^15', 32768);
  Test({LINENUM}5792, '2^16', 65536);
  Test({LINENUM}5793, '2^17', 131072);
  Test({LINENUM}5794, '2^18', 262144);
  Test({LINENUM}5795, '2^19', 524288);
  Test({LINENUM}5796, '2^20', 1048576);

  Test({LINENUM}5798, '2^50', 1125899906842624);

  Eps; Test({LINENUM}5800, '2^100', 1.267650600228229401496703205376E30);
  Eps; Test({LINENUM}5801, '2^200', 1.606938044258990275541962092341E60);
  Eps; Test({LINENUM}5802, '2^300', 2.037035976334486086268445688409E90);
  Eps; Test({LINENUM}5803, '2^400', 2.582249878086908589655919172003E120);
  Eps; Test({LINENUM}5804, '2^500', 3.273390607896141870013189696827E150);
  Eps; Test({LINENUM}5805, '2^600', 4.149515568880992958512407863691E180);
  Eps; Test({LINENUM}5806, '2^700', 5.260135901548373507240989882880E210);
  Eps; Test({LINENUM}5807, '2^800', 6.668014432879854274079851790721E240);
  Eps; Test({LINENUM}5808, '2^900', 8.452712498170643941637436558664E270);
  Eps; Test({LINENUM}5809, '2^1000', 1.071508607186267320948425049060E301);

  Eps; Test({LINENUM}5811, '2^2000', 1.148130695274254524232833201177E602);

  Test({LINENUM}5813, '2^-1', Rat(1, 2), True, '1/2');
  Test({LINENUM}5814, '2^-2', Rat(1, 4), True, '1/4');
  Test({LINENUM}5815, '2^-3', Rat(1, 8), True, '1/8');
  Test({LINENUM}5816, '2^-4', Rat(1, 16), True, '1/16');
  Test({LINENUM}5817, '2^-5', Rat(1, 32), True, '1/32');
  Test({LINENUM}5818, '2^-6', Rat(1, 64), True, '1/64');
  Test({LINENUM}5819, '2^-7', Rat(1, 128), True, '1/128');
  Test({LINENUM}5820, '2^-8', Rat(1, 256), True, '1/256');
  Test({LINENUM}5821, '2^-9', Rat(1, 512), True, '1/512');
  Test({LINENUM}5822, '2^-10', Rat(1, 1024), True, '1/1024');

  Test({LINENUM}5824, '2^-50', Rat(1, 1125899906842624), True, '1/1125899906842624');

  Eps; Test({LINENUM}5826, '2^-100/1E-31', 7.888609052210118054117285652827);
  Eps; Test({LINENUM}5827, '2^-200/1E-61', 6.223015277861141707144064053780);
  Eps; Test({LINENUM}5828, '2^-300/1E-91', 4.909093465297726553095771954986);
  Eps; Test({LINENUM}5829, '2^-400/1E-121', 3.872591914849318272818030633286);
  Eps; Test({LINENUM}5830, '2^-500/1E-151', 3.054936363499604682051979393213);
  Eps; Test({LINENUM}5831, '2^-600/1E-181', 2.409919865102884117740750034712);
  Eps; Test({LINENUM}5832, '2^-700/1E-211', 1.901091566295159823515072405835);
  Eps; Test({LINENUM}5833, '2^-800/1E-241', 1.499696813895630954817644437628);
  Eps; Test({LINENUM}5834, '2^-900/1E-271', 1.183052186166774710972751597518);
  Eps; Test({LINENUM}5835, '2^-1000/1E-302', 9.332636185032188789900895447238);

  Eps; Test({LINENUM}5837, '2^-2000/1E-603', 8.709809816217216675576195494778);

  Test({LINENUM}5839, '10^0', 1);
  Test({LINENUM}5840, '10^1', 10);
  Test({LINENUM}5841, '10^2', 100);
  Test({LINENUM}5842, '10^3', 1000);
  Test({LINENUM}5843, '10^4', 10000);
  Test({LINENUM}5844, '10^5', 100000);
  Test({LINENUM}5845, '10^6', 1000000);
  Test({LINENUM}5846, '10^7', 10000000);
  Test({LINENUM}5847, '10^8', 100000000);
  Test({LINENUM}5848, '10^9', 1000000000);
  Test({LINENUM}5849, '10^10', 10000000000);
  Test({LINENUM}5850, '10^11', 100000000000);
  Test({LINENUM}5851, '10^12', 1000000000000);
  Test({LINENUM}5852, '10^13', 10000000000000);
  Test({LINENUM}5853, '10^14', 100000000000000);
  Test({LINENUM}5854, '10^15', 1000000000000000);
  Test({LINENUM}5855, '10^16', 10000000000000000);
  Test({LINENUM}5856, '10^17', 100000000000000000);
  Test({LINENUM}5857, '10^18', 1000000000000000000);

  Eps; Test({LINENUM}5859, '10^50', 1E50);
  Eps; Test({LINENUM}5860, '10^100', 1E100);
  Eps; Test({LINENUM}5861, '10^200', 1E200);
  Eps; Test({LINENUM}5862, '10^300', 1E300);
  Eps; Test({LINENUM}5863, '10^400', 1E400);
  Eps; Test({LINENUM}5864, '10^500', 1E500);
  Eps; Test({LINENUM}5865, '10^600', 1E600);

  Test({LINENUM}5867, '10^-1', Rat(1, 10), True, '1/10');
  Test({LINENUM}5868, '10^-2', Rat(1, 100), True, '1/100');
  Test({LINENUM}5869, '10^-3', Rat(1, 1000), True, '1/1000');
  Test({LINENUM}5870, '10^-4', Rat(1, 10000), True, '1/10000');
  Test({LINENUM}5871, '10^-5', Rat(1, 100000), True, '1/100000');
  Test({LINENUM}5872, '10^-6', Rat(1, 1000000), True, '1/1000000');
  Test({LINENUM}5873, '10^-7', Rat(1, 10000000), True, '1/10000000');
  Test({LINENUM}5874, '10^-8', Rat(1, 100000000), True, '1/100000000');
  Test({LINENUM}5875, '10^-9', Rat(1, 1000000000), True, '1/1000000000');
  Test({LINENUM}5876, '10^-10', Rat(1, 10000000000), True, '1/10000000000');
  Test({LINENUM}5877, '10^-11', Rat(1, 100000000000), True, '1/100000000000');
  Test({LINENUM}5878, '10^-12', Rat(1, 1000000000000), True, '1/1000000000000');
  Test({LINENUM}5879, '10^-13', Rat(1, 10000000000000), True, '1/10000000000000');
  Test({LINENUM}5880, '10^-14', Rat(1, 100000000000000), True, '1/100000000000000');
  Test({LINENUM}5881, '10^-15', Rat(1, 1000000000000000), True, '1/1000000000000000');
  Test({LINENUM}5882, '10^-16', Rat(1, 10000000000000000), True, '1/10000000000000000');
  Test({LINENUM}5883, '10^-17', Rat(1, 100000000000000000), True, '1/100000000000000000');
  Test({LINENUM}5884, '10^-18', Rat(1, 1000000000000000000), True, '1/1000000000000000000');

  Eps; Test({LINENUM}5886, '10^−50/1E-50', 1.0);
  Eps; Test({LINENUM}5887, '10^−100/1E-100', 1.0);
  Eps; Test({LINENUM}5888, '10^−200/1E-200', 1.0);
  Eps; Test({LINENUM}5889, '10^−300/1E-300', 1.0);
  Eps; Test({LINENUM}5890, '10^−400/1E-400', 1.0);
  Eps; Test({LINENUM}5891, '10^−500/1E-500', 1.0);
  Eps; Test({LINENUM}5892, '10^−600/1E-600', 1.0);

  Eps; Test({LINENUM}5894, '253^214', 1.85264211176629736851898E514);
  Test({LINENUM}5895, '7^12', 13841287201, True, '13841287201');
  Test({LINENUM}5896, '7^-12', Rat(1, 13841287201), True, '1/13841287201');

  Test({LINENUM}5898, '0^1', 0);
  Test({LINENUM}5899, '0^2', 0);
  Test({LINENUM}5900, '0^3', 0);
  Test({LINENUM}5901, '0^4', 0);
  Test({LINENUM}5902, '0^5', 0);
  Test({LINENUM}5903, '0^6', 0);
  Test({LINENUM}5904, '0^7', 0);
  Test({LINENUM}5905, '0^8', 0);
  Test({LINENUM}5906, '0^9', 0);
  Test({LINENUM}5907, '0^10', 0);
  Test({LINENUM}5908, '0^100', 0);
  Test({LINENUM}5909, '0^1000', 0);

  Test({LINENUM}5911, '0^0', failure, 'Zero raised to the power of zero.');

  Test({LINENUM}5913, '0^−1', failure, 'Division by zero');
  Test({LINENUM}5914, '0^−2', failure, 'Division by zero');
  Test({LINENUM}5915, '0^−10', failure, 'Division by zero');
  Test({LINENUM}5916, '0^−100', failure, 'Division by zero');
  Test({LINENUM}5917, '0^−1000', failure, 'Division by zero');

  Test({LINENUM}5919, '-2^10', -1024, True, '−1024');
  Test({LINENUM}5920, '−2^10', -1024, True, '−1024');
  Test({LINENUM}5921, '-(2^10)', -1024, True, '−1024');
  Test({LINENUM}5922, '−(2^10)', -1024, True, '−1024');

  Test({LINENUM}5924, '(-2)^10', 1024, True, '1024');
  Test({LINENUM}5925, '(−2)^10', 1024, True, '1024');
  Test({LINENUM}5926, '(-2)^11', -2048, True, '−2048');
  Test({LINENUM}5927, '(−2)^11', -2048, True, '−2048');

  Test({LINENUM}5929, '(-10)^6', 1000000, True, '1000000');
  Test({LINENUM}5930, '(-10)^7', -10000000, True, '−10000000');

  Test({LINENUM}5932, '(-2)^3', -8);

  Test({LINENUM}5934, '(-2)^3', -8, True, '−8');
  Test({LINENUM}5935, '(-2)^2', 4, True, '4');
  Test({LINENUM}5936, '(-2)^1', -2, True, '−2');
  Test({LINENUM}5937, '(-2)^0', 1, True, '1');
  Test({LINENUM}5938, '(-2)^(-1)', Rat(-1, 2), True, '−1/2');
  Test({LINENUM}5939, '(-2)^(-2)', Rat(1, 4), True, '1/4');
  Test({LINENUM}5940, '(-2)^(-3)', Rat(-1, 8), True, '−1/8');
  Test({LINENUM}5941, '(-2)^(-4)', Rat(1, 16), True, '1/16');
  Test({LINENUM}5942, '(-2)^(-5)', Rat(-1, 32), True, '−1/32');
  Test({LINENUM}5943, '(-2)^(-6)', Rat(1, 64), True, '1/64');

  Test({LINENUM}5945, '(-2)^50', 1125899906842624);
  Test({LINENUM}5946, '(-2)^51', -2251799813685248);

  Test({LINENUM}5948, '(-2)^100',  1.267650600228229401496703E30);
  Test({LINENUM}5949, '(-2)^101', -2.535301200456458802993406E30);
  Test({LINENUM}5950, '(-2)^102',  5.070602400912917605986812E30);
  Test({LINENUM}5951, '(-2)^103', -1.014120480182583521197362E31);

  Eps; Test({LINENUM}5953, '(-2)^1000',  1.071508607186267320948425E301);
  Eps; Test({LINENUM}5954, '(-2)^1001', -2.143017214372534641896850E301);
  Eps; Test({LINENUM}5955, '(-2)^1002',  4.286034428745069283793700E301);
  Eps; Test({LINENUM}5956, '(-2)^1003', -8.572068857490138567587400E301);

  Test({LINENUM}5958, '(-2)^-50', Rat(1, 1125899906842624), True, '1/1125899906842624');
  Test({LINENUM}5959, '(-2)^-51', Rat(-1, 2251799813685248), True, '−1/2251799813685248');

  Eps; Test({LINENUM}5961, '(-2)^-100 / 1E-31',  7.88860905221011805411728565282);
  Eps; Test({LINENUM}5962, '(-2)^-101 / 1E-31', -3.94430452610505902705864282641);
  Eps; Test({LINENUM}5963, '(-2)^-102 / 1E-31',  1.97215226305252951352932141320);
  Eps; Test({LINENUM}5964, '(-2)^-103 / 1E-32', -9.86076131526264756764660706603);

  Eps; Test({LINENUM}5966, '(-2)^-1000 / 1E-302',  9.3326361850321887899008954472);
  Eps; Test({LINENUM}5967, '(-2)^-1001 / 1E-302', -4.6663180925160943949504477236);
  Eps; Test({LINENUM}5968, '(-2)^-1002 / 1E-302',  2.3331590462580471974752238618);
  Eps; Test({LINENUM}5969, '(-2)^-1003 / 1E-302', -1.1665795231290235987376119309);

  Test({LINENUM}5971, '1^(1/2)', 1.0, True, '1');
  Test({LINENUM}5972, '4^(1/2)', 2.0, True, '2');
  Test({LINENUM}5973, '9^(1/2)', 3.0, True, '3');
  Test({LINENUM}5974, '16^(1/2)', 4.0, True, '4');
  Eps; Test({LINENUM}5975, '25^(1/2)', 5.0, True, '5');
  Test({LINENUM}5976, '36^(1/2)', 6.0, True, '6');
  Test({LINENUM}5977, '49^(1/2)', 7.0, True, '7');
  Test({LINENUM}5978, '64^(1/2)', 8.0, True, '8');
  Test({LINENUM}5979, '81^(1/2)', 9.0, True, '9');
  Eps; Test({LINENUM}5980, '100^(1/2)', 10.0, True, '10');

  Test({LINENUM}5982, '1^(1/3)', 1.0, True, '1');
  Test({LINENUM}5983, '8^(1/3)', 2.0, True, '2');
  Eps; Test({LINENUM}5984, '27^(1/3)', 3.0, True, '3');
  Test({LINENUM}5985, '64^(1/3)', 4.0, True, '4');
  Eps; Test({LINENUM}5986, '125^(1/3)', 5.0, True, '5');

  Test({LINENUM}5988, '1^(2/3)', 1.0, True, '1');
  Test({LINENUM}5989, '8^(2/3)', 4.0, True, '4');
  Eps; Test({LINENUM}5990, '27^(2/3)', 9.0, True, '9');
  Test({LINENUM}5991, '64^(2/3)', 16.0, True, '16');
  Eps; Test({LINENUM}5992, '125^(2/3)', 25.0, True, '25');

  Test({LINENUM}5994, '1^(3/2)', 1.0, True, '1');
  Test({LINENUM}5995, '4^(3/2)', 8.0, True, '8');
  Eps; Test({LINENUM}5996, '9^(3/2)', 27.0, True, '27');
  Test({LINENUM}5997, '16^(3/2)', 64.0, True, '64');
  Eps; Test({LINENUM}5998, '25^(3/2)', 125.0, True, '125');

  Eps; Test({LINENUM}6000, '123^(1/2)', 11.09053650640941716205160010);
  Eps; Test({LINENUM}6001, '123^(5/7)', 31.10207507262337535852008947);
  Eps; Test({LINENUM}6002, '123^(9/7)', 486.4305665996165971556058156);

  Test({LINENUM}6004, '1^(−1/2)', 1.0, True, '1');
  Test({LINENUM}6005, '4^(−1/2)', 0.5, True, '0.5');
  Eps; Test({LINENUM}6006, '9^(−1/2)', 1/3);
  Test({LINENUM}6007, '16^(−1/2)', 0.25, True, '0.25');
  Eps; Test({LINENUM}6008, '25^(−1/2)', 0.2, True, '0.2');
  Eps; Test({LINENUM}6009, '36^(−1/2)', 1/6);
  Test({LINENUM}6010, '49^(−1/2)', 1/7);
  Test({LINENUM}6011, '64^(−1/2)', 1/8);
  Test({LINENUM}6012, '81^(−1/2)', 1/9);
  Eps; Test({LINENUM}6013, '100^(−1/2)', 0.1, True, '0.1');

  Test({LINENUM}6015, '1^(−1/3)', 1.0, True, '1');
  Test({LINENUM}6016, '8^(−1/3)', 0.5, True, '0.5');
  Eps; Test({LINENUM}6017, '27^(−1/3)', 1/3);
  Test({LINENUM}6018, '64^(−1/3)', 0.25, True, '0.25');
  Eps; Test({LINENUM}6019, '125^(−1/3)', 0.2, True, '0.2');

  Test({LINENUM}6021, '1^(−2/3)', 1.0, True, '1');
  Test({LINENUM}6022, '8^(−2/3)', 0.25, True, '0.25');
  Eps; Test({LINENUM}6023, '27^(−2/3)', 1/9);
  Test({LINENUM}6024, '64^(−2/3)', 1/16);
  Eps; Test({LINENUM}6025, '125^(−2/3)', 0.04, True, '0.04');

  Test({LINENUM}6027, '1^(−3/2)', 1.0, True, '1');
  Test({LINENUM}6028, '4^(−3/2)', 1/8);
  Eps; Test({LINENUM}6029, '9^(−3/2)', 1/27);
  Test({LINENUM}6030, '16^(−3/2)', 1/64);
  Eps; Test({LINENUM}6031, '25^(−3/2)', 1/125);

  Eps; Test({LINENUM}6033, '123^(−1/2)', 1/11.09053650640941716205160010);
  Eps; Test({LINENUM}6034, '123^(−5/7)', 1/31.10207507262337535852008947);
  Eps; Test({LINENUM}6035, '123^(−9/7)', 1/486.4305665996165971556058156);

  Test({LINENUM}6037, '1^0.5', 1.0, True, '1');
  Test({LINENUM}6038, '4^0.5', 2.0, True, '2');
  Test({LINENUM}6039, '9^0.5', 3.0, True, '3');
  Test({LINENUM}6040, '16^0.5', 4.0, True, '4');
  Eps; Test({LINENUM}6041, '25^0.5', 5.0, True, '5');
  Test({LINENUM}6042, '36^0.5', 6.0, True, '6');
  Test({LINENUM}6043, '49^0.5', 7.0, True, '7');
  Test({LINENUM}6044, '64^0.5', 8.0, True, '8');
  Test({LINENUM}6045, '81^0.5', 9.0, True, '9');
  Eps; Test({LINENUM}6046, '100^0.5', 10.0, True, '10');

  Test({LINENUM}6048, '1^(1./3)', 1.0, True, '1');
  Test({LINENUM}6049, '8^(1./3)', 2.0, True, '2');
  Eps; Test({LINENUM}6050, '27^(1./3)', 3.0, True, '3');
  Test({LINENUM}6051, '64^(1./3)', 4.0, True, '4');
  Eps; Test({LINENUM}6052, '125^(1./3)', 5.0, True, '5');

  Test({LINENUM}6054, '1^(2./3)', 1.0, True, '1');
  Test({LINENUM}6055, '8^(2./3)', 4.0, True, '4');
  Eps; Test({LINENUM}6056, '27^(2./3)', 9.0, True, '9');
  Test({LINENUM}6057, '64^(2./3)', 16.0, True, '16');
  Eps; Test({LINENUM}6058, '125^(2./3)', 25.0, True, '25');

  Test({LINENUM}6060, '1^(3./2)', 1.0, True, '1');
  Test({LINENUM}6061, '4^(3./2)', 8.0, True, '8');
  Eps; Test({LINENUM}6062, '9^(3./2)', 27.0, True, '27');
  Test({LINENUM}6063, '16^(3./2)', 64.0, True, '64');
  Eps; Test({LINENUM}6064, '25^(3./2)', 125.0, True, '125');

  Eps; Test({LINENUM}6066, '123^(1./2)', 11.09053650640941716205160010);
  Eps; Test({LINENUM}6067, '123^(5./7)', 31.10207507262337535852008947);
  Eps; Test({LINENUM}6068, '123^(9./7)', 486.4305665996165971556058156);

  Test({LINENUM}6070, '1^(−1./2)', 1.0, True, '1');
  Test({LINENUM}6071, '4^(−1./2)', 0.5, True, '0.5');
  Eps; Test({LINENUM}6072, '9^(−1./2)', 1/3);
  Test({LINENUM}6073, '16^(−1./2)', 0.25, True, '0.25');
  Eps; Test({LINENUM}6074, '25^(−1./2)', 0.2, True, '0.2');
  Eps; Test({LINENUM}6075, '36^(−1./2)', 1/6);
  Test({LINENUM}6076, '49^(−1./2)', 1/7);
  Test({LINENUM}6077, '64^(−1./2)', 1/8);
  Test({LINENUM}6078, '81^(−1./2)', 1/9);
  Eps; Test({LINENUM}6079, '100^(−1./2)', 0.1, True, '0.1');

  Test({LINENUM}6081, '1^(−1./3)', 1.0, True, '1');
  Test({LINENUM}6082, '8^(−1./3)', 0.5, True, '0.5');
  Eps; Test({LINENUM}6083, '27^(−1./3)', 1/3);
  Test({LINENUM}6084, '64^(−1./3)', 0.25, True, '0.25');
  Eps; Test({LINENUM}6085, '125^(−1./3)', 0.2, True, '0.2');

  Test({LINENUM}6087, '1^(−2./3)', 1.0, True, '1');
  Test({LINENUM}6088, '8^(−2./3)', 0.25, True, '0.25');
  Eps; Test({LINENUM}6089, '27^(−2./3)', 1/9);
  Test({LINENUM}6090, '64^(−2./3)', 1/16);
  Eps; Test({LINENUM}6091, '125^(−2./3)', 0.04, True, '0.04');

  Test({LINENUM}6093, '1^(−3./2)', 1.0, True, '1');
  Test({LINENUM}6094, '4^(−3./2)', 1/8);
  Eps; Test({LINENUM}6095, '9^(−3./2)', 1/27);
  Test({LINENUM}6096, '16^(−3./2)', 1/64);
  Eps; Test({LINENUM}6097, '25^(−3./2)', 1/125);

  Eps; Test({LINENUM}6099, '123^(−1./2)', 1/11.09053650640941716205160010);
  Eps; Test({LINENUM}6100, '123^(−5./7)', 1/31.10207507262337535852008947);
  Eps; Test({LINENUM}6101, '123^(−9./7)', 1/486.4305665996165971556058156);

  Test({LINENUM}6103, '1^(1/2 - 1/2)', 1, True, '1');
  Test({LINENUM}6104, '81^(1/3 - 1/3)', 1, True, '1');
  Test({LINENUM}6105, '0^(1/2 - 1/2)', failure, 'Zero raised to the power of zero.');

  Eps; Test({LINENUM}6107, '(-2)^(1/2)', Sqrt(2)*ImaginaryUnit);
  Eps; Test({LINENUM}6108, '(-2)^0.5', Sqrt(2)*ImaginaryUnit);
  Eps; Test({LINENUM}6109, '(-2)^-(1/2)', -Sqrt(1/2)*ImaginaryUnit);
  Eps; Test({LINENUM}6110, '(-2)^-0.5', -Sqrt(1/2)*ImaginaryUnit);

  Eps; Test({LINENUM}6112, '2^π', 8.8249778270762876238564296042);
  Eps; Test({LINENUM}6113, '2^e', 6.5808859910179209708515424038);
  Eps; Test({LINENUM}6114, '2^-π', 1/8.8249778270762876238564296042);
  Eps; Test({LINENUM}6115, '2^-e', 1/6.5808859910179209708515424038);

  Test({LINENUM}6117, '0^0.0', failure, 'Zero raised to the power of zero.');

  Test({LINENUM}6119, '(3/5)^0', Rat(1, 1), True, '1');
  Test({LINENUM}6120, '(3/5)^1', Rat(3, 5), True, '3/5');
  Test({LINENUM}6121, '(3/5)^2', Rat(9, 25), True, '9/25');
  Test({LINENUM}6122, '(3/5)^3', Rat(27, 125), True, '27/125');
  Test({LINENUM}6123, '(3/5)^4', Rat(81, 625), True, '81/625');
  Test({LINENUM}6124, '(3/5)^5', Rat(243, 3125), True, '243/3125');
  Test({LINENUM}6125, '(3/5)^6', Rat(729, 15625), True, '729/15625');
  Test({LINENUM}6126, '(3/5)^7', Rat(2187, 78125), True, '2187/78125');

  Test({LINENUM}6128, '(3/5)^20', Rat(3486784401, 95367431640625), True, '3486784401/95367431640625');
  Test({LINENUM}6129, '(3/2)^20', Rat(3486784401, 1048576), True, '3486784401/1048576');

  Eps; Test({LINENUM}6131, '(3/5)^100/1E-23', 6.53318623500070906096690);
  Eps; Test({LINENUM}6132, '(3/2)^100', 4.06561177535215237397279707E17);

  Test({LINENUM}6134, '(3/5)^−0', Rat(1, 1), True, '1');
  Test({LINENUM}6135, '(3/5)^−1', Rat(5, 3), True, '5/3');
  Test({LINENUM}6136, '(3/5)^−2', Rat(25, 9), True, '25/9');
  Test({LINENUM}6137, '(3/5)^−3', Rat(125, 27), True, '125/27');
  Test({LINENUM}6138, '(3/5)^−4', Rat(625, 81), True, '625/81');
  Test({LINENUM}6139, '(3/5)^−5', Rat(3125, 243), True, '3125/243');
  Test({LINENUM}6140, '(3/5)^−6', Rat(15625, 729), True, '15625/729');
  Test({LINENUM}6141, '(3/5)^−7', Rat(78125, 2187), True, '78125/2187');

  Test({LINENUM}6143, '(3/5)^−20', Rat(95367431640625, 3486784401), True, '95367431640625/3486784401');
  Test({LINENUM}6144, '(3/2)^−20', Rat(1048576, 3486784401), True, '1048576/3486784401');

  Eps; Test({LINENUM}6146, '(3/5)^−100', 1.53064670748650634144452844E22);
  Eps; Test({LINENUM}6147, '(3/2)^−100/1E-18', 2.45965442657982926924379399);

  Eps; Test({LINENUM}6149, '(1/2)^(1/2)', 1/sqrt(2));
  Eps; Test({LINENUM}6150, '(2/3)^(1/2)', sqrt(2)/sqrt(3));
  Eps; Test({LINENUM}6151, '(3/5)^(3/2)', pow(3/5, 3/2));

  Eps; Test({LINENUM}6153, '(1/2)^(-1/2)', sqrt(2));
  Eps; Test({LINENUM}6154, '(2/3)^(-1/2)', sqrt(3)/sqrt(2));
  Eps; Test({LINENUM}6155, '(3/5)^(-3/2)', pow(5/3, 3/2));

  Test({LINENUM}6157, '(3/5)^π', pow(3/5, Pi));
  Test({LINENUM}6158, '(3/5)^−π', pow(5/3, Pi));

  Test({LINENUM}6160, '(-3/5)^0', Rat(1, 1), True, '1');
  Test({LINENUM}6161, '(-3/5)^1', Rat(-3, 5), True, '−3/5');
  Test({LINENUM}6162, '(-3/5)^2', Rat(9, 25), True, '9/25');
  Test({LINENUM}6163, '(-3/5)^3', Rat(-27, 125), True, '−27/125');
  Test({LINENUM}6164, '(-3/5)^4', Rat(81, 625), True, '81/625');
  Test({LINENUM}6165, '(-3/5)^5', Rat(-243, 3125), True, '−243/3125');

  Test({LINENUM}6167, '(-3/5)^-1', Rat(-5, 3), True, '−5/3');
  Test({LINENUM}6168, '(-3/5)^-2', Rat(25, 9), True, '25/9');
  Test({LINENUM}6169, '(-3/5)^-3', Rat(-125, 27), True, '−125/27');
  Test({LINENUM}6170, '(-3/5)^-4', Rat(625, 81), True, '625/81');
  Test({LINENUM}6171, '(-3/5)^-5', Rat(-3125, 243), True, '−3125/243');

  Test({LINENUM}6173, '(-3/5)^20', Rat(3486784401, 95367431640625), True, '3486784401/95367431640625');
  Test({LINENUM}6174, '(-3/5)^21', Rat(-10460353203, 476837158203125), True, '−10460353203/476837158203125');

  Test({LINENUM}6176, '(-3/5)^-20', Rat(95367431640625, 3486784401), True, '95367431640625/3486784401');
  Test({LINENUM}6177, '(-3/5)^-21', Rat(-476837158203125, 10460353203), True, '−476837158203125/10460353203');

  Eps; Test({LINENUM}6179, '(-3/5)^100/1E-23', 6.53318623500070906096690267);
  Eps; Test({LINENUM}6180, '(-3/5)^101/1E-23', -3.9199117410004254365801416);

  Eps; Test({LINENUM}6182, '(-3/5)^-100',  1.530646707486506341444528441E22);
  Eps; Test({LINENUM}6183, '(-3/5)^-101', -2.551077845810843902407547401E22);

  Test({LINENUM}6185, '(1/2 - 1/2)^0', failure, 'Zero raised to the power of zero.');
  Test({LINENUM}6186, '(1/2 - 1/2)^(1/3 - 1/3)', failure, 'Zero raised to the power of zero.');
  Test({LINENUM}6187, '(1/2 - 1/2)^0.0', failure, 'Zero raised to the power of zero.');

  Eps; Test({LINENUM}6189, '(-4⋅(1/2))^(1/2)', Sqrt(2)*ImaginaryUnit);
  Eps; Test({LINENUM}6190, '(-4⋅(1/2))^0.5', Sqrt(2)*ImaginaryUnit);
  Eps; Test({LINENUM}6191, '(-4⋅(1/2))^-(1/2)', -Sqrt(1/2)*ImaginaryUnit);
  Eps; Test({LINENUM}6192, '(-4⋅(1/2))^-0.5', -Sqrt(1/2)*ImaginaryUnit);

  Test({LINENUM}6194, 'π^0', 1.0);
  Eps; Test({LINENUM}6195, 'π^1', Pi);
  Eps; Test({LINENUM}6196, 'π^2', Pi*Pi);
  Eps; Test({LINENUM}6197, 'π^3', Pi*Pi*Pi);
  Eps; Test({LINENUM}6198, 'π^4', Pi*Pi*Pi*Pi);
  Eps; Test({LINENUM}6199, 'π^-1', 1/Pi);
  Eps; Test({LINENUM}6200, 'π^-2', 1/(Pi*Pi));
  Eps; Test({LINENUM}6201, 'π^-3', 1/(Pi*Pi*Pi));
  Eps; Test({LINENUM}6202, 'π^-4', 1/(Pi*Pi*Pi*Pi));

  Eps; Test({LINENUM}6204, 'π^100', 5.187848314319613192086261524E49);
  Eps; Test({LINENUM}6205, 'π^1000', 1.412123544515764812310439732E497);
  Eps; Test({LINENUM}6206, 'π^-100/1E-50', 1.92758141605601299595132717748);
  Eps; Test({LINENUM}6207, 'π^-1000/1E-498', 7.081533367839375300201218389281);

  Test({LINENUM}6209, 'π^(1/2)', sqrt(Pi));
  Test({LINENUM}6210, 'π^(3/2)', Pow(Pi, 3/2));
  Test({LINENUM}6211, 'π^(-1/2)', 1/sqrt(Pi));
  Test({LINENUM}6212, 'π^(-3/2)', Pow(Pi, -3/2));

  Test({LINENUM}6214, 'π^π', Pow(Pi, Pi));
  Test({LINENUM}6215, 'π^-π', Pow(Pi, -Pi));

  Eps; Test({LINENUM}6217, '(-π)^1', -Pi);
  Eps; Test({LINENUM}6218, '(-π)^2', Pi*Pi);
  Eps; Test({LINENUM}6219, '(-π)^3', -Pi*Pi*Pi);
  Eps; Test({LINENUM}6220, '(-π)^4', Pi*Pi*Pi*Pi);
  Eps; Test({LINENUM}6221, '(-π)^-1', -1/Pi);
  Eps; Test({LINENUM}6222, '(-π)^-2', 1/(Pi*Pi));
  Eps; Test({LINENUM}6223, '(-π)^-3', -1/(Pi*Pi*Pi));
  Eps; Test({LINENUM}6224, '(-π)^-4', 1/(Pi*Pi*Pi*Pi));

  Eps; Test({LINENUM}6226, '(-π)^100',  5.187848314319613192086261524E49);
  Eps; Test({LINENUM}6227, '(-π)^101', -1.629810615220468935601560707E50);
  Eps; Test({LINENUM}6228, '(-π)^1000',  1.412123544515764812310439732E497);
  Eps; Test({LINENUM}6229, '(-π)^1001', -4.436316953411906095459701104E497);
  Eps; Test({LINENUM}6230, '(-π)^-100/1E-50',  1.92758141605601299595132717748);
  Eps; Test({LINENUM}6231, '(-π)^-101/1E-51', -6.13568221154779549256440908236);
  Eps; Test({LINENUM}6232, '(-π)^-1000/1E-498',  7.081533367839375300201218389281);
  Eps; Test({LINENUM}6233, '(-π)^-1001/1E-498', -2.254122080323667391310572893983);

  Test({LINENUM}6235, '0.0^0', failure, 'Zero raised to the power of zero.');
  Test({LINENUM}6236, '0.0^(1/2-1/2)', failure, 'Zero raised to the power of zero.');
  Test({LINENUM}6237, '0.0^0.0', failure, 'Zero raised to the power of zero.');

  Eps; Test({LINENUM}6239, '(-2.0)^(1/2)', Sqrt(2)*ImaginaryUnit);
  Eps; Test({LINENUM}6240, '(-2.0)^0.5', Sqrt(2)*ImaginaryUnit);
  Eps; Test({LINENUM}6241, '(-2.0)^-(1/2)', -Sqrt(1/2)*ImaginaryUnit);
  Eps; Test({LINENUM}6242, '(-2.0)^-0.5', -Sqrt(1/2)*ImaginaryUnit);

  Eps; Test({LINENUM}6244, 'π^e', Pow(Pi, Exp(1)));
  Eps; Test({LINENUM}6245, 'e^π', Pow(Exp(1), Pi));
  Eps; Test({LINENUM}6246, 'π^−e', Pow(Pi, -Exp(1)));
  Eps; Test({LINENUM}6247, 'e^−π', Pow(Exp(1), -Pi));

  Test({LINENUM}6249, 'i^2', TASC(-1));
  Test({LINENUM}6250, 'i^-1', -ImaginaryUnit);
  Test({LINENUM}6251, 'i^i', TASC(Exp(-Pi/2)));
  Test({LINENUM}6252, 'i^-i', TASC(Exp(Pi/2)));
  Test({LINENUM}6253, '2^i', Cos(Ln(2)) + Sin(Ln(2)) * ImaginaryUnit);
  Test({LINENUM}6254, '2^(1+i)', 2*Cos(Ln(2)) + 2*Sin(Ln(2)) * ImaginaryUnit);
  Eps; Test({LINENUM}6255, '(3 − 2⋅i)^(5 + 1.2⋅i)', 208.462241802416852908684580 - 1216.2148793127138136850052642*ImaginaryUnit);
  Eps; Test({LINENUM}6256, '(−3 − 2⋅i)^(5 + 1.2⋅i)', 3018.78826570156423301465273+12697.8912161357663918391804618*ImaginaryUnit);
  Eps; Test({LINENUM}6257, '(π + e⋅i)^(−e + π⋅i)', -0.001820817983213375294947968925 + 0.00126281697465301499742259442*ImaginaryUnit);
  Eps; Test({LINENUM}6258, 'e^(π⋅i)', TASC(-1));
  Eps; Test({LINENUM}6259, 'e^(π⋅i/2)', ImaginaryUnit);
  Eps; Test({LINENUM}6260, 'e^(-π⋅i/2)', -ImaginaryUnit);
  Eps; Test({LINENUM}6261, 'e^(i⋅0)', TASC(1));
  Eps; Test({LINENUM}6262, '(−π)^π', -32.913857741893878178261463794-15.6897116534331706413921410*ImaginaryUnit);
  Eps; Test({LINENUM}6263, '(−π)^i', 0.01785997172427576861039491204+0.039350529116087611295006524*ImaginaryUnit);
  Eps; Test({LINENUM}6264, '(−π)^(π + e⋅i)', 0.006524875122424854072989223+0.0028742584114429763486324591*ImaginaryUnit);

  Test({LINENUM}6266, '(0)^(i-i)', failure, 'Zero raised to a complex number with non-positive real part.');
  Test({LINENUM}6267, '(0.0)^(i-i)', failure, 'Zero raised to a complex number with non-positive real part.');
  Test({LINENUM}6268, '(1/2-1/2)^(i-i)', failure, 'Zero raised to a complex number with non-positive real part.');

  Test({LINENUM}6270, '(i-i)^(i-i)', failure, 'Zero raised to a complex number with non-positive real part.');
  Test({LINENUM}6271, '(i-i)^(1/2-1/2)', failure, 'Zero raised to a complex number with non-positive real part.');
  Test({LINENUM}6272, '(i-i)^0.0', failure, 'Zero raised to a complex number with non-positive real part.');
  Test({LINENUM}6273, '(i-i)^0', failure, 'Zero raised to a complex number with non-positive real part.');

  Test({LINENUM}6275, '2^3^2', 512);
  Test({LINENUM}6276, '2^3^2 = 2^(3^2)', true);

//  Test({LINENUM}6278, '2^-3^2', Rat(1, 512)); TODO: Wishlist

  // - matrix raised to an integer

  Test({LINENUM}6282, 'A ≔ ❨❨1, 2❩, ❨3, 4❩❩', 2, [1, 2, 3, 4]);
  Test({LINENUM}6283, 'A^0', 2, [1, 0, 0, 1]);
  Test({LINENUM}6284, 'A^1', 2, [1, 2, 3, 4]);
  Test({LINENUM}6285, 'A^2', 2, [7, 10, 15, 22]);
  Test({LINENUM}6286, 'A^3', 2, [37, 54, 81, 118]);
  Test({LINENUM}6287, 'A^4', 2, [199, 290, 435, 634]);
  Test({LINENUM}6288, 'A^5', 2, [1069, 1558, 2337, 3406]);
  Test({LINENUM}6289, 'A^6', 2, [5743, 8370, 12555, 18298]);
  Test({LINENUM}6290, 'A^7', 2, [30853, 44966, 67449, 98302]);
  Test({LINENUM}6291, 'A^8', 2, [165751, 241570, 362355, 528106]);
  Test({LINENUM}6292, 'A^9', 2, [890461, 1297782, 1946673, 2837134]);
  Test({LINENUM}6293, 'A^10', 2, [4783807, 6972050, 10458075, 15241882]);
  Eps; Test({LINENUM}6294, 'A^-1', 2, [-2, 1, 1.5, -0.5]);
  Eps; Test({LINENUM}6295, 'A^-2', 2, [5.5, -2.5, -3.75, 1.75]);
  Eps; Test({LINENUM}6296, 'A^-3', 2, [-14.75, 6.75, 10.125, -4.625]);
  Eps; Test({LINENUM}6297, 'A^-4', 2, [39.625, -18.125, -27.1875, 12.4375]);
  Eps; Test({LINENUM}6298, 'A^-5', 2, [-106.4375, 48.6875, 73.03125, -33.40625]);
  Eps; Test({LINENUM}6299, 'A^-6', 2, [285.90625, -130.78125, -196.171875, 89.734375]);
  Eps; Test({LINENUM}6300, 'A^-7', 2, [-767.984375, 351.296875, 526.9453125, -241.0390625]);
  Eps; Test({LINENUM}6301, 'A^-8', 2, [2062.9140625, -943.6328125, -1415.44921875, 647.46484375]);
  Eps; Test({LINENUM}6302, 'A^-9', 2, [-5541.27734375, 2534.73046875, 3802.095703125, -1739.181640625]);
  Eps; Test({LINENUM}6303, 'A^-10', 2, [14884.650390625, -6808.642578125, -10212.9638671875, 4671.6865234375]);

  Eps; Test({LINENUM}6305, 'A^100', 2, [2.4777692297556471353E72, 3.6111680422104224175E72, 5.4167520633156336263E72, 7.8945212930712807616E72]);
  Eps; Test({LINENUM}6306, 'A^-100', 2, [6.2276792135387631750E42, -2.8487092906833027974E42, -4.2730639360249541961E42, 1.9546152775138089789E42]);

  Test({LINENUM}6308, 'IsIdentity(A ⋅ A^−1)', True);
  Test({LINENUM}6309, 'IsIdentity(A^−1 ⋅ A)', True);
  Test({LINENUM}6310, 'IsIdentity(A^4 ⋅ A^−4, 1E−10)', True);
  Test({LINENUM}6311, 'IsIdentity(A^−4 ⋅ A^4, 1E−10)', True);
  Test({LINENUM}6312, 'IsIdentity(A^10 ⋅ A^−10, 1E−6)', True);
  Test({LINENUM}6313, 'IsIdentity(A^−10 ⋅ A^10, 1E−6)', True);

  Test({LINENUM}6315, 'IsIdentity(IdentityMatrix(10)^10)', True);
  Test({LINENUM}6316, 'IsIdentity(IdentityMatrix(10)^100)', True);
  Test({LINENUM}6317, 'IsIdentity(IdentityMatrix(10)^1000)', True);

  Test({LINENUM}6319, 'IsIdentity(IdentityMatrix(10)^−10)', True);
  Test({LINENUM}6320, 'IsIdentity(IdentityMatrix(10)^−100)', True);
  Test({LINENUM}6321, 'IsIdentity(IdentityMatrix(10)^−1000)', True);

  Test({LINENUM}6323, 'A ≔ ❨❨1, 0❩, ❨0, 0❩❩', 2, [1, 0, 0, 0]);

  Test({LINENUM}6325, 'A^0', 2, [1, 0, 0, 1]);
  Test({LINENUM}6326, 'A^1', 2, [1, 0, 0, 0]);
  Test({LINENUM}6327, 'A^2', 2, [1, 0, 0, 0]);
  Test({LINENUM}6328, 'A^3', 2, [1, 0, 0, 0]);
  Test({LINENUM}6329, 'A^4', 2, [1, 0, 0, 0]);
  Test({LINENUM}6330, 'A^5', 2, [1, 0, 0, 0]);
  Test({LINENUM}6331, 'A^6', 2, [1, 0, 0, 0]);
  Test({LINENUM}6332, 'A^7', 2, [1, 0, 0, 0]);
  Test({LINENUM}6333, 'A^8', 2, [1, 0, 0, 0]);
  Test({LINENUM}6334, 'A^9', 2, [1, 0, 0, 0]);
  Test({LINENUM}6335, 'A^10', 2, [1, 0, 0, 0]);
  Test({LINENUM}6336, 'A^100', 2, [1, 0, 0, 0]);
  Test({LINENUM}6337, 'A^1000', 2, [1, 0, 0, 0]);

  Test({LINENUM}6339, 'A^−1', failure, 'Matrix is singular.');
  Test({LINENUM}6340, 'A^−2', failure, 'Matrix is singular.');
  Test({LINENUM}6341, 'A^−10', failure, 'Matrix is singular.');
  Test({LINENUM}6342, 'A^−100', failure, 'Matrix is singular.');
  Test({LINENUM}6343, 'A^−1000', failure, 'Matrix is singular.');

  Test({LINENUM}6345, 'A ≔ ❨❨1, 2, 3❩, ❨4, 5, 6❩❩', 3, [1, 2, 3, 4, 5, 6]);

  Test({LINENUM}6347, 'A^0', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6348, 'A^1', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6349, 'A^2', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6350, 'A^3', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6351, 'A^4', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6352, 'A^5', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6353, 'A^6', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6354, 'A^7', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6355, 'A^8', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6356, 'A^9', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6357, 'A^10', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6358, 'A^100', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6359, 'A^1000', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6360, 'A^-1', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6361, 'A^-2', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6362, 'A^-10', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6363, 'A^-100', failure, 'Cannot compute power of non-square matrix.');
  Test({LINENUM}6364, 'A^-1000', failure, 'Cannot compute power of non-square matrix.');

  Test({LINENUM}6366, 'delete(A)', success);

  Test({LINENUM}6368, '❨❨2❩❩^10', 1, [1024]);
  Test({LINENUM}6369, '❨❨2❩❩^-10', 1, [1/1024]);

  // - Cartesian products: see separate section

  // - invalid operands

  Test({LINENUM}6375, '"test"^2', failure, 'Invalid function arguments.');
  Test({LINENUM}6376, 'true^2', failure, 'Invalid function arguments.');
  Test({LINENUM}6377, 'date()^2', failure, 'Invalid function arguments.');
  Test({LINENUM}6378, '(.;)^2', failure, 'Invalid function arguments.');
  Test({LINENUM}6379, 'color("red")^2', failure, 'Invalid function arguments.');
  Test({LINENUM}6380, '2^true', failure, 'Invalid function arguments.');
  Test({LINENUM}6381, '2^"test"', failure, 'Invalid function arguments.');
  Test({LINENUM}6382, '2^date()', failure, 'Invalid function arguments.');
  Test({LINENUM}6383, '2^(.;)', failure, 'Invalid function arguments.');
  Test({LINENUM}6384, '2^time()', failure, 'Invalid function arguments.');
  Test({LINENUM}6385, '2^color("red")', failure, 'Invalid function arguments.');
  Test({LINENUM}6386, 'true^false', failure, 'Invalid function arguments.');
  Test({LINENUM}6387, 'date()^time()', failure, 'Invalid function arguments.');
  Test({LINENUM}6388, '"cat"^"dog"', failure, 'Invalid function arguments.');

  // Factorial

  Test({LINENUM}6392, '0!', 1);
  Test({LINENUM}6393, '1!', 1);
  Test({LINENUM}6394, '2!', 2);
  Test({LINENUM}6395, '3!', 6);
  Test({LINENUM}6396, '4!', 24);
  Test({LINENUM}6397, '5!', 120);
  Test({LINENUM}6398, '6!', 720);
  Test({LINENUM}6399, '7!', 5040);
  Test({LINENUM}6400, '8!', 40320);
  Test({LINENUM}6401, '9!', 362880);
  Test({LINENUM}6402, '10!', 3628800);
  Test({LINENUM}6403, '11!', 39916800);
  Test({LINENUM}6404, '12!', 479001600);
  Test({LINENUM}6405, '13!', 6227020800);
  Test({LINENUM}6406, '14!', 87178291200);
  Test({LINENUM}6407, '15!', 1307674368000);
  Test({LINENUM}6408, '16!', 20922789888000);
  Test({LINENUM}6409, '17!', 355687428096000);
  Test({LINENUM}6410, '18!', 6402373705728000);
  Test({LINENUM}6411, '19!', 121645100408832000);
  Test({LINENUM}6412, '20!', 2432902008176640000);

  Eps; Test({LINENUM}6414, '21!', 5.109094217170944E19);
  Eps; Test({LINENUM}6415, '22!', 1.12400072777760768E21);
  Eps; Test({LINENUM}6416, '23!', 2.585201673888497664E22);
  Eps; Test({LINENUM}6417, '24!', 6.2044840173323943936E23);
  Eps; Test({LINENUM}6418, '25!', 1.5511210043330985984E25);

  Eps; Test({LINENUM}6420, '50!', 3.04140932017133780436126081660E64);
  Eps; Test({LINENUM}6421, '100!', 9.33262154439441526816992388562E157);
  Eps; Test({LINENUM}6422, '200!', 7.88657867364790503552363213932E374);
  Eps; Test({LINENUM}6423, '300!', 3.06057512216440636035370461297E614);

  Test({LINENUM}6425, '−5!', -120);

  Test({LINENUM}6427, '(−5)!', failure, 'A non-negative integer was expected as argument 1, but "-5" was given.');

  Test({LINENUM}6429, '"test"!', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}6430, 'true!', failure, 'An object of type integer was expected as argument 1, but an object of type boolean was given.');
  Test({LINENUM}6431, '5.2!', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}6432, 'i!', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}6433, '❨1, 0❩!', failure, 'An object of type integer was expected as argument 1, but an object of type real vector was given.');
  Test({LINENUM}6434, '❨i, 0❩!', failure, 'An object of type integer was expected as argument 1, but an object of type complex vector was given.');
  Test({LINENUM}6435, '(1/2)!', failure, 'An object of type integer was expected as argument 1, but an object of type rational number was given.');
  Test({LINENUM}6436, '❨❨1, 0❩, ❨0, 1❩❩!', failure, 'An object of type integer was expected as argument 1, but an object of type real matrix was given.');
  Test({LINENUM}6437, '❨❨i, 0❩, ❨0, 1❩❩!', failure, 'An object of type integer was expected as argument 1, but an object of type complex matrix was given.');
  Test({LINENUM}6438, 'color("red")!', failure, 'An object of type integer was expected as argument 1, but an object of type color was given.');
  Test({LINENUM}6439, 'date()!', failure, 'An object of type integer was expected as argument 1, but an object of type structure of type "Date" was given.');

  // Degrees

  Test({LINENUM}6443, '0°', 0.0);
  Test({LINENUM}6444, '90°', Pi/2);
  Test({LINENUM}6445, '180°', Pi);
  Test({LINENUM}6446, '270°', 3*Pi/2);
  Test({LINENUM}6447, '360°', 2*Pi);

  Eps; Test({LINENUM}6449, '1°', 1 * Pi / 180);
  Eps; Test({LINENUM}6450, '36°', 36 * Pi / 180);
  Eps; Test({LINENUM}6451, '1.7°', 1.7 * Pi / 180);
  Eps; Test({LINENUM}6452, '(-1.7)°', -1.7 * Pi / 180);
  Eps; Test({LINENUM}6453, '-1.7°', -1.7 * Pi / 180);
  Eps; Test({LINENUM}6454, '-(1.7°)', -1.7 * Pi / 180);

  Eps; Test({LINENUM}6456, '(123/19)°', (123/19) * Pi / 180);

  Eps; Test({LINENUM}6458, '(123/19 + 5.2⋅i)°', (123/19 + 5.2*ImaginaryUnit) * Pi / 180);

  Test({LINENUM}6460, 'ChrName("°")', 'DEGREE SIGN');

  Test({LINENUM}6462, '"test"°', failure, 'An object of type number was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}6463, 'false°', failure, 'An object of type number was expected as argument 1, but an object of type boolean was given.');
  Test({LINENUM}6464, 'color("red")°', failure, 'An object of type number was expected as argument 1, but an object of type color was given.');

  // Percent

  Test({LINENUM}6468, '0%', 0.0);
  Test({LINENUM}6469, '0.0%', 0.0);
  Test({LINENUM}6470, '(1/2-1/2)%', 0.0);
  Test({LINENUM}6471, '(i-i)%', TASC(0.0));
  Test({LINENUM}6472, '1%', 0.01);
  Test({LINENUM}6473, '50%', 0.5);
  Test({LINENUM}6474, '100%', 1.0);
  Eps; Test({LINENUM}6475, '120%', 1.2);
  Test({LINENUM}6476, '1000 %', 10.0);
  Test({LINENUM}6477, '1.7%', 0.017);
  Test({LINENUM}6478, '-1.7%', -0.017);
  Test({LINENUM}6479, '-(1.7%)', -0.017);
  Test({LINENUM}6480, '(-1.7)%', -0.017);
  Test({LINENUM}6481, '(1/2)%', 0.005);
  Test({LINENUM}6482, '(1+2⋅i)%', 0.01 + 0.02*ImaginaryUnit);
  Test({LINENUM}6483, '5%%', 0.0005);
  Test({LINENUM}6484, '(5%)%', 0.0005);

  Test({LINENUM}6486, '"test"%', failure, 'An object of type number was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}6487, 'false%', failure, 'An object of type number was expected as argument 1, but an object of type boolean was given.');
  Test({LINENUM}6488, 'color("red")%', failure, 'An object of type number was expected as argument 1, but an object of type color was given.');

  // Permille

  Test({LINENUM}6492, '0‰', 0.0);
  Test({LINENUM}6493, '0.0‰', 0.0);
  Test({LINENUM}6494, '(1/2-1/2)‰', 0.0);
  Test({LINENUM}6495, '(i-i)‰', TASC(0.0));
  Eps; Test({LINENUM}6496, '1‰', 0.001);
  Eps; Test({LINENUM}6497, '50‰', 0.05);
  Eps; Test({LINENUM}6498, '100‰', 0.1);
  Eps; Test({LINENUM}6499, '500‰', 0.5);
  Eps; Test({LINENUM}6500, '1000‰', 1.0);
  Eps; Test({LINENUM}6501, '120‰', 0.12);
  Eps; Test({LINENUM}6502, '10000 ‰', 10.0);
  Eps; Test({LINENUM}6503, '1.7‰', 0.0017);
  Eps; Test({LINENUM}6504, '-1.7‰', -0.0017);
  Eps; Test({LINENUM}6505, '-(1.7‰)', -0.0017);
  Eps; Test({LINENUM}6506, '(-1.7)‰', -0.0017);
  Eps; Test({LINENUM}6507, '(1/2)‰', 0.0005);
  Eps; Test({LINENUM}6508, '(1+2⋅i)‰', 0.001 + 0.002*ImaginaryUnit);
  Eps; Test({LINENUM}6509, '5‰‰', 0.000005);
  Eps; Test({LINENUM}6510, '(5‰)‰', 0.000005);
  Eps; Test({LINENUM}6511, '(5 % ‰ % ‰ % %)/1E-14', 5.0);

  Test({LINENUM}6513, '"test"‰', failure, 'An object of type number was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}6514, 'false‰', failure, 'An object of type number was expected as argument 1, but an object of type boolean was given.');
  Test({LINENUM}6515, 'color("red")‰', failure, 'An object of type number was expected as argument 1, but an object of type color was given.');

  // Inner (dot, scalar) product (bar)

  Test({LINENUM}6519, '❨1, 2, 3❩ | ❨5, 2, −1❩', 6.0, True, '6');
  Test({LINENUM}6520, '❨1, 0, 0❩ | ❨0, 1, 0❩', 0.0, True, '0');
  Test({LINENUM}6521, '❨1, 0, 0❩ | ❨1, 0, 0❩', 1.0, True, '1');

  Test({LINENUM}6523, '❨6, 4, 2❩ | ❨i, 3, 1❩', 14 - 6*ImaginaryUnit, True, '14 − 6⋅i');
  Test({LINENUM}6524, '❨1, 0, 0❩ | ❨2 + i, 4, 6❩', 2 - ImaginaryUnit, True, '2 − i');

  Test({LINENUM}6526, '❨2⋅i, 5, 3❩ | ❨1, 2, 1❩', 13 + 2*ImaginaryUnit, True, '13 + 2⋅i');
  Test({LINENUM}6527, '❨5+7⋅i, 2, 3❩ | ❨1, 0, 0❩', 5 + 7*ImaginaryUnit, True, '5 + 7⋅i');

  Test({LINENUM}6529, '❨3 + i, −2 − 5⋅i, 4 + 2⋅i❩ | ❨−5, −2 − 7⋅i, 3⋅i❩', 30 - 21*ImaginaryUnit, True, '30 − 21⋅i');
  Test({LINENUM}6530, '❨1, i, −1❩ | ❨1, i, −1❩', TASC(3.0), True, '3');

  Test({LINENUM}6532, '❨1, 0❩ | ❨0, 1❩', 0.0, True, '0');
  Test({LINENUM}6533, '❨1.0, 0❩ | ❨5.2, 1.3❩', 5.2, True, '5.2');

  Test({LINENUM}6535, '❨1, 0❩ | 7', failure, 'An object of type vector was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}6536, '❨1, 0❩ | 7.8', failure, 'An object of type vector was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}6537, '❨1, 0❩ | (7/5)', failure, 'An object of type vector was expected as argument 2, but an object of type rational number was given.');
  Test({LINENUM}6538, '❨1, 0❩ | i', failure, 'An object of type vector was expected as argument 2, but an object of type complex number was given.');
  Test({LINENUM}6539, '❨1, 0❩ | "test"', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}6540, '❨1, 0❩ | color("blue")', failure, 'An object of type vector was expected as argument 2, but an object of type color was given.');
  Test({LINENUM}6541, '5 | ❨1, 0❩', failure, 'An object of type vector was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}6542, 'IdentityMatrix(4) | ❨1, 0❩', failure, 'An object of type vector was expected as argument 1, but an object of type real matrix was given.');
  Test({LINENUM}6543, 'IdentityMatrix(4) | "cat"', failure, 'An object of type vector was expected as argument 1, but an object of type real matrix was given.');
  Test({LINENUM}6544, 'false | "cat"', failure, 'An object of type vector was expected as argument 1, but an object of type boolean was given.');

  Test({LINENUM}6546, 'u, v, x ≔ ❨1, 0, 0❩, ❨0, 1, 0❩, ❨5, 7, 3❩; (x|u)⋅u + (x|v)⋅v', [5, 7, 0]);
  Test({LINENUM}6547, 'delete(u); delete(v); delete(x);', null);

  // Cross

  // - vector cross product

  Test({LINENUM}6553, '❨1, 0, 0❩ × ❨0, 1, 0❩', [0, 0, 1]);
  Test({LINENUM}6554, '❨0, 1, 0❩ × ❨0, 0, 1❩', [1, 0, 0]);
  Test({LINENUM}6555, '❨0, 0, 1❩ × ❨1, 0, 0❩', [0, 1, 0]);

  Test({LINENUM}6557, '❨0, 1, 0❩ × ❨1, 0, 0❩', [0, 0, -1]);
  Test({LINENUM}6558, '❨1, 0, 0❩ × ❨1, 0, 0❩', [0, 0, 0]);

  Test({LINENUM}6560, '❨1, 2, 3❩ × ❨−4, 3, 2❩', [-5, -14, 11]);

  Test({LINENUM}6562, '❨1, 2, 3❩ × ❨0, 0, 0❩', [0, 0, 0]);
  Test({LINENUM}6563, '❨0, 0, 0❩ × ❨−4, 3, 2❩', [0, 0, 0]);
  Test({LINENUM}6564, '❨0, 0, 0❩ × ❨0, 0, 0❩', [0, 0, 0]);

  Test({LINENUM}6566, '❨1, 2❩ × ❨−4, 3❩', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}6567, '❨1, 2, 4❩ × ❨−4, 3❩', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}6568, '❨1, 2, 4❩ × ❨−4, 3, 5, 6❩', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}6569, '❨1, 2, 4, 2❩ × ❨−4, 3, 5, 6❩', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}6570, '❨1, 2, 4, 2❩ × ❨−4, 3, 5❩', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}6571, '❨1, 2❩ × ❨−4, 3, 5❩', failure, 'Vector cross product only defined in ℝ³.');

  Test({LINENUM}6573, '❨1, 0, 0❩ × ❨0, 1, 0❩ × ❨1, 0, 0❩', [0, 1, 0]);
  Test({LINENUM}6574, '❨1, 0, 0❩ × ❨0, 1, 0❩ × ❨1, 0, 0❩ = [❨1, 0, 0❩ × ❨0, 1, 0❩] × ❨1, 0, 0❩', True);

  Test({LINENUM}6576, '❨1, 2, 3❩ × ❨−3, 2, 1❩ × ❨3, 2, −1❩', [-6, 20, 22]);
  Test({LINENUM}6577, '❨1, 2, 3❩ × ❨−3, 2, 1❩ × ❨3, 2, −1❩ = [❨1, 2, 3❩ × ❨−3, 2, 1❩] × ❨3, 2, −1❩', True);

  Test({LINENUM}6579, '❨2, 1, 4❩ × ❨−3, 2, 4❩ × ❨−4, 8, 5❩ × ❨1, 1, 3❩', [88, 356, -148]);
  Test({LINENUM}6580, '❨2, 1, 4❩ × ❨−3, 2, 4❩ × ❨−4, 8, 5❩ × ❨1, 1, 3❩ = [[❨2, 1, 4❩ × ❨−3, 2, 4❩] × ❨−4, 8, 5❩] × ❨1, 1, 3❩', true);

  // - Cartesian product

  Test({LINENUM}6584, '{"cat", "dog"} × {"female", "male"} = {''("cat", "female"), ''("cat", "male"), ''("dog", "female"), ''("dog", "male")}', True);
  Test({LINENUM}6585, '{"a", "b"} × {1, 2, 3} = {''("a", 1), ''("a", 2), ''("a", 3), ''("b", 1), ''("b", 2), ''("b", 3)}', True);
  Test({LINENUM}6586, '{1, 2, 3, 4, 5} × {true} = {''(1, true), ''(2, true), ''(3, true), ''(4, true), ''(5, true)}', True);
  Test({LINENUM}6587, '{10} × {10} = {''(10, 10)}', True);

  Test({LINENUM}6589, '{1, 2, 3, 4, 5} × {} = {}', True);
  Test({LINENUM}6590, '∅ × {1, 2, 3} = ∅', True);
  Test({LINENUM}6591, '∅ × ∅ = ∅', True);

  Test({LINENUM}6593, '{ 1, 2, 3 } × { 1, 2, 3 } = { ''(1, 1), ''(1, 2), ''(1, 3), ''(2, 1), ''(2, 2), ''(2, 3), ''(3, 1), ''(3, 2), ''(3, 3) }', True);
  Test({LINENUM}6594, '{ 1, 2, 3 } × { 1., 2., 3. } = { ''(1, 1.), ''(1, 2.), ''(1, 3.), ''(2, 1.), ''(2, 2.), ''(2, 3.), ''(3, 1.), ''(3, 2.), ''(3, 3.) }', True);
  Test({LINENUM}6595, '{ "a", "b" } × { 1/2, 1/3 } = { ''("a", 1/2), ''("a", 1/3), ''("b", 1/2), ''("b", 1/3) }', True);

  Test({LINENUM}6597, '{"a"} × {1, 2} × {"b"} = { ''("a", 1, "b"), ''("a", 2, "b") }', True);
  Test({LINENUM}6598, '{1, 2} × {10, 20} × {100, 200} = { ''(1, 10, 100), ''(1, 10, 200), ''(1, 20, 100), ''(1, 20, 200), ''(2, 10, 100), ''(2, 10, 200), ''(2, 20, 100), ''(2, 20, 200) }', True);

  Test({LINENUM}6600, '{"a"} × {"b"} × {"c"} × {"d"} = { ''("a", "b", "c", "d" ) }', True);
  Test({LINENUM}6601, '{"a"} × {1, 2} × {"c"} × {"d"} = { ''("a", 1, "c", "d" ), ''("a", 2, "c", "d" ) }', True);
  Test({LINENUM}6602, '{"a"} × {1, 2, 3} × {"c"} × {"d"} = { ''("a", 1, "c", "d" ), ''("a", 2, "c", "d" ), ''("a", 3, "c", "d" ) }', True);
  Test({LINENUM}6603, '{"a"} × {} × {"c"} × {"d"} = {}', True);
  Test({LINENUM}6604, '{} × {} × {"c"} × {"d"} = {}', True);
  Test({LINENUM}6605, '{"a"} × {1, 2, 3} × {"c"} × {} = {}', True);
  Test({LINENUM}6606, '{"a"} × {1, 2, 3} × {"c"} × {true} = { ''("a", 1, "c", true), ''("a", 2, "c", true), ''("a", 3, "c", true) }', True);

  Test({LINENUM}6608, '''( "cat", "dog", "rat" ) × ''( "female", "male" )', asoarrex([asoarr(['cat', 'female']), asoarr(['dog', 'female']), asoarr(['rat', 'female']), asoarr(['cat', 'male']), asoarr(['dog', 'male']), asoarr(['rat', 'male'])]));
  Test({LINENUM}6609, '''( "cat", "dog", "rat" ) × ''( "female", "male" ) × ''( "old", "young" )', asoarrex([asoarr(['cat', 'female', 'old']), asoarr(['dog', 'female', 'old']), asoarr(['rat', 'female', 'old']), asoarr(['cat', 'male', 'old']), asoarr(['dog', 'male', 'old']), asoarr(['rat', 'male', 'old']),   asoarr(['cat', 'female', 'young']), asoarr(['dog', 'female', 'young']), asoarr(['rat', 'female', 'young']), asoarr(['cat', 'male', 'young']), asoarr(['dog', 'male', 'young']), asoarr(['rat', 'male', 'young'])]));

  Test({LINENUM}6611, 'A ≔ ''( "cat", "dog", "rat" ); S ≔ ''( "female", "male" ); W ≔ ''( 1.2, 1.3, 1.4);', null);
  Test({LINENUM}6612, 'A × S × W',
    asoarrex([
      asoarr(['cat', 'female', 1.2]),
      asoarr(['dog', 'female', 1.2]),
      asoarr(['rat', 'female', 1.2]),
      asoarr(['cat', 'male', 1.2]),
      asoarr(['dog', 'male', 1.2]),
      asoarr(['rat', 'male', 1.2]),

      asoarr(['cat', 'female', 1.3]),
      asoarr(['dog', 'female', 1.3]),
      asoarr(['rat', 'female', 1.3]),
      asoarr(['cat', 'male', 1.3]),
      asoarr(['dog', 'male', 1.3]),
      asoarr(['rat', 'male', 1.3]),

      asoarr(['cat', 'female', 1.4]),
      asoarr(['dog', 'female', 1.4]),
      asoarr(['rat', 'female', 1.4]),
      asoarr(['cat', 'male', 1.4]),
      asoarr(['dog', 'male', 1.4]),
      asoarr(['rat', 'male', 1.4])
    ])
  );
  Test({LINENUM}6636, '#A ⋅ #S ⋅ #W = #(A×S×W)', True);
  Test({LINENUM}6637, 'S × S', asoarrex([asoarr(['female', 'female']), asoarr(['male', 'female']), asoarr(['female', 'male']), asoarr(['male', 'male'])]));
  Test({LINENUM}6638, 'S^2', asoarrex([asoarr(['female', 'female']), asoarr(['male', 'female']), asoarr(['female', 'male']), asoarr(['male', 'male'])]));
  Test({LINENUM}6639, '[1, 10, 1] × S', asoarrex([
    asoarr([1, 'female']),
    asoarr([2, 'female']),
    asoarr([3, 'female']),
    asoarr([4, 'female']),
    asoarr([5, 'female']),
    asoarr([6, 'female']),
    asoarr([7, 'female']),
    asoarr([8, 'female']),
    asoarr([9, 'female']),
    asoarr([10, 'female']),
    asoarr([1, 'male']),
    asoarr([2, 'male']),
    asoarr([3, 'male']),
    asoarr([4, 'male']),
    asoarr([5, 'male']),
    asoarr([6, 'male']),
    asoarr([7, 'male']),
    asoarr([8, 'male']),
    asoarr([9, 'male']),
    asoarr([10, 'male'])
  ]));
  Test({LINENUM}6661, '[1, 2, 1] × [1, 1, 1] × [1, 2, 1] × [5, 5, 1]', asoarrex([
    asoarr([1, 1, 1, 5]),
    asoarr([2, 1, 1, 5]),
    asoarr([1, 1, 2, 5]),
    asoarr([2, 1, 2, 5])
  ]));
  Test({LINENUM}6667, '[1, 2, 1] × [1, 1, 1] × ''() × [5, 5, 1]', asoarrex([]));
  Test({LINENUM}6668, '''() × ''() × ''() × ''() × ''() × ''()', asoarrex([]));

  // - power notation for Cartesian products

  Test({LINENUM}6672, 'A ≔ { 1, 2 };', null);
  Test({LINENUM}6673, 'A', asoset([1, 2]));
  Test({LINENUM}6674, 'A^1', asosetex([asoarr([1]), asoarr([2])]));
  Test({LINENUM}6675, 'A^2', asosetex([asoarr([1, 1]), asoarr([1, 2]), asoarr([2, 1]), asoarr([2, 2])]));
  Test({LINENUM}6676, 'A^3', asosetex([asoarr([1, 1, 1]), asoarr([1, 1, 2]), asoarr([1, 2, 1]), asoarr([1, 2, 2]), asoarr([2, 1, 1]), asoarr([2, 1, 2]), asoarr([2, 2, 1]), asoarr([2, 2, 2])]));
  Test({LINENUM}6677, '#A', 2);
  Test({LINENUM}6678, '#(A^1)', 2);
  Test({LINENUM}6679, '#(A^2)', 4);
  Test({LINENUM}6680, '#(A^3)', 8);
  Test({LINENUM}6681, '#(A^4)', 16);
  Test({LINENUM}6682, '#(A^5)', 32);
  Test({LINENUM}6683, '#(A^6)', 64);
  Test({LINENUM}6684, '#(A^7)', 128);
  Test({LINENUM}6685, '#(A^8)', 256);
  Test({LINENUM}6686, '#(A^9)', 512);
  Test({LINENUM}6687, '#(A^10)', 1024);
  Test({LINENUM}6688, '#(A^11)', 2048);
  Test({LINENUM}6689, '#(A^12)', 4096);

  Test({LINENUM}6691, 'A ≔ ''( 1, 2 );', null);
  Test({LINENUM}6692, 'A', asoarr([1, 2]));
  Test({LINENUM}6693, 'A^1', asoarrex([asoarr([1]), asoarr([2])]));
  Test({LINENUM}6694, 'A^2', asoarrex([asoarr([1, 1]), asoarr([2, 1]), asoarr([1, 2]), asoarr([2, 2])]));
  Test({LINENUM}6695, 'A^3', asoarrex([asoarr([1, 1, 1]), asoarr([2, 1, 1]), asoarr([1, 2, 1]), asoarr([2, 2, 1]), asoarr([1, 1, 2]), asoarr([2, 1, 2]), asoarr([1, 2, 2]), asoarr([2, 2, 2])]));
  Test({LINENUM}6696, '#A', 2);
  Test({LINENUM}6697, '#(A^1)', 2);
  Test({LINENUM}6698, '#(A^2)', 4);
  Test({LINENUM}6699, '#(A^3)', 8);
  Test({LINENUM}6700, '#(A^4)', 16);
  Test({LINENUM}6701, '#(A^5)', 32);
  Test({LINENUM}6702, '#(A^6)', 64);
  Test({LINENUM}6703, '#(A^7)', 128);
  Test({LINENUM}6704, '#(A^8)', 256);
  Test({LINENUM}6705, '#(A^9)', 512);
  Test({LINENUM}6706, '#(A^10)', 1024);
  Test({LINENUM}6707, '#(A^11)', 2048);
  Test({LINENUM}6708, '#(A^12)', 4096);

  Test({LINENUM}6710, '#([1, 10, 1]^1)', 10);
  Test({LINENUM}6711, '#([1, 10, 1]^2)', 100);
  Test({LINENUM}6712, '#([1, 10, 1]^3)', 1000);
  Test({LINENUM}6713, '#([1, 10, 1]^4)', 10000);

  Test({LINENUM}6715, 'delete(A); delete(S); delete(W);', null);

  // - invalid operands

  Test({LINENUM}6719, '❨1, 2, 3❩ × 5', failure, 'An object of type vector was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}6720, '❨1, 2, 3❩ × 5.0', failure, 'An object of type vector was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}6721, '❨1, 2, 3❩ × i', failure, 'An object of type vector was expected as argument 2, but an object of type complex number was given.');
  Test({LINENUM}6722, '❨1, 2, 3❩ × true', failure, 'An object of type vector was expected as argument 2, but an object of type boolean was given.');
  Test({LINENUM}6723, '❨1, 2, 3❩ × "5"', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}6724, '❨1, 2, 3❩ × "5" × true', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}6725, '❨1, 2, 3❩ × (1/2) × true', failure, 'An object of type vector was expected as argument 2, but an object of type rational number was given.');

  Test({LINENUM}6727, '4 × 8', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');

  Test({LINENUM}6729, '{4} × 8', failure, 'An object of type set was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}6730, '{4} × {8} × 16', failure, 'An object of type set was expected as argument 3, but an object of type integer was given.');
  Test({LINENUM}6731, '{4} × {8} × {16} × 32', failure, 'An object of type set was expected as argument 4, but an object of type integer was given.');
  Test({LINENUM}6732, '{4} × {8} × {16} × 32 × 64', failure, 'An object of type set was expected as argument 4, but an object of type integer was given.');
  Test({LINENUM}6733, '{4} × {8} × {16} × "test" × 64', failure, 'An object of type set was expected as argument 4, but an object of type string was given.');

  Test({LINENUM}6735, '''(4) × 8', failure, 'An object of type array was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}6736, '''(4) × ''(8) × 16', failure, 'An object of type array was expected as argument 3, but an object of type integer was given.');
  Test({LINENUM}6737, '''(4) × {8} × 16', failure, 'An object of type array was expected as argument 2, but an object of type set was given.');
  Test({LINENUM}6738, '''(4) × ''(8) × ''(16) × 32', failure, 'An object of type array was expected as argument 4, but an object of type integer was given.');
  Test({LINENUM}6739, '''(4) × ''(8) × ''(16) × 32 × 64', failure, 'An object of type array was expected as argument 4, but an object of type integer was given.');
  Test({LINENUM}6740, '''(4) × ''(8) × ''(16) × "test" × 64', failure, 'An object of type array was expected as argument 4, but an object of type string was given.');

  // Square root

  // - numbers

  Test({LINENUM}6746, '√0', 0.0);
  Test({LINENUM}6747, '√1', 1.0);
  Test({LINENUM}6748, '√4', 2.0);
  Test({LINENUM}6749, '√9', 3.0);
  Test({LINENUM}6750, '√16', 4.0);
  Test({LINENUM}6751, '√25', 5.0);
  Test({LINENUM}6752, '√36', 6.0);
  Test({LINENUM}6753, '√49', 7.0);
  Test({LINENUM}6754, '√64', 8.0);
  Test({LINENUM}6755, '√81', 9.0);
  Test({LINENUM}6756, '√100', 10.0);

  Test({LINENUM}6758, '√0.0', 0.0);
  Test({LINENUM}6759, '√1.0', 1.0);
  Test({LINENUM}6760, '√4.0', 2.0);
  Test({LINENUM}6761, '√9.0', 3.0);
  Test({LINENUM}6762, '√16.0', 4.0);
  Test({LINENUM}6763, '√25.0', 5.0);
  Test({LINENUM}6764, '√36.0', 6.0);
  Test({LINENUM}6765, '√49.0', 7.0);
  Test({LINENUM}6766, '√64.0', 8.0);
  Test({LINENUM}6767, '√81.0', 9.0);
  Test({LINENUM}6768, '√100.0', 10.0);

  Test({LINENUM}6770, '√(31/2 + 1/2)', 4.0);
  Test({LINENUM}6771, '√(1/2 - 1/2)', 0.0);

  Eps; Test({LINENUM}6773, '√1E100', 1E50);
  Eps; Test({LINENUM}6774, '√16E100', 4E50);

  Test({LINENUM}6776, '√-1', ImaginaryUnit);
  Test({LINENUM}6777, '√-16', 4*ImaginaryUnit);

  Test({LINENUM}6779, '√-16.0', 4*ImaginaryUnit);
  Test({LINENUM}6780, '√-(31/2 + 1/2)', 4.0*ImaginaryUnit);

  Eps; Test({LINENUM}6782, '√(2 + 3⋅i)', 1.67414922803554004044803930 + 0.8959774761298381247157337*ImaginaryUnit);

  Eps; Test({LINENUM}6784, '√i', (1 + ImaginaryUnit) / Sqrt(2));
  Test({LINENUM}6785, '√(i-i)', TASC(0.0));

  // - matrices

  Eps; Test({LINENUM}6789, '√❨❨2, 3❩, ❨3, 5❩❩', 2,
    [
      1, 1,
      1, 2
    ]);


  Eps; Test({LINENUM}6796, '√❨❨1269, -658, -392❩, ❨-658, 1556, 644❩, ❨-392, 644, 281❩❩', 3,
    [
      34, -8, -7,
      -8, 36, 14,
      -7, 14, 6
    ]);

  Eps; Test({LINENUM}6803, '√❨❨890, 671, -28, 432, 614❩, ❨671, 1521, -1818, 526, -1354❩, ❨-28, -1818, 3265, -130, 3137❩, ❨432, 526, -130, 2048, -548❩, ❨614, -1354, 3137, -548, 4326❩❩', 5,
    [
      23, 15, 0, 6, 10,
      15, 26, -22, 6, -10,
      0, -22, 44, 2, 29,
      6, 6, 2, 44, -6,
      10, -10, 29, -6, 57
    ]);

  Eps; Test({LINENUM}6812, '√❨❨10, -3, 2❩, ❨-3, 2, 1❩, ❨2, 1, 5❩❩', 3,
    [
      3.0351922193590166925, -0.76708302760149100904, 0.44630910847552380925,
      -0.76708302760149100904, 1.1147905109963295083, 0.41088410209969516454,
      0.44630910847552380925, 0.41088410209969516454, 2.1522040875190044117
    ]);

  Eps; Test({LINENUM}6819, '√❨❨0.29, 0.18, -0.2❩, ❨0.18, 1.08, 0.78❩, ❨-0.2, 0.78, 1.05❩❩', 3,
    [
      0.44392349078718205112, 0.20871384021848979468, -0.22219466066621268935,
      0.20871384021848979468, 0.90820831798149495435, 0.45999585221007641237,
      -0.22219466066621268935, 0.45999585221007641237, 0.88827549145574884252
    ]);

  Eps; Test({LINENUM}6826, '√❨❨1, 0, 0, 0, 0, 0, 0, 0, 0, 0❩, ❨0, 5, 0, 0, 0, 3, 0, 0, 0, 0❩,'+' ❨0, 0, 1, 0, 0, 0, 0, 0, 0, 0❩, ❨0, 0, 0, 1, 0, 0, 0, 0, 0, 0❩, ❨0, 0, 0, 0, 1, 0, 0, 0, 0, 0❩,'+' ❨0, 3, 0, 0, 0, 2, 0, 0, 0, 0❩, ❨0, 0, 0, 0, 0, 0, 1, 0, 0, 0❩,'+' ❨0, 0, 0, 0, 0, 0, 0, 1, 0, 0❩, ❨0, 0, 0, 0, 0, 0, 0, 0, 1, 0❩,'+' ❨0, 0, 0, 0, 0, 0, 0, 0, 0, 1❩❩', 10,
    [
      1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 2, 0, 0, 0, 1, 0, 0, 0, 0,
      0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
      0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 1
    ]);

  Test({LINENUM}6840, '√IdentityMatrix(1) = IdentityMatrix(1)', True);
  Test({LINENUM}6841, '√IdentityMatrix(2) = IdentityMatrix(2)', True);
  Test({LINENUM}6842, '√IdentityMatrix(3) = IdentityMatrix(3)', True);
  Test({LINENUM}6843, '√IdentityMatrix(4) = IdentityMatrix(4)', True);
  Test({LINENUM}6844, '√IdentityMatrix(5) = IdentityMatrix(5)', True);
  Test({LINENUM}6845, '√IdentityMatrix(6) = IdentityMatrix(6)', True);
  Test({LINENUM}6846, '√IdentityMatrix(7) = IdentityMatrix(7)', True);
  Test({LINENUM}6847, '√IdentityMatrix(8) = IdentityMatrix(8)', True);
  Test({LINENUM}6848, '√IdentityMatrix(9) = IdentityMatrix(9)', True);
  Test({LINENUM}6849, '√IdentityMatrix(10) = IdentityMatrix(10)', True);

  Test({LINENUM}6851, '√ZeroMatrix(1) = ZeroMatrix(1)', True);
  Test({LINENUM}6852, '√ZeroMatrix(2) = ZeroMatrix(2)', True);
  Test({LINENUM}6853, '√ZeroMatrix(3) = ZeroMatrix(3)', True);
  Test({LINENUM}6854, '√ZeroMatrix(4) = ZeroMatrix(4)', True);
  Test({LINENUM}6855, '√ZeroMatrix(5) = ZeroMatrix(5)', True);
  Test({LINENUM}6856, '√ZeroMatrix(6) = ZeroMatrix(6)', True);
  Test({LINENUM}6857, '√ZeroMatrix(7) = ZeroMatrix(7)', True);
  Test({LINENUM}6858, '√ZeroMatrix(8) = ZeroMatrix(8)', True);
  Test({LINENUM}6859, '√ZeroMatrix(9) = ZeroMatrix(9)', True);
  Test({LINENUM}6860, '√ZeroMatrix(10) = ZeroMatrix(10)', True);

  Eps; Test({LINENUM}6862, '√❨❨50, 3+28⋅i, 18-27⋅i❩, ❨3-28⋅i, 18, -14-19⋅i❩, ❨18+27⋅i, -14+19⋅i, 46❩❩', 3,
    [
      6, 3*ImaginaryUnit, 1-2*ImaginaryUnit,
      -3*ImaginaryUnit, 2, -1-2*ImaginaryUnit,
      1+2*ImaginaryUnit, -1+2*ImaginaryUnit, 6
    ]);

  Test({LINENUM}6869, '√❨❨1, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩', failure, 'Matrix square root only defined for positive semidefinite symmetric matrices.');
  Test({LINENUM}6870, '√❨❨1, 2, 3❩, ❨4, 5, 6❩❩', failure, 'Matrix square root only defined for positive semidefinite symmetric matrices.');

  Test({LINENUM}6872, '√❨❨i, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩', failure, 'Matrix square root only defined for positive semidefinite Hermitian matrices.');
  Test({LINENUM}6873, '√❨❨i, 2, 3❩, ❨4, 5, 6❩❩', failure, 'Matrix square root only defined for positive semidefinite Hermitian matrices.');

  // - invalid operands

  Test({LINENUM}6877, '√"test"', failure, 'An object of type numeric entity was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}6878, '√false', failure, 'An object of type numeric entity was expected as argument 1, but an object of type boolean was given.');
  Test({LINENUM}6879, '√color("red")', failure, 'An object of type numeric entity was expected as argument 1, but an object of type color was given.');
  Test({LINENUM}6880, '√❨1, 2, 3❩', failure, 'Invalid function arguments.');

  // Asterisk (complex conjugate and matrix conjugate transpose)

  // - numbers

  Test({LINENUM}6886, '0*', 0);
  Test({LINENUM}6887, '(1/2 - 1/2)*', Rat(0, 1));
  Test({LINENUM}6888, '0.*', 0.0);
  Test({LINENUM}6889, '(i-i)*', TASC(0));

  Test({LINENUM}6891, '5*', 5);
  Test({LINENUM}6892, '(-3)*', -3);
  Test({LINENUM}6893, '(1/3)*', Rat(1, 3));
  Test({LINENUM}6894, '(-7/8)*', Rat(-7, 8));
  Test({LINENUM}6895, '3.5*', 3.5);
  Test({LINENUM}6896, '(-3.5)*', -3.5);
  Test({LINENUM}6897, '1E100*', 1E100);
  Test({LINENUM}6898, '(-1E100)*', -1E100);

  Test({LINENUM}6900, '0**', 0);
  Test({LINENUM}6901, '(1/2 - 1/2)**', Rat(0, 1));
  Test({LINENUM}6902, '0.**', 0.0);
  Test({LINENUM}6903, '(i-i)**', TASC(0));

  Test({LINENUM}6905, '5**', 5);
  Test({LINENUM}6906, '(-3)**', -3);
  Test({LINENUM}6907, '(1/3)**', Rat(1, 3));
  Test({LINENUM}6908, '(-7/8)**', Rat(-7, 8));
  Test({LINENUM}6909, '3.5**', 3.5);
  Test({LINENUM}6910, '(-3.5)**', -3.5);
  Test({LINENUM}6911, '1E100**', 1E100);
  Test({LINENUM}6912, '(-1E100)**', -1E100);

  Test({LINENUM}6914, 'i*', -ImaginaryUnit);
  Test({LINENUM}6915, '(-i)*', ImaginaryUnit);

  Test({LINENUM}6917, '(2+4⋅i)*', 2-4*ImaginaryUnit);
  Test({LINENUM}6918, '(2-4⋅i)*', 2+4*ImaginaryUnit);
  Test({LINENUM}6919, '(-2+4⋅i)*', -2-4*ImaginaryUnit);
  Test({LINENUM}6920, '(-2-4⋅i)*', -2+4*ImaginaryUnit);

  Test({LINENUM}6922, '(1.235 + 63.22⋅i)*', 1.235 - 63.22*ImaginaryUnit);
  Test({LINENUM}6923, '(1.235 - 63.22⋅i)*', 1.235 + 63.22*ImaginaryUnit);
  Test({LINENUM}6924, '(-1.235 + 63.22⋅i)*', -1.235 - 63.22*ImaginaryUnit);
  Test({LINENUM}6925, '(-1.235 - 63.22⋅i)*', -1.235 + 63.22*ImaginaryUnit);

  Test({LINENUM}6927, '(e+π⋅i)*', Exp(1) - Pi*ImaginaryUnit);
  Test({LINENUM}6928, '(e−π⋅i)*', Exp(1) + Pi*ImaginaryUnit);

  Test({LINENUM}6930, 'i**', ImaginaryUnit);
  Test({LINENUM}6931, '(-i)**', -ImaginaryUnit);

  Test({LINENUM}6933, '(2+4⋅i)**', 2+4*ImaginaryUnit);
  Test({LINENUM}6934, '(2-4⋅i)**', 2-4*ImaginaryUnit);
  Test({LINENUM}6935, '(-2+4⋅i)**', -2+4*ImaginaryUnit);
  Test({LINENUM}6936, '(-2-4⋅i)**', -2-4*ImaginaryUnit);

  Test({LINENUM}6938, '(1.235 + 63.22⋅i)**', 1.235 + 63.22*ImaginaryUnit);
  Test({LINENUM}6939, '(1.235 - 63.22⋅i)**', 1.235 - 63.22*ImaginaryUnit);
  Test({LINENUM}6940, '(-1.235 + 63.22⋅i)**', -1.235 + 63.22*ImaginaryUnit);
  Test({LINENUM}6941, '(-1.235 - 63.22⋅i)**', -1.235 - 63.22*ImaginaryUnit);

  Test({LINENUM}6943, '(e+π⋅i)**', Exp(1) + Pi*ImaginaryUnit);
  Test({LINENUM}6944, '(e−π⋅i)**', Exp(1) - Pi*ImaginaryUnit);

  Test({LINENUM}6946, 'i', +ImaginaryUnit);
  Test({LINENUM}6947, 'i*', -ImaginaryUnit);
  Test({LINENUM}6948, 'i**', +ImaginaryUnit);
  Test({LINENUM}6949, 'i***', -ImaginaryUnit);
  Test({LINENUM}6950, 'i****', +ImaginaryUnit);
  Test({LINENUM}6951, 'i*****', -ImaginaryUnit);
  Test({LINENUM}6952, 'i******', +ImaginaryUnit);
  Test({LINENUM}6953, 'i*******', -ImaginaryUnit);
  Test({LINENUM}6954, 'i********', +ImaginaryUnit);
  Test({LINENUM}6955, 'i*********', -ImaginaryUnit);
  Test({LINENUM}6956, 'i**********', +ImaginaryUnit);

  Test({LINENUM}6958, 'i' + StringOfChar('*', 100), +ImaginaryUnit);
  Test({LINENUM}6959, 'i' + StringOfChar('*', 101), -ImaginaryUnit);
  Test({LINENUM}6960, 'i' + StringOfChar('*', 102), +ImaginaryUnit);
  Test({LINENUM}6961, 'i' + StringOfChar('*', 103), -ImaginaryUnit);

  // - vectors (~ column matrices)

  Test({LINENUM}6965, '❨1, 2, 3❩*', 3, [1, 2, 3]);
  Test({LINENUM}6966, '❨−2, 0, i❩*', 3, [-2, 0, -ImaginaryUnit]);
  Test({LINENUM}6967, '❨2, 1 + 3⋅i, 5 - 2⋅i, -i❩*', 4, [2, 1 - 3*ImaginaryUnit, 5 + 2*ImaginaryUnit, ImaginaryUnit]);

  // - matrices

  Test({LINENUM}6971, '❨❨1, 2❩, ❨3, 4❩❩*', 2, [1, 3, 2, 4]);
  Test({LINENUM}6972, '❨❨1, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩*', 3, [1, 4, 7, 2, 5, 8, 3, 6, 9]);
  Test({LINENUM}6973, '❨❨1, 2, 3, 4, 5❩, ❨6, 7, 8, 9, 10❩❩*', 2, [1, 6, 2, 7, 3, 8, 4, 9, 5, 10]);
  Test({LINENUM}6974, '❨❨1, 2❩, ❨−3, −4❩, ❨5, −6❩❩*', 3, [1, -3, 5, 2, -4, -6]);
  Test({LINENUM}6975, '❨❨7❩❩*', 1, [7]);
  Test({LINENUM}6976, '❨❨1, 2, 3, 4, −5❩❩*', 1, [1, 2, 3, 4, -5]);

  Test({LINENUM}6978, 'A ≔ ❨❨1, 6, 4❩, ❨3, 2, −5❩, ❨12, 9, −9.5❩❩; B ≔ ❨❨1, 2, 3, −3, 0❩, ❨−6, 4, 5.6, 3, 1❩❩; C ≔ ❨❨6, 7❩, ❨2, 1❩, ❨−4, 5.6❩, ❨π, e^2❩❩; D ≔ ❨❨5, 4, 3, 2❩, ❨−5, 4, 7, 5.5❩, ❨2, 3, 0, 1❩, ❨−5, 6, 3, 2❩❩;', null);
  Test({LINENUM}6979, 'A* = transpose(A) ∧ B* = transpose(B) ∧ C* = transpose(C) ∧ D* = transpose(D)', True);
  Test({LINENUM}6980, 'A** = A ∧ B** = B ∧ C** = C ∧ D** = D', True);
  Test({LINENUM}6981, 'delete(A); delete(B); delete(C); delete(D);', null);

  Test({LINENUM}6983, 'IdentityMatrix(10)* = IdentityMatrix(10)', True);
  Test({LINENUM}6984, 'IdentityMatrix(100)* = IdentityMatrix(100)', True);

  Test({LINENUM}6986, 'ZeroMatrix(10)* = ZeroMatrix(10)', True);
  Test({LINENUM}6987, 'ZeroMatrix(100)* = ZeroMatrix(100)', True);

  Test({LINENUM}6989, '❨❨2, i, 2+i❩, ❨−4, −2 − 3⋅i, 4❩, ❨0, 1, 1−2⋅i❩❩*', 3, [2, -4, 0, -ImaginaryUnit, -2 + 3*ImaginaryUnit, 1, 2 - ImaginaryUnit, 4, 1 + 2*ImaginaryUnit]);
  Test({LINENUM}6990, '❨❨1, i, 1+i, 3−2⋅i❩, ❨−4, −2−3⋅i, 0, −i❩❩*', 2, [1, -4, -ImaginaryUnit, -2 + 3*ImaginaryUnit, 1 - ImaginaryUnit, 0, 3 + 2*ImaginaryUnit, ImaginaryUnit]);
  Test({LINENUM}6991, '❨❨5 + i, 1 − i, 2 + 3⋅i❩, ❨−2, 0, i❩, ❨1 − 5⋅i, 0, 3❩❩*', 3, [5-ImaginaryUnit, -2, 1+5*ImaginaryUnit, 1+ImaginaryUnit, 0, 0, 2-3*ImaginaryUnit, -ImaginaryUnit, 3]);
  Test({LINENUM}6992, '❨❨i❩❩*', 1, [-ImaginaryUnit]);
  Test({LINENUM}6993, '❨❨-i❩❩*', 1, [ImaginaryUnit]);
  Test({LINENUM}6994, '❨❨1, 2, i, 1 + 2⋅i❩❩*', 1, [1, 2, -ImaginaryUnit, 1 - 2*ImaginaryUnit]);

  Test({LINENUM}6996, '[IdentityMatrix(10) + i⋅ZeroMatrix(10)]* = [IdentityMatrix(10) + i⋅ZeroMatrix(10)]', True);
  Test({LINENUM}6997, '[IdentityMatrix(100) + i⋅ZeroMatrix(100)]* = [IdentityMatrix(100) + i⋅ZeroMatrix(100)]', True);

  Test({LINENUM}6999, 'A ≔ ❨❨2 + i, −3, 1 + 5⋅i❩, ❨0, −i, 4❩, ❨1 + 3⋅i, −5 + 3⋅i, 9❩❩; B ≔ ❨❨1, 2, i, 5, 2+7⋅i❩, ❨−3, 5, −2, −i, 1−i❩❩; C ≔ ❨❨2+i❩, ❨2−4⋅i❩, ❨π⋅i❩, ❨e+π⋅i❩❩; D ≔ ❨❨i, 2❩, ❨−2, i❩❩;', null);
  Test({LINENUM}7000, 'A* = ConjugateTranspose(A) ∧ B* = ConjugateTranspose(B) ∧ C* = ConjugateTranspose(C) ∧ D* = ConjugateTranspose(D)', True);
  Test({LINENUM}7001, 'A** = A ∧ B** = B ∧ C** = C ∧ D** = D', True);
  Test({LINENUM}7002, 'A*** = ConjugateTranspose(A) ∧ B*** = ConjugateTranspose(B) ∧ C*** = ConjugateTranspose(C) ∧ D*** = ConjugateTranspose(D)', True);
  Test({LINENUM}7003, 'A**** = A ∧ B**** = B ∧ C**** = C ∧ D**** = D', True);
  Test({LINENUM}7004, 'delete(A); delete(B); delete(C); delete(D);', null);

  // - invalid operands

  Test({LINENUM}7008, '"test"*', failure, 'An object of type numeric entity was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}7009, 'false*', failure, 'An object of type numeric entity was expected as argument 1, but an object of type boolean was given.');
  Test({LINENUM}7010, 'color("red")*', failure, 'An object of type numeric entity was expected as argument 1, but an object of type color was given.');

  // Colon (create structure member)

  Test({LINENUM}7014, '("a": 42) = struct("name": "a", "value": 42)', true);
  Test({LINENUM}7015, 'type("a": 24)', 'structure of type "StructMember"');

  Test({LINENUM}7017, '("a": 42.0) = struct("name": "a", "value": 42.0)', True);
  Test({LINENUM}7018, '("a": 42/7) = struct("name": "a", "value": 42/7)', True);
  Test({LINENUM}7019, '("a": "cat") = struct("name": "a", "value": "cat")', True);
  Test({LINENUM}7020, '("a": true) = struct("name": "a", "value": true)', True);
  Test({LINENUM}7021, '("a": color("red")) = struct("name": "a", "value": color("red"))', True);

  Test({LINENUM}7023, '5: 4', failure, 'An object of type string was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}7024, '5.0: 4', failure, 'An object of type string was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}7025, 'false: 4', failure, 'An object of type string was expected as argument 1, but an object of type boolean was given.');

  Test({LINENUM}7027, 'struct("name": "Smith", "age": 50).name', 'Smith');
  Test({LINENUM}7028, 'struct("name": "Smith", "age": 50).age', 50);

  // Semicolon (also tested in the section on syntax in this chapter)

  Test({LINENUM}7032, '42', 42);
  Test({LINENUM}7033, '42;', null);
  Test({LINENUM}7034, '1; 2', 2);
  Test({LINENUM}7035, '1; 2;', null);
  Test({LINENUM}7036, '1; 2; 3', 3);
  Test({LINENUM}7037, '1; 2; 3;', null);
  Test({LINENUM}7038, '1; 2; 3; 4', 4);
  Test({LINENUM}7039, '1; 2; 3; 4;', null);

  Test({LINENUM}7041, '"alfa"; "beta"', 'beta');
  Test({LINENUM}7042, '"alfa"; "beta";', null);

  Test({LINENUM}7044, '5; true; 6/7; color("red"); "test"', 'test');
  Test({LINENUM}7045, '5.4; "alfa"; color("blue"); false; 11/12', Rat(11, 12));
  Test({LINENUM}7046, 'color("red"); 22/23; "fish"; true', True);
  Test({LINENUM}7047, '"rat"; false; 1/2; 22.3', 22.3);
  Test({LINENUM}7048, '22/23; false; color("red"); 10', 10);
  Test({LINENUM}7049, 'true; 1; 2.3; "dog"; color("red")', TRGB.Create(1, 0, 0));

  Test({LINENUM}7051, '5; true; 6/7; color("red"); "test";', null);
  Test({LINENUM}7052, '5.4; "alfa"; color("blue"); false; 11/12;', null);
  Test({LINENUM}7053, 'color("red"); 22/23; "fish"; true;', null);
  Test({LINENUM}7054, '"rat"; false; 1/2; 22.3;', null);
  Test({LINENUM}7055, '22/23; false; color("red"); 10;', null);
  Test({LINENUM}7056, 'true; 1; 2.3; "dog"; color("red");', null);

  Test({LINENUM}7058, 'a ≔ 4; b ≔ 10; a^2 + b^2', 116);
  Test({LINENUM}7059, 'delete(a); delete(b)', success);
  Test({LINENUM}7060, 'a ≔ 4; b ≔ 10; a^2 + b^2', 116);
  Test({LINENUM}7061, 'delete(a); delete(b);', null);
  Test({LINENUM}7062, 'f ≔ x ↦ x^2 + 1; f(10)', 101);
  Test({LINENUM}7063, 'delete(f);', null);

  // Less than

  // - numbers

  Test({LINENUM}7069, '1 < 2', True);
  Test({LINENUM}7070, '1 < 3', True);
  Test({LINENUM}7071, '2 < 2', False);
  Test({LINENUM}7072, '2 < 3', True);
  Test({LINENUM}7073, '3 < 3', False);
  Test({LINENUM}7074, '4 < 3', False);
  Test({LINENUM}7075, '7 < 1561161515665', True);
  Test({LINENUM}7076, '1551118 < 156', False);
  Test({LINENUM}7077, '-18918919877171156 < 75', True);
  Test({LINENUM}7078, '-58952 < -25', True);
  Test({LINENUM}7079, '-1451891 < -89849456561', False);
  Test({LINENUM}7080, '-819448811198 < 89144545665', True);
  Test({LINENUM}7081, '167474488913 < -48974545415', False);
  Test({LINENUM}7082, '876127175165 < 876127175166', True);
  Test({LINENUM}7083, '876127175166 < 876127175166', False);
  Test({LINENUM}7084, '876127175167 < 876127175166', False);

  Test({LINENUM}7086, '3/7 < 4/7', True);
  Test({LINENUM}7087, '4/7 < 4/7', False);
  Test({LINENUM}7088, '5/7 < 4/7', False);
  Test({LINENUM}7089, '-5/7 < 4/7', True);

  Test({LINENUM}7091, '15615.0 < 54894894.756', True);
  Test({LINENUM}7092, '7563165.156 < 7563165.157', True);
  Test({LINENUM}7093, '7563165.157 < 7563165.157', False);
  Test({LINENUM}7094, '7563165.158 < 7563165.157', False);

  Test({LINENUM}7096, '5 < 5.8', True);
  Test({LINENUM}7097, '5 < 5.0', False);
  Test({LINENUM}7098, '5 < 5.1', True);
  Test({LINENUM}7099, '4.9 < 5', True);
  Test({LINENUM}7100, '5.0 < 5', False);
  Test({LINENUM}7101, '5.1 < 5', False);

  Test({LINENUM}7103, '0.4999 < 1/2', True);
  Test({LINENUM}7104, '0.5000 < 1/2', False);
  Test({LINENUM}7105, '0.5001 < 1/2', False);

  Test({LINENUM}7107, '1/2 + 1/2 < 1', False);
  Test({LINENUM}7108, '1/2 + 1/2 < 1.000000001', True);
  Test({LINENUM}7109, '1/2 + 1/2 < 2', True);

  Test({LINENUM}7111, '-992/3 < 7/8', True);

  Test({LINENUM}7113, 'i < 5', failure, 'Complex numbers have no order.');
  Test({LINENUM}7114, 'i < 5.5', failure, 'Complex numbers have no order.');
  Test({LINENUM}7115, 'i < 5/2', failure, 'Complex numbers have no order.');
  Test({LINENUM}7116, '0 < i', failure, 'Complex numbers have no order.');
  Test({LINENUM}7117, '0.22 < i', failure, 'Complex numbers have no order.');
  Test({LINENUM}7118, '1/3 < i', failure, 'Complex numbers have no order.');

  Test({LINENUM}7120, 'i < i', failure, 'Complex numbers have no order.');

  Test({LINENUM}7122, '2 + 3⋅i < 10 + 20⋅i', failure, 'Complex numbers have no order.');

  // - real vectors

  Test({LINENUM}7126, '❨2, 1, 4❩ < ❨5, 3, 5❩', True);
  Test({LINENUM}7127, '❨3, 1, 4❩ < ❨5, 3, 5❩', True);
  Test({LINENUM}7128, '❨4, 1, 4❩ < ❨5, 3, 5❩', True);
  Test({LINENUM}7129, '❨5, 1, 4❩ < ❨5, 3, 5❩', False);
  Test({LINENUM}7130, '❨6, 1, 4❩ < ❨5, 3, 5❩', False);
  Test({LINENUM}7131, '❨2, 2, 4❩ < ❨5, 3, 5❩', True);
  Test({LINENUM}7132, '❨2, 3, 4❩ < ❨5, 3, 5❩', False);
  Test({LINENUM}7133, '❨2, 4, 4❩ < ❨5, 3, 5❩', False);
  Test({LINENUM}7134, '❨2, 1, 5❩ < ❨5, 3, 5❩', False);
  Test({LINENUM}7135, '❨2, 1, 6❩ < ❨5, 3, 5❩', False);
  Test({LINENUM}7136, '❨2, 1, -7❩ < ❨5, 3, 5❩', True);
  Test({LINENUM}7137, '❨2, 1, -7❩ < ❨5, -3, 5❩', False);

  Test({LINENUM}7139, '❨4, 1❩ < ❨5, 3❩', True);
  Test({LINENUM}7140, '❨5, 1❩ < ❨5, 3❩', False);
  Test({LINENUM}7141, '❨-5, 1❩ < ❨5, 3❩', True);
  Test({LINENUM}7142, '❨4, 2❩ < ❨5, 3❩', True);
  Test({LINENUM}7143, '❨0, 0❩ < ❨5, 3❩', True);
  Test({LINENUM}7144, '❨-4, -2❩ < ❨5, 3❩', True);
  Test({LINENUM}7145, '-❨4, 2❩ < ❨5, 3❩', True);

  Test({LINENUM}7147, '❨2, 2, 4❩ < ❨5, 3❩', failure, 'Cannot subtract two vectors of unequal dimension.'); // OK, but leaks implementation

  // - real matrices

  Test({LINENUM}7151, '❨❨1, 2❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7152, '❨❨2, 2❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7153, '❨❨3, 2❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7154, '❨❨4, 2❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7155, '❨❨8, 2❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7156, '❨❨9, 2❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7157, '❨❨10, 2❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', False);
  Test({LINENUM}7158, '❨❨11, 2❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', False);
  Test({LINENUM}7159, '❨❨-11, 2❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);

  Test({LINENUM}7161, '❨❨1, 3❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7162, '❨❨1, 4❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7163, '❨❨1, 5❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', False);
  Test({LINENUM}7164, '❨❨1, 6❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', False);

  Test({LINENUM}7166, '❨❨1, 2❩, ❨4, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7167, '❨❨1, 2❩, ❨5, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7168, '❨❨1, 2❩, ❨8, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7169, '❨❨1, 2❩, ❨9, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7170, '❨❨1, 2❩, ❨10, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', False);
  Test({LINENUM}7171, '❨❨1, 2❩, ❨11, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', False);
  Test({LINENUM}7172, '❨❨1, 2❩, ❨-11, 4❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);

  Test({LINENUM}7174, '❨❨1, 2❩, ❨3, 5❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', False);
  Test({LINENUM}7175, '❨❨1, 2❩, ❨3, 6❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', False);
  Test({LINENUM}7176, '❨❨1, 2❩, ❨3, -7❩❩ < ❨❨10, 5❩, ❨10, 5❩❩', True);

  Test({LINENUM}7178, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7179, '❨❨2, 5, 4, 2❩, ❨0, −2, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7180, '❨❨3, 5, 4, 2❩, ❨0, −2, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7181, '❨❨4, 5, 4, 2❩, ❨0, −2, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);
  Test({LINENUM}7182, '❨❨5, 5, 4, 2❩, ❨0, −2, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);

  Test({LINENUM}7184, '❨❨1, 6, 4, 2❩, ❨0, −2, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);
  Test({LINENUM}7185, '❨❨1, 5, 5, 2❩, ❨0, −2, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);

  Test({LINENUM}7187, '❨❨1, 5, 4, 3❩, ❨0, −2, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7188, '❨❨1, 5, 4, 4❩, ❨0, −2, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);
  Test({LINENUM}7189, '❨❨1, 5, 4, 5❩, ❨0, −2, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);

  Test({LINENUM}7191, '❨❨1, 5, 4, 2❩, ❨0, −1, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7192, '❨❨1, 5, 4, 2❩, ❨0, 0, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);
  Test({LINENUM}7193, '❨❨1, 5, 4, 2❩, ❨0, 1, 4, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);

  Test({LINENUM}7195, '❨❨1, 5, 4, 2❩, ❨0, −2, 6, 5❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);

  Test({LINENUM}7197, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, 6❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7198, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, 7❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7199, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, 8❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);
  Test({LINENUM}7200, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, 9❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);
  Test({LINENUM}7201, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, -9❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);

  Test({LINENUM}7203, '❨❨1, 2❩, ❨3, 4❩❩ < ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', failure, 'Cannot subtract two matrices of different sizes.');

  // - datetime objects: postponed

  // - invalid operands

  Test({LINENUM}7209, '"test" < 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7210, '7 < false', failure, 'Invalid function arguments.');
  Test({LINENUM}7211, '"LiU rocks" < true', failure, 'Invalid function arguments.'); // could make it return True
  Test({LINENUM}7212, '❨2, 1, 4❩ < ❨3, 2, i❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7213, '❨❨1, 3❩, ❨3, 4❩❩ < ❨❨10, 5❩, ❨10, i❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7214, '❨2, 1, 4❩ < ❨❨1, 5, 4, 2❩, ❨0, −1, 4, 5❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7215, '❨2, 1, 4❩ < 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7216, '❨❨1, 2❩, ❨9, 4❩❩ < 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7217, '"test" < "testing"', failure, 'Invalid function arguments.');

  // - n-ary extension

  Test({LINENUM}7221, '1 < 2 < 3', True);
  Test({LINENUM}7222, '1 < 2 < 3 < 4', True);
  Test({LINENUM}7223, '1 < 2 < 3 < 4 < 5', True);
  Test({LINENUM}7224, '1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < 100 < 1000 < 1E10 < 2E10 < 1E100', True);
  Test({LINENUM}7225, '-5 < 0 < 5', True);
  Test({LINENUM}7226, '1 < 2 < 2.01 < 4', True);

  Test({LINENUM}7228, '1 < 2 < 2 < 4', False);
  Test({LINENUM}7229, '1 < 2 < 3 < 2', False);
  Test({LINENUM}7230, '1 < -2 < 3 < 4', False);
  Test({LINENUM}7231, '1 < 2 < 3 < -4', False);
  Test({LINENUM}7232, '1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < 100 < 1000 < 1E10 < 2E10 < 1E-100', False);
  Test({LINENUM}7233, '1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < 100 < 1000 < 1E10 < -2E10 < 1E100', False);
  Test({LINENUM}7234, '1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < 100 < 1000 < 1E10 < 1E10 < 1E100', False);
  Test({LINENUM}7235, '1 < 2 < 1.99 < 4', False);
  Test({LINENUM}7236, '-1 < 2 < 1.9999 < 4', False);


  // Less than or equal to

  // - numbers

  Test({LINENUM}7243, '1 ≤ 2', True);
  Test({LINENUM}7244, '1 ≤ 3', True);
  Test({LINENUM}7245, '2 ≤ 2', True);
  Test({LINENUM}7246, '2 ≤ 3', True);
  Test({LINENUM}7247, '3 ≤ 3', True);
  Test({LINENUM}7248, '4 ≤ 3', False);
  Test({LINENUM}7249, '7 ≤ 1561161515665', True);
  Test({LINENUM}7250, '1551118 ≤ 156', False);
  Test({LINENUM}7251, '-18918919877171156 ≤ 75', True);
  Test({LINENUM}7252, '-58952 ≤ -25', True);
  Test({LINENUM}7253, '-1451891 ≤ -89849456561', False);
  Test({LINENUM}7254, '-819448811198 ≤ 89144545665', True);
  Test({LINENUM}7255, '167474488913 ≤ -48974545415', False);
  Test({LINENUM}7256, '876127175165 ≤ 876127175166', True);
  Test({LINENUM}7257, '876127175166 ≤ 876127175166', True);
  Test({LINENUM}7258, '876127175167 ≤ 876127175166', False);

  Test({LINENUM}7260, '3/7 ≤ 4/7', True);
  Test({LINENUM}7261, '4/7 ≤ 4/7', True);
  Test({LINENUM}7262, '5/7 ≤ 4/7', False);
  Test({LINENUM}7263, '-5/7 ≤ 4/7', True);

  Test({LINENUM}7265, '15615.0 ≤ 54894894.756', True);
  Test({LINENUM}7266, '7563165.156 ≤ 7563165.157', True);
  Test({LINENUM}7267, '7563165.157 ≤ 7563165.157', True);
  Test({LINENUM}7268, '7563165.158 ≤ 7563165.157', False);

  Test({LINENUM}7270, '5 ≤ 5.8', True);
  Test({LINENUM}7271, '5 ≤ 5.0', True);
  Test({LINENUM}7272, '5 ≤ 5.1', True);
  Test({LINENUM}7273, '4.9 ≤ 5', True);
  Test({LINENUM}7274, '5.0 ≤ 5', True);
  Test({LINENUM}7275, '5.1 ≤ 5', False);

  Test({LINENUM}7277, '0.4999 ≤ 1/2', True);
  Test({LINENUM}7278, '0.5000 ≤ 1/2', True);
  Test({LINENUM}7279, '0.5001 ≤ 1/2', False);

  Test({LINENUM}7281, '1/2 + 1/2 ≤ 0.999999999', False);
  Test({LINENUM}7282, '1/2 + 1/2 ≤ 1', True);
  Test({LINENUM}7283, '1/2 + 1/2 ≤ 1.000000001', True);
  Test({LINENUM}7284, '1/2 + 1/2 ≤ 2', True);

  Test({LINENUM}7286, '-992/3 ≤ 7/8', True);

  Test({LINENUM}7288, 'i ≤ 5', failure, 'Complex numbers have no order.');
  Test({LINENUM}7289, 'i ≤ 5.5', failure, 'Complex numbers have no order.');
  Test({LINENUM}7290, 'i ≤ 5/2', failure, 'Complex numbers have no order.');
  Test({LINENUM}7291, '0 ≤ i', failure, 'Complex numbers have no order.');
  Test({LINENUM}7292, '0.22 ≤ i', failure, 'Complex numbers have no order.');
  Test({LINENUM}7293, '1/3 ≤ i', failure, 'Complex numbers have no order.');

  Test({LINENUM}7295, 'i ≤ i', failure, 'Complex numbers have no order.');

  Test({LINENUM}7297, '2 + 3⋅i ≤ 10 + 20⋅i', failure, 'Complex numbers have no order.');

  // - real vectors

  Test({LINENUM}7301, '❨2, 1, 4❩ ≤ ❨5, 3, 5❩', True);
  Test({LINENUM}7302, '❨3, 1, 4❩ ≤ ❨5, 3, 5❩', True);
  Test({LINENUM}7303, '❨4, 1, 4❩ ≤ ❨5, 3, 5❩', True);
  Test({LINENUM}7304, '❨5, 1, 4❩ ≤ ❨5, 3, 5❩', True);
  Test({LINENUM}7305, '❨6, 1, 4❩ ≤ ❨5, 3, 5❩', False);
  Test({LINENUM}7306, '❨2, 2, 4❩ ≤ ❨5, 3, 5❩', True);
  Test({LINENUM}7307, '❨2, 3, 4❩ ≤ ❨5, 3, 5❩', True);
  Test({LINENUM}7308, '❨2, 4, 4❩ ≤ ❨5, 3, 5❩', False);
  Test({LINENUM}7309, '❨2, 1, 5❩ ≤ ❨5, 3, 5❩', True);
  Test({LINENUM}7310, '❨2, 1, 6❩ ≤ ❨5, 3, 5❩', False);
  Test({LINENUM}7311, '❨2, 1, -7❩ ≤ ❨5, 3, 5❩', True);
  Test({LINENUM}7312, '❨2, 1, -7❩ ≤ ❨5, -3, 5❩', False);

  Test({LINENUM}7314, '❨4, 1❩ ≤ ❨5, 3❩', True);
  Test({LINENUM}7315, '❨5, 1❩ ≤ ❨5, 3❩', True);
  Test({LINENUM}7316, '❨6, 1❩ ≤ ❨5, 3❩', False);
  Test({LINENUM}7317, '❨-6, 1❩ ≤ ❨5, 3❩', True);
  Test({LINENUM}7318, '❨4, 2❩ ≤ ❨5, 3❩', True);
  Test({LINENUM}7319, '❨0, 0❩ ≤ ❨5, 3❩', True);
  Test({LINENUM}7320, '❨-4, -2❩ ≤ ❨5, 3❩', True);
  Test({LINENUM}7321, '-❨4, 2❩ ≤ ❨5, 3❩', True);

  Test({LINENUM}7323, '❨2, 2, 4❩ ≤ ❨5, 3❩', failure, 'Cannot subtract two vectors of unequal dimension.'); // OK, but leaks implementation

  // - real matrices

  Test({LINENUM}7327, '❨❨1, 2❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7328, '❨❨2, 2❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7329, '❨❨3, 2❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7330, '❨❨4, 2❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7331, '❨❨8, 2❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7332, '❨❨9, 2❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7333, '❨❨10, 2❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7334, '❨❨11, 2❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', False);
  Test({LINENUM}7335, '❨❨-11, 2❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);

  Test({LINENUM}7337, '❨❨1, 3❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7338, '❨❨1, 4❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7339, '❨❨1, 5❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7340, '❨❨1, 6❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', False);

  Test({LINENUM}7342, '❨❨1, 2❩, ❨4, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7343, '❨❨1, 2❩, ❨5, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7344, '❨❨1, 2❩, ❨8, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7345, '❨❨1, 2❩, ❨9, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7346, '❨❨1, 2❩, ❨10, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7347, '❨❨1, 2❩, ❨11, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', False);
  Test({LINENUM}7348, '❨❨1, 2❩, ❨-11, 4❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);

  Test({LINENUM}7350, '❨❨1, 2❩, ❨3, 5❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);
  Test({LINENUM}7351, '❨❨1, 2❩, ❨3, 6❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', False);
  Test({LINENUM}7352, '❨❨1, 2❩, ❨3, -7❩❩ ≤ ❨❨10, 5❩, ❨10, 5❩❩', True);

  Test({LINENUM}7354, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7355, '❨❨2, 5, 4, 2❩, ❨0, −2, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7356, '❨❨3, 5, 4, 2❩, ❨0, −2, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7357, '❨❨4, 5, 4, 2❩, ❨0, −2, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7358, '❨❨5, 5, 4, 2❩, ❨0, −2, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);

  Test({LINENUM}7360, '❨❨1, 6, 4, 2❩, ❨0, −2, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7361, '❨❨1, 5, 5, 2❩, ❨0, −2, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);

  Test({LINENUM}7363, '❨❨1, 5, 4, 3❩, ❨0, −2, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7364, '❨❨1, 5, 4, 4❩, ❨0, −2, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7365, '❨❨1, 5, 4, 5❩, ❨0, −2, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);

  Test({LINENUM}7367, '❨❨1, 5, 4, 2❩, ❨0, −1, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7368, '❨❨1, 5, 4, 2❩, ❨0, 0, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7369, '❨❨1, 5, 4, 2❩, ❨0, 1, 4, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);

  Test({LINENUM}7371, '❨❨1, 5, 4, 2❩, ❨0, −2, 6, 5❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);

  Test({LINENUM}7373, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, 6❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7374, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, 7❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7375, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, 8❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);
  Test({LINENUM}7376, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, 9❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', False);
  Test({LINENUM}7377, '❨❨1, 5, 4, 2❩, ❨0, −2, 4, -9❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', True);

  Test({LINENUM}7379, '❨❨1, 2❩, ❨3, 4❩❩ ≤ ❨❨4, 6, 5, 4❩, ❨2, 0, 5, 8❩❩', failure, 'Cannot subtract two matrices of different sizes.');

  // - datetime objects: postponed

  // - invalid operands

  Test({LINENUM}7385, '"test" ≤ 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7386, '7 ≤ false', failure, 'Invalid function arguments.');
  Test({LINENUM}7387, '"LiU rocks" ≤ true', failure, 'Invalid function arguments.'); // could make it return True
  Test({LINENUM}7388, '❨2, 1, 4❩ ≤ ❨3, 2, i❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7389, '❨❨1, 3❩, ❨3, 4❩❩ ≤ ❨❨10, 5❩, ❨10, i❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7390, '❨2, 1, 4❩ ≤ ❨❨1, 5, 4, 2❩, ❨0, −1, 4, 5❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7391, '❨2, 1, 4❩ ≤ 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7392, '❨❨1, 2❩, ❨9, 4❩❩ ≤ 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7393, '"test" ≤ "testing"', failure, 'Invalid function arguments.');

  // - n-ary extension

  Test({LINENUM}7397, '1 ≤ 2 ≤ 3', True);
  Test({LINENUM}7398, '1 ≤ 1 ≤ 3', True);
  Test({LINENUM}7399, '1 ≤ 1 ≤ 1', True);
  Test({LINENUM}7400, '1 ≤ 2 ≤ 3 ≤ 4', True);
  Test({LINENUM}7401, '1 ≤ 2 ≤ 3 ≤ 3', True);
  Test({LINENUM}7402, '1 ≤ 2 ≤ 2 ≤ 4', True);
  Test({LINENUM}7403, '2 ≤ 2 ≤ 2 ≤ 2', True);
  Test({LINENUM}7404, '1 ≤ 2 ≤ 3 ≤ 4 ≤ 5 ≤ 6 ≤ 7 ≤ 8 ≤ 9 ≤ 10', True);
  Test({LINENUM}7405, '1 ≤ 2 ≤ 3 ≤ 4 ≤ 5 ≤ 5 ≤ 7 ≤ 8 ≤ 9 ≤ 10', True);
  Test({LINENUM}7406, '1 ≤ 2 ≤ 3 ≤ 4 ≤ 5 ≤ 6 ≤ 7 ≤ 8 ≤ 9 ≤ 10 ≤ 1E10 ≤ 1E100', True);
  Test({LINENUM}7407, '1 ≤ 2 ≤ 3 ≤ 4 ≤ 5 ≤ 6 ≤ 7 ≤ 8 ≤ 9 ≤ 10 ≤ 1E10 ≤ 1E100 ≤ 1E100', True);
  Test({LINENUM}7408, '-1 ≤ 2 ≤ 3 ≤ 4', True);

  Test({LINENUM}7410, '-1 ≤ -2 ≤ 3 ≤ 4', False);

  Test({LINENUM}7412, '1 ≤ 2 ≤ 1.9', False);
  Test({LINENUM}7413, '1 ≤ 1 ≤ -3', False);
  Test({LINENUM}7414, '1 ≤ 0.9 ≤ 1', False);
  Test({LINENUM}7415, '1 ≤ -2 ≤ 3 ≤ 4', False);
  Test({LINENUM}7416, '1 ≤ 2 ≤ -3 ≤ 3', False);
  Test({LINENUM}7417, '1 ≤ 2 ≤ 2 ≤ -4', False);
  Test({LINENUM}7418, '2 ≤ 2 ≤ 2 ≤ 1.5', False);
  Test({LINENUM}7419, '1 ≤ 2 ≤ 3 ≤ 4 ≤ 5 ≤ -6 ≤ 7 ≤ 8 ≤ 9 ≤ 10', False);
  Test({LINENUM}7420, '1 ≤ 2 ≤ 3 ≤ 4 ≤ 5 ≤ 5 ≤ 7 ≤ 8 ≤ 9 ≤ 8', False);
  Test({LINENUM}7421, '1 ≤ 2 ≤ 3 ≤ 4 ≤ 5 ≤ 6 ≤ 7 ≤ 8 ≤ 7 ≤ 10 ≤ 1E10 ≤ 1E100', False);
  Test({LINENUM}7422, '1 ≤ 2 ≤ 3 ≤ 4 ≤ 5 ≤ 6 ≤ 7 ≤ 8 ≤ 9 ≤ 10 ≤ 1E10 ≤ 1E-100 ≤ 1E100', False);
  Test({LINENUM}7423, '-1 ≤ 2 ≤ 3 ≤ -4', False);

  // Greater than

  // - numbers

  Test({LINENUM}7429, '5 > 7', False);
  Test({LINENUM}7430, '6 > 7', False);
  Test({LINENUM}7431, '7 > 7', False);
  Test({LINENUM}7432, '8 > 7', True);
  Test({LINENUM}7433, '9 > 7', True);
  Test({LINENUM}7434, '-5 > 7', False);
  Test({LINENUM}7435, '0 > 7', False);

  Test({LINENUM}7437, '-5 > -3', False);
  Test({LINENUM}7438, '-4 > -3', False);
  Test({LINENUM}7439, '-3 > -3', False);
  Test({LINENUM}7440, '-2 > -3', True);
  Test({LINENUM}7441, '-1 > -3', True);
  Test({LINENUM}7442, '0 > -3', True);
  Test({LINENUM}7443, '1 > -3', True);

  Test({LINENUM}7445, '0 > 0', False);

  Test({LINENUM}7447, '71176761671531055 > 71176761671531057', False);
  Test({LINENUM}7448, '71176761671531056 > 71176761671531057', False);
  Test({LINENUM}7449, '71176761671531057 > 71176761671531057', False);
  Test({LINENUM}7450, '71176761671531058 > 71176761671531057', True);
  Test({LINENUM}7451, '71176761671531059 > 71176761671531057', True);

  Test({LINENUM}7453, '71176761671531055 > -71176761671531057', True);
  Test({LINENUM}7454, '-71176761671531055 > -71176761671531057', True);
  Test({LINENUM}7455, '-71176761671531056 > -71176761671531057', True);
  Test({LINENUM}7456, '-71176761671531057 > -71176761671531057', False);
  Test({LINENUM}7457, '-71176761671531058 > -71176761671531057', False);
  Test({LINENUM}7458, '-71176761671531059 > -71176761671531057', False);

  Test({LINENUM}7460, '7/11 > 8/11', False);
  Test({LINENUM}7461, '8/11 > 8/11', False);
  Test({LINENUM}7462, '9/11 > 8/11', True);

  Test({LINENUM}7464, '16.95 > 16.97', False);
  Test({LINENUM}7465, '16.96 > 16.97', False);
  Test({LINENUM}7466, '16.97 > 16.97', False);
  Test({LINENUM}7467, '16.98 > 16.97', True);
  Test({LINENUM}7468, '16.99 > 16.97', True);
  Test({LINENUM}7469, '17.00 > 16.97', True);

  Test({LINENUM}7471, '5 > 14/3', True);
  Test({LINENUM}7472, '5 > 14/3 + 1/3', False);
  Test({LINENUM}7473, '5 > 16/3', False);

  Test({LINENUM}7475, '17/3 > 6', False);
  Test({LINENUM}7476, '17/3 + 1/3 > 6', False);
  Test({LINENUM}7477, '19/3 > 6', True);

  Test({LINENUM}7479, '-5/9 > -1', True);
  Test({LINENUM}7480, '-5/9 - 4/9 > -1', False);
  Test({LINENUM}7481, '-15/9 > -1', False);

  Test({LINENUM}7483, '5 > 4.9', True);
  Test({LINENUM}7484, '5 > 5.0', False);
  Test({LINENUM}7485, '5 > 5.1', False);

  Test({LINENUM}7487, '4.8 > 5', False);
  Test({LINENUM}7488, '4.9 > 5', False);
  Test({LINENUM}7489, '5.0 > 5', False);
  Test({LINENUM}7490, '5.1 > 5', True);
  Test({LINENUM}7491, '5.2 > 5', True);
  Test({LINENUM}7492, '4.8 > -5', True);

  Test({LINENUM}7494, '1/2 > 0.49', True);
  Test({LINENUM}7495, '1/2 > 0.50', False);
  Test({LINENUM}7496, '1/2 > 0.51', False);
  Test({LINENUM}7497, '1/2 > -0.51', True);

  Test({LINENUM}7499, '2.0 > 13/7', True);
  Test({LINENUM}7500, '2.0 > 13/7 + 1/7', False);
  Test({LINENUM}7501, '2.0 > 15/7', False);
  Test({LINENUM}7502, '2.0 > -15/7', True);
  Test({LINENUM}7503, '-2.0 > -15/7', True);

  Test({LINENUM}7505, '18234/9117319 > 0.002', False);
  Test({LINENUM}7506, '18235/9117319 > 0.002', True);

  Test({LINENUM}7508, '18234/9117319 > 2/1000', False);
  Test({LINENUM}7509, '18235/9117319 > 2/1000', True);

  Test({LINENUM}7511, '18234/9117319 > 2‰', False);
  Test({LINENUM}7512, '18235/9117319 > 2‰', True);

  Test({LINENUM}7514, '18234/9117319 > -2‰', True);
  Test({LINENUM}7515, '18235/9117319 > -2‰', True);

  Test({LINENUM}7517, 'i > 8', failure, 'Complex numbers have no order.');
  Test({LINENUM}7518, '5 > i', failure, 'Complex numbers have no order.');
  Test({LINENUM}7519, '3 + 5⋅i > 4 + 3⋅i', failure, 'Complex numbers have no order.');
  Test({LINENUM}7520, 'i > 8/9', failure, 'Complex numbers have no order.');
  Test({LINENUM}7521, 'i > 8.9', failure, 'Complex numbers have no order.');
  Test({LINENUM}7522, '9999E99 > i', failure, 'Complex numbers have no order.');
  Test({LINENUM}7523, 'i > 0', failure, 'Complex numbers have no order.');
  Test({LINENUM}7524, 'i > i', failure, 'Complex numbers have no order.');

  // - real vectors

  Test({LINENUM}7528, '❨5, 7, 3, 2❩ > ❨2, 0, 2, −2❩', True);
  Test({LINENUM}7529, '❨5, 7, 3, 2❩ > ❨3, 0, 2, −2❩', True);
  Test({LINENUM}7530, '❨5, 7, 3, 2❩ > ❨4, 0, 2, −2❩', True);
  Test({LINENUM}7531, '❨5, 7, 3, 2❩ > ❨5, 0, 2, −2❩', False);
  Test({LINENUM}7532, '❨5, 7, 3, 2❩ > ❨6, 0, 2, −2❩', False);
  Test({LINENUM}7533, '❨5, 7, 3, 2❩ > ❨7, 0, 2, −2❩', False);

  Test({LINENUM}7535, '❨5, 7, 3, -2❩ > ❨2, 0, 2, −2❩', False);

  Test({LINENUM}7537, '❨5, 7, 3, -2❩ > ❨2, 0, 2❩', failure, 'Cannot subtract two vectors of unequal dimension.');

  // - vector is positive

  Test({LINENUM}7541, '❨1, 2❩ > 0', True);
  Test({LINENUM}7542, '❨5, 7, 3, 2❩ > 0', True);
  Test({LINENUM}7543, '❨5, 7, 3, 2, 2, 7❩ > 0', True);
  Test({LINENUM}7544, '❨5, 7, 3, 2, 2, 7, 5, 7, 22.1, 1E10❩ > 0', True);

  Test({LINENUM}7546, '❨1, 2, 0❩ > 0', False);
  Test({LINENUM}7547, '❨5, 7, -3, 2❩ > 0', False);
  Test({LINENUM}7548, '❨5, -7, 3, 2, 2, 7❩ > 0', False);
  Test({LINENUM}7549, '❨5, 7, 3, 2, 2, 0, 7, 5, 7, 22.1, 1E10❩ > 0', False);

  Test({LINENUM}7551, '❨-1, 2❩ > 0', False);
  Test({LINENUM}7552, '❨-5, -7, 3, 2❩ > 0', False);
  Test({LINENUM}7553, '❨0, 5, 7, 3, 2, 2, 7❩ > 0', False);
  Test({LINENUM}7554, '❨5, 7, 3, 2, 2, 7, 5, 7, 22.1, -1E10❩ > 0', False);

  Test({LINENUM}7556, '❨1, 0❩ > 0', False);
  Test({LINENUM}7557, '❨5, 0, -3, 2❩ > 0', False);
  Test({LINENUM}7558, '❨5, 7, 3, -2, 2, 7❩ > 0', False);
  Test({LINENUM}7559, '❨5, 7, 3, 2, 0, 7, 5, 7, 22.1, 1E10❩ > 0', False);

  // - real matrices

  Test({LINENUM}7563, '❨❨5, 7❩, ❨3, −5❩❩ > ❨❨2, 4❩, ❨0, −10❩❩', True);
  Test({LINENUM}7564, '❨❨5, 7❩, ❨3, −5❩❩ > ❨❨3, 4❩, ❨0, −10❩❩', True);
  Test({LINENUM}7565, '❨❨5, 7❩, ❨3, −5❩❩ > ❨❨4, 4❩, ❨0, −10❩❩', True);
  Test({LINENUM}7566, '❨❨5, 7❩, ❨3, −5❩❩ > ❨❨5, 4❩, ❨0, −10❩❩', False);
  Test({LINENUM}7567, '❨❨5, 7❩, ❨3, −5❩❩ > ❨❨6, 4❩, ❨0, −10❩❩', False);
  Test({LINENUM}7568, '❨❨5, 7❩, ❨3, −5❩❩ > ❨❨7, 4❩, ❨0, −10❩❩', False);

  Test({LINENUM}7570, '❨❨5, 7, 7❩, ❨3, −5, 2❩❩ > ❨❨7, 4❩, ❨0, −10❩❩', failure, 'Cannot subtract two matrices of different sizes.');

  // - matrix is positive

  Test({LINENUM}7574, '❨❨5, 7❩, ❨3, 5❩❩ > 0', True);

  Test({LINENUM}7576, '❨❨5, 0❩, ❨3, 5❩❩ > 0', False);
  Test({LINENUM}7577, '❨❨5, 7❩, ❨3, 0❩❩ > 0', False);
  Test({LINENUM}7578, '❨❨5, -7❩, ❨3, 5❩❩ > 0', False);
  Test({LINENUM}7579, '❨❨5, 7❩, ❨3, -5❩❩ > 0', False);
  Test({LINENUM}7580, '❨❨5, -7❩, ❨0, 5❩❩ > 0', False);

  Test({LINENUM}7582, 'IdentityMatrix(100) > 0', False);

  // - datetime objects: postponed

  // - invalid operands

  Test({LINENUM}7588, '"test" > 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7589, '7 > false', failure, 'Invalid function arguments.');
  Test({LINENUM}7590, '"LiU rocks" > true', failure, 'Invalid function arguments.'); // could make it return False
  Test({LINENUM}7591, '❨2, 1, 4❩ > ❨3, 2, i❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7592, '❨❨1, 3❩, ❨3, 4❩❩ > ❨❨10, 5❩, ❨10, i❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7593, '❨2, 1, 4❩ > ❨❨1, 5, 4, 2❩, ❨0, −1, 4, 5❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7594, '❨2, 1, 4❩ > 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7595, '❨❨1, 2❩, ❨9, 4❩❩ > 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7596, '"test" > "testing"', failure, 'Invalid function arguments.');

  // - n-ary extension

  Test({LINENUM}7600, '3 > 2 > 1', True);
  Test({LINENUM}7601, '4 > 3 > 2 > 1', True);
  Test({LINENUM}7602, '4 > 3.2 > 2 > 1', True);
  Test({LINENUM}7603, '5 > 4 > 3 > 2 > 1', True);
  Test({LINENUM}7604, '5 > 4 > 3 > 2 > 1 > 0 > -1 > -2', True);
  Test({LINENUM}7605, '10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2 > 1', True);
  Test({LINENUM}7606, '1E100 > 1E10 > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2 > 1', True);

  Test({LINENUM}7608, '3 > 2 > 2', False);
  Test({LINENUM}7609, '4 > 3 > 1 > 1', False);
  Test({LINENUM}7610, '3.2 > 3.2 > 3.2 > 1', False);
  Test({LINENUM}7611, '3 > -2 > 1', False);
  Test({LINENUM}7612, '4 > 3 > 2 > 3', False);
  Test({LINENUM}7613, '4 > 4.1 > 2 > 1', False);
  Test({LINENUM}7614, '5 > 4 > 3 > -2 > 1', False);
  Test({LINENUM}7615, '5 > 4 > 3 > 2 > -1 > 0 > -1 > -2', False);
  Test({LINENUM}7616, '10 > 9 > 8 > 7 > 6 > 5 > -4.5 > 3 > 2 > 1', False);
  Test({LINENUM}7617, '1E100 > 1E-10 > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2 > 1', False);

  // Greater than or equal to

  // - numbers

  Test({LINENUM}7623, '5 ≥ 7', False);
  Test({LINENUM}7624, '6 ≥ 7', False);
  Test({LINENUM}7625, '7 ≥ 7', True);
  Test({LINENUM}7626, '8 ≥ 7', True);
  Test({LINENUM}7627, '9 ≥ 7', True);
  Test({LINENUM}7628, '-5 ≥ 7', False);
  Test({LINENUM}7629, '0 ≥ 7', False);

  Test({LINENUM}7631, '-5 ≥ -3', False);
  Test({LINENUM}7632, '-4 ≥ -3', False);
  Test({LINENUM}7633, '-3 ≥ -3', True);
  Test({LINENUM}7634, '-2 ≥ -3', True);
  Test({LINENUM}7635, '-1 ≥ -3', True);
  Test({LINENUM}7636, '0 ≥ -3', True);
  Test({LINENUM}7637, '1 ≥ -3', True);

  Test({LINENUM}7639, '0 ≥ 0', True);

  Test({LINENUM}7641, '71176761671531055 ≥ 71176761671531057', False);
  Test({LINENUM}7642, '71176761671531056 ≥ 71176761671531057', False);
  Test({LINENUM}7643, '71176761671531057 ≥ 71176761671531057', True);
  Test({LINENUM}7644, '71176761671531058 ≥ 71176761671531057', True);
  Test({LINENUM}7645, '71176761671531059 ≥ 71176761671531057', True);

  Test({LINENUM}7647, '71176761671531055 ≥ -71176761671531057', True);
  Test({LINENUM}7648, '-71176761671531055 ≥ -71176761671531057', True);
  Test({LINENUM}7649, '-71176761671531056 ≥ -71176761671531057', True);
  Test({LINENUM}7650, '-71176761671531057 ≥ -71176761671531057', True);
  Test({LINENUM}7651, '-71176761671531058 ≥ -71176761671531057', False);
  Test({LINENUM}7652, '-71176761671531059 ≥ -71176761671531057', False);

  Test({LINENUM}7654, '7/11 ≥ 8/11', False);
  Test({LINENUM}7655, '8/11 ≥ 8/11', True);
  Test({LINENUM}7656, '9/11 ≥ 8/11', True);

  Test({LINENUM}7658, '16.95 ≥ 16.97', False);
  Test({LINENUM}7659, '16.96 ≥ 16.97', False);
  Test({LINENUM}7660, '16.97 ≥ 16.97', True);
  Test({LINENUM}7661, '16.98 ≥ 16.97', True);
  Test({LINENUM}7662, '16.99 ≥ 16.97', True);
  Test({LINENUM}7663, '17.00 ≥ 16.97', True);

  Test({LINENUM}7665, '5 ≥ 14/3', True);
  Test({LINENUM}7666, '5 ≥ 14/3 + 1/3', True);
  Test({LINENUM}7667, '5 ≥ 16/3', False);

  Test({LINENUM}7669, '17/3 ≥ 6', False);
  Test({LINENUM}7670, '17/3 + 1/3 ≥ 6', True);
  Test({LINENUM}7671, '19/3 ≥ 6', True);

  Test({LINENUM}7673, '-5/9 ≥ -1', True);
  Test({LINENUM}7674, '-5/9 - 4/9 ≥ -1', True);
  Test({LINENUM}7675, '-15/9 ≥ -1', False);

  Test({LINENUM}7677, '5 ≥ 4.9', True);
  Test({LINENUM}7678, '5 ≥ 5.0', True);
  Test({LINENUM}7679, '5 ≥ 5.1', False);

  Test({LINENUM}7681, '4.8 ≥ 5', False);
  Test({LINENUM}7682, '4.9 ≥ 5', False);
  Test({LINENUM}7683, '5.0 ≥ 5', True);
  Test({LINENUM}7684, '5.1 ≥ 5', True);
  Test({LINENUM}7685, '5.2 ≥ 5', True);
  Test({LINENUM}7686, '4.8 ≥ -5', True);

  Test({LINENUM}7688, '1/2 ≥ 0.49', True);
  Test({LINENUM}7689, '1/2 ≥ 0.50', True);
  Test({LINENUM}7690, '1/2 ≥ 0.51', False);
  Test({LINENUM}7691, '1/2 ≥ -0.51', True);

  Test({LINENUM}7693, '2.0 ≥ 13/7', True);
  Test({LINENUM}7694, '2.0 ≥ 13/7 + 1/7', True);
  Test({LINENUM}7695, '2.0 ≥ 15/7', False);
  Test({LINENUM}7696, '2.0 ≥ -15/7', True);
  Test({LINENUM}7697, '-2.0 ≥ -15/7', True);

  Test({LINENUM}7699, '18234/9117319 ≥ 0.002', False);
  Test({LINENUM}7700, '18235/9117319 ≥ 0.002', True);

  Test({LINENUM}7702, '18234/9117319 ≥ 2/1000', False);
  Test({LINENUM}7703, '18235/9117319 ≥ 2/1000', True);

  Test({LINENUM}7705, '18234/9117319 ≥ 2‰', False);
  Test({LINENUM}7706, '18235/9117319 ≥ 2‰', True);

  Test({LINENUM}7708, '18234/9117319 ≥ -2‰', True);
  Test({LINENUM}7709, '18235/9117319 ≥ -2‰', True);

  Test({LINENUM}7711, 'i ≥ 8', failure, 'Complex numbers have no order.');
  Test({LINENUM}7712, '5 ≥ i', failure, 'Complex numbers have no order.');
  Test({LINENUM}7713, '3 + 5⋅i ≥ 4 + 3⋅i', failure, 'Complex numbers have no order.');
  Test({LINENUM}7714, 'i ≥ 8/9', failure, 'Complex numbers have no order.');
  Test({LINENUM}7715, 'i ≥ 8.9', failure, 'Complex numbers have no order.');
  Test({LINENUM}7716, '9999E99 ≥ i', failure, 'Complex numbers have no order.');
  Test({LINENUM}7717, 'i ≥ 0', failure, 'Complex numbers have no order.');
  Test({LINENUM}7718, 'i ≥ i', failure, 'Complex numbers have no order.');

  // - real vectors

  Test({LINENUM}7722, '❨5, 7, 3, 2❩ ≥ ❨2, 0, 2, −2❩', True);
  Test({LINENUM}7723, '❨5, 7, 3, 2❩ ≥ ❨3, 0, 2, −2❩', True);
  Test({LINENUM}7724, '❨5, 7, 3, 2❩ ≥ ❨4, 0, 2, −2❩', True);
  Test({LINENUM}7725, '❨5, 7, 3, 2❩ ≥ ❨5, 0, 2, −2❩', True);
  Test({LINENUM}7726, '❨5, 7, 3, 2❩ ≥ ❨6, 0, 2, −2❩', False);
  Test({LINENUM}7727, '❨5, 7, 3, 2❩ ≥ ❨7, 0, 2, −2❩', False);

  Test({LINENUM}7729, '❨5, 7, 3, -2❩ ≥ ❨2, 0, 2, −2❩', True);

  Test({LINENUM}7731, '❨5, 7, 3, -2❩ ≥ ❨2, 0, 2❩', failure, 'Cannot subtract two vectors of unequal dimension.');

  // - vector is non-negative

  Test({LINENUM}7735, '❨1, 2❩ ≥ 0', True);
  Test({LINENUM}7736, '❨5, 7, 3, 2❩ ≥ 0', True);
  Test({LINENUM}7737, '❨5, 7, 3, 2, 2, 7❩ ≥ 0', True);
  Test({LINENUM}7738, '❨5, 7, 3, 2, 2, 7, 5, 7, 22.1, 1E10❩ ≥ 0', True);

  Test({LINENUM}7740, '❨1, 2, 0❩ ≥ 0', True);
  Test({LINENUM}7741, '❨5, 7, -3, 2❩ ≥ 0', False);
  Test({LINENUM}7742, '❨5, -7, 3, 2, 2, 7❩ ≥ 0', False);
  Test({LINENUM}7743, '❨5, 7, 3, 2, 2, 0, 7, 5, 7, 22.1, 1E10❩ ≥ 0', True);

  Test({LINENUM}7745, '❨-1, 2❩ ≥ 0', False);
  Test({LINENUM}7746, '❨-5, -7, 3, 2❩ ≥ 0', False);
  Test({LINENUM}7747, '❨0, 5, 7, 3, 2, 2, 7❩ ≥ 0', True);
  Test({LINENUM}7748, '❨5, 7, 3, 2, 2, 7, 5, 7, 22.1, -1E10❩ ≥ 0', False);

  Test({LINENUM}7750, '❨1, 0❩ ≥ 0', True);
  Test({LINENUM}7751, '❨5, 0, -3, 2❩ ≥ 0', False);
  Test({LINENUM}7752, '❨5, 7, 3, -2, 2, 7❩ ≥ 0', False);
  Test({LINENUM}7753, '❨5, 7, 3, 2, 0, 7, 5, 7, 22.1, 1E10❩ ≥ 0', True);

  // - real matrices

  Test({LINENUM}7757, '❨❨5, 7❩, ❨3, −5❩❩ ≥ ❨❨2, 4❩, ❨0, −10❩❩', True);
  Test({LINENUM}7758, '❨❨5, 7❩, ❨3, −5❩❩ ≥ ❨❨3, 4❩, ❨0, −10❩❩', True);
  Test({LINENUM}7759, '❨❨5, 7❩, ❨3, −5❩❩ ≥ ❨❨4, 4❩, ❨0, −10❩❩', True);
  Test({LINENUM}7760, '❨❨5, 7❩, ❨3, −5❩❩ ≥ ❨❨5, 4❩, ❨0, −10❩❩', True);
  Test({LINENUM}7761, '❨❨5, 7❩, ❨3, −5❩❩ ≥ ❨❨6, 4❩, ❨0, −10❩❩', False);
  Test({LINENUM}7762, '❨❨5, 7❩, ❨3, −5❩❩ ≥ ❨❨7, 4❩, ❨0, −10❩❩', False);

  Test({LINENUM}7764, '❨❨5, 7, 7❩, ❨3, −5, 2❩❩ ≥ ❨❨7, 4❩, ❨0, −10❩❩', failure, 'Cannot subtract two matrices of different sizes.');

  // - matrix is non-negative

  Test({LINENUM}7768, '❨❨5, 7❩, ❨3, 5❩❩ ≥ 0', True);

  Test({LINENUM}7770, '❨❨5, 0❩, ❨3, 5❩❩ ≥ 0', True);
  Test({LINENUM}7771, '❨❨5, 7❩, ❨3, 0❩❩ ≥ 0', True);
  Test({LINENUM}7772, '❨❨5, -7❩, ❨3, 5❩❩ ≥ 0', False);
  Test({LINENUM}7773, '❨❨5, 7❩, ❨3, -5❩❩ ≥ 0', False);
  Test({LINENUM}7774, '❨❨5, -7❩, ❨0, 5❩❩ ≥ 0', False);

  Test({LINENUM}7776, 'IdentityMatrix(100) ≥ 0', True);

  // - datetime objects: postponed

  // - invalid operands

  Test({LINENUM}7782, '"test" ≥ 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7783, '7 ≥ false', failure, 'Invalid function arguments.');
  Test({LINENUM}7784, '"LiU rocks" ≥ true', failure, 'Invalid function arguments.'); // could make it return False
  Test({LINENUM}7785, '❨2, 1, 4❩ ≥ ❨3, 2, i❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7786, '❨❨1, 3❩, ❨3, 4❩❩ ≥ ❨❨10, 5❩, ❨10, i❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7787, '❨2, 1, 4❩ ≥ ❨❨1, 5, 4, 2❩, ❨0, −1, 4, 5❩❩', failure, 'Invalid function arguments.');
  Test({LINENUM}7788, '❨2, 1, 4❩ ≥ 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7789, '❨❨1, 2❩, ❨9, 4❩❩ ≥ 7', failure, 'Invalid function arguments.');
  Test({LINENUM}7790, '"test" ≥ "testing"', failure, 'Invalid function arguments.');

  // - n-ary extension

  Test({LINENUM}7794, '5 ≥ 4 ≥ 3', True);
  Test({LINENUM}7795, '5 ≥ 4 ≥ 3 ≥ 2 ≥ 1', True);
  Test({LINENUM}7796, '5 ≥ 4 ≥ 3 ≥ 2 ≥ 1 ≥ 0 ≥ -1', True);
  Test({LINENUM}7797, '5 ≥ 5 ≥ 3', True);
  Test({LINENUM}7798, '5 ≥ 4 ≥ 4 ≥ 4 ≥ 1', True);
  Test({LINENUM}7799, '5 ≥ 4 ≥ 3 ≥ 2 ≥ 1 ≥ 1 ≥ -1', True);
  Test({LINENUM}7800, '5 ≥ 5 ≥ 5', True);
  Test({LINENUM}7801, '5 ≥ 4 ≥ 3 ≥ 2 ≥ 1', True);
  Test({LINENUM}7802, '4 ≥ 4 ≥ 4 ≥ 2 ≥ 1 ≥ 0 ≥ 0', True);
  Test({LINENUM}7803, '5 ≥ 4.3 ≥ 3', True);
  Test({LINENUM}7804, '5 ≥ 4.3 ≥ 4.3 ≥ 2 ≥ 1', True);
  Test({LINENUM}7805, '5 ≥ 4 ≥ 3 ≥ 2 ≥ 1.999 ≥ 0 ≥ -1', True);
  Test({LINENUM}7806, '1E10 ≥ 5 ≥ 4 ≥ 3 ≥ 2 ≥ 1.999 ≥ 0 ≥ -1', True);

  Test({LINENUM}7808, '5 ≥ 4 ≥ 5', False);
  Test({LINENUM}7809, '5 ≥ 4 ≥ 4.1 ≥ 2 ≥ 1', False);
  Test({LINENUM}7810, '5 ≥ 8 ≥ 3 ≥ 2 ≥ 1 ≥ 0 ≥ -1', False);
  Test({LINENUM}7811, '5 ≥ 5 ≥ 6', False);
  Test({LINENUM}7812, '5 ≥ 4 ≥ -4 ≥ 4 ≥ 1', False);
  Test({LINENUM}7813, '-5 ≥ 4 ≥ 3 ≥ 2 ≥ 1 ≥ 1 ≥ -1', False);
  Test({LINENUM}7814, '5 ≥ 5 ≥ 5.000000001', False);
  Test({LINENUM}7815, '5 ≥ 4 ≥ -3 ≥ 2 ≥ 1', False);
  Test({LINENUM}7816, '4 ≥ 4 ≥ 4.001 ≥ 2 ≥ 1 ≥ 0 ≥ 0', False);
  Test({LINENUM}7817, '-5 ≥ 4.3 ≥ 3', False);
  Test({LINENUM}7818, '5 ≥ 4.3 ≥ 4.31 ≥ 2 ≥ 1', False);
  Test({LINENUM}7819, '5 ≥ 4 ≥ 3 ≥ -2 ≥ 1.999 ≥ 0 ≥ -1', False);
  Test({LINENUM}7820, '1E-10 ≥ 5 ≥ 4 ≥ 3 ≥ 2 ≥ 1.999 ≥ 0 ≥ -1', False);

  // Equals

  Test({LINENUM}7824, '1 + 1 = 2', True);
  Test({LINENUM}7825, '1 + 1/2 + 0.5 + i - i = 2', True);
  Test({LINENUM}7826, '1 + 1/2 + 0.5 + i - i = 2.0', True);
  Test({LINENUM}7827, '1 + 1/2 + 0.5 + i - i = 1/2 + 3/2', True);
  Test({LINENUM}7828, '1 + 1/2 + 0.5 + i - i = 2 + i - i', True);

  Test({LINENUM}7830, '1 = 0', False);
  Test({LINENUM}7831, '1 = 1', True);
  Test({LINENUM}7832, '1 = 2', False);

  Test({LINENUM}7834, '123456789123455 = 123456789123456', False);
  Test({LINENUM}7835, '123456789123456 = 123456789123456', True);
  Test({LINENUM}7836, '123456789123457 = 123456789123456', False);

  Test({LINENUM}7838, '123456789123456 = -123456789123456', False);

  Test({LINENUM}7840, '0 = 0', True);
  Test({LINENUM}7841, '0 = -0', True);

  Test({LINENUM}7843, '52697415 = 52697415', True);
  Test({LINENUM}7844, '-52697415 = -52697415', True);
  Test({LINENUM}7845, '-52697415 = 52697415', False);
  Test({LINENUM}7846, '52697416 = 52697415', False);

  Test({LINENUM}7848, '84012636 = 8490516', False);
  Test({LINENUM}7849, '84012636 = -8490516', False);

  Test({LINENUM}7851, '123456789123456789 = 123456789123456789', True);
  Test({LINENUM}7852, '123456789123456789 = 123456789123456788', False);
  Test({LINENUM}7853, '123456789123456789 = -123456789123456789', False);

  Test({LINENUM}7855, '42 = 40 + 2', True);
  Test({LINENUM}7856, '42 = 40 + 3', False);
  Test({LINENUM}7857, '42 = 40 - 2', False);

  Test({LINENUM}7859, '100 + 23 = 100 + 20 + 3', True);

  Test({LINENUM}7861, '75520864896 = 75520864895', False);
  Test({LINENUM}7862, '75520864896 = 75520864896', True);
  Test({LINENUM}7863, '75520864896 = 75520864897', False);
  Test({LINENUM}7864, '75520864896 = 0', False);

  Test({LINENUM}7866, '17/2 = 17/2', True);
  Test({LINENUM}7867, '17/2 = 19/2', False);
  Test({LINENUM}7868, '17/2 = 17/3', False);
  Test({LINENUM}7869, '17/2 = 15/2 + 1/2 + 1/2', True);
  Test({LINENUM}7870, '17/2 = 15/2 + 1/2 + 3/2', False);

  Test({LINENUM}7872, '-17/2 = 17/2', False);
  Test({LINENUM}7873, '17/2 = -17/2', False);
  Test({LINENUM}7874, '-17/2 = -17/2', True);
  Test({LINENUM}7875, '15/2 = 17/2', False);

  Test({LINENUM}7877, '189561/9849133 = 189561/9849133', True);
  Test({LINENUM}7878, '189561/9849133 = 189562/9849133', False);
  Test({LINENUM}7879, '189561/9849133 = 189561/9849132', False);
  Test({LINENUM}7880, '189561/9849133 = -189561/9849133', False);
  Test({LINENUM}7881, '189562/9849133 = 189561/9849134', False);
  Test({LINENUM}7882, '-189561/9849133 = -189561/9849133', True);

  Test({LINENUM}7884, '189561/9849133 = 189560/9849133 + 1/9849133', True);

  Test({LINENUM}7886, '189561/9849133 = 1/2', False);
  Test({LINENUM}7887, '189561/9849133 = -1/2', False);
  Test({LINENUM}7888, '189561/9849133 = 0', False);
  Test({LINENUM}7889, '189561/9849133 = 18916518/1898105687', False);
  Test({LINENUM}7890, '189561/9849133 = 9849133/189561', False);

  Test({LINENUM}7892, '1/2 - 1/2 = 1/3 - 1/3', True);
  Test({LINENUM}7893, '1/99 - 1/99 = 7/5 - 7/5', True);
  Test({LINENUM}7894, '1/2 - 1/2 = 1/3 - 1/3', True);

  Test({LINENUM}7896, '1/21 − 38/51 + 83/119 = 523/517 − 325/17 + 92/3 − 331186/26367', True);

  Test({LINENUM}7898, '1/21 − 38/51 + 83/119 = 523/517 − 325/17 + 92/3 − 331187/26367', False);
  Test({LINENUM}7899, '1/21 − 38/51 + 83/119 = 523/516 − 325/17 + 92/3 − 331186/26367', False);
  Test({LINENUM}7900, '1/21 − 38/51 + 83/119 = 523/517 − 325/17 + 92/3 + 331186/26367', False);
  Test({LINENUM}7901, '2/21 − 38/51 + 83/119 = 523/517 − 325/17 + 92/3 − 331186/26367', False);
  Test({LINENUM}7902, '1/21 − 38/51 + 83/120 = 523/517 − 325/17 + 92/3 − 331186/26367', False);
  Test({LINENUM}7903, '0 = 523/517 − 325/17 + 92/3 − 331186/26367', True);
  Test({LINENUM}7904, '1/21 − 38/51 + 83/119 = 0', True);

  Test({LINENUM}7906, '123.456 = 123.456', True);
  Test({LINENUM}7907, '123.456 = 123.457', False);
  Test({LINENUM}7908, '123.456 = 123.4560000001', False);
  Test({LINENUM}7909, '123.456000000001 = 123.456', False);
  Test({LINENUM}7910, '123.456 = -123.456', False);
  Test({LINENUM}7911, '123.456 = 123.0', False);

  Test({LINENUM}7913, '-123.456 = -123.456', True);
  Test({LINENUM}7914, '-123.456 = -123.556', False);
  Test({LINENUM}7915, '-123.456 = -123.4559999999', False);

  Test({LINENUM}7917, '123E100 = 123E100', True);

  Test({LINENUM}7919, '123E100 = 123E101', False);
  Test({LINENUM}7920, '123E100 = 123.000000001E100', False);
  Test({LINENUM}7921, '122.99999999999E100 = 123E100', False);
  Test({LINENUM}7922, '123.0E100 = 123E100', True);
  Test({LINENUM}7923, '-123E100 = -123E100', True);
  Test({LINENUM}7924, '123E100 = -123E100', False);
  Test({LINENUM}7925, '123E100 = 123E200', False);
  Test({LINENUM}7926, '123E100 = 0', False);

  Test({LINENUM}7928, '189.5613E200 = 189.5613E200', True);
  Test({LINENUM}7929, '189.5613E200 = 189.5614E200', False);
  Test({LINENUM}7930, '189.5613E200 = 189.5613000001E200', False);
  Test({LINENUM}7931, '189.5612999999E200 = 189.5613E200', False);
  Test({LINENUM}7932, '-189.5613E200 = -189.5613E200', True);
  Test({LINENUM}7933, '189.5613E200 = 189.5613E-200', False);
  Test({LINENUM}7934, '189.5613E-200 = 189.5613E-200', True);
  Test({LINENUM}7935, '-189.5613E-200 = -189.5613E-200', True);

  Test({LINENUM}7937, '189.5613E-200 = 189.5613E-200', True);
  Test({LINENUM}7938, '189.5614E-200 = 189.5613E-200', False);
  Test({LINENUM}7939, '189.561300001E-200 = 189.5613E-200', False);
  Test({LINENUM}7940, '189.5613E-200 = 189.5612999999E-200', False);

  Test({LINENUM}7942, 'π = 3.1415926535797932384626', False);

  Test({LINENUM}7944, 'e = exp(1)', True);
  Test({LINENUM}7945, 'e = exp(1.01)', False);

  Test({LINENUM}7947, 'e = π', False);
  Test({LINENUM}7948, '0⋅e = 0⋅π', True);

  Test({LINENUM}7950, '3 + 5⋅i = 3 + 5⋅i', True);
  Test({LINENUM}7951, '3 + 5⋅i = 3 + 6⋅i', False);
  Test({LINENUM}7952, '3 + 5⋅i = 3 + 5.0000000000001⋅i', False);
  Test({LINENUM}7953, '3 + 5⋅i = 2.999999999999 + 5⋅i', False);
  Test({LINENUM}7954, '3 + 5⋅i = 3', False);
  Test({LINENUM}7955, '3 + 5⋅i = 5⋅i', False);
  Test({LINENUM}7956, '3 + 5⋅i = 3 − 5⋅i', False);
  Test({LINENUM}7957, '3 − 5⋅i = 3 − 5⋅i', True);
  Test({LINENUM}7958, '3 + 5⋅i = 3.00000000001 + 5⋅i', False);
  Test({LINENUM}7959, '3.0000000001 + 5⋅i = 3 + 5⋅i', False);

  Test({LINENUM}7961, 'i = i', True);
  Test({LINENUM}7962, 'i = -i', False);
  Test({LINENUM}7963, '1/i = -i', True);

  Test({LINENUM}7965, '1/7 + 6/7 = 1', True);
  Test({LINENUM}7966, '2/7 + 6/7 = 1', False);

  Test({LINENUM}7968, '2 = 12/9 + 6/9', True);
  Test({LINENUM}7969, '2 = 12/9 + 7/9', False);

  Test({LINENUM}7971, '1/2 + 1/2 = 1', True);
  Test({LINENUM}7972, '1/2 + 1/2 = 3/2 - 1/2', True);
  Test({LINENUM}7973, '1/2 + 1/2 = 1.0', True);
  Test({LINENUM}7974, '1/2 + 1/2 = 1.0 + i - i', True);

  Test({LINENUM}7976, '1/2 = 0.5', True);
  Test({LINENUM}7977, '1/2 = 0.5 + i - i', True);
  Test({LINENUM}7978, '0.75 = 3/4', True);
  Test({LINENUM}7979, '-0.75 = -3/4', True);
  Test({LINENUM}7980, '0.75 + i - i = 3/4', True);
  Test({LINENUM}7981, '0.75 = 3/4 + i - i', True);

  Test({LINENUM}7983, '0 = 0.0', True);
  Test({LINENUM}7984, '0 = 1/2 - 1/2', True);
  Test({LINENUM}7985, '0 = i - i', True);
  Test({LINENUM}7986, '1/2 - 1/2 = 0.0', True);
  Test({LINENUM}7987, '1/2 - 1/2 = i - i', True);
  Test({LINENUM}7988, '0.0 = i - i', True);

  Test({LINENUM}7990, '5 + 0 = 5 + 0.0', True);
  Test({LINENUM}7991, '5 + 0 = 5 + 1/2 - 1/2', True);
  Test({LINENUM}7992, '5 + 0 = 5 + i - i', True);
  Test({LINENUM}7993, '5 + 1/2 - 1/2 = 5 + 0.0', True);
  Test({LINENUM}7994, '5 + 1/2 - 1/2 = 5 + i - i', True);
  Test({LINENUM}7995, '5 + 0.0 = 5 + i - i', True);

  Test({LINENUM}7997, '6 + 0 = 5 + 0.0', False);
  Test({LINENUM}7998, '6 + 0 = 5 + 1/2 - 1/2', False);
  Test({LINENUM}7999, '6 + 0 = 5 + i - i', False);
  Test({LINENUM}8000, '6 + 1/2 - 1/2 = 5 + 0.0', False);
  Test({LINENUM}8001, '6 + 1/2 - 1/2 = 5 + i - i', False);
  Test({LINENUM}8002, '6 + 0.0 = 5 + i - i', False);

  Test({LINENUM}8004, '0 = (.;)', False);
  Test({LINENUM}8005, '0.0 = (.;)', False);
  Test({LINENUM}8006, '1/2-1/2 = (.;)', False);
  Test({LINENUM}8007, 'i-i = (.;)', False);

  Test({LINENUM}8009, '1/7 + 58/2 − 63/7 + 25/7 = 166/7', True);
  Test({LINENUM}8010, '1/7 + 58/2 − 63/7 + 25/7 − 5/7 = 23', True);
  Test({LINENUM}8011, '1/7 + 58/2 − 63/7 + 25/7 − 5/7 = 23.0', True);
  Test({LINENUM}8012, '1/7 + 58/2 − 63/7 + 25/7 − 5/7 = 23.0 + i − i', True);
  Test({LINENUM}8013, 'i + 1/7 + 58/2 − 63/7 + 25/7 − 5/7 = 23.0 + i', True);

  Test({LINENUM}8015, '59/10 = 5.9', True);
  Test({LINENUM}8016, '59/100 = 0.59', True);
  Test({LINENUM}8017, '59/1000 = 0.059', True);

  Test({LINENUM}8019, '5⋅i − 3⋅i − 2⋅i + 7/2 = 7/2', True);
  Test({LINENUM}8020, '5⋅i − 3⋅i − 2⋅i + 7/2 = 3.5', True);
  Test({LINENUM}8021, '5⋅i − 3⋅i − 2⋅i + 7/2 = 3.5 + 0⋅i', True);
  Test({LINENUM}8022, '5⋅i − 3⋅i − 2⋅i + 7/2 = 3.5 + 2⋅i − 2⋅i', True);

  Test({LINENUM}8024, '5⋅i − 3⋅i − 2⋅i + 7/2 = 7/3', False);
  Test({LINENUM}8025, '5⋅i − 3⋅i − 3⋅i + 7/2 = 3.5', False);
  Test({LINENUM}8026, '5⋅i − 3⋅i − 2⋅i + 7/2 = 3.6 + 0⋅i', False);
  Test({LINENUM}8027, '5⋅i − 3⋅i − 2⋅i + 7/2 = 3.5 + 2⋅i − 2.2⋅i', False);

  Test({LINENUM}8029, '1/4 = 0.25', True);
  Test({LINENUM}8030, '4⋅0.25 = 1', True);
  Test({LINENUM}8031, '4⋅0.25 = 1.0', True);
  Test({LINENUM}8032, '4⋅0.25 = 3/4 + 1/4', True);
  Test({LINENUM}8033, '4⋅0.25 = 3/4 + 1/4 + i - i', True);
  Test({LINENUM}8034, 'i - i = 1/7 + 2/7 - 3/7', True);
  Test({LINENUM}8035, 'i - i = 1/7 + 2/7 - 3.00000001/7', False);

  Test({LINENUM}8037, '1/4 = 0.24', False);
  Test({LINENUM}8038, '4⋅0.25000000001 = 1', False);
  Test({LINENUM}8039, '4⋅0.25 = 0.999999999', False);
  Test({LINENUM}8040, '4⋅0.25 = 3/4 + 2/4', False);
  Test({LINENUM}8041, '4⋅0.25 = 3/4 + 1/4 - i', False);

  Test({LINENUM}8043, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i = 0', True);
  Test({LINENUM}8044, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i = 0.0', True);
  Test({LINENUM}8045, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i = 1/2 - 1/2', True);
  Test({LINENUM}8046, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i = i - i', True);

  Test({LINENUM}8048, '6 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i = 0', False);
  Test({LINENUM}8049, '5 + 3⋅i + 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i = 0.0', False);
  Test({LINENUM}8050, '5 + 3⋅i − 2 + 5⋅i − 4 + 3⋅i + 1 − 10⋅i = 1/2 - 1/2', False);
  Test({LINENUM}8051, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i = 7 - i', False);

  Test({LINENUM}8053, '5 = ❨5❩', False);
  Test({LINENUM}8054, '5 = ❨❨5❩❩', False);
  Test({LINENUM}8055, '❨5❩ = ❨❨5❩❩', False);

  Test({LINENUM}8057, '0 = ❨0❩', False);
  Test({LINENUM}8058, '0 = ❨❨0❩❩', False);
  Test({LINENUM}8059, '❨0❩ = ❨❨0❩❩', False);

  Test({LINENUM}8061, '0.0 = ❨0❩', False);
  Test({LINENUM}8062, '0.0 = ❨❨0❩❩', False);

  Test({LINENUM}8064, '1/2-1/2 = ❨0❩', False);
  Test({LINENUM}8065, '1/2-1/2 = ❨❨0❩❩', False);
  Test({LINENUM}8066, '❨0❩ = ❨❨0❩❩', False);

  Test({LINENUM}8068, 'i-i = ❨0❩', False);
  Test({LINENUM}8069, 'i-i = ❨❨0❩❩', False);
  Test({LINENUM}8070, '❨0❩ = ❨❨0❩❩', False);

  Test({LINENUM}8072, '0 = ❨i-i❩', False);
  Test({LINENUM}8073, '0 = ❨❨i-i❩❩', False);
  Test({LINENUM}8074, '❨0❩ = ❨❨i-i❩❩', False);

  Test({LINENUM}8076, 'i-i = ❨i-i❩', False);
  Test({LINENUM}8077, 'i-i = ❨❨i-i❩❩', False);
  Test({LINENUM}8078, '❨i-i❩ = ❨❨0❩❩', False);

  Test({LINENUM}8080, '❨i-i❩ = ❨❨i-i❩❩', False);

  Test({LINENUM}8082, '❨1, 2, 3, 4, 5❩ = ❨1, 2, 3, 4, 5❩', True);

  Test({LINENUM}8084, '❨2, 2, 3, 4, 5❩ = ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}8085, '❨1, -2, 3, 4, 5❩ = ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}8086, '❨1, 2, 3.000000000001, 4, 5❩ = ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}8087, '❨1, 2, 3, 3.9999999999, 5❩ = ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}8088, '❨1, 2, 3, 4, 500❩ = ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}8089, '❨1, 2, 3, 4❩ = ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}8090, '❨1, 2, 3, 4, 5❩ = ❨1, 2, 3❩', False);

  Test({LINENUM}8092, '❨π, e, sin(1)❩ = ❨π, e, sin(1)❩', True);

  Test({LINENUM}8094, '❨5 + i, 2, −i❩ = ❨5 + i, 2, −i❩', True);
  Test({LINENUM}8095, '❨5 + i, 2, −i❩ = ❨5 + i, 2, i❩', False);
  Test({LINENUM}8096, '❨5 + i, 0, −i❩ = ❨5 + i, 2, −i❩', False);

  Test({LINENUM}8098, '❨1, 2, 3, 4, 5❩ = ❨1, 2, 3, 4, 5 + i - i❩', True);
  Test({LINENUM}8099, '❨1 + i - i, 2, 3, 4, 5❩ = ❨1, 2, 3, 4, 5❩', True);

  Test({LINENUM}8101, '❨1, 2, 3❩ = ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', True);

  Test({LINENUM}8103, '❨2, 2, 3❩ = ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', False);
  Test({LINENUM}8104, '❨1, -2, 3❩ = ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', False);
  Test({LINENUM}8105, '❨1, 2, 3.0000001❩ = ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', False);
  Test({LINENUM}8106, '❨1, 2, 3❩ = ❨1, 1, 2❩ + ❨0, 1 − i, 1❩', False);
  Test({LINENUM}8107, '❨1, 2, 3❩ = ❨1, i, 2❩ + ❨0, 1 − i, 1❩', False);
  Test({LINENUM}8108, '❨1, 2, 3❩ = ❨1, 1 + i, 2❩ + ❨0, 1, 1❩', False);

  Test({LINENUM}8110, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);

  Test({LINENUM}8112, '❨❨5, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8113, '❨❨4, 2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8114, '❨❨4, −2, 1.0000000000001❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8115, '❨❨4, −2, 1❩, ❨3.9999999999, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8116, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8117, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0.1, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8118, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2.5❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8119, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4.000000001, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8120, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, 2, -1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8121, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, -1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8122, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, -4, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8123, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9.2❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8124, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨40, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8125, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2❩, ❨4, 0❩, ❨−1, 0❩❩', False);
  Test({LINENUM}8126, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩❩', False);
  Test({LINENUM}8127, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨4, −2, 1❩', False);
  Test({LINENUM}8128, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = 4', False);
  Test({LINENUM}8129, '❨❨4❩❩ = ❨4❩', False);
  Test({LINENUM}8130, '❨❨4❩❩ = 4', False);
  Test({LINENUM}8131, '❨4❩ = 4', False);
  Test({LINENUM}8132, '4 = ❨4❩', False);

  Test({LINENUM}8134, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, i-i, 2❩❩', True);
  Test({LINENUM}8135, '❨❨4, −2, 1❩, ❨4, i-i, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8136, '❨❨4 + i-i, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8137, '❨❨4, −2, 1❩, ❨4, i-i, 9❩, ❨−1, 0, 2❩❩ = ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, i-i, 2❩❩', True);

  Test({LINENUM}8139, '❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩ = ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', True);
  Test({LINENUM}8140, '❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩ = ❨❨2+i, 2−3⋅i❩, ❨i, i-i❩❩', True);

  Test({LINENUM}8142, '❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩ = ❨❨2+i, 2−3⋅i❩, ❨i, 1❩❩', False);
  Test({LINENUM}8143, '❨❨2+i, 2−3⋅i❩, ❨i, 2❩❩ = ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}8144, '❨❨2+i, 2−4⋅i❩, ❨i, 0❩❩ = ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}8145, '❨❨2+i, 2+3⋅i❩, ❨i, 0❩❩ = ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}8146, '❨❨2-i, 2−3⋅i❩, ❨i, 0❩❩ = ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}8147, '❨❨6+i, 2−3⋅i❩, ❨i, 0❩❩ = ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}8148, '❨❨2+i, 2−3⋅i❩, ❨i, 6❩❩ = ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);

  Test({LINENUM}8150, '❨❨2, 6❩, ❨−5, 3❩❩ = ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', True);

  Test({LINENUM}8152, '❨❨3, 6❩, ❨−5, 3❩❩ = ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}8153, '❨❨2, 7❩, ❨−5, 3❩❩ = ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}8154, '❨❨2, 6❩, ❨5, 3❩❩ = ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}8155, '❨❨2, 6❩, ❨−5, 3.0000000001❩❩ = ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}8156, '❨❨2, 6❩, ❨−5, 3❩❩ = ❨❨1, 3 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}8157, '❨❨2, 6❩, ❨−5, 3❩❩ = ❨❨1, 2 + 3⋅i❩, ❨5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}8158, '❨❨2, 6❩, ❨−5, 3❩❩ = ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4❩, ❨3, 3❩❩', False);

  Test({LINENUM}8160, '"alpha" = "alpha"', True);
  Test({LINENUM}8161, '"alpha" = "beta"', False);
  Test({LINENUM}8162, '"alpha" = ""', False);
  Test({LINENUM}8163, '"" = ""', True);

  Test({LINENUM}8165, '"7" = 7', False);
  Test({LINENUM}8166, '"7" = 7.0', False);
  Test({LINENUM}8167, '"7" = 7+i-i', False);

  Test({LINENUM}8169, 'true = true', True);
  Test({LINENUM}8170, 'true = false', False);
  Test({LINENUM}8171, 'false = true', False);
  Test({LINENUM}8172, 'false = false', True);

  Test({LINENUM}8174, 'false = 0', False);
  Test({LINENUM}8175, 'false = 0.0', False);
  Test({LINENUM}8176, 'false = 1/2 - 1/2', False);
  Test({LINENUM}8177, 'false = i - i', False);
  Test({LINENUM}8178, 'false = (.;)', False);

  Test({LINENUM}8180, 'true = 1', False);
  Test({LINENUM}8181, 'true = 1.0', False);

  Test({LINENUM}8183, 'true = "true"', False);
  Test({LINENUM}8184, '"false" = false', False);
  Test({LINENUM}8185, '"false" = ""', False);
  Test({LINENUM}8186, '"false" = "false"', True);

  Test({LINENUM}8188, '"LiU rocks" = true', False);

  Test({LINENUM}8190, '❨❨2, 6❩, ❨−5, 3❩❩ = 5', False);
  Test({LINENUM}8191, '❨❨2, 6❩, ❨−5, 3❩❩ = "alpha"', False);
  Test({LINENUM}8192, '❨❨2, 6❩, ❨−5, 3❩❩ = true', False);
  Test({LINENUM}8193, '❨❨2, 6❩, ❨−5, 3❩❩ = 5.0', False);
  Test({LINENUM}8194, '❨❨2, 6❩, ❨−5, 3❩❩ = 0', False);

  Test({LINENUM}8196, '❨❨0, 0❩, ❨0, 0❩❩ = 0', False);
  Test({LINENUM}8197, '❨0, 0❩ = 0', False);

  Test({LINENUM}8199, 'struct("a": 42, "b": 100) = struct("a": 42, "b": 100)', True);

  Test({LINENUM}8201, 'struct("a": 42.0000001, "b": 100) = struct("a": 42, "b": 100)', False);
  Test({LINENUM}8202, 'struct("A": 42, "b": 100) = struct("a": 42, "b": 100)', False);
  Test({LINENUM}8203, 'struct("a": 43, "b": 100) = struct("a": 42, "b": 100)', False);
  Test({LINENUM}8204, 'struct("a": 42, "c": 100) = struct("a": 42, "b": 100)', False);
  Test({LINENUM}8205, 'struct("a": 42, "b": 101) = struct("a": 42, "b": 100)', False);
  Test({LINENUM}8206, 'struct("a": 42, "b": 100) = struct("d": 42, "b": 100)', False);
  Test({LINENUM}8207, 'struct("a": 42, "b": 100) = struct("a": 420, "b": 100)', False);
  Test({LINENUM}8208, 'struct("a": 42, "b": 100) = struct("a": 42, "e": 100)', False);
  Test({LINENUM}8209, 'struct("a": 42, "b": 100) = struct("a": 42, "b": 100.01)', False);
  Test({LINENUM}8210, 'struct("a": 42, "b": 100) = struct("a": 42)', False);
  Test({LINENUM}8211, 'struct("a": 42) = struct("a": 42, "b": 100)', False);
  Test({LINENUM}8212, 'struct("b": 100) = struct("a": 42, "b": 100)', False);
  Test({LINENUM}8213, 'struct("b": 100, "a": 42) = struct("a": 42, "b": 100)', False);
  Test({LINENUM}8214, 'struct("a": 42, "b": 100) = struct("a": 100, "b": 42)', False);
  Test({LINENUM}8215, 'struct("a": 42, "b": 100) = struct("a": 42, "b": 100, "c": 1000)', False);
  Test({LINENUM}8216, 'struct("a": 42, "b": 100, "c": 1000) = struct("a": 42, "b": 100)', False);
  Test({LINENUM}8217, 'struct("a": 42, "b": 100, "c": 1000) = struct("a": 42, "b": 100, "c": 1000)', True);
  Test({LINENUM}8218, 'struct("a": 42, "b": 100, "c": "1000") = struct("a": 42, "b": 100, "c": 1000)', False);
  Test({LINENUM}8219, 'struct("a": 42, "b": 100, "c": "1000") = struct("a": 42, "b": 100, "c": "1000")', True);
  Test({LINENUM}8220, 'struct("a": 42, "b": 100, "c": "1000") = struct("a": 42, "b": 100)', False);
  Test({LINENUM}8221, 'struct("a": 42, "b": 100, "c": "1000") = struct("a": 42)', False);
  Test({LINENUM}8222, 'struct("a": 42, "b": 100) = struct("a": 42, "b": 100, "c": "1000")', False);
  Test({LINENUM}8223, 'struct("a": 42) = struct("a": 42, "b": 100, "c": "1000")', False);

  Test({LINENUM}8225, 'struct("a": 42, "b": 100) = 42', False);
  Test({LINENUM}8226, 'struct("a": 42, "b": 100) = "a"', False);
  Test({LINENUM}8227, 'struct("a": 42, "b": 100) = ("a": 42)', False);
  Test({LINENUM}8228, 'struct("a": 42, "b": 100) = true', False);
  Test({LINENUM}8229, 'struct("a": 42, "b": 100) = ❨❨2, 6❩, ❨−5, 3❩❩', False);
  Test({LINENUM}8230, 'struct("a": 42, "b": 100) = 0', False);
  Test({LINENUM}8231, 'struct("a": 42, "b": 100) = 0.0', False);
  Test({LINENUM}8232, 'struct("a": 42, "b": 100) = i-i', False);
  Test({LINENUM}8233, 'struct("a": 42, "b": 100) = (.;)', False);

  Test({LINENUM}8235, 'color("red") = color("red")', True);
  Test({LINENUM}8236, 'color("red") = rgb(1, 0, 0)', True);

  Test({LINENUM}8238, 'color("red") = rgb(1, 0.000001, 0)', False);
  Test({LINENUM}8239, 'color("red") = rgb(0.7, 0, 0)', False);
  Test({LINENUM}8240, 'color("red") = rgb(1, 1, 0)', False);
  Test({LINENUM}8241, 'color("red") = rgb(1, 1, 1)', False);
  Test({LINENUM}8242, 'color("red") = rgb(0, 0, 0)', False);
  Test({LINENUM}8243, 'color("green") = rgb(1, 0, 0)', False);

  Test({LINENUM}8245, 'color("red") = "red"', False);
  Test({LINENUM}8246, 'color("red") = 16#FF0000', False);
  Test({LINENUM}8247, 'color("red") = true', False);
  Test({LINENUM}8248, 'color("red") = color("green")', False);

  Test({LINENUM}8250, 'color("black") = rgb(0, 0, 0)', True);

  Test({LINENUM}8252, 'color("black") = rgb(0.0001, 0, 0)', False);
  Test({LINENUM}8253, 'color("black") = rgb(0, 0.0001, 0)', False);
  Test({LINENUM}8254, 'color("black") = rgb(0, 0, 0.001)', False);
  Test({LINENUM}8255, 'color("black") = rgb(0, 1, 0)', False);
  Test({LINENUM}8256, 'color("black") = rgb(1, 1, 0)', False);
  Test({LINENUM}8257, 'color("black") = rgb(1, 1, 1)', False);
  Test({LINENUM}8258, 'color("black") = rgb(0, 1, 1)', False);

  Test({LINENUM}8260, 'color("black") = 0', False);
  Test({LINENUM}8261, 'color("black") = 0.0', False);

  Test({LINENUM}8263, 'color("white") = rgb(1, 1, 1)', True);

  Test({LINENUM}8265, 'color("white") = rgb(0.9999, 1, 1)', False);
  Test({LINENUM}8266, 'color("white") = rgb(0, 1, 1)', False);
  Test({LINENUM}8267, 'color("white") = rgb(1, 0.999, 1)', False);
  Test({LINENUM}8268, 'color("white") = rgb(1, 1, 0)', False);
  Test({LINENUM}8269, 'color("white") = rgb(1, 1, 0)', False);
  Test({LINENUM}8270, 'color("white") = rgb(0.3, 0.5, 0.7)', False);
  Test({LINENUM}8271, 'color("white") = rgb(0.1, 0.1, 0.1)', False);

  Test({LINENUM}8273, '''(1, 2, 3) = ''(1, 2, 3)', True);
  Test({LINENUM}8274, '''(1, 2.0, 3) = ''(1, 2, 3)', True);
  Test({LINENUM}8275, '''(1, 2, 3) = ''(1, 2, 3.0)', True);
  Test({LINENUM}8276, '''(1, 2, 3) = ''(1/2 + 1/2, 2, 3)', True);
  Test({LINENUM}8277, '''(1., 2., 3.) = ''(1/2 + 1/2, 2, 3 + i - i)', True);
  Test({LINENUM}8278, '''(1, 2 + i - i, 3) = ''(1, 2, 3)', True);
  Test({LINENUM}8279, '''(1, 2 + i - i, 3.) = ''(1/2 + 1/2, 2, 3)', True);
  Test({LINENUM}8280, '''(1, 2., 3 + i) = ''(1, 2, 3 + i)', True);

  Test({LINENUM}8282, '''(2, 2, 3) = ''(1, 2, 3)', False);
  Test({LINENUM}8283, '''(1, 1, 3) = ''(1, 2, 3)', False);
  Test({LINENUM}8284, '''(1, 2, -3) = ''(1, 2, 3)', False);
  Test({LINENUM}8285, '''(1, 2, 3.01) = ''(1, 2, 3)', False);
  Test({LINENUM}8286, '''(1, 2, 3) = ''(10, 2, 3)', False);
  Test({LINENUM}8287, '''(1, 2, 3) = ''(1, 0.2, 3)', False);
  Test({LINENUM}8288, '''(1, 2, 3) = ''(1, 2, 3.000000001)', False);
  Test({LINENUM}8289, '''(1, 2, 3) = ''(1, 2, 2.999999999)', False);
  Test({LINENUM}8290, '''(2, 2, 3) = ''(1, 2, 3/2)', False);
  Test({LINENUM}8291, '''(2, 2, 3) = ''(1, 2, 3 + i)', False);

  Test({LINENUM}8293, '''(1, 2, "test") = ''(1, 2, 3)', False);
  Test({LINENUM}8294, '''(1, 2, "test") = ''(1, 2, "test")', True);
  Test({LINENUM}8295, '''(1, 2, "test") = ''(1/2 + 1/2, 2.0, "te"+"st")', True);

  Test({LINENUM}8297, '''(1, 2, 3) = ''(1, 2, 3, 4)', False);
  Test({LINENUM}8298, '''(1, 2, 3) = ''(1, 2)', False);
  Test({LINENUM}8299, '''(1, 2, 3) = ''(3, 2, 1)', False);

  Test({LINENUM}8301, '''(1, 2, 3) = ''(1, 2, 3)', True);

  Test({LINENUM}8303, '''(1, 2, ❨1, 2❩) = ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', True);

  Test({LINENUM}8305, '''(2, 2, ❨1, 1❩) = ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', False);
  Test({LINENUM}8306, '''(1, 2.000000001, ❨1, 2❩) = ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', False);
  Test({LINENUM}8307, '''(1, 2, ❨1, 2❩) = ''(1/2 + 1/2, 1.1 + 1.0, ❨1 + i − i, 2❩)', False);
  Test({LINENUM}8308, '''(1, 2, ❨1, 2❩) = ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i, 2❩)', False);
  Test({LINENUM}8309, '''(1, 2, ❨1, 2❩) = ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2, 3❩)', False);
  Test({LINENUM}8310, '''(1, 2, ❨1, 2❩) = ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩, 5)', False);
  Test({LINENUM}8311, '''(1, 2, ❨1, 2❩) = ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩, "test")', False);
  Test({LINENUM}8312, '''(1, 2, ❨1, 2❩, false) = ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', False);
  Test({LINENUM}8313, '''(1, 2, ❨1, 2❩) = ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i❩)', False);
  Test({LINENUM}8314, '''(1, 2, ❨1, 2❩) = ''(1/2 + 1/2, 1.0 + 1.0, 1 + i − i, 2)', False);

  Test({LINENUM}8316, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);

  Test({LINENUM}8318, '''(3, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8319, '''(2, π^2, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8320, '''(2, π, ❨2, 1❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8321, '''(2, π, ❨1, 2❩, ❨❨i, 0❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8322, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, true, "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8323, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "dog", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8324, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("green")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8325, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1/2 + 1/2, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8326, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1.0 + 1.0, π + i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8327, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8328, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8329, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨i, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8330, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(0.9, 0, 0))', False);
  Test({LINENUM}8331, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), color("green")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8332, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), true) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8333, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), 0) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8334, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}8335, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("gold")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);

  Test({LINENUM}8337, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), 0) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0), 0)', True);
  Test({LINENUM}8338, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), 0) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0), (.;))', False);

  Test({LINENUM}8340, '''(1.9 + 0.1 + i - i, π, ❨1+i-i, 2❩, ❨❨0, i❩, ❨i, 0❩❩, not(true), "cat", color("red")) = ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);

  if SecondsBetween(Now, Tomorrow) < 2 then
    Sleep(3000);

  Test({LINENUM}8345, 'date() = date()', True);
  Test({LINENUM}8346, 'date() = tomorrow()', False);
  Test({LINENUM}8347, 'date() = tomorrow()', False);

  Test({LINENUM}8349, '''() = ''()', True);
  Test({LINENUM}8350, '''() = {}', False);
  Test({LINENUM}8351, '''() = (.;)', False);

  Test({LINENUM}8353, '{1, 2, 3} = {1, 2, 3}', True);
  Test({LINENUM}8354, '{1, 2, 3} = {1, 2, 3, 3}', True);
  Test({LINENUM}8355, '{1, 2, 3} = {1, 2, 3, 3, 3}', True);
  Test({LINENUM}8356, '{1, 2, 3} = {3, 2, 1}', True);
  Test({LINENUM}8357, '{1, 2, 3} = {1, 2, 2, 3}', True);
  Test({LINENUM}8358, '{1, 2, 3} = {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', True);
  Test({LINENUM}8359, '{2, 1, 2, 3} = {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', True);
  Test({LINENUM}8360, '{2, 1, 2, 3, 3, 3, 3, 1} = {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', True);

  Test({LINENUM}8362, '{1, 2, 3} = {1.0, 2.0, 3.0}', True);
  Test({LINENUM}8363, '{1, 2, 3} = {1/2 + 1/2, 2, 3}', True);
  Test({LINENUM}8364, '{1.0, 2, 3} = {3, 2, 1/2 + 1/2, 3}', True);
  Test({LINENUM}8365, '{1.0, 2, 3, 1, 1 + i - i} = {3, 2, 1/2 + 1/2, 3}', True);

  Test({LINENUM}8367, '{1, 1.0, sqrt(4), 1.0, 2 + i - i, 3.0, 3, 3, 3, 1/2 + 1/2} = {3.0, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1/2 + 1/2, 2, 3.0}', True);
  Test({LINENUM}8368, '{1, 1.0, sqrt(4), 1.0, 2 + i - i, 3.0, 3, 3, 3, 1/2 + 1/2} = {3.0, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2.5, 1, 1/2 + 1/2, 2, 3.0}', False);
  Test({LINENUM}8369, '{2 + 1/2, 1, 1.0, sqrt(4), 1.0, 2 + i - i, 3.0, 3, 3, 3, 1/2 + 1/2} = {3.0, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2.5, 1, 1/2 + 1/2, 2, 3.0}', True);

  Test({LINENUM}8371, '{2, 2, 2, 3, 3, 3, 3, 2} = {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', False);
  Test({LINENUM}8372, '{2, 1, 2, 3, 3, 4, 3, 1} = {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', False);
  Test({LINENUM}8373, '{2, 1, 2, 3, 3, 3, 3, 1} = {3, 3, 2, 0, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', False);
  Test({LINENUM}8374, '{2, 1, 2, 3, 3, 3, 3, 1} = {3, 3, 2, 1, 2, 5, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', False);
  Test({LINENUM}8375, '{2, 1, 2, 3, 3, 3, 3, 1} = {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, -3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', False);
  Test({LINENUM}8376, '{2, 1, 2, 3, 3, 3, 3, 1} = {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 10, 2, 2, 3, 2, 1, 1, 2, 3}', False);
  Test({LINENUM}8377, '{2, 1, 2, 3, 3, 3, 3, 1} = {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, i, 2, 3, 2, 1, 1, 2, 3}', False);
  Test({LINENUM}8378, '{2, 1, 2, 3, 3, 3, 3, 1} = {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2/9, 3, 2, 1, 1, 2, 3}', False);

  Test({LINENUM}8380, '{1, true, "dog"} = {"dog", 1.0, true, 1/2 + 1/2, "dog", "dog"}', True);
  Test({LINENUM}8381, '{1, true, "dog"} = {"dog", 1.0, true, 1/2 + 1/2, "dog", "dog", "dog"}', True);
  Test({LINENUM}8382, '{1, true, "dog"} = {"dog", 1.0, true, 1/2 + 1/2, "dog", "dog", "dog", "cat"}', False);
  Test({LINENUM}8383, '{1, true, "dog", "cat"} = {"dog", 1.0, true, 1/2 + 1/2, "dog", "dog", "dog", "cat"}', True);
  Test({LINENUM}8384, '{color("blue"), 1, true, "dog", "cat"} = {"dog", 1.0, true, 1/2 + 1/2, rgb(0, 0, 1), "dog", "dog", "dog", "cat"}', True);
  Test({LINENUM}8385, '{color("blue"), 1, true, "dog", "cat"} = {"dog", 1.0, true, 1/2 + 1/2, rgb(0, 1, 1), "dog", "dog", "dog", "cat"}', False);

  Test({LINENUM}8387, '{} = {}', True);
  Test({LINENUM}8388, '{} = {0}', False);
  Test({LINENUM}8389, '{0,0,0} = {0}', True);
  Test({LINENUM}8390, '{} = ∅', True);

  Test({LINENUM}8392, '{"dog", "cat"} = {"dog"} ∪ {"cat"}', True);
  Test({LINENUM}8393, '{"dog", "cat"} = {"dog"} ∪ {"cat"} ∪ ∅', True);
  Test({LINENUM}8394, '{"dog", "cat"} = {"dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', True);
  Test({LINENUM}8395, '{"dog", "cat", "rat"} = {"dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', False);
  Test({LINENUM}8396, '{"dog", "cat", "rat"} = {"dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"rat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', True);
  Test({LINENUM}8397, '{"dog", "cat", "rat"} = {"dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"rat", "dog"}', True);
  Test({LINENUM}8398, '{"dog", "cat", "rat"} = {"rat", "dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', True);
  Test({LINENUM}8399, '{"dog", "cat", "rat"} ∪ ∅ ∪ {"dog"} = {"rat", "dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', True);
  Test({LINENUM}8400, '{"cat", "rat"} ∪ ∅ ∪ {"dog"} = {"rat", "dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', True);
  Test({LINENUM}8401, '{"cat", "rat"} ∪ ∅ ∪ {"dog"} = {"rat", "dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"Dog!"}', False);

  Test({LINENUM}8403, '''("dog", "cat") = {"dog", "cat"}', False);
  Test({LINENUM}8404, '''() = {}', False);

  Test({LINENUM}8406, '4 = {4}', False);
  Test({LINENUM}8407, '4 = ''(4)', False);
  Test({LINENUM}8408, '4 = true', False);
  Test({LINENUM}8409, 'true = {4}', False);
  Test({LINENUM}8410, 'false = {}', False);

  Test({LINENUM}8412, '0 = ZeroVector(100)', False); {arguably, could make this return true, at least if LHS and RHS are swapped}
  Test({LINENUM}8413, '0 = ZeroMatrix(100)', False); {and this}

  Test({LINENUM}8415, 'BinaryData("asterism") = BinaryData("asterism")', True);
  Test({LINENUM}8416, 'BinaryData("asterism") = BinaryData("asterisk")', False);

  Test({LINENUM}8418, 'BinaryData(0) = BinaryData(0)', True);
  Test({LINENUM}8419, 'BinaryData(1000) = BinaryData(1000)', True);
  Test({LINENUM}8420, 'BinaryData(1000) = BinaryData(10000)', False);
  Test({LINENUM}8421, 'BinaryData(1000) = BinaryData(1001)', False);
  Test({LINENUM}8422, 'BinaryData(1000) = BinaryData(1000.001)', False);

  Test({LINENUM}8424, 'BinaryData("rat") = BinaryData(1000)', False);

  Test({LINENUM}8426, 'BinaryData(1000) = 10', False);
  Test({LINENUM}8427, 'BinaryData(1000) = "cat"', False);
  Test({LINENUM}8428, 'BinaryData(1000) = color("red")', False);
  Test({LINENUM}8429, 'BinaryData(1000) = {1, 2, 3}', False);
  Test({LINENUM}8430, 'BinaryData(1000) = true', False);
  Test({LINENUM}8431, 'BinaryData(1000) = now()', False);

  Test({LINENUM}8433, 'BinaryData(0) = BinaryData(0.0)', {$IFDEF CPU64BITS}True{$ELSE}False{$ENDIF});

  Test({LINENUM}8435, '5 = "cat"', False);
  Test({LINENUM}8436, '5.5 = ''(1, 2)', False);
  Test({LINENUM}8437, '1 + i = {"dog", "cat"}', False);
  Test({LINENUM}8438, '{"dog"} = "dog"', False);
  Test({LINENUM}8439, '5 + i = "rat"', False);

  // - pixmaps, sounds: postponed

  // - n-ary extension

  Test({LINENUM}8445, '1 = 0! = i^0', True);
  Test({LINENUM}8446, '1 = 0! = i^0 = exp(0)', True);
  Test({LINENUM}8447, '1 = 0! = i^0 = exp(0) = 5/5', True);

  Test({LINENUM}8449, '1 = 0! = i^i', False);
  Test({LINENUM}8450, '1 = 5! = i^0 = exp(0)', False);
  Test({LINENUM}8451, '1 = 0! = i^0 = exp(0) = 5/4', False);

  Test({LINENUM}8453, '"AAA" = 3⋅"A" = "AA" + "A"', True);
  Test({LINENUM}8454, '"AAA" = 3⋅"A" = "AA" + "A" = "A" + "AA"', True);
  Test({LINENUM}8455, '"AAA" = 3⋅"A" = "AA" + "A" = "A" + "AA" = "A" + "A" + "A"', True);

  Test({LINENUM}8457, '"ABA" = 3⋅"A" = "AA" + "A"', False);
  Test({LINENUM}8458, '"AAA" = 3⋅"B" = "AA" + "A" = "A" + "AA"', False);
  Test({LINENUM}8459, '"AAA" = 3⋅"A" = "AB" + "A" = "A" + "AA" = "A" + "A" + "A"', False);

  Test({LINENUM}8461, '"A" = 0! = i^0 = exp(0) = 5/5', False);
  Test({LINENUM}8462, '1 = "A" = i^0 = exp(0) = 5/5', False);
  Test({LINENUM}8463, '1 = 0! = "A" = exp(0) = 5/5', False);
  Test({LINENUM}8464, '1 = 0! = i^0 = "A" = 5/5', False);
  Test({LINENUM}8465, '1 = 0! = i^0 = exp(0) = "A"', False);

  // Not equal

  Test({LINENUM}8469, '1 + 1 ≠ 2', False);
  Test({LINENUM}8470, '1 + 1/2 + 0.5 + i - i ≠ 2', False);
  Test({LINENUM}8471, '1 + 1/2 + 0.5 + i - i ≠ 2.0', False);
  Test({LINENUM}8472, '1 + 1/2 + 0.5 + i - i ≠ 1/2 + 3/2', False);
  Test({LINENUM}8473, '1 + 1/2 + 0.5 + i - i ≠ 2 + i - i', False);

  Test({LINENUM}8475, '1 ≠ 0', True);
  Test({LINENUM}8476, '1 ≠ 1', False);
  Test({LINENUM}8477, '1 ≠ 2', True);

  Test({LINENUM}8479, '123456789123455 ≠ 123456789123456', True);
  Test({LINENUM}8480, '123456789123456 ≠ 123456789123456', False);
  Test({LINENUM}8481, '123456789123457 ≠ 123456789123456', True);

  Test({LINENUM}8483, '123456789123456 ≠ -123456789123456', True);

  Test({LINENUM}8485, '0 ≠ 0', False);
  Test({LINENUM}8486, '0 ≠ -0', False);

  Test({LINENUM}8488, '52697415 ≠ 52697415', False);
  Test({LINENUM}8489, '-52697415 ≠ -52697415', False);
  Test({LINENUM}8490, '-52697415 ≠ 52697415', True);
  Test({LINENUM}8491, '52697416 ≠ 52697415', True);

  Test({LINENUM}8493, '84012636 ≠ 8490516', True);
  Test({LINENUM}8494, '84012636 ≠ -8490516', True);

  Test({LINENUM}8496, '123456789123456789 ≠ 123456789123456789', False);
  Test({LINENUM}8497, '123456789123456789 ≠ 123456789123456788', True);
  Test({LINENUM}8498, '123456789123456789 ≠ -123456789123456789', True);

  Test({LINENUM}8500, '42 ≠ 40 + 2', False);
  Test({LINENUM}8501, '42 ≠ 40 + 3', True);
  Test({LINENUM}8502, '42 ≠ 40 - 2', True);

  Test({LINENUM}8504, '100 + 23 ≠ 100 + 20 + 3', False);

  Test({LINENUM}8506, '75520864896 ≠ 75520864895', True);
  Test({LINENUM}8507, '75520864896 ≠ 75520864896', False);
  Test({LINENUM}8508, '75520864896 ≠ 75520864897', True);
  Test({LINENUM}8509, '75520864896 ≠ 0', True);

  Test({LINENUM}8511, '17/2 ≠ 17/2', False);
  Test({LINENUM}8512, '17/2 ≠ 19/2', True);
  Test({LINENUM}8513, '17/2 ≠ 17/3', True);
  Test({LINENUM}8514, '17/2 ≠ 15/2 + 1/2 + 1/2', False);
  Test({LINENUM}8515, '17/2 ≠ 15/2 + 1/2 + 3/2', True);

  Test({LINENUM}8517, '-17/2 ≠ 17/2', True);
  Test({LINENUM}8518, '17/2 ≠ -17/2', True);
  Test({LINENUM}8519, '-17/2 ≠ -17/2', False);
  Test({LINENUM}8520, '15/2 ≠ 17/2', True);

  Test({LINENUM}8522, '189561/9849133 ≠ 189561/9849133', False);
  Test({LINENUM}8523, '189561/9849133 ≠ 189562/9849133', True);
  Test({LINENUM}8524, '189561/9849133 ≠ 189561/9849132', True);
  Test({LINENUM}8525, '189561/9849133 ≠ -189561/9849133', True);
  Test({LINENUM}8526, '189562/9849133 ≠ 189561/9849134', True);
  Test({LINENUM}8527, '-189561/9849133 ≠ -189561/9849133', False);

  Test({LINENUM}8529, '189561/9849133 ≠ 189560/9849133 + 1/9849133', False);

  Test({LINENUM}8531, '189561/9849133 ≠ 1/2', True);
  Test({LINENUM}8532, '189561/9849133 ≠ -1/2', True);
  Test({LINENUM}8533, '189561/9849133 ≠ 0', True);
  Test({LINENUM}8534, '189561/9849133 ≠ 18916518/1898105687', True);
  Test({LINENUM}8535, '189561/9849133 ≠ 9849133/189561', True);

  Test({LINENUM}8537, '1/2 - 1/2 ≠ 1/3 - 1/3', False);
  Test({LINENUM}8538, '1/99 - 1/99 ≠ 7/5 - 7/5', False);
  Test({LINENUM}8539, '1/2 - 1/2 ≠ 1/3 - 1/3', False);

  Test({LINENUM}8541, '1/21 − 38/51 + 83/119 ≠ 523/517 − 325/17 + 92/3 − 331186/26367', False);

  Test({LINENUM}8543, '1/21 − 38/51 + 83/119 ≠ 523/517 − 325/17 + 92/3 − 331187/26367', True);
  Test({LINENUM}8544, '1/21 − 38/51 + 83/119 ≠ 523/516 − 325/17 + 92/3 − 331186/26367', True);
  Test({LINENUM}8545, '1/21 − 38/51 + 83/119 ≠ 523/517 − 325/17 + 92/3 + 331186/26367', True);
  Test({LINENUM}8546, '2/21 − 38/51 + 83/119 ≠ 523/517 − 325/17 + 92/3 − 331186/26367', True);
  Test({LINENUM}8547, '1/21 − 38/51 + 83/120 ≠ 523/517 − 325/17 + 92/3 − 331186/26367', True);
  Test({LINENUM}8548, '0 ≠ 523/517 − 325/17 + 92/3 − 331186/26367', False);
  Test({LINENUM}8549, '1/21 − 38/51 + 83/119 ≠ 0', False);

  Test({LINENUM}8551, '123.456 ≠ 123.456', False);
  Test({LINENUM}8552, '123.456 ≠ 123.457', True);
  Test({LINENUM}8553, '123.456 ≠ 123.4560000001', True);
  Test({LINENUM}8554, '123.456000000001 ≠ 123.456', True);
  Test({LINENUM}8555, '123.456 ≠ -123.456', True);
  Test({LINENUM}8556, '123.456 ≠ 123.0', True);

  Test({LINENUM}8558, '-123.456 ≠ -123.456', False);
  Test({LINENUM}8559, '-123.456 ≠ -123.556', True);
  Test({LINENUM}8560, '-123.456 ≠ -123.4559999999', True);

  Test({LINENUM}8562, '123E100 ≠ 123E100', False);

  Test({LINENUM}8564, '123E100 ≠ 123E101', True);
  Test({LINENUM}8565, '123E100 ≠ 123.000000001E100', True);
  Test({LINENUM}8566, '122.99999999999E100 ≠ 123E100', True);
  Test({LINENUM}8567, '123.0E100 ≠ 123E100', False);
  Test({LINENUM}8568, '-123E100 ≠ -123E100', False);
  Test({LINENUM}8569, '123E100 ≠ -123E100', True);
  Test({LINENUM}8570, '123E100 ≠ 123E200', True);
  Test({LINENUM}8571, '123E100 ≠ 0', True);

  Test({LINENUM}8573, '189.5613E200 ≠ 189.5613E200', False);
  Test({LINENUM}8574, '189.5613E200 ≠ 189.5614E200', True);
  Test({LINENUM}8575, '189.5613E200 ≠ 189.5613000001E200', True);
  Test({LINENUM}8576, '189.5612999999E200 ≠ 189.5613E200', True);
  Test({LINENUM}8577, '-189.5613E200 ≠ -189.5613E200', False);
  Test({LINENUM}8578, '189.5613E200 ≠ 189.5613E-200', True);
  Test({LINENUM}8579, '189.5613E-200 ≠ 189.5613E-200', False);
  Test({LINENUM}8580, '-189.5613E-200 ≠ -189.5613E-200', False);

  Test({LINENUM}8582, '189.5613E-200 ≠ 189.5613E-200', False);
  Test({LINENUM}8583, '189.5614E-200 ≠ 189.5613E-200', True);
  Test({LINENUM}8584, '189.561300001E-200 ≠ 189.5613E-200', True);
  Test({LINENUM}8585, '189.5613E-200 ≠ 189.5612999999E-200', True);

  Test({LINENUM}8587, 'π ≠ 3.1415926535797932384626', True);

  Test({LINENUM}8589, 'e ≠ exp(1)', False);
  Test({LINENUM}8590, 'e ≠ exp(1.01)', True);

  Test({LINENUM}8592, 'e ≠ π', True);
  Test({LINENUM}8593, '0⋅e ≠ 0⋅π', False);

  Test({LINENUM}8595, '3 + 5⋅i ≠ 3 + 5⋅i', False);
  Test({LINENUM}8596, '3 + 5⋅i ≠ 3 + 6⋅i', True);
  Test({LINENUM}8597, '3 + 5⋅i ≠ 3 + 5.0000000000001⋅i', True);
  Test({LINENUM}8598, '3 + 5⋅i ≠ 2.999999999999 + 5⋅i', True);
  Test({LINENUM}8599, '3 + 5⋅i ≠ 3', True);
  Test({LINENUM}8600, '3 + 5⋅i ≠ 5⋅i', True);
  Test({LINENUM}8601, '3 + 5⋅i ≠ 3 − 5⋅i', True);
  Test({LINENUM}8602, '3 − 5⋅i ≠ 3 − 5⋅i', False);
  Test({LINENUM}8603, '3 + 5⋅i ≠ 3.00000000001 + 5⋅i', True);
  Test({LINENUM}8604, '3.0000000001 + 5⋅i ≠ 3 + 5⋅i', True);

  Test({LINENUM}8606, 'i ≠ i', False);
  Test({LINENUM}8607, 'i ≠ -i', True);
  Test({LINENUM}8608, '1/i ≠ -i', False);

  Test({LINENUM}8610, '1/7 + 6/7 ≠ 1', False);
  Test({LINENUM}8611, '2/7 + 6/7 ≠ 1', True);

  Test({LINENUM}8613, '2 ≠ 12/9 + 6/9', False);
  Test({LINENUM}8614, '2 ≠ 12/9 + 7/9', True);

  Test({LINENUM}8616, '1/2 + 1/2 ≠ 1', False);
  Test({LINENUM}8617, '1/2 + 1/2 ≠ 3/2 - 1/2', False);
  Test({LINENUM}8618, '1/2 + 1/2 ≠ 1.0', False);
  Test({LINENUM}8619, '1/2 + 1/2 ≠ 1.0 + i - i', False);

  Test({LINENUM}8621, '1/2 ≠ 0.5', False);
  Test({LINENUM}8622, '1/2 ≠ 0.5 + i - i', False);
  Test({LINENUM}8623, '0.75 ≠ 3/4', False);
  Test({LINENUM}8624, '-0.75 ≠ -3/4', False);
  Test({LINENUM}8625, '0.75 + i - i ≠ 3/4', False);
  Test({LINENUM}8626, '0.75 ≠ 3/4 + i - i', False);

  Test({LINENUM}8628, '0 ≠ 0.0', False);
  Test({LINENUM}8629, '0 ≠ 1/2 - 1/2', False);
  Test({LINENUM}8630, '0 ≠ i - i', False);
  Test({LINENUM}8631, '1/2 - 1/2 ≠ 0.0', False);
  Test({LINENUM}8632, '1/2 - 1/2 ≠ i - i', False);
  Test({LINENUM}8633, '0.0 ≠ i - i', False);

  Test({LINENUM}8635, '5 + 0 ≠ 5 + 0.0', False);
  Test({LINENUM}8636, '5 + 0 ≠ 5 + 1/2 - 1/2', False);
  Test({LINENUM}8637, '5 + 0 ≠ 5 + i - i', False);
  Test({LINENUM}8638, '5 + 1/2 - 1/2 ≠ 5 + 0.0', False);
  Test({LINENUM}8639, '5 + 1/2 - 1/2 ≠ 5 + i - i', False);
  Test({LINENUM}8640, '5 + 0.0 ≠ 5 + i - i', False);

  Test({LINENUM}8642, '6 + 0 ≠ 5 + 0.0', True);
  Test({LINENUM}8643, '6 + 0 ≠ 5 + 1/2 - 1/2', True);
  Test({LINENUM}8644, '6 + 0 ≠ 5 + i - i', True);
  Test({LINENUM}8645, '6 + 1/2 - 1/2 ≠ 5 + 0.0', True);
  Test({LINENUM}8646, '6 + 1/2 - 1/2 ≠ 5 + i - i', True);
  Test({LINENUM}8647, '6 + 0.0 ≠ 5 + i - i', True);

  Test({LINENUM}8649, '0 ≠ (.;)', True);
  Test({LINENUM}8650, '0.0 ≠ (.;)', True);
  Test({LINENUM}8651, '1/2-1/2 ≠ (.;)', True);
  Test({LINENUM}8652, 'i-i ≠ (.;)', True);

  Test({LINENUM}8654, '1/7 + 58/2 − 63/7 + 25/7 ≠ 166/7', False);
  Test({LINENUM}8655, '1/7 + 58/2 − 63/7 + 25/7 − 5/7 ≠ 23', False);
  Test({LINENUM}8656, '1/7 + 58/2 − 63/7 + 25/7 − 5/7 ≠ 23.0', False);
  Test({LINENUM}8657, '1/7 + 58/2 − 63/7 + 25/7 − 5/7 ≠ 23.0 + i − i', False);
  Test({LINENUM}8658, 'i + 1/7 + 58/2 − 63/7 + 25/7 − 5/7 ≠ 23.0 + i', False);

  Test({LINENUM}8660, '59/10 ≠ 5.9', False);
  Test({LINENUM}8661, '59/100 ≠ 0.59', False);
  Test({LINENUM}8662, '59/1000 ≠ 0.059', False);

  Test({LINENUM}8664, '5⋅i − 3⋅i − 2⋅i + 7/2 ≠ 7/2', False);
  Test({LINENUM}8665, '5⋅i − 3⋅i − 2⋅i + 7/2 ≠ 3.5', False);
  Test({LINENUM}8666, '5⋅i − 3⋅i − 2⋅i + 7/2 ≠ 3.5 + 0⋅i', False);
  Test({LINENUM}8667, '5⋅i − 3⋅i − 2⋅i + 7/2 ≠ 3.5 + 2⋅i − 2⋅i', False);

  Test({LINENUM}8669, '5⋅i − 3⋅i − 2⋅i + 7/2 ≠ 7/3', True);
  Test({LINENUM}8670, '5⋅i − 3⋅i − 3⋅i + 7/2 ≠ 3.5', True);
  Test({LINENUM}8671, '5⋅i − 3⋅i − 2⋅i + 7/2 ≠ 3.6 + 0⋅i', True);
  Test({LINENUM}8672, '5⋅i − 3⋅i − 2⋅i + 7/2 ≠ 3.5 + 2⋅i − 2.2⋅i', True);

  Test({LINENUM}8674, '1/4 ≠ 0.25', False);
  Test({LINENUM}8675, '4⋅0.25 ≠ 1', False);
  Test({LINENUM}8676, '4⋅0.25 ≠ 1.0', False);
  Test({LINENUM}8677, '4⋅0.25 ≠ 3/4 + 1/4', False);
  Test({LINENUM}8678, '4⋅0.25 ≠ 3/4 + 1/4 + i - i', False);
  Test({LINENUM}8679, 'i - i ≠ 1/7 + 2/7 - 3/7', False);
  Test({LINENUM}8680, 'i - i ≠ 1/7 + 2/7 - 3.00000001/7', True);

  Test({LINENUM}8682, '1/4 ≠ 0.24', True);
  Test({LINENUM}8683, '4⋅0.25000000001 ≠ 1', True);
  Test({LINENUM}8684, '4⋅0.25 ≠ 0.999999999', True);
  Test({LINENUM}8685, '4⋅0.25 ≠ 3/4 + 2/4', True);
  Test({LINENUM}8686, '4⋅0.25 ≠ 3/4 + 1/4 - i', True);

  Test({LINENUM}8688, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≠ 0', False);
  Test({LINENUM}8689, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≠ 0.0', False);
  Test({LINENUM}8690, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≠ 1/2 - 1/2', False);
  Test({LINENUM}8691, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≠ i - i', False);

  Test({LINENUM}8693, '6 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≠ 0', True);
  Test({LINENUM}8694, '5 + 3⋅i + 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≠ 0.0', True);
  Test({LINENUM}8695, '5 + 3⋅i − 2 + 5⋅i − 4 + 3⋅i + 1 − 10⋅i ≠ 1/2 - 1/2', True);
  Test({LINENUM}8696, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≠ 7 - i', True);

  Test({LINENUM}8698, '5 ≠ ❨5❩', True);
  Test({LINENUM}8699, '5 ≠ ❨❨5❩❩', True);
  Test({LINENUM}8700, '❨5❩ ≠ ❨❨5❩❩', True);

  Test({LINENUM}8702, '0 ≠ ❨0❩', True);
  Test({LINENUM}8703, '0 ≠ ❨❨0❩❩', True);
  Test({LINENUM}8704, '❨0❩ ≠ ❨❨0❩❩', True);

  Test({LINENUM}8706, '0.0 ≠ ❨0❩', True);
  Test({LINENUM}8707, '0.0 ≠ ❨❨0❩❩', True);

  Test({LINENUM}8709, '1/2-1/2 ≠ ❨0❩', True);
  Test({LINENUM}8710, '1/2-1/2 ≠ ❨❨0❩❩', True);
  Test({LINENUM}8711, '❨0❩ ≠ ❨❨0❩❩', True);

  Test({LINENUM}8713, 'i-i ≠ ❨0❩', True);
  Test({LINENUM}8714, 'i-i ≠ ❨❨0❩❩', True);
  Test({LINENUM}8715, '❨0❩ ≠ ❨❨0❩❩', True);

  Test({LINENUM}8717, '0 ≠ ❨i-i❩', True);
  Test({LINENUM}8718, '0 ≠ ❨❨i-i❩❩', True);
  Test({LINENUM}8719, '❨0❩ ≠ ❨❨i-i❩❩', True);

  Test({LINENUM}8721, 'i-i ≠ ❨i-i❩', True);
  Test({LINENUM}8722, 'i-i ≠ ❨❨i-i❩❩', True);
  Test({LINENUM}8723, '❨i-i❩ ≠ ❨❨0❩❩', True);

  Test({LINENUM}8725, '❨i-i❩ ≠ ❨❨i-i❩❩', True);

  Test({LINENUM}8727, '❨1, 2, 3, 4, 5❩ ≠ ❨1, 2, 3, 4, 5❩', False);

  Test({LINENUM}8729, '❨2, 2, 3, 4, 5❩ ≠ ❨1, 2, 3, 4, 5❩', True);
  Test({LINENUM}8730, '❨1, -2, 3, 4, 5❩ ≠ ❨1, 2, 3, 4, 5❩', True);
  Test({LINENUM}8731, '❨1, 2, 3.000000000001, 4, 5❩ ≠ ❨1, 2, 3, 4, 5❩', True);
  Test({LINENUM}8732, '❨1, 2, 3, 3.9999999999, 5❩ ≠ ❨1, 2, 3, 4, 5❩', True);
  Test({LINENUM}8733, '❨1, 2, 3, 4, 500❩ ≠ ❨1, 2, 3, 4, 5❩', True);
  Test({LINENUM}8734, '❨1, 2, 3, 4❩ ≠ ❨1, 2, 3, 4, 5❩', True);
  Test({LINENUM}8735, '❨1, 2, 3, 4, 5❩ ≠ ❨1, 2, 3❩', True);

  Test({LINENUM}8737, '❨π, e, sin(1)❩ ≠ ❨π, e, sin(1)❩', False);

  Test({LINENUM}8739, '❨5 + i, 2, −i❩ ≠ ❨5 + i, 2, −i❩', False);
  Test({LINENUM}8740, '❨5 + i, 2, −i❩ ≠ ❨5 + i, 2, i❩', True);
  Test({LINENUM}8741, '❨5 + i, 0, −i❩ ≠ ❨5 + i, 2, −i❩', True);

  Test({LINENUM}8743, '❨1, 2, 3, 4, 5❩ ≠ ❨1, 2, 3, 4, 5 + i - i❩', False);
  Test({LINENUM}8744, '❨1 + i - i, 2, 3, 4, 5❩ ≠ ❨1, 2, 3, 4, 5❩', False);

  Test({LINENUM}8746, '❨1, 2, 3❩ ≠ ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', False);

  Test({LINENUM}8748, '❨2, 2, 3❩ ≠ ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', True);
  Test({LINENUM}8749, '❨1, -2, 3❩ ≠ ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', True);
  Test({LINENUM}8750, '❨1, 2, 3.0000001❩ ≠ ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', True);
  Test({LINENUM}8751, '❨1, 2, 3❩ ≠ ❨1, 1, 2❩ + ❨0, 1 − i, 1❩', True);
  Test({LINENUM}8752, '❨1, 2, 3❩ ≠ ❨1, i, 2❩ + ❨0, 1 − i, 1❩', True);
  Test({LINENUM}8753, '❨1, 2, 3❩ ≠ ❨1, 1 + i, 2❩ + ❨0, 1, 1❩', True);

  Test({LINENUM}8755, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);

  Test({LINENUM}8757, '❨❨5, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8758, '❨❨4, 2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8759, '❨❨4, −2, 1.0000000000001❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8760, '❨❨4, −2, 1❩, ❨3.9999999999, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8761, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8762, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0.1, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8763, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2.5❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8764, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4.000000001, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8765, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, 2, -1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8766, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, -1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8767, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, -4, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8768, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9.2❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8769, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨40, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}8770, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2❩, ❨4, 0❩, ❨−1, 0❩❩', True);
  Test({LINENUM}8771, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩❩', True);
  Test({LINENUM}8772, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨4, −2, 1❩', True);
  Test({LINENUM}8773, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ 4', True);
  Test({LINENUM}8774, '❨❨4❩❩ ≠ ❨4❩', True);
  Test({LINENUM}8775, '❨❨4❩❩ ≠ 4', True);
  Test({LINENUM}8776, '❨4❩ ≠ 4', True);
  Test({LINENUM}8777, '4 ≠ ❨4❩', True);

  Test({LINENUM}8779, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, i-i, 2❩❩', False);
  Test({LINENUM}8780, '❨❨4, −2, 1❩, ❨4, i-i, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8781, '❨❨4 + i-i, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}8782, '❨❨4, −2, 1❩, ❨4, i-i, 9❩, ❨−1, 0, 2❩❩ ≠ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, i-i, 2❩❩', False);

  Test({LINENUM}8784, '❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩ ≠ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}8785, '❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩ ≠ ❨❨2+i, 2−3⋅i❩, ❨i, i-i❩❩', False);

  Test({LINENUM}8787, '❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩ ≠ ❨❨2+i, 2−3⋅i❩, ❨i, 1❩❩', True);
  Test({LINENUM}8788, '❨❨2+i, 2−3⋅i❩, ❨i, 2❩❩ ≠ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', True);
  Test({LINENUM}8789, '❨❨2+i, 2−4⋅i❩, ❨i, 0❩❩ ≠ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', True);
  Test({LINENUM}8790, '❨❨2+i, 2+3⋅i❩, ❨i, 0❩❩ ≠ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', True);
  Test({LINENUM}8791, '❨❨2-i, 2−3⋅i❩, ❨i, 0❩❩ ≠ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', True);
  Test({LINENUM}8792, '❨❨6+i, 2−3⋅i❩, ❨i, 0❩❩ ≠ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', True);
  Test({LINENUM}8793, '❨❨2+i, 2−3⋅i❩, ❨i, 6❩❩ ≠ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', True);

  Test({LINENUM}8795, '❨❨2, 6❩, ❨−5, 3❩❩ ≠ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);

  Test({LINENUM}8797, '❨❨3, 6❩, ❨−5, 3❩❩ ≠ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', True);
  Test({LINENUM}8798, '❨❨2, 7❩, ❨−5, 3❩❩ ≠ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', True);
  Test({LINENUM}8799, '❨❨2, 6❩, ❨5, 3❩❩ ≠ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', True);
  Test({LINENUM}8800, '❨❨2, 6❩, ❨−5, 3.0000000001❩❩ ≠ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', True);
  Test({LINENUM}8801, '❨❨2, 6❩, ❨−5, 3❩❩ ≠ ❨❨1, 3 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', True);
  Test({LINENUM}8802, '❨❨2, 6❩, ❨−5, 3❩❩ ≠ ❨❨1, 2 + 3⋅i❩, ❨5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', True);
  Test({LINENUM}8803, '❨❨2, 6❩, ❨−5, 3❩❩ ≠ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4❩, ❨3, 3❩❩', True);

  Test({LINENUM}8805, '"alpha" ≠ "alpha"', False);
  Test({LINENUM}8806, '"alpha" ≠ "beta"', True);
  Test({LINENUM}8807, '"alpha" ≠ ""', True);
  Test({LINENUM}8808, '"" ≠ ""', False);

  Test({LINENUM}8810, '"7" ≠ 7', True);
  Test({LINENUM}8811, '"7" ≠ 7.0', True);
  Test({LINENUM}8812, '"7" ≠ 7+i-i', True);

  Test({LINENUM}8814, 'true ≠ true', False);
  Test({LINENUM}8815, 'true ≠ false', True);
  Test({LINENUM}8816, 'false ≠ true', True);
  Test({LINENUM}8817, 'false ≠ false', False);

  Test({LINENUM}8819, 'false ≠ 0', True);
  Test({LINENUM}8820, 'false ≠ 0.0', True);
  Test({LINENUM}8821, 'false ≠ 1/2 - 1/2', True);
  Test({LINENUM}8822, 'false ≠ i - i', True);
  Test({LINENUM}8823, 'false ≠ (.;)', True);

  Test({LINENUM}8825, 'true ≠ 1', True);
  Test({LINENUM}8826, 'true ≠ 1.0', True);

  Test({LINENUM}8828, 'true ≠ "true"', True);
  Test({LINENUM}8829, '"false" ≠ false', True);
  Test({LINENUM}8830, '"false" ≠ ""', True);
  Test({LINENUM}8831, '"false" ≠ "false"', False);

  Test({LINENUM}8833, '"LiU rocks" ≠ true', True);

  Test({LINENUM}8835, '❨❨2, 6❩, ❨−5, 3❩❩ ≠ 5', True);
  Test({LINENUM}8836, '❨❨2, 6❩, ❨−5, 3❩❩ ≠ "alpha"', True);
  Test({LINENUM}8837, '❨❨2, 6❩, ❨−5, 3❩❩ ≠ true', True);
  Test({LINENUM}8838, '❨❨2, 6❩, ❨−5, 3❩❩ ≠ 5.0', True);
  Test({LINENUM}8839, '❨❨2, 6❩, ❨−5, 3❩❩ ≠ 0', True);

  Test({LINENUM}8841, '❨❨0, 0❩, ❨0, 0❩❩ ≠ 0', True);
  Test({LINENUM}8842, '❨0, 0❩ ≠ 0', True);

  Test({LINENUM}8844, 'struct("a": 42, "b": 100) ≠ struct("a": 42, "b": 100)', False);

  Test({LINENUM}8846, 'struct("a": 42.0000001, "b": 100) ≠ struct("a": 42, "b": 100)', True);
  Test({LINENUM}8847, 'struct("A": 42, "b": 100) ≠ struct("a": 42, "b": 100)', True);
  Test({LINENUM}8848, 'struct("a": 43, "b": 100) ≠ struct("a": 42, "b": 100)', True);
  Test({LINENUM}8849, 'struct("a": 42, "c": 100) ≠ struct("a": 42, "b": 100)', True);
  Test({LINENUM}8850, 'struct("a": 42, "b": 101) ≠ struct("a": 42, "b": 100)', True);
  Test({LINENUM}8851, 'struct("a": 42, "b": 100) ≠ struct("d": 42, "b": 100)', True);
  Test({LINENUM}8852, 'struct("a": 42, "b": 100) ≠ struct("a": 420, "b": 100)', True);
  Test({LINENUM}8853, 'struct("a": 42, "b": 100) ≠ struct("a": 42, "e": 100)', True);
  Test({LINENUM}8854, 'struct("a": 42, "b": 100) ≠ struct("a": 42, "b": 100.01)', True);
  Test({LINENUM}8855, 'struct("a": 42, "b": 100) ≠ struct("a": 42)', True);
  Test({LINENUM}8856, 'struct("a": 42) ≠ struct("a": 42, "b": 100)', True);
  Test({LINENUM}8857, 'struct("b": 100) ≠ struct("a": 42, "b": 100)', True);
  Test({LINENUM}8858, 'struct("b": 100, "a": 42) ≠ struct("a": 42, "b": 100)', True);
  Test({LINENUM}8859, 'struct("a": 42, "b": 100) ≠ struct("a": 100, "b": 42)', True);
  Test({LINENUM}8860, 'struct("a": 42, "b": 100) ≠ struct("a": 42, "b": 100, "c": 1000)', True);
  Test({LINENUM}8861, 'struct("a": 42, "b": 100, "c": 1000) ≠ struct("a": 42, "b": 100)', True);
  Test({LINENUM}8862, 'struct("a": 42, "b": 100, "c": 1000) ≠ struct("a": 42, "b": 100, "c": 1000)', False);
  Test({LINENUM}8863, 'struct("a": 42, "b": 100, "c": "1000") ≠ struct("a": 42, "b": 100, "c": 1000)', True);
  Test({LINENUM}8864, 'struct("a": 42, "b": 100, "c": "1000") ≠ struct("a": 42, "b": 100, "c": "1000")', False);
  Test({LINENUM}8865, 'struct("a": 42, "b": 100, "c": "1000") ≠ struct("a": 42, "b": 100)', True);
  Test({LINENUM}8866, 'struct("a": 42, "b": 100, "c": "1000") ≠ struct("a": 42)', True);
  Test({LINENUM}8867, 'struct("a": 42, "b": 100) ≠ struct("a": 42, "b": 100, "c": "1000")', True);
  Test({LINENUM}8868, 'struct("a": 42) ≠ struct("a": 42, "b": 100, "c": "1000")', True);

  Test({LINENUM}8870, 'struct("a": 42, "b": 100) ≠ 42', True);
  Test({LINENUM}8871, 'struct("a": 42, "b": 100) ≠ "a"', True);
  Test({LINENUM}8872, 'struct("a": 42, "b": 100) ≠ ("a": 42)', True);
  Test({LINENUM}8873, 'struct("a": 42, "b": 100) ≠ true', True);
  Test({LINENUM}8874, 'struct("a": 42, "b": 100) ≠ ❨❨2, 6❩, ❨−5, 3❩❩', True);
  Test({LINENUM}8875, 'struct("a": 42, "b": 100) ≠ 0', True);
  Test({LINENUM}8876, 'struct("a": 42, "b": 100) ≠ 0.0', True);
  Test({LINENUM}8877, 'struct("a": 42, "b": 100) ≠ i-i', True);
  Test({LINENUM}8878, 'struct("a": 42, "b": 100) ≠ (.;)', True);

  Test({LINENUM}8880, 'color("red") ≠ color("red")', False);
  Test({LINENUM}8881, 'color("red") ≠ rgb(1, 0, 0)', False);

  Test({LINENUM}8883, 'color("red") ≠ rgb(1, 0.000001, 0)', True);
  Test({LINENUM}8884, 'color("red") ≠ rgb(0.7, 0, 0)', True);
  Test({LINENUM}8885, 'color("red") ≠ rgb(1, 1, 0)', True);
  Test({LINENUM}8886, 'color("red") ≠ rgb(1, 1, 1)', True);
  Test({LINENUM}8887, 'color("red") ≠ rgb(0, 0, 0)', True);
  Test({LINENUM}8888, 'color("green") ≠ rgb(1, 0, 0)', True);

  Test({LINENUM}8890, 'color("red") ≠ "red"', True);
  Test({LINENUM}8891, 'color("red") ≠ 16#FF0000', True);
  Test({LINENUM}8892, 'color("red") ≠ true', True);
  Test({LINENUM}8893, 'color("red") ≠ color("green")', True);

  Test({LINENUM}8895, 'color("black") ≠ rgb(0, 0, 0)', False);

  Test({LINENUM}8897, 'color("black") ≠ rgb(0.0001, 0, 0)', True);
  Test({LINENUM}8898, 'color("black") ≠ rgb(0, 0.0001, 0)', True);
  Test({LINENUM}8899, 'color("black") ≠ rgb(0, 0, 0.001)', True);
  Test({LINENUM}8900, 'color("black") ≠ rgb(0, 1, 0)', True);
  Test({LINENUM}8901, 'color("black") ≠ rgb(1, 1, 0)', True);
  Test({LINENUM}8902, 'color("black") ≠ rgb(1, 1, 1)', True);
  Test({LINENUM}8903, 'color("black") ≠ rgb(0, 1, 1)', True);

  Test({LINENUM}8905, 'color("black") ≠ 0', True);
  Test({LINENUM}8906, 'color("black") ≠ 0.0', True);

  Test({LINENUM}8908, 'color("white") ≠ rgb(1, 1, 1)', False);

  Test({LINENUM}8910, 'color("white") ≠ rgb(0.9999, 1, 1)', True);
  Test({LINENUM}8911, 'color("white") ≠ rgb(0, 1, 1)', True);
  Test({LINENUM}8912, 'color("white") ≠ rgb(1, 0.999, 1)', True);
  Test({LINENUM}8913, 'color("white") ≠ rgb(1, 1, 0)', True);
  Test({LINENUM}8914, 'color("white") ≠ rgb(1, 1, 0)', True);
  Test({LINENUM}8915, 'color("white") ≠ rgb(0.3, 0.5, 0.7)', True);
  Test({LINENUM}8916, 'color("white") ≠ rgb(0.1, 0.1, 0.1)', True);

  Test({LINENUM}8918, '''(1, 2, 3) ≠ ''(1, 2, 3)', False);
  Test({LINENUM}8919, '''(1, 2.0, 3) ≠ ''(1, 2, 3)', False);
  Test({LINENUM}8920, '''(1, 2, 3) ≠ ''(1, 2, 3.0)', False);
  Test({LINENUM}8921, '''(1, 2, 3) ≠ ''(1/2 + 1/2, 2, 3)', False);
  Test({LINENUM}8922, '''(1., 2., 3.) ≠ ''(1/2 + 1/2, 2, 3 + i - i)', False);
  Test({LINENUM}8923, '''(1, 2 + i - i, 3) ≠ ''(1, 2, 3)', False);
  Test({LINENUM}8924, '''(1, 2 + i - i, 3.) ≠ ''(1/2 + 1/2, 2, 3)', False);
  Test({LINENUM}8925, '''(1, 2., 3 + i) ≠ ''(1, 2, 3 + i)', False);

  Test({LINENUM}8927, '''(2, 2, 3) ≠ ''(1, 2, 3)', True);
  Test({LINENUM}8928, '''(1, 1, 3) ≠ ''(1, 2, 3)', True);
  Test({LINENUM}8929, '''(1, 2, -3) ≠ ''(1, 2, 3)', True);
  Test({LINENUM}8930, '''(1, 2, 3.01) ≠ ''(1, 2, 3)', True);
  Test({LINENUM}8931, '''(1, 2, 3) ≠ ''(10, 2, 3)', True);
  Test({LINENUM}8932, '''(1, 2, 3) ≠ ''(1, 0.2, 3)', True);
  Test({LINENUM}8933, '''(1, 2, 3) ≠ ''(1, 2, 3.000000001)', True);
  Test({LINENUM}8934, '''(1, 2, 3) ≠ ''(1, 2, 2.999999999)', True);
  Test({LINENUM}8935, '''(2, 2, 3) ≠ ''(1, 2, 3/2)', True);
  Test({LINENUM}8936, '''(2, 2, 3) ≠ ''(1, 2, 3 + i)', True);

  Test({LINENUM}8938, '''(1, 2, "test") ≠ ''(1, 2, 3)', True);
  Test({LINENUM}8939, '''(1, 2, "test") ≠ ''(1, 2, "test")', False);
  Test({LINENUM}8940, '''(1, 2, "test") ≠ ''(1/2 + 1/2, 2.0, "te"+"st")', False);

  Test({LINENUM}8942, '''(1, 2, 3) ≠ ''(1, 2, 3, 4)', True);
  Test({LINENUM}8943, '''(1, 2, 3) ≠ ''(1, 2)', True);
  Test({LINENUM}8944, '''(1, 2, 3) ≠ ''(3, 2, 1)', True);

  Test({LINENUM}8946, '''(1, 2, 3) ≠ ''(1, 2, 3)', False);

  Test({LINENUM}8948, '''(1, 2, ❨1, 2❩) ≠ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', False);

  Test({LINENUM}8950, '''(2, 2, ❨1, 1❩) ≠ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', True);
  Test({LINENUM}8951, '''(1, 2.000000001, ❨1, 2❩) ≠ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', True);
  Test({LINENUM}8952, '''(1, 2, ❨1, 2❩) ≠ ''(1/2 + 1/2, 1.1 + 1.0, ❨1 + i − i, 2❩)', True);
  Test({LINENUM}8953, '''(1, 2, ❨1, 2❩) ≠ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i, 2❩)', True);
  Test({LINENUM}8954, '''(1, 2, ❨1, 2❩) ≠ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2, 3❩)', True);
  Test({LINENUM}8955, '''(1, 2, ❨1, 2❩) ≠ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩, 5)', True);
  Test({LINENUM}8956, '''(1, 2, ❨1, 2❩) ≠ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩, "test")', True);
  Test({LINENUM}8957, '''(1, 2, ❨1, 2❩, false) ≠ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', True);
  Test({LINENUM}8958, '''(1, 2, ❨1, 2❩) ≠ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i❩)', True);
  Test({LINENUM}8959, '''(1, 2, ❨1, 2❩) ≠ ''(1/2 + 1/2, 1.0 + 1.0, 1 + i − i, 2)', True);

  Test({LINENUM}8961, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);

  Test({LINENUM}8963, '''(3, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8964, '''(2, π^2, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8965, '''(2, π, ❨2, 1❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8966, '''(2, π, ❨1, 2❩, ❨❨i, 0❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8967, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, true, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8968, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "dog", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8969, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("green")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8970, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1/2 + 1/2, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8971, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8972, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8973, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8974, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨i, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8975, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(0.9, 0, 0))', True);
  Test({LINENUM}8976, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), color("green")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8977, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), true) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8978, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), 0) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8979, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);
  Test({LINENUM}8980, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("gold")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);

  Test({LINENUM}8982, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), 0) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0), 0)', False);
  Test({LINENUM}8983, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), 0) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0), (.;))', True);

  Test({LINENUM}8985, '''(1.9 + 0.1 + i - i, π, ❨1+i-i, 2❩, ❨❨0, i❩, ❨i, 0❩❩, not(true), "cat", color("red")) ≠ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);

  if SecondsBetween(Now, Tomorrow) < 2 then
    Sleep(3000);

  Test({LINENUM}8990, 'date() ≠ date()', False);
  Test({LINENUM}8991, 'date() ≠ tomorrow()', True);
  Test({LINENUM}8992, 'date() ≠ tomorrow()', True);

  Test({LINENUM}8994, '''() ≠ ''()', False);
  Test({LINENUM}8995, '''() ≠ {}', True);
  Test({LINENUM}8996, '''() ≠ (.;)', True);

  Test({LINENUM}8998, '{1, 2, 3} ≠ {1, 2, 3}', False);
  Test({LINENUM}8999, '{1, 2, 3} ≠ {1, 2, 3, 3}', False);
  Test({LINENUM}9000, '{1, 2, 3} ≠ {1, 2, 3, 3, 3}', False);
  Test({LINENUM}9001, '{1, 2, 3} ≠ {3, 2, 1}', False);
  Test({LINENUM}9002, '{1, 2, 3} ≠ {1, 2, 2, 3}', False);
  Test({LINENUM}9003, '{1, 2, 3} ≠ {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', False);
  Test({LINENUM}9004, '{2, 1, 2, 3} ≠ {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', False);
  Test({LINENUM}9005, '{2, 1, 2, 3, 3, 3, 3, 1} ≠ {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', False);

  Test({LINENUM}9007, '{1, 2, 3} ≠ {1.0, 2.0, 3.0}', False);
  Test({LINENUM}9008, '{1, 2, 3} ≠ {1/2 + 1/2, 2, 3}', False);
  Test({LINENUM}9009, '{1.0, 2, 3} ≠ {3, 2, 1/2 + 1/2, 3}', False);
  Test({LINENUM}9010, '{1.0, 2, 3, 1, 1 + i - i} ≠ {3, 2, 1/2 + 1/2, 3}', False);

  Test({LINENUM}9012, '{1, 1.0, sqrt(4), 1.0, 2 + i - i, 3.0, 3, 3, 3, 1/2 + 1/2} ≠ {3.0, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1/2 + 1/2, 2, 3.0}', False);
  Test({LINENUM}9013, '{1, 1.0, sqrt(4), 1.0, 2 + i - i, 3.0, 3, 3, 3, 1/2 + 1/2} ≠ {3.0, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2.5, 1, 1/2 + 1/2, 2, 3.0}', True);
  Test({LINENUM}9014, '{2 + 1/2, 1, 1.0, sqrt(4), 1.0, 2 + i - i, 3.0, 3, 3, 3, 1/2 + 1/2} ≠ {3.0, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2.5, 1, 1/2 + 1/2, 2, 3.0}', False);

  Test({LINENUM}9016, '{2, 2, 2, 3, 3, 3, 3, 2} ≠ {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', True);
  Test({LINENUM}9017, '{2, 1, 2, 3, 3, 4, 3, 1} ≠ {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', True);
  Test({LINENUM}9018, '{2, 1, 2, 3, 3, 3, 3, 1} ≠ {3, 3, 2, 0, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', True);
  Test({LINENUM}9019, '{2, 1, 2, 3, 3, 3, 3, 1} ≠ {3, 3, 2, 1, 2, 5, 2, 2, 1, 2, 3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', True);
  Test({LINENUM}9020, '{2, 1, 2, 3, 3, 3, 3, 1} ≠ {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, -3, 1, 2, 2, 3, 2, 1, 1, 2, 3}', True);
  Test({LINENUM}9021, '{2, 1, 2, 3, 3, 3, 3, 1} ≠ {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 10, 2, 2, 3, 2, 1, 1, 2, 3}', True);
  Test({LINENUM}9022, '{2, 1, 2, 3, 3, 3, 3, 1} ≠ {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, i, 2, 3, 2, 1, 1, 2, 3}', True);
  Test({LINENUM}9023, '{2, 1, 2, 3, 3, 3, 3, 1} ≠ {3, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 1, 2, 2/9, 3, 2, 1, 1, 2, 3}', True);

  Test({LINENUM}9025, '{1, true, "dog"} ≠ {"dog", 1.0, true, 1/2 + 1/2, "dog", "dog"}', False);
  Test({LINENUM}9026, '{1, true, "dog"} ≠ {"dog", 1.0, true, 1/2 + 1/2, "dog", "dog", "dog"}', False);
  Test({LINENUM}9027, '{1, true, "dog"} ≠ {"dog", 1.0, true, 1/2 + 1/2, "dog", "dog", "dog", "cat"}', True);
  Test({LINENUM}9028, '{1, true, "dog", "cat"} ≠ {"dog", 1.0, true, 1/2 + 1/2, "dog", "dog", "dog", "cat"}', False);
  Test({LINENUM}9029, '{color("blue"), 1, true, "dog", "cat"} ≠ {"dog", 1.0, true, 1/2 + 1/2, rgb(0, 0, 1), "dog", "dog", "dog", "cat"}', False);
  Test({LINENUM}9030, '{color("blue"), 1, true, "dog", "cat"} ≠ {"dog", 1.0, true, 1/2 + 1/2, rgb(0, 1, 1), "dog", "dog", "dog", "cat"}', True);

  Test({LINENUM}9032, '{} ≠ {}', False);
  Test({LINENUM}9033, '{} ≠ {0}', True);
  Test({LINENUM}9034, '{0,0,0} ≠ {0}', False);
  Test({LINENUM}9035, '{} ≠ ∅', False);

  Test({LINENUM}9037, '{"dog", "cat"} ≠ {"dog"} ∪ {"cat"}', False);
  Test({LINENUM}9038, '{"dog", "cat"} ≠ {"dog"} ∪ {"cat"} ∪ ∅', False);
  Test({LINENUM}9039, '{"dog", "cat"} ≠ {"dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', False);
  Test({LINENUM}9040, '{"dog", "cat", "rat"} ≠ {"dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', True);
  Test({LINENUM}9041, '{"dog", "cat", "rat"} ≠ {"dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"rat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', False);
  Test({LINENUM}9042, '{"dog", "cat", "rat"} ≠ {"dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"rat", "dog"}', False);
  Test({LINENUM}9043, '{"dog", "cat", "rat"} ≠ {"rat", "dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', False);
  Test({LINENUM}9044, '{"dog", "cat", "rat"} ∪ ∅ ∪ {"dog"} ≠ {"rat", "dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', False);
  Test({LINENUM}9045, '{"cat", "rat"} ∪ ∅ ∪ {"dog"} ≠ {"rat", "dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"dog"}', False);
  Test({LINENUM}9046, '{"cat", "rat"} ∪ ∅ ∪ {"dog"} ≠ {"rat", "dog"} ∪ {"cat"} ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ ∅ ∪ {"Dog!"}', True);

  Test({LINENUM}9048, '''("dog", "cat") ≠ {"dog", "cat"}', True);
  Test({LINENUM}9049, '''() ≠ {}', True);

  Test({LINENUM}9051, '4 ≠ {4}', True);
  Test({LINENUM}9052, '4 ≠ ''(4)', True);
  Test({LINENUM}9053, '4 ≠ true', True);
  Test({LINENUM}9054, 'true ≠ {4}', True);
  Test({LINENUM}9055, 'false ≠ {}', True);

  Test({LINENUM}9057, '0 ≠ ZeroVector(100)', True); {arguably, could make this return true, at least if LHS and RHS are swapped}
  Test({LINENUM}9058, '0 ≠ ZeroMatrix(100)', True); {and this}

  Test({LINENUM}9060, 'BinaryData("asterism") ≠ BinaryData("asterism")', False);
  Test({LINENUM}9061, 'BinaryData("asterism") ≠ BinaryData("asterisk")', True);

  Test({LINENUM}9063, 'BinaryData(0) ≠ BinaryData(0)', False);
  Test({LINENUM}9064, 'BinaryData(1000) ≠ BinaryData(1000)', False);
  Test({LINENUM}9065, 'BinaryData(1000) ≠ BinaryData(10000)', True);
  Test({LINENUM}9066, 'BinaryData(1000) ≠ BinaryData(1001)', True);
  Test({LINENUM}9067, 'BinaryData(1000) ≠ BinaryData(1000.001)', True);

  Test({LINENUM}9069, 'BinaryData("rat") ≠ BinaryData(1000)', True);

  Test({LINENUM}9071, 'BinaryData(1000) ≠ 10', True);
  Test({LINENUM}9072, 'BinaryData(1000) ≠ "cat"', True);
  Test({LINENUM}9073, 'BinaryData(1000) ≠ color("red")', True);
  Test({LINENUM}9074, 'BinaryData(1000) ≠ {1, 2, 3}', True);
  Test({LINENUM}9075, 'BinaryData(1000) ≠ true', True);
  Test({LINENUM}9076, 'BinaryData(1000) ≠ now()', True);

  Test({LINENUM}9078, 'BinaryData(0) ≠ BinaryData(0.0)', {$IFDEF CPU64BITS}False{$ELSE}True{$ENDIF});

  Test({LINENUM}9080, '5 ≠ "cat"', True);
  Test({LINENUM}9081, '5.5 ≠ ''(1, 2)', True);
  Test({LINENUM}9082, '1 + i ≠ {"dog", "cat"}', True);
  Test({LINENUM}9083, '{"dog"} ≠ "dog"', True);
  Test({LINENUM}9084, '5 + i ≠ "rat"', True);

  // - pixmaps, sounds: postponed

  // Same value/approximation

  Test({LINENUM}9090, '1 + 1 ≈ 2', True);
  Test({LINENUM}9091, '1 + 1/2 + 0.5 + i - i ≈ 2', True);
  Test({LINENUM}9092, '1 + 1/2 + 0.5 + i - i ≈ 2.0', True);
  Test({LINENUM}9093, '1 + 1/2 + 0.5 + i - i ≈ 1/2 + 3/2', True);
  Test({LINENUM}9094, '1 + 1/2 + 0.5 + i - i ≈ 2 + i - i', True);

  Test({LINENUM}9096, '1 ≈ 0', False);
  Test({LINENUM}9097, '1 ≈ 1', True);
  Test({LINENUM}9098, '1 ≈ 2', False);

  Test({LINENUM}9100, '0 ≈ 0', True);
  Test({LINENUM}9101, '0 ≈ -0', True);

  Test({LINENUM}9103, '52697415 ≈ 52697415', True);
  Test({LINENUM}9104, '-52697415 ≈ -52697415', True);
  Test({LINENUM}9105, '-52697415 ≈ 52697415', False);
  Test({LINENUM}9106, '52697416 ≈ 52697415', False);

  Test({LINENUM}9108, '84012636 ≈ 8490516', False);
  Test({LINENUM}9109, '84012636 ≈ -8490516', False);

  Test({LINENUM}9111, '123456789123456789 ≈ 123456789123456789', True);
  Test({LINENUM}9112, '123456789123456789 ≈ 123456789123456788', True); // all numbers are compared as floating-point values with epsilon
  Test({LINENUM}9113, '123456789123456789 ≈ -123456789123456789', False);

  Test({LINENUM}9115, '42 ≈ 40 + 2', True);
  Test({LINENUM}9116, '42 ≈ 40 + 3', False);
  Test({LINENUM}9117, '42 ≈ 40 - 2', False);

  Test({LINENUM}9119, '100 + 23 ≈ 100 + 20 + 3', True);

  Test({LINENUM}9121, '75520864896 ≈ 75520864895', False);
  Test({LINENUM}9122, '75520864896 ≈ 75520864896', True);
  Test({LINENUM}9123, '75520864896 ≈ 75520864897', False);
  Test({LINENUM}9124, '75520864896 ≈ 0', False);

  Test({LINENUM}9126, '17/2 ≈ 17/2', True);
  Test({LINENUM}9127, '17/2 ≈ 19/2', False);
  Test({LINENUM}9128, '17/2 ≈ 17/3', False);
  Test({LINENUM}9129, '17/2 ≈ 15/2 + 1/2 + 1/2', True);
  Test({LINENUM}9130, '17/2 ≈ 15/2 + 1/2 + 3/2', False);

  Test({LINENUM}9132, '-17/2 ≈ 17/2', False);
  Test({LINENUM}9133, '17/2 ≈ -17/2', False);
  Test({LINENUM}9134, '-17/2 ≈ -17/2', True);
  Test({LINENUM}9135, '15/2 ≈ 17/2', False);

  Test({LINENUM}9137, '189561/9849133 ≈ 189561/9849133', True);
  Test({LINENUM}9138, '189561/9849133 ≈ 189562/9849133', False);
  Test({LINENUM}9139, '189561/9849133 ≈ 189561/9849132', False);
  Test({LINENUM}9140, '189561/9849133 ≈ -189561/9849133', False);
  Test({LINENUM}9141, '189562/9849133 ≈ 189561/9849134', False);
  Test({LINENUM}9142, '-189561/9849133 ≈ -189561/9849133', True);

  Test({LINENUM}9144, '189561/9849133 ≈ 189560/9849133 + 1/9849133', True);

  Test({LINENUM}9146, '189561/9849133 ≈ 1/2', False);
  Test({LINENUM}9147, '189561/9849133 ≈ -1/2', False);
  Test({LINENUM}9148, '189561/9849133 ≈ 0', False);
  Test({LINENUM}9149, '189561/9849133 ≈ 18916518/1898105687', False);
  Test({LINENUM}9150, '189561/9849133 ≈ 9849133/189561', False);

  Test({LINENUM}9152, '1/2 - 1/2 ≈ 1/3 - 1/3', True);
  Test({LINENUM}9153, '1/99 - 1/99 ≈ 7/5 - 7/5', True);
  Test({LINENUM}9154, '1/2 - 1/2 ≈ 1/3 - 1/3', True);

  Test({LINENUM}9156, '1/21 − 38/51 + 83/119 ≈ 523/517 − 325/17 + 92/3 − 331186/26367', True);

  Test({LINENUM}9158, '1/21 − 38/51 + 83/119 ≈ 523/517 − 325/17 + 92/3 − 331187/26367', False);
  Test({LINENUM}9159, '1/21 − 38/51 + 83/119 ≈ 523/516 − 325/17 + 92/3 − 331186/26367', False);
  Test({LINENUM}9160, '1/21 − 38/51 + 83/119 ≈ 523/517 − 325/17 + 92/3 + 331186/26367', False);
  Test({LINENUM}9161, '2/21 − 38/51 + 83/119 ≈ 523/517 − 325/17 + 92/3 − 331186/26367', False);
  Test({LINENUM}9162, '1/21 − 38/51 + 83/120 ≈ 523/517 − 325/17 + 92/3 − 331186/26367', False);
  Test({LINENUM}9163, '0 ≈ 523/517 − 325/17 + 92/3 − 331186/26367', True);
  Test({LINENUM}9164, '1/21 − 38/51 + 83/119 ≈ 0', True);

  Test({LINENUM}9166, '123.456 ≈ 123.456', True);
  Test({LINENUM}9167, '123.456 ≈ 123.457', False);
  Test({LINENUM}9168, '123.456 ≈ 123.4560000001', False);
  Test({LINENUM}9169, '123.456000000001 ≈ 123.456', False);
  Test({LINENUM}9170, '123.456 ≈ -123.456', False);
  Test({LINENUM}9171, '123.456 ≈ 123.0', False);

  Test({LINENUM}9173, '-123.456 ≈ -123.456', True);
  Test({LINENUM}9174, '-123.456 ≈ -123.556', False);
  Test({LINENUM}9175, '-123.456 ≈ -123.4559999999', False);

  Test({LINENUM}9177, '123E100 ≈ 123E100', True);

  Test({LINENUM}9179, '123E100 ≈ 123E101', False);
  Test({LINENUM}9180, '123E100 ≈ 123.000000001E100', False);
  Test({LINENUM}9181, '122.99999999999E100 ≈ 123E100', False);
  Test({LINENUM}9182, '123.0E100 ≈ 123E100', True);
  Test({LINENUM}9183, '-123E100 ≈ -123E100', True);
  Test({LINENUM}9184, '123E100 ≈ -123E100', False);
  Test({LINENUM}9185, '123E100 ≈ 123E200', False);
  Test({LINENUM}9186, '123E100 ≈ 0', False);

  Test({LINENUM}9188, '189.5613E200 ≈ 189.5613E200', True);
  Test({LINENUM}9189, '189.5613E200 ≈ 189.5614E200', False);
  Test({LINENUM}9190, '189.5613E200 ≈ 189.5613000001E200', False);
  Test({LINENUM}9191, '189.5612999999E200 ≈ 189.5613E200', False);
  Test({LINENUM}9192, '-189.5613E200 ≈ -189.5613E200', True);
  Test({LINENUM}9193, '189.5613E200 ≈ 189.5613E-200', False);
  Test({LINENUM}9194, '189.5613E-200 ≈ 189.5613E-200', True);
  Test({LINENUM}9195, '-189.5613E-200 ≈ -189.5613E-200', True);

  Test({LINENUM}9197, '189.5613E-200 ≈ 189.5613E-200', True);
  Test({LINENUM}9198, '189.5614E-200 ≈ 189.5613E-200', True); // both are zero
  Test({LINENUM}9199, '189.5614E-200 ≈ 9238.4217E-200', True); // both are zero
  Test({LINENUM}9200, '189.5614E-200 ≈ 9238.4217E-210', True); // both are zero
  Test({LINENUM}9201, '189.5614E-200 ≈ -9238.4217E-210', True); // both are zero
  Test({LINENUM}9202, '189.5614E-200 ≈ 0', True);
  Test({LINENUM}9203, '189.561300001E-200 ≈ 189.5613E-200', True);
  Test({LINENUM}9204, '189.5613E-200 ≈ 189.5612999999E-200', True);

  Test({LINENUM}9206, 'π ≈ 3.1415926535897932384626', True); // <-------------------------------------------------
  Test({LINENUM}9207, 'π ≈ 3.1415926635897932384626', False);

  Test({LINENUM}9209, 'e ≈ exp(1)', True);
  Test({LINENUM}9210, 'e ≈ exp(1.01)', False);

  Test({LINENUM}9212, 'e ≈ π', False);
  Test({LINENUM}9213, '0⋅e ≈ 0⋅π', True);

  Test({LINENUM}9215, '3 + 5⋅i ≈ 3 + 5⋅i', True);
  Test({LINENUM}9216, '3 + 5⋅i ≈ 3 + 6⋅i', False);
  Test({LINENUM}9217, '3 + 5⋅i ≈ 3 + 5.001⋅i', False);
  Test({LINENUM}9218, '3 + 5⋅i ≈ 2.9999 + 5⋅i', False);
  Test({LINENUM}9219, '3 + 5⋅i ≈ 3', False);
  Test({LINENUM}9220, '3 + 5⋅i ≈ 5⋅i', False);
  Test({LINENUM}9221, '3 + 5⋅i ≈ 3 − 5⋅i', False);
  Test({LINENUM}9222, '3 − 5⋅i ≈ 3 − 5⋅i', True);
  Test({LINENUM}9223, '3 + 5⋅i ≈ 3.000001 + 5⋅i', False);
  Test({LINENUM}9224, '3.0001 + 5⋅i ≈ 3 + 5⋅i', False);

  Test({LINENUM}9226, 'i ≈ i', True);
  Test({LINENUM}9227, 'i ≈ -i', False);
  Test({LINENUM}9228, '1/i ≈ -i', True);

  Test({LINENUM}9230, '1/7 + 6/7 ≈ 1', True);
  Test({LINENUM}9231, '2/7 + 6/7 ≈ 1', False);

  Test({LINENUM}9233, '2 ≈ 12/9 + 6/9', True);
  Test({LINENUM}9234, '2 ≈ 12/9 + 7/9', False);

  Test({LINENUM}9236, '1/2 + 1/2 ≈ 1', True);
  Test({LINENUM}9237, '1/2 + 1/2 ≈ 3/2 - 1/2', True);
  Test({LINENUM}9238, '1/2 + 1/2 ≈ 1.0', True);
  Test({LINENUM}9239, '1/2 + 1/2 ≈ 1.0 + i - i', True);

  Test({LINENUM}9241, '1/2 ≈ 0.5', True);
  Test({LINENUM}9242, '1/2 ≈ 0.5 + i - i', True);
  Test({LINENUM}9243, '0.75 ≈ 3/4', True);
  Test({LINENUM}9244, '-0.75 ≈ -3/4', True);
  Test({LINENUM}9245, '0.75 + i - i ≈ 3/4', True);
  Test({LINENUM}9246, '0.75 ≈ 3/4 + i - i', True);

  Test({LINENUM}9248, '0 ≈ 0.0', True);
  Test({LINENUM}9249, '0 ≈ 1/2 - 1/2', True);
  Test({LINENUM}9250, '0 ≈ i - i', True);
  Test({LINENUM}9251, '1/2 - 1/2 ≈ 0.0', True);
  Test({LINENUM}9252, '1/2 - 1/2 ≈ i - i', True);
  Test({LINENUM}9253, '0.0 ≈ i - i', True);

  Test({LINENUM}9255, '5 + 0 ≈ 5 + 0.0', True);
  Test({LINENUM}9256, '5 + 0 ≈ 5 + 1/2 - 1/2', True);
  Test({LINENUM}9257, '5 + 0 ≈ 5 + i - i', True);
  Test({LINENUM}9258, '5 + 1/2 - 1/2 ≈ 5 + 0.0', True);
  Test({LINENUM}9259, '5 + 1/2 - 1/2 ≈ 5 + i - i', True);
  Test({LINENUM}9260, '5 + 0.0 ≈ 5 + i - i', True);

  Test({LINENUM}9262, '6 + 0 ≈ 5 + 0.0', False);
  Test({LINENUM}9263, '6 + 0 ≈ 5 + 1/2 - 1/2', False);
  Test({LINENUM}9264, '6 + 0 ≈ 5 + i - i', False);
  Test({LINENUM}9265, '6 + 1/2 - 1/2 ≈ 5 + 0.0', False);
  Test({LINENUM}9266, '6 + 1/2 - 1/2 ≈ 5 + i - i', False);
  Test({LINENUM}9267, '6 + 0.0 ≈ 5 + i - i', False);

  Test({LINENUM}9269, '0 ≈ (.;)', False);
  Test({LINENUM}9270, '0.0 ≈ (.;)', False);
  Test({LINENUM}9271, '1/2-1/2 ≈ (.;)', False);
  Test({LINENUM}9272, 'i-i ≈ (.;)', False);

  Test({LINENUM}9274, '1/7 + 58/2 − 63/7 + 25/7 ≈ 166/7', True);
  Test({LINENUM}9275, '1/7 + 58/2 − 63/7 + 25/7 − 5/7 ≈ 23', True);
  Test({LINENUM}9276, '1/7 + 58/2 − 63/7 + 25/7 − 5/7 ≈ 23.0', True);
  Test({LINENUM}9277, '1/7 + 58/2 − 63/7 + 25/7 − 5/7 ≈ 23.0 + i − i', True);
  Test({LINENUM}9278, 'i + 1/7 + 58/2 − 63/7 + 25/7 − 5/7 ≈ 23.0 + i', True);

  Test({LINENUM}9280, '59/10 ≈ 5.9', True);
  Test({LINENUM}9281, '59/100 ≈ 0.59', True);
  Test({LINENUM}9282, '59/1000 ≈ 0.059', True);

  Test({LINENUM}9284, '5⋅i − 3⋅i − 2⋅i + 7/2 ≈ 7/2', True);
  Test({LINENUM}9285, '5⋅i − 3⋅i − 2⋅i + 7/2 ≈ 3.5', True);
  Test({LINENUM}9286, '5⋅i − 3⋅i − 2⋅i + 7/2 ≈ 3.5 + 0⋅i', True);
  Test({LINENUM}9287, '5⋅i − 3⋅i − 2⋅i + 7/2 ≈ 3.5 + 2⋅i − 2⋅i', True);

  Test({LINENUM}9289, '5⋅i − 3⋅i − 2⋅i + 7/2 ≈ 7/3', False);
  Test({LINENUM}9290, '5⋅i − 3⋅i − 3⋅i + 7/2 ≈ 3.5', False);
  Test({LINENUM}9291, '5⋅i − 3⋅i − 2⋅i + 7/2 ≈ 3.6 + 0⋅i', False);
  Test({LINENUM}9292, '5⋅i − 3⋅i − 2⋅i + 7/2 ≈ 3.5 + 2⋅i − 2.2⋅i', False);

  Test({LINENUM}9294, '1/4 ≈ 0.25', True);
  Test({LINENUM}9295, '4⋅0.25 ≈ 1', True);
  Test({LINENUM}9296, '4⋅0.25 ≈ 1.0', True);
  Test({LINENUM}9297, '4⋅0.25 ≈ 3/4 + 1/4', True);
  Test({LINENUM}9298, '4⋅0.25 ≈ 3/4 + 1/4 + i - i', True);
  Test({LINENUM}9299, 'i - i ≈ 1/7 + 2/7 - 3/7', True);
  Test({LINENUM}9300, 'i - i ≈ 1/7 + 2/7 - 3.00000001/7', False);

  Test({LINENUM}9302, '1/4 ≈ 0.24', False);
  Test({LINENUM}9303, '4⋅0.2500001 ≈ 1', False);
  Test({LINENUM}9304, '4⋅0.25 ≈ 0.9999999', False);
  Test({LINENUM}9305, '4⋅0.25 ≈ 3/4 + 2/4', False);
  Test({LINENUM}9306, '4⋅0.25 ≈ 3/4 + 1/4 - i', False);

  Test({LINENUM}9308, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≈ 0', True);
  Test({LINENUM}9309, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≈ 0.0', True);
  Test({LINENUM}9310, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≈ 1/2 - 1/2', True);
  Test({LINENUM}9311, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≈ i - i', True);

  Test({LINENUM}9313, '6 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≈ 0', False);
  Test({LINENUM}9314, '5 + 3⋅i + 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≈ 0.0', False);
  Test({LINENUM}9315, '5 + 3⋅i − 2 + 5⋅i − 4 + 3⋅i + 1 − 10⋅i ≈ 1/2 - 1/2', False);
  Test({LINENUM}9316, '5 + 3⋅i − 2 + 5⋅i − 4 + 2⋅i + 1 − 10⋅i ≈ 7 - i', False);

  Test({LINENUM}9318, '5 ≈ ❨5❩', False);
  Test({LINENUM}9319, '5 ≈ ❨❨5❩❩', False);
  Test({LINENUM}9320, '❨5❩ ≈ ❨❨5❩❩', False);

  Test({LINENUM}9322, '0 ≈ ❨0❩', False);
  Test({LINENUM}9323, '0 ≈ ❨❨0❩❩', False);
  Test({LINENUM}9324, '❨0❩ ≈ ❨❨0❩❩', False);

  Test({LINENUM}9326, '0.0 ≈ ❨0❩', False);
  Test({LINENUM}9327, '0.0 ≈ ❨❨0❩❩', False);

  Test({LINENUM}9329, '1/2-1/2 ≈ ❨0❩', False);
  Test({LINENUM}9330, '1/2-1/2 ≈ ❨❨0❩❩', False);
  Test({LINENUM}9331, '❨0❩ ≈ ❨❨0❩❩', False);

  Test({LINENUM}9333, 'i-i ≈ ❨0❩', False);
  Test({LINENUM}9334, 'i-i ≈ ❨❨0❩❩', False);
  Test({LINENUM}9335, '❨0❩ ≈ ❨❨0❩❩', False);

  Test({LINENUM}9337, '0 ≈ ❨i-i❩', False);
  Test({LINENUM}9338, '0 ≈ ❨❨i-i❩❩', False);
  Test({LINENUM}9339, '❨0❩ ≈ ❨❨i-i❩❩', False);

  Test({LINENUM}9341, 'i-i ≈ ❨i-i❩', False);
  Test({LINENUM}9342, 'i-i ≈ ❨❨i-i❩❩', False);
  Test({LINENUM}9343, '❨i-i❩ ≈ ❨❨0❩❩', False);

  Test({LINENUM}9345, '❨i-i❩ ≈ ❨❨i-i❩❩', False);

  Test({LINENUM}9347, '❨1, 2, 3, 4, 5❩ ≈ ❨1, 2, 3, 4, 5❩', True);

  Test({LINENUM}9349, '❨2, 2, 3, 4, 5❩ ≈ ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}9350, '❨1, -2, 3, 4, 5❩ ≈ ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}9351, '❨1, 2, 3.00000001, 4, 5❩ ≈ ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}9352, '❨1, 2, 3, 3.9999999, 5❩ ≈ ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}9353, '❨1, 2, 3, 4, 500❩ ≈ ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}9354, '❨1, 2, 3, 4❩ ≈ ❨1, 2, 3, 4, 5❩', False);
  Test({LINENUM}9355, '❨1, 2, 3, 4, 5❩ ≈ ❨1, 2, 3❩', False);

  Test({LINENUM}9357, '❨π, e, sin(1)❩ ≈ ❨π, e, sin(1)❩', True);

  Test({LINENUM}9359, '❨5 + i, 2, −i❩ ≈ ❨5 + i, 2, −i❩', True);
  Test({LINENUM}9360, '❨5 + i, 2, −i❩ ≈ ❨5 + i, 2, i❩', False);
  Test({LINENUM}9361, '❨5 + i, 0, −i❩ ≈ ❨5 + i, 2, −i❩', False);

  Test({LINENUM}9363, '❨1, 2, 3, 4, 5❩ ≈ ❨1, 2, 3, 4, 5 + i - i❩', True);
  Test({LINENUM}9364, '❨1 + i - i, 2, 3, 4, 5❩ ≈ ❨1, 2, 3, 4, 5❩', True);

  Test({LINENUM}9366, '❨1, 2, 3❩ ≈ ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', True);

  Test({LINENUM}9368, '❨2, 2, 3❩ ≈ ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', False);
  Test({LINENUM}9369, '❨1, -2, 3❩ ≈ ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', False);
  Test({LINENUM}9370, '❨1, 2, 3.000001❩ ≈ ❨1, 1 + i, 2❩ + ❨0, 1 − i, 1❩', False);
  Test({LINENUM}9371, '❨1, 2, 3❩ ≈ ❨1, 1, 2❩ + ❨0, 1 − i, 1❩', False);
  Test({LINENUM}9372, '❨1, 2, 3❩ ≈ ❨1, i, 2❩ + ❨0, 1 − i, 1❩', False);
  Test({LINENUM}9373, '❨1, 2, 3❩ ≈ ❨1, 1 + i, 2❩ + ❨0, 1, 1❩', False);

  Test({LINENUM}9375, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);

  Test({LINENUM}9377, '❨❨5, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9378, '❨❨4, 2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9379, '❨❨4, −2, 1.000001❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9380, '❨❨4, −2, 1❩, ❨3.99999, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9381, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9382, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0.1, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9383, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2.5❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9384, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4.000001, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9385, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, 2, -1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9386, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, -1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9387, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, -4, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9388, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9.2❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9389, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨40, 0, 9❩, ❨−1, 0, 2❩❩', False);
  Test({LINENUM}9390, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2❩, ❨4, 0❩, ❨−1, 0❩❩', False);
  Test({LINENUM}9391, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩❩', False);
  Test({LINENUM}9392, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨4, −2, 1❩', False);
  Test({LINENUM}9393, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ 4', False);
  Test({LINENUM}9394, '❨❨4❩❩ ≈ ❨4❩', False);
  Test({LINENUM}9395, '❨❨4❩❩ ≈ 4', False);
  Test({LINENUM}9396, '❨4❩ ≈ 4', False);
  Test({LINENUM}9397, '4 ≈ ❨4❩', False);

  Test({LINENUM}9399, '❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, i-i, 2❩❩', True);
  Test({LINENUM}9400, '❨❨4, −2, 1❩, ❨4, i-i, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}9401, '❨❨4 + i-i, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, 0, 2❩❩', True);
  Test({LINENUM}9402, '❨❨4, −2, 1❩, ❨4, i-i, 9❩, ❨−1, 0, 2❩❩ ≈ ❨❨4, −2, 1❩, ❨4, 0, 9❩, ❨−1, i-i, 2❩❩', True);

  Test({LINENUM}9404, '❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩ ≈ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', True);
  Test({LINENUM}9405, '❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩ ≈ ❨❨2+i, 2−3⋅i❩, ❨i, i-i❩❩', True);

  Test({LINENUM}9407, '❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩ ≈ ❨❨2+i, 2−3⋅i❩, ❨i, 1❩❩', False);
  Test({LINENUM}9408, '❨❨2+i, 2−3⋅i❩, ❨i, 2❩❩ ≈ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}9409, '❨❨2+i, 2−4⋅i❩, ❨i, 0❩❩ ≈ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}9410, '❨❨2+i, 2+3⋅i❩, ❨i, 0❩❩ ≈ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}9411, '❨❨2-i, 2−3⋅i❩, ❨i, 0❩❩ ≈ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}9412, '❨❨6+i, 2−3⋅i❩, ❨i, 0❩❩ ≈ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);
  Test({LINENUM}9413, '❨❨2+i, 2−3⋅i❩, ❨i, 6❩❩ ≈ ❨❨2+i, 2−3⋅i❩, ❨i, 0❩❩', False);

  Test({LINENUM}9415, '❨❨2, 6❩, ❨−5, 3❩❩ ≈ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', True);

  Test({LINENUM}9417, '❨❨3, 6❩, ❨−5, 3❩❩ ≈ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}9418, '❨❨2, 7❩, ❨−5, 3❩❩ ≈ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}9419, '❨❨2, 6❩, ❨5, 3❩❩ ≈ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}9420, '❨❨2, 6❩, ❨−5, 3.0000001❩❩ ≈ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}9421, '❨❨2, 6❩, ❨−5, 3❩❩ ≈ ❨❨1, 3 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}9422, '❨❨2, 6❩, ❨−5, 3❩❩ ≈ ❨❨1, 2 + 3⋅i❩, ❨5, 0❩❩ + ❨❨1, 4 − 3⋅i❩, ❨0, 3❩❩', False);
  Test({LINENUM}9423, '❨❨2, 6❩, ❨−5, 3❩❩ ≈ ❨❨1, 2 + 3⋅i❩, ❨−5, 0❩❩ + ❨❨1, 4❩, ❨3, 3❩❩', False);

  Test({LINENUM}9425, '"alpha" ≈ "alpha"', True);
  Test({LINENUM}9426, '"alpha" ≈ "beta"', False);
  Test({LINENUM}9427, '"alpha" ≈ ""', False);
  Test({LINENUM}9428, '"" ≈ ""', True);

  Test({LINENUM}9430, '"7" ≈ 7', False);
  Test({LINENUM}9431, '"7" ≈ 7.0', False);
  Test({LINENUM}9432, '"7" ≈ 7+i-i', False);

  Test({LINENUM}9434, 'true ≈ true', True);
  Test({LINENUM}9435, 'true ≈ false', False);
  Test({LINENUM}9436, 'false ≈ true', False);
  Test({LINENUM}9437, 'false ≈ false', True);

  Test({LINENUM}9439, 'false ≈ 0', False);
  Test({LINENUM}9440, 'false ≈ 0.0', False);
  Test({LINENUM}9441, 'false ≈ 1/2 - 1/2', False);
  Test({LINENUM}9442, 'false ≈ i - i', False);
  Test({LINENUM}9443, 'false ≈ (.;)', False);

  Test({LINENUM}9445, 'true ≈ 1', False);
  Test({LINENUM}9446, 'true ≈ 1.0', False);

  Test({LINENUM}9448, 'true ≈ "true"', False);
  Test({LINENUM}9449, '"false" ≈ false', False);
  Test({LINENUM}9450, '"false" ≈ ""', False);
  Test({LINENUM}9451, '"false" ≈ "false"', True);

  Test({LINENUM}9453, '"LiU rocks" ≈ true', False);

  Test({LINENUM}9455, '❨❨2, 6❩, ❨−5, 3❩❩ ≈ 5', False);
  Test({LINENUM}9456, '❨❨2, 6❩, ❨−5, 3❩❩ ≈ "alpha"', False);
  Test({LINENUM}9457, '❨❨2, 6❩, ❨−5, 3❩❩ ≈ true', False);
  Test({LINENUM}9458, '❨❨2, 6❩, ❨−5, 3❩❩ ≈ 5.0', False);
  Test({LINENUM}9459, '❨❨2, 6❩, ❨−5, 3❩❩ ≈ 0', False);

  Test({LINENUM}9461, '❨❨0, 0❩, ❨0, 0❩❩ ≈ 0', False);
  Test({LINENUM}9462, '❨0, 0❩ ≈ 0', False);

  Test({LINENUM}9464, 'struct("a": 42, "b": 100) ≈ struct("a": 42, "b": 100)', True);

  Test({LINENUM}9466, 'struct("a": 42.000001, "b": 100) ≈ struct("a": 42, "b": 100)', False);
  Test({LINENUM}9467, 'struct("A": 42, "b": 100) ≈ struct("a": 42, "b": 100)', False);
  Test({LINENUM}9468, 'struct("a": 43, "b": 100) ≈ struct("a": 42, "b": 100)', False);
  Test({LINENUM}9469, 'struct("a": 42, "c": 100) ≈ struct("a": 42, "b": 100)', False);
  Test({LINENUM}9470, 'struct("a": 42, "b": 101) ≈ struct("a": 42, "b": 100)', False);
  Test({LINENUM}9471, 'struct("a": 42, "b": 100) ≈ struct("d": 42, "b": 100)', False);
  Test({LINENUM}9472, 'struct("a": 42, "b": 100) ≈ struct("a": 420, "b": 100)', False);
  Test({LINENUM}9473, 'struct("a": 42, "b": 100) ≈ struct("a": 42, "e": 100)', False);
  Test({LINENUM}9474, 'struct("a": 42, "b": 100) ≈ struct("a": 42, "b": 100.01)', False);
  Test({LINENUM}9475, 'struct("a": 42, "b": 100) ≈ struct("a": 42)', False);
  Test({LINENUM}9476, 'struct("a": 42) ≈ struct("a": 42, "b": 100)', False);
  Test({LINENUM}9477, 'struct("b": 100) ≈ struct("a": 42, "b": 100)', False);
  Test({LINENUM}9478, 'struct("b": 100, "a": 42) ≈ struct("a": 42, "b": 100)', False);
  Test({LINENUM}9479, 'struct("a": 42, "b": 100) ≈ struct("a": 100, "b": 42)', False);
  Test({LINENUM}9480, 'struct("a": 42, "b": 100) ≈ struct("a": 42, "b": 100, "c": 1000)', False);
  Test({LINENUM}9481, 'struct("a": 42, "b": 100, "c": 1000) ≈ struct("a": 42, "b": 100)', False);
  Test({LINENUM}9482, 'struct("a": 42, "b": 100, "c": 1000) ≈ struct("a": 42, "b": 100, "c": 1000)', True);
  Test({LINENUM}9483, 'struct("a": 42, "b": 100, "c": "1000") ≈ struct("a": 42, "b": 100, "c": 1000)', False);
  Test({LINENUM}9484, 'struct("a": 42, "b": 100, "c": "1000") ≈ struct("a": 42, "b": 100, "c": "1000")', True);
  Test({LINENUM}9485, 'struct("a": 42, "b": 100, "c": "1000") ≈ struct("a": 42, "b": 100)', False);
  Test({LINENUM}9486, 'struct("a": 42, "b": 100, "c": "1000") ≈ struct("a": 42)', False);
  Test({LINENUM}9487, 'struct("a": 42, "b": 100) ≈ struct("a": 42, "b": 100, "c": "1000")', False);
  Test({LINENUM}9488, 'struct("a": 42) ≈ struct("a": 42, "b": 100, "c": "1000")', False);

  Test({LINENUM}9490, 'struct("a": 42, "b": 100) ≈ 42', False);
  Test({LINENUM}9491, 'struct("a": 42, "b": 100) ≈ "a"', False);
  Test({LINENUM}9492, 'struct("a": 42, "b": 100) ≈ ("a": 42)', False);
  Test({LINENUM}9493, 'struct("a": 42, "b": 100) ≈ true', False);
  Test({LINENUM}9494, 'struct("a": 42, "b": 100) ≈ ❨❨2, 6❩, ❨−5, 3❩❩', False);
  Test({LINENUM}9495, 'struct("a": 42, "b": 100) ≈ 0', False);
  Test({LINENUM}9496, 'struct("a": 42, "b": 100) ≈ 0.0', False);
  Test({LINENUM}9497, 'struct("a": 42, "b": 100) ≈ i-i', False);
  Test({LINENUM}9498, 'struct("a": 42, "b": 100) ≈ (.;)', False);

  Test({LINENUM}9500, 'color("red") ≈ color("red")', True);
  Test({LINENUM}9501, 'color("red") ≈ rgb(1, 0, 0)', True);

  Test({LINENUM}9503, 'color("red") ≈ rgb(1, 0.000001, 0)', True); // two colours are considered almost equal if their RGBA values are the same as bytes
  Test({LINENUM}9504, 'color("red") ≈ rgb(0.7, 0, 0)', False);
  Test({LINENUM}9505, 'color("red") ≈ rgb(1, 1, 0)', False);
  Test({LINENUM}9506, 'color("red") ≈ rgb(1, 1, 1)', False);
  Test({LINENUM}9507, 'color("red") ≈ rgb(0, 0, 0)', False);
  Test({LINENUM}9508, 'color("green") ≈ rgb(1, 0, 0)', False);

  Test({LINENUM}9510, 'color("red") ≈ "red"', False);
  Test({LINENUM}9511, 'color("red") ≈ 16#FF0000', False);
  Test({LINENUM}9512, 'color("red") ≈ true', False);
  Test({LINENUM}9513, 'color("red") ≈ color("green")', False);

  Test({LINENUM}9515, 'color("black") ≈ rgb(0, 0, 0)', True);

  Test({LINENUM}9517, 'color("black") ≈ rgb(0.0001, 0, 0)', True);
  Test({LINENUM}9518, 'color("black") ≈ rgb(0, 0.0001, 0)', True);
  Test({LINENUM}9519, 'color("black") ≈ rgb(0, 0, 0.001)', True);
  Test({LINENUM}9520, 'color("black") ≈ rgb(0, 1, 0)', False);
  Test({LINENUM}9521, 'color("black") ≈ rgb(1, 1, 0)', False);
  Test({LINENUM}9522, 'color("black") ≈ rgb(1, 1, 1)', False);
  Test({LINENUM}9523, 'color("black") ≈ rgb(0, 1, 1)', False);

  Test({LINENUM}9525, 'color("black") ≈ 0', False);
  Test({LINENUM}9526, 'color("black") ≈ 0.0', False);

  Test({LINENUM}9528, 'color("white") ≈ rgb(1, 1, 1)', True);

  Test({LINENUM}9530, 'color("white") ≈ rgb(0.9999, 1, 1)', True);
  Test({LINENUM}9531, 'color("white") ≈ rgb(0, 1, 1)', False);
  Test({LINENUM}9532, 'color("white") ≈ rgb(1, 0.999, 1)', True);
  Test({LINENUM}9533, 'color("white") ≈ rgb(1, 1, 0)', False);
  Test({LINENUM}9534, 'color("white") ≈ rgb(1, 1, 0)', False);
  Test({LINENUM}9535, 'color("white") ≈ rgb(0.3, 0.5, 0.7)', False);
  Test({LINENUM}9536, 'color("white") ≈ rgb(0.1, 0.1, 0.1)', False);

  Test({LINENUM}9538, '''(1, 2, 3) ≈ ''(1, 2, 3)', True);
  Test({LINENUM}9539, '''(1, 2.0, 3) ≈ ''(1, 2, 3)', True);
  Test({LINENUM}9540, '''(1, 2, 3) ≈ ''(1, 2, 3.0)', True);
  Test({LINENUM}9541, '''(1, 2, 3) ≈ ''(1/2 + 1/2, 2, 3)', True);
  Test({LINENUM}9542, '''(1., 2., 3.) ≈ ''(1/2 + 1/2, 2, 3 + i - i)', True);
  Test({LINENUM}9543, '''(1, 2 + i - i, 3) ≈ ''(1, 2, 3)', True);
  Test({LINENUM}9544, '''(1, 2 + i - i, 3.) ≈ ''(1/2 + 1/2, 2, 3)', True);
  Test({LINENUM}9545, '''(1, 2., 3 + i) ≈ ''(1, 2, 3 + i)', True);

  Test({LINENUM}9547, '''(2, 2, 3) ≈ ''(1, 2, 3)', False);
  Test({LINENUM}9548, '''(1, 1, 3) ≈ ''(1, 2, 3)', False);
  Test({LINENUM}9549, '''(1, 2, -3) ≈ ''(1, 2, 3)', False);
  Test({LINENUM}9550, '''(1, 2, 3.01) ≈ ''(1, 2, 3)', False);
  Test({LINENUM}9551, '''(1, 2, 3) ≈ ''(10, 2, 3)', False);
  Test({LINENUM}9552, '''(1, 2, 3) ≈ ''(1, 0.2, 3)', False);
  Test({LINENUM}9553, '''(1, 2, 3) ≈ ''(1, 2, 3.000001)', False);
  Test({LINENUM}9554, '''(1, 2, 3) ≈ ''(1, 2, 2.999999)', False);
  Test({LINENUM}9555, '''(2, 2, 3) ≈ ''(1, 2, 3/2)', False);
  Test({LINENUM}9556, '''(2, 2, 3) ≈ ''(1, 2, 3 + i)', False);

  Test({LINENUM}9558, '''(1, 2, "test") ≈ ''(1, 2, 3)', False);
  Test({LINENUM}9559, '''(1, 2, "test") ≈ ''(1, 2, "test")', True);
  Test({LINENUM}9560, '''(1, 2, "test") ≈ ''(1/2 + 1/2, 2.0, "te"+"st")', True);

  Test({LINENUM}9562, '''(1, 2, 3) ≈ ''(1, 2, 3, 4)', False);
  Test({LINENUM}9563, '''(1, 2, 3) ≈ ''(1, 2)', False);
  Test({LINENUM}9564, '''(1, 2, 3) ≈ ''(3, 2, 1)', False);

  Test({LINENUM}9566, '''(1, 2, 3) ≈ ''(1, 2, 3)', True);

  Test({LINENUM}9568, '''(1, 2, ❨1, 2❩) ≈ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', True);

  Test({LINENUM}9570, '''(2, 2, ❨1, 1❩) ≈ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', False);
  Test({LINENUM}9571, '''(1, 2.000001, ❨1, 2❩) ≈ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', False);
  Test({LINENUM}9572, '''(1, 2, ❨1, 2❩) ≈ ''(1/2 + 1/2, 1.1 + 1.0, ❨1 + i − i, 2❩)', False);
  Test({LINENUM}9573, '''(1, 2, ❨1, 2❩) ≈ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i, 2❩)', False);
  Test({LINENUM}9574, '''(1, 2, ❨1, 2❩) ≈ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2, 3❩)', False);
  Test({LINENUM}9575, '''(1, 2, ❨1, 2❩) ≈ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩, 5)', False);
  Test({LINENUM}9576, '''(1, 2, ❨1, 2❩) ≈ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩, "test")', False);
  Test({LINENUM}9577, '''(1, 2, ❨1, 2❩, false) ≈ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i, 2❩)', False);
  Test({LINENUM}9578, '''(1, 2, ❨1, 2❩) ≈ ''(1/2 + 1/2, 1.0 + 1.0, ❨1 + i − i❩)', False);
  Test({LINENUM}9579, '''(1, 2, ❨1, 2❩) ≈ ''(1/2 + 1/2, 1.0 + 1.0, 1 + i − i, 2)', False);

  Test({LINENUM}9581, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);

  Test({LINENUM}9583, '''(3, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9584, '''(2, π^2, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9585, '''(2, π, ❨2, 1❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9586, '''(2, π, ❨1, 2❩, ❨❨i, 0❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9587, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, true, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9588, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "dog", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9589, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("green")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9590, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1/2 + 1/2, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9591, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9592, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9593, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9594, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨i, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9595, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(0.9, 0, 0))', False);
  Test({LINENUM}9596, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), color("green")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9597, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), true) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9598, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), 0) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9599, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);
  Test({LINENUM}9600, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("gold")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', False);

  Test({LINENUM}9602, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), 0) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0), 0)', True);
  Test({LINENUM}9603, '''(2, π, ❨1, 2❩, ❨❨0, i❩, ❨i, 0❩❩, false, "cat", color("red"), 0) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0), (.;))', False);

  Test({LINENUM}9605, '''(1.9 + 0.1 + i - i, π, ❨1+i-i, 2❩, ❨❨0, i❩, ❨i, 0❩❩, not(true), "cat", color("red")) ≈ ''(1.0 + 1.0, π + i − i, ❨1, 2 + i − i❩, ❨❨0, i❩, ❨i, 0❩❩, true ∧ false, "c"+"at", rgb(1, 0, 0))', True);

  if SecondsBetween(Now, Tomorrow) < 2 then
    Sleep(3000);

  Test({LINENUM}9610, 'date() ≈ date()', True);
  Test({LINENUM}9611, 'date() ≈ tomorrow()', False);
  Test({LINENUM}9612, 'date() ≈ tomorrow()', False);

  Test({LINENUM}9614, '''() ≈ ''()', True);
  Test({LINENUM}9615, '''() ≈ (.;)', False);
  Test({LINENUM}9616, '''("dog", "cat") ≈ {"dog", "cat"}', False);
  Test({LINENUM}9617, '''() ≈ {}', False);

  Test({LINENUM}9619, '4 ≈ {4}', False);
  Test({LINENUM}9620, '4 ≈ ''(4)', False);
  Test({LINENUM}9621, '4 ≈ true', False);
  Test({LINENUM}9622, 'true ≈ {4}', False);
  Test({LINENUM}9623, 'false ≈ {}', False);

  Test({LINENUM}9625, '0 ≈ ZeroVector(100)', False); {arguably, could make this return true, at least if LHS and RHS are swapped}
  Test({LINENUM}9626, '0 ≈ ZeroMatrix(100)', False); {and this}

  Test({LINENUM}9628, 'BinaryData("asterism") ≈ BinaryData("asterism")', True);
  Test({LINENUM}9629, 'BinaryData("asterism") ≈ BinaryData("asterisk")', False);

  Test({LINENUM}9631, 'BinaryData(0) ≈ BinaryData(0)', True);
  Test({LINENUM}9632, 'BinaryData(1000) ≈ BinaryData(1000)', True);
  Test({LINENUM}9633, 'BinaryData(1000) ≈ BinaryData(10000)', False);
  Test({LINENUM}9634, 'BinaryData(1000) ≈ BinaryData(1001)', False);
  Test({LINENUM}9635, 'BinaryData(1000) ≈ BinaryData(1000.001)', False);

  Test({LINENUM}9637, 'BinaryData("rat") ≈ BinaryData(1000)', False);

  Test({LINENUM}9639, 'BinaryData(1000) ≈ 10', False);
  Test({LINENUM}9640, 'BinaryData(1000) ≈ "cat"', False);
  Test({LINENUM}9641, 'BinaryData(1000) ≈ color("red")', False);
  Test({LINENUM}9642, 'BinaryData(1000) ≈ {1, 2, 3}', False);
  Test({LINENUM}9643, 'BinaryData(1000) ≈ true', False);
  Test({LINENUM}9644, 'BinaryData(1000) ≈ now()', False);

  Test({LINENUM}9646, 'BinaryData(0) ≈ BinaryData(0.0)', {$IFDEF CPU64BITS}True{$ELSE}False{$ENDIF});

  Test({LINENUM}9648, '5 ≈ "cat"', False);
  Test({LINENUM}9649, '5.5 ≈ ''(1, 2)', False);
  Test({LINENUM}9650, '1 + i ≈ {"dog", "cat"}', False);
  Test({LINENUM}9651, '{"dog"} ≈ "dog"', False);
  Test({LINENUM}9652, '5 + i ≈ "rat"', False);

  // - pixmaps, sounds: postponed

  // Logical and (logical conjunction)

  Test({LINENUM}9658, 'false ∧ false', false);
  Test({LINENUM}9659, 'false ∧ true', false);
  Test({LINENUM}9660, 'true ∧ false', false);
  Test({LINENUM}9661, 'true ∧ true', true);

  Test({LINENUM}9663, 'false ∧ false ∧ false', false);
  Test({LINENUM}9664, 'false ∧ false ∧ true', false);
  Test({LINENUM}9665, 'false ∧ true ∧ false', false);
  Test({LINENUM}9666, 'false ∧ true ∧ true', false);
  Test({LINENUM}9667, 'true ∧ false ∧ false', false);
  Test({LINENUM}9668, 'true ∧ false ∧ true', false);
  Test({LINENUM}9669, 'true ∧ true ∧ false', false);
  Test({LINENUM}9670, 'true ∧ true ∧ true', true);

  Test({LINENUM}9672, 'true ∧ true ∧ true ∧ true ∧ true ∧ true ∧ true ∧ true', true);
  Test({LINENUM}9673, 'true ∧ true ∧ true ∧ true ∧ true ∧ true ∧ true ∧ false', false);
  Test({LINENUM}9674, 'true ∧ false ∧ true ∧ true ∧ true ∧ true ∧ true ∧ true', false);
  Test({LINENUM}9675, 'true ∧ true ∧ false ∧ true ∧ true ∧ true ∧ true ∧ true', false);
  Test({LINENUM}9676, 'true ∧ true ∧ true ∧ false ∧ false ∧ true ∧ true ∧ true', false);
  Test({LINENUM}9677, 'true ∧ false ∧ true ∧ true ∧ true ∧ true ∧ true ∧ true', false);
  Test({LINENUM}9678, 'false ∧ true ∧ true ∧ true ∧ true ∧ true ∧ true ∧ true', false);
  Test({LINENUM}9679, 'true ∧ true ∧ true ∧ true ∧ true ∧ false ∧ false ∧ true', false);
  Test({LINENUM}9680, 'false ∧ true ∧ false ∧ false ∧ false ∧ true ∧ true ∧ true', false);
  Test({LINENUM}9681, 'false ∧ false ∧ false ∧ false ∧ false ∧ true ∧ false ∧ false', false);
  Test({LINENUM}9682, 'false ∧ false ∧ false ∧ false ∧ false ∧ false ∧ false ∧ false', false);

  Test({LINENUM}9684, 'false ∧ error()', false);
  Test({LINENUM}9685, 'true ∧ error()', failure);

  Test({LINENUM}9687, 'false ∧ true ∧ true ∧ true ∧ true ∧ true ∧ true ∧ error()', false);
  Test({LINENUM}9688, 'true ∧ false ∧ true ∧ true ∧ true ∧ true ∧ true ∧ error()', false);
  Test({LINENUM}9689, 'true ∧ true ∧ true ∧ true ∧ true ∧ true ∧ false ∧ error()', false);
  Test({LINENUM}9690, 'true ∧ true ∧ true ∧ true ∧ false ∧ true ∧ true ∧ error()', false);
  Test({LINENUM}9691, 'true ∧ true ∧ true ∧ true ∧ true ∧ true ∧ true ∧ error()', failure);

  Test({LINENUM}9693, 'a ≔ 123; false ∧ delete(a); a − 1', 122);
  Test({LINENUM}9694, 'delete(a)', success);

  Test({LINENUM}9696, 'n ≔ 3; IsNumber(n) ∧ ¬IsZero(n) ∧ (10/n ≥ 5)', false);
  Test({LINENUM}9697, 'n ≔ 2; IsNumber(n) ∧ ¬IsZero(n) ∧ (10/n ≥ 5)', true);
  Test({LINENUM}9698, 'n ≔ 1; IsNumber(n) ∧ ¬IsZero(n) ∧ (10/n ≥ 5)', true);
  Test({LINENUM}9699, 'n ≔ 0; IsNumber(n) ∧ ¬IsZero(n) ∧ (10/n ≥ 5)', false);
  Test({LINENUM}9700, 'n ≔ "cat"; IsNumber(n) ∧ ¬IsZero(n) ∧ (10/n ≥ 5)', false);

  Test({LINENUM}9702, 'n ≔ 0; (10/n ≥ 5) ∧ IsNumber(n) ∧ ¬IsZero(n)', failure);
  Test({LINENUM}9703, 'n ≔ "dog"; (10/n ≥ 5) ∧ IsNumber(n) ∧ ¬IsZero(n)', failure);

  Test({LINENUM}9705, 'delete(n)', success);

  Test({LINENUM}9707, '"cat" ∧ "dog"', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9708, 'true ∧ 101', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9709, 'false ∧ 101', false);
  Test({LINENUM}9710, 'true ∧ true ∧ 13', failure, 'An object of type boolean was expected as argument 3, but an object of type integer was given.');
  Test({LINENUM}9711, 'false ∧ true ∧ 13', false);
  Test({LINENUM}9712, 'true ∧ false ∧ 13', false);
  Test({LINENUM}9713, 'false ∧ false ∧ 13', false);

  // Logical or (logical disjunction)

  Test({LINENUM}9717, 'false ∨ false', false);
  Test({LINENUM}9718, 'false ∨ true', true);
  Test({LINENUM}9719, 'true ∨ false', true);
  Test({LINENUM}9720, 'true ∨ true', true);

  Test({LINENUM}9722, 'false ∨ false ∨ false', false);
  Test({LINENUM}9723, 'false ∨ false ∨ true', true);
  Test({LINENUM}9724, 'false ∨ true ∨ false', true);
  Test({LINENUM}9725, 'false ∨ true ∨ true', true);
  Test({LINENUM}9726, 'true ∨ false ∨ false', true);
  Test({LINENUM}9727, 'true ∨ false ∨ true', true);
  Test({LINENUM}9728, 'true ∨ true ∨ false', true);
  Test({LINENUM}9729, 'true ∨ true ∨ true', true);

  Test({LINENUM}9731, 'false ∨ false ∨ false ∨ false ∨ false ∨ false ∨ false', false);
  Test({LINENUM}9732, 'false ∨ false ∨ false ∨ false ∨ false ∨ false ∨ true', true);
  Test({LINENUM}9733, 'true ∨ false ∨ false ∨ false ∨ false ∨ false ∨ false', true);
  Test({LINENUM}9734, 'false ∨ true ∨ false ∨ false ∨ false ∨ false ∨ false', true);
  Test({LINENUM}9735, 'false ∨ false ∨ true ∨ false ∨ false ∨ false ∨ false', true);
  Test({LINENUM}9736, 'false ∨ false ∨ false ∨ true ∨ false ∨ false ∨ false', true);
  Test({LINENUM}9737, 'false ∨ false ∨ false ∨ false ∨ true ∨ false ∨ false', true);
  Test({LINENUM}9738, 'false ∨ false ∨ false ∨ false ∨ false ∨ true ∨ false', true);
  Test({LINENUM}9739, 'true ∨ false ∨ false ∨ false ∨ true ∨ false ∨ false', true);
  Test({LINENUM}9740, 'true ∨ true ∨ true ∨ false ∨ false ∨ false ∨ false', true);
  Test({LINENUM}9741, 'false ∨ false ∨ false ∨ true ∨ true ∨ true ∨ true', true);
  Test({LINENUM}9742, 'true ∨ true ∨ true ∨ true ∨ true ∨ true ∨ true', true);

  Test({LINENUM}9744, 'true ∨ error()', true);
  Test({LINENUM}9745, 'false ∨ error()', failure);

  Test({LINENUM}9747, 'false ∨ false ∨ false ∨ false ∨ false ∨ false ∨ error()', failure);
  Test({LINENUM}9748, 'false ∨ false ∨ false ∨ true ∨ false ∨ false ∨ error()', true);
  Test({LINENUM}9749, 'false ∨ false ∨ false ∨ false ∨ false ∨ true ∨ error()', true);
  Test({LINENUM}9750, 'true ∨ false ∨ false ∨ false ∨ false ∨ false ∨ error()', true);
  Test({LINENUM}9751, 'true ∨ true ∨ true ∨ true ∨ true ∨ true ∨ error()', true);

  Test({LINENUM}9753, 'n ≔ "rat"; ¬IsNumber(n) ∨ IsZero(n) ∨ (10/n ≥ 5)', true);
  Test({LINENUM}9754, 'n ≔ 0; ¬IsNumber(n) ∨ IsZero(n) ∨ (10/n ≥ 5)', true);
  Test({LINENUM}9755, 'n ≔ 1; ¬IsNumber(n) ∨ IsZero(n) ∨ (10/n ≥ 5)', true);
  Test({LINENUM}9756, 'n ≔ 2; ¬IsNumber(n) ∨ IsZero(n) ∨ (10/n ≥ 5)', true);
  Test({LINENUM}9757, 'n ≔ 3; ¬IsNumber(n) ∨ IsZero(n) ∨ (10/n ≥ 5)', false);

  Test({LINENUM}9759, 'n ≔ "rat"; (10/n ≥ 5) ∨ ¬IsNumber(n) ∨ IsZero(n)', failure);
  Test({LINENUM}9760, 'n ≔ 0; (10/n ≥ 5) ∨ ¬IsNumber(n) ∨ IsZero(n)', failure);

  Test({LINENUM}9762, '"cat" ∨ "dog"', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9763, 'false ∨ 101', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9764, 'true ∨ 101', true);
  Test({LINENUM}9765, 'false ∨ false ∨ 13', failure, 'An object of type boolean was expected as argument 3, but an object of type integer was given.');
  Test({LINENUM}9766, 'false ∨ true ∨ 13', true);
  Test({LINENUM}9767, 'true ∨ false ∨ 13', true);
  Test({LINENUM}9768, 'true ∨ true ∨ 13', true);

  // Logical not (logical negation)

  Test({LINENUM}9772, '¬false', true);
  Test({LINENUM}9773, '¬true', false);

  Test({LINENUM}9775, '¬"test"', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9776, '¬{1, 2, 3}', failure, 'An object of type boolean was expected as argument 1, but an object of type set was given.');

  Test({LINENUM}9778, '¬¬true', true);
  Test({LINENUM}9779, '¬¬false', false);

  Test({LINENUM}9781, StringOfChar(Char('¬'), 100) + 'true', true);
  Test({LINENUM}9782, StringOfChar(Char('¬'), 101) + 'true', false);
  Test({LINENUM}9783, StringOfChar(Char('¬'), 102) + 'true', true);
  Test({LINENUM}9784, StringOfChar(Char('¬'), 103) + 'true', false);

  // Logical exclusive or (xor)

  Test({LINENUM}9788, 'false ⊻ false', false);
  Test({LINENUM}9789, 'false ⊻ true', true);
  Test({LINENUM}9790, 'true ⊻ false', true);
  Test({LINENUM}9791, 'true ⊻ true', false);

  Test({LINENUM}9793, 'true ⊻ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9794, 'false ⊻ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9795, '"cat" ⊻ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9796, '"dog" ⊻ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9797, '"rabbit" ⊻ 5', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');

  // Logical nand

  Test({LINENUM}9801, 'false ⊼ false', true);
  Test({LINENUM}9802, 'false ⊼ true', true);
  Test({LINENUM}9803, 'true ⊼ false', true);
  Test({LINENUM}9804, 'true ⊼ true', false);

  Test({LINENUM}9806, 'true ⊼ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9807, 'false ⊼ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9808, '"cat" ⊼ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9809, '"dog" ⊼ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9810, '"rabbit" ⊼ 5', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');

  // Logical nor

  Test({LINENUM}9814, 'false ⊽ false', true);
  Test({LINENUM}9815, 'false ⊽ true', false);
  Test({LINENUM}9816, 'true ⊽ false', false);
  Test({LINENUM}9817, 'true ⊽ true', false);

  Test({LINENUM}9819, 'true ⊽ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9820, 'false ⊽ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9821, '"cat" ⊽ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9822, '"dog" ⊽ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9823, '"rabbit" ⊽ 5', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');

  // Right double arrow (implication, implies right)

  Test({LINENUM}9827, 'false ⇒ false', true);
  Test({LINENUM}9828, 'false ⇒ true', true);
  Test({LINENUM}9829, 'true ⇒ false', false);
  Test({LINENUM}9830, 'true ⇒ true', true);

  Test({LINENUM}9832, 'true ⇒ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9833, 'false ⇒ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9834, '"cat" ⇒ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9835, '"dog" ⇒ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9836, '"rabbit" ⇒ 5', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');

  // Left double arrow (implication, implies left)

  Test({LINENUM}9840, 'false ⇐ false', true);
  Test({LINENUM}9841, 'false ⇐ true', false);
  Test({LINENUM}9842, 'true ⇐ false', true);
  Test({LINENUM}9843, 'true ⇐ true', true);

  Test({LINENUM}9845, 'true ⇐ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9846, 'false ⇐ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9847, '"cat" ⇐ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9848, '"dog" ⇐ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9849, '"rabbit" ⇐ 5', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');

  // Left and right double arrow (equivalence, equivalent)

  Test({LINENUM}9853, 'false ⇔ false', true);
  Test({LINENUM}9854, 'false ⇔ true', false);
  Test({LINENUM}9855, 'true ⇔ false', false);
  Test({LINENUM}9856, 'true ⇔ true', true);

  Test({LINENUM}9858, 'true ⇔ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9859, 'false ⇔ 12', failure, 'An object of type boolean was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}9860, '"cat" ⇔ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9861, '"dog" ⇔ true', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}9862, '"rabbit" ⇔ 5', failure, 'An object of type boolean was expected as argument 1, but an object of type string was given.');

  // Union

  Test({LINENUM}9866, '{1, 2, 3} ∪ {2, 3, 4, 5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9867, '{1, 2, 3} ∪ {3, 4, 5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9868, '{1, 2, 3} ∪ {2, 4, 5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9869, '{1, 2, 3} ∪ {4, 5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9870, '{1, 2} ∪ {2, 3, 4, 5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9871, '{1} ∪ {2, 3, 4, 5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9872, '{5, 1} ∪ {5, 1, 2, 3, 4}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9873, '{5, 1, 2, 2, 2, 1} ∪ {5, 1, 2, 3, 4}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9874, '{5, 1, 2, 2, 2, 1, 4} ∪ {5, 1, 1, 2, 3, 4}', intset([1, 2, 3, 4, 5]));

  Test({LINENUM}9876, '{1, 2, 3, 4, 5} ∪ {}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9877, '{1, 2, 3, 4, 5, 5, 5} ∪ {}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9878, '{3, 4, 1, 2, 2, 4, 5, 1, 2, 3} ∪ {}', intset([1, 2, 3, 4, 5]));

  Test({LINENUM}9880, '{} ∪ {1, 2, 3, 4, 5}', intset([1, 2, 3, 4, 5]));

  Test({LINENUM}9882, '{1, 2} ∪ {3} ∪ {4, 5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9883, '{1, 2, 3} ∪ {3} ∪ {4, 5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9884, '{1} ∪ {2, 3} ∪ {4, 5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9885, '{1, 4, 5, 4, 2} ∪ {3} ∪ {4, 5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9886, '{1, 2} ∪ {1, 2, 3} ∪ {1, 2, 4, 5}', intset([1, 2, 3, 4, 5]));

  Test({LINENUM}9888, '{1, 2} ∪ {1, 2, 3} ∪ {1, 2, 4, 5, 6}', intset([1, 2, 3, 4, 5, 6]));
  Test({LINENUM}9889, '{6, 1, 2} ∪ {1, 2, 3} ∪ {1, 2, 4, 5}', intset([1, 2, 3, 4, 5, 6]));
  Test({LINENUM}9890, '{1, 2} ∪ {1, 2, 6, 3} ∪ {1, 2, 4, 5}', intset([1, 2, 3, 4, 5, 6]));
  Test({LINENUM}9891, '{1, 2} ∪ {1, 2, 3} ∪ {1, 2, 4, 5} ∪ {6}', intset([1, 2, 3, 4, 5, 6]));

  Test({LINENUM}9893, '{1} ∪ {2} ∪ {3} ∪ {4} ∪ {5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9894, '{1} ∪ {} ∪ {2} ∪ {3} ∪ {4} ∪ {5}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}9895, '{4} ∪ {1} ∪ {2} ∪ {3} ∪ {5, 4} ∪ {2}', intset([1, 2, 3, 4, 5]));

  Test({LINENUM}9897, '{4} ∪ {1} ∪ {2} ∪ {3} ∪ {5, 4} ∪ {2, 10}', intset([1, 2, 3, 4, 5, 10]));
  Test({LINENUM}9898, '{10, 4} ∪ {1} ∪ {2} ∪ {3} ∪ {5, 4} ∪ {2}', intset([1, 2, 3, 4, 5, 10]));
  Test({LINENUM}9899, '{4} ∪ {1} ∪ {2} ∪ {3, 10} ∪ {5, 4} ∪ {2}', intset([1, 2, 3, 4, 5, 10]));
  Test({LINENUM}9900, '{4} ∪ {1} ∪ {10} ∪ {2, 3} ∪ {5, 4} ∪ {}', intset([1, 2, 3, 4, 5, 10]));

  Test({LINENUM}9902, '{42, "cat"} ∪ {10, "dog"} ∪ {"rat"} ∪ {100, 101, 102}', asoset([10, 42, 100, 101, 102, 'cat', 'dog', 'rat']));
  Test({LINENUM}9903, '{42, "cat"} ∪ {42, 10, "dog"} ∪ {101, "rat"} ∪ {101, 101, 100, 102}', asoset([10, 42, 100, 101, 102, 'cat', 'dog', 'rat']));

  Test({LINENUM}9905, '{10} ∪ {10.0}', intset([10]));
  Test({LINENUM}9906, '{10.0} ∪ {10}', intset([10]));
  Test({LINENUM}9907, '#({10} ∪ {10.0})', 1);
  Test({LINENUM}9908, '#({10.0} ∪ {10})', 1);
  Test({LINENUM}9909, '({10} ∪ {10.0}) @ type', asoset(['integer']));
  Test({LINENUM}9910, '({10.0} ∪ {10}) @ type', asoset(['integer']));

  Test({LINENUM}9912, '{} ∪ {}', intset([]));
  Test({LINENUM}9913, '{} ∪ {} ∪ {}', intset([]));
  Test({LINENUM}9914, '{} ∪ {} ∪ {7}', intset([7]));

  Test({LINENUM}9916, '{color("red"), color("lime"), color("blue")} ∪ {color("yellow"), color("black")}',
    asosetex([
      ASO(TRGB.Create(1, 0, 0)),
      ASO(TRGB.Create(0, 1, 0)),
      ASO(TRGB.Create(0, 0, 1)),
      ASO(TRGB.Create(1, 1, 0)),
      ASO(TRGB.Create(0, 0, 0))
    ]));
  Test({LINENUM}9924, '{color("red"), color("lime"), color("blue")} ∪ {color("red"), color("yellow"), color("black")}',
    asosetex([
      ASO(TRGB.Create(1, 0, 0)),
      ASO(TRGB.Create(0, 1, 0)),
      ASO(TRGB.Create(0, 0, 1)),
      ASO(TRGB.Create(1, 1, 0)),
      ASO(TRGB.Create(0, 0, 0))
    ]));
  Test({LINENUM}9932, '{color("red"), color("lime"), color("blue")} ∪ {color("red"), color("yellow"), color("black"), color("red"), color("lime")}',
    asosetex([
      ASO(TRGB.Create(1, 0, 0)),
      ASO(TRGB.Create(0, 1, 0)),
      ASO(TRGB.Create(0, 0, 1)),
      ASO(TRGB.Create(1, 1, 0)),
      ASO(TRGB.Create(0, 0, 0))
    ]));

  Test({LINENUM}9941, '{❨1, 0, 0❩} ∪ {❨0, 1, 0❩} ∪ {❨0, 0, 1❩}',
    asosetex([
      ASO(ASR3(1, 0, 0)),
      ASO(ASR3(0, 1, 0)),
      ASO(ASR3(0, 0, 1))
    ]));
  Test({LINENUM}9947, '{❨1, 0, 0❩, ❨0, 1, 0❩} ∪ {❨0, 1, 0❩, ❨0, 0, 1❩, ❨0, i−i, 1❩}',
    asosetex([
      ASO(ASR3(1, 0, 0)),
      ASO(ASR3(0, 1, 0)),
      ASO(ASR3(0, 0, 1))
    ]));

  Test({LINENUM}9954, '{IdentityMatrix(1), IdentityMatrix(2), IdentityMatrix(3), IdentityMatrix(4)} ∪ {"rat", IdentityMatrix(4), IdentityMatrix(5)}',
    asosetex([
      ASO(IdentityMatrix(1)),
      ASO(IdentityMatrix(2)),
      ASO(IdentityMatrix(3)),
      ASO(IdentityMatrix(4)),
      ASO(IdentityMatrix(5)),
      ASO('rat')
    ]));

  Test({LINENUM}9964, '{10, 20} ∪ "test"', failure, 'An object of type set was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}9965, '123 ∪ {"test"}', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');

  // Intersection

  Test({LINENUM}9969, '{10, 20, 30, 40} ∩ {30, 40, 50, 60}', intset([30, 40]));
  Test({LINENUM}9970, '{10, 20, 30, 40} ∩ {30, 40, 50, 60, 70, 80}', intset([30, 40]));
  Test({LINENUM}9971, '{10, 20, 30, 40} ∩ {30, 40, 50, 60, 70, 80, 20}', intset([20, 30, 40]));
  Test({LINENUM}9972, '{10, 20, 30} ∩ {30, 40, 50}', intset([30]));
  Test({LINENUM}9973, '{10, 20, 30} ∩ {40, 50, 60}', intset([]));
  Test({LINENUM}9974, '{10, 20, 30} ∩ {}', intset([]));
  Test({LINENUM}9975, '{} ∩ {}', intset([]));
  Test({LINENUM}9976, '{} ∩ {} ∩ {}', intset([]));
  Test({LINENUM}9977, '{} ∩ {} ∩ {} ∩ {"rat"}', intset([]));
  Test({LINENUM}9978, '{10, "rat"} ∩ {"rat", false} ∩ {color("red"), "rat"} ∩ {"rat", IdentityMatrix(100)}', asoset(['rat']));

  Test({LINENUM}9980, '{10, 20, 30, 40, 50} ∩ {10, 30, 50, 70} ∩ {30, 31, 32}', intset([30]));
  Test({LINENUM}9981, '{10, 20, 30, 40, 50} ∩ {10, 30, 50, 70} ∩ {10, 30, 31, 32}', intset([10, 30]));
  Test({LINENUM}9982, '{10, 20, 30, 40, 50} ∩ {10, 30, 50, 70} ∩ {10, 30, 31, 32} ∩ {10}', intset([10]));
  Test({LINENUM}9983, '{10, 20, 30, 40, 50} ∩ {10, 30, 50, 70} ∩ {10, 30, 31, 32} ∩ {20}', intset([]));
  Test({LINENUM}9984, '{10, 20, 30, 40, 50} ∩ {10, 30, 50, 70} ∩ {10, 30, 31, 32} ∩ {10} ∩ {11}', intset([]));

  Test({LINENUM}9986, '{10, 20, 30, 40, 50, 60, 70, 80, 90, 100} ∩ {10, 20, 25.0}', intset([10, 20]));
  Test({LINENUM}9987, '{10, 20, 30, 40, 50, 60, 70, 80, 90, 100} ∩ {10.0, 20, 25.0}', intset([10, 20]));
  Test({LINENUM}9988, '{10, 20, 30, 40, 50, 60, 70, 80, 90, 100} ∩ {10.0, 20.0, 25.0}', intset([10, 20]));

  Test({LINENUM}9990, '{10, true, i, "cat", "dog", 0, "rat", "table", 123} ∩ {"cat", "dog", "rat", "rabbit", "hourse"}', asoset(['cat', 'dog', 'rat']));
  Test({LINENUM}9991, '{0, 123} ∩ {10, true, i, "cat", "dog", 0, "rat", "table", 123} ∩ {0, 10, 20, 30}', asoset([0]));
  Test({LINENUM}9992, '{0, 123} ∩ {10, true, i, "cat", "dog", i-i, "rat", "table", 123} ∩ {0.0, 10, 20, 30}', asoset([0]));

  Test({LINENUM}9994, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨1, 1, 0❩, ❨0, 1, 1❩, ❨0, 0, 1❩} ∩ {❨0, 0, 0❩, ❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}',
    asosetex([
      ASO(ASR3(1, 0, 0)),
      ASO(ASR3(0, 1, 0)),
      ASO(ASR3(0, 0, 1))
    ]));
  Test({LINENUM}10000, '{"dog", 5, ❨1, 0, 0❩, ❨1, 0, 0❩, ❨0, 1, 0❩, ❨1, 1, 0❩, ❨0, 1, 1❩, ❨0, 0, 1❩} ∩ {❨0, 0, 0❩, ❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "rat"}',
    asosetex([
      ASO(ASR3(1, 0, 0)),
      ASO(ASR3(0, 1, 0)),
      ASO(ASR3(0, 0, 1))
    ]));

  Test({LINENUM}10007, '{ZeroMatrix(2), ZeroMatrix(3), ZeroMatrix(4)} ∩ {ZeroMatrix(3), 1024}',
    asosetex([
      ASO(ZeroMatrix(3))
    ]));

  Test({LINENUM}10012, '{ZeroMatrix(2), ZeroMatrix(3), ZeroMatrix(3), ZeroMatrix(4)} ∩ {ZeroMatrix(3), 1024} ∩ {ZeroMatrix(3)}',
    asosetex([
      ASO(ZeroMatrix(3))
    ]));

  Test({LINENUM}10017, '{ZeroMatrix(2), ZeroMatrix(3), ZeroMatrix(4)} ∩ {ZeroMatrix(3), 1024} ∩ {ZeroMatrix(2)}',
    asosetex([

    ]));

  Test({LINENUM}10022, '{10, 20, 30} ∩ true', failure, 'An object of type set was expected as argument 2, but an object of type boolean was given.');
  Test({LINENUM}10023, '7 ∩ {"rat", "dog"}', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10024, 'color("red") ∩ color("yellow")', failure, 'An object of type set was expected as argument 1, but an object of type color was given.');

  // Set difference

  Test({LINENUM}10028, '{10, 20, 30, 40, 50, 60, 70, 80, 90} ∖ {50, 60, 70}', intset([10, 20, 30, 40, 80, 90]));
  Test({LINENUM}10029, '{10, 20, 30, 40, 50, 60, 70, 80, 90} ∖ {50, 60, 70, 80, 90}', intset([10, 20, 30, 40]));
  Test({LINENUM}10030, '{10, 20, 30, 40, 50, 60, 70, 80, 90} ∖ {10, 50, 60, 70, 80, 90}', intset([20, 30, 40]));
  Test({LINENUM}10031, '{10, 20, 30, 40, 50, 60, 70, 80, 90} ∖ {10, 20, 25, 50, 60, 70, 80, 90}', intset([30, 40]));
  Test({LINENUM}10032, '{10, 20, 30, 40, 50, 60, 70, 80, 90} ∖ {10, 20, 25, 50, 55, 60, 65, 70, 80, 90}', intset([30, 40]));
  Test({LINENUM}10033, '{10, 20, 30, 40, 50, 60, 70, 80, 90} ∖ {10, 20, 25, 50, 55, 60, 65, 70, 80, 90, 30}', intset([40]));
  Test({LINENUM}10034, '{10, 20, 30, 40, 50, 60, 70, 80, 90} ∖ {10, 20, 25, 50, 55, 60, 65, 70, 80, 90, 30, 40.0}', intset([]));
  Test({LINENUM}10035, '{10, 20, 30, 40, 50, 60, 70, 80, 90} ∖ {10, 20, 25, 50, 55, 60, 65, 70, 80, 90, 30, 40.0, 42}', intset([]));

  Test({LINENUM}10037, '{1.1, 1.2, 1.3, 1.4, 1.5} ∖ {0.5, 1.5, 2.5}', asoset([1.1, 1.2, 1.3, 1.4]));

  Test({LINENUM}10039, '{1, 2, 3, 4, 5} ∖ {1, 3, 5, 7, 9, 11}', intset([2, 4]));
  Test({LINENUM}10040, '{1, 2, 3, 4, 5} ∖ {10, 20, 30, "rat"}', intset([1, 2, 3, 4, 5]));
  Test({LINENUM}10041, '{1, 2, 3, 4, 5} ∖ {}', intset([1, 2, 3, 4, 5]));

  Test({LINENUM}10043, '{5, 2, 3, 4, 1, 5, 1} ∖ {2, 4, 4, 4, 2, 4, 2, 4}', intset([1, 3, 5]));

  Test({LINENUM}10045, '{1, 2, 3, 4, 5} ∖ {2, 4, 6, 8} ∖ {5} ∖ {50, 100}', intset([1, 3]));

  Test({LINENUM}10047, '{1, 2, 3, 4, 5} ∖ {2, 4, 6, 8} ∖ {5} ∖ {50, 100} ∖ {-5, -3, -1, 1, 3, 5}', intset([]));
  Test({LINENUM}10048, '{1, 2, 3, 4, 5} ∖ {2, 4, 6, 8} ∖ {5} ∖ {50, 100} ∖ {-5, -3, -1, 1, 3, 5} ∖ {42}', intset([]));

  Test({LINENUM}10050, '{1, 2, 3, "dog", 4, 5, "rat", 6, 7, "cat", 8, 9} ∖ {1, 2, 3, 4, 5, 6, 7, 8, 9}', asoset(['dog', 'cat', 'rat']));
  Test({LINENUM}10051, '{1, 2, 3, "dog", 4, 5, "rat", 6, 7, "cat", 8, 9} ∖ {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}', asoset(['dog', 'cat', 'rat']));

  Test({LINENUM}10053, '{10, i, 20, -i} ∖ {10, 20, 30, 40, 50}', asosetex([ASO(ImaginaryUnit), ASO(-ImaginaryUnit)]));

  Test({LINENUM}10055, '{} ∖ {10, 20, 30}', intset([]));
  Test({LINENUM}10056, '{} ∖ {}', intset([]));

  Test({LINENUM}10058, '{1, 2, 3, 4, 5} ∖ {"cat", "dog"}', intset([1, 2, 3, 4, 5]));

  Test({LINENUM}10060, '{IdentityMatrix(2), IdentityMatrix(3), IdentityMatrix(4)} ∖ {IdentityMatrix(2)}',
    asosetex([
      ASO(IdentityMatrix(3)),
      ASO(IdentityMatrix(4))
    ]));

  Test({LINENUM}10066, '{1, 2, 3} ∖ 2', failure, 'An object of type set was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}10067, '"dog" ∖ 2', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');

  // Symmetric difference

  Test({LINENUM}10071, '{1, 2, 3, 4, 5, 6, 7, 8, 9} ∆ {6, 7, 8, 9, 10, 11, 12, 13}', intset([1, 2, 3, 4, 5, 10, 11, 12, 13]));

  Test({LINENUM}10073, '{1, 2, 3, 4, 5} ∆ {1, 10, 100}', intset([2, 3, 4, 5, 10, 100]));
  Test({LINENUM}10074, '{2, 3, 5, 7, 11, 13, 17, 19} ∆ {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}', intset([1, 2, 9, 15]));
  Test({LINENUM}10075, '{2, 3, 5, 7, 11, 13, 17, 19} ∆ {}', intset([2, 3, 5, 7, 11, 13, 17, 19]));
  Test({LINENUM}10076, '{} ∆ {0, 1, 2, 3, 4, 5}', intset([0, 1, 2, 3, 4, 5]));
  Test({LINENUM}10077, '{} ∆ {}', intset([]));
  Test({LINENUM}10078, '{0, 1, 2, 3, 4, 5} ∆ {0, 1, 2, 3, 4, 5}', intset([]));
  Test({LINENUM}10079, '{0, 1, 2, 3, 4, 5, 7} ∆ {0, 1, 2, 3, 4, 5}', intset([7]));
  Test({LINENUM}10080, '{0, 1, 2, 3, 4, 5} ∆ {0, 1, 2, 3, 4, 5, 7}', intset([7]));
  Test({LINENUM}10081, '{0, 1, 2, 3, 4, 5, 5} ∆ {0, 1, 2, 3, 4, 5}', intset([]));
  Test({LINENUM}10082, '{0, 1, 2, 3, 4, 5, 5, 5, 5} ∆ {5, 5, 5, 0, 1, 2, 3, 4, 5}', intset([]));
  Test({LINENUM}10083, '{0, 1, 2, 3, 4, 5, 5, 5, 5, 6} ∆ {5, 5, 5, -1, 0, 1, 2, 3, 4, 5}', intset([-1, 6]));

  Test({LINENUM}10085, '{"human", "dog", "cat", "wolf", "tiger", "lion", "rat"} ∆ {"rabbit", "rat", "human", "dog", "guinea pig", "horse", "cow", "sheep"}',
    asoset(['cat', 'wolf', 'tiger', 'lion', 'rabbit', 'guinea pig', 'horse', 'cow', 'sheep']));

  Test({LINENUM}10088, '{1, 2, 3} ∆ 3', failure, 'An object of type set was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}10089, 'true ∆ 3', failure, 'An object of type set was expected as argument 1, but an object of type boolean was given.');

  // Complement

  Test({LINENUM}10093, 'try(delete(universe))', null);

  Test({LINENUM}10095, '∁{1, 2, 3}', failure, 'Unknown identifier "universe".');
  Test({LINENUM}10096, 'universe ≔ {1, 2, 3, 4, 5}; ∁{1, 2, 3}', intset([4, 5]));
  Test({LINENUM}10097, '∁{1, 3, 5}', intset([2, 4]));
  Test({LINENUM}10098, '∁{2, 4}', intset([1, 3, 5]));
  Test({LINENUM}10099, '∁{1, 2, 3, 4}', intset([5]));
  Test({LINENUM}10100, '∁{1, 2, 3, 5}', intset([4]));
  Test({LINENUM}10101, '∁{1, 2, 3, 4, 5}', intset([]));
  Test({LINENUM}10102, '∁{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}', intset([]));
  Test({LINENUM}10103, '∁{"rabbit", "cat", "horse", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "dog"}', intset([]));

  Test({LINENUM}10105, 'universe ≔ {1, 2, 3, 4, 5, "rabbit", "guinea pig"}; ∁{"rabbit", "cat", "horse", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "dog"}',
    asoset(['guinea pig']));

  Test({LINENUM}10108, '∁ 5', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10109, '∁5', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10110, '∁(5)', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');

  Test({LINENUM}10112, '∁ "rat"', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}10113, '∁"dog"', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}10114, '∁("cat")', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}10116, 'delete(universe); ∁{1, 2, 3}', failure, 'Unknown identifier "universe".');

  // Element of (set membership, the "in" operator)

  Test({LINENUM}10120, '0 ∈ {1, 2, 3}', False);
  Test({LINENUM}10121, '1 ∈ {1, 2, 3}', True);
  Test({LINENUM}10122, '2 ∈ {1, 2, 3}', True);
  Test({LINENUM}10123, '3 ∈ {1, 2, 3}', True);
  Test({LINENUM}10124, '4 ∈ {1, 2, 3}', False);
  Test({LINENUM}10125, '5 ∈ {1, 2, 3}', False);

  Test({LINENUM}10127, '0 ∈ {1, 2, 3, 3, 2, 1, 2, 3}', False);
  Test({LINENUM}10128, '1 ∈ {1, 1, 2, 3, 2, 1, 2, 3}', True);
  Test({LINENUM}10129, '2 ∈ {3, 2, 1, 2, 3, 1, 2, 3}', True);
  Test({LINENUM}10130, '3 ∈ {2, 3, 1, 2, 3}', True);
  Test({LINENUM}10131, '4 ∈ {1, 1, 1, 1, 1, 2, 3}', False);
  Test({LINENUM}10132, '5 ∈ {3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3}', False);

  Test({LINENUM}10134, '"cat" ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10135, '"dog" ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10136, '"rat" ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10137, '"rabbit" ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10138, '"guinea pig" ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10139, '"horse" ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10140, '"cow" ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10141, '"tarantula" ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10142, 'i ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10143, 'true ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10144, 'color("red") ∈ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);

  Test({LINENUM}10146, '6 ∈ {}', False);
  Test({LINENUM}10147, '"dog" ∈ {}', False);
  Test({LINENUM}10148, 'i ∈ {}', False);

  Test({LINENUM}10150, '42 ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10151, 'i ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10152, 'color("red") ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10153, '"rat" ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10154, 'IdentityMatrix(10) ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);

  Test({LINENUM}10156, '123 ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10157, '1 ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10158, 'color("green") ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10159, '"dog" ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10160, 'IdentityMatrix(4) ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10161, 'false ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10162, 'BinaryData(123) ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10163, 'ZeroVector(3) ∈ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);

  Test({LINENUM}10165, '❨1, 0, 0❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);
  Test({LINENUM}10166, '❨0, 1, 0❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);
  Test({LINENUM}10167, '❨0, 0, 1❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);

  Test({LINENUM}10169, '❨1, 1, 0❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);
  Test({LINENUM}10170, '❨0, 1, 1❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);
  Test({LINENUM}10171, '❨1, 1, 1❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);
  Test({LINENUM}10172, '❨1, 2, 3❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);

  Test({LINENUM}10174, '10.5 ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);
  Test({LINENUM}10175, '"guinea pig" ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);

  Test({LINENUM}10177, '"guinea pig" ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"}', True);
  Test({LINENUM}10178, '❨1, 0, 0❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"}', True);
  Test({LINENUM}10179, '❨0, 1, 0❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"}', True);
  Test({LINENUM}10180, '❨0, 0, 1❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"}', True);
  Test({LINENUM}10181, '❨1, 1, 0❩ ∈ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"}', False);

  Test({LINENUM}10183, '10 ∈ {10, 20, 30}', True);
  Test({LINENUM}10184, '10 ∈ {10.0, 20.0, 30.0}', True);
  Test({LINENUM}10185, '10.0 ∈ {10, 20, 30}', True);
  Test({LINENUM}10186, '10 ∈ {10+i-i, 20, 30}', True);
  Test({LINENUM}10187, '10+i-i ∈ {10, 20, 30}', True);

  Test({LINENUM}10189, '100 ∈ {10, 20, 30}', False);
  Test({LINENUM}10190, '100 ∈ {10.0, 20.0, 30.0}', False);
  Test({LINENUM}10191, '100.0 ∈ {10, 20, 30}', False);
  Test({LINENUM}10192, '100 ∈ {10+i-i, 20, 30}', False);
  Test({LINENUM}10193, '100+i-i ∈ {10, 20, 30}', False);

  Test({LINENUM}10195, '0 ∈ {0}', True);
  Test({LINENUM}10196, '0.0 ∈ {0}', True);
  Test({LINENUM}10197, '1/2 - 1/2 ∈ {0}', True);
  Test({LINENUM}10198, 'i - i ∈ {0}', True);

  Test({LINENUM}10200, '0 ∈ {0.0}', True);
  Test({LINENUM}10201, '0.0 ∈ {0.0}', True);
  Test({LINENUM}10202, '1/2 - 1/2 ∈ {0.0}', True);
  Test({LINENUM}10203, 'i - i ∈ {0.0}', True);

  Test({LINENUM}10205, '0 ∈ {1/2 - 1/2}', True);
  Test({LINENUM}10206, '0.0 ∈ {1/2 - 1/2}', True);
  Test({LINENUM}10207, '1/2 - 1/2 ∈ {1/2 - 1/2}', True);
  Test({LINENUM}10208, 'i - i ∈ {1/2 - 1/2}', True);

  Test({LINENUM}10210, '0 ∈ {i-i}', True);
  Test({LINENUM}10211, '0.0 ∈ {i-i}', True);
  Test({LINENUM}10212, '1/2 - 1/2 ∈ {i-i}', True);
  Test({LINENUM}10213, 'i - i ∈ {i-i}', True);

  Test({LINENUM}10215, '1/2 + 1/2 ∈ {1, 5}', True);

  Test({LINENUM}10217, '5 ∈ 125.5', failure, 'An object of type set was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}10218, '"rat" ∈ "rational"', failure, 'An object of type set was expected as argument 2, but an object of type string was given.');

  // Not an element of (set membership, the "not in" operator)

  Test({LINENUM}10222, '0 ∉ {1, 2, 3}', True);
  Test({LINENUM}10223, '1 ∉ {1, 2, 3}', False);
  Test({LINENUM}10224, '2 ∉ {1, 2, 3}', False);
  Test({LINENUM}10225, '3 ∉ {1, 2, 3}', False);
  Test({LINENUM}10226, '4 ∉ {1, 2, 3}', True);
  Test({LINENUM}10227, '5 ∉ {1, 2, 3}', True);

  Test({LINENUM}10229, '0 ∉ {1, 2, 3, 3, 2, 1, 2, 3}', True);
  Test({LINENUM}10230, '1 ∉ {1, 1, 2, 3, 2, 1, 2, 3}', False);
  Test({LINENUM}10231, '2 ∉ {3, 2, 1, 2, 3, 1, 2, 3}', False);
  Test({LINENUM}10232, '3 ∉ {2, 3, 1, 2, 3}', False);
  Test({LINENUM}10233, '4 ∉ {1, 1, 1, 1, 1, 2, 3}', True);
  Test({LINENUM}10234, '5 ∉ {3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3}', True);

  Test({LINENUM}10236, '"cat" ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10237, '"dog" ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10238, '"rat" ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10239, '"rabbit" ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10240, '"guinea pig" ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10241, '"horse" ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10242, '"cow" ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10243, '"tarantula" ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10244, 'i ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10245, 'true ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10246, 'color("red") ∉ {"dog", "cat", "rat", "rabbit", "guinea pig"}', True);

  Test({LINENUM}10248, '6 ∉ {}', True);
  Test({LINENUM}10249, '"dog" ∉ {}', True);
  Test({LINENUM}10250, 'i ∉ {}', True);

  Test({LINENUM}10252, '42 ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10253, 'i ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10254, 'color("red") ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10255, '"rat" ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);
  Test({LINENUM}10256, 'IdentityMatrix(10) ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', False);

  Test({LINENUM}10258, '123 ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10259, '1 ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10260, 'color("green") ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10261, '"dog" ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10262, 'IdentityMatrix(4) ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10263, 'false ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10264, 'BinaryData(123) ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);
  Test({LINENUM}10265, 'ZeroVector(3) ∉ {42, i, color("red"), "rat", IdentityMatrix(10)}', True);

  Test({LINENUM}10267, '❨1, 0, 0❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);
  Test({LINENUM}10268, '❨0, 1, 0❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);
  Test({LINENUM}10269, '❨0, 0, 1❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);

  Test({LINENUM}10271, '❨1, 1, 0❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);
  Test({LINENUM}10272, '❨0, 1, 1❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);
  Test({LINENUM}10273, '❨1, 1, 1❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);
  Test({LINENUM}10274, '❨1, 2, 3❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);

  Test({LINENUM}10276, '10.5 ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);
  Test({LINENUM}10277, '"guinea pig" ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);

  Test({LINENUM}10279, '"guinea pig" ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"}', False);
  Test({LINENUM}10280, '❨1, 0, 0❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"}', False);
  Test({LINENUM}10281, '❨0, 1, 0❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"}', False);
  Test({LINENUM}10282, '❨0, 0, 1❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"}', False);
  Test({LINENUM}10283, '❨1, 1, 0❩ ∉ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"}', True);

  Test({LINENUM}10285, '10 ∉ {10, 20, 30}', False);
  Test({LINENUM}10286, '10 ∉ {10.0, 20.0, 30.0}', False);
  Test({LINENUM}10287, '10.0 ∉ {10, 20, 30}', False);
  Test({LINENUM}10288, '10 ∉ {10+i-i, 20, 30}', False);
  Test({LINENUM}10289, '10+i-i ∉ {10, 20, 30}', False);

  Test({LINENUM}10291, '100 ∉ {10, 20, 30}', True);
  Test({LINENUM}10292, '100 ∉ {10.0, 20.0, 30.0}', True);
  Test({LINENUM}10293, '100.0 ∉ {10, 20, 30}', True);
  Test({LINENUM}10294, '100 ∉ {10+i-i, 20, 30}', True);
  Test({LINENUM}10295, '100+i-i ∉ {10, 20, 30}', True);

  Test({LINENUM}10297, '0 ∉ {0}', False);
  Test({LINENUM}10298, '0.0 ∉ {0}', False);
  Test({LINENUM}10299, '1/2 - 1/2 ∉ {0}', False);
  Test({LINENUM}10300, 'i - i ∉ {0}', False);

  Test({LINENUM}10302, '0 ∉ {0.0}', False);
  Test({LINENUM}10303, '0.0 ∉ {0.0}', False);
  Test({LINENUM}10304, '1/2 - 1/2 ∉ {0.0}', False);
  Test({LINENUM}10305, 'i - i ∉ {0.0}', False);

  Test({LINENUM}10307, '0 ∉ {1/2 - 1/2}', False);
  Test({LINENUM}10308, '0.0 ∉ {1/2 - 1/2}', False);
  Test({LINENUM}10309, '1/2 - 1/2 ∉ {1/2 - 1/2}', False);
  Test({LINENUM}10310, 'i - i ∉ {1/2 - 1/2}', False);

  Test({LINENUM}10312, '0 ∉ {i-i}', False);
  Test({LINENUM}10313, '0.0 ∉ {i-i}', False);
  Test({LINENUM}10314, '1/2 - 1/2 ∉ {i-i}', False);
  Test({LINENUM}10315, 'i - i ∉ {i-i}', False);

  Test({LINENUM}10317, '1/2 + 1/2 ∉ {1, 5}', False);

  Test({LINENUM}10319, '5 ∉ 125.5', failure, 'An object of type set was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}10320, '"rat" ∉ "rational"', failure, 'An object of type set was expected as argument 2, but an object of type string was given.');

  // Contains as member (set membership)

  Test({LINENUM}10324, '{1, 2, 3} ∋ 0', False);
  Test({LINENUM}10325, '{1, 2, 3} ∋ 1', True);
  Test({LINENUM}10326, '{1, 2, 3} ∋ 2', True);
  Test({LINENUM}10327, '{1, 2, 3} ∋ 3', True);
  Test({LINENUM}10328, '{1, 2, 3} ∋ 4', False);
  Test({LINENUM}10329, '{1, 2, 3} ∋ 5', False);

  Test({LINENUM}10331, '{1, 2, 3, 3, 2, 1, 2, 3} ∋ 0', False);
  Test({LINENUM}10332, '{1, 1, 2, 3, 2, 1, 2, 3} ∋ 1', True);
  Test({LINENUM}10333, '{3, 2, 1, 2, 3, 1, 2, 3} ∋ 2', True);
  Test({LINENUM}10334, '{2, 3, 1, 2, 3} ∋ 3', True);
  Test({LINENUM}10335, '{1, 1, 1, 1, 1, 2, 3} ∋ 4', False);
  Test({LINENUM}10336, '{3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3} ∋ 5', False);

  Test({LINENUM}10338, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ "cat"', True);
  Test({LINENUM}10339, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ "dog"', True);
  Test({LINENUM}10340, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ "rat"', True);
  Test({LINENUM}10341, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ "rabbit"', True);
  Test({LINENUM}10342, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ "guinea pig"', True);
  Test({LINENUM}10343, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ "horse"', False);
  Test({LINENUM}10344, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ "cow"', False);
  Test({LINENUM}10345, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ "tarantula"', False);
  Test({LINENUM}10346, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ i', False);
  Test({LINENUM}10347, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ true', False);
  Test({LINENUM}10348, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∋ color("red")', False);

  Test({LINENUM}10350, '{} ∋ 6', False);
  Test({LINENUM}10351, '{} ∋ "dog"', False);
  Test({LINENUM}10352, '{} ∋ i', False);

  Test({LINENUM}10354, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ 42', True);
  Test({LINENUM}10355, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ i', True);
  Test({LINENUM}10356, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ color("red")', True);
  Test({LINENUM}10357, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ "rat"', True);
  Test({LINENUM}10358, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ IdentityMatrix(10)', True);

  Test({LINENUM}10360, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ 123', False);
  Test({LINENUM}10361, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ 1', False);
  Test({LINENUM}10362, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ color("green")', False);
  Test({LINENUM}10363, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ "dog"', False);
  Test({LINENUM}10364, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ IdentityMatrix(4)', False);
  Test({LINENUM}10365, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ false', False);
  Test({LINENUM}10366, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ BinaryData(123)', False);
  Test({LINENUM}10367, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∋ ZeroVector(3)', False);

  Test({LINENUM}10369, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∋ ❨1, 0, 0❩', True);
  Test({LINENUM}10370, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∋ ❨0, 1, 0❩', True);
  Test({LINENUM}10371, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∋ ❨0, 0, 1❩', True);

  Test({LINENUM}10373, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∋ ❨1, 1, 0❩', False);
  Test({LINENUM}10374, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∋ ❨0, 1, 1❩', False);
  Test({LINENUM}10375, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∋ ❨1, 1, 1❩', False);
  Test({LINENUM}10376, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∋ ❨1, 2, 3❩', False);

  Test({LINENUM}10378, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∋ 10.5', False);
  Test({LINENUM}10379, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∋ "guinea pig"', False);

  Test({LINENUM}10381, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"} ∋ "guinea pig"', True);
  Test({LINENUM}10382, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"} ∋ ❨1, 0, 0❩', True);
  Test({LINENUM}10383, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"} ∋ ❨0, 1, 0❩', True);
  Test({LINENUM}10384, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"} ∋ ❨0, 0, 1❩', True);
  Test({LINENUM}10385, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"} ∋ ❨1, 1, 0❩', False);

  Test({LINENUM}10387, '{1, 5} ∋ 1/2 + 1/2', True);

  Test({LINENUM}10389, '125.5 ∋ 5', failure, 'An object of type set was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}10390, '"rational" ∋ "rat"', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');

  // Does not contain as member (set membership)

  Test({LINENUM}10394, '{1, 2, 3} ∌ 0', True);
  Test({LINENUM}10395, '{1, 2, 3} ∌ 1', False);
  Test({LINENUM}10396, '{1, 2, 3} ∌ 2', False);
  Test({LINENUM}10397, '{1, 2, 3} ∌ 3', False);
  Test({LINENUM}10398, '{1, 2, 3} ∌ 4', True);
  Test({LINENUM}10399, '{1, 2, 3} ∌ 5', True);

  Test({LINENUM}10401, '{1, 2, 3, 3, 2, 1, 2, 3} ∌ 0', True);
  Test({LINENUM}10402, '{1, 1, 2, 3, 2, 1, 2, 3} ∌ 1', False);
  Test({LINENUM}10403, '{3, 2, 1, 2, 3, 1, 2, 3} ∌ 2', False);
  Test({LINENUM}10404, '{2, 3, 1, 2, 3} ∌ 3', False);
  Test({LINENUM}10405, '{1, 1, 1, 1, 1, 2, 3} ∌ 4', True);
  Test({LINENUM}10406, '{3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3} ∌ 5', True);

  Test({LINENUM}10408, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ "cat"', False);
  Test({LINENUM}10409, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ "dog"', False);
  Test({LINENUM}10410, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ "rat"', False);
  Test({LINENUM}10411, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ "rabbit"', False);
  Test({LINENUM}10412, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ "guinea pig"', False);
  Test({LINENUM}10413, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ "horse"', True);
  Test({LINENUM}10414, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ "cow"', True);
  Test({LINENUM}10415, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ "tarantula"', True);
  Test({LINENUM}10416, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ i', True);
  Test({LINENUM}10417, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ true', True);
  Test({LINENUM}10418, '{"dog", "cat", "rat", "rabbit", "guinea pig"} ∌ color("red")', True);

  Test({LINENUM}10420, '{} ∌ 6', True);
  Test({LINENUM}10421, '{} ∌ "dog"', True);
  Test({LINENUM}10422, '{} ∌ i', True);

  Test({LINENUM}10424, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ 42', False);
  Test({LINENUM}10425, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ i', False);
  Test({LINENUM}10426, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ color("red")', False);
  Test({LINENUM}10427, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ "rat"', False);
  Test({LINENUM}10428, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ IdentityMatrix(10)', False);

  Test({LINENUM}10430, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ 123', True);
  Test({LINENUM}10431, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ 1', True);
  Test({LINENUM}10432, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ color("green")', True);
  Test({LINENUM}10433, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ "dog"', True);
  Test({LINENUM}10434, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ IdentityMatrix(4)', True);
  Test({LINENUM}10435, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ false', True);
  Test({LINENUM}10436, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ BinaryData(123)', True);
  Test({LINENUM}10437, '{42, i, color("red"), "rat", IdentityMatrix(10)} ∌ ZeroVector(3)', True);

  Test({LINENUM}10439, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∌ ❨1, 0, 0❩', False);
  Test({LINENUM}10440, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∌ ❨0, 1, 0❩', False);
  Test({LINENUM}10441, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∌ ❨0, 0, 1❩', False);

  Test({LINENUM}10443, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∌ ❨1, 1, 0❩', True);
  Test({LINENUM}10444, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∌ ❨0, 1, 1❩', True);
  Test({LINENUM}10445, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∌ ❨1, 1, 1❩', True);
  Test({LINENUM}10446, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∌ ❨1, 2, 3❩', True);

  Test({LINENUM}10448, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∌ 10.5', True);
  Test({LINENUM}10449, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ∌ "guinea pig"', True);

  Test({LINENUM}10451, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"} ∌ "guinea pig"', False);
  Test({LINENUM}10452, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"} ∌ ❨1, 0, 0❩', False);
  Test({LINENUM}10453, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"} ∌ ❨0, 1, 0❩', False);
  Test({LINENUM}10454, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"} ∌ ❨0, 0, 1❩', False);
  Test({LINENUM}10455, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, "guinea pig"} ∌ ❨1, 1, 0❩', True);

  Test({LINENUM}10457, '{1, 5} ∌ 1/2 + 1/2', False);

  Test({LINENUM}10459, '125.5 ∌ 5', failure, 'An object of type set was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}10460, '"rational" ∌ "rat"', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');

  // Subset
  // ⊂: U+2282: SUBSET OF

  Test({LINENUM}10465, '{1, 2, 3} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10466, '{0, 1, 2, 3} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10467, '{1, 2, 3, 4, 5} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10468, '{1, 2, 3, 4, 5, 6, 7, 8} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10469, '{1, 2, 3, 4, 5, 6, 7, 8, 9} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10470, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10471, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10472, '{1, 2, 3, 7, 8, 9} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);

  Test({LINENUM}10474, '{-1, 0, 1, 2, 3} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10475, '{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10476, '{1, 2, 30} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10477, '{1, 2, "cat"} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10478, '{1, 2, "cat"} ⊂ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "cat"}', True);

  Test({LINENUM}10480, '{"dog", "cat"} ⊂ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10481, '{"dog", "rat"} ⊂ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10482, '{"dog", "rat", "rabbit"} ⊂ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10483, '{"dog", "cat", "horse"} ⊂ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10484, '{"dog", "cat", "horse", "guinea pig"} ⊂ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10485, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊂ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10486, '{"dog", "rat", "cat", "rabbit", "guinea pig", "cow", "horse", "sheep"} ⊂ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);

  Test({LINENUM}10488, '{❨1, 0, 0❩, ❨0, 1, 0❩} ⊂ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);
  Test({LINENUM}10489, '{❨1, 1, 0❩, ❨0, 1, 0❩} ⊂ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);
  Test({LINENUM}10490, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊂ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);

  Test({LINENUM}10492, '{"dog", "cat", "dog"} ⊂ {"rat", "dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10493, '{"dog", "cat", "dog", "tarantula"} ⊂ {"rat", "dog", "rat", "cat", "rabbit", "guinea pig"}', False);

  Test({LINENUM}10495, '{} ⊂ {1, 2, 3}', True);
  Test({LINENUM}10496, '{} ⊂ {}', True);
  Test({LINENUM}10497, '{0} ⊂ {}', False);
  Test({LINENUM}10498, '{0} ⊂ {0}', True);

  Test({LINENUM}10500, '{4, "rat", true, IdentityMatrix(10)} ⊂ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', True);
  Test({LINENUM}10501, '{4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")} ⊂ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', True);
  Test({LINENUM}10502, '{4, "rat", true, IdentityMatrix(10), 25.5, color("red"), 123} ⊂ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', False);
  Test({LINENUM}10503, '{"rat", true, IdentityMatrix(10), 25.5, color("blue")} ⊂ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', False);
  Test({LINENUM}10504, '{25.5, false, true, 4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")} ⊂ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', True);

  Test({LINENUM}10506, '2 ⊂ {1, 2, 3}', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10507, '2 ⊂ 123', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10508, '{2} ⊂ 123', failure, 'An object of type set was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}10509, '"rat" ⊂ "rational"', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');

  // Subset (alternative operator symbol)
  // ⊆: U+2286: SUBSET OF OR EQUAL TO

  Test({LINENUM}10514, '{1, 2, 3} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10515, '{0, 1, 2, 3} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10516, '{1, 2, 3, 4, 5} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10517, '{1, 2, 3, 4, 5, 6, 7, 8} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10518, '{1, 2, 3, 4, 5, 6, 7, 8, 9} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10519, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10520, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10521, '{1, 2, 3, 7, 8, 9} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);

  Test({LINENUM}10523, '{-1, 0, 1, 2, 3} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10524, '{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10525, '{1, 2, 30} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10526, '{1, 2, "cat"} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10527, '{1, 2, "cat"} ⊆ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "cat"}', True);

  Test({LINENUM}10529, '{"dog", "cat"} ⊆ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10530, '{"dog", "rat"} ⊆ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10531, '{"dog", "rat", "rabbit"} ⊆ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10532, '{"dog", "cat", "horse"} ⊆ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10533, '{"dog", "cat", "horse", "guinea pig"} ⊆ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10534, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊆ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10535, '{"dog", "rat", "cat", "rabbit", "guinea pig", "cow", "horse", "sheep"} ⊆ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);

  Test({LINENUM}10537, '{❨1, 0, 0❩, ❨0, 1, 0❩} ⊆ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);
  Test({LINENUM}10538, '{❨1, 1, 0❩, ❨0, 1, 0❩} ⊆ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);
  Test({LINENUM}10539, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊆ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);

  Test({LINENUM}10541, '{"dog", "cat", "dog"} ⊆ {"rat", "dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10542, '{"dog", "cat", "dog", "tarantula"} ⊆ {"rat", "dog", "rat", "cat", "rabbit", "guinea pig"}', False);

  Test({LINENUM}10544, '{} ⊆ {1, 2, 3}', True);
  Test({LINENUM}10545, '{} ⊆ {}', True);
  Test({LINENUM}10546, '{0} ⊆ {}', False);
  Test({LINENUM}10547, '{0} ⊆ {0}', True);

  Test({LINENUM}10549, '{4, "rat", true, IdentityMatrix(10)} ⊆ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', True);
  Test({LINENUM}10550, '{4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")} ⊆ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', True);
  Test({LINENUM}10551, '{4, "rat", true, IdentityMatrix(10), 25.5, color("red"), 123} ⊆ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', False);
  Test({LINENUM}10552, '{"rat", true, IdentityMatrix(10), 25.5, color("blue")} ⊆ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', False);
  Test({LINENUM}10553, '{25.5, false, true, 4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")} ⊆ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', True);

  Test({LINENUM}10555, '2 ⊆ {1, 2, 3}', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10556, '2 ⊆ 123', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10557, '{2} ⊆ 123', failure, 'An object of type set was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}10558, '"rat" ⊆ "rational"', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');

  // Proper subset
  // ⊊: U+228A: SUBSET OF WITH NOT EQUAL TO

  Test({LINENUM}10563, '{1, 2, 3} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10564, '{0, 1, 2, 3} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10565, '{1, 2, 3, 4, 5} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10566, '{1, 2, 3, 4, 5, 6, 7, 8} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10567, '{1, 2, 3, 4, 5, 6, 7, 8, 9} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10568, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10569, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10570, '{1, 2, 3, 7, 8, 9} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);

  Test({LINENUM}10572, '{-1, 0, 1, 2, 3} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10573, '{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10574, '{1, 2, 30} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10575, '{1, 2, "cat"} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10576, '{1, 2, "cat"} ⊊ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "cat"}', True);

  Test({LINENUM}10578, '{"dog", "cat"} ⊊ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10579, '{"dog", "rat"} ⊊ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10580, '{"dog", "rat", "rabbit"} ⊊ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10581, '{"dog", "cat", "horse"} ⊊ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10582, '{"dog", "cat", "horse", "guinea pig"} ⊊ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10583, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊊ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10584, '{"dog", "rat", "cat", "rabbit", "guinea pig", "cow", "horse", "sheep"} ⊊ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);

  Test({LINENUM}10586, '{❨1, 0, 0❩, ❨0, 1, 0❩} ⊊ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);
  Test({LINENUM}10587, '{❨1, 1, 0❩, ❨0, 1, 0❩} ⊊ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);
  Test({LINENUM}10588, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊊ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);

  Test({LINENUM}10590, '{"dog", "cat", "dog"} ⊊ {"rat", "dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10591, '{"dog", "cat", "dog", "tarantula"} ⊊ {"rat", "dog", "rat", "cat", "rabbit", "guinea pig"}', False);

  Test({LINENUM}10593, '{} ⊊ {1, 2, 3}', True);
  Test({LINENUM}10594, '{} ⊊ {}', False);
  Test({LINENUM}10595, '{0} ⊊ {}', False);
  Test({LINENUM}10596, '{0} ⊊ {0}', False);

  Test({LINENUM}10598, '{4, "rat", true, IdentityMatrix(10)} ⊊ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', True);
  Test({LINENUM}10599, '{4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")} ⊊ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', True);
  Test({LINENUM}10600, '{4, "rat", true, IdentityMatrix(10), 25.5, color("red"), 123} ⊊ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', False);
  Test({LINENUM}10601, '{"rat", true, IdentityMatrix(10), 25.5, color("blue")} ⊊ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', False);
  Test({LINENUM}10602, '{25.5, false, true, 4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")} ⊊ {1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")}', True);

  Test({LINENUM}10604, '2 ⊊ {1, 2, 3}', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10605, '2 ⊊ 123', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10606, '{2} ⊊ 123', failure, 'An object of type set was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}10607, '"rat" ⊊ "rational"', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');

  // Superset
  // ⊃: U+2283: SUPERSET OF

  Test({LINENUM}10612, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {1, 2, 3}', True);
  Test({LINENUM}10613, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {0, 1, 2, 3}', True);
  Test({LINENUM}10614, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {1, 2, 3, 4, 5}', True);
  Test({LINENUM}10615, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {1, 2, 3, 4, 5, 6, 7, 8}', True);
  Test({LINENUM}10616, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10617, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10618, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}', False);
  Test({LINENUM}10619, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {1, 2, 3, 7, 8, 9}', True);

  Test({LINENUM}10621, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {-1, 0, 1, 2, 3}', False);
  Test({LINENUM}10622, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}', False);
  Test({LINENUM}10623, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {1, 2, 30}', False);
  Test({LINENUM}10624, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊃ {1, 2, "cat"}', False);
  Test({LINENUM}10625, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "cat"} ⊃ {1, 2, "cat"}', True);

  Test({LINENUM}10627, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊃ {"dog", "cat"}', True);
  Test({LINENUM}10628, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊃ {"dog", "rat"}', True);
  Test({LINENUM}10629, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊃ {"dog", "rat", "rabbit"}', True);
  Test({LINENUM}10630, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊃ {"dog", "cat", "horse"}', False);
  Test({LINENUM}10631, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊃ {"dog", "cat", "horse", "guinea pig"}', False);
  Test({LINENUM}10632, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊃ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10633, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊃ {"dog", "rat", "cat", "rabbit", "guinea pig", "cow", "horse", "sheep"}', False);

  Test({LINENUM}10635, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊃ {❨1, 0, 0❩, ❨0, 1, 0❩}', True);
  Test({LINENUM}10636, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊃ {❨1, 1, 0❩, ❨0, 1, 0❩}', False);
  Test({LINENUM}10637, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊃ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);

  Test({LINENUM}10639, '{"rat", "dog", "rat", "cat", "rabbit", "guinea pig"} ⊃ {"dog", "cat", "dog"}', True);
  Test({LINENUM}10640, '{"rat", "dog", "rat", "cat", "rabbit", "guinea pig"} ⊃ {"dog", "cat", "dog", "tarantula"}', False);

  Test({LINENUM}10642, '{1, 2, 3} ⊃ {}', True);
  Test({LINENUM}10643, '{} ⊃ {}', True);
  Test({LINENUM}10644, '{} ⊃ {0}', False);
  Test({LINENUM}10645, '{0} ⊃ {0}', True);

  Test({LINENUM}10647, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊃ {4, "rat", true, IdentityMatrix(10)}', True);
  Test({LINENUM}10648, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊃ {4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")}', True);
  Test({LINENUM}10649, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊃ {4, "rat", true, IdentityMatrix(10), 25.5, color("red"), 123}', False);
  Test({LINENUM}10650, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊃ {"rat", true, IdentityMatrix(10), 25.5, color("blue")}', False);
  Test({LINENUM}10651, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊃ {25.5, false, true, 4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")}', True);

  Test({LINENUM}10653, '{1, 2, 3} ⊃ 2', failure, 'An object of type set was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}10654, '123 ⊃ 2', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10655, '123 ⊃ {2}', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10656, '"rational" ⊃ "rat"', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');

  // Superset (alternative operator symbol)
  // ⊇: U+2287: SUPERSET OF OR EQUAL TO

  Test({LINENUM}10661, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {1, 2, 3}', True);
  Test({LINENUM}10662, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {0, 1, 2, 3}', True);
  Test({LINENUM}10663, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {1, 2, 3, 4, 5}', True);
  Test({LINENUM}10664, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {1, 2, 3, 4, 5, 6, 7, 8}', True);
  Test({LINENUM}10665, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10666, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10667, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}', False);
  Test({LINENUM}10668, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {1, 2, 3, 7, 8, 9}', True);

  Test({LINENUM}10670, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {-1, 0, 1, 2, 3}', False);
  Test({LINENUM}10671, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}', False);
  Test({LINENUM}10672, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {1, 2, 30}', False);
  Test({LINENUM}10673, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊇ {1, 2, "cat"}', False);
  Test({LINENUM}10674, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "cat"} ⊇ {1, 2, "cat"}', True);

  Test({LINENUM}10676, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊇ {"dog", "cat"}', True);
  Test({LINENUM}10677, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊇ {"dog", "rat"}', True);
  Test({LINENUM}10678, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊇ {"dog", "rat", "rabbit"}', True);
  Test({LINENUM}10679, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊇ {"dog", "cat", "horse"}', False);
  Test({LINENUM}10680, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊇ {"dog", "cat", "horse", "guinea pig"}', False);
  Test({LINENUM}10681, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊇ {"dog", "rat", "cat", "rabbit", "guinea pig"}', True);
  Test({LINENUM}10682, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊇ {"dog", "rat", "cat", "rabbit", "guinea pig", "cow", "horse", "sheep"}', False);

  Test({LINENUM}10684, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊇ {❨1, 0, 0❩, ❨0, 1, 0❩}', True);
  Test({LINENUM}10685, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊇ {❨1, 1, 0❩, ❨0, 1, 0❩}', False);
  Test({LINENUM}10686, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊇ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', True);

  Test({LINENUM}10688, '{"rat", "dog", "rat", "cat", "rabbit", "guinea pig"} ⊇ {"dog", "cat", "dog"}', True);
  Test({LINENUM}10689, '{"rat", "dog", "rat", "cat", "rabbit", "guinea pig"} ⊇ {"dog", "cat", "dog", "tarantula"}', False);

  Test({LINENUM}10691, '{1, 2, 3} ⊇ {}', True);
  Test({LINENUM}10692, '{} ⊇ {}', True);
  Test({LINENUM}10693, '{} ⊇ {0}', False);
  Test({LINENUM}10694, '{0} ⊇ {0}', True);

  Test({LINENUM}10696, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊇ {4, "rat", true, IdentityMatrix(10)}', True);
  Test({LINENUM}10697, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊇ {4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")}', True);
  Test({LINENUM}10698, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊇ {4, "rat", true, IdentityMatrix(10), 25.5, color("red"), 123}', False);
  Test({LINENUM}10699, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊇ {"rat", true, IdentityMatrix(10), 25.5, color("blue")}', False);
  Test({LINENUM}10700, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊇ {25.5, false, true, 4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")}', True);

  Test({LINENUM}10702, '{1, 2, 3} ⊇ 2', failure, 'An object of type set was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}10703, '123 ⊇ 2', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10704, '123 ⊇ {2}', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10705, '"rational" ⊇ "rat"', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');

  // Proper superset
  // ⊋: U+228B: SUPERSET OF WITH NOT EQUAL TO

  Test({LINENUM}10710, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {1, 2, 3}', True);
  Test({LINENUM}10711, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {0, 1, 2, 3}', True);
  Test({LINENUM}10712, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {1, 2, 3, 4, 5}', True);
  Test({LINENUM}10713, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {1, 2, 3, 4, 5, 6, 7, 8}', True);
  Test({LINENUM}10714, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {1, 2, 3, 4, 5, 6, 7, 8, 9}', True);
  Test({LINENUM}10715, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}', False);
  Test({LINENUM}10716, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}', False);
  Test({LINENUM}10717, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {1, 2, 3, 7, 8, 9}', True);

  Test({LINENUM}10719, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {-1, 0, 1, 2, 3}', False);
  Test({LINENUM}10720, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}', False);
  Test({LINENUM}10721, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {1, 2, 30}', False);
  Test({LINENUM}10722, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ⊋ {1, 2, "cat"}', False);
  Test({LINENUM}10723, '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "cat"} ⊋ {1, 2, "cat"}', True);

  Test({LINENUM}10725, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊋ {"dog", "cat"}', True);
  Test({LINENUM}10726, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊋ {"dog", "rat"}', True);
  Test({LINENUM}10727, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊋ {"dog", "rat", "rabbit"}', True);
  Test({LINENUM}10728, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊋ {"dog", "cat", "horse"}', False);
  Test({LINENUM}10729, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊋ {"dog", "cat", "horse", "guinea pig"}', False);
  Test({LINENUM}10730, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊋ {"dog", "rat", "cat", "rabbit", "guinea pig"}', False);
  Test({LINENUM}10731, '{"dog", "rat", "cat", "rabbit", "guinea pig"} ⊋ {"dog", "rat", "cat", "rabbit", "guinea pig", "cow", "horse", "sheep"}', False);

  Test({LINENUM}10733, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊋ {❨1, 0, 0❩, ❨0, 1, 0❩}', True);
  Test({LINENUM}10734, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊋ {❨1, 1, 0❩, ❨0, 1, 0❩}', False);
  Test({LINENUM}10735, '{❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩} ⊋ {❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩}', False);

  Test({LINENUM}10737, '{"rat", "dog", "rat", "cat", "rabbit", "guinea pig"} ⊋ {"dog", "cat", "dog"}', True);
  Test({LINENUM}10738, '{"rat", "dog", "rat", "cat", "rabbit", "guinea pig"} ⊋ {"dog", "cat", "dog", "tarantula"}', False);

  Test({LINENUM}10740, '{1, 2, 3} ⊋ {}', True);
  Test({LINENUM}10741, '{} ⊋ {}', False);
  Test({LINENUM}10742, '{} ⊋ {0}', False);
  Test({LINENUM}10743, '{0} ⊋ {0}', False);

  Test({LINENUM}10745, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊋ {4, "rat", true, IdentityMatrix(10)}', True);
  Test({LINENUM}10746, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊋ {4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")}', True);
  Test({LINENUM}10747, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊋ {4, "rat", true, IdentityMatrix(10), 25.5, color("red"), 123}', False);
  Test({LINENUM}10748, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊋ {"rat", true, IdentityMatrix(10), 25.5, color("blue")}', False);
  Test({LINENUM}10749, '{1, 4, 25.5, "rat", "cow", true, false, IdentityMatrix(10), IdentityMatrix(20), color("red")} ⊋ {25.5, false, true, 4.0, "rat", true, IdentityMatrix(10), 25.5, color("red")}', True);

  Test({LINENUM}10751, '{1, 2, 3} ⊋ 2', failure, 'An object of type set was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}10752, '123 ⊋ 2', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10753, '123 ⊋ {2}', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}10754, '"rational" ⊋ "rat"', failure, 'An object of type set was expected as argument 1, but an object of type string was given.');

  // Miscellaneous set expressions (and other tests)

  Test({LINENUM}10758,
    'numbers ≔ ToSet(SequenceList(100));' +
    'EvenNumbers ≔ filter(numbers, even);' +
    'OddNumbers ≔ filter(numbers, odd);' +
    'primes ≔ filter(numbers, IsPrime);' +
    'CompositeNumbers ≔ filter(numbers, n ↦ #PrimeFactors(n) > 1);' +
    'squares ≔ filter(numbers, n ↦ IsInteger(√n));' +
    'MultiplesOf5 ≔ filter(numbers, n ↦ 5 ∣ n);' +
    'MultiplesOf10 ≔ filter(numbers, n ↦ 10 ∣ n);' +
    'universe ≔ numbers;',
    null);

  Test({LINENUM}10770, 'numbers',
    intset([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]));

  Test({LINENUM}10773, 'join(sort(ToList(numbers)))',
    '1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, '+'51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100');

  Test({LINENUM}10776, 'EvenNumbers',
    intset([2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]));

  Test({LINENUM}10779, 'join(sort(ToList(EvenNumbers)))',
    '2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100');

  Test({LINENUM}10782, 'OddNumbers',
    intset([1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]));

  Test({LINENUM}10785, 'join(sort(ToList(OddNumbers)))',
    '1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99');

  Test({LINENUM}10788, 'primes',
    intset([2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]));

  Test({LINENUM}10791, 'join(sort(ToList(primes)))',
    '2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97');

  Test({LINENUM}10794, 'CompositeNumbers',
    intset([4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100]));

  Test({LINENUM}10797, 'join(sort(ToList(CompositeNumbers)))',
    '4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 48, 49, '+'50, 51, 52, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100');

  Test({LINENUM}10800, 'squares',
    intset([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]));

  Test({LINENUM}10803, 'join(sort(ToList(squares)))',
    '1, 4, 9, 16, 25, 36, 49, 64, 81, 100');

  Test({LINENUM}10806, 'MultiplesOf5',
    intset([5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]));

  Test({LINENUM}10809, 'join(sort(ToList(MultiplesOf5)))',
    '5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100');

  Test({LINENUM}10812, 'MultiplesOf10',
    intset([10, 20, 30, 40, 50, 60, 70, 80, 90, 100]));

  Test({LINENUM}10815, 'join(sort(ToList(MultiplesOf10)))',
    '10, 20, 30, 40, 50, 60, 70, 80, 90, 100');

  Test({LINENUM}10818, '#numbers', 100);
  Test({LINENUM}10819, '#EvenNumbers', 50);
  Test({LINENUM}10820, '#OddNumbers', 50);
  Test({LINENUM}10821, '#primes = PrimePi(100)', True);

  Test({LINENUM}10823, 'EvenNumbers ⊂ numbers', True);
  Test({LINENUM}10824, 'OddNumbers ⊂ numbers', True);
  Test({LINENUM}10825, 'primes ⊂ numbers', True);
  Test({LINENUM}10826, 'CompositeNumbers ⊂ numbers', True);
  Test({LINENUM}10827, 'MultiplesOf5 ⊂ numbers', True);
  Test({LINENUM}10828, 'MultiplesOf10 ⊂ numbers', True);

  Test({LINENUM}10830, 'EvenNumbers ⊊ numbers', True);
  Test({LINENUM}10831, 'OddNumbers ⊊ numbers', True);
  Test({LINENUM}10832, 'primes ⊊ numbers', True);
  Test({LINENUM}10833, 'CompositeNumbers ⊊ numbers', True);
  Test({LINENUM}10834, 'MultiplesOf5 ⊊ numbers', True);
  Test({LINENUM}10835, 'MultiplesOf10 ⊊ numbers', True);

  Test({LINENUM}10837, '∀(numbers, IsNumber)', True);
  Test({LINENUM}10838, '∀(numbers, even)', False);
  Test({LINENUM}10839, '∀(numbers, odd)', False);
  Test({LINENUM}10840, '∀(numbers, IsPrime)', False);

  Test({LINENUM}10842, '∃(numbers, IsNumber)', True);
  Test({LINENUM}10843, '∃(numbers, even)', True);
  Test({LINENUM}10844, '∃(numbers, odd)', True);
  Test({LINENUM}10845, '∃(numbers, IsPrime)', True);

  Test({LINENUM}10847, '∀(EvenNumbers, even)', True);
  Test({LINENUM}10848, '∀(OddNumbers, odd)', True);
  Test({LINENUM}10849, '∀(primes, IsPrime)', True);

  Test({LINENUM}10851, 'count(EvenNumbers, even) = #EvenNumbers', True);
  Test({LINENUM}10852, 'count(OddNumbers, odd) = #OddNumbers', True);
  Test({LINENUM}10853, 'count(primes, IsPrime) = #primes', True);

  Test({LINENUM}10855, 'count(numbers, even) = #EvenNumbers', True);
  Test({LINENUM}10856, 'count(numbers, odd) = #OddNumbers', True);
  Test({LINENUM}10857, 'count(numbers, IsPrime) = #primes', True);

  Test({LINENUM}10859, '∁numbers', intset([]));
  Test({LINENUM}10860, '∁numbers = ∅', True);
  Test({LINENUM}10861, '#∁numbers', 0);
  Test({LINENUM}10862, '∁EvenNumbers = OddNumbers', True);
  Test({LINENUM}10863, '∁OddNumbers = EvenNumbers', True);

  Test({LINENUM}10865, '∁EvenNumbers = numbers ∖ EvenNumbers', True);
  Test({LINENUM}10866, '∁OddNumbers = numbers ∖ OddNumbers', True);
  Test({LINENUM}10867, '∁squares = numbers ∖ squares', True);

  Test({LINENUM}10869, '∁∁numbers = numbers', True);
  Test({LINENUM}10870, '∁∁EvenNumbers = EvenNumbers', True);
  Test({LINENUM}10871, '∁∁OddNumbers = OddNumbers', True);

  Test({LINENUM}10873, 'numbers ∖ EvenNumbers = OddNumbers', True);
  Test({LINENUM}10874, 'numbers ∖ OddNumbers = EvenNumbers', True);

  Test({LINENUM}10876, '#EvenNumbers + #OddNumbers = #numbers', True);
  Test({LINENUM}10877, 'EvenNumbers ∪ OddNumbers = numbers', True);
  Test({LINENUM}10878, '#(EvenNumbers ∪ OddNumbers) = #numbers', True);

  Test({LINENUM}10880, 'EvenNumbers ∩ OddNumbers', intset([]));
  Test({LINENUM}10881, '#(EvenNumbers ∩ OddNumbers)', 0);
  Test({LINENUM}10882, '∁(EvenNumbers ∩ OddNumbers) = numbers', True);

  Test({LINENUM}10884, 'primes ∩ EvenNumbers', intset([2]));
  Test({LINENUM}10885, '#(primes ∩ EvenNumbers)', 1);
  Test({LINENUM}10886, '1 ∈ primes ∩ EvenNumbers', False);
  Test({LINENUM}10887, '2 ∈ primes ∩ EvenNumbers', True);
  Test({LINENUM}10888, '3 ∈ primes ∩ EvenNumbers', False);
  Test({LINENUM}10889, '4 ∈ primes ∩ EvenNumbers', False);
  Test({LINENUM}10890, '∃(numbers, n ↦ IsPrime(n) ∧ even(n))', True);
  Test({LINENUM}10891, 'count(numbers, n ↦ IsPrime(n) ∧ even(n))', 1);

  Test({LINENUM}10893, '∀(primes, odd)', False);
  Test({LINENUM}10894, '∀(primes ∖ {2}, odd)', True);
  Test({LINENUM}10895, '∀(primes ∖ EvenNumbers, odd)', True);

  Test({LINENUM}10897, 'primes ∖ EvenNumbers = primes ∖ {2}', True);

  Test({LINENUM}10899, '1 ∈ primes ∩ OddNumbers', False);
  Test({LINENUM}10900, '2 ∈ primes ∩ OddNumbers', False);
  Test({LINENUM}10901, '3 ∈ primes ∩ OddNumbers', True);
  Test({LINENUM}10902, '4 ∈ primes ∩ OddNumbers', False);
  Test({LINENUM}10903, '5 ∈ primes ∩ OddNumbers', True);

  Test({LINENUM}10905, '8 ∉ primes', True);
  Test({LINENUM}10906, '9 ∉ primes', True);
  Test({LINENUM}10907, '10 ∉ primes', True);
  Test({LINENUM}10908, '11 ∉ primes', False);
  Test({LINENUM}10909, '12 ∉ primes', True);

  Test({LINENUM}10911, 'squares ⊊ numbers', True);
  Test({LINENUM}10912, '25 ∈ squares', True);
  Test({LINENUM}10913, '{25, 36, 49} ⊂ squares', True);
  Test({LINENUM}10914, '35 ∈ squares', False);
  Test({LINENUM}10915, '{35, 36, 49} ⊂ squares', False);
  Test({LINENUM}10916, 'squares ∩ primes', intset([]));
  Test({LINENUM}10917, 'squares ∩ primes = ∅', True);
  Test({LINENUM}10918, '#(squares ∩ primes)', 0);

  Test({LINENUM}10920, '#(squares ∪ MultiplesOf5) = #squares + #MultiplesOf5 − #(squares ∩ MultiplesOf5)', True);
  Test({LINENUM}10921, '∁(squares ∪ MultiplesOf5) = ∁squares ∩ ∁MultiplesOf5', True);

  Test({LINENUM}10923, 'MultiplesOf10 ⊂ MultiplesOf5', True);
  Test({LINENUM}10924, '#MultiplesOf10 ≤ #MultiplesOf5', True);
  Test({LINENUM}10925, 'MultiplesOf10 ∪ MultiplesOf5 = MultiplesOf5', True);

  Test({LINENUM}10927, '∁MultiplesOf5 ⊂ ∁MultiplesOf10', True);

  Test({LINENUM}10929, '∁primes = CompositeNumbers', False);
  Test({LINENUM}10930, '∁primes ≠ CompositeNumbers', True);
  Test({LINENUM}10931, '∁primes = CompositeNumbers ∪ {1}', True);
  Test({LINENUM}10932, '∁primes ∖ {1} = CompositeNumbers', True);
  Test({LINENUM}10933, '∁primes ∖ CompositeNumbers', intset([1]));
  Test({LINENUM}10934, '∁primes ∩ ∁CompositeNumbers', intset([1]));
  Test({LINENUM}10935, '∁(primes ∪ CompositeNumbers)', intset([1]));
  Test({LINENUM}10936, '∁primes ∩ ∁CompositeNumbers = ∁(primes ∪ CompositeNumbers)', True);
  Test({LINENUM}10937, 'primes ∪ CompositeNumbers = numbers ∖ {1}', True);
  Test({LINENUM}10938, 'primes ∪ CompositeNumbers ∪ {1} = numbers', True);
  Test({LINENUM}10939, 'primes ∪ CompositeNumbers ⊊ numbers', True);

  Test({LINENUM}10941, 'squares ∪ ∁squares = numbers', True);
  Test({LINENUM}10942, '#squares + #∁squares = #numbers', True);

  Test({LINENUM}10944, 'delete(numbers); delete(universe); delete(EvenNumbers); delete(OddNumbers); ' +
       'delete(primes); delete(CompositeNumbers); delete(MultiplesOf5); delete(MultiplesOf10);', null);

  // Divides

  Test({LINENUM}10949, '1 ∣ 25', True);
  Test({LINENUM}10950, '2 ∣ 25', False);
  Test({LINENUM}10951, '3 ∣ 25', False);
  Test({LINENUM}10952, '4 ∣ 25', False);
  Test({LINENUM}10953, '5 ∣ 25', True);
  Test({LINENUM}10954, '6 ∣ 25', False);
  Test({LINENUM}10955, '7 ∣ 25', False);
  Test({LINENUM}10956, '24 ∣ 25', False);
  Test({LINENUM}10957, '25 ∣ 25', True);
  Test({LINENUM}10958, '26 ∣ 25', False);
  Test({LINENUM}10959, '50 ∣ 25', False);

  Test({LINENUM}10961, '1 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10962, '2 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10963, '4 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10964, '3 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10965, '5 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10966, '10 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10967, '6 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10968, '12 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10969, '7 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10970, '23 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10971, '35 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10972, '20 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10973, '60 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10974, '14 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10975, '21 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10976, '42 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10977, '84 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10978, '46 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10979, '92 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10980, '805 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10981, '2415 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10982, '4830 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}10983, '9660 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);

  Test({LINENUM}10985, '9 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}10986, '11 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}10987, '53 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}10988, '99 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}10989, '200 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}10990, '123 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}10991, '1234 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}10992, '12345 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}10993, '100 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);

  Test({LINENUM}10995, '1 ∣ −25', True);
  Test({LINENUM}10996, '−2 ∣ 25', False);
  Test({LINENUM}10997, '−3 ∣ 25', False);
  Test({LINENUM}10998, '−4 ∣ −25', False);
  Test({LINENUM}10999, '−5 ∣ −25', True);
  Test({LINENUM}11000, '6 ∣ 25', False);
  Test({LINENUM}11001, '−7 ∣ −25', False);
  Test({LINENUM}11002, '24 ∣ 25', False);
  Test({LINENUM}11003, '−25 ∣ −25', True);
  Test({LINENUM}11004, '26 ∣ 25', False);
  Test({LINENUM}11005, '50 ∣ −25', False);

  Test({LINENUM}11007, '1 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11008, '−2 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11009, '−4 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11010, '3 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11011, '5 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11012, '−10 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11013, '−6 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11014, '12 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11015, '7 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11016, '−23 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11017, '−35 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11018, '−20 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11019, '−60 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11020, '−14 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11021, '21 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11022, '−42 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11023, '−84 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11024, '46 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11025, '−92 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11026, '−805 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11027, '2415 ∣ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11028, '−4830 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11029, '−9660 ∣ 2⋅2⋅3⋅5⋅7⋅23', True);

  Test({LINENUM}11031, '−9 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11032, '−11 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11033, '53 ∣ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11034, '−99 ∣ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11035, '−200 ∣ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11036, '123 ∣ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11037, '−1234 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11038, '−12345 ∣ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11039, '−100 ∣ −2⋅2⋅3⋅5⋅7⋅23', False);

  Test({LINENUM}11041, '1786524853 ∣ 1786524853⋅239574163', True);
  Test({LINENUM}11042, '239574163 ∣ 1786524853⋅239574163', True);
  Test({LINENUM}11043, '−1786524853 ∣ 1786524853⋅239574163', True);
  Test({LINENUM}11044, '239574163 ∣ −1786524853⋅239574163', True);
  Test({LINENUM}11045, '−239574163 ∣ −1786524853⋅239574163', True);

  Test({LINENUM}11047, '1786524852 ∣ 1786524853⋅239574163', False);
  Test({LINENUM}11048, '1786524854 ∣ 1786524853⋅239574163', False);
  Test({LINENUM}11049, '2 ∣ 1786524853⋅239574163', False);
  Test({LINENUM}11050, '55 ∣ 1786524853⋅239574163', False);
  Test({LINENUM}11051, '17 ∣ 1786524853⋅239574163', False);
  Test({LINENUM}11052, '1 ∣ 1786524853⋅239574163', True);
  Test({LINENUM}11053, '−1 ∣ 1786524853⋅239574163', True);
  Test({LINENUM}11054, '1786524853⋅239574163 ∣ 1786524853⋅239574163', True);
  Test({LINENUM}11055, '−1786524853⋅239574163 ∣ 1786524853⋅239574163', True);
  Test({LINENUM}11056, '−1786524853⋅239574163 ∣ −1786524853⋅239574163', True);
  Test({LINENUM}11057, '1786524853⋅239574163 ∣ −1786524853⋅239574163', True);

  Test({LINENUM}11059, '1 ∣ 1', True);
  Test({LINENUM}11060, '1 ∣ 123', True);
  Test({LINENUM}11061, '1 ∣ 431', True);
  Test({LINENUM}11062, '1 ∣ 24143122', True);
  Test({LINENUM}11063, '1 ∣ 4324565465', True);
  Test({LINENUM}11064, '1 ∣ 87581790', True);
  Test({LINENUM}11065, '1 ∣ 165653516', True);

  Test({LINENUM}11067, '−1 ∣ 1', True);
  Test({LINENUM}11068, '−1 ∣ 123', True);
  Test({LINENUM}11069, '−1 ∣ 431', True);
  Test({LINENUM}11070, '−1 ∣ 24143122', True);
  Test({LINENUM}11071, '−1 ∣ 4324565465', True);
  Test({LINENUM}11072, '−1 ∣ 87581790', True);
  Test({LINENUM}11073, '−1 ∣ 165653516', True);

  Test({LINENUM}11075, '1 ∣ 1', True);
  Test({LINENUM}11076, '123 ∣ 123', True);
  Test({LINENUM}11077, '431 ∣ 431', True);
  Test({LINENUM}11078, '24143122 ∣ 24143122', True);
  Test({LINENUM}11079, '4324565465 ∣ 4324565465', True);
  Test({LINENUM}11080, '87581790 ∣ 87581790', True);
  Test({LINENUM}11081, '165653516 ∣ 165653516', True);

  Test({LINENUM}11083, '−1 ∣ 1', True);
  Test({LINENUM}11084, '−123 ∣ 123', True);
  Test({LINENUM}11085, '−431 ∣ 431', True);
  Test({LINENUM}11086, '−24143122 ∣ 24143122', True);
  Test({LINENUM}11087, '−4324565465 ∣ 4324565465', True);
  Test({LINENUM}11088, '−87581790 ∣ 87581790', True);
  Test({LINENUM}11089, '−165653516 ∣ 165653516', True);

  Test({LINENUM}11091, '1 ∣ 0', True);
  Test({LINENUM}11092, '2 ∣ 0', True);
  Test({LINENUM}11093, '3 ∣ 0', True);
  Test({LINENUM}11094, '4 ∣ 0', True);
  Test({LINENUM}11095, '5 ∣ 0', True);
  Test({LINENUM}11096, '10 ∣ 0', True);
  Test({LINENUM}11097, '100 ∣ 0', True);
  Test({LINENUM}11098, '-1 ∣ 0', True);
  Test({LINENUM}11099, '-2 ∣ 0', True);
  Test({LINENUM}11100, '-3 ∣ 0', True);
  Test({LINENUM}11101, '-4 ∣ 0', True);
  Test({LINENUM}11102, '-5 ∣ 0', True);
  Test({LINENUM}11103, '-10 ∣ 0', True);
  Test({LINENUM}11104, '-100 ∣ 0', True);

  Test({LINENUM}11106, '0 ∣ 21', failure, 'Division by zero');
  Test({LINENUM}11107, '0 ∣ 0', failure, 'Division by zero');

  Test({LINENUM}11109, '5.5 ∣ 11', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}11110, '1/2 ∣ 11', failure, 'An object of type integer was expected as argument 1, but an object of type rational number was given.');
  Test({LINENUM}11111, '"Brexit" ∣ "UK"', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}11112, '"impeachment" ∣ "US"', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}11113, '10 ∣ "one hundred"', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');

  // Does not divide

  Test({LINENUM}11117, '1 ∤ 25', False);
  Test({LINENUM}11118, '2 ∤ 25', True);
  Test({LINENUM}11119, '3 ∤ 25', True);
  Test({LINENUM}11120, '4 ∤ 25', True);
  Test({LINENUM}11121, '5 ∤ 25', False);
  Test({LINENUM}11122, '6 ∤ 25', True);
  Test({LINENUM}11123, '7 ∤ 25', True);
  Test({LINENUM}11124, '24 ∤ 25', True);
  Test({LINENUM}11125, '25 ∤ 25', False);
  Test({LINENUM}11126, '26 ∤ 25', True);
  Test({LINENUM}11127, '50 ∤ 25', True);

  Test({LINENUM}11129, '1 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11130, '2 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11131, '4 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11132, '3 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11133, '5 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11134, '10 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11135, '6 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11136, '12 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11137, '7 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11138, '23 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11139, '35 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11140, '20 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11141, '60 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11142, '14 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11143, '21 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11144, '42 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11145, '84 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11146, '46 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11147, '92 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11148, '805 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11149, '2415 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11150, '4830 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11151, '9660 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);

  Test({LINENUM}11153, '9 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11154, '11 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11155, '53 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11156, '99 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11157, '200 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11158, '123 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11159, '1234 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11160, '12345 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11161, '100 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);

  Test({LINENUM}11163, '1 ∤ −25', False);
  Test({LINENUM}11164, '−2 ∤ 25', True);
  Test({LINENUM}11165, '−3 ∤ 25', True);
  Test({LINENUM}11166, '−4 ∤ −25', True);
  Test({LINENUM}11167, '−5 ∤ −25', False);
  Test({LINENUM}11168, '6 ∤ 25', True);
  Test({LINENUM}11169, '−7 ∤ −25', True);
  Test({LINENUM}11170, '24 ∤ 25', True);
  Test({LINENUM}11171, '−25 ∤ −25', False);
  Test({LINENUM}11172, '26 ∤ 25', True);
  Test({LINENUM}11173, '50 ∤ −25', True);

  Test({LINENUM}11175, '1 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11176, '−2 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11177, '−4 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11178, '3 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11179, '5 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11180, '−10 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11181, '−6 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11182, '12 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11183, '7 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11184, '−23 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11185, '−35 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11186, '−20 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11187, '−60 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11188, '−14 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11189, '21 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11190, '−42 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11191, '−84 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11192, '46 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11193, '−92 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11194, '−805 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11195, '2415 ∤ −2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11196, '−4830 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);
  Test({LINENUM}11197, '−9660 ∤ 2⋅2⋅3⋅5⋅7⋅23', False);

  Test({LINENUM}11199, '−9 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11200, '−11 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11201, '53 ∤ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11202, '−99 ∤ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11203, '−200 ∤ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11204, '123 ∤ −2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11205, '−1234 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11206, '−12345 ∤ 2⋅2⋅3⋅5⋅7⋅23', True);
  Test({LINENUM}11207, '−100 ∤ −2⋅2⋅3⋅5⋅7⋅23', True);

  Test({LINENUM}11209, '1786524853 ∤ 1786524853⋅239574163', False);
  Test({LINENUM}11210, '239574163 ∤ 1786524853⋅239574163', False);
  Test({LINENUM}11211, '−1786524853 ∤ 1786524853⋅239574163', False);
  Test({LINENUM}11212, '239574163 ∤ −1786524853⋅239574163', False);
  Test({LINENUM}11213, '−239574163 ∤ −1786524853⋅239574163', False);

  Test({LINENUM}11215, '1786524852 ∤ 1786524853⋅239574163', True);
  Test({LINENUM}11216, '1786524854 ∤ 1786524853⋅239574163', True);
  Test({LINENUM}11217, '2 ∤ 1786524853⋅239574163', True);
  Test({LINENUM}11218, '55 ∤ 1786524853⋅239574163', True);
  Test({LINENUM}11219, '17 ∤ 1786524853⋅239574163', True);
  Test({LINENUM}11220, '1 ∤ 1786524853⋅239574163', False);
  Test({LINENUM}11221, '−1 ∤ 1786524853⋅239574163', False);
  Test({LINENUM}11222, '1786524853⋅239574163 ∤ 1786524853⋅239574163', False);
  Test({LINENUM}11223, '−1786524853⋅239574163 ∤ 1786524853⋅239574163', False);
  Test({LINENUM}11224, '−1786524853⋅239574163 ∤ −1786524853⋅239574163', False);
  Test({LINENUM}11225, '1786524853⋅239574163 ∤ −1786524853⋅239574163', False);

  Test({LINENUM}11227, '1 ∤ 1', False);
  Test({LINENUM}11228, '1 ∤ 123', False);
  Test({LINENUM}11229, '1 ∤ 431', False);
  Test({LINENUM}11230, '1 ∤ 24143122', False);
  Test({LINENUM}11231, '1 ∤ 4324565465', False);
  Test({LINENUM}11232, '1 ∤ 87581790', False);
  Test({LINENUM}11233, '1 ∤ 165653516', False);

  Test({LINENUM}11235, '−1 ∤ 1', False);
  Test({LINENUM}11236, '−1 ∤ 123', False);
  Test({LINENUM}11237, '−1 ∤ 431', False);
  Test({LINENUM}11238, '−1 ∤ 24143122', False);
  Test({LINENUM}11239, '−1 ∤ 4324565465', False);
  Test({LINENUM}11240, '−1 ∤ 87581790', False);
  Test({LINENUM}11241, '−1 ∤ 165653516', False);

  Test({LINENUM}11243, '1 ∤ 1', False);
  Test({LINENUM}11244, '123 ∤ 123', False);
  Test({LINENUM}11245, '431 ∤ 431', False);
  Test({LINENUM}11246, '24143122 ∤ 24143122', False);
  Test({LINENUM}11247, '4324565465 ∤ 4324565465', False);
  Test({LINENUM}11248, '87581790 ∤ 87581790', False);
  Test({LINENUM}11249, '165653516 ∤ 165653516', False);

  Test({LINENUM}11251, '−1 ∤ 1', False);
  Test({LINENUM}11252, '−123 ∤ 123', False);
  Test({LINENUM}11253, '−431 ∤ 431', False);
  Test({LINENUM}11254, '−24143122 ∤ 24143122', False);
  Test({LINENUM}11255, '−4324565465 ∤ 4324565465', False);
  Test({LINENUM}11256, '−87581790 ∤ 87581790', False);
  Test({LINENUM}11257, '−165653516 ∤ 165653516', False);

  Test({LINENUM}11259, '1 ∤ 0', False);
  Test({LINENUM}11260, '2 ∤ 0', False);
  Test({LINENUM}11261, '3 ∤ 0', False);
  Test({LINENUM}11262, '4 ∤ 0', False);
  Test({LINENUM}11263, '5 ∤ 0', False);
  Test({LINENUM}11264, '10 ∤ 0', False);
  Test({LINENUM}11265, '100 ∤ 0', False);
  Test({LINENUM}11266, '-1 ∤ 0', False);
  Test({LINENUM}11267, '-2 ∤ 0', False);
  Test({LINENUM}11268, '-3 ∤ 0', False);
  Test({LINENUM}11269, '-4 ∤ 0', False);
  Test({LINENUM}11270, '-5 ∤ 0', False);
  Test({LINENUM}11271, '-10 ∤ 0', False);
  Test({LINENUM}11272, '-100 ∤ 0', False);

  Test({LINENUM}11274, '0 ∤ 21', failure, 'Division by zero');
  Test({LINENUM}11275, '0 ∤ 0', failure, 'Division by zero');

  Test({LINENUM}11277, '5.5 ∤ 11', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}11278, '1/2 ∤ 11', failure, 'An object of type integer was expected as argument 1, but an object of type rational number was given.');
  Test({LINENUM}11279, '"Brexit" ∤ "UK"', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}11280, '"impeachment" ∤ "US"', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}11281, '10 ∤ "one hundred"', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');

  // Parallel to

  Test({LINENUM}11285, '❨4, 8, 1❩ ∥ ❨4, 8, 1❩', True);
  Test({LINENUM}11286, '❨8, 16, 2❩ ∥ ❨4, 8, 1❩', True);
  Test({LINENUM}11287, '❨12, 24, 3❩ ∥ ❨4, 8, 1❩', True);
  Test({LINENUM}11288, '❨40, 80, 10❩ ∥ ❨4, 8, 1❩', True);
  Test({LINENUM}11289, '❨-4, -8, -1❩ ∥ ❨4, 8, 1❩', True);
  Test({LINENUM}11290, '❨-400, -800, -100❩ ∥ ❨4, 8, 1❩', True);
  Test({LINENUM}11291, '❨0, 0, 0❩ ∥ ❨4, 8, 1❩', True);
  Test({LINENUM}11292, '❨4⋅i, 8⋅i, i❩ ∥ ❨4, 8, 1❩', True);
  Test({LINENUM}11293, '❨12+4⋅i, 24+8⋅i, 3+i❩ ∥ ❨4, 8, 1❩', True);

  Test({LINENUM}11295, '❨4, 8, 0❩ ∥ ❨4, 8, 1❩', False);
  Test({LINENUM}11296, '❨4, 7, 1❩ ∥ ❨4, 8, 1❩', False);
  Test({LINENUM}11297, '❨8, 8, 2❩ ∥ ❨4, 8, 1❩', False);
  Test({LINENUM}11298, '❨4, -8, 1❩ ∥ ❨4, 8, 1❩', False);
  Test({LINENUM}11299, '❨12, 24.0000001, 3❩ ∥ ❨4, 8, 1❩', False);
  Test({LINENUM}11300, '❨7, 2, 6❩ ∥ ❨4, 8, 1❩', False);
  Test({LINENUM}11301, '❨1, 0, 0❩ ∥ ❨4, 8, 1❩', False);
  Test({LINENUM}11302, '❨6, 9, 3❩ ∥ ❨4, 8, 1❩', False);
  Test({LINENUM}11303, '❨12+4⋅i, 21+8⋅i, 3+i❩ ∥ ❨4, 8, 1❩', False);

  Test({LINENUM}11305, '❨1, −1, 0❩ ∥ ❨1, −1, 0❩', True);
  Test({LINENUM}11306, '❨−1, 1, 0❩ ∥ ❨1, −1, 0❩', True);
  Test({LINENUM}11307, '❨2, −2, 0❩ ∥ ❨1, −1, 0❩', True);
  Test({LINENUM}11308, '❨10, −10, 0❩ ∥ ❨1, −1, 0❩', True);
  Test({LINENUM}11309, '❨−7, 7, 0❩ ∥ ❨1, −1, 0❩', True);
  Test({LINENUM}11310, '❨0.5, −0.5, 0❩ ∥ ❨1, −1, 0❩', True);
  Test({LINENUM}11311, '❨1/77, −1/77, 0❩ ∥ ❨1, −1, 0❩', True);
  Test({LINENUM}11312, '❨i, −i, 0❩ ∥ ❨1, −1, 0❩', True);
  Test({LINENUM}11313, '❨−i, i, 0❩ ∥ ❨1, −1, 0❩', True);
  Test({LINENUM}11314, '❨0, 0, 0❩ ∥ ❨1, −1, 0❩', True);

  Test({LINENUM}11316, '❨1, 1, 0❩ ∥ ❨1, −1, 0❩', False);
  Test({LINENUM}11317, '❨1, −1, 1❩ ∥ ❨1, −1, 0❩', False);
  Test({LINENUM}11318, '❨2, −1, 0❩ ∥ ❨1, −1, 0❩', False);
  Test({LINENUM}11319, '❨10, −9, 0❩ ∥ ❨1, −1, 0❩', False);
  Test({LINENUM}11320, '❨1, −1, 5❩ ∥ ❨1, −1, 0❩', False);
  Test({LINENUM}11321, '❨0, 0, 1❩ ∥ ❨1, −1, 0❩', False);
  Test({LINENUM}11322, '❨1, 1, 1❩ ∥ ❨1, −1, 0❩', False);
  Test({LINENUM}11323, '❨5, 2, 0❩ ∥ ❨1, −1, 0❩', False);
  Test({LINENUM}11324, '❨i, −1, 0❩ ∥ ❨1, −1, 0❩', False);

  Test({LINENUM}11326, '❨0, 0, 0❩ ∥ ❨1, 2, 3❩', True);
  Test({LINENUM}11327, '❨0, 0, 0❩ ∥ ❨1, 0, 0❩', True);
  Test({LINENUM}11328, '❨0, 0, 0❩ ∥ ❨7, −2, −3❩', True);
  Test({LINENUM}11329, '❨0, 0, 0❩ ∥ ❨1, i, 3❩', True);
  Test({LINENUM}11330, '❨0, 0, 0❩ ∥ ❨1, 2, 3 + i❩', True);

  Test({LINENUM}11332, '❨0, 0, 0❩ ∥ ❨0, 0, 0❩', True);
  Test({LINENUM}11333, '❨1, 0, 0❩ ∥ ❨0, 0, 0❩', True);
  Test({LINENUM}11334, '❨1, 2, 3❩ ∥ ❨0, 0, 0❩', True);
  Test({LINENUM}11335, '❨1000, i, 5❩ ∥ ❨0, 0, 0❩', True);

  Test({LINENUM}11337, '❨0, 0, i-i❩ ∥ ❨1, 2, 3❩', True);
  Test({LINENUM}11338, '❨0, i-i, 0❩ ∥ ❨1, 0, 0❩', True);
  Test({LINENUM}11339, '❨0, i-i, 0❩ ∥ ❨1, i-i, 0❩', True);
  Test({LINENUM}11340, '❨i-i, 0, 0❩ ∥ ❨7, −2, −3❩', True);
  Test({LINENUM}11341, '❨0, i-i, 0❩ ∥ ❨1, i, 3❩', True);
  Test({LINENUM}11342, '❨0, 0, i-i❩ ∥ ❨1, 2, 3 + i❩', True);

  Test({LINENUM}11344, '❨0, 0, i-i❩ ∥ ❨0, 0, 0❩', True);
  Test({LINENUM}11345, '❨0, 0, i-i❩ ∥ ❨0, 0, i-i❩', True);
  Test({LINENUM}11346, '❨1, 0, 0❩ ∥ ❨i-i, 0, 0❩', True);
  Test({LINENUM}11347, '❨1, i-i, 0❩ ∥ ❨i-i, 0, 0❩', True);
  Test({LINENUM}11348, '❨1, 2, 3❩ ∥ ❨0, 0, 0❩', True);
  Test({LINENUM}11349, '❨1000, i, 5❩ ∥ ❨0, i-i, 0❩', True);

  Test({LINENUM}11351, '❨7, 0, 0❩ ∥ ❨1, 0, 0❩', True);
  Test({LINENUM}11352, '❨1, 0, 0❩ ∥ ❨1, 0, 0❩', True);
  Test({LINENUM}11353, '❨−10, 0, 0❩ ∥ ❨1, 0, 0❩', True);
  Test({LINENUM}11354, '❨−i, 0, 0❩ ∥ ❨1, 0, 0❩', True);
  Test({LINENUM}11355, '❨7 − 9⋅i, 0, 0❩ ∥ ❨1, 0, 0❩', True);

  Test({LINENUM}11357, '❨7, 1, 0❩ ∥ ❨1, 0, 0❩', False);
  Test({LINENUM}11358, '❨7, i, 0❩ ∥ ❨1, 0, 0❩', False);
  Test({LINENUM}11359, '❨7, 0, 1❩ ∥ ❨1, 0, 0❩', False);
  Test({LINENUM}11360, '❨7, 0.00000001, 0❩ ∥ ❨1, 0, 0❩', False);
  Test({LINENUM}11361, '❨7, 0, -0.00000001❩ ∥ ❨1, 0, 0❩', False);

  Test({LINENUM}11363, '❨1, 2❩ ∥ ❨1, 2❩', True);
  Test({LINENUM}11364, '❨2, 4❩ ∥ ❨1, 2❩', True);
  Test({LINENUM}11365, '❨4, 8❩ ∥ ❨1, 2❩', True);
  Test({LINENUM}11366, '❨1.01, 2.02❩ ∥ ❨1, 2❩', True);
  Test({LINENUM}11367, '❨-1, -2❩ ∥ ❨1, 2❩', True);
  Test({LINENUM}11368, '❨i, 2⋅i❩ ∥ ❨1, 2❩', True);
  Test({LINENUM}11369, '❨7+i, 14+2⋅i❩ ∥ ❨1, 2❩', True);
  Test({LINENUM}11370, '❨0, 0❩ ∥ ❨1, 2❩', True);
  Test({LINENUM}11371, '❨1, 2❩ ∥ ❨0, 0❩', True);
  Test({LINENUM}11372, '❨0, 0❩ ∥ ❨0, 0❩', True);

  Test({LINENUM}11374, '❨-1, 2❩ ∥ ❨1, 2❩', False);
  Test({LINENUM}11375, '❨1.0001, 2❩ ∥ ❨1, 2❩', False);
  Test({LINENUM}11376, '❨5, 2❩ ∥ ❨1, 2❩', False);
  Test({LINENUM}11377, '❨7+i, 14+2.000001⋅i❩ ∥ ❨1, 2❩', False);

  Test({LINENUM}11379, '❨1, 0, 0❩ ∥ ❨0, 1, 0❩', False);
  Test({LINENUM}11380, '❨1, 0, 0❩ ∥ ❨0, 1, i-i❩', False);

  Test({LINENUM}11382, '❨2, 3⋅i, 0❩ ∥ ❨2, 3⋅i, 0❩', True);
  Test({LINENUM}11383, '❨20, 30⋅i, 0❩ ∥ ❨2, 3⋅i, 0❩', True);
  Test({LINENUM}11384, '❨2, 4⋅i, 0❩ ∥ ❨2, 3⋅i, 0❩', False);

  Test({LINENUM}11386, '❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩ ∥ ❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩', True);
  Test({LINENUM}11387, '❨2, 4, 0, 2, 0, −2, 4, 6, 2, 2⋅π❩ ∥ ❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩', True);
  Test({LINENUM}11388, '❨10, 20, 0, 10, 0, −10, 20, 30, 10, 10⋅π❩ ∥ ❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩', True);
  Test({LINENUM}11389, '❨−1, −2, 0, −1, 0, 1, −2, −3, −1, −π❩ ∥ ❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩', True);

  Test({LINENUM}11391, '❨1, 2, 1, 1, 0, −1, 2, 3, 1, π❩ ∥ ❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩', False);

  Test({LINENUM}11393, '❨1.00000000000000000001, 2, 0❩ ∥ ❨1, 2, 0❩', True);
  Test({LINENUM}11394, '❨1.0000000000000001, 2, 0❩ ∥ ❨1, 2, 0❩', True);
  Test({LINENUM}11395, '❨1.00000000001, 2, 0❩ ∥ ❨1, 2, 0❩', False);

  Test({LINENUM}11397, '❨1, 0, 0❩ ∥ ❨0, 2❩', failure, 'Vectors are of different dimension.');
  Test({LINENUM}11398, '❨1, 0, 0❩ ∥ ❨i-i, 2❩', failure, 'Vectors are of different dimension.');

  Test({LINENUM}11400, '"line" ∥ ❨0, 2❩', failure, 'An object of type vector was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}11401, '❨1, 0, 0❩ ∥ 6', failure, 'An object of type vector was expected as argument 2, but an object of type integer was given.');

  // Not parallel to

  Test({LINENUM}11405, '❨4, 8, 1❩ ∦ ❨4, 8, 1❩', False);
  Test({LINENUM}11406, '❨8, 16, 2❩ ∦ ❨4, 8, 1❩', False);
  Test({LINENUM}11407, '❨12, 24, 3❩ ∦ ❨4, 8, 1❩', False);
  Test({LINENUM}11408, '❨40, 80, 10❩ ∦ ❨4, 8, 1❩', False);
  Test({LINENUM}11409, '❨-4, -8, -1❩ ∦ ❨4, 8, 1❩', False);
  Test({LINENUM}11410, '❨-400, -800, -100❩ ∦ ❨4, 8, 1❩', False);
  Test({LINENUM}11411, '❨0, 0, 0❩ ∦ ❨4, 8, 1❩', False);
  Test({LINENUM}11412, '❨4⋅i, 8⋅i, i❩ ∦ ❨4, 8, 1❩', False);
  Test({LINENUM}11413, '❨12+4⋅i, 24+8⋅i, 3+i❩ ∦ ❨4, 8, 1❩', False);

  Test({LINENUM}11415, '❨4, 8, 0❩ ∦ ❨4, 8, 1❩', True);
  Test({LINENUM}11416, '❨4, 7, 1❩ ∦ ❨4, 8, 1❩', True);
  Test({LINENUM}11417, '❨8, 8, 2❩ ∦ ❨4, 8, 1❩', True);
  Test({LINENUM}11418, '❨4, -8, 1❩ ∦ ❨4, 8, 1❩', True);
  Test({LINENUM}11419, '❨12, 24.0000001, 3❩ ∦ ❨4, 8, 1❩', True);
  Test({LINENUM}11420, '❨7, 2, 6❩ ∦ ❨4, 8, 1❩', True);
  Test({LINENUM}11421, '❨1, 0, 0❩ ∦ ❨4, 8, 1❩', True);
  Test({LINENUM}11422, '❨6, 9, 3❩ ∦ ❨4, 8, 1❩', True);
  Test({LINENUM}11423, '❨12+4⋅i, 21+8⋅i, 3+i❩ ∦ ❨4, 8, 1❩', True);

  Test({LINENUM}11425, '❨1, −1, 0❩ ∦ ❨1, −1, 0❩', False);
  Test({LINENUM}11426, '❨−1, 1, 0❩ ∦ ❨1, −1, 0❩', False);
  Test({LINENUM}11427, '❨2, −2, 0❩ ∦ ❨1, −1, 0❩', False);
  Test({LINENUM}11428, '❨10, −10, 0❩ ∦ ❨1, −1, 0❩', False);
  Test({LINENUM}11429, '❨−7, 7, 0❩ ∦ ❨1, −1, 0❩', False);
  Test({LINENUM}11430, '❨0.5, −0.5, 0❩ ∦ ❨1, −1, 0❩', False);
  Test({LINENUM}11431, '❨1/77, −1/77, 0❩ ∦ ❨1, −1, 0❩', False);
  Test({LINENUM}11432, '❨i, −i, 0❩ ∦ ❨1, −1, 0❩', False);
  Test({LINENUM}11433, '❨−i, i, 0❩ ∦ ❨1, −1, 0❩', False);
  Test({LINENUM}11434, '❨0, 0, 0❩ ∦ ❨1, −1, 0❩', False);

  Test({LINENUM}11436, '❨1, 1, 0❩ ∦ ❨1, −1, 0❩', True);
  Test({LINENUM}11437, '❨1, −1, 1❩ ∦ ❨1, −1, 0❩', True);
  Test({LINENUM}11438, '❨2, −1, 0❩ ∦ ❨1, −1, 0❩', True);
  Test({LINENUM}11439, '❨10, −9, 0❩ ∦ ❨1, −1, 0❩', True);
  Test({LINENUM}11440, '❨1, −1, 5❩ ∦ ❨1, −1, 0❩', True);
  Test({LINENUM}11441, '❨0, 0, 1❩ ∦ ❨1, −1, 0❩', True);
  Test({LINENUM}11442, '❨1, 1, 1❩ ∦ ❨1, −1, 0❩', True);
  Test({LINENUM}11443, '❨5, 2, 0❩ ∦ ❨1, −1, 0❩', True);
  Test({LINENUM}11444, '❨i, −1, 0❩ ∦ ❨1, −1, 0❩', True);

  Test({LINENUM}11446, '❨0, 0, 0❩ ∦ ❨1, 2, 3❩', False);
  Test({LINENUM}11447, '❨0, 0, 0❩ ∦ ❨1, 0, 0❩', False);
  Test({LINENUM}11448, '❨0, 0, 0❩ ∦ ❨7, −2, −3❩', False);
  Test({LINENUM}11449, '❨0, 0, 0❩ ∦ ❨1, i, 3❩', False);
  Test({LINENUM}11450, '❨0, 0, 0❩ ∦ ❨1, 2, 3 + i❩', False);

  Test({LINENUM}11452, '❨0, 0, 0❩ ∦ ❨0, 0, 0❩', False);
  Test({LINENUM}11453, '❨1, 0, 0❩ ∦ ❨0, 0, 0❩', False);
  Test({LINENUM}11454, '❨1, 2, 3❩ ∦ ❨0, 0, 0❩', False);
  Test({LINENUM}11455, '❨1000, i, 5❩ ∦ ❨0, 0, 0❩', False);

  Test({LINENUM}11457, '❨0, 0, i-i❩ ∦ ❨1, 2, 3❩', False);
  Test({LINENUM}11458, '❨0, i-i, 0❩ ∦ ❨1, 0, 0❩', False);
  Test({LINENUM}11459, '❨0, i-i, 0❩ ∦ ❨1, i-i, 0❩', False);
  Test({LINENUM}11460, '❨i-i, 0, 0❩ ∦ ❨7, −2, −3❩', False);
  Test({LINENUM}11461, '❨0, i-i, 0❩ ∦ ❨1, i, 3❩', False);
  Test({LINENUM}11462, '❨0, 0, i-i❩ ∦ ❨1, 2, 3 + i❩', False);

  Test({LINENUM}11464, '❨0, 0, i-i❩ ∦ ❨0, 0, 0❩', False);
  Test({LINENUM}11465, '❨0, 0, i-i❩ ∦ ❨0, 0, i-i❩', False);
  Test({LINENUM}11466, '❨1, 0, 0❩ ∦ ❨i-i, 0, 0❩', False);
  Test({LINENUM}11467, '❨1, i-i, 0❩ ∦ ❨i-i, 0, 0❩', False);
  Test({LINENUM}11468, '❨1, 2, 3❩ ∦ ❨0, 0, 0❩', False);
  Test({LINENUM}11469, '❨1000, i, 5❩ ∦ ❨0, i-i, 0❩', False);

  Test({LINENUM}11471, '❨7, 0, 0❩ ∦ ❨1, 0, 0❩', False);
  Test({LINENUM}11472, '❨1, 0, 0❩ ∦ ❨1, 0, 0❩', False);
  Test({LINENUM}11473, '❨−10, 0, 0❩ ∦ ❨1, 0, 0❩', False);
  Test({LINENUM}11474, '❨−i, 0, 0❩ ∦ ❨1, 0, 0❩', False);
  Test({LINENUM}11475, '❨7 − 9⋅i, 0, 0❩ ∦ ❨1, 0, 0❩', False);

  Test({LINENUM}11477, '❨7, 1, 0❩ ∦ ❨1, 0, 0❩', True);
  Test({LINENUM}11478, '❨7, i, 0❩ ∦ ❨1, 0, 0❩', True);
  Test({LINENUM}11479, '❨7, 0, 1❩ ∦ ❨1, 0, 0❩', True);
  Test({LINENUM}11480, '❨7, 0.00000001, 0❩ ∦ ❨1, 0, 0❩', True);
  Test({LINENUM}11481, '❨7, 0, -0.00000001❩ ∦ ❨1, 0, 0❩', True);

  Test({LINENUM}11483, '❨1, 2❩ ∦ ❨1, 2❩', False);
  Test({LINENUM}11484, '❨2, 4❩ ∦ ❨1, 2❩', False);
  Test({LINENUM}11485, '❨4, 8❩ ∦ ❨1, 2❩', False);
  Test({LINENUM}11486, '❨1.01, 2.02❩ ∦ ❨1, 2❩', False);
  Test({LINENUM}11487, '❨-1, -2❩ ∦ ❨1, 2❩', False);
  Test({LINENUM}11488, '❨i, 2⋅i❩ ∦ ❨1, 2❩', False);
  Test({LINENUM}11489, '❨7+i, 14+2⋅i❩ ∦ ❨1, 2❩', False);
  Test({LINENUM}11490, '❨0, 0❩ ∦ ❨1, 2❩', False);
  Test({LINENUM}11491, '❨1, 2❩ ∦ ❨0, 0❩', False);
  Test({LINENUM}11492, '❨0, 0❩ ∦ ❨0, 0❩', False);

  Test({LINENUM}11494, '❨-1, 2❩ ∦ ❨1, 2❩', True);
  Test({LINENUM}11495, '❨1.0001, 2❩ ∦ ❨1, 2❩', True);
  Test({LINENUM}11496, '❨5, 2❩ ∦ ❨1, 2❩', True);
  Test({LINENUM}11497, '❨7+i, 14+2.000001⋅i❩ ∦ ❨1, 2❩', True);

  Test({LINENUM}11499, '❨1, 0, 0❩ ∦ ❨0, 1, 0❩', True);
  Test({LINENUM}11500, '❨1, 0, 0❩ ∦ ❨0, 1, i-i❩', True);

  Test({LINENUM}11502, '❨2, 3⋅i, 0❩ ∦ ❨2, 3⋅i, 0❩', False);
  Test({LINENUM}11503, '❨20, 30⋅i, 0❩ ∦ ❨2, 3⋅i, 0❩', False);
  Test({LINENUM}11504, '❨2, 4⋅i, 0❩ ∦ ❨2, 3⋅i, 0❩', True);

  Test({LINENUM}11506, '❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩ ∦ ❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩', False);
  Test({LINENUM}11507, '❨2, 4, 0, 2, 0, −2, 4, 6, 2, 2⋅π❩ ∦ ❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩', False);
  Test({LINENUM}11508, '❨10, 20, 0, 10, 0, −10, 20, 30, 10, 10⋅π❩ ∦ ❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩', False);
  Test({LINENUM}11509, '❨−1, −2, 0, −1, 0, 1, −2, −3, −1, −π❩ ∦ ❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩', False);

  Test({LINENUM}11511, '❨1, 2, 1, 1, 0, −1, 2, 3, 1, π❩ ∦ ❨1, 2, 0, 1, 0, −1, 2, 3, 1, π❩', True);

  Test({LINENUM}11513, '❨1.00000000000000000001, 2, 0❩ ∦ ❨1, 2, 0❩', False);
  Test({LINENUM}11514, '❨1.0000000000000001, 2, 0❩ ∦ ❨1, 2, 0❩', False);
  Test({LINENUM}11515, '❨1.00000000001, 2, 0❩ ∦ ❨1, 2, 0❩', True);

  Test({LINENUM}11517, '❨1, 0, 0❩ ∦ ❨0, 2❩', failure, 'Vectors are of different dimension.');
  Test({LINENUM}11518, '❨1, 0, 0❩ ∦ ❨i-i, 2❩', failure, 'Vectors are of different dimension.');

  Test({LINENUM}11520, '"line" ∦ ❨0, 2❩', failure, 'An object of type vector was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}11521, '❨1, 0, 0❩ ∦ 6', failure, 'An object of type vector was expected as argument 2, but an object of type integer was given.');

  // Perpendicular, coprime

  // - numbers: coprime

  Test({LINENUM}11527, '14 ⟂ 15', True);
  Test({LINENUM}11528, '100 ⟂ 49', True);
  Test({LINENUM}11529, '25 ⟂ 36', True);
  Test({LINENUM}11530, '81 ⟂ 1024', True);
  Test({LINENUM}11531, '895965 ⟂ 14278', True);

  Test({LINENUM}11533, '15 ⟂ 9', False);
  Test({LINENUM}11534, '25 ⟂ 10', False);
  Test({LINENUM}11535, '81 ⟂ 33', False);
  Test({LINENUM}11536, '100 ⟂ 72', False);
  Test({LINENUM}11537, '49 ⟂ 28', False);
  Test({LINENUM}11538, '895965 ⟂ 21417', False);
  Test({LINENUM}11539, '895965 ⟂ 12826', False);

  Test({LINENUM}11541, '−14 ⟂ 15', True);
  Test({LINENUM}11542, '100 ⟂ −49', True);
  Test({LINENUM}11543, '−25 ⟂ −36', True);
  Test({LINENUM}11544, '−81 ⟂ 1024', True);
  Test({LINENUM}11545, '−895965 ⟂ 14278', True);

  Test({LINENUM}11547, '−15 ⟂ 9', False);
  Test({LINENUM}11548, '25 ⟂ −10', False);
  Test({LINENUM}11549, '−81 ⟂ −33', False);
  Test({LINENUM}11550, '−100 ⟂ 72', False);
  Test({LINENUM}11551, '49 ⟂ −28', False);
  Test({LINENUM}11552, '−895965 ⟂ −21417', False);
  Test({LINENUM}11553, '−895965 ⟂ 12826', False);

  Test({LINENUM}11555, '1 ⟂ 1', True);
  Test({LINENUM}11556, '1 ⟂ 2', True);
  Test({LINENUM}11557, '1 ⟂ 5', True);
  Test({LINENUM}11558, '1 ⟂ 15', True);
  Test({LINENUM}11559, '1 ⟂ 1024', True);
  Test({LINENUM}11560, '1 ⟂ 10000000', True);
  Test({LINENUM}11561, '1 ⟂ 895965', True);

  Test({LINENUM}11563, '−1 ⟂ 1', True);
  Test({LINENUM}11564, '1 ⟂ −2', True);
  Test({LINENUM}11565, '−1 ⟂ −5', True);
  Test({LINENUM}11566, '−1 ⟂ 15', True);
  Test({LINENUM}11567, '1 ⟂ −1024', True);
  Test({LINENUM}11568, '−1 ⟂ −10000000', True);
  Test({LINENUM}11569, '1 ⟂ −895965', True);

  Test({LINENUM}11571, '1 ⟂ 0', True);
  Test({LINENUM}11572, '0 ⟂ 1', True);
  Test({LINENUM}11573, '(−1) ⟂ 0', True);
  Test({LINENUM}11574, '0 ⟂ −1', True);

  Test({LINENUM}11576, '2 ⟂ 0', False);
  Test({LINENUM}11577, '9 ⟂ 0', False);
  Test({LINENUM}11578, '25 ⟂ 0', False);
  Test({LINENUM}11579, '36 ⟂ 0', False);
  Test({LINENUM}11580, '53 ⟂ 0', False);
  Test({LINENUM}11581, '106 ⟂ 0', False);
  Test({LINENUM}11582, '1000 ⟂ 0', False);
  Test({LINENUM}11583, '1024 ⟂ 0', False);

  Test({LINENUM}11585, '−2 ⟂ 0', False);
  Test({LINENUM}11586, '−9 ⟂ 0', False);
  Test({LINENUM}11587, '−25 ⟂ 0', False);
  Test({LINENUM}11588, '−36 ⟂ 0', False);
  Test({LINENUM}11589, '−53 ⟂ 0', False);
  Test({LINENUM}11590, '−106 ⟂ 0', False);
  Test({LINENUM}11591, '−1000 ⟂ 0', False);
  Test({LINENUM}11592, '−1024 ⟂ 0', False);

  Test({LINENUM}11594, '0 ⟂ 2', False);
  Test({LINENUM}11595, '0 ⟂ 9', False);
  Test({LINENUM}11596, '0 ⟂ 25', False);
  Test({LINENUM}11597, '0 ⟂ 36', False);
  Test({LINENUM}11598, '0 ⟂ 53', False);
  Test({LINENUM}11599, '0 ⟂ 106', False);
  Test({LINENUM}11600, '0 ⟂ 1000', False);
  Test({LINENUM}11601, '0 ⟂ 1024', False);

  Test({LINENUM}11603, '0 ⟂ −2', False);
  Test({LINENUM}11604, '0 ⟂ −9', False);
  Test({LINENUM}11605, '0 ⟂ −25', False);
  Test({LINENUM}11606, '0 ⟂ −36', False);
  Test({LINENUM}11607, '0 ⟂ −53', False);
  Test({LINENUM}11608, '0 ⟂ −106', False);
  Test({LINENUM}11609, '0 ⟂ −1000', False);
  Test({LINENUM}11610, '0 ⟂ −1024', False);

  Test({LINENUM}11612, '1152921504606846976 ⟂ 576460752303423488', False);
  Test({LINENUM}11613, '1152921504606846976 ⟂ 16677181699666569', True);

  Test({LINENUM}11615, '14181656094375 ⟂ 5489965305721', True);
  Test({LINENUM}11616, '14181656094375 ⟂ 16469895917163', False);
  Test({LINENUM}11617, '14181656094375 ⟂ 38429757140047', False);
  Test({LINENUM}11618, '14181656094375 ⟂ 27449826528605', False);
  Test({LINENUM}11619, '14181656094375 ⟂ 10979930611442', True);

  Test({LINENUM}11621, '−1152921504606846976 ⟂ 576460752303423488', False);
  Test({LINENUM}11622, '1152921504606846976 ⟂ −16677181699666569', True);

  Test({LINENUM}11624, '14181656094375 ⟂ −5489965305721', True);
  Test({LINENUM}11625, '−14181656094375 ⟂ −16469895917163', False);
  Test({LINENUM}11626, '−14181656094375 ⟂ 38429757140047', False);
  Test({LINENUM}11627, '−14181656094375 ⟂ −27449826528605', False);
  Test({LINENUM}11628, '14181656094375 ⟂ −10979930611442', True);

  Test({LINENUM}11630, '14181656094375 ⟂ 14181656094375', False);
  Test({LINENUM}11631, '14181656094375 ⟂ −14181656094375', False);
  Test({LINENUM}11632, '−14181656094375 ⟂ 14181656094375', False);
  Test({LINENUM}11633, '−14181656094375 ⟂ −14181656094375', False);

  Test({LINENUM}11635, '12 ⟂ 13.5', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}11636, '1152921504606846976 ⟂ 16677181699666569.4', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');

  Test({LINENUM}11638, '12.5 ⟂ 13', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}11639, '1152921504606846976.4 ⟂ 16677181699666569', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}11641, '5 ⟂ 1/3', failure, 'An object of type integer was expected as argument 2, but an object of type rational number was given.');
  Test({LINENUM}11642, '5 ⟂ i', failure, 'An object of type integer was expected as argument 2, but an object of type complex number was given.');

  Test({LINENUM}11644, '1/3 ⟂ 3', failure, 'An object of type integer was expected as argument 1, but an object of type rational number was given.');
  Test({LINENUM}11645, 'i ⟂ 7', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}11647, '−895965 ⟂ 14278.02', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');

  // - vectors: orthogonal

  Test({LINENUM}11651, '❨1, 0, 0❩ ⟂ ❨0, 1, 0❩', True);
  Test({LINENUM}11652, '❨1, 0, 0❩ ⟂ ❨0, 0, 1❩', True);
  Test({LINENUM}11653, '❨0, 1, 0❩ ⟂ ❨0, 0, 1❩', True);
  Test({LINENUM}11654, '❨0, 0, 1❩ ⟂ ❨1, 0, 0❩', True);
  Test({LINENUM}11655, '❨1, 0, 0❩ ⟂ ❨0, 2, 0❩', True);
  Test({LINENUM}11656, '❨1, 0, 0❩ ⟂ ❨0, 1, 1❩', True);
  Test({LINENUM}11657, '❨1, 0, 1❩ ⟂ ❨0, 1, 0❩', True);
  Test({LINENUM}11658, '❨1, 1, 1❩ ⟂ ❨1, 1, -2❩', True);
  Test({LINENUM}11659, '❨1, 2, 3❩ ⟂ ❨3, 2, -7/3❩', True);

  Test({LINENUM}11661, '❨1, 0, 0❩ ⟂ ❨1, 0, 0❩', False);
  Test({LINENUM}11662, '❨1, 2, 3❩ ⟂ ❨1, 3, 0❩', False);
  Test({LINENUM}11663, '❨2, 0, 1❩ ⟂ ❨1, 1, 1❩', False);
  Test({LINENUM}11664, '❨5, -4, 2❩ ⟂ ❨3, -5, 2❩', False);
  Test({LINENUM}11665, '❨4, -2.5, 1❩ ⟂ ❨-4, 2.5, 7.1❩', False);
  Test({LINENUM}11666, '❨4, 2, -5.4❩ ⟂ ❨2.45, 1.2, 0❩', False);

  Test({LINENUM}11668, '❨1, 0❩ ⟂ ❨0, 1❩', True);
  Test({LINENUM}11669, '❨1, 1❩ ⟂ ❨-1, 1❩', True);
  Test({LINENUM}11670, '❨1, 1❩ ⟂ ❨0, 1❩', False);
  Test({LINENUM}11671, '❨1, 2❩ ⟂ ❨3, -4.1❩', False);

  Test({LINENUM}11673, '❨0, 0, 0❩ ⟂ ❨1, 2, 3❩', True);
  Test({LINENUM}11674, '❨0, 0, 0❩ ⟂ ❨2, 0, 0❩', True);
  Test({LINENUM}11675, '❨0, 0, 0❩ ⟂ ❨1, 0, 0❩', True);
  Test({LINENUM}11676, '❨0, 0, 0❩ ⟂ ❨-2.1, 2.5, -6.3❩', True);
  Test({LINENUM}11677, '❨0, 0, 0❩ ⟂ ❨10, 0, 0❩', True);
  Test({LINENUM}11678, '❨0, 0, 0❩ ⟂ ❨0, 0, 1❩', True);
  Test({LINENUM}11679, '❨0, 0, 0❩ ⟂ ❨0, 0, 0❩', True);

  Test({LINENUM}11681, '❨1, 0, 0❩ ⟂ ❨0, 0, 0❩', True);
  Test({LINENUM}11682, '❨1, 2, 3❩ ⟂ ❨0, 0, 0❩', True);
  Test({LINENUM}11683, '❨7.6, 4.6, -2.5❩ ⟂ ❨0, 0, 0❩', True);

  Test({LINENUM}11685, '❨1, 0❩ ⟂ ❨0, 0❩', True);

  Test({LINENUM}11687, '❨1, 0, 0, 0, 0❩ ⟂ ❨0, 1, 0, 0, 0❩', True);
  Test({LINENUM}11688, '❨1, 0, 0, 0, 0❩ ⟂ ❨0, 1, 2, 1, -3❩', True);
  Test({LINENUM}11689, '❨1, 0, 0, 0, 0❩ ⟂ ❨1, 1, -4, 2, 1❩', False);
  Test({LINENUM}11690, '❨0, 0, 0, 0, 0❩ ⟂ ❨0, 1, 0, 0, 0❩', True);
  Test({LINENUM}11691, '❨0, 0, 0, 0, 0❩ ⟂ ❨0, 0, 0, 0, 0❩', True);

  Test({LINENUM}11693, '❨1, 2, 1, 4, 4❩ ⟂ ❨2, 1, 4, 2, -4❩', True);
  Test({LINENUM}11694, '❨1, 2, 1, 4, 4❩ ⟂ ❨2, 1, 4, 2, 5❩', False);
  Test({LINENUM}11695, '❨1, 2, 1, 4, 4❩ ⟂ ❨2, 1, 4, 2, 4❩', False);
  Test({LINENUM}11696, '❨1, -2, 1, 4, 4❩ ⟂ ❨2, 1, 4, 2, -4❩', False);
  Test({LINENUM}11697, '❨1, 2.01, 1, 4, 4❩ ⟂ ❨2, 1, 4, 2, -4❩', False);

  Test({LINENUM}11699, '❨i, 0, 0❩ ⟂ ❨0, 2, 3❩', True);
  Test({LINENUM}11700, '❨i, 1, 0❩ ⟂ ❨0, 2, 3❩', False);
  Test({LINENUM}11701, '❨3, 2, 0❩ ⟂ ❨0, 0, 1 + 2⋅i❩', True);
  Test({LINENUM}11702, '❨3, 2, 1❩ ⟂ ❨0, 0, 1 + 2⋅i❩', False);
  Test({LINENUM}11703, '❨0, 0, 0, 0❩ ⟂ ❨1, i, 2+i, −π❩', True);
  Test({LINENUM}11704, '❨2 + i, 3, −1, −i, 1❩ ⟂ ❨i, 2 − i, 3, 3⋅i, −1 + i❩', True);
  Test({LINENUM}11705, '❨2 + i, 3, −1, −i, 1❩ ⟂ ❨i, 2 − i, 3, 4⋅i, −1 + i❩', False);
  Test({LINENUM}11706, '❨2 + i, 3, −1, −i, 1❩ ⟂ ❨i, 2 − i, -3, 3⋅i, −1 + i❩', False);
  Test({LINENUM}11707, '❨2 + i, 3, −1, −i, 1❩ ⟂ ❨i, 2 − i, 3, 3⋅i, 1 + i❩', False);
  Test({LINENUM}11708, '❨1 + i, 3.9, 1, i, 1❩ ⟂ ❨i, 1 − i, 3, 3⋅i, −1 + i❩', False);
  Test({LINENUM}11709, '❨1 + i, 3.9, 1, i, 1❩ ⟂ ❨0, 0, 0, 0, 0❩', True);
  Test({LINENUM}11710, '❨2 + i, 3, −1, −i, 1❩ ⟂ ❨i, 2 − i, 3.000001, 3⋅i, −1 + i❩', False);

  Test({LINENUM}11712, '❨1, 0, 0❩ ⟂ ❨1, 0❩', failure, 'Cannot compute dot product of two vectors of unequal dimension.');
  Test({LINENUM}11713, '❨1, i, 0❩ ⟂ ❨1, 0❩', failure, 'Cannot compute dot product of two vectors of unequal dimension.');
  Test({LINENUM}11714, '❨1, 0, 0❩ ⟂ ❨1, i❩', failure, 'Cannot compute dot product of two vectors of unequal dimension.');
  Test({LINENUM}11715, '❨i, 0, 0❩ ⟂ ❨i, 0❩', failure, 'Cannot compute dot product of two vectors of unequal dimension.');

  // - invalid operands

  Test({LINENUM}11719, '❨1, 0, 0❩ ⟂ "cat"', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}11720, '"x" ⟂ "y"', failure, 'An object of type vector was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}11721, 'true ⟂ false', failure, 'An object of type vector was expected as argument 1, but an object of type boolean was given.');

  // Direct sum

  Test({LINENUM}11725, '❨❨1, 2❩, ❨3, 4❩❩ ⊕ ❨❨10, 10, 20❩, ❨10, 10, 20❩, ❨10, 10, 20❩❩ ⊕ ❨❨1, 0❩, ❨0, 1❩❩',
    7, [1, 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1]);

  Test({LINENUM}11728, '❨❨1, 5❩, ❨3, 2❩❩ ⊕ ❨❨100❩❩ ⊕ ❨❨200❩❩ ⊕ ❨❨7, 6❩, ❨4, −6❩❩',
    6, [1, 5, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 4, -6]);

  Test({LINENUM}11731, '❨❨1❩❩ ⊕ ❨❨2❩❩ ⊕ ❨❨3❩❩ ⊕ ❨❨4❩❩ ⊕ ❨❨5❩❩',
    5, [1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5]);

  Test({LINENUM}11734, '❨❨1, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩ ⊕ ❨❨1, 1❩, ❨2, 2❩❩',
    5, [1, 2, 3, 0, 0, 4, 5, 6, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 2, 2]);

  Test({LINENUM}11737, '2⋅IdentityMatrix(2) ⊕ 3⋅IdentityMatrix(2)',
    4, [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3]);

  Test({LINENUM}11740, '3⋅IdentityMatrix(3) ⊕ ❨❨10❩❩ ⊕ 5⋅IdentityMatrix(2)',
    6, [3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5]);

  Test({LINENUM}11743, '❨❨1, 2, 3❩, ❨4, 5, 6❩❩ ⊕ IdentityMatrix(2)',
    5, [1, 2, 3, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]);

  Test({LINENUM}11746, '❨❨1, 2, 3❩, ❨4, 5, 6❩❩ ⊕ ❨❨1, 10❩, ❨2, 20❩, ❨3, 30❩❩',
    5, [1, 2, 3, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 1, 10, 0, 0, 0, 2, 20, 0, 0, 0, 3, 30]);

  Test({LINENUM}11749, '❨❨1, 2, 3❩, ❨10, 20, 30❩❩ ⊕ ❨❨7❩, ❨9❩❩ ⊕ ❨❨−1, −2❩❩',
    6, [1, 2, 3, 0, 0, 0, 10, 20, 30, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, -1, -2]);

  Test({LINENUM}11752, '❨❨1, 2, 3❩❩ ⊕ ❨❨10❩, ❨20❩, ❨30❩❩',
    4, [1, 2, 3, 0, 0, 0, 0, 10, 0, 0, 0, 20, 0, 0, 0, 30]);

  Test({LINENUM}11755, '❨❨1, 2❩, ❨3, 4❩❩ ⊕ ❨❨10❩❩',
    3, [1, 2, 0, 3, 4, 0, 0, 0, 10]);

  Test({LINENUM}11758, '❨❨1, 2❩, ❨3, 4❩❩ ⊕ ❨❨i❩❩',
    3, [1, 2, 0, 3, 4, 0, 0, 0, ImaginaryUnit]);

  Test({LINENUM}11761, '❨❨i, 2❩, ❨3, 4❩❩ ⊕ ❨❨10❩❩',
    3, [ImaginaryUnit, 2, 0, 3, 4, 0, 0, 0, 10]);

  Test({LINENUM}11764, '❨❨i, 2❩, ❨3, 4❩❩ ⊕ ❨❨i❩❩',
    3, [ImaginaryUnit, 2, 0, 3, 4, 0, 0, 0, ImaginaryUnit]);

  Test({LINENUM}11767, '❨❨1, 2❩, ❨3, 4❩❩ ⊕ ❨❨10, 10, 20❩, ❨10, 10, 20❩, ❨10, 10, 20❩❩ ⊕ ❨❨1, 0❩, ❨0, i❩❩',
    7, [1, 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ImaginaryUnit]);

  Test({LINENUM}11770, '❨❨1, 2❩, ❨3, 4❩❩ ⊕ ❨❨10, 10, 20❩, ❨10, i, 20❩, ❨10, 10, 20❩❩ ⊕ ❨❨1, 0❩, ❨0, 1❩❩',
    7, [1, 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 10, ImaginaryUnit, 20, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1]);

  Test({LINENUM}11773, '❨❨i, 2❩, ❨3, 4❩❩ ⊕ ❨❨10, 10, 20❩, ❨10, 10, 20❩, ❨10, 10, 20❩❩ ⊕ ❨❨1, 0❩, ❨0, 1❩❩',
    7, [ImaginaryUnit, 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1]);

  Test({LINENUM}11776, '❨❨i, 2❩, ❨3, 4❩❩ ⊕ ❨❨10, 10, 20❩, ❨10, 10, 20❩, ❨10, 10, 20❩❩ ⊕ ❨❨1, 0❩, ❨0, i❩❩',
    7, [ImaginaryUnit, 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 10, 10, 20, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ImaginaryUnit]);

  Test({LINENUM}11779, '❨❨i❩❩ ⊕ ❨❨2⋅i❩❩ ⊕ ❨❨3⋅i❩❩ ⊕ ❨❨4⋅i❩❩ ⊕ ❨❨5⋅i❩❩',
    5, [ImaginaryUnit, 0, 0, 0, 0, 0, 2*ImaginaryUnit, 0, 0, 0, 0, 0, 3*ImaginaryUnit, 0, 0, 0, 0, 0, 4*ImaginaryUnit, 0, 0, 0, 0, 0, 5*ImaginaryUnit]);

  Test({LINENUM}11782, '(2⋅IdentityMatrix(2) ⊕ 3⋅IdentityMatrix(3) + IdentityMatrix(5)) ⊕ ❨❨10❩❩ + 1',
    6, [4, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 11]);

  Test({LINENUM}11785, 'IdentityMatrix(7) ⊕ IdentityMatrix(13) = IdentityMatrix(20)', True);

  Test({LINENUM}11787, 'tr(5⋅IdentityMatrix(100) ⊕ 7⋅IdentityMatrix(200)) = 5⋅100 + 7⋅200', True);

  Test({LINENUM}11789, 'tr(5⋅IdentityMatrix(1000) ⊕ 7⋅IdentityMatrix(2000)) = 5⋅1000 + 7⋅2000', True);

  Test({LINENUM}11791, 'tr(i⋅IdentityMatrix(1000) ⊕ IdentityMatrix(2000))', 2000 + 1000*ImaginaryUnit);

  Test({LINENUM}11793, 'A ≔ IdentityMatrix(15);', null);
  StartStopwatch;
  Test({LINENUM}11795, 'tr(A' + DupeString(' ⊕ A', 200) + ')', 3015.0);
  StopStopwatch;
  TestDuration({LINENUM}11797, 0.150);

{$IFNDEF QuickTest}
  Test({LINENUM}11800, 'A ≔ IdentityMatrix(50);', null);
  StartStopwatch;
  Test({LINENUM}11802, 'tr(A' + DupeString(' ⊕ A', 200) + ')', 10050.0);
  StopStopwatch;
  TestDuration({LINENUM}11804, 1.5);
{$ENDIF}

  Test({LINENUM}11807, 'delete(A)', success);

  Test({LINENUM}11809, 'true ⊕ IdentityMatrix(3)', failure, 'An object of type matrix was expected as argument 1, but an object of type boolean was given.');
  Test({LINENUM}11810, 'IdentityMatrix(3) ⊕ "A"', failure, 'An object of type matrix was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}11811, 'IdentityMatrix(3) ⊕ IdentityMatrix(5) ⊕ 43', failure, 'An object of type matrix was expected as argument 3, but an object of type integer was given.');

  // Outer product (of vectors)

  Test({LINENUM}11815, '❨1, 2, 3❩ ⊗ ❨1, 10, 100❩', 3, [1, 10, 100, 2, 20, 200, 3, 30, 300]);
  Test({LINENUM}11816, '❨1, 2, 3, 4❩ ⊗ ❨1, 10, 100❩', 3, [1, 10, 100, 2, 20, 200, 3, 30, 300, 4, 40, 400]);
  Test({LINENUM}11817, '❨1, 2, 3, 4, 5❩ ⊗ ❨1, 10, 100❩', 3, [1, 10, 100, 2, 20, 200, 3, 30, 300, 4, 40, 400, 5, 50, 500]);
  Test({LINENUM}11818, '❨1, 2, 3, 4, 5❩ ⊗ ❨1, 10❩', 2, [1, 10, 2, 20, 3, 30, 4, 40, 5, 50]);
  Test({LINENUM}11819, '❨1, 2❩ ⊗ ❨1, 10, 100❩', 3, [1, 10, 100, 2, 20, 200]);

  Test({LINENUM}11821, '❨1, i, 2❩ ⊗ ❨1, 10, 100❩', 3, [1, 10, 100, ImaginaryUnit, 10*ImaginaryUnit, 100*ImaginaryUnit, 2, 20, 200]);
  Test({LINENUM}11822, '❨1, 2, 3, 4❩ ⊗ ❨1, i, 2❩', 3, [1, -ImaginaryUnit, 2, 2, -2*ImaginaryUnit, 4, 3, -3*ImaginaryUnit, 6, 4, -4*ImaginaryUnit, 8]);
  Test({LINENUM}11823, '❨1, i, 2❩ ⊗ ❨1, i, 2❩', 3, [1, -ImaginaryUnit, 2, ImaginaryUnit, 1, 2*ImaginaryUnit, 2, -2*ImaginaryUnit, 4]);

  Test({LINENUM}11825, '❨1, 2, 3❩ ⊗ ❨2+3⋅i, 1−2⋅i❩', 2, [2 - 3*ImaginaryUnit, 1 + 2*ImaginaryUnit, 4 - 6*ImaginaryUnit, 2 + 4*ImaginaryUnit, 6 - 9*ImaginaryUnit, 3 + 6*ImaginaryUnit]);

  Test({LINENUM}11827, '❨1, 2, 3❩ ⊗ "cat"', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}11828, '123 ⊗ ❨2+3⋅i, 1−2⋅i❩', failure, 'An object of type vector was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}11829, '❨1, 2, 3, 4❩ ⊗ ❨1, 10❩ ⊗ ❨1, 10, 100❩', failure, 'An object of type vector was expected as argument 1, but an object of type real matrix was given.');
  Test({LINENUM}11830, '❨1, 2, 3, 4❩ ⊗ ❨i, 10❩ ⊗ ❨1, 10, 100❩', failure, 'An object of type vector was expected as argument 1, but an object of type complex matrix was given.');
  Test({LINENUM}11831, '❨1, 2, 3, 4❩ ⊗ ❨i, 10❩ ⊗ ❨i, 10, 100❩', failure, 'An object of type vector was expected as argument 1, but an object of type complex matrix was given.');

  // Hadamard product (entrywise matrix multiplication)

  Test({LINENUM}11835, '❨❨1, 2❩, ❨3, 4❩❩ ⊙ ❨❨10, 1❩, ❨1, −10❩❩', 2, [10, 2, 3, -40]);
  Test({LINENUM}11836, '❨❨1, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩ ⊙ IdentityMatrix(3)', 3, [1, 0, 0, 0, 5, 0, 0, 0, 9]);

  Test({LINENUM}11838, '❨❨1, 2❩, ❨3, 4❩❩ ⊙ ❨❨10, i❩, ❨1, −10❩❩', 2, [10, 2*ImaginaryUnit, 3, -40]);
  Test({LINENUM}11839, '❨❨i, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩ ⊙ IdentityMatrix(3)', 3, [ImaginaryUnit, 0, 0, 0, 5, 0, 0, 0, 9]);

  Test({LINENUM}11841, '❨❨i, 2❩, ❨3, 4❩❩ ⊙ ❨❨10, i❩, ❨1, −10❩❩', 2, [10*ImaginaryUnit, 2*ImaginaryUnit, 3, -40]);

  Test({LINENUM}11843, 'IdentityMatrix(10) ⊙ IdentityMatrix(10) = IdentityMatrix(10)', True);
  Test({LINENUM}11844, 'IdentityMatrix(10) ⊙ ZeroMatrix(10) = ZeroMatrix(10)', True);

  Test({LINENUM}11846, '❨❨1, 2, 3❩, ❨4, 5, 6❩❩ ⊙ ❨❨1, 0, 1❩, ❨−1, 0, −1❩❩', 3, [1, 0, 3, -4, 0, -6]);
  Test({LINENUM}11847, '❨❨i, 2, 3❩, ❨4, 5, 6❩❩ ⊙ ❨❨1, 0, 1❩, ❨−1, 0, −1❩❩', 3, [ImaginaryUnit, 0, 3, -4, 0, -6]);
  Test({LINENUM}11848, '❨❨1, 2, 3❩, ❨4, 5, 6❩❩ ⊙ ❨❨i, 0, 1❩, ❨−1, 0, −1❩❩', 3, [ImaginaryUnit, 0, 3, -4, 0, -6]);
  Test({LINENUM}11849, '❨❨i, 2, 3❩, ❨4, 5, 6❩❩ ⊙ ❨❨i, 0, 1❩, ❨−1, 0, −1❩❩', 3, [-1, 0*ImaginaryUnit, 3, -4, 0, -6]);

  Test({LINENUM}11851, '❨❨1, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩ ⊙ IdentityMatrix(3) ⊙ ❨❨10, 10, 10❩, ❨100, 100, 100❩, ❨1000, 1000, 1000❩❩',
    3, [10, 0, 0, 0, 500, 0, 0, 0, 9000]);

  Test({LINENUM}11854, '❨❨i, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩ ⊙ IdentityMatrix(3) ⊙ ❨❨10, 10, 10❩, ❨100, 100, 100❩, ❨1000, 1000, 1000❩❩',
    3, [10*ImaginaryUnit, 0, 0, 0, 500, 0, 0, 0, 9000]);

  Test({LINENUM}11857, '❨❨1, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩ ⊙ IdentityMatrix(3) ⊙ ❨❨i, 10, 10❩, ❨100, 100, 100❩, ❨1000, 1000, 1000❩❩',
    3, [ImaginaryUnit, 0, 0, 0, 500, 0, 0, 0, 9000]);

  Test({LINENUM}11860, '❨❨1, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩ ⊙ IdentityMatrix(2)', failure, 'Hadamard product only defined for matrices of the same size.');
  Test({LINENUM}11861, '❨❨i, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩ ⊙ IdentityMatrix(2)', failure, 'Hadamard product only defined for matrices of the same size.');

  Test({LINENUM}11863, '❨❨1, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩ ⊙ IdentityMatrix(3) ⊙ ❨❨i, 10, 10❩, ❨100, 100, 100❩❩',
    failure, 'Hadamard product only defined for matrices of the same size.');

  Test({LINENUM}11866, '❨❨1, 2, 3❩, ❨4, 5, 6❩, ❨7, 8, 9❩❩ ⊙ "test"', failure, 'An object of type matrix was expected as argument 2, but an object of type string was given.');

  Test({LINENUM}11868, '10 ⊙ IdentityMatrix(3) ⊙ ❨❨10, 10, 10❩, ❨100, 100, 100❩, ❨1000, 1000, 1000❩❩', failure, 'An object of type matrix was expected as argument 1, but an object of type integer was given.');

  // Length, dimension, cardinality, value count

  Test({LINENUM}11872, '#"Dogs are marvellous animals."', 28);
  Test({LINENUM}11873, '#""', 0);
  Test({LINENUM}11874, '#(123⋅"A")', 123);
  Test({LINENUM}11875, '#❨1, 0, 0❩', 3);
  Test({LINENUM}11876, '#❨1, 2+i, −3, −i❩', 4);
  Test({LINENUM}11877, '#SequenceVector(100)', 100);
  Test({LINENUM}11878, '#IdentityMatrix(3)', 9);
  Test({LINENUM}11879, '#❨❨1, 2, i❩, ❨−3, 1+i, 0❩❩', 6);
  Test({LINENUM}11880, '#''(1, true, 42, IdentityMatrix(10), ❨1, 0, 0❩, color("red"), "Fancy rat")', 7);
  Test({LINENUM}11881, '#''()', 0);
  Test({LINENUM}11882, '#SequenceList(100)', 100);
  Test({LINENUM}11883, '#filter(SequenceList(100), IsPositive)', 100);
  Test({LINENUM}11884, '#filter(SequenceList(100), IsPrime)', 25);
  Test({LINENUM}11885, '#filter(SequenceList(100), odd)', 50);
  Test({LINENUM}11886, '#filter(SequenceList(100), even)', 50);
  Test({LINENUM}11887, '#filter(SequenceList(100), IsNegative)', 0);
  Test({LINENUM}11888, '#{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}', 10);
  Test({LINENUM}11889, '#{}', 0);
  Test({LINENUM}11890, '#∅', 0);
  Test({LINENUM}11891, '#date()', 3);
  Test({LINENUM}11892, '#time()', 4);
  Test({LINENUM}11893, '#datetime()', 2);

  Test({LINENUM}11895, '#struct("a": 42, "b": "dog", "c": "horse").c', 5);
  Test({LINENUM}11896, '#struct("a": 42, "b": "dog", "c": "horse").b', 3);
  Test({LINENUM}11897, '#struct("a": 42, "b": "dog", "c": "horse").a', failure, 'Object type "integer" is not a suitable container.');
  Test({LINENUM}11898, '#struct("a": 42, "b": "dog", "c": "horse")', 3);

  Test({LINENUM}11900, '#10', failure, 'Object type "integer" is not a suitable container.');
  Test({LINENUM}11901, '#10.5', failure, 'Object type "real number" is not a suitable container.');
  Test({LINENUM}11902, '#i', failure, 'Object type "complex number" is not a suitable container.');
  Test({LINENUM}11903, '#true', failure, 'Object type "boolean" is not a suitable container.');
  Test({LINENUM}11904, '#(.;)', failure, 'Object type "null" is not a suitable container.');

  // FCN_Length is not a simple function and first attempts to access any object
  // through an L-value reference; this path must be tested separately.

  Test({LINENUM}11909, 'x ≔ "Dogs are marvellous animals."; #x', 28);
  Test({LINENUM}11910, 'x ≔ ""; #x', 0);
  Test({LINENUM}11911, 'x ≔ (123⋅"A"); #x', 123);
  Test({LINENUM}11912, 'x ≔ ❨1, 0, 0❩; #x', 3);
  Test({LINENUM}11913, 'x ≔ ❨1, 2+i, −3, −i❩; #x', 4);
  Test({LINENUM}11914, 'x ≔ SequenceVector(100); #x', 100);
  Test({LINENUM}11915, 'x ≔ IdentityMatrix(3); #x', 9);
  Test({LINENUM}11916, 'x ≔ ❨❨1, 2, i❩, ❨−3, 1+i, 0❩❩; #x', 6);
  Test({LINENUM}11917, 'x ≔ ''(1, true, 42, IdentityMatrix(10), ❨1, 0, 0❩, color("red"), "Fancy rat"); #x', 7);
  Test({LINENUM}11918, 'x ≔ ''(); #x', 0);
  Test({LINENUM}11919, 'x ≔ SequenceList(100); #x', 100);
  Test({LINENUM}11920, 'x ≔ filter(SequenceList(100), IsPositive); #x', 100);
  Test({LINENUM}11921, 'x ≔ filter(SequenceList(100), IsPrime); #x', 25);
  Test({LINENUM}11922, 'x ≔ filter(SequenceList(100), odd); #x', 50);
  Test({LINENUM}11923, 'x ≔ filter(SequenceList(100), even); #x', 50);
  Test({LINENUM}11924, 'x ≔ filter(SequenceList(100), IsNegative); #x', 0);
  Test({LINENUM}11925, 'x ≔ {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; #x', 10);
  Test({LINENUM}11926, 'x ≔ {}; #x', 0);
  Test({LINENUM}11927, 'x ≔ ∅; #x', 0);
  Test({LINENUM}11928, 'x ≔ date(); #x', 3);
  Test({LINENUM}11929, 'x ≔ time(); #x', 4);
  Test({LINENUM}11930, 'x ≔ datetime(); #x', 2);

  Test({LINENUM}11932, 'x ≔ struct("a": 42, "b": "dog", "c": "horse"); #x.c', 5);
  Test({LINENUM}11933, 'x ≔ struct("a": 42, "b": "dog", "c": "horse"); #x.b', 3);
  Test({LINENUM}11934, 'x ≔ struct("a": 42, "b": "dog", "c": "horse"); #x.a', failure, 'Object type "integer" is not a suitable container.');
  Test({LINENUM}11935, 'x ≔ struct("a": 42, "b": "dog", "c": "horse"); #x', 3);

  Test({LINENUM}11937, 'x ≔ 10; #x', failure, 'Object type "integer" is not a suitable container.');
  Test({LINENUM}11938, 'x ≔ 10.5; #x', failure, 'Object type "real number" is not a suitable container.');
  Test({LINENUM}11939, 'x ≔ i; #x', failure, 'Object type "complex number" is not a suitable container.');
  Test({LINENUM}11940, 'x ≔ true; #x', failure, 'Object type "boolean" is not a suitable container.');
  Test({LINENUM}11941, 'x ≔ (.;); #x', failure, 'Object type "null" is not a suitable container.');

  Test({LINENUM}11943, 'delete(x)', success);

  // Primorial

  Test({LINENUM}11947, '0#', 1);
  Test({LINENUM}11948, '1#', 1);
  Test({LINENUM}11949, '2#', 2);
  Test({LINENUM}11950, '3#', 6);
  Test({LINENUM}11951, '4#', 6);
  Test({LINENUM}11952, '5#', 30);
  Test({LINENUM}11953, '6#', 30);
  Test({LINENUM}11954, '7#', 210);
  Test({LINENUM}11955, '8#', 210);
  Test({LINENUM}11956, '9#', 210);
  Test({LINENUM}11957, '10#', 210);
  Test({LINENUM}11958, '11#', 2310);
  Test({LINENUM}11959, '12#', 2310);
  Test({LINENUM}11960, '13#', 30030);

  Test({LINENUM}11962, '20#', 9699690);
  Test({LINENUM}11963, '30#', 6469693230);
  Test({LINENUM}11964, '40#', 7420738134810);
  Test({LINENUM}11965, '43#', 13082761331670030);
  Test({LINENUM}11966, '47#', 614889782588491410);

  Test({LINENUM}11968, '53#', 614889782588491410.0 * 53.0);
  Test({LINENUM}11969, '59#', 614889782588491410.0 * 53.0 * 59.0);

  Eps; Test({LINENUM}11971, '100#', 2.305567963945518424753102147331756070E36);

  Test({LINENUM}11973, '−(10#)', -210);
  Test({LINENUM}11974, '−10#', -210);

  Test({LINENUM}11976, '(−1)#', failure, 'A non-negative integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}11977, '(−10)#', failure, 'A non-negative integer was expected as argument 1, but "-10" was given.');

  Test({LINENUM}11979, '1.5#', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}11980, '"rabbit"#', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}11981, 'false#', failure, 'An object of type integer was expected as argument 1, but an object of type boolean was given.');

  Test({LINENUM}11983, '#IdentityMatrix(5) − (#ComplexZeroVector(5))# + 3##', 25);
  Test({LINENUM}11984, '#IdentityMatrix(6) − (#ComplexZeroVector(4))# + 4##', 60);
  Test({LINENUM}11985, '#IdentityMatrix(7) − (#ComplexZeroVector(6))# + 5##', 19 + 6469693230);

  // Set max length

  // Was extensively tested in Chapter 1, inlcuding output formatting.

  Test({LINENUM}11991, 'π \ 2', Pi, True, '3.1');
  Test({LINENUM}11992, 'π \ 3', Pi, True, '3.14');
  Test({LINENUM}11993, 'π \ 4', Pi, True, '3.142');
  Test({LINENUM}11994, 'π \ 5', Pi, True, '3.1416');
  Test({LINENUM}11995, 'π \ 6', Pi, True, '3.14159');

  Test({LINENUM}11997, 'π \ 10', Pi, True, '3.141592654');
  Test({LINENUM}11998, 'π \ 12', Pi, True, '3.14159265359');

  Test({LINENUM}12000, 'π \ 15', Pi, True, '3.14159265358979');

  Test({LINENUM}12002, '(π − 1) \ 2', Pi - 1, True, '2.1');
  Test({LINENUM}12003, '(π − 1) \ 3', Pi - 1, True, '2.14');
  Test({LINENUM}12004, '(π − 1) \ 4', Pi - 1, True, '2.142');
  Test({LINENUM}12005, '(π − 1) \ 5', Pi - 1, True, '2.1416');
  Test({LINENUM}12006, '(π − 1) \ 6', Pi - 1, True, '2.14159');

  Test({LINENUM}12008, '(π − 1) \ 10', Pi - 1, True, '2.141592654');
  Test({LINENUM}12009, '(π − 1) \ 12', Pi - 1, True, '2.14159265359');

  Test({LINENUM}12011, '(π − 1) \ 15', Pi - 1, True, '2.14159265358979');

  Test({LINENUM}12013, '(1/3 + π⋅i) \ 4', 1/3 + Pi*ImaginaryUnit, True, '0.3333 + 3.142⋅i');

  Test({LINENUM}12015, 'π − 1 \ 2', Pi - 1, True, '2.1');
  Test({LINENUM}12016, 'π − 1 \ 3', Pi - 1, True, '2.14');
  Test({LINENUM}12017, 'π − 1 \ 4', Pi - 1, True, '2.142');
  Test({LINENUM}12018, 'π − 1 \ 5', Pi - 1, True, '2.1416');
  Test({LINENUM}12019, 'π − 1 \ 6', Pi - 1, True, '2.14159');

  Test({LINENUM}12021, 'π − 1 \ 10', Pi - 1, True, '2.141592654');
  Test({LINENUM}12022, 'π − 1 \ 12', Pi - 1, True, '2.14159265359');

  Test({LINENUM}12024, 'π − 1 \ 15', Pi - 1, True, '2.14159265358979');

  Test({LINENUM}12026, '1/3 + π⋅i \ 4', 1/3 + Pi*ImaginaryUnit, True, '0.3333 + 3.142⋅i');

  Test({LINENUM}12028, '"Dogs are marvellous animals." \ 10', 'Dogs are marvellous animals.', True, 'Dogs are m…');
  Test({LINENUM}12029, '"Dogs are marvellous animals." \ 4', 'Dogs are marvellous animals.', True, 'Dogs…');
  Test({LINENUM}12030, '"Dogs are marvellous animals." \ 1', 'Dogs are marvellous animals.', True, 'D…');
  Test({LINENUM}12031, '"Dogs are marvellous animals." \ 0', 'Dogs are marvellous animals.', True, 'Dogs are marvellous animals.');

  TestSL({LINENUM}12033, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 4', '(1, 2, 3, 4, …)');
  TestSL({LINENUM}12034, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 4', '(i, 2, 3, 4, …)');

  TestSL({LINENUM}12036, '❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 3', '(1, 2, 3, …)');
  TestSL({LINENUM}12037, '❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩ \ 3', '(i, 2, 3, …)');

  TestML({LINENUM}12039, 'IdentityMatrix(10) \ 3', '⎛1  0  0  ⋯⎞'#13#10'⎜0  1  0  ⋯⎟'#13#10'⎜0  0  1  ⋯⎟'#13#10'⎝⋮  ⋮  ⋮  ⋱⎠');
  TestML({LINENUM}12040, 'i⋅IdentityMatrix(10) \ 3', '⎛i  0  0  ⋯⎞'#13#10'⎜0  i  0  ⋯⎟'#13#10'⎜0  0  i  ⋯⎟'#13#10'⎝⋮  ⋮  ⋮  ⋱⎠');

  TestSL({LINENUM}12042, 'SequenceList(100) \ 5', '(1, 2, 3, 4, 5, …)');
  TestML({LINENUM}12043, 'SequenceList(100) \ 5', '1'#13#10'2'#13#10'3'#13#10'4'#13#10'5'#13#10'⋮');

  Test({LINENUM}12045, 'π \ "cat"', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}12046, 'true \ 3', failure, 'An object of type "boolean" has no maximum display length setting.');
  Test({LINENUM}12047, 'date() \ 2', failure, 'An object of type "typed structure" has no maximum display length setting.');
  Test({LINENUM}12048, '{1, 2, 3, 4, 5, 6, "dog"} \ 3', failure, 'An object of type "set" has no maximum display length setting.'); // but should it?!

  Test({LINENUM}12050, '\4', ESyntaxException, 'Operand missing before operator \ at column 1.');
  Test({LINENUM}12051, 'π\', ESyntaxException, 'Operand missing after operator \ at column 2.');

  // Catenate

  Test({LINENUM}12055, '"Alpha" ~ "Beta"', 'AlphaBeta');
  Test({LINENUM}12056, '"alpha" ~ " beta" ~ " gamma" ~ " delta" ~ " epsilon" ~ " phi"', 'alpha beta gamma delta epsilon phi');

  Test({LINENUM}12058, '❨1, 2, 3❩ ~ ❨10, 20, 30❩', [1, 2, 3, 10, 20, 30]);
  Test({LINENUM}12059, '❨1, 2, 3❩ ~ ❨4, 5, 6❩ ~ ❨7, 8❩ ~ ❨9❩ ~ ❨10❩', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  Test({LINENUM}12060, '❨1, 2, i❩ ~ ❨3, 4, i❩', [1, 2, ImaginaryUnit, 3, 4, ImaginaryUnit]);
  Test({LINENUM}12061, '❨1, 2, i❩ ~ ❨3, 4, i❩ ~ ❨5, i❩ ~ ❨i❩', [1, 2, ImaginaryUnit, 3, 4, ImaginaryUnit, 5, ImaginaryUnit, ImaginaryUnit]);
  Test({LINENUM}12062, '❨1, 2, 3❩ ~ ❨10, i❩', [1, 2, 3, 10, ImaginaryUnit]);
  Test({LINENUM}12063, '❨1, 2, 3❩ ~ ❨10, i❩ ~ ❨4, 5❩', [1, 2, 3, 10, ImaginaryUnit, 4, 5]);
  Test({LINENUM}12064, '❨i, 2, 3❩ ~ ❨4, 5❩', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}12065, 'SequenceVector(1, 10) ~ SequenceVector(11, 20) = SequenceVector(20)', True);
  Test({LINENUM}12066, 'SequenceVector(1, 10000) ~ SequenceVector(10001, 20000) = SequenceVector(20000)', True);

  Test({LINENUM}12068, '#(ZeroVector(100)' + DupeString(' ~ ZeroVector(100)', 99) + ')', 10000);

{$IFNDEF QuickTest}
  StartStopwatch;
  Test({LINENUM}12072, '#(ZeroVector(1000)' + DupeString(' ~ ZeroVector(1000)', 999) + ')', 1000000);
  StopStopwatch;
  TestDuration({LINENUM}12074, 1);
{$ENDIF}

  Test({LINENUM}12077, '''(1, 2) ~ ''("dog", "cat") ~ ''(true, false) ~ ''(❨1, 0❩, ❨0, 1❩)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(1),
        ASO(2),
        ASO('dog'),
        ASO('cat'),
        ASO(true),
        ASO(false),
        ASO(ASR2(1, 0)),
        ASO(ASR2(0, 1))
      ]
    ));

  Test({LINENUM}12091, '''(1, 2) ~ ''("dog") ~ ''(true, 42.0, false) ~ ''(❨1, 0❩)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(1),
        ASO(2),
        ASO('dog'),
        ASO(true),
        ASO(42.0),
        ASO(false),
        ASO(ASR2(1, 0))
      ]
    ));

  Test({LINENUM}12104, 'SequenceList(1, 10) ~ SequenceList(11, 20) = SequenceList(20)', True);
  Test({LINENUM}12105, 'SequenceList(1, 10000) ~ SequenceList(10001, 20000) = SequenceList(20000)', True);

  Test({LINENUM}12107, '#(SequenceList(100)' + DupeString(' ~ SequenceList(100)', 99) + ')', 10000);

{$IFNDEF QuickTest}
  StartStopwatch;
  Test({LINENUM}12111, '#(SequenceList(1000)' + DupeString(' ~ SequenceList(1000)', 999) + ')', 1000000);
  StopStopwatch;
  TestDuration({LINENUM}12113, 1);
{$ENDIF}

  Test({LINENUM}12116, '"alpha" ~ ❨1, 0❩', failure, 'Invalid function arguments.');
  Test({LINENUM}12117, '"alpha" ~ 123', failure, 'Invalid function arguments.');
  Test({LINENUM}12118, '"alpha" ~ " beta" ~ " gamma" ~ " delta" ~ 10 ~ " phi"', failure, 'Invalid function arguments.');
  Test({LINENUM}12119, '❨1, 2, 3❩ ~ ❨4, 5, 6❩ ~ ❨7, 8❩ ~ "cat" ~ ❨10❩', failure, 'Invalid function arguments.');
  Test({LINENUM}12120, '❨1, 2, 3❩ ~ ❨4, 5, 6❩ ~ ❨7, 8❩ ~ 9 ~ ❨10❩', failure, 'Invalid function arguments.');
  Test({LINENUM}12121, '❨1, 2, 3❩ ~ ❨4, 5, 6❩ ~ ❨7, 8❩ ~ "9" ~ ❨10❩', failure, 'Invalid function arguments.');
  Test({LINENUM}12122, '7 ~ 7.0001', failure, 'Invalid function arguments.');
  Test({LINENUM}12123, 'true ~ false', failure, 'Invalid function arguments.');
  Test({LINENUM}12124, '2 ~ 3', failure, 'Invalid function arguments.');

  // Assignment

  // Only for simple L-values. More extensive testing is done in a following
  // chapter.

  Test({LINENUM}12131, 'x ≔ 42', 42);
  Test({LINENUM}12132, 'x + 1', 43);
  Test({LINENUM}12133, 'x ≔ x ⋅ 2', 84);
  Test({LINENUM}12134, 'x − 4', 80);
  Test({LINENUM}12135, 'x ≔ x − 3', 81);
  Test({LINENUM}12136, '√x', 9.0);
  Test({LINENUM}12137, 'y ≔ x', 81);
  Test({LINENUM}12138, 'x + y', 162);
  Test({LINENUM}12139, 'x ≔ 50', 50);
  Test({LINENUM}12140, 'x + y', 131);
  Test({LINENUM}12141, 'delete(x); delete(y)', success);

  Test({LINENUM}12143, 'a ≔ b ≔ 123', 123);
  Test({LINENUM}12144, '(a − 23) ⋅ (b − 100)', 2300);
  Test({LINENUM}12145, 'b ≔ 100', 100);
  Test({LINENUM}12146, '(a − 23) ⋅ (b − 100)', 0);
  Test({LINENUM}12147, 'delete(a); delete(b)', success);

  Test({LINENUM}12149, 'a, b, c, d ≔ 5', 5);
  Test({LINENUM}12150, 'a', 5);
  Test({LINENUM}12151, 'b', 5);
  Test({LINENUM}12152, 'c', 5);
  Test({LINENUM}12153, 'd', 5);
  Test({LINENUM}12154, 'd ≔ 6', 6);
  Test({LINENUM}12155, 'a + b + c + d', 21);
  Test({LINENUM}12156, 'delete(a); delete(b); delete(c); delete(d)', success);
  Test({LINENUM}12157, 'a', failure, 'Unknown identifier "a".');

  Test({LINENUM}12159, 'a, b, c ≔ 100, 50, 7', 7);
  Test({LINENUM}12160, 'a + b + c', 157);
  Test({LINENUM}12161, 'delete(a); delete(b); delete(c)', success);

  Test({LINENUM}12163, 'd ≔ a, b, c ≔ 55', 55);
  Test({LINENUM}12164, 'a', 55);
  Test({LINENUM}12165, 'b', 55);
  Test({LINENUM}12166, 'c', 55);
  Test({LINENUM}12167, 'd', 55);
  Test({LINENUM}12168, 'delete(a); delete(b); delete(c); delete(d)', success);

  Test({LINENUM}12170, 'd ≔ a, b, c ≔ 100, 50, 7', 7);
  Test({LINENUM}12171, 'a + b + c + d', 164);
  Test({LINENUM}12172, 'delete(a); delete(b); delete(c); delete(d)', success);
  Test({LINENUM}12173, 'a + b + c + d', failure, 'Unknown identifier "a".');

  Test({LINENUM}12175, 'x ≔ 10.2; y ≔ 5.6; x^2 + y^2', 135.4);
  Test({LINENUM}12176, 'x, y ≔ 7.1, 2.9; x^2 + y^2', 58.82);
  Test({LINENUM}12177, 'delete(x); delete(y)', success);

  Test({LINENUM}12179, 'a, b, c ≔ 1, 2', failure, 'The number of symbols (3) doesn''t match the number of values (2) in multiple assignment expression.');
  Test({LINENUM}12180, 'a, b, c ≔ 1, 2, 3, 4', failure, 'The number of symbols (3) doesn''t match the number of values (4) in multiple assignment expression.');
  Test({LINENUM}12181, 'a, b, c ≔ 1, 2, 3; 2⋅a + 3⋅b − c', 5);
  Test({LINENUM}12182, 'delete(a); delete(b); delete(c);', null);

  Test({LINENUM}12184, 'A ≔ ❨❨2, 1, 3❩, ❨3, −2, 4❩, ❨0, 1, 2❩❩; b ≔ ❨1, 3, 6❩; c ≔ 10; A⋅b + c', [33, 31, 25]);
  Eps; Test({LINENUM}12185, 'det(A) + tr(A) + #A + #b', 1.0);
  Test({LINENUM}12186, 'delete(A); delete(b); delete(c)', success);
  Test({LINENUM}12187, 'det(A) + tr(A) + #A + #b', failure, 'Unknown identifier "A".');

  Test({LINENUM}12189, '5 ≔ 6', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}12190, '5, 6 ≔ 2, 5', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}12191, '5, 6 ≔ 2', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}12192, '5, 6 ≔ 2, 5, 7', failure, 'The number of symbols (2) doesn''t match the number of values (3) in multiple assignment expression.');
  Test({LINENUM}12193, '1 + 1 ≔ 3', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}12194, 'sin(e) ≔ "test"', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}12195, 'a ≔ ≔ 5', ESyntaxException, 'Operand missing before operator ≔ at column 5.');
  Test({LINENUM}12196, 'a ≔', ESyntaxException, 'Operand missing after operator ≔ at column 3.');
  Test({LINENUM}12197, '≔ 5', ESyntaxException, 'Operand missing before operator ≔ at column 1.');
  Test({LINENUM}12198, '≔', ESyntaxException, 'Operand missing before operator ≔ at column 1.');
  Test({LINENUM}12199, '"h" ≔ 4', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}12201, 'π ≔ 3', failure, 'Cannot modify or delete protected variable "π".');
  Test({LINENUM}12202, 'delete(π)', failure, 'Cannot modify or delete protected variable "π".');

  // Maps to (create function)

  Test({LINENUM}12206, 'f ≔ x ↦ x^2 + 1; f(5)', 26);
  Test({LINENUM}12207, 'delete(f)', success);
  Test({LINENUM}12208, 'f(5)', failure, 'Unknown identifier "f".');

  Test({LINENUM}12210, '(x ↦ 2⋅x − 1)(10)', 19);

  Test({LINENUM}12212, 'f ≔ x ↦ x^2; g ≔ x ↦ x + 1; h ≔ x ↦ x/2;', null);
  Test({LINENUM}12213, 'g(f(h(g(h(g(h(h(g(99)))))))))', 50);

  Test({LINENUM}12215, 'f ≔ x ↦ 4⋅x^3 − x^2 + 5⋅x + 1;', null);
  Test({LINENUM}12216, 'f(10)', 3951);

  Test({LINENUM}12218, 'f ≔ (x, y) ↦ 3⋅x^2 + y^2;', null);
  Test({LINENUM}12219, 'f(3, 5)', 52);

  Test({LINENUM}12221, 'f ≔ (a, b, c, d) ↦ 2⋅a − b + 3⋅c + d;', null);
  Test({LINENUM}12222, 'f(1, 2, 3, 4)', 13);

  Test({LINENUM}12224, 'f ≔ A ↦ sqr(det(A));', null);
  Test({LINENUM}12225, 'A ≔ ❨❨2, 1, 3❩, ❨3, −2, 4❩, ❨0, 1, 2❩❩;', null);
  Eps; Test({LINENUM}12226, 'f(A)', 169.0);

  Test({LINENUM}12228, 'delete(f); delete(g); delete(h); delete(A)', success);

  Test({LINENUM}12230, 'f, g ≔ (x ↦ 3⋅x + 1), (x ↦ x^2/2);', null);
  Test({LINENUM}12231, 'f(2)', 7);
  Test({LINENUM}12232, 'g(5)', Rat(25, 2));
  Test({LINENUM}12233, 'delete(f); delete(g)', success);

  Test({LINENUM}12235, 'f ≔ x ↦ x^2.1;', null);
  Eps; Test({LINENUM}12236, 'f(7)', 59.5258881579142800305386216888);
  Test({LINENUM}12237, 'f(3, 5)', failure, '1 argument(s) expected, but 2 given.');
  Test({LINENUM}12238, 'f≔(x,y)↦x+y/2;', null);
  Test({LINENUM}12239, 'f(7, 8)', 11);
  Test({LINENUM}12240, 'f(7)', failure, '2 argument(s) expected, but 1 given.');
  Test({LINENUM}12241, 'delete(f)', success);

  Test({LINENUM}12243, '6 ↦ x^2', failure, 'A symbol was expected as argument 1.');
  Test({LINENUM}12244, 'f ≔ 6 ↦ x^2', failure, 'A symbol was expected as argument 1.');
  Test({LINENUM}12245, 'delete(f)', failure, 'Unknown identifier "f".');

  // Apply

  Test({LINENUM}12249, '"Hello, World!" @ UpperCase', 'HELLO, WORLD!'); // inefficient, but should work (better: UpperCase("Hello, World!"))
  Test({LINENUM}12250, '❨1, 2, 3, 0, 4, 5❩ @ square', [1, 4, 9, 0, 16, 25]);
  Test({LINENUM}12251, '❨i, 2, 3, 0, 4, 5❩ @ square', [TASC(-1), 4, 9, 0, 16, 25]);
  Test({LINENUM}12252, '❨❨1, 2❩, ❨3, 4❩❩ @ square', 2, [1, 4, 9, 16]);
  Test({LINENUM}12253, '❨❨i, 2❩, ❨3, 4❩❩ @ square', 2, [TASC(-1), 4, 9, 16]);
  Test({LINENUM}12254, '''(1, 2, 0, 3, 4, 5) @ square',
    TAlgosimArray.CreateWithValue(
      [
        ASO(1),
        ASO(4),
        ASO(0),
        ASO(9),
        ASO(16),
        ASO(25)
      ]
    ));
  Test({LINENUM}12265, '{0, 1, 3, 5, 7} @ square', intset([0, 1, 9, 25, 49]));

  Test({LINENUM}12267, '❨1, 2, 3, 1, 2, 3❩ @ square', [1, 4, 9, 1, 4, 9]);
  Test({LINENUM}12268, '❨i, 2, 3, i, 2, 3❩ @ square', [TASC(-1), 4, 9, TASC(-1), 4, 9]);
  Test({LINENUM}12269, '❨❨1, 2❩, ❨1, 2❩❩ @ square', 2, [1, 4, 1, 4]);
  Test({LINENUM}12270, '❨❨i, 2❩, ❨i, 2❩❩ @ square', 2, [TASC(-1), 4, TASC(-1), 4]);
  Test({LINENUM}12271, '''(1, 2, 3, 1, 2, 3) @ square',
    TAlgosimArray.CreateWithValue(
      [
        ASO(1),
        ASO(4),
        ASO(9),
        ASO(1),
        ASO(4),
        ASO(9)
      ]
    ));
  Test({LINENUM}12282, '{1, 2, 3, 1, 2, 3} @ square', intset([1, 4, 9]));

  Test({LINENUM}12284, 'struct("a": 6, "b": 7) @ square', TAlgosimStructure.CreateWithValue(['a', 'b'], [ASOInt(36), ASOInt(49)]));

  Test({LINENUM}12286, '"" @ UpperCase', '');
  Test({LINENUM}12287, '''() @ square', TAlgosimArray.Create);
  Test({LINENUM}12288, '∅ @ square', intset([]));
  Test({LINENUM}12289, 'struct() @ square', TAlgosimStructure.CreateWithValue([]));

  Test({LINENUM}12291, 'SequenceList(10) @ square @ succ @ IsPrime',
    TAlgosimArray.CreateWithValue(
      [
        ASO(true), ASO(true), ASO(false), ASO(true), ASO(false), ASO(true), ASO(false), ASO(false), ASO(false), ASO(true)
      ]
    )
  );

  Test({LINENUM}12299, '❨4, 3, 1, 2, −5❩ @ square @ (x ↦ x/2) @ trunc', [8, 4, 0, 2, 12]);

  Test({LINENUM}12301, '{1, 10, 100, 1000} @ square @ (x ↦ x/100)',
    asosetex(
      [
        ASOInt(1),
        ASOInt(100),
        ASOInt(10000),
        ASO(Rat(1, 100))
      ]
    )
  );

  Test({LINENUM}12312, '❨−2, 2, −3, 3, −4, 4❩ @ square', [4, 4, 9, 9, 16, 16]);
  Test({LINENUM}12313, '{−2, 2, −3, 3, −4, 4} @ square', intset([4, 9, 16]));

  Test({LINENUM}12315, 'f ≔ x ↦ x^2; ❨4, 3, 1, 2, −5❩ @ f @ (x ↦ x/2) @ trunc', [8, 4, 0, 2, 12]);
  Test({LINENUM}12316, 'delete(f)', success);

  Test({LINENUM}12318, '102 @ square', failure, 'Cannot apply function to elements in an object of type "integer".');
  Test({LINENUM}12319, 'true @ not', failure, 'Cannot apply function to elements in an object of type "boolean".');
  Test({LINENUM}12320, 'color("red") @ square', failure, 'Cannot apply function to elements in an object of type "color".');

  Test({LINENUM}12322, 'struct("a": 6, "b": 7) @ 3', failure, 'An object of type function was expected as argument 2, but an object of type integer was given.');

  // Access member

  Test({LINENUM}12326, 'struct("a": 6, "b": 7).a', 6);
  Test({LINENUM}12327, 'struct("a": 6, "b": 7).b', 7);
  Test({LINENUM}12328, 'struct("a": 6, "b": 7).c', failure, 'There is no member named "c".');

  Test({LINENUM}12330, 'S ≔ struct("a": 6, "b": 7);', null);
  Test({LINENUM}12331, 'S.a', 6);
  Test({LINENUM}12332, 'S.b', 7);
  Test({LINENUM}12333, 'S.c', failure, 'There is no member named "c".');
  Test({LINENUM}12334, 'S = struct("a": 6, "b": 7)', True);
  Test({LINENUM}12335, 'delete(S)', success);
  Test({LINENUM}12336, 'S.a', failure, 'Unknown identifier "S".');

  Test({LINENUM}12338, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}12339, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
  Test({LINENUM}12340, 'Mary ≔ struct("mother": Jane, "father": Mike);', null);

  Test({LINENUM}12342, 'Mary.mother = Jane', True);

  Test({LINENUM}12344, 'Mary.mother.name.first', 'Jane');
  Test({LINENUM}12345, 'Mary.mother.name.last', 'Smith');
  Test({LINENUM}12346, 'Mary.mother.sex', 'female');
  Test({LINENUM}12347, 'Mary.mother.age', 40);

  Test({LINENUM}12349, 'Mary.father = Mike', True);

  Test({LINENUM}12351, 'Mary.father.name.first', 'Mike');
  Test({LINENUM}12352, 'Mary.father.name.last', 'Doe');
  Test({LINENUM}12353, 'Mary.father.sex', 'male');
  Test({LINENUM}12354, 'Mary.father.age', 45);

  Test({LINENUM}12356, 'Mary.father.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}12357, 'Mary.father.dog', failure, 'There is no member named "dog".');
  Test({LINENUM}12358, 'Mary.father.dog.name', failure, 'There is no member named "dog".');
  Test({LINENUM}12359, 'Mary.mentor', failure, 'There is no member named "mentor".');
  Test({LINENUM}12360, 'Daniel.father.name.first', failure, 'Unknown identifier "Daniel".');

  Test({LINENUM}12362, 'delete(Mary); delete(Jane); delete(Mike); delete(name); delete(person)', success);

  Test({LINENUM}12364, '"Rats are intelligent animals.".length', failure, 'An object of type structure was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}12365, '"Rats are intelligent animals.".length.prime', failure, 'An object of type structure was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}12366, '(45).square', failure, 'An object of type structure was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}12367, '(45).square.square', failure, 'An object of type structure was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}12368, '(45).square.square.inverse', failure, 'An object of type structure was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}12369, 'IdentityMatrix(100).det', failure, 'An object of type structure was expected as argument 1, but an object of type real matrix was given.');
  Test({LINENUM}12370, 'IdentityMatrix(100).det.square', failure, 'An object of type structure was expected as argument 1, but an object of type real matrix was given.');

  Test({LINENUM}12372, 'i.square', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12373, 'i.square.square', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12374, 'e.square', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12375, 'e.square.inverse', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12376, 'e.square.inverse.square', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12377, 'true.negation', failure, 'Unsupported subscript operation.');

  // Output

  Test({LINENUM}12381, 'ClearHistory(); SaveHistory(true);', null);
  Test({LINENUM}12382, '1+1', 2);
  Test({LINENUM}12383, '5!', 120);
  Test({LINENUM}12384, 'IdentityMatrix(3)', 3, [1, 0, 0, 0, 1, 0, 0, 0, 1]);
  Test({LINENUM}12385, '"Hello, World!"', 'Hello, World!');

  Test({LINENUM}12387, '§1', null);
  Test({LINENUM}12388, '§2', 2);
  Test({LINENUM}12389, '§3', 120);
  Test({LINENUM}12390, '§4', 3, [1, 0, 0, 0, 1, 0, 0, 0, 1]);
  Test({LINENUM}12391, '§5', 'Hello, World!');
  Test({LINENUM}12392, '§6', null);
  Test({LINENUM}12393, '§7', 2);
  Test({LINENUM}12394, '§8', 120);
  Test({LINENUM}12395, '§14', failure, 'Index 14 out of bounds.');

  Test({LINENUM}12397, '2^10', 1024);
  Test({LINENUM}12398, '§-1', 1024);

  Test({LINENUM}12400, '2^5', 32);
  Test({LINENUM}12401, '2^6', 64);
  Test({LINENUM}12402, '§-2', 32);

  Test({LINENUM}12404, '§-20', failure, 'Index -20 out of bounds.');
  Test({LINENUM}12405, '§-20', null);
  Test({LINENUM}12406, '§-20', 2);
  Test({LINENUM}12407, '§-20', 120);

  Test({LINENUM}12409, '§0', failure, 'Index 0 out of bounds.');

  Test({LINENUM}12411, 'ClearHistory();', null);
  Test({LINENUM}12412, '1+1', 2);
  Test({LINENUM}12413, '5!', 120);
  Test({LINENUM}12414, 'IdentityMatrix(3)', 3, [1, 0, 0, 0, 1, 0, 0, 0, 1]);
  Test({LINENUM}12415, '"Hello, World!"', 'Hello, World!');
  Test({LINENUM}12416, 'HistoryLength()', 5);

  Test({LINENUM}12418, 'ClearHistory(); SaveHistory(false);', null);

  Test({LINENUM}12420, '1+1', 2);
  Test({LINENUM}12421, '5!', 120);
  Test({LINENUM}12422, 'IdentityMatrix(3)', 3, [1, 0, 0, 0, 1, 0, 0, 0, 1]);
  Test({LINENUM}12423, '"Hello, World!"', 'Hello, World!');

  Test({LINENUM}12425, '§1', null);
  Test({LINENUM}12426, '§2', null);
  Test({LINENUM}12427, '§3', null);
  Test({LINENUM}12428, '§4', null);
  Test({LINENUM}12429, '§5', null);

  Test({LINENUM}12431, '§"cat"', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');


  //
  // Extended function syntax
  //

  Test({LINENUM}12438, 'f ≔ x ↦ x^2 + 1;', null);
  Test({LINENUM}12439, 'f(5)', 26);

  Test({LINENUM}12441, 'f ≔ (x, y) ↦ x^2 + y^2;', null);
  Test({LINENUM}12442, 'f(3, 4)', 25);
  Test({LINENUM}12443, 'f(❨3, 4❩)', 25.0);
  Test({LINENUM}12444, 'f(''(3, 4))', 25);
  Test({LINENUM}12445, 'v ≔ ❨3, 4❩; L ≔ ''(3, 4);', null);
  Test({LINENUM}12446, 'f(v)', 25.0);
  Test({LINENUM}12447, 'f(L)', 25);
  Test({LINENUM}12448, 'v ≔ ❨4, 5❩; L ≔ ''(4, 5);', null);
  Test({LINENUM}12449, 'f(v)', 41.0);
  Test({LINENUM}12450, 'f(L)', 41);
  Test({LINENUM}12451, 'f(f(v), f(L))', 3362.0);
  Test({LINENUM}12452, 'v ≔ ❨f(v), f(v)❩;', null);
  Test({LINENUM}12453, 'f(v)', 3362.0);
  Test({LINENUM}12454, 'f(v, 2)', failure, 'Invalid function arguments');

  Test({LINENUM}12456, 'f(2)', failure, '2 argument(s) expected, but 1 given.');
  Test({LINENUM}12457, 'f(2, 3, 4)', failure, '2 argument(s) expected, but 3 given.');
  Test({LINENUM}12458, 'v ≔ ❨2❩; L ≔ ''(2);', null);
  Test({LINENUM}12459, 'f(v)', failure, '2 argument(s) expected, but 1 given.');
  Test({LINENUM}12460, 'f(L)', failure, '2 argument(s) expected, but 1 given.');
  Test({LINENUM}12461, 'v ≔ ❨2, 3, 4❩; L ≔ ''(2, 3, 4);', null);
  Test({LINENUM}12462, 'f(v)', failure, '2 argument(s) expected, but 3 given.');
  Test({LINENUM}12463, 'f(L)', failure, '2 argument(s) expected, but 3 given.');

  Test({LINENUM}12465, 'f("test")', failure, '2 argument(s) expected, but 1 given.');
  Test({LINENUM}12466, 'f({2,3})', failure, '2 argument(s) expected, but 1 given.');

  Test({LINENUM}12468, 'f ≔ (x, y, z) ↦ x^2 + y^2 + z^2;', null);
  Test({LINENUM}12469, 'f(1, 2, 3)', 14);
  Test({LINENUM}12470, 'f(❨1, 2, 3❩)', 14.0);
  Test({LINENUM}12471, 'f(''(1, 2, 3))', 14);
  Test({LINENUM}12472, 'v ≔ ❨1, 2, 3❩; L ≔ ''(1, 2, 3);', null);
  Test({LINENUM}12473, 'f(v)', 14.0);
  Test({LINENUM}12474, 'f(L)', 14);
  Test({LINENUM}12475, 'f(v) + f(L)', 28.0);
  Test({LINENUM}12476, 'f(2⋅v)', 56.0);
  Test({LINENUM}12477, 'f(L @ (x ↦ 2⋅x))', 56);

  Test({LINENUM}12479, 'delete(f); delete(v); delete(L);', null);





  //
  //
  //  CHAPTER 3
  //  Variables, L-values, indices, and assignment.
  //
  //

  Chapter('Variables, L-values, indices, assignment');

  //
  // Simple assignments
  //

  Test({LINENUM}12498, 'x ≔ 120', 120);
  Test({LINENUM}12499, '√(x + 1)', 11.0);
  Test({LINENUM}12500, 'x ≔ x − 20', 100);
  Test({LINENUM}12501, '√x', 10.0);
  Test({LINENUM}12502, 'x ≔ 55', 55);
  Test({LINENUM}12503, '(x − 1) / 2', 27);
  Test({LINENUM}12504, 'y ≔ x', 55);
  Test({LINENUM}12505, 'x + y', 110);
  Test({LINENUM}12506, 'y ≔ 12', 12);
  Test({LINENUM}12507, 'x + y', 67);
  Test({LINENUM}12508, 'delete(y)', success);
  Test({LINENUM}12509, 'x + y', failure, 'Unknown identifier "y".');
  Test({LINENUM}12510, 'x^2', 3025);
  Test({LINENUM}12511, 'delete(x)', success);
  Test({LINENUM}12512, 'x^2', failure, 'Unknown identifier "x".');
  Test({LINENUM}12513, 'x ≔ "Hello, "; y ≔ "World"', 'World');
  Test({LINENUM}12514, 'x ~ y ~ "!"', 'Hello, World!');
  Test({LINENUM}12515, 'delete(x); delete(y)', success);

  Test({LINENUM}12517, 'x ≔ y ≔ 21', 21);
  Test({LINENUM}12518, 'x', 21);
  Test({LINENUM}12519, 'y', 21);
  Test({LINENUM}12520, '2⋅x + y^2', 483);
  Test({LINENUM}12521, 'delete(x); delete(y)', success);
  Test({LINENUM}12522, 'delete(x); delete(y)', failure, 'Unknown identifier "x".');

  Test({LINENUM}12524, 'a, b ≔ 15', 15);
  Test({LINENUM}12525, 'a', 15);
  Test({LINENUM}12526, 'b', 15);
  Test({LINENUM}12527, '2⋅(a+b)', 60);
  Test({LINENUM}12528, 'delete(a); delete(b)', success);
  Test({LINENUM}12529, 'delete(a); delete(b)', failure, 'Unknown identifier "a".');

  Test({LINENUM}12531, 'a, b ≔ 11, 23', 23);
  Test({LINENUM}12532, 'a', 11);
  Test({LINENUM}12533, 'b', 23);
  Test({LINENUM}12534, '2⋅(a+b)', 68);

  Test({LINENUM}12536, 'a, b, c, d ≔ 10, 20, 30, "dogs! "', 'dogs! ');
  Test({LINENUM}12537, 'a', 10);
  Test({LINENUM}12538, 'b', 20);
  Test({LINENUM}12539, 'c', 30);
  Test({LINENUM}12540, 'd', 'dogs! ');
  Test({LINENUM}12541, '(a^2 + b − 3⋅c) ⋅ d', DupeString('dogs! ', 30));

  Test({LINENUM}12543, 'delete(a); delete(b); delete(c); delete(d)', success);
  Test({LINENUM}12544, 'delete(a); delete(b); delete(c); delete(d)', failure, 'Unknown identifier "a".');

  Test({LINENUM}12546, 'a ≔ b, c ≔ 7', 7);
  Test({LINENUM}12547, 'a', 7);
  Test({LINENUM}12548, 'b', 7);
  Test({LINENUM}12549, 'c', 7);

  Test({LINENUM}12551, 'a ≔ b, c ≔ 7, 11', 11);
  Test({LINENUM}12552, 'a', 11);
  Test({LINENUM}12553, 'b', 7);
  Test({LINENUM}12554, 'c', 11);
  Test({LINENUM}12555, 'a + b + c', 29);

  Test({LINENUM}12557, 'delete(a); delete(b); delete(c)', success);

  Test({LINENUM}12559, 'a, b, c, d ≔ 1, 2, 3', failure, 'The number of symbols (4) doesn''t match the number of values (3) in multiple assignment expression.');
  Test({LINENUM}12560, 'a, b, c, d ≔ 1, 2, 3, 4, 5', failure, 'The number of symbols (4) doesn''t match the number of values (5) in multiple assignment expression.');

  Test({LINENUM}12562, 'a, b, c, d ≔ 1, 2, 3, true', true);
  Test({LINENUM}12563, '''(a, b, c, d) = ''(1, 2, 3, true)', true);
  Test({LINENUM}12564, 'delete(a); delete(b); delete(c); delete(d)', success);
  Test({LINENUM}12565, '''(a, b, c, d) = ''(1, 2, 3, true)', failure, 'Unknown identifier "a".');

  Test({LINENUM}12567, 'A ≔ ❨❨2, 1, 0❩, ❨0, 1, 0❩, ❨0, 2, −1❩❩; b ≔ ❨1, 2, 3❩; A⋅b', [4, 2, 1]);
  Test({LINENUM}12568, '''(det(A), tr(A))', TAlgosimArray.CreateWithValue([ASO(-2.0), ASO(2.0)]));
  Test({LINENUM}12569, 'delete(A); delete(b)', success);

  Test({LINENUM}12571, 'A, b ≔ ❨❨0, 1, 2❩, ❨0, 1, 1❩, ❨1, 0, 3❩❩, ❨5, 1, −2❩; A⋅b', [-3, -1, -1]);
  Test({LINENUM}12572, '''(det(A), tr(A))', TAlgosimArray.CreateWithValue([ASO(-1.0), ASO(4.0)]));
  Test({LINENUM}12573, 'delete(A); delete(b)', success);

  Test({LINENUM}12575, '''(det(A), tr(A))', failure, 'Unknown identifier "A".');
  Test({LINENUM}12576, 'delete(A); delete(b)', failure, 'Unknown identifier "A".');

  Test({LINENUM}12578, 'a, b ≔ SequenceList(1, 10), SequenceList(11, 20); a~b = SequenceList(1, 20)', true);
  Test({LINENUM}12579, 'delete(a); delete(b)', success);

  Eps; Test({LINENUM}12581, 'a ≔ 2; b ≔ 3; c ≔ −1; x ≔ 1.5; y ≔ 1.2; z ≔ 1.3; a⋅x^2 + b⋅y^2 + c⋅y^2', 7.38);
  Test({LINENUM}12582, 'delete(a); delete(b); delete(c); delete(x); delete(y); delete(z)', success);

  Test({LINENUM}12584, '5 ≔ 3', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}12585, '1 + 1 ≔ 3', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}12586, 'IdentityMatrix(3) ≔ 0', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}12587, '"cats" ≔ "dogs"', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}12588, '1, 2 ≔ 2, 1', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}12589, '"cats", "dogs" ≔ "mammals"', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}12591, 'π ≔ 3.1', failure, 'Cannot modify or delete protected variable "π".');
  Test({LINENUM}12592, 'delete(π)', failure, 'Cannot modify or delete protected variable "π".');
  Test({LINENUM}12593, 'e ≔ 2', failure, 'Cannot modify or delete protected variable "e".');
  Test({LINENUM}12594, 'delete(e)', failure, 'Cannot modify or delete protected variable "e".');
  Test({LINENUM}12595, 'true ≔ false', failure, 'Cannot modify or delete protected variable "true".');
  Test({LINENUM}12596, 'delete(true)', failure, 'Cannot modify or delete protected variable "true".');

  Test({LINENUM}12598, 'a ≔ 42', 42);
  Test({LINENUM}12599, 'protect(a)', success);
  Test({LINENUM}12600, 'a ≔ 100', failure, 'Cannot modify or delete protected variable "a".');
  Test({LINENUM}12601, 'delete(a)', failure, 'Cannot modify or delete protected variable "a".');
  Test({LINENUM}12602, 'a^2', 42*42);
  Test({LINENUM}12603, 'a ≔ 100', failure, 'Cannot modify or delete protected variable "a".');
  Test({LINENUM}12604, 'delete(a)', failure, 'Cannot modify or delete protected variable "a".');
  Test({LINENUM}12605, 'unprotect(a)', success);
  Test({LINENUM}12606, 'a ≔ 100', 100);
  Test({LINENUM}12607, 'a^2', 100*100);
  Test({LINENUM}12608, 'delete(a)', success);
  Test({LINENUM}12609, 'a^2', failure, 'Unknown identifier "a".');

  Test({LINENUM}12611, 'a ≔ 42', 42);
  Test({LINENUM}12612, 'a#', 304250263527210);
  Test({LINENUM}12613, 'a ≔ 32', 32);
  Test({LINENUM}12614, 'a#', 200560490130);
  Test({LINENUM}12615, 'protect(a)', success);
  Test({LINENUM}12616, 'a ≔ 22', failure, 'Cannot modify or delete protected variable "a".');
  Test({LINENUM}12617, 'a#', 200560490130);
  Test({LINENUM}12618, 'delete(a)', failure, 'Cannot modify or delete protected variable "a".');
  Test({LINENUM}12619, 'a#', 200560490130);
  Test({LINENUM}12620, 'protect(a)', success); // idempotency
  Test({LINENUM}12621, 'a ≔ 22', failure, 'Cannot modify or delete protected variable "a".');
  Test({LINENUM}12622, 'a#', 200560490130);
  Test({LINENUM}12623, 'delete(a)', failure, 'Cannot modify or delete protected variable "a".');
  Test({LINENUM}12624, 'a#', 200560490130);
  Test({LINENUM}12625, 'unprotect(a)', success);
  Test({LINENUM}12626, 'a ≔ 22', 22);
  Test({LINENUM}12627, 'a#', 9699690);
  Test({LINENUM}12628, 'unprotect(a)', success); // idempotency
  Test({LINENUM}12629, 'delete(a)', success);
  Test({LINENUM}12630, 'a#', failure, 'Unknown identifier "a".');


  //
  // Structure members
  //

  Test({LINENUM}12637, 'S ≔ struct("a": 42, "b": "dog", "c": "cat")',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(42), ASO('dog'), ASO('cat')]
    )
  );

  Test({LINENUM}12644, 'S.a', 42);
  Test({LINENUM}12645, 'S.b', 'dog');
  Test({LINENUM}12646, 'S.c', 'cat');
  Test({LINENUM}12647, 'S.d', failure, 'There is no member named "d".');

  Test({LINENUM}12649, '#S', 3);
  Test({LINENUM}12650, '#S.b', 'dog'.Length);

  Test({LINENUM}12652, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(42), ASO('dog'), ASO('cat')]
    )
  );

  Test({LINENUM}12659, 'S.a ≔ 123', 123);

  Test({LINENUM}12661, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(123), ASO('dog'), ASO('cat')]
    )
  );

  Test({LINENUM}12668, 'S.a', 123);
  Test({LINENUM}12669, 'S.b', 'dog');
  Test({LINENUM}12670, 'S.c', 'cat');
  Test({LINENUM}12671, 'S.d', failure, 'There is no member named "d".');

  Test({LINENUM}12673, 'S.b ≔ "fancy rat"', 'fancy rat');

  Test({LINENUM}12675, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(123), ASO('fancy rat'), ASO('cat')]
    )
  );

  Test({LINENUM}12682, 'S.a', 123);
  Test({LINENUM}12683, 'S.b', 'fancy rat');
  Test({LINENUM}12684, 'S.c', 'cat');
  Test({LINENUM}12685, 'S.d', failure, 'There is no member named "d".');

  Test({LINENUM}12687, '#S.b', 'fancy rat'.Length);
  Test({LINENUM}12688, '#S.c', 'cat'.Length);

  Test({LINENUM}12690, 'S.c ≔ "rabbit"', 'rabbit');

  Test({LINENUM}12692, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(123), ASO('fancy rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}12699, 'S.a', 123);
  Test({LINENUM}12700, 'S.b', 'fancy rat');
  Test({LINENUM}12701, 'S.c', 'rabbit');
  Test({LINENUM}12702, 'S.d', failure, 'There is no member named "d".');

  Test({LINENUM}12704, '#S.b', 'fancy rat'.Length);
  Test({LINENUM}12705, '#S.c', 'rabbit'.Length);

  Test({LINENUM}12707, 'S.d ≔ "horse"', failure); // TODO: specify an error message

  Test({LINENUM}12709, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(123), ASO('fancy rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}12716, 'S.a ≔ S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(123), ASO('fancy rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}12723, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [
        TAlgosimStructure.CreateWithValue(
          ['a', 'b', 'c'],
          [ASOInt(123), ASO('fancy rat'), ASO('rabbit')]
        ),
        ASO('fancy rat'),
        ASO('rabbit')]
    )
  );

  Test({LINENUM}12736, 'S.a.a', 123);
  Test({LINENUM}12737, 'S.a.b', 'fancy rat');
  Test({LINENUM}12738, 'S.a.c', 'rabbit');
  Test({LINENUM}12739, 'S.a.d', failure, 'There is no member named "d".');
  Test({LINENUM}12740, 'S.b', 'fancy rat');
  Test({LINENUM}12741, 'S.c', 'rabbit');
  Test({LINENUM}12742, 'S.d', failure, 'There is no member named "d".');

  Test({LINENUM}12744, 'S.a',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(123), ASO('fancy rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}12751, 'S.a.d ≔ "horse"', failure); // TODO: specify an error message

  Test({LINENUM}12753, 'S.a.a ≔ 1024', 1024);

  Test({LINENUM}12755, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [
        TAlgosimStructure.CreateWithValue(
          ['a', 'b', 'c'],
          [ASOInt(1024), ASO('fancy rat'), ASO('rabbit')]
        ),
        ASO('fancy rat'),
        ASO('rabbit')]
    )
  );

  Test({LINENUM}12768, 'S.a.a', 1024);
  Test({LINENUM}12769, 'S.a.b', 'fancy rat');
  Test({LINENUM}12770, 'S.a.c', 'rabbit');
  Test({LINENUM}12771, 'S.a.d', failure, 'There is no member named "d".');
  Test({LINENUM}12772, 'S.b', 'fancy rat');
  Test({LINENUM}12773, 'S.c', 'rabbit');
  Test({LINENUM}12774, 'S.d', failure, 'There is no member named "d".');

  Test({LINENUM}12776, 'S.a.b ≔ "guinea pig"', 'guinea pig');

  Test({LINENUM}12778, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [
        TAlgosimStructure.CreateWithValue(
          ['a', 'b', 'c'],
          [ASOInt(1024), ASO('guinea pig'), ASO('rabbit')]
        ),
        ASO('fancy rat'),
        ASO('rabbit')]
    )
  );

  Test({LINENUM}12791, 'S.a.a', 1024);
  Test({LINENUM}12792, 'S.a.b', 'guinea pig');
  Test({LINENUM}12793, 'S.a.c', 'rabbit');
  Test({LINENUM}12794, 'S.a.d', failure, 'There is no member named "d".');
  Test({LINENUM}12795, 'S.b', 'fancy rat');
  Test({LINENUM}12796, 'S.c', 'rabbit');
  Test({LINENUM}12797, 'S.d', failure, 'There is no member named "d".');

  Test({LINENUM}12799, '#S', 3);
  Test({LINENUM}12800, '#S.a', 3);
  Test({LINENUM}12801, '#S.a.b', 'guinea pig'.Length);
  Test({LINENUM}12802, '#S.a.c', 'rabbit'.Length);
  Test({LINENUM}12803, '#S.b', 'fancy rat'.Length);
  Test({LINENUM}12804, '#S.c', 'rabbit'.Length);

  Test({LINENUM}12806, 'S.a ≔ "horse"', 'horse');

  Test({LINENUM}12808, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASO('horse'), ASO('fancy rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}12815, 'S.a', 'horse');
  Test({LINENUM}12816, 'S.b', 'fancy rat');
  Test({LINENUM}12817, 'S.c', 'rabbit');
  Test({LINENUM}12818, 'S.d', failure, 'There is no member named "d".');

  Test({LINENUM}12820, '#S', 3);
  Test({LINENUM}12821, '#S.a', 'horse'.Length);
  Test({LINENUM}12822, '#S.b', 'fancy rat'.Length);
  Test({LINENUM}12823, '#S.c', 'rabbit'.Length);

  Test({LINENUM}12825, 'delete(S)', success);

  Test({LINENUM}12827, 'S', failure, 'Unknown identifier "S".');

  Test({LINENUM}12829, 'S.a', failure, 'Unknown identifier "S".');
  Test({LINENUM}12830, 'S.b', failure, 'Unknown identifier "S".');
  Test({LINENUM}12831, 'S.c', failure, 'Unknown identifier "S".');
  Test({LINENUM}12832, 'S.d', failure, 'Unknown identifier "S".');

  Test({LINENUM}12834, '#S', failure, 'Unknown identifier "S".');
  Test({LINENUM}12835, '#S.a', failure, 'Unknown identifier "S".');
  Test({LINENUM}12836, '#S.b', failure, 'Unknown identifier "S".');
  Test({LINENUM}12837, '#S.c', failure, 'Unknown identifier "S".');

  Test({LINENUM}12839, 'S ≔ struct("a": 100, "b": 200)',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(100), ASOInt(200)]
    )
  );

  Test({LINENUM}12846, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(100), ASOInt(200)]
    )
  );

  Test({LINENUM}12853, 'S.a', 100);
  Test({LINENUM}12854, 'S.b', 200);

  Test({LINENUM}12856, 'S.a ≔ 150', 150);

  Test({LINENUM}12858, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(150), ASOInt(200)]
    )
  );

  Test({LINENUM}12865, 'S.a', 150);
  Test({LINENUM}12866, 'S.b', 200);

  Test({LINENUM}12868, 'protect(S)', success);

  Test({LINENUM}12870, 'S.a ≔ 175', failure, 'Cannot modify or delete protected variable "S".');

  Test({LINENUM}12872, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(150), ASOInt(200)]
    )
  );

  Test({LINENUM}12879, 'S.a', 150);
  Test({LINENUM}12880, 'S.b', 200);

  Test({LINENUM}12882, 'delete(S)', failure, 'Cannot modify or delete protected variable "S".');
  Test({LINENUM}12883, 'unprotect(S)', success);

  Test({LINENUM}12885, 'S.a ≔ 175', 175);

  Test({LINENUM}12887, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(175), ASOInt(200)]
    )
  );

  Test({LINENUM}12894, 'S.a', 175);
  Test({LINENUM}12895, 'S.b', 200);

  Test({LINENUM}12897, 'delete(S)', success);

  Test({LINENUM}12899, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}12900, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45); John ≔ person("John", "Stone", "male", 69); Sarah ≔ person("Sarah", "Lester", "female", 25)', Sarah);
  Test({LINENUM}12901, 'Mary ≔ struct("mother": Jane, "father": Mike)', Mary);

  Test({LINENUM}12903, 'Jane', Jane);
  Test({LINENUM}12904, 'Mike', Mike);
  Test({LINENUM}12905, 'John', John);
  Test({LINENUM}12906, 'Sarah', Sarah);
  Test({LINENUM}12907, 'Mary', Mary);

  Test({LINENUM}12909, 'Jane.name', Name('Jane', 'Smith'));
  Test({LINENUM}12910, 'Jane.name.first', 'Jane');
  Test({LINENUM}12911, 'Jane.name.last', 'Smith');
  Test({LINENUM}12912, 'Jane.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}12913, 'Jane.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12914, 'Jane.sex', 'female');
  Test({LINENUM}12915, 'Jane.age', 40);
  Test({LINENUM}12916, 'Jane.address', failure, 'There is no member named "address".');

  Test({LINENUM}12918, 'Mike.name', Name('Mike', 'Doe'));
  Test({LINENUM}12919, 'Mike.name.first', 'Mike');
  Test({LINENUM}12920, 'Mike.name.last', 'Doe');
  Test({LINENUM}12921, 'Mike.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}12922, 'Mike.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12923, 'Mike.sex', 'male');
  Test({LINENUM}12924, 'Mike.age', 45);
  Test({LINENUM}12925, 'Mike.address', failure, 'There is no member named "address".');

  Test({LINENUM}12927, 'John.name', Name('John', 'Stone'));
  Test({LINENUM}12928, 'John.name.first', 'John');
  Test({LINENUM}12929, 'John.name.last', 'Stone');
  Test({LINENUM}12930, 'John.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}12931, 'John.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12932, 'John.sex', 'male');
  Test({LINENUM}12933, 'John.age', 69);
  Test({LINENUM}12934, 'John.address', failure, 'There is no member named "address".');

  Test({LINENUM}12936, 'Sarah.name', Name('Sarah', 'Lester'));
  Test({LINENUM}12937, 'Sarah.name.first', 'Sarah');
  Test({LINENUM}12938, 'Sarah.name.last', 'Lester');
  Test({LINENUM}12939, 'Sarah.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}12940, 'Sarah.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12941, 'Sarah.sex', 'female');
  Test({LINENUM}12942, 'Sarah.age', 25);
  Test({LINENUM}12943, 'Sarah.address', failure, 'There is no member named "address".');

  Test({LINENUM}12945, 'Emmy.name', failure, 'Unknown identifier "Emmy".');
  Test({LINENUM}12946, 'Emmy.name.first', failure, 'Unknown identifier "Emmy".');
  Test({LINENUM}12947, 'Emmy.name.last', failure, 'Unknown identifier "Emmy".');
  Test({LINENUM}12948, 'Emmy.name.middle', failure, 'Unknown identifier "Emmy".');
  Test({LINENUM}12949, 'Emmy.name.first.etymology', failure, 'Unknown identifier "Emmy".');
  Test({LINENUM}12950, 'Emmy.sex', failure, 'Unknown identifier "Emmy".');
  Test({LINENUM}12951, 'Emmy.age', failure, 'Unknown identifier "Emmy".');
  Test({LINENUM}12952, 'Emmy.address', failure, 'Unknown identifier "Emmy".');

  Test({LINENUM}12954, 'Mary.mother', Jane);
  Test({LINENUM}12955, 'Mary.mother.name', Name('Jane', 'Smith'));
  Test({LINENUM}12956, 'Mary.mother.name.first', 'Jane');
  Test({LINENUM}12957, 'Mary.mother.name.last', 'Smith');
  Test({LINENUM}12958, 'Mary.mother.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12959, 'Mary.mother.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}12960, 'Mary.mother.sex', 'female');
  Test({LINENUM}12961, 'Mary.mother.age', 40);
  Test({LINENUM}12962, 'Mary.mother.address', failure, 'There is no member named "address".');

  Test({LINENUM}12964, 'Mary.father', Mike);
  Test({LINENUM}12965, 'Mary.father.name', Name('Mike', 'Doe'));
  Test({LINENUM}12966, 'Mary.father.name.first', 'Mike');
  Test({LINENUM}12967, 'Mary.father.name.last', 'Doe');
  Test({LINENUM}12968, 'Mary.father.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12969, 'Mary.father.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}12970, 'Mary.father.sex', 'male');
  Test({LINENUM}12971, 'Mary.father.age', 45);
  Test({LINENUM}12972, 'Mary.father.address', failure, 'There is no member named "address".');

  Test({LINENUM}12974, 'Mary.address', failure, 'There is no member named "address".');

  Test({LINENUM}12976, 'Harry ≔ struct("mother": Sarah, "father": John)',
    TAlgosimStructure.CreateWithValue(
      ['mother', 'father'],
      [Sarah, John]
    )
  );

  Test({LINENUM}12983, 'Harry.mother', Sarah);
  Test({LINENUM}12984, 'Harry.mother.name', Name('Sarah', 'Lester'));
  Test({LINENUM}12985, 'Harry.mother.name.first', 'Sarah');
  Test({LINENUM}12986, 'Harry.mother.name.last', 'Lester');
  Test({LINENUM}12987, 'Harry.mother.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12988, 'Harry.mother.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}12989, 'Harry.mother.sex', 'female');
  Test({LINENUM}12990, 'Harry.mother.age', 25);
  Test({LINENUM}12991, 'Harry.mother.address', failure, 'There is no member named "address".');

  Test({LINENUM}12993, 'Harry.father', John);
  Test({LINENUM}12994, 'Harry.father.name', Name('John', 'Stone'));
  Test({LINENUM}12995, 'Harry.father.name.first', 'John');
  Test({LINENUM}12996, 'Harry.father.name.last', 'Stone');
  Test({LINENUM}12997, 'Harry.father.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}12998, 'Harry.father.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}12999, 'Harry.father.sex', 'male');
  Test({LINENUM}13000, 'Harry.father.age', 69);
  Test({LINENUM}13001, 'Harry.father.address', failure, 'There is no member named "address".');

  Test({LINENUM}13003, 'Harry.address', failure, 'There is no member named "address".');

  Test({LINENUM}13005, 'Harry.father.name.first ≔ "Jonathan"', 'Jonathan');

  Test({LINENUM}13007, 'Harry.mother', Sarah);
  Test({LINENUM}13008, 'Harry.mother.name', Name('Sarah', 'Lester'));
  Test({LINENUM}13009, 'Harry.mother.name.first', 'Sarah');
  Test({LINENUM}13010, 'Harry.mother.name.last', 'Lester');
  Test({LINENUM}13011, 'Harry.mother.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13012, 'Harry.mother.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13013, 'Harry.mother.sex', 'female');
  Test({LINENUM}13014, 'Harry.mother.age', 25);
  Test({LINENUM}13015, 'Harry.mother.address', failure, 'There is no member named "address".');

  Test({LINENUM}13017, 'Harry.father', Person('Jonathan', 'Stone', 'male', 69));
  Test({LINENUM}13018, 'Harry.father.name', Name('Jonathan', 'Stone'));
  Test({LINENUM}13019, 'Harry.father.name.first', 'Jonathan');
  Test({LINENUM}13020, 'Harry.father.name.last', 'Stone');
  Test({LINENUM}13021, 'Harry.father.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13022, 'Harry.father.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13023, 'Harry.father.sex', 'male');
  Test({LINENUM}13024, 'Harry.father.age', 69);
  Test({LINENUM}13025, 'Harry.father.address', failure, 'There is no member named "address".');

  Test({LINENUM}13027, 'Harry.address', failure, 'There is no member named "address".');

  Test({LINENUM}13029, 'Harry.father.name ≔ name("Bill", "Gates")', Name('Bill', 'Gates'));

  Test({LINENUM}13031, 'Harry.mother', Sarah);
  Test({LINENUM}13032, 'Harry.mother.name', Name('Sarah', 'Lester'));
  Test({LINENUM}13033, 'Harry.mother.name.first', 'Sarah');
  Test({LINENUM}13034, 'Harry.mother.name.last', 'Lester');
  Test({LINENUM}13035, 'Harry.mother.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13036, 'Harry.mother.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13037, 'Harry.mother.sex', 'female');
  Test({LINENUM}13038, 'Harry.mother.age', 25);
  Test({LINENUM}13039, 'Harry.mother.address', failure, 'There is no member named "address".');

  Test({LINENUM}13041, 'Harry.father', Person('Bill', 'Gates', 'male', 69));
  Test({LINENUM}13042, 'Harry.father.name', Name('Bill', 'Gates'));
  Test({LINENUM}13043, 'Harry.father.name.first', 'Bill');
  Test({LINENUM}13044, 'Harry.father.name.last', 'Gates');
  Test({LINENUM}13045, 'Harry.father.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13046, 'Harry.father.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13047, 'Harry.father.sex', 'male');
  Test({LINENUM}13048, 'Harry.father.age', 69);
  Test({LINENUM}13049, 'Harry.father.address', failure, 'There is no member named "address".');

  Test({LINENUM}13051, 'Harry.address', failure, 'There is no member named "address".');

  Test({LINENUM}13053, 'Harry.father ≔ Mike', Mike);

  Test({LINENUM}13055, 'Harry.mother', Sarah);
  Test({LINENUM}13056, 'Harry.mother.name', Name('Sarah', 'Lester'));
  Test({LINENUM}13057, 'Harry.mother.name.first', 'Sarah');
  Test({LINENUM}13058, 'Harry.mother.name.last', 'Lester');
  Test({LINENUM}13059, 'Harry.mother.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13060, 'Harry.mother.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13061, 'Harry.mother.sex', 'female');
  Test({LINENUM}13062, 'Harry.mother.age', 25);
  Test({LINENUM}13063, 'Harry.mother.address', failure, 'There is no member named "address".');

  Test({LINENUM}13065, 'Harry.father', Mike);
  Test({LINENUM}13066, 'Harry.father.name', Name('Mike', 'Doe'));
  Test({LINENUM}13067, 'Harry.father.name.first', 'Mike');
  Test({LINENUM}13068, 'Harry.father.name.last', 'Doe');
  Test({LINENUM}13069, 'Harry.father.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13070, 'Harry.father.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13071, 'Harry.father.sex', 'male');
  Test({LINENUM}13072, 'Harry.father.age', 45);
  Test({LINENUM}13073, 'Harry.father.address', failure, 'There is no member named "address".');

  Test({LINENUM}13075, 'Harry.address', failure, 'There is no member named "address".');

  Test({LINENUM}13077, 'Harry.mother ≔ Jane', Jane);

  Test({LINENUM}13079, 'Harry.mother', Jane);
  Test({LINENUM}13080, 'Harry.mother.name', Name('Jane', 'Smith'));
  Test({LINENUM}13081, 'Harry.mother.name.first', 'Jane');
  Test({LINENUM}13082, 'Harry.mother.name.last', 'Smith');
  Test({LINENUM}13083, 'Harry.mother.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13084, 'Harry.mother.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13085, 'Harry.mother.sex', 'female');
  Test({LINENUM}13086, 'Harry.mother.age', 40);
  Test({LINENUM}13087, 'Harry.mother.address', failure, 'There is no member named "address".');

  Test({LINENUM}13089, 'Harry.father', Mike);
  Test({LINENUM}13090, 'Harry.father.name', Name('Mike', 'Doe'));
  Test({LINENUM}13091, 'Harry.father.name.first', 'Mike');
  Test({LINENUM}13092, 'Harry.father.name.last', 'Doe');
  Test({LINENUM}13093, 'Harry.father.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13094, 'Harry.father.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13095, 'Harry.father.sex', 'male');
  Test({LINENUM}13096, 'Harry.father.age', 45);
  Test({LINENUM}13097, 'Harry.father.address', failure, 'There is no member named "address".');

  Test({LINENUM}13099, 'Harry.address', failure, 'There is no member named "address".');

  Test({LINENUM}13101, 'Harry.father.name.first.etymology ≔ "From ..."', failure, 'Object "Harry.father.name.first" is not a structure.');
  Test({LINENUM}13102, 'Harry.father.name.middle.etymology ≔ "From ..."', failure); // TODO: could specify error message
  Test({LINENUM}13103, 'Harry.mentor.name.first.etymology ≔ "From ..."', failure); // TODO: could specify error message

  Test({LINENUM}13105, 'Harry.mother', Jane);
  Test({LINENUM}13106, 'Harry.mother.name', Name('Jane', 'Smith'));
  Test({LINENUM}13107, 'Harry.mother.name.first', 'Jane');
  Test({LINENUM}13108, 'Harry.mother.name.last', 'Smith');
  Test({LINENUM}13109, 'Harry.mother.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13110, 'Harry.mother.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13111, 'Harry.mother.sex', 'female');
  Test({LINENUM}13112, 'Harry.mother.age', 40);
  Test({LINENUM}13113, 'Harry.mother.address', failure, 'There is no member named "address".');

  Test({LINENUM}13115, 'Harry.father', Mike);
  Test({LINENUM}13116, 'Harry.father.name', Name('Mike', 'Doe'));
  Test({LINENUM}13117, 'Harry.father.name.first', 'Mike');
  Test({LINENUM}13118, 'Harry.father.name.last', 'Doe');
  Test({LINENUM}13119, 'Harry.father.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13120, 'Harry.father.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13121, 'Harry.father.sex', 'male');
  Test({LINENUM}13122, 'Harry.father.age', 45);
  Test({LINENUM}13123, 'Harry.father.address', failure, 'There is no member named "address".');

  Test({LINENUM}13125, 'Harry.address', failure, 'There is no member named "address".');

  Test({LINENUM}13127, 'Jane', Jane);
  Test({LINENUM}13128, 'Mike', Mike);
  Test({LINENUM}13129, 'John', John);
  Test({LINENUM}13130, 'Sarah', Sarah);
  Test({LINENUM}13131, 'Mary', Mary);

  Test({LINENUM}13133, 'Harry = Mary', True); // parent data

  Test({LINENUM}13135, 'Harry.mother.age ≔ 70', 70);
  Test({LINENUM}13136, 'Harry.father.age ≔ 75.5', 75.5);

  Test({LINENUM}13138, 'Harry.mother', Person('Jane', 'Smith', 'female', 70));
  Test({LINENUM}13139, 'Harry.mother.name', Name('Jane', 'Smith'));
  Test({LINENUM}13140, 'Harry.mother.name.first', 'Jane');
  Test({LINENUM}13141, 'Harry.mother.name.last', 'Smith');
  Test({LINENUM}13142, 'Harry.mother.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13143, 'Harry.mother.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13144, 'Harry.mother.sex', 'female');
  Test({LINENUM}13145, 'Harry.mother.age', 70);
  Test({LINENUM}13146, 'Harry.mother.address', failure, 'There is no member named "address".');

  Test({LINENUM}13148, 'Harry.father.name', Name('Mike', 'Doe'));
  Test({LINENUM}13149, 'Harry.father.name.first', 'Mike');
  Test({LINENUM}13150, 'Harry.father.name.last', 'Doe');
  Test({LINENUM}13151, 'Harry.father.name.first.etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13152, 'Harry.father.name.middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13153, 'Harry.father.sex', 'male');
  Test({LINENUM}13154, 'Harry.father.age', 75.5);
  Test({LINENUM}13155, 'Harry.father.address', failure, 'There is no member named "address".');

  Test({LINENUM}13157, 'Harry.address', failure, 'There is no member named "address".');

  Test({LINENUM}13159, 'Harry.mother ≔ "Mrs Jane Smith"; Harry.father ≔ "Mr Mike Doe"', 'Mr Mike Doe');

  Test({LINENUM}13161, 'Harry',
    TAlgosimStructure.CreateWithValue(
      ['mother', 'father'],
      [ASO('Mrs Jane Smith'), ASO('Mr Mike Doe')]
    )
  );

  Test({LINENUM}13168, 'Harry.mother', 'Mrs Jane Smith');
  Test({LINENUM}13169, 'Harry.father', 'Mr Mike Doe');
  Test({LINENUM}13170, 'Harry.address', failure, 'There is no member named "address".');

  Test({LINENUM}13172, 'Harry.mother, Harry.father ≔ "Ann", "Richard"', 'Richard');

  Test({LINENUM}13174, 'Harry',
    TAlgosimStructure.CreateWithValue(
      ['mother', 'father'],
      [ASO('Ann'), ASO('Richard')]
    )
  );

  Test({LINENUM}13181, 'Harry.mother', 'Ann');
  Test({LINENUM}13182, 'Harry.father', 'Richard');
  Test({LINENUM}13183, 'Harry.address', failure, 'There is no member named "address".');

  Test({LINENUM}13185, 'winner ≔ Jane', Jane);
  Test({LINENUM}13186, 'winner.name.first', 'Jane');
  Test({LINENUM}13187, 'winner ≔ Mike', Mike);
  Test({LINENUM}13188, 'winner.name.first', 'Mike');
  Test({LINENUM}13189, 'protect(winner)', success);
  Test({LINENUM}13190, 'winner ≔ Sarah', failure, 'Cannot modify or delete protected variable "winner".');
  Test({LINENUM}13191, 'winner.name.first', 'Mike');
  Test({LINENUM}13192, 'delete(winner)', failure, 'Cannot modify or delete protected variable "winner".');
  Test({LINENUM}13193, 'unprotect(winner)', success);
  Test({LINENUM}13194, 'winner ≔ Sarah', Sarah);
  Test({LINENUM}13195, 'winner.name.first', 'Sarah');
  Test({LINENUM}13196, 'winner.name.first ≔ "Sara"', 'Sara');
  Test({LINENUM}13197, 'winner', Person('Sara', 'Lester', 'female', 25));
  Test({LINENUM}13198, 'delete(winner)', success);

  Test({LINENUM}13200, 'winner ≔ Sarah', Sarah);
  Test({LINENUM}13201, 'winner', Sarah);
  Test({LINENUM}13202, 'winner.name.first', 'Sarah');
  Test({LINENUM}13203, 'protect(winner)', success);
  Test({LINENUM}13204, 'winner.name.first ≔ "Sara"', failure, 'Cannot modify or delete protected variable "winner".');
  Test({LINENUM}13205, 'winner.name ≔ "Sara Lester"', failure, 'Cannot modify or delete protected variable "winner".');
  Test({LINENUM}13206, 'winner', Sarah);
  Test({LINENUM}13207, 'winner.name.first', 'Sarah');
  Test({LINENUM}13208, 'unprotect(winner)', success);
  Test({LINENUM}13209, 'winner.name.first ≔ "Sara"', 'Sara');
  Test({LINENUM}13210, 'winner', person('Sara', 'Lester', 'female', 25));
  Test({LINENUM}13211, 'winner.name.first', 'Sara');
  Test({LINENUM}13212, 'delete(winner)', success);

  Test({LINENUM}13214, 'Jane', Jane);
  Test({LINENUM}13215, 'Mike', Mike);
  Test({LINENUM}13216, 'John', John);
  Test({LINENUM}13217, 'Sarah', Sarah);
  Test({LINENUM}13218, 'Mary', Mary);

  Test({LINENUM}13220, 'Mary = Harry', False);
  Test({LINENUM}13221, 'Mary ≠ Harry', True);
  Test({LINENUM}13222, '#Mary = #Harry', True);

  Test({LINENUM}13224, '#Mary', 2);
  Test({LINENUM}13225, '#Mary.mother', 3);
  Test({LINENUM}13226, '#Mary.mother.name', 2);
  Test({LINENUM}13227, '#Mary.mother.name.last', 'Smith'.Length);
  Test({LINENUM}13228, '#Mary.mother.name.last.etymology', failure, 'Unsupported subscript operation.');

  Test({LINENUM}13230, 'delete(Jane); delete(Mike); delete(John); delete(Sarah); delete(Harry)', success);
  Test({LINENUM}13231, 'Mary', Mary);

  Test({LINENUM}13233, 'protect(Mary.mother)', failure); // cannot protect only a part of a variable

  Test({LINENUM}13235, 'delete(Mary)', success);
  Test({LINENUM}13236, 'Mary', failure, 'Unknown identifier "Mary".');

  // Subscripts

  Test({LINENUM}13240, 'S ≔ struct("a": 100, "b": 200, "c": 300)',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(100), ASOInt(200), ASOInt(300)]
    )
  );

  Test({LINENUM}13247, 'S["a"]', 100);
  Test({LINENUM}13248, 'S["b"]', 200);
  Test({LINENUM}13249, 'S["c"]', 300);
  Test({LINENUM}13250, 'S["d"]', failure, 'There is no member named "d".');

  Test({LINENUM}13252, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(100), ASOInt(200), ASOInt(300)]
    )
  );

  Test({LINENUM}13259, 'S["a"] ≔ 150', 150);

  Test({LINENUM}13261, 'S["a"]', 150);
  Test({LINENUM}13262, 'S["b"]', 200);
  Test({LINENUM}13263, 'S["c"]', 300);
  Test({LINENUM}13264, 'S["d"]', failure, 'There is no member named "d".');

  Test({LINENUM}13266, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c'],
      [ASOInt(150), ASOInt(200), ASOInt(300)]
    )
  );

  Test({LINENUM}13273, 'S["d"] ≔ 400', 400);

  Test({LINENUM}13275, 'S["a"]', 150);
  Test({LINENUM}13276, 'S["b"]', 200);
  Test({LINENUM}13277, 'S["c"]', 300);
  Test({LINENUM}13278, 'S["d"]', 400);
  Test({LINENUM}13279, 'S["e"]', failure, 'There is no member named "e".');

  Test({LINENUM}13281, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c', 'd'],
      [ASOInt(150), ASOInt(200), ASOInt(300), ASOInt(400)]
    )
  );

  Test({LINENUM}13288, 'S["b"] ≔ 250', 250);

  Test({LINENUM}13290, 'S["a"]', 150);
  Test({LINENUM}13291, 'S["b"]', 250);
  Test({LINENUM}13292, 'S["c"]', 300);
  Test({LINENUM}13293, 'S["d"]', 400);
  Test({LINENUM}13294, 'S["e"]', failure, 'There is no member named "e".');

  Test({LINENUM}13296, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c', 'd'],
      [ASOInt(150), ASOInt(250), ASOInt(300), ASOInt(400)]
    )
  );

  Test({LINENUM}13303, 'S["d"] ≔ 1024', 1024);

  Test({LINENUM}13305, 'S["a"]', 150);
  Test({LINENUM}13306, 'S["b"]', 250);
  Test({LINENUM}13307, 'S["c"]', 300);
  Test({LINENUM}13308, 'S["d"]', 1024);
  Test({LINENUM}13309, 'S["e"]', failure, 'There is no member named "e".');

  Test({LINENUM}13311, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c', 'd'],
      [ASOInt(150), ASOInt(250), ASOInt(300), ASOInt(1024)]
    )
  );

  Test({LINENUM}13318, 'S["dog"] ≔ "Sally"', 'Sally');

  Test({LINENUM}13320, 'S["a"]', 150);
  Test({LINENUM}13321, 'S["b"]', 250);
  Test({LINENUM}13322, 'S["c"]', 300);
  Test({LINENUM}13323, 'S["d"]', 1024);
  Test({LINENUM}13324, 'S["dog"]', 'Sally');
  Test({LINENUM}13325, 'S["e"]', failure, 'There is no member named "e".');

  Test({LINENUM}13327, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c', 'd', 'dog'],
      [ASOInt(150), ASOInt(250), ASOInt(300), ASOInt(1024), ASO('Sally')]
    )
  );

  Test({LINENUM}13334, 'protect(S)', success);

  Test({LINENUM}13336, 'S["c"] ≔ 350', failure, 'Cannot modify or delete protected variable "S".');

  Test({LINENUM}13338, 'S["a"]', 150);
  Test({LINENUM}13339, 'S["b"]', 250);
  Test({LINENUM}13340, 'S["c"]', 300);
  Test({LINENUM}13341, 'S["d"]', 1024);
  Test({LINENUM}13342, 'S["dog"]', 'Sally');
  Test({LINENUM}13343, 'S["e"]', failure, 'There is no member named "e".');

  Test({LINENUM}13345, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c', 'd', 'dog'],
      [ASOInt(150), ASOInt(250), ASOInt(300), ASOInt(1024), ASO('Sally')]
    )
  );

  Test({LINENUM}13352, 'S["rat"] ≔ "Fiona"', failure, 'Cannot modify or delete protected variable "S".');

  Test({LINENUM}13354, 'S["a"]', 150);
  Test({LINENUM}13355, 'S["b"]', 250);
  Test({LINENUM}13356, 'S["c"]', 300);
  Test({LINENUM}13357, 'S["d"]', 1024);
  Test({LINENUM}13358, 'S["dog"]', 'Sally');
  Test({LINENUM}13359, 'S["e"]', failure, 'There is no member named "e".');

  Test({LINENUM}13361, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c', 'd', 'dog'],
      [ASOInt(150), ASOInt(250), ASOInt(300), ASOInt(1024), ASO('Sally')]
    )
  );

  Test({LINENUM}13368, 'unprotect(S)', success);

  Test({LINENUM}13370, 'S["c"], S["rat"] ≔ 350, "Fiona"', 'Fiona');

  Test({LINENUM}13372, 'S["a"]', 150);
  Test({LINENUM}13373, 'S["b"]', 250);
  Test({LINENUM}13374, 'S["c"]', 350);
  Test({LINENUM}13375, 'S["d"]', 1024);
  Test({LINENUM}13376, 'S["dog"]', 'Sally');
  Test({LINENUM}13377, 'S["rat"]', 'Fiona');
  Test({LINENUM}13378, 'S["e"]', failure, 'There is no member named "e".');

  Test({LINENUM}13380, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b', 'c', 'd', 'dog', 'rat'],
      [ASOInt(150), ASOInt(250), ASOInt(350), ASOInt(1024), ASO('Sally'), ASO('Fiona')]
    )
  );

  Test({LINENUM}13387, 'S["a"]["part1"]', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13388, 'S["a"]["part1"] ≔ 10.5', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13389, 'S["a"].part1', failure, 'Unsupported subscript operation.'); // could be more specific
  Test({LINENUM}13390, 'S["a"].part1 ≔ "cat"', failure, 'Object "S[a]" is not a structure.');

  Test({LINENUM}13392, 'delete(S)', success);

  Test({LINENUM}13394, 'S["a"]', failure, 'Unknown identifier "S".');
  Test({LINENUM}13395, 'S["b"]', failure, 'Unknown identifier "S".');
  Test({LINENUM}13396, 'S["c"]', failure, 'Unknown identifier "S".');
  Test({LINENUM}13397, 'S["d"]', failure, 'Unknown identifier "S".');
  Test({LINENUM}13398, 'S["dog"]', failure, 'Unknown identifier "S".');
  Test({LINENUM}13399, 'S["rat"]', failure, 'Unknown identifier "S".');
  Test({LINENUM}13400, 'S["e"]', failure, 'Unknown identifier "S".');

  Test({LINENUM}13402, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}13403, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45); John ≔ person("John", "Stone", "male", 69); Sarah ≔ person("Sarah", "Lester", "female", 25)', Sarah);
  Test({LINENUM}13404, 'Mary ≔ struct("mother": Jane, "father": Mike)', Mary);

  Test({LINENUM}13406, 'Jane', Jane);
  Test({LINENUM}13407, 'Mike', Mike);
  Test({LINENUM}13408, 'John', John);
  Test({LINENUM}13409, 'Sarah', Sarah);
  Test({LINENUM}13410, 'Mary', Mary);

  Test({LINENUM}13412, 'Jane["name"]', Name('Jane', 'Smith'));
  Test({LINENUM}13413, 'Jane["name"]["first"]', 'Jane');
  Test({LINENUM}13414, 'Jane["name"]["last"]', 'Smith');
  Test({LINENUM}13415, 'Jane["name"]["middle"]', failure, 'There is no member named "middle".');
  Test({LINENUM}13416, 'Jane["name"]["first"]["etymology"]', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13417, 'Jane["sex"]', 'female');
  Test({LINENUM}13418, 'Jane["age"]', 40);
  Test({LINENUM}13419, 'Jane["address"]', failure, 'There is no member named "address".');

  Test({LINENUM}13421, 'Jane["name"].first', 'Jane');
  Test({LINENUM}13422, 'Jane["name"].last', 'Smith');
  Test({LINENUM}13423, 'Jane["name"].middle', failure, 'There is no member named "middle".');
  Test({LINENUM}13424, 'Jane["name"].first["etymology"]', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13425, 'Jane["name"]["first"].etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13426, 'Jane["name"].first.etymology', failure, 'Unsupported subscript operation.');

  Test({LINENUM}13428, 'Jane.name["first"]', 'Jane');
  Test({LINENUM}13429, 'Jane.name["last"]', 'Smith');
  Test({LINENUM}13430, 'Jane.name["middle"]', failure, 'There is no member named "middle".');
  Test({LINENUM}13431, 'Jane.name["first"]["etymology"]', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13432, 'Jane.name.first["etymology"]', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13433, 'Jane.name["first"].etymology', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13434, 'Jane.name["first"]["etymology"]', failure, 'Unsupported subscript operation.');

  Test({LINENUM}13436, 'Jane["address"] ≔ "Storgatan 5"', 'Storgatan 5');

  Test({LINENUM}13438, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [Name('Jane', 'Smith'), ASO('female'), ASOInt(40), ASO('Storgatan 5')]
    )
  );

  Test({LINENUM}13445, 'Jane["address"] ≔ "Storgatan 6"', 'Storgatan 6');

  Test({LINENUM}13447, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [Name('Jane', 'Smith'), ASO('female'), ASOInt(40), ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13454, 'Jane["name"]["first"] ≔ "Jenny"', 'Jenny');

  Test({LINENUM}13456, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [Name('Jenny', 'Smith'), ASO('female'), ASOInt(40), ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13463, 'Jane["name"]["middle"] ≔ "Sara"', 'Sara');

  Test({LINENUM}13465, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Jenny'), ASO('Smith'), ASO('Sara')]
        ),
        ASO('female'),
        ASOInt(40),
        ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13479, 'Jane["name"].middle ≔ "Sarah"', 'Sarah');

  Test({LINENUM}13481, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Jenny'), ASO('Smith'), ASO('Sarah')]
        ),
        ASO('female'),
        ASOInt(40),
        ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13495, 'Jane.name["middle"] ≔ "Sophie"', 'Sophie');

  Test({LINENUM}13497, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Jenny'), ASO('Smith'), ASO('Sophie')]
        ),
        ASO('female'),
        ASOInt(40),
        ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13511, 'protect("Jane")', success);

  Test({LINENUM}13513, 'Jane.name["middle"] ≔ "Josephine"', failure, 'Cannot modify or delete protected variable "Jane".');

  Test({LINENUM}13515, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Jenny'), ASO('Smith'), ASO('Sophie')]
        ),
        ASO('female'),
        ASOInt(40),
        ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13529, 'Jane["name"]["middle"] ≔ "Josephine"', failure, 'Cannot modify or delete protected variable "Jane".');

  Test({LINENUM}13531, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Jenny'), ASO('Smith'), ASO('Sophie')]
        ),
        ASO('female'),
        ASOInt(40),
        ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13545, 'Jane["name"].middle ≔ "Josephine"', failure, 'Cannot modify or delete protected variable "Jane".');

  Test({LINENUM}13547, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Jenny'), ASO('Smith'), ASO('Sophie')]
        ),
        ASO('female'),
        ASOInt(40),
        ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13561, 'unprotect(Jane)', success);

  Test({LINENUM}13563, 'Jane["name"].middle ≔ "Josephine"', 'Josephine');

  Test({LINENUM}13565, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Jenny'), ASO('Smith'), ASO('Josephine')]
        ),
        ASO('female'),
        ASOInt(40),
        ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13579, 'Jane["name"]["middle"] ≔ "Emma"', 'Emma');

  Test({LINENUM}13581, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Jenny'), ASO('Smith'), ASO('Emma')]
        ),
        ASO('female'),
        ASOInt(40),
        ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13595, 'Jane["name"]["first"]["etymology"] ≔ "From ..."', failure, 'Unsupported subscript operation.');
  Test({LINENUM}13596, 'Jane["name"]["first"].etymology ≔ "From ..."', failure, 'Object "Jane[name][first]" is not a structure.');

  Test({LINENUM}13598, 'Jane',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age', 'address'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Jenny'), ASO('Smith'), ASO('Emma')]
        ),
        ASO('female'),
        ASOInt(40),
        ASO('Storgatan 6')]
    )
  );

  Test({LINENUM}13612, 'delete(Jane); delete(Mike); delete(John); delete(Sarah); delete(Mary)', success);

  // Numerical subscripts

  Test({LINENUM}13616, 'S ≔ struct("alpha": 100, "beta": 200, "gamma": "dogs!")',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASOInt(100), ASOInt(200), ASO('dogs!')]
    )
  );

  Test({LINENUM}13623, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASOInt(100), ASOInt(200), ASO('dogs!')]
    )
  );

  Test({LINENUM}13630, 'S[1]', 100);
  Test({LINENUM}13631, 'S[2]', 200);
  Test({LINENUM}13632, 'S[3]', 'dogs!');
  Test({LINENUM}13633, 'S[4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}13635, 'S[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}13637, 'S[−1]', 'dogs!');
  Test({LINENUM}13638, 'S[−2]', 200);
  Test({LINENUM}13639, 'S[−3]', 100);
  Test({LINENUM}13640, 'S[−4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}13642, 'S[1] ≔ 150', 150);

  Test({LINENUM}13644, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASOInt(150), ASOInt(200), ASO('dogs!')]
    )
  );

  Test({LINENUM}13651, 'S[2] ≔ 250.5', 250.5);

  Test({LINENUM}13653, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASOInt(150), ASO(250.5), ASO('dogs!')]
    )
  );

  Test({LINENUM}13660, 'S[3] ≔ ❨1, 0, 0❩', ASO(ASR3(1, 0, 0)));

  Test({LINENUM}13662, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASOInt(150), ASO(250.5), ASO(ASR3(1, 0, 0))]
    )
  );

  Test({LINENUM}13669, 'S[−1] ≔ "cats!"', 'cats!');

  Test({LINENUM}13671, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASOInt(150), ASO(250.5), ASO('cats!')]
    )
  );

  Test({LINENUM}13678, 'S[−2] ≔ 1.5', 1.5);

  Test({LINENUM}13680, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASOInt(150), ASO(1.5), ASO('cats!')]
    )
  );

  Test({LINENUM}13687, 'S[−3] ≔ true', true);

  Test({LINENUM}13689, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASO(True), ASO(1.5), ASO('cats!')]
    )
  );

  Test({LINENUM}13696, 'S[4] ≔ "rats!"', failure, 'Index 4 out of bounds.');
  Test({LINENUM}13697, 'S[-4] ≔ "rats!"', failure, 'Index -4 out of bounds.');
  Test({LINENUM}13698, 'S[0] ≔ "rats!"', failure, 'Index 0 out of bounds.');

  Test({LINENUM}13700, 'protect(S)', success);

  Test({LINENUM}13702, 'S[1] ≔ "horses!"', failure, 'Cannot modify or delete protected variable "S".');

  Test({LINENUM}13704, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASO(True), ASO(1.5), ASO('cats!')]
    )
  );

  Test({LINENUM}13711, 'unprotect(S)', success);

  Test({LINENUM}13713, 'S[1] ≔ "horses!"', 'horses!');

  Test({LINENUM}13715, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASO('horses!'), ASO(1.5), ASO('cats!')]
    )
  );

  Test({LINENUM}13722, 'protect(S)', success);

  Test({LINENUM}13724, 'S[-1] ≔ "dogs!"', failure, 'Cannot modify or delete protected variable "S".');

  Test({LINENUM}13726, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASO('horses!'), ASO(1.5), ASO('cats!')]
    )
  );

  Test({LINENUM}13733, 'unprotect(S)', success);

  Test({LINENUM}13735, 'S[-1] ≔ "dogs!"', 'dogs!');

  Test({LINENUM}13737, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASO('horses!'), ASO(1.5), ASO('dogs!')]
    )
  );

  Test({LINENUM}13744, 'protect(S)', success);

  Test({LINENUM}13746, 'S[4] ≔ "horses!"', failure, 'Cannot modify or delete protected variable "S".');

  Test({LINENUM}13748, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASO('horses!'), ASO(1.5), ASO('dogs!')]
    )
  );

  Test({LINENUM}13755, 'delete(S)', failure, 'Cannot modify or delete protected variable "S".');

  Test({LINENUM}13757, 'S',
    TAlgosimStructure.CreateWithValue(
      ['alpha', 'beta', 'gamma'],
      [ASO('horses!'), ASO(1.5), ASO('dogs!')]
    )
  );

  Test({LINENUM}13764, 'unprotect(S); delete(S)', success);

  Test({LINENUM}13766, 'S[1]', failure, 'Unknown identifier "S".');

  Test({LINENUM}13768, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}13769, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45); John ≔ person("John", "Stone", "male", 69); Sarah ≔ person("Sarah", "Lester", "female", 25)', Sarah);
  Test({LINENUM}13770, 'Mary ≔ struct("mother": Jane, "father": Mike)', Mary);

  Test({LINENUM}13772, 'Jane', Jane);
  Test({LINENUM}13773, 'Mike', Mike);
  Test({LINENUM}13774, 'John', John);
  Test({LINENUM}13775, 'Sarah', Sarah);
  Test({LINENUM}13776, 'Mary', Mary);

  Test({LINENUM}13778, 'Mike[1]', Name('Mike', 'Doe'));
  Test({LINENUM}13779, 'Mike[2]', 'male');
  Test({LINENUM}13780, 'Mike[3]', 45);
  Test({LINENUM}13781, 'Mike[4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}13783, 'Mike[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}13785, 'Mike[-1]', 45);
  Test({LINENUM}13786, 'Mike[-2]', 'male');
  Test({LINENUM}13787, 'Mike[-3]', Name('Mike', 'Doe'));
  Test({LINENUM}13788, 'Mike[-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}13790, 'Mike.name.first', 'Mike');
  Test({LINENUM}13791, 'Mike.name.last', 'Doe');
  Test({LINENUM}13792, 'Mike.name["first"]', 'Mike');
  Test({LINENUM}13793, 'Mike.name["last"]', 'Doe');
  Test({LINENUM}13794, 'Mike.name[1]', 'Mike');
  Test({LINENUM}13795, 'Mike.name[2]', 'Doe');
  Test({LINENUM}13796, 'Mike.name[-2]', 'Mike');
  Test({LINENUM}13797, 'Mike.name[-1]', 'Doe');

  Test({LINENUM}13799, 'Mike["name"].first', 'Mike');
  Test({LINENUM}13800, 'Mike["name"].last', 'Doe');
  Test({LINENUM}13801, 'Mike["name"]["first"]', 'Mike');
  Test({LINENUM}13802, 'Mike["name"]["last"]', 'Doe');
  Test({LINENUM}13803, 'Mike["name"][1]', 'Mike');
  Test({LINENUM}13804, 'Mike["name"][2]', 'Doe');
  Test({LINENUM}13805, 'Mike["name"][-2]', 'Mike');
  Test({LINENUM}13806, 'Mike["name"][-1]', 'Doe');

  Test({LINENUM}13808, 'Mike[1].first', 'Mike');
  Test({LINENUM}13809, 'Mike[1].last', 'Doe');
  Test({LINENUM}13810, 'Mike[1]["first"]', 'Mike');
  Test({LINENUM}13811, 'Mike[1]["last"]', 'Doe');
  Test({LINENUM}13812, 'Mike[1][1]', 'Mike');
  Test({LINENUM}13813, 'Mike[1][2]', 'Doe');
  Test({LINENUM}13814, 'Mike[1][-2]', 'Mike');
  Test({LINENUM}13815, 'Mike[1][-1]', 'Doe');

  Test({LINENUM}13817, 'Mike[1][3]', failure, 'Index 3 out of bounds.');
  Test({LINENUM}13818, 'Mike[1][0]', failure, 'Index 0 out of bounds.');
  Test({LINENUM}13819, 'Mike[1][-3]', failure, 'Index -3 out of bounds.');

  Test({LINENUM}13821, 'Mike[−1] ≔ 46', 46);

  Test({LINENUM}13823, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Mike', 'Doe'), ASO('male'), ASOInt(46)]
    )
  );

  Test({LINENUM}13830, 'Mike[2] ≔ "man"', 'man');

  Test({LINENUM}13832, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Mike', 'Doe'), ASO('man'), ASOInt(46)]
    )
  );

  Test({LINENUM}13839, 'Mike[1] ≔ name("Michael", "Daniels")',
    Name('Michael', 'Daniels'));


  Test({LINENUM}13843, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Michael', 'Daniels'), ASO('man'), ASOInt(46)]
    )
  );

  Test({LINENUM}13850, 'Mike[1][2] ≔ "Gambon"', 'Gambon');

  Test({LINENUM}13852, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Michael', 'Gambon'), ASO('man'), ASOInt(46)]
    )
  );

  Test({LINENUM}13859, 'Mike[1].last ≔ "Smith"', 'Smith');

  Test({LINENUM}13861, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Michael', 'Smith'), ASO('man'), ASOInt(46)]
    )
  );

  Test({LINENUM}13868, 'Mike[1]["last"] ≔ "Bell"', 'Bell');

  Test({LINENUM}13870, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Michael', 'Bell'), ASO('man'), ASOInt(46)]
    )
  );

  Test({LINENUM}13877, 'Mike.name["last"] ≔ "Potter"', 'Potter');

  Test({LINENUM}13879, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Michael', 'Potter'), ASO('man'), ASOInt(46)]
    )
  );

  Test({LINENUM}13886, 'Mike.name.last ≔ "Hall"', 'Hall');

  Test({LINENUM}13888, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Michael', 'Hall'), ASO('man'), ASOInt(46)]
    )
  );

  Test({LINENUM}13895, 'Mike.name[2] ≔ "Rodgers"', 'Rodgers');

  Test({LINENUM}13897, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Michael', 'Rodgers'), ASO('man'), ASOInt(46)]
    )
  );

  Test({LINENUM}13904, 'Mike.name[3] ≔ "John"', failure, 'Index 3 out of bounds.');

  Test({LINENUM}13906, 'Mike[1]["middle"] ≔ "John"', 'John');

  Test({LINENUM}13908, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Michael'), ASO('Rodgers'), ASO('John')]
        ),
        ASO('man'),
        ASOInt(46)
      ]
    )
  );

  Test({LINENUM}13922, 'Mike.name[3] ≔ "Jonathan"', 'Jonathan');

  Test({LINENUM}13924, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Michael'), ASO('Rodgers'), ASO('Jonathan')]
        ),
        ASO('man'),
        ASOInt(46)
      ]
    )
  );

  Test({LINENUM}13938, 'protect(Mike)', success);

  Test({LINENUM}13940, 'Mike.name[3] ≔ "Gilbert"', failure, 'Cannot modify or delete protected variable "Mike".');

  Test({LINENUM}13942, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Michael'), ASO('Rodgers'), ASO('Jonathan')]
        ),
        ASO('man'),
        ASOInt(46)
      ]
    )
  );

  Test({LINENUM}13956, 'unprotect(Mike)', success);

  Test({LINENUM}13958, 'Mike.name[3] ≔ "Gilbert"', 'Gilbert');

  Test({LINENUM}13960, 'Mike',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [
        TAlgosimStructure.CreateWithValue(
          ['first', 'last', 'middle'],
          [ASO('Michael'), ASO('Rodgers'), ASO('Gilbert')]
        ),
        ASO('man'),
        ASOInt(46)
      ]
    )
  );

  Test({LINENUM}13974, 'Mary[1]', Jane);
  Test({LINENUM}13975, 'Mary[1][1][1]', 'Jane');
  Test({LINENUM}13976, 'Mary[2]', Mike);
  Test({LINENUM}13977, 'Mary[2][1][2]', 'Doe');

  Test({LINENUM}13979, 'Mary[1] ≔ Sarah', Sarah);

  Test({LINENUM}13981, 'Mary[1]', Sarah);
  Test({LINENUM}13982, 'Mary[1][1][1]', 'Sarah');
  Test({LINENUM}13983, 'Mary[2]', Mike);
  Test({LINENUM}13984, 'Mary[2][1][2]', 'Doe');

  Test({LINENUM}13986, 'Mary[2] ≔ John', John);

  Test({LINENUM}13988, 'Mary[1]', Sarah);
  Test({LINENUM}13989, 'Mary[1][1][1]', 'Sarah');
  Test({LINENUM}13990, 'Mary[2]', John);
  Test({LINENUM}13991, 'Mary[2][1][2]', 'Stone');

  Test({LINENUM}13993, 'Mary.father[1][2]', 'Stone');
  Test({LINENUM}13994, 'Mary[2].name[2]', 'Stone');
  Test({LINENUM}13995, 'Mary[2][1].last', 'Stone');
  Test({LINENUM}13996, 'Mary[2].name.last', 'Stone');
  Test({LINENUM}13997, 'Mary.father.name[2]', 'Stone');

  Test({LINENUM}13999, 'Mary[2][1][2] ≔ "Frog"', 'Frog');
  Test({LINENUM}14000, 'Mary.father.name', Name('John', 'Frog'));

  Test({LINENUM}14002, 'Mary.father[1][2] ≔ "Armstrong"', 'Armstrong');
  Test({LINENUM}14003, 'Mary.father.name', Name('John', 'Armstrong'));

  Test({LINENUM}14005, 'Mary.father.name[2] ≔ "Smith"', 'Smith');
  Test({LINENUM}14006, 'Mary.father.name', Name('John', 'Smith'));

  Test({LINENUM}14008, 'Mary[2].name.last ≔ "Gates"', 'Gates');
  Test({LINENUM}14009, 'Mary.father.name', Name('John', 'Gates'));

  Test({LINENUM}14011, 'Mary[-1].name.last ≔ "Roberts"', 'Roberts');
  Test({LINENUM}14012, 'Mary.father.name', Name('John', 'Roberts'));

  Test({LINENUM}14014, 'protect(Mary)', success);

  Test({LINENUM}14016, 'Mary[2][1][2] ≔ "Frog"', failure, 'Cannot modify or delete protected variable "Mary".');
  Test({LINENUM}14017, 'Mary.father[1][2] ≔ "Frog"', failure, 'Cannot modify or delete protected variable "Mary".');
  Test({LINENUM}14018, 'Mary.father.name[2] ≔ "Frog"', failure, 'Cannot modify or delete protected variable "Mary".');
  Test({LINENUM}14019, 'Mary[2].name.last ≔ "Frog"', failure, 'Cannot modify or delete protected variable "Mary".');

  Test({LINENUM}14021, 'Mary.father.name', Name('John', 'Roberts'));

  Test({LINENUM}14023, 'unprotect(Mary)', success);

  Test({LINENUM}14025, 'Mary[2][1][2] ≔ "Frog"', 'Frog');
  Test({LINENUM}14026, 'Mary.father.name', Name('John', 'Frog'));

  Test({LINENUM}14028, 'protect(Mary)', success);
  Test({LINENUM}14029, 'Mary[2][1]["middle"] ≔ "Big"', failure, 'Cannot modify or delete protected variable "Mary".');
  Test({LINENUM}14030, 'Mary.father.name', Name('John', 'Frog'));

  Test({LINENUM}14032, 'unprotect(Mary)', success);
  Test({LINENUM}14033, 'Mary[2][1]["middle"] ≔ "Big"', 'Big');
  Test({LINENUM}14034, 'Mary.father.name',
    TAlgosimStructure.CreateWithValue(
      ['first', 'last', 'middle'],
      [ASO('John'), ASO('Frog'), ASO('Big')]
    )
  );

  Test({LINENUM}14041, 'protect(Mary[1])', failure);

  Test({LINENUM}14043, 'delete(Jane); delete(Mike); delete(John); delete(Sarah); delete(Mary)', success);


  //
  // Lists
  //

  Test({LINENUM}14050, 'L ≔ ''(10, 20, "dog", ❨1, 0, 0❩)',
    TAlgosimArray.CreateWithValue(
      [ASOInt(10), ASOInt(20), ASO('dog'), ASO(ASR3(1, 0, 0))]
    )
  );

  Test({LINENUM}14056, 'L',
    TAlgosimArray.CreateWithValue(
      [ASOInt(10), ASOInt(20), ASO('dog'), ASO(ASR3(1, 0, 0))]
    )
  );

  Test({LINENUM}14062, 'L[1]', 10);
  Test({LINENUM}14063, 'L[2]', 20);
  Test({LINENUM}14064, 'L[3]', 'dog');
  Test({LINENUM}14065, 'L[4]', ASO(ASR3(1, 0, 0)));
  Test({LINENUM}14066, 'L[5]', failure, 'Index 5 out of bounds.');

  Test({LINENUM}14068, 'L[-5]', failure, 'Index -5 out of bounds.');
  Test({LINENUM}14069, 'L[-4]', 10);
  Test({LINENUM}14070, 'L[-3]', 20);
  Test({LINENUM}14071, 'L[-2]', 'dog');
  Test({LINENUM}14072, 'L[-1]', ASO(ASR3(1, 0, 0)));

  Test({LINENUM}14074, 'L[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}14076, 'L["a"]', failure, 'Unsupported subscript operation.');
  Test({LINENUM}14077, 'L.a', failure, 'Unsupported subscript operation.');

  Test({LINENUM}14079, 'L[1] ≔ 10.5', 10.5);

  Test({LINENUM}14081, 'L',
    TAlgosimArray.CreateWithValue(
      [ASO(10.5), ASOInt(20), ASO('dog'), ASO(ASR3(1, 0, 0))]
    )
  );

  Test({LINENUM}14087, 'L[1]', 10.5);
  Test({LINENUM}14088, 'L[2]', 20);
  Test({LINENUM}14089, 'L[3]', 'dog');
  Test({LINENUM}14090, 'L[4]', ASO(ASR3(1, 0, 0)));
  Test({LINENUM}14091, 'L[5]', failure, 'Index 5 out of bounds.');

  Test({LINENUM}14093, 'L[-5]', failure, 'Index -5 out of bounds.');
  Test({LINENUM}14094, 'L[-4]', 10.5);
  Test({LINENUM}14095, 'L[-3]', 20);
  Test({LINENUM}14096, 'L[-2]', 'dog');
  Test({LINENUM}14097, 'L[-1]', ASO(ASR3(1, 0, 0)));

  Test({LINENUM}14099, 'L[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}14101, 'L["a"]', failure, 'Unsupported subscript operation.');
  Test({LINENUM}14102, 'L.a', failure, 'Unsupported subscript operation.');

  Test({LINENUM}14104, 'L[2] ≔ "rat"', 'rat');

  Test({LINENUM}14106, 'L',
    TAlgosimArray.CreateWithValue(
      [ASO(10.5), ASO('rat'), ASO('dog'), ASO(ASR3(1, 0, 0))]
    )
  );

  Test({LINENUM}14112, 'L[1]', 10.5);
  Test({LINENUM}14113, 'L[2]', 'rat');
  Test({LINENUM}14114, 'L[3]', 'dog');
  Test({LINENUM}14115, 'L[4]', ASO(ASR3(1, 0, 0)));
  Test({LINENUM}14116, 'L[5]', failure, 'Index 5 out of bounds.');

  Test({LINENUM}14118, 'L[-5]', failure, 'Index -5 out of bounds.');
  Test({LINENUM}14119, 'L[-4]', 10.5);
  Test({LINENUM}14120, 'L[-3]', 'rat');
  Test({LINENUM}14121, 'L[-2]', 'dog');
  Test({LINENUM}14122, 'L[-1]', ASO(ASR3(1, 0, 0)));

  Test({LINENUM}14124, 'L[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}14126, 'L["a"]', failure, 'Unsupported subscript operation.');
  Test({LINENUM}14127, 'L.a', failure, 'Unsupported subscript operation.');

  Test({LINENUM}14129, 'L[−1] ≔ ❨0, 1, 0❩', ASO(ASR3(0, 1, 0)));

  Test({LINENUM}14131, 'L',
    TAlgosimArray.CreateWithValue(
      [ASO(10.5), ASO('rat'), ASO('dog'), ASO(ASR3(0, 1, 0))]
    )
  );

  Test({LINENUM}14137, 'L[1]', 10.5);
  Test({LINENUM}14138, 'L[2]', 'rat');
  Test({LINENUM}14139, 'L[3]', 'dog');
  Test({LINENUM}14140, 'L[4]', ASO(ASR3(0, 1, 0)));
  Test({LINENUM}14141, 'L[5]', failure, 'Index 5 out of bounds.');

  Test({LINENUM}14143, 'L[-5]', failure, 'Index -5 out of bounds.');
  Test({LINENUM}14144, 'L[-4]', 10.5);
  Test({LINENUM}14145, 'L[-3]', 'rat');
  Test({LINENUM}14146, 'L[-2]', 'dog');
  Test({LINENUM}14147, 'L[-1]', ASO(ASR3(0, 1, 0)));

  Test({LINENUM}14149, 'L[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}14151, 'L["a"]', failure, 'Unsupported subscript operation.');
  Test({LINENUM}14152, 'L.a', failure, 'Unsupported subscript operation.');

  Test({LINENUM}14154, 'L[5] ≔ "cat"', failure, 'Index 5 out of bounds.');
  Test({LINENUM}14155, 'L[-5] ≔ "cat"', failure, 'Index -5 out of bounds.');
  Test({LINENUM}14156, 'L[0] ≔ "cat"', failure, 'Index 0 out of bounds.');

  Test({LINENUM}14158, 'L',
    TAlgosimArray.CreateWithValue(
      [ASO(10.5), ASO('rat'), ASO('dog'), ASO(ASR3(0, 1, 0))]
    )
  );

  Test({LINENUM}14164, 'protect(L)', success);
  Test({LINENUM}14165, 'L[1] ≔ 123', failure, 'Cannot modify or delete protected variable "L".');
  Test({LINENUM}14166, 'L',
    TAlgosimArray.CreateWithValue(
      [ASO(10.5), ASO('rat'), ASO('dog'), ASO(ASR3(0, 1, 0))]
    )
  );

  Test({LINENUM}14172, 'unprotect(L)', success);
  Test({LINENUM}14173, 'L[1] ≔ 123', 123);
  Test({LINENUM}14174, 'L',
    TAlgosimArray.CreateWithValue(
      [ASOInt(123), ASO('rat'), ASO('dog'), ASO(ASR3(0, 1, 0))]
    )
  );

  Test({LINENUM}14180, 'delete(L)', success);
  Test({LINENUM}14181, 'L[1]', failure, 'Unknown identifier "L".');

  Test({LINENUM}14183, 'animals ≔ ''("dog", "cat", "rat", "rabbit")',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}14189, 'colors ≔ ''("red", "green", "blue")',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14195, 'ints ≔ ''(1, 2, 3, 4, 5)',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASOInt(3), ASOInt(4), ASOInt(5)]
    )
  );

  Test({LINENUM}14201, 'animals',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}14207, 'colors',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14213, 'ints',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASOInt(3), ASOInt(4), ASOInt(5)]
    )
  );

  Test({LINENUM}14219, 'arr ≔ ''(animals, colors, ints)',
    TAlgosimArray.CreateWithValue(
      [
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASOInt(1), ASOInt(2), ASOInt(3), ASOInt(4), ASOInt(5)]
        )
      ]
    )
  );

  Test({LINENUM}14235, 'arr',
    TAlgosimArray.CreateWithValue(
      [
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASOInt(1), ASOInt(2), ASOInt(3), ASOInt(4), ASOInt(5)]
        )
      ]
    )
  );

  Test({LINENUM}14251, 'arr[1]',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}14257, 'arr[2]',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14263, 'arr[3]',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASOInt(3), ASOInt(4), ASOInt(5)]
    )
  );

  Test({LINENUM}14269, 'arr[-3]',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}14275, 'arr[-2]',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14281, 'arr[-1]',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASOInt(3), ASOInt(4), ASOInt(5)]
    )
  );

  Test({LINENUM}14287, 'arr[1][2]', 'cat');
  Test({LINENUM}14288, 'arr[2][3]', 'blue');
  Test({LINENUM}14289, 'arr[3][-2]', 4);
  Test({LINENUM}14290, 'arr[-1][2]', 2);
  Test({LINENUM}14291, 'arr[4][2]', failure, 'Index 4 out of bounds.');
  Test({LINENUM}14292, 'arr[-4][2]', failure, 'Index -4 out of bounds.');
  Test({LINENUM}14293, 'arr[0][2]', failure, 'Index 0 out of bounds.');
  Test({LINENUM}14294, 'arr[3][5]', 5);
  Test({LINENUM}14295, 'arr[3][6]', failure, 'Index 6 out of bounds.');
  Test({LINENUM}14296, 'arr[3][-6]', failure, 'Index -6 out of bounds.');
  Test({LINENUM}14297, 'arr[3][0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}14299, 'arr[1][−1] ≔ "guinea pig"', 'guinea pig');

  Test({LINENUM}14301, 'arr',
    TAlgosimArray.CreateWithValue(
      [
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASOInt(1), ASOInt(2), ASOInt(3), ASOInt(4), ASOInt(5)]
        )
      ]
    )
  );

  Test({LINENUM}14317, 'arr[1]',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
    )
  );

  Test({LINENUM}14323, 'arr[2]',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14329, 'arr[3]',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASOInt(3), ASOInt(4), ASOInt(5)]
    )
  );

  Test({LINENUM}14335, 'arr[3][2] ≔ 20.5', 20.5);

  Test({LINENUM}14337, 'arr',
    TAlgosimArray.CreateWithValue(
      [
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASOInt(1), ASO(20.5), ASOInt(3), ASOInt(4), ASOInt(5)]
        )
      ]
    )
  );

  Test({LINENUM}14353, 'arr[1]',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
    )
  );

  Test({LINENUM}14359, 'arr[2]',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14365, 'arr[3]',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASO(20.5), ASOInt(3), ASOInt(4), ASOInt(5)]
    )
  );

  Test({LINENUM}14371, 'arr[2] ≔ ''("white", "black")',
    TAlgosimArray.CreateWithValue(
      [ASO('white'), ASO('black')]
    )
  );

  Test({LINENUM}14377, 'arr',
    TAlgosimArray.CreateWithValue(
      [
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('white'), ASO('black')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASOInt(1), ASO(20.5), ASOInt(3), ASOInt(4), ASOInt(5)]
        )
      ]
    )
  );

  Test({LINENUM}14393, 'arr[1]',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
    )
  );

  Test({LINENUM}14399, 'arr[2]',
    TAlgosimArray.CreateWithValue(
      [ASO('white'), ASO('black')]
    )
  );

  Test({LINENUM}14405, 'arr[3]',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASO(20.5), ASOInt(3), ASOInt(4), ASOInt(5)]
    )
  );

  Test({LINENUM}14411, 'arr[4] ≔ ''(true, false)', failure, 'Index 4 out of bounds.');
  Test({LINENUM}14412, 'arr[2][3] ≔ "pink"', failure, 'Index 3 out of bounds.');

  Test({LINENUM}14414, 'arr',
    TAlgosimArray.CreateWithValue(
      [
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('white'), ASO('black')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASOInt(1), ASO(20.5), ASOInt(3), ASOInt(4), ASOInt(5)]
        )
      ]
    )
  );

  Test({LINENUM}14430, 'arr[1]',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
    )
  );

  Test({LINENUM}14436, 'arr[2]',
    TAlgosimArray.CreateWithValue(
      [ASO('white'), ASO('black')]
    )
  );

  Test({LINENUM}14442, 'arr[3]',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASO(20.5), ASOInt(3), ASOInt(4), ASOInt(5)]
    )
  );

  Test({LINENUM}14448, 'animals',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}14454, 'colors',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14460, 'ints',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASOInt(3), ASOInt(4), ASOInt(5)]
    )
  );

  Test({LINENUM}14466, 'protect(arr)', success);

  Test({LINENUM}14468, 'arr[1][2] ≔ "horse"', failure, 'Cannot modify or delete protected variable "arr".');

  Test({LINENUM}14470, 'arr',
    TAlgosimArray.CreateWithValue(
      [
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('white'), ASO('black')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASOInt(1), ASO(20.5), ASOInt(3), ASOInt(4), ASOInt(5)]
        )
      ]
    )
  );

  Test({LINENUM}14486, 'unprotect(arr)', success);

  Test({LINENUM}14488, 'arr[1][2] ≔ "horse"', 'horse');

  Test({LINENUM}14490, 'arr',
    TAlgosimArray.CreateWithValue(
      [
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('horse'), ASO('rat'), ASO('guinea pig')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('white'), ASO('black')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASOInt(1), ASO(20.5), ASOInt(3), ASOInt(4), ASOInt(5)]
        )
      ]
    )
  );

  Test({LINENUM}14506, 'protect(arr)', success);

  Test({LINENUM}14508, 'arr[3] ≔ ''(7, 8)', failure, 'Cannot modify or delete protected variable "arr".');

  Test({LINENUM}14510, 'arr',
    TAlgosimArray.CreateWithValue(
      [
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('horse'), ASO('rat'), ASO('guinea pig')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('white'), ASO('black')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASOInt(1), ASO(20.5), ASOInt(3), ASOInt(4), ASOInt(5)]
        )
      ]
    )
  );

  Test({LINENUM}14526, 'unprotect(arr)', success);

  Test({LINENUM}14528, 'arr[3] ≔ ''(7, 8)',
    TAlgosimArray.CreateWithValue(
      [ASOInt(7), ASOInt(8)]
    )
  );

  Test({LINENUM}14534, 'arr',
    TAlgosimArray.CreateWithValue(
      [
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('horse'), ASO('rat'), ASO('guinea pig')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('white'), ASO('black')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASOInt(7), ASOInt(8)]
        )
      ]
    )
  );

  Test({LINENUM}14550, 'delete(animals); delete(colors); delete(ints); delete(arr)', success);
  Test({LINENUM}14551, 'arr[1][−1] ≔ "guinea pig"', failure, 'Unknown identifier "arr".');


  //
  // Lists of structures
  //

  Test({LINENUM}14558, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}14559, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45); John ≔ person("John", "Stone", "male", 69); Sarah ≔ person("Sarah", "Lester", "female", 25)', Sarah);

  Test({LINENUM}14561, 'Jane', Jane);
  Test({LINENUM}14562, 'Mike', Mike);
  Test({LINENUM}14563, 'John', John);
  Test({LINENUM}14564, 'Sarah', Sarah);

  Test({LINENUM}14566, 'Members ≔ ''(Jane, Mike, John, Sarah)',
    TAlgosimArray.CreateWithValue(
      [Jane, Mike, John, Sarah]
    )
  );

  Test({LINENUM}14572, 'Members[1]', Jane);
  Test({LINENUM}14573, 'Members[2]', Mike);
  Test({LINENUM}14574, 'Members[3]', John);
  Test({LINENUM}14575, 'Members[4]', Sarah);

  Test({LINENUM}14577, 'Members[1].name', Name('Jane', 'Smith'));
  Test({LINENUM}14578, 'Members[1].name.first', 'Jane');
  Test({LINENUM}14579, 'Members[1].name.last', 'Smith');

  Test({LINENUM}14581, 'Members[1]["name"]', Name('Jane', 'Smith'));
  Test({LINENUM}14582, 'Members[1]["name"]["first"]', 'Jane');
  Test({LINENUM}14583, 'Members[1]["name"]["last"]', 'Smith');

  Test({LINENUM}14585, 'Members[1][1]', Name('Jane', 'Smith'));
  Test({LINENUM}14586, 'Members[1][1][1]', 'Jane');
  Test({LINENUM}14587, 'Members[1][1][2]', 'Smith');

  Test({LINENUM}14589, 'Members[1].name["last"]', 'Smith');
  Test({LINENUM}14590, 'Members[1]["name"].last', 'Smith');

  Test({LINENUM}14592, 'Members[1].name[2]', 'Smith');
  Test({LINENUM}14593, 'Members[1][1].last', 'Smith');

  Test({LINENUM}14595, 'Members[3].name.first ≔ "Jonathan"', 'Jonathan');
  Test({LINENUM}14596, 'Members[3]', Person('Jonathan', 'Stone', 'male', 69));

  Test({LINENUM}14598, 'Members[3]["name"][2] ≔ "Rodgers"', 'Rodgers');
  Test({LINENUM}14599, 'Members[3]', Person('Jonathan', 'Rodgers', 'male', 69));

  Test({LINENUM}14601, 'Members[3].name ≔ name("Bill", "Gates")', Name('Bill', 'Gates'));
  Test({LINENUM}14602, 'Members[3]', Person('Bill', 'Gates', 'male', 69));

  Test({LINENUM}14604, 'Members[3] ≔ person("Michael", "Gambon", "male", 79)', Person('Michael', 'Gambon', 'male', 79));
  Test({LINENUM}14605, 'Members[3]', Person('Michael', 'Gambon', 'male', 79));

  Test({LINENUM}14607, 'Members[1]', Jane);
  Test({LINENUM}14608, 'Members[2]', Mike);
  Test({LINENUM}14609, 'Members[4]', Sarah);

  Test({LINENUM}14611, 'protect(Members)', success);
  Test({LINENUM}14612, 'Members[3].name.first ≔ "Jonathan"', failure, 'Cannot modify or delete protected variable "Members".');
  Test({LINENUM}14613, 'Members[3].name.last ≔ "Rodgers"', failure, 'Cannot modify or delete protected variable "Members".');
  Test({LINENUM}14614, 'Members[3].name ≔ name("Bill", "Gates")', failure, 'Cannot modify or delete protected variable "Members".');
  Test({LINENUM}14615, 'Members[3] ≔ person("Andrew", "Smith", "male", 85)', failure, 'Cannot modify or delete protected variable "Members".');
  Test({LINENUM}14616, 'Members[3]', Person('Michael', 'Gambon', 'male', 79));
  Test({LINENUM}14617, 'delete(Members)', failure, 'Cannot modify or delete protected variable "Members".');

  Test({LINENUM}14619, 'unprotect(Members)', success);
  Test({LINENUM}14620, 'Members[3].name.first ≔ "Jonathan"', 'Jonathan');
  Test({LINENUM}14621, 'Members[3]', Person('Jonathan', 'Gambon', 'male', 79));

  Test({LINENUM}14623, 'delete(Jane); delete(Mike); delete(John); delete(Sarah); delete(Members)', success);
  Test({LINENUM}14624, 'Members[3].name.last ≔ "Rodgers"', failure, 'Unknown identifier "Members".');
  Test({LINENUM}14625, 'Members[3]["name"][-1] ≔ "Rodgers"', failure, 'Unknown identifier "Members".');


  //
  // Structures with lists as members
  //

  Test({LINENUM}14632, 'ints ≔ ''(10, 20, 30, 40)',
    TAlgosimArray.CreateWithValue(
      [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
    )
  );

  Test({LINENUM}14638, 'animals ≔ ''("dog", "cat", "rat", "rabbit")',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}14644, 'colors ≔ ''("red", "green", "blue")',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14650, 'vectors ≔ ''(❨1, 0❩, ❨0, 1❩)',
    TAlgosimArray.CreateWithValue(
      [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
    )
  );

  Test({LINENUM}14656, 'things ≔ struct("ints": ints, "animals": animals, "colors": colors, "vectors": vectors)',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
        )
      ]
    )
  );

  Test({LINENUM}14676, 'ints',
    TAlgosimArray.CreateWithValue(
      [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
    )
  );

  Test({LINENUM}14682, 'animals',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}14688, 'colors',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14694, 'vectors',
    TAlgosimArray.CreateWithValue(
      [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
    )
  );

  Test({LINENUM}14700, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
        )
      ]
    )
  );

  Test({LINENUM}14720, 'things.ints',
    TAlgosimArray.CreateWithValue(
      [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
    )
  );

  Test({LINENUM}14726, 'things.animals',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}14732, 'things.colors',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14738, 'things.vectors',
    TAlgosimArray.CreateWithValue(
      [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
    )
  );

  Test({LINENUM}14744, 'things["ints"]',
    TAlgosimArray.CreateWithValue(
      [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
    )
  );

  Test({LINENUM}14750, 'things["animals"]',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}14756, 'things["colors"]',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14762, 'things["vectors"]',
    TAlgosimArray.CreateWithValue(
      [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
    )
  );

  Test({LINENUM}14768, 'things[1]',
    TAlgosimArray.CreateWithValue(
      [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
    )
  );

  Test({LINENUM}14774, 'things[2]',
    TAlgosimArray.CreateWithValue(
      [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
    )
  );

  Test({LINENUM}14780, 'things[3]',
    TAlgosimArray.CreateWithValue(
      [ASO('red'), ASO('green'), ASO('blue')]
    )
  );

  Test({LINENUM}14786, 'things[4]',
    TAlgosimArray.CreateWithValue(
      [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
    )
  );

  Test({LINENUM}14792, 'things.matrices', failure, 'There is no member named "matrices".');
  Test({LINENUM}14793, 'things["matrices"]', failure, 'There is no member named "matrices".');
  Test({LINENUM}14794, 'things[5]', failure, 'Index 5 out of bounds.');

  Test({LINENUM}14796, 'things.ints[3]', 30);
  Test({LINENUM}14797, 'things.ints[−1]', 40);

  Test({LINENUM}14799, 'things.animals[1]', 'dog');
  Test({LINENUM}14800, 'things.animals[2]', 'cat');
  Test({LINENUM}14801, 'things.animals[3]', 'rat');
  Test({LINENUM}14802, 'things.animals[4]', 'rabbit');
  Test({LINENUM}14803, 'things.animals[5]', failure, 'Index 5 out of bounds.');

  Test({LINENUM}14805, 'things.colors[-1]', 'blue');
  Test({LINENUM}14806, 'things.colors[-2]', 'green');
  Test({LINENUM}14807, 'things.colors[-3]', 'red');
  Test({LINENUM}14808, 'things.colors[-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}14810, 'things.vectors[1]', ASO(ASR2(1, 0)));
  Test({LINENUM}14811, 'things.vectors[2]', ASO(ASR2(0, 1)));
  Test({LINENUM}14812, 'things.vectors[3]', failure, 'Index 3 out of bounds.');

  Test({LINENUM}14814, 'things.matrices[1]', failure, 'There is no member named "matrices".');

  Test({LINENUM}14816, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('rabbit')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
        )
      ]
    )
  );

  Test({LINENUM}14836, 'things.animals[4] ≔ "guinea pig"', 'guinea pig');

  Test({LINENUM}14838, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
        )
      ]
    )
  );

  Test({LINENUM}14858, 'protect(things)', success);

  Test({LINENUM}14860, 'things.animals[4] ≔ "horse"', failure, 'Cannot modify or delete protected variable "things".');

  Test({LINENUM}14862, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('guinea pig')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
        )
      ]
    )
  );

  Test({LINENUM}14882, 'unprotect(things)', success);

  Test({LINENUM}14884, 'things.animals[4] ≔ "horse"', 'horse');

  Test({LINENUM}14886, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('horse')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
        )
      ]
    )
  );

  Test({LINENUM}14906, 'protect(things)', success);

  Test({LINENUM}14908, 'things.vectors ≔ ''(❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩)', failure, 'Cannot modify or delete protected variable "things".');

  Test({LINENUM}14910, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('horse')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
        )
      ]
    )
  );

  Test({LINENUM}14930, 'unprotect(things)', success);

  Test({LINENUM}14932, 'things.vectors ≔ ''(❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩)',
    TAlgosimArray.CreateWithValue(
      [ASO(ASR3(1, 0, 0)), ASO(ASR3(0, 1, 0)), ASO(ASR3(0, 0, 1))]
    )
  );

  Test({LINENUM}14938, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('horse')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR3(1, 0, 0)), ASO(ASR3(0, 1, 0)), ASO(ASR3(0, 0, 1))]
        )
      ]
    )
  );

  Test({LINENUM}14958, 'things["vectors"] ≔ ''(❨1, 0, 0❩, ❨0, 2, 0❩, ❨0, 0, 3❩)',
    TAlgosimArray.CreateWithValue(
      [ASO(ASR3(1, 0, 0)), ASO(ASR3(0, 2, 0)), ASO(ASR3(0, 0, 3))]
    )
  );

  Test({LINENUM}14964, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('horse')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR3(1, 0, 0)), ASO(ASR3(0, 2, 0)), ASO(ASR3(0, 0, 3))]
        )
      ]
    )
  );

  Test({LINENUM}14984, 'things[4] ≔ ''(❨1, 0, 0❩, ❨0, 2, 0❩, ❨0, 0, 30❩)',
    TAlgosimArray.CreateWithValue(
      [ASO(ASR3(1, 0, 0)), ASO(ASR3(0, 2, 0)), ASO(ASR3(0, 0, 30))]
    )
  );

  Test({LINENUM}14990, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('horse')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR3(1, 0, 0)), ASO(ASR3(0, 2, 0)), ASO(ASR3(0, 0, 30))]
        )
      ]
    )
  );

  Test({LINENUM}15010, 'things.bools ≔ ''(true, false)', failure); // could be more specific

  Test({LINENUM}15012, 'things["bools"] ≔ ''(true, false)',
    TAlgosimArray.CreateWithValue(
      [ASO(True), ASO(False)]
    )
  );

  Test({LINENUM}15018, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors', 'bools'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(20), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('horse')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR3(1, 0, 0)), ASO(ASR3(0, 2, 0)), ASO(ASR3(0, 0, 30))]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(True), ASO(False)]
        )
      ]
    )
  );

  Test({LINENUM}15041, 'things["ints"][2] ≔ 200', 200);

  Test({LINENUM}15043, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors', 'bools'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(200), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('horse')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('green'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR3(1, 0, 0)), ASO(ASR3(0, 2, 0)), ASO(ASR3(0, 0, 30))]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(True), ASO(False)]
        )
      ]
    )
  );

  Test({LINENUM}15066, 'things[3][2] ≔ "white"', 'white');

  Test({LINENUM}15068, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors', 'bools'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(200), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('horse')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('white'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR3(1, 0, 0)), ASO(ASR3(0, 2, 0)), ASO(ASR3(0, 0, 30))]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(True), ASO(False)]
        )
      ]
    )
  );

  Test({LINENUM}15091, 'things[30][2] ≔ "white"', failure, 'Index 30 out of bounds.');

  Test({LINENUM}15093, 'things',
    TAlgosimStructure.CreateWithValue(
      ['ints', 'animals', 'colors', 'vectors', 'bools'],
      [
        TAlgosimArray.CreateWithValue(
          [ASOInt(10), ASOInt(200), ASOInt(30), ASOInt(40)]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('dog'), ASO('cat'), ASO('rat'), ASO('horse')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO('red'), ASO('white'), ASO('blue')]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(ASR3(1, 0, 0)), ASO(ASR3(0, 2, 0)), ASO(ASR3(0, 0, 30))]
        ),
        TAlgosimArray.CreateWithValue(
          [ASO(True), ASO(False)]
        )
      ]
    )
  );

  Test({LINENUM}15116, 'delete(ints); delete(animals); delete(colors); delete(vectors); delete(things)', success);


  //
  // Non-ASO members
  //

  // Strings

  Test({LINENUM}15125, 'S ≔ "Dogs are cute."', 'Dogs are cute.');

  Test({LINENUM}15127, 'S', 'Dogs are cute.');

  Test({LINENUM}15129, 'S[1]', 'D');
  Test({LINENUM}15130, 'S[2]', 'o');
  Test({LINENUM}15131, 'S[3]', 'g');
  Test({LINENUM}15132, 'S[4]', 's');
  Test({LINENUM}15133, 'S[5]', ' ');
  Test({LINENUM}15134, 'S[6]', 'a');
  Test({LINENUM}15135, 'S[7]', 'r');
  Test({LINENUM}15136, 'S[8]', 'e');
  Test({LINENUM}15137, 'S[9]', ' ');
  Test({LINENUM}15138, 'S[10]', 'c');
  Test({LINENUM}15139, 'S[11]', 'u');
  Test({LINENUM}15140, 'S[12]', 't');
  Test({LINENUM}15141, 'S[13]', 'e');
  Test({LINENUM}15142, 'S[14]', '.');

  Test({LINENUM}15144, 'S[15]', failure, 'Index 15 out of bounds.');

  Test({LINENUM}15146, 'S[-1]', '.');
  Test({LINENUM}15147, 'S[-2]', 'e');
  Test({LINENUM}15148, 'S[-3]', 't');
  Test({LINENUM}15149, 'S[-4]', 'u');
  Test({LINENUM}15150, 'S[-5]', 'c');
  Test({LINENUM}15151, 'S[-6]', ' ');
  Test({LINENUM}15152, 'S[-7]', 'e');
  Test({LINENUM}15153, 'S[-8]', 'r');
  Test({LINENUM}15154, 'S[-9]', 'a');
  Test({LINENUM}15155, 'S[-10]', ' ');
  Test({LINENUM}15156, 'S[-11]', 's');
  Test({LINENUM}15157, 'S[-12]', 'g');
  Test({LINENUM}15158, 'S[-13]', 'o');
  Test({LINENUM}15159, 'S[-14]', 'D');

  Test({LINENUM}15161, 'S[-15]', failure, 'Index -15 out of bounds.');

  Test({LINENUM}15163, 'S[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15165, 'S[14] ≔ "!"', '!');

  Test({LINENUM}15167, 'S', 'Dogs are cute!');

  Test({LINENUM}15169, 'S[1]', 'D');
  Test({LINENUM}15170, 'S[2]', 'o');
  Test({LINENUM}15171, 'S[3]', 'g');
  Test({LINENUM}15172, 'S[4]', 's');
  Test({LINENUM}15173, 'S[5]', ' ');
  Test({LINENUM}15174, 'S[6]', 'a');
  Test({LINENUM}15175, 'S[7]', 'r');
  Test({LINENUM}15176, 'S[8]', 'e');
  Test({LINENUM}15177, 'S[9]', ' ');
  Test({LINENUM}15178, 'S[10]', 'c');
  Test({LINENUM}15179, 'S[11]', 'u');
  Test({LINENUM}15180, 'S[12]', 't');
  Test({LINENUM}15181, 'S[13]', 'e');
  Test({LINENUM}15182, 'S[14]', '!');

  Test({LINENUM}15184, 'S[15]', failure, 'Index 15 out of bounds.');

  Test({LINENUM}15186, 'S[-1]', '!');
  Test({LINENUM}15187, 'S[-2]', 'e');
  Test({LINENUM}15188, 'S[-3]', 't');
  Test({LINENUM}15189, 'S[-4]', 'u');
  Test({LINENUM}15190, 'S[-5]', 'c');
  Test({LINENUM}15191, 'S[-6]', ' ');
  Test({LINENUM}15192, 'S[-7]', 'e');
  Test({LINENUM}15193, 'S[-8]', 'r');
  Test({LINENUM}15194, 'S[-9]', 'a');
  Test({LINENUM}15195, 'S[-10]', ' ');
  Test({LINENUM}15196, 'S[-11]', 's');
  Test({LINENUM}15197, 'S[-12]', 'g');
  Test({LINENUM}15198, 'S[-13]', 'o');
  Test({LINENUM}15199, 'S[-14]', 'D');

  Test({LINENUM}15201, 'S[-15]', failure, 'Index -15 out of bounds.');

  Test({LINENUM}15203, 'S[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15205, 'S[-1] ≔ "‼"', '‼');

  Test({LINENUM}15207, 'S', 'Dogs are cute‼');

  Test({LINENUM}15209, 'S[1]', 'D');
  Test({LINENUM}15210, 'S[2]', 'o');
  Test({LINENUM}15211, 'S[3]', 'g');
  Test({LINENUM}15212, 'S[4]', 's');
  Test({LINENUM}15213, 'S[5]', ' ');
  Test({LINENUM}15214, 'S[6]', 'a');
  Test({LINENUM}15215, 'S[7]', 'r');
  Test({LINENUM}15216, 'S[8]', 'e');
  Test({LINENUM}15217, 'S[9]', ' ');
  Test({LINENUM}15218, 'S[10]', 'c');
  Test({LINENUM}15219, 'S[11]', 'u');
  Test({LINENUM}15220, 'S[12]', 't');
  Test({LINENUM}15221, 'S[13]', 'e');
  Test({LINENUM}15222, 'S[14]', '‼');

  Test({LINENUM}15224, 'S[15]', failure, 'Index 15 out of bounds.');

  Test({LINENUM}15226, 'S[-1]', '‼');
  Test({LINENUM}15227, 'S[-2]', 'e');
  Test({LINENUM}15228, 'S[-3]', 't');
  Test({LINENUM}15229, 'S[-4]', 'u');
  Test({LINENUM}15230, 'S[-5]', 'c');
  Test({LINENUM}15231, 'S[-6]', ' ');
  Test({LINENUM}15232, 'S[-7]', 'e');
  Test({LINENUM}15233, 'S[-8]', 'r');
  Test({LINENUM}15234, 'S[-9]', 'a');
  Test({LINENUM}15235, 'S[-10]', ' ');
  Test({LINENUM}15236, 'S[-11]', 's');
  Test({LINENUM}15237, 'S[-12]', 'g');
  Test({LINENUM}15238, 'S[-13]', 'o');
  Test({LINENUM}15239, 'S[-14]', 'D');

  Test({LINENUM}15241, 'S[-15]', failure, 'Index -15 out of bounds.');

  Test({LINENUM}15243, 'S[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15245, 'S[2] ≔ "ö"', 'ö');

  Test({LINENUM}15247, 'S', 'Dögs are cute‼');

  Test({LINENUM}15249, 'S[1]', 'D');
  Test({LINENUM}15250, 'S[2]', 'ö');
  Test({LINENUM}15251, 'S[3]', 'g');
  Test({LINENUM}15252, 'S[4]', 's');
  Test({LINENUM}15253, 'S[5]', ' ');
  Test({LINENUM}15254, 'S[6]', 'a');
  Test({LINENUM}15255, 'S[7]', 'r');
  Test({LINENUM}15256, 'S[8]', 'e');
  Test({LINENUM}15257, 'S[9]', ' ');
  Test({LINENUM}15258, 'S[10]', 'c');
  Test({LINENUM}15259, 'S[11]', 'u');
  Test({LINENUM}15260, 'S[12]', 't');
  Test({LINENUM}15261, 'S[13]', 'e');
  Test({LINENUM}15262, 'S[14]', '‼');

  Test({LINENUM}15264, 'S[15]', failure, 'Index 15 out of bounds.');

  Test({LINENUM}15266, 'S[-1]', '‼');
  Test({LINENUM}15267, 'S[-2]', 'e');
  Test({LINENUM}15268, 'S[-3]', 't');
  Test({LINENUM}15269, 'S[-4]', 'u');
  Test({LINENUM}15270, 'S[-5]', 'c');
  Test({LINENUM}15271, 'S[-6]', ' ');
  Test({LINENUM}15272, 'S[-7]', 'e');
  Test({LINENUM}15273, 'S[-8]', 'r');
  Test({LINENUM}15274, 'S[-9]', 'a');
  Test({LINENUM}15275, 'S[-10]', ' ');
  Test({LINENUM}15276, 'S[-11]', 's');
  Test({LINENUM}15277, 'S[-12]', 'g');
  Test({LINENUM}15278, 'S[-13]', 'ö');
  Test({LINENUM}15279, 'S[-14]', 'D');

  Test({LINENUM}15281, 'S[-15]', failure, 'Index -15 out of bounds.');

  Test({LINENUM}15283, 'S[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15285, 'S[15] ≔ "!"', failure, 'Index 15 out of bounds.');
  Test({LINENUM}15286, 'S[25] ≔ "!"', failure, 'Index 25 out of bounds.');
  Test({LINENUM}15287, 'S[-15] ≔ "!"', failure, 'Index -15 out of bounds.');
  Test({LINENUM}15288, 'S[-25] ≔ "!"', failure, 'Index -25 out of bounds.');
  Test({LINENUM}15289, 'S[0] ≔ "!"', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15291, 'S ≔ "0000000000"; for(i, 0, 9, (S[i + 1] ≔ chr(ord("0") + i))); S', '0123456789');

  Test({LINENUM}15293, 'S ≔ "cats"', 'cats');
  Test({LINENUM}15294, 'S', 'cats');
  Test({LINENUM}15295, 'protect(S)', success);
  Test({LINENUM}15296, 'S[1] ≔ "C"', failure, 'Cannot modify or delete protected variable "S".');
  Test({LINENUM}15297, 'S', 'cats');
  Test({LINENUM}15298, 'unprotect(S)', success);
  Test({LINENUM}15299, 'S[1] ≔ "C"', 'C');
  Test({LINENUM}15300, 'S', 'Cats');
  Test({LINENUM}15301, 'protect(S)', success);
  Test({LINENUM}15302, 'S[-1] ≔ "!"', failure, 'Cannot modify or delete protected variable "S".');
  Test({LINENUM}15303, 'S', 'Cats');
  Test({LINENUM}15304, 'unprotect(S)', success);
  Test({LINENUM}15305, 'S[-1] ≔ "!"', '!');
  Test({LINENUM}15306, 'S', 'Cat!');
  Test({LINENUM}15307, 'delete(S)', success);

  Test({LINENUM}15309, 'S ≔ "Dogs are marvellous animals."', 'Dogs are marvellous animals.');
  Test({LINENUM}15310, 'S', 'Dogs are marvellous animals.');
  Test({LINENUM}15311, 'S[1] ≔ 5', failure, 'A character was expected, but an object of type "integer" given, when setting a character in a string.');
  Test({LINENUM}15312, 'S[2] ≔ 3.0', failure, 'A character was expected, but an object of type "real number" given, when setting a character in a string.');
  Test({LINENUM}15313, 'S[3] ≔ i', failure, 'A character was expected, but an object of type "complex number" given, when setting a character in a string.');
  Test({LINENUM}15314, 'S[4] ≔ true', failure, 'A character was expected, but an object of type "boolean" given, when setting a character in a string.');
  Test({LINENUM}15315, 'S[5] ≔ ZeroVector(4)', failure, 'A character was expected, but an object of type "real vector" given, when setting a character in a string.');
  Test({LINENUM}15316, 'S[6] ≔ IdentityMatrix(10)', failure, 'A character was expected, but an object of type "real matrix" given, when setting a character in a string.');
  Test({LINENUM}15317, 'S[7] ≔ "dog"', failure, 'A character was expected, but an object of type "string" given, when setting a character in a string.');
  Test({LINENUM}15318, 'S[8] ≔ "E"', 'E');
  Test({LINENUM}15319, 'S', 'Dogs arE marvellous animals.');
  Test({LINENUM}15320, 'delete(S)', success);

  // Strings in structs

  Test({LINENUM}15324, 'S ≔ struct("a": 42, "b": "dog")',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('dog')]
    )
  );

  Test({LINENUM}15331, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('dog')]
    )
  );

  Test({LINENUM}15338, 'S.b[1]', 'd');
  Test({LINENUM}15339, 'S.b[2]', 'o');
  Test({LINENUM}15340, 'S.b[3]', 'g');
  Test({LINENUM}15341, 'S.b[4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}15343, 'S.b[-1]', 'g');
  Test({LINENUM}15344, 'S.b[-2]', 'o');
  Test({LINENUM}15345, 'S.b[-3]', 'd');
  Test({LINENUM}15346, 'S.b[-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}15348, 'S.b[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15350, 'S.b[1] ≔ "D"', 'D');

  Test({LINENUM}15352, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('Dog')]
    )
  );

  Test({LINENUM}15359, 'S.b[2] ≔ "a"', 'a');

  Test({LINENUM}15361, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('Dag')]
    )
  );

  Test({LINENUM}15368, 'S.b[3] ≔ "l"', 'l');

  Test({LINENUM}15370, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('Dal')]
    )
  );

  Test({LINENUM}15377, 'S.b[4] ≔ "!"', failure, 'Index 4 out of bounds.');

  Test({LINENUM}15379, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('Dal')]
    )
  );

  Test({LINENUM}15386, 'S.b[-1] ≔ "m"', 'm');

  Test({LINENUM}15388, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('Dam')]
    )
  );

  Test({LINENUM}15395, 'S.b[-2] ≔ "u"', 'u');

  Test({LINENUM}15397, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('Dum')]
    )
  );

  Test({LINENUM}15404, 'S.b[-3] ≔ "r"', 'r');

  Test({LINENUM}15406, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('rum')]
    )
  );

  Test({LINENUM}15413, 'S.b[-4] ≔ "b"', failure, 'Index -4 out of bounds.');

  Test({LINENUM}15415, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('rum')]
    )
  );

  Test({LINENUM}15422, 'S.b[0] ≔ "b"', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15424, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('rum')]
    )
  );

  Test({LINENUM}15431, 'protect(S)', success);

  Test({LINENUM}15433, 'S.b[1] ≔ "R"', failure, 'Cannot modify or delete protected variable "S".');

  Test({LINENUM}15435, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('rum')]
    )
  );

  Test({LINENUM}15442, 'unprotect(S)', success);

  Test({LINENUM}15444, 'S.b[1] ≔ "R"', 'R');

  Test({LINENUM}15446, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASOInt(42), ASO('Rum')]
    )
  );

  Test({LINENUM}15453, 'delete(S)', success);

  // Strings in lists

  Test({LINENUM}15457, 'L ≔ ''(1, 2, "cat", ❨1, 0❩)',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASO('cat'), ASO(ASR2(1, 0))]
    )
  );

  Test({LINENUM}15463, 'L',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASO('cat'), ASO(ASR2(1, 0))]
    )
  );

  Test({LINENUM}15469, 'L[3][1] ≔ "C"', 'C');

  Test({LINENUM}15471, 'L',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASO('Cat'), ASO(ASR2(1, 0))]
    )
  );

  Test({LINENUM}15477, 'L[3][-1] ≔ "r"', 'r');

  Test({LINENUM}15479, 'L',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASO('Car'), ASO(ASR2(1, 0))]
    )
  );

  Test({LINENUM}15485, 'protect(L)', success);

  Test({LINENUM}15487, 'L[3][2] ≔ "o"', failure, 'Cannot modify or delete protected variable "L".');

  Test({LINENUM}15489, 'L',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASO('Car'), ASO(ASR2(1, 0))]
    )
  );

  Test({LINENUM}15495, 'unprotect(L)', success);

  Test({LINENUM}15497, 'L[3][2] ≔ "o"', 'o');

  Test({LINENUM}15499, 'L',
    TAlgosimArray.CreateWithValue(
      [ASOInt(1), ASOInt(2), ASO('Cor'), ASO(ASR2(1, 0))]
    )
  );

  Test({LINENUM}15505, 'delete(L)', success);

  // Real vectors

  Test({LINENUM}15509, 'v ≔ ❨4, 1, −2❩', ASO(ASR3(4, 1, -2)));
  Test({LINENUM}15510, 'v', ASO(ASR3(4, 1, -2)));

  Test({LINENUM}15512, 'v[1]', 4.0);
  Test({LINENUM}15513, 'v[2]', 1.0);
  Test({LINENUM}15514, 'v[3]', -2.0);
  Test({LINENUM}15515, 'v[4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}15517, 'v[-1]', -2.0);
  Test({LINENUM}15518, 'v[-2]', 1.0);
  Test({LINENUM}15519, 'v[-3]', 4.0);
  Test({LINENUM}15520, 'v[-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}15522, 'v[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15524, 'v', ASO(ASR3(4, 1, -2)));

  Test({LINENUM}15526, 'v[1] ≔ 10', 10);
  Test({LINENUM}15527, 'v', ASO(ASR3(10, 1, -2)));

  Test({LINENUM}15529, 'v[2] ≔ 20', 20);
  Test({LINENUM}15530, 'v', ASO(ASR3(10, 20, -2)));

  Test({LINENUM}15532, 'v[3] ≔ 30', 30);
  Test({LINENUM}15533, 'v', ASO(ASR3(10, 20, 30)));

  Test({LINENUM}15535, 'v[4] ≔ 40', failure, 'Index 4 out of bounds.');
  Test({LINENUM}15536, 'v', ASO(ASR3(10, 20, 30)));

  Test({LINENUM}15538, 'v[-1] ≔ 100', 100);
  Test({LINENUM}15539, 'v', ASO(ASR3(10, 20, 100)));

  Test({LINENUM}15541, 'v[3] ≔ 30', 30);
  Test({LINENUM}15542, 'v', ASO(ASR3(10, 20, 30)));

  Test({LINENUM}15544, 'protect(v)', success);
  Test({LINENUM}15545, 'v[3] ≔ 300', failure, 'Cannot modify or delete protected variable "v".');
  Test({LINENUM}15546, 'v', ASO(ASR3(10, 20, 30)));

  Test({LINENUM}15548, 'unprotect(v)', success);
  Test({LINENUM}15549, 'v[3] ≔ 300', 300);
  Test({LINENUM}15550, 'v', ASO(ASR3(10, 20, 300)));

  Test({LINENUM}15552, 'v[1] ≔ "horse"', failure, 'A real number was expected, but an object of type "string" given, when setting a component in a real vector.');
  Test({LINENUM}15553, 'v[2] ≔ true', failure, 'A real number was expected, but an object of type "boolean" given, when setting a component in a real vector.');
  Test({LINENUM}15554, 'v[3] ≔ ZeroVector(2)', failure, 'A real number was expected, but an object of type "real vector" given, when setting a component in a real vector.');
  Test({LINENUM}15555, 'v', ASO(ASR3(10, 20, 300)));

  Test({LINENUM}15557, 'v[1] ≔ i', failure, 'A real number was expected, but an object of type "complex number" given, when setting a component in a real vector.');
  Test({LINENUM}15558, 'v', ASO(ASR3(10, 20, 300)));

  Test({LINENUM}15560, 'v[3] ≔ 30.5', 30.5);
  Test({LINENUM}15561, 'v', ASO(ASR3(10, 20, 30.5)));

  Test({LINENUM}15563, 'v[3] ≔ 3/5', Rat(3, 5));
  Test({LINENUM}15564, 'v', ASO(ASR3(10, 20, 0.6)));

  // Complex vectors

  Test({LINENUM}15568, 'v ≔ ❨4, i, −2❩', ASO(ASC3(4, ImaginaryUnit, -2)));
  Test({LINENUM}15569, 'v', ASO(ASC3(4, ImaginaryUnit, -2)));

  Test({LINENUM}15571, 'v[1]', TASC(4.0));
  Test({LINENUM}15572, 'v[2]', ImaginaryUnit);
  Test({LINENUM}15573, 'v[3]', TASC(-2.0));
  Test({LINENUM}15574, 'v[4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}15576, 'v[-1]', TASC(-2.0));
  Test({LINENUM}15577, 'v[-2]', ImaginaryUnit);
  Test({LINENUM}15578, 'v[-3]', TASC(4.0));
  Test({LINENUM}15579, 'v[-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}15581, 'v[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15583, 'v', ASO(ASC3(4, ImaginaryUnit, -2)));

  Test({LINENUM}15585, 'v[1] ≔ 10', 10);
  Test({LINENUM}15586, 'v', ASO(ASC3(10, ImaginaryUnit, -2)));

  Test({LINENUM}15588, 'v[2] ≔ 20', 20);
  Test({LINENUM}15589, 'v', ASO(ASC3(10, 20, -2)));

  Test({LINENUM}15591, 'v[3] ≔ 30', 30);
  Test({LINENUM}15592, 'v', ASO(ASC3(10, 20, 30)));

  Test({LINENUM}15594, 'v[4] ≔ 40', failure, 'Index 4 out of bounds.');
  Test({LINENUM}15595, 'v', ASO(ASC3(10, 20, 30)));

  Test({LINENUM}15597, 'v[-1] ≔ 100', 100);
  Test({LINENUM}15598, 'v', ASO(ASC3(10, 20, 100)));

  Test({LINENUM}15600, 'v[3] ≔ 30', 30);
  Test({LINENUM}15601, 'v', ASO(ASC3(10, 20, 30)));

  Test({LINENUM}15603, 'protect(v)', success);
  Test({LINENUM}15604, 'v[3] ≔ 300', failure, 'Cannot modify or delete protected variable "v".');
  Test({LINENUM}15605, 'v', ASO(ASC3(10, 20, 30)));

  Test({LINENUM}15607, 'unprotect(v)', success);
  Test({LINENUM}15608, 'v[3] ≔ 300', 300);
  Test({LINENUM}15609, 'v', ASO(ASC3(10, 20, 300)));

  Test({LINENUM}15611, 'v[1] ≔ "horse"', failure, 'A real or complex number was expected, but an object of type "string" given, when setting a component in a complex vector.');
  Test({LINENUM}15612, 'v[2] ≔ true', failure, 'A real or complex number was expected, but an object of type "boolean" given, when setting a component in a complex vector.');
  Test({LINENUM}15613, 'v[3] ≔ ZeroVector(2)', failure, 'A real or complex number was expected, but an object of type "real vector" given, when setting a component in a complex vector.');
  Test({LINENUM}15614, 'v', ASO(ASC3(10, 20, 300)));
  Test({LINENUM}15615, 'v[1] ≔ i', ImaginaryUnit);
  Test({LINENUM}15616, 'v', ASO(ASC3(ImaginaryUnit, 20, 300)));

  Test({LINENUM}15618, 'v[3] ≔ 30.5', 30.5);
  Test({LINENUM}15619, 'v', ASO(ASC3(ImaginaryUnit, 20, 30.5)));

  Test({LINENUM}15621, 'v[3] ≔ 3/5', Rat(3, 5));
  Test({LINENUM}15622, 'v', ASO(ASC3(ImaginaryUnit, 20, 0.6)));

  Test({LINENUM}15624, 'v[3] ≔ 2+3⋅i', 2 + 3*ImaginaryUnit);
  Test({LINENUM}15625, 'v', ASO(ASC3(ImaginaryUnit, 20, 2 + 3*ImaginaryUnit)));

  // Real matrices

  Test({LINENUM}15629, 'A ≔ ❨❨10, 20, 30❩, ❨40, 50, 60❩❩', 3, [10, 20, 30, 40, 50, 60]);
  Test({LINENUM}15630, 'A', 3, [10, 20, 30, 40, 50, 60]);

  Test({LINENUM}15632, 'A[1]', 10.0);
  Test({LINENUM}15633, 'A[2]', 20.0);
  Test({LINENUM}15634, 'A[3]', 30.0);
  Test({LINENUM}15635, 'A[4]', 40.0);
  Test({LINENUM}15636, 'A[5]', 50.0);
  Test({LINENUM}15637, 'A[6]', 60.0);
  Test({LINENUM}15638, 'A[7]', failure, 'Index 7 out of bounds.');

  Test({LINENUM}15640, 'A[-1]', 60.0);
  Test({LINENUM}15641, 'A[-2]', 50.0);
  Test({LINENUM}15642, 'A[-3]', 40.0);
  Test({LINENUM}15643, 'A[-4]', 30.0);
  Test({LINENUM}15644, 'A[-5]', 20.0);
  Test({LINENUM}15645, 'A[-6]', 10.0);
  Test({LINENUM}15646, 'A[-7]', failure, 'Index -7 out of bounds.');

  Test({LINENUM}15648, 'A[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15650, 'A[1, 1]', 10.0);
  Test({LINENUM}15651, 'A[1, 2]', 20.0);
  Test({LINENUM}15652, 'A[1, 3]', 30.0);
  Test({LINENUM}15653, 'A[2, 1]', 40.0);
  Test({LINENUM}15654, 'A[2, 2]', 50.0);
  Test({LINENUM}15655, 'A[2, 3]', 60.0);

  Test({LINENUM}15657, 'A[1, -3]', 10.0);
  Test({LINENUM}15658, 'A[-2, -2]', 20.0);
  Test({LINENUM}15659, 'A[1, -1]', 30.0);
  Test({LINENUM}15660, 'A[-1, 1]', 40.0);
  Test({LINENUM}15661, 'A[-1, 2]', 50.0);
  Test({LINENUM}15662, 'A[-1, -1]', 60.0);

  Test({LINENUM}15664, 'A[1, 4]', failure, 'Index (1, 4) out of bounds.');
  Test({LINENUM}15665, 'A[1, 40]', failure, 'Index (1, 40) out of bounds.');
  Test({LINENUM}15666, 'A[1, 0]', failure, 'Index (1, 0) out of bounds.');
  Test({LINENUM}15667, 'A[1, -4]', failure, 'Index (1, -4) out of bounds.');
  Test({LINENUM}15668, 'A[1, -40]', failure, 'Index (1, -40) out of bounds.');
  Test({LINENUM}15669, 'A[-1, 4]', failure, 'Index (-1, 4) out of bounds.');
  Test({LINENUM}15670, 'A[0, 4]', failure, 'Index (0, 4) out of bounds.');
  Test({LINENUM}15671, 'A[0, 2]', failure, 'Index (0, 2) out of bounds.');
  Test({LINENUM}15672, 'A[-8, 1]', failure, 'Index (-8, 1) out of bounds.');
  Test({LINENUM}15673, 'A[-2, 0]', failure, 'Index (-2, 0) out of bounds.');
  Test({LINENUM}15674, 'A[0, 0]', failure, 'Index (0, 0) out of bounds.');

  Test({LINENUM}15676, 'A[''(1, 1)]', 10.0);
  Test({LINENUM}15677, 'A[''(1, 2)]', 20.0);
  Test({LINENUM}15678, 'A[''(1, 3)]', 30.0);
  Test({LINENUM}15679, 'A[''(2, 1)]', 40.0);
  Test({LINENUM}15680, 'A[''(2, 2)]', 50.0);
  Test({LINENUM}15681, 'A[''(2, 3)]', 60.0);

  Test({LINENUM}15683, 'A[''(1, -3)]', 10.0);
  Test({LINENUM}15684, 'A[''(-2, -2)]', 20.0);
  Test({LINENUM}15685, 'A[''(1, -1)]', 30.0);
  Test({LINENUM}15686, 'A[''(-1, 1)]', 40.0);
  Test({LINENUM}15687, 'A[''(-1, 2)]', 50.0);
  Test({LINENUM}15688, 'A[''(-1, -1)]', 60.0);

  Test({LINENUM}15690, 'A[''(1, 4)]', failure, 'Index (1, 4) out of bounds.');
  Test({LINENUM}15691, 'A[''(1, 40)]', failure, 'Index (1, 40) out of bounds.');
  Test({LINENUM}15692, 'A[''(1, 0)]', failure, 'Index (1, 0) out of bounds.');
  Test({LINENUM}15693, 'A[''(1, -4)]', failure, 'Index (1, -4) out of bounds.');
  Test({LINENUM}15694, 'A[''(1, -40)]', failure, 'Index (1, -40) out of bounds.');
  Test({LINENUM}15695, 'A[''(-1, 4)]', failure, 'Index (-1, 4) out of bounds.');
  Test({LINENUM}15696, 'A[''(0, 4)]', failure, 'Index (0, 4) out of bounds.');
  Test({LINENUM}15697, 'A[''(0, 2)]', failure, 'Index (0, 2) out of bounds.');
  Test({LINENUM}15698, 'A[''(-8, 1)]', failure, 'Index (-8, 1) out of bounds.');
  Test({LINENUM}15699, 'A[''(-2, 0)]', failure, 'Index (-2, 0) out of bounds.');
  Test({LINENUM}15700, 'A[''(0, 0)]', failure, 'Index (0, 0) out of bounds.');

  Test({LINENUM}15702, 'A[1] ≔ 100', 100);
  Test({LINENUM}15703, 'A', 3, [100, 20, 30, 40, 50, 60]);
  Test({LINENUM}15704, 'A[1, 3] ≔ 300', 300);
  Test({LINENUM}15705, 'A', 3, [100, 20, 300, 40, 50, 60]);
  Test({LINENUM}15706, 'A[−1, −1] ≔ 600', 600);
  Test({LINENUM}15707, 'A', 3, [100, 20, 300, 40, 50, 600]);
  Test({LINENUM}15708, 'A[−2] ≔ 500', 500);
  Test({LINENUM}15709, 'A', 3, [100, 20, 300, 40, 500, 600]);
  Test({LINENUM}15710, 'A[−1, 1] ≔ 400', 400);
  Test({LINENUM}15711, 'A', 3, [100, 20, 300, 400, 500, 600]);
  Test({LINENUM}15712, 'A[1, −2] ≔ 200', 200);
  Test({LINENUM}15713, 'A', 3, [100, 200, 300, 400, 500, 600]);

  Test({LINENUM}15715, 'A[''(-1, 1)] ≔ 7', 7);
  Test({LINENUM}15716, 'A', 3, [100, 200, 300, 7, 500, 600]);
  Test({LINENUM}15717, 'A[''(-1, 2)] ≔ 8', 8);
  Test({LINENUM}15718, 'A', 3, [100, 200, 300, 7, 8, 600]);
  Test({LINENUM}15719, 'A[''(-1, 3)] ≔ 9', 9);
  Test({LINENUM}15720, 'A', 3, [100, 200, 300, 7, 8, 9]);
  Test({LINENUM}15721, 'A[''(1, 1)] ≔ 1', 1);
  Test({LINENUM}15722, 'A', 3, [1, 200, 300, 7, 8, 9]);
  Test({LINENUM}15723, 'A[''(1, 2)] ≔ 2', 2);
  Test({LINENUM}15724, 'A', 3, [1, 2, 300, 7, 8, 9]);
  Test({LINENUM}15725, 'A[''(1, -1)] ≔ 3', 3);
  Test({LINENUM}15726, 'A', 3, [1, 2, 3, 7, 8, 9]);

  Test({LINENUM}15728, 'A[8] ≔ 14', failure, 'Index 8 out of bounds.');
  Test({LINENUM}15729, 'A[-8] ≔ -4', failure, 'Index -8 out of bounds.');
  Test({LINENUM}15730, 'A[1, 4] ≔ 4', failure, 'Index (1, 4) out of bounds.');
  Test({LINENUM}15731, 'A[1, -4] ≔ 4', failure, 'Index (1, -4) out of bounds.');
  Test({LINENUM}15732, 'A[0, 1] ≔ 4', failure, 'Index (0, 1) out of bounds.');
  Test({LINENUM}15733, 'A[''(3, 1)] ≔ 4', failure, 'Index (3, 1) out of bounds.');
  Test({LINENUM}15734, 'A[''(-4, 2)] ≔ 4', failure, 'Index (-4, 2) out of bounds.');
  Test({LINENUM}15735, 'A[0, 0] ≔ 4', failure, 'Index (0, 0) out of bounds.');

  Test({LINENUM}15737, 'A[1] ≔ i', failure, 'A real number was expected, but an object of type "complex number" given, when setting an entry in a real matrix.');
  Test({LINENUM}15738, 'A[2] ≔ "cat"', failure, 'A real number was expected, but an object of type "string" given, when setting an entry in a real matrix.');
  Test({LINENUM}15739, 'A[1, 3] ≔ true', failure, 'A real number was expected, but an object of type "boolean" given, when setting an entry in a real matrix.');
  Test({LINENUM}15740, 'A[-1] ≔ color("red")', failure, 'A real number was expected, but an object of type "color" given, when setting an entry in a real matrix.');
  Test({LINENUM}15741, 'A[-1, -1] ≔ i', failure, 'A real number was expected, but an object of type "complex number" given, when setting an entry in a real matrix.');
  Test({LINENUM}15742, 'A[''(1, -1)] ≔ i', failure, 'A real number was expected, but an object of type "complex number" given, when setting an entry in a real matrix.');

  Test({LINENUM}15744, 'A', 3, [1, 2, 3, 7, 8, 9]);
  Test({LINENUM}15745, 'protect(A)', success);
  Test({LINENUM}15746, 'A[1, 1] ≔ 10', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}15747, 'A', 3, [1, 2, 3, 7, 8, 9]);
  Test({LINENUM}15748, 'unprotect(A)', success);
  Test({LINENUM}15749, 'A[1, 1] ≔ 10', 10);
  Test({LINENUM}15750, 'A', 3, [10, 2, 3, 7, 8, 9]);

  Test({LINENUM}15752, 'protect(A)', success);
  Test({LINENUM}15753, 'A[-1, 1] ≔ 70', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}15754, 'A', 3, [10, 2, 3, 7, 8, 9]);
  Test({LINENUM}15755, 'unprotect(A)', success);
  Test({LINENUM}15756, 'A[-1, 1] ≔ 70', 70);
  Test({LINENUM}15757, 'A', 3, [10, 2, 3, 70, 8, 9]);

  Test({LINENUM}15759, 'protect(A)', success);
  Test({LINENUM}15760, 'A[2] ≔ 20', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}15761, 'A', 3, [10, 2, 3, 70, 8, 9]);
  Test({LINENUM}15762, 'unprotect(A)', success);
  Test({LINENUM}15763, 'A[2] ≔ 20', 20);
  Test({LINENUM}15764, 'A', 3, [10, 20, 3, 70, 8, 9]);

  Test({LINENUM}15766, 'protect(A)', success);
  Test({LINENUM}15767, 'A[-1] ≔ 90', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}15768, 'A', 3, [10, 20, 3, 70, 8, 9]);
  Test({LINENUM}15769, 'unprotect(A)', success);
  Test({LINENUM}15770, 'A[-1] ≔ 90', 90);
  Test({LINENUM}15771, 'A', 3, [10, 20, 3, 70, 8, 90]);

  Test({LINENUM}15773, 'delete(A)', success);
  Test({LINENUM}15774, 'A[1, -40]', failure, 'Unknown identifier "A".');

  // Complex matrices

  Test({LINENUM}15778, 'A ≔ ❨❨i, 20, 30❩, ❨40, 50, 60❩❩', 3, [ImaginaryUnit, 20, 30, 40, 50, 60]);
  Test({LINENUM}15779, 'A', 3, [ImaginaryUnit, 20, 30, 40, 50, 60]);

  Test({LINENUM}15781, 'A[1]', ImaginaryUnit);
  Test({LINENUM}15782, 'A[2]', TASC(20.0));
  Test({LINENUM}15783, 'A[3]', TASC(30.0));
  Test({LINENUM}15784, 'A[4]', TASC(40.0));
  Test({LINENUM}15785, 'A[5]', TASC(50.0));
  Test({LINENUM}15786, 'A[6]', TASC(60.0));
  Test({LINENUM}15787, 'A[7]', failure, 'Index 7 out of bounds.');

  Test({LINENUM}15789, 'A[-1]', TASC(60.0));
  Test({LINENUM}15790, 'A[-2]', TASC(50.0));
  Test({LINENUM}15791, 'A[-3]', TASC(40.0));
  Test({LINENUM}15792, 'A[-4]', TASC(30.0));
  Test({LINENUM}15793, 'A[-5]', TASC(20.0));
  Test({LINENUM}15794, 'A[-6]', ImaginaryUnit);
  Test({LINENUM}15795, 'A[-7]', failure, 'Index -7 out of bounds.');

  Test({LINENUM}15797, 'A[0]', failure, 'Index 0 out of bounds.');

  Test({LINENUM}15799, 'A[1, 1]', ImaginaryUnit);
  Test({LINENUM}15800, 'A[1, 2]', TASC(20.0));
  Test({LINENUM}15801, 'A[1, 3]', TASC(30.0));
  Test({LINENUM}15802, 'A[2, 1]', TASC(40.0));
  Test({LINENUM}15803, 'A[2, 2]', TASC(50.0));
  Test({LINENUM}15804, 'A[2, 3]', TASC(60.0));

  Test({LINENUM}15806, 'A[1, -3]', ImaginaryUnit);
  Test({LINENUM}15807, 'A[-2, -2]', TASC(20.0));
  Test({LINENUM}15808, 'A[1, -1]', TASC(30.0));
  Test({LINENUM}15809, 'A[-1, 1]', TASC(40.0));
  Test({LINENUM}15810, 'A[-1, 2]', TASC(50.0));
  Test({LINENUM}15811, 'A[-1, -1]', TASC(60.0));

  Test({LINENUM}15813, 'A[1, 4]', failure, 'Index (1, 4) out of bounds.');
  Test({LINENUM}15814, 'A[1, 40]', failure, 'Index (1, 40) out of bounds.');
  Test({LINENUM}15815, 'A[1, 0]', failure, 'Index (1, 0) out of bounds.');
  Test({LINENUM}15816, 'A[1, -4]', failure, 'Index (1, -4) out of bounds.');
  Test({LINENUM}15817, 'A[1, -40]', failure, 'Index (1, -40) out of bounds.');
  Test({LINENUM}15818, 'A[-1, 4]', failure, 'Index (-1, 4) out of bounds.');
  Test({LINENUM}15819, 'A[0, 4]', failure, 'Index (0, 4) out of bounds.');
  Test({LINENUM}15820, 'A[0, 2]', failure, 'Index (0, 2) out of bounds.');
  Test({LINENUM}15821, 'A[-8, 1]', failure, 'Index (-8, 1) out of bounds.');
  Test({LINENUM}15822, 'A[-2, 0]', failure, 'Index (-2, 0) out of bounds.');
  Test({LINENUM}15823, 'A[0, 0]', failure, 'Index (0, 0) out of bounds.');

  Test({LINENUM}15825, 'A[''(1, 1)]', ImaginaryUnit);
  Test({LINENUM}15826, 'A[''(1, 2)]', TASC(20.0));
  Test({LINENUM}15827, 'A[''(1, 3)]', TASC(30.0));
  Test({LINENUM}15828, 'A[''(2, 1)]', TASC(40.0));
  Test({LINENUM}15829, 'A[''(2, 2)]', TASC(50.0));
  Test({LINENUM}15830, 'A[''(2, 3)]', TASC(60.0));

  Test({LINENUM}15832, 'A[''(1, -3)]', ImaginaryUnit);
  Test({LINENUM}15833, 'A[''(-2, -2)]', TASC(20.0));
  Test({LINENUM}15834, 'A[''(1, -1)]', TASC(30.0));
  Test({LINENUM}15835, 'A[''(-1, 1)]', TASC(40.0));
  Test({LINENUM}15836, 'A[''(-1, 2)]', TASC(50.0));
  Test({LINENUM}15837, 'A[''(-1, -1)]', TASC(60.0));

  Test({LINENUM}15839, 'A[''(1, 4)]', failure, 'Index (1, 4) out of bounds.');
  Test({LINENUM}15840, 'A[''(1, 40)]', failure, 'Index (1, 40) out of bounds.');
  Test({LINENUM}15841, 'A[''(1, 0)]', failure, 'Index (1, 0) out of bounds.');
  Test({LINENUM}15842, 'A[''(1, -4)]', failure, 'Index (1, -4) out of bounds.');
  Test({LINENUM}15843, 'A[''(1, -40)]', failure, 'Index (1, -40) out of bounds.');
  Test({LINENUM}15844, 'A[''(-1, 4)]', failure, 'Index (-1, 4) out of bounds.');
  Test({LINENUM}15845, 'A[''(0, 4)]', failure, 'Index (0, 4) out of bounds.');
  Test({LINENUM}15846, 'A[''(0, 2)]', failure, 'Index (0, 2) out of bounds.');
  Test({LINENUM}15847, 'A[''(-8, 1)]', failure, 'Index (-8, 1) out of bounds.');
  Test({LINENUM}15848, 'A[''(-2, 0)]', failure, 'Index (-2, 0) out of bounds.');
  Test({LINENUM}15849, 'A[''(0, 0)]', failure, 'Index (0, 0) out of bounds.');

  Test({LINENUM}15851, 'A[1] ≔ 100', 100);
  Test({LINENUM}15852, 'A', 3, [100+0*ImaginaryUnit, 20, 30, 40, 50, 60]);
  Test({LINENUM}15853, 'A[1, 3] ≔ 300', 300);
  Test({LINENUM}15854, 'A', 3, [100+0*ImaginaryUnit, 20, 300, 40, 50, 60]);
  Test({LINENUM}15855, 'A[−1, −1] ≔ 600', 600);
  Test({LINENUM}15856, 'A', 3, [100+0*ImaginaryUnit, 20, 300, 40, 50, 600]);
  Test({LINENUM}15857, 'A[−2] ≔ 500', 500);
  Test({LINENUM}15858, 'A', 3, [100+0*ImaginaryUnit, 20, 300, 40, 500, 600]);
  Test({LINENUM}15859, 'A[−1, 1] ≔ 400', 400);
  Test({LINENUM}15860, 'A', 3, [100+0*ImaginaryUnit, 20, 300, 400, 500, 600]);
  Test({LINENUM}15861, 'A[1, −2] ≔ 200', 200);
  Test({LINENUM}15862, 'A', 3, [100+0*ImaginaryUnit, 200, 300, 400, 500, 600]);

  Test({LINENUM}15864, 'A[''(-1, 1)] ≔ 7', 7);
  Test({LINENUM}15865, 'A', 3, [100+0*ImaginaryUnit, 200, 300, 7, 500, 600]);
  Test({LINENUM}15866, 'A[''(-1, 2)] ≔ 8', 8);
  Test({LINENUM}15867, 'A', 3, [100+0*ImaginaryUnit, 200, 300, 7, 8, 600]);
  Test({LINENUM}15868, 'A[''(-1, 3)] ≔ 9', 9);
  Test({LINENUM}15869, 'A', 3, [100+0*ImaginaryUnit, 200, 300, 7, 8, 9]);
  Test({LINENUM}15870, 'A[''(1, 1)] ≔ 1', 1);
  Test({LINENUM}15871, 'A', 3, [1+0*ImaginaryUnit, 200, 300, 7, 8, 9]);
  Test({LINENUM}15872, 'A[''(1, 2)] ≔ 2', 2);
  Test({LINENUM}15873, 'A', 3, [1+0*ImaginaryUnit, 2, 300, 7, 8, 9]);
  Test({LINENUM}15874, 'A[''(1, -1)] ≔ 3', 3);
  Test({LINENUM}15875, 'A', 3, [1+0*ImaginaryUnit, 2, 3, 7, 8, 9]);

  Test({LINENUM}15877, 'A[8] ≔ 14', failure, 'Index 8 out of bounds.');
  Test({LINENUM}15878, 'A[-8] ≔ -4', failure, 'Index -8 out of bounds.');
  Test({LINENUM}15879, 'A[1, 4] ≔ 4', failure, 'Index (1, 4) out of bounds.');
  Test({LINENUM}15880, 'A[1, -4] ≔ 4', failure, 'Index (1, -4) out of bounds.');
  Test({LINENUM}15881, 'A[0, 1] ≔ 4', failure, 'Index (0, 1) out of bounds.');
  Test({LINENUM}15882, 'A[''(3, 1)] ≔ 4', failure, 'Index (3, 1) out of bounds.');
  Test({LINENUM}15883, 'A[''(-4, 2)] ≔ 4', failure, 'Index (-4, 2) out of bounds.');
  Test({LINENUM}15884, 'A[0, 0] ≔ 4', failure, 'Index (0, 0) out of bounds.');

  Test({LINENUM}15886, 'A[1] ≔ i', ImaginaryUnit);
  Test({LINENUM}15887, 'A', 3, [ImaginaryUnit, 2, 3, 7, 8, 9]);
  Test({LINENUM}15888, 'A[2] ≔ "cat"', failure, 'A real or complex number was expected, but an object of type "string" given, when setting an entry in a complex matrix.');
  Test({LINENUM}15889, 'A[1, 3] ≔ true', failure, 'A real or complex number was expected, but an object of type "boolean" given, when setting an entry in a complex matrix.');
  Test({LINENUM}15890, 'A[-1] ≔ color("red")', failure, 'A real or complex number was expected, but an object of type "color" given, when setting an entry in a complex matrix.');
  Test({LINENUM}15891, 'A[-1, -1] ≔ "cat"', failure, 'A real or complex number was expected, but an object of type "string" given, when setting an entry in a complex matrix.');
  Test({LINENUM}15892, 'A[''(1, -1)] ≔ "cat"', failure, 'A real or complex number was expected, but an object of type "string" given, when setting an entry in a complex matrix.');

  Test({LINENUM}15894, 'A', 3, [ImaginaryUnit, 2, 3, 7, 8, 9]);
  Test({LINENUM}15895, 'protect(A)', success);
  Test({LINENUM}15896, 'A[1, 1] ≔ 10', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}15897, 'A', 3, [ImaginaryUnit, 2, 3, 7, 8, 9]);
  Test({LINENUM}15898, 'unprotect(A)', success);
  Test({LINENUM}15899, 'A[1, 1] ≔ 10', 10);
  Test({LINENUM}15900, 'A', 3, [10+0*ImaginaryUnit, 2, 3, 7, 8, 9]);

  Test({LINENUM}15902, 'protect(A)', success);
  Test({LINENUM}15903, 'A[-1, 1] ≔ 70', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}15904, 'A', 3, [10+0*ImaginaryUnit, 2, 3, 7, 8, 9]);
  Test({LINENUM}15905, 'unprotect(A)', success);
  Test({LINENUM}15906, 'A[-1, 1] ≔ 70', 70);
  Test({LINENUM}15907, 'A', 3, [10+0*ImaginaryUnit, 2, 3, 70, 8, 9]);

  Test({LINENUM}15909, 'protect(A)', success);
  Test({LINENUM}15910, 'A[2] ≔ 20', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}15911, 'A', 3, [10+0*ImaginaryUnit, 2, 3, 70, 8, 9]);
  Test({LINENUM}15912, 'unprotect(A)', success);
  Test({LINENUM}15913, 'A[2] ≔ 20', 20);
  Test({LINENUM}15914, 'A', 3, [10+0*ImaginaryUnit, 20, 3, 70, 8, 9]);

  Test({LINENUM}15916, 'protect(A)', success);
  Test({LINENUM}15917, 'A[-1] ≔ 90⋅i', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}15918, 'A', 3, [10+0*ImaginaryUnit, 20, 3, 70, 8, 9]);
  Test({LINENUM}15919, 'unprotect(A)', success);
  Test({LINENUM}15920, 'A[-1] ≔ 90⋅i', 90*ImaginaryUnit);
  Test({LINENUM}15921, 'A', 3, [10+0*ImaginaryUnit, 20, 3, 70, 8, 90*ImaginaryUnit]);

  Test({LINENUM}15923, 'delete(A)', success);
  Test({LINENUM}15924, 'A[1, -40]', failure, 'Unknown identifier "A".');

  // Vectors and matrices in structures and lists

  Test({LINENUM}15928, 'S ≔ struct("a": ❨1, 2, 3❩, "b": ❨10, 20, 30❩)',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASO(ASR3(1, 2, 3)), ASO(ASR3(10, 20, 30))]
    )
  );

  Test({LINENUM}15935, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASO(ASR3(1, 2, 3)), ASO(ASR3(10, 20, 30))]
    )
  );

  Test({LINENUM}15942, 'S.a', [1, 2, 3]);
  Test({LINENUM}15943, 'S.b', [10, 20, 30]);

  Test({LINENUM}15945, 'S.a[1]', 1.0);
  Test({LINENUM}15946, 'S.a[2]', 2.0);
  Test({LINENUM}15947, 'S.a[3]', 3.0);
  Test({LINENUM}15948, 'S.a[4]', failure, 'Index 4 out of bounds.');

  Test({LINENUM}15950, 'S.b[1]', 10.0);
  Test({LINENUM}15951, 'S.b[2]', 20.0);
  Test({LINENUM}15952, 'S.b[3]', 30.0);

  Test({LINENUM}15954, 'S.b[-1]', 30.0);
  Test({LINENUM}15955, 'S.b[-2]', 20.0);
  Test({LINENUM}15956, 'S.b[-3]', 10.0);
  Test({LINENUM}15957, 'S.b[-4]', failure, 'Index -4 out of bounds.');

  Test({LINENUM}15959, 'S.a[1] ≔ 100', 100);
  Test({LINENUM}15960, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASO(ASR3(100, 2, 3)), ASO(ASR3(10, 20, 30))]
    )
  );

  Test({LINENUM}15967, 'S.a[−1] ≔ 300', 300);
  Test({LINENUM}15968, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASO(ASR3(100, 2, 300)), ASO(ASR3(10, 20, 30))]
    )
  );

  Test({LINENUM}15975, 'protect(S)', success);
  Test({LINENUM}15976, 'S.a[2] ≔ 200', failure, 'Cannot modify or delete protected variable "S".');
  Test({LINENUM}15977, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASO(ASR3(100, 2, 300)), ASO(ASR3(10, 20, 30))]
    )
  );

  Test({LINENUM}15984, 'protect(S)', success); // idempotency
  Test({LINENUM}15985, 'S.a[2] ≔ 200', failure, 'Cannot modify or delete protected variable "S".');
  Test({LINENUM}15986, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASO(ASR3(100, 2, 300)), ASO(ASR3(10, 20, 30))]
    )
  );

  Test({LINENUM}15993, 'unprotect(S)', success);
  Test({LINENUM}15994, 'S.a[2] ≔ 200', 200);
  Test({LINENUM}15995, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASO(ASR3(100, 200, 300)), ASO(ASR3(10, 20, 30))]
    )
  );

  Test({LINENUM}16002, 'S.a ≔ ❨1, 0❩', ASO(ASR2(1, 0)));
  Test({LINENUM}16003, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASO(ASR2(1, 0)), ASO(ASR3(10, 20, 30))]
    )
  );

  Test({LINENUM}16010, 'protect(S)', success);
  Test({LINENUM}16011, 'S.b ≔ ❨0, 1❩', failure, 'Cannot modify or delete protected variable "S".');
  Test({LINENUM}16012, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASO(ASR2(1, 0)), ASO(ASR3(10, 20, 30))]
    )
  );

  Test({LINENUM}16019, 'unprotect(S)', success);
  Test({LINENUM}16020, 'S.b ≔ ❨0, 1❩', ASO(ASR2(0, 1)));
  Test({LINENUM}16021, 'S',
    TAlgosimStructure.CreateWithValue(
      ['a', 'b'],
      [ASO(ASR2(1, 0)), ASO(ASR2(0, 1))]
    )
  );

  Test({LINENUM}16028, 'delete(S)', success);
  Test({LINENUM}16029, 'S.b ≔ ❨1, 1❩', failure, 'Unknown identifier "S".');

  Test({LINENUM}16031, 'L ≔ ''(IdentityMatrix(2), 2⋅IdentityMatrix(2))',
    TAlgosimArray.CreateWithValue(
      [
        ASO(IdentityMatrix(2)),
        ASO(2*IdentityMatrix(2))
      ]
    )
  );

  Test({LINENUM}16040, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(IdentityMatrix(2)),
        ASO(2*IdentityMatrix(2))
      ]
    )
  );

  Test({LINENUM}16049, 'L[1]', 2, [1, 0, 0, 1]);
  Test({LINENUM}16050, 'L[2]', 2, [2, 0, 0, 2]);

  Test({LINENUM}16052, 'L[1][1]', 1.0);
  Test({LINENUM}16053, 'L[1][2]', 0.0);
  Test({LINENUM}16054, 'L[1][3]', 0.0);
  Test({LINENUM}16055, 'L[1][4]', 1.0);
  Test({LINENUM}16056, 'L[1][5]', failure, 'Index 5 out of bounds.');

  Test({LINENUM}16058, 'L[2][-1]', 2.0);
  Test({LINENUM}16059, 'L[2][-2]', 0.0);
  Test({LINENUM}16060, 'L[2][-3]', 0.0);
  Test({LINENUM}16061, 'L[2][-4]', 2.0);
  Test({LINENUM}16062, 'L[2][-5]', failure, 'Index -5 out of bounds.');

  Test({LINENUM}16064, 'L[2][1, 1]', 2.0);
  Test({LINENUM}16065, 'L[2][1, 2]', 0.0);
  Test({LINENUM}16066, 'L[2][2, 1]', 0.0);
  Test({LINENUM}16067, 'L[2][2, 2]', 2.0);
  Test({LINENUM}16068, 'L[2][2, 3]', failure, 'Index (2, 3) out of bounds.');

  Test({LINENUM}16070, 'L[1][-1, -1]', 1.0);

  Test({LINENUM}16072, 'L[1][1] ≔ 10', 10);
  Test({LINENUM}16073, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 1], 2)),
        ASO(TRealMatrix.Create([2, 0, 0, 2], 2))
      ]
    )
  );

  Test({LINENUM}16082, 'L[1][-1] ≔ 100', 100);
  Test({LINENUM}16083, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 100], 2)),
        ASO(TRealMatrix.Create([2, 0, 0, 2], 2))
      ]
    )
  );

  Test({LINENUM}16092, 'L[2][1, 2] ≔ 3', 3);
  Test({LINENUM}16093, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 100], 2)),
        ASO(TRealMatrix.Create([2, 3, 0, 2], 2))
      ]
    )
  );

  Test({LINENUM}16102, 'L[2][-1, 2] ≔ 4', 4);
  Test({LINENUM}16103, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 100], 2)),
        ASO(TRealMatrix.Create([2, 3, 0, 4], 2))
      ]
    )
  );

  Test({LINENUM}16112, 'L[2][-1, -2] ≔ 5', 5);
  Test({LINENUM}16113, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 100], 2)),
        ASO(TRealMatrix.Create([2, 3, 5, 4], 2))
      ]
    )
  );

  Test({LINENUM}16122, 'L[2][1, 2] ≔ 50', 50);
  Test({LINENUM}16123, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 100], 2)),
        ASO(TRealMatrix.Create([2, 50, 5, 4], 2))
      ]
    )
  );

  Test({LINENUM}16132, 'L[2][1, 3] ≔ 50', failure, 'Index (1, 3) out of bounds.');
  Test({LINENUM}16133, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 100], 2)),
        ASO(TRealMatrix.Create([2, 50, 5, 4], 2))
      ]
    )
  );

  Test({LINENUM}16142, 'L[2][-1, -3] ≔ 50', failure, 'Index (-1, -3) out of bounds.');
  Test({LINENUM}16143, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 100], 2)),
        ASO(TRealMatrix.Create([2, 50, 5, 4], 2))
      ]
    )
  );

  Test({LINENUM}16152, 'protect(L)', success);
  Test({LINENUM}16153, 'L[2][1, 2] ≔ 3', failure, 'Cannot modify or delete protected variable "L".');
  Test({LINENUM}16154, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 100], 2)),
        ASO(TRealMatrix.Create([2, 50, 5, 4], 2))
      ]
    )
  );

  Test({LINENUM}16163, 'unprotect(L)', success);
  Test({LINENUM}16164, 'L[2][1, 2] ≔ 3', 3);
  Test({LINENUM}16165, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 100], 2)),
        ASO(TRealMatrix.Create([2, 3, 5, 4], 2))
      ]
    )
  );

  Test({LINENUM}16174, 'unprotect(L)', success); // idempotency
  Test({LINENUM}16175, 'L[2][''(1, 2)] ≔ 3.1', 3.1);
  Test({LINENUM}16176, 'L',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TRealMatrix.Create([10, 0, 0, 100], 2)),
        ASO(TRealMatrix.Create([2, 3.1, 5, 4], 2))
      ]
    )
  );

  Test({LINENUM}16185, 'delete(L)', success);
  Test({LINENUM}16186, 'L[2][1, 2] ≔ 50', failure, 'Unknown identifier "L".');





  //
  //
  //  CHAPTER 4
  //  Basic mathematical functions.
  //
  //

  Chapter('Basic mathematical functions');

  //
  // Elementary functions of a real variable
  //

  // Trigonometric functions

  Eps; Test({LINENUM}16207, 'sin(0)', 0.0);
  Eps; Test({LINENUM}16208, 'sin(π/2)', 1.0);
  Eps; Test({LINENUM}16209, 'sin(π)', 0.0);
  Eps; Test({LINENUM}16210, 'sin(-π/2)', -1.0);
  Eps; Test({LINENUM}16211, 'sin(π/4)', 0.707106781186547524400844362104849039284835937688474036588);
  Eps; Test({LINENUM}16212, 'sin(π/3)', 0.866025403784438646763723170752936183471402626905190314027);
  Eps; Test({LINENUM}16213, 'sin(π/6)', 1/2);

  Eps; Test({LINENUM}16215, 'sin(1)', 0.841470984807896506652502321630298999622563060798371065672);
  Eps; Test({LINENUM}16216, 'sin(123)', -0.459903490689591251292435715293231810808580607381042);
  Eps; Test({LINENUM}16217, 'sin(0.001)', 0.0009999998333333416666664682539710097001513147348086);
  Eps; Test({LINENUM}16218, 'sin(-1)', -0.841470984807896506652502321630298999622563060798371065672);
  Eps; Test({LINENUM}16219, 'sin(-123)', 0.459903490689591251292435715293231810808580607381042);
  Eps; Test({LINENUM}16220, 'sin(-0.001)', -0.0009999998333333416666664682539710097001513147348086);

  Eps(1E-12); Test({LINENUM}16222, 'sin(123456)', -0.74028345388665753672466063491709017804265556263134076537);
  Eps(1E-12); Test({LINENUM}16223, 'sin(-123456)', 0.74028345388665753672466063491709017804265556263134076537);

  Test({LINENUM}16225, 'sin(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16227, 'cos(0)', 1.0);
  Eps; Test({LINENUM}16228, 'cos(π/2)', 0.0);
  Eps; Test({LINENUM}16229, 'cos(π)', -1.0);
  Eps; Test({LINENUM}16230, 'cos(-π/2)', 0.0);
  Eps; Test({LINENUM}16231, 'cos(π/4)', 0.707106781186547524400844362104849039284835937688474036588);
  Eps; Test({LINENUM}16232, 'cos(π/3)', 1/2);
  Eps; Test({LINENUM}16233, 'cos(π/6)', 0.866025403784438646763723170752936183471402626905190314027);

  Eps; Test({LINENUM}16235, 'cos(1)', 0.540302305868139717400936607442976603732310420617922227670);
  Eps; Test({LINENUM}16236, 'cos(123)', -0.887968906691855428978322569442621150811865560981614);
  Eps; Test({LINENUM}16237, 'cos(0.001)', 0.9999995000000416666652777778025793648037918892128961);
  Eps; Test({LINENUM}16238, 'cos(-1)', 0.540302305868139717400936607442976603732310420617922227670);
  Eps; Test({LINENUM}16239, 'cos(-123)', -0.887968906691855428978322569442621150811865560981614);
  Eps; Test({LINENUM}16240, 'cos(-0.001)', 0.9999995000000416666652777778025793648037918892128961);

  Eps(1E-12); Test({LINENUM}16242, 'cos(123456)', -0.67229488165658451960808772768357726667866595466767514385);
  Eps(1E-12); Test({LINENUM}16243, 'cos(-123456)', -0.67229488165658451960808772768357726667866595466767514385);

  Test({LINENUM}16245, 'cos(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16247, 'tan(0)', 0.0);
  Eps; Test({LINENUM}16248, 'tan(π)', 0.0);
  Eps; Test({LINENUM}16249, 'tan(π/4)', 1.0);
  Eps; Test({LINENUM}16250, 'tan(π/3)', 1.732050807568877293527446341505872366942805253810380628055);
  Eps; Test({LINENUM}16251, 'tan(π/6)', 1/1.732050807568877293527446341505872366942805253810380628055);

  Eps; Test({LINENUM}16253, 'tan(1)', 1.557407724654902230506974807458360173087250772381520038383);
  Eps; Test({LINENUM}16254, 'tan(123)', 0.5179274715856551831319240756392856882012784222828477);
  Eps; Test({LINENUM}16255, 'tan(0.001)', 0.0010000003333334666667206349425044180343149597741933);
  Eps; Test({LINENUM}16256, 'tan(-1)', -1.557407724654902230506974807458360173087250772381520038383);
  Eps; Test({LINENUM}16257, 'tan(-123)', -0.5179274715856551831319240756392856882012784222828477);
  Eps; Test({LINENUM}16258, 'tan(-0.001)', -0.0010000003333334666667206349425044180343149597741933);

  Eps(1E-12); Test({LINENUM}16260, 'tan(123456)', 1.1011290939216198190353988040045654938483143691480705);
  Eps(1E-12); Test({LINENUM}16261, 'tan(-123456)', -1.1011290939216198190353988040045654938483143691480705);

  Test({LINENUM}16263, 'tan(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16265, 'cot(π/2)', 0.0);
  Eps; Test({LINENUM}16266, 'cot(-π/2)', 0.0);
  Eps; Test({LINENUM}16267, 'cot(π/4)', 1.0);
  Eps; Test({LINENUM}16268, 'cot(π/3)', 1/1.732050807568877293527446341505872366942805253810380628055);
  Eps; Test({LINENUM}16269, 'cot(π/6)', 1.732050807568877293527446341505872366942805253810380628055);

  Eps; Test({LINENUM}16271, 'cot(1)', 1/1.557407724654902230506974807458360173087250772381520038383);
  Eps; Test({LINENUM}16272, 'cot(123)', 1/0.5179274715856551831319240756392856882012784222828477);
  Eps; Test({LINENUM}16273, 'cot(0.001)', 1/0.0010000003333334666667206349425044180343149597741933);
  Eps; Test({LINENUM}16274, 'cot(-1)', -1/1.557407724654902230506974807458360173087250772381520038383);
  Eps; Test({LINENUM}16275, 'cot(-123)', -1/0.5179274715856551831319240756392856882012784222828477);
  Eps; Test({LINENUM}16276, 'cot(-0.001)', -1/0.0010000003333334666667206349425044180343149597741933);

  Eps(1E-12); Test({LINENUM}16278, 'cot(123456)', 1/1.1011290939216198190353988040045654938483143691480705);
  Eps(1E-12); Test({LINENUM}16279, 'cot(-123456)', -1/1.1011290939216198190353988040045654938483143691480705);

  Test({LINENUM}16281, 'cot(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16283, 'sec(0)', 1.0);
  Eps; Test({LINENUM}16284, 'sec(π)', -1.0);
  Eps; Test({LINENUM}16285, 'sec(π/4)', 1/0.707106781186547524400844362104849039284835937688474036588);
  Eps; Test({LINENUM}16286, 'sec(π/3)', 2.0);
  Eps; Test({LINENUM}16287, 'sec(π/6)', 1/0.866025403784438646763723170752936183471402626905190314027);

  Eps; Test({LINENUM}16289, 'sec(1)', 1/0.540302305868139717400936607442976603732310420617922227670);
  Eps; Test({LINENUM}16290, 'sec(123)', -1/0.887968906691855428978322569442621150811865560981614);
  Eps; Test({LINENUM}16291, 'sec(0.001)', 1/0.9999995000000416666652777778025793648037918892128961);
  Eps; Test({LINENUM}16292, 'sec(-1)', 1/0.540302305868139717400936607442976603732310420617922227670);
  Eps; Test({LINENUM}16293, 'sec(-123)', -1/0.887968906691855428978322569442621150811865560981614);
  Eps; Test({LINENUM}16294, 'sec(-0.001)', 1/0.9999995000000416666652777778025793648037918892128961);

  Eps(1E-12); Test({LINENUM}16296, 'sec(123456)', -1/0.67229488165658451960808772768357726667866595466767514385);
  Eps(1E-12); Test({LINENUM}16297, 'sec(-123456)', -1/0.67229488165658451960808772768357726667866595466767514385);

  Test({LINENUM}16299, 'sec(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16301, 'csc(π/2)', 1.0);
  Eps; Test({LINENUM}16302, 'csc(-π/2)', -1.0);
  Eps; Test({LINENUM}16303, 'csc(π/4)', 1/0.707106781186547524400844362104849039284835937688474036588);
  Eps; Test({LINENUM}16304, 'csc(π/3)', 1/0.866025403784438646763723170752936183471402626905190314027);
  Eps; Test({LINENUM}16305, 'csc(π/6)', 2.0);

  Eps; Test({LINENUM}16307, 'csc(1)', 1/0.841470984807896506652502321630298999622563060798371065672);
  Eps; Test({LINENUM}16308, 'csc(123)', -1/0.459903490689591251292435715293231810808580607381042);
  Eps; Test({LINENUM}16309, 'csc(0.001)', 1/0.0009999998333333416666664682539710097001513147348086);
  Eps; Test({LINENUM}16310, 'csc(-1)', -1/0.841470984807896506652502321630298999622563060798371065672);
  Eps; Test({LINENUM}16311, 'csc(-123)', 1/0.459903490689591251292435715293231810808580607381042);
  Eps; Test({LINENUM}16312, 'csc(-0.001)', -1/0.0009999998333333416666664682539710097001513147348086);

  Eps(1E-12); Test({LINENUM}16314, 'csc(123456)', -1/0.74028345388665753672466063491709017804265556263134076537);
  Eps(1E-12); Test({LINENUM}16315, 'csc(-123456)', 1/0.74028345388665753672466063491709017804265556263134076537);

  Test({LINENUM}16317, 'csc(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16319, 'sin(cos(tan(1.23456789)))', -0.819740325959989183836632561433919612688949870316605);
  Eps; Test({LINENUM}16320, 'sin(e)', 0.410781290502908695476009492018360591888306970393415345304);
  Eps; Test({LINENUM}16321, 'sin(e) + sin(-e)', 0.0);

  Eps; Test({LINENUM}16323, 'sin(cos(tan(1) + 2) + 3)', 0.870580073950121068697344985465662031887377093858778495887);
  Eps; Test({LINENUM}16324, 'sin(cos(-tan(-1) + 2) -- 3)', 0.870580073950121068697344985465662031887377093858778495887);
  Eps; Test({LINENUM}16325, 'sin(cos(-tan(1) - 2) + 3)', 0.870580073950121068697344985465662031887377093858778495887);
  Eps; Test({LINENUM}16326, 'sin(cos(tan(-1) - 2) + 3)', 0.870580073950121068697344985465662031887377093858778495887);
  Eps; Test({LINENUM}16327, 'sin(-cos(tan(1) + 2) - 3)', -0.870580073950121068697344985465662031887377093858778495887);
  Eps; Test({LINENUM}16328, 'sin(-cos(-tan(1) - 2) - 3)', -0.870580073950121068697344985465662031887377093858778495887);
  Eps; Test({LINENUM}16329, 'sin(-cos(tan(-1) - 2) - 3)', -0.870580073950121068697344985465662031887377093858778495887);

  // Inverse trigonometric functions

  Eps; Test({LINENUM}16333, 'arcsin(−1)', -Pi/2);
  Eps; Test({LINENUM}16334, 'arcsin(−√3/2)', -Pi/3);
  Eps; Test({LINENUM}16335, 'arcsin(−1/√2)', -Pi/4);
  Eps; Test({LINENUM}16336, 'arcsin(−1/2)', -Pi/6);
  Eps; Test({LINENUM}16337, 'arcsin(0)', 0.0);
  Eps; Test({LINENUM}16338, 'arcsin(1/2)', Pi/6);
  Eps; Test({LINENUM}16339, 'arcsin(1/√2)', Pi/4);
  Eps; Test({LINENUM}16340, 'arcsin(√3/2)', Pi/3);
  Eps; Test({LINENUM}16341, 'arcsin(1)', Pi/2);

  Test({LINENUM}16343, 'arcsin(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16345, 'arccos(−1)', Pi);
  Eps; Test({LINENUM}16346, 'arccos(−√3/2)', 5*Pi/6);
  Eps; Test({LINENUM}16347, 'arccos(−1/√2)', 3*Pi/4);
  Eps; Test({LINENUM}16348, 'arccos(−1/2)', 2*Pi/3);
  Eps; Test({LINENUM}16349, 'arccos(0)', Pi/2);
  Eps; Test({LINENUM}16350, 'arccos(1/2)', Pi/3);
  Eps; Test({LINENUM}16351, 'arccos(1/√2)', Pi/4);
  Eps; Test({LINENUM}16352, 'arccos(√3/2)', Pi/6);
  Eps; Test({LINENUM}16353, 'arccos(1)', 0.0);

  Test({LINENUM}16355, 'arccos(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16357, 'arctan(−1E30)', -Pi/2);
  Eps; Test({LINENUM}16358, 'arctan(−√3)', -Pi/3);
  Eps; Test({LINENUM}16359, 'arctan(−1)', -Pi/4);
  Eps; Test({LINENUM}16360, 'arctan(−1/√3)', -Pi/6);
  Eps; Test({LINENUM}16361, 'arctan(0)', 0.0);
  Eps; Test({LINENUM}16362, 'arctan(1/√3)', Pi/6);
  Eps; Test({LINENUM}16363, 'arctan(1)', Pi/4);
  Eps; Test({LINENUM}16364, 'arctan(√3)', Pi/3);
  Eps; Test({LINENUM}16365, 'arctan(1E30)', Pi/2);

  Test({LINENUM}16367, 'arctan(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16369, 'arccot(−1E30)', 0.0);
  Eps; Test({LINENUM}16370, 'arccot(−√3)', -Pi/6);
  Eps; Test({LINENUM}16371, 'arccot(−1)', -Pi/4);
  Eps; Test({LINENUM}16372, 'arccot(−1/√3)', -Pi/3);
  Eps(1E-10); Test({LINENUM}16373, 'arccot(-1E-12)', -Pi/2);
  Eps(1E-10); Test({LINENUM}16374, 'arccot(1E-12)', Pi/2);
  Eps; Test({LINENUM}16375, 'arccot(1/√3)', Pi/3);
  Eps; Test({LINENUM}16376, 'arccot(1)', Pi/4);
  Eps; Test({LINENUM}16377, 'arccot(√3)', Pi/6);
  Eps; Test({LINENUM}16378, 'arccot(1E30)', 0.0);

  Test({LINENUM}16380, 'arccot(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16382, 'arccsc(−1E30)', 0.0);
  Eps; Test({LINENUM}16383, 'arccsc(−1)', -Pi/2);
  Eps; Test({LINENUM}16384, 'arccsc(−2/√3)', -Pi/3);
  Eps; Test({LINENUM}16385, 'arccsc(−√2)', -Pi/4);
  Eps; Test({LINENUM}16386, 'arccsc(−2)', -Pi/6);
  Eps; Test({LINENUM}16387, 'arccsc(2)', Pi/6);
  Eps; Test({LINENUM}16388, 'arccsc(√2)', Pi/4);
  Eps; Test({LINENUM}16389, 'arccsc(2/√3)', Pi/3);
  Eps; Test({LINENUM}16390, 'arccsc(1)', Pi/2);
  Eps; Test({LINENUM}16391, 'arccsc(1E30)', 0.0);

  Test({LINENUM}16393, 'arccsc(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16395, 'arcsec(-1E30)', Pi/2);
  Eps; Test({LINENUM}16396, 'arcsec(−1)', Pi);
  Eps; Test({LINENUM}16397, 'arcsec(−2/√3)', 5*Pi/6);
  Eps; Test({LINENUM}16398, 'arcsec(−√2)', 3*Pi/4);
  Eps; Test({LINENUM}16399, 'arcsec(−2)', 2*Pi/3);
  Eps; Test({LINENUM}16400, 'arcsec(2)', Pi/3);
  Eps; Test({LINENUM}16401, 'arcsec(√2)', Pi/4);
  Eps; Test({LINENUM}16402, 'arcsec(2/√3)', Pi/6);
  Eps; Test({LINENUM}16403, 'arcsec(1)', 0.0);
  Eps; Test({LINENUM}16404, 'arcsec(1E30)', Pi/2);

  Test({LINENUM}16406, 'arcsec(1, 2)', failure, 'Too many arguments.');

  // Exponential function and logarithms

  Test({LINENUM}16410, 'exp(0)', 1.0);

  Eps; Test({LINENUM}16412, 'exp(1)', 2.718281828459045235360287471352662497757247093699959574966);
  Eps; Test({LINENUM}16413, 'exp(2)', 7.389056098930650227230427460575007813180315570551847324087);
  Eps; Test({LINENUM}16414, 'exp(5)', 148.4131591025766034211155800405522796234876675938789890467);
  Eps; Test({LINENUM}16415, 'exp(10)', 22026.46579480671651695790064528424436635351261855678107423);
  Eps; Test({LINENUM}16416, 'exp(20)', 4.85165195409790277969106830541540558684638988944847254E8);
  Eps; Test({LINENUM}16417, 'exp(30)', 1.0686474581524462146990468650741401650024495005473054E13);
  Eps; Test({LINENUM}16418, 'exp(40)', 2.3538526683701998540789991074903480450887161725455546E17);
  Eps; Test({LINENUM}16419, 'exp(50)', 5.1847055285870724640874533229334853848274691005838464E21);
  Eps; Test({LINENUM}16420, 'exp(60)', 1.1420073898156842836629571831447656301980459595563958E26);
  Eps; Test({LINENUM}16421, 'exp(70)', 2.5154386709191670062657811742521129614074129733831405E30);
  Eps; Test({LINENUM}16422, 'exp(80)', 5.5406223843935100525711733958316612924856728832685322E34);
  Eps; Test({LINENUM}16423, 'exp(90)', 1.2204032943178408020027100351363697539707464210997675E39);
  Eps; Test({LINENUM}16424, 'exp(100)', 2.6881171418161354484126255515800135873611118773741922E43);
  Eps; Test({LINENUM}16425, 'exp(150)', 1.3937095806663796973183419371414574774736900614021843E65);
  Eps; Test({LINENUM}16426, 'exp(200)', 7.2259737681257492581774770421893056973568744285273192E86);
  Eps; Test({LINENUM}16427, 'exp(250)', 3.7464546145026732603499548122029201458088307542813159E108);

  Eps; Test({LINENUM}16429, 'exp(-1)', 1/2.718281828459045235360287471352662497757247093699959574966);
  Eps; Test({LINENUM}16430, 'exp(-2)', 1/7.389056098930650227230427460575007813180315570551847324087);
  Eps; Test({LINENUM}16431, 'exp(-5)', 1/148.4131591025766034211155800405522796234876675938789890467);
  Eps; Test({LINENUM}16432, 'exp(-10)', 1/22026.46579480671651695790064528424436635351261855678107423);
  Eps; Test({LINENUM}16433, 'exp(-20)', 1/4.85165195409790277969106830541540558684638988944847254E8);
  Eps; Test({LINENUM}16434, 'exp(-30)', 1/1.0686474581524462146990468650741401650024495005473054E13);
  Eps; Test({LINENUM}16435, 'exp(-40)', 1/2.3538526683701998540789991074903480450887161725455546E17);
  Eps; Test({LINENUM}16436, 'exp(-50)', 1/5.1847055285870724640874533229334853848274691005838464E21); // actually, the wrong kind of epsilon comparison, so this test is not useful
  Eps; Test({LINENUM}16437, 'exp(-60)', 1/1.1420073898156842836629571831447656301980459595563958E26); // -"-
  Eps; Test({LINENUM}16438, 'exp(-70)', 1/2.5154386709191670062657811742521129614074129733831405E30);
  Eps; Test({LINENUM}16439, 'exp(-80)', 1/5.5406223843935100525711733958316612924856728832685322E34);
  Eps; Test({LINENUM}16440, 'exp(-90)', 1/1.2204032943178408020027100351363697539707464210997675E39);
  Eps; Test({LINENUM}16441, 'exp(-100)', 1/2.6881171418161354484126255515800135873611118773741922E43);
  Eps; Test({LINENUM}16442, 'exp(-150)', 1/1.3937095806663796973183419371414574774736900614021843E65);
  Eps; Test({LINENUM}16443, 'exp(-200)', 1/7.2259737681257492581774770421893056973568744285273192E86);
  Eps; Test({LINENUM}16444, 'exp(-250)', 1/3.7464546145026732603499548122029201458088307542813159E108);

  Eps; Test({LINENUM}16446, 'exp(1/3)', 1.395612425086089528628125319602586837597906515199406982617);
  Eps; Test({LINENUM}16447, 'exp(π)', 23.14069263277926900572908636794854738026610624260021199344);
  Eps; Test({LINENUM}16448, 'exp(−π)', 1/23.14069263277926900572908636794854738026610624260021199344);

  Test({LINENUM}16450, 'exp(1, 2)', failure, 'Too many arguments.');

  Test({LINENUM}16452, 'e^0', 1.0);

  Eps; Test({LINENUM}16454, 'e^1', 2.718281828459045235360287471352662497757247093699959574966);
  Eps; Test({LINENUM}16455, 'e^2', 7.389056098930650227230427460575007813180315570551847324087);
  Eps; Test({LINENUM}16456, 'e^5', 148.4131591025766034211155800405522796234876675938789890467);
  Eps; Test({LINENUM}16457, 'e^10', 22026.46579480671651695790064528424436635351261855678107423);
  Eps; Test({LINENUM}16458, 'e^20', 4.85165195409790277969106830541540558684638988944847254E8);
  Eps; Test({LINENUM}16459, 'e^30', 1.0686474581524462146990468650741401650024495005473054E13);
  Eps; Test({LINENUM}16460, 'e^40', 2.3538526683701998540789991074903480450887161725455546E17);
  Eps; Test({LINENUM}16461, 'e^50', 5.1847055285870724640874533229334853848274691005838464E21);
  Eps; Test({LINENUM}16462, 'e^60', 1.1420073898156842836629571831447656301980459595563958E26);
  Eps; Test({LINENUM}16463, 'e^70', 2.5154386709191670062657811742521129614074129733831405E30);
  Eps; Test({LINENUM}16464, 'e^80', 5.5406223843935100525711733958316612924856728832685322E34);
  Eps; Test({LINENUM}16465, 'e^90', 1.2204032943178408020027100351363697539707464210997675E39);
  Eps; Test({LINENUM}16466, 'e^100', 2.6881171418161354484126255515800135873611118773741922E43);
  Eps; Test({LINENUM}16467, 'e^150', 1.3937095806663796973183419371414574774736900614021843E65);
  Eps; Test({LINENUM}16468, 'e^200', 7.2259737681257492581774770421893056973568744285273192E86);
  Eps; Test({LINENUM}16469, 'e^250', 3.7464546145026732603499548122029201458088307542813159E108);

  Eps; Test({LINENUM}16471, 'e^-1', 1/2.718281828459045235360287471352662497757247093699959574966);
  Eps; Test({LINENUM}16472, 'e^-2', 1/7.389056098930650227230427460575007813180315570551847324087);
  Eps; Test({LINENUM}16473, 'e^-5', 1/148.4131591025766034211155800405522796234876675938789890467);
  Eps; Test({LINENUM}16474, 'e^-10', 1/22026.46579480671651695790064528424436635351261855678107423);
  Eps; Test({LINENUM}16475, 'e^-20', 1/4.85165195409790277969106830541540558684638988944847254E8);
  Eps; Test({LINENUM}16476, 'e^-30', 1/1.0686474581524462146990468650741401650024495005473054E13);
  Eps; Test({LINENUM}16477, 'e^-40', 1/2.3538526683701998540789991074903480450887161725455546E17);
  Eps; Test({LINENUM}16478, 'e^-50', 1/5.1847055285870724640874533229334853848274691005838464E21);
  Eps; Test({LINENUM}16479, 'e^-60', 1/1.1420073898156842836629571831447656301980459595563958E26);
  Eps; Test({LINENUM}16480, 'e^-70', 1/2.5154386709191670062657811742521129614074129733831405E30);
  Eps; Test({LINENUM}16481, 'e^-80', 1/5.5406223843935100525711733958316612924856728832685322E34);
  Eps; Test({LINENUM}16482, 'e^-90', 1/1.2204032943178408020027100351363697539707464210997675E39);
  Eps; Test({LINENUM}16483, 'e^-100', 1/2.6881171418161354484126255515800135873611118773741922E43);
  Eps; Test({LINENUM}16484, 'e^-150', 1/1.3937095806663796973183419371414574774736900614021843E65);
  Eps; Test({LINENUM}16485, 'e^-200', 1/7.2259737681257492581774770421893056973568744285273192E86);
  Eps; Test({LINENUM}16486, 'e^-250', 1/3.7464546145026732603499548122029201458088307542813159E108);

  Eps; Test({LINENUM}16488, 'e^(1/3)', 1.395612425086089528628125319602586837597906515199406982617);
  Eps; Test({LINENUM}16489, 'e^π', 23.14069263277926900572908636794854738026610624260021199344);
  Eps; Test({LINENUM}16490, 'e^−π', 1/23.14069263277926900572908636794854738026610624260021199344);

  Eps; Test({LINENUM}16492, 'ln(1)', 0.0);
  Eps; Test({LINENUM}16493, 'ln(e)', 1.0);
  Eps; Test({LINENUM}16494, 'ln(e^2)', 2.0);
  Eps; Test({LINENUM}16495, 'ln(e^3)', 3.0);
  Eps; Test({LINENUM}16496, 'ln(e^4)', 4.0);
  Eps; Test({LINENUM}16497, 'ln(e^5)', 5.0);
  Eps; Test({LINENUM}16498, 'ln(e^6)', 6.0);
  Eps; Test({LINENUM}16499, 'ln(e^7)', 7.0);
  Eps; Test({LINENUM}16500, 'ln(e^8)', 8.0);
  Eps; Test({LINENUM}16501, 'ln(e^9)', 9.0);
  Eps; Test({LINENUM}16502, 'ln(e^10)', 10.0);
  Eps; Test({LINENUM}16503, 'ln(e^20)', 20.0);
  Eps; Test({LINENUM}16504, 'ln(e^50)', 50.0);
  Eps; Test({LINENUM}16505, 'ln(e^100)', 100.0);
  Eps; Test({LINENUM}16506, 'ln(e^150)', 150.0);
  Eps; Test({LINENUM}16507, 'ln(e^200)', 200.0);
  Eps; Test({LINENUM}16508, 'ln(e^250)', 250.0);

  Eps; Test({LINENUM}16510, 'ln(e^−1)', -1.0);
  Eps; Test({LINENUM}16511, 'ln(e^−2)', -2.0);
  Eps; Test({LINENUM}16512, 'ln(e^−3)', -3.0);
  Eps; Test({LINENUM}16513, 'ln(e^−4)', -4.0);
  Eps; Test({LINENUM}16514, 'ln(e^−5)', -5.0);
  Eps; Test({LINENUM}16515, 'ln(e^−6)', -6.0);
  Eps; Test({LINENUM}16516, 'ln(e^−7)', -7.0);
  Eps; Test({LINENUM}16517, 'ln(e^−8)', -8.0);
  Eps; Test({LINENUM}16518, 'ln(e^−9)', -9.0);
  Eps; Test({LINENUM}16519, 'ln(e^−10)', -10.0);
  Eps; Test({LINENUM}16520, 'ln(e^−20)', -20.0);
  Eps; Test({LINENUM}16521, 'ln(e^−50)', -50.0);
  Eps; Test({LINENUM}16522, 'ln(e^−100)', -100.0);
  Eps; Test({LINENUM}16523, 'ln(e^−150)', -150.0);
  Eps; Test({LINENUM}16524, 'ln(e^−200)', -200.0);
  Eps; Test({LINENUM}16525, 'ln(e^−250)', -250.0);

  Eps; Test({LINENUM}16527, 'ln(123)', 4.812184355372417495262008609959933293023901027222051085353);
  Eps; Test({LINENUM}16528, 'ln(1/3)', -1.09861228866810969139524523692252570464749055782274945173);
  Eps; Test({LINENUM}16529, 'ln(π)', 1.144729885849400174143427351353058711647294812915311571513);
  Eps; Test({LINENUM}16530, 'ln(e^π)', Pi);

  Test({LINENUM}16532, 'ln(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16534, 'log(1)', 0.0);
  Eps; Test({LINENUM}16535, 'log(10)', 1.0);
  Eps; Test({LINENUM}16536, 'log(10^2)', 2.0);
  Eps; Test({LINENUM}16537, 'log(10^3)', 3.0);
  Eps; Test({LINENUM}16538, 'log(10^4)', 4.0);
  Eps; Test({LINENUM}16539, 'log(10^5)', 5.0);
  Eps; Test({LINENUM}16540, 'log(10^6)', 6.0);
  Eps; Test({LINENUM}16541, 'log(10^7)', 7.0);
  Eps; Test({LINENUM}16542, 'log(10^8)', 8.0);
  Eps; Test({LINENUM}16543, 'log(10^9)', 9.0);
  Eps; Test({LINENUM}16544, 'log(10^10)', 10.0);
  Eps; Test({LINENUM}16545, 'log(10^20)', 20.0);
  Eps; Test({LINENUM}16546, 'log(10^50)', 50.0);
  Eps; Test({LINENUM}16547, 'log(10^100)', 100.0);
  Eps; Test({LINENUM}16548, 'log(10^150)', 150.0);
  Eps; Test({LINENUM}16549, 'log(10^200)', 200.0);
  Eps; Test({LINENUM}16550, 'log(10^250)', 250.0);

  Eps; Test({LINENUM}16552, 'log(10^−1)', -1.0);
  Eps; Test({LINENUM}16553, 'log(10^−2)', -2.0);
  Eps; Test({LINENUM}16554, 'log(10^−3)', -3.0);
  Eps; Test({LINENUM}16555, 'log(10^−4)', -4.0);
  Eps; Test({LINENUM}16556, 'log(10^−5)', -5.0);
  Eps; Test({LINENUM}16557, 'log(10^−6)', -6.0);
  Eps; Test({LINENUM}16558, 'log(10^−7)', -7.0);
  Eps; Test({LINENUM}16559, 'log(10^−8)', -8.0);
  Eps; Test({LINENUM}16560, 'log(10^−9)', -9.0);
  Eps; Test({LINENUM}16561, 'log(10^−10)', -10.0);
  Eps; Test({LINENUM}16562, 'log(10^−20)', -20.0);
  Eps; Test({LINENUM}16563, 'log(10^−50)', -50.0);
  Eps; Test({LINENUM}16564, 'log(10^−100)', -100.0);
  Eps; Test({LINENUM}16565, 'log(10^−150)', -150.0);
  Eps; Test({LINENUM}16566, 'log(10^−200)', -200.0);
  Eps; Test({LINENUM}16567, 'log(10^−250)', -250.0);

  Eps; Test({LINENUM}16569, 'log(123)', 2.089905111439397931804439753223296108730642498024382953837);
  Eps; Test({LINENUM}16570, 'log(1/3)', -0.47712125471966243729502790325511530920012886419069586482);
  Eps; Test({LINENUM}16571, 'log(π)', 0.497149872694133854351268288290898873651678324380442446134);
  Eps; Test({LINENUM}16572, 'log(10^π)', Pi);

  Test({LINENUM}16574, 'log(1, 2)', failure, 'Too many arguments.');

  // Powers and roots

  Test({LINENUM}16578, 'sqr(0)', 0);
  Test({LINENUM}16579, 'sqr(1)', 1);
  Test({LINENUM}16580, 'sqr(2)', 4);
  Test({LINENUM}16581, 'sqr(3)', 9);
  Test({LINENUM}16582, 'sqr(4)', 16);
  Test({LINENUM}16583, 'sqr(5)', 25);
  Test({LINENUM}16584, 'sqr(6)', 36);
  Test({LINENUM}16585, 'sqr(7)', 49);
  Test({LINENUM}16586, 'sqr(8)', 64);
  Test({LINENUM}16587, 'sqr(9)', 81);
  Test({LINENUM}16588, 'sqr(10)', 100);
  Test({LINENUM}16589, 'sqr(11)', 121);
  Test({LINENUM}16590, 'sqr(12)', 144);

  Test({LINENUM}16592, 'sqr(20)', 400);
  Test({LINENUM}16593, 'sqr(50)', 2500);
  Test({LINENUM}16594, 'sqr(100)', 10000);
  Test({LINENUM}16595, 'sqr(150)', 22500);
  Test({LINENUM}16596, 'sqr(200)', 40000);
  Test({LINENUM}16597, 'sqr(1000)', 1000000);
  Test({LINENUM}16598, 'sqr(10000)', 100000000);
  Test({LINENUM}16599, 'sqr(100000)', 10000000000);
  Test({LINENUM}16600, 'sqr(1000000)', 1000000000000);
  Test({LINENUM}16601, 'sqr(10000000)', 100000000000000);
  Test({LINENUM}16602, 'sqr(100000000)', 10000000000000000);
  Test({LINENUM}16603, 'sqr(1000000000)', 1000000000000000000);
  Eps; Test({LINENUM}16604, 'sqr(1E50)', 1E100);

  Eps; Test({LINENUM}16606, 'sqr(0.5)', 0.25);
  Eps; Test({LINENUM}16607, 'sqr(0.3)', 0.09);
  Eps; Test({LINENUM}16608, 'sqr(0.2)', 0.04);
  Eps; Test({LINENUM}16609, 'sqr(0.1)', 0.01);
  Eps; Test({LINENUM}16610, 'sqr(0.01)', 0.0001);
  Eps; Test({LINENUM}16611, 'sqr(0.001)', 0.000001);
  Eps; Test({LINENUM}16612, 'sqr(0.0001)', 0.00000001);
  Eps; Test({LINENUM}16613, 'sqr(0.00001)', 0.0000000001);
  Eps; Test({LINENUM}16614, 'sqr(0.000001)', 0.000000000001);
  Eps; Test({LINENUM}16615, 'sqr(0.0000001)', 0.00000000000001);
  Eps; Test({LINENUM}16616, 'sqr(0.00000001)', 0.0000000000000001);
  Eps; Test({LINENUM}16617, 'sqr(0.000000001)', 0.000000000000000001);
  Eps; Test({LINENUM}16618, 'sqr(1E-50)', 1E-100);

  Test({LINENUM}16620, 'sqr(7/3)', Rat(49, 9));
  Test({LINENUM}16621, 'sqr(4/5)', Rat(16, 25));
  Test({LINENUM}16622, 'sqr(9/100)', Rat(81, 10000));

  Test({LINENUM}16624, 'sqr(1/2)', Rat(1, 4));
  Test({LINENUM}16625, 'sqr(3/10)', Rat(9, 100));
  Test({LINENUM}16626, 'sqr(1/5)', Rat(1, 25));
  Test({LINENUM}16627, 'sqr(1/10)', Rat(1, 100));
  Test({LINENUM}16628, 'sqr(1/100)', Rat(1, 10000));
  Test({LINENUM}16629, 'sqr(1/1000)', Rat(1, 1000000));
  Test({LINENUM}16630, 'sqr(1/10000)', Rat(1, 100000000));
  Test({LINENUM}16631, 'sqr(1/100000)', Rat(1, 10000000000));
  Test({LINENUM}16632, 'sqr(1/1000000)', Rat(1, 1000000000000));
  Test({LINENUM}16633, 'sqr(1/10000000)', Rat(1, 100000000000000));
  Test({LINENUM}16634, 'sqr(1/100000000)', Rat(1, 10000000000000000));

  Test({LINENUM}16636, 'sqr(−0)', 0);
  Test({LINENUM}16637, 'sqr(−1)', 1);
  Test({LINENUM}16638, 'sqr(−2)', 4);
  Test({LINENUM}16639, 'sqr(−3)', 9);
  Test({LINENUM}16640, 'sqr(−4)', 16);
  Test({LINENUM}16641, 'sqr(−5)', 25);
  Test({LINENUM}16642, 'sqr(−6)', 36);
  Test({LINENUM}16643, 'sqr(−7)', 49);
  Test({LINENUM}16644, 'sqr(−8)', 64);
  Test({LINENUM}16645, 'sqr(−9)', 81);
  Test({LINENUM}16646, 'sqr(−10)', 100);
  Test({LINENUM}16647, 'sqr(−11)', 121);
  Test({LINENUM}16648, 'sqr(−12)', 144);

  Test({LINENUM}16650, 'sqr(−20)', 400);
  Test({LINENUM}16651, 'sqr(−50)', 2500);
  Test({LINENUM}16652, 'sqr(−100)', 10000);
  Test({LINENUM}16653, 'sqr(−150)', 22500);
  Test({LINENUM}16654, 'sqr(−200)', 40000);
  Test({LINENUM}16655, 'sqr(−1000)', 1000000);
  Test({LINENUM}16656, 'sqr(−10000)', 100000000);
  Test({LINENUM}16657, 'sqr(−100000)', 10000000000);
  Test({LINENUM}16658, 'sqr(−1000000)', 1000000000000);
  Test({LINENUM}16659, 'sqr(−10000000)', 100000000000000);
  Test({LINENUM}16660, 'sqr(−100000000)', 10000000000000000);
  Test({LINENUM}16661, 'sqr(−1000000000)', 1000000000000000000);
  Eps; Test({LINENUM}16662, 'sqr(−1E50)', 1E100);

  Eps; Test({LINENUM}16664, 'sqr(−0.5)', 0.25);
  Eps; Test({LINENUM}16665, 'sqr(−0.3)', 0.09);
  Eps; Test({LINENUM}16666, 'sqr(−0.2)', 0.04);
  Eps; Test({LINENUM}16667, 'sqr(−0.1)', 0.01);
  Eps; Test({LINENUM}16668, 'sqr(−0.01)', 0.0001);
  Eps; Test({LINENUM}16669, 'sqr(−0.001)', 0.000001);
  Eps; Test({LINENUM}16670, 'sqr(−0.0001)', 0.00000001);
  Eps; Test({LINENUM}16671, 'sqr(−0.00001)', 0.0000000001);
  Eps; Test({LINENUM}16672, 'sqr(−0.000001)', 0.000000000001);
  Eps; Test({LINENUM}16673, 'sqr(−0.0000001)', 0.00000000000001);
  Eps; Test({LINENUM}16674, 'sqr(−0.00000001)', 0.0000000000000001);
  Eps; Test({LINENUM}16675, 'sqr(−0.000000001)', 0.000000000000000001);
  Eps; Test({LINENUM}16676, 'sqr(−1E-50)', 1E-100);

  Test({LINENUM}16678, 'sqr(−7/3)', Rat(49, 9));
  Test({LINENUM}16679, 'sqr(−4/5)', Rat(16, 25));
  Test({LINENUM}16680, 'sqr(−9/100)', Rat(81, 10000));

  Test({LINENUM}16682, 'sqr(−1/2)', Rat(1, 4));
  Test({LINENUM}16683, 'sqr(−3/10)', Rat(9, 100));
  Test({LINENUM}16684, 'sqr(−1/5)', Rat(1, 25));
  Test({LINENUM}16685, 'sqr(−1/10)', Rat(1, 100));
  Test({LINENUM}16686, 'sqr(−1/100)', Rat(1, 10000));
  Test({LINENUM}16687, 'sqr(−1/1000)', Rat(1, 1000000));
  Test({LINENUM}16688, 'sqr(−1/10000)', Rat(1, 100000000));
  Test({LINENUM}16689, 'sqr(−1/100000)', Rat(1, 10000000000));
  Test({LINENUM}16690, 'sqr(−1/1000000)', Rat(1, 1000000000000));
  Test({LINENUM}16691, 'sqr(−1/10000000)', Rat(1, 100000000000000));
  Test({LINENUM}16692, 'sqr(−1/100000000)', Rat(1, 10000000000000000));

  Test({LINENUM}16694, 'sqr(1, 2)', failure, 'Too many arguments.');

  Test({LINENUM}16696, 'sqrt(0)', 0.0);
  Test({LINENUM}16697, 'sqrt(1)', 1.0);
  Test({LINENUM}16698, 'sqrt(4)', 2.0);
  Test({LINENUM}16699, 'sqrt(9)', 3.0);
  Test({LINENUM}16700, 'sqrt(16)', 4.0);
  Test({LINENUM}16701, 'sqrt(25)', 5.0);
  Test({LINENUM}16702, 'sqrt(36)', 6.0);
  Test({LINENUM}16703, 'sqrt(49)', 7.0);
  Test({LINENUM}16704, 'sqrt(64)', 8.0);
  Test({LINENUM}16705, 'sqrt(81)', 9.0);
  Test({LINENUM}16706, 'sqrt(100)', 10.0);
  Test({LINENUM}16707, 'sqrt(121)', 11.0);
  Test({LINENUM}16708, 'sqrt(144)', 12.0);

  Test({LINENUM}16710, 'sqrt(0.0)', 0.0);
  Test({LINENUM}16711, 'sqrt(1.0)', 1.0);
  Test({LINENUM}16712, 'sqrt(4.0)', 2.0);
  Test({LINENUM}16713, 'sqrt(9.0)', 3.0);
  Test({LINENUM}16714, 'sqrt(16.0)', 4.0);
  Test({LINENUM}16715, 'sqrt(25.0)', 5.0);
  Test({LINENUM}16716, 'sqrt(36.0)', 6.0);
  Test({LINENUM}16717, 'sqrt(49.0)', 7.0);
  Test({LINENUM}16718, 'sqrt(64.0)', 8.0);
  Test({LINENUM}16719, 'sqrt(81.0)', 9.0);
  Test({LINENUM}16720, 'sqrt(100.0)', 10.0);
  Test({LINENUM}16721, 'sqrt(121.0)', 11.0);
  Test({LINENUM}16722, 'sqrt(144.0)', 12.0);

  Test({LINENUM}16724, 'sqrt(100)', 10.0);
  Test({LINENUM}16725, 'sqrt(10000)', 100.0);
  Test({LINENUM}16726, 'sqrt(1000000)', 1000.0);
  Test({LINENUM}16727, 'sqrt(100000000)', 10000.0);
  Test({LINENUM}16728, 'sqrt(10000000000)', 100000.0);
  Test({LINENUM}16729, 'sqrt(1000000000000)', 1000000.0);
  Test({LINENUM}16730, 'sqrt(100000000000000)', 10000000.0);
  Test({LINENUM}16731, 'sqrt(10000000000000000)', 100000000.0);
  Test({LINENUM}16732, 'sqrt(1000000000000000000)', 1000000000.0);
  Test({LINENUM}16733, 'sqrt(100000000000000000000)', 10000000000.0);
  Test({LINENUM}16734, 'sqrt(10000000000000000000000)', 100000000000.0);
  Test({LINENUM}16735, 'sqrt(1000000000000000000000000)', 1000000000000.0);

  Test({LINENUM}16737, 'sqrt(100.0)', 10.0);
  Test({LINENUM}16738, 'sqrt(10000.0)', 100.0);
  Test({LINENUM}16739, 'sqrt(1000000.0)', 1000.0);
  Test({LINENUM}16740, 'sqrt(100000000.0)', 10000.0);
  Test({LINENUM}16741, 'sqrt(10000000000.0)', 100000.0);
  Test({LINENUM}16742, 'sqrt(1000000000000.0)', 1000000.0);
  Test({LINENUM}16743, 'sqrt(100000000000000.0)', 10000000.0);
  Test({LINENUM}16744, 'sqrt(10000000000000000.0)', 100000000.0);
  Test({LINENUM}16745, 'sqrt(1000000000000000000.0)', 1000000000.0);
  Test({LINENUM}16746, 'sqrt(100000000000000000000.0)', 10000000000.0);
  Test({LINENUM}16747, 'sqrt(10000000000000000000000.0)', 100000000000.0);
  Test({LINENUM}16748, 'sqrt(1000000000000000000000000.0)', 1000000000000.0);
  Eps; Test({LINENUM}16749, 'sqrt(1E200)', 1E100);

  Eps; Test({LINENUM}16751, 'sqrt(12345)', 111.1080555135405112450044387430752414899113774596977299764);
  Eps; Test({LINENUM}16752, 'sqrt(12345.6789)', 111.11111060555555440541666143353469245878409860134351);

  Eps; Test({LINENUM}16754, 'sqrt(0.25)', 0.5);
  Eps; Test({LINENUM}16755, 'sqrt(0.16)', 0.4);
  Eps; Test({LINENUM}16756, 'sqrt(0.09)', 0.3);
  Eps; Test({LINENUM}16757, 'sqrt(0.04)', 0.2);
  Eps; Test({LINENUM}16758, 'sqrt(0.01)', 0.1);
  Eps; Test({LINENUM}16759, 'sqrt(0.0001)', 0.01);
  Eps; Test({LINENUM}16760, 'sqrt(0.000001)', 0.001);
  Eps; Test({LINENUM}16761, 'sqrt(0.00000001)', 0.0001);
  Eps; Test({LINENUM}16762, 'sqrt(0.0000000001)', 0.00001);
  Eps; Test({LINENUM}16763, 'sqrt(0.000000000001)', 0.000001);
  Eps; Test({LINENUM}16764, 'sqrt(0.00000000000001)', 0.0000001);
  Eps; Test({LINENUM}16765, 'sqrt(0.0000000000000001)', 0.00000001);
  Eps; Test({LINENUM}16766, 'sqrt(0.000000000000000001)', 0.000000001);
  Eps; Test({LINENUM}16767, 'sqrt(1E-200)', 1E-100);

  Eps; Test({LINENUM}16769, 'sqrt(π)', 1.772453850905516027298167483341145182797549456122387128213);
  Eps; Test({LINENUM}16770, 'sqrt(81/25)', 9/5);
  Eps; Test({LINENUM}16771, 'sqrt(81/25 - 81/25)', 0.0);

  Test({LINENUM}16773, 'sqrt(1, 2)', failure, 'Too many arguments.');

  // Hyperbolic functions

  Test({LINENUM}16777, 'sinh(0)', 0.0);

  Eps; Test({LINENUM}16779, 'sinh(1/3)', 0.339540557256150139101260611338603585072397227688963912738);
  Eps; Test({LINENUM}16780, 'sinh(0.5)', 0.5210953054937473616224256264114915591059289826114805);
  Eps; Test({LINENUM}16781, 'sinh(1)', 1.175201193643801456882381850595600815155717981334095870229);
  Eps; Test({LINENUM}16782, 'sinh(2)', 3.626860407847018767668213982801261704886342012321135721309);
  Eps; Test({LINENUM}16783, 'sinh(5)', 74.20321057778875897700947199606456559961940900442581698066);
  Eps; Test({LINENUM}16784, 'sinh(10)', 11013.23287470339337723652455484636440290145119031934610383);
  Eps; Test({LINENUM}16785, 'sinh(20)', 2.42582597704895137953976604051491365359349304394513138E8);
  Eps; Test({LINENUM}16786, 'sinh(50)', 2.5923527642935362320437266614667426924137344538544308E21);

  Eps; Test({LINENUM}16788, 'sinh(-1/3)', -0.339540557256150139101260611338603585072397227688963912738);
  Eps; Test({LINENUM}16789, 'sinh(-0.5)', -0.5210953054937473616224256264114915591059289826114805);
  Eps; Test({LINENUM}16790, 'sinh(-1)', -1.175201193643801456882381850595600815155717981334095870229);
  Eps; Test({LINENUM}16791, 'sinh(-2)', -3.626860407847018767668213982801261704886342012321135721309);
  Eps; Test({LINENUM}16792, 'sinh(-5)', -74.20321057778875897700947199606456559961940900442581698066);
  Eps; Test({LINENUM}16793, 'sinh(-10)', -11013.23287470339337723652455484636440290145119031934610383);
  Eps; Test({LINENUM}16794, 'sinh(-20)', -2.42582597704895137953976604051491365359349304394513138E8);
  Eps; Test({LINENUM}16795, 'sinh(-50)', -2.5923527642935362320437266614667426924137344538544308E21);

  Test({LINENUM}16797, 'sinh(1, 2)', failure, 'Too many arguments.');

  Test({LINENUM}16799, 'cosh(0)', 1.0);

  Eps; Test({LINENUM}16801, 'cosh(1/3)', 1.056071867829939389526864708263983252525509287510443069879);
  Eps; Test({LINENUM}16802, 'cosh(0.5)', 1.1276259652063807852262251614026720125478471180986674);
  Eps; Test({LINENUM}16803, 'cosh(1)', 1.543080634815243778477905620757061682601529112365863704737);
  Eps; Test({LINENUM}16804, 'cosh(2)', 3.762195691083631459562213477773746108293973558230711602777);
  Eps; Test({LINENUM}16805, 'cosh(5)', 74.20994852478784444410610804448771402386825858945317206609);
  Eps; Test({LINENUM}16806, 'cosh(10)', 11013.23292010332313972137609043787996345206142823743497040);
  Eps; Test({LINENUM}16807, 'cosh(20)', 2.42582597704895140015130226490049193325289684550334115E8);
  Eps; Test({LINENUM}16808, 'cosh(50)', 2.5923527642935362320437266614667426924137346467294155E21);

  Eps; Test({LINENUM}16810, 'cosh(-1/3)', 1.056071867829939389526864708263983252525509287510443069879);
  Eps; Test({LINENUM}16811, 'cosh(-0.5)', 1.1276259652063807852262251614026720125478471180986674);
  Eps; Test({LINENUM}16812, 'cosh(-1)', 1.543080634815243778477905620757061682601529112365863704737);
  Eps; Test({LINENUM}16813, 'cosh(-2)', 3.762195691083631459562213477773746108293973558230711602777);
  Eps; Test({LINENUM}16814, 'cosh(-5)', 74.20994852478784444410610804448771402386825858945317206609);
  Eps; Test({LINENUM}16815, 'cosh(-10)', 11013.23292010332313972137609043787996345206142823743497040);
  Eps; Test({LINENUM}16816, 'cosh(-20)', 2.42582597704895140015130226490049193325289684550334115E8);
  Eps; Test({LINENUM}16817, 'cosh(-50)', 2.5923527642935362320437266614667426924137346467294155E21);

  Test({LINENUM}16819, 'cosh(1, 2)', failure, 'Too many arguments.');

  Test({LINENUM}16821, 'tanh(0)', 0.0);

  Eps; Test({LINENUM}16823, 'tanh(1/3)', 0.321512737531634344719406222425206466005292002502083511679);
  Eps; Test({LINENUM}16824, 'tanh(0.5)', 0.4621171572600097585023184836436725487302892803301130);
  Eps; Test({LINENUM}16825, 'tanh(1)', 0.761594155955764888119458282604793590412768597257936551596);
  Eps; Test({LINENUM}16826, 'tanh(2)', 0.964027580075816883946413724100923150255029976240934776048);
  Eps; Test({LINENUM}16827, 'tanh(5)', 0.999909204262595131210990447534473021089812615990547862736);
  Eps; Test({LINENUM}16828, 'tanh(10)', 0.999999995877692763619592837138275741050814618495019962261);
  Eps; Test({LINENUM}16829, 'tanh(20)', 0.999999999999999991503291489416822045438558191190987257130);
  Eps; Test({LINENUM}16830, 'tanh(50)', 0.999999999999999999999999999999999999999999925598480479583);
  Eps; Test({LINENUM}16831, 'tanh(100)', 1.0);
  Eps; Test({LINENUM}16832, 'tanh(1000)', 1.0);
  Eps; Test({LINENUM}16833, 'tanh(1E10)', 1.0);
  Eps; Test({LINENUM}16834, 'tanh(1E50)', 1.0);
  Eps; Test({LINENUM}16835, 'tanh(1E100)', 1.0);

  Eps; Test({LINENUM}16837, 'tanh(-1/3)', -0.321512737531634344719406222425206466005292002502083511679);
  Eps; Test({LINENUM}16838, 'tanh(-0.5)', -0.4621171572600097585023184836436725487302892803301130);
  Eps; Test({LINENUM}16839, 'tanh(-1)', -0.761594155955764888119458282604793590412768597257936551596);
  Eps; Test({LINENUM}16840, 'tanh(-2)', -0.964027580075816883946413724100923150255029976240934776048);
  Eps; Test({LINENUM}16841, 'tanh(-5)', -0.999909204262595131210990447534473021089812615990547862736);
  Eps; Test({LINENUM}16842, 'tanh(-10)', -0.999999995877692763619592837138275741050814618495019962261);
  Eps; Test({LINENUM}16843, 'tanh(-20)', -0.999999999999999991503291489416822045438558191190987257130);
  Eps; Test({LINENUM}16844, 'tanh(-50)', -0.999999999999999999999999999999999999999999925598480479583);
  Eps; Test({LINENUM}16845, 'tanh(-100)', -1.0);
  Eps; Test({LINENUM}16846, 'tanh(-1000)', -1.0);
  Eps; Test({LINENUM}16847, 'tanh(-1E10)', -1.0);
  Eps; Test({LINENUM}16848, 'tanh(-1E50)', -1.0);
  Eps; Test({LINENUM}16849, 'tanh(-1E100)', -1.0);

  Test({LINENUM}16851, 'tanh(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}16853, 'coth(1E-10)', 1.0000000000000000000033333333333333333333311111111111E10);
  Eps; Test({LINENUM}16854, 'coth(1/10000)', 10000.00003333333331111111113227513225396825398963176738790);
  Eps; Test({LINENUM}16855, 'coth(1/1000)', 1000.000333333311111113227513015873037250812864188744823643);
  Eps; Test({LINENUM}16856, 'coth(1/100)', 100.0033333111113227492063705839319236906316350002943191638);
  Eps; Test({LINENUM}16857, 'coth(1/10)', 10.033311132253989610145270492851499126734254107108310);
  Eps; Test({LINENUM}16858, 'coth(1/3)', 3.110296679619443701378375231417624794566543581787011086057);
  Eps; Test({LINENUM}16859, 'coth(0.5)', 2.1639534137386528487700040102180231170937386021507922);
  Eps; Test({LINENUM}16860, 'coth(1)', 1.313035285499331303636161246930847832912013941240452655543);
  Eps; Test({LINENUM}16861, 'coth(2)', 1.037314720727548095877809764767820711662391269249194603569);
  Eps; Test({LINENUM}16862, 'coth(5)', 1.000090803982019375536657920521687603830547437521890754159);
  Eps; Test({LINENUM}16863, 'coth(10)', 1.000000004122307253373824184028080312460180026756219308447);
  Eps; Test({LINENUM}16864, 'coth(20)', 1.000000000000000008496708510583178026755497322625619635355);
  Eps; Test({LINENUM}16865, 'coth(50)', 1.000000000000000000000000000000000000000000074401519520417);
  Eps; Test({LINENUM}16866, 'coth(100)', 1.0);
  Eps; Test({LINENUM}16867, 'coth(1000)', 1.0);
  Eps; Test({LINENUM}16868, 'coth(1E10)', 1.0);
  Eps; Test({LINENUM}16869, 'coth(1E50)', 1.0);
  Eps; Test({LINENUM}16870, 'coth(1E100)', 1.0);

  Eps; Test({LINENUM}16872, 'coth(-1E-10)', -1.0000000000000000000033333333333333333333311111111111E10);
  Eps; Test({LINENUM}16873, 'coth(-1/10000)', -10000.00003333333331111111113227513225396825398963176738790);
  Eps; Test({LINENUM}16874, 'coth(-1/1000)', -1000.000333333311111113227513015873037250812864188744823643);
  Eps; Test({LINENUM}16875, 'coth(-1/100)', -100.0033333111113227492063705839319236906316350002943191638);
  Eps; Test({LINENUM}16876, 'coth(-1/10)', -10.033311132253989610145270492851499126734254107108310);
  Eps; Test({LINENUM}16877, 'coth(-1/3)', -3.110296679619443701378375231417624794566543581787011086057);
  Eps; Test({LINENUM}16878, 'coth(-0.5)', -2.1639534137386528487700040102180231170937386021507922);
  Eps; Test({LINENUM}16879, 'coth(-1)', -1.313035285499331303636161246930847832912013941240452655543);
  Eps; Test({LINENUM}16880, 'coth(-2)', -1.037314720727548095877809764767820711662391269249194603569);
  Eps; Test({LINENUM}16881, 'coth(-5)', -1.000090803982019375536657920521687603830547437521890754159);
  Eps; Test({LINENUM}16882, 'coth(-10)', -1.000000004122307253373824184028080312460180026756219308447);
  Eps; Test({LINENUM}16883, 'coth(-20)', -1.000000000000000008496708510583178026755497322625619635355);
  Eps; Test({LINENUM}16884, 'coth(-50)', -1.000000000000000000000000000000000000000000074401519520417);
  Eps; Test({LINENUM}16885, 'coth(-100)', -1.0);
  Eps; Test({LINENUM}16886, 'coth(-1000)', -1.0);
  Eps; Test({LINENUM}16887, 'coth(-1E10)', -1.0);
  Eps; Test({LINENUM}16888, 'coth(-1E50)', -1.0);
  Eps; Test({LINENUM}16889, 'coth(-1E100)', -1.0);

  Test({LINENUM}16891, 'coth(1, 2)', failure, 'Too many arguments.');

  Eps(1); Test({LINENUM}16893, 'csch(1E-10)', 9.999999999999999999983333333333333333333352777777778E9);
  Eps; Test({LINENUM}16894, 'csch(1/10000)', 9999.999983333333352777777757275132296130952359616335332413);
  Eps; Test({LINENUM}16895, 'csch(1/1000)', 999.9998333333527777757275134374999786639565217460263892157);
  Eps; Test({LINENUM}16896, 'csch(1/100)', 99.99833335277757275342259771178973856982340751490977001337);
  Eps; Test({LINENUM}16897, 'csch(1/10)', 9.983352757296109637946884127643214807091454313327291581209);
  Eps; Test({LINENUM}16898, 'csch(1/3)', 2.945156266694814347645586003495165676460850560888490147110);
  Eps; Test({LINENUM}16899, 'csch(0.5)', 1.919034751334943719492202878727006159587179871532971946414);
  Eps; Test({LINENUM}16900, 'csch(1)', 0.850918128239321545133842763287175284181724660910339616990);
  Eps; Test({LINENUM}16901, 'csch(2)', 0.275720564771783207758351482163027121249622671991258051973);
  Eps; Test({LINENUM}16902, 'csch(5)', 0.013476505830589086655381881284337964618035455336483814697);
  Eps; Test({LINENUM}16903, 'csch(10)', 0.000090799859712122162833736493607291370367410765671445711);
  Eps; Test({LINENUM}16904, 'csch(20)', 4.1223072448771156734449022857046827041305996730932590E-9);
  Eps; Test({LINENUM}16905, 'csch(50)', 3.8574996959278355660346856330540251495056654459624452E-22);
  Eps; Test({LINENUM}16906, 'csch(100)', 7.4401519520416719259193916077262366747177845847535639E-44);
  Eps; Test({LINENUM}16907, 'csch(1000)', 0.0);
  Eps; Test({LINENUM}16908, 'csch(1E4)', 0.0);
  Eps; Test({LINENUM}16909, 'csch(1E5)', 0.0);
  Eps; Test({LINENUM}16910, 'csch(1E6)', 0.0);
  Eps; Test({LINENUM}16911, 'csch(1E7)', 0.0);
  Eps; Test({LINENUM}16912, 'csch(1E8)', 0.0);
  Eps; Test({LINENUM}16913, 'csch(1E9)', 0.0);
  Eps; Test({LINENUM}16914, 'csch(1E10)', 0.0);
  Eps; Test({LINENUM}16915, 'csch(1E20)', 0.0);
  Eps; Test({LINENUM}16916, 'csch(1E30)', 0.0);
  Eps; Test({LINENUM}16917, 'csch(1E40)', 0.0);
  Eps; Test({LINENUM}16918, 'csch(1E50)', 0.0);
  Eps; Test({LINENUM}16919, 'csch(1E60)', 0.0);
  Eps; Test({LINENUM}16920, 'csch(1E70)', 0.0);
  Eps; Test({LINENUM}16921, 'csch(1E80)', 0.0);
  Eps; Test({LINENUM}16922, 'csch(1E90)', 0.0);
  Eps; Test({LINENUM}16923, 'csch(1E100)', 0.0);
  Eps; Test({LINENUM}16924, 'csch(1E150)', 0.0);

  Eps(1); Test({LINENUM}16926, 'csch(-1E-10)', -9.999999999999999999983333333333333333333352777777778E9);
  Eps; Test({LINENUM}16927, 'csch(-1/10000)', -9999.999983333333352777777757275132296130952359616335332413);
  Eps; Test({LINENUM}16928, 'csch(-1/1000)', -999.9998333333527777757275134374999786639565217460263892157);
  Eps; Test({LINENUM}16929, 'csch(-1/100)', -99.99833335277757275342259771178973856982340751490977001337);
  Eps; Test({LINENUM}16930, 'csch(-1/10)', -9.983352757296109637946884127643214807091454313327291581209);
  Eps; Test({LINENUM}16931, 'csch(-1/3)', -2.945156266694814347645586003495165676460850560888490147110);
  Eps; Test({LINENUM}16932, 'csch(-0.5)', -1.919034751334943719492202878727006159587179871532971946414);
  Eps; Test({LINENUM}16933, 'csch(-1)', -0.850918128239321545133842763287175284181724660910339616990);
  Eps; Test({LINENUM}16934, 'csch(-2)', -0.275720564771783207758351482163027121249622671991258051973);
  Eps; Test({LINENUM}16935, 'csch(-5)', -0.013476505830589086655381881284337964618035455336483814697);
  Eps; Test({LINENUM}16936, 'csch(-10)', -0.000090799859712122162833736493607291370367410765671445711);
  Eps; Test({LINENUM}16937, 'csch(-20)', -4.1223072448771156734449022857046827041305996730932590E-9);
  Eps; Test({LINENUM}16938, 'csch(-50)', -3.8574996959278355660346856330540251495056654459624452E-22);
  Eps; Test({LINENUM}16939, 'csch(-100)', -7.4401519520416719259193916077262366747177845847535639E-44);
  Eps; Test({LINENUM}16940, 'csch(-1000)', 0.0);
  Eps; Test({LINENUM}16941, 'csch(-1E4)', 0.0);
  Eps; Test({LINENUM}16942, 'csch(-1E5)', 0.0);
  Eps; Test({LINENUM}16943, 'csch(-1E6)', 0.0);
  Eps; Test({LINENUM}16944, 'csch(-1E7)', 0.0);
  Eps; Test({LINENUM}16945, 'csch(-1E8)', 0.0);
  Eps; Test({LINENUM}16946, 'csch(-1E9)', 0.0);
  Eps; Test({LINENUM}16947, 'csch(-1E10)', 0.0);
  Eps; Test({LINENUM}16948, 'csch(-1E20)', 0.0);
  Eps; Test({LINENUM}16949, 'csch(-1E30)', 0.0);
  Eps; Test({LINENUM}16950, 'csch(-1E40)', 0.0);
  Eps; Test({LINENUM}16951, 'csch(-1E50)', 0.0);
  Eps; Test({LINENUM}16952, 'csch(-1E60)', 0.0);
  Eps; Test({LINENUM}16953, 'csch(-1E70)', 0.0);
  Eps; Test({LINENUM}16954, 'csch(-1E80)', 0.0);
  Eps; Test({LINENUM}16955, 'csch(-1E90)', 0.0);
  Eps; Test({LINENUM}16956, 'csch(-1E100)', 0.0);
  Eps; Test({LINENUM}16957, 'csch(-1E150)', 0.0);

  Test({LINENUM}16959, 'csch(1, 2)', failure, 'Too many arguments.');

  Test({LINENUM}16961, 'sech(0)', 1.0);

  Eps; Test({LINENUM}16963, 'sech(1/10)', 0.995020748953226491634506512599732588375439771795889118064);
  Eps; Test({LINENUM}16964, 'sech(1/3)', 0.946905253763497926558952280139811647196865554127211019972);
  Eps; Test({LINENUM}16965, 'sech(0.5)', 0.886818883970073908658897797783408562534089088712613924836);
  Eps; Test({LINENUM}16966, 'sech(1)', 0.648054273663885399574977353226150323108489312071942023037);
  Eps; Test({LINENUM}16967, 'sech(2)', 0.265802228834079692120862739819888971530782654432268069714);
  Eps; Test({LINENUM}16968, 'sech(5)', 0.013475282221304557305519138244882155290837353941700686833);
  Eps; Test({LINENUM}16969, 'sech(10)', 0.000090799859337817244080129507820478187068803766001825381);
  Eps; Test({LINENUM}16970, 'sech(20)', 4.1223072448771156384188592349186013501756684701365942E-9);
  Eps; Test({LINENUM}16971, 'sech(50)', 3.8574996959278355660346856330540251495056651589586063E-22);
  Eps; Test({LINENUM}16972, 'sech(100)', 7.4401519520416719259193916077262366747177845847535639E-44);
  Eps; Test({LINENUM}16973, 'sech(1000)', 0.0);
  Eps; Test({LINENUM}16974, 'sech(1E4)', 0.0);
  Eps; Test({LINENUM}16975, 'sech(1E5)', 0.0);
  Eps; Test({LINENUM}16976, 'sech(1E6)', 0.0);
  Eps; Test({LINENUM}16977, 'sech(1E7)', 0.0);
  Eps; Test({LINENUM}16978, 'sech(1E8)', 0.0);
  Eps; Test({LINENUM}16979, 'sech(1E9)', 0.0);
  Eps; Test({LINENUM}16980, 'sech(1E10)', 0.0);
  Eps; Test({LINENUM}16981, 'sech(1E20)', 0.0);
  Eps; Test({LINENUM}16982, 'sech(1E30)', 0.0);
  Eps; Test({LINENUM}16983, 'sech(1E40)', 0.0);
  Eps; Test({LINENUM}16984, 'sech(1E50)', 0.0);
  Eps; Test({LINENUM}16985, 'sech(1E60)', 0.0);
  Eps; Test({LINENUM}16986, 'sech(1E70)', 0.0);
  Eps; Test({LINENUM}16987, 'sech(1E80)', 0.0);
  Eps; Test({LINENUM}16988, 'sech(1E90)', 0.0);
  Eps; Test({LINENUM}16989, 'sech(1E100)', 0.0);
  Eps; Test({LINENUM}16990, 'sech(1E150)', 0.0);

  Eps; Test({LINENUM}16992, 'sech(-1/10)', 0.995020748953226491634506512599732588375439771795889118064);
  Eps; Test({LINENUM}16993, 'sech(-1/3)', 0.946905253763497926558952280139811647196865554127211019972);
  Eps; Test({LINENUM}16994, 'sech(-0.5)', 0.886818883970073908658897797783408562534089088712613924836);
  Eps; Test({LINENUM}16995, 'sech(-1)', 0.648054273663885399574977353226150323108489312071942023037);
  Eps; Test({LINENUM}16996, 'sech(-2)', 0.265802228834079692120862739819888971530782654432268069714);
  Eps; Test({LINENUM}16997, 'sech(-5)', 0.013475282221304557305519138244882155290837353941700686833);
  Eps; Test({LINENUM}16998, 'sech(-10)', 0.000090799859337817244080129507820478187068803766001825381);
  Eps; Test({LINENUM}16999, 'sech(-20)', 4.1223072448771156384188592349186013501756684701365942E-9);
  Eps; Test({LINENUM}17000, 'sech(-50)', 3.8574996959278355660346856330540251495056651589586063E-22);
  Eps; Test({LINENUM}17001, 'sech(-100)', 7.4401519520416719259193916077262366747177845847535639E-44);
  Eps; Test({LINENUM}17002, 'sech(-1000)', 0.0);
  Eps; Test({LINENUM}17003, 'sech(-1E4)', 0.0);
  Eps; Test({LINENUM}17004, 'sech(-1E5)', 0.0);
  Eps; Test({LINENUM}17005, 'sech(-1E6)', 0.0);
  Eps; Test({LINENUM}17006, 'sech(-1E7)', 0.0);
  Eps; Test({LINENUM}17007, 'sech(-1E8)', 0.0);
  Eps; Test({LINENUM}17008, 'sech(-1E9)', 0.0);
  Eps; Test({LINENUM}17009, 'sech(-1E10)', 0.0);
  Eps; Test({LINENUM}17010, 'sech(-1E20)', 0.0);
  Eps; Test({LINENUM}17011, 'sech(-1E30)', 0.0);
  Eps; Test({LINENUM}17012, 'sech(-1E40)', 0.0);
  Eps; Test({LINENUM}17013, 'sech(-1E50)', 0.0);
  Eps; Test({LINENUM}17014, 'sech(-1E60)', 0.0);
  Eps; Test({LINENUM}17015, 'sech(-1E70)', 0.0);
  Eps; Test({LINENUM}17016, 'sech(-1E80)', 0.0);
  Eps; Test({LINENUM}17017, 'sech(-1E90)', 0.0);
  Eps; Test({LINENUM}17018, 'sech(-1E100)', 0.0);
  Eps; Test({LINENUM}17019, 'sech(-1E150)', 0.0);

  Test({LINENUM}17021, 'sech(1, 2)', failure, 'Too many arguments.');

  // Inverse hyperbolic functions

  Test({LINENUM}17025, 'arcsinh(0)', 0.0);

  Eps; Test({LINENUM}17027, 'arcsinh(1/3)', 0.327450150237258443322535259988258127700524528990767451275);
  Eps; Test({LINENUM}17028, 'arcsinh(0.5)', 0.481211825059603447497758913424368423135184334385660519661);
  Eps; Test({LINENUM}17029, 'arcsinh(1)', 0.881373587019543025232609324979792309028160328261635410753);
  Eps; Test({LINENUM}17030, 'arcsinh(2)', 1.443635475178810342493276740273105269405553003156981558983);
  Eps; Test({LINENUM}17031, 'arcsinh(5)', 2.312438341272752620253562341364414383658245072646559237167);
  Eps; Test({LINENUM}17032, 'arcsinh(10)', 2.998222950297969738846595537596453476607058054877303655734);
  Eps; Test({LINENUM}17033, 'arcsinh(20)', 3.689503868988905640821653570961093329678760832868086366520);
  Eps; Test({LINENUM}17034, 'arcsinh(50)', 4.605270170991423826621239267208306413008902245692188338724);
  Eps; Test({LINENUM}17035, 'arcsinh(100)', 5.298342365610588757368825689112906302142383535156218238322);
  Eps; Test({LINENUM}17036, 'arcsinh(1000)', 7.600902709541988611523289784664939633568339120417227831061);
  Eps; Test({LINENUM}17037, 'arcsinh(1E4)', 9.903487555036128036114197992278966390016366883146161692759);
  Eps; Test({LINENUM}17038, 'arcsinh(1E5)', 12.20607264555517372950625189488004968941433749286870371371);
  Eps; Test({LINENUM}17039, 'arcsinh(1E6)', 14.50865773852446941352518075581436181373419239946619226396);
  Eps; Test({LINENUM}17040, 'arcsinh(1E7)', 16.81124283151826759754317230423935102128321060684499941968);
  Eps; Test({LINENUM}17041, 'arcsinh(1E8)', 19.11382792451231080656116375893308929138431204339049114572);
  Eps; Test({LINENUM}17042, 'arcsinh(1E9)', 21.41641301750635646582915521361745443639166353201921203847);
  Eps; Test({LINENUM}17043, 'arcsinh(1E10)', 23.71899811050040214959964666830181864408650564564798501445);
  Eps; Test({LINENUM}17044, 'arcsinh(1E11)', 26.02158320349444783361516312298618285168761650833925799048);
  Eps; Test({LINENUM}17045, 'arcsinh(1E12)', 28.32416829648849351763312982767054705928871799790543721652);
  Eps; Test({LINENUM}17046, 'arcsinh(1E50)', 115.8224018302622295103168048556763869481305745657989040557);
  Eps; Test({LINENUM}17047, 'arcsinh(1E100)', 230.9516564799645137112163775898945973281856489972375528574);
  Eps; Test({LINENUM}17048, 'arcsinh(1E150)', 346.0809111296667979121159503241128077082407234286762016591);

  Eps; Test({LINENUM}17050, 'arcsinh(-1/3)', -0.327450150237258443322535259988258127700524528990767451275);
  Eps; Test({LINENUM}17051, 'arcsinh(-0.5)', -0.481211825059603447497758913424368423135184334385660519661);
  Eps; Test({LINENUM}17052, 'arcsinh(-1)', -0.881373587019543025232609324979792309028160328261635410753);
  Eps; Test({LINENUM}17053, 'arcsinh(-2)', -1.443635475178810342493276740273105269405553003156981558983);
  Eps; Test({LINENUM}17054, 'arcsinh(-5)', -2.312438341272752620253562341364414383658245072646559237167);
  Eps; Test({LINENUM}17055, 'arcsinh(-10)', -2.998222950297969738846595537596453476607058054877303655734);
  Eps; Test({LINENUM}17056, 'arcsinh(-20)', -3.689503868988905640821653570961093329678760832868086366520);
  Eps; Test({LINENUM}17057, 'arcsinh(-50)', -4.605270170991423826621239267208306413008902245692188338724);
  Eps; Test({LINENUM}17058, 'arcsinh(-100)', -5.298342365610588757368825689112906302142383535156218238322);
  Eps; Test({LINENUM}17059, 'arcsinh(-1000)', -7.600902709541988611523289784664939633568339120417227831061);
  Eps; Test({LINENUM}17060, 'arcsinh(-1E4)', -9.903487555036128036114197992278966390016366883146161692759);
  Eps; Test({LINENUM}17061, 'arcsinh(-1E5)', -12.20607264555517372950625189488004968941433749286870371371);
  Eps; Test({LINENUM}17062, 'arcsinh(-1E6)', -14.50865773852446941352518075581436181373419239946619226396);
  Eps; Test({LINENUM}17063, 'arcsinh(-1E7)', -16.81124283151826759754317230423935102128321060684499941968);
  Eps; Test({LINENUM}17064, 'arcsinh(-1E8)', -19.11382792451231080656116375893308929138431204339049114572);
  Eps; Test({LINENUM}17065, 'arcsinh(-1E9)', -21.41641301750635646582915521361745443639166353201921203847);
  Eps; Test({LINENUM}17066, 'arcsinh(-1E10)', -23.71899811050040214959964666830181864408650564564798501445);
  Eps; Test({LINENUM}17067, 'arcsinh(-1E11)', -26.02158320349444783361516312298618285168761650833925799048);
  Eps; Test({LINENUM}17068, 'arcsinh(-1E12)', -28.32416829648849351763312982767054705928871799790543721652);
  Eps; Test({LINENUM}17069, 'arcsinh(-1E50)', -115.8224018302622295103168048556763869481305745657989040557);
  Eps; Test({LINENUM}17070, 'arcsinh(-1E100)', -230.9516564799645137112163775898945973281856489972375528574);
  Eps; Test({LINENUM}17071, 'arcsinh(-1E150)', -346.0809111296667979121159503241128077082407234286762016591);

  Test({LINENUM}17073, 'arcsinh(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}17075, 'arccosh(1)', 0.0);
  Eps; Test({LINENUM}17076, 'arccosh(1.5)', 0.9624236501192068949955178268487368462703686687713210);
  Eps; Test({LINENUM}17077, 'arccosh(2)', 1.316957896924816708625046347307968444026981971467516479768);
  Eps; Test({LINENUM}17078, 'arccosh(5/2)', 1.5667992369724110786640568625804834938620823510926588);
  Eps; Test({LINENUM}17079, 'arccosh(5)', 2.292431669561177687800787311348015431621868240015710247605);
  Eps; Test({LINENUM}17080, 'arccosh(10)', 2.993222846126380897912667713774182913083660451180980642685);
  Eps; Test({LINENUM}17081, 'arccosh(20)', 3.688253867361296667618167572032351887833155697655874258829);
  Eps; Test({LINENUM}17082, 'arccosh(50)', 4.605070170984757159450572551513062915547943483476541577357);
  Eps; Test({LINENUM}17083, 'arccosh(100)', 5.298292365610484590701666834943247168937251883140100722832);
  Eps; Test({LINENUM}17084, 'arccosh(1000)', 7.600902209541988611419123117998223748151672423825895985802);
  Eps; Test({LINENUM}17085, 'arccosh(1E4)', 9.903487550036128036114197888112299723349695294604495026092);
  Eps; Test({LINENUM}17086, 'arccosh(1E5)', 12.20607264550517372950625189487994552274767082620203655486);
  Eps; Test({LINENUM}17087, 'arccosh(1E6)', 14.50865773852396941352518075581436181363002573279952559729);
  Eps; Test({LINENUM}17088, 'arccosh(1E7)', 16.81124283151826259754317230423935102128321050267833275302);
  Eps; Test({LINENUM}17089, 'arccosh(1E8)', 19.11382792451231075656116375893308929138431204339038697905);
  Eps; Test({LINENUM}17090, 'arccosh(1E9)', 21.41641301750635646532915521361745443639166353201921203836);
  Eps; Test({LINENUM}17091, 'arccosh(1E10)', 23.71899811050040214959464666830181864408650564564798501445);
  Eps; Test({LINENUM}17092, 'arccosh(1E11)', 26.02158320349444783361511312298618285168761650833925799048);
  Eps; Test({LINENUM}17093, 'arccosh(1E12)', 28.32416829648849351763312932767054705928871799790543721652);
  Eps; Test({LINENUM}17094, 'arccosh(1E50)', 115.8224018302622295103168048556763869481305745657989040557);
  Eps; Test({LINENUM}17095, 'arccosh(1E100)', 230.9516564799645137112163775898945973281856489972375528574);
  Eps; Test({LINENUM}17096, 'arccosh(1E150)', 346.0809111296667979121159503241128077082407234286762016591);

  Test({LINENUM}17098, 'arccosh(1, 2)', failure, 'Too many arguments.');

  Test({LINENUM}17100, 'arctanh(0)', 0.0);

  Eps; Test({LINENUM}17102, 'arctanh(0.01)', 0.0100003333533347620158821075514042238870973088073443);
  Eps; Test({LINENUM}17103, 'arctanh(0.1)', 0.1003353477310755806357265520600389452633628691459591);
  Eps; Test({LINENUM}17104, 'arctanh(1/3)', 0.346573590279972654708616060729088284037750067180127627060);
  Eps; Test({LINENUM}17105, 'arctanh(1/2)', 0.549306144334054845697622618461262852323745278911374725867);
  Eps; Test({LINENUM}17106, 'arctanh(0.8)', 1.098612288668109691395245236922525704647490557822749451734);
  Eps; Test({LINENUM}17107, 'arctanh(0.9)', 1.472219489583220230004513715943926768618689630649564409268);
  Eps; Test({LINENUM}17108, 'arctanh(0.99)', 2.646652412362246197705060645934268600945552640284736249453);
  Eps; Test({LINENUM}17109, 'arctanh(0.999)', 3.800201167250200031775967267809004462263675695230499890921);
  Eps; Test({LINENUM}17110, 'arctanh(0.9999)', 4.951718775643043188629984385462344226560343044514956583248);
  Eps(1E-10); Test({LINENUM}17111, 'arctanh(0.99999)', 6.103033822758836843920183238794164167618256740528365250187);
  Eps(1E-10); Test({LINENUM}17112, 'arctanh(0.999999)', 7.254328619262047206741757083636344448506419115841743930067);
  Eps(1E-9); Test({LINENUM}17113, 'arctanh(0.9999999)', 8.405621390759131923771565318790248427277021942745416320706);
  Eps(1E-8); Test({LINENUM}17114, 'arctanh(0.99999999)', 9.556913959756155384530581858633211702983822375861884895776);
  Eps(1E-8); Test({LINENUM}17115, 'arctanh(0.999999999)', 10.70820650850317823272707760678789388490156093267314768587);
  Eps(1E-8); Test({LINENUM}17116, 'arctanh(0.9999999999)', 11.85949905522520107479794833415088848870992339574065914264);
  Eps(1E-8); Test({LINENUM}17117, 'arctanh(0.99999999999)', 13.01079160174472391680756281149309140501047492122692066190);
  Eps(1E-6); Test({LINENUM}17118, 'arctanh(0.999999999999)', 14.16208414824399675881656472633527352962352566561942433742);

  Eps; Test({LINENUM}17120, 'arctanh(-0.01)', -0.0100003333533347620158821075514042238870973088073443);
  Eps; Test({LINENUM}17121, 'arctanh(-0.1)', -0.1003353477310755806357265520600389452633628691459591);
  Eps; Test({LINENUM}17122, 'arctanh(-1/3)', -0.346573590279972654708616060729088284037750067180127627060);
  Eps; Test({LINENUM}17123, 'arctanh(-1/2)', -0.549306144334054845697622618461262852323745278911374725867);
  Eps; Test({LINENUM}17124, 'arctanh(-0.8)', -1.098612288668109691395245236922525704647490557822749451734);
  Eps; Test({LINENUM}17125, 'arctanh(-0.9)', -1.472219489583220230004513715943926768618689630649564409268);
  Eps; Test({LINENUM}17126, 'arctanh(-0.99)', -2.646652412362246197705060645934268600945552640284736249453);
  Eps; Test({LINENUM}17127, 'arctanh(-0.999)', -3.800201167250200031775967267809004462263675695230499890921);
  Eps; Test({LINENUM}17128, 'arctanh(-0.9999)', -4.951718775643043188629984385462344226560343044514956583248);
  Eps(1E-10); Test({LINENUM}17129, 'arctanh(-0.99999)', -6.103033822758836843920183238794164167618256740528365250187);
  Eps(1E-10); Test({LINENUM}17130, 'arctanh(-0.999999)', -7.254328619262047206741757083636344448506419115841743930067);
  Eps(1E-9); Test({LINENUM}17131, 'arctanh(-0.9999999)', -8.405621390759131923771565318790248427277021942745416320706);
  Eps(1E-8); Test({LINENUM}17132, 'arctanh(-0.99999999)', -9.556913959756155384530581858633211702983822375861884895776);
  Eps(1E-8); Test({LINENUM}17133, 'arctanh(-0.999999999)', -10.70820650850317823272707760678789388490156093267314768587);
  Eps(1E-8); Test({LINENUM}17134, 'arctanh(-0.9999999999)', -11.85949905522520107479794833415088848870992339574065914264);
  Eps(1E-8); Test({LINENUM}17135, 'arctanh(-0.99999999999)', -13.01079160174472391680756281149309140501047492122692066190);
  Eps(1E-6); Test({LINENUM}17136, 'arctanh(-0.999999999999)', -14.16208414824399675881656472633527352962352566561942433742);

  Test({LINENUM}17138, 'arctanh(1, 2)', failure, 'Too many arguments.');

  Eps(1E-8); Test({LINENUM}17140, 'arccoth(1.000000001)', 10.708206509003178232727077606829560551568227599346064);
  Eps(1E-8); Test({LINENUM}17141, 'arccoth(1.00000001)', 9.5569139647561553845305819002998783696504896675285515);
  Eps(1E-9); Test({LINENUM}17142, 'arccoth(1.0000001)', 8.4056214407591319237716069854569150940061886094120830);
  Eps(1E-10); Test({LINENUM}17143, 'arccoth(1.000001)', 7.2543291192620472067834237503030173651730857836244820);
  Eps(1E-10); Test({LINENUM}17144, 'arccoth(1.00001)', 6.1030388227588368855868499060858308342960841214809632);
  Eps; Test({LINENUM}17145, 'arccoth(1.0001)', 4.9517687756430848552967135521291225003700838679280988);
  Eps; Test({LINENUM}17146, 'arccoth(1.001)', 3.8007011672918667046926350505473167142921918932929646);
  Eps; Test({LINENUM}17147, 'arccoth(1.01)', 2.6516524540295378755326586166431242276072117305223223);
  Eps; Test({LINENUM}17148, 'arccoth(1.1)', 1.5222612188617114982502989901828527171422876437023053);
  Eps; Test({LINENUM}17149, 'arccoth(1.5)', 0.8047189562170501873003796666130938197628006771342588);
  Eps; Test({LINENUM}17150, 'arccoth(2)', 0.549306144334054845697622618461262852323745278911374725867);
  Eps; Test({LINENUM}17151, 'arccoth(5/2)', 0.423648930193601806855053753260327012494797085879555868362);
  Eps; Test({LINENUM}17152, 'arccoth(5)', 0.202732554054082190989006557732174568285995211731247098807);
  Eps; Test({LINENUM}17153, 'arccoth(10)', 0.100335347731075580635726552060038945263362869145959135874);
  Eps; Test({LINENUM}17154, 'arccoth(100)', 0.010000333353334762015882107551404223887097308807344335621);
  Eps; Test({LINENUM}17155, 'arccoth(1000)', 0.001000000333333533333476190587301678210755133821800480624);
  Eps; Test({LINENUM}17156, 'arccoth(1E4)', 0.000100000000333333335333333347619047730158731067821075513);
  Eps; Test({LINENUM}17157, 'arccoth(1E5)', 0.000010000000000333333333353333333334761904762015873015882);
  Eps; Test({LINENUM}17158, 'arccoth(1E6)', 1.0000000000003333333333335333333333334761904761905873E-6);
  Eps; Test({LINENUM}17159, 'arccoth(1E7)', 1.0000000000000033333333333333533333333333334761904761E-7);
  Eps; Test({LINENUM}17160, 'arccoth(1E8)', 1.0000000000000000333333333333333353333333333333334762E-8);
  Eps; Test({LINENUM}17161, 'arccoth(1E9)', 1.0000000000000000003333333333333333335333333333333333E-9);
  Eps; Test({LINENUM}17162, 'arccoth(1E10)', 1.0000000000000000000033333333333333333333533333333333E-10);
  Eps; Test({LINENUM}17163, 'arccoth(1E20)', 1.0000000000000000000000000000000000000000333333333333E-20);
  Eps; Test({LINENUM}17164, 'arccoth(1E50)', 1.000000000000000000000000000000000000000000000000000E-50);
  Eps; Test({LINENUM}17165, 'arccoth(1E100)', 1.000000000000000000000000000000000000000000000000000E-100);
  Eps; Test({LINENUM}17166, 'arccoth(1E200)', 1.000000000000000000000000000000000000000000000000000E-200);

  Eps(1E-8); Test({LINENUM}17168, 'arccoth(-1.000000001)', -10.708206509003178232727077606829560551568227599346064);
  Eps(1E-8); Test({LINENUM}17169, 'arccoth(-1.00000001)', -9.5569139647561553845305819002998783696504896675285515);
  Eps(1E-9); Test({LINENUM}17170, 'arccoth(-1.0000001)', -8.4056214407591319237716069854569150940061886094120830);
  Eps(1E-10); Test({LINENUM}17171, 'arccoth(-1.000001)', -7.2543291192620472067834237503030173651730857836244820);
  Eps(1E-10); Test({LINENUM}17172, 'arccoth(-1.00001)', -6.1030388227588368855868499060858308342960841214809632);
  Eps; Test({LINENUM}17173, 'arccoth(-1.0001)', -4.9517687756430848552967135521291225003700838679280988);
  Eps; Test({LINENUM}17174, 'arccoth(-1.001)', -3.8007011672918667046926350505473167142921918932929646);
  Eps; Test({LINENUM}17175, 'arccoth(-1.01)', -2.6516524540295378755326586166431242276072117305223223);
  Eps; Test({LINENUM}17176, 'arccoth(-1.1)', -1.5222612188617114982502989901828527171422876437023053);
  Eps; Test({LINENUM}17177, 'arccoth(-1.5)', -0.8047189562170501873003796666130938197628006771342588);
  Eps; Test({LINENUM}17178, 'arccoth(-2)', -0.549306144334054845697622618461262852323745278911374725867);
  Eps; Test({LINENUM}17179, 'arccoth(-5/2)', -0.423648930193601806855053753260327012494797085879555868362);
  Eps; Test({LINENUM}17180, 'arccoth(-5)', -0.202732554054082190989006557732174568285995211731247098807);
  Eps; Test({LINENUM}17181, 'arccoth(-10)', -0.100335347731075580635726552060038945263362869145959135874);
  Eps; Test({LINENUM}17182, 'arccoth(-100)', -0.010000333353334762015882107551404223887097308807344335621);
  Eps; Test({LINENUM}17183, 'arccoth(-1000)', -0.001000000333333533333476190587301678210755133821800480624);
  Eps; Test({LINENUM}17184, 'arccoth(-1E4)', -0.000100000000333333335333333347619047730158731067821075513);
  Eps; Test({LINENUM}17185, 'arccoth(-1E5)', -0.000010000000000333333333353333333334761904762015873015882);
  Eps; Test({LINENUM}17186, 'arccoth(-1E6)', -1.0000000000003333333333335333333333334761904761905873E-6);
  Eps; Test({LINENUM}17187, 'arccoth(-1E7)', -1.0000000000000033333333333333533333333333334761904761E-7);
  Eps; Test({LINENUM}17188, 'arccoth(-1E8)', -1.0000000000000000333333333333333353333333333333334762E-8);
  Eps; Test({LINENUM}17189, 'arccoth(-1E9)', -1.0000000000000000003333333333333333335333333333333333E-9);
  Eps; Test({LINENUM}17190, 'arccoth(-1E10)', -1.0000000000000000000033333333333333333333533333333333E-10);
  Eps; Test({LINENUM}17191, 'arccoth(-1E20)', -1.0000000000000000000000000000000000000000333333333333E-20);
  Eps; Test({LINENUM}17192, 'arccoth(-1E50)', -1.000000000000000000000000000000000000000000000000000E-50);
  Eps; Test({LINENUM}17193, 'arccoth(-1E100)', -1.000000000000000000000000000000000000000000000000000E-100);
  Eps; Test({LINENUM}17194, 'arccoth(-1E200)', -1.000000000000000000000000000000000000000000000000000E-200);

  Test({LINENUM}17196, 'arccoth(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}17198, 'arcsech(1E-10)', 23.71899811050040214959464666830181864408650564564798501445);
  Eps; Test({LINENUM}17199, 'arcsech(1E-9)', 21.41641301750635646532915521361745443639166353201921203836);
  Eps; Test({LINENUM}17200, 'arcsech(1E-8)', 19.11382792451231075656116375893308929138431204339038697905);
  Eps; Test({LINENUM}17201, 'arcsech(1E-7)', 16.81124283151826259754317230423935102128321050267833275302);
  Eps; Test({LINENUM}17202, 'arcsech(1E-6)', 14.50865773852396941352518075581436181363002573279952559729);
  Eps; Test({LINENUM}17203, 'arcsech(1E-5)', 12.20607264550517372950625189487994552274767082620203655486);
  Eps; Test({LINENUM}17204, 'arcsech(1E-4)', 9.903487550036128036114197888112299723349695294604495026092);
  Eps; Test({LINENUM}17205, 'arcsech(1E-3)', 7.600902209541988611419123117998223748151672423825895985802);
  Eps; Test({LINENUM}17206, 'arcsech(1E-2)', 5.298292365610484590701666834943247168937251883140100722832);
  Eps; Test({LINENUM}17207, 'arcsech(0.1)', 2.993222846126380897912667713774182913083660451180980642685);
  Eps; Test({LINENUM}17208, 'arcsech(0.2)', 2.292431669561177687800787311348015431621868240015710247605);
  Eps; Test({LINENUM}17209, 'arcsech(1/2)', 1.316957896924816708625046347307968444026981971467516479768);
  Eps; Test({LINENUM}17210, 'arcsech(0.99)', 0.1420144407460770687457967942996676582857380154568418);
  Eps; Test({LINENUM}17211, 'arcsech(0.9999)', 0.0141427249173917226895200406600229693658867021124513);
  Eps; Test({LINENUM}17212, 'arcsech(1)', 0.0);

  Test({LINENUM}17214, 'arcsech(1, 2)', failure, 'Too many arguments.');

  Eps; Test({LINENUM}17216, 'arccsch(1E-10)', 23.71899811050040214959964666830181864408650564564798501445);
  Eps; Test({LINENUM}17217, 'arccsch(1E-9)', 21.41641301750635646582915521361745443639166353201921203847);
  Eps; Test({LINENUM}17218, 'arccsch(1E-8)', 19.11382792451231080656116375893308929138431204339049114572);
  Eps; Test({LINENUM}17219, 'arccsch(1E-7)', 16.81124283151826759754317230423935102128321060684499941968);
  Eps; Test({LINENUM}17220, 'arccsch(1E-6)', 14.50865773852446941352518075581436181373419239946619226396);
  Eps; Test({LINENUM}17221, 'arccsch(1E-5)', 12.20607264555517372950625189488004968941433749286870371371);
  Eps; Test({LINENUM}17222, 'arccsch(1E-4)', 9.903487555036128036114197992278966390016366883146161692759);
  Eps; Test({LINENUM}17223, 'arccsch(1E-3)', 7.600902709541988611523289784664939633568339120417227831061);
  Eps; Test({LINENUM}17224, 'arccsch(1E-2)', 5.298342365610588757368825689112906302142383535156218238322);
  Eps; Test({LINENUM}17225, 'arccsch(0.1)', 2.998222950297969738846595537596453476607058054877303655734);
  Eps; Test({LINENUM}17226, 'arccsch(1/2)', 1.443635475178810342493276740273105269405553003156981558983);
  Eps; Test({LINENUM}17227, 'arccsch(1)', 0.881373587019543025232609324979792309028160328261635410753);
  Eps; Test({LINENUM}17228, 'arccsch(2)', 0.481211825059603447497758913424368423135184334385660519661);
  Eps; Test({LINENUM}17229, 'arccsch(3)', 0.327450150237258443322535259988258127700524528990767451275);
  Eps; Test({LINENUM}17230, 'arccsch(4)', 0.247466461547263452944781549788359289253766903098567696469);
  Eps; Test({LINENUM}17231, 'arccsch(5)', 0.198690110349241406474636915950206968221308794224453773021);
  Eps; Test({LINENUM}17232, 'arccsch(10)', 0.099834078899207563327303124704769443267712911708825010742);
  Eps; Test({LINENUM}17233, 'arccsch(50)', 0.019998666906609539360498967978559796611784199862956818634);
  Eps; Test({LINENUM}17234, 'arccsch(100)', 0.009999833340832886935141612163953795982217152792954153612);
  Eps; Test({LINENUM}17235, 'arccsch(1E3)', 0.000999999833333408333288690506572398262778896762002256268);
  Eps; Test({LINENUM}17236, 'arccsch(1E4)', 0.000099999999833333334083333328869047649429563268341902889);
  Eps; Test({LINENUM}17237, 'arccsch(1E5)', 9.999999999833333333340833333332886904761935143849204E-6);
  Eps; Test({LINENUM}17238, 'arccsch(1E6)', 9.999999999998333333333334083333333332886904761905066E-7);
  Eps; Test({LINENUM}17239, 'arccsch(1E7)', 9.999999999999983333333333333408333333333332886904762E-8);
  Eps; Test({LINENUM}17240, 'arccsch(1E8)', 9.999999999999999833333333333333340833333333333332887E-9);
  Eps; Test({LINENUM}17241, 'arccsch(1E9)', 9.999999999999999998333333333333333334083333333333333E-10);
  Eps; Test({LINENUM}17242, 'arccsch(1E10)', 9.999999999999999999983333333333333333333408333333333E-11);
  Eps; Test({LINENUM}17243, 'arccsch(1E50)', 1E-50);
  Eps; Test({LINENUM}17244, 'arccsch(1E100)', 1E-100);
  Eps; Test({LINENUM}17245, 'arccsch(1E200)', 1E-200);

  Eps; Test({LINENUM}17247, 'arccsch(-1E-10)', -23.71899811050040214959964666830181864408650564564798501445);
  Eps; Test({LINENUM}17248, 'arccsch(-1E-9)', -21.41641301750635646582915521361745443639166353201921203847);
  Eps; Test({LINENUM}17249, 'arccsch(-1E-8)', -19.11382792451231080656116375893308929138431204339049114572);
  Eps; Test({LINENUM}17250, 'arccsch(-1E-7)', -16.81124283151826759754317230423935102128321060684499941968);
  Eps; Test({LINENUM}17251, 'arccsch(-1E-6)', -14.50865773852446941352518075581436181373419239946619226396);
  Eps; Test({LINENUM}17252, 'arccsch(-1E-5)', -12.20607264555517372950625189488004968941433749286870371371);
  Eps; Test({LINENUM}17253, 'arccsch(-1E-4)', -9.903487555036128036114197992278966390016366883146161692759);
  Eps; Test({LINENUM}17254, 'arccsch(-1E-3)', -7.600902709541988611523289784664939633568339120417227831061);
  Eps; Test({LINENUM}17255, 'arccsch(-1E-2)', -5.298342365610588757368825689112906302142383535156218238322);
  Eps; Test({LINENUM}17256, 'arccsch(-0.1)', -2.998222950297969738846595537596453476607058054877303655734);
  Eps; Test({LINENUM}17257, 'arccsch(-1/2)', -1.443635475178810342493276740273105269405553003156981558983);
  Eps; Test({LINENUM}17258, 'arccsch(-1)', -0.881373587019543025232609324979792309028160328261635410753);
  Eps; Test({LINENUM}17259, 'arccsch(-2)', -0.481211825059603447497758913424368423135184334385660519661);
  Eps; Test({LINENUM}17260, 'arccsch(-3)', -0.327450150237258443322535259988258127700524528990767451275);
  Eps; Test({LINENUM}17261, 'arccsch(-4)', -0.247466461547263452944781549788359289253766903098567696469);
  Eps; Test({LINENUM}17262, 'arccsch(-5)', -0.198690110349241406474636915950206968221308794224453773021);
  Eps; Test({LINENUM}17263, 'arccsch(-10)', -0.099834078899207563327303124704769443267712911708825010742);
  Eps; Test({LINENUM}17264, 'arccsch(-50)', -0.019998666906609539360498967978559796611784199862956818634);
  Eps; Test({LINENUM}17265, 'arccsch(-100)', -0.009999833340832886935141612163953795982217152792954153612);
  Eps; Test({LINENUM}17266, 'arccsch(-1E3)', -0.000999999833333408333288690506572398262778896762002256268);
  Eps; Test({LINENUM}17267, 'arccsch(-1E4)', -0.000099999999833333334083333328869047649429563268341902889);
  Eps; Test({LINENUM}17268, 'arccsch(-1E5)', -9.999999999833333333340833333332886904761935143849204E-6);
  Eps; Test({LINENUM}17269, 'arccsch(-1E6)', -9.999999999998333333333334083333333332886904761905066E-7);
  Eps; Test({LINENUM}17270, 'arccsch(-1E7)', -9.999999999999983333333333333408333333333332886904762E-8);
  Eps; Test({LINENUM}17271, 'arccsch(-1E8)', -9.999999999999999833333333333333340833333333333332887E-9);
  Eps; Test({LINENUM}17272, 'arccsch(-1E9)', -9.999999999999999998333333333333333334083333333333333E-10);
  Eps; Test({LINENUM}17273, 'arccsch(-1E10)', -9.999999999999999999983333333333333333333408333333333E-11);
  Eps; Test({LINENUM}17274, 'arccsch(-1E50)', -1E-50);
  Eps; Test({LINENUM}17275, 'arccsch(-1E100)', -1E-100);
  Eps; Test({LINENUM}17276, 'arccsch(-1E200)', -1E-200);

  Test({LINENUM}17278, 'arccsch(1, 2)', failure, 'Too many arguments.');

  // Absolute value

  Test({LINENUM}17282, 'abs(0)', 0);

  Test({LINENUM}17284, 'abs(1)', 1);
  Test({LINENUM}17285, 'abs(2)', 2);
  Test({LINENUM}17286, 'abs(3)', 3);
  Test({LINENUM}17287, 'abs(4)', 4);
  Test({LINENUM}17288, 'abs(5)', 5);
  Test({LINENUM}17289, 'abs(6)', 6);
  Test({LINENUM}17290, 'abs(7)', 7);
  Test({LINENUM}17291, 'abs(8)', 8);
  Test({LINENUM}17292, 'abs(9)', 9);
  Test({LINENUM}17293, 'abs(10)', 10);
  Test({LINENUM}17294, 'abs(50)', 50);
  Test({LINENUM}17295, 'abs(100)', 100);
  Test({LINENUM}17296, 'abs(1000)', 1000);
  Test({LINENUM}17297, 'abs(10000)', 10000);
  Test({LINENUM}17298, 'abs(100000)', 100000);
  Test({LINENUM}17299, 'abs(1000000)', 1000000);
  Test({LINENUM}17300, 'abs(10000000)', 10000000);
  Test({LINENUM}17301, 'abs(100000000)', 100000000);
  Test({LINENUM}17302, 'abs(1000000000)', 1000000000);
  Test({LINENUM}17303, 'abs(10000000000)', 10000000000);
  Test({LINENUM}17304, 'abs(100000000000)', 100000000000);
  Test({LINENUM}17305, 'abs(1000000000000)', 1000000000000);
  Test({LINENUM}17306, 'abs(10000000000000)', 10000000000000);
  Test({LINENUM}17307, 'abs(100000000000000)', 100000000000000);
  Test({LINENUM}17308, 'abs(1000000000000000)', 1000000000000000);
  Test({LINENUM}17309, 'abs(10000000000000000)', 10000000000000000);
  Test({LINENUM}17310, 'abs(100000000000000000)', 100000000000000000);
  Test({LINENUM}17311, 'abs(1000000000000000000)', 1000000000000000000);
  Test({LINENUM}17312, 'abs(8000000000000000000)', 8000000000000000000);

  Test({LINENUM}17314, 'abs(-1)', 1);
  Test({LINENUM}17315, 'abs(-2)', 2);
  Test({LINENUM}17316, 'abs(-3)', 3);
  Test({LINENUM}17317, 'abs(-4)', 4);
  Test({LINENUM}17318, 'abs(-5)', 5);
  Test({LINENUM}17319, 'abs(-6)', 6);
  Test({LINENUM}17320, 'abs(-7)', 7);
  Test({LINENUM}17321, 'abs(-8)', 8);
  Test({LINENUM}17322, 'abs(-9)', 9);
  Test({LINENUM}17323, 'abs(-10)', 10);
  Test({LINENUM}17324, 'abs(-50)', 50);
  Test({LINENUM}17325, 'abs(-100)', 100);
  Test({LINENUM}17326, 'abs(-1000)', 1000);
  Test({LINENUM}17327, 'abs(-10000)', 10000);
  Test({LINENUM}17328, 'abs(-100000)', 100000);
  Test({LINENUM}17329, 'abs(-1000000)', 1000000);
  Test({LINENUM}17330, 'abs(-10000000)', 10000000);
  Test({LINENUM}17331, 'abs(-100000000)', 100000000);
  Test({LINENUM}17332, 'abs(-1000000000)', 1000000000);
  Test({LINENUM}17333, 'abs(-10000000000)', 10000000000);
  Test({LINENUM}17334, 'abs(-100000000000)', 100000000000);
  Test({LINENUM}17335, 'abs(-1000000000000)', 1000000000000);
  Test({LINENUM}17336, 'abs(-10000000000000)', 10000000000000);
  Test({LINENUM}17337, 'abs(-100000000000000)', 100000000000000);
  Test({LINENUM}17338, 'abs(-1000000000000000)', 1000000000000000);
  Test({LINENUM}17339, 'abs(-10000000000000000)', 10000000000000000);
  Test({LINENUM}17340, 'abs(-100000000000000000)', 100000000000000000);
  Test({LINENUM}17341, 'abs(-1000000000000000000)', 1000000000000000000);
  Test({LINENUM}17342, 'abs(-8000000000000000000)', 8000000000000000000);

  Test({LINENUM}17344, 'abs(1/2 - 1/2)', Rat(0, 1));

  Test({LINENUM}17346, 'abs(1/2)', Rat(1, 2));
  Test({LINENUM}17347, 'abs(7/29)', Rat(7, 29));
  Test({LINENUM}17348, 'abs(811/13)', Rat(811, 13));
  Test({LINENUM}17349, 'abs(-1/2)', Rat(1, 2));
  Test({LINENUM}17350, 'abs(-7/29)', Rat(7, 29));
  Test({LINENUM}17351, 'abs(-811/13)', Rat(811, 13));

  Test({LINENUM}17353, 'abs(0.0)', 0.0);

  Test({LINENUM}17355, 'abs(0.123456789)', 0.123456789);
  Test({LINENUM}17356, 'abs(1.0)', 1.0);
  Test({LINENUM}17357, 'abs(1.1)', 1.1);
  Test({LINENUM}17358, 'abs(1.5)', 1.5);
  Test({LINENUM}17359, 'abs(2.0)', 2.0);
  Test({LINENUM}17360, 'abs(3.0)', 3.0);
  Test({LINENUM}17361, 'abs(4.0)', 4.0);
  Test({LINENUM}17362, 'abs(5.0)', 5.0);
  Test({LINENUM}17363, 'abs(6.0)', 6.0);
  Test({LINENUM}17364, 'abs(7.0)', 7.0);
  Test({LINENUM}17365, 'abs(7.123456)', 7.123456);
  Test({LINENUM}17366, 'abs(8.0)', 8.0);
  Test({LINENUM}17367, 'abs(9.0)', 9.0);
  Test({LINENUM}17368, 'abs(10.0)', 10.0);
  Test({LINENUM}17369, 'abs(50.0)', 50.0);
  Test({LINENUM}17370, 'abs(100.0)', 100.0);
  Test({LINENUM}17371, 'abs(1000.0)', 1000.0);
  Test({LINENUM}17372, 'abs(10000.0)', 10000.0);
  Test({LINENUM}17373, 'abs(100000.0)', 100000.0);
  Test({LINENUM}17374, 'abs(1000000.0)', 1000000.0);
  Test({LINENUM}17375, 'abs(10000000.0)', 10000000.0);
  Test({LINENUM}17376, 'abs(100000000.0)', 100000000.0);
  Test({LINENUM}17377, 'abs(1000000000.0)', 1000000000.0);
  Test({LINENUM}17378, 'abs(10000000000.0)', 10000000000.0);
  Test({LINENUM}17379, 'abs(100000000000.0)', 100000000000.0);
  Test({LINENUM}17380, 'abs(1000000000000.0)', 1000000000000.0);
  Test({LINENUM}17381, 'abs(10000000000000.0)', 10000000000000.0);
  Test({LINENUM}17382, 'abs(100000000000000.0)', 100000000000000.0);
  Test({LINENUM}17383, 'abs(1000000000000000.0)', 1000000000000000.0);
  Test({LINENUM}17384, 'abs(10000000000000000.0)', 10000000000000000.0);
  Test({LINENUM}17385, 'abs(100000000000000000.0)', 100000000000000000.0);
  Test({LINENUM}17386, 'abs(1000000000000000000.0)', 1000000000000000000.0);
  Test({LINENUM}17387, 'abs(8000000000000000000.0)', 8000000000000000000.0);
  Test({LINENUM}17388, 'abs(1E50)', 1E50);
  Test({LINENUM}17389, 'abs(1E100)', 1E100);
  Test({LINENUM}17390, 'abs(1E200)', 1E200);

  Test({LINENUM}17392, 'abs(1E-50)', 1E-50);
  Test({LINENUM}17393, 'abs(1E-100)', 1E-100);
  Test({LINENUM}17394, 'abs(1E-200)', 1E-200);

  Test({LINENUM}17396, 'abs(-0.123456789)', 0.123456789);
  Test({LINENUM}17397, 'abs(-1.0)', 1.0);
  Test({LINENUM}17398, 'abs(-1.1)', 1.1);
  Test({LINENUM}17399, 'abs(-1.5)', 1.5);
  Test({LINENUM}17400, 'abs(-2.0)', 2.0);
  Test({LINENUM}17401, 'abs(-3.0)', 3.0);
  Test({LINENUM}17402, 'abs(-4.0)', 4.0);
  Test({LINENUM}17403, 'abs(-5.0)', 5.0);
  Test({LINENUM}17404, 'abs(-6.0)', 6.0);
  Test({LINENUM}17405, 'abs(-7.0)', 7.0);
  Test({LINENUM}17406, 'abs(-7.123456)', 7.123456);
  Test({LINENUM}17407, 'abs(-8.0)', 8.0);
  Test({LINENUM}17408, 'abs(-9.0)', 9.0);
  Test({LINENUM}17409, 'abs(-10.0)', 10.0);
  Test({LINENUM}17410, 'abs(-50.0)', 50.0);
  Test({LINENUM}17411, 'abs(-100.0)', 100.0);
  Test({LINENUM}17412, 'abs(-1000.0)', 1000.0);
  Test({LINENUM}17413, 'abs(-10000.0)', 10000.0);
  Test({LINENUM}17414, 'abs(-100000.0)', 100000.0);
  Test({LINENUM}17415, 'abs(-1000000.0)', 1000000.0);
  Test({LINENUM}17416, 'abs(-10000000.0)', 10000000.0);
  Test({LINENUM}17417, 'abs(-100000000.0)', 100000000.0);
  Test({LINENUM}17418, 'abs(-1000000000.0)', 1000000000.0);
  Test({LINENUM}17419, 'abs(-10000000000.0)', 10000000000.0);
  Test({LINENUM}17420, 'abs(-100000000000.0)', 100000000000.0);
  Test({LINENUM}17421, 'abs(-1000000000000.0)', 1000000000000.0);
  Test({LINENUM}17422, 'abs(-10000000000000.0)', 10000000000000.0);
  Test({LINENUM}17423, 'abs(-100000000000000.0)', 100000000000000.0);
  Test({LINENUM}17424, 'abs(-1000000000000000.0)', 1000000000000000.0);
  Test({LINENUM}17425, 'abs(-10000000000000000.0)', 10000000000000000.0);
  Test({LINENUM}17426, 'abs(-100000000000000000.0)', 100000000000000000.0);
  Test({LINENUM}17427, 'abs(-1000000000000000000.0)', 1000000000000000000.0);
  Test({LINENUM}17428, 'abs(-8000000000000000000.0)', 8000000000000000000.0);
  Test({LINENUM}17429, 'abs(-1E50)', 1E50);
  Test({LINENUM}17430, 'abs(-1E100)', 1E100);
  Test({LINENUM}17431, 'abs(-1E200)', 1E200);

  Test({LINENUM}17433, 'abs(-1E-50)', 1E-50);
  Test({LINENUM}17434, 'abs(-1E-100)', 1E-100);
  Test({LINENUM}17435, 'abs(-1E-200)', 1E-200);

  Test({LINENUM}17437, 'abs(2, 3)', failure, 'Too many arguments.');
  Test({LINENUM}17438, 'abs("cat")', failure, 'An object of type numeric entity was expected as argument 1, but an object of type string was given.');

  // Misc elementary functions

  Test({LINENUM}17442, 'sinc(0)', 1.0);
  Test({LINENUM}17443, 'sinc(0.0)', 1.0);
  Test({LINENUM}17444, 'sinc(1/2-1/2)', 1.0);

  for _i := -100 to 100 do
  begin
    if _i = 0 then
      Continue;
    _x := _i / 10;
    Eps; Test({LINENUM}17451, Format('sinc(%g)', [_x], DefaultFormatSettings), Sin(TASR(_x)) / _x);
  end;

  // Misc simple functions

  Test({LINENUM}17456, 'Heaviside(-1E50)', 0.0);
  Test({LINENUM}17457, 'Heaviside(-5.7)', 0.0);
  Test({LINENUM}17458, 'Heaviside(-5/8)', 0.0);
  Test({LINENUM}17459, 'Heaviside(-5)', 0.0);
  Test({LINENUM}17460, 'Heaviside(-3)', 0.0);
  Test({LINENUM}17461, 'Heaviside(0)', 0.5);
  Test({LINENUM}17462, 'Heaviside(1/2 - 1/2)', 0.5);
  Test({LINENUM}17463, 'Heaviside(0.0)', 0.5);
  Test({LINENUM}17464, 'Heaviside(3)', 1.0);
  Test({LINENUM}17465, 'Heaviside(5)', 1.0);
  Test({LINENUM}17466, 'Heaviside(5.3)', 1.0);
  Test({LINENUM}17467, 'Heaviside(5/3)', 1.0);
  Test({LINENUM}17468, 'Heaviside(1E50)', 1.0);

  Test({LINENUM}17470, 'Heaviside(1 + i)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}17472, 'ramp(-1E50)', 0.0);
  Test({LINENUM}17473, 'ramp(-123.456)', 0.0);
  Test({LINENUM}17474, 'ramp(-4)', 0.0);
  Test({LINENUM}17475, 'ramp(-4.5)', 0.0);
  Test({LINENUM}17476, 'ramp(-4/9)', 0.0);
  Test({LINENUM}17477, 'ramp(0)', 0.0);
  Test({LINENUM}17478, 'ramp(1/2-1/2)', 0.0);
  Test({LINENUM}17479, 'ramp(0.0)', 0.0);

  Test({LINENUM}17481, 'ramp(0.123)', 0.123);
  Test({LINENUM}17482, 'ramp(1/2)', 1/2);
  Test({LINENUM}17483, 'ramp(1)', 1.0);
  Test({LINENUM}17484, 'ramp(21)', 21.0);
  Test({LINENUM}17485, 'ramp(123)', 123.0);
  Test({LINENUM}17486, 'ramp(123.456)', 123.456);
  Test({LINENUM}17487, 'ramp(21E50)', 21E50);

  Test({LINENUM}17489, 'ramp(1 + i)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}17491, 'rect(-123E50)', 0.0);
  Test({LINENUM}17492, 'rect(-123)', 0.0);
  Test({LINENUM}17493, 'rect(-123/7)', 0.0);
  Test({LINENUM}17494, 'rect(-123.456)', 0.0);
  Test({LINENUM}17495, 'rect(-0.7)', 0.0);
  Test({LINENUM}17496, 'rect(-0.6)', 0.0);

  Test({LINENUM}17498, 'rect(-0.5)', 0.5);
  Test({LINENUM}17499, 'rect(-1/2)', 0.5);

  Test({LINENUM}17501, 'rect(-0.4)', 1.0);
  Test({LINENUM}17502, 'rect(-0.3)', 1.0);
  Test({LINENUM}17503, 'rect(-0.2)', 1.0);
  Test({LINENUM}17504, 'rect(-1/10)', 1.0);
  Test({LINENUM}17505, 'rect(0)', 1.0);
  Test({LINENUM}17506, 'rect(1/2-1/2)', 1.0);
  Test({LINENUM}17507, 'rect(0.0)', 1.0);
  Test({LINENUM}17508, 'rect(0.1)', 1.0);
  Test({LINENUM}17509, 'rect(1/10)', 1.0);
  Test({LINENUM}17510, 'rect(0.2)', 1.0);

  Test({LINENUM}17512, 'rect(1/2)', 0.5);
  Test({LINENUM}17513, 'rect(0.5)', 0.5);

  Test({LINENUM}17515, 'rect(0.6)', 0.0);
  Test({LINENUM}17516, 'rect(0.7)', 0.0);
  Test({LINENUM}17517, 'rect(4/5)', 0.0);
  Test({LINENUM}17518, 'rect(1)', 0.0);
  Test({LINENUM}17519, 'rect(2)', 0.0);
  Test({LINENUM}17520, 'rect(9)', 0.0);
  Test({LINENUM}17521, 'rect(9E50)', 0.0);

  Test({LINENUM}17523, 'rect(1 + i)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}17525, 'tri(-5E50)', 0.0);
  Test({LINENUM}17526, 'tri(-5)', 0.0);
  Test({LINENUM}17527, 'tri(-4.5)', 0.0);
  Test({LINENUM}17528, 'tri(-11/3)', 0.0);
  Test({LINENUM}17529, 'tri(-1.2)', 0.0);
  Test({LINENUM}17530, 'tri(-1.0)', 0.0);
  Test({LINENUM}17531, 'tri(-1)', 0.0);
  Eps; Test({LINENUM}17532, 'tri(-0.9)', 0.1);
  Eps; Test({LINENUM}17533, 'tri(-0.8)', 0.2);
  Eps; Test({LINENUM}17534, 'tri(-0.7)', 0.3);
  Eps; Test({LINENUM}17535, 'tri(-1/2)', 0.5);
  Eps; Test({LINENUM}17536, 'tri(-0.1)', 0.9);
  Eps; Test({LINENUM}17537, 'tri(0)', 1.0);
  Eps; Test({LINENUM}17538, 'tri(0.0)', 1.0);
  Eps; Test({LINENUM}17539, 'tri(1/2-1/2)', 1.0);
  Eps; Test({LINENUM}17540, 'tri(0.1)', 0.9);
  Eps; Test({LINENUM}17541, 'tri(0.2)', 0.8);
  Eps; Test({LINENUM}17542, 'tri(1/3)', 2/3);
  Eps; Test({LINENUM}17543, 'tri(1/2)', 0.5);
  Eps; Test({LINENUM}17544, 'tri(0.5)', 0.5);
  Eps; Test({LINENUM}17545, 'tri(0.7)', 0.3);
  Eps; Test({LINENUM}17546, 'tri(0.8)', 0.2);
  Eps; Test({LINENUM}17547, 'tri(0.99)', 0.01);
  Test({LINENUM}17548, 'tri(1)', 0.0);
  Test({LINENUM}17549, 'tri(3/4 + 1/4)', 0.0);
  Test({LINENUM}17550, 'tri(1.0)', 0.0);
  Test({LINENUM}17551, 'tri(1.1)', 0.0);
  Test({LINENUM}17552, 'tri(1.4)', 0.0);
  Test({LINENUM}17553, 'tri(3/2)', 0.0);
  Test({LINENUM}17554, 'tri(2)', 0.0);
  Test({LINENUM}17555, 'tri(123)', 0.0);
  Test({LINENUM}17556, 'tri(123E50)', 0.0);
  Test({LINENUM}17557, 'tri(1 + i)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');

  for _i := -100 to 100 do
  begin

    Test({LINENUM}17562, Format('SquareWave(0.1 + 2⋅π⋅%d)', [_i]), 1.0);
    Test({LINENUM}17563, Format('SquareWave(1.2 + 2⋅π⋅%d)', [_i]), 1.0);
    Test({LINENUM}17564, Format('SquareWave(2.5 + 2⋅π⋅%d)', [_i]), 1.0);
    Test({LINENUM}17565, Format('SquareWave(3.1415 + 2⋅π⋅%d)', [_i]), 1.0);
    Test({LINENUM}17566, Format('SquareWave(3.1416 + 2⋅π⋅%d)', [_i]), -1.0);
    Test({LINENUM}17567, Format('SquareWave(4 + 2⋅π⋅%d)', [_i]), -1.0);
    Test({LINENUM}17568, Format('SquareWave(5.5 + 2⋅π⋅%d)', [_i]), -1.0);
    Test({LINENUM}17569, Format('SquareWave(6.28 + 2⋅π⋅%d)', [_i]), -1.0);
    Test({LINENUM}17570, Format('SquareWave(7 + 2⋅π⋅%d)', [_i]), 1.0);

    Eps; Test({LINENUM}17572, Format('TriangleWave(0.1 + 2⋅π⋅%d)', [_i]), 0.0636619772367581343);
    Eps; Test({LINENUM}17573, Format('TriangleWave(1.2 + 2⋅π⋅%d)', [_i]), 0.763943726841097612);
    Eps; Test({LINENUM}17574, Format('TriangleWave(2.5 + 2⋅π⋅%d)', [_i]), 0.408450569081046642);
    Eps; Test({LINENUM}17575, Format('TriangleWave(3.1415 + 2⋅π⋅%d)', [_i]), 5.89851072432107364E-5);
    Eps; Test({LINENUM}17576, Format('TriangleWave(3.1416 + 2⋅π⋅%d)', [_i]), -4.67686999354737128E-6);
    Eps; Test({LINENUM}17577, Format('TriangleWave(4 + 2⋅π⋅%d)', [_i]), -0.546479089470325372);
    Eps; Test({LINENUM}17578, Format('TriangleWave(5.5 + 2⋅π⋅%d)', [_i]), -0.498591251978302613);
    Eps; Test({LINENUM}17579, Format('TriangleWave(6.28 + 2⋅π⋅%d)', [_i]), -0.00202782953158916535);
    Eps; Test({LINENUM}17580, Format('TriangleWave(7 + 2⋅π⋅%d)', [_i]), 0.456338406573069402);

    Eps; Test({LINENUM}17582, Format('SawtoothWave(0.1 + 2⋅π⋅%d)', [_i]), 0.0318309886183790672);
    Eps; Test({LINENUM}17583, Format('SawtoothWave(1.2 + 2⋅π⋅%d)', [_i]), 0.381971863420548806);
    Eps; Test({LINENUM}17584, Format('SawtoothWave(2.5 + 2⋅π⋅%d)', [_i]), 0.795774715459476679);
    Eps; Test({LINENUM}17585, Format('SawtoothWave(3.1415 + 2⋅π⋅%d)', [_i]), 0.999970507446378395);
    Eps; Test({LINENUM}17586, Format('SawtoothWave(3.1416 + 2⋅π⋅%d)', [_i]), -0.999997661565003226);
    Eps; Test({LINENUM}17587, Format('SawtoothWave(4 + 2⋅π⋅%d)', [_i]), -0.726760455264837314);
    Eps; Test({LINENUM}17588, Format('SawtoothWave(5.5 + 2⋅π⋅%d)', [_i]), -0.249295625989151307);
    Eps; Test({LINENUM}17589, Format('SawtoothWave(6.28 + 2⋅π⋅%d)', [_i]), -0.00101391476579458268);
    Eps; Test({LINENUM}17590, Format('SawtoothWave(7 + 2⋅π⋅%d)', [_i]), 0.228169203286534701);

  end;

  Test({LINENUM}17594, 'percent(0)', 0.0);
  Test({LINENUM}17595, 'percent(0.0)', 0.0);
  Test({LINENUM}17596, 'percent(1/2-1/2)', 0.0);
  Test({LINENUM}17597, 'percent(i-i)', TASC(0.0));
  Eps; Test({LINENUM}17598, 'percent(1)', 0.01);
  Eps; Test({LINENUM}17599, 'percent(7.5)', 0.075);
  Eps; Test({LINENUM}17600, 'percent(99)', 0.99);
  Eps; Test({LINENUM}17601, 'percent(99.9)', 0.999);
  Eps; Test({LINENUM}17602, 'percent(120)', 1.2);
  Eps; Test({LINENUM}17603, 'percent(150)', 1.5);
  Eps; Test({LINENUM}17604, 'percent(200)', 2.0);
  Eps; Test({LINENUM}17605, 'percent(1/2)', 0.005);
  Eps; Test({LINENUM}17606, 'percent(-23)', -0.23);
  Eps; Test({LINENUM}17607, 'percent(3 + i)', 0.03 + 0.01*ImaginaryUnit);
  Test({LINENUM}17608, 'percent("cat")', failure, 'An object of type number was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}17610, 'permille(0)', 0.0);
  Test({LINENUM}17611, 'permille(0.0)', 0.0);
  Test({LINENUM}17612, 'permille(1/2-1/2)', 0.0);
  Test({LINENUM}17613, 'permille(i-i)', TASC(0.0));
  Eps; Test({LINENUM}17614, 'permille(1)', 0.001);
  Eps; Test({LINENUM}17615, 'permille(500)', 0.5);
  Eps; Test({LINENUM}17616, 'permille(999)', 0.999);
  Eps; Test({LINENUM}17617, 'permille(999.9)', 0.9999);
  Eps; Test({LINENUM}17618, 'permille(1/2)', 0.0005);
  Eps; Test({LINENUM}17619, 'permille(1200)', 1.2);
  Eps; Test({LINENUM}17620, 'permille(-1500)', -1.5);
  Eps; Test({LINENUM}17621, 'permille(3 - 10⋅i)', 0.003 - 0.01*ImaginaryUnit);
  Test({LINENUM}17622, 'permille("cat")', failure, 'An object of type number was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}17624, 'degrees(0)', 0.0);
  Test({LINENUM}17625, 'degrees(0.0)', 0.0);
  Test({LINENUM}17626, 'degrees(1/2-1/2)', 0.0);
  Test({LINENUM}17627, 'degrees(i-i)', TASC(0.0));
  Eps; Test({LINENUM}17628, 'degrees(30.0)', Pi/6);
  Eps; Test({LINENUM}17629, 'degrees(45)', Pi/4);
  Eps; Test({LINENUM}17630, 'degrees(60)', Pi/3);
  Eps; Test({LINENUM}17631, 'degrees(90)', Pi/2);
  Eps; Test({LINENUM}17632, 'degrees(180)', Pi);
  Eps; Test({LINENUM}17633, 'degrees(-45)', -Pi/4);
  Eps; Test({LINENUM}17634, 'degrees(360)', 2*Pi);
  Eps; Test({LINENUM}17635, 'degrees(720)', 4*Pi);
  Eps; Test({LINENUM}17636, 'degrees(-1/2)', -Pi/360);
  Eps; Test({LINENUM}17637, 'degrees(45 + 180⋅i)', Pi/4 + Pi*ImaginaryUnit);
  Test({LINENUM}17638, 'degrees("cat")', failure, 'An object of type number was expected as argument 1, but an object of type string was given.');

  // Piecewise

  Test({LINENUM}17642, 'f ≔ x ↦ piecewise(−10, x < −5, 0, x < −2, 1, x ≤ 0, 5, otherwise);', null);
  Test({LINENUM}17643, 'f(-10)', -10);
  Test({LINENUM}17644, 'f(-8)', -10);
  Test({LINENUM}17645, 'f(-6)', -10);
  Test({LINENUM}17646, 'f(-5)', 0);
  Test({LINENUM}17647, 'f(-4)', 0);
  Test({LINENUM}17648, 'f(-3)', 0);
  Test({LINENUM}17649, 'f(-2)', 1);
  Test({LINENUM}17650, 'f(-1)', 1);
  Test({LINENUM}17651, 'f(0)', 1);
  Test({LINENUM}17652, 'f(1)', 5);
  Test({LINENUM}17653, 'f(2)', 5);
  Test({LINENUM}17654, 'f(5)', 5);
  Test({LINENUM}17655, 'f(10)', 5);

  Test({LINENUM}17657, 'f ≔ x ↦ piecewise(−x, x < 0, x, otherwise);', null);
  Test({LINENUM}17658, 'f(5)', 5);
  Test({LINENUM}17659, 'f(3.52)', 3.52);
  Test({LINENUM}17660, 'f(-1.19)', 1.19);
  Test({LINENUM}17661, 'f(3.1415)', 3.1415);
  Test({LINENUM}17662, 'f(-3.1415)', 3.1415);
  Test({LINENUM}17663, 'f(-10E20)', 10E20);
  Test({LINENUM}17664, 'f(5E-3)', 5E-3);
  Test({LINENUM}17665, 'f(0)', 0);

  Test({LINENUM}17667, 'f ≔ x ↦ piecewise(sin(x)/x, x ≠ 0, 1, otherwise);', null);
  Test({LINENUM}17668, 'f(7.5)', sinc(7.5));
  Test({LINENUM}17669, 'f(-3.2)', sinc(-3.2));
  Test({LINENUM}17670, 'f(10.201)', sinc(10.201));
  Test({LINENUM}17671, 'f(0)', 1);
  Test({LINENUM}17672, 'f(1.22)', sinc(1.22));

  Test({LINENUM}17674, 'f ≔ x ↦ piecewise(x, even(#x), "odd", otherwise);', null);
  Test({LINENUM}17675, 'f("test")', 'test');
  Test({LINENUM}17676, 'f("nargle")', 'nargle');
  Test({LINENUM}17677, 'f("hippogriff")', 'hippogriff');
  Test({LINENUM}17678, 'f("wrackspurt")', 'wrackspurt');
  Test({LINENUM}17679, 'f("thestral")', 'thestral');
  Test({LINENUM}17680, 'f("unicorn")', 'odd');
  Test({LINENUM}17681, 'f("owl")', 'odd');
  Test({LINENUM}17682, 'f("boggart")', 'odd');
  Test({LINENUM}17683, 'f("hinkypunk")', 'odd');

  Test({LINENUM}17685, 'delete(f)', success);

  // Additional tests

  Eps; Test({LINENUM}17689, 'arcsin(arccsch(coth(arccos(√(sin(e)^2 + cos(e/2)^2)))))', 0.819175391468022550591124065781692738450290782438187087868);
  Eps; Test({LINENUM}17690, 'arcsin(arccsch(10⋅coth(arccos(√(sin(e)^2 + cos(e/2)^2))))/π)', 0.025355746351156947652467226401424265852418977020860741394);


  //
  // Elementary functions of a complex variable
  //

  // Complex exponential function

  Eps; Test({LINENUM}17699, 'exp(i)', Cos(1) + ImaginaryUnit * Sin(1));
  Eps; Test({LINENUM}17700, 'exp(5⋅i)', Cos(5) + ImaginaryUnit * Sin(5));
  Eps; Test({LINENUM}17701, 'exp(2 + 5⋅i)', Exp(2) * (Cos(5) + ImaginaryUnit * Sin(5)));
  Eps; Test({LINENUM}17702, 'exp(2 + 0⋅i)', TASC(Exp(2)));
  Eps; Test({LINENUM}17703, 'exp(-3 - 7⋅i)', Exp(-3) * (Cos(-7) + ImaginaryUnit * Sin(-7)));
  Eps; Test({LINENUM}17704, 'exp(-10 + 2⋅i)', Exp(-10) * (Cos(2) + ImaginaryUnit * Sin(2)));

  Eps; Test({LINENUM}17706, 'e^i', Cos(1) + ImaginaryUnit * Sin(1));
  Eps; Test({LINENUM}17707, 'e^(5⋅i)', Cos(5) + ImaginaryUnit * Sin(5));
  Eps; Test({LINENUM}17708, 'e^(2 + 5⋅i)', Exp(2) * (Cos(5) + ImaginaryUnit * Sin(5)));
  Eps; Test({LINENUM}17709, 'e^(2 + 0⋅i)', TASC(Exp(2)));
  Eps; Test({LINENUM}17710, 'e^(-3 - 7⋅i)', Exp(-3) * (Cos(-7) + ImaginaryUnit * Sin(-7)));
  Eps; Test({LINENUM}17711, 'e^(-10 + 2⋅i)', Exp(-10) * (Cos(2) + ImaginaryUnit * Sin(2)));

  // Squares and square roots

  Eps; Test({LINENUM}17715, 'sqr(i)', TASC(-1.0));
  Eps; Test({LINENUM}17716, 'sqr(1 + i)', 2*ImaginaryUnit);
  Eps; Test({LINENUM}17717, 'sqr(3 + 0⋅i)', TASC(9));

  Eps; Test({LINENUM}17719, 'i^2', TASC(-1.0));
  Eps; Test({LINENUM}17720, '(1 + i)^2', 2*ImaginaryUnit);
  Eps; Test({LINENUM}17721, '(3 + 0⋅i)^2', TASC(9));

  Eps; Test({LINENUM}17723, 'sqrt(i)', 1/Sqrt(2) + ImaginaryUnit/Sqrt(2));
  Eps; Test({LINENUM}17724, 'sqrt(1 + i)', 1.0986841134678099660398011952406783785443931209271577437 + 0.45508986056222734130435775782246856962019037848315009258*ImaginaryUnit);
  Eps; Test({LINENUM}17725, 'sqrt(25 + 0⋅i)', TASC(5));
  Eps; Test({LINENUM}17726, 'sqrt(-25)', 5*ImaginaryUnit);

  Eps; Test({LINENUM}17728, '√i', 1/Sqrt(2) + ImaginaryUnit/Sqrt(2));
  Eps; Test({LINENUM}17729, '√(1 + i)', 1.0986841134678099660398011952406783785443931209271577437 + 0.45508986056222734130435775782246856962019037848315009258*ImaginaryUnit);
  Eps; Test({LINENUM}17730, '√(25 + 0⋅i)', TASC(5));
  Eps; Test({LINENUM}17731, '√-25', 5*ImaginaryUnit);

  Eps; Test({LINENUM}17733, 'i^(1/2)', 1/Sqrt(2) + ImaginaryUnit/Sqrt(2));
  Eps; Test({LINENUM}17734, '(1 + i)^(1/2)', 1.0986841134678099660398011952406783785443931209271577437 + 0.45508986056222734130435775782246856962019037848315009258*ImaginaryUnit);
  Eps; Test({LINENUM}17735, '(25 + 0⋅i)^(1/2)', TASC(5));
  Eps; Test({LINENUM}17736, '(-25)^(1/2)', 5*ImaginaryUnit);

  // Complex logarithm (principal branch)

  Eps; Test({LINENUM}17740, 'ln(i)', Pi/2 * ImaginaryUnit);
  Eps; Test({LINENUM}17741, 'ln(-1)', Pi * ImaginaryUnit);
  Eps; Test({LINENUM}17742, 'ln(-i)', -Pi/2 * ImaginaryUnit);
  Eps; Test({LINENUM}17743, 'ln(1 + i)', Ln(Sqrt(2)) + Pi/4 * ImaginaryUnit);
  Eps; Test({LINENUM}17744, 'ln(-3 + 5⋅i)', Ln(Sqrt(9 + 25)) + (Pi/2 + ArcTan(TASR(3/5))) * ImaginaryUnit);
  Eps; Test({LINENUM}17745, 'ln(7 + 0⋅i)', TASC(Ln(7)));
  Test({LINENUM}17746, 'ln(0 + 0⋅i)', failure);

  Eps; Test({LINENUM}17748, 'log(i)', (Pi/2 * ImaginaryUnit) / Ln(10));
  Eps; Test({LINENUM}17749, 'log(-1)', Pi * ImaginaryUnit / Ln(10));
  Eps; Test({LINENUM}17750, 'log(1 + i)', (Ln(Sqrt(2)) + Pi/4 * ImaginaryUnit) / Ln(10));

  // Complex trigonometric functions

  Eps; Test({LINENUM}17754, 'sin(i)', (Exp(-1) - Exp(1)) / (2*ImaginaryUnit));
  Eps; Test({LINENUM}17755, 'sin(-i)', (Exp(1) - Exp(-1)) / (2*ImaginaryUnit));
  Eps; Test({LINENUM}17756, 'sin(3 + 5⋅i)', 10.4725085339403922766733225368535032711264199503880135285 - 73.4606216956736763667911925050817504072139228144746370129*ImaginaryUnit);
  Eps; Test({LINENUM}17757, 'sin(-7 + 2⋅i)', -2.4717121507995191847930660445841074964134826715188594020 + 2.7342982376643447360299256844111515022153999388350714301*ImaginaryUnit);
  Eps; Test({LINENUM}17758, 'sin(12 - 17⋅i)', -6.480446741574280814816562751675775997334405457597648E6 - 1.019162625205039564741173947560666935396866815626899E7*ImaginaryUnit);
  Eps; Test({LINENUM}17759, 'sin(1.2 + 0⋅i)', TASC(Sin(TASR(1.2))));

  Eps; Test({LINENUM}17761, 'cos(i)', TASC(Exp(-1) + Exp(1)) / 2);
  Eps; Test({LINENUM}17762, 'cos(-i)', TASC(Exp(1) + Exp(-1)) / 2);
  Eps; Test({LINENUM}17763, 'cos(3 + i)', -1.527638250116543444482360747972750291068812349268136176 - 0.1658444019189788416185872450717075757108286108502988833*ImaginaryUnit);
  Eps; Test({LINENUM}17764, 'cos(4 + 11⋅i)', -19568.175398869946707199055477095770480641155637545146163 + 22656.449920921169676201134323269640536589365445079209622*ImaginaryUnit);
  Eps; Test({LINENUM}17765, 'cos(4 - 3⋅i)', -6.5806630405511564325607441265388036167112673455158977732 - 7.5815527427465443537163452865384260093875275909488528129*ImaginaryUnit);
  Eps; Test({LINENUM}17766, 'cos(-1 + 10⋅i)', 5950.47514179473124548048736467827488569449324482969186870 + 9267.31591299536549970566883311875637513437382939959314367*ImaginaryUnit);
  Eps; Test({LINENUM}17767, 'cos(-4 - 3⋅i)', -6.5806630405511564325607441265388036167112673455158977732 + 7.5815527427465443537163452865384260093875275909488528129*ImaginaryUnit);
  Eps; Test({LINENUM}17768, 'cos(-2 + 0⋅i)', TASC(Cos(TASR(-2))));

  Eps; Test({LINENUM}17770, 'tan(i)', (Exp(1) - Exp(-1)) / (Exp(1) + Exp(-1)) * ImaginaryUnit);
  Eps; Test({LINENUM}17771, 'tan(2 + 3⋅i)', -0.0037640256415042482927512211303226908396306202016580864 + 1.0032386273536098014463585978219272598077897241071003*ImaginaryUnit);
  Eps; Test({LINENUM}17772, 'tan(-3 + 8⋅i)', 6.288813022767552217559561635063193878124352096306372E-8 + 0.9999997838941594365304882856089471795699421781331468*ImaginaryUnit);
  Eps; Test({LINENUM}17773, 'tan(1 - i)', 0.27175258531951171652884372249858892070946411146177945309 - 1.0839233273386945434757520612119717213449675274753898563*ImaginaryUnit);
  Eps; Test({LINENUM}17774, 'tan(-5 - 6⋅i)', 6.685231390277019376683702646896512582735741129324424E-6 - 1.000010310898119777267799874225580594599226881899293*ImaginaryUnit);
  Eps; Test({LINENUM}17775, 'tan(2 + 0⋅i)', TASC(Tan(TASR(2))));

  Eps; Test({LINENUM}17777, 'cot(i)', - (Exp(1) + Exp(-1)) / (Exp(1) - Exp(-1)) * ImaginaryUnit);
  Eps; Test({LINENUM}17778, 'cot(1 + 4⋅i)', 0.00060990025382222757285631662318375227678357820322110016 - 0.99972064953393074903673898504649165658496308506765458*ImaginaryUnit);
  Eps; Test({LINENUM}17779, 'cot(1 - i)', 0.21762156185440268136513424360523807352075436916785404091 + 0.86801414289592494863584920891627388827343874994609327121*ImaginaryUnit);
  Eps; Test({LINENUM}17780, 'cot(-3 - 5⋅i)', 0.00002537310004454597738376334678946965675405003735598581 + 1.000087186805896774328531688104521857713161283189077*ImaginaryUnit);
  Eps; Test({LINENUM}17781, 'cot(-3 + 0⋅i)', TASC(Cot(TASR(-3))));

  Eps; Test({LINENUM}17783, 'sec(i)', 2 / TASC(Exp(-1) + Exp(1)));
  Eps; Test({LINENUM}17784, 'sec(-i)', 2 / TASC(Exp(1) + Exp(-1)));
  Eps; Test({LINENUM}17785, 'sec(1 + i)', 0.49833703055518678521380589177216953443287793247109398814 + 0.59108384172104504805039169297433507150365868212588646424*ImaginaryUnit);
  Eps; Test({LINENUM}17786, 'sec(1 - i)', 0.49833703055518678521380589177216953443287793247109398814 - 0.59108384172104504805039169297433507150365868212588646424*ImaginaryUnit);
  Eps; Test({LINENUM}17787, 'sec(10 + 3⋅i)', -0.0835873060411529967625937748938324021264546729173126659 - 0.0539267285969059792466480103788546294283694271488789939*ImaginaryUnit);
  Eps; Test({LINENUM}17788, 'sec(-10 + 0⋅i)', TASC(Sec(TASR(-10))));

  Eps; Test({LINENUM}17790, 'csc(i)', (2*ImaginaryUnit) / (Exp(-1) - Exp(1)));
  Eps; Test({LINENUM}17791, 'csc(-i)', (2*ImaginaryUnit) / (Exp(1) - Exp(-1)));
  Eps; Test({LINENUM}17792, 'csc(-3 + 6⋅i)', -0.0006996156075332090800431212818069060533041247773525188 + 0.004907919864796477925059893863335768820975451569217730*ImaginaryUnit);
  Eps; Test({LINENUM}17793, 'csc(-3 - 2⋅i)', -0.0403005788568915218751324795428698677808424754242681263 - 0.272548661462940199512498477932708924053539864495446014*ImaginaryUnit);
  Eps; Test({LINENUM}17794, 'csc(5 - i)', -0.6431695477297066634515600499073498501588588193164601810 + 0.1448992736120180695021103750974513144270986152547713184*ImaginaryUnit);
  Eps; Test({LINENUM}17795, 'csc(5 + i/3)', -0.978614127392489059539368178720765073632608455227481827 - 0.0930736608190462454007343145164138993466562018858647873*ImaginaryUnit);
  Eps; Test({LINENUM}17796, 'csc(5 + 0⋅i)', TASC(Csc(TASR(5))));

  Eps; Test({LINENUM}17798, 'sin(cos(tan(i)))', TASC(0.964700726543061195952074901399353982125433421940661228439));
  Eps; Test({LINENUM}17799, 'sin(cos(tan(i - cot(2 - sec(3 - csc(4 + i))))))', 0.99947576215872888090100797214952990182876247189561699 - 0.00052935905324478176387128818016362908140290415574362707*ImaginaryUnit);
  Eps; Test({LINENUM}17800, 'sin(1 + cos(1 + tan(1 + i)))', 1.8829620368282747450196685869873148055712749579883178254 - 0.13694664035900467885407097870352858896326713080974450332*ImaginaryUnit);

  // Inverse complex trigonometric functions

  Eps; Test({LINENUM}17804, 'arcsin(i)', 0.881373587019543025232609324979792309028160328261635410753*ImaginaryUnit);
  Eps; Test({LINENUM}17805, 'arcsin(2 + i)', 1.06344002357775205618949199708955100285184240862790481816 + 1.46935174436818527325584431736164761678780335733478817287*ImaginaryUnit);
  Eps; Test({LINENUM}17806, 'arcsin(5 - i/2)', 1.46910811624953398156705597913659617349950317338046023488 - 2.29771708098104931807962984598024793598189646836182468243*ImaginaryUnit);
  Eps; Test({LINENUM}17807, 'arcsin(2)', 1.57079632679489661923132169163975144209858469968755291048 - 1.31695789692481670862504634730796844402698197146751647976*ImaginaryUnit);
  Eps; Test({LINENUM}17808, 'arcsin(-3)', -1.5707963267948966192313216916397514420985846996875529104 + 1.7627471740390860504652186499595846180563206565232708215*ImaginaryUnit);
  Eps; Test({LINENUM}17809, 'arcsin(-2 + 3⋅i)', -0.5706527843210994007102838796856696501828032450960401365 + 1.983387029916535432347076902894039565014248302909345356*ImaginaryUnit);
  Eps; Test({LINENUM}17810, 'arcsin(-0.5 + 0⋅i)', TASC(-Pi/6));

  Eps; Test({LINENUM}17812, 'arccos(i)', 1.5707963267948966192313216916397514420985846996875529104 - 0.88137358701954302523260932497979230902816032826163541075*ImaginaryUnit);
  Eps; Test({LINENUM}17813, 'arccos(-i)', 1.5707963267948966192313216916397514420985846996875529104 + 0.88137358701954302523260932497979230902816032826163541075*ImaginaryUnit);
  Eps; Test({LINENUM}17814, 'arccos(1 - i)', 0.90455689430238136412731679566195872143109456096160506765 + 1.0612750619050356520330189162135734858067854989386336963*ImaginaryUnit);
  Eps; Test({LINENUM}17815, 'arccos(2 - 3⋅i)', 1.00014354247379721852103781195408179191578145459151277395 + 1.98338702991653543234707690289403956501424830290934535612*ImaginaryUnit);
  Eps; Test({LINENUM}17816, 'arccos(1 + i/5)', 0.43944584185260459623793162127732986501155823842528417214 - 0.45431323077957737705529998828019449802364511931170001629*ImaginaryUnit);
  Eps; Test({LINENUM}17817, 'arccos(5)', 2.292431669561177687800787311348015431621868240015710247605*ImaginaryUnit);
  Eps; Test({LINENUM}17818, 'arccos(-10)', 3.14159265358979323846264338327950288419716939937510582097 - 2.99322284612638089791266771377418291308366045118098064268*ImaginaryUnit);
  Eps; Test({LINENUM}17819, 'arccos(1/2 + 0⋅i)', TASC(Pi/3));

  Eps; Test({LINENUM}17821, 'arctan(2⋅i)', 1.5707963267948966192313216916397514420985846996875529104 + 0.54930614433405484569762261846126285232374527891137472586*ImaginaryUnit);
  Eps; Test({LINENUM}17822, 'arctan(1 + 3⋅i/2)', 1.2074751564540338108745829199556994743122637338158870059 + 0.43946447938809341314562817478393099149222788991355658925*ImaginaryUnit);
  Eps; Test({LINENUM}17823, 'arctan(2 - i/2)', 1.126556440834822348743875836675452217620757354939304685 - 0.09641562020299616723799601214481218586574992398782266413*ImaginaryUnit);
  Eps; Test({LINENUM}17824, 'arctan(-3 + 5⋅i)', -1.480869576898657483937045193011697324092097931272956850 + 0.1469466662255297520474327851547159424423449403442452953*ImaginaryUnit);
  Eps; Test({LINENUM}17825, 'arctan(10 + 0⋅i)', TASC(ArcTan(TASR(10))));

  Eps; Test({LINENUM}17827, 'arccot(i/2)', -1.570796326794896619231321691639751442098584699687552910 - 0.5493061443340548456976226184612628523237452789113747258*ImaginaryUnit);
  Eps; Test({LINENUM}17828, 'arccot(2 + 5⋅i/2)', 0.20407455187754464032852904168448859579436685461336611733 - 0.23887786125685909036318202708478274131991664762292234862*ImaginaryUnit);
  Eps; Test({LINENUM}17829, 'arccot(2 - 3⋅i)', 0.16087527719832109670070230717933065951037764777882809571 + 0.22907268296853876629588180294200276786252530497706561694*ImaginaryUnit);
  Eps; Test({LINENUM}17830, 'arccot(-7 + 5⋅i)', -0.0947400789405736593074421665595193002371703766608980189 - 0.0670659966486698360490117940769519826957337669563844177*ImaginaryUnit);
  Eps; Test({LINENUM}17831, 'arccot(-7 + 0⋅i)', TASC(ArcCot(TASR(-7))));

  Eps; Test({LINENUM}17833, 'arcsec(i)', 1.5707963267948966192313216916397514420985846996875529104 + 0.88137358701954302523260932497979230902816032826163541075*ImaginaryUnit);
  Eps; Test({LINENUM}17834, 'arcsec(1 + i)', 1.1185178796437059371676632938087720813830374192067503766 + 0.53063753095251782601650945810678674290339274946931684819*ImaginaryUnit);
  Eps; Test({LINENUM}17835, 'arcsec(1/2 + 3⋅i)', 1.5193626859652739339438753648952886006484791830697021677 + 0.31930046431291188976224194180507391249323888240415051292*ImaginaryUnit);
  Eps; Test({LINENUM}17836, 'arcsec(-5 - i)', 1.764159192442527195069605058846098455942470086412192650 - 0.03918190971789783355608094243759799949168435597631752405*ImaginaryUnit);
  Eps; Test({LINENUM}17837, 'arcsec(3 - i/3)', 1.235529175718658836097423919553647710160672671956774308 - 0.03873276540858785871745750235620968971542824863383183700*ImaginaryUnit);
  Eps; Test({LINENUM}17838, 'arcsec(1/2)', 1.316957896924816708625046347307968444026981971467516479768*ImaginaryUnit);
  Eps; Test({LINENUM}17839, 'arcsec(-1/3)', 3.14159265358979323846264338327950288419716939937510582097 - 1.76274717403908605046521864995958461805632065652327082150*ImaginaryUnit);
  Eps; Test({LINENUM}17840, 'arcsec(3 - 0⋅i)', TASC(ArcSec(TASR(3))));

  Eps; Test({LINENUM}17842, 'arccsc(i)', -0.88137358701954302523260932497979230902816032826163541075*ImaginaryUnit);
  Eps; Test({LINENUM}17843, 'arccsc(-i/2)', 1.443635475178810342493276740273105269405553003156981558983*ImaginaryUnit);
  Eps; Test({LINENUM}17844, 'arccsc(3 + 7⋅i)', 0.05137311698382470436831234274226759204172025421216207297 - 0.1205568521335811427147324807681089362882002013727558169*ImaginaryUnit);
  Eps; Test({LINENUM}17845, 'arccsc(2 - 4⋅i)', 0.09819751113349835325555360252611032475049647810490203295 + 0.1996393853895331198054284409849021595828912596512481146*ImaginaryUnit);
  Eps; Test({LINENUM}17846, 'arccsc(-2 - i/5)', -0.516970434895694519606668267057593866015099072138245782 + 0.0569159834311293664547894794781437598484977806186101116*ImaginaryUnit);
  Eps; Test({LINENUM}17847, 'arccsc(-2 + i)', -0.4015863916678060682834364455101079062076992541428898361 - 0.2156124185558296449669175649377748138325837860327226893*ImaginaryUnit);
  Eps; Test({LINENUM}17848, 'arccsc(1/5)', 1.57079632679489661923132169163975144209858469968755291048 - 2.29243166956117768780078731134801543162186824001571024760*ImaginaryUnit);
  Eps; Test({LINENUM}17849, 'arccsc(-2/3)', -1.570796326794896619231321691639751442098584699687552910 + 0.9624236501192068949955178268487368462703686687713210393*ImaginaryUnit);
  Eps; Test({LINENUM}17850, 'arccsc(-2 + 0⋅i)', TASC(-Pi/6));

  // Complex hyperbolic functions

  Eps; Test({LINENUM}17854, 'sinh(i)', 0.841470984807896506652502321630298999622563060798371065672*ImaginaryUnit);
  Eps; Test({LINENUM}17855, 'sinh(2 + i)', 1.95960104142160589707035204998935827843632016018455965880 + 3.16577851321616814674073461719190553837911076789146893228*ImaginaryUnit);
  Eps; Test({LINENUM}17856, 'sinh(3 - i)', 5.41268092317819278427941063379302764217781251017215863262 - 8.47164545430014942489758363997688120727985059927333986461*ImaginaryUnit);
  Eps; Test({LINENUM}17857, 'sinh(-1 - 3⋅i)', 1.1634403637032505573309761202206068610104166170444687227 - 0.21775955162215223162459475156621247326955061443448722968*ImaginaryUnit);
  Eps; Test({LINENUM}17858, 'sinh(-1 + 5⋅i/2)', 0.94150493327086727602538902375051252126864401328674467157 + 0.92349077604317324082303630121758402071294281076115355911*ImaginaryUnit);
  Eps; Test({LINENUM}17859, 'sinh(-1 + 0⋅i)', TASC(Sinh(TASR(-1))));

  Eps; Test({LINENUM}17861, 'cosh(i)', TASC(0.540302305868139717400936607442976603732310420617922227670));
  Eps; Test({LINENUM}17862, 'cosh(-i/2)', TASC(0.877582561890372716116281582603829651991645197109744052997));
  Eps; Test({LINENUM}17863, 'cosh(5 + 2⋅i)', -30.882235318916737411494024025148077933069785517444009293 + 67.472788440587524023225603430961109383148842533217249527*ImaginaryUnit);
  Eps; Test({LINENUM}17864, 'cosh(3 - i)', 5.43958099101976439206063642199155745864401966972358255280 - 8.42975108084994488020976990589329511266286413185248634648*ImaginaryUnit);
  Eps; Test({LINENUM}17865, 'cosh(-2 + 7⋅i)', 2.83632781278861669021310122787681746277278223612433925845 - 2.38279868337925305816574006377397602961262743125163959136*ImaginaryUnit);
  Eps; Test({LINENUM}17866, 'cosh(-2 - 3⋅i/2)', 0.26612719531354575762276492476273912918619384684594107300 + 3.6177750739401373755640400182597583467227886309770489798*ImaginaryUnit);
  Eps; Test({LINENUM}17867, 'cosh(-2 - 0⋅i)', TASC(Cosh(TASR(-2))));

  Eps; Test({LINENUM}17869, 'tanh(i)', 1.557407724654902230506974807458360173087250772381520038383*ImaginaryUnit);
  Eps; Test({LINENUM}17870, 'tanh(2 + i)', 1.014793616146633568117054175417967614163217471123533242 + 0.03381282607989669028437055972528730164018766933075587436*ImaginaryUnit);
  Eps; Test({LINENUM}17871, 'tanh(2 - 3⋅i)', 0.965385879022133124278480269394560685879729650005757773 + 0.00988437503832249372031403430350121097961813353467039031*ImaginaryUnit);
  Eps; Test({LINENUM}17872, 'tanh(-5 + 3⋅i)', -0.999912820151353808282092630139729541405660204620864 - 0.0000253686762076760324178061367074262881955607026024778*ImaginaryUnit);
  Eps; Test({LINENUM}17873, 'tanh(-5 - 3⋅i/2)', -1.00008989513790955090797973923373112862250987297077 - 0.0000128148288216646398570254799433458544569865051830556*ImaginaryUnit);
  Eps; Test({LINENUM}17874, 'tanh(-5 + 0⋅i)', TASC(Tanh(TASR(-5))));

  Eps; Test({LINENUM}17876, 'coth(i)', -0.64209261593433070300641998659426562023027811391817137910*ImaginaryUnit);
  Eps; Test({LINENUM}17877, 'coth(2 + 3⋅i)', 1.035746637764995396112758656897908320248306959923214042 + 0.01060478347033710175031689620777929239726759093914072464*ImaginaryUnit);
  Eps; Test({LINENUM}17878, 'coth(3 - 5⋅i)', 0.995845318575854129760420015871648417110265572041024444 - 0.00268579840575852564465377110128147493789774393611081331*ImaginaryUnit);
  Eps; Test({LINENUM}17879, 'coth(-1 + i)', -0.8680141428959249486358492089162738882734387499460932712 - 0.2176215618544026813651342436052380735207543691678540409*ImaginaryUnit);
  Eps; Test({LINENUM}17880, 'coth(-2 - i/5)', -1.03421152371004768222472143351272382681025692126150923 + 0.0147578658539154012710311300865370447509718498417579195*ImaginaryUnit);
  Eps; Test({LINENUM}17881, 'coth(-2 + 0⋅i)', TASC(Coth(TASR(-2))));

  Eps; Test({LINENUM}17883, 'sech(i)', TASC(1.850815717680925617911753241398650193470396655094009298835));
  Eps; Test({LINENUM}17884, 'sech(1 + i)', 0.49833703055518678521380589177216953443287793247109398814 - 0.59108384172104504805039169297433507150365868212588646424*ImaginaryUnit);
  Eps; Test({LINENUM}17885, 'sech(1 - i/2)', 0.62948578135956955432815912338170185757161889630431625195 + 0.26190434748843763385912602613483627554864495961004915373*ImaginaryUnit);
  Eps; Test({LINENUM}17886, 'sech(-5 + 3⋅i/2)', 0.00095337600687830383757118206204968467427180346898398407 + 0.013442734786700773269694515686799513138414286685751969*ImaginaryUnit);
  Eps; Test({LINENUM}17887, 'sech(-5 - 4⋅i)', -0.0088089484097708918699776567438125690868890185381799680 + 0.010198261901161904258119499040075400553200436744025406*ImaginaryUnit);
  Eps; Test({LINENUM}17888, 'sech(-5 + 0⋅i)', TASC(Sech(TASR(-5))));

  Eps; Test({LINENUM}17890, 'csch(i)', -1.18839510577812121626159945237455100352782983409796262526*ImaginaryUnit);
  Eps; Test({LINENUM}17891, 'csch(1 + 5⋅i)', 0.14489927361201806950211037509745131442709861525477131849 + 0.64316954772970666345156004990734985015885881931646018104*ImaginaryUnit);
  Eps; Test({LINENUM}17892, 'csch(1 - 5⋅i/2)', -0.5413229061900023322691170635360287966693582652982964675 + 0.5309655776211742076846759350844320866020737940438825701*ImaginaryUnit);
  Eps; Test({LINENUM}17893, 'csch(-2 + 3⋅i)', 0.2725486614629401995124984779327089240535398644954460147 - 0.04030057885689152187513247954286986778084247542426812633*ImaginaryUnit);
  Eps; Test({LINENUM}17894, 'csch(-2 - 7⋅i)', -0.2012622548368106688480845612177196901938387522524683595 + 0.1819341993953043695306632153698328079117400980687779202*ImaginaryUnit);
  Eps; Test({LINENUM}17895, 'csch(5 + 0⋅i)', TASC(Csch(TASR(5))));

  // Inverse complex hyperbolic functions

  Eps; Test({LINENUM}17899, 'arcsinh(i)', Pi/2 * ImaginaryUnit);
  Eps; Test({LINENUM}17900, 'arcsinh(-i)', -Pi/2 * ImaginaryUnit);
  Eps; Test({LINENUM}17901, 'arcsinh(i/2)', Pi/6 * ImaginaryUnit);
  Eps; Test({LINENUM}17902, 'arcsinh(i/4)', 0.252680255142078653485657436993710972252193733096838193633*ImaginaryUnit);
  Eps; Test({LINENUM}17903, 'arcsinh(1 + i)', 1.0612750619050356520330189162135734858067854989386336963 + 0.66623943249251525510400489597779272066749013872594784283*ImaginaryUnit);
  Eps; Test({LINENUM}17904, 'arcsinh(2 + 3⋅i)', 1.9686379257930962917886650952454981895207310126820105738 + 0.96465850440760279204541105949953235551977737250733165271*ImaginaryUnit);
  Eps; Test({LINENUM}17905, 'arcsinh(2 - 3⋅i/2)', 1.6224941488715938425880479489804754465917756048177896209 - 0.60651151819975475395980252363910403305626429517951463818*ImaginaryUnit);
  Eps; Test({LINENUM}17906, 'arcsinh(-1 + 2⋅i)', -1.4693517443681852732558443173616476167878033573347881728 + 1.0634400235777520561894919970895510028518424086279048181*ImaginaryUnit);
  Eps; Test({LINENUM}17907, 'arcsinh(-1 + 0⋅i)', TASC(ArcSinh(TASR(-1))));

  Eps; Test({LINENUM}17909, 'arccosh(i)', 0.88137358701954302523260932497979230902816032826163541075 + 1.5707963267948966192313216916397514420985846996875529104*ImaginaryUnit);
  Eps; Test({LINENUM}17910, 'arccosh(1 + i)', 1.0612750619050356520330189162135734858067854989386336963 + 0.90455689430238136412731679566195872143109456096160506765*ImaginaryUnit);
  Eps; Test({LINENUM}17911, 'arccosh(2 + 4⋅i)', 2.19857302792093578266601733129592145699144272657407248531 + 1.11692611683177409796864848134297958857023880515686366472*ImaginaryUnit);
  Eps; Test({LINENUM}17912, 'arccosh(2 - i/2)', 1.3618009008578457882050378978645319263266616591142375121 - 0.27775425655771396017752906244863676219669029912827933295*ImaginaryUnit);
  Eps; Test({LINENUM}17913, 'arccosh(-1 + 3⋅i/2)', 1.31695789692481670862504634730796844402698197146751647976 + 2.09439510239319549230842892218633525613144626625007054731*ImaginaryUnit);
  Eps; Test({LINENUM}17914, 'arccosh(-1 - 3⋅i/2)', 1.31695789692481670862504634730796844402698197146751647976 - 2.09439510239319549230842892218633525613144626625007054731*ImaginaryUnit);
  Eps; Test({LINENUM}17915, 'arccosh(-1)', Pi * ImaginaryUnit);
  Eps; Test({LINENUM}17916, 'arccosh(0)', Pi/2 * ImaginaryUnit);
  Eps; Test({LINENUM}17917, 'arccosh(2 + 0⋅i)', TASC(ArcCosh(TASR(2))));

  Eps; Test({LINENUM}17919, 'arctanh(i)', Pi/4 * ImaginaryUnit);
  Eps; Test({LINENUM}17920, 'arctanh(-i)', -Pi/4 * ImaginaryUnit);
  Eps; Test({LINENUM}17921, 'arctanh(2 + i)', 0.40235947810852509365018983330654690988140033856712943047 + 1.3389725222944935611241935759091442410843161725444927785*ImaginaryUnit);
  Eps; Test({LINENUM}17922, 'arctanh(2 - 3⋅i)', 0.14694666622552975204743278515471594244234494034424529538 - 1.3389725222944935611241935759091442410843161725444927785*ImaginaryUnit);
  Eps; Test({LINENUM}17923, 'arctanh(-1 + 5⋅i)', -0.0371050012795683194954383414773840816108275513464271587 + 1.38054313823871417607952773323453488984988184285850249*ImaginaryUnit);
  Eps; Test({LINENUM}17924, 'arctanh(-3 - 2⋅i)', -0.2290726829685387662958818029420027678625253049770656169 - 1.409921049596575522530619384460420782588207051908724814*ImaginaryUnit);
  Eps; Test({LINENUM}17925, 'arctanh(2)', 0.54930614433405484569762261846126285232374527891137472586 - 1.5707963267948966192313216916397514420985846996875529104*ImaginaryUnit);
  Eps; Test({LINENUM}17926, 'arctanh(-4)', -0.2554128118829953416027570481518309674390553982228841350 + 1.570796326794896619231321691639751442098584699687552910*ImaginaryUnit);
  Eps; Test({LINENUM}17927, 'arctanh(0.52 + 0⋅i)', TASC(ArcTanh(TASR(0.52))));

  Eps; Test({LINENUM}17929, 'arccoth(i)', -Pi/4 * ImaginaryUnit);
  Eps; Test({LINENUM}17930, 'arccoth(-i)', Pi/4 * ImaginaryUnit);
  Eps; Test({LINENUM}17931, 'arccoth(1 + i)', 0.40235947810852509365018983330654690988140033856712943047 - 0.55357435889704525150853273008926852003502382270071632333*ImaginaryUnit);
  Eps; Test({LINENUM}17932, 'arccoth(2 - 3⋅i)', 0.14694666622552975204743278515471594244234494034424529538 + 0.23182380450040305810712811573060720101426852714306013190*ImaginaryUnit);
  Eps; Test({LINENUM}17933, 'arccoth(-3 - 2⋅i)', -0.2290726829685387662958818029420027678625253049770656169 + 0.1608752771983210967007023071793306595103776477788280957*ImaginaryUnit);
  Eps; Test({LINENUM}17934, 'arccoth(-3 + 5⋅i)', -0.0865690591794584441708728351688739957204743888691393886 - 0.147117282555593888376466528399690255288300270591305792*ImaginaryUnit);
  Eps; Test({LINENUM}17935, 'arccoth(0.5)', 0.54930614433405484569762261846126285232374527891137472586 - 1.5707963267948966192313216916397514420985846996875529104*ImaginaryUnit);
  Eps; Test({LINENUM}17936, 'arccoth(-1/3)', -0.3465735902799726547086160607290882840377500671801276270 + 1.570796326794896619231321691639751442098584699687552910*ImaginaryUnit);
  Eps; Test({LINENUM}17937, 'arccoth(2 + 0⋅i)', TASC(ArcCoth(TASR(2))));

  Eps; Test({LINENUM}17939, 'arcsech(i)', 0.88137358701954302523260932497979230902816032826163541075 - 1.5707963267948966192313216916397514420985846996875529104*ImaginaryUnit);
  Eps; Test({LINENUM}17940, 'arcsech(2 + i)', 0.21561241855582964496691756493777481383258378603272268933 - 1.1692099351270905509478852461296435358908854455446630743*ImaginaryUnit);
  Eps; Test({LINENUM}17941, 'arcsech(3 - 5⋅i)', 0.14709131539545412329207998996527146452483240278423548659 + 1.4833957949709502506043286970054860391604491466255433102*ImaginaryUnit);
  Eps; Test({LINENUM}17942, 'arcsech(-1 + 2⋅i)', 0.39656823011232897891653433445907000552240234314617462124 - 1.7571143809027121450534918838480825107611837575945558325*ImaginaryUnit);
  Eps; Test({LINENUM}17943, 'arcsech(-1 - 4⋅i)', 0.23355169780604010274248336571769587732347980013880148526 + 1.6280825489345943146036806147142453102717643620820134808*ImaginaryUnit);
  Eps; Test({LINENUM}17944, 'arcsech(-1)', Pi * ImaginaryUnit);
  Eps; Test({LINENUM}17945, 'arcsech(2)', Pi/3 * ImaginaryUnit);
  Eps; Test({LINENUM}17946, 'arcsech(0.456 + 0⋅i)', TASC(ArcSech(TASR(0.456))));

  Eps; Test({LINENUM}17948, 'arccsch(i)', -Pi/2 * ImaginaryUnit);
  Eps; Test({LINENUM}17949, 'arccsch(-i)', Pi/2 * ImaginaryUnit);
  Eps; Test({LINENUM}17950, 'arccsch(1 + 7⋅i)', 0.02019747349130953633698187409053590539862163336505798341 - 0.1404325799868232167518917095779004230428547022063631278*ImaginaryUnit);
  Eps; Test({LINENUM}17951, 'arccsch(1 - 5⋅i)', 0.03918190971789783355608094243759799949168435597631752405 + 0.1933628656476305758382833672063470138438853867246397398*ImaginaryUnit);
  Eps; Test({LINENUM}17952, 'arccsch(-2 + 3⋅i)', -0.1573554988449854287823288407037480934887571166858323920 - 0.2299629023772078545139672970137605536403087370229113715*ImaginaryUnit);
  Eps; Test({LINENUM}17953, 'arccsch(-2 - i)', -0.3965682301123289789165343344590700055224023431461746212 + 0.1863180541078155258221701922083310686625990579070029220*ImaginaryUnit);
  Eps; Test({LINENUM}17954, 'arccsch(-2 - i)', -0.3965682301123289789165343344590700055224023431461746212 + 0.1863180541078155258221701922083310686625990579070029220*ImaginaryUnit);
  Eps; Test({LINENUM}17955, 'arccsch(-2 + 0⋅i)', TASC(ArcCsch(TASR(-2))));

  // Misc elementary functions

  Test({LINENUM}17959, 'sinc(i - i)', TASC(1.0));

  for _i := -10 to 10 do
    for _j := -10 to 10 do
    begin
      if (_i = 0) and (_j = 0) then
        Continue;
      Eps; Test({LINENUM}17966, Format('sinc(%d + %d⋅i)', [_i, _j]),
             csin(_i + _j*ImaginaryUnit) / (_i + _j*ImaginaryUnit));
    end;

  // Conjugate

  Test({LINENUM}17972, 'ConjugateTranspose(0)', 0);
  Test({LINENUM}17973, 'ConjugateTranspose(1/2-1/2)', Rat(0, 1));
  Test({LINENUM}17974, 'ConjugateTranspose(0.0)', 0.0);
  Test({LINENUM}17975, 'ConjugateTranspose(0 + 0⋅i)', TASC(0));
  Test({LINENUM}17976, 'ConjugateTranspose(3 + 4⋅i)', 3 - 4*ImaginaryUnit);
  Test({LINENUM}17977, 'ConjugateTranspose(7.2 + 9.25⋅i)', 7.2 - 9.25*ImaginaryUnit);
  Test({LINENUM}17978, 'ConjugateTranspose(1 - 10.1⋅i)', 1 + 10.1*ImaginaryUnit);
  Test({LINENUM}17979, 'ConjugateTranspose(-2 + 95⋅i)', -2 - 95*ImaginaryUnit);
  Test({LINENUM}17980, 'ConjugateTranspose(-3 - 3.14⋅i)', -3 + 3.14*ImaginaryUnit);
  Test({LINENUM}17981, 'ConjugateTranspose(3 + 0⋅i)', TASC(3));
  Test({LINENUM}17982, 'ConjugateTranspose(3.0)', 3.0);
  Test({LINENUM}17983, 'ConjugateTranspose(8/3 + 1/3)', Rat(3, 1));
  Test({LINENUM}17984, 'ConjugateTranspose(3)', 3);
  Test({LINENUM}17985, 'ConjugateTranspose(4⋅i)', -4*ImaginaryUnit);
  Test({LINENUM}17986, 'ConjugateTranspose(-4.5⋅i)', 4.5*ImaginaryUnit);

  // Absolute value

  Eps; Test({LINENUM}17990, 'abs(i)', 1.0);
  Eps; Test({LINENUM}17991, 'abs(-i)', 1.0);
  Eps; Test({LINENUM}17992, 'abs(1 + i)', Sqrt(2));
  Eps; Test({LINENUM}17993, 'abs(1 - i)', Sqrt(2));
  Eps; Test({LINENUM}17994, 'abs(-1 + i)', Sqrt(2));
  Eps; Test({LINENUM}17995, 'abs(-1 - i)', Sqrt(2));
  Eps; Test({LINENUM}17996, 'abs(3 + 4⋅i)', 5.0);
  Eps; Test({LINENUM}17997, 'abs(-3 + 0⋅i)', 3.0);

  // Real and imaginary parts. Argument. Sign.

  Test({LINENUM}18001, 'Re(3 + 7⋅i)', 3.0);
  Test({LINENUM}18002, 'Im(3 + 7⋅i)', 7.0);
  Test({LINENUM}18003, 'Re(2 − 10⋅i)', 2.0);
  Test({LINENUM}18004, 'Im(2 − 10⋅i)', -10.0);
  Test({LINENUM}18005, 'Re(−5 + i)', -5.0);
  Test({LINENUM}18006, 'Im(−5 + i)', 1.0);

  Test({LINENUM}18008, 'Re(3)', 3.0);
  Test({LINENUM}18009, 'Re(3/2)', 3/2);
  Test({LINENUM}18010, 'Re(3.)', 3.0);
  Test({LINENUM}18011, 'Re(3 + 0⋅i)', 3.0);
  Test({LINENUM}18012, 'Re(-3)', -3.0);
  Test({LINENUM}18013, 'Re(-3/2)', -3/2);
  Test({LINENUM}18014, 'Re(-3.)', -3.0);
  Test({LINENUM}18015, 'Re(-3 + 0⋅i)', -3.0);

  Test({LINENUM}18017, 'Im(3)', 0.0);
  Test({LINENUM}18018, 'Im(3/2)', 0.0);
  Test({LINENUM}18019, 'Im(3.)', 0.0);
  Test({LINENUM}18020, 'Im(3 + 0⋅i)', 0.0);
  Test({LINENUM}18021, 'Im(-3)', 0.0);
  Test({LINENUM}18022, 'Im(-3/2)', 0.0);
  Test({LINENUM}18023, 'Im(-3.)', 0.0);
  Test({LINENUM}18024, 'Im(-3 + 0⋅i)', 0.0);

  Test({LINENUM}18026, 'Re(21⋅i)', 0.0);
  Test({LINENUM}18027, 'Im(21⋅i)', 21.0);

  Test({LINENUM}18029, 'arg(-5)', Pi);
  Test({LINENUM}18030, 'arg(-5/7)', Pi);
  Test({LINENUM}18031, 'arg(-5.0)', Pi);
  Test({LINENUM}18032, 'arg(-5 + 0⋅i)', Pi);

  Test({LINENUM}18034, 'arg(-√3/2 - i/2)', -5*Pi/6);
  Test({LINENUM}18035, 'arg(-1 - i)', -3*Pi/4);
  Test({LINENUM}18036, 'arg(-1/2 - √3⋅i/2)', -2*Pi/3);
  Test({LINENUM}18037, 'arg(-i)', -Pi/2);
  Test({LINENUM}18038, 'arg(1/2 - √3⋅i/2)', -Pi/3);
  Test({LINENUM}18039, 'arg(1 - i)', -Pi/4);
  Test({LINENUM}18040, 'arg(√3/2 - i/2)', -Pi/6);

  Test({LINENUM}18042, 'arg(5)', 0.0);
  Test({LINENUM}18043, 'arg(5/8)', 0.0);
  Test({LINENUM}18044, 'arg(5.0)', 0.0);
  Test({LINENUM}18045, 'arg(5 + 0⋅i)', 0.0);

  Test({LINENUM}18047, 'arg(√3/2 + i/2)', Pi/6);
  Test({LINENUM}18048, 'arg(1 + i)', Pi/4);
  Test({LINENUM}18049, 'arg(1/2 + √3⋅i/2)', Pi/3);
  Test({LINENUM}18050, 'arg(i)', Pi/2);
  Test({LINENUM}18051, 'arg(-1/2 + √3⋅i/2)', 2*Pi/3);
  Test({LINENUM}18052, 'arg(-1 + i)', 3*Pi/4);
  Test({LINENUM}18053, 'arg(-√3/2 + i/2)', 5*Pi/6);
  Test({LINENUM}18054, 'arg(-5)', Pi);

  Test({LINENUM}18056, 'sgn(1 + i − i)', TASC(1));
  Test({LINENUM}18057, 'sgn(i)', ImaginaryUnit);
  Test({LINENUM}18058, 'sgn(-1 + i − i)', TASC(-1));
  Test({LINENUM}18059, 'sgn(-i)', -ImaginaryUnit);
  Eps; Test({LINENUM}18060, 'sgn(1 + i)', (1 + ImaginaryUnit) / Sqrt(TASR(2)));
  Eps; Test({LINENUM}18061, 'sgn(1 - i)', (1 - ImaginaryUnit) / Sqrt(TASR(2)));
  Eps; Test({LINENUM}18062, 'sgn(-1 + i)', (-1 + ImaginaryUnit) / Sqrt(TASR(2)));
  Eps; Test({LINENUM}18063, 'sgn(-1 - i)', (-1 - ImaginaryUnit) / Sqrt(TASR(2)));
  Eps; Test({LINENUM}18064, 'sgn(4 + 2⋅i)', (4 + 2*ImaginaryUnit) / Sqrt(TASR(20)));
  Eps; Test({LINENUM}18065, 'sgn(4 - 2⋅i)', (4 - 2*ImaginaryUnit) / Sqrt(TASR(20)));
  Eps; Test({LINENUM}18066, 'sgn(-4 + 2⋅i)', (-4 + 2*ImaginaryUnit) / Sqrt(TASR(20)));
  Eps; Test({LINENUM}18067, 'sgn(-4 - 2⋅i)', (-4 - 2*ImaginaryUnit) / Sqrt(TASR(20)));


  //
  // Integer functions. Rounding. Number theory.
  //

  // Parity

  for _i := -100 to 100 do
  begin
    Test({LINENUM}18078, Format('odd(%d)', [_i]), Odd(_i));
    Test({LINENUM}18079, Format('even(%d)', [_i]), not Odd(_i));
  end;

  Test({LINENUM}18082, 'odd(30410216477784515)', True);
  Test({LINENUM}18083, 'odd(30410216477784516)', False);
  Test({LINENUM}18084, 'odd(30410216477784517)', True);
  Test({LINENUM}18085, 'odd(30410216477784518)', False);
  Test({LINENUM}18086, 'odd(30410216477784519)', True);
  Test({LINENUM}18087, 'odd(30410216477784520)', False);

  Test({LINENUM}18089, 'even(30410216477784515)', False);
  Test({LINENUM}18090, 'even(30410216477784516)', True);
  Test({LINENUM}18091, 'even(30410216477784517)', False);
  Test({LINENUM}18092, 'even(30410216477784518)', True);
  Test({LINENUM}18093, 'even(30410216477784519)', False);
  Test({LINENUM}18094, 'even(30410216477784520)', True);

  Test({LINENUM}18096, 'odd(-30410216477784515)', True);
  Test({LINENUM}18097, 'odd(-30410216477784516)', False);
  Test({LINENUM}18098, 'odd(-30410216477784517)', True);
  Test({LINENUM}18099, 'odd(-30410216477784518)', False);
  Test({LINENUM}18100, 'odd(-30410216477784519)', True);
  Test({LINENUM}18101, 'odd(-30410216477784520)', False);

  Test({LINENUM}18103, 'even(-30410216477784515)', False);
  Test({LINENUM}18104, 'even(-30410216477784516)', True);
  Test({LINENUM}18105, 'even(-30410216477784517)', False);
  Test({LINENUM}18106, 'even(-30410216477784518)', True);
  Test({LINENUM}18107, 'even(-30410216477784519)', False);
  Test({LINENUM}18108, 'even(-30410216477784520)', True);

  Test({LINENUM}18110, 'odd(2.4)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}18111, 'odd(2.4 + i)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}18112, 'odd(2, 4)', failure, 'Too many arguments.');
  Test({LINENUM}18113, 'odd()', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}18115, 'even(2.4)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}18116, 'even(2.4 + i)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}18117, 'even(2, 4)', failure, 'Too many arguments.');
  Test({LINENUM}18118, 'even()', failure, 'Too few arguments. A required argument of type integer is missing.');

  // Round

  Test({LINENUM}18122, 'round(-5.0)', -5);
  Test({LINENUM}18123, 'round(-4.9)', -5);
  Test({LINENUM}18124, 'round(-4.8)', -5);
  Test({LINENUM}18125, 'round(-4.7)', -5);
  Test({LINENUM}18126, 'round(-4.6)', -5);
  Test({LINENUM}18127, 'round(-4.5)', -4);
  Test({LINENUM}18128, 'round(-4.4)', -4);
  Test({LINENUM}18129, 'round(-4.3)', -4);
  Test({LINENUM}18130, 'round(-4.2)', -4);
  Test({LINENUM}18131, 'round(-4.1)', -4);
  Test({LINENUM}18132, 'round(-4.0)', -4);
  Test({LINENUM}18133, 'round(-3.9)', -4);
  Test({LINENUM}18134, 'round(-3.8)', -4);
  Test({LINENUM}18135, 'round(-3.7)', -4);
  Test({LINENUM}18136, 'round(-3.6)', -4);
  Test({LINENUM}18137, 'round(-3.5)', -4);
  Test({LINENUM}18138, 'round(-3.4)', -3);
  Test({LINENUM}18139, 'round(-3.3)', -3);
  Test({LINENUM}18140, 'round(-3.2)', -3);
  Test({LINENUM}18141, 'round(-3.1)', -3);
  Test({LINENUM}18142, 'round(-3.0)', -3);
  Test({LINENUM}18143, 'round(-2.9)', -3);
  Test({LINENUM}18144, 'round(-2.8)', -3);
  Test({LINENUM}18145, 'round(-2.7)', -3);
  Test({LINENUM}18146, 'round(-2.6)', -3);
  Test({LINENUM}18147, 'round(-2.5)', -2);
  Test({LINENUM}18148, 'round(-2.4)', -2);
  Test({LINENUM}18149, 'round(-2.3)', -2);
  Test({LINENUM}18150, 'round(-2.2)', -2);
  Test({LINENUM}18151, 'round(-2.1)', -2);
  Test({LINENUM}18152, 'round(-2.0)', -2);
  Test({LINENUM}18153, 'round(-1.9)', -2);
  Test({LINENUM}18154, 'round(-1.8)', -2);
  Test({LINENUM}18155, 'round(-1.7)', -2);
  Test({LINENUM}18156, 'round(-1.6)', -2);
  Test({LINENUM}18157, 'round(-1.5)', -2);
  Test({LINENUM}18158, 'round(-1.4)', -1);
  Test({LINENUM}18159, 'round(-1.3)', -1);
  Test({LINENUM}18160, 'round(-1.2)', -1);
  Test({LINENUM}18161, 'round(-1.1)', -1);
  Test({LINENUM}18162, 'round(-1.0)', -1);
  Test({LINENUM}18163, 'round(-0.9)', -1);
  Test({LINENUM}18164, 'round(-0.8)', -1);
  Test({LINENUM}18165, 'round(-0.7)', -1);
  Test({LINENUM}18166, 'round(-0.6)', -1);
  Test({LINENUM}18167, 'round(-0.5)', -0);
  Test({LINENUM}18168, 'round(-0.4)', -0);
  Test({LINENUM}18169, 'round(-0.3)', -0);
  Test({LINENUM}18170, 'round(-0.2)', -0);
  Test({LINENUM}18171, 'round(-0.1)', -0);
  Test({LINENUM}18172, 'round(0)', 0);
  Test({LINENUM}18173, 'round(0.0)', 0);
  Test({LINENUM}18174, 'round(0.1)', 0);
  Test({LINENUM}18175, 'round(0.2)', 0);
  Test({LINENUM}18176, 'round(0.3)', 0);
  Test({LINENUM}18177, 'round(0.4)', 0);
  Test({LINENUM}18178, 'round(0.5)', 0);
  Test({LINENUM}18179, 'round(0.6)', 1);
  Test({LINENUM}18180, 'round(0.7)', 1);
  Test({LINENUM}18181, 'round(0.8)', 1);
  Test({LINENUM}18182, 'round(0.9)', 1);
  Test({LINENUM}18183, 'round(1.0)', 1);
  Test({LINENUM}18184, 'round(1.1)', 1);
  Test({LINENUM}18185, 'round(1.2)', 1);
  Test({LINENUM}18186, 'round(1.3)', 1);
  Test({LINENUM}18187, 'round(1.4)', 1);
  Test({LINENUM}18188, 'round(1.5)', 2);
  Test({LINENUM}18189, 'round(1.6)', 2);
  Test({LINENUM}18190, 'round(1.7)', 2);
  Test({LINENUM}18191, 'round(1.8)', 2);
  Test({LINENUM}18192, 'round(1.9)', 2);
  Test({LINENUM}18193, 'round(2.0)', 2);
  Test({LINENUM}18194, 'round(2.1)', 2);
  Test({LINENUM}18195, 'round(2.2)', 2);
  Test({LINENUM}18196, 'round(2.3)', 2);
  Test({LINENUM}18197, 'round(2.4)', 2);
  Test({LINENUM}18198, 'round(2.5)', 2);
  Test({LINENUM}18199, 'round(2.6)', 3);
  Test({LINENUM}18200, 'round(2.7)', 3);
  Test({LINENUM}18201, 'round(2.8)', 3);
  Test({LINENUM}18202, 'round(2.9)', 3);
  Test({LINENUM}18203, 'round(3.0)', 3);
  Test({LINENUM}18204, 'round(3.1)', 3);
  Test({LINENUM}18205, 'round(3.2)', 3);
  Test({LINENUM}18206, 'round(3.3)', 3);
  Test({LINENUM}18207, 'round(3.4)', 3);
  Test({LINENUM}18208, 'round(3.5)', 4);
  Test({LINENUM}18209, 'round(3.6)', 4);
  Test({LINENUM}18210, 'round(3.7)', 4);
  Test({LINENUM}18211, 'round(3.8)', 4);
  Test({LINENUM}18212, 'round(3.9)', 4);
  Test({LINENUM}18213, 'round(4.0)', 4);
  Test({LINENUM}18214, 'round(4.1)', 4);
  Test({LINENUM}18215, 'round(4.2)', 4);
  Test({LINENUM}18216, 'round(4.3)', 4);
  Test({LINENUM}18217, 'round(4.4)', 4);
  Test({LINENUM}18218, 'round(4.5)', 4);
  Test({LINENUM}18219, 'round(4.6)', 5);
  Test({LINENUM}18220, 'round(4.7)', 5);
  Test({LINENUM}18221, 'round(4.8)', 5);
  Test({LINENUM}18222, 'round(4.9)', 5);
  Test({LINENUM}18223, 'round(5.0)', 5);

  Test({LINENUM}18225, 'round(5)', 5);

  Test({LINENUM}18227, 'round(5/2)', 2);
  Test({LINENUM}18228, 'round(5/3)', 2);
  Test({LINENUM}18229, 'round(5/4)', 1);

  Test({LINENUM}18231, 'round(123456789.123456)', 123456789);
  Test({LINENUM}18232, 'round(123456789.987564231)', 123456790);
  Test({LINENUM}18233, 'round(-123456789.123456)', -123456789);
  Test({LINENUM}18234, 'round(-123456789.987564231)', -123456790);

  Test({LINENUM}18236, 'round(1234567891234567)', 1234567891234567);
  Test({LINENUM}18237, 'round(1234567891234567.2)', 1234567891234567);
  Test({LINENUM}18238, 'round(1234567891234567.5)', 1234567891234568);
  Test({LINENUM}18239, 'round(1234567891234567.8)', 1234567891234568);
  Test({LINENUM}18240, 'round(1234567891234568)', 1234567891234568);

  Test({LINENUM}18242, 'round(-1234567891234567)', -1234567891234567);
  Test({LINENUM}18243, 'round(-1234567891234567.2)', -1234567891234567);
  Test({LINENUM}18244, 'round(-1234567891234567.5)', -1234567891234568);
  Test({LINENUM}18245, 'round(-1234567891234567.8)', -1234567891234568);
  Test({LINENUM}18246, 'round(-1234567891234568)', -1234567891234568);

  Test({LINENUM}18248, 'round(1E50)', failure, 'Invalid floating point operation');

  Test({LINENUM}18250, 'round(π)', 3);

  Test({LINENUM}18252, 'round(1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}18253, 'round("rectangle")', failure, 'An object of type real number was expected as argument 1, but an object of type string was given.');

  // Floor

  Test({LINENUM}18257, 'floor(-5.0)', -5);
  Test({LINENUM}18258, 'floor(-4.9)', -5);
  Test({LINENUM}18259, 'floor(-4.8)', -5);
  Test({LINENUM}18260, 'floor(-4.7)', -5);
  Test({LINENUM}18261, 'floor(-4.6)', -5);
  Test({LINENUM}18262, 'floor(-4.5)', -5);
  Test({LINENUM}18263, 'floor(-4.4)', -5);
  Test({LINENUM}18264, 'floor(-4.3)', -5);
  Test({LINENUM}18265, 'floor(-4.2)', -5);
  Test({LINENUM}18266, 'floor(-4.1)', -5);
  Test({LINENUM}18267, 'floor(-4.0)', -4);
  Test({LINENUM}18268, 'floor(-3.9)', -4);
  Test({LINENUM}18269, 'floor(-3.8)', -4);
  Test({LINENUM}18270, 'floor(-3.7)', -4);
  Test({LINENUM}18271, 'floor(-3.6)', -4);
  Test({LINENUM}18272, 'floor(-3.5)', -4);
  Test({LINENUM}18273, 'floor(-3.4)', -4);
  Test({LINENUM}18274, 'floor(-3.3)', -4);
  Test({LINENUM}18275, 'floor(-3.2)', -4);
  Test({LINENUM}18276, 'floor(-3.1)', -4);
  Test({LINENUM}18277, 'floor(-3.0)', -3);
  Test({LINENUM}18278, 'floor(-2.9)', -3);
  Test({LINENUM}18279, 'floor(-2.8)', -3);
  Test({LINENUM}18280, 'floor(-2.7)', -3);
  Test({LINENUM}18281, 'floor(-2.6)', -3);
  Test({LINENUM}18282, 'floor(-2.5)', -3);
  Test({LINENUM}18283, 'floor(-2.4)', -3);
  Test({LINENUM}18284, 'floor(-2.3)', -3);
  Test({LINENUM}18285, 'floor(-2.2)', -3);
  Test({LINENUM}18286, 'floor(-2.1)', -3);
  Test({LINENUM}18287, 'floor(-2.0)', -2);
  Test({LINENUM}18288, 'floor(-1.9)', -2);
  Test({LINENUM}18289, 'floor(-1.8)', -2);
  Test({LINENUM}18290, 'floor(-1.7)', -2);
  Test({LINENUM}18291, 'floor(-1.6)', -2);
  Test({LINENUM}18292, 'floor(-1.5)', -2);
  Test({LINENUM}18293, 'floor(-1.4)', -2);
  Test({LINENUM}18294, 'floor(-1.3)', -2);
  Test({LINENUM}18295, 'floor(-1.2)', -2);
  Test({LINENUM}18296, 'floor(-1.1)', -2);
  Test({LINENUM}18297, 'floor(-1.0)', -1);
  Test({LINENUM}18298, 'floor(-0.9)', -1);
  Test({LINENUM}18299, 'floor(-0.8)', -1);
  Test({LINENUM}18300, 'floor(-0.7)', -1);
  Test({LINENUM}18301, 'floor(-0.6)', -1);
  Test({LINENUM}18302, 'floor(-0.5)', -1);
  Test({LINENUM}18303, 'floor(-0.4)', -1);
  Test({LINENUM}18304, 'floor(-0.3)', -1);
  Test({LINENUM}18305, 'floor(-0.2)', -1);
  Test({LINENUM}18306, 'floor(-0.1)', -1);
  Test({LINENUM}18307, 'floor(0)', 0);
  Test({LINENUM}18308, 'floor(0.0)', 0);
  Test({LINENUM}18309, 'floor(0.1)', 0);
  Test({LINENUM}18310, 'floor(0.2)', 0);
  Test({LINENUM}18311, 'floor(0.3)', 0);
  Test({LINENUM}18312, 'floor(0.4)', 0);
  Test({LINENUM}18313, 'floor(0.5)', 0);
  Test({LINENUM}18314, 'floor(0.6)', 0);
  Test({LINENUM}18315, 'floor(0.7)', 0);
  Test({LINENUM}18316, 'floor(0.8)', 0);
  Test({LINENUM}18317, 'floor(0.9)', 0);
  Test({LINENUM}18318, 'floor(1.0)', 1);
  Test({LINENUM}18319, 'floor(1.1)', 1);
  Test({LINENUM}18320, 'floor(1.2)', 1);
  Test({LINENUM}18321, 'floor(1.3)', 1);
  Test({LINENUM}18322, 'floor(1.4)', 1);
  Test({LINENUM}18323, 'floor(1.5)', 1);
  Test({LINENUM}18324, 'floor(1.6)', 1);
  Test({LINENUM}18325, 'floor(1.7)', 1);
  Test({LINENUM}18326, 'floor(1.8)', 1);
  Test({LINENUM}18327, 'floor(1.9)', 1);
  Test({LINENUM}18328, 'floor(2.0)', 2);
  Test({LINENUM}18329, 'floor(2.1)', 2);
  Test({LINENUM}18330, 'floor(2.2)', 2);
  Test({LINENUM}18331, 'floor(2.3)', 2);
  Test({LINENUM}18332, 'floor(2.4)', 2);
  Test({LINENUM}18333, 'floor(2.5)', 2);
  Test({LINENUM}18334, 'floor(2.6)', 2);
  Test({LINENUM}18335, 'floor(2.7)', 2);
  Test({LINENUM}18336, 'floor(2.8)', 2);
  Test({LINENUM}18337, 'floor(2.9)', 2);
  Test({LINENUM}18338, 'floor(3.0)', 3);
  Test({LINENUM}18339, 'floor(3.1)', 3);
  Test({LINENUM}18340, 'floor(3.2)', 3);
  Test({LINENUM}18341, 'floor(3.3)', 3);
  Test({LINENUM}18342, 'floor(3.4)', 3);
  Test({LINENUM}18343, 'floor(3.5)', 3);
  Test({LINENUM}18344, 'floor(3.6)', 3);
  Test({LINENUM}18345, 'floor(3.7)', 3);
  Test({LINENUM}18346, 'floor(3.8)', 3);
  Test({LINENUM}18347, 'floor(3.9)', 3);
  Test({LINENUM}18348, 'floor(4.0)', 4);
  Test({LINENUM}18349, 'floor(4.1)', 4);
  Test({LINENUM}18350, 'floor(4.2)', 4);
  Test({LINENUM}18351, 'floor(4.3)', 4);
  Test({LINENUM}18352, 'floor(4.4)', 4);
  Test({LINENUM}18353, 'floor(4.5)', 4);
  Test({LINENUM}18354, 'floor(4.6)', 4);
  Test({LINENUM}18355, 'floor(4.7)', 4);
  Test({LINENUM}18356, 'floor(4.8)', 4);
  Test({LINENUM}18357, 'floor(4.9)', 4);
  Test({LINENUM}18358, 'floor(5.0)', 5);

  Test({LINENUM}18360, 'floor(5)', 5);

  Test({LINENUM}18362, 'floor(5/2)', 2);
  Test({LINENUM}18363, 'floor(5/3)', 1);
  Test({LINENUM}18364, 'floor(5/4)', 1);

  Test({LINENUM}18366, 'floor(123456789.123456)', 123456789);
  Test({LINENUM}18367, 'floor(123456789.987564231)', 123456789);
  Test({LINENUM}18368, 'floor(-123456789.123456)', -123456790);
  Test({LINENUM}18369, 'floor(-123456789.987564231)', -123456790);

  Test({LINENUM}18371, 'floor(1234567891234567)', 1234567891234567);
  Test({LINENUM}18372, 'floor(1234567891234567.2)', 1234567891234567);
  Test({LINENUM}18373, 'floor(1234567891234567.5)', 1234567891234567);
  Test({LINENUM}18374, 'floor(1234567891234567.8)', 1234567891234567);
  Test({LINENUM}18375, 'floor(1234567891234568)', 1234567891234568);

  Test({LINENUM}18377, 'floor(-1234567891234567)', -1234567891234567);
  Test({LINENUM}18378, 'floor(-1234567891234567.2)', -1234567891234568);
  Test({LINENUM}18379, 'floor(-1234567891234567.5)', -1234567891234568);
  Test({LINENUM}18380, 'floor(-1234567891234567.8)', -1234567891234568);
  Test({LINENUM}18381, 'floor(-1234567891234568)', -1234567891234568);

  Test({LINENUM}18383, 'floor(1E50)', failure, 'Invalid floating point operation');

  Test({LINENUM}18385, 'floor(π)', 3);

  Test({LINENUM}18387, 'floor(1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}18388, 'floor("rectangle")', failure, 'An object of type real number was expected as argument 1, but an object of type string was given.');

  // Ceiling

  Test({LINENUM}18392, 'ceil(-5.0)', -5);
  Test({LINENUM}18393, 'ceil(-4.9)', -4);
  Test({LINENUM}18394, 'ceil(-4.8)', -4);
  Test({LINENUM}18395, 'ceil(-4.7)', -4);
  Test({LINENUM}18396, 'ceil(-4.6)', -4);
  Test({LINENUM}18397, 'ceil(-4.5)', -4);
  Test({LINENUM}18398, 'ceil(-4.4)', -4);
  Test({LINENUM}18399, 'ceil(-4.3)', -4);
  Test({LINENUM}18400, 'ceil(-4.2)', -4);
  Test({LINENUM}18401, 'ceil(-4.1)', -4);
  Test({LINENUM}18402, 'ceil(-4.0)', -4);
  Test({LINENUM}18403, 'ceil(-3.9)', -3);
  Test({LINENUM}18404, 'ceil(-3.8)', -3);
  Test({LINENUM}18405, 'ceil(-3.7)', -3);
  Test({LINENUM}18406, 'ceil(-3.6)', -3);
  Test({LINENUM}18407, 'ceil(-3.5)', -3);
  Test({LINENUM}18408, 'ceil(-3.4)', -3);
  Test({LINENUM}18409, 'ceil(-3.3)', -3);
  Test({LINENUM}18410, 'ceil(-3.2)', -3);
  Test({LINENUM}18411, 'ceil(-3.1)', -3);
  Test({LINENUM}18412, 'ceil(-3.0)', -3);
  Test({LINENUM}18413, 'ceil(-2.9)', -2);
  Test({LINENUM}18414, 'ceil(-2.8)', -2);
  Test({LINENUM}18415, 'ceil(-2.7)', -2);
  Test({LINENUM}18416, 'ceil(-2.6)', -2);
  Test({LINENUM}18417, 'ceil(-2.5)', -2);
  Test({LINENUM}18418, 'ceil(-2.4)', -2);
  Test({LINENUM}18419, 'ceil(-2.3)', -2);
  Test({LINENUM}18420, 'ceil(-2.2)', -2);
  Test({LINENUM}18421, 'ceil(-2.1)', -2);
  Test({LINENUM}18422, 'ceil(-2.0)', -2);
  Test({LINENUM}18423, 'ceil(-1.9)', -1);
  Test({LINENUM}18424, 'ceil(-1.8)', -1);
  Test({LINENUM}18425, 'ceil(-1.7)', -1);
  Test({LINENUM}18426, 'ceil(-1.6)', -1);
  Test({LINENUM}18427, 'ceil(-1.5)', -1);
  Test({LINENUM}18428, 'ceil(-1.4)', -1);
  Test({LINENUM}18429, 'ceil(-1.3)', -1);
  Test({LINENUM}18430, 'ceil(-1.2)', -1);
  Test({LINENUM}18431, 'ceil(-1.1)', -1);
  Test({LINENUM}18432, 'ceil(-1.0)', -1);
  Test({LINENUM}18433, 'ceil(-0.9)', -0);
  Test({LINENUM}18434, 'ceil(-0.8)', -0);
  Test({LINENUM}18435, 'ceil(-0.7)', -0);
  Test({LINENUM}18436, 'ceil(-0.6)', -0);
  Test({LINENUM}18437, 'ceil(-0.5)', -0);
  Test({LINENUM}18438, 'ceil(-0.4)', -0);
  Test({LINENUM}18439, 'ceil(-0.3)', -0);
  Test({LINENUM}18440, 'ceil(-0.2)', -0);
  Test({LINENUM}18441, 'ceil(-0.1)', -0);
  Test({LINENUM}18442, 'ceil(0)', 0);
  Test({LINENUM}18443, 'ceil(0.0)', 0);
  Test({LINENUM}18444, 'ceil(0.1)', 1);
  Test({LINENUM}18445, 'ceil(0.2)', 1);
  Test({LINENUM}18446, 'ceil(0.3)', 1);
  Test({LINENUM}18447, 'ceil(0.4)', 1);
  Test({LINENUM}18448, 'ceil(0.5)', 1);
  Test({LINENUM}18449, 'ceil(0.6)', 1);
  Test({LINENUM}18450, 'ceil(0.7)', 1);
  Test({LINENUM}18451, 'ceil(0.8)', 1);
  Test({LINENUM}18452, 'ceil(0.9)', 1);
  Test({LINENUM}18453, 'ceil(1.0)', 1);
  Test({LINENUM}18454, 'ceil(1.1)', 2);
  Test({LINENUM}18455, 'ceil(1.2)', 2);
  Test({LINENUM}18456, 'ceil(1.3)', 2);
  Test({LINENUM}18457, 'ceil(1.4)', 2);
  Test({LINENUM}18458, 'ceil(1.5)', 2);
  Test({LINENUM}18459, 'ceil(1.6)', 2);
  Test({LINENUM}18460, 'ceil(1.7)', 2);
  Test({LINENUM}18461, 'ceil(1.8)', 2);
  Test({LINENUM}18462, 'ceil(1.9)', 2);
  Test({LINENUM}18463, 'ceil(2.0)', 2);
  Test({LINENUM}18464, 'ceil(2.1)', 3);
  Test({LINENUM}18465, 'ceil(2.2)', 3);
  Test({LINENUM}18466, 'ceil(2.3)', 3);
  Test({LINENUM}18467, 'ceil(2.4)', 3);
  Test({LINENUM}18468, 'ceil(2.5)', 3);
  Test({LINENUM}18469, 'ceil(2.6)', 3);
  Test({LINENUM}18470, 'ceil(2.7)', 3);
  Test({LINENUM}18471, 'ceil(2.8)', 3);
  Test({LINENUM}18472, 'ceil(2.9)', 3);
  Test({LINENUM}18473, 'ceil(3.0)', 3);
  Test({LINENUM}18474, 'ceil(3.1)', 4);
  Test({LINENUM}18475, 'ceil(3.2)', 4);
  Test({LINENUM}18476, 'ceil(3.3)', 4);
  Test({LINENUM}18477, 'ceil(3.4)', 4);
  Test({LINENUM}18478, 'ceil(3.5)', 4);
  Test({LINENUM}18479, 'ceil(3.6)', 4);
  Test({LINENUM}18480, 'ceil(3.7)', 4);
  Test({LINENUM}18481, 'ceil(3.8)', 4);
  Test({LINENUM}18482, 'ceil(3.9)', 4);
  Test({LINENUM}18483, 'ceil(4.0)', 4);
  Test({LINENUM}18484, 'ceil(4.1)', 5);
  Test({LINENUM}18485, 'ceil(4.2)', 5);
  Test({LINENUM}18486, 'ceil(4.3)', 5);
  Test({LINENUM}18487, 'ceil(4.4)', 5);
  Test({LINENUM}18488, 'ceil(4.5)', 5);
  Test({LINENUM}18489, 'ceil(4.6)', 5);
  Test({LINENUM}18490, 'ceil(4.7)', 5);
  Test({LINENUM}18491, 'ceil(4.8)', 5);
  Test({LINENUM}18492, 'ceil(4.9)', 5);
  Test({LINENUM}18493, 'ceil(5.0)', 5);

  Test({LINENUM}18495, 'ceil(5)', 5);

  Test({LINENUM}18497, 'ceil(5/2)', 3);
  Test({LINENUM}18498, 'ceil(5/3)', 2);
  Test({LINENUM}18499, 'ceil(5/4)', 2);

  Test({LINENUM}18501, 'ceil(123456789.123456)', 123456790);
  Test({LINENUM}18502, 'ceil(123456789.987564231)', 123456790);
  Test({LINENUM}18503, 'ceil(-123456789.123456)', -123456789);
  Test({LINENUM}18504, 'ceil(-123456789.987564231)', -123456789);

  Test({LINENUM}18506, 'ceil(1234567891234567)', 1234567891234567);
  Test({LINENUM}18507, 'ceil(1234567891234567.2)', 1234567891234568);
  Test({LINENUM}18508, 'ceil(1234567891234567.5)', 1234567891234568);
  Test({LINENUM}18509, 'ceil(1234567891234567.8)', 1234567891234568);
  Test({LINENUM}18510, 'ceil(1234567891234568)', 1234567891234568);

  Test({LINENUM}18512, 'ceil(-1234567891234567)', -1234567891234567);
  Test({LINENUM}18513, 'ceil(-1234567891234567.2)', -1234567891234567);
  Test({LINENUM}18514, 'ceil(-1234567891234567.5)', -1234567891234567);
  Test({LINENUM}18515, 'ceil(-1234567891234567.8)', -1234567891234567);
  Test({LINENUM}18516, 'ceil(-1234567891234568)', -1234567891234568);

  Test({LINENUM}18518, 'ceil(1E50)', failure, 'Invalid floating point operation');

  Test({LINENUM}18520, 'ceil(π)', 4);

  Test({LINENUM}18522, 'ceil(1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}18523, 'ceil("rectangle")', failure, 'An object of type real number was expected as argument 1, but an object of type string was given.');

  // Truncation (trunc)

  Test({LINENUM}18527, 'trunc(-5.0)', -5);
  Test({LINENUM}18528, 'trunc(-4.9)', -4);
  Test({LINENUM}18529, 'trunc(-4.8)', -4);
  Test({LINENUM}18530, 'trunc(-4.7)', -4);
  Test({LINENUM}18531, 'trunc(-4.6)', -4);
  Test({LINENUM}18532, 'trunc(-4.5)', -4);
  Test({LINENUM}18533, 'trunc(-4.4)', -4);
  Test({LINENUM}18534, 'trunc(-4.3)', -4);
  Test({LINENUM}18535, 'trunc(-4.2)', -4);
  Test({LINENUM}18536, 'trunc(-4.1)', -4);
  Test({LINENUM}18537, 'trunc(-4.0)', -4);
  Test({LINENUM}18538, 'trunc(-3.9)', -3);
  Test({LINENUM}18539, 'trunc(-3.8)', -3);
  Test({LINENUM}18540, 'trunc(-3.7)', -3);
  Test({LINENUM}18541, 'trunc(-3.6)', -3);
  Test({LINENUM}18542, 'trunc(-3.5)', -3);
  Test({LINENUM}18543, 'trunc(-3.4)', -3);
  Test({LINENUM}18544, 'trunc(-3.3)', -3);
  Test({LINENUM}18545, 'trunc(-3.2)', -3);
  Test({LINENUM}18546, 'trunc(-3.1)', -3);
  Test({LINENUM}18547, 'trunc(-3.0)', -3);
  Test({LINENUM}18548, 'trunc(-2.9)', -2);
  Test({LINENUM}18549, 'trunc(-2.8)', -2);
  Test({LINENUM}18550, 'trunc(-2.7)', -2);
  Test({LINENUM}18551, 'trunc(-2.6)', -2);
  Test({LINENUM}18552, 'trunc(-2.5)', -2);
  Test({LINENUM}18553, 'trunc(-2.4)', -2);
  Test({LINENUM}18554, 'trunc(-2.3)', -2);
  Test({LINENUM}18555, 'trunc(-2.2)', -2);
  Test({LINENUM}18556, 'trunc(-2.1)', -2);
  Test({LINENUM}18557, 'trunc(-2.0)', -2);
  Test({LINENUM}18558, 'trunc(-1.9)', -1);
  Test({LINENUM}18559, 'trunc(-1.8)', -1);
  Test({LINENUM}18560, 'trunc(-1.7)', -1);
  Test({LINENUM}18561, 'trunc(-1.6)', -1);
  Test({LINENUM}18562, 'trunc(-1.5)', -1);
  Test({LINENUM}18563, 'trunc(-1.4)', -1);
  Test({LINENUM}18564, 'trunc(-1.3)', -1);
  Test({LINENUM}18565, 'trunc(-1.2)', -1);
  Test({LINENUM}18566, 'trunc(-1.1)', -1);
  Test({LINENUM}18567, 'trunc(-1.0)', -1);
  Test({LINENUM}18568, 'trunc(-0.9)', -0);
  Test({LINENUM}18569, 'trunc(-0.8)', -0);
  Test({LINENUM}18570, 'trunc(-0.7)', -0);
  Test({LINENUM}18571, 'trunc(-0.6)', -0);
  Test({LINENUM}18572, 'trunc(-0.5)', -0);
  Test({LINENUM}18573, 'trunc(-0.4)', -0);
  Test({LINENUM}18574, 'trunc(-0.3)', -0);
  Test({LINENUM}18575, 'trunc(-0.2)', -0);
  Test({LINENUM}18576, 'trunc(-0.1)', -0);
  Test({LINENUM}18577, 'trunc(0)', 0);
  Test({LINENUM}18578, 'trunc(0.0)', 0);
  Test({LINENUM}18579, 'trunc(0.1)', 0);
  Test({LINENUM}18580, 'trunc(0.2)', 0);
  Test({LINENUM}18581, 'trunc(0.3)', 0);
  Test({LINENUM}18582, 'trunc(0.4)', 0);
  Test({LINENUM}18583, 'trunc(0.5)', 0);
  Test({LINENUM}18584, 'trunc(0.6)', 0);
  Test({LINENUM}18585, 'trunc(0.7)', 0);
  Test({LINENUM}18586, 'trunc(0.8)', 0);
  Test({LINENUM}18587, 'trunc(0.9)', 0);
  Test({LINENUM}18588, 'trunc(1.0)', 1);
  Test({LINENUM}18589, 'trunc(1.1)', 1);
  Test({LINENUM}18590, 'trunc(1.2)', 1);
  Test({LINENUM}18591, 'trunc(1.3)', 1);
  Test({LINENUM}18592, 'trunc(1.4)', 1);
  Test({LINENUM}18593, 'trunc(1.5)', 1);
  Test({LINENUM}18594, 'trunc(1.6)', 1);
  Test({LINENUM}18595, 'trunc(1.7)', 1);
  Test({LINENUM}18596, 'trunc(1.8)', 1);
  Test({LINENUM}18597, 'trunc(1.9)', 1);
  Test({LINENUM}18598, 'trunc(2.0)', 2);
  Test({LINENUM}18599, 'trunc(2.1)', 2);
  Test({LINENUM}18600, 'trunc(2.2)', 2);
  Test({LINENUM}18601, 'trunc(2.3)', 2);
  Test({LINENUM}18602, 'trunc(2.4)', 2);
  Test({LINENUM}18603, 'trunc(2.5)', 2);
  Test({LINENUM}18604, 'trunc(2.6)', 2);
  Test({LINENUM}18605, 'trunc(2.7)', 2);
  Test({LINENUM}18606, 'trunc(2.8)', 2);
  Test({LINENUM}18607, 'trunc(2.9)', 2);
  Test({LINENUM}18608, 'trunc(3.0)', 3);
  Test({LINENUM}18609, 'trunc(3.1)', 3);
  Test({LINENUM}18610, 'trunc(3.2)', 3);
  Test({LINENUM}18611, 'trunc(3.3)', 3);
  Test({LINENUM}18612, 'trunc(3.4)', 3);
  Test({LINENUM}18613, 'trunc(3.5)', 3);
  Test({LINENUM}18614, 'trunc(3.6)', 3);
  Test({LINENUM}18615, 'trunc(3.7)', 3);
  Test({LINENUM}18616, 'trunc(3.8)', 3);
  Test({LINENUM}18617, 'trunc(3.9)', 3);
  Test({LINENUM}18618, 'trunc(4.0)', 4);
  Test({LINENUM}18619, 'trunc(4.1)', 4);
  Test({LINENUM}18620, 'trunc(4.2)', 4);
  Test({LINENUM}18621, 'trunc(4.3)', 4);
  Test({LINENUM}18622, 'trunc(4.4)', 4);
  Test({LINENUM}18623, 'trunc(4.5)', 4);
  Test({LINENUM}18624, 'trunc(4.6)', 4);
  Test({LINENUM}18625, 'trunc(4.7)', 4);
  Test({LINENUM}18626, 'trunc(4.8)', 4);
  Test({LINENUM}18627, 'trunc(4.9)', 4);
  Test({LINENUM}18628, 'trunc(5.0)', 5);

  Test({LINENUM}18630, 'trunc(5)', 5);

  Test({LINENUM}18632, 'trunc(5/2)', 2);
  Test({LINENUM}18633, 'trunc(5/3)', 1);
  Test({LINENUM}18634, 'trunc(5/4)', 1);

  Test({LINENUM}18636, 'trunc(123456789.123456)', 123456789);
  Test({LINENUM}18637, 'trunc(123456789.987564231)', 123456789);
  Test({LINENUM}18638, 'trunc(-123456789.123456)', -123456789);
  Test({LINENUM}18639, 'trunc(-123456789.987564231)', -123456789);

  Test({LINENUM}18641, 'trunc(1234567891234567)', 1234567891234567);
  Test({LINENUM}18642, 'trunc(1234567891234567.2)', 1234567891234567);
  Test({LINENUM}18643, 'trunc(1234567891234567.5)', 1234567891234567);
  Test({LINENUM}18644, 'trunc(1234567891234567.8)', 1234567891234567);
  Test({LINENUM}18645, 'trunc(1234567891234568)', 1234567891234568);

  Test({LINENUM}18647, 'trunc(-1234567891234567)', -1234567891234567);
  Test({LINENUM}18648, 'trunc(-1234567891234567.2)', -1234567891234567);
  Test({LINENUM}18649, 'trunc(-1234567891234567.5)', -1234567891234567);
  Test({LINENUM}18650, 'trunc(-1234567891234567.8)', -1234567891234567);
  Test({LINENUM}18651, 'trunc(-1234567891234568)', -1234567891234568);

  Test({LINENUM}18653, 'trunc(1E50)', failure, 'Invalid floating point operation');

  Test({LINENUM}18655, 'trunc(π)', 3);

  Test({LINENUM}18657, 'trunc(1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}18658, 'trunc("rectangle")', failure, 'An object of type real number was expected as argument 1, but an object of type string was given.');

  // Comparison of rounding routines

  Test({LINENUM}18662, 'floor(1.4)', 1);
  Test({LINENUM}18663, 'floor(1.6)', 1);
  Test({LINENUM}18664, 'floor(-1.4)', -2);
  Test({LINENUM}18665, 'floor(-1.6)', -2);

  Test({LINENUM}18667, 'ceil(1.4)', 2);
  Test({LINENUM}18668, 'ceil(1.6)', 2);
  Test({LINENUM}18669, 'ceil(-1.4)', -1);
  Test({LINENUM}18670, 'ceil(-1.6)', -1);

  Test({LINENUM}18672, 'round(1.4)', 1);
  Test({LINENUM}18673, 'round(1.6)', 2);
  Test({LINENUM}18674, 'round(-1.4)', -1);
  Test({LINENUM}18675, 'round(-1.6)', -2);

  Test({LINENUM}18677, 'trunc(1.4)', 1);
  Test({LINENUM}18678, 'trunc(1.6)', 1);
  Test({LINENUM}18679, 'trunc(-1.4)', -1);
  Test({LINENUM}18680, 'trunc(-1.6)', -1);

  Test({LINENUM}18682, '⌊1.4⌋', 1);
  Test({LINENUM}18683, '⌊1.6⌋', 1);
  Test({LINENUM}18684, '⌊−1.4⌋', -2);
  Test({LINENUM}18685, '⌊−1.6⌋', -2);

  Test({LINENUM}18687, '⌈1.4⌉', 2);
  Test({LINENUM}18688, '⌈1.6⌉', 2);
  Test({LINENUM}18689, '⌈−1.4⌉', -1);
  Test({LINENUM}18690, '⌈−1.6⌉', -1);

  // Signum function (sign, sgn)

  Test({LINENUM}18694, 'sgn(0)', 0);
  Test({LINENUM}18695, 'sgn(0.1)', 1);
  Test({LINENUM}18696, 'sgn(-0.1)', -1);

  Test({LINENUM}18698, 'sgn(45134)', 1);
  Test({LINENUM}18699, 'sgn(45134.54325)', 1);
  Test({LINENUM}18700, 'sgn(45134E50)', 1);

  Test({LINENUM}18702, 'sgn(-45134)', -1);
  Test({LINENUM}18703, 'sgn(-45134.54325)', -1);
  Test({LINENUM}18704, 'sgn(-45134E50)', -1);

  Test({LINENUM}18706, 'sgn(1E-100)', 1);
  Test({LINENUM}18707, 'sgn(-1E-100)', -1);

  Test({LINENUM}18709, 'sgn(-3/7)', -1);
  Test({LINENUM}18710, 'sgn(5111511/9532151)', 1);

  Test({LINENUM}18712, 'sgn(1234567891234567)', 1);
  Test({LINENUM}18713, 'sgn(1234567891234567.5)', 1);
  Test({LINENUM}18714, 'sgn(-1234567891234567)', -1);
  Test({LINENUM}18715, 'sgn(-1234567891234567.5)', -1);

  Test({LINENUM}18717, 'sgn(π)', 1);

  Test({LINENUM}18719, 'sgn(2, 3)', failure, 'Too many arguments.');
  Test({LINENUM}18720, 'sgn("rectangle")', failure, 'An object of type real number was expected as argument 1, but an object of type string was given.');

  // Modulo

  Test({LINENUM}18724, 'mod(-15, 5)', 0);
  Test({LINENUM}18725, 'mod(-14, 5)', 1);
  Test({LINENUM}18726, 'mod(-13, 5)', 2);
  Test({LINENUM}18727, 'mod(-12, 5)', 3);
  Test({LINENUM}18728, 'mod(-11, 5)', 4);
  Test({LINENUM}18729, 'mod(-10, 5)', 0);
  Test({LINENUM}18730, 'mod(-9, 5)', 1);
  Test({LINENUM}18731, 'mod(-8, 5)', 2);
  Test({LINENUM}18732, 'mod(-7, 5)', 3);
  Test({LINENUM}18733, 'mod(-6, 5)', 4);
  Test({LINENUM}18734, 'mod(-5, 5)', 0);
  Test({LINENUM}18735, 'mod(-4, 5)', 1);
  Test({LINENUM}18736, 'mod(-3, 5)', 2);
  Test({LINENUM}18737, 'mod(-2, 5)', 3);
  Test({LINENUM}18738, 'mod(-1, 5)', 4);
  Test({LINENUM}18739, 'mod(0, 5)', 0);
  Test({LINENUM}18740, 'mod(1, 5)', 1);
  Test({LINENUM}18741, 'mod(2, 5)', 2);
  Test({LINENUM}18742, 'mod(3, 5)', 3);
  Test({LINENUM}18743, 'mod(4, 5)', 4);
  Test({LINENUM}18744, 'mod(5, 5)', 0);
  Test({LINENUM}18745, 'mod(6, 5)', 1);
  Test({LINENUM}18746, 'mod(7, 5)', 2);
  Test({LINENUM}18747, 'mod(8, 5)', 3);
  Test({LINENUM}18748, 'mod(9, 5)', 4);
  Test({LINENUM}18749, 'mod(10, 5)', 0);
  Test({LINENUM}18750, 'mod(11, 5)', 1);
  Test({LINENUM}18751, 'mod(12, 5)', 2);
  Test({LINENUM}18752, 'mod(13, 5)', 3);
  Test({LINENUM}18753, 'mod(14, 5)', 4);
  Test({LINENUM}18754, 'mod(15, 5)', 0);
  Test({LINENUM}18755, 'mod(16, 5)', 1);
  Test({LINENUM}18756, 'mod(17, 5)', 2);
  Test({LINENUM}18757, 'mod(18, 5)', 3);
  Test({LINENUM}18758, 'mod(19, 5)', 4);
  Test({LINENUM}18759, 'mod(20, 5)', 0);
  Test({LINENUM}18760, 'mod(21, 5)', 1);
  Test({LINENUM}18761, 'mod(22, 5)', 2);
  Test({LINENUM}18762, 'mod(23, 5)', 3);
  Test({LINENUM}18763, 'mod(24, 5)', 4);
  Test({LINENUM}18764, 'mod(25, 5)', 0);
  Test({LINENUM}18765, 'mod(26, 5)', 1);
  Test({LINENUM}18766, 'mod(27, 5)', 2);
  Test({LINENUM}18767, 'mod(28, 5)', 3);
  Test({LINENUM}18768, 'mod(29, 5)', 4);
  Test({LINENUM}18769, 'mod(30, 5)', 0);

  Test({LINENUM}18771, 'mod(0, 1)', 0);

  Test({LINENUM}18773, 'mod(29, 1)', 0);
  Test({LINENUM}18774, 'mod(25213459, 1)', 0);
  Test({LINENUM}18775, 'mod(26164647157579, 1)', 0);

  Test({LINENUM}18777, 'mod(-29, 1)', 0);
  Test({LINENUM}18778, 'mod(-25213459, 1)', 0);
  Test({LINENUM}18779, 'mod(-26164647157579, 1)', 0);

  Test({LINENUM}18781, 'mod(1234567891234567, 156397337)', 0);
  Test({LINENUM}18782, 'mod(1234567891234568, 156397337)', 1);
  Test({LINENUM}18783, 'mod(1234567891234578, 156397337)', 11);
  Test({LINENUM}18784, 'mod(1234567891234678, 156397337)', 111);
  Test({LINENUM}18785, 'mod(1234567891235678, 156397337)', 1111);
  Test({LINENUM}18786, 'mod(1234567891245678, 156397337)', 11111);

  Test({LINENUM}18788, 'mod(-15.0, 5)', 0.0);
  Test({LINENUM}18789, 'mod(-14.0, 5)', 1.0);
  Test({LINENUM}18790, 'mod(-13.0, 5)', 2.0);
  Test({LINENUM}18791, 'mod(-12.0, 5)', 3.0);
  Test({LINENUM}18792, 'mod(-11.0, 5)', 4.0);
  Test({LINENUM}18793, 'mod(-10.0, 5)', 0.0);
  Test({LINENUM}18794, 'mod(-9.0, 5)', 1.0);
  Test({LINENUM}18795, 'mod(-8.0, 5)', 2.0);
  Test({LINENUM}18796, 'mod(-7.0, 5)', 3.0);
  Test({LINENUM}18797, 'mod(-6.0, 5)', 4.0);
  Test({LINENUM}18798, 'mod(-5.0, 5)', 0.0);
  Test({LINENUM}18799, 'mod(-4.0, 5)', 1.0);
  Test({LINENUM}18800, 'mod(-3.0, 5)', 2.0);
  Test({LINENUM}18801, 'mod(-2.0, 5)', 3.0);
  Test({LINENUM}18802, 'mod(-1.0, 5)', 4.0);
  Test({LINENUM}18803, 'mod(0.0, 5)', 0.0);
  Test({LINENUM}18804, 'mod(1.0, 5)', 1.0);
  Test({LINENUM}18805, 'mod(2.0, 5)', 2.0);
  Test({LINENUM}18806, 'mod(3.0, 5)', 3.0);
  Test({LINENUM}18807, 'mod(4.0, 5)', 4.0);
  Test({LINENUM}18808, 'mod(5.0, 5)', 0.0);
  Test({LINENUM}18809, 'mod(6.0, 5)', 1.0);
  Test({LINENUM}18810, 'mod(7.0, 5)', 2.0);
  Test({LINENUM}18811, 'mod(8.0, 5)', 3.0);
  Test({LINENUM}18812, 'mod(9.0, 5)', 4.0);
  Test({LINENUM}18813, 'mod(10, 5.0)', 0.0);
  Test({LINENUM}18814, 'mod(11, 5.0)', 1.0);
  Test({LINENUM}18815, 'mod(12, 5.0)', 2.0);
  Test({LINENUM}18816, 'mod(13, 5.0)', 3.0);
  Test({LINENUM}18817, 'mod(14, 5.0)', 4.0);
  Test({LINENUM}18818, 'mod(15, 5.0)', 0.0);
  Test({LINENUM}18819, 'mod(16, 5.0)', 1.0);
  Test({LINENUM}18820, 'mod(17, 5.0)', 2.0);
  Test({LINENUM}18821, 'mod(18, 5.0)', 3.0);
  Test({LINENUM}18822, 'mod(19, 5.0)', 4.0);
  Test({LINENUM}18823, 'mod(20, 5.0)', 0.0);
  Test({LINENUM}18824, 'mod(21, 5.0)', 1.0);
  Test({LINENUM}18825, 'mod(22, 5.0)', 2.0);
  Test({LINENUM}18826, 'mod(23.0, 5.0)', 3.0);
  Test({LINENUM}18827, 'mod(24.0, 5.0)', 4.0);
  Test({LINENUM}18828, 'mod(25.0, 5.0)', 0.0);
  Test({LINENUM}18829, 'mod(26.0, 5.0)', 1.0);
  Test({LINENUM}18830, 'mod(27.0, 5.0)', 2.0);
  Test({LINENUM}18831, 'mod(28.0, 5.0)', 3.0);
  Test({LINENUM}18832, 'mod(29.0, 5.0)', 4.0);
  Test({LINENUM}18833, 'mod(30.0, 5.0)', 0.0);

  Test({LINENUM}18835, 'mod(0.0, 1)', 0.0);
  Test({LINENUM}18836, 'mod(0, 1.0)', 0.0);

  Test({LINENUM}18838, 'mod(29.0, 1)', 0.0);
  Test({LINENUM}18839, 'mod(25213459.0, 1)', 0.0);
  Test({LINENUM}18840, 'mod(26164647157579.0, 1.0)', 0.0);
  Test({LINENUM}18841, 'mod(26164647157579, 1.0)', 0.0);

  Test({LINENUM}18843, 'mod(-29.0, 1)', 0.0);
  Test({LINENUM}18844, 'mod(-25213459, 1.0)', 0.0);
  Test({LINENUM}18845, 'mod(-26164647157579.0, 1.0)', 0.0);

  Test({LINENUM}18847, 'mod(1234567891234567.0, 156397337)', 0.0);
  Test({LINENUM}18848, 'mod(1234567891234568.0, 156397337)', 1.0);
  Test({LINENUM}18849, 'mod(1234567891234578, 156397337.0)', 11.0);
  Test({LINENUM}18850, 'mod(1234567891234678, 156397337.0)', 111.0);
  Test({LINENUM}18851, 'mod(1234567891235678.0, 156397337.0)', 1111.0);
  Test({LINENUM}18852, 'mod(1234567891245678.0, 156397337.0)', 11111.0);

  Test({LINENUM}18854, 'mod(-10.5, 5)', 4.5);
  Test({LINENUM}18855, 'mod(-9.5, 5)', 0.5);
  Test({LINENUM}18856, 'mod(-8.5, 5)', 1.5);
  Test({LINENUM}18857, 'mod(-7.5, 5)', 2.5);
  Test({LINENUM}18858, 'mod(-6.5, 5)', 3.5);
  Test({LINENUM}18859, 'mod(-5.5, 5)', 4.5);
  Test({LINENUM}18860, 'mod(-4.5, 5)', 0.5);
  Test({LINENUM}18861, 'mod(-3.5, 5)', 1.5);
  Test({LINENUM}18862, 'mod(-2.5, 5)', 2.5);
  Test({LINENUM}18863, 'mod(-1.5, 5)', 3.5);
  Test({LINENUM}18864, 'mod(-0.5, 5)', 4.5);
  Test({LINENUM}18865, 'mod(0.5, 5)', 0.5);
  Test({LINENUM}18866, 'mod(1.5, 5)', 1.5);
  Test({LINENUM}18867, 'mod(2.5, 5)', 2.5);
  Test({LINENUM}18868, 'mod(3.5, 5)', 3.5);
  Test({LINENUM}18869, 'mod(4.5, 5)', 4.5);
  Test({LINENUM}18870, 'mod(5.5, 5)', 0.5);
  Test({LINENUM}18871, 'mod(6.5, 5)', 1.5);
  Test({LINENUM}18872, 'mod(7.5, 5)', 2.5);
  Test({LINENUM}18873, 'mod(8.5, 5)', 3.5);
  Test({LINENUM}18874, 'mod(9.5, 5)', 4.5);
  Test({LINENUM}18875, 'mod(10.5, 5)', 0.5);
  Test({LINENUM}18876, 'mod(11.5, 5)', 1.5);
  Test({LINENUM}18877, 'mod(12.5, 5)', 2.5);
  Test({LINENUM}18878, 'mod(13.5, 5)', 3.5);
  Test({LINENUM}18879, 'mod(14.5, 5)', 4.5);
  Test({LINENUM}18880, 'mod(15.5, 5)', 0.5);
  Test({LINENUM}18881, 'mod(16.5, 5)', 1.5);
  Test({LINENUM}18882, 'mod(17.5, 5)', 2.5);
  Test({LINENUM}18883, 'mod(18.5, 5)', 3.5);
  Test({LINENUM}18884, 'mod(19.5, 5)', 4.5);
  Test({LINENUM}18885, 'mod(20.5, 5)', 0.5);

  Test({LINENUM}18887, 'mod(1, 1.5)', 1.0);
  Test({LINENUM}18888, 'mod(2, 1.5)', 0.5);
  Test({LINENUM}18889, 'mod(3, 1.5)', 0.0);
  Test({LINENUM}18890, 'mod(4, 1.5)', 1.0);
  Test({LINENUM}18891, 'mod(5, 1.5)', 0.5);
  Test({LINENUM}18892, 'mod(6, 1.5)', 0.0);
  Test({LINENUM}18893, 'mod(7, 1.5)', 1.0);

  Eps; Test({LINENUM}18895, 'mod(π, e)', 0.423310825130748003102355911926840386439922305675146246007);
  Eps; Test({LINENUM}18896, 'mod(e, π)', 2.718281828459045235360287471352662497757247093699959574966);

  Eps; Test({LINENUM}18898, 'mod(−π, e)', 2.294971003328297232257931559425822111317324788024813328958);
  Eps; Test({LINENUM}18899, 'mod(−e, π)', 0.423310825130748003102355911926840386439922305675146246007);

  Eps(1E-6); Test({LINENUM}18901, 'mod(123456789123, π)', 1.125871901464596442733771596141163579944705707241703723047);

  Test({LINENUM}18903, 'mod(5, 0)', failure, 'Division by zero');
  Test({LINENUM}18904, 'mod(5.0, 0)', failure, 'Division by zero');

  Test({LINENUM}18906, 'mod(5)', failure, 'A required argument of type real number is missing.');
  Test({LINENUM}18907, 'mod(5, 2, 1)', failure, 'Too many arguments.');
  Test({LINENUM}18908, 'mod("rectangle", 5)', failure, 'An object of type real number was expected as argument 1, but an object of type string was given.');

  // Successor function

  Test({LINENUM}18912, 'succ(-6)', -5);
  Test({LINENUM}18913, 'succ(-5)', -4);
  Test({LINENUM}18914, 'succ(-4)', -3);
  Test({LINENUM}18915, 'succ(-3)', -2);
  Test({LINENUM}18916, 'succ(-2)', -1);
  Test({LINENUM}18917, 'succ(-1)', 0);
  Test({LINENUM}18918, 'succ(0)', 1);
  Test({LINENUM}18919, 'succ(1)', 2);
  Test({LINENUM}18920, 'succ(2)', 3);
  Test({LINENUM}18921, 'succ(3)', 4);
  Test({LINENUM}18922, 'succ(4)', 5);
  Test({LINENUM}18923, 'succ(5)', 6);
  Test({LINENUM}18924, 'succ(6)', 7);
  Test({LINENUM}18925, 'succ(7)', 8);

  Test({LINENUM}18927, 'succ(-123456789123456)', -123456789123455);
  Test({LINENUM}18928, 'succ(123456789123456)', 123456789123457);

  Test({LINENUM}18930, 'succ(0.5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}18931, 'succ(1/2)', failure, 'An object of type integer was expected as argument 1, but an object of type rational number was given.');

  Test({LINENUM}18933, 'succ(-6, 5)', 0);
  Test({LINENUM}18934, 'succ(-5, 5)', 1);
  Test({LINENUM}18935, 'succ(-4, 5)', 2);
  Test({LINENUM}18936, 'succ(-3, 5)', 3);
  Test({LINENUM}18937, 'succ(-2, 5)', 4);
  Test({LINENUM}18938, 'succ(-1, 5)', 0);
  Test({LINENUM}18939, 'succ(0, 5)', 1);
  Test({LINENUM}18940, 'succ(1, 5)', 2);
  Test({LINENUM}18941, 'succ(2, 5)', 3);
  Test({LINENUM}18942, 'succ(3, 5)', 4);
  Test({LINENUM}18943, 'succ(4, 5)', 0);
  Test({LINENUM}18944, 'succ(5, 5)', 1);
  Test({LINENUM}18945, 'succ(6, 5)', 2);
  Test({LINENUM}18946, 'succ(7, 5)', 3);
  Test({LINENUM}18947, 'succ(8, 5)', 4);
  Test({LINENUM}18948, 'succ(9, 5)', 0);
  Test({LINENUM}18949, 'succ(10, 5)', 1);
  Test({LINENUM}18950, 'succ(11, 5)', 2);
  Test({LINENUM}18951, 'succ(12, 5)', 3);

  Test({LINENUM}18953, 'succ(-123456789123456, 5)', 0);
  Test({LINENUM}18954, 'succ(123456789123456, 5)', 2);

  Test({LINENUM}18956, 'succ(-6, 5, 10)', 10);
  Test({LINENUM}18957, 'succ(-5, 5, 10)', 11);
  Test({LINENUM}18958, 'succ(-4, 5, 10)', 12);
  Test({LINENUM}18959, 'succ(-3, 5, 10)', 13);
  Test({LINENUM}18960, 'succ(-2, 5, 10)', 14);
  Test({LINENUM}18961, 'succ(-1, 5, 10)', 10);
  Test({LINENUM}18962, 'succ(0, 5, 10)', 11);
  Test({LINENUM}18963, 'succ(1, 5, 10)', 12);
  Test({LINENUM}18964, 'succ(2, 5, 10)', 13);
  Test({LINENUM}18965, 'succ(3, 5, 10)', 14);
  Test({LINENUM}18966, 'succ(4, 5, 10)', 10);
  Test({LINENUM}18967, 'succ(5, 5, 10)', 11);
  Test({LINENUM}18968, 'succ(6, 5, 10)', 12);
  Test({LINENUM}18969, 'succ(7, 5, 10)', 13);
  Test({LINENUM}18970, 'succ(8, 5, 10)', 14);
  Test({LINENUM}18971, 'succ(9, 5, 10)', 10);
  Test({LINENUM}18972, 'succ(10, 5, 10)', 11);
  Test({LINENUM}18973, 'succ(11, 5, 10)', 12);
  Test({LINENUM}18974, 'succ(12, 5, 10)', 13);

  Test({LINENUM}18976, 'succ(-123456789123456, 5, 10)', 10);
  Test({LINENUM}18977, 'succ(123456789123456, 5, 10)', 12);

  Test({LINENUM}18979, 'succ(-123456789123456, 5, 100000000000)', 100000000000);
  Test({LINENUM}18980, 'succ(123456789123456, 5, 100000000000)', 100000000002);

  Test({LINENUM}18982, 'succ(5, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}18983, 'succ()', failure, 'There is no version of this function that can take 0 argument(s).');
  Test({LINENUM}18984, 'succ(1, 2, 3, 4)', failure, 'There is no version of this function that can take 4 argument(s).');
  Test({LINENUM}18985, 'succ("rectangle")', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');

  // Predecessor function

  Test({LINENUM}18989, 'pred(-6)', -7);
  Test({LINENUM}18990, 'pred(-5)', -6);
  Test({LINENUM}18991, 'pred(-4)', -5);
  Test({LINENUM}18992, 'pred(-3)', -4);
  Test({LINENUM}18993, 'pred(-2)', -3);
  Test({LINENUM}18994, 'pred(-1)', -2);
  Test({LINENUM}18995, 'pred(0)', -1);
  Test({LINENUM}18996, 'pred(1)', 0);
  Test({LINENUM}18997, 'pred(2)', 1);
  Test({LINENUM}18998, 'pred(3)', 2);
  Test({LINENUM}18999, 'pred(4)', 3);
  Test({LINENUM}19000, 'pred(5)', 4);
  Test({LINENUM}19001, 'pred(6)', 5);
  Test({LINENUM}19002, 'pred(7)', 6);

  Test({LINENUM}19004, 'pred(-123456789123456)', -123456789123457);
  Test({LINENUM}19005, 'pred(123456789123456)', 123456789123455);

  Test({LINENUM}19007, 'pred(0.5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}19008, 'pred(1/2)', failure, 'An object of type integer was expected as argument 1, but an object of type rational number was given.');

  Test({LINENUM}19010, 'pred(-6, 5)', 3);
  Test({LINENUM}19011, 'pred(-5, 5)', 4);
  Test({LINENUM}19012, 'pred(-4, 5)', 0);
  Test({LINENUM}19013, 'pred(-3, 5)', 1);
  Test({LINENUM}19014, 'pred(-2, 5)', 2);
  Test({LINENUM}19015, 'pred(-1, 5)', 3);
  Test({LINENUM}19016, 'pred(0, 5)', 4);
  Test({LINENUM}19017, 'pred(1, 5)', 0);
  Test({LINENUM}19018, 'pred(2, 5)', 1);
  Test({LINENUM}19019, 'pred(3, 5)', 2);
  Test({LINENUM}19020, 'pred(4, 5)', 3);
  Test({LINENUM}19021, 'pred(5, 5)', 4);
  Test({LINENUM}19022, 'pred(6, 5)', 0);
  Test({LINENUM}19023, 'pred(7, 5)', 1);
  Test({LINENUM}19024, 'pred(8, 5)', 2);
  Test({LINENUM}19025, 'pred(9, 5)', 3);
  Test({LINENUM}19026, 'pred(10, 5)', 4);
  Test({LINENUM}19027, 'pred(11, 5)', 0);
  Test({LINENUM}19028, 'pred(12, 5)', 1);

  Test({LINENUM}19030, 'pred(-123456789123456, 5)', 3);
  Test({LINENUM}19031, 'pred(123456789123456, 5)', 0);

  Test({LINENUM}19033, 'pred(-6, 5, 10)', 13);
  Test({LINENUM}19034, 'pred(-5, 5, 10)', 14);
  Test({LINENUM}19035, 'pred(-4, 5, 10)', 10);
  Test({LINENUM}19036, 'pred(-3, 5, 10)', 11);
  Test({LINENUM}19037, 'pred(-2, 5, 10)', 12);
  Test({LINENUM}19038, 'pred(-1, 5, 10)', 13);
  Test({LINENUM}19039, 'pred(0, 5, 10)', 14);
  Test({LINENUM}19040, 'pred(1, 5, 10)', 10);
  Test({LINENUM}19041, 'pred(2, 5, 10)', 11);
  Test({LINENUM}19042, 'pred(3, 5, 10)', 12);
  Test({LINENUM}19043, 'pred(4, 5, 10)', 13);
  Test({LINENUM}19044, 'pred(5, 5, 10)', 14);
  Test({LINENUM}19045, 'pred(6, 5, 10)', 10);
  Test({LINENUM}19046, 'pred(7, 5, 10)', 11);
  Test({LINENUM}19047, 'pred(8, 5, 10)', 12);
  Test({LINENUM}19048, 'pred(9, 5, 10)', 13);
  Test({LINENUM}19049, 'pred(10, 5, 10)', 14);
  Test({LINENUM}19050, 'pred(11, 5, 10)', 10);
  Test({LINENUM}19051, 'pred(12, 5, 10)', 11);

  Test({LINENUM}19053, 'pred(-123456789123456, 5, 10)', 13);
  Test({LINENUM}19054, 'pred(123456789123456, 5, 10)', 10);

  Test({LINENUM}19056, 'pred(-123456789123456, 5, 100000000000)', 100000000003);
  Test({LINENUM}19057, 'pred(123456789123456, 5, 100000000000)', 100000000000);

  Test({LINENUM}19059, 'pred(5, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}19060, 'pred()', failure, 'There is no version of this function that can take 0 argument(s).');
  Test({LINENUM}19061, 'pred(1, 2, 3, 4)', failure, 'There is no version of this function that can take 4 argument(s).');
  Test({LINENUM}19062, 'pred("rectangle")', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');

  // Factorial

  Test({LINENUM}19066, 'factorial(0)', 1);
  Test({LINENUM}19067, 'factorial(1)', 1);
  Test({LINENUM}19068, 'factorial(2)', 2);
  Test({LINENUM}19069, 'factorial(3)', 6);
  Test({LINENUM}19070, 'factorial(4)', 24);
  Test({LINENUM}19071, 'factorial(5)', 120);
  Test({LINENUM}19072, 'factorial(6)', 720);
  Test({LINENUM}19073, 'factorial(7)', 5040);
  Test({LINENUM}19074, 'factorial(8)', 40320);
  Test({LINENUM}19075, 'factorial(9)', 362880);
  Test({LINENUM}19076, 'factorial(10)', 3628800);
  Test({LINENUM}19077, 'factorial(11)', 39916800);
  Test({LINENUM}19078, 'factorial(12)', 479001600);
  Test({LINENUM}19079, 'factorial(13)', 6227020800);
  Test({LINENUM}19080, 'factorial(14)', 87178291200);
  Test({LINENUM}19081, 'factorial(15)', 1307674368000);
  Test({LINENUM}19082, 'factorial(16)', 20922789888000);
  Test({LINENUM}19083, 'factorial(17)', 355687428096000);
  Test({LINENUM}19084, 'factorial(18)', 6402373705728000);
  Test({LINENUM}19085, 'factorial(19)', 121645100408832000);
  Test({LINENUM}19086, 'factorial(20)', 2432902008176640000);

  Test({LINENUM}19088, 'factorial(21)', 5.109094217170944E19);
  Test({LINENUM}19089, 'factorial(22)', 1.12400072777760768E21);
  Test({LINENUM}19090, 'factorial(23)', 2.58520167388849766E22);

  Eps; Test({LINENUM}19092, 'factorial(50)', 3.0414093201713378043612608166064768844377641568960512E64);
  Eps; Test({LINENUM}19093, 'factorial(100)', 9.3326215443944152681699238856266700490715968264381621E157);
  Eps; Test({LINENUM}19094, 'factorial(1000)', 4.023872600770937735437024339230039857193748642107146E2567);

  Test({LINENUM}19096, 'factorial(-1)', failure, 'A non-negative integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}19097, 'factorial(1.5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}19098, 'factorial("cat")', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}19099, 'factorial(1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}19100, 'factorial()', failure, 'A required argument of type integer is missing.');

  // Primorial

  Test({LINENUM}19104, 'primorial(0)', 1);
  Test({LINENUM}19105, 'primorial(1)', 1);
  Test({LINENUM}19106, 'primorial(2)', 2);
  Test({LINENUM}19107, 'primorial(3)', 6);
  Test({LINENUM}19108, 'primorial(4)', 6);
  Test({LINENUM}19109, 'primorial(5)', 30);
  Test({LINENUM}19110, 'primorial(6)', 30);
  Test({LINENUM}19111, 'primorial(7)', 210);
  Test({LINENUM}19112, 'primorial(8)', 210);
  Test({LINENUM}19113, 'primorial(9)', 210);
  Test({LINENUM}19114, 'primorial(10)', 210);
  Test({LINENUM}19115, 'primorial(11)', 2310);
  Test({LINENUM}19116, 'primorial(12)', 2310);
  Test({LINENUM}19117, 'primorial(13)', 30030);
  Test({LINENUM}19118, 'primorial(14)', 30030);
  Test({LINENUM}19119, 'primorial(15)', 30030);
  Test({LINENUM}19120, 'primorial(16)', 30030);
  Test({LINENUM}19121, 'primorial(17)', 510510);
  Test({LINENUM}19122, 'primorial(18)', 510510);
  Test({LINENUM}19123, 'primorial(19)', 9699690);
  Test({LINENUM}19124, 'primorial(20)', 9699690);
  Test({LINENUM}19125, 'primorial(21)', 9699690);
  Test({LINENUM}19126, 'primorial(22)', 9699690);
  Test({LINENUM}19127, 'primorial(23)', 223092870);
  Test({LINENUM}19128, 'primorial(24)', 223092870);
  Test({LINENUM}19129, 'primorial(25)', 223092870);
  Test({LINENUM}19130, 'primorial(26)', 223092870);
  Test({LINENUM}19131, 'primorial(27)', 223092870);
  Test({LINENUM}19132, 'primorial(28)', 223092870);
  Test({LINENUM}19133, 'primorial(29)', 6469693230);
  Test({LINENUM}19134, 'primorial(30)', 6469693230);
  Test({LINENUM}19135, 'primorial(31)', 200560490130);
  Test({LINENUM}19136, 'primorial(32)', 200560490130);
  Test({LINENUM}19137, 'primorial(33)', 200560490130);
  Test({LINENUM}19138, 'primorial(34)', 200560490130);
  Test({LINENUM}19139, 'primorial(35)', 200560490130);
  Test({LINENUM}19140, 'primorial(36)', 200560490130);
  Test({LINENUM}19141, 'primorial(37)', 7420738134810);
  Test({LINENUM}19142, 'primorial(38)', 7420738134810);
  Test({LINENUM}19143, 'primorial(39)', 7420738134810);
  Test({LINENUM}19144, 'primorial(40)', 7420738134810);
  Test({LINENUM}19145, 'primorial(41)', 304250263527210);
  Test({LINENUM}19146, 'primorial(42)', 304250263527210);
  Test({LINENUM}19147, 'primorial(43)', 13082761331670030);
  Test({LINENUM}19148, 'primorial(44)', 13082761331670030);
  Test({LINENUM}19149, 'primorial(45)', 13082761331670030);
  Test({LINENUM}19150, 'primorial(46)', 13082761331670030);
  Test({LINENUM}19151, 'primorial(47)', 614889782588491410);
  Test({LINENUM}19152, 'primorial(48)', 614889782588491410);
  Test({LINENUM}19153, 'primorial(49)', 614889782588491410);
  Test({LINENUM}19154, 'primorial(50)', 614889782588491410);
  Test({LINENUM}19155, 'primorial(51)', 614889782588491410);
  Test({LINENUM}19156, 'primorial(52)', 614889782588491410);
  Eps; Test({LINENUM}19157, 'primorial(53)', 3.25891584771900447E19);
  Eps; Test({LINENUM}19158, 'primorial(54)', 3.25891584771900447E19);
  Eps; Test({LINENUM}19159, 'primorial(55)', 3.25891584771900447E19);
  Eps; Test({LINENUM}19160, 'primorial(56)', 3.25891584771900447E19);
  Eps; Test({LINENUM}19161, 'primorial(57)', 3.25891584771900447E19);
  Eps; Test({LINENUM}19162, 'primorial(58)', 3.25891584771900447E19);
  Eps; Test({LINENUM}19163, 'primorial(59)', 1.92276035015421264E21);
  Eps; Test({LINENUM}19164, 'primorial(60)', 1.92276035015421264E21);
  Eps; Test({LINENUM}19165, 'primorial(61)', 1.17288381359406971E23);
  Eps; Test({LINENUM}19166, 'primorial(62)', 1.17288381359406971E23);
  Eps; Test({LINENUM}19167, 'primorial(63)', 1.17288381359406971E23);
  Eps; Test({LINENUM}19168, 'primorial(64)', 1.17288381359406971E23);
  Eps; Test({LINENUM}19169, 'primorial(65)', 1.17288381359406971E23);
  Eps; Test({LINENUM}19170, 'primorial(66)', 1.17288381359406971E23);
  Eps; Test({LINENUM}19171, 'primorial(67)', 7.85832155108026706E24);
  Eps; Test({LINENUM}19172, 'primorial(68)', 7.85832155108026706E24);
  Eps; Test({LINENUM}19173, 'primorial(69)', 7.85832155108026706E24);
  Eps; Test({LINENUM}19174, 'primorial(70)', 7.85832155108026706E24);
  Eps; Test({LINENUM}19175, 'primorial(71)', 5.57940830126698961E26);
  Eps; Test({LINENUM}19176, 'primorial(72)', 5.57940830126698961E26);
  Eps; Test({LINENUM}19177, 'primorial(73)', 4.07296805992490242E28);
  Eps; Test({LINENUM}19178, 'primorial(74)', 4.07296805992490242E28);
  Eps; Test({LINENUM}19179, 'primorial(75)', 4.07296805992490242E28);
  Eps; Test({LINENUM}19180, 'primorial(76)', 4.07296805992490242E28);
  Eps; Test({LINENUM}19181, 'primorial(77)', 4.07296805992490242E28);
  Eps; Test({LINENUM}19182, 'primorial(78)', 4.07296805992490242E28);
  Eps; Test({LINENUM}19183, 'primorial(79)', 3.21764476734067291E30);
  Eps; Test({LINENUM}19184, 'primorial(80)', 3.21764476734067291E30);
  Eps; Test({LINENUM}19185, 'primorial(81)', 3.21764476734067291E30);
  Eps; Test({LINENUM}19186, 'primorial(82)', 3.21764476734067291E30);
  Eps; Test({LINENUM}19187, 'primorial(83)', 2.67064515689275851E32);
  Eps; Test({LINENUM}19188, 'primorial(84)', 2.67064515689275851E32);
  Eps; Test({LINENUM}19189, 'primorial(85)', 2.67064515689275851E32);
  Eps; Test({LINENUM}19190, 'primorial(86)', 2.67064515689275851E32);
  Eps; Test({LINENUM}19191, 'primorial(87)', 2.67064515689275851E32);
  Eps; Test({LINENUM}19192, 'primorial(88)', 2.67064515689275851E32);
  Eps; Test({LINENUM}19193, 'primorial(89)', 2.37687418963455508E34);
  Eps; Test({LINENUM}19194, 'primorial(90)', 2.37687418963455508E34);
  Eps; Test({LINENUM}19195, 'primorial(91)', 2.37687418963455508E34);
  Eps; Test({LINENUM}19196, 'primorial(92)', 2.37687418963455508E34);
  Eps; Test({LINENUM}19197, 'primorial(93)', 2.37687418963455508E34);
  Eps; Test({LINENUM}19198, 'primorial(94)', 2.37687418963455508E34);
  Eps; Test({LINENUM}19199, 'primorial(95)', 2.37687418963455508E34);
  Eps; Test({LINENUM}19200, 'primorial(96)', 2.37687418963455508E34);
  Eps; Test({LINENUM}19201, 'primorial(97)', 2.30556796394551842E36);
  Eps; Test({LINENUM}19202, 'primorial(98)', 2.30556796394551842E36);
  Eps; Test({LINENUM}19203, 'primorial(99)', 2.30556796394551842E36);
  Eps; Test({LINENUM}19204, 'primorial(100)', 2.30556796394551842E36);

  Eps; Test({LINENUM}19206, 'primorial(173)', 1.66589903787325219E68);

  Eps; Test({LINENUM}19208, 'primorial(541)', 4.7119307999061849531624878347602604220205747734096755E219);
  Eps; Test({LINENUM}19209, 'primorial(1583)', 1.2546824917742270487305744119826516778755973335815816E670);
  Eps; Test({LINENUM}19210, 'primorial(3571)', 5.575898468972228945658434397398021879422236041037048E1519);

  Test({LINENUM}19212, 'primorial(-1)', failure, 'A non-negative integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}19213, 'primorial(5, 6)', failure, 'Too many arguments.');
  Test({LINENUM}19214, 'primorial()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}19215, 'primorial(true)', failure, 'An object of type integer was expected as argument 1, but an object of type boolean was given.');

  // Greatest common divisor (GCD)

  Test({LINENUM}19219, 'gcd(9, 15)', 3);
  Test({LINENUM}19220, 'gcd(8, 12)', 4);
  Test({LINENUM}19221, 'gcd(36, 18)', 18);
  Test({LINENUM}19222, 'gcd(100, 48)', 4);
  Test({LINENUM}19223, 'gcd(100, 45)', 5);
  Test({LINENUM}19224, 'gcd(1, 123)', 1);
  Test({LINENUM}19225, 'gcd(1, 1024)', 1);
  Test({LINENUM}19226, 'gcd(1024, 4096)', 1024);
  Test({LINENUM}19227, 'gcd(16, 4096)', 16);
  Test({LINENUM}19228, 'gcd(1, 1)', 1);
  Test({LINENUM}19229, 'gcd(204110088, 1147278130)', 2);
  Test({LINENUM}19230, 'gcd(204110088, 1147278131)', 1);
  Test({LINENUM}19231, 'gcd(204110088, 1147278132)', 1121484);
  Test({LINENUM}19232, 'gcd(204110088, 1147278133)', 1);
  Test({LINENUM}19233, 'gcd(204110088, 1147278134)', 2);
  Test({LINENUM}19234, 'gcd(204110088, 204110088)', 204110088);
  Test({LINENUM}19235, 'gcd(38237143473243, 135261142842969)', 73391830083);
  Test({LINENUM}19236, 'gcd(14139833799843612, 6808068125850628)', 523697548142356);
  Test({LINENUM}19237, 'gcd(80864667758636586, 34792835773219524)', 191169427325382);
  Test({LINENUM}19238, 'gcd(182, 521)', 1);
  Test({LINENUM}19239, 'gcd(80864667758636586, 34792835773219541)', 1);
  Test({LINENUM}19240, 'gcd(80864667758636586, 34792835773219542)', 18);

  Test({LINENUM}19242, 'gcd(1024)', 1024);
  Test({LINENUM}19243, 'gcd(16)', 16);
  Test({LINENUM}19244, 'gcd(1)', 1);
  Test({LINENUM}19245, 'gcd(204110088)', 204110088);

  Test({LINENUM}19247, 'gcd(-9, 15)', 3);
  Test({LINENUM}19248, 'gcd(-8, 12)', 4);
  Test({LINENUM}19249, 'gcd(-36, 18)', 18);
  Test({LINENUM}19250, 'gcd(-100, 48)', 4);
  Test({LINENUM}19251, 'gcd(100, -45)', 5);
  Test({LINENUM}19252, 'gcd(1, -123)', 1);
  Test({LINENUM}19253, 'gcd(1, -1024)', 1);
  Test({LINENUM}19254, 'gcd(1024, -4096)', 1024);
  Test({LINENUM}19255, 'gcd(16, -4096)', 16);
  Test({LINENUM}19256, 'gcd(-1, -1)', 1);
  Test({LINENUM}19257, 'gcd(-204110088, -1147278130)', 2);
  Test({LINENUM}19258, 'gcd(-204110088, -1147278131)', 1);
  Test({LINENUM}19259, 'gcd(-204110088, -1147278132)', 1121484);
  Test({LINENUM}19260, 'gcd(-204110088, -1147278133)', 1);
  Test({LINENUM}19261, 'gcd(204110088, -1147278134)', 2);
  Test({LINENUM}19262, 'gcd(204110088, -204110088)', 204110088);
  Test({LINENUM}19263, 'gcd(38237143473243, -135261142842969)', 73391830083);
  Test({LINENUM}19264, 'gcd(-14139833799843612, 6808068125850628)', 523697548142356);
  Test({LINENUM}19265, 'gcd(-80864667758636586, -34792835773219524)', 191169427325382);
  Test({LINENUM}19266, 'gcd(-182, -521)', 1);
  Test({LINENUM}19267, 'gcd(-80864667758636586, -34792835773219541)', 1);
  Test({LINENUM}19268, 'gcd(80864667758636586, -34792835773219542)', 18);

  Test({LINENUM}19270, 'gcd(1234, 0)', 1234);
  Test({LINENUM}19271, 'gcd(1, 0)', 1);
  Test({LINENUM}19272, 'gcd(891156, 0)', 891156);
  Test({LINENUM}19273, 'gcd(-84129156165137369, 0)', 84129156165137369);
  Test({LINENUM}19274, 'gcd(-34315618861, 0)', 34315618861);
  Test({LINENUM}19275, 'gcd(0, 151651561)', 151651561);
  Test({LINENUM}19276, 'gcd(0, -151818)', 151818);

  Test({LINENUM}19278, 'gcd(0, 0)', 0); // by definition (with good reason)

  Test({LINENUM}19280, 'gcd(1.2, 5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}19281, 'gcd("fifty-seven", 5)', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}19283, 'gcd(0, 9, 15)', 3);
  Test({LINENUM}19284, 'gcd(8, 0, 12)', 4);
  Test({LINENUM}19285, 'gcd(36, 18, 0)', 18);
  Test({LINENUM}19286, 'gcd(100, 48, 0)', 4);
  Test({LINENUM}19287, 'gcd(100, 0, 45)', 5);
  Test({LINENUM}19288, 'gcd(1, 123, 0)', 1);
  Test({LINENUM}19289, 'gcd(1, 1024, 0)', 1);
  Test({LINENUM}19290, 'gcd(1024, 4096, 0)', 1024);
  Test({LINENUM}19291, 'gcd(0, 16, 0, 4096)', 16);
  Test({LINENUM}19292, 'gcd(1, 1, 0, 0, 0)', 1);
  Test({LINENUM}19293, 'gcd(204110088, 0, 1147278130)', 2);
  Test({LINENUM}19294, 'gcd(204110088, 0, 1147278131, 0)', 1);
  Test({LINENUM}19295, 'gcd(0, 204110088, 1147278132, 0, 0)', 1121484);
  Test({LINENUM}19296, 'gcd(0, 204110088, 0, 0, 1147278133)', 1);
  Test({LINENUM}19297, 'gcd(204110088, 1147278134, 0, 0)', 2);
  Test({LINENUM}19298, 'gcd(204110088, 204110088, 0)', 204110088);
  Test({LINENUM}19299, 'gcd(38237143473243, 0, 135261142842969)', 73391830083);
  Test({LINENUM}19300, 'gcd(14139833799843612, 0, 6808068125850628)', 523697548142356);
  Test({LINENUM}19301, 'gcd(80864667758636586, 0, 0, 34792835773219524)', 191169427325382);
  Test({LINENUM}19302, 'gcd(182, 521, 0)', 1);
  Test({LINENUM}19303, 'gcd(80864667758636586, 0, 34792835773219541)', 1);
  Test({LINENUM}19304, 'gcd(80864667758636586, 0, 34792835773219542)', 18);

  Test({LINENUM}19306, 'gcd(-9, 0, 15)', 3);
  Test({LINENUM}19307, 'gcd(-8, 12, 0)', 4);
  Test({LINENUM}19308, 'gcd(-36, 18, 0)', 18);
  Test({LINENUM}19309, 'gcd(0, -100, 0, 48, 0, 0)', 4);
  Test({LINENUM}19310, 'gcd(100, -45, 0)', 5);
  Test({LINENUM}19311, 'gcd(1, -123, 0)', 1);
  Test({LINENUM}19312, 'gcd(1, -1024, 0)', 1);
  Test({LINENUM}19313, 'gcd(1024, -4096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 1024);
  Test({LINENUM}19314, 'gcd(16, -4096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 16);
  Test({LINENUM}19315, 'gcd(-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1)', 1);
  Test({LINENUM}19316, 'gcd(-204110088, -1147278130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 2);
  Test({LINENUM}19317, 'gcd(-204110088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1147278131)', 1);
  Test({LINENUM}19318, 'gcd(-204110088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1147278132)', 1121484);
  Test({LINENUM}19319, 'gcd(-204110088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1147278133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 1);
  Test({LINENUM}19320, 'gcd(204110088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1147278134)', 2);
  Test({LINENUM}19321, 'gcd(204110088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -204110088)', 204110088);
  Test({LINENUM}19322, 'gcd(38237143473243, -135261142842969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 73391830083);
  Test({LINENUM}19323, 'gcd(-14139833799843612, 6808068125850628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 523697548142356);
  Test({LINENUM}19324, 'gcd(-80864667758636586, -34792835773219524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 191169427325382);
  Test({LINENUM}19325, 'gcd(-182, -521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 1);
  Test({LINENUM}19326, 'gcd(-80864667758636586, -34792835773219541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 1);
  Test({LINENUM}19327, 'gcd(80864667758636586, -34792835773219542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 18);

  Test({LINENUM}19329, 'gcd(24, 112, 48)', 8);
  Test({LINENUM}19330, 'gcd(555895039266567, 13254159421503, 34391511701547)', 86628492951);
  Test({LINENUM}19331, 'gcd(555895039266568, 13254159421504, 34391511701548)', 4);
  Test({LINENUM}19332, 'gcd(-24, 112, 48)', 8);
  Test({LINENUM}19333, 'gcd(555895039266567, -13254159421503, 34391511701547)', 86628492951);
  Test({LINENUM}19334, 'gcd(555895039266568, 13254159421504, -34391511701548)', 4);
  Test({LINENUM}19335, 'gcd(-24, -112, 48)', 8);
  Test({LINENUM}19336, 'gcd(555895039266567, -13254159421503, -34391511701547)', 86628492951);
  Test({LINENUM}19337, 'gcd(-555895039266568, -13254159421504, -34391511701548)', 4);
  Test({LINENUM}19338, 'gcd(-24, 112, 48)', 8);
  Test({LINENUM}19339, 'gcd(555895039266567, -13254159421503, 34391511701547)', 86628492951);
  Test({LINENUM}19340, 'gcd(555895039266568, 13254159421504, -34391511701548)', 4);
  Test({LINENUM}19341, 'gcd(0, -24, 0, -112, 48, 0, 48, 0, 48, 0, 0, 0, 0, 48)', 8);
  Test({LINENUM}19342, 'gcd(555895039266567, -13254159421503, -34391511701547, 0, 0, 0, 0)', 86628492951);
  Test({LINENUM}19343, 'gcd(-555895039266568, -13254159421504, 0, -34391511701548)', 4);
  Test({LINENUM}19344, 'gcd(-555895039266568, -13254159421504, 0, -34391511701548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)', 4);

  Test({LINENUM}19346, 'gcd(17083391833753245, 1658046196970163, 3124654574720679, 2728800101080053, 1703472120174825, 3017579184309690, 2306987957036763)', 3244708800333);
  Test({LINENUM}19347, 'gcd(7000413963543, 13947287476122, 5313889758177, 10293151697829, 2489630969826, 13063870035216, 3868297582149)', 13385112741);

  Test({LINENUM}19349, 'gcd(17083391833753245, 1658046196970163, 3124654574720679, 2728800101080053, 1703472120174825, 3017579184309690, 2306987957036763, 17083391833753245, '+'1658046196970163, 3124654574720679, 2728800101080053, 1703472120174825, 3017579184309690, 2306987957036763, 17083391833753245, 1658046196970163, 3124654574720679, 2728800101080053, 1703472120174825, '+'3017579184309690, 2306987957036763, 17083391833753245, 1658046196970163, 3124654574720679, 2728800101080053, 1703472120174825, 3017579184309690, 2306987957036763, 17083391833753245, 1658046196970163, 3124654574720679, 2728800101080053, '+'1703472120174825, 3017579184309690, 2306987957036763, 17083391833753245, 1658046196970163, 3124654574720679, 2728800101080053, 1703472120174825, 3017579184309690, 2306987957036763)', 3244708800333);

  Test({LINENUM}19351, 'gcd(-17083391833753245, 1658046196970163, 3124654574720679, 2728800101080053, -1703472120174825, 3017579184309690, 2306987957036763, -17083391833753245, '+'1658046196970163, 3124654574720679, -2728800101080053, 1703472120174825, 3017579184309690, -2306987957036763, -17083391833753245, -1658046196970163, -3124654574720679, 2728800101080053, -1703472120174825, '+'3017579184309690, 2306987957036763, 0, 17083391833753245, 1658046196970163, 3124654574720679, 2728800101080053, 1703472120174825, 3017579184309690, 2306987957036763, 17083391833753245, 1658046196970163, 3124654574720679, 2728800101080053, '+'1703472120174825, 3017579184309690, 2306987957036763, 17083391833753245, 1658046196970163, 3124654574720679, 2728800101080053, 1703472120174825, 3017579184309690, 0, 0, -2306987957036763)', 3244708800333);

  Test({LINENUM}19353, 'gcd(0, 0, 0)', 0);
  Test({LINENUM}19354, 'gcd(0, 1, 0)', 1);
  Test({LINENUM}19355, 'gcd(0, 1, 1024)', 1);
  Test({LINENUM}19356, 'gcd(0, -1, 0)', 1);
  Test({LINENUM}19357, 'gcd(0, -1, -1024)', 1);

  Test({LINENUM}19359, 'gcd()', failure, 'Cannot compute the GCD of an empty list.');

  // Least common multiple (LCM)

  Test({LINENUM}19363, 'lcm(3, 7)', 21);
  Test({LINENUM}19364, 'lcm(10, 4)', 20);
  Test({LINENUM}19365, 'lcm(4, 12)', 12);
  Test({LINENUM}19366, 'lcm(24486, 5538)', 22600578);
  Test({LINENUM}19367, 'lcm(217932, 301158)', 76494132);
  Test({LINENUM}19368, 'lcm(4249920670453458, 4157864627050134)', 1151728501692887118);

  Test({LINENUM}19370, 'lcm(4)', 4);
  Test({LINENUM}19371, 'lcm(24486)', 24486);
  Test({LINENUM}19372, 'lcm(217932)', 217932);

  Test({LINENUM}19374, 'lcm(-3, 7)', 21);
  Test({LINENUM}19375, 'lcm(-10, 4)', 20);
  Test({LINENUM}19376, 'lcm(4, -12)', 12);
  Test({LINENUM}19377, 'lcm(24486, -5538)', 22600578);
  Test({LINENUM}19378, 'lcm(-217932, -301158)', 76494132);
  Test({LINENUM}19379, 'lcm(-4249920670453458, -4157864627050134)', 1151728501692887118);

  Test({LINENUM}19381, 'lcm(1234, 1)', 1234);
  Test({LINENUM}19382, 'lcm(1, 1)', 1);
  Test({LINENUM}19383, 'lcm(123456789123456, 1)', 123456789123456);

  Test({LINENUM}19385, 'lcm(-1234, 1)', 1234);
  Test({LINENUM}19386, 'lcm(-1, 1)', 1);
  Test({LINENUM}19387, 'lcm(-123456789123456, 1)', 123456789123456);

  Test({LINENUM}19389, 'lcm(-3, 7, 1)', 21);
  Test({LINENUM}19390, 'lcm(-10, 1, 4, 1)', 20);
  Test({LINENUM}19391, 'lcm(4, -12, 1, 1, -1)', 12);
  Test({LINENUM}19392, 'lcm(24486, -5538, 1)', 22600578);
  Test({LINENUM}19393, 'lcm(-217932, 1, -301158)', 76494132);
  Test({LINENUM}19394, 'lcm(1, 1, -4249920670453458, -1, -4157864627050134, 1)', 1151728501692887118);

  Test({LINENUM}19396, 'lcm(151327422246, 231607221846, 311887021446)', 67844471888126934);
  Test({LINENUM}19397, 'lcm(-151327422246, 231607221846, 311887021446)', 67844471888126934);
  Test({LINENUM}19398, 'lcm(-151327422246, -231607221846, 311887021446)', 67844471888126934);
  Test({LINENUM}19399, 'lcm(-151327422246, -231607221846, -311887021446)', 67844471888126934);
  Test({LINENUM}19400, 'lcm(-151327422246, -231607221846, 1, 1, -311887021446, -1, 1, 1)', 67844471888126934);

  Test({LINENUM}19402, 'lcm(3, 0)', 0);
  Test({LINENUM}19403, 'lcm(0, 4)', 0);
  Test({LINENUM}19404, 'lcm(0, 0)', 0);
  Test({LINENUM}19405, 'lcm(0)', 0);
  Test({LINENUM}19406, 'lcm(217932, 301158, 0)', 0);
  Test({LINENUM}19407, 'lcm(0, 4249920670453458, 4157864627050134)', 0);
  Test({LINENUM}19408, 'lcm(1, 1, -4249920670453458, -1, 0, -4157864627050134, 1)', 0);
  Test({LINENUM}19409, 'lcm(151327422246, 0, 0, 0, 231607221846, 311887021446)', 0);

  Test({LINENUM}19411, 'lcm(627619846691838, 2060592594005946, 2838174704951586)', failure, 'LCM too large for the integer type.');
  Test({LINENUM}19412, 'lcm(627619846691838, 2060592594005946, 2838174704951586, 3949006292016786)', failure, 'LCM too large for the integer type.');

  Test({LINENUM}19414, 'lcm(1.2, 5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}19415, 'lcm("fifty-seven", 5)', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}19417, 'lcm()', failure, 'Cannot compute the LCM of an empty list.');

  // Binomial coefficients (combinations)

  Test({LINENUM}19421, 'binomial(0, 0)', 1);

  Test({LINENUM}19423, 'binomial(1, 0)', 1);
  Test({LINENUM}19424, 'binomial(1, 1)', 1);

  Test({LINENUM}19426, 'binomial(2, 0)', 1);
  Test({LINENUM}19427, 'binomial(2, 1)', 2);
  Test({LINENUM}19428, 'binomial(2, 2)', 1);

  Test({LINENUM}19430, 'binomial(5, 0)', 1);
  Test({LINENUM}19431, 'binomial(5, 1)', 5);
  Test({LINENUM}19432, 'binomial(5, 2)', 10);
  Test({LINENUM}19433, 'binomial(5, 3)', 10);
  Test({LINENUM}19434, 'binomial(5, 4)', 5);
  Test({LINENUM}19435, 'binomial(5, 5)', 1);

  Test({LINENUM}19437, 'binomial(10, 0)', 1);
  Test({LINENUM}19438, 'binomial(10, 1)', 10);
  Test({LINENUM}19439, 'binomial(10, 2)', 45);
  Test({LINENUM}19440, 'binomial(10, 3)', 120);
  Test({LINENUM}19441, 'binomial(10, 4)', 210);
  Test({LINENUM}19442, 'binomial(10, 5)', 252);
  Test({LINENUM}19443, 'binomial(10, 6)', 210);
  Test({LINENUM}19444, 'binomial(10, 7)', 120);
  Test({LINENUM}19445, 'binomial(10, 8)', 45);
  Test({LINENUM}19446, 'binomial(10, 9)', 10);
  Test({LINENUM}19447, 'binomial(10, 10)', 1);

  Test({LINENUM}19449, 'binomial(20, 0)', 1);
  Test({LINENUM}19450, 'binomial(20, 1)', 20);
  Test({LINENUM}19451, 'binomial(20, 2)', 190);
  Test({LINENUM}19452, 'binomial(20, 3)', 1140);
  Test({LINENUM}19453, 'binomial(20, 4)', 4845);
  Test({LINENUM}19454, 'binomial(20, 5)', 15504);
  Test({LINENUM}19455, 'binomial(20, 6)', 38760);
  Test({LINENUM}19456, 'binomial(20, 7)', 77520);
  Test({LINENUM}19457, 'binomial(20, 8)', 125970);
  Test({LINENUM}19458, 'binomial(20, 9)', 167960);
  Test({LINENUM}19459, 'binomial(20, 10)', 184756);
  Test({LINENUM}19460, 'binomial(20, 11)', 167960);
  Test({LINENUM}19461, 'binomial(20, 12)', 125970);
  Test({LINENUM}19462, 'binomial(20, 13)', 77520);
  Test({LINENUM}19463, 'binomial(20, 14)', 38760);
  Test({LINENUM}19464, 'binomial(20, 15)', 15504);
  Test({LINENUM}19465, 'binomial(20, 16)', 4845);
  Test({LINENUM}19466, 'binomial(20, 17)', 1140);
  Test({LINENUM}19467, 'binomial(20, 18)', 190);
  Test({LINENUM}19468, 'binomial(20, 19)', 20);
  Test({LINENUM}19469, 'binomial(20, 20)', 1);

  Test({LINENUM}19471, 'binomial(50, 0)', 1);
  Test({LINENUM}19472, 'binomial(50, 1)', 50);
  Test({LINENUM}19473, 'binomial(50, 2)', 1225);
  Test({LINENUM}19474, 'binomial(50, 3)', 19600);
  Test({LINENUM}19475, 'binomial(50, 4)', 230300);
  Test({LINENUM}19476, 'binomial(50, 5)', 2118760);
  Test({LINENUM}19477, 'binomial(50, 6)', 15890700);
  Test({LINENUM}19478, 'binomial(50, 7)', 99884400);
  Test({LINENUM}19479, 'binomial(50, 8)', 536878650);
  Test({LINENUM}19480, 'binomial(50, 9)', 2505433700);
  Test({LINENUM}19481, 'binomial(50, 10)', 10272278170);
  Test({LINENUM}19482, 'binomial(50, 11)', 37353738800);
  Test({LINENUM}19483, 'binomial(50, 12)', 121399651100);
  Test({LINENUM}19484, 'binomial(50, 13)', 354860518600);
  Test({LINENUM}19485, 'binomial(50, 14)', 937845656300);
  Test({LINENUM}19486, 'binomial(50, 15)', 2250829575120);
  Test({LINENUM}19487, 'binomial(50, 16)', 4923689695575);
  Test({LINENUM}19488, 'binomial(50, 17)', 9847379391150);
  Test({LINENUM}19489, 'binomial(50, 18)', 18053528883775);
  Test({LINENUM}19490, 'binomial(50, 19)', 30405943383200);
  Test({LINENUM}19491, 'binomial(50, 20)', 47129212243960);
  Test({LINENUM}19492, 'binomial(50, 21)', 67327446062800);
  Test({LINENUM}19493, 'binomial(50, 22)', 88749815264600);
  Test({LINENUM}19494, 'binomial(50, 23)', 108043253365600);
  Test({LINENUM}19495, 'binomial(50, 24)', 121548660036300);
  Test({LINENUM}19496, 'binomial(50, 25)', 126410606437752);
  Test({LINENUM}19497, 'binomial(50, 26)', 121548660036300);
  Test({LINENUM}19498, 'binomial(50, 27)', 108043253365600);
  Test({LINENUM}19499, 'binomial(50, 28)', 88749815264600);
  Test({LINENUM}19500, 'binomial(50, 29)', 67327446062800);
  Test({LINENUM}19501, 'binomial(50, 30)', 47129212243960);
  Test({LINENUM}19502, 'binomial(50, 31)', 30405943383200);
  Test({LINENUM}19503, 'binomial(50, 32)', 18053528883775);
  Test({LINENUM}19504, 'binomial(50, 33)', 9847379391150);
  Test({LINENUM}19505, 'binomial(50, 34)', 4923689695575);
  Test({LINENUM}19506, 'binomial(50, 35)', 2250829575120);
  Test({LINENUM}19507, 'binomial(50, 36)', 937845656300);
  Test({LINENUM}19508, 'binomial(50, 37)', 354860518600);
  Test({LINENUM}19509, 'binomial(50, 38)', 121399651100);
  Test({LINENUM}19510, 'binomial(50, 39)', 37353738800);
  Test({LINENUM}19511, 'binomial(50, 40)', 10272278170);
  Test({LINENUM}19512, 'binomial(50, 41)', 2505433700);
  Test({LINENUM}19513, 'binomial(50, 42)', 536878650);
  Test({LINENUM}19514, 'binomial(50, 43)', 99884400);
  Test({LINENUM}19515, 'binomial(50, 44)', 15890700);
  Test({LINENUM}19516, 'binomial(50, 45)', 2118760);
  Test({LINENUM}19517, 'binomial(50, 46)', 230300);
  Test({LINENUM}19518, 'binomial(50, 47)', 19600);
  Test({LINENUM}19519, 'binomial(50, 48)', 1225);
  Test({LINENUM}19520, 'binomial(50, 49)', 50);
  Test({LINENUM}19521, 'binomial(50, 50)', 1);

  Test({LINENUM}19523, 'binomial(100, 0   )', 1);
  Test({LINENUM}19524, 'binomial(100, 1   )', 100);
  Test({LINENUM}19525, 'binomial(100, 2   )', 4950);
  Test({LINENUM}19526, 'binomial(100, 3   )', 161700);
  Test({LINENUM}19527, 'binomial(100, 4   )', 3921225);
  Test({LINENUM}19528, 'binomial(100, 5   )', 75287520);
  Test({LINENUM}19529, 'binomial(100, 6   )', 1192052400);
  Test({LINENUM}19530, 'binomial(100, 7   )', 16007560800);
  Test({LINENUM}19531, 'binomial(100, 8   )', 186087894300);
  Test({LINENUM}19532, 'binomial(100, 9   )', 1902231808400);
  Test({LINENUM}19533, 'binomial(100, 10  )', 17310309456440);
  Test({LINENUM}19534, 'binomial(100, 11  )', 141629804643600);
  Test({LINENUM}19535, 'binomial(100, 12  )', 1050421051106700);
  Test({LINENUM}19536, 'binomial(100, 13  )', 7110542499799200);
  Test({LINENUM}19537, 'binomial(100, 14  )', 44186942677323600);
  Test({LINENUM}19538, 'binomial(100, 15  )', 253338471349988640);
  Test({LINENUM}19539, 'binomial(100, 16  )', 1345860629046814650);
  Test({LINENUM}19540, 'binomial(100, 17  )', 6650134872937201800);
  Eps; Test({LINENUM}19541, 'binomial(100, 18  )', 30664510802988208300.0);
  Eps; Test({LINENUM}19542, 'binomial(100, 19  )', 132341572939212267400.0);
  Eps; Test({LINENUM}19543, 'binomial(100, 20  )', 535983370403809682970.0);
  Eps; Test({LINENUM}19544, 'binomial(100, 21  )', 2041841411062132125600.0);
  Eps; Test({LINENUM}19545, 'binomial(100, 22  )', 7332066885177656269200.0);
  Eps; Test({LINENUM}19546, 'binomial(100, 23  )', 24865270306254660391200.0);
  Eps; Test({LINENUM}19547, 'binomial(100, 24  )', 79776075565900368755100.0);
  Eps; Test({LINENUM}19548, 'binomial(100, 25  )', 242519269720337121015504.0);
  Eps; Test({LINENUM}19549, 'binomial(100, 26  )', 699574816500972464467800.0);
  Eps; Test({LINENUM}19550, 'binomial(100, 27  )', 1917353200780443050763600.0);
  Eps; Test({LINENUM}19551, 'binomial(100, 28  )', 4998813702034726525205100.0);
  Eps; Test({LINENUM}19552, 'binomial(100, 29  )', 12410847811948286545336800.0);
  Eps; Test({LINENUM}19553, 'binomial(100, 30  )', 29372339821610944823963760.0);
  Eps; Test({LINENUM}19554, 'binomial(100, 31  )', 66324638306863423796047200.0);
  Eps; Test({LINENUM}19555, 'binomial(100, 32  )', 143012501349174257560226775.0);
  Eps; Test({LINENUM}19556, 'binomial(100, 33  )', 294692427022540894366527900.0);
  Eps; Test({LINENUM}19557, 'binomial(100, 34  )', 580717429720889409486981450.0);
  Eps; Test({LINENUM}19558, 'binomial(100, 35  )', 1095067153187962886461165020.0);
  Eps; Test({LINENUM}19559, 'binomial(100, 36  )', 1977204582144932989443770175.0);
  Eps; Test({LINENUM}19560, 'binomial(100, 37  )', 3420029547493938143902737600.0);
  Eps; Test({LINENUM}19561, 'binomial(100, 38  )', 5670048986634686922786117600.0);
  Eps; Test({LINENUM}19562, 'binomial(100, 39  )', 9013924030034630492634340800.0);
  Eps; Test({LINENUM}19563, 'binomial(100, 40  )', 13746234145802811501267369720.0);
  Eps; Test({LINENUM}19564, 'binomial(100, 41  )', 20116440213369968050635175200.0);
  Eps; Test({LINENUM}19565, 'binomial(100, 42  )', 28258808871162574166368460400.0);
  Eps; Test({LINENUM}19566, 'binomial(100, 43  )', 38116532895986727945334202400.0);
  Eps; Test({LINENUM}19567, 'binomial(100, 44  )', 49378235797073715747364762200.0);
  Eps; Test({LINENUM}19568, 'binomial(100, 45  )', 61448471214136179596720592960.0);
  Eps; Test({LINENUM}19569, 'binomial(100, 46  )', 73470998190814997343905056800.0);
  Eps; Test({LINENUM}19570, 'binomial(100, 47  )', 84413487283064039501507937600.0);
  Eps; Test({LINENUM}19571, 'binomial(100, 48  )', 93206558875049876949581681100.0);
  Eps; Test({LINENUM}19572, 'binomial(100, 49  )', 98913082887808032681188722800.0);
  Eps; Test({LINENUM}19573, 'binomial(100, 50  )', 100891344545564193334812497256.0);
  Eps; Test({LINENUM}19574, 'binomial(100, 51  )', 98913082887808032681188722800.0);
  Eps; Test({LINENUM}19575, 'binomial(100, 52  )', 93206558875049876949581681100.0);
  Eps; Test({LINENUM}19576, 'binomial(100, 53  )', 84413487283064039501507937600.0);
  Eps; Test({LINENUM}19577, 'binomial(100, 54  )', 73470998190814997343905056800.0);
  Eps; Test({LINENUM}19578, 'binomial(100, 55  )', 61448471214136179596720592960.0);
  Eps; Test({LINENUM}19579, 'binomial(100, 56  )', 49378235797073715747364762200.0);
  Eps; Test({LINENUM}19580, 'binomial(100, 57  )', 38116532895986727945334202400.0);
  Eps; Test({LINENUM}19581, 'binomial(100, 58  )', 28258808871162574166368460400.0);
  Eps; Test({LINENUM}19582, 'binomial(100, 59  )', 20116440213369968050635175200.0);
  Eps; Test({LINENUM}19583, 'binomial(100, 60  )', 13746234145802811501267369720.0);
  Eps; Test({LINENUM}19584, 'binomial(100, 61  )', 9013924030034630492634340800.0);
  Eps; Test({LINENUM}19585, 'binomial(100, 62  )', 5670048986634686922786117600.0);
  Eps; Test({LINENUM}19586, 'binomial(100, 63  )', 3420029547493938143902737600.0);
  Eps; Test({LINENUM}19587, 'binomial(100, 64  )', 1977204582144932989443770175.0);
  Eps; Test({LINENUM}19588, 'binomial(100, 65  )', 1095067153187962886461165020.0);
  Eps; Test({LINENUM}19589, 'binomial(100, 66  )', 580717429720889409486981450.0);
  Eps; Test({LINENUM}19590, 'binomial(100, 67  )', 294692427022540894366527900.0);
  Eps; Test({LINENUM}19591, 'binomial(100, 68  )', 143012501349174257560226775.0);
  Eps; Test({LINENUM}19592, 'binomial(100, 69  )', 66324638306863423796047200.0);
  Eps; Test({LINENUM}19593, 'binomial(100, 70  )', 29372339821610944823963760.0);
  Eps; Test({LINENUM}19594, 'binomial(100, 71  )', 12410847811948286545336800.0);
  Eps; Test({LINENUM}19595, 'binomial(100, 72  )', 4998813702034726525205100.0);
  Eps; Test({LINENUM}19596, 'binomial(100, 73  )', 1917353200780443050763600.0);
  Eps; Test({LINENUM}19597, 'binomial(100, 74  )', 699574816500972464467800.0);
  Eps; Test({LINENUM}19598, 'binomial(100, 75  )', 242519269720337121015504.0);
  Eps; Test({LINENUM}19599, 'binomial(100, 76  )', 79776075565900368755100.0);
  Eps; Test({LINENUM}19600, 'binomial(100, 77  )', 24865270306254660391200.0);
  Eps; Test({LINENUM}19601, 'binomial(100, 78  )', 7332066885177656269200.0);
  Eps; Test({LINENUM}19602, 'binomial(100, 79  )', 2041841411062132125600.0);
  Eps; Test({LINENUM}19603, 'binomial(100, 80  )', 535983370403809682970.0);
  Eps; Test({LINENUM}19604, 'binomial(100, 81  )', 132341572939212267400.0);
  Eps; Test({LINENUM}19605, 'binomial(100, 82  )', 30664510802988208300.0);
  Test({LINENUM}19606, 'binomial(100, 83  )', 6650134872937201800);
  Test({LINENUM}19607, 'binomial(100, 84  )', 1345860629046814650);
  Test({LINENUM}19608, 'binomial(100, 85  )', 253338471349988640);
  Test({LINENUM}19609, 'binomial(100, 86  )', 44186942677323600);
  Test({LINENUM}19610, 'binomial(100, 87  )', 7110542499799200);
  Test({LINENUM}19611, 'binomial(100, 88  )', 1050421051106700);
  Test({LINENUM}19612, 'binomial(100, 89  )', 141629804643600);
  Test({LINENUM}19613, 'binomial(100, 90  )', 17310309456440);
  Test({LINENUM}19614, 'binomial(100, 91  )', 1902231808400);
  Test({LINENUM}19615, 'binomial(100, 92  )', 186087894300);
  Test({LINENUM}19616, 'binomial(100, 93  )', 16007560800);
  Test({LINENUM}19617, 'binomial(100, 94  )', 1192052400);
  Test({LINENUM}19618, 'binomial(100, 95  )', 75287520);
  Test({LINENUM}19619, 'binomial(100, 96  )', 3921225);
  Test({LINENUM}19620, 'binomial(100, 97  )', 161700);
  Test({LINENUM}19621, 'binomial(100, 98  )', 4950);
  Test({LINENUM}19622, 'binomial(100, 99  )', 100);
  Test({LINENUM}19623, 'binomial(100, 100 )', 1);

  Test({LINENUM}19625, 'binomial(200, 0   )', 1);
  Test({LINENUM}19626, 'binomial(200, 1   )', 200);
  Test({LINENUM}19627, 'binomial(200, 2   )', 19900);
  Test({LINENUM}19628, 'binomial(200, 3   )', 1313400);
  Test({LINENUM}19629, 'binomial(200, 4   )', 64684950);
  Test({LINENUM}19630, 'binomial(200, 5   )', 2535650040);
  Test({LINENUM}19631, 'binomial(200, 6   )', 82408626300);
  Test({LINENUM}19632, 'binomial(200, 7   )', 2283896214600);
  Test({LINENUM}19633, 'binomial(200, 8   )', 55098996177225);
  Test({LINENUM}19634, 'binomial(200, 9   )', 1175445251780800);
  Test({LINENUM}19635, 'binomial(200, 10  )', 22451004309013280);
  Test({LINENUM}19636, 'binomial(200, 11  )', 387790074428411200);
  Test({LINENUM}19637, 'binomial(200, 12  )', 6107693672247476400);
  Eps; Test({LINENUM}19638, 'binomial(200, 13  )', 88326646952501966400.0);
  Eps; Test({LINENUM}19639, 'binomial(200, 14  )', 1179791641436990551200.0);
  Eps; Test({LINENUM}19640, 'binomial(200, 15  )', 14629416353818682834880.0);
  Eps; Test({LINENUM}19641, 'binomial(200, 16  )', 169152626591028520278300.0);
  Eps; Test({LINENUM}19642, 'binomial(200, 17  )', 1830828428985249866541600.0);
  Eps; Test({LINENUM}19643, 'binomial(200, 18  )', 18613422361350040309839600.0);
  Eps; Test({LINENUM}19644, 'binomial(200, 19  )', 178296993145563544020568800.0);
  Eps; Test({LINENUM}19645, 'binomial(200, 20  )', 1613587787967350073386147640.0);
  Eps; Test({LINENUM}19646, 'binomial(200, 21  )', 13830752468291572057595551200.0);
  Eps; Test({LINENUM}19647, 'binomial(200, 22  )', 112532031446554154468618348400.0);
  Eps; Test({LINENUM}19648, 'binomial(200, 23  )', 870900069455940847626698522400.0);
  Eps; Test({LINENUM}19649, 'binomial(200, 24  )', 6422888012237563751246901602700.0);
  Eps; Test({LINENUM}19650, 'binomial(200, 25  )', 45217131606152448808778187283008.0);
  Eps; Test({LINENUM}19651, 'binomial(200, 26  )', 304346078118333790059083952866400.0);
  Eps; Test({LINENUM}19652, 'binomial(200, 27  )', 1961341392318151091491874362916800.0);
  Eps; Test({LINENUM}19653, 'binomial(200, 28  )', 12118287888251433529574795170878800.0);
  Eps; Test({LINENUM}19654, 'binomial(200, 29  )', 71873983337215398865064302392798400.0);
  Eps; Test({LINENUM}19655, 'binomial(200, 30  )', 409681705022127773530866523638950880.0);
  Eps; Test({LINENUM}19656, 'binomial(200, 31  )', 2246641608185861983878945452213601600.0);
  Eps; Test({LINENUM}19657, 'binomial(200, 32  )', 11865075993231583602360680669503083450.0);
  Eps; Test({LINENUM}19658, 'binomial(200, 33  )', 60404023238269880157472556135652061200.0);
  Eps; Test({LINENUM}19659, 'binomial(200, 34  )', 296690349435031470185232849254526300600.0);
  Eps; Test({LINENUM}19660, 'binomial(200, 35  )', 1407159943034720687164247227892896168560.0);
  Eps; Test({LINENUM}19661, 'binomial(200, 36  )', 6449483072242469816169466461175774105900.0);
  Eps; Test({LINENUM}19662, 'binomial(200, 37  )', 28586897941831487833832229719806133874800.0);
  Eps; Test({LINENUM}19663, 'binomial(200, 38  )', 122622746434698224129332985377063153199800.0);
  Eps; Test({LINENUM}19664, 'binomial(200, 39  )', 509356023651823392537229323873954636368400.0);
  Eps; Test({LINENUM}19665, 'binomial(200, 40  )', 2050157995198589154962348028592667411382810.0);
  Eps; Test({LINENUM}19666, 'binomial(200, 41  )', 8000616566628640604731114257922604532225600.0);
  Eps; Test({LINENUM}19667, 'binomial(200, 42  )', 30288048430808425146482075404992717157711200.0);
  Eps; Test({LINENUM}19668, 'binomial(200, 43  )', 111290968652737934259166695674159286300427200.0);
  Eps; Test({LINENUM}19669, 'binomial(200, 44  )', 397106410874542174515662982291886544299251600.0);
  Eps; Test({LINENUM}19670, 'binomial(200, 45  )', 1376635557698412871654298338611873353570738880.0);
  Eps; Test({LINENUM}19671, 'binomial(200, 46  )', 4638663292244652067530787880105225430510098400.0);
  Eps; Test({LINENUM}19672, 'binomial(200, 47  )', 15199024404376094008505134756089462048905428800.0);
  Eps; Test({LINENUM}19673, 'binomial(200, 48  )', 48446890288948799652110117035035160280886054300.0);
  Eps; Test({LINENUM}19674, 'binomial(200, 49  )', 150284231100412603002464036516843762503973066400.0);
  Eps; Test({LINENUM}19675, 'binomial(200, 50  )', 453858377923246061067441390280868162761998660528.0);
  Eps; Test({LINENUM}19676, 'binomial(200, 51  )', 1334877582127194297257180559649612243417643119200.0);
  Eps; Test({LINENUM}19677, 'binomial(200, 52  )', 3824937687249075967140767372842158159023631245400.0);
  Eps; Test({LINENUM}19678, 'binomial(200, 53  )', 10680958070054023455411954173219611462933913666400.0);
  Eps; Test({LINENUM}19679, 'binomial(200, 54  )', 29075941412924841628621430804875608982431209425200.0);
  Eps; Test({LINENUM}19680, 'binomial(200, 55  )', 77183408114309579595976889045669798389726483201440.0);
  Eps; Test({LINENUM}19681, 'binomial(200, 56  )', 199849896010265875739583016278966442259113215432300.0);
  Eps; Test({LINENUM}19682, 'binomial(200, 57  )', 504883947815408528184209725336336275180917596881600.0);
  Eps; Test({LINENUM}19683, 'binomial(200, 58  )', 1244800078234541716040379150398208402601227868173600.0);
  Eps; Test({LINENUM}19684, 'binomial(200, 59  )', 2995959510327202096232776938246535477447023004756800.0);
  Eps; Test({LINENUM}19685, 'binomial(200, 60  )', 7040504849268924926147025804879358372000504061178480.0);
  Eps; Test({LINENUM}19686, 'binomial(200, 61  )', 16158535719633598191157108404641150361968369976475200.0);
  Eps; Test({LINENUM}19687, 'binomial(200, 62  )', 36226394597243066912432872068469675811509732689194400.0);
  Eps; Test({LINENUM}19688, 'binomial(200, 63  )', 79353054832056241808186291197600242253783223985854400.0);
  Eps; Test({LINENUM}19689, 'binomial(200, 64  )', 169865132999870392620648779594863018574504713844719575.0);
  Eps; Test({LINENUM}19690, 'binomial(200, 65  )', 355410124430498052252434369613867238863579093582797880.0);
  Eps; Test({LINENUM}19691, 'binomial(200, 66  )', 726975254516927834152706665119273897675502691419359300.0);
  Eps; Test({LINENUM}19692, 'binomial(200, 67  )', 1453950509033855668305413330238547795351005382838718600.0);
  Eps; Test({LINENUM}19693, 'binomial(200, 68  )', 2843756142669158880656176072378336129142407587022787850.0);
  Eps; Test({LINENUM}19694, 'binomial(200, 69  )', 5440229142497521336907467268897686507924605818652289800.0);
  Eps; Test({LINENUM}19695, 'binomial(200, 70  )', 10181000252388218501926831603222813321973190889192142340.0);
  Eps; Test({LINENUM}19696, 'binomial(200, 71  )', 18641268067753076130288564907309376505021335430915190200.0);
  Eps; Test({LINENUM}19697, 'binomial(200, 72  )', 33398938621390928066767012125595966238163225980389715775.0);
  Eps; Test({LINENUM}19698, 'binomial(200, 73  )', 58562522514219709486933939069538132581984834595751830400.0);
  Eps; Test({LINENUM}19699, 'binomial(200, 74  )', 100505950801431123038386625159883011323136135049465979200.0);
  Eps; Test({LINENUM}19700, 'binomial(200, 75  )', 168849997346404286704489530268603459022868706883102845056.0);
  Eps; Test({LINENUM}19701, 'binomial(200, 76  )', 277713811425007050500805148468097794445507741584050732000.0);
  Eps; Test({LINENUM}19702, 'binomial(200, 77  )', 447227436580530834572725174156417227418739739693795984000.0);
  Eps; Test({LINENUM}19703, 'binomial(200, 78  )', 705243265376990931441605082323581012468012666440216744000.0);
  Eps; Test({LINENUM}19704, 'binomial(200, 79  )', 1089109852860669539694630633461732702798703105135524592000.0);
  Eps; Test({LINENUM}19705, 'binomial(200, 80  )', 1647278652451762678788128833110870712983038446517480945400.0);
  Eps; Test({LINENUM}19706, 'binomial(200, 81  )', 2440412818447055820426857530534623278493390291137008808000.0);
  Eps; Test({LINENUM}19707, 'binomial(200, 82  )', 3541574699941459056473122513824636221228212739576878636000.0);
  Eps; Test({LINENUM}19708, 'binomial(200, 83  )', 5035009814374604441732872971461531013312398834579176856000.0);
  Eps; Test({LINENUM}19709, 'binomial(200, 84  )', 7013049384307484758127930210249989625685126948163853478000.0);
  Eps; Test({LINENUM}19710, 'binomial(200, 85  )', 9570749747996096846386351816341162312699702658670670628800.0);
  Eps; Test({LINENUM}19711, 'binomial(200, 86  )', 12798095593250594620167796033479461232098439601710780492000.0);
  Eps; Test({LINENUM}19712, 'binomial(200, 87  )', 16769918363569744674702629285248949200680713960862402024000.0);
  Eps; Test({LINENUM}19713, 'binomial(200, 88  )', 21534099716856603957288603514012855223601371336107402599000.0);
  Eps; Test({LINENUM}19714, 'binomial(200, 89  )', 27099091778516175766475545995162244775768017861168866192000.0);
  Eps; Test({LINENUM}19715, 'binomial(200, 90  )', 33422213193503283445319840060700101890113888695441601636800.0);
  Eps; Test({LINENUM}19716, 'binomial(200, 91  )', 40400477486652320648188817655791331955082722598885452528000.0);
  Eps; Test({LINENUM}19717, 'binomial(200, 92  )', 47865783109185901637528055700883208512000182209549068756000.0);
  Eps; Test({LINENUM}19718, 'binomial(200, 93  )', 55586070707441692224226129201025661497806663211089241136000.0);
  Eps; Test({LINENUM}19719, 'binomial(200, 94  )', 63273506018045330510555274728827082768779925144537753208000.0);
  Eps; Test({LINENUM}19720, 'binomial(200, 95  )', 70599911978029526674935359171112323931480758582326335158400.0);
  Eps; Test({LINENUM}19721, 'binomial(200, 96  )', 77218653725969794800710549093404104300057079699419429079500.0);
  Eps; Test({LINENUM}19722, 'binomial(200, 97  )', 82791133891761429477050485625917802548514807100408460044000.0);
  Eps; Test({LINENUM}19723, 'binomial(200, 98  )', 87015171335218645266695918566015649617316582972878279434000.0);
  Eps; Test({LINENUM}19724, 'binomial(200, 99  )', 89651994709013149668717007007410063242083752153874590932000.0);
  Eps; Test({LINENUM}19725, 'binomial(200, 100 )', 90548514656103281165404177077484163874504589675413336841320.0);
  Eps; Test({LINENUM}19726, 'binomial(200, 101 )', 89651994709013149668717007007410063242083752153874590932000.0);
  Eps; Test({LINENUM}19727, 'binomial(200, 102 )', 87015171335218645266695918566015649617316582972878279434000.0);
  Eps; Test({LINENUM}19728, 'binomial(200, 103 )', 82791133891761429477050485625917802548514807100408460044000.0);
  Eps; Test({LINENUM}19729, 'binomial(200, 104 )', 77218653725969794800710549093404104300057079699419429079500.0);
  Eps; Test({LINENUM}19730, 'binomial(200, 105 )', 70599911978029526674935359171112323931480758582326335158400.0);
  Eps; Test({LINENUM}19731, 'binomial(200, 106 )', 63273506018045330510555274728827082768779925144537753208000.0);
  Eps; Test({LINENUM}19732, 'binomial(200, 107 )', 55586070707441692224226129201025661497806663211089241136000.0);
  Eps; Test({LINENUM}19733, 'binomial(200, 108 )', 47865783109185901637528055700883208512000182209549068756000.0);
  Eps; Test({LINENUM}19734, 'binomial(200, 109 )', 40400477486652320648188817655791331955082722598885452528000.0);
  Eps; Test({LINENUM}19735, 'binomial(200, 110 )', 33422213193503283445319840060700101890113888695441601636800.0);
  Eps; Test({LINENUM}19736, 'binomial(200, 111 )', 27099091778516175766475545995162244775768017861168866192000.0);
  Eps; Test({LINENUM}19737, 'binomial(200, 112 )', 21534099716856603957288603514012855223601371336107402599000.0);
  Eps; Test({LINENUM}19738, 'binomial(200, 113 )', 16769918363569744674702629285248949200680713960862402024000.0);
  Eps; Test({LINENUM}19739, 'binomial(200, 114 )', 12798095593250594620167796033479461232098439601710780492000.0);
  Eps; Test({LINENUM}19740, 'binomial(200, 115 )', 9570749747996096846386351816341162312699702658670670628800.0);
  Eps; Test({LINENUM}19741, 'binomial(200, 116 )', 7013049384307484758127930210249989625685126948163853478000.0);
  Eps; Test({LINENUM}19742, 'binomial(200, 117 )', 5035009814374604441732872971461531013312398834579176856000.0);
  Eps; Test({LINENUM}19743, 'binomial(200, 118 )', 3541574699941459056473122513824636221228212739576878636000.0);
  Eps; Test({LINENUM}19744, 'binomial(200, 119 )', 2440412818447055820426857530534623278493390291137008808000.0);
  Eps; Test({LINENUM}19745, 'binomial(200, 120 )', 1647278652451762678788128833110870712983038446517480945400.0);
  Eps; Test({LINENUM}19746, 'binomial(200, 121 )', 1089109852860669539694630633461732702798703105135524592000.0);
  Eps; Test({LINENUM}19747, 'binomial(200, 122 )', 705243265376990931441605082323581012468012666440216744000.0);
  Eps; Test({LINENUM}19748, 'binomial(200, 123 )', 447227436580530834572725174156417227418739739693795984000.0);
  Eps; Test({LINENUM}19749, 'binomial(200, 124 )', 277713811425007050500805148468097794445507741584050732000.0);
  Eps; Test({LINENUM}19750, 'binomial(200, 125 )', 168849997346404286704489530268603459022868706883102845056.0);
  Eps; Test({LINENUM}19751, 'binomial(200, 126 )', 100505950801431123038386625159883011323136135049465979200.0);
  Eps; Test({LINENUM}19752, 'binomial(200, 127 )', 58562522514219709486933939069538132581984834595751830400.0);
  Eps; Test({LINENUM}19753, 'binomial(200, 128 )', 33398938621390928066767012125595966238163225980389715775.0);
  Eps; Test({LINENUM}19754, 'binomial(200, 129 )', 18641268067753076130288564907309376505021335430915190200.0);
  Eps; Test({LINENUM}19755, 'binomial(200, 130 )', 10181000252388218501926831603222813321973190889192142340.0);
  Eps; Test({LINENUM}19756, 'binomial(200, 131 )', 5440229142497521336907467268897686507924605818652289800.0);
  Eps; Test({LINENUM}19757, 'binomial(200, 132 )', 2843756142669158880656176072378336129142407587022787850.0);
  Eps; Test({LINENUM}19758, 'binomial(200, 133 )', 1453950509033855668305413330238547795351005382838718600.0);
  Eps; Test({LINENUM}19759, 'binomial(200, 134 )', 726975254516927834152706665119273897675502691419359300.0);
  Eps; Test({LINENUM}19760, 'binomial(200, 135 )', 355410124430498052252434369613867238863579093582797880.0);
  Eps; Test({LINENUM}19761, 'binomial(200, 136 )', 169865132999870392620648779594863018574504713844719575.0);
  Eps; Test({LINENUM}19762, 'binomial(200, 137 )', 79353054832056241808186291197600242253783223985854400.0);
  Eps; Test({LINENUM}19763, 'binomial(200, 138 )', 36226394597243066912432872068469675811509732689194400.0);
  Eps; Test({LINENUM}19764, 'binomial(200, 139 )', 16158535719633598191157108404641150361968369976475200.0);
  Eps; Test({LINENUM}19765, 'binomial(200, 140 )', 7040504849268924926147025804879358372000504061178480.0);
  Eps; Test({LINENUM}19766, 'binomial(200, 141 )', 2995959510327202096232776938246535477447023004756800.0);
  Eps; Test({LINENUM}19767, 'binomial(200, 142 )', 1244800078234541716040379150398208402601227868173600.0);
  Eps; Test({LINENUM}19768, 'binomial(200, 143 )', 504883947815408528184209725336336275180917596881600.0);
  Eps; Test({LINENUM}19769, 'binomial(200, 144 )', 199849896010265875739583016278966442259113215432300.0);
  Eps; Test({LINENUM}19770, 'binomial(200, 145 )', 77183408114309579595976889045669798389726483201440.0);
  Eps; Test({LINENUM}19771, 'binomial(200, 146 )', 29075941412924841628621430804875608982431209425200.0);
  Eps; Test({LINENUM}19772, 'binomial(200, 147 )', 10680958070054023455411954173219611462933913666400.0);
  Eps; Test({LINENUM}19773, 'binomial(200, 148 )', 3824937687249075967140767372842158159023631245400.0);
  Eps; Test({LINENUM}19774, 'binomial(200, 149 )', 1334877582127194297257180559649612243417643119200.0);
  Eps; Test({LINENUM}19775, 'binomial(200, 150 )', 453858377923246061067441390280868162761998660528.0);
  Eps; Test({LINENUM}19776, 'binomial(200, 151 )', 150284231100412603002464036516843762503973066400.0);
  Eps; Test({LINENUM}19777, 'binomial(200, 152 )', 48446890288948799652110117035035160280886054300.0);
  Eps; Test({LINENUM}19778, 'binomial(200, 153 )', 15199024404376094008505134756089462048905428800.0);
  Eps; Test({LINENUM}19779, 'binomial(200, 154 )', 4638663292244652067530787880105225430510098400.0);
  Eps; Test({LINENUM}19780, 'binomial(200, 155 )', 1376635557698412871654298338611873353570738880.0);
  Eps; Test({LINENUM}19781, 'binomial(200, 156 )', 397106410874542174515662982291886544299251600.0);
  Eps; Test({LINENUM}19782, 'binomial(200, 157 )', 111290968652737934259166695674159286300427200.0);
  Eps; Test({LINENUM}19783, 'binomial(200, 158 )', 30288048430808425146482075404992717157711200.0);
  Eps; Test({LINENUM}19784, 'binomial(200, 159 )', 8000616566628640604731114257922604532225600.0);
  Eps; Test({LINENUM}19785, 'binomial(200, 160 )', 2050157995198589154962348028592667411382810.0);
  Eps; Test({LINENUM}19786, 'binomial(200, 161 )', 509356023651823392537229323873954636368400.0);
  Eps; Test({LINENUM}19787, 'binomial(200, 162 )', 122622746434698224129332985377063153199800.0);
  Eps; Test({LINENUM}19788, 'binomial(200, 163 )', 28586897941831487833832229719806133874800.0);
  Eps; Test({LINENUM}19789, 'binomial(200, 164 )', 6449483072242469816169466461175774105900.0);
  Eps; Test({LINENUM}19790, 'binomial(200, 165 )', 1407159943034720687164247227892896168560.0);
  Eps; Test({LINENUM}19791, 'binomial(200, 166 )', 296690349435031470185232849254526300600.0);
  Eps; Test({LINENUM}19792, 'binomial(200, 167 )', 60404023238269880157472556135652061200.0);
  Eps; Test({LINENUM}19793, 'binomial(200, 168 )', 11865075993231583602360680669503083450.0);
  Eps; Test({LINENUM}19794, 'binomial(200, 169 )', 2246641608185861983878945452213601600.0);
  Eps; Test({LINENUM}19795, 'binomial(200, 170 )', 409681705022127773530866523638950880.0);
  Eps; Test({LINENUM}19796, 'binomial(200, 171 )', 71873983337215398865064302392798400.0);
  Eps; Test({LINENUM}19797, 'binomial(200, 172 )', 12118287888251433529574795170878800.0);
  Eps; Test({LINENUM}19798, 'binomial(200, 173 )', 1961341392318151091491874362916800.0);
  Eps; Test({LINENUM}19799, 'binomial(200, 174 )', 304346078118333790059083952866400.0);
  Eps; Test({LINENUM}19800, 'binomial(200, 175 )', 45217131606152448808778187283008.0);
  Eps; Test({LINENUM}19801, 'binomial(200, 176 )', 6422888012237563751246901602700.0);
  Eps; Test({LINENUM}19802, 'binomial(200, 177 )', 870900069455940847626698522400.0);
  Eps; Test({LINENUM}19803, 'binomial(200, 178 )', 112532031446554154468618348400.0);
  Eps; Test({LINENUM}19804, 'binomial(200, 179 )', 13830752468291572057595551200.0);
  Eps; Test({LINENUM}19805, 'binomial(200, 180 )', 1613587787967350073386147640.0);
  Eps; Test({LINENUM}19806, 'binomial(200, 181 )', 178296993145563544020568800.0);
  Eps; Test({LINENUM}19807, 'binomial(200, 182 )', 18613422361350040309839600.0);
  Eps; Test({LINENUM}19808, 'binomial(200, 183 )', 1830828428985249866541600.0);
  Eps; Test({LINENUM}19809, 'binomial(200, 184 )', 169152626591028520278300.0);
  Eps; Test({LINENUM}19810, 'binomial(200, 185 )', 14629416353818682834880.0);
  Eps; Test({LINENUM}19811, 'binomial(200, 186 )', 1179791641436990551200.0);
  Eps; Test({LINENUM}19812, 'binomial(200, 187 )', 88326646952501966400.0);
  Test({LINENUM}19813, 'binomial(200, 188 )', 6107693672247476400);
  Test({LINENUM}19814, 'binomial(200, 189 )', 387790074428411200);
  Test({LINENUM}19815, 'binomial(200, 190 )', 22451004309013280);
  Test({LINENUM}19816, 'binomial(200, 191 )', 1175445251780800);
  Test({LINENUM}19817, 'binomial(200, 192 )', 55098996177225);
  Test({LINENUM}19818, 'binomial(200, 193 )', 2283896214600);
  Test({LINENUM}19819, 'binomial(200, 194 )', 82408626300);
  Test({LINENUM}19820, 'binomial(200, 195 )', 2535650040);
  Test({LINENUM}19821, 'binomial(200, 196 )', 64684950);
  Test({LINENUM}19822, 'binomial(200, 197 )', 1313400);
  Test({LINENUM}19823, 'binomial(200, 198 )', 19900);
  Test({LINENUM}19824, 'binomial(200, 199 )', 200);
  Test({LINENUM}19825, 'binomial(200, 200 )', 1);

  Test({LINENUM}19827, 'binomial(400, 0   )', 1);
  Test({LINENUM}19828, 'binomial(400, 1   )', 400);
  Test({LINENUM}19829, 'binomial(400, 2   )', 79800);
  Test({LINENUM}19830, 'binomial(400, 3   )', 10586800);
  Test({LINENUM}19831, 'binomial(400, 4   )', 1050739900);
  Test({LINENUM}19832, 'binomial(400, 5   )', 83218600080);
  Test({LINENUM}19833, 'binomial(400, 6   )', 5478557838600);
  Test({LINENUM}19834, 'binomial(400, 7   )', 308364541201200);
  Test({LINENUM}19835, 'binomial(400, 8   )', 15148408086508950);
  Test({LINENUM}19836, 'binomial(400, 9   )', 659797329990167600);
  Eps; Test({LINENUM}19837, 'binomial(400, 10  )', 25798075602615553160.0);
  Eps; Test({LINENUM}19838, 'binomial(400, 11  )', 914659044092733248400.0);
  Eps; Test({LINENUM}19839, 'binomial(400, 12  )', 29650197346006102802300.0);
  Eps; Test({LINENUM}19840, 'binomial(400, 13  )', 884944351557720606714800.0);
  Eps; Test({LINENUM}19841, 'binomial(400, 14  )', 24462390289488419628473400.0);
  Eps; Test({LINENUM}19842, 'binomial(400, 15  )', 629498843449501998439382160.0);
  Eps; Test({LINENUM}19843, 'binomial(400, 16  )', 15147315920503641837447633225.0);
  Eps; Test({LINENUM}19844, 'binomial(400, 17  )', 342151136086670497975287715200.0);
  Eps; Test({LINENUM}19845, 'binomial(400, 18  )', 7280215840066377818029733051200.0);
  Eps; Test({LINENUM}19846, 'binomial(400, 19  )', 146370655310808227709860948713600.0);
  Eps; Test({LINENUM}19847, 'binomial(400, 20  )', 2788360983670896737872851072994080.0);
  Eps; Test({LINENUM}19848, 'binomial(400, 21  )', 50456055894997179066270638463702400.0);
  Eps; Test({LINENUM}19849, 'binomial(400, 22  )', 869220235645633221187116908079236800.0);
  Eps; Test({LINENUM}19850, 'binomial(400, 23  )', 14285445611915189461249138750171804800.0);
  Eps; Test({LINENUM}19851, 'binomial(400, 24  )', 224400541487167767787121887867282100400.0);
  Eps; Test({LINENUM}19852, 'binomial(400, 25  )', 3374984143967003227518313193523922790016.0);
  Eps; Test({LINENUM}19853, 'binomial(400, 26  )', 48677655922601008089206440291210424856000.0);
  Eps; Test({LINENUM}19854, 'binomial(400, 27  )', 674275678335288037976415135885655514672000.0);
  Eps; Test({LINENUM}19855, 'binomial(400, 28  )', 8982315286395087077328673060191053820452000.0);
  Eps; Test({LINENUM}19856, 'binomial(400, 29  )', 115221423673757668716078150979002483489936000.0);
  Eps; Test({LINENUM}19857, 'binomial(400, 30  )', 1424904939432136503122166467106997379158875200.0);
  Eps; Test({LINENUM}19858, 'binomial(400, 31  )', 17006929922254532456619406220309323557702704000.0);
  Eps; Test({LINENUM}19859, 'binomial(400, 32  )', 196111160665997577390392527977941887274759305500.0);
  Eps; Test({LINENUM}19860, 'binomial(400, 33  )', 2186936579548094196353468190784321652033679528000.0);
  Eps; Test({LINENUM}19861, 'binomial(400, 34  )', 23606050726298546178285965471113119008716481964000.0);
  Eps; Test({LINENUM}19862, 'binomial(400, 35  )', 246851844737864797178647524640782901634006639966400.0);
  Eps; Test({LINENUM}19863, 'binomial(400, 36  )', 2502803425814462526950176291496826641567011766326000.0);
  Eps; Test({LINENUM}19864, 'binomial(400, 37  )', 24622174243147685400266599192022835068388980620072000.0);
  Eps; Test({LINENUM}19865, 'binomial(400, 38  )', 235206559217437100007809881755376029732242104344372000.0);
  Eps; Test({LINENUM}19866, 'binomial(400, 39  )', 2183199344531082825713517363985798019565939532632376000.0);
  Eps; Test({LINENUM}19867, 'binomial(400, 40  )', 19703374084393022502064494209971827126582604282007193400.0);
  Eps; Test({LINENUM}19868, 'binomial(400, 41  )', 173005235862963124408371168672923360135847257110307064000.0);
  Eps; Test({LINENUM}19869, 'binomial(400, 42  )', 1478782849400089563395363084609035387827837269109529428000.0);
  Eps; Test({LINENUM}19870, 'binomial(400, 43  )', 12311726978726327062686976378838015554473621914911896168000.0);
  Eps; Test({LINENUM}19871, 'binomial(400, 44  )', 99892875713756790031346603801026626203342795991444248454000.0);
  Eps; Test({LINENUM}19872, 'binomial(400, 45  )', 790263638979942605581319798959232865075334119398981165547200.0);
  Eps; Test({LINENUM}19873, 'binomial(400, 46  )', 6098773735606078803942794100663644936994426356231267690636000.0);
  Eps; Test({LINENUM}19874, 'binomial(400, 47  )', 45935444732011742480760619396487878887149509151188697074152000.0);
  Eps; Test({LINENUM}19875, 'binomial(400, 48  )', 337816916466669689493927055145004609315912015216033543066159500.0);
  Eps; Test({LINENUM}19876, 'binomial(400, 49  )', 2426766420331994504119639253286563724065327129715179737944656000.0);
  Eps; Test({LINENUM}19877, 'binomial(400, 50  )', 17035900270730601418919867558071677342938596450600561760371485120.0);
  Eps; Test({LINENUM}19878, 'binomial(400, 51  )', 116913041073641382286704973437746805294676642308043070904510192000.0);
  Eps; Test({LINENUM}19879, 'binomial(400, 52  )', 784666371821170046501154533264877597073887464721289072032193404000.0);
  Eps; Test({LINENUM}19880, 'binomial(400, 53  )', 5152149007429569361932109010871271769466279957037898057871760464000.0);
  Eps; Test({LINENUM}19881, 'binomial(400, 54  )', 33107327881075195714637811606895024148237021205410196779287053352000.0);
  Eps; Test({LINENUM}19882, 'binomial(400, 55  )', 208275189942763958495721505745194151914363806128580510647878553814400.0);
  Eps; Test({LINENUM}19883, 'binomial(400, 56  )', 1283123938040242244303998562180213971615277019899290645955680376178000.0);
  Eps; Test({LINENUM}19884, 'binomial(400, 57  )', 7743765520804268983167991322631466776064127979743087407171123673776000.0);
  Eps; Test({LINENUM}19885, 'binomial(400, 58  )', 45795027131652832090114155580389536279137860293997913459649921036296000.0);
  Eps; Test({LINENUM}19886, 'binomial(400, 59  )', 265455919983479128386763410313444430635002512212665871240682593125648000.0);
  Eps; Test({LINENUM}19887, 'binomial(400, 60  )', 1508674478572773046331438715281409180775597611075317701551212737597432800.0);
  Eps; Test({LINENUM}19888, 'binomial(400, 61  )', 8409005290405620258240805954027526581372183405993574074219874275133232000.0);
  Eps; Test({LINENUM}19889, 'binomial(400, 62  )', 45978270862056536573284406748634379211051131848900348567105441601131704000.0);
  Eps; Test({LINENUM}19890, 'binomial(400, 63  )', 246677072244049354948732213984736828148179088332195520883835543828293904000.0);
  Eps; Test({LINENUM}19891, 'binomial(400, 64  )', 1298908958535072384651918064263379860717755511999217039653946535470860088250.0);
  Eps; Test({LINENUM}19892, 'binomial(400, 65  )', 6714360154888989557585299532192240510787166954334414235749631321818599840800.0);
  Eps; Test({LINENUM}19893, 'binomial(400, 66  )', 34080464422542598511985990049763645016874256510636799529941310497109559798000.0);
  Eps; Test({LINENUM}19894, 'binomial(400, 67  )', 169893658464615341835870457860015782621432860814219269298513398597531238396000.0);
  Eps; Test({LINENUM}19895, 'binomial(400, 68  )', 831979239245836894578600918638018464896134450751985539358896496073204446851000.0);
  Eps; Test({LINENUM}19896, 'binomial(400, 69  )', 4003146484487215202899934854895972903558212139850133319813820821685563425428000.0);
  Eps; Test({LINENUM}19897, 'binomial(400, 70  )', 18929164090932403316569691956722386158253831689862773269405352742541735625952400.0);
  Eps; Test({LINENUM}19898, 'binomial(400, 71  )', 87980621831094268936168990784766020172165696586686129280334738099137644458652000.0);
  Eps; Test({LINENUM}19899, 'binomial(400, 72  )', 402022563644861312222216638447055842175590474680829674072640678258559514262451500.0);
  Eps; Test({LINENUM}19900, 'binomial(400, 73  )', 1806347957198828909710781608364853647035529804045371686244193732449418091480604000.0);
  Eps; Test({LINENUM}19901, 'binomial(400, 74  )', 7982105162216446668586832242369015440278624944903196505430423655553509674515642000.0);
  Eps; Test({LINENUM}19902, 'binomial(400, 75  )', 34695550438434154852790764146830653780411089760512560810270908156139255385227990560.0);
  Eps; Test({LINENUM}19903, 'binomial(400, 76  )', 148369130164356583252065767733157401034652686475876082412342699351911289476303907000.0);
  Eps; Test({LINENUM}19904, 'binomial(400, 77  )', 624306469782487441216484529162896077080876239197192866254532916753496854419772284000.0);
  Eps; Test({LINENUM}19905, 'binomial(400, 78  )', 2585269099227480045037493627174556832014397759752478151284796565530506204840851894000.0);
  Eps; Test({LINENUM}19906, 'binomial(400, 79  )', 10537425948749981955722442379116548100109317451143012211565879672162316429857649492000.0);
  Eps; Test({LINENUM}19907, 'binomial(400, 80  )', 42281421619359302597336300046205149251688636272711336498908092184551294674803818586650.0);
  Eps; Test({LINENUM}19908, 'binomial(400, 81  )', 167037715039444158409229827343032688401732884040341082464822092580943386369595332688000.0);
  Eps; Test({LINENUM}19909, 'binomial(400, 82  )', 649817452409544957713955060029602775611619390352058601296076189430743173803669647896000.0);
  Eps; Test({LINENUM}19910, 'binomial(400, 83  )', 2489662046581148151241418181800164851138493567854875123037978653481642521320083711216000.0);
  Eps; Test({LINENUM}19911, 'binomial(400, 84  )', 9395510342455047189803923376555384021558362631071373976226657537543817610219839719708000.0);
  Eps; Test({LINENUM}19912, 'binomial(400, 85  )', 34929191390774057787976938670488251186028736369630049135148515080751133703876110016796800.0);
  Eps; Test({LINENUM}19913, 'binomial(400, 86  )', 127938317303416607014101577688416268879058743679458900901997468028332640892104356456872000.0);
  Eps; Test({LINENUM}19914, 'binomial(400, 87  )', 461754386589342696579630981542100096873844201325863159577324194952832749886445608361584000.0);
  Eps; Test({LINENUM}19915, 'binomial(400, 88  )', 1642376397755275727607096559348606026380832216079490556223891738866325576300653129740634000.0);
  Eps; Test({LINENUM}19916, 'binomial(400, 89  )', 5757544225838719404645102545132191912705838779964056781369148567711163818042739061562672000.0);
  Eps; Test({LINENUM}19917, 'binomial(400, 90  )', 19895513935953797053829187683734574276127954006320240655620057828424132749014353868288788800.0);
  Eps; Test({LINENUM}19918, 'binomial(400, 91  )', 67775926595007440513044485516018879402194129032519501134529867327598693980158787902961808000.0);
  Eps; Test({LINENUM}19919, 'binomial(400, 92  )', 227638709976709773027508108961411236253021585554875280984453576132913004781185494152339116000.0);
  Eps; Test({LINENUM}19920, 'binomial(400, 93  )', 753900243793834517123360188818437212536888691945178349927007542461690381425861636547531696000.0);
  Eps; Test({LINENUM}19921, 'binomial(400, 94  )', 2462206115369225497413527425183619406902391791778401632208418250380201564869569387447789688000.0);
  Eps; Test({LINENUM}19922, 'binomial(400, 95  )', 7930895487399821075879362022170395142232967245096746310060799838066754514211455079568669942400.0);
  Eps; Test({LINENUM}19923, 'binomial(400, 96  )', 25197115871426514876491723091270526233135989684942787755922332818857917987859310409046295129500.0);
  Eps; Test({LINENUM}19924, 'binomial(400, 97  )', 78968280669212995076840039378827216235807637775490798740210197700338217199064230560310038344000.0);
  Eps; Test({LINENUM}19925, 'binomial(400, 98  )', 244157031048689158247780938079435168565813410673201143043711121461249793993025121018101445084000.0);
  Eps; Test({LINENUM}19926, 'binomial(400, 99  )', 744802256330344704957877205050398190978541919427340860597987461427246846322157439873400367832000.0);
  Eps; Test({LINENUM}19927, 'binomial(400, 100 )', 2241854791554337561923210387201698554845411177476295990399942258896013007429693894018935107174320.0);
  Eps; Test({LINENUM}19928, 'binomial(400, 101 )', 6658974628379220480960030853074352143105181715276126704158244333354494081474338299066143882696000.0);
  Eps; Test({LINENUM}19929, 'binomial(400, 102 )', 19519935430248891409873031618325796968514209145760410632777598585029350297655168151184088440452000.0);
  Eps; Test({LINENUM}19930, 'binomial(400, 103 )', 56475152992370579030506440992826092200167323547928178335608974546978120278652816592746197623832000.0);
  Eps; Test({LINENUM}19931, 'binomial(400, 104 )', 161280004218596749731350124758359128687016298978217970823806398465889439641921985846592506675751000.0);
  Eps; Test({LINENUM}19932, 'binomial(400, 105 )', 454656011892425123052187018366421924679588804738595422512825656627650229847703883910394114057355200.0);
  Eps; Test({LINENUM}19933, 'binomial(400, 106 )', 1265316259511937842456558211491457243212063182998921223030977063256196394387477790127983619310564000.0);
  Eps; Test({LINENUM}19934, 'binomial(400, 107 )', 3476663367257100240020823496995218967330341829922269528701936977545062990186153928015207327825288000.0);
  Eps; Test({LINENUM}19935, 'binomial(400, 108 )', 9432058950058614540056493376107399605812871816363194184348773466858365334486510193596812472711198000.0);
  Eps; Test({LINENUM}19936, 'binomial(400, 109 )', 25267534068046930694463266658929914540342739177780300016787539929565529152936339234222653596620824000.0);
  Eps; Test({LINENUM}19937, 'binomial(400, 110 )', 66844112852742334837171005434078228465815791824855157317137946540941536213677042883261747241969634400.0);
  Eps; Test({LINENUM}19938, 'binomial(400, 111 )', 174637772317975469394410734917862038334113329992864825423153193665522932450147229154467627929470216000.0);
  Eps; Test({LINENUM}19939, 'binomial(400, 112 )', 450627823213347416562363414207697581058560288999445844172243508654786852482969189514653075639436539500.0);
  Eps; Test({LINENUM}19940, 'binomial(400, 113 )', 1148502770667646513008501445060326578273144807361419496651381685775031978009691385665664475965997552000.0);
  Eps; Test({LINENUM}19941, 'binomial(400, 114 )', 2891406098084338151170525567827313403196425962392345574903039858047668225340187962158295654405625416000.0);
  Eps; Test({LINENUM}19942, 'binomial(400, 115 )', 7190801252627136619432785325205318550558068045601833342802342603492461847367771801541500497043555382400.0);
  Eps; Test({LINENUM}19943, 'binomial(400, 116 )', 17667054801713223590847791531754446438871115456866573299126445189615100228446680719304548634977700724000.0);
  Eps; Test({LINENUM}19944, 'binomial(400, 117 )', 42884133022962012818810023889044981099482023844018006982494960973082807392126985677628135148151000048000.0);
  Eps; Test({LINENUM}19945, 'binomial(400, 118 )', 102849234283883471421383362377963810602995023286924542169881982672732495694677431752277646160396042488000.0);
  Eps; Test({LINENUM}19946, 'binomial(400, 119 )', 243726756874412932275883262105762979748273920730358999091653101795887090637807023144052909388501546064000.0);
  Eps; Test({LINENUM}19947, 'binomial(400, 120 )', 570726822347583616412693305430994977577208097710257322872954346705368937243531445862323896151407787033200.0);
  Eps; Test({LINENUM}19948, 'binomial(400, 121 )', 1320690167415895971864083681989079286955522870734479755408489397334738036596601692904551164647885788176000.0);
  Eps; Test({LINENUM}19949, 'binomial(400, 122 )', 3020266858270778493033437272745517385742548204384588948844004441445835345987310428855489958498033892632000.0);
  Eps; Test({LINENUM}19950, 'binomial(400, 123 )', 6826294199994117244417037087993933603548198380641591282753115729446684765727417066844115515954905871152000.0);
  Eps; Test({LINENUM}19951, 'binomial(400, 124 )', 15249060430632019973415478011083222646635894769659038591311395621425255484729794576740483854189588115396000.0);
  Eps; Test({LINENUM}19952, 'binomial(400, 125 )', 33669925430835500101301375448471755603772055651407157209615561532106964110283386425442988350050610558794368.0);
  Eps; Test({LINENUM}19953, 'binomial(400, 126 )', 73485948360950496252840303558172482468550121461404509782891106518487421669269295769816046002094586537051200.0);
  Eps; Test({LINENUM}19954, 'binomial(400, 127 )', 158544487014964062781718450196372127530572702995471147090646954220988610530549504259288162240739501662614400.0);
  Eps; Test({LINENUM}19955, 'binomial(400, 128 )', 338145663711603040151633882059449928248799593107528305904270457049452270897187614553013033529077218389794775.0);
  Eps; Test({LINENUM}19956, 'binomial(400, 129 )', 712989306430666875358483844342406050261034800970912396945438483081015640961511869445112752867511654279257200.0);
  Eps; Test({LINENUM}19957, 'binomial(400, 130 )', 1486308477251620947862685552436861843236464854331671227478567914730424913081305512458658123285351217766759240.0);
  Eps; Test({LINENUM}19958, 'binomial(400, 131 )', 3063383884411737831472710680595058760869049699767566652055063641047440660549255636365173231198815487000190800.0);
  Eps; Test({LINENUM}19959, 'binomial(400, 132 )', 6242805037172405126258781614242960656619502797253601737900091813952738921876892168047209084791525500023116100.0);
  Eps; Test({LINENUM}19960, 'binomial(400, 133 )', 12579486841821087021333484756519650044917494358375678689903944407062661887691782714561293494166382210572895600.0);
  Eps; Test({LINENUM}19961, 'binomial(400, 134 )', 25065096916165897273851047985005571358156499952882882165704128034968139731445567050655711663749433210619127800.0);
  Eps; Test({LINENUM}19962, 'binomial(400, 135 )', 49387524294075027221069472326010977639034288796050715970942948572603890137514969151662365204128512844627318480.0);
  Eps; Test({LINENUM}19963, 'binomial(400, 136 )', 96233043661249133923407427694065507899588871551128233325734421851029638870893138420518579258044528704604701450.0);
  Eps; Test({LINENUM}19964, 'binomial(400, 137 )', 185441777566202710626128181833819664857601913062028128452510126778626457386246631700853320614042011518362344400.0);
  Eps; Test({LINENUM}19965, 'binomial(400, 138 )', 353414402173270383294722549436917187373545674893575346253696835817237378931759885053075531315167021951661569400.0);
  Eps; Test({LINENUM}19966, 'binomial(400, 139 )', 666148009851775830382858330593325921524237171382134825312723532259828728633964675423782656148012660081549145200.0);
  Eps; Test({LINENUM}19967, 'binomial(400, 140 )', 1241890218366524940928043030606129039413042155219551352904434585141537844096177002040051951818795030580602334980.0);
  Eps; Test({LINENUM}19968, 'binomial(400, 141 )', 2290010331739691380434689276294989718066602555723995402518815547069502407553234188158961045906997928730188702800.0);
  Eps; Test({LINENUM}19969, 'binomial(400, 142 )', 4176849830426620193891440299721143218163732830510667670791360751345078334903434188261766978097975095359992070600.0);
  Eps; Test({LINENUM}19970, 'binomial(400, 143 )', 7535854938811664405762179002294090561442259232669596217231965551377833639196405738262488673771171850369775903600.0);
  Eps; Test({LINENUM}19971, 'binomial(400, 144 )', 13449407772740262168617222247149869960351809880528376582143160741000716981065807463426802702494383094062725050175.0);
  Eps; Test({LINENUM}19972, 'binomial(400, 145 )', 23745161309113842173558682036347356619655609168381133827783787239284024463123080763015596495438359117793500778240.0);
  Eps; Test({LINENUM}19973, 'binomial(400, 146 )', 41472713245370066809982629584031342041179317383131432370444285931626207110249216401157377440662887500255771907200.0);
  Eps; Test({LINENUM}19974, 'binomial(400, 147 )', 71660334451183652855344135471727625023534330716431182463216657324034398680294564393836556938288254592278680710400.0);
  Eps; Test({LINENUM}19975, 'binomial(400, 148 )', 122500436595604487651365312664507358992933686967953305156714961506626370716990032375950330441803570350314231214400.0);
  Eps; Test({LINENUM}19976, 'binomial(400, 149 )', 207181946456995509316403079137287613867243551113585455701289733554831177320009987642546867592848991464960981651200.0);
  Eps; Test({LINENUM}19977, 'binomial(400, 150 )', 346684457071372485589447819089727940537854208863399662540158154148417503382150045988528425105367312384701375963008.0);
  Eps; Test({LINENUM}19978, 'binomial(400, 151 )', 573980889191014048989152018360476722744791736528807388311520122762280634738659016537298717061866411232949297952000.0);
  Eps; Test({LINENUM}19979, 'binomial(400, 152 )', 940271325056332224988808240603675683970086463129427892694529674788209724012671678406495924660557476296081415724000.0);
  Eps; Test({LINENUM}19980, 'binomial(400, 153 )', 1524099925581505828740029043592886075977656489255543250903551368284156938268905727090267904024955909290380333984000.0);
  Eps; Test({LINENUM}19981, 'binomial(400, 154 )', 2444497932588519088953163466022356238743384109390384305020631090689524439950777367475949170741325386978726899312000.0);
  Eps; Test({LINENUM}19982, 'binomial(400, 155 )', 3879654783334036747628891694461287966005628973613126058290808053610471046631556338058603200015264807721076240198400.0);
  Eps; Test({LINENUM}19983, 'binomial(400, 156 )', 6093047576389993610058195289378304818406276272661640283854153673939521836055969889899729384639358191613228710568000.0);
  Eps; Test({LINENUM}19984, 'binomial(400, 157 )', 9469449736555149304803819430626155259179180958786243498473971314912377885335392695130789616891741393335208951456000.0);
  Eps; Test({LINENUM}19985, 'binomial(400, 158 )', 14563773961917096715616000769887061569497094765728209937526424237491821684408230537447986562687931383420606172176000.0);
  Eps; Test({LINENUM}19986, 'binomial(400, 159 )', 22166247162163128334459573498821816979989288888718407577870406701088181431615042704795048730631945879168469771488000.0);
  Eps; Test({LINENUM}19987, 'binomial(400, 160 )', 33387909788008212053779732582600361826108866388632101414167300093514073281370158074097542150514368480497507593303800.0);
  Eps; Test({LINENUM}19988, 'binomial(400, 161 )', 49770797199515347160913887079652713281156074119700026952795975294679363897694645576294472770953095871549079642192000.0);
  Eps; Test({LINENUM}19989, 'binomial(400, 162 )', 73427287226445481305298882790351842433310504411162385442705173428570172663882841313175178964554258724075494040024000.0);
  Eps; Test({LINENUM}19990, 'binomial(400, 163 )', 107212848833705672089945608000636432509987116870286182425544977153372399349718504494084003641496402308772807248624000.0);
  Eps; Test({LINENUM}19991, 'binomial(400, 164 )', 154935641302367343203153104244822161615042357916206251432037558447251577109044424177426273555089313092555825109292000.0);
  Eps; Test({LINENUM}19992, 'binomial(400, 165 )', 221604917256719351490570500616836546309999978595301062654308265415462861804451418823470306418188350847534392277532800.0);
  Eps; Test({LINENUM}19993, 'binomial(400, 166 )', 313717804550174985543879925572027640860542138372865962191340014292974533277386044719973024146230496681750495091688000.0);
  Eps; Test({LINENUM}19994, 'binomial(400, 167 )', 439580636315814051600406602298529748271657846582339132651338702662012220280888230326189746408490636069039615876976000.0);
  Eps; Test({LINENUM}19995, 'binomial(400, 168 )', 609656477747527821564849632949746615162477846748125106593820938811005043603850938488108398292728084548132324400806000.0);
  Eps; Test({LINENUM}19996, 'binomial(400, 169 )', 836924868860511565698491803812669909572158937547722039821103300616290947432505430350539339668123761036489344739568000.0);
  Eps; Test({LINENUM}19997, 'binomial(400, 170 )', 1137233204157518656919715333416039700653933615138375242345146249660960052099463261241026985078450522349582580204942400.0);
  Eps; Test({LINENUM}19998, 'binomial(400, 171 )', 1529611912024732696441722378278883807897103692876177226546103142818835157794599708101966120280956842926339142965712000.0);
  Eps; Test({LINENUM}19999, 'binomial(400, 172 )', 2036518185195719694681130375731769720979283405050259214413125695962286343807926355554361869443832075756579440343884000.0);
  Eps; Test({LINENUM}20000, 'binomial(400, 173 )', 2683966163148116129406345235068459516666338822840804051365275483695961192995417393447367088053142851286127817331824000.0);
  Eps; Test({LINENUM}20001, 'binomial(400, 174 )', 3501496086405875640087588323911151208524476510257830572758146751718294200057239932830760511425651880700867899622552000.0);
  Eps; Test({LINENUM}20002, 'binomial(400, 175 )', 4521932088729873683770256921165258132151609664675826911104806662219054224073921284684296431898270428790835116083981440.0);
  Eps; Test({LINENUM}20003, 'binomial(400, 176 )', 5780879090705804425274476177626040225762000991773074176128303971586859093276319824170265324869947991351919892720999000.0);
  Eps; Test({LINENUM}20004, 'binomial(400, 177 )', 7315914781458193170968828608973067856331571876594172968659548529013878174541783280305872501530329661371921220166688000.0);
  Eps; Test({LINENUM}20005, 'binomial(400, 178 )', 9165443799242567849022745953938169280685059148766857146129659112191544005184368941057357122703727609471564225265008000.0);
  Eps; Test({LINENUM}20006, 'binomial(400, 179 )', 11367198454926536661916478222202645700067503525286269756652426384952641168440949189467783694079483403925627139714144000.0);
  Eps; Test({LINENUM}20007, 'binomial(400, 180 )', 13956393658548692234908564928371026109527323772712586756778812394858520545696943171513223313286476845930908877093476800.0);
  Eps; Test({LINENUM}20008, 'binomial(400, 181 )', 16963572402655869014805990520671965436994537182302591638073694623584942099742140871452536623884115503341436204202016000.0);
  Eps; Test({LINENUM}20009, 'binomial(400, 182 )', 20412210748250743484848966615533848520339580455627843784275489684423639120019389290374206157311106017757002905056272000.0);
  Eps; Test({LINENUM}20010, 'binomial(400, 183 )', 24316185481522743604902047662220650149912724258616775655585009569422695782318179591811895859529077114049325865039712000.0);
  Eps; Test({LINENUM}20011, 'binomial(400, 184 )', 28677240486361061751433393166858049361581854152825219115554060198721331438929592235995551095205487683416868003878356000.0);
  Eps; Test({LINENUM}20012, 'binomial(400, 185 )', 33482615919210753180051961751574803578928002686541877453836091907696257247615091475540751548996677511448883723447161600.0);
  Eps; Test({LINENUM}20013, 'binomial(400, 186 )', 38703023777582322224253611702089154674567314933368299207391181506208039291598089608823987005560675618072634411511504000.0);
  Eps; Test({LINENUM}20014, 'binomial(400, 187 )', 44291160900548753775349052963888123531323023506635379841613437659510804323005300407959001172138954985387934567184288000.0);
  Eps; Test({LINENUM}20015, 'binomial(400, 188 )', 50180942935196194436964618517596650596658531951666680352466288412105326174468771206889719413114879850466117355373688000.0);
  Eps; Test({LINENUM}20016, 'binomial(400, 189 )', 56287618530484620215007931882171904372971474993403895421814037795589043116335341247939791087726743535972576081159904000.0);
  Eps; Test({LINENUM}20017, 'binomial(400, 190 )', 62508881631222394028245650669148799066826216966359062810540852499312042618667142122712083786896541505737966069077577600.0);
  Eps; Test({LINENUM}20018, 'binomial(400, 191 )', 68727042631186925371369563562938470178185892999661796807400937302908528533613088197746270132189914744528653793226656000.0);
  Eps; Test({LINENUM}20019, 'binomial(400, 192 )', 74812249530823267721959577003406980558546102275673518399722895293270221164193413715255054466810896779200461681168599500.0);
  Eps; Test({LINENUM}20020, 'binomial(400, 193 )', 80626673069488288529365761744604414280712897789326900658768716170985523327213627216440680461640759223179772174523672000.0);
  Eps; Test({LINENUM}20021, 'binomial(400, 194 )', 86029491367959153224632539593469658536636957950467363074047032203061872828521756875274334307008438964939241443950516000.0);
  Eps; Test({LINENUM}20022, 'binomial(400, 195 )', 90882437034869669560381041826947434146395965834852701503865069917080747706028112391315450601249940650140942243352852800.0);
  Eps; Test({LINENUM}20023, 'binomial(400, 196 )', 95055610164021848264684252931246040816383535694616345960675200678579353468039607348059527414572642006524965101465994000.0);
  Eps; Test({LINENUM}20024, 'binomial(400, 197 )', 98433220677464248964444607096315697089046910059399667898364167200153239124264364969564180672958471925538542541619608000.0);
  Eps; Test({LINENUM}20025, 'binomial(400, 198 )', 100918908068309305756476036568444881358972337081101679713979423947631856273867000448593579174800857580223859272468588000.0);
  Eps; Test({LINENUM}20026, 'binomial(400, 199 )', 102440298642203415893508338627265658464886492916495172372984138881515753604628814525708055242762679553795073231350024000.0);
  Eps; Test({LINENUM}20027, 'binomial(400, 200 )', 102952500135414432972975880320401986757210925381077648234849059575923332372651958598336595518976492951564048597506774120.0);
  Eps; Test({LINENUM}20028, 'binomial(400, 201 )', 102440298642203415893508338627265658464886492916495172372984138881515753604628814525708055242762679553795073231350024000.0);
  Eps; Test({LINENUM}20029, 'binomial(400, 202 )', 100918908068309305756476036568444881358972337081101679713979423947631856273867000448593579174800857580223859272468588000.0);
  Eps; Test({LINENUM}20030, 'binomial(400, 203 )', 98433220677464248964444607096315697089046910059399667898364167200153239124264364969564180672958471925538542541619608000.0);
  Eps; Test({LINENUM}20031, 'binomial(400, 204 )', 95055610164021848264684252931246040816383535694616345960675200678579353468039607348059527414572642006524965101465994000.0);
  Eps; Test({LINENUM}20032, 'binomial(400, 205 )', 90882437034869669560381041826947434146395965834852701503865069917080747706028112391315450601249940650140942243352852800.0);
  Eps; Test({LINENUM}20033, 'binomial(400, 206 )', 86029491367959153224632539593469658536636957950467363074047032203061872828521756875274334307008438964939241443950516000.0);
  Eps; Test({LINENUM}20034, 'binomial(400, 207 )', 80626673069488288529365761744604414280712897789326900658768716170985523327213627216440680461640759223179772174523672000.0);
  Eps; Test({LINENUM}20035, 'binomial(400, 208 )', 74812249530823267721959577003406980558546102275673518399722895293270221164193413715255054466810896779200461681168599500.0);
  Eps; Test({LINENUM}20036, 'binomial(400, 209 )', 68727042631186925371369563562938470178185892999661796807400937302908528533613088197746270132189914744528653793226656000.0);
  Eps; Test({LINENUM}20037, 'binomial(400, 210 )', 62508881631222394028245650669148799066826216966359062810540852499312042618667142122712083786896541505737966069077577600.0);
  Eps; Test({LINENUM}20038, 'binomial(400, 211 )', 56287618530484620215007931882171904372971474993403895421814037795589043116335341247939791087726743535972576081159904000.0);
  Eps; Test({LINENUM}20039, 'binomial(400, 212 )', 50180942935196194436964618517596650596658531951666680352466288412105326174468771206889719413114879850466117355373688000.0);
  Eps; Test({LINENUM}20040, 'binomial(400, 213 )', 44291160900548753775349052963888123531323023506635379841613437659510804323005300407959001172138954985387934567184288000.0);
  Eps; Test({LINENUM}20041, 'binomial(400, 214 )', 38703023777582322224253611702089154674567314933368299207391181506208039291598089608823987005560675618072634411511504000.0);
  Eps; Test({LINENUM}20042, 'binomial(400, 215 )', 33482615919210753180051961751574803578928002686541877453836091907696257247615091475540751548996677511448883723447161600.0);
  Eps; Test({LINENUM}20043, 'binomial(400, 216 )', 28677240486361061751433393166858049361581854152825219115554060198721331438929592235995551095205487683416868003878356000.0);
  Eps; Test({LINENUM}20044, 'binomial(400, 217 )', 24316185481522743604902047662220650149912724258616775655585009569422695782318179591811895859529077114049325865039712000.0);
  Eps; Test({LINENUM}20045, 'binomial(400, 218 )', 20412210748250743484848966615533848520339580455627843784275489684423639120019389290374206157311106017757002905056272000.0);
  Eps; Test({LINENUM}20046, 'binomial(400, 219 )', 16963572402655869014805990520671965436994537182302591638073694623584942099742140871452536623884115503341436204202016000.0);
  Eps; Test({LINENUM}20047, 'binomial(400, 220 )', 13956393658548692234908564928371026109527323772712586756778812394858520545696943171513223313286476845930908877093476800.0);
  Eps; Test({LINENUM}20048, 'binomial(400, 221 )', 11367198454926536661916478222202645700067503525286269756652426384952641168440949189467783694079483403925627139714144000.0);
  Eps; Test({LINENUM}20049, 'binomial(400, 222 )', 9165443799242567849022745953938169280685059148766857146129659112191544005184368941057357122703727609471564225265008000.0);
  Eps; Test({LINENUM}20050, 'binomial(400, 223 )', 7315914781458193170968828608973067856331571876594172968659548529013878174541783280305872501530329661371921220166688000.0);
  Eps; Test({LINENUM}20051, 'binomial(400, 224 )', 5780879090705804425274476177626040225762000991773074176128303971586859093276319824170265324869947991351919892720999000.0);
  Eps; Test({LINENUM}20052, 'binomial(400, 225 )', 4521932088729873683770256921165258132151609664675826911104806662219054224073921284684296431898270428790835116083981440.0);
  Eps; Test({LINENUM}20053, 'binomial(400, 226 )', 3501496086405875640087588323911151208524476510257830572758146751718294200057239932830760511425651880700867899622552000.0);
  Eps; Test({LINENUM}20054, 'binomial(400, 227 )', 2683966163148116129406345235068459516666338822840804051365275483695961192995417393447367088053142851286127817331824000.0);
  Eps; Test({LINENUM}20055, 'binomial(400, 228 )', 2036518185195719694681130375731769720979283405050259214413125695962286343807926355554361869443832075756579440343884000.0);
  Eps; Test({LINENUM}20056, 'binomial(400, 229 )', 1529611912024732696441722378278883807897103692876177226546103142818835157794599708101966120280956842926339142965712000.0);
  Eps; Test({LINENUM}20057, 'binomial(400, 230 )', 1137233204157518656919715333416039700653933615138375242345146249660960052099463261241026985078450522349582580204942400.0);
  Eps; Test({LINENUM}20058, 'binomial(400, 231 )', 836924868860511565698491803812669909572158937547722039821103300616290947432505430350539339668123761036489344739568000.0);
  Eps; Test({LINENUM}20059, 'binomial(400, 232 )', 609656477747527821564849632949746615162477846748125106593820938811005043603850938488108398292728084548132324400806000.0);
  Eps; Test({LINENUM}20060, 'binomial(400, 233 )', 439580636315814051600406602298529748271657846582339132651338702662012220280888230326189746408490636069039615876976000.0);
  Eps; Test({LINENUM}20061, 'binomial(400, 234 )', 313717804550174985543879925572027640860542138372865962191340014292974533277386044719973024146230496681750495091688000.0);
  Eps; Test({LINENUM}20062, 'binomial(400, 235 )', 221604917256719351490570500616836546309999978595301062654308265415462861804451418823470306418188350847534392277532800.0);
  Eps; Test({LINENUM}20063, 'binomial(400, 236 )', 154935641302367343203153104244822161615042357916206251432037558447251577109044424177426273555089313092555825109292000.0);
  Eps; Test({LINENUM}20064, 'binomial(400, 237 )', 107212848833705672089945608000636432509987116870286182425544977153372399349718504494084003641496402308772807248624000.0);
  Eps; Test({LINENUM}20065, 'binomial(400, 238 )', 73427287226445481305298882790351842433310504411162385442705173428570172663882841313175178964554258724075494040024000.0);
  Eps; Test({LINENUM}20066, 'binomial(400, 239 )', 49770797199515347160913887079652713281156074119700026952795975294679363897694645576294472770953095871549079642192000.0);
  Eps; Test({LINENUM}20067, 'binomial(400, 240 )', 33387909788008212053779732582600361826108866388632101414167300093514073281370158074097542150514368480497507593303800.0);
  Eps; Test({LINENUM}20068, 'binomial(400, 241 )', 22166247162163128334459573498821816979989288888718407577870406701088181431615042704795048730631945879168469771488000.0);
  Eps; Test({LINENUM}20069, 'binomial(400, 242 )', 14563773961917096715616000769887061569497094765728209937526424237491821684408230537447986562687931383420606172176000.0);
  Eps; Test({LINENUM}20070, 'binomial(400, 243 )', 9469449736555149304803819430626155259179180958786243498473971314912377885335392695130789616891741393335208951456000.0);
  Eps; Test({LINENUM}20071, 'binomial(400, 244 )', 6093047576389993610058195289378304818406276272661640283854153673939521836055969889899729384639358191613228710568000.0);
  Eps; Test({LINENUM}20072, 'binomial(400, 245 )', 3879654783334036747628891694461287966005628973613126058290808053610471046631556338058603200015264807721076240198400.0);
  Eps; Test({LINENUM}20073, 'binomial(400, 246 )', 2444497932588519088953163466022356238743384109390384305020631090689524439950777367475949170741325386978726899312000.0);
  Eps; Test({LINENUM}20074, 'binomial(400, 247 )', 1524099925581505828740029043592886075977656489255543250903551368284156938268905727090267904024955909290380333984000.0);
  Eps; Test({LINENUM}20075, 'binomial(400, 248 )', 940271325056332224988808240603675683970086463129427892694529674788209724012671678406495924660557476296081415724000.0);
  Eps; Test({LINENUM}20076, 'binomial(400, 249 )', 573980889191014048989152018360476722744791736528807388311520122762280634738659016537298717061866411232949297952000.0);
  Eps; Test({LINENUM}20077, 'binomial(400, 250 )', 346684457071372485589447819089727940537854208863399662540158154148417503382150045988528425105367312384701375963008.0);
  Eps; Test({LINENUM}20078, 'binomial(400, 251 )', 207181946456995509316403079137287613867243551113585455701289733554831177320009987642546867592848991464960981651200.0);
  Eps; Test({LINENUM}20079, 'binomial(400, 252 )', 122500436595604487651365312664507358992933686967953305156714961506626370716990032375950330441803570350314231214400.0);
  Eps; Test({LINENUM}20080, 'binomial(400, 253 )', 71660334451183652855344135471727625023534330716431182463216657324034398680294564393836556938288254592278680710400.0);
  Eps; Test({LINENUM}20081, 'binomial(400, 254 )', 41472713245370066809982629584031342041179317383131432370444285931626207110249216401157377440662887500255771907200.0);
  Eps; Test({LINENUM}20082, 'binomial(400, 255 )', 23745161309113842173558682036347356619655609168381133827783787239284024463123080763015596495438359117793500778240.0);
  Eps; Test({LINENUM}20083, 'binomial(400, 256 )', 13449407772740262168617222247149869960351809880528376582143160741000716981065807463426802702494383094062725050175.0);
  Eps; Test({LINENUM}20084, 'binomial(400, 257 )', 7535854938811664405762179002294090561442259232669596217231965551377833639196405738262488673771171850369775903600.0);
  Eps; Test({LINENUM}20085, 'binomial(400, 258 )', 4176849830426620193891440299721143218163732830510667670791360751345078334903434188261766978097975095359992070600.0);
  Eps; Test({LINENUM}20086, 'binomial(400, 259 )', 2290010331739691380434689276294989718066602555723995402518815547069502407553234188158961045906997928730188702800.0);
  Eps; Test({LINENUM}20087, 'binomial(400, 260 )', 1241890218366524940928043030606129039413042155219551352904434585141537844096177002040051951818795030580602334980.0);
  Eps; Test({LINENUM}20088, 'binomial(400, 261 )', 666148009851775830382858330593325921524237171382134825312723532259828728633964675423782656148012660081549145200.0);
  Eps; Test({LINENUM}20089, 'binomial(400, 262 )', 353414402173270383294722549436917187373545674893575346253696835817237378931759885053075531315167021951661569400.0);
  Eps; Test({LINENUM}20090, 'binomial(400, 263 )', 185441777566202710626128181833819664857601913062028128452510126778626457386246631700853320614042011518362344400.0);
  Eps; Test({LINENUM}20091, 'binomial(400, 264 )', 96233043661249133923407427694065507899588871551128233325734421851029638870893138420518579258044528704604701450.0);
  Eps; Test({LINENUM}20092, 'binomial(400, 265 )', 49387524294075027221069472326010977639034288796050715970942948572603890137514969151662365204128512844627318480.0);
  Eps; Test({LINENUM}20093, 'binomial(400, 266 )', 25065096916165897273851047985005571358156499952882882165704128034968139731445567050655711663749433210619127800.0);
  Eps; Test({LINENUM}20094, 'binomial(400, 267 )', 12579486841821087021333484756519650044917494358375678689903944407062661887691782714561293494166382210572895600.0);
  Eps; Test({LINENUM}20095, 'binomial(400, 268 )', 6242805037172405126258781614242960656619502797253601737900091813952738921876892168047209084791525500023116100.0);
  Eps; Test({LINENUM}20096, 'binomial(400, 269 )', 3063383884411737831472710680595058760869049699767566652055063641047440660549255636365173231198815487000190800.0);
  Eps; Test({LINENUM}20097, 'binomial(400, 270 )', 1486308477251620947862685552436861843236464854331671227478567914730424913081305512458658123285351217766759240.0);
  Eps; Test({LINENUM}20098, 'binomial(400, 271 )', 712989306430666875358483844342406050261034800970912396945438483081015640961511869445112752867511654279257200.0);
  Eps; Test({LINENUM}20099, 'binomial(400, 272 )', 338145663711603040151633882059449928248799593107528305904270457049452270897187614553013033529077218389794775.0);
  Eps; Test({LINENUM}20100, 'binomial(400, 273 )', 158544487014964062781718450196372127530572702995471147090646954220988610530549504259288162240739501662614400.0);
  Eps; Test({LINENUM}20101, 'binomial(400, 274 )', 73485948360950496252840303558172482468550121461404509782891106518487421669269295769816046002094586537051200.0);
  Eps; Test({LINENUM}20102, 'binomial(400, 275 )', 33669925430835500101301375448471755603772055651407157209615561532106964110283386425442988350050610558794368.0);
  Eps; Test({LINENUM}20103, 'binomial(400, 276 )', 15249060430632019973415478011083222646635894769659038591311395621425255484729794576740483854189588115396000.0);
  Eps; Test({LINENUM}20104, 'binomial(400, 277 )', 6826294199994117244417037087993933603548198380641591282753115729446684765727417066844115515954905871152000.0);
  Eps; Test({LINENUM}20105, 'binomial(400, 278 )', 3020266858270778493033437272745517385742548204384588948844004441445835345987310428855489958498033892632000.0);
  Eps; Test({LINENUM}20106, 'binomial(400, 279 )', 1320690167415895971864083681989079286955522870734479755408489397334738036596601692904551164647885788176000.0);
  Eps; Test({LINENUM}20107, 'binomial(400, 280 )', 570726822347583616412693305430994977577208097710257322872954346705368937243531445862323896151407787033200.0);
  Eps; Test({LINENUM}20108, 'binomial(400, 281 )', 243726756874412932275883262105762979748273920730358999091653101795887090637807023144052909388501546064000.0);
  Eps; Test({LINENUM}20109, 'binomial(400, 282 )', 102849234283883471421383362377963810602995023286924542169881982672732495694677431752277646160396042488000.0);
  Eps; Test({LINENUM}20110, 'binomial(400, 283 )', 42884133022962012818810023889044981099482023844018006982494960973082807392126985677628135148151000048000.0);
  Eps; Test({LINENUM}20111, 'binomial(400, 284 )', 17667054801713223590847791531754446438871115456866573299126445189615100228446680719304548634977700724000.0);
  Eps; Test({LINENUM}20112, 'binomial(400, 285 )', 7190801252627136619432785325205318550558068045601833342802342603492461847367771801541500497043555382400.0);
  Eps; Test({LINENUM}20113, 'binomial(400, 286 )', 2891406098084338151170525567827313403196425962392345574903039858047668225340187962158295654405625416000.0);
  Eps; Test({LINENUM}20114, 'binomial(400, 287 )', 1148502770667646513008501445060326578273144807361419496651381685775031978009691385665664475965997552000.0);
  Eps; Test({LINENUM}20115, 'binomial(400, 288 )', 450627823213347416562363414207697581058560288999445844172243508654786852482969189514653075639436539500.0);
  Eps; Test({LINENUM}20116, 'binomial(400, 289 )', 174637772317975469394410734917862038334113329992864825423153193665522932450147229154467627929470216000.0);
  Eps; Test({LINENUM}20117, 'binomial(400, 290 )', 66844112852742334837171005434078228465815791824855157317137946540941536213677042883261747241969634400.0);
  Eps; Test({LINENUM}20118, 'binomial(400, 291 )', 25267534068046930694463266658929914540342739177780300016787539929565529152936339234222653596620824000.0);
  Eps; Test({LINENUM}20119, 'binomial(400, 292 )', 9432058950058614540056493376107399605812871816363194184348773466858365334486510193596812472711198000.0);
  Eps; Test({LINENUM}20120, 'binomial(400, 293 )', 3476663367257100240020823496995218967330341829922269528701936977545062990186153928015207327825288000.0);
  Eps; Test({LINENUM}20121, 'binomial(400, 294 )', 1265316259511937842456558211491457243212063182998921223030977063256196394387477790127983619310564000.0);
  Eps; Test({LINENUM}20122, 'binomial(400, 295 )', 454656011892425123052187018366421924679588804738595422512825656627650229847703883910394114057355200.0);
  Eps; Test({LINENUM}20123, 'binomial(400, 296 )', 161280004218596749731350124758359128687016298978217970823806398465889439641921985846592506675751000.0);
  Eps; Test({LINENUM}20124, 'binomial(400, 297 )', 56475152992370579030506440992826092200167323547928178335608974546978120278652816592746197623832000.0);
  Eps; Test({LINENUM}20125, 'binomial(400, 298 )', 19519935430248891409873031618325796968514209145760410632777598585029350297655168151184088440452000.0);
  Eps; Test({LINENUM}20126, 'binomial(400, 299 )', 6658974628379220480960030853074352143105181715276126704158244333354494081474338299066143882696000.0);
  Eps; Test({LINENUM}20127, 'binomial(400, 300 )', 2241854791554337561923210387201698554845411177476295990399942258896013007429693894018935107174320.0);
  Eps; Test({LINENUM}20128, 'binomial(400, 301 )', 744802256330344704957877205050398190978541919427340860597987461427246846322157439873400367832000.0);
  Eps; Test({LINENUM}20129, 'binomial(400, 302 )', 244157031048689158247780938079435168565813410673201143043711121461249793993025121018101445084000.0);
  Eps; Test({LINENUM}20130, 'binomial(400, 303 )', 78968280669212995076840039378827216235807637775490798740210197700338217199064230560310038344000.0);
  Eps; Test({LINENUM}20131, 'binomial(400, 304 )', 25197115871426514876491723091270526233135989684942787755922332818857917987859310409046295129500.0);
  Eps; Test({LINENUM}20132, 'binomial(400, 305 )', 7930895487399821075879362022170395142232967245096746310060799838066754514211455079568669942400.0);
  Eps; Test({LINENUM}20133, 'binomial(400, 306 )', 2462206115369225497413527425183619406902391791778401632208418250380201564869569387447789688000.0);
  Eps; Test({LINENUM}20134, 'binomial(400, 307 )', 753900243793834517123360188818437212536888691945178349927007542461690381425861636547531696000.0);
  Eps; Test({LINENUM}20135, 'binomial(400, 308 )', 227638709976709773027508108961411236253021585554875280984453576132913004781185494152339116000.0);
  Eps; Test({LINENUM}20136, 'binomial(400, 309 )', 67775926595007440513044485516018879402194129032519501134529867327598693980158787902961808000.0);
  Eps; Test({LINENUM}20137, 'binomial(400, 310 )', 19895513935953797053829187683734574276127954006320240655620057828424132749014353868288788800.0);
  Eps; Test({LINENUM}20138, 'binomial(400, 311 )', 5757544225838719404645102545132191912705838779964056781369148567711163818042739061562672000.0);
  Eps; Test({LINENUM}20139, 'binomial(400, 312 )', 1642376397755275727607096559348606026380832216079490556223891738866325576300653129740634000.0);
  Eps; Test({LINENUM}20140, 'binomial(400, 313 )', 461754386589342696579630981542100096873844201325863159577324194952832749886445608361584000.0);
  Eps; Test({LINENUM}20141, 'binomial(400, 314 )', 127938317303416607014101577688416268879058743679458900901997468028332640892104356456872000.0);
  Eps; Test({LINENUM}20142, 'binomial(400, 315 )', 34929191390774057787976938670488251186028736369630049135148515080751133703876110016796800.0);
  Eps; Test({LINENUM}20143, 'binomial(400, 316 )', 9395510342455047189803923376555384021558362631071373976226657537543817610219839719708000.0);
  Eps; Test({LINENUM}20144, 'binomial(400, 317 )', 2489662046581148151241418181800164851138493567854875123037978653481642521320083711216000.0);
  Eps; Test({LINENUM}20145, 'binomial(400, 318 )', 649817452409544957713955060029602775611619390352058601296076189430743173803669647896000.0);
  Eps; Test({LINENUM}20146, 'binomial(400, 319 )', 167037715039444158409229827343032688401732884040341082464822092580943386369595332688000.0);
  Eps; Test({LINENUM}20147, 'binomial(400, 320 )', 42281421619359302597336300046205149251688636272711336498908092184551294674803818586650.0);
  Eps; Test({LINENUM}20148, 'binomial(400, 321 )', 10537425948749981955722442379116548100109317451143012211565879672162316429857649492000.0);
  Eps; Test({LINENUM}20149, 'binomial(400, 322 )', 2585269099227480045037493627174556832014397759752478151284796565530506204840851894000.0);
  Eps; Test({LINENUM}20150, 'binomial(400, 323 )', 624306469782487441216484529162896077080876239197192866254532916753496854419772284000.0);
  Eps; Test({LINENUM}20151, 'binomial(400, 324 )', 148369130164356583252065767733157401034652686475876082412342699351911289476303907000.0);
  Eps; Test({LINENUM}20152, 'binomial(400, 325 )', 34695550438434154852790764146830653780411089760512560810270908156139255385227990560.0);
  Eps; Test({LINENUM}20153, 'binomial(400, 326 )', 7982105162216446668586832242369015440278624944903196505430423655553509674515642000.0);
  Eps; Test({LINENUM}20154, 'binomial(400, 327 )', 1806347957198828909710781608364853647035529804045371686244193732449418091480604000.0);
  Eps; Test({LINENUM}20155, 'binomial(400, 328 )', 402022563644861312222216638447055842175590474680829674072640678258559514262451500.0);
  Eps; Test({LINENUM}20156, 'binomial(400, 329 )', 87980621831094268936168990784766020172165696586686129280334738099137644458652000.0);
  Eps; Test({LINENUM}20157, 'binomial(400, 330 )', 18929164090932403316569691956722386158253831689862773269405352742541735625952400.0);
  Eps; Test({LINENUM}20158, 'binomial(400, 331 )', 4003146484487215202899934854895972903558212139850133319813820821685563425428000.0);
  Eps; Test({LINENUM}20159, 'binomial(400, 332 )', 831979239245836894578600918638018464896134450751985539358896496073204446851000.0);
  Eps; Test({LINENUM}20160, 'binomial(400, 333 )', 169893658464615341835870457860015782621432860814219269298513398597531238396000.0);
  Eps; Test({LINENUM}20161, 'binomial(400, 334 )', 34080464422542598511985990049763645016874256510636799529941310497109559798000.0);
  Eps; Test({LINENUM}20162, 'binomial(400, 335 )', 6714360154888989557585299532192240510787166954334414235749631321818599840800.0);
  Eps; Test({LINENUM}20163, 'binomial(400, 336 )', 1298908958535072384651918064263379860717755511999217039653946535470860088250.0);
  Eps; Test({LINENUM}20164, 'binomial(400, 337 )', 246677072244049354948732213984736828148179088332195520883835543828293904000.0);
  Eps; Test({LINENUM}20165, 'binomial(400, 338 )', 45978270862056536573284406748634379211051131848900348567105441601131704000.0);
  Eps; Test({LINENUM}20166, 'binomial(400, 339 )', 8409005290405620258240805954027526581372183405993574074219874275133232000.0);
  Eps; Test({LINENUM}20167, 'binomial(400, 340 )', 1508674478572773046331438715281409180775597611075317701551212737597432800.0);
  Eps; Test({LINENUM}20168, 'binomial(400, 341 )', 265455919983479128386763410313444430635002512212665871240682593125648000.0);
  Eps; Test({LINENUM}20169, 'binomial(400, 342 )', 45795027131652832090114155580389536279137860293997913459649921036296000.0);
  Eps; Test({LINENUM}20170, 'binomial(400, 343 )', 7743765520804268983167991322631466776064127979743087407171123673776000.0);
  Eps; Test({LINENUM}20171, 'binomial(400, 344 )', 1283123938040242244303998562180213971615277019899290645955680376178000.0);
  Eps; Test({LINENUM}20172, 'binomial(400, 345 )', 208275189942763958495721505745194151914363806128580510647878553814400.0);
  Eps; Test({LINENUM}20173, 'binomial(400, 346 )', 33107327881075195714637811606895024148237021205410196779287053352000.0);
  Eps; Test({LINENUM}20174, 'binomial(400, 347 )', 5152149007429569361932109010871271769466279957037898057871760464000.0);
  Eps; Test({LINENUM}20175, 'binomial(400, 348 )', 784666371821170046501154533264877597073887464721289072032193404000.0);
  Eps; Test({LINENUM}20176, 'binomial(400, 349 )', 116913041073641382286704973437746805294676642308043070904510192000.0);
  Eps; Test({LINENUM}20177, 'binomial(400, 350 )', 17035900270730601418919867558071677342938596450600561760371485120.0);
  Eps; Test({LINENUM}20178, 'binomial(400, 351 )', 2426766420331994504119639253286563724065327129715179737944656000.0);
  Eps; Test({LINENUM}20179, 'binomial(400, 352 )', 337816916466669689493927055145004609315912015216033543066159500.0);
  Eps; Test({LINENUM}20180, 'binomial(400, 353 )', 45935444732011742480760619396487878887149509151188697074152000.0);
  Eps; Test({LINENUM}20181, 'binomial(400, 354 )', 6098773735606078803942794100663644936994426356231267690636000.0);
  Eps; Test({LINENUM}20182, 'binomial(400, 355 )', 790263638979942605581319798959232865075334119398981165547200.0);
  Eps; Test({LINENUM}20183, 'binomial(400, 356 )', 99892875713756790031346603801026626203342795991444248454000.0);
  Eps; Test({LINENUM}20184, 'binomial(400, 357 )', 12311726978726327062686976378838015554473621914911896168000.0);
  Eps; Test({LINENUM}20185, 'binomial(400, 358 )', 1478782849400089563395363084609035387827837269109529428000.0);
  Eps; Test({LINENUM}20186, 'binomial(400, 359 )', 173005235862963124408371168672923360135847257110307064000.0);
  Eps; Test({LINENUM}20187, 'binomial(400, 360 )', 19703374084393022502064494209971827126582604282007193400.0);
  Eps; Test({LINENUM}20188, 'binomial(400, 361 )', 2183199344531082825713517363985798019565939532632376000.0);
  Eps; Test({LINENUM}20189, 'binomial(400, 362 )', 235206559217437100007809881755376029732242104344372000.0);
  Eps; Test({LINENUM}20190, 'binomial(400, 363 )', 24622174243147685400266599192022835068388980620072000.0);
  Eps; Test({LINENUM}20191, 'binomial(400, 364 )', 2502803425814462526950176291496826641567011766326000.0);
  Eps; Test({LINENUM}20192, 'binomial(400, 365 )', 246851844737864797178647524640782901634006639966400.0);
  Eps; Test({LINENUM}20193, 'binomial(400, 366 )', 23606050726298546178285965471113119008716481964000.0);
  Eps; Test({LINENUM}20194, 'binomial(400, 367 )', 2186936579548094196353468190784321652033679528000.0);
  Eps; Test({LINENUM}20195, 'binomial(400, 368 )', 196111160665997577390392527977941887274759305500.0);
  Eps; Test({LINENUM}20196, 'binomial(400, 369 )', 17006929922254532456619406220309323557702704000.0);
  Eps; Test({LINENUM}20197, 'binomial(400, 370 )', 1424904939432136503122166467106997379158875200.0);
  Eps; Test({LINENUM}20198, 'binomial(400, 371 )', 115221423673757668716078150979002483489936000.0);
  Eps; Test({LINENUM}20199, 'binomial(400, 372 )', 8982315286395087077328673060191053820452000.0);
  Eps; Test({LINENUM}20200, 'binomial(400, 373 )', 674275678335288037976415135885655514672000.0);
  Eps; Test({LINENUM}20201, 'binomial(400, 374 )', 48677655922601008089206440291210424856000.0);
  Eps; Test({LINENUM}20202, 'binomial(400, 375 )', 3374984143967003227518313193523922790016.0);
  Eps; Test({LINENUM}20203, 'binomial(400, 376 )', 224400541487167767787121887867282100400.0);
  Eps; Test({LINENUM}20204, 'binomial(400, 377 )', 14285445611915189461249138750171804800.0);
  Eps; Test({LINENUM}20205, 'binomial(400, 378 )', 869220235645633221187116908079236800.0);
  Eps; Test({LINENUM}20206, 'binomial(400, 379 )', 50456055894997179066270638463702400.0);
  Eps; Test({LINENUM}20207, 'binomial(400, 380 )', 2788360983670896737872851072994080.0);
  Eps; Test({LINENUM}20208, 'binomial(400, 381 )', 146370655310808227709860948713600.0);
  Eps; Test({LINENUM}20209, 'binomial(400, 382 )', 7280215840066377818029733051200.0);
  Eps; Test({LINENUM}20210, 'binomial(400, 383 )', 342151136086670497975287715200.0);
  Eps; Test({LINENUM}20211, 'binomial(400, 384 )', 15147315920503641837447633225.0);
  Eps; Test({LINENUM}20212, 'binomial(400, 385 )', 629498843449501998439382160.0);
  Eps; Test({LINENUM}20213, 'binomial(400, 386 )', 24462390289488419628473400.0);
  Eps; Test({LINENUM}20214, 'binomial(400, 387 )', 884944351557720606714800.0);
  Eps; Test({LINENUM}20215, 'binomial(400, 388 )', 29650197346006102802300.0);
  Eps; Test({LINENUM}20216, 'binomial(400, 389 )', 914659044092733248400.0);
  Eps; Test({LINENUM}20217, 'binomial(400, 390 )', 25798075602615553160.0);
  Test({LINENUM}20218, 'binomial(400, 391 )', 659797329990167600);
  Test({LINENUM}20219, 'binomial(400, 392 )', 15148408086508950);
  Test({LINENUM}20220, 'binomial(400, 393 )', 308364541201200);
  Test({LINENUM}20221, 'binomial(400, 394 )', 5478557838600);
  Test({LINENUM}20222, 'binomial(400, 395 )', 83218600080);
  Test({LINENUM}20223, 'binomial(400, 396 )', 1050739900);
  Test({LINENUM}20224, 'binomial(400, 397 )', 10586800);
  Test({LINENUM}20225, 'binomial(400, 398 )', 79800);
  Test({LINENUM}20226, 'binomial(400, 399 )', 400);
  Test({LINENUM}20227, 'binomial(400, 400 )', 1);

  Eps; Test({LINENUM}20229, 'binomial(500, 250)', 1.1674431578827768292093473476217661965923008118031144E149);
  Eps; Test({LINENUM}20230, 'binomial(800, 400)', 1.8804244186835312700958607615195351332156581822914058E239);
  Eps; Test({LINENUM}20231, 'binomial(1000, 500)', 2.7028824094543656951561469362597527549615200844654828E299);
  Eps; Test({LINENUM}20232, 'binomial(1200, 600)', 3.9650964622610201403671601486260572953160819570679165E359);
  Eps; Test({LINENUM}20233, 'binomial(1500, 750)', 7.2246289244893021702811607322848529594437634304054652E449);
  Eps; Test({LINENUM}20234, 'binomial(2000, 1000)', 2.0481516269894897143351625029808250443964248879813970E600);
  Eps; Test({LINENUM}20235, 'binomial(3000, 1500)', 1.7919679375475600507326903666685292846560897853633339E901);
  Eps; Test({LINENUM}20236, 'binomial(4000, 2000)', 1.662897875033835069539536826460381558016225597388640E1202);
  Eps; Test({LINENUM}20237, 'binomial(5000, 2500)', 1.593718685349438375691025792935919087257129434168729E1503);
  Eps; Test({LINENUM}20238, 'binomial(8000, 4000)', 1.550053928509880709855382381537398942593569455195730E2406);
  Eps; Test({LINENUM}20239, 'binomial(10000, 5000)', 1.591790263532438948337597273641521188653005837457614E3008);

  Test({LINENUM}20241, 'binomial(0, 1)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20242, 'binomial(1, 2)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20243, 'binomial(4, 5)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20244, 'binomial(10, 15)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20245, 'binomial(10, 11)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20246, 'binomial(-10, 5)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20247, 'binomial(10, -1)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20248, 'binomial(10, -3)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20249, 'binomial(10, -11)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20250, 'binomial(-10, -5)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20251, 'binomial(-10, -50)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20252, 'binomial(-1, 0)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}20253, 'binomial(10, 5, 2)', failure, 'Too many arguments.');
  Test({LINENUM}20254, 'binomial(10)', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}20255, 'binomial(10, "cat")', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}20256, 'binomial(10, 5.5)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');

  Test({LINENUM}20258, 'combinations(0, 0)', 1);

  Test({LINENUM}20260, 'combinations(1, 0)', 1);
  Test({LINENUM}20261, 'combinations(1, 1)', 1);

  Test({LINENUM}20263, 'combinations(2, 0)', 1);
  Test({LINENUM}20264, 'combinations(2, 1)', 2);
  Test({LINENUM}20265, 'combinations(2, 2)', 1);

  Test({LINENUM}20267, 'combinations(5, 0)', 1);
  Test({LINENUM}20268, 'combinations(5, 1)', 5);
  Test({LINENUM}20269, 'combinations(5, 2)', 10);
  Test({LINENUM}20270, 'combinations(5, 3)', 10);
  Test({LINENUM}20271, 'combinations(5, 4)', 5);
  Test({LINENUM}20272, 'combinations(5, 5)', 1);

  Test({LINENUM}20274, 'combinations(10, 0)', 1);
  Test({LINENUM}20275, 'combinations(10, 1)', 10);
  Test({LINENUM}20276, 'combinations(10, 2)', 45);
  Test({LINENUM}20277, 'combinations(10, 3)', 120);
  Test({LINENUM}20278, 'combinations(10, 4)', 210);
  Test({LINENUM}20279, 'combinations(10, 5)', 252);
  Test({LINENUM}20280, 'combinations(10, 6)', 210);
  Test({LINENUM}20281, 'combinations(10, 7)', 120);
  Test({LINENUM}20282, 'combinations(10, 8)', 45);
  Test({LINENUM}20283, 'combinations(10, 9)', 10);
  Test({LINENUM}20284, 'combinations(10, 10)', 1);

  Test({LINENUM}20286, 'combinations(20, 0)', 1);
  Test({LINENUM}20287, 'combinations(20, 1)', 20);
  Test({LINENUM}20288, 'combinations(20, 2)', 190);
  Test({LINENUM}20289, 'combinations(20, 3)', 1140);
  Test({LINENUM}20290, 'combinations(20, 4)', 4845);
  Test({LINENUM}20291, 'combinations(20, 5)', 15504);
  Test({LINENUM}20292, 'combinations(20, 6)', 38760);
  Test({LINENUM}20293, 'combinations(20, 7)', 77520);
  Test({LINENUM}20294, 'combinations(20, 8)', 125970);
  Test({LINENUM}20295, 'combinations(20, 9)', 167960);
  Test({LINENUM}20296, 'combinations(20, 10)', 184756);
  Test({LINENUM}20297, 'combinations(20, 11)', 167960);
  Test({LINENUM}20298, 'combinations(20, 12)', 125970);
  Test({LINENUM}20299, 'combinations(20, 13)', 77520);
  Test({LINENUM}20300, 'combinations(20, 14)', 38760);
  Test({LINENUM}20301, 'combinations(20, 15)', 15504);
  Test({LINENUM}20302, 'combinations(20, 16)', 4845);
  Test({LINENUM}20303, 'combinations(20, 17)', 1140);
  Test({LINENUM}20304, 'combinations(20, 18)', 190);
  Test({LINENUM}20305, 'combinations(20, 19)', 20);
  Test({LINENUM}20306, 'combinations(20, 20)', 1);

  Test({LINENUM}20308, 'combinations(50, 0)', 1);
  Test({LINENUM}20309, 'combinations(50, 1)', 50);
  Test({LINENUM}20310, 'combinations(50, 2)', 1225);
  Test({LINENUM}20311, 'combinations(50, 3)', 19600);
  Test({LINENUM}20312, 'combinations(50, 4)', 230300);
  Test({LINENUM}20313, 'combinations(50, 5)', 2118760);
  Test({LINENUM}20314, 'combinations(50, 6)', 15890700);
  Test({LINENUM}20315, 'combinations(50, 7)', 99884400);
  Test({LINENUM}20316, 'combinations(50, 8)', 536878650);
  Test({LINENUM}20317, 'combinations(50, 9)', 2505433700);
  Test({LINENUM}20318, 'combinations(50, 10)', 10272278170);
  Test({LINENUM}20319, 'combinations(50, 11)', 37353738800);
  Test({LINENUM}20320, 'combinations(50, 12)', 121399651100);
  Test({LINENUM}20321, 'combinations(50, 13)', 354860518600);
  Test({LINENUM}20322, 'combinations(50, 14)', 937845656300);
  Test({LINENUM}20323, 'combinations(50, 15)', 2250829575120);
  Test({LINENUM}20324, 'combinations(50, 16)', 4923689695575);
  Test({LINENUM}20325, 'combinations(50, 17)', 9847379391150);
  Test({LINENUM}20326, 'combinations(50, 18)', 18053528883775);
  Test({LINENUM}20327, 'combinations(50, 19)', 30405943383200);
  Test({LINENUM}20328, 'combinations(50, 20)', 47129212243960);
  Test({LINENUM}20329, 'combinations(50, 21)', 67327446062800);
  Test({LINENUM}20330, 'combinations(50, 22)', 88749815264600);
  Test({LINENUM}20331, 'combinations(50, 23)', 108043253365600);
  Test({LINENUM}20332, 'combinations(50, 24)', 121548660036300);
  Test({LINENUM}20333, 'combinations(50, 25)', 126410606437752);
  Test({LINENUM}20334, 'combinations(50, 26)', 121548660036300);
  Test({LINENUM}20335, 'combinations(50, 27)', 108043253365600);
  Test({LINENUM}20336, 'combinations(50, 28)', 88749815264600);
  Test({LINENUM}20337, 'combinations(50, 29)', 67327446062800);
  Test({LINENUM}20338, 'combinations(50, 30)', 47129212243960);
  Test({LINENUM}20339, 'combinations(50, 31)', 30405943383200);
  Test({LINENUM}20340, 'combinations(50, 32)', 18053528883775);
  Test({LINENUM}20341, 'combinations(50, 33)', 9847379391150);
  Test({LINENUM}20342, 'combinations(50, 34)', 4923689695575);
  Test({LINENUM}20343, 'combinations(50, 35)', 2250829575120);
  Test({LINENUM}20344, 'combinations(50, 36)', 937845656300);
  Test({LINENUM}20345, 'combinations(50, 37)', 354860518600);
  Test({LINENUM}20346, 'combinations(50, 38)', 121399651100);
  Test({LINENUM}20347, 'combinations(50, 39)', 37353738800);
  Test({LINENUM}20348, 'combinations(50, 40)', 10272278170);
  Test({LINENUM}20349, 'combinations(50, 41)', 2505433700);
  Test({LINENUM}20350, 'combinations(50, 42)', 536878650);
  Test({LINENUM}20351, 'combinations(50, 43)', 99884400);
  Test({LINENUM}20352, 'combinations(50, 44)', 15890700);
  Test({LINENUM}20353, 'combinations(50, 45)', 2118760);
  Test({LINENUM}20354, 'combinations(50, 46)', 230300);
  Test({LINENUM}20355, 'combinations(50, 47)', 19600);
  Test({LINENUM}20356, 'combinations(50, 48)', 1225);
  Test({LINENUM}20357, 'combinations(50, 49)', 50);
  Test({LINENUM}20358, 'combinations(50, 50)', 1);

  Test({LINENUM}20360, 'combinations(100, 0   )', 1);
  Test({LINENUM}20361, 'combinations(100, 1   )', 100);
  Test({LINENUM}20362, 'combinations(100, 2   )', 4950);
  Test({LINENUM}20363, 'combinations(100, 3   )', 161700);
  Test({LINENUM}20364, 'combinations(100, 4   )', 3921225);
  Test({LINENUM}20365, 'combinations(100, 5   )', 75287520);
  Test({LINENUM}20366, 'combinations(100, 6   )', 1192052400);
  Test({LINENUM}20367, 'combinations(100, 7   )', 16007560800);
  Test({LINENUM}20368, 'combinations(100, 8   )', 186087894300);
  Test({LINENUM}20369, 'combinations(100, 9   )', 1902231808400);
  Test({LINENUM}20370, 'combinations(100, 10  )', 17310309456440);
  Test({LINENUM}20371, 'combinations(100, 11  )', 141629804643600);
  Test({LINENUM}20372, 'combinations(100, 12  )', 1050421051106700);
  Test({LINENUM}20373, 'combinations(100, 13  )', 7110542499799200);
  Test({LINENUM}20374, 'combinations(100, 14  )', 44186942677323600);
  Test({LINENUM}20375, 'combinations(100, 15  )', 253338471349988640);
  Test({LINENUM}20376, 'combinations(100, 16  )', 1345860629046814650);
  Test({LINENUM}20377, 'combinations(100, 17  )', 6650134872937201800);
  Eps; Test({LINENUM}20378, 'combinations(100, 18  )', 30664510802988208300.0);
  Eps; Test({LINENUM}20379, 'combinations(100, 19  )', 132341572939212267400.0);
  Eps; Test({LINENUM}20380, 'combinations(100, 20  )', 535983370403809682970.0);
  Eps; Test({LINENUM}20381, 'combinations(100, 21  )', 2041841411062132125600.0);
  Eps; Test({LINENUM}20382, 'combinations(100, 22  )', 7332066885177656269200.0);
  Eps; Test({LINENUM}20383, 'combinations(100, 23  )', 24865270306254660391200.0);
  Eps; Test({LINENUM}20384, 'combinations(100, 24  )', 79776075565900368755100.0);
  Eps; Test({LINENUM}20385, 'combinations(100, 25  )', 242519269720337121015504.0);
  Eps; Test({LINENUM}20386, 'combinations(100, 26  )', 699574816500972464467800.0);
  Eps; Test({LINENUM}20387, 'combinations(100, 27  )', 1917353200780443050763600.0);
  Eps; Test({LINENUM}20388, 'combinations(100, 28  )', 4998813702034726525205100.0);
  Eps; Test({LINENUM}20389, 'combinations(100, 29  )', 12410847811948286545336800.0);
  Eps; Test({LINENUM}20390, 'combinations(100, 30  )', 29372339821610944823963760.0);
  Eps; Test({LINENUM}20391, 'combinations(100, 31  )', 66324638306863423796047200.0);
  Eps; Test({LINENUM}20392, 'combinations(100, 32  )', 143012501349174257560226775.0);
  Eps; Test({LINENUM}20393, 'combinations(100, 33  )', 294692427022540894366527900.0);
  Eps; Test({LINENUM}20394, 'combinations(100, 34  )', 580717429720889409486981450.0);
  Eps; Test({LINENUM}20395, 'combinations(100, 35  )', 1095067153187962886461165020.0);
  Eps; Test({LINENUM}20396, 'combinations(100, 36  )', 1977204582144932989443770175.0);
  Eps; Test({LINENUM}20397, 'combinations(100, 37  )', 3420029547493938143902737600.0);
  Eps; Test({LINENUM}20398, 'combinations(100, 38  )', 5670048986634686922786117600.0);
  Eps; Test({LINENUM}20399, 'combinations(100, 39  )', 9013924030034630492634340800.0);
  Eps; Test({LINENUM}20400, 'combinations(100, 40  )', 13746234145802811501267369720.0);
  Eps; Test({LINENUM}20401, 'combinations(100, 41  )', 20116440213369968050635175200.0);
  Eps; Test({LINENUM}20402, 'combinations(100, 42  )', 28258808871162574166368460400.0);
  Eps; Test({LINENUM}20403, 'combinations(100, 43  )', 38116532895986727945334202400.0);
  Eps; Test({LINENUM}20404, 'combinations(100, 44  )', 49378235797073715747364762200.0);
  Eps; Test({LINENUM}20405, 'combinations(100, 45  )', 61448471214136179596720592960.0);
  Eps; Test({LINENUM}20406, 'combinations(100, 46  )', 73470998190814997343905056800.0);
  Eps; Test({LINENUM}20407, 'combinations(100, 47  )', 84413487283064039501507937600.0);
  Eps; Test({LINENUM}20408, 'combinations(100, 48  )', 93206558875049876949581681100.0);
  Eps; Test({LINENUM}20409, 'combinations(100, 49  )', 98913082887808032681188722800.0);
  Eps; Test({LINENUM}20410, 'combinations(100, 50  )', 100891344545564193334812497256.0);
  Eps; Test({LINENUM}20411, 'combinations(100, 51  )', 98913082887808032681188722800.0);
  Eps; Test({LINENUM}20412, 'combinations(100, 52  )', 93206558875049876949581681100.0);
  Eps; Test({LINENUM}20413, 'combinations(100, 53  )', 84413487283064039501507937600.0);
  Eps; Test({LINENUM}20414, 'combinations(100, 54  )', 73470998190814997343905056800.0);
  Eps; Test({LINENUM}20415, 'combinations(100, 55  )', 61448471214136179596720592960.0);
  Eps; Test({LINENUM}20416, 'combinations(100, 56  )', 49378235797073715747364762200.0);
  Eps; Test({LINENUM}20417, 'combinations(100, 57  )', 38116532895986727945334202400.0);
  Eps; Test({LINENUM}20418, 'combinations(100, 58  )', 28258808871162574166368460400.0);
  Eps; Test({LINENUM}20419, 'combinations(100, 59  )', 20116440213369968050635175200.0);
  Eps; Test({LINENUM}20420, 'combinations(100, 60  )', 13746234145802811501267369720.0);
  Eps; Test({LINENUM}20421, 'combinations(100, 61  )', 9013924030034630492634340800.0);
  Eps; Test({LINENUM}20422, 'combinations(100, 62  )', 5670048986634686922786117600.0);
  Eps; Test({LINENUM}20423, 'combinations(100, 63  )', 3420029547493938143902737600.0);
  Eps; Test({LINENUM}20424, 'combinations(100, 64  )', 1977204582144932989443770175.0);
  Eps; Test({LINENUM}20425, 'combinations(100, 65  )', 1095067153187962886461165020.0);
  Eps; Test({LINENUM}20426, 'combinations(100, 66  )', 580717429720889409486981450.0);
  Eps; Test({LINENUM}20427, 'combinations(100, 67  )', 294692427022540894366527900.0);
  Eps; Test({LINENUM}20428, 'combinations(100, 68  )', 143012501349174257560226775.0);
  Eps; Test({LINENUM}20429, 'combinations(100, 69  )', 66324638306863423796047200.0);
  Eps; Test({LINENUM}20430, 'combinations(100, 70  )', 29372339821610944823963760.0);
  Eps; Test({LINENUM}20431, 'combinations(100, 71  )', 12410847811948286545336800.0);
  Eps; Test({LINENUM}20432, 'combinations(100, 72  )', 4998813702034726525205100.0);
  Eps; Test({LINENUM}20433, 'combinations(100, 73  )', 1917353200780443050763600.0);
  Eps; Test({LINENUM}20434, 'combinations(100, 74  )', 699574816500972464467800.0);
  Eps; Test({LINENUM}20435, 'combinations(100, 75  )', 242519269720337121015504.0);
  Eps; Test({LINENUM}20436, 'combinations(100, 76  )', 79776075565900368755100.0);
  Eps; Test({LINENUM}20437, 'combinations(100, 77  )', 24865270306254660391200.0);
  Eps; Test({LINENUM}20438, 'combinations(100, 78  )', 7332066885177656269200.0);
  Eps; Test({LINENUM}20439, 'combinations(100, 79  )', 2041841411062132125600.0);
  Eps; Test({LINENUM}20440, 'combinations(100, 80  )', 535983370403809682970.0);
  Eps; Test({LINENUM}20441, 'combinations(100, 81  )', 132341572939212267400.0);
  Eps; Test({LINENUM}20442, 'combinations(100, 82  )', 30664510802988208300.0);
  Test({LINENUM}20443, 'combinations(100, 83  )', 6650134872937201800);
  Test({LINENUM}20444, 'combinations(100, 84  )', 1345860629046814650);
  Test({LINENUM}20445, 'combinations(100, 85  )', 253338471349988640);
  Test({LINENUM}20446, 'combinations(100, 86  )', 44186942677323600);
  Test({LINENUM}20447, 'combinations(100, 87  )', 7110542499799200);
  Test({LINENUM}20448, 'combinations(100, 88  )', 1050421051106700);
  Test({LINENUM}20449, 'combinations(100, 89  )', 141629804643600);
  Test({LINENUM}20450, 'combinations(100, 90  )', 17310309456440);
  Test({LINENUM}20451, 'combinations(100, 91  )', 1902231808400);
  Test({LINENUM}20452, 'combinations(100, 92  )', 186087894300);
  Test({LINENUM}20453, 'combinations(100, 93  )', 16007560800);
  Test({LINENUM}20454, 'combinations(100, 94  )', 1192052400);
  Test({LINENUM}20455, 'combinations(100, 95  )', 75287520);
  Test({LINENUM}20456, 'combinations(100, 96  )', 3921225);
  Test({LINENUM}20457, 'combinations(100, 97  )', 161700);
  Test({LINENUM}20458, 'combinations(100, 98  )', 4950);
  Test({LINENUM}20459, 'combinations(100, 99  )', 100);
  Test({LINENUM}20460, 'combinations(100, 100 )', 1);

  Test({LINENUM}20462, 'combinations(200, 0   )', 1);
  Test({LINENUM}20463, 'combinations(200, 1   )', 200);
  Test({LINENUM}20464, 'combinations(200, 2   )', 19900);
  Test({LINENUM}20465, 'combinations(200, 3   )', 1313400);
  Test({LINENUM}20466, 'combinations(200, 4   )', 64684950);
  Test({LINENUM}20467, 'combinations(200, 5   )', 2535650040);
  Test({LINENUM}20468, 'combinations(200, 6   )', 82408626300);
  Test({LINENUM}20469, 'combinations(200, 7   )', 2283896214600);
  Test({LINENUM}20470, 'combinations(200, 8   )', 55098996177225);
  Test({LINENUM}20471, 'combinations(200, 9   )', 1175445251780800);
  Test({LINENUM}20472, 'combinations(200, 10  )', 22451004309013280);
  Test({LINENUM}20473, 'combinations(200, 11  )', 387790074428411200);
  Test({LINENUM}20474, 'combinations(200, 12  )', 6107693672247476400);
  Eps; Test({LINENUM}20475, 'combinations(200, 13  )', 88326646952501966400.0);
  Eps; Test({LINENUM}20476, 'combinations(200, 14  )', 1179791641436990551200.0);
  Eps; Test({LINENUM}20477, 'combinations(200, 15  )', 14629416353818682834880.0);
  Eps; Test({LINENUM}20478, 'combinations(200, 16  )', 169152626591028520278300.0);
  Eps; Test({LINENUM}20479, 'combinations(200, 17  )', 1830828428985249866541600.0);
  Eps; Test({LINENUM}20480, 'combinations(200, 18  )', 18613422361350040309839600.0);
  Eps; Test({LINENUM}20481, 'combinations(200, 19  )', 178296993145563544020568800.0);
  Eps; Test({LINENUM}20482, 'combinations(200, 20  )', 1613587787967350073386147640.0);
  Eps; Test({LINENUM}20483, 'combinations(200, 21  )', 13830752468291572057595551200.0);
  Eps; Test({LINENUM}20484, 'combinations(200, 22  )', 112532031446554154468618348400.0);
  Eps; Test({LINENUM}20485, 'combinations(200, 23  )', 870900069455940847626698522400.0);
  Eps; Test({LINENUM}20486, 'combinations(200, 24  )', 6422888012237563751246901602700.0);
  Eps; Test({LINENUM}20487, 'combinations(200, 25  )', 45217131606152448808778187283008.0);
  Eps; Test({LINENUM}20488, 'combinations(200, 26  )', 304346078118333790059083952866400.0);
  Eps; Test({LINENUM}20489, 'combinations(200, 27  )', 1961341392318151091491874362916800.0);
  Eps; Test({LINENUM}20490, 'combinations(200, 28  )', 12118287888251433529574795170878800.0);
  Eps; Test({LINENUM}20491, 'combinations(200, 29  )', 71873983337215398865064302392798400.0);
  Eps; Test({LINENUM}20492, 'combinations(200, 30  )', 409681705022127773530866523638950880.0);
  Eps; Test({LINENUM}20493, 'combinations(200, 31  )', 2246641608185861983878945452213601600.0);
  Eps; Test({LINENUM}20494, 'combinations(200, 32  )', 11865075993231583602360680669503083450.0);
  Eps; Test({LINENUM}20495, 'combinations(200, 33  )', 60404023238269880157472556135652061200.0);
  Eps; Test({LINENUM}20496, 'combinations(200, 34  )', 296690349435031470185232849254526300600.0);
  Eps; Test({LINENUM}20497, 'combinations(200, 35  )', 1407159943034720687164247227892896168560.0);
  Eps; Test({LINENUM}20498, 'combinations(200, 36  )', 6449483072242469816169466461175774105900.0);
  Eps; Test({LINENUM}20499, 'combinations(200, 37  )', 28586897941831487833832229719806133874800.0);
  Eps; Test({LINENUM}20500, 'combinations(200, 38  )', 122622746434698224129332985377063153199800.0);
  Eps; Test({LINENUM}20501, 'combinations(200, 39  )', 509356023651823392537229323873954636368400.0);
  Eps; Test({LINENUM}20502, 'combinations(200, 40  )', 2050157995198589154962348028592667411382810.0);
  Eps; Test({LINENUM}20503, 'combinations(200, 41  )', 8000616566628640604731114257922604532225600.0);
  Eps; Test({LINENUM}20504, 'combinations(200, 42  )', 30288048430808425146482075404992717157711200.0);
  Eps; Test({LINENUM}20505, 'combinations(200, 43  )', 111290968652737934259166695674159286300427200.0);
  Eps; Test({LINENUM}20506, 'combinations(200, 44  )', 397106410874542174515662982291886544299251600.0);
  Eps; Test({LINENUM}20507, 'combinations(200, 45  )', 1376635557698412871654298338611873353570738880.0);
  Eps; Test({LINENUM}20508, 'combinations(200, 46  )', 4638663292244652067530787880105225430510098400.0);
  Eps; Test({LINENUM}20509, 'combinations(200, 47  )', 15199024404376094008505134756089462048905428800.0);
  Eps; Test({LINENUM}20510, 'combinations(200, 48  )', 48446890288948799652110117035035160280886054300.0);
  Eps; Test({LINENUM}20511, 'combinations(200, 49  )', 150284231100412603002464036516843762503973066400.0);
  Eps; Test({LINENUM}20512, 'combinations(200, 50  )', 453858377923246061067441390280868162761998660528.0);
  Eps; Test({LINENUM}20513, 'combinations(200, 51  )', 1334877582127194297257180559649612243417643119200.0);
  Eps; Test({LINENUM}20514, 'combinations(200, 52  )', 3824937687249075967140767372842158159023631245400.0);
  Eps; Test({LINENUM}20515, 'combinations(200, 53  )', 10680958070054023455411954173219611462933913666400.0);
  Eps; Test({LINENUM}20516, 'combinations(200, 54  )', 29075941412924841628621430804875608982431209425200.0);
  Eps; Test({LINENUM}20517, 'combinations(200, 55  )', 77183408114309579595976889045669798389726483201440.0);
  Eps; Test({LINENUM}20518, 'combinations(200, 56  )', 199849896010265875739583016278966442259113215432300.0);
  Eps; Test({LINENUM}20519, 'combinations(200, 57  )', 504883947815408528184209725336336275180917596881600.0);
  Eps; Test({LINENUM}20520, 'combinations(200, 58  )', 1244800078234541716040379150398208402601227868173600.0);
  Eps; Test({LINENUM}20521, 'combinations(200, 59  )', 2995959510327202096232776938246535477447023004756800.0);
  Eps; Test({LINENUM}20522, 'combinations(200, 60  )', 7040504849268924926147025804879358372000504061178480.0);
  Eps; Test({LINENUM}20523, 'combinations(200, 61  )', 16158535719633598191157108404641150361968369976475200.0);
  Eps; Test({LINENUM}20524, 'combinations(200, 62  )', 36226394597243066912432872068469675811509732689194400.0);
  Eps; Test({LINENUM}20525, 'combinations(200, 63  )', 79353054832056241808186291197600242253783223985854400.0);
  Eps; Test({LINENUM}20526, 'combinations(200, 64  )', 169865132999870392620648779594863018574504713844719575.0);
  Eps; Test({LINENUM}20527, 'combinations(200, 65  )', 355410124430498052252434369613867238863579093582797880.0);
  Eps; Test({LINENUM}20528, 'combinations(200, 66  )', 726975254516927834152706665119273897675502691419359300.0);
  Eps; Test({LINENUM}20529, 'combinations(200, 67  )', 1453950509033855668305413330238547795351005382838718600.0);
  Eps; Test({LINENUM}20530, 'combinations(200, 68  )', 2843756142669158880656176072378336129142407587022787850.0);
  Eps; Test({LINENUM}20531, 'combinations(200, 69  )', 5440229142497521336907467268897686507924605818652289800.0);
  Eps; Test({LINENUM}20532, 'combinations(200, 70  )', 10181000252388218501926831603222813321973190889192142340.0);
  Eps; Test({LINENUM}20533, 'combinations(200, 71  )', 18641268067753076130288564907309376505021335430915190200.0);
  Eps; Test({LINENUM}20534, 'combinations(200, 72  )', 33398938621390928066767012125595966238163225980389715775.0);
  Eps; Test({LINENUM}20535, 'combinations(200, 73  )', 58562522514219709486933939069538132581984834595751830400.0);
  Eps; Test({LINENUM}20536, 'combinations(200, 74  )', 100505950801431123038386625159883011323136135049465979200.0);
  Eps; Test({LINENUM}20537, 'combinations(200, 75  )', 168849997346404286704489530268603459022868706883102845056.0);
  Eps; Test({LINENUM}20538, 'combinations(200, 76  )', 277713811425007050500805148468097794445507741584050732000.0);
  Eps; Test({LINENUM}20539, 'combinations(200, 77  )', 447227436580530834572725174156417227418739739693795984000.0);
  Eps; Test({LINENUM}20540, 'combinations(200, 78  )', 705243265376990931441605082323581012468012666440216744000.0);
  Eps; Test({LINENUM}20541, 'combinations(200, 79  )', 1089109852860669539694630633461732702798703105135524592000.0);
  Eps; Test({LINENUM}20542, 'combinations(200, 80  )', 1647278652451762678788128833110870712983038446517480945400.0);
  Eps; Test({LINENUM}20543, 'combinations(200, 81  )', 2440412818447055820426857530534623278493390291137008808000.0);
  Eps; Test({LINENUM}20544, 'combinations(200, 82  )', 3541574699941459056473122513824636221228212739576878636000.0);
  Eps; Test({LINENUM}20545, 'combinations(200, 83  )', 5035009814374604441732872971461531013312398834579176856000.0);
  Eps; Test({LINENUM}20546, 'combinations(200, 84  )', 7013049384307484758127930210249989625685126948163853478000.0);
  Eps; Test({LINENUM}20547, 'combinations(200, 85  )', 9570749747996096846386351816341162312699702658670670628800.0);
  Eps; Test({LINENUM}20548, 'combinations(200, 86  )', 12798095593250594620167796033479461232098439601710780492000.0);
  Eps; Test({LINENUM}20549, 'combinations(200, 87  )', 16769918363569744674702629285248949200680713960862402024000.0);
  Eps; Test({LINENUM}20550, 'combinations(200, 88  )', 21534099716856603957288603514012855223601371336107402599000.0);
  Eps; Test({LINENUM}20551, 'combinations(200, 89  )', 27099091778516175766475545995162244775768017861168866192000.0);
  Eps; Test({LINENUM}20552, 'combinations(200, 90  )', 33422213193503283445319840060700101890113888695441601636800.0);
  Eps; Test({LINENUM}20553, 'combinations(200, 91  )', 40400477486652320648188817655791331955082722598885452528000.0);
  Eps; Test({LINENUM}20554, 'combinations(200, 92  )', 47865783109185901637528055700883208512000182209549068756000.0);
  Eps; Test({LINENUM}20555, 'combinations(200, 93  )', 55586070707441692224226129201025661497806663211089241136000.0);
  Eps; Test({LINENUM}20556, 'combinations(200, 94  )', 63273506018045330510555274728827082768779925144537753208000.0);
  Eps; Test({LINENUM}20557, 'combinations(200, 95  )', 70599911978029526674935359171112323931480758582326335158400.0);
  Eps; Test({LINENUM}20558, 'combinations(200, 96  )', 77218653725969794800710549093404104300057079699419429079500.0);
  Eps; Test({LINENUM}20559, 'combinations(200, 97  )', 82791133891761429477050485625917802548514807100408460044000.0);
  Eps; Test({LINENUM}20560, 'combinations(200, 98  )', 87015171335218645266695918566015649617316582972878279434000.0);
  Eps; Test({LINENUM}20561, 'combinations(200, 99  )', 89651994709013149668717007007410063242083752153874590932000.0);
  Eps; Test({LINENUM}20562, 'combinations(200, 100 )', 90548514656103281165404177077484163874504589675413336841320.0);
  Eps; Test({LINENUM}20563, 'combinations(200, 101 )', 89651994709013149668717007007410063242083752153874590932000.0);
  Eps; Test({LINENUM}20564, 'combinations(200, 102 )', 87015171335218645266695918566015649617316582972878279434000.0);
  Eps; Test({LINENUM}20565, 'combinations(200, 103 )', 82791133891761429477050485625917802548514807100408460044000.0);
  Eps; Test({LINENUM}20566, 'combinations(200, 104 )', 77218653725969794800710549093404104300057079699419429079500.0);
  Eps; Test({LINENUM}20567, 'combinations(200, 105 )', 70599911978029526674935359171112323931480758582326335158400.0);
  Eps; Test({LINENUM}20568, 'combinations(200, 106 )', 63273506018045330510555274728827082768779925144537753208000.0);
  Eps; Test({LINENUM}20569, 'combinations(200, 107 )', 55586070707441692224226129201025661497806663211089241136000.0);
  Eps; Test({LINENUM}20570, 'combinations(200, 108 )', 47865783109185901637528055700883208512000182209549068756000.0);
  Eps; Test({LINENUM}20571, 'combinations(200, 109 )', 40400477486652320648188817655791331955082722598885452528000.0);
  Eps; Test({LINENUM}20572, 'combinations(200, 110 )', 33422213193503283445319840060700101890113888695441601636800.0);
  Eps; Test({LINENUM}20573, 'combinations(200, 111 )', 27099091778516175766475545995162244775768017861168866192000.0);
  Eps; Test({LINENUM}20574, 'combinations(200, 112 )', 21534099716856603957288603514012855223601371336107402599000.0);
  Eps; Test({LINENUM}20575, 'combinations(200, 113 )', 16769918363569744674702629285248949200680713960862402024000.0);
  Eps; Test({LINENUM}20576, 'combinations(200, 114 )', 12798095593250594620167796033479461232098439601710780492000.0);
  Eps; Test({LINENUM}20577, 'combinations(200, 115 )', 9570749747996096846386351816341162312699702658670670628800.0);
  Eps; Test({LINENUM}20578, 'combinations(200, 116 )', 7013049384307484758127930210249989625685126948163853478000.0);
  Eps; Test({LINENUM}20579, 'combinations(200, 117 )', 5035009814374604441732872971461531013312398834579176856000.0);
  Eps; Test({LINENUM}20580, 'combinations(200, 118 )', 3541574699941459056473122513824636221228212739576878636000.0);
  Eps; Test({LINENUM}20581, 'combinations(200, 119 )', 2440412818447055820426857530534623278493390291137008808000.0);
  Eps; Test({LINENUM}20582, 'combinations(200, 120 )', 1647278652451762678788128833110870712983038446517480945400.0);
  Eps; Test({LINENUM}20583, 'combinations(200, 121 )', 1089109852860669539694630633461732702798703105135524592000.0);
  Eps; Test({LINENUM}20584, 'combinations(200, 122 )', 705243265376990931441605082323581012468012666440216744000.0);
  Eps; Test({LINENUM}20585, 'combinations(200, 123 )', 447227436580530834572725174156417227418739739693795984000.0);
  Eps; Test({LINENUM}20586, 'combinations(200, 124 )', 277713811425007050500805148468097794445507741584050732000.0);
  Eps; Test({LINENUM}20587, 'combinations(200, 125 )', 168849997346404286704489530268603459022868706883102845056.0);
  Eps; Test({LINENUM}20588, 'combinations(200, 126 )', 100505950801431123038386625159883011323136135049465979200.0);
  Eps; Test({LINENUM}20589, 'combinations(200, 127 )', 58562522514219709486933939069538132581984834595751830400.0);
  Eps; Test({LINENUM}20590, 'combinations(200, 128 )', 33398938621390928066767012125595966238163225980389715775.0);
  Eps; Test({LINENUM}20591, 'combinations(200, 129 )', 18641268067753076130288564907309376505021335430915190200.0);
  Eps; Test({LINENUM}20592, 'combinations(200, 130 )', 10181000252388218501926831603222813321973190889192142340.0);
  Eps; Test({LINENUM}20593, 'combinations(200, 131 )', 5440229142497521336907467268897686507924605818652289800.0);
  Eps; Test({LINENUM}20594, 'combinations(200, 132 )', 2843756142669158880656176072378336129142407587022787850.0);
  Eps; Test({LINENUM}20595, 'combinations(200, 133 )', 1453950509033855668305413330238547795351005382838718600.0);
  Eps; Test({LINENUM}20596, 'combinations(200, 134 )', 726975254516927834152706665119273897675502691419359300.0);
  Eps; Test({LINENUM}20597, 'combinations(200, 135 )', 355410124430498052252434369613867238863579093582797880.0);
  Eps; Test({LINENUM}20598, 'combinations(200, 136 )', 169865132999870392620648779594863018574504713844719575.0);
  Eps; Test({LINENUM}20599, 'combinations(200, 137 )', 79353054832056241808186291197600242253783223985854400.0);
  Eps; Test({LINENUM}20600, 'combinations(200, 138 )', 36226394597243066912432872068469675811509732689194400.0);
  Eps; Test({LINENUM}20601, 'combinations(200, 139 )', 16158535719633598191157108404641150361968369976475200.0);
  Eps; Test({LINENUM}20602, 'combinations(200, 140 )', 7040504849268924926147025804879358372000504061178480.0);
  Eps; Test({LINENUM}20603, 'combinations(200, 141 )', 2995959510327202096232776938246535477447023004756800.0);
  Eps; Test({LINENUM}20604, 'combinations(200, 142 )', 1244800078234541716040379150398208402601227868173600.0);
  Eps; Test({LINENUM}20605, 'combinations(200, 143 )', 504883947815408528184209725336336275180917596881600.0);
  Eps; Test({LINENUM}20606, 'combinations(200, 144 )', 199849896010265875739583016278966442259113215432300.0);
  Eps; Test({LINENUM}20607, 'combinations(200, 145 )', 77183408114309579595976889045669798389726483201440.0);
  Eps; Test({LINENUM}20608, 'combinations(200, 146 )', 29075941412924841628621430804875608982431209425200.0);
  Eps; Test({LINENUM}20609, 'combinations(200, 147 )', 10680958070054023455411954173219611462933913666400.0);
  Eps; Test({LINENUM}20610, 'combinations(200, 148 )', 3824937687249075967140767372842158159023631245400.0);
  Eps; Test({LINENUM}20611, 'combinations(200, 149 )', 1334877582127194297257180559649612243417643119200.0);
  Eps; Test({LINENUM}20612, 'combinations(200, 150 )', 453858377923246061067441390280868162761998660528.0);
  Eps; Test({LINENUM}20613, 'combinations(200, 151 )', 150284231100412603002464036516843762503973066400.0);
  Eps; Test({LINENUM}20614, 'combinations(200, 152 )', 48446890288948799652110117035035160280886054300.0);
  Eps; Test({LINENUM}20615, 'combinations(200, 153 )', 15199024404376094008505134756089462048905428800.0);
  Eps; Test({LINENUM}20616, 'combinations(200, 154 )', 4638663292244652067530787880105225430510098400.0);
  Eps; Test({LINENUM}20617, 'combinations(200, 155 )', 1376635557698412871654298338611873353570738880.0);
  Eps; Test({LINENUM}20618, 'combinations(200, 156 )', 397106410874542174515662982291886544299251600.0);
  Eps; Test({LINENUM}20619, 'combinations(200, 157 )', 111290968652737934259166695674159286300427200.0);
  Eps; Test({LINENUM}20620, 'combinations(200, 158 )', 30288048430808425146482075404992717157711200.0);
  Eps; Test({LINENUM}20621, 'combinations(200, 159 )', 8000616566628640604731114257922604532225600.0);
  Eps; Test({LINENUM}20622, 'combinations(200, 160 )', 2050157995198589154962348028592667411382810.0);
  Eps; Test({LINENUM}20623, 'combinations(200, 161 )', 509356023651823392537229323873954636368400.0);
  Eps; Test({LINENUM}20624, 'combinations(200, 162 )', 122622746434698224129332985377063153199800.0);
  Eps; Test({LINENUM}20625, 'combinations(200, 163 )', 28586897941831487833832229719806133874800.0);
  Eps; Test({LINENUM}20626, 'combinations(200, 164 )', 6449483072242469816169466461175774105900.0);
  Eps; Test({LINENUM}20627, 'combinations(200, 165 )', 1407159943034720687164247227892896168560.0);
  Eps; Test({LINENUM}20628, 'combinations(200, 166 )', 296690349435031470185232849254526300600.0);
  Eps; Test({LINENUM}20629, 'combinations(200, 167 )', 60404023238269880157472556135652061200.0);
  Eps; Test({LINENUM}20630, 'combinations(200, 168 )', 11865075993231583602360680669503083450.0);
  Eps; Test({LINENUM}20631, 'combinations(200, 169 )', 2246641608185861983878945452213601600.0);
  Eps; Test({LINENUM}20632, 'combinations(200, 170 )', 409681705022127773530866523638950880.0);
  Eps; Test({LINENUM}20633, 'combinations(200, 171 )', 71873983337215398865064302392798400.0);
  Eps; Test({LINENUM}20634, 'combinations(200, 172 )', 12118287888251433529574795170878800.0);
  Eps; Test({LINENUM}20635, 'combinations(200, 173 )', 1961341392318151091491874362916800.0);
  Eps; Test({LINENUM}20636, 'combinations(200, 174 )', 304346078118333790059083952866400.0);
  Eps; Test({LINENUM}20637, 'combinations(200, 175 )', 45217131606152448808778187283008.0);
  Eps; Test({LINENUM}20638, 'combinations(200, 176 )', 6422888012237563751246901602700.0);
  Eps; Test({LINENUM}20639, 'combinations(200, 177 )', 870900069455940847626698522400.0);
  Eps; Test({LINENUM}20640, 'combinations(200, 178 )', 112532031446554154468618348400.0);
  Eps; Test({LINENUM}20641, 'combinations(200, 179 )', 13830752468291572057595551200.0);
  Eps; Test({LINENUM}20642, 'combinations(200, 180 )', 1613587787967350073386147640.0);
  Eps; Test({LINENUM}20643, 'combinations(200, 181 )', 178296993145563544020568800.0);
  Eps; Test({LINENUM}20644, 'combinations(200, 182 )', 18613422361350040309839600.0);
  Eps; Test({LINENUM}20645, 'combinations(200, 183 )', 1830828428985249866541600.0);
  Eps; Test({LINENUM}20646, 'combinations(200, 184 )', 169152626591028520278300.0);
  Eps; Test({LINENUM}20647, 'combinations(200, 185 )', 14629416353818682834880.0);
  Eps; Test({LINENUM}20648, 'combinations(200, 186 )', 1179791641436990551200.0);
  Eps; Test({LINENUM}20649, 'combinations(200, 187 )', 88326646952501966400.0);
  Test({LINENUM}20650, 'combinations(200, 188 )', 6107693672247476400);
  Test({LINENUM}20651, 'combinations(200, 189 )', 387790074428411200);
  Test({LINENUM}20652, 'combinations(200, 190 )', 22451004309013280);
  Test({LINENUM}20653, 'combinations(200, 191 )', 1175445251780800);
  Test({LINENUM}20654, 'combinations(200, 192 )', 55098996177225);
  Test({LINENUM}20655, 'combinations(200, 193 )', 2283896214600);
  Test({LINENUM}20656, 'combinations(200, 194 )', 82408626300);
  Test({LINENUM}20657, 'combinations(200, 195 )', 2535650040);
  Test({LINENUM}20658, 'combinations(200, 196 )', 64684950);
  Test({LINENUM}20659, 'combinations(200, 197 )', 1313400);
  Test({LINENUM}20660, 'combinations(200, 198 )', 19900);
  Test({LINENUM}20661, 'combinations(200, 199 )', 200);
  Test({LINENUM}20662, 'combinations(200, 200 )', 1);

  Test({LINENUM}20664, 'combinations(400, 0   )', 1);
  Test({LINENUM}20665, 'combinations(400, 1   )', 400);
  Test({LINENUM}20666, 'combinations(400, 2   )', 79800);
  Test({LINENUM}20667, 'combinations(400, 3   )', 10586800);
  Test({LINENUM}20668, 'combinations(400, 4   )', 1050739900);
  Test({LINENUM}20669, 'combinations(400, 5   )', 83218600080);
  Test({LINENUM}20670, 'combinations(400, 6   )', 5478557838600);
  Test({LINENUM}20671, 'combinations(400, 7   )', 308364541201200);
  Test({LINENUM}20672, 'combinations(400, 8   )', 15148408086508950);
  Test({LINENUM}20673, 'combinations(400, 9   )', 659797329990167600);
  Eps; Test({LINENUM}20674, 'combinations(400, 10  )', 25798075602615553160.0);
  Eps; Test({LINENUM}20675, 'combinations(400, 11  )', 914659044092733248400.0);
  Eps; Test({LINENUM}20676, 'combinations(400, 12  )', 29650197346006102802300.0);
  Eps; Test({LINENUM}20677, 'combinations(400, 13  )', 884944351557720606714800.0);
  Eps; Test({LINENUM}20678, 'combinations(400, 14  )', 24462390289488419628473400.0);
  Eps; Test({LINENUM}20679, 'combinations(400, 15  )', 629498843449501998439382160.0);
  Eps; Test({LINENUM}20680, 'combinations(400, 16  )', 15147315920503641837447633225.0);
  Eps; Test({LINENUM}20681, 'combinations(400, 17  )', 342151136086670497975287715200.0);
  Eps; Test({LINENUM}20682, 'combinations(400, 18  )', 7280215840066377818029733051200.0);
  Eps; Test({LINENUM}20683, 'combinations(400, 19  )', 146370655310808227709860948713600.0);
  Eps; Test({LINENUM}20684, 'combinations(400, 20  )', 2788360983670896737872851072994080.0);
  Eps; Test({LINENUM}20685, 'combinations(400, 21  )', 50456055894997179066270638463702400.0);
  Eps; Test({LINENUM}20686, 'combinations(400, 22  )', 869220235645633221187116908079236800.0);
  Eps; Test({LINENUM}20687, 'combinations(400, 23  )', 14285445611915189461249138750171804800.0);
  Eps; Test({LINENUM}20688, 'combinations(400, 24  )', 224400541487167767787121887867282100400.0);
  Eps; Test({LINENUM}20689, 'combinations(400, 25  )', 3374984143967003227518313193523922790016.0);
  Eps; Test({LINENUM}20690, 'combinations(400, 26  )', 48677655922601008089206440291210424856000.0);
  Eps; Test({LINENUM}20691, 'combinations(400, 27  )', 674275678335288037976415135885655514672000.0);
  Eps; Test({LINENUM}20692, 'combinations(400, 28  )', 8982315286395087077328673060191053820452000.0);
  Eps; Test({LINENUM}20693, 'combinations(400, 29  )', 115221423673757668716078150979002483489936000.0);
  Eps; Test({LINENUM}20694, 'combinations(400, 30  )', 1424904939432136503122166467106997379158875200.0);
  Eps; Test({LINENUM}20695, 'combinations(400, 31  )', 17006929922254532456619406220309323557702704000.0);
  Eps; Test({LINENUM}20696, 'combinations(400, 32  )', 196111160665997577390392527977941887274759305500.0);
  Eps; Test({LINENUM}20697, 'combinations(400, 33  )', 2186936579548094196353468190784321652033679528000.0);
  Eps; Test({LINENUM}20698, 'combinations(400, 34  )', 23606050726298546178285965471113119008716481964000.0);
  Eps; Test({LINENUM}20699, 'combinations(400, 35  )', 246851844737864797178647524640782901634006639966400.0);
  Eps; Test({LINENUM}20700, 'combinations(400, 36  )', 2502803425814462526950176291496826641567011766326000.0);
  Eps; Test({LINENUM}20701, 'combinations(400, 37  )', 24622174243147685400266599192022835068388980620072000.0);
  Eps; Test({LINENUM}20702, 'combinations(400, 38  )', 235206559217437100007809881755376029732242104344372000.0);
  Eps; Test({LINENUM}20703, 'combinations(400, 39  )', 2183199344531082825713517363985798019565939532632376000.0);
  Eps; Test({LINENUM}20704, 'combinations(400, 40  )', 19703374084393022502064494209971827126582604282007193400.0);
  Eps; Test({LINENUM}20705, 'combinations(400, 41  )', 173005235862963124408371168672923360135847257110307064000.0);
  Eps; Test({LINENUM}20706, 'combinations(400, 42  )', 1478782849400089563395363084609035387827837269109529428000.0);
  Eps; Test({LINENUM}20707, 'combinations(400, 43  )', 12311726978726327062686976378838015554473621914911896168000.0);
  Eps; Test({LINENUM}20708, 'combinations(400, 44  )', 99892875713756790031346603801026626203342795991444248454000.0);
  Eps; Test({LINENUM}20709, 'combinations(400, 45  )', 790263638979942605581319798959232865075334119398981165547200.0);
  Eps; Test({LINENUM}20710, 'combinations(400, 46  )', 6098773735606078803942794100663644936994426356231267690636000.0);
  Eps; Test({LINENUM}20711, 'combinations(400, 47  )', 45935444732011742480760619396487878887149509151188697074152000.0);
  Eps; Test({LINENUM}20712, 'combinations(400, 48  )', 337816916466669689493927055145004609315912015216033543066159500.0);
  Eps; Test({LINENUM}20713, 'combinations(400, 49  )', 2426766420331994504119639253286563724065327129715179737944656000.0);
  Eps; Test({LINENUM}20714, 'combinations(400, 50  )', 17035900270730601418919867558071677342938596450600561760371485120.0);
  Eps; Test({LINENUM}20715, 'combinations(400, 51  )', 116913041073641382286704973437746805294676642308043070904510192000.0);
  Eps; Test({LINENUM}20716, 'combinations(400, 52  )', 784666371821170046501154533264877597073887464721289072032193404000.0);
  Eps; Test({LINENUM}20717, 'combinations(400, 53  )', 5152149007429569361932109010871271769466279957037898057871760464000.0);
  Eps; Test({LINENUM}20718, 'combinations(400, 54  )', 33107327881075195714637811606895024148237021205410196779287053352000.0);
  Eps; Test({LINENUM}20719, 'combinations(400, 55  )', 208275189942763958495721505745194151914363806128580510647878553814400.0);
  Eps; Test({LINENUM}20720, 'combinations(400, 56  )', 1283123938040242244303998562180213971615277019899290645955680376178000.0);
  Eps; Test({LINENUM}20721, 'combinations(400, 57  )', 7743765520804268983167991322631466776064127979743087407171123673776000.0);
  Eps; Test({LINENUM}20722, 'combinations(400, 58  )', 45795027131652832090114155580389536279137860293997913459649921036296000.0);
  Eps; Test({LINENUM}20723, 'combinations(400, 59  )', 265455919983479128386763410313444430635002512212665871240682593125648000.0);
  Eps; Test({LINENUM}20724, 'combinations(400, 60  )', 1508674478572773046331438715281409180775597611075317701551212737597432800.0);
  Eps; Test({LINENUM}20725, 'combinations(400, 61  )', 8409005290405620258240805954027526581372183405993574074219874275133232000.0);
  Eps; Test({LINENUM}20726, 'combinations(400, 62  )', 45978270862056536573284406748634379211051131848900348567105441601131704000.0);
  Eps; Test({LINENUM}20727, 'combinations(400, 63  )', 246677072244049354948732213984736828148179088332195520883835543828293904000.0);
  Eps; Test({LINENUM}20728, 'combinations(400, 64  )', 1298908958535072384651918064263379860717755511999217039653946535470860088250.0);
  Eps; Test({LINENUM}20729, 'combinations(400, 65  )', 6714360154888989557585299532192240510787166954334414235749631321818599840800.0);
  Eps; Test({LINENUM}20730, 'combinations(400, 66  )', 34080464422542598511985990049763645016874256510636799529941310497109559798000.0);
  Eps; Test({LINENUM}20731, 'combinations(400, 67  )', 169893658464615341835870457860015782621432860814219269298513398597531238396000.0);
  Eps; Test({LINENUM}20732, 'combinations(400, 68  )', 831979239245836894578600918638018464896134450751985539358896496073204446851000.0);
  Eps; Test({LINENUM}20733, 'combinations(400, 69  )', 4003146484487215202899934854895972903558212139850133319813820821685563425428000.0);
  Eps; Test({LINENUM}20734, 'combinations(400, 70  )', 18929164090932403316569691956722386158253831689862773269405352742541735625952400.0);
  Eps; Test({LINENUM}20735, 'combinations(400, 71  )', 87980621831094268936168990784766020172165696586686129280334738099137644458652000.0);
  Eps; Test({LINENUM}20736, 'combinations(400, 72  )', 402022563644861312222216638447055842175590474680829674072640678258559514262451500.0);
  Eps; Test({LINENUM}20737, 'combinations(400, 73  )', 1806347957198828909710781608364853647035529804045371686244193732449418091480604000.0);
  Eps; Test({LINENUM}20738, 'combinations(400, 74  )', 7982105162216446668586832242369015440278624944903196505430423655553509674515642000.0);
  Eps; Test({LINENUM}20739, 'combinations(400, 75  )', 34695550438434154852790764146830653780411089760512560810270908156139255385227990560.0);
  Eps; Test({LINENUM}20740, 'combinations(400, 76  )', 148369130164356583252065767733157401034652686475876082412342699351911289476303907000.0);
  Eps; Test({LINENUM}20741, 'combinations(400, 77  )', 624306469782487441216484529162896077080876239197192866254532916753496854419772284000.0);
  Eps; Test({LINENUM}20742, 'combinations(400, 78  )', 2585269099227480045037493627174556832014397759752478151284796565530506204840851894000.0);
  Eps; Test({LINENUM}20743, 'combinations(400, 79  )', 10537425948749981955722442379116548100109317451143012211565879672162316429857649492000.0);
  Eps; Test({LINENUM}20744, 'combinations(400, 80  )', 42281421619359302597336300046205149251688636272711336498908092184551294674803818586650.0);
  Eps; Test({LINENUM}20745, 'combinations(400, 81  )', 167037715039444158409229827343032688401732884040341082464822092580943386369595332688000.0);
  Eps; Test({LINENUM}20746, 'combinations(400, 82  )', 649817452409544957713955060029602775611619390352058601296076189430743173803669647896000.0);
  Eps; Test({LINENUM}20747, 'combinations(400, 83  )', 2489662046581148151241418181800164851138493567854875123037978653481642521320083711216000.0);
  Eps; Test({LINENUM}20748, 'combinations(400, 84  )', 9395510342455047189803923376555384021558362631071373976226657537543817610219839719708000.0);
  Eps; Test({LINENUM}20749, 'combinations(400, 85  )', 34929191390774057787976938670488251186028736369630049135148515080751133703876110016796800.0);
  Eps; Test({LINENUM}20750, 'combinations(400, 86  )', 127938317303416607014101577688416268879058743679458900901997468028332640892104356456872000.0);
  Eps; Test({LINENUM}20751, 'combinations(400, 87  )', 461754386589342696579630981542100096873844201325863159577324194952832749886445608361584000.0);
  Eps; Test({LINENUM}20752, 'combinations(400, 88  )', 1642376397755275727607096559348606026380832216079490556223891738866325576300653129740634000.0);
  Eps; Test({LINENUM}20753, 'combinations(400, 89  )', 5757544225838719404645102545132191912705838779964056781369148567711163818042739061562672000.0);
  Eps; Test({LINENUM}20754, 'combinations(400, 90  )', 19895513935953797053829187683734574276127954006320240655620057828424132749014353868288788800.0);
  Eps; Test({LINENUM}20755, 'combinations(400, 91  )', 67775926595007440513044485516018879402194129032519501134529867327598693980158787902961808000.0);
  Eps; Test({LINENUM}20756, 'combinations(400, 92  )', 227638709976709773027508108961411236253021585554875280984453576132913004781185494152339116000.0);
  Eps; Test({LINENUM}20757, 'combinations(400, 93  )', 753900243793834517123360188818437212536888691945178349927007542461690381425861636547531696000.0);
  Eps; Test({LINENUM}20758, 'combinations(400, 94  )', 2462206115369225497413527425183619406902391791778401632208418250380201564869569387447789688000.0);
  Eps; Test({LINENUM}20759, 'combinations(400, 95  )', 7930895487399821075879362022170395142232967245096746310060799838066754514211455079568669942400.0);
  Eps; Test({LINENUM}20760, 'combinations(400, 96  )', 25197115871426514876491723091270526233135989684942787755922332818857917987859310409046295129500.0);
  Eps; Test({LINENUM}20761, 'combinations(400, 97  )', 78968280669212995076840039378827216235807637775490798740210197700338217199064230560310038344000.0);
  Eps; Test({LINENUM}20762, 'combinations(400, 98  )', 244157031048689158247780938079435168565813410673201143043711121461249793993025121018101445084000.0);
  Eps; Test({LINENUM}20763, 'combinations(400, 99  )', 744802256330344704957877205050398190978541919427340860597987461427246846322157439873400367832000.0);
  Eps; Test({LINENUM}20764, 'combinations(400, 100 )', 2241854791554337561923210387201698554845411177476295990399942258896013007429693894018935107174320.0);
  Eps; Test({LINENUM}20765, 'combinations(400, 101 )', 6658974628379220480960030853074352143105181715276126704158244333354494081474338299066143882696000.0);
  Eps; Test({LINENUM}20766, 'combinations(400, 102 )', 19519935430248891409873031618325796968514209145760410632777598585029350297655168151184088440452000.0);
  Eps; Test({LINENUM}20767, 'combinations(400, 103 )', 56475152992370579030506440992826092200167323547928178335608974546978120278652816592746197623832000.0);
  Eps; Test({LINENUM}20768, 'combinations(400, 104 )', 161280004218596749731350124758359128687016298978217970823806398465889439641921985846592506675751000.0);
  Eps; Test({LINENUM}20769, 'combinations(400, 105 )', 454656011892425123052187018366421924679588804738595422512825656627650229847703883910394114057355200.0);
  Eps; Test({LINENUM}20770, 'combinations(400, 106 )', 1265316259511937842456558211491457243212063182998921223030977063256196394387477790127983619310564000.0);
  Eps; Test({LINENUM}20771, 'combinations(400, 107 )', 3476663367257100240020823496995218967330341829922269528701936977545062990186153928015207327825288000.0);
  Eps; Test({LINENUM}20772, 'combinations(400, 108 )', 9432058950058614540056493376107399605812871816363194184348773466858365334486510193596812472711198000.0);
  Eps; Test({LINENUM}20773, 'combinations(400, 109 )', 25267534068046930694463266658929914540342739177780300016787539929565529152936339234222653596620824000.0);
  Eps; Test({LINENUM}20774, 'combinations(400, 110 )', 66844112852742334837171005434078228465815791824855157317137946540941536213677042883261747241969634400.0);
  Eps; Test({LINENUM}20775, 'combinations(400, 111 )', 174637772317975469394410734917862038334113329992864825423153193665522932450147229154467627929470216000.0);
  Eps; Test({LINENUM}20776, 'combinations(400, 112 )', 450627823213347416562363414207697581058560288999445844172243508654786852482969189514653075639436539500.0);
  Eps; Test({LINENUM}20777, 'combinations(400, 113 )', 1148502770667646513008501445060326578273144807361419496651381685775031978009691385665664475965997552000.0);
  Eps; Test({LINENUM}20778, 'combinations(400, 114 )', 2891406098084338151170525567827313403196425962392345574903039858047668225340187962158295654405625416000.0);
  Eps; Test({LINENUM}20779, 'combinations(400, 115 )', 7190801252627136619432785325205318550558068045601833342802342603492461847367771801541500497043555382400.0);
  Eps; Test({LINENUM}20780, 'combinations(400, 116 )', 17667054801713223590847791531754446438871115456866573299126445189615100228446680719304548634977700724000.0);
  Eps; Test({LINENUM}20781, 'combinations(400, 117 )', 42884133022962012818810023889044981099482023844018006982494960973082807392126985677628135148151000048000.0);
  Eps; Test({LINENUM}20782, 'combinations(400, 118 )', 102849234283883471421383362377963810602995023286924542169881982672732495694677431752277646160396042488000.0);
  Eps; Test({LINENUM}20783, 'combinations(400, 119 )', 243726756874412932275883262105762979748273920730358999091653101795887090637807023144052909388501546064000.0);
  Eps; Test({LINENUM}20784, 'combinations(400, 120 )', 570726822347583616412693305430994977577208097710257322872954346705368937243531445862323896151407787033200.0);
  Eps; Test({LINENUM}20785, 'combinations(400, 121 )', 1320690167415895971864083681989079286955522870734479755408489397334738036596601692904551164647885788176000.0);
  Eps; Test({LINENUM}20786, 'combinations(400, 122 )', 3020266858270778493033437272745517385742548204384588948844004441445835345987310428855489958498033892632000.0);
  Eps; Test({LINENUM}20787, 'combinations(400, 123 )', 6826294199994117244417037087993933603548198380641591282753115729446684765727417066844115515954905871152000.0);
  Eps; Test({LINENUM}20788, 'combinations(400, 124 )', 15249060430632019973415478011083222646635894769659038591311395621425255484729794576740483854189588115396000.0);
  Eps; Test({LINENUM}20789, 'combinations(400, 125 )', 33669925430835500101301375448471755603772055651407157209615561532106964110283386425442988350050610558794368.0);
  Eps; Test({LINENUM}20790, 'combinations(400, 126 )', 73485948360950496252840303558172482468550121461404509782891106518487421669269295769816046002094586537051200.0);
  Eps; Test({LINENUM}20791, 'combinations(400, 127 )', 158544487014964062781718450196372127530572702995471147090646954220988610530549504259288162240739501662614400.0);
  Eps; Test({LINENUM}20792, 'combinations(400, 128 )', 338145663711603040151633882059449928248799593107528305904270457049452270897187614553013033529077218389794775.0);
  Eps; Test({LINENUM}20793, 'combinations(400, 129 )', 712989306430666875358483844342406050261034800970912396945438483081015640961511869445112752867511654279257200.0);
  Eps; Test({LINENUM}20794, 'combinations(400, 130 )', 1486308477251620947862685552436861843236464854331671227478567914730424913081305512458658123285351217766759240.0);
  Eps; Test({LINENUM}20795, 'combinations(400, 131 )', 3063383884411737831472710680595058760869049699767566652055063641047440660549255636365173231198815487000190800.0);
  Eps; Test({LINENUM}20796, 'combinations(400, 132 )', 6242805037172405126258781614242960656619502797253601737900091813952738921876892168047209084791525500023116100.0);
  Eps; Test({LINENUM}20797, 'combinations(400, 133 )', 12579486841821087021333484756519650044917494358375678689903944407062661887691782714561293494166382210572895600.0);
  Eps; Test({LINENUM}20798, 'combinations(400, 134 )', 25065096916165897273851047985005571358156499952882882165704128034968139731445567050655711663749433210619127800.0);
  Eps; Test({LINENUM}20799, 'combinations(400, 135 )', 49387524294075027221069472326010977639034288796050715970942948572603890137514969151662365204128512844627318480.0);
  Eps; Test({LINENUM}20800, 'combinations(400, 136 )', 96233043661249133923407427694065507899588871551128233325734421851029638870893138420518579258044528704604701450.0);
  Eps; Test({LINENUM}20801, 'combinations(400, 137 )', 185441777566202710626128181833819664857601913062028128452510126778626457386246631700853320614042011518362344400.0);
  Eps; Test({LINENUM}20802, 'combinations(400, 138 )', 353414402173270383294722549436917187373545674893575346253696835817237378931759885053075531315167021951661569400.0);
  Eps; Test({LINENUM}20803, 'combinations(400, 139 )', 666148009851775830382858330593325921524237171382134825312723532259828728633964675423782656148012660081549145200.0);
  Eps; Test({LINENUM}20804, 'combinations(400, 140 )', 1241890218366524940928043030606129039413042155219551352904434585141537844096177002040051951818795030580602334980.0);
  Eps; Test({LINENUM}20805, 'combinations(400, 141 )', 2290010331739691380434689276294989718066602555723995402518815547069502407553234188158961045906997928730188702800.0);
  Eps; Test({LINENUM}20806, 'combinations(400, 142 )', 4176849830426620193891440299721143218163732830510667670791360751345078334903434188261766978097975095359992070600.0);
  Eps; Test({LINENUM}20807, 'combinations(400, 143 )', 7535854938811664405762179002294090561442259232669596217231965551377833639196405738262488673771171850369775903600.0);
  Eps; Test({LINENUM}20808, 'combinations(400, 144 )', 13449407772740262168617222247149869960351809880528376582143160741000716981065807463426802702494383094062725050175.0);
  Eps; Test({LINENUM}20809, 'combinations(400, 145 )', 23745161309113842173558682036347356619655609168381133827783787239284024463123080763015596495438359117793500778240.0);
  Eps; Test({LINENUM}20810, 'combinations(400, 146 )', 41472713245370066809982629584031342041179317383131432370444285931626207110249216401157377440662887500255771907200.0);
  Eps; Test({LINENUM}20811, 'combinations(400, 147 )', 71660334451183652855344135471727625023534330716431182463216657324034398680294564393836556938288254592278680710400.0);
  Eps; Test({LINENUM}20812, 'combinations(400, 148 )', 122500436595604487651365312664507358992933686967953305156714961506626370716990032375950330441803570350314231214400.0);
  Eps; Test({LINENUM}20813, 'combinations(400, 149 )', 207181946456995509316403079137287613867243551113585455701289733554831177320009987642546867592848991464960981651200.0);
  Eps; Test({LINENUM}20814, 'combinations(400, 150 )', 346684457071372485589447819089727940537854208863399662540158154148417503382150045988528425105367312384701375963008.0);
  Eps; Test({LINENUM}20815, 'combinations(400, 151 )', 573980889191014048989152018360476722744791736528807388311520122762280634738659016537298717061866411232949297952000.0);
  Eps; Test({LINENUM}20816, 'combinations(400, 152 )', 940271325056332224988808240603675683970086463129427892694529674788209724012671678406495924660557476296081415724000.0);
  Eps; Test({LINENUM}20817, 'combinations(400, 153 )', 1524099925581505828740029043592886075977656489255543250903551368284156938268905727090267904024955909290380333984000.0);
  Eps; Test({LINENUM}20818, 'combinations(400, 154 )', 2444497932588519088953163466022356238743384109390384305020631090689524439950777367475949170741325386978726899312000.0);
  Eps; Test({LINENUM}20819, 'combinations(400, 155 )', 3879654783334036747628891694461287966005628973613126058290808053610471046631556338058603200015264807721076240198400.0);
  Eps; Test({LINENUM}20820, 'combinations(400, 156 )', 6093047576389993610058195289378304818406276272661640283854153673939521836055969889899729384639358191613228710568000.0);
  Eps; Test({LINENUM}20821, 'combinations(400, 157 )', 9469449736555149304803819430626155259179180958786243498473971314912377885335392695130789616891741393335208951456000.0);
  Eps; Test({LINENUM}20822, 'combinations(400, 158 )', 14563773961917096715616000769887061569497094765728209937526424237491821684408230537447986562687931383420606172176000.0);
  Eps; Test({LINENUM}20823, 'combinations(400, 159 )', 22166247162163128334459573498821816979989288888718407577870406701088181431615042704795048730631945879168469771488000.0);
  Eps; Test({LINENUM}20824, 'combinations(400, 160 )', 33387909788008212053779732582600361826108866388632101414167300093514073281370158074097542150514368480497507593303800.0);
  Eps; Test({LINENUM}20825, 'combinations(400, 161 )', 49770797199515347160913887079652713281156074119700026952795975294679363897694645576294472770953095871549079642192000.0);
  Eps; Test({LINENUM}20826, 'combinations(400, 162 )', 73427287226445481305298882790351842433310504411162385442705173428570172663882841313175178964554258724075494040024000.0);
  Eps; Test({LINENUM}20827, 'combinations(400, 163 )', 107212848833705672089945608000636432509987116870286182425544977153372399349718504494084003641496402308772807248624000.0);
  Eps; Test({LINENUM}20828, 'combinations(400, 164 )', 154935641302367343203153104244822161615042357916206251432037558447251577109044424177426273555089313092555825109292000.0);
  Eps; Test({LINENUM}20829, 'combinations(400, 165 )', 221604917256719351490570500616836546309999978595301062654308265415462861804451418823470306418188350847534392277532800.0);
  Eps; Test({LINENUM}20830, 'combinations(400, 166 )', 313717804550174985543879925572027640860542138372865962191340014292974533277386044719973024146230496681750495091688000.0);
  Eps; Test({LINENUM}20831, 'combinations(400, 167 )', 439580636315814051600406602298529748271657846582339132651338702662012220280888230326189746408490636069039615876976000.0);
  Eps; Test({LINENUM}20832, 'combinations(400, 168 )', 609656477747527821564849632949746615162477846748125106593820938811005043603850938488108398292728084548132324400806000.0);
  Eps; Test({LINENUM}20833, 'combinations(400, 169 )', 836924868860511565698491803812669909572158937547722039821103300616290947432505430350539339668123761036489344739568000.0);
  Eps; Test({LINENUM}20834, 'combinations(400, 170 )', 1137233204157518656919715333416039700653933615138375242345146249660960052099463261241026985078450522349582580204942400.0);
  Eps; Test({LINENUM}20835, 'combinations(400, 171 )', 1529611912024732696441722378278883807897103692876177226546103142818835157794599708101966120280956842926339142965712000.0);
  Eps; Test({LINENUM}20836, 'combinations(400, 172 )', 2036518185195719694681130375731769720979283405050259214413125695962286343807926355554361869443832075756579440343884000.0);
  Eps; Test({LINENUM}20837, 'combinations(400, 173 )', 2683966163148116129406345235068459516666338822840804051365275483695961192995417393447367088053142851286127817331824000.0);
  Eps; Test({LINENUM}20838, 'combinations(400, 174 )', 3501496086405875640087588323911151208524476510257830572758146751718294200057239932830760511425651880700867899622552000.0);
  Eps; Test({LINENUM}20839, 'combinations(400, 175 )', 4521932088729873683770256921165258132151609664675826911104806662219054224073921284684296431898270428790835116083981440.0);
  Eps; Test({LINENUM}20840, 'combinations(400, 176 )', 5780879090705804425274476177626040225762000991773074176128303971586859093276319824170265324869947991351919892720999000.0);
  Eps; Test({LINENUM}20841, 'combinations(400, 177 )', 7315914781458193170968828608973067856331571876594172968659548529013878174541783280305872501530329661371921220166688000.0);
  Eps; Test({LINENUM}20842, 'combinations(400, 178 )', 9165443799242567849022745953938169280685059148766857146129659112191544005184368941057357122703727609471564225265008000.0);
  Eps; Test({LINENUM}20843, 'combinations(400, 179 )', 11367198454926536661916478222202645700067503525286269756652426384952641168440949189467783694079483403925627139714144000.0);
  Eps; Test({LINENUM}20844, 'combinations(400, 180 )', 13956393658548692234908564928371026109527323772712586756778812394858520545696943171513223313286476845930908877093476800.0);
  Eps; Test({LINENUM}20845, 'combinations(400, 181 )', 16963572402655869014805990520671965436994537182302591638073694623584942099742140871452536623884115503341436204202016000.0);
  Eps; Test({LINENUM}20846, 'combinations(400, 182 )', 20412210748250743484848966615533848520339580455627843784275489684423639120019389290374206157311106017757002905056272000.0);
  Eps; Test({LINENUM}20847, 'combinations(400, 183 )', 24316185481522743604902047662220650149912724258616775655585009569422695782318179591811895859529077114049325865039712000.0);
  Eps; Test({LINENUM}20848, 'combinations(400, 184 )', 28677240486361061751433393166858049361581854152825219115554060198721331438929592235995551095205487683416868003878356000.0);
  Eps; Test({LINENUM}20849, 'combinations(400, 185 )', 33482615919210753180051961751574803578928002686541877453836091907696257247615091475540751548996677511448883723447161600.0);
  Eps; Test({LINENUM}20850, 'combinations(400, 186 )', 38703023777582322224253611702089154674567314933368299207391181506208039291598089608823987005560675618072634411511504000.0);
  Eps; Test({LINENUM}20851, 'combinations(400, 187 )', 44291160900548753775349052963888123531323023506635379841613437659510804323005300407959001172138954985387934567184288000.0);
  Eps; Test({LINENUM}20852, 'combinations(400, 188 )', 50180942935196194436964618517596650596658531951666680352466288412105326174468771206889719413114879850466117355373688000.0);
  Eps; Test({LINENUM}20853, 'combinations(400, 189 )', 56287618530484620215007931882171904372971474993403895421814037795589043116335341247939791087726743535972576081159904000.0);
  Eps; Test({LINENUM}20854, 'combinations(400, 190 )', 62508881631222394028245650669148799066826216966359062810540852499312042618667142122712083786896541505737966069077577600.0);
  Eps; Test({LINENUM}20855, 'combinations(400, 191 )', 68727042631186925371369563562938470178185892999661796807400937302908528533613088197746270132189914744528653793226656000.0);
  Eps; Test({LINENUM}20856, 'combinations(400, 192 )', 74812249530823267721959577003406980558546102275673518399722895293270221164193413715255054466810896779200461681168599500.0);
  Eps; Test({LINENUM}20857, 'combinations(400, 193 )', 80626673069488288529365761744604414280712897789326900658768716170985523327213627216440680461640759223179772174523672000.0);
  Eps; Test({LINENUM}20858, 'combinations(400, 194 )', 86029491367959153224632539593469658536636957950467363074047032203061872828521756875274334307008438964939241443950516000.0);
  Eps; Test({LINENUM}20859, 'combinations(400, 195 )', 90882437034869669560381041826947434146395965834852701503865069917080747706028112391315450601249940650140942243352852800.0);
  Eps; Test({LINENUM}20860, 'combinations(400, 196 )', 95055610164021848264684252931246040816383535694616345960675200678579353468039607348059527414572642006524965101465994000.0);
  Eps; Test({LINENUM}20861, 'combinations(400, 197 )', 98433220677464248964444607096315697089046910059399667898364167200153239124264364969564180672958471925538542541619608000.0);
  Eps; Test({LINENUM}20862, 'combinations(400, 198 )', 100918908068309305756476036568444881358972337081101679713979423947631856273867000448593579174800857580223859272468588000.0);
  Eps; Test({LINENUM}20863, 'combinations(400, 199 )', 102440298642203415893508338627265658464886492916495172372984138881515753604628814525708055242762679553795073231350024000.0);
  Eps; Test({LINENUM}20864, 'combinations(400, 200 )', 102952500135414432972975880320401986757210925381077648234849059575923332372651958598336595518976492951564048597506774120.0);
  Eps; Test({LINENUM}20865, 'combinations(400, 201 )', 102440298642203415893508338627265658464886492916495172372984138881515753604628814525708055242762679553795073231350024000.0);
  Eps; Test({LINENUM}20866, 'combinations(400, 202 )', 100918908068309305756476036568444881358972337081101679713979423947631856273867000448593579174800857580223859272468588000.0);
  Eps; Test({LINENUM}20867, 'combinations(400, 203 )', 98433220677464248964444607096315697089046910059399667898364167200153239124264364969564180672958471925538542541619608000.0);
  Eps; Test({LINENUM}20868, 'combinations(400, 204 )', 95055610164021848264684252931246040816383535694616345960675200678579353468039607348059527414572642006524965101465994000.0);
  Eps; Test({LINENUM}20869, 'combinations(400, 205 )', 90882437034869669560381041826947434146395965834852701503865069917080747706028112391315450601249940650140942243352852800.0);
  Eps; Test({LINENUM}20870, 'combinations(400, 206 )', 86029491367959153224632539593469658536636957950467363074047032203061872828521756875274334307008438964939241443950516000.0);
  Eps; Test({LINENUM}20871, 'combinations(400, 207 )', 80626673069488288529365761744604414280712897789326900658768716170985523327213627216440680461640759223179772174523672000.0);
  Eps; Test({LINENUM}20872, 'combinations(400, 208 )', 74812249530823267721959577003406980558546102275673518399722895293270221164193413715255054466810896779200461681168599500.0);
  Eps; Test({LINENUM}20873, 'combinations(400, 209 )', 68727042631186925371369563562938470178185892999661796807400937302908528533613088197746270132189914744528653793226656000.0);
  Eps; Test({LINENUM}20874, 'combinations(400, 210 )', 62508881631222394028245650669148799066826216966359062810540852499312042618667142122712083786896541505737966069077577600.0);
  Eps; Test({LINENUM}20875, 'combinations(400, 211 )', 56287618530484620215007931882171904372971474993403895421814037795589043116335341247939791087726743535972576081159904000.0);
  Eps; Test({LINENUM}20876, 'combinations(400, 212 )', 50180942935196194436964618517596650596658531951666680352466288412105326174468771206889719413114879850466117355373688000.0);
  Eps; Test({LINENUM}20877, 'combinations(400, 213 )', 44291160900548753775349052963888123531323023506635379841613437659510804323005300407959001172138954985387934567184288000.0);
  Eps; Test({LINENUM}20878, 'combinations(400, 214 )', 38703023777582322224253611702089154674567314933368299207391181506208039291598089608823987005560675618072634411511504000.0);
  Eps; Test({LINENUM}20879, 'combinations(400, 215 )', 33482615919210753180051961751574803578928002686541877453836091907696257247615091475540751548996677511448883723447161600.0);
  Eps; Test({LINENUM}20880, 'combinations(400, 216 )', 28677240486361061751433393166858049361581854152825219115554060198721331438929592235995551095205487683416868003878356000.0);
  Eps; Test({LINENUM}20881, 'combinations(400, 217 )', 24316185481522743604902047662220650149912724258616775655585009569422695782318179591811895859529077114049325865039712000.0);
  Eps; Test({LINENUM}20882, 'combinations(400, 218 )', 20412210748250743484848966615533848520339580455627843784275489684423639120019389290374206157311106017757002905056272000.0);
  Eps; Test({LINENUM}20883, 'combinations(400, 219 )', 16963572402655869014805990520671965436994537182302591638073694623584942099742140871452536623884115503341436204202016000.0);
  Eps; Test({LINENUM}20884, 'combinations(400, 220 )', 13956393658548692234908564928371026109527323772712586756778812394858520545696943171513223313286476845930908877093476800.0);
  Eps; Test({LINENUM}20885, 'combinations(400, 221 )', 11367198454926536661916478222202645700067503525286269756652426384952641168440949189467783694079483403925627139714144000.0);
  Eps; Test({LINENUM}20886, 'combinations(400, 222 )', 9165443799242567849022745953938169280685059148766857146129659112191544005184368941057357122703727609471564225265008000.0);
  Eps; Test({LINENUM}20887, 'combinations(400, 223 )', 7315914781458193170968828608973067856331571876594172968659548529013878174541783280305872501530329661371921220166688000.0);
  Eps; Test({LINENUM}20888, 'combinations(400, 224 )', 5780879090705804425274476177626040225762000991773074176128303971586859093276319824170265324869947991351919892720999000.0);
  Eps; Test({LINENUM}20889, 'combinations(400, 225 )', 4521932088729873683770256921165258132151609664675826911104806662219054224073921284684296431898270428790835116083981440.0);
  Eps; Test({LINENUM}20890, 'combinations(400, 226 )', 3501496086405875640087588323911151208524476510257830572758146751718294200057239932830760511425651880700867899622552000.0);
  Eps; Test({LINENUM}20891, 'combinations(400, 227 )', 2683966163148116129406345235068459516666338822840804051365275483695961192995417393447367088053142851286127817331824000.0);
  Eps; Test({LINENUM}20892, 'combinations(400, 228 )', 2036518185195719694681130375731769720979283405050259214413125695962286343807926355554361869443832075756579440343884000.0);
  Eps; Test({LINENUM}20893, 'combinations(400, 229 )', 1529611912024732696441722378278883807897103692876177226546103142818835157794599708101966120280956842926339142965712000.0);
  Eps; Test({LINENUM}20894, 'combinations(400, 230 )', 1137233204157518656919715333416039700653933615138375242345146249660960052099463261241026985078450522349582580204942400.0);
  Eps; Test({LINENUM}20895, 'combinations(400, 231 )', 836924868860511565698491803812669909572158937547722039821103300616290947432505430350539339668123761036489344739568000.0);
  Eps; Test({LINENUM}20896, 'combinations(400, 232 )', 609656477747527821564849632949746615162477846748125106593820938811005043603850938488108398292728084548132324400806000.0);
  Eps; Test({LINENUM}20897, 'combinations(400, 233 )', 439580636315814051600406602298529748271657846582339132651338702662012220280888230326189746408490636069039615876976000.0);
  Eps; Test({LINENUM}20898, 'combinations(400, 234 )', 313717804550174985543879925572027640860542138372865962191340014292974533277386044719973024146230496681750495091688000.0);
  Eps; Test({LINENUM}20899, 'combinations(400, 235 )', 221604917256719351490570500616836546309999978595301062654308265415462861804451418823470306418188350847534392277532800.0);
  Eps; Test({LINENUM}20900, 'combinations(400, 236 )', 154935641302367343203153104244822161615042357916206251432037558447251577109044424177426273555089313092555825109292000.0);
  Eps; Test({LINENUM}20901, 'combinations(400, 237 )', 107212848833705672089945608000636432509987116870286182425544977153372399349718504494084003641496402308772807248624000.0);
  Eps; Test({LINENUM}20902, 'combinations(400, 238 )', 73427287226445481305298882790351842433310504411162385442705173428570172663882841313175178964554258724075494040024000.0);
  Eps; Test({LINENUM}20903, 'combinations(400, 239 )', 49770797199515347160913887079652713281156074119700026952795975294679363897694645576294472770953095871549079642192000.0);
  Eps; Test({LINENUM}20904, 'combinations(400, 240 )', 33387909788008212053779732582600361826108866388632101414167300093514073281370158074097542150514368480497507593303800.0);
  Eps; Test({LINENUM}20905, 'combinations(400, 241 )', 22166247162163128334459573498821816979989288888718407577870406701088181431615042704795048730631945879168469771488000.0);
  Eps; Test({LINENUM}20906, 'combinations(400, 242 )', 14563773961917096715616000769887061569497094765728209937526424237491821684408230537447986562687931383420606172176000.0);
  Eps; Test({LINENUM}20907, 'combinations(400, 243 )', 9469449736555149304803819430626155259179180958786243498473971314912377885335392695130789616891741393335208951456000.0);
  Eps; Test({LINENUM}20908, 'combinations(400, 244 )', 6093047576389993610058195289378304818406276272661640283854153673939521836055969889899729384639358191613228710568000.0);
  Eps; Test({LINENUM}20909, 'combinations(400, 245 )', 3879654783334036747628891694461287966005628973613126058290808053610471046631556338058603200015264807721076240198400.0);
  Eps; Test({LINENUM}20910, 'combinations(400, 246 )', 2444497932588519088953163466022356238743384109390384305020631090689524439950777367475949170741325386978726899312000.0);
  Eps; Test({LINENUM}20911, 'combinations(400, 247 )', 1524099925581505828740029043592886075977656489255543250903551368284156938268905727090267904024955909290380333984000.0);
  Eps; Test({LINENUM}20912, 'combinations(400, 248 )', 940271325056332224988808240603675683970086463129427892694529674788209724012671678406495924660557476296081415724000.0);
  Eps; Test({LINENUM}20913, 'combinations(400, 249 )', 573980889191014048989152018360476722744791736528807388311520122762280634738659016537298717061866411232949297952000.0);
  Eps; Test({LINENUM}20914, 'combinations(400, 250 )', 346684457071372485589447819089727940537854208863399662540158154148417503382150045988528425105367312384701375963008.0);
  Eps; Test({LINENUM}20915, 'combinations(400, 251 )', 207181946456995509316403079137287613867243551113585455701289733554831177320009987642546867592848991464960981651200.0);
  Eps; Test({LINENUM}20916, 'combinations(400, 252 )', 122500436595604487651365312664507358992933686967953305156714961506626370716990032375950330441803570350314231214400.0);
  Eps; Test({LINENUM}20917, 'combinations(400, 253 )', 71660334451183652855344135471727625023534330716431182463216657324034398680294564393836556938288254592278680710400.0);
  Eps; Test({LINENUM}20918, 'combinations(400, 254 )', 41472713245370066809982629584031342041179317383131432370444285931626207110249216401157377440662887500255771907200.0);
  Eps; Test({LINENUM}20919, 'combinations(400, 255 )', 23745161309113842173558682036347356619655609168381133827783787239284024463123080763015596495438359117793500778240.0);
  Eps; Test({LINENUM}20920, 'combinations(400, 256 )', 13449407772740262168617222247149869960351809880528376582143160741000716981065807463426802702494383094062725050175.0);
  Eps; Test({LINENUM}20921, 'combinations(400, 257 )', 7535854938811664405762179002294090561442259232669596217231965551377833639196405738262488673771171850369775903600.0);
  Eps; Test({LINENUM}20922, 'combinations(400, 258 )', 4176849830426620193891440299721143218163732830510667670791360751345078334903434188261766978097975095359992070600.0);
  Eps; Test({LINENUM}20923, 'combinations(400, 259 )', 2290010331739691380434689276294989718066602555723995402518815547069502407553234188158961045906997928730188702800.0);
  Eps; Test({LINENUM}20924, 'combinations(400, 260 )', 1241890218366524940928043030606129039413042155219551352904434585141537844096177002040051951818795030580602334980.0);
  Eps; Test({LINENUM}20925, 'combinations(400, 261 )', 666148009851775830382858330593325921524237171382134825312723532259828728633964675423782656148012660081549145200.0);
  Eps; Test({LINENUM}20926, 'combinations(400, 262 )', 353414402173270383294722549436917187373545674893575346253696835817237378931759885053075531315167021951661569400.0);
  Eps; Test({LINENUM}20927, 'combinations(400, 263 )', 185441777566202710626128181833819664857601913062028128452510126778626457386246631700853320614042011518362344400.0);
  Eps; Test({LINENUM}20928, 'combinations(400, 264 )', 96233043661249133923407427694065507899588871551128233325734421851029638870893138420518579258044528704604701450.0);
  Eps; Test({LINENUM}20929, 'combinations(400, 265 )', 49387524294075027221069472326010977639034288796050715970942948572603890137514969151662365204128512844627318480.0);
  Eps; Test({LINENUM}20930, 'combinations(400, 266 )', 25065096916165897273851047985005571358156499952882882165704128034968139731445567050655711663749433210619127800.0);
  Eps; Test({LINENUM}20931, 'combinations(400, 267 )', 12579486841821087021333484756519650044917494358375678689903944407062661887691782714561293494166382210572895600.0);
  Eps; Test({LINENUM}20932, 'combinations(400, 268 )', 6242805037172405126258781614242960656619502797253601737900091813952738921876892168047209084791525500023116100.0);
  Eps; Test({LINENUM}20933, 'combinations(400, 269 )', 3063383884411737831472710680595058760869049699767566652055063641047440660549255636365173231198815487000190800.0);
  Eps; Test({LINENUM}20934, 'combinations(400, 270 )', 1486308477251620947862685552436861843236464854331671227478567914730424913081305512458658123285351217766759240.0);
  Eps; Test({LINENUM}20935, 'combinations(400, 271 )', 712989306430666875358483844342406050261034800970912396945438483081015640961511869445112752867511654279257200.0);
  Eps; Test({LINENUM}20936, 'combinations(400, 272 )', 338145663711603040151633882059449928248799593107528305904270457049452270897187614553013033529077218389794775.0);
  Eps; Test({LINENUM}20937, 'combinations(400, 273 )', 158544487014964062781718450196372127530572702995471147090646954220988610530549504259288162240739501662614400.0);
  Eps; Test({LINENUM}20938, 'combinations(400, 274 )', 73485948360950496252840303558172482468550121461404509782891106518487421669269295769816046002094586537051200.0);
  Eps; Test({LINENUM}20939, 'combinations(400, 275 )', 33669925430835500101301375448471755603772055651407157209615561532106964110283386425442988350050610558794368.0);
  Eps; Test({LINENUM}20940, 'combinations(400, 276 )', 15249060430632019973415478011083222646635894769659038591311395621425255484729794576740483854189588115396000.0);
  Eps; Test({LINENUM}20941, 'combinations(400, 277 )', 6826294199994117244417037087993933603548198380641591282753115729446684765727417066844115515954905871152000.0);
  Eps; Test({LINENUM}20942, 'combinations(400, 278 )', 3020266858270778493033437272745517385742548204384588948844004441445835345987310428855489958498033892632000.0);
  Eps; Test({LINENUM}20943, 'combinations(400, 279 )', 1320690167415895971864083681989079286955522870734479755408489397334738036596601692904551164647885788176000.0);
  Eps; Test({LINENUM}20944, 'combinations(400, 280 )', 570726822347583616412693305430994977577208097710257322872954346705368937243531445862323896151407787033200.0);
  Eps; Test({LINENUM}20945, 'combinations(400, 281 )', 243726756874412932275883262105762979748273920730358999091653101795887090637807023144052909388501546064000.0);
  Eps; Test({LINENUM}20946, 'combinations(400, 282 )', 102849234283883471421383362377963810602995023286924542169881982672732495694677431752277646160396042488000.0);
  Eps; Test({LINENUM}20947, 'combinations(400, 283 )', 42884133022962012818810023889044981099482023844018006982494960973082807392126985677628135148151000048000.0);
  Eps; Test({LINENUM}20948, 'combinations(400, 284 )', 17667054801713223590847791531754446438871115456866573299126445189615100228446680719304548634977700724000.0);
  Eps; Test({LINENUM}20949, 'combinations(400, 285 )', 7190801252627136619432785325205318550558068045601833342802342603492461847367771801541500497043555382400.0);
  Eps; Test({LINENUM}20950, 'combinations(400, 286 )', 2891406098084338151170525567827313403196425962392345574903039858047668225340187962158295654405625416000.0);
  Eps; Test({LINENUM}20951, 'combinations(400, 287 )', 1148502770667646513008501445060326578273144807361419496651381685775031978009691385665664475965997552000.0);
  Eps; Test({LINENUM}20952, 'combinations(400, 288 )', 450627823213347416562363414207697581058560288999445844172243508654786852482969189514653075639436539500.0);
  Eps; Test({LINENUM}20953, 'combinations(400, 289 )', 174637772317975469394410734917862038334113329992864825423153193665522932450147229154467627929470216000.0);
  Eps; Test({LINENUM}20954, 'combinations(400, 290 )', 66844112852742334837171005434078228465815791824855157317137946540941536213677042883261747241969634400.0);
  Eps; Test({LINENUM}20955, 'combinations(400, 291 )', 25267534068046930694463266658929914540342739177780300016787539929565529152936339234222653596620824000.0);
  Eps; Test({LINENUM}20956, 'combinations(400, 292 )', 9432058950058614540056493376107399605812871816363194184348773466858365334486510193596812472711198000.0);
  Eps; Test({LINENUM}20957, 'combinations(400, 293 )', 3476663367257100240020823496995218967330341829922269528701936977545062990186153928015207327825288000.0);
  Eps; Test({LINENUM}20958, 'combinations(400, 294 )', 1265316259511937842456558211491457243212063182998921223030977063256196394387477790127983619310564000.0);
  Eps; Test({LINENUM}20959, 'combinations(400, 295 )', 454656011892425123052187018366421924679588804738595422512825656627650229847703883910394114057355200.0);
  Eps; Test({LINENUM}20960, 'combinations(400, 296 )', 161280004218596749731350124758359128687016298978217970823806398465889439641921985846592506675751000.0);
  Eps; Test({LINENUM}20961, 'combinations(400, 297 )', 56475152992370579030506440992826092200167323547928178335608974546978120278652816592746197623832000.0);
  Eps; Test({LINENUM}20962, 'combinations(400, 298 )', 19519935430248891409873031618325796968514209145760410632777598585029350297655168151184088440452000.0);
  Eps; Test({LINENUM}20963, 'combinations(400, 299 )', 6658974628379220480960030853074352143105181715276126704158244333354494081474338299066143882696000.0);
  Eps; Test({LINENUM}20964, 'combinations(400, 300 )', 2241854791554337561923210387201698554845411177476295990399942258896013007429693894018935107174320.0);
  Eps; Test({LINENUM}20965, 'combinations(400, 301 )', 744802256330344704957877205050398190978541919427340860597987461427246846322157439873400367832000.0);
  Eps; Test({LINENUM}20966, 'combinations(400, 302 )', 244157031048689158247780938079435168565813410673201143043711121461249793993025121018101445084000.0);
  Eps; Test({LINENUM}20967, 'combinations(400, 303 )', 78968280669212995076840039378827216235807637775490798740210197700338217199064230560310038344000.0);
  Eps; Test({LINENUM}20968, 'combinations(400, 304 )', 25197115871426514876491723091270526233135989684942787755922332818857917987859310409046295129500.0);
  Eps; Test({LINENUM}20969, 'combinations(400, 305 )', 7930895487399821075879362022170395142232967245096746310060799838066754514211455079568669942400.0);
  Eps; Test({LINENUM}20970, 'combinations(400, 306 )', 2462206115369225497413527425183619406902391791778401632208418250380201564869569387447789688000.0);
  Eps; Test({LINENUM}20971, 'combinations(400, 307 )', 753900243793834517123360188818437212536888691945178349927007542461690381425861636547531696000.0);
  Eps; Test({LINENUM}20972, 'combinations(400, 308 )', 227638709976709773027508108961411236253021585554875280984453576132913004781185494152339116000.0);
  Eps; Test({LINENUM}20973, 'combinations(400, 309 )', 67775926595007440513044485516018879402194129032519501134529867327598693980158787902961808000.0);
  Eps; Test({LINENUM}20974, 'combinations(400, 310 )', 19895513935953797053829187683734574276127954006320240655620057828424132749014353868288788800.0);
  Eps; Test({LINENUM}20975, 'combinations(400, 311 )', 5757544225838719404645102545132191912705838779964056781369148567711163818042739061562672000.0);
  Eps; Test({LINENUM}20976, 'combinations(400, 312 )', 1642376397755275727607096559348606026380832216079490556223891738866325576300653129740634000.0);
  Eps; Test({LINENUM}20977, 'combinations(400, 313 )', 461754386589342696579630981542100096873844201325863159577324194952832749886445608361584000.0);
  Eps; Test({LINENUM}20978, 'combinations(400, 314 )', 127938317303416607014101577688416268879058743679458900901997468028332640892104356456872000.0);
  Eps; Test({LINENUM}20979, 'combinations(400, 315 )', 34929191390774057787976938670488251186028736369630049135148515080751133703876110016796800.0);
  Eps; Test({LINENUM}20980, 'combinations(400, 316 )', 9395510342455047189803923376555384021558362631071373976226657537543817610219839719708000.0);
  Eps; Test({LINENUM}20981, 'combinations(400, 317 )', 2489662046581148151241418181800164851138493567854875123037978653481642521320083711216000.0);
  Eps; Test({LINENUM}20982, 'combinations(400, 318 )', 649817452409544957713955060029602775611619390352058601296076189430743173803669647896000.0);
  Eps; Test({LINENUM}20983, 'combinations(400, 319 )', 167037715039444158409229827343032688401732884040341082464822092580943386369595332688000.0);
  Eps; Test({LINENUM}20984, 'combinations(400, 320 )', 42281421619359302597336300046205149251688636272711336498908092184551294674803818586650.0);
  Eps; Test({LINENUM}20985, 'combinations(400, 321 )', 10537425948749981955722442379116548100109317451143012211565879672162316429857649492000.0);
  Eps; Test({LINENUM}20986, 'combinations(400, 322 )', 2585269099227480045037493627174556832014397759752478151284796565530506204840851894000.0);
  Eps; Test({LINENUM}20987, 'combinations(400, 323 )', 624306469782487441216484529162896077080876239197192866254532916753496854419772284000.0);
  Eps; Test({LINENUM}20988, 'combinations(400, 324 )', 148369130164356583252065767733157401034652686475876082412342699351911289476303907000.0);
  Eps; Test({LINENUM}20989, 'combinations(400, 325 )', 34695550438434154852790764146830653780411089760512560810270908156139255385227990560.0);
  Eps; Test({LINENUM}20990, 'combinations(400, 326 )', 7982105162216446668586832242369015440278624944903196505430423655553509674515642000.0);
  Eps; Test({LINENUM}20991, 'combinations(400, 327 )', 1806347957198828909710781608364853647035529804045371686244193732449418091480604000.0);
  Eps; Test({LINENUM}20992, 'combinations(400, 328 )', 402022563644861312222216638447055842175590474680829674072640678258559514262451500.0);
  Eps; Test({LINENUM}20993, 'combinations(400, 329 )', 87980621831094268936168990784766020172165696586686129280334738099137644458652000.0);
  Eps; Test({LINENUM}20994, 'combinations(400, 330 )', 18929164090932403316569691956722386158253831689862773269405352742541735625952400.0);
  Eps; Test({LINENUM}20995, 'combinations(400, 331 )', 4003146484487215202899934854895972903558212139850133319813820821685563425428000.0);
  Eps; Test({LINENUM}20996, 'combinations(400, 332 )', 831979239245836894578600918638018464896134450751985539358896496073204446851000.0);
  Eps; Test({LINENUM}20997, 'combinations(400, 333 )', 169893658464615341835870457860015782621432860814219269298513398597531238396000.0);
  Eps; Test({LINENUM}20998, 'combinations(400, 334 )', 34080464422542598511985990049763645016874256510636799529941310497109559798000.0);
  Eps; Test({LINENUM}20999, 'combinations(400, 335 )', 6714360154888989557585299532192240510787166954334414235749631321818599840800.0);
  Eps; Test({LINENUM}21000, 'combinations(400, 336 )', 1298908958535072384651918064263379860717755511999217039653946535470860088250.0);
  Eps; Test({LINENUM}21001, 'combinations(400, 337 )', 246677072244049354948732213984736828148179088332195520883835543828293904000.0);
  Eps; Test({LINENUM}21002, 'combinations(400, 338 )', 45978270862056536573284406748634379211051131848900348567105441601131704000.0);
  Eps; Test({LINENUM}21003, 'combinations(400, 339 )', 8409005290405620258240805954027526581372183405993574074219874275133232000.0);
  Eps; Test({LINENUM}21004, 'combinations(400, 340 )', 1508674478572773046331438715281409180775597611075317701551212737597432800.0);
  Eps; Test({LINENUM}21005, 'combinations(400, 341 )', 265455919983479128386763410313444430635002512212665871240682593125648000.0);
  Eps; Test({LINENUM}21006, 'combinations(400, 342 )', 45795027131652832090114155580389536279137860293997913459649921036296000.0);
  Eps; Test({LINENUM}21007, 'combinations(400, 343 )', 7743765520804268983167991322631466776064127979743087407171123673776000.0);
  Eps; Test({LINENUM}21008, 'combinations(400, 344 )', 1283123938040242244303998562180213971615277019899290645955680376178000.0);
  Eps; Test({LINENUM}21009, 'combinations(400, 345 )', 208275189942763958495721505745194151914363806128580510647878553814400.0);
  Eps; Test({LINENUM}21010, 'combinations(400, 346 )', 33107327881075195714637811606895024148237021205410196779287053352000.0);
  Eps; Test({LINENUM}21011, 'combinations(400, 347 )', 5152149007429569361932109010871271769466279957037898057871760464000.0);
  Eps; Test({LINENUM}21012, 'combinations(400, 348 )', 784666371821170046501154533264877597073887464721289072032193404000.0);
  Eps; Test({LINENUM}21013, 'combinations(400, 349 )', 116913041073641382286704973437746805294676642308043070904510192000.0);
  Eps; Test({LINENUM}21014, 'combinations(400, 350 )', 17035900270730601418919867558071677342938596450600561760371485120.0);
  Eps; Test({LINENUM}21015, 'combinations(400, 351 )', 2426766420331994504119639253286563724065327129715179737944656000.0);
  Eps; Test({LINENUM}21016, 'combinations(400, 352 )', 337816916466669689493927055145004609315912015216033543066159500.0);
  Eps; Test({LINENUM}21017, 'combinations(400, 353 )', 45935444732011742480760619396487878887149509151188697074152000.0);
  Eps; Test({LINENUM}21018, 'combinations(400, 354 )', 6098773735606078803942794100663644936994426356231267690636000.0);
  Eps; Test({LINENUM}21019, 'combinations(400, 355 )', 790263638979942605581319798959232865075334119398981165547200.0);
  Eps; Test({LINENUM}21020, 'combinations(400, 356 )', 99892875713756790031346603801026626203342795991444248454000.0);
  Eps; Test({LINENUM}21021, 'combinations(400, 357 )', 12311726978726327062686976378838015554473621914911896168000.0);
  Eps; Test({LINENUM}21022, 'combinations(400, 358 )', 1478782849400089563395363084609035387827837269109529428000.0);
  Eps; Test({LINENUM}21023, 'combinations(400, 359 )', 173005235862963124408371168672923360135847257110307064000.0);
  Eps; Test({LINENUM}21024, 'combinations(400, 360 )', 19703374084393022502064494209971827126582604282007193400.0);
  Eps; Test({LINENUM}21025, 'combinations(400, 361 )', 2183199344531082825713517363985798019565939532632376000.0);
  Eps; Test({LINENUM}21026, 'combinations(400, 362 )', 235206559217437100007809881755376029732242104344372000.0);
  Eps; Test({LINENUM}21027, 'combinations(400, 363 )', 24622174243147685400266599192022835068388980620072000.0);
  Eps; Test({LINENUM}21028, 'combinations(400, 364 )', 2502803425814462526950176291496826641567011766326000.0);
  Eps; Test({LINENUM}21029, 'combinations(400, 365 )', 246851844737864797178647524640782901634006639966400.0);
  Eps; Test({LINENUM}21030, 'combinations(400, 366 )', 23606050726298546178285965471113119008716481964000.0);
  Eps; Test({LINENUM}21031, 'combinations(400, 367 )', 2186936579548094196353468190784321652033679528000.0);
  Eps; Test({LINENUM}21032, 'combinations(400, 368 )', 196111160665997577390392527977941887274759305500.0);
  Eps; Test({LINENUM}21033, 'combinations(400, 369 )', 17006929922254532456619406220309323557702704000.0);
  Eps; Test({LINENUM}21034, 'combinations(400, 370 )', 1424904939432136503122166467106997379158875200.0);
  Eps; Test({LINENUM}21035, 'combinations(400, 371 )', 115221423673757668716078150979002483489936000.0);
  Eps; Test({LINENUM}21036, 'combinations(400, 372 )', 8982315286395087077328673060191053820452000.0);
  Eps; Test({LINENUM}21037, 'combinations(400, 373 )', 674275678335288037976415135885655514672000.0);
  Eps; Test({LINENUM}21038, 'combinations(400, 374 )', 48677655922601008089206440291210424856000.0);
  Eps; Test({LINENUM}21039, 'combinations(400, 375 )', 3374984143967003227518313193523922790016.0);
  Eps; Test({LINENUM}21040, 'combinations(400, 376 )', 224400541487167767787121887867282100400.0);
  Eps; Test({LINENUM}21041, 'combinations(400, 377 )', 14285445611915189461249138750171804800.0);
  Eps; Test({LINENUM}21042, 'combinations(400, 378 )', 869220235645633221187116908079236800.0);
  Eps; Test({LINENUM}21043, 'combinations(400, 379 )', 50456055894997179066270638463702400.0);
  Eps; Test({LINENUM}21044, 'combinations(400, 380 )', 2788360983670896737872851072994080.0);
  Eps; Test({LINENUM}21045, 'combinations(400, 381 )', 146370655310808227709860948713600.0);
  Eps; Test({LINENUM}21046, 'combinations(400, 382 )', 7280215840066377818029733051200.0);
  Eps; Test({LINENUM}21047, 'combinations(400, 383 )', 342151136086670497975287715200.0);
  Eps; Test({LINENUM}21048, 'combinations(400, 384 )', 15147315920503641837447633225.0);
  Eps; Test({LINENUM}21049, 'combinations(400, 385 )', 629498843449501998439382160.0);
  Eps; Test({LINENUM}21050, 'combinations(400, 386 )', 24462390289488419628473400.0);
  Eps; Test({LINENUM}21051, 'combinations(400, 387 )', 884944351557720606714800.0);
  Eps; Test({LINENUM}21052, 'combinations(400, 388 )', 29650197346006102802300.0);
  Eps; Test({LINENUM}21053, 'combinations(400, 389 )', 914659044092733248400.0);
  Eps; Test({LINENUM}21054, 'combinations(400, 390 )', 25798075602615553160.0);
  Test({LINENUM}21055, 'combinations(400, 391 )', 659797329990167600);
  Test({LINENUM}21056, 'combinations(400, 392 )', 15148408086508950);
  Test({LINENUM}21057, 'combinations(400, 393 )', 308364541201200);
  Test({LINENUM}21058, 'combinations(400, 394 )', 5478557838600);
  Test({LINENUM}21059, 'combinations(400, 395 )', 83218600080);
  Test({LINENUM}21060, 'combinations(400, 396 )', 1050739900);
  Test({LINENUM}21061, 'combinations(400, 397 )', 10586800);
  Test({LINENUM}21062, 'combinations(400, 398 )', 79800);
  Test({LINENUM}21063, 'combinations(400, 399 )', 400);
  Test({LINENUM}21064, 'combinations(400, 400 )', 1);

  Eps; Test({LINENUM}21066, 'combinations(500, 250)', 1.1674431578827768292093473476217661965923008118031144E149);
  Eps; Test({LINENUM}21067, 'combinations(800, 400)', 1.8804244186835312700958607615195351332156581822914058E239);
  Eps; Test({LINENUM}21068, 'combinations(1000, 500)', 2.7028824094543656951561469362597527549615200844654828E299);
  Eps; Test({LINENUM}21069, 'combinations(1200, 600)', 3.9650964622610201403671601486260572953160819570679165E359);
  Eps; Test({LINENUM}21070, 'combinations(1500, 750)', 7.2246289244893021702811607322848529594437634304054652E449);
  Eps; Test({LINENUM}21071, 'combinations(2000, 1000)', 2.0481516269894897143351625029808250443964248879813970E600);
  Eps; Test({LINENUM}21072, 'combinations(3000, 1500)', 1.7919679375475600507326903666685292846560897853633339E901);
  Eps; Test({LINENUM}21073, 'combinations(4000, 2000)', 1.662897875033835069539536826460381558016225597388640E1202);
  Eps; Test({LINENUM}21074, 'combinations(5000, 2500)', 1.593718685349438375691025792935919087257129434168729E1503);
  Eps; Test({LINENUM}21075, 'combinations(8000, 4000)', 1.550053928509880709855382381537398942593569455195730E2406);
  Eps; Test({LINENUM}21076, 'combinations(10000, 5000)', 1.591790263532438948337597273641521188653005837457614E3008);

  Test({LINENUM}21078, 'combinations(0, 1)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21079, 'combinations(1, 2)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21080, 'combinations(4, 5)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21081, 'combinations(10, 15)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21082, 'combinations(10, 11)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21083, 'combinations(-10, 5)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21084, 'combinations(10, -1)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21085, 'combinations(10, -3)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21086, 'combinations(10, -11)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21087, 'combinations(-10, -5)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21088, 'combinations(-10, -50)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21089, 'combinations(-1, 0)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}21090, 'combinations(10, 5, 2)', failure, 'Too many arguments.');
  Test({LINENUM}21091, 'combinations(10)', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}21092, 'combinations(10, "cat")', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}21093, 'combinations(10, 5.5)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');

  // Permutations

  Test({LINENUM}21097, 'permutations(0, 0)', 1);

  Test({LINENUM}21099, 'permutations(1, 0)', 1);
  Test({LINENUM}21100, 'permutations(1, 1)', 1);

  Test({LINENUM}21102, 'permutations(2, 0)', 1);
  Test({LINENUM}21103, 'permutations(2, 1)', 2);
  Test({LINENUM}21104, 'permutations(2, 2)', 2);

  Test({LINENUM}21106, 'permutations(5, 0)', 1);
  Test({LINENUM}21107, 'permutations(5, 1)', 5);
  Test({LINENUM}21108, 'permutations(5, 2)', 20);
  Test({LINENUM}21109, 'permutations(5, 3)', 60);
  Test({LINENUM}21110, 'permutations(5, 4)', 120);
  Test({LINENUM}21111, 'permutations(5, 5)', 120);

  Test({LINENUM}21113, 'permutations(10, 0   )', 1);
  Test({LINENUM}21114, 'permutations(10, 1   )', 10);
  Test({LINENUM}21115, 'permutations(10, 2   )', 90);
  Test({LINENUM}21116, 'permutations(10, 3   )', 720);
  Test({LINENUM}21117, 'permutations(10, 4   )', 5040);
  Test({LINENUM}21118, 'permutations(10, 5   )', 30240);
  Test({LINENUM}21119, 'permutations(10, 6   )', 151200);
  Test({LINENUM}21120, 'permutations(10, 7   )', 604800);
  Test({LINENUM}21121, 'permutations(10, 8   )', 1814400);
  Test({LINENUM}21122, 'permutations(10, 9   )', 3628800);
  Test({LINENUM}21123, 'permutations(10, 10  )', 3628800);

  Test({LINENUM}21125, 'permutations(20, 0   )', 1);
  Test({LINENUM}21126, 'permutations(20, 1   )', 20);
  Test({LINENUM}21127, 'permutations(20, 2   )', 380);
  Test({LINENUM}21128, 'permutations(20, 3   )', 6840);
  Test({LINENUM}21129, 'permutations(20, 4   )', 116280);
  Test({LINENUM}21130, 'permutations(20, 5   )', 1860480);
  Test({LINENUM}21131, 'permutations(20, 6   )', 27907200);
  Test({LINENUM}21132, 'permutations(20, 7   )', 390700800);
  Test({LINENUM}21133, 'permutations(20, 8   )', 5079110400);
  Test({LINENUM}21134, 'permutations(20, 9   )', 60949324800);
  Test({LINENUM}21135, 'permutations(20, 10  )', 670442572800);
  Test({LINENUM}21136, 'permutations(20, 11  )', 6704425728000);
  Test({LINENUM}21137, 'permutations(20, 12  )', 60339831552000);
  Test({LINENUM}21138, 'permutations(20, 13  )', 482718652416000);
  Test({LINENUM}21139, 'permutations(20, 14  )', 3379030566912000);
  Test({LINENUM}21140, 'permutations(20, 15  )', 20274183401472000);
  Test({LINENUM}21141, 'permutations(20, 16  )', 101370917007360000);
  Test({LINENUM}21142, 'permutations(20, 17  )', 405483668029440000);
  Test({LINENUM}21143, 'permutations(20, 18  )', 1216451004088320000);
  Test({LINENUM}21144, 'permutations(20, 19  )', 2432902008176640000);
  Test({LINENUM}21145, 'permutations(20, 20  )', 2432902008176640000);

  Test({LINENUM}21147, 'permutations(50, 0   )', 1);
  Test({LINENUM}21148, 'permutations(50, 1   )', 50);
  Test({LINENUM}21149, 'permutations(50, 2   )', 2450);
  Test({LINENUM}21150, 'permutations(50, 3   )', 117600);
  Test({LINENUM}21151, 'permutations(50, 4   )', 5527200);
  Test({LINENUM}21152, 'permutations(50, 5   )', 254251200);
  Test({LINENUM}21153, 'permutations(50, 6   )', 11441304000);
  Test({LINENUM}21154, 'permutations(50, 7   )', 503417376000);
  Test({LINENUM}21155, 'permutations(50, 8   )', 21646947168000);
  Test({LINENUM}21156, 'permutations(50, 9   )', 909171781056000);
  Test({LINENUM}21157, 'permutations(50, 10  )', 37276043023296000);
  Test({LINENUM}21158, 'permutations(50, 11  )', 1491041720931840000);
  Eps; Test({LINENUM}21159, 'permutations(50, 12  )', 58150627116341760000.0);
  Eps; Test({LINENUM}21160, 'permutations(50, 13  )', 2209723830420986880000.0);
  Eps; Test({LINENUM}21161, 'permutations(50, 14  )', 81759781725576514560000.0);
  Eps; Test({LINENUM}21162, 'permutations(50, 15  )', 2943352142120754524160000.0);
  Eps; Test({LINENUM}21163, 'permutations(50, 16  )', 103017324974226408345600000.0);
  Eps; Test({LINENUM}21164, 'permutations(50, 17  )', 3502589049123697883750400000.0);
  Eps; Test({LINENUM}21165, 'permutations(50, 18  )', 115585438621082030163763200000.0);
  Eps; Test({LINENUM}21166, 'permutations(50, 19  )', 3698734035874624965240422400000.0);
  Eps; Test({LINENUM}21167, 'permutations(50, 20  )', 114660755112113373922453094400000.0);
  Eps; Test({LINENUM}21168, 'permutations(50, 21  )', 3439822653363401217673592832000000.0);
  Eps; Test({LINENUM}21169, 'permutations(50, 22  )', 99754856947538635312534192128000000.0);
  Eps; Test({LINENUM}21170, 'permutations(50, 23  )', 2793135994531081788750957379584000000.0);
  Eps; Test({LINENUM}21171, 'permutations(50, 24  )', 75414671852339208296275849248768000000.0);
  Eps; Test({LINENUM}21172, 'permutations(50, 25  )', 1960781468160819415703172080467968000000.0);
  Eps; Test({LINENUM}21173, 'permutations(50, 26  )', 49019536704020485392579302011699200000000.0);
  Eps; Test({LINENUM}21174, 'permutations(50, 27  )', 1176468880896491649421903248280780800000000.0);
  Eps; Test({LINENUM}21175, 'permutations(50, 28  )', 27058784260619307936703774710457958400000000.0);
  Eps; Test({LINENUM}21176, 'permutations(50, 29  )', 595293253733624774607483043630075084800000000.0);
  Eps; Test({LINENUM}21177, 'permutations(50, 30  )', 12501158328406120266757143916231576780800000000.0);
  Eps; Test({LINENUM}21178, 'permutations(50, 31  )', 250023166568122405335142878324631535616000000000.0);
  Eps; Test({LINENUM}21179, 'permutations(50, 32  )', 4750440164794325701367714688167999176704000000000.0);
  Eps; Test({LINENUM}21180, 'permutations(50, 33  )', 85507922966297862624618864387023985180672000000000.0);
  Eps; Test({LINENUM}21181, 'permutations(50, 34  )', 1453634690427063664618520694579407748071424000000000.0);
  Eps; Test({LINENUM}21182, 'permutations(50, 35  )', 23258155046833018633896331113270523969142784000000000.0);
  Eps; Test({LINENUM}21183, 'permutations(50, 36  )', 348872325702495279508444966699057859537141760000000000.0);
  Eps; Test({LINENUM}21184, 'permutations(50, 37  )', 4884212559834933913118229533786810033519984640000000000.0);
  Eps; Test({LINENUM}21185, 'permutations(50, 38  )', 63494763277854140870536983939228530435759800320000000000.0);
  Eps; Test({LINENUM}21186, 'permutations(50, 39  )', 761937159334249690446443807270742365229117603840000000000.0);
  Eps; Test({LINENUM}21187, 'permutations(50, 40  )', 8381308752676746594910881879978166017520293642240000000000.0);
  Eps; Test({LINENUM}21188, 'permutations(50, 41  )', 83813087526767465949108818799781660175202936422400000000000.0);
  Eps; Test({LINENUM}21189, 'permutations(50, 42  )', 754317787740907193541979369198034941576826427801600000000000.0);
  Eps; Test({LINENUM}21190, 'permutations(50, 43  )', 6034542301927257548335834953584279532614611422412800000000000.0);
  Eps; Test({LINENUM}21191, 'permutations(50, 44  )', 42241796113490802838350844675089956728302279956889600000000000.0);
  Eps; Test({LINENUM}21192, 'permutations(50, 45  )', 253450776680944817030105068050539740369813679741337600000000000.0);
  Eps; Test({LINENUM}21193, 'permutations(50, 46  )', 1267253883404724085150525340252698701849068398706688000000000000.0);
  Eps; Test({LINENUM}21194, 'permutations(50, 47  )', 5069015533618896340602101361010794807396273594826752000000000000.0);
  Eps; Test({LINENUM}21195, 'permutations(50, 48  )', 15207046600856689021806304083032384422188820784480256000000000000.0);
  Eps; Test({LINENUM}21196, 'permutations(50, 49  )', 30414093201713378043612608166064768844377641568960512000000000000.0);
  Eps; Test({LINENUM}21197, 'permutations(50, 50  )', 30414093201713378043612608166064768844377641568960512000000000000.0);

  Test({LINENUM}21199, 'permutations(100, 0   )', 1);
  Test({LINENUM}21200, 'permutations(100, 1   )', 100);
  Test({LINENUM}21201, 'permutations(100, 2   )', 9900);
  Test({LINENUM}21202, 'permutations(100, 3   )', 970200);
  Test({LINENUM}21203, 'permutations(100, 4   )', 94109400);
  Test({LINENUM}21204, 'permutations(100, 5   )', 9034502400);
  Test({LINENUM}21205, 'permutations(100, 6   )', 858277728000);
  Test({LINENUM}21206, 'permutations(100, 7   )', 80678106432000);
  Test({LINENUM}21207, 'permutations(100, 8   )', 7503063898176000);
  Test({LINENUM}21208, 'permutations(100, 9   )', 690281878632192000);
  Eps; Test({LINENUM}21209, 'permutations(100, 10  )', 62815650955529472000.0);
  Eps; Test({LINENUM}21210, 'permutations(100, 11  )', 5653408585997652480000.0);
  Eps; Test({LINENUM}21211, 'permutations(100, 12  )', 503153364153791070720000.0);
  Eps; Test({LINENUM}21212, 'permutations(100, 13  )', 44277496045533614223360000.0);
  Eps; Test({LINENUM}21213, 'permutations(100, 14  )', 3852142155961424437432320000.0);
  Eps; Test({LINENUM}21214, 'permutations(100, 15  )', 331284225412682501619179520000.0);
  Eps; Test({LINENUM}21215, 'permutations(100, 16  )', 28159159160078012637630259200000.0);
  Eps; Test({LINENUM}21216, 'permutations(100, 17  )', 2365369369446553061560941772800000.0);
  Eps; Test({LINENUM}21217, 'permutations(100, 18  )', 196325657664063904109558167142400000.0);
  Eps; Test({LINENUM}21218, 'permutations(100, 19  )', 16098703928453240136983769705676800000.0);
  Eps; Test({LINENUM}21219, 'permutations(100, 20  )', 1303995018204712451095685346159820800000.0);
  Eps; Test({LINENUM}21220, 'permutations(100, 21  )', 104319601456376996087654827692785664000000.0);
  Eps; Test({LINENUM}21221, 'permutations(100, 22  )', 8241248515053782690924731387730067456000000.0);
  Eps; Test({LINENUM}21222, 'permutations(100, 23  )', 642817384174195049892129048242945261568000000.0);
  Eps; Test({LINENUM}21223, 'permutations(100, 24  )', 49496938581413018841693936714706785140736000000.0);
  Eps; Test({LINENUM}21224, 'permutations(100, 25  )', 3761767332187389431968739190317715670695936000000.0);
  Eps; Test({LINENUM}21225, 'permutations(100, 26  )', 282132549914054207397655439273828675302195200000000.0);
  Eps; Test({LINENUM}21226, 'permutations(100, 27  )', 20877808693640011347426502506263321972362444800000000.0);
  Eps; Test({LINENUM}21227, 'permutations(100, 28  )', 1524080034635720828362134682957222503982458470400000000.0);
  Eps; Test({LINENUM}21228, 'permutations(100, 29  )', 109733762493771899642073697172920020286737009868800000000.0);
  Eps; Test({LINENUM}21229, 'permutations(100, 30  )', 7791097137057804874587232499277321440358327700684800000000.0);
  Eps; Test({LINENUM}21230, 'permutations(100, 31  )', 545376799594046341221106274949412500825082939047936000000000.0);
  Eps; Test({LINENUM}21231, 'permutations(100, 32  )', 37630999171989197544256332971509462556930722794307584000000000.0);
  Eps; Test({LINENUM}21232, 'permutations(100, 33  )', 2558907943695265433009430642062643453871289150012915712000000000.0);
  Eps; Test({LINENUM}21233, 'permutations(100, 34  )', 171446832227582784011631853018197111409376373050865352704000000000.0);
  Eps; Test({LINENUM}21234, 'permutations(100, 35  )', 11315490927020463744767702299201009353018840621357113278464000000000.0);
  Eps; Test({LINENUM}21235, 'permutations(100, 36  )', 735506910256330143409900649448065607946224640388212363100160000000000.0);
  Eps; Test({LINENUM}21236, 'permutations(100, 37  )', 47072442256405129178233641564676198908558376984845591238410240000000000.0);
  Eps; Test({LINENUM}21237, 'permutations(100, 38  )', 2965563862153523138228719418574600531239177750045272248019845120000000000.0);
  Eps; Test({LINENUM}21238, 'permutations(100, 39  )', 183864959453518434570180603951625232936829020502806879377230397440000000000.0);
  Eps; Test({LINENUM}21239, 'permutations(100, 40  )', 11215762526664624508781016841049139209146570250671219642011054243840000000000.0);
  Eps; Test({LINENUM}21240, 'permutations(100, 41  )', 672945751599877470526861010462948352548794215040273178520663254630400000000000.0);
  Eps; Test({LINENUM}21241, 'permutations(100, 42  )', 39703799344392770761084799617313952800378858687376117532719132023193600000000000.0);
  Eps; Test({LINENUM}21242, 'permutations(100, 43  )', 2302820361974780704142918377804209262421973803867814816897709657345228800000000000.0);
  Eps; Test({LINENUM}21243, 'permutations(100, 44  )', 131260760632562500136146347534839927958052506820465444563169450468678041600000000000.0);
  Eps; Test({LINENUM}21244, 'permutations(100, 45  )', 7350602595423500007624195461951035965650940381946064895537489226245970329600000000000.0);
  Eps; Test({LINENUM}21245, 'permutations(100, 46  )', 404283142748292500419330750407306978110801721007033569254561907443528368128000000000000.0);
  Eps; Test({LINENUM}21246, 'permutations(100, 47  )', 21831289708407795022643860521994576817983292934379812739746343001950531878912000000000000.0);
  Eps; Test({LINENUM}21247, 'permutations(100, 48  )', 1157058354545613136200124607665712571353114525522130075206556179103378189582336000000000000.0);
  Eps; Test({LINENUM}21248, 'permutations(100, 49  )', 60167034436371883082406479598617053710361955327150763910740921313375665858281472000000000000.0);
  Eps; Test({LINENUM}21249, 'permutations(100, 50  )', 3068518756254966037202730459529469739228459721684688959447786986982158958772355072000000000000.0);
  Eps; Test({LINENUM}21250, 'permutations(100, 51  )', 153425937812748301860136522976473486961422986084234447972389349349107947938617753600000000000000.0);
  Eps; Test({LINENUM}21251, 'permutations(100, 52  )', 7517870952824666791146689625847200861109726318127487950647078118106289448992269926400000000000000.0);
  Eps; Test({LINENUM}21252, 'permutations(100, 53  )', 360857805735584005975041102040665641333266863270119421631059749669101893551628956467200000000000000.0);
  Eps; Test({LINENUM}21253, 'permutations(100, 54  )', 16960316869572448280826931795911285142663542573695612816659808234447788996926560953958400000000000000.0);
  Eps; Test({LINENUM}21254, 'permutations(100, 55  )', 780174576000332620918038862611919116562522958389998189566351178784598293858621803882086400000000000000.0);
  Eps; Test({LINENUM}21255, 'permutations(100, 56  )', 35107855920014967941311748817536360245313533127549918530485803045306923223637981174693888000000000000000.0);
  Eps; Test({LINENUM}21256, 'permutations(100, 57  )', 1544745660480658589417716947971599850793795457612196415341375333993504621840071171686531072000000000000000.0);
  Eps; Test({LINENUM}21257, 'permutations(100, 58  )', 66424063400668319344961828762778793584133204677324445859679139361720698739123060382520836096000000000000000.0);
  Eps; Test({LINENUM}21258, 'permutations(100, 59  )', 2789810662828069412488396808036709330533594596447626726106523853192269347043168536065875116032000000000000000.0);
  Eps; Test({LINENUM}21259, 'permutations(100, 60  )', 114382237175950845912024269129505082551877378454352695770367477980883043228769909978700879757312000000000000000.0);
  Eps; Test({LINENUM}21260, 'permutations(100, 61  )', 4575289487038033836480970765180203302075095138174107830814699119235321729150796399148035190292480000000000000000.0);
  Eps; Test({LINENUM}21261, 'permutations(100, 62  )', 178436289994483319622757859842027928780928710388790205401773265650177547436881059566773372421406720000000000000000.0);
  Eps; Test({LINENUM}21262, 'permutations(100, 63  )', 6780579019790366145664798673997061293675290994774027805267384094706746802601480263537388152013455360000000000000000.0);
  Eps; Test({LINENUM}21263, 'permutations(100, 64  )', 250881423732243547389597550937891267865985766806639028794893211504149631696254769750883361624497848320000000000000000.0);
  Eps; Test({LINENUM}21264, 'permutations(100, 65  )', 9031731254360767706025511833764085643175487605039005036616155614149386741065171711031801018481922539520000000000000000.0);
  Eps; Test({LINENUM}21265, 'permutations(100, 66  )', 316110593902626869710892914181742997511142066176365176281565446495228535937281009886113035646867288883200000000000000000.0);
  Eps; Test({LINENUM}21266, 'permutations(100, 67  )', 10747760192689313570170359082179261915378830249996415993573225180837770221867554336127843211993487822028800000000000000000.0);
  Eps; Test({LINENUM}21267, 'permutations(100, 68  )', 354676086358747347815621849711915643207501398249881727787916430967646417321629293092218825995785098126950400000000000000000.0);
  Eps; Test({LINENUM}21268, 'permutations(100, 69  )', 11349634763479915130099899190781300582640044743996215289213325790964685354292137378951002431865123140062412800000000000000000.0);
  Eps; Test({LINENUM}21269, 'permutations(100, 70  )', 351838677667877369033096874914220318061841387063882673965613099519905245983056258747481075387818817341934796800000000000000000.0);
  Eps; Test({LINENUM}21270, 'permutations(100, 71  )', 10555160330036321070992906247426609541855241611916480218968392985597157379491687762424432261634564520258043904000000000000000000.0);
  Eps; Test({LINENUM}21271, 'permutations(100, 72  )', 306099649571053311058794281175371676713802006745577926350083396582317564005258945110308535587402371087483273216000000000000000000.0);
  Eps; Test({LINENUM}21272, 'permutations(100, 73  )', 8570790187989492709646239872910406947986456188876181937802335104304891792147250463088638996447266390449531650048000000000000000000.0);
  Eps; Test({LINENUM}21273, 'permutations(100, 74  )', 231411335075716303160448476568580987595634317099656912320663047816232078387975762503393252904076192542137354551296000000000000000000.0);
  Eps; Test({LINENUM}21274, 'permutations(100, 75  )', 6016694711968623882171660390783105677486492244591079720337239243222034038087369825088224575505981006095571218333696000000000000000000.0);
  Eps; Test({LINENUM}21275, 'permutations(100, 76  )', 150417367799215597054291509769577641937162306114776993008430981080550850952184245627205614387649525152389280458342400000000000000000000.0);
  Eps; Test({LINENUM}21276, 'permutations(100, 77  )', 3610016827181174329302996234469863406491895346754647832202343545933220422852421895052934745303588603657342731000217600000000000000000000.0);
  Eps; Test({LINENUM}21277, 'permutations(100, 78  )', 83030387025167009573968913392806858349313592975356900140653901556464069725605703586217499141982537884118882813005004800000000000000000000.0);
  Eps; Test({LINENUM}21278, 'permutations(100, 79  )', 1826668514553674210627316094641750883684899045457851803094385834242209533963325478896784981123615833450615421886110105600000000000000000000.0);
  Eps; Test({LINENUM}21279, 'permutations(100, 80  )', 38360038805627158423173637987476768557382879954614887864982102519086400213229835056832484603595932502462923859608312217600000000000000000000.0);
  Eps; Test({LINENUM}21280, 'permutations(100, 81  )', 767200776112543168463472759749535371147657599092297757299642050381728004264596701136649692071918650049258477192166244352000000000000000000000.0);
  Eps; Test({LINENUM}21281, 'permutations(100, 82  )', 14576814746138320200805982435241172051805494382753657388693198957252832081027337321596344149366454350935911066651158642688000000000000000000000.0);
  Eps; Test({LINENUM}21282, 'permutations(100, 83  )', 262382665430489763614507683834341096932498898889565832996477581230550977458492071788734194688596178316846399199720855568384000000000000000000000.0);
  Eps; Test({LINENUM}21283, 'permutations(100, 84  )', 4460505312318325981446630625183798647852481281122619160940118880919366616794365220408481309706135031386388786395254544662528000000000000000000000.0);
  Eps; Test({LINENUM}21284, 'permutations(100, 85  )', 71368084997093215703146090002940778365639700497961906575041902094709865868709843526535700955298160502182220582324072714600448000000000000000000000.0);
  Eps; Test({LINENUM}21285, 'permutations(100, 86  )', 1070521274956398235547191350044111675484595507469428598625628531420647988030647652898035514329472407532733308734861090719006720000000000000000000000.0);
  Eps; Test({LINENUM}21286, 'permutations(100, 87  )', 14987297849389575297660678900617563456784337104572000380758799439889071832429067140572497200612613705458266322288055270066094080000000000000000000000.0);
  Eps; Test({LINENUM}21287, 'permutations(100, 88  )', 194834872042064478869588825708028324938196382359436004949864392718557933821577872827442463607963978170957462189744718510859223040000000000000000000000.0);
  Eps; Test({LINENUM}21288, 'permutations(100, 89  )', 2338018464504773746435065908496339899258356588313232059398372712622695205858934473929309563295567738051489546276936622130310676480000000000000000000000.0);
  Eps; Test({LINENUM}21289, 'permutations(100, 90  )', 25718203109552511210785724993459738891841922471445552653382099838849647264448279213222405196251245118566385009046302843433417441280000000000000000000000.0);
  Eps; Test({LINENUM}21290, 'permutations(100, 91  )', 257182031095525112107857249934597388918419224714455526533820998388496472644482792132224051962512451185663850090463028434334174412800000000000000000000000.0);
  Eps; Test({LINENUM}21291, 'permutations(100, 92  )', 2314638279859726008970715249411376500265773022430099738804388985496468253800345129190016467662612060670974650814167255909007569715200000000000000000000000.0);
  Eps; Test({LINENUM}21292, 'permutations(100, 93  )', 18517106238877808071765721995291012002126184179440797910435111883971746030402761033520131741300896485367797206513338047272060557721600000000000000000000000.0);
  Eps; Test({LINENUM}21293, 'permutations(100, 94  )', 129619743672144656502360053967037084014883289256085585373045783187802222212819327234640922189106275397574580445593366330904423904051200000000000000000000000.0);
  Eps; Test({LINENUM}21294, 'permutations(100, 95  )', 777718462032867939014160323802222504089299735536513512238274699126813333276915963407845533134637652385447482673560197985426543424307200000000000000000000000.0);
  Eps; Test({LINENUM}21295, 'permutations(100, 96  )', 3888592310164339695070801619011112520446498677682567561191373495634066666384579817039227665673188261927237413367800989927132717121536000000000000000000000000.0);
  Eps; Test({LINENUM}21296, 'permutations(100, 97  )', 15554369240657358780283206476044450081785994710730270244765493982536266665538319268156910662692753047708949653471203959708530868486144000000000000000000000000.0);
  Eps; Test({LINENUM}21297, 'permutations(100, 98  )', 46663107721972076340849619428133350245357984132190810734296481947608799996614957804470731988078259143126848960413611879125592605458432000000000000000000000000.0);
  Eps; Test({LINENUM}21298, 'permutations(100, 99  )', 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000.0);
  Eps; Test({LINENUM}21299, 'permutations(100, 100 )', 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000.0);

  Eps; Test({LINENUM}21301, 'permutations(200, 200)', 7.8865786736479050355236321393218506229513597768717326E374);
  Eps; Test({LINENUM}21302, 'permutations(500, 500)', 1.220136825991110068701238785423046926253574342803192E1134);

  for _i := 0 to 1000 do
    Test({LINENUM}21305, Format('permutations(%d, %d) ≈ %d!', [_i, _i, _i]), True);

  // Prime numbers

  for _i := -100 to SmallPrimes[High(SmallPrimes)] do
    Test({LINENUM}21310, 'IsPrime(' + _i.ToString + ')', IsSmallPrime(_i));

  Test({LINENUM}21312, 'IsPrime(99871)', True);
  Test({LINENUM}21313, 'IsPrime(99872)', False);
  Test({LINENUM}21314, 'IsPrime(99873)', False);
  Test({LINENUM}21315, 'IsPrime(99874)', False);
  Test({LINENUM}21316, 'IsPrime(99875)', False);
  Test({LINENUM}21317, 'IsPrime(99876)', False);
  Test({LINENUM}21318, 'IsPrime(99877)', True);
  Test({LINENUM}21319, 'IsPrime(99878)', False);
  Test({LINENUM}21320, 'IsPrime(99879)', False);
  Test({LINENUM}21321, 'IsPrime(99880)', False);
  Test({LINENUM}21322, 'IsPrime(99881)', True);
  Test({LINENUM}21323, 'IsPrime(99882)', False);
  Test({LINENUM}21324, 'IsPrime(99883)', False);
  Test({LINENUM}21325, 'IsPrime(99884)', False);
  Test({LINENUM}21326, 'IsPrime(99885)', False);
  Test({LINENUM}21327, 'IsPrime(99886)', False);
  Test({LINENUM}21328, 'IsPrime(99887)', False);
  Test({LINENUM}21329, 'IsPrime(99888)', False);
  Test({LINENUM}21330, 'IsPrime(99889)', False);
  Test({LINENUM}21331, 'IsPrime(99890)', False);
  Test({LINENUM}21332, 'IsPrime(99891)', False);
  Test({LINENUM}21333, 'IsPrime(99892)', False);
  Test({LINENUM}21334, 'IsPrime(99893)', False);
  Test({LINENUM}21335, 'IsPrime(99894)', False);
  Test({LINENUM}21336, 'IsPrime(99895)', False);
  Test({LINENUM}21337, 'IsPrime(99896)', False);
  Test({LINENUM}21338, 'IsPrime(99897)', False);
  Test({LINENUM}21339, 'IsPrime(99898)', False);
  Test({LINENUM}21340, 'IsPrime(99899)', False);
  Test({LINENUM}21341, 'IsPrime(99900)', False);
  Test({LINENUM}21342, 'IsPrime(99901)', True);
  Test({LINENUM}21343, 'IsPrime(99902)', False);
  Test({LINENUM}21344, 'IsPrime(99903)', False);
  Test({LINENUM}21345, 'IsPrime(99904)', False);
  Test({LINENUM}21346, 'IsPrime(99905)', False);
  Test({LINENUM}21347, 'IsPrime(99906)', False);
  Test({LINENUM}21348, 'IsPrime(99907)', True);

  Test({LINENUM}21350, 'IsPrime(1000000000000000000)', False); // because the first prime to be tested, 2, will show it isn't prime

  Test({LINENUM}21352, 'IsPrime(574298344)', False);
  Test({LINENUM}21353, 'IsPrime(574298345)', False);
  Test({LINENUM}21354, 'IsPrime(574298346)', False);
  Test({LINENUM}21355, 'IsPrime(574298347)', False);
  Test({LINENUM}21356, 'IsPrime(574298348)', False);
  Test({LINENUM}21357, 'IsPrime(574298349)', False);
  Test({LINENUM}21358, 'IsPrime(574298350)', False);
  Test({LINENUM}21359, 'IsPrime(574298351)', False);
  Test({LINENUM}21360, 'IsPrime(574298352)', False);
  Test({LINENUM}21361, 'IsPrime(574298353)', True);
  Test({LINENUM}21362, 'IsPrime(574298354)', False);
  Test({LINENUM}21363, 'IsPrime(574298355)', False);
  Test({LINENUM}21364, 'IsPrime(574298356)', False);
  Test({LINENUM}21365, 'IsPrime(574298357)', False);
  Test({LINENUM}21366, 'IsPrime(574298358)', False);
  Test({LINENUM}21367, 'IsPrime(574298359)', True);
  Test({LINENUM}21368, 'IsPrime(574298360)', False);
  Test({LINENUM}21369, 'IsPrime(574298361)', False);
  Test({LINENUM}21370, 'IsPrime(574298362)', False);
  Test({LINENUM}21371, 'IsPrime(574298363)', False);
  Test({LINENUM}21372, 'IsPrime(574298364)', False);
  Test({LINENUM}21373, 'IsPrime(574298365)', False);
  Test({LINENUM}21374, 'IsPrime(574298366)', False);
  Test({LINENUM}21375, 'IsPrime(574298367)', False);
  Test({LINENUM}21376, 'IsPrime(574298368)', False);
  Test({LINENUM}21377, 'IsPrime(574298369)', False);
  Test({LINENUM}21378, 'IsPrime(574298370)', False);
  Test({LINENUM}21379, 'IsPrime(574298371)', True);
  Test({LINENUM}21380, 'IsPrime(574298372)', False);
  Test({LINENUM}21381, 'IsPrime(574298373)', False);
  Test({LINENUM}21382, 'IsPrime(574298374)', False);
  Test({LINENUM}21383, 'IsPrime(574298375)', False);
  Test({LINENUM}21384, 'IsPrime(574298376)', False);

  Test({LINENUM}21386, 'IsPrime(253241523120330)', False);
  Test({LINENUM}21387, 'IsPrime(253241523120331)', False);
  Test({LINENUM}21388, 'IsPrime(253241523120332)', False);
  Test({LINENUM}21389, 'IsPrime(253241523120333)', False);
  Test({LINENUM}21390, 'IsPrime(253241523120334)', False);
  Test({LINENUM}21391, 'IsPrime(253241523120335)', False);
  Test({LINENUM}21392, 'IsPrime(253241523120336)', False);
  Test({LINENUM}21393, 'IsPrime(253241523120337)', True);
  Test({LINENUM}21394, 'IsPrime(253241523120338)', False);
  Test({LINENUM}21395, 'IsPrime(253241523120339)', False);
  Test({LINENUM}21396, 'IsPrime(253241523120340)', False);
  Test({LINENUM}21397, 'IsPrime(253241523120341)', False);
  Test({LINENUM}21398, 'IsPrime(253241523120342)', False);
  Test({LINENUM}21399, 'IsPrime(253241523120343)', False);

  Test({LINENUM}21401, 'IsPrime(11253241543723530)', False);
  Test({LINENUM}21402, 'IsPrime(11253241543723531)', False);
  Test({LINENUM}21403, 'IsPrime(11253241543723532)', False);
  Test({LINENUM}21404, 'IsPrime(11253241543723533)', False);
  Test({LINENUM}21405, 'IsPrime(11253241543723534)', False);
  Test({LINENUM}21406, 'IsPrime(11253241543723535)', False);
  Test({LINENUM}21407, 'IsPrime(11253241543723536)', False);
  Test({LINENUM}21408, 'IsPrime(11253241543723537)', True);
  Test({LINENUM}21409, 'IsPrime(11253241543723538)', False);
  Test({LINENUM}21410, 'IsPrime(11253241543723539)', False);
  Test({LINENUM}21411, 'IsPrime(11253241543723540)', False);
  Test({LINENUM}21412, 'IsPrime(11253241543723541)', False);
  Test({LINENUM}21413, 'IsPrime(11253241543723542)', False);
  Test({LINENUM}21414, 'IsPrime(11253241543723543)', False);
  Test({LINENUM}21415, 'IsPrime(11253241543723544)', False);

  Test({LINENUM}21417, 'IsPrime(51213576)', False);
  Test({LINENUM}21418, 'IsPrime(51213577)', False);
  Test({LINENUM}21419, 'IsPrime(51213578)', False);
  Test({LINENUM}21420, 'IsPrime(51213579)', False);
  Test({LINENUM}21421, 'IsPrime(51213580)', False);
  Test({LINENUM}21422, 'IsPrime(51213581)', False);
  Test({LINENUM}21423, 'IsPrime(51213582)', False);
  Test({LINENUM}21424, 'IsPrime(51213583)', True);
  Test({LINENUM}21425, 'IsPrime(51213584)', False);
  Test({LINENUM}21426, 'IsPrime(51213585)', False);
  Test({LINENUM}21427, 'IsPrime(51213586)', False);
  Test({LINENUM}21428, 'IsPrime(51213587)', False);
  Test({LINENUM}21429, 'IsPrime(51213588)', False);
  Test({LINENUM}21430, 'IsPrime(51213589)', False);
  Test({LINENUM}21431, 'IsPrime(51213590)', False);

  Test({LINENUM}21433, 'IsPrime(-11253241543723537)', False);
  Test({LINENUM}21434, 'IsPrime(-51213583)', False);

{$IFNDEF QuickTest}
  Test({LINENUM}21437, 'IsPrime(611253241543723537)', False);
  Test({LINENUM}21438, 'IsPrime(611253241543723538)', False);
  Test({LINENUM}21439, 'IsPrime(611253241543723539)', False);
  Test({LINENUM}21440, 'IsPrime(611253241543723540)', False);
  Test({LINENUM}21441, 'IsPrime(611253241543723541)', False);
  Test({LINENUM}21442, 'IsPrime(611253241543723542)', False);
  Test({LINENUM}21443, 'IsPrime(611253241543723543)', False);
  Test({LINENUM}21444, 'IsPrime(611253241543723544)', False);
  Test({LINENUM}21445, 'IsPrime(611253241543723545)', False);
  Test({LINENUM}21446, 'IsPrime(611253241543723546)', False);
  Test({LINENUM}21447, 'IsPrime(611253241543723547)', False);
  Test({LINENUM}21448, 'IsPrime(611253241543723548)', False);
  Test({LINENUM}21449, 'IsPrime(611253241543723549)', False);
  Test({LINENUM}21450, 'IsPrime(611253241543723550)', False);
  Test({LINENUM}21451, 'IsPrime(611253241543723551)', False);
  Test({LINENUM}21452, 'IsPrime(611253241543723552)', False);
  Test({LINENUM}21453, 'IsPrime(611253241543723553)', False);
  Test({LINENUM}21454, 'IsPrime(611253241543723554)', False);
  Test({LINENUM}21455, 'IsPrime(611253241543723555)', False);
  Test({LINENUM}21456, 'IsPrime(611253241543723556)', False);
  Test({LINENUM}21457, 'IsPrime(611253241543723557)', False);
  Test({LINENUM}21458, 'IsPrime(611253241543723558)', False);
  Test({LINENUM}21459, 'IsPrime(611253241543723559)', False);
  Test({LINENUM}21460, 'IsPrime(611253241543723560)', False);
  Test({LINENUM}21461, 'IsPrime(611253241543723561)', False);
  Test({LINENUM}21462, 'IsPrime(611253241543723562)', False);
  Test({LINENUM}21463, 'IsPrime(611253241543723563)', False);
  Test({LINENUM}21464, 'IsPrime(611253241543723564)', False);
  Test({LINENUM}21465, 'IsPrime(611253241543723565)', False);
  Test({LINENUM}21466, 'IsPrime(611253241543723566)', False);
  Test({LINENUM}21467, 'IsPrime(611253241543723567)', True);
  Test({LINENUM}21468, 'IsPrime(611253241543723568)', False);
  Test({LINENUM}21469, 'IsPrime(611253241543723569)', False);
  Test({LINENUM}21470, 'IsPrime(611253241543723570)', False);
  Test({LINENUM}21471, 'IsPrime(611253241543723571)', False);
  Test({LINENUM}21472, 'IsPrime(611253241543723572)', False);
  Test({LINENUM}21473, 'IsPrime(611253241543723573)', False);
  Test({LINENUM}21474, 'IsPrime(611253241543723574)', False);
  Test({LINENUM}21475, 'IsPrime(611253241543723575)', False);
  Test({LINENUM}21476, 'IsPrime(611253241543723576)', False);
  Test({LINENUM}21477, 'IsPrime(611253241543723577)', True);
  Test({LINENUM}21478, 'IsPrime(611253241543723578)', False);
  Test({LINENUM}21479, 'IsPrime(611253241543723579)', False);
  Test({LINENUM}21480, 'IsPrime(611253241543723580)', False);
{$ENDIF}

  Test({LINENUM}21483, 'IsPrime(1000000000000000001)', failure, 'Cannot test integers this large for primality.');
  Test({LINENUM}21484, 'IsPrime(1611253241543723539)', failure, 'Cannot test integers this large for primality.');
  Test({LINENUM}21485, 'IsPrime(18611253241543723539)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}21487, 'IsPrime(-3)', False);
  Test({LINENUM}21488, 'IsPrime(-3000000)', False);
  Test({LINENUM}21489, 'IsPrime(3.5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}21490, 'IsPrime(2, 3)', failure, 'Too many arguments.');
  Test({LINENUM}21491, 'IsPrime()', failure, 'A required argument of type integer is missing.');

  for _i := 1 to Length(SmallPrimes) do
    Test({LINENUM}21494, 'prime(' + _i.ToString + ')', SmallPrimes[_i - 1]);

  Test({LINENUM}21496, 'prime(10000)', 104729);

  Test({LINENUM}21498, 'prime(0)', failure, 'To obtain the Nth prime number, N must be a positive integer.');
  Test({LINENUM}21499, 'prime(-1)', failure, 'To obtain the Nth prime number, N must be a positive integer.');
  Test({LINENUM}21500, 'prime(-10000000000)', failure, 'To obtain the Nth prime number, N must be a positive integer.');

  Test({LINENUM}21502, 'prime(3.5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}21503, 'prime(2, 3)', failure, 'Too many arguments.');
  Test({LINENUM}21504, 'prime()', failure, 'A required argument of type integer is missing.');

{$IFNDEF QuickTest}
  Test({LINENUM}21507, 'prime(20000)', 224737);
  Test({LINENUM}21508, 'prime(50000)', 611953);
  Test({LINENUM}21509, 'prime(100000)', 1299709);
  Test({LINENUM}21510, 'prime(200000)', 2750159);
  Test({LINENUM}21511, 'prime(500000)', 7368787);
  Test({LINENUM}21512, 'prime(1000000)', 15485863);
  Test({LINENUM}21513, 'prime(2000000)', 32452843);
  Test({LINENUM}21514, 'prime(5000000)', 86028121);
  Test({LINENUM}21515, 'prime(10000000)', 179424673);
  Test({LINENUM}21516, 'prime(20000000)', 373587883);
  Test({LINENUM}21517, 'prime(50000000)', 982451653);
  Test({LINENUM}21518, 'prime(100000000)', failure, 'Cannot test integers this large for primality.');
{$ENDIF}

  Test({LINENUM}21521, 'NextPrime(-5)', 2);
  Test({LINENUM}21522, 'NextPrime(0)', 2);
  Test({LINENUM}21523, 'NextPrime(2)', 3);
  Test({LINENUM}21524, 'NextPrime(3)', 5);
  Test({LINENUM}21525, 'NextPrime(4)', 5);
  Test({LINENUM}21526, 'NextPrime(5)', 7);
  Test({LINENUM}21527, 'NextPrime(90)', 97);
  Test({LINENUM}21528, 'NextPrime(97)', 101);
  Test({LINENUM}21529, 'NextPrime(50000)', 50021);
  Test({LINENUM}21530, 'NextPrime(50010)', 50021);
  Test({LINENUM}21531, 'NextPrime(50021)', 50023);

  Test({LINENUM}21533, 'NextPrime(536281473)', 536281511);

{$IFNDEF QuickTest}
  Test({LINENUM}21536, 'NextPrime(11253241543723530)', 11253241543723537);
  Test({LINENUM}21537, 'NextPrime(11253241543723531)', 11253241543723537);
  Test({LINENUM}21538, 'NextPrime(11253241543723532)', 11253241543723537);
  Test({LINENUM}21539, 'NextPrime(11253241543723533)', 11253241543723537);
  Test({LINENUM}21540, 'NextPrime(11253241543723534)', 11253241543723537);
  Test({LINENUM}21541, 'NextPrime(11253241543723535)', 11253241543723537);
  Test({LINENUM}21542, 'NextPrime(11253241543723536)', 11253241543723537);
  Test({LINENUM}21543, 'NextPrime(11253241543723537)', 11253241543723549);
  Test({LINENUM}21544, 'NextPrime(1500000000000000000)', failure, 'Cannot test integers this large for primality.');
{$ENDIF}

  Test({LINENUM}21547, 'PrevPrime(-45)', failure, 'There are no prime numbers smaller than 2.');
  Test({LINENUM}21548, 'PrevPrime(-1)', failure, 'There are no prime numbers smaller than 2.');
  Test({LINENUM}21549, 'PrevPrime(0)', failure, 'There are no prime numbers smaller than 2.');
  Test({LINENUM}21550, 'PrevPrime(1)', failure, 'There are no prime numbers smaller than 2.');
  Test({LINENUM}21551, 'PrevPrime(2)', failure, 'There are no prime numbers smaller than 2.');
  Test({LINENUM}21552, 'PrevPrime(3)', 2);
  Test({LINENUM}21553, 'PrevPrime(4)', 3);
  Test({LINENUM}21554, 'PrevPrime(5)', 3);
  Test({LINENUM}21555, 'PrevPrime(6)', 5);
  Test({LINENUM}21556, 'PrevPrime(7)', 5);
  Test({LINENUM}21557, 'PrevPrime(8)', 7);
  Test({LINENUM}21558, 'PrevPrime(9)', 7);
  Test({LINENUM}21559, 'PrevPrime(10)', 7);
  Test({LINENUM}21560, 'PrevPrime(11)', 7);
  Test({LINENUM}21561, 'PrevPrime(12)', 11);
  Test({LINENUM}21562, 'PrevPrime(100)', 97);
  Test({LINENUM}21563, 'PrevPrime(60000)', 59999);
  Test({LINENUM}21564, 'PrevPrime(59999)', 59981);
  Test({LINENUM}21565, 'PrevPrime(59981)', 59971);
  Test({LINENUM}21566, 'PrevPrime(59980)', 59971);

{$IFNDEF QuickTest}
  Test({LINENUM}21569, 'PrevPrime(8441167879117811)', 8441167879117751);
  Test({LINENUM}21570, 'PrevPrime(8441167879117811121)', failure, 'Cannot test integers this large for primality.');
{$ENDIF}

  Test({LINENUM}21573, 'PrevPrime(84411678791)', 84411678787);
  Test({LINENUM}21574, 'PrevPrime(84411678787)', 84411678737);

  Test({LINENUM}21576, 'NextPrime(3.5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}21577, 'NextPrime(2, 3)', failure, 'Too many arguments.');
  Test({LINENUM}21578, 'NextPrime()', failure, 'A required argument of type integer is missing.');

  Test({LINENUM}21580, 'PrevPrime(3.5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}21581, 'PrevPrime(2, 3)', failure, 'Too many arguments.');
  Test({LINENUM}21582, 'PrevPrime()', failure, 'A required argument of type integer is missing.');

{$IFNDEF QuickTest}
  Test({LINENUM}21585, 'NextPrime(574298344)', 574298353);
  Test({LINENUM}21586, 'NextPrime(574298353)', 574298359);
  Test({LINENUM}21587, 'PrevPrime(574298357)', 574298353);
  Test({LINENUM}21588, 'PrevPrime(574298375)', 574298371);

  Test({LINENUM}21590, 'IsPrime(0999999935)', False);
  Test({LINENUM}21591, 'IsPrime(0999999936)', False);
  Test({LINENUM}21592, 'IsPrime(0999999937)', True);
  Test({LINENUM}21593, 'IsPrime(0999999938)', False);
  Test({LINENUM}21594, 'IsPrime(0999999939)', False);
  Test({LINENUM}21595, 'IsPrime(0999999995)', False);
  Test({LINENUM}21596, 'IsPrime(0999999996)', False);
  Test({LINENUM}21597, 'IsPrime(0999999997)', False);
  Test({LINENUM}21598, 'IsPrime(0999999998)', False);
  Test({LINENUM}21599, 'IsPrime(0999999999)', False);
  Test({LINENUM}21600, 'IsPrime(1000000000)', False);

  Test({LINENUM}21602, 'IsPrime(25324152301)', False);
  Test({LINENUM}21603, 'IsPrime(25324152302)', False);
  Test({LINENUM}21604, 'IsPrime(25324152303)', False);
  Test({LINENUM}21605, 'IsPrime(25324152304)', False);
  Test({LINENUM}21606, 'IsPrime(25324152305)', False);
  Test({LINENUM}21607, 'IsPrime(25324152306)', False);
  Test({LINENUM}21608, 'IsPrime(25324152307)', True);
  Test({LINENUM}21609, 'IsPrime(25324152308)', False);
  Test({LINENUM}21610, 'IsPrime(25324152309)', False);
  Test({LINENUM}21611, 'IsPrime(25324152310)', False);
  Test({LINENUM}21612, 'IsPrime(25324152311)', False);
  Test({LINENUM}21613, 'IsPrime(25324152312)', False);

  Test({LINENUM}21615, 'IsPrime(6523847052383)', False);
  Test({LINENUM}21616, 'IsPrime(6523847052384)', False);
  Test({LINENUM}21617, 'IsPrime(6523847052385)', False);
  Test({LINENUM}21618, 'IsPrime(6523847052386)', False);
  Test({LINENUM}21619, 'IsPrime(6523847052387)', False);
  Test({LINENUM}21620, 'IsPrime(6523847052388)', False);
  Test({LINENUM}21621, 'IsPrime(6523847052389)', True);
  Test({LINENUM}21622, 'IsPrime(6523847052390)', False);
  Test({LINENUM}21623, 'IsPrime(6523847052391)', False);
  Test({LINENUM}21624, 'IsPrime(6523847052392)', False);
  Test({LINENUM}21625, 'IsPrime(6523847052393)', False);
  Test({LINENUM}21626, 'IsPrime(6523847052394)', False);

  Test({LINENUM}21628, 'IsPrime(695235874512176)', False);
  Test({LINENUM}21629, 'IsPrime(695235874512177)', False);
  Test({LINENUM}21630, 'IsPrime(695235874512178)', False);
  Test({LINENUM}21631, 'IsPrime(695235874512179)', False);
  Test({LINENUM}21632, 'IsPrime(695235874512180)', False);
  Test({LINENUM}21633, 'IsPrime(695235874512181)', True);
  Test({LINENUM}21634, 'IsPrime(695235874512182)', False);
  Test({LINENUM}21635, 'IsPrime(695235874512183)', False);
  Test({LINENUM}21636, 'IsPrime(695235874512184)', False);
  Test({LINENUM}21637, 'IsPrime(695235874512185)', False);
  Test({LINENUM}21638, 'IsPrime(695235874512186)', False);

  Test({LINENUM}21640, 'IsPrime(12032578956417524)', False);
  Test({LINENUM}21641, 'IsPrime(12032578956417525)', False);
  Test({LINENUM}21642, 'IsPrime(12032578956417526)', False);
  Test({LINENUM}21643, 'IsPrime(12032578956417527)', False);
  Test({LINENUM}21644, 'IsPrime(12032578956417528)', False);
  Test({LINENUM}21645, 'IsPrime(12032578956417529)', True);
  Test({LINENUM}21646, 'IsPrime(12032578956417530)', False);
  Test({LINENUM}21647, 'IsPrime(12032578956417531)', False);
  Test({LINENUM}21648, 'IsPrime(12032578956417532)', False);
  Test({LINENUM}21649, 'IsPrime(12032578956417533)', False);
  Test({LINENUM}21650, 'IsPrime(12032578956417534)', False);

  Test({LINENUM}21652, 'prime(50847532)', 999999893);
  Test({LINENUM}21653, 'prime(50847533)', 999999929);
  Test({LINENUM}21654, 'prime(50847534)', 999999937);

  Test({LINENUM}21656, 'NextPrime(0999999935)', 0999999937);

  Test({LINENUM}21658, 'PrevPrime(0999999932)', 0999999929);
  Test({LINENUM}21659, 'PrevPrime(0999999937)', 0999999929);
  Test({LINENUM}21660, 'PrevPrime(0999999938)', 0999999937);
  Test({LINENUM}21661, 'PrevPrime(0999999996)', 0999999937);
  Test({LINENUM}21662, 'PrevPrime(1000000000)', 0999999937);
  Test({LINENUM}21663, 'PrevPrime(1000000001)', 0999999937);

{$ENDIF}

  Test({LINENUM}21667, 'PrimePi(-4000000000000000    )', 0);
  Test({LINENUM}21668, 'PrimePi(-3    )', 0);
  Test({LINENUM}21669, 'PrimePi(-2    )', 0);
  Test({LINENUM}21670, 'PrimePi(-1    )', 0);
  Test({LINENUM}21671, 'PrimePi( 0    )', 0);
  Test({LINENUM}21672, 'PrimePi( 1    )', 0);
  Test({LINENUM}21673, 'PrimePi( 2    )', 1);
  Test({LINENUM}21674, 'PrimePi( 3    )', 2);
  Test({LINENUM}21675, 'PrimePi( 4    )', 2);
  Test({LINENUM}21676, 'PrimePi( 5    )', 3);
  Test({LINENUM}21677, 'PrimePi( 6    )', 3);
  Test({LINENUM}21678, 'PrimePi( 7    )', 4);
  Test({LINENUM}21679, 'PrimePi( 8    )', 4);
  Test({LINENUM}21680, 'PrimePi( 9    )', 4);
  Test({LINENUM}21681, 'PrimePi( 10   )', 4);
  Test({LINENUM}21682, 'PrimePi( 11   )', 5);
  Test({LINENUM}21683, 'PrimePi( 12   )', 5);
  Test({LINENUM}21684, 'PrimePi( 13   )', 6);
  Test({LINENUM}21685, 'PrimePi( 14   )', 6);
  Test({LINENUM}21686, 'PrimePi( 15   )', 6);
  Test({LINENUM}21687, 'PrimePi( 16   )', 6);
  Test({LINENUM}21688, 'PrimePi( 17   )', 7);
  Test({LINENUM}21689, 'PrimePi( 18   )', 7);
  Test({LINENUM}21690, 'PrimePi( 19   )', 8);
  Test({LINENUM}21691, 'PrimePi( 20   )', 8);
  Test({LINENUM}21692, 'PrimePi( 21   )', 8);
  Test({LINENUM}21693, 'PrimePi( 22   )', 8);
  Test({LINENUM}21694, 'PrimePi( 23   )', 9);
  Test({LINENUM}21695, 'PrimePi( 24   )', 9);
  Test({LINENUM}21696, 'PrimePi( 25   )', 9);
  Test({LINENUM}21697, 'PrimePi( 26   )', 9);
  Test({LINENUM}21698, 'PrimePi( 27   )', 9);
  Test({LINENUM}21699, 'PrimePi( 28   )', 9);
  Test({LINENUM}21700, 'PrimePi( 29   )', 10);
  Test({LINENUM}21701, 'PrimePi( 30   )', 10);
  Test({LINENUM}21702, 'PrimePi( 31   )', 11);
  Test({LINENUM}21703, 'PrimePi( 32   )', 11);
  Test({LINENUM}21704, 'PrimePi( 33   )', 11);
  Test({LINENUM}21705, 'PrimePi( 34   )', 11);
  Test({LINENUM}21706, 'PrimePi( 35   )', 11);
  Test({LINENUM}21707, 'PrimePi( 36   )', 11);
  Test({LINENUM}21708, 'PrimePi( 37   )', 12);
  Test({LINENUM}21709, 'PrimePi( 38   )', 12);
  Test({LINENUM}21710, 'PrimePi( 39   )', 12);
  Test({LINENUM}21711, 'PrimePi( 40   )', 12);
  Test({LINENUM}21712, 'PrimePi( 41   )', 13);
  Test({LINENUM}21713, 'PrimePi( 42   )', 13);
  Test({LINENUM}21714, 'PrimePi( 43   )', 14);
  Test({LINENUM}21715, 'PrimePi( 44   )', 14);
  Test({LINENUM}21716, 'PrimePi( 45   )', 14);
  Test({LINENUM}21717, 'PrimePi( 46   )', 14);
  Test({LINENUM}21718, 'PrimePi( 47   )', 15);
  Test({LINENUM}21719, 'PrimePi( 48   )', 15);
  Test({LINENUM}21720, 'PrimePi( 49   )', 15);
  Test({LINENUM}21721, 'PrimePi( 50   )', 15);
  Test({LINENUM}21722, 'PrimePi( 51   )', 15);
  Test({LINENUM}21723, 'PrimePi( 52   )', 15);
  Test({LINENUM}21724, 'PrimePi( 53   )', 16);
  Test({LINENUM}21725, 'PrimePi( 54   )', 16);
  Test({LINENUM}21726, 'PrimePi( 55   )', 16);
  Test({LINENUM}21727, 'PrimePi( 56   )', 16);
  Test({LINENUM}21728, 'PrimePi( 57   )', 16);
  Test({LINENUM}21729, 'PrimePi( 58   )', 16);
  Test({LINENUM}21730, 'PrimePi( 59   )', 17);
  Test({LINENUM}21731, 'PrimePi( 60   )', 17);
  Test({LINENUM}21732, 'PrimePi( 61   )', 18);
  Test({LINENUM}21733, 'PrimePi( 62   )', 18);
  Test({LINENUM}21734, 'PrimePi( 63   )', 18);
  Test({LINENUM}21735, 'PrimePi( 64   )', 18);
  Test({LINENUM}21736, 'PrimePi( 65   )', 18);
  Test({LINENUM}21737, 'PrimePi( 66   )', 18);
  Test({LINENUM}21738, 'PrimePi( 67   )', 19);
  Test({LINENUM}21739, 'PrimePi( 68   )', 19);
  Test({LINENUM}21740, 'PrimePi( 69   )', 19);
  Test({LINENUM}21741, 'PrimePi( 70   )', 19);
  Test({LINENUM}21742, 'PrimePi( 71   )', 20);
  Test({LINENUM}21743, 'PrimePi( 72   )', 20);
  Test({LINENUM}21744, 'PrimePi( 73   )', 21);
  Test({LINENUM}21745, 'PrimePi( 74   )', 21);
  Test({LINENUM}21746, 'PrimePi( 75   )', 21);
  Test({LINENUM}21747, 'PrimePi( 76   )', 21);
  Test({LINENUM}21748, 'PrimePi( 77   )', 21);
  Test({LINENUM}21749, 'PrimePi( 78   )', 21);
  Test({LINENUM}21750, 'PrimePi( 79   )', 22);
  Test({LINENUM}21751, 'PrimePi( 80   )', 22);
  Test({LINENUM}21752, 'PrimePi( 81   )', 22);
  Test({LINENUM}21753, 'PrimePi( 82   )', 22);
  Test({LINENUM}21754, 'PrimePi( 83   )', 23);
  Test({LINENUM}21755, 'PrimePi( 84   )', 23);
  Test({LINENUM}21756, 'PrimePi( 85   )', 23);
  Test({LINENUM}21757, 'PrimePi( 86   )', 23);
  Test({LINENUM}21758, 'PrimePi( 87   )', 23);
  Test({LINENUM}21759, 'PrimePi( 88   )', 23);
  Test({LINENUM}21760, 'PrimePi( 89   )', 24);
  Test({LINENUM}21761, 'PrimePi( 90   )', 24);
  Test({LINENUM}21762, 'PrimePi( 91   )', 24);
  Test({LINENUM}21763, 'PrimePi( 92   )', 24);
  Test({LINENUM}21764, 'PrimePi( 93   )', 24);
  Test({LINENUM}21765, 'PrimePi( 94   )', 24);
  Test({LINENUM}21766, 'PrimePi( 95   )', 24);
  Test({LINENUM}21767, 'PrimePi( 96   )', 24);
  Test({LINENUM}21768, 'PrimePi( 97   )', 25);
  Test({LINENUM}21769, 'PrimePi( 98   )', 25);
  Test({LINENUM}21770, 'PrimePi( 99   )', 25);
  Test({LINENUM}21771, 'PrimePi( 100  )', 25);
  Test({LINENUM}21772, 'PrimePi( 101  )', 26);
  Test({LINENUM}21773, 'PrimePi( 102  )', 26);
  Test({LINENUM}21774, 'PrimePi( 103  )', 27);
  Test({LINENUM}21775, 'PrimePi( 104  )', 27);
  Test({LINENUM}21776, 'PrimePi( 105  )', 27);
  Test({LINENUM}21777, 'PrimePi( 106  )', 27);
  Test({LINENUM}21778, 'PrimePi( 107  )', 28);
  Test({LINENUM}21779, 'PrimePi( 108  )', 28);
  Test({LINENUM}21780, 'PrimePi( 109  )', 29);
  Test({LINENUM}21781, 'PrimePi( 110  )', 29);
  Test({LINENUM}21782, 'PrimePi( 111  )', 29);
  Test({LINENUM}21783, 'PrimePi( 112  )', 29);
  Test({LINENUM}21784, 'PrimePi( 113  )', 30);
  Test({LINENUM}21785, 'PrimePi( 114  )', 30);
  Test({LINENUM}21786, 'PrimePi( 115  )', 30);
  Test({LINENUM}21787, 'PrimePi( 116  )', 30);
  Test({LINENUM}21788, 'PrimePi( 117  )', 30);
  Test({LINENUM}21789, 'PrimePi( 118  )', 30);
  Test({LINENUM}21790, 'PrimePi( 119  )', 30);
  Test({LINENUM}21791, 'PrimePi( 120  )', 30);
  Test({LINENUM}21792, 'PrimePi( 121  )', 30);
  Test({LINENUM}21793, 'PrimePi( 122  )', 30);
  Test({LINENUM}21794, 'PrimePi( 123  )', 30);
  Test({LINENUM}21795, 'PrimePi( 124  )', 30);
  Test({LINENUM}21796, 'PrimePi( 125  )', 30);
  Test({LINENUM}21797, 'PrimePi( 126  )', 30);
  Test({LINENUM}21798, 'PrimePi( 127  )', 31);
  Test({LINENUM}21799, 'PrimePi( 128  )', 31);
  Test({LINENUM}21800, 'PrimePi( 129  )', 31);
  Test({LINENUM}21801, 'PrimePi( 130  )', 31);
  Test({LINENUM}21802, 'PrimePi( 131  )', 32);
  Test({LINENUM}21803, 'PrimePi( 132  )', 32);
  Test({LINENUM}21804, 'PrimePi( 133  )', 32);
  Test({LINENUM}21805, 'PrimePi( 134  )', 32);
  Test({LINENUM}21806, 'PrimePi( 135  )', 32);
  Test({LINENUM}21807, 'PrimePi( 136  )', 32);
  Test({LINENUM}21808, 'PrimePi( 137  )', 33);
  Test({LINENUM}21809, 'PrimePi( 138  )', 33);
  Test({LINENUM}21810, 'PrimePi( 139  )', 34);
  Test({LINENUM}21811, 'PrimePi( 140  )', 34);
  Test({LINENUM}21812, 'PrimePi( 141  )', 34);
  Test({LINENUM}21813, 'PrimePi( 142  )', 34);
  Test({LINENUM}21814, 'PrimePi( 143  )', 34);
  Test({LINENUM}21815, 'PrimePi( 144  )', 34);
  Test({LINENUM}21816, 'PrimePi( 145  )', 34);
  Test({LINENUM}21817, 'PrimePi( 146  )', 34);
  Test({LINENUM}21818, 'PrimePi( 147  )', 34);
  Test({LINENUM}21819, 'PrimePi( 148  )', 34);
  Test({LINENUM}21820, 'PrimePi( 149  )', 35);
  Test({LINENUM}21821, 'PrimePi( 150  )', 35);
  Test({LINENUM}21822, 'PrimePi( 151  )', 36);
  Test({LINENUM}21823, 'PrimePi( 152  )', 36);
  Test({LINENUM}21824, 'PrimePi( 153  )', 36);
  Test({LINENUM}21825, 'PrimePi( 154  )', 36);
  Test({LINENUM}21826, 'PrimePi( 155  )', 36);
  Test({LINENUM}21827, 'PrimePi( 156  )', 36);
  Test({LINENUM}21828, 'PrimePi( 157  )', 37);
  Test({LINENUM}21829, 'PrimePi( 158  )', 37);
  Test({LINENUM}21830, 'PrimePi( 159  )', 37);
  Test({LINENUM}21831, 'PrimePi( 160  )', 37);
  Test({LINENUM}21832, 'PrimePi( 161  )', 37);
  Test({LINENUM}21833, 'PrimePi( 162  )', 37);
  Test({LINENUM}21834, 'PrimePi( 163  )', 38);
  Test({LINENUM}21835, 'PrimePi( 164  )', 38);
  Test({LINENUM}21836, 'PrimePi( 165  )', 38);
  Test({LINENUM}21837, 'PrimePi( 166  )', 38);
  Test({LINENUM}21838, 'PrimePi( 167  )', 39);
  Test({LINENUM}21839, 'PrimePi( 168  )', 39);
  Test({LINENUM}21840, 'PrimePi( 169  )', 39);
  Test({LINENUM}21841, 'PrimePi( 170  )', 39);
  Test({LINENUM}21842, 'PrimePi( 171  )', 39);
  Test({LINENUM}21843, 'PrimePi( 172  )', 39);
  Test({LINENUM}21844, 'PrimePi( 173  )', 40);
  Test({LINENUM}21845, 'PrimePi( 174  )', 40);
  Test({LINENUM}21846, 'PrimePi( 175  )', 40);
  Test({LINENUM}21847, 'PrimePi( 176  )', 40);
  Test({LINENUM}21848, 'PrimePi( 177  )', 40);
  Test({LINENUM}21849, 'PrimePi( 178  )', 40);
  Test({LINENUM}21850, 'PrimePi( 179  )', 41);
  Test({LINENUM}21851, 'PrimePi( 180  )', 41);
  Test({LINENUM}21852, 'PrimePi( 181  )', 42);
  Test({LINENUM}21853, 'PrimePi( 182  )', 42);
  Test({LINENUM}21854, 'PrimePi( 183  )', 42);
  Test({LINENUM}21855, 'PrimePi( 184  )', 42);
  Test({LINENUM}21856, 'PrimePi( 185  )', 42);
  Test({LINENUM}21857, 'PrimePi( 186  )', 42);
  Test({LINENUM}21858, 'PrimePi( 187  )', 42);
  Test({LINENUM}21859, 'PrimePi( 188  )', 42);
  Test({LINENUM}21860, 'PrimePi( 189  )', 42);
  Test({LINENUM}21861, 'PrimePi( 190  )', 42);
  Test({LINENUM}21862, 'PrimePi( 191  )', 43);
  Test({LINENUM}21863, 'PrimePi( 192  )', 43);
  Test({LINENUM}21864, 'PrimePi( 193  )', 44);
  Test({LINENUM}21865, 'PrimePi( 194  )', 44);
  Test({LINENUM}21866, 'PrimePi( 195  )', 44);
  Test({LINENUM}21867, 'PrimePi( 196  )', 44);
  Test({LINENUM}21868, 'PrimePi( 197  )', 45);
  Test({LINENUM}21869, 'PrimePi( 198  )', 45);
  Test({LINENUM}21870, 'PrimePi( 199  )', 46);
  Test({LINENUM}21871, 'PrimePi( 200  )', 46);
  Test({LINENUM}21872, 'PrimePi( 201  )', 46);
  Test({LINENUM}21873, 'PrimePi( 202  )', 46);
  Test({LINENUM}21874, 'PrimePi( 203  )', 46);
  Test({LINENUM}21875, 'PrimePi( 204  )', 46);
  Test({LINENUM}21876, 'PrimePi( 205  )', 46);
  Test({LINENUM}21877, 'PrimePi( 206  )', 46);
  Test({LINENUM}21878, 'PrimePi( 207  )', 46);
  Test({LINENUM}21879, 'PrimePi( 208  )', 46);
  Test({LINENUM}21880, 'PrimePi( 209  )', 46);
  Test({LINENUM}21881, 'PrimePi( 210  )', 46);
  Test({LINENUM}21882, 'PrimePi( 211  )', 47);
  Test({LINENUM}21883, 'PrimePi( 212  )', 47);
  Test({LINENUM}21884, 'PrimePi( 213  )', 47);
  Test({LINENUM}21885, 'PrimePi( 214  )', 47);
  Test({LINENUM}21886, 'PrimePi( 215  )', 47);
  Test({LINENUM}21887, 'PrimePi( 216  )', 47);
  Test({LINENUM}21888, 'PrimePi( 217  )', 47);
  Test({LINENUM}21889, 'PrimePi( 218  )', 47);
  Test({LINENUM}21890, 'PrimePi( 219  )', 47);
  Test({LINENUM}21891, 'PrimePi( 220  )', 47);
  Test({LINENUM}21892, 'PrimePi( 221  )', 47);
  Test({LINENUM}21893, 'PrimePi( 222  )', 47);
  Test({LINENUM}21894, 'PrimePi( 223  )', 48);
  Test({LINENUM}21895, 'PrimePi( 224  )', 48);
  Test({LINENUM}21896, 'PrimePi( 225  )', 48);
  Test({LINENUM}21897, 'PrimePi( 226  )', 48);
  Test({LINENUM}21898, 'PrimePi( 227  )', 49);
  Test({LINENUM}21899, 'PrimePi( 228  )', 49);
  Test({LINENUM}21900, 'PrimePi( 229  )', 50);
  Test({LINENUM}21901, 'PrimePi( 230  )', 50);
  Test({LINENUM}21902, 'PrimePi( 231  )', 50);
  Test({LINENUM}21903, 'PrimePi( 232  )', 50);
  Test({LINENUM}21904, 'PrimePi( 233  )', 51);
  Test({LINENUM}21905, 'PrimePi( 234  )', 51);
  Test({LINENUM}21906, 'PrimePi( 235  )', 51);
  Test({LINENUM}21907, 'PrimePi( 236  )', 51);
  Test({LINENUM}21908, 'PrimePi( 237  )', 51);
  Test({LINENUM}21909, 'PrimePi( 238  )', 51);
  Test({LINENUM}21910, 'PrimePi( 239  )', 52);
  Test({LINENUM}21911, 'PrimePi( 240  )', 52);
  Test({LINENUM}21912, 'PrimePi( 241  )', 53);
  Test({LINENUM}21913, 'PrimePi( 242  )', 53);
  Test({LINENUM}21914, 'PrimePi( 243  )', 53);
  Test({LINENUM}21915, 'PrimePi( 244  )', 53);
  Test({LINENUM}21916, 'PrimePi( 245  )', 53);
  Test({LINENUM}21917, 'PrimePi( 246  )', 53);
  Test({LINENUM}21918, 'PrimePi( 247  )', 53);
  Test({LINENUM}21919, 'PrimePi( 248  )', 53);
  Test({LINENUM}21920, 'PrimePi( 249  )', 53);
  Test({LINENUM}21921, 'PrimePi( 250  )', 53);
  Test({LINENUM}21922, 'PrimePi( 251  )', 54);
  Test({LINENUM}21923, 'PrimePi( 252  )', 54);
  Test({LINENUM}21924, 'PrimePi( 253  )', 54);
  Test({LINENUM}21925, 'PrimePi( 254  )', 54);
  Test({LINENUM}21926, 'PrimePi( 255  )', 54);
  Test({LINENUM}21927, 'PrimePi( 256  )', 54);
  Test({LINENUM}21928, 'PrimePi( 257  )', 55);
  Test({LINENUM}21929, 'PrimePi( 258  )', 55);
  Test({LINENUM}21930, 'PrimePi( 259  )', 55);
  Test({LINENUM}21931, 'PrimePi( 260  )', 55);
  Test({LINENUM}21932, 'PrimePi( 261  )', 55);
  Test({LINENUM}21933, 'PrimePi( 262  )', 55);
  Test({LINENUM}21934, 'PrimePi( 263  )', 56);
  Test({LINENUM}21935, 'PrimePi( 264  )', 56);
  Test({LINENUM}21936, 'PrimePi( 265  )', 56);
  Test({LINENUM}21937, 'PrimePi( 266  )', 56);
  Test({LINENUM}21938, 'PrimePi( 267  )', 56);
  Test({LINENUM}21939, 'PrimePi( 268  )', 56);
  Test({LINENUM}21940, 'PrimePi( 269  )', 57);
  Test({LINENUM}21941, 'PrimePi( 270  )', 57);
  Test({LINENUM}21942, 'PrimePi( 271  )', 58);
  Test({LINENUM}21943, 'PrimePi( 272  )', 58);
  Test({LINENUM}21944, 'PrimePi( 273  )', 58);
  Test({LINENUM}21945, 'PrimePi( 274  )', 58);
  Test({LINENUM}21946, 'PrimePi( 275  )', 58);
  Test({LINENUM}21947, 'PrimePi( 276  )', 58);
  Test({LINENUM}21948, 'PrimePi( 277  )', 59);
  Test({LINENUM}21949, 'PrimePi( 278  )', 59);
  Test({LINENUM}21950, 'PrimePi( 279  )', 59);
  Test({LINENUM}21951, 'PrimePi( 280  )', 59);
  Test({LINENUM}21952, 'PrimePi( 281  )', 60);
  Test({LINENUM}21953, 'PrimePi( 282  )', 60);
  Test({LINENUM}21954, 'PrimePi( 283  )', 61);
  Test({LINENUM}21955, 'PrimePi( 284  )', 61);
  Test({LINENUM}21956, 'PrimePi( 285  )', 61);
  Test({LINENUM}21957, 'PrimePi( 286  )', 61);
  Test({LINENUM}21958, 'PrimePi( 287  )', 61);
  Test({LINENUM}21959, 'PrimePi( 288  )', 61);
  Test({LINENUM}21960, 'PrimePi( 289  )', 61);
  Test({LINENUM}21961, 'PrimePi( 290  )', 61);
  Test({LINENUM}21962, 'PrimePi( 291  )', 61);
  Test({LINENUM}21963, 'PrimePi( 292  )', 61);
  Test({LINENUM}21964, 'PrimePi( 293  )', 62);
  Test({LINENUM}21965, 'PrimePi( 294  )', 62);
  Test({LINENUM}21966, 'PrimePi( 295  )', 62);
  Test({LINENUM}21967, 'PrimePi( 296  )', 62);
  Test({LINENUM}21968, 'PrimePi( 297  )', 62);
  Test({LINENUM}21969, 'PrimePi( 298  )', 62);
  Test({LINENUM}21970, 'PrimePi( 299  )', 62);
  Test({LINENUM}21971, 'PrimePi( 300  )', 62);
  Test({LINENUM}21972, 'PrimePi( 301  )', 62);
  Test({LINENUM}21973, 'PrimePi( 302  )', 62);
  Test({LINENUM}21974, 'PrimePi( 303  )', 62);
  Test({LINENUM}21975, 'PrimePi( 304  )', 62);
  Test({LINENUM}21976, 'PrimePi( 305  )', 62);
  Test({LINENUM}21977, 'PrimePi( 306  )', 62);
  Test({LINENUM}21978, 'PrimePi( 307  )', 63);
  Test({LINENUM}21979, 'PrimePi( 308  )', 63);
  Test({LINENUM}21980, 'PrimePi( 309  )', 63);
  Test({LINENUM}21981, 'PrimePi( 310  )', 63);
  Test({LINENUM}21982, 'PrimePi( 311  )', 64);
  Test({LINENUM}21983, 'PrimePi( 312  )', 64);
  Test({LINENUM}21984, 'PrimePi( 313  )', 65);
  Test({LINENUM}21985, 'PrimePi( 314  )', 65);
  Test({LINENUM}21986, 'PrimePi( 315  )', 65);
  Test({LINENUM}21987, 'PrimePi( 316  )', 65);
  Test({LINENUM}21988, 'PrimePi( 317  )', 66);
  Test({LINENUM}21989, 'PrimePi( 318  )', 66);
  Test({LINENUM}21990, 'PrimePi( 319  )', 66);
  Test({LINENUM}21991, 'PrimePi( 320  )', 66);
  Test({LINENUM}21992, 'PrimePi( 321  )', 66);
  Test({LINENUM}21993, 'PrimePi( 322  )', 66);
  Test({LINENUM}21994, 'PrimePi( 323  )', 66);
  Test({LINENUM}21995, 'PrimePi( 324  )', 66);
  Test({LINENUM}21996, 'PrimePi( 325  )', 66);
  Test({LINENUM}21997, 'PrimePi( 326  )', 66);
  Test({LINENUM}21998, 'PrimePi( 327  )', 66);
  Test({LINENUM}21999, 'PrimePi( 328  )', 66);
  Test({LINENUM}22000, 'PrimePi( 329  )', 66);
  Test({LINENUM}22001, 'PrimePi( 330  )', 66);
  Test({LINENUM}22002, 'PrimePi( 331  )', 67);
  Test({LINENUM}22003, 'PrimePi( 332  )', 67);
  Test({LINENUM}22004, 'PrimePi( 333  )', 67);
  Test({LINENUM}22005, 'PrimePi( 334  )', 67);
  Test({LINENUM}22006, 'PrimePi( 335  )', 67);
  Test({LINENUM}22007, 'PrimePi( 336  )', 67);
  Test({LINENUM}22008, 'PrimePi( 337  )', 68);
  Test({LINENUM}22009, 'PrimePi( 338  )', 68);
  Test({LINENUM}22010, 'PrimePi( 339  )', 68);
  Test({LINENUM}22011, 'PrimePi( 340  )', 68);
  Test({LINENUM}22012, 'PrimePi( 341  )', 68);
  Test({LINENUM}22013, 'PrimePi( 342  )', 68);
  Test({LINENUM}22014, 'PrimePi( 343  )', 68);
  Test({LINENUM}22015, 'PrimePi( 344  )', 68);
  Test({LINENUM}22016, 'PrimePi( 345  )', 68);
  Test({LINENUM}22017, 'PrimePi( 346  )', 68);
  Test({LINENUM}22018, 'PrimePi( 347  )', 69);
  Test({LINENUM}22019, 'PrimePi( 348  )', 69);
  Test({LINENUM}22020, 'PrimePi( 349  )', 70);
  Test({LINENUM}22021, 'PrimePi( 350  )', 70);
  Test({LINENUM}22022, 'PrimePi( 351  )', 70);
  Test({LINENUM}22023, 'PrimePi( 352  )', 70);
  Test({LINENUM}22024, 'PrimePi( 353  )', 71);
  Test({LINENUM}22025, 'PrimePi( 354  )', 71);
  Test({LINENUM}22026, 'PrimePi( 355  )', 71);
  Test({LINENUM}22027, 'PrimePi( 356  )', 71);
  Test({LINENUM}22028, 'PrimePi( 357  )', 71);
  Test({LINENUM}22029, 'PrimePi( 358  )', 71);
  Test({LINENUM}22030, 'PrimePi( 359  )', 72);
  Test({LINENUM}22031, 'PrimePi( 360  )', 72);
  Test({LINENUM}22032, 'PrimePi( 361  )', 72);
  Test({LINENUM}22033, 'PrimePi( 362  )', 72);
  Test({LINENUM}22034, 'PrimePi( 363  )', 72);
  Test({LINENUM}22035, 'PrimePi( 364  )', 72);
  Test({LINENUM}22036, 'PrimePi( 365  )', 72);
  Test({LINENUM}22037, 'PrimePi( 366  )', 72);
  Test({LINENUM}22038, 'PrimePi( 367  )', 73);
  Test({LINENUM}22039, 'PrimePi( 368  )', 73);
  Test({LINENUM}22040, 'PrimePi( 369  )', 73);
  Test({LINENUM}22041, 'PrimePi( 370  )', 73);
  Test({LINENUM}22042, 'PrimePi( 371  )', 73);
  Test({LINENUM}22043, 'PrimePi( 372  )', 73);
  Test({LINENUM}22044, 'PrimePi( 373  )', 74);
  Test({LINENUM}22045, 'PrimePi( 374  )', 74);
  Test({LINENUM}22046, 'PrimePi( 375  )', 74);
  Test({LINENUM}22047, 'PrimePi( 376  )', 74);
  Test({LINENUM}22048, 'PrimePi( 377  )', 74);
  Test({LINENUM}22049, 'PrimePi( 378  )', 74);
  Test({LINENUM}22050, 'PrimePi( 379  )', 75);
  Test({LINENUM}22051, 'PrimePi( 380  )', 75);
  Test({LINENUM}22052, 'PrimePi( 381  )', 75);
  Test({LINENUM}22053, 'PrimePi( 382  )', 75);
  Test({LINENUM}22054, 'PrimePi( 383  )', 76);
  Test({LINENUM}22055, 'PrimePi( 384  )', 76);
  Test({LINENUM}22056, 'PrimePi( 385  )', 76);
  Test({LINENUM}22057, 'PrimePi( 386  )', 76);
  Test({LINENUM}22058, 'PrimePi( 387  )', 76);
  Test({LINENUM}22059, 'PrimePi( 388  )', 76);
  Test({LINENUM}22060, 'PrimePi( 389  )', 77);
  Test({LINENUM}22061, 'PrimePi( 390  )', 77);
  Test({LINENUM}22062, 'PrimePi( 391  )', 77);
  Test({LINENUM}22063, 'PrimePi( 392  )', 77);
  Test({LINENUM}22064, 'PrimePi( 393  )', 77);
  Test({LINENUM}22065, 'PrimePi( 394  )', 77);
  Test({LINENUM}22066, 'PrimePi( 395  )', 77);
  Test({LINENUM}22067, 'PrimePi( 396  )', 77);
  Test({LINENUM}22068, 'PrimePi( 397  )', 78);
  Test({LINENUM}22069, 'PrimePi( 398  )', 78);
  Test({LINENUM}22070, 'PrimePi( 399  )', 78);
  Test({LINENUM}22071, 'PrimePi( 400  )', 78);
  Test({LINENUM}22072, 'PrimePi( 401  )', 79);
  Test({LINENUM}22073, 'PrimePi( 402  )', 79);
  Test({LINENUM}22074, 'PrimePi( 403  )', 79);
  Test({LINENUM}22075, 'PrimePi( 404  )', 79);
  Test({LINENUM}22076, 'PrimePi( 405  )', 79);
  Test({LINENUM}22077, 'PrimePi( 406  )', 79);
  Test({LINENUM}22078, 'PrimePi( 407  )', 79);
  Test({LINENUM}22079, 'PrimePi( 408  )', 79);
  Test({LINENUM}22080, 'PrimePi( 409  )', 80);
  Test({LINENUM}22081, 'PrimePi( 410  )', 80);
  Test({LINENUM}22082, 'PrimePi( 411  )', 80);
  Test({LINENUM}22083, 'PrimePi( 412  )', 80);
  Test({LINENUM}22084, 'PrimePi( 413  )', 80);
  Test({LINENUM}22085, 'PrimePi( 414  )', 80);
  Test({LINENUM}22086, 'PrimePi( 415  )', 80);
  Test({LINENUM}22087, 'PrimePi( 416  )', 80);
  Test({LINENUM}22088, 'PrimePi( 417  )', 80);
  Test({LINENUM}22089, 'PrimePi( 418  )', 80);
  Test({LINENUM}22090, 'PrimePi( 419  )', 81);
  Test({LINENUM}22091, 'PrimePi( 420  )', 81);
  Test({LINENUM}22092, 'PrimePi( 421  )', 82);
  Test({LINENUM}22093, 'PrimePi( 422  )', 82);
  Test({LINENUM}22094, 'PrimePi( 423  )', 82);
  Test({LINENUM}22095, 'PrimePi( 424  )', 82);
  Test({LINENUM}22096, 'PrimePi( 425  )', 82);
  Test({LINENUM}22097, 'PrimePi( 426  )', 82);
  Test({LINENUM}22098, 'PrimePi( 427  )', 82);
  Test({LINENUM}22099, 'PrimePi( 428  )', 82);
  Test({LINENUM}22100, 'PrimePi( 429  )', 82);
  Test({LINENUM}22101, 'PrimePi( 430  )', 82);
  Test({LINENUM}22102, 'PrimePi( 431  )', 83);
  Test({LINENUM}22103, 'PrimePi( 432  )', 83);
  Test({LINENUM}22104, 'PrimePi( 433  )', 84);
  Test({LINENUM}22105, 'PrimePi( 434  )', 84);
  Test({LINENUM}22106, 'PrimePi( 435  )', 84);
  Test({LINENUM}22107, 'PrimePi( 436  )', 84);
  Test({LINENUM}22108, 'PrimePi( 437  )', 84);
  Test({LINENUM}22109, 'PrimePi( 438  )', 84);
  Test({LINENUM}22110, 'PrimePi( 439  )', 85);
  Test({LINENUM}22111, 'PrimePi( 440  )', 85);
  Test({LINENUM}22112, 'PrimePi( 441  )', 85);
  Test({LINENUM}22113, 'PrimePi( 442  )', 85);
  Test({LINENUM}22114, 'PrimePi( 443  )', 86);
  Test({LINENUM}22115, 'PrimePi( 444  )', 86);
  Test({LINENUM}22116, 'PrimePi( 445  )', 86);
  Test({LINENUM}22117, 'PrimePi( 446  )', 86);
  Test({LINENUM}22118, 'PrimePi( 447  )', 86);
  Test({LINENUM}22119, 'PrimePi( 448  )', 86);
  Test({LINENUM}22120, 'PrimePi( 449  )', 87);
  Test({LINENUM}22121, 'PrimePi( 450  )', 87);
  Test({LINENUM}22122, 'PrimePi( 451  )', 87);
  Test({LINENUM}22123, 'PrimePi( 452  )', 87);
  Test({LINENUM}22124, 'PrimePi( 453  )', 87);
  Test({LINENUM}22125, 'PrimePi( 454  )', 87);
  Test({LINENUM}22126, 'PrimePi( 455  )', 87);
  Test({LINENUM}22127, 'PrimePi( 456  )', 87);
  Test({LINENUM}22128, 'PrimePi( 457  )', 88);
  Test({LINENUM}22129, 'PrimePi( 458  )', 88);
  Test({LINENUM}22130, 'PrimePi( 459  )', 88);
  Test({LINENUM}22131, 'PrimePi( 460  )', 88);
  Test({LINENUM}22132, 'PrimePi( 461  )', 89);
  Test({LINENUM}22133, 'PrimePi( 462  )', 89);
  Test({LINENUM}22134, 'PrimePi( 463  )', 90);
  Test({LINENUM}22135, 'PrimePi( 464  )', 90);
  Test({LINENUM}22136, 'PrimePi( 465  )', 90);
  Test({LINENUM}22137, 'PrimePi( 466  )', 90);
  Test({LINENUM}22138, 'PrimePi( 467  )', 91);
  Test({LINENUM}22139, 'PrimePi( 468  )', 91);
  Test({LINENUM}22140, 'PrimePi( 469  )', 91);
  Test({LINENUM}22141, 'PrimePi( 470  )', 91);
  Test({LINENUM}22142, 'PrimePi( 471  )', 91);
  Test({LINENUM}22143, 'PrimePi( 472  )', 91);
  Test({LINENUM}22144, 'PrimePi( 473  )', 91);
  Test({LINENUM}22145, 'PrimePi( 474  )', 91);
  Test({LINENUM}22146, 'PrimePi( 475  )', 91);
  Test({LINENUM}22147, 'PrimePi( 476  )', 91);
  Test({LINENUM}22148, 'PrimePi( 477  )', 91);
  Test({LINENUM}22149, 'PrimePi( 478  )', 91);
  Test({LINENUM}22150, 'PrimePi( 479  )', 92);
  Test({LINENUM}22151, 'PrimePi( 480  )', 92);
  Test({LINENUM}22152, 'PrimePi( 481  )', 92);
  Test({LINENUM}22153, 'PrimePi( 482  )', 92);
  Test({LINENUM}22154, 'PrimePi( 483  )', 92);
  Test({LINENUM}22155, 'PrimePi( 484  )', 92);
  Test({LINENUM}22156, 'PrimePi( 485  )', 92);
  Test({LINENUM}22157, 'PrimePi( 486  )', 92);
  Test({LINENUM}22158, 'PrimePi( 487  )', 93);
  Test({LINENUM}22159, 'PrimePi( 488  )', 93);
  Test({LINENUM}22160, 'PrimePi( 489  )', 93);
  Test({LINENUM}22161, 'PrimePi( 490  )', 93);
  Test({LINENUM}22162, 'PrimePi( 491  )', 94);
  Test({LINENUM}22163, 'PrimePi( 492  )', 94);
  Test({LINENUM}22164, 'PrimePi( 493  )', 94);
  Test({LINENUM}22165, 'PrimePi( 494  )', 94);
  Test({LINENUM}22166, 'PrimePi( 495  )', 94);
  Test({LINENUM}22167, 'PrimePi( 496  )', 94);
  Test({LINENUM}22168, 'PrimePi( 497  )', 94);
  Test({LINENUM}22169, 'PrimePi( 498  )', 94);
  Test({LINENUM}22170, 'PrimePi( 499  )', 95);
  Test({LINENUM}22171, 'PrimePi( 500  )', 95);

  Test({LINENUM}22173, 'PrimePi( 1000 )', 168);
  Test({LINENUM}22174, 'PrimePi( 10000 )', 1229);
  Test({LINENUM}22175, 'PrimePi( 100000 )', 9592);
  Test({LINENUM}22176, 'PrimePi( 1000000 )', 78498);
  Test({LINENUM}22177, 'PrimePi( 10000000 )', 664579);
{$IFNDEF QuickTest}
  Test({LINENUM}22179, 'PrimePi( 100000000 )', 5761455);
  Test({LINENUM}22180, 'PrimePi( 1000000000 )', 50847534);
  Test({LINENUM}22181, 'PrimePi( 10000000000 )', failure, 'Cannot test integers this large for primality.');
  Test({LINENUM}22182, 'PrimePi( 100000000000 )', failure, 'Cannot test integers this large for primality.');
  Test({LINENUM}22183, 'PrimePi( 1000000000000 )', failure, 'Cannot test integers this large for primality.');
  Test({LINENUM}22184, 'PrimePi( 10000000000000 )', failure, 'Cannot test integers this large for primality.');
  Test({LINENUM}22185, 'PrimePi( 100000000000000 )', failure, 'Cannot test integers this large for primality.');
{$ENDIF}

  Test({LINENUM}22188, 'PrimePi(3.5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}22189, 'PrimePi(2, 3)', failure, 'Too many arguments.');
  Test({LINENUM}22190, 'PrimePi()', failure, 'A required argument of type integer is missing.');

  Test({LINENUM}22192, 'IsPrime(6897311)', False);
  Test({LINENUM}22193, 'IsPrime(5896419)', False);
  Test({LINENUM}22194, 'IsPrime(4528917)', False);
  Test({LINENUM}22195, 'IsPrime(1852641)', False);
  Test({LINENUM}22196, 'IsPrime(458233)', False);
  Test({LINENUM}22197, 'IsPrime(917637)', False);
  Test({LINENUM}22198, 'IsPrime(527911)', False);
  Test({LINENUM}22199, 'IsPrime(5978327)', False);
  Test({LINENUM}22200, 'IsPrime(4289711)', False);
  Test({LINENUM}22201, 'IsPrime(689713)', True);
  Test({LINENUM}22202, 'IsPrime(485279)', False);
  Test({LINENUM}22203, 'NextPrime(485279)', 485311);
  Test({LINENUM}22204, 'PrevPrime(485279)', 485263);
  Test({LINENUM}22205, 'prime(123456)', 1632899);

  // Fibonacci numbers

  Test({LINENUM}22209, 'Fibonacci(0)', 0);
  Test({LINENUM}22210, 'Fibonacci(1)', 1);
  Test({LINENUM}22211, 'Fibonacci(2)', 1);
  Test({LINENUM}22212, 'Fibonacci(3)', 2);
  Test({LINENUM}22213, 'Fibonacci(4)', 3);
  Test({LINENUM}22214, 'Fibonacci(5)', 5);
  Test({LINENUM}22215, 'Fibonacci(6)', 8);
  Test({LINENUM}22216, 'Fibonacci(7)', 13);
  Test({LINENUM}22217, 'Fibonacci(8)', 21);
  Test({LINENUM}22218, 'Fibonacci(9)', 34);
  Test({LINENUM}22219, 'Fibonacci(10)', 55);
  Test({LINENUM}22220, 'Fibonacci(11)', 89);
  Test({LINENUM}22221, 'Fibonacci(12)', 144);

  Test({LINENUM}22223, 'Fibonacci(90)', 2880067194370816120);
  Test({LINENUM}22224, 'Fibonacci(91)', 4660046610375530309);
  Test({LINENUM}22225, 'Fibonacci(92)', 7540113804746346429);
  Eps; Test({LINENUM}22226, 'Fibonacci(93)', 12200160415121876738.0);
  Eps; Test({LINENUM}22227, 'Fibonacci(94)', 19740274219868223167.0);

  Eps; Test({LINENUM}22229, 'Fibonacci(100)', 354224848179261915075.0);
  Eps; Test({LINENUM}22230, 'Fibonacci(500)', 1.3942322456169788013972438287040728395007025658769730E104);
  Eps; Test({LINENUM}22231, 'Fibonacci(1000)', 4.3466557686937456435688527675040625802564660517371780E208);
  Eps; Test({LINENUM}22232, 'Fibonacci(2000)', 4.2246963333923048787067256023414827825798528402506810E417);
  Eps; Test({LINENUM}22233, 'Fibonacci(5000)', 3.878968454388325633701916308325905312082127714646245E1044);

  for _i := 2 to 1000 do
    Test({LINENUM}22236, 'Fibonacci(' + _i.ToString + ') = Fibonacci(' + _i.ToString + ' - 1) + Fibonacci(' + _i.ToString + ' - 2)', True);

  Test({LINENUM}22238, 'Fibonacci(-1)', failure, 'To obtain the Nth Fibonacci number, N must be zero or a positive integer.');
  Test({LINENUM}22239, 'Fibonacci(-100)', failure, 'To obtain the Nth Fibonacci number, N must be zero or a positive integer.');

  Test({LINENUM}22241, 'Fibonacci()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}22242, 'Fibonacci(1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}22243, 'Fibonacci(π)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  // Lucas numbers

  Test({LINENUM}22247, 'Lucas(0)', 2);
  Test({LINENUM}22248, 'Lucas(1)', 1);
  Test({LINENUM}22249, 'Lucas(2)', 3);
  Test({LINENUM}22250, 'Lucas(3)', 4);
  Test({LINENUM}22251, 'Lucas(4)', 7);
  Test({LINENUM}22252, 'Lucas(5)', 11);
  Test({LINENUM}22253, 'Lucas(6)', 18);
  Test({LINENUM}22254, 'Lucas(7)', 29);
  Test({LINENUM}22255, 'Lucas(8)', 47);
  Test({LINENUM}22256, 'Lucas(9)', 76);
  Test({LINENUM}22257, 'Lucas(10)', 123);
  Test({LINENUM}22258, 'Lucas(11)', 199);
  Test({LINENUM}22259, 'Lucas(12)', 322);

  Test({LINENUM}22261, 'Lucas(89)', 3980154972736918051);
  Test({LINENUM}22262, 'Lucas(90)', 6440026026380244498);
  Eps; Test({LINENUM}22263, 'Lucas(91)', 10420180999117162549.0);
  Eps; Test({LINENUM}22264, 'Lucas(92)', 16860207025497407047.0);

  Eps; Test({LINENUM}22266, 'Lucas(100)', 7.92070839848372253127E20);
  Eps; Test({LINENUM}22267, 'Lucas(500)', 3.1175980776217478160530100720173686014195239323981907E104);
  Eps; Test({LINENUM}22268, 'Lucas(1000)', 9.7194177735908175207981982079326473737797879155345685E208);
  Eps; Test({LINENUM}22269, 'Lucas(2000)', 9.4467081857593084153840674959996774315309632184803680E417);
  Eps; Test({LINENUM}22270, 'Lucas(5000)', 8.673637146589588538368589908373462798874929690826669E1044);

  for _i := 2 to 1000 do
    Test({LINENUM}22273, 'Lucas(' + _i.ToString + ') = Lucas(' + _i.ToString + ' - 1) + Lucas(' + _i.ToString + ' - 2)', True);

  Test({LINENUM}22275, 'Lucas(-1)', failure, 'To obtain the Nth Lucas number, N must be zero or a positive integer.');
  Test({LINENUM}22276, 'Lucas(-100)', failure, 'To obtain the Nth Lucas number, N must be zero or a positive integer.');

  Test({LINENUM}22278, 'Lucas()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}22279, 'Lucas(1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}22280, 'Lucas(π)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  // Möbius (μ) function

  Test({LINENUM}22284, 'MöbiusMu( 1    )', 1);
  Test({LINENUM}22285, 'MöbiusMu( 2    )', -1);
  Test({LINENUM}22286, 'MöbiusMu( 3    )', -1);
  Test({LINENUM}22287, 'MöbiusMu( 4    )', 0);
  Test({LINENUM}22288, 'MöbiusMu( 5    )', -1);
  Test({LINENUM}22289, 'MöbiusMu( 6    )', 1);
  Test({LINENUM}22290, 'MöbiusMu( 7    )', -1);
  Test({LINENUM}22291, 'MöbiusMu( 8    )', 0);
  Test({LINENUM}22292, 'MöbiusMu( 9    )', 0);
  Test({LINENUM}22293, 'MöbiusMu( 10   )', 1);
  Test({LINENUM}22294, 'MöbiusMu( 11   )', -1);
  Test({LINENUM}22295, 'MöbiusMu( 12   )', 0);
  Test({LINENUM}22296, 'MöbiusMu( 13   )', -1);
  Test({LINENUM}22297, 'MöbiusMu( 14   )', 1);
  Test({LINENUM}22298, 'MöbiusMu( 15   )', 1);
  Test({LINENUM}22299, 'MöbiusMu( 16   )', 0);
  Test({LINENUM}22300, 'MöbiusMu( 17   )', -1);
  Test({LINENUM}22301, 'MöbiusMu( 18   )', 0);
  Test({LINENUM}22302, 'MöbiusMu( 19   )', -1);
  Test({LINENUM}22303, 'MöbiusMu( 20   )', 0);
  Test({LINENUM}22304, 'MöbiusMu( 21   )', 1);
  Test({LINENUM}22305, 'MöbiusMu( 22   )', 1);
  Test({LINENUM}22306, 'MöbiusMu( 23   )', -1);
  Test({LINENUM}22307, 'MöbiusMu( 24   )', 0);
  Test({LINENUM}22308, 'MöbiusMu( 25   )', 0);
  Test({LINENUM}22309, 'MöbiusMu( 26   )', 1);
  Test({LINENUM}22310, 'MöbiusMu( 27   )', 0);
  Test({LINENUM}22311, 'MöbiusMu( 28   )', 0);
  Test({LINENUM}22312, 'MöbiusMu( 29   )', -1);
  Test({LINENUM}22313, 'MöbiusMu( 30   )', -1);
  Test({LINENUM}22314, 'MöbiusMu( 31   )', -1);
  Test({LINENUM}22315, 'MöbiusMu( 32   )', 0);
  Test({LINENUM}22316, 'MöbiusMu( 33   )', 1);
  Test({LINENUM}22317, 'MöbiusMu( 34   )', 1);
  Test({LINENUM}22318, 'MöbiusMu( 35   )', 1);
  Test({LINENUM}22319, 'MöbiusMu( 36   )', 0);
  Test({LINENUM}22320, 'MöbiusMu( 37   )', -1);
  Test({LINENUM}22321, 'MöbiusMu( 38   )', 1);
  Test({LINENUM}22322, 'MöbiusMu( 39   )', 1);
  Test({LINENUM}22323, 'MöbiusMu( 40   )', 0);
  Test({LINENUM}22324, 'MöbiusMu( 41   )', -1);
  Test({LINENUM}22325, 'MöbiusMu( 42   )', -1);
  Test({LINENUM}22326, 'MöbiusMu( 43   )', -1);
  Test({LINENUM}22327, 'MöbiusMu( 44   )', 0);
  Test({LINENUM}22328, 'MöbiusMu( 45   )', 0);
  Test({LINENUM}22329, 'MöbiusMu( 46   )', 1);
  Test({LINENUM}22330, 'MöbiusMu( 47   )', -1);
  Test({LINENUM}22331, 'MöbiusMu( 48   )', 0);
  Test({LINENUM}22332, 'MöbiusMu( 49   )', 0);
  Test({LINENUM}22333, 'MöbiusMu( 50   )', 0);
  Test({LINENUM}22334, 'MöbiusMu( 51   )', 1);
  Test({LINENUM}22335, 'MöbiusMu( 52   )', 0);
  Test({LINENUM}22336, 'MöbiusMu( 53   )', -1);
  Test({LINENUM}22337, 'MöbiusMu( 54   )', 0);
  Test({LINENUM}22338, 'MöbiusMu( 55   )', 1);
  Test({LINENUM}22339, 'MöbiusMu( 56   )', 0);
  Test({LINENUM}22340, 'MöbiusMu( 57   )', 1);
  Test({LINENUM}22341, 'MöbiusMu( 58   )', 1);
  Test({LINENUM}22342, 'MöbiusMu( 59   )', -1);
  Test({LINENUM}22343, 'MöbiusMu( 60   )', 0);
  Test({LINENUM}22344, 'MöbiusMu( 61   )', -1);
  Test({LINENUM}22345, 'MöbiusMu( 62   )', 1);
  Test({LINENUM}22346, 'MöbiusMu( 63   )', 0);
  Test({LINENUM}22347, 'MöbiusMu( 64   )', 0);
  Test({LINENUM}22348, 'MöbiusMu( 65   )', 1);
  Test({LINENUM}22349, 'MöbiusMu( 66   )', -1);
  Test({LINENUM}22350, 'MöbiusMu( 67   )', -1);
  Test({LINENUM}22351, 'MöbiusMu( 68   )', 0);
  Test({LINENUM}22352, 'MöbiusMu( 69   )', 1);
  Test({LINENUM}22353, 'MöbiusMu( 70   )', -1);
  Test({LINENUM}22354, 'MöbiusMu( 71   )', -1);
  Test({LINENUM}22355, 'MöbiusMu( 72   )', 0);
  Test({LINENUM}22356, 'MöbiusMu( 73   )', -1);
  Test({LINENUM}22357, 'MöbiusMu( 74   )', 1);
  Test({LINENUM}22358, 'MöbiusMu( 75   )', 0);
  Test({LINENUM}22359, 'MöbiusMu( 76   )', 0);
  Test({LINENUM}22360, 'MöbiusMu( 77   )', 1);
  Test({LINENUM}22361, 'MöbiusMu( 78   )', -1);
  Test({LINENUM}22362, 'MöbiusMu( 79   )', -1);
  Test({LINENUM}22363, 'MöbiusMu( 80   )', 0);
  Test({LINENUM}22364, 'MöbiusMu( 81   )', 0);
  Test({LINENUM}22365, 'MöbiusMu( 82   )', 1);
  Test({LINENUM}22366, 'MöbiusMu( 83   )', -1);
  Test({LINENUM}22367, 'MöbiusMu( 84   )', 0);
  Test({LINENUM}22368, 'MöbiusMu( 85   )', 1);
  Test({LINENUM}22369, 'MöbiusMu( 86   )', 1);
  Test({LINENUM}22370, 'MöbiusMu( 87   )', 1);
  Test({LINENUM}22371, 'MöbiusMu( 88   )', 0);
  Test({LINENUM}22372, 'MöbiusMu( 89   )', -1);
  Test({LINENUM}22373, 'MöbiusMu( 90   )', 0);
  Test({LINENUM}22374, 'MöbiusMu( 91   )', 1);
  Test({LINENUM}22375, 'MöbiusMu( 92   )', 0);
  Test({LINENUM}22376, 'MöbiusMu( 93   )', 1);
  Test({LINENUM}22377, 'MöbiusMu( 94   )', 1);
  Test({LINENUM}22378, 'MöbiusMu( 95   )', 1);
  Test({LINENUM}22379, 'MöbiusMu( 96   )', 0);
  Test({LINENUM}22380, 'MöbiusMu( 97   )', -1);
  Test({LINENUM}22381, 'MöbiusMu( 98   )', 0);
  Test({LINENUM}22382, 'MöbiusMu( 99   )', 0);
  Test({LINENUM}22383, 'MöbiusMu( 100  )', 0);
  Test({LINENUM}22384, 'MöbiusMu( 101  )', -1);
  Test({LINENUM}22385, 'MöbiusMu( 102  )', -1);
  Test({LINENUM}22386, 'MöbiusMu( 103  )', -1);
  Test({LINENUM}22387, 'MöbiusMu( 104  )', 0);
  Test({LINENUM}22388, 'MöbiusMu( 105  )', -1);
  Test({LINENUM}22389, 'MöbiusMu( 106  )', 1);
  Test({LINENUM}22390, 'MöbiusMu( 107  )', -1);
  Test({LINENUM}22391, 'MöbiusMu( 108  )', 0);
  Test({LINENUM}22392, 'MöbiusMu( 109  )', -1);
  Test({LINENUM}22393, 'MöbiusMu( 110  )', -1);
  Test({LINENUM}22394, 'MöbiusMu( 111  )', 1);
  Test({LINENUM}22395, 'MöbiusMu( 112  )', 0);
  Test({LINENUM}22396, 'MöbiusMu( 113  )', -1);
  Test({LINENUM}22397, 'MöbiusMu( 114  )', -1);
  Test({LINENUM}22398, 'MöbiusMu( 115  )', 1);
  Test({LINENUM}22399, 'MöbiusMu( 116  )', 0);
  Test({LINENUM}22400, 'MöbiusMu( 117  )', 0);
  Test({LINENUM}22401, 'MöbiusMu( 118  )', 1);
  Test({LINENUM}22402, 'MöbiusMu( 119  )', 1);
  Test({LINENUM}22403, 'MöbiusMu( 120  )', 0);
  Test({LINENUM}22404, 'MöbiusMu( 121  )', 0);
  Test({LINENUM}22405, 'MöbiusMu( 122  )', 1);
  Test({LINENUM}22406, 'MöbiusMu( 123  )', 1);
  Test({LINENUM}22407, 'MöbiusMu( 124  )', 0);
  Test({LINENUM}22408, 'MöbiusMu( 125  )', 0);
  Test({LINENUM}22409, 'MöbiusMu( 126  )', 0);
  Test({LINENUM}22410, 'MöbiusMu( 127  )', -1);
  Test({LINENUM}22411, 'MöbiusMu( 128  )', 0);
  Test({LINENUM}22412, 'MöbiusMu( 129  )', 1);
  Test({LINENUM}22413, 'MöbiusMu( 130  )', -1);
  Test({LINENUM}22414, 'MöbiusMu( 131  )', -1);
  Test({LINENUM}22415, 'MöbiusMu( 132  )', 0);
  Test({LINENUM}22416, 'MöbiusMu( 133  )', 1);
  Test({LINENUM}22417, 'MöbiusMu( 134  )', 1);
  Test({LINENUM}22418, 'MöbiusMu( 135  )', 0);
  Test({LINENUM}22419, 'MöbiusMu( 136  )', 0);
  Test({LINENUM}22420, 'MöbiusMu( 137  )', -1);
  Test({LINENUM}22421, 'MöbiusMu( 138  )', -1);
  Test({LINENUM}22422, 'MöbiusMu( 139  )', -1);
  Test({LINENUM}22423, 'MöbiusMu( 140  )', 0);
  Test({LINENUM}22424, 'MöbiusMu( 141  )', 1);
  Test({LINENUM}22425, 'MöbiusMu( 142  )', 1);
  Test({LINENUM}22426, 'MöbiusMu( 143  )', 1);
  Test({LINENUM}22427, 'MöbiusMu( 144  )', 0);
  Test({LINENUM}22428, 'MöbiusMu( 145  )', 1);
  Test({LINENUM}22429, 'MöbiusMu( 146  )', 1);
  Test({LINENUM}22430, 'MöbiusMu( 147  )', 0);
  Test({LINENUM}22431, 'MöbiusMu( 148  )', 0);
  Test({LINENUM}22432, 'MöbiusMu( 149  )', -1);
  Test({LINENUM}22433, 'MöbiusMu( 150  )', 0);
  Test({LINENUM}22434, 'MöbiusMu( 151  )', -1);
  Test({LINENUM}22435, 'MöbiusMu( 152  )', 0);
  Test({LINENUM}22436, 'MöbiusMu( 153  )', 0);
  Test({LINENUM}22437, 'MöbiusMu( 154  )', -1);
  Test({LINENUM}22438, 'MöbiusMu( 155  )', 1);
  Test({LINENUM}22439, 'MöbiusMu( 156  )', 0);
  Test({LINENUM}22440, 'MöbiusMu( 157  )', -1);
  Test({LINENUM}22441, 'MöbiusMu( 158  )', 1);
  Test({LINENUM}22442, 'MöbiusMu( 159  )', 1);
  Test({LINENUM}22443, 'MöbiusMu( 160  )', 0);
  Test({LINENUM}22444, 'MöbiusMu( 161  )', 1);
  Test({LINENUM}22445, 'MöbiusMu( 162  )', 0);
  Test({LINENUM}22446, 'MöbiusMu( 163  )', -1);
  Test({LINENUM}22447, 'MöbiusMu( 164  )', 0);
  Test({LINENUM}22448, 'MöbiusMu( 165  )', -1);
  Test({LINENUM}22449, 'MöbiusMu( 166  )', 1);
  Test({LINENUM}22450, 'MöbiusMu( 167  )', -1);
  Test({LINENUM}22451, 'MöbiusMu( 168  )', 0);
  Test({LINENUM}22452, 'MöbiusMu( 169  )', 0);
  Test({LINENUM}22453, 'MöbiusMu( 170  )', -1);
  Test({LINENUM}22454, 'MöbiusMu( 171  )', 0);
  Test({LINENUM}22455, 'MöbiusMu( 172  )', 0);
  Test({LINENUM}22456, 'MöbiusMu( 173  )', -1);
  Test({LINENUM}22457, 'MöbiusMu( 174  )', -1);
  Test({LINENUM}22458, 'MöbiusMu( 175  )', 0);
  Test({LINENUM}22459, 'MöbiusMu( 176  )', 0);
  Test({LINENUM}22460, 'MöbiusMu( 177  )', 1);
  Test({LINENUM}22461, 'MöbiusMu( 178  )', 1);
  Test({LINENUM}22462, 'MöbiusMu( 179  )', -1);
  Test({LINENUM}22463, 'MöbiusMu( 180  )', 0);
  Test({LINENUM}22464, 'MöbiusMu( 181  )', -1);
  Test({LINENUM}22465, 'MöbiusMu( 182  )', -1);
  Test({LINENUM}22466, 'MöbiusMu( 183  )', 1);
  Test({LINENUM}22467, 'MöbiusMu( 184  )', 0);
  Test({LINENUM}22468, 'MöbiusMu( 185  )', 1);
  Test({LINENUM}22469, 'MöbiusMu( 186  )', -1);
  Test({LINENUM}22470, 'MöbiusMu( 187  )', 1);
  Test({LINENUM}22471, 'MöbiusMu( 188  )', 0);
  Test({LINENUM}22472, 'MöbiusMu( 189  )', 0);
  Test({LINENUM}22473, 'MöbiusMu( 190  )', -1);
  Test({LINENUM}22474, 'MöbiusMu( 191  )', -1);
  Test({LINENUM}22475, 'MöbiusMu( 192  )', 0);
  Test({LINENUM}22476, 'MöbiusMu( 193  )', -1);
  Test({LINENUM}22477, 'MöbiusMu( 194  )', 1);
  Test({LINENUM}22478, 'MöbiusMu( 195  )', -1);
  Test({LINENUM}22479, 'MöbiusMu( 196  )', 0);
  Test({LINENUM}22480, 'MöbiusMu( 197  )', -1);
  Test({LINENUM}22481, 'MöbiusMu( 198  )', 0);
  Test({LINENUM}22482, 'MöbiusMu( 199  )', -1);
  Test({LINENUM}22483, 'MöbiusMu( 200  )', 0);

  Test({LINENUM}22485, 'MöbiusMu( 1000 )', 0);
  Test({LINENUM}22486, 'MöbiusMu( 1001 )', -1);
  Test({LINENUM}22487, 'MöbiusMu( 1002 )', -1);
  Test({LINENUM}22488, 'MöbiusMu( 1003 )', 1);
  Test({LINENUM}22489, 'MöbiusMu( 1004 )', 0);

  Test({LINENUM}22491, 'MöbiusMu( 10000)', 0);
  Test({LINENUM}22492, 'MöbiusMu( 10001)', 1);
  Test({LINENUM}22493, 'MöbiusMu( 10002)', -1);
  Test({LINENUM}22494, 'MöbiusMu( 10003)', 1);
  Test({LINENUM}22495, 'MöbiusMu( 10004)', 0);
  Test({LINENUM}22496, 'MöbiusMu( 10005)', 1);
  Test({LINENUM}22497, 'MöbiusMu( 10006)', 1);
  Test({LINENUM}22498, 'MöbiusMu( 10007)', -1);
  Test({LINENUM}22499, 'MöbiusMu( 10008)', 0);

  Test({LINENUM}22501, 'MöbiusMu(100000)', 0);
  Test({LINENUM}22502, 'MöbiusMu(100001)', 1);
  Test({LINENUM}22503, 'MöbiusMu(100002)', 1);
  Test({LINENUM}22504, 'MöbiusMu(100003)', -1);
  Test({LINENUM}22505, 'MöbiusMu(100004)', 0);
  Test({LINENUM}22506, 'MöbiusMu(100005)', 1);

  Test({LINENUM}22508, 'MöbiusMu(123456)', 0);
  Test({LINENUM}22509, 'MöbiusMu(123457)', -1);

  Test({LINENUM}22511, 'MöbiusMu(4⋅91233)', 0);
  Test({LINENUM}22512, 'MöbiusMu(4⋅84905)', 0);
  Test({LINENUM}22513, 'MöbiusMu(4⋅47179)', 0);
  Test({LINENUM}22514, 'MöbiusMu(4⋅81074)', 0);
  Test({LINENUM}22515, 'MöbiusMu(4⋅89406)', 0);
  Test({LINENUM}22516, 'MöbiusMu(4⋅84617)', 0);
  Test({LINENUM}22517, 'MöbiusMu(4⋅87171)', 0);

  Test({LINENUM}22519, 'MöbiusMu(1152921504606846976)', 0);
  Test({LINENUM}22520, 'MöbiusMu(3743906242624487424)', 0);
  Test({LINENUM}22521, 'MöbiusMu(1350851717672992089)', 0);
  Test({LINENUM}22522, 'MöbiusMu(1490116119384765625)', 0);
  Test({LINENUM}22523, 'MöbiusMu(3909821048582988049)', 0);
  Test({LINENUM}22524, 'MöbiusMu(505447028499293771)', 0);
  Test({LINENUM}22525, 'MöbiusMu(174887470365513049)', 0);

{$IFNDEF QuickTest}
  Test({LINENUM}22528, 'MöbiusMu(123456789)', 0);
  Test({LINENUM}22529, 'MöbiusMu(123476789)', 1);
  Test({LINENUM}22530, 'MöbiusMu(321654987)', 0);
  Test({LINENUM}22531, 'MöbiusMu(121654987)', 1);
  Test({LINENUM}22532, 'MöbiusMu(582346917)', 0);
  Test({LINENUM}22533, 'MöbiusMu(485230577)', -1);
  Test({LINENUM}22534, 'MöbiusMu(690427315)', 1);
{$ENDIF}

  Test({LINENUM}22537, 'MöbiusMu( 0    )', failure, 'Cannot find the prime factors of a non-positive integer.');
  Test({LINENUM}22538, 'MöbiusMu( -1   )', failure, 'Cannot find the prime factors of a non-positive integer.');
  Test({LINENUM}22539, 'MöbiusMu( -2   )', failure, 'Cannot find the prime factors of a non-positive integer.');
  Test({LINENUM}22540, 'MöbiusMu( -3   )', failure, 'Cannot find the prime factors of a non-positive integer.');
  Test({LINENUM}22541, 'MöbiusMu( -1350851717672992089   )', failure, 'Cannot find the prime factors of a non-positive integer.');

  Test({LINENUM}22543, 'MöbiusMu( 1, 2 )', failure, 'Too many arguments.');
  Test({LINENUM}22544, 'MöbiusMu()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}22545, 'MöbiusMu(3.14)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  // Mertens function

  Test({LINENUM}22549, 'Mertens( 1    )', 1);
  Test({LINENUM}22550, 'Mertens( 2    )', 0);
  Test({LINENUM}22551, 'Mertens( 3    )', -1);
  Test({LINENUM}22552, 'Mertens( 4    )', -1);
  Test({LINENUM}22553, 'Mertens( 5    )', -2);
  Test({LINENUM}22554, 'Mertens( 6    )', -1);
  Test({LINENUM}22555, 'Mertens( 7    )', -2);
  Test({LINENUM}22556, 'Mertens( 8    )', -2);
  Test({LINENUM}22557, 'Mertens( 9    )', -2);
  Test({LINENUM}22558, 'Mertens( 10   )', -1);
  Test({LINENUM}22559, 'Mertens( 11   )', -2);
  Test({LINENUM}22560, 'Mertens( 12   )', -2);
  Test({LINENUM}22561, 'Mertens( 13   )', -3);
  Test({LINENUM}22562, 'Mertens( 14   )', -2);
  Test({LINENUM}22563, 'Mertens( 15   )', -1);
  Test({LINENUM}22564, 'Mertens( 16   )', -1);
  Test({LINENUM}22565, 'Mertens( 17   )', -2);
  Test({LINENUM}22566, 'Mertens( 18   )', -2);
  Test({LINENUM}22567, 'Mertens( 19   )', -3);
  Test({LINENUM}22568, 'Mertens( 20   )', -3);
  Test({LINENUM}22569, 'Mertens( 21   )', -2);
  Test({LINENUM}22570, 'Mertens( 22   )', -1);
  Test({LINENUM}22571, 'Mertens( 23   )', -2);
  Test({LINENUM}22572, 'Mertens( 24   )', -2);
  Test({LINENUM}22573, 'Mertens( 25   )', -2);
  Test({LINENUM}22574, 'Mertens( 26   )', -1);
  Test({LINENUM}22575, 'Mertens( 27   )', -1);
  Test({LINENUM}22576, 'Mertens( 28   )', -1);
  Test({LINENUM}22577, 'Mertens( 29   )', -2);
  Test({LINENUM}22578, 'Mertens( 30   )', -3);
  Test({LINENUM}22579, 'Mertens( 31   )', -4);
  Test({LINENUM}22580, 'Mertens( 32   )', -4);
  Test({LINENUM}22581, 'Mertens( 33   )', -3);
  Test({LINENUM}22582, 'Mertens( 34   )', -2);
  Test({LINENUM}22583, 'Mertens( 35   )', -1);
  Test({LINENUM}22584, 'Mertens( 36   )', -1);
  Test({LINENUM}22585, 'Mertens( 37   )', -2);
  Test({LINENUM}22586, 'Mertens( 38   )', -1);
  Test({LINENUM}22587, 'Mertens( 39   )', 0);
  Test({LINENUM}22588, 'Mertens( 40   )', 0);
  Test({LINENUM}22589, 'Mertens( 41   )', -1);
  Test({LINENUM}22590, 'Mertens( 42   )', -2);
  Test({LINENUM}22591, 'Mertens( 43   )', -3);
  Test({LINENUM}22592, 'Mertens( 44   )', -3);
  Test({LINENUM}22593, 'Mertens( 45   )', -3);
  Test({LINENUM}22594, 'Mertens( 46   )', -2);
  Test({LINENUM}22595, 'Mertens( 47   )', -3);
  Test({LINENUM}22596, 'Mertens( 48   )', -3);
  Test({LINENUM}22597, 'Mertens( 49   )', -3);
  Test({LINENUM}22598, 'Mertens( 50   )', -3);
  Test({LINENUM}22599, 'Mertens( 51   )', -2);
  Test({LINENUM}22600, 'Mertens( 52   )', -2);
  Test({LINENUM}22601, 'Mertens( 53   )', -3);
  Test({LINENUM}22602, 'Mertens( 54   )', -3);
  Test({LINENUM}22603, 'Mertens( 55   )', -2);
  Test({LINENUM}22604, 'Mertens( 56   )', -2);
  Test({LINENUM}22605, 'Mertens( 57   )', -1);
  Test({LINENUM}22606, 'Mertens( 58   )', 0);
  Test({LINENUM}22607, 'Mertens( 59   )', -1);
  Test({LINENUM}22608, 'Mertens( 60   )', -1);
  Test({LINENUM}22609, 'Mertens( 61   )', -2);
  Test({LINENUM}22610, 'Mertens( 62   )', -1);
  Test({LINENUM}22611, 'Mertens( 63   )', -1);
  Test({LINENUM}22612, 'Mertens( 64   )', -1);
  Test({LINENUM}22613, 'Mertens( 65   )', 0);
  Test({LINENUM}22614, 'Mertens( 66   )', -1);
  Test({LINENUM}22615, 'Mertens( 67   )', -2);
  Test({LINENUM}22616, 'Mertens( 68   )', -2);
  Test({LINENUM}22617, 'Mertens( 69   )', -1);
  Test({LINENUM}22618, 'Mertens( 70   )', -2);
  Test({LINENUM}22619, 'Mertens( 71   )', -3);
  Test({LINENUM}22620, 'Mertens( 72   )', -3);
  Test({LINENUM}22621, 'Mertens( 73   )', -4);
  Test({LINENUM}22622, 'Mertens( 74   )', -3);
  Test({LINENUM}22623, 'Mertens( 75   )', -3);
  Test({LINENUM}22624, 'Mertens( 76   )', -3);
  Test({LINENUM}22625, 'Mertens( 77   )', -2);
  Test({LINENUM}22626, 'Mertens( 78   )', -3);
  Test({LINENUM}22627, 'Mertens( 79   )', -4);
  Test({LINENUM}22628, 'Mertens( 80   )', -4);
  Test({LINENUM}22629, 'Mertens( 81   )', -4);
  Test({LINENUM}22630, 'Mertens( 82   )', -3);
  Test({LINENUM}22631, 'Mertens( 83   )', -4);
  Test({LINENUM}22632, 'Mertens( 84   )', -4);
  Test({LINENUM}22633, 'Mertens( 85   )', -3);
  Test({LINENUM}22634, 'Mertens( 86   )', -2);
  Test({LINENUM}22635, 'Mertens( 87   )', -1);
  Test({LINENUM}22636, 'Mertens( 88   )', -1);
  Test({LINENUM}22637, 'Mertens( 89   )', -2);
  Test({LINENUM}22638, 'Mertens( 90   )', -2);
  Test({LINENUM}22639, 'Mertens( 91   )', -1);
  Test({LINENUM}22640, 'Mertens( 92   )', -1);
  Test({LINENUM}22641, 'Mertens( 93   )', 0);
  Test({LINENUM}22642, 'Mertens( 94   )', 1);
  Test({LINENUM}22643, 'Mertens( 95   )', 2);
  Test({LINENUM}22644, 'Mertens( 96   )', 2);
  Test({LINENUM}22645, 'Mertens( 97   )', 1);
  Test({LINENUM}22646, 'Mertens( 98   )', 1);
  Test({LINENUM}22647, 'Mertens( 99   )', 1);
  Test({LINENUM}22648, 'Mertens( 100  )', 1);
  Test({LINENUM}22649, 'Mertens( 101  )', 0);
  Test({LINENUM}22650, 'Mertens( 102  )', -1);
  Test({LINENUM}22651, 'Mertens( 103  )', -2);
  Test({LINENUM}22652, 'Mertens( 104  )', -2);
  Test({LINENUM}22653, 'Mertens( 105  )', -3);
  Test({LINENUM}22654, 'Mertens( 106  )', -2);
  Test({LINENUM}22655, 'Mertens( 107  )', -3);
  Test({LINENUM}22656, 'Mertens( 108  )', -3);
  Test({LINENUM}22657, 'Mertens( 109  )', -4);
  Test({LINENUM}22658, 'Mertens( 110  )', -5);
  Test({LINENUM}22659, 'Mertens( 111  )', -4);
  Test({LINENUM}22660, 'Mertens( 112  )', -4);
  Test({LINENUM}22661, 'Mertens( 113  )', -5);
  Test({LINENUM}22662, 'Mertens( 114  )', -6);
  Test({LINENUM}22663, 'Mertens( 115  )', -5);
  Test({LINENUM}22664, 'Mertens( 116  )', -5);
  Test({LINENUM}22665, 'Mertens( 117  )', -5);
  Test({LINENUM}22666, 'Mertens( 118  )', -4);
  Test({LINENUM}22667, 'Mertens( 119  )', -3);
  Test({LINENUM}22668, 'Mertens( 120  )', -3);
  Test({LINENUM}22669, 'Mertens( 121  )', -3);
  Test({LINENUM}22670, 'Mertens( 122  )', -2);
  Test({LINENUM}22671, 'Mertens( 123  )', -1);
  Test({LINENUM}22672, 'Mertens( 124  )', -1);
  Test({LINENUM}22673, 'Mertens( 125  )', -1);
  Test({LINENUM}22674, 'Mertens( 126  )', -1);
  Test({LINENUM}22675, 'Mertens( 127  )', -2);
  Test({LINENUM}22676, 'Mertens( 128  )', -2);
  Test({LINENUM}22677, 'Mertens( 129  )', -1);
  Test({LINENUM}22678, 'Mertens( 130  )', -2);
  Test({LINENUM}22679, 'Mertens( 131  )', -3);
  Test({LINENUM}22680, 'Mertens( 132  )', -3);
  Test({LINENUM}22681, 'Mertens( 133  )', -2);
  Test({LINENUM}22682, 'Mertens( 134  )', -1);
  Test({LINENUM}22683, 'Mertens( 135  )', -1);
  Test({LINENUM}22684, 'Mertens( 136  )', -1);
  Test({LINENUM}22685, 'Mertens( 137  )', -2);
  Test({LINENUM}22686, 'Mertens( 138  )', -3);
  Test({LINENUM}22687, 'Mertens( 139  )', -4);
  Test({LINENUM}22688, 'Mertens( 140  )', -4);
  Test({LINENUM}22689, 'Mertens( 141  )', -3);
  Test({LINENUM}22690, 'Mertens( 142  )', -2);
  Test({LINENUM}22691, 'Mertens( 143  )', -1);

  Test({LINENUM}22693, 'Mertens( 1000 )', 2);
  Test({LINENUM}22694, 'Mertens( 10000 )', -23);
  Test({LINENUM}22695, 'Mertens( 100000 )', -48);
  Test({LINENUM}22696, 'Mertens( 1000000 )', 212);

  Test({LINENUM}22698, 'Mertens(0)', failure, 'Cannot compute Mertens number for a non-positive index.');
  Test({LINENUM}22699, 'Mertens(-1)', failure, 'Cannot compute Mertens number for a non-positive index.');

  Test({LINENUM}22701, 'Mertens( 1, 2 )', failure, 'Too many arguments.');
  Test({LINENUM}22702, 'Mertens()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}22703, 'Mertens(3.14)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  // Coprime test

  Test({LINENUM}22707, 'coprime(2, 3)', True);
  Test({LINENUM}22708, 'coprime(2, 9)', True);
  Test({LINENUM}22709, 'coprime(5, 3)', True);
  Test({LINENUM}22710, 'coprime(5, 11)', True);
  Test({LINENUM}22711, 'coprime(2⋅7⋅11, 5⋅53⋅53)', True);
  Test({LINENUM}22712, 'coprime(13⋅17, 2⋅2⋅2⋅2⋅101)', True);
  Test({LINENUM}22713, 'coprime(53, 3)', True);
  Test({LINENUM}22714, 'coprime(123456, 1)', True);
  Test({LINENUM}22715, 'coprime(10000000, 3)', True);
  Test({LINENUM}22716, 'coprime(1000000, 1)', True);
  Test({LINENUM}22717, 'coprime(17, 19)', True);
  Test({LINENUM}22718, 'coprime(1, 1)', True);
  Test({LINENUM}22719, 'coprime(1, 2048)', True);

  Test({LINENUM}22721, 'coprime(2, 2)', False);
  Test({LINENUM}22722, 'coprime(2, 2048)', False);
  Test({LINENUM}22723, 'coprime(1024, 32)', False);
  Test({LINENUM}22724, 'coprime(3, 27)', False);
  Test({LINENUM}22725, 'coprime(2⋅7⋅11, 2⋅53⋅53)', False);
  Test({LINENUM}22726, 'coprime(2⋅7⋅11, 5⋅7⋅53⋅53)', False);
  Test({LINENUM}22727, 'coprime(5⋅7⋅11, 5⋅7⋅53⋅53)', False);
  Test({LINENUM}22728, 'coprime(5⋅7⋅11, 2⋅3⋅11⋅53)', False);
  Test({LINENUM}22729, 'coprime(2⋅3⋅5⋅7⋅11, 2⋅3⋅11⋅53)', False);
  Test({LINENUM}22730, 'coprime(119135437, 119135437)', False);

  Test({LINENUM}22732, 'coprime(2, 0)', False);
  Test({LINENUM}22733, 'coprime(2, 0)', False);
  Test({LINENUM}22734, 'coprime(5, 0)', False);
  Test({LINENUM}22735, 'coprime(5, 0)', False);
  Test({LINENUM}22736, 'coprime(2⋅7⋅11, 0)', False);
  Test({LINENUM}22737, 'coprime(13⋅17, 0)', False);
  Test({LINENUM}22738, 'coprime(53, 0)', False);
  Test({LINENUM}22739, 'coprime(123456, 0)', False);
  Test({LINENUM}22740, 'coprime(10000000, 0)', False);
  Test({LINENUM}22741, 'coprime(0, 10000000)', False);
  Test({LINENUM}22742, 'coprime(1000000, 0)', False);
  Test({LINENUM}22743, 'coprime(17, 0)', False);
  Test({LINENUM}22744, 'coprime(1, 0)', True);
  Test({LINENUM}22745, 'coprime(0, 1)', True);
  Test({LINENUM}22746, 'coprime(0, 0)', False); // gcd(0, 0) = 0 <> 1

  Test({LINENUM}22748, 'coprime(89408484632772, 1861618814930)', False);

  Test({LINENUM}22750, 'coprime(-2, 3)', True);
  Test({LINENUM}22751, 'coprime(-2, 9)', True);
  Test({LINENUM}22752, 'coprime(-5, 3)', True);
  Test({LINENUM}22753, 'coprime(-5, -11)', True);
  Test({LINENUM}22754, 'coprime(2⋅7⋅11, -5⋅53⋅53)', True);
  Test({LINENUM}22755, 'coprime(13⋅17, -2⋅2⋅2⋅2⋅101)', True);
  Test({LINENUM}22756, 'coprime(53, -3)', True);
  Test({LINENUM}22757, 'coprime(123456, -1)', True);
  Test({LINENUM}22758, 'coprime(-10000000, -3)', True);
  Test({LINENUM}22759, 'coprime(-1000000, 1)', True);
  Test({LINENUM}22760, 'coprime(-17, -19)', True);
  Test({LINENUM}22761, 'coprime(-1, -1)', True);
  Test({LINENUM}22762, 'coprime(1, -2048)', True);

  Test({LINENUM}22764, 'coprime(2, -2)', False);
  Test({LINENUM}22765, 'coprime(-2, 2048)', False);
  Test({LINENUM}22766, 'coprime(-1024, 32)', False);
  Test({LINENUM}22767, 'coprime(-3, 27)', False);
  Test({LINENUM}22768, 'coprime(-2⋅7⋅11, -2⋅53⋅53)', False);
  Test({LINENUM}22769, 'coprime(-2⋅7⋅11, -5⋅7⋅53⋅53)', False);
  Test({LINENUM}22770, 'coprime(-5⋅7⋅11, 5⋅7⋅53⋅53)', False);
  Test({LINENUM}22771, 'coprime(-5⋅7⋅11, 2⋅3⋅11⋅53)', False);
  Test({LINENUM}22772, 'coprime(2⋅3⋅5⋅7⋅11, -2⋅3⋅11⋅53)', False);
  Test({LINENUM}22773, 'coprime(119135437, -119135437)', False);

  Test({LINENUM}22775, 'coprime(-2, 0)', False);
  Test({LINENUM}22776, 'coprime(-2, 0)', False);
  Test({LINENUM}22777, 'coprime(-5, 0)', False);
  Test({LINENUM}22778, 'coprime(-5, 0)', False);
  Test({LINENUM}22779, 'coprime(-2⋅7⋅11, 0)', False);
  Test({LINENUM}22780, 'coprime(-13⋅17, 0)', False);
  Test({LINENUM}22781, 'coprime(-53, 0)', False);
  Test({LINENUM}22782, 'coprime(-123456, 0)', False);
  Test({LINENUM}22783, 'coprime(-10000000, 0)', False);
  Test({LINENUM}22784, 'coprime(0, -10000000)', False);
  Test({LINENUM}22785, 'coprime(-1000000, 0)', False);
  Test({LINENUM}22786, 'coprime(-17, 0)', False);
  Test({LINENUM}22787, 'coprime(-1, 0)', True);
  Test({LINENUM}22788, 'coprime(0, -1)', True);

  Test({LINENUM}22790, 'coprime(89408484632772, -1861618814930)', False);

  Test({LINENUM}22792, 'coprime(41353513, 75642727)', True);
  Test({LINENUM}22793, 'coprime(846060, 4894083)', False);
  Test({LINENUM}22794, 'coprime(-41353513, -75642727)', True);
  Test({LINENUM}22795, 'coprime(846060, -4894083)', False);

  Test({LINENUM}22797, 'coprime(48240917733, 81981650157)', False);
  Test({LINENUM}22798, 'coprime(48940917733, 81981650166)', True);
  Test({LINENUM}22799, 'coprime(48240917733, -81981650157)', False);
  Test({LINENUM}22800, 'coprime(-48940917733, -81981650166)', True);

  Test({LINENUM}22802, 'coprime(-48940917733)', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}22803, 'coprime(-48940917733, 123, 5608)', failure, 'Too many arguments.');
  Test({LINENUM}22804, 'coprime(-48940917733, 123.08)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');

  // The Iverson bracket

  Test({LINENUM}22808, 'Iverson(false)', 0);
  Test({LINENUM}22809, 'Iverson(true)', 1);

  Test({LINENUM}22811, 'Iverson(1)', failure, 'An object of type boolean was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}22812, 'Iverson()', failure, 'A required argument of type boolean is missing.');
  Test({LINENUM}22813, 'Iverson(false, true)', failure, 'Too many arguments.');

  // Kronecker delta

  for _i := -10 to 10 do
    for _j := -10 to 10 do
      Test({LINENUM}22819, Format('Kronecker(%d, %d)', [_i, _j]), IfThen(_i = _j, 1, 0));

  for _i := -10 to 10 do
    for _j := -10 to 10 do
      Test({LINENUM}22823, Format('Kronecker(%d, %d) = Iverson(%d = %d)', [_i, _j, _i, _j]), True);

  Test({LINENUM}22825, 'Kronecker(5)', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}22826, 'Kronecker(5, 6, 7)', failure, 'Too many arguments.');
  Test({LINENUM}22827, 'Kronecker(5, 6.7)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');

  // Jaboci symbol

  Test({LINENUM}22831, 'JacobiSymbol(15, 7)', 1);
  Test({LINENUM}22832, 'JacobiSymbol(27, 29)', -1);
  Test({LINENUM}22833, 'JacobiSymbol(4, 35)', 1);
  Test({LINENUM}22834, 'JacobiSymbol(10, 35)', 0);
  Test({LINENUM}22835, 'JacobiSymbol(18, 35)', -1);
  Test({LINENUM}22836, 'JacobiSymbol(30, 35)', 0);
  Test({LINENUM}22837, 'JacobiSymbol(1, 53)', 1);
  Test({LINENUM}22838, 'JacobiSymbol(10, 53)', 1);
  Test({LINENUM}22839, 'JacobiSymbol(12, 53)', -1);
  Test({LINENUM}22840, 'JacobiSymbol(17, 53)', 1);
  Test({LINENUM}22841, 'JacobiSymbol(25, 53)', 1);
  Test({LINENUM}22842, 'JacobiSymbol(26, 53)', -1);

  Test({LINENUM}22844, 'JacobiSymbol(19, 45)', 1);
  Test({LINENUM}22845, 'JacobiSymbol(8, 21)', -1);
  Test({LINENUM}22846, 'JacobiSymbol(5, 21)', 1);
  Test({LINENUM}22847, 'JacobiSymbol(988, 9875)', -1);
  Test({LINENUM}22848, 'JacobiSymbol(1001, 9907)', -1);
  Test({LINENUM}22849, 'JacobiSymbol(1121, 10253)', -1);
  Test({LINENUM}22850, 'JacobiSymbol(1234, 10253)', -1);
  Test({LINENUM}22851, 'JacobiSymbol(2345, 10253)', -1);
  Test({LINENUM}22852, 'JacobiSymbol(2345, 13511)', -1);
  Test({LINENUM}22853, 'JacobiSymbol(2345, 13555)', 0);
  Test({LINENUM}22854, 'JacobiSymbol(2347, 13557)', -1);
  Test({LINENUM}22855, 'JacobiSymbol(2347, 22321)', -1);
  Test({LINENUM}22856, 'JacobiSymbol(23471, 22321)', -1);
  Test({LINENUM}22857, 'JacobiSymbol(13471, 12321)', 1);

  Test({LINENUM}22859, 'JacobiSymbol(-230, 597)', -1);
  Test({LINENUM}22860, 'JacobiSymbol(-5221, 899)', 1);

  for _i := Low(JacobiSymbolValues) to High(JacobiSymbolValues) do
    if Odd(_i) then
      for _j := Low(JacobiSymbolValues[_i]) to High(JacobiSymbolValues[_i]) do
        Test({LINENUM}22865, Format('JacobiSymbol(%d, %d)', [_j, _i]), JacobiSymbolValues[_i, _j]);

  Test({LINENUM}22867, 'JacobiSymbol(15, -2)', failure, 'Invalid modulus (not an odd positive integer) for Jacobi symbol: -2');
  Test({LINENUM}22868, 'JacobiSymbol(15, -1)', failure, 'Invalid modulus (not an odd positive integer) for Jacobi symbol: -1');
  Test({LINENUM}22869, 'JacobiSymbol(15, 0)', failure, 'Invalid modulus (not an odd positive integer) for Jacobi symbol: 0');
  Test({LINENUM}22870, 'JacobiSymbol(15, 2)', failure, 'Invalid modulus (not an odd positive integer) for Jacobi symbol: 2');
  Test({LINENUM}22871, 'JacobiSymbol(15, 4)', failure, 'Invalid modulus (not an odd positive integer) for Jacobi symbol: 4');
  Test({LINENUM}22872, 'JacobiSymbol(15, 6)', failure, 'Invalid modulus (not an odd positive integer) for Jacobi symbol: 6');

  for _i := Low(JacobiSymbolValues) to High(JacobiSymbolValues) do
    if Odd(_i) then
      for _j := Low(JacobiSymbolValues[_i]) to High(JacobiSymbolValues[_i]) do
        if gcd(_i, _j) = 1 then
          Test({LINENUM}22878, Format('abs(JacobiSymbol(%d, %d))', [_j, _i]), 1)
        else
          Test({LINENUM}22880, Format('JacobiSymbol(%d, %d)', [_j, _i]), 0);

  for _i := 1 to 99 do
    if Odd(_i) then
      Test({LINENUM}22884, Format('JacobiSymbol(-1, %d)', [_i]), AltSgn((_i - 1) div 2));

  for _i := 1 to 99 do
    if Odd(_i) then
      Test({LINENUM}22888, Format('JacobiSymbol(2, %d)', [_i]), AltSgn((Sqr(_i) - 1) div 8));

  Test({LINENUM}22890, 'JacobiSymbol(5)', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}22891, 'JacobiSymbol(5, 3, 1)', failure, 'Too many arguments.');
  Test({LINENUM}22892, 'JacobiSymbol(19, 45.2)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');

  // Legendre symbol

  for _i := Low(JacobiSymbolValues) to High(JacobiSymbolValues) do
    if Odd(_i) and IsPrime(_i) then
      for _j := Low(JacobiSymbolValues[_i]) to High(JacobiSymbolValues[_i]) do
        Test({LINENUM}22899, Format('LegendreSymbol(%d, %d)', [_j, _i]), JacobiSymbolValues[_i, _j]);

  for _i := Low(JacobiSymbolValues) to High(JacobiSymbolValues) do
    if Odd(_i) and IsPrime(_i) then
      for _j := Low(JacobiSymbolValues[_i]) to High(JacobiSymbolValues[_i]) do
        Test({LINENUM}22904, Format('LegendreSymbol(%d + %d, %d)', [_j, _i, _i]), JacobiSymbolValues[_i, _j]);

  for _i := 3 to 100 do
    Test({LINENUM}22907, Format('LegendreSymbol(3, %d)', [NthPrime(_i)]), AltSgn(Math.Floor((NthPrime(_i) + 1) / 6)));

  for _i := 4 to 100 do
    Test({LINENUM}22910, Format('LegendreSymbol(5, %d)', [NthPrime(_i)]), AltSgn(Math.Floor((2*NthPrime(_i) + 2) / 5)));

  for _i := 2 to 20 do
    for _j := 2 to 20 do
      if _i <> _j then
        Test({LINENUM}22915,
          Format('LegendreSymbol(%d, %d) ⋅ LegendreSymbol(%d, %d)',
            [NthPrime(_j), NthPrime(_i), NthPrime(_i), NthPrime(_j)]),
          AltSgn((NthPrime(_i) - 1)*(NthPrime(_j) - 1) div 4)
        );

  Test({LINENUM}22921, 'LegendreSymbol(15, 7)', 1);
  Test({LINENUM}22922, 'LegendreSymbol(27, 29)', -1);
  Test({LINENUM}22923, 'LegendreSymbol(4, 35)', failure, 'Non-prime modulus for Legendre symbol: 35');
  Test({LINENUM}22924, 'LegendreSymbol(4, 51)', failure, 'Non-prime modulus for Legendre symbol: 51');
  Test({LINENUM}22925, 'LegendreSymbol(1, 53)', 1);
  Test({LINENUM}22926, 'LegendreSymbol(10, 53)', 1);
  Test({LINENUM}22927, 'LegendreSymbol(12, 53)', -1);
  Test({LINENUM}22928, 'LegendreSymbol(17, 53)', 1);
  Test({LINENUM}22929, 'LegendreSymbol(25, 53)', 1);
  Test({LINENUM}22930, 'LegendreSymbol(26, 53)', -1);

  Test({LINENUM}22932, 'LegendreSymbol(12345, 331)', -1);

  Test({LINENUM}22934, 'LegendreSymbol(19, 45)', failure, 'Non-prime modulus for Legendre symbol: 45');
  Test({LINENUM}22935, 'LegendreSymbol(8, 21)', failure, 'Non-prime modulus for Legendre symbol: 21');
  Test({LINENUM}22936, 'LegendreSymbol(5, 21)', failure, 'Non-prime modulus for Legendre symbol: 21');
  Test({LINENUM}22937, 'LegendreSymbol(1001, 9907)', -1);

  Test({LINENUM}22939, 'LegendreSymbol(19, 1)', failure, 'Non-prime modulus for Legendre symbol: 1');
  Test({LINENUM}22940, 'LegendreSymbol(19, 0)', failure, 'Non-prime modulus for Legendre symbol: 0');
  Test({LINENUM}22941, 'LegendreSymbol(19, -1)', failure, 'Non-prime modulus for Legendre symbol: -1');
  Test({LINENUM}22942, 'LegendreSymbol(19, -2)', failure, 'Non-prime modulus for Legendre symbol: -2');

  Test({LINENUM}22944, 'LegendreSymbol(19, 2)', failure, 'Invalid modulus (not an odd positive integer) for Jacobi symbol: 2');

  Test({LINENUM}22946, 'LegendreSymbol(5)', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}22947, 'LegendreSymbol(5, 3, 1)', failure, 'Too many arguments.');
  Test({LINENUM}22948, 'LegendreSymbol(19, 45.2)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');

  // Kronecker symbol

  Test({LINENUM}22952, 'KroneckerSymbol(4, 7)', 1);
  Test({LINENUM}22953, 'KroneckerSymbol(4, 10)', 0);
  Test({LINENUM}22954, 'KroneckerSymbol(4, 13)', 1);
  Test({LINENUM}22955, 'KroneckerSymbol(4, 22)', 0);

  Test({LINENUM}22957, 'KroneckerSymbol(7, 13)', -1);
  Test({LINENUM}22958, 'KroneckerSymbol(7, 23)', -1);
  Test({LINENUM}22959, 'KroneckerSymbol(7, 24)', 1);
  Test({LINENUM}22960, 'KroneckerSymbol(7, 25)', 1);
  Test({LINENUM}22961, 'KroneckerSymbol(7, 26)', -1);

  Test({LINENUM}22963, 'KroneckerSymbol(19, 3)', 1);
  Test({LINENUM}22964, 'KroneckerSymbol(19, 4)', 1);
  Test({LINENUM}22965, 'KroneckerSymbol(19, 5)', 1);
  Test({LINENUM}22966, 'KroneckerSymbol(19, 6)', -1);

  Test({LINENUM}22968, 'KroneckerSymbol(20, 10)', 0);
  Test({LINENUM}22969, 'KroneckerSymbol(20, 11)', 1);
  Test({LINENUM}22970, 'KroneckerSymbol(20, 12)', 0);
  Test({LINENUM}22971, 'KroneckerSymbol(20, 13)', -1);

  Test({LINENUM}22973, 'KroneckerSymbol(2837, 2458)', -1);
  Test({LINENUM}22974, 'KroneckerSymbol(2837, 2459)', 1);
  Test({LINENUM}22975, 'KroneckerSymbol(2837, 2460)', 1);

  Test({LINENUM}22977, 'KroneckerSymbol(10234, 8642)', 0);
  Test({LINENUM}22978, 'KroneckerSymbol(10235, 8642)', 1);
  Test({LINENUM}22979, 'KroneckerSymbol(10235, 8643)', 1);
  Test({LINENUM}22980, 'KroneckerSymbol(10235, 8644)', -1);
  Test({LINENUM}22981, 'KroneckerSymbol(10235, 8645)', 0);
  Test({LINENUM}22982, 'KroneckerSymbol(10235, 8646)', -1);
  Test({LINENUM}22983, 'KroneckerSymbol(10235, 8647)', 1);
  Test({LINENUM}22984, 'KroneckerSymbol(10235, 8648)', 0);

  Test({LINENUM}22986, 'KroneckerSymbol(9, 2)', 1);
  Test({LINENUM}22987, 'KroneckerSymbol(10, 2)', 0);
  Test({LINENUM}22988, 'KroneckerSymbol(11, 2)', -1);
  Test({LINENUM}22989, 'KroneckerSymbol(12, 2)', 0);
  Test({LINENUM}22990, 'KroneckerSymbol(13, 2)', -1);
  Test({LINENUM}22991, 'KroneckerSymbol(14, 2)', 0);
  Test({LINENUM}22992, 'KroneckerSymbol(15, 2)', 1);
  Test({LINENUM}22993, 'KroneckerSymbol(12345, 2)', 1);
  Test({LINENUM}22994, 'KroneckerSymbol(77777, 2)', 1);
  Test({LINENUM}22995, 'KroneckerSymbol(77779, 2)', -1);

  Test({LINENUM}22997, 'KroneckerSymbol(-9, 2)', 1);
  Test({LINENUM}22998, 'KroneckerSymbol(-10, 2)', 0);
  Test({LINENUM}22999, 'KroneckerSymbol(-11, 2)', -1);
  Test({LINENUM}23000, 'KroneckerSymbol(-12, 2)', 0);
  Test({LINENUM}23001, 'KroneckerSymbol(-13, 2)', -1);
  Test({LINENUM}23002, 'KroneckerSymbol(-14, 2)', 0);
  Test({LINENUM}23003, 'KroneckerSymbol(-15, 2)', 1);
  Test({LINENUM}23004, 'KroneckerSymbol(-12345, 2)', 1);
  Test({LINENUM}23005, 'KroneckerSymbol(-77777, 2)', 1);
  Test({LINENUM}23006, 'KroneckerSymbol(-77779, 2)', -1);

  Test({LINENUM}23008, 'KroneckerSymbol(-2317, 17)', -1);
  Test({LINENUM}23009, 'KroneckerSymbol(-2317, 18)', -1);
  Test({LINENUM}23010, 'KroneckerSymbol(-2317, 19)', 1);
  Test({LINENUM}23011, 'KroneckerSymbol(-2317, 20)', -1);
  Test({LINENUM}23012, 'KroneckerSymbol(-2317, 21)', 0);
  Test({LINENUM}23013, 'KroneckerSymbol(-2317, 22)', -1);
  Test({LINENUM}23014, 'KroneckerSymbol(-2317, 23)', 1);

  Test({LINENUM}23016, 'KroneckerSymbol(-2318, 49)', 1);
  Test({LINENUM}23017, 'KroneckerSymbol(-2318, 50)', 0);
  Test({LINENUM}23018, 'KroneckerSymbol(-2318, 51)', -1);
  Test({LINENUM}23019, 'KroneckerSymbol(-2318, 52)', 0);
  Test({LINENUM}23020, 'KroneckerSymbol(-2318, 53)', -1);
  Test({LINENUM}23021, 'KroneckerSymbol(-2318, 54)', 0);
  Test({LINENUM}23022, 'KroneckerSymbol(-2318, 55)', -1);
  Test({LINENUM}23023, 'KroneckerSymbol(-2318, 56)', 0);
  Test({LINENUM}23024, 'KroneckerSymbol(-2318, 57)', 0);
  Test({LINENUM}23025, 'KroneckerSymbol(-2318, 58)', 0);
  Test({LINENUM}23026, 'KroneckerSymbol(-2318, 59)', -1);

  Test({LINENUM}23028, 'KroneckerSymbol(2531, -17)', 1);
  Test({LINENUM}23029, 'KroneckerSymbol(2531, -18)', -1);
  Test({LINENUM}23030, 'KroneckerSymbol(2531, -19)', 1);
  Test({LINENUM}23031, 'KroneckerSymbol(2531, -20)', 1);
  Test({LINENUM}23032, 'KroneckerSymbol(2531, -21)', -1);
  Test({LINENUM}23033, 'KroneckerSymbol(2531, -22)', -1);
  Test({LINENUM}23034, 'KroneckerSymbol(2531, -23)', 1);
  Test({LINENUM}23035, 'KroneckerSymbol(2531, -24)', 1);
  Test({LINENUM}23036, 'KroneckerSymbol(2531, -25)', 1);
  Test({LINENUM}23037, 'KroneckerSymbol(2531, -26)', -1);
  Test({LINENUM}23038, 'KroneckerSymbol(2531, -27)', -1);
  Test({LINENUM}23039, 'KroneckerSymbol(2531, -28)', 1);
  Test({LINENUM}23040, 'KroneckerSymbol(2531, -29)', -1);

  Test({LINENUM}23042, 'KroneckerSymbol(-5127, -3123)', 0);
  Test({LINENUM}23043, 'KroneckerSymbol(-5127, -3124)', -1);
  Test({LINENUM}23044, 'KroneckerSymbol(-5127, -3125)', 1);
  Test({LINENUM}23045, 'KroneckerSymbol(-5127, -3126)', 0);
  Test({LINENUM}23046, 'KroneckerSymbol(-5127, -3127)', -1);
  Test({LINENUM}23047, 'KroneckerSymbol(-5127, -3128)', 1);
  Test({LINENUM}23048, 'KroneckerSymbol(-5127, -3129)', 0);
  Test({LINENUM}23049, 'KroneckerSymbol(-5127, -3130)', 1);
  Test({LINENUM}23050, 'KroneckerSymbol(-5127, -3131)', -1);
  Test({LINENUM}23051, 'KroneckerSymbol(-5127, -3132)', 0);
  Test({LINENUM}23052, 'KroneckerSymbol(-5127, -3133)', -1);
  Test({LINENUM}23053, 'KroneckerSymbol(-5127, -3134)', 1);

  Test({LINENUM}23055, 'KroneckerSymbol(-28531, -207)', -1);
  Test({LINENUM}23056, 'KroneckerSymbol(-28531, -208)', -1);
  Test({LINENUM}23057, 'KroneckerSymbol(-28531, -209)', -1);
  Test({LINENUM}23058, 'KroneckerSymbol(-28531, -210)', -1);
  Test({LINENUM}23059, 'KroneckerSymbol(-28531, -211)', 1);
  Test({LINENUM}23060, 'KroneckerSymbol(-28531, -212)', -1);
  Test({LINENUM}23061, 'KroneckerSymbol(-28531, -213)', -1);
  Test({LINENUM}23062, 'KroneckerSymbol(-28531, -214)', -1);
  Test({LINENUM}23063, 'KroneckerSymbol(-28531, -215)', -1);
  Test({LINENUM}23064, 'KroneckerSymbol(-28531, -216)', -1);
  Test({LINENUM}23065, 'KroneckerSymbol(-28531, -217)', -1);
  Test({LINENUM}23066, 'KroneckerSymbol(-28531, -218)', 1);
  Test({LINENUM}23067, 'KroneckerSymbol(-28531, -219)', 1);
  Test({LINENUM}23068, 'KroneckerSymbol(-28531, -220)', -1);
  Test({LINENUM}23069, 'KroneckerSymbol(-28531, -221)', 1);

  Test({LINENUM}23071, 'KroneckerSymbol(-291, -123456)', 0);
  Test({LINENUM}23072, 'KroneckerSymbol(-291, -123457)', -1);
  Test({LINENUM}23073, 'KroneckerSymbol(-291, -123458)', -1);
  Test({LINENUM}23074, 'KroneckerSymbol(-291, -123459)', 0);
  Test({LINENUM}23075, 'KroneckerSymbol(-291, -123460)', 1);
  Test({LINENUM}23076, 'KroneckerSymbol(-291, -123461)', -1);
  Test({LINENUM}23077, 'KroneckerSymbol(-291, -123462)', 0);

  for _i := -100 to 100 do
    Test({LINENUM}23080, 'KroneckerSymbol(' + _i.ToString + ', 0)', IfThen(Abs(_i) = 1, 1, 0));

  for _i := -100 to 100 do
    Test({LINENUM}23083, 'KroneckerSymbol(0, ' + _i.ToString + ')', IfThen(Abs(_i) = 1, 1, 0));

  for _i := Low(KroneckerSymbolValues) to High(KroneckerSymbolValues) do
    for _j := Low(KroneckerSymbolValues[_i]) to High(KroneckerSymbolValues[_i]) do
      Test({LINENUM}23087, Format('KroneckerSymbol(%d, %d)', [_j, _i]), KroneckerSymbolValues[_i, _j]);

  for _i := Low(KroneckerSymbolValues) to High(KroneckerSymbolValues) do
    for _j := Low(KroneckerSymbolValues[_i]) to High(KroneckerSymbolValues[_i]) do
      if gcd(_i, _j) = 1 then
        Test({LINENUM}23092, Format('abs(KroneckerSymbol(%d, %d))', [_j, _i]), 1)
      else
        Test({LINENUM}23094, Format('KroneckerSymbol(%d, %d)', [_j, _i]), 0);

  // Euler's totient (phi) function

  for _i := Low(Totients) to High(Totients) do
    Test({LINENUM}23099, 'totient(' + _i.ToString + ')', Totients[_i]);

  Test({LINENUM}23101, 'totient(1000)', 400);
  Test({LINENUM}23102, 'totient(5000)', 2000);
  Test({LINENUM}23103, 'totient(10000)', 4000);
  Test({LINENUM}23104, 'totient(50000)', 20000);
  Test({LINENUM}23105, 'totient(100000)', 40000);
  Test({LINENUM}23106, 'totient(500000)', 200000);
  Test({LINENUM}23107, 'totient(1000000)', 400000);
  Test({LINENUM}23108, 'totient(5000000)', 2000000);
  Test({LINENUM}23109, 'totient(10000000)', 4000000);

  Test({LINENUM}23111, 'totient(-123)', failure, 'Totient only defined for positive integers.');
  Test({LINENUM}23112, 'totient(-1)', failure, 'Totient only defined for positive integers.');
  Test({LINENUM}23113, 'totient(0)', failure, 'Totient only defined for positive integers.');
  Test({LINENUM}23114, 'totient(1.5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}23115, 'totient()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}23116, 'totient(10, 20)', failure, 'Too many arguments.');

  // Cototient

  for _i := Low(Totients) to High(Totients) do
    Test({LINENUM}23121, 'cototient(' + _i.ToString + ')', _i - Totients[_i]);

  Test({LINENUM}23123, 'cototient(1000)', 600);
  Test({LINENUM}23124, 'cototient(5000)', 3000);
  Test({LINENUM}23125, 'cototient(10000)', 6000);
  Test({LINENUM}23126, 'cototient(50000)', 30000);
  Test({LINENUM}23127, 'cototient(100000)', 60000);
  Test({LINENUM}23128, 'cototient(500000)', 300000);
  Test({LINENUM}23129, 'cototient(1000000)', 600000);
  Test({LINENUM}23130, 'cototient(5000000)', 3000000);
  Test({LINENUM}23131, 'cototient(10000000)', 6000000);

  Test({LINENUM}23133, 'cototient(-123)', failure, 'Totient only defined for positive integers.');
  Test({LINENUM}23134, 'cototient(-1)', failure, 'Totient only defined for positive integers.');
  Test({LINENUM}23135, 'cototient(0)', failure, 'Totient only defined for positive integers.');
  Test({LINENUM}23136, 'cototient(1.5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}23137, 'cototient()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}23138, 'cototient(10, 20)', failure, 'Too many arguments.');

  // Prime factorization

  Test({LINENUM}23142, 'PrimeFactors(1)', intarr([]));
  Test({LINENUM}23143, 'PrimeFactors(12)', intarr([2, 2, 3]));
  Test({LINENUM}23144, 'PrimeFactors(123)', intarr([3, 41]));
  Test({LINENUM}23145, 'PrimeFactors(1234)', intarr([2, 617]));
  Test({LINENUM}23146, 'PrimeFactors(12345)', intarr([3, 5, 823]));
  Test({LINENUM}23147, 'PrimeFactors(123456)', intarr([2, 2, 2, 2, 2, 2, 3, 643]));
  Test({LINENUM}23148, 'PrimeFactors(1234567)', intarr([127, 9721]));
  Test({LINENUM}23149, 'PrimeFactors(12345678)', intarr([2, 3, 3, 47, 14593]));
  Test({LINENUM}23150, 'PrimeFactors(123456789)', intarr([3, 3, 3607, 3803]));

  Test({LINENUM}23152, 'PrimeFactors(10)', intarr([2, 5]));
  Test({LINENUM}23153, 'PrimeFactors(100)', intarr([2, 2, 5, 5]));
  Test({LINENUM}23154, 'PrimeFactors(1000)', intarr([2, 2, 2, 5, 5, 5]));
  Test({LINENUM}23155, 'PrimeFactors(10000)', intarr([2, 2, 2, 2, 5, 5, 5, 5]));
  Test({LINENUM}23156, 'PrimeFactors(100000)', intarr([2, 2, 2, 2, 2, 5, 5, 5, 5, 5]));
  Test({LINENUM}23157, 'PrimeFactors(1000000)', intarr([2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}23158, 'PrimeFactors(10000000)', intarr([2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}23159, 'PrimeFactors(100000000)', intarr([2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}23160, 'PrimeFactors(1000000000)', intarr([2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5]));

  Test({LINENUM}23162, 'PrimeFactors(84910)', intarr([2, 5, 7, 1213]));
  Test({LINENUM}23163, 'PrimeFactors(93874)', intarr([2, 11, 17, 251]));
  Test({LINENUM}23164, 'PrimeFactors(925714)', intarr([2, 257, 1801]));
  Test({LINENUM}23165, 'PrimeFactors(911775)', intarr([3, 5, 5, 12157]));
  Test({LINENUM}23166, 'PrimeFactors(3529810)', intarr([2, 5, 23, 103, 149]));
  Test({LINENUM}23167, 'PrimeFactors(3529811)', intarr([277, 12743]));
  Test({LINENUM}23168, 'PrimeFactors(7482571)', intarr([541, 13831]));
  Test({LINENUM}23169, 'PrimeFactors(8267182)', intarr([2, 7, 7, 11, 7669]));
  Test({LINENUM}23170, 'PrimeFactors(68217455)', intarr([5, 37, 368743]));
  Test({LINENUM}23171, 'PrimeFactors(716084055)', intarr([3, 3, 5, 15912979]));
  Test({LINENUM}23172, 'PrimeFactors(1817854564)', intarr([2, 2, 19, 23919139]));
  Test({LINENUM}23173, 'PrimeFactors(84042420832)', intarr([2, 2, 2, 2, 2, 211, 12447041]));
  Test({LINENUM}23174, 'PrimeFactors(84914005284)', intarr([2, 2, 3, 3, 211, 1283, 8713]));
  Test({LINENUM}23175, 'PrimeFactors(415041487431)', intarr([3, 17, 22271, 365411]));
  Test({LINENUM}23176, 'PrimeFactors(480818410450)', intarr([2, 5, 5, 7, 89, 15435583]));
  Test({LINENUM}23177, 'PrimeFactors(876900466545)', intarr([3, 5, 17, 47, 6113, 11969]));
  Test({LINENUM}23178, 'PrimeFactors(4080854248054)', intarr([2, 347, 5880193441]));
  Test({LINENUM}23179, 'PrimeFactors(78148891090419)', intarr([3, 26049630363473]));
  Test({LINENUM}23180, 'PrimeFactors(71814860460404)', intarr([2, 2, 19, 944932374479]));
  Test({LINENUM}23181, 'PrimeFactors(21289442464403)', intarr([857, 24841823179]));
  Test({LINENUM}23182, 'PrimeFactors(654145381543015)', intarr([5, 389, 30859, 10898653]));
  Test({LINENUM}23183, 'PrimeFactors(6895186126573215)', intarr([3, 5, 2767, 166129047743]));
  Test({LINENUM}23184, 'PrimeFactors(1125899906842624)', intarr([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]));
  Test({LINENUM}23185, 'PrimeFactors(1752489248702471)', intarr([109, 2531, 20563, 308923]));
  Test({LINENUM}23186, 'PrimeFactors(461529845206245646)', intarr([2, 23, 47, 83, 499, 563, 1327, 6899]));

{$IFNDEF QuickTest}
  Test({LINENUM}23189, 'PrimeFactors(461529845206245640)', intarr([2, 2, 2, 5, 11, 1048931466377831]));
  Test({LINENUM}23190, 'PrimeFactors(461529845206245641)', intarr([7, 29, 179, 12701374499993]));
  Test({LINENUM}23191, 'PrimeFactors(461529845206245642)', intarr([2, 3, 1091, 236087, 298642571]));
  Test({LINENUM}23192, 'PrimeFactors(461529845206245643)', intarr([2798921, 164895631283]));
  Test({LINENUM}23193, 'PrimeFactors(461529845206245644)', intarr([2, 2, 3533, 218287, 149612641]));
  Test({LINENUM}23194, 'PrimeFactors(461529845206245645)', intarr([3, 5, 1373, 841979, 26615629]));
  Test({LINENUM}23195, 'PrimeFactors(461529845206245646)', intarr([2, 23, 47, 83, 499, 563, 1327, 6899]));
  Test({LINENUM}23196, 'PrimeFactors(461529845206245647)', intarr([13, 557, 2387941, 26691787]));
  Test({LINENUM}23197, 'PrimeFactors(461529845206245648)', intarr([2, 2, 2, 2, 3, 3, 7, 43, 1361, 9973, 784489]));
  Test({LINENUM}23198, 'PrimeFactors(461529845206245649)', intarr([103, 107, 3116699, 13436431]));
  Test({LINENUM}23199, 'PrimeFactors(461529845206245650)', intarr([2, 5, 5, 1229, 7510656553397]));
  Test({LINENUM}23200, 'PrimeFactors(461529845206245651)', intarr([3, 11, 11, 17, 74790122379881]));
  Test({LINENUM}23201, 'PrimeFactors(461529845206245652)', intarr([2, 2, 27419911, 4207980883]));
  Test({LINENUM}23202, 'PrimeFactors(461529845206245653)', intarr([373, 1237345429507361]));
{$ENDIF}

  Test({LINENUM}23205, 'PrimeFactors(2)', intarr([2]));
  Test({LINENUM}23206, 'PrimeFactors(3)', intarr([3]));
  Test({LINENUM}23207, 'PrimeFactors(4)', intarr([2, 2]));
  Test({LINENUM}23208, 'PrimeFactors(5)', intarr([5]));
  Test({LINENUM}23209, 'PrimeFactors(6)', intarr([2, 3]));
  Test({LINENUM}23210, 'PrimeFactors(7)', intarr([7]));
  Test({LINENUM}23211, 'PrimeFactors(8)', intarr([2, 2, 2]));
  Test({LINENUM}23212, 'PrimeFactors(9)', intarr([3, 3]));
  Test({LINENUM}23213, 'PrimeFactors(10)', intarr([2, 5]));
  Test({LINENUM}23214, 'PrimeFactors(11)', intarr([11]));

  Test({LINENUM}23216, 'PrimeFactors(574298353)', intarr([574298353]));

{$IFNDEF QuickTest}
  Test({LINENUM}23219, 'PrimeFactors(253241523120337)', intarr([253241523120337]));
  Test({LINENUM}23220, 'PrimeFactors(11253241543723537)', intarr([11253241543723537]));
{$ENDIF}

  Test({LINENUM}23223, 'PrimeFactors(0)', failure, 'Cannot find the prime factors of a non-positive integer.');
  Test({LINENUM}23224, 'PrimeFactors(-1)', failure, 'Cannot find the prime factors of a non-positive integer.');
  Test({LINENUM}23225, 'PrimeFactors(-2)', failure, 'Cannot find the prime factors of a non-positive integer.');
  Test({LINENUM}23226, 'PrimeFactors(-100000000000000)', failure, 'Cannot find the prime factors of a non-positive integer.');

  Test({LINENUM}23228, 'PrimeFactors(5.6)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}23229, 'PrimeFactors()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}23230, 'PrimeFactors(5, 6)', failure, 'Too many arguments.');

  // Radical of an integer

  for _i := Low(Radicals) to High(Radicals) do
    Test({LINENUM}23235, 'rad(' + _i.ToString + ')', Radicals[_i]);

  for _i := 1 to 1000 do
    Test({LINENUM}23238, Format('rad(%d) = product(unique(PrimeFactors(%d)))', [_i, _i]), True);

  Test({LINENUM}23240, 'rad(0)', failure, 'Cannot find the prime factors of a non-positive integer.');
  Test({LINENUM}23241, 'rad(-1)', failure, 'Cannot find the prime factors of a non-positive integer.');
  Test({LINENUM}23242, 'rad(-2)', failure, 'Cannot find the prime factors of a non-positive integer.');
  Test({LINENUM}23243, 'rad(-100000000000000)', failure, 'Cannot find the prime factors of a non-positive integer.');

  Test({LINENUM}23245, 'rad(5.6)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}23246, 'rad()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}23247, 'rad(5, 6)', failure, 'Too many arguments.');

  // Square free integers

  Test({LINENUM}23251, 'IsSquareFree(1)', True);
  Test({LINENUM}23252, 'IsSquareFree(12)', False);
  Test({LINENUM}23253, 'IsSquareFree(123)', True);
  Test({LINENUM}23254, 'IsSquareFree(1234)', True);
  Test({LINENUM}23255, 'IsSquareFree(12345)', True);
  Test({LINENUM}23256, 'IsSquareFree(123456)', False);
  Test({LINENUM}23257, 'IsSquareFree(1234567)', True);
  Test({LINENUM}23258, 'IsSquareFree(12345678)', False);
  Test({LINENUM}23259, 'IsSquareFree(123456789)', False);

  Test({LINENUM}23261, 'IsSquareFree(10)', True);
  Test({LINENUM}23262, 'IsSquareFree(100)', False);
  Test({LINENUM}23263, 'IsSquareFree(1000)', False);
  Test({LINENUM}23264, 'IsSquareFree(10000)', False);
  Test({LINENUM}23265, 'IsSquareFree(100000)', False);
  Test({LINENUM}23266, 'IsSquareFree(1000000)', False);
  Test({LINENUM}23267, 'IsSquareFree(10000000)', False);
  Test({LINENUM}23268, 'IsSquareFree(100000000)', False);
  Test({LINENUM}23269, 'IsSquareFree(1000000000)', False);

  Test({LINENUM}23271, 'IsSquareFree(84910)', True);
  Test({LINENUM}23272, 'IsSquareFree(93874)', True);
  Test({LINENUM}23273, 'IsSquareFree(925714)', True);
  Test({LINENUM}23274, 'IsSquareFree(911775)', False);
  Test({LINENUM}23275, 'IsSquareFree(3529810)', True);
  Test({LINENUM}23276, 'IsSquareFree(3529811)', True);
  Test({LINENUM}23277, 'IsSquareFree(7482571)', True);
  Test({LINENUM}23278, 'IsSquareFree(8267182)', False);
  Test({LINENUM}23279, 'IsSquareFree(68217455)', True);
  Test({LINENUM}23280, 'IsSquareFree(716084055)', False);
  Test({LINENUM}23281, 'IsSquareFree(1817854564)', False);
  Test({LINENUM}23282, 'IsSquareFree(84042420832)', False);
  Test({LINENUM}23283, 'IsSquareFree(84914005284)', False);
  Test({LINENUM}23284, 'IsSquareFree(415041487431)', True);
  Test({LINENUM}23285, 'IsSquareFree(480818410450)', False);
  Test({LINENUM}23286, 'IsSquareFree(876900466545)', True);
  Test({LINENUM}23287, 'IsSquareFree(4080854248054)', True);
  Test({LINENUM}23288, 'IsSquareFree(78148891090419)', True);
  Test({LINENUM}23289, 'IsSquareFree(71814860460404)', False);
  Test({LINENUM}23290, 'IsSquareFree(21289442464403)', True);
  Test({LINENUM}23291, 'IsSquareFree(232152425429401)', False);
  Test({LINENUM}23292, 'IsSquareFree(654145381543015)', True);
  Test({LINENUM}23293, 'IsSquareFree(6895186126573215)', True);
  Test({LINENUM}23294, 'IsSquareFree(1125899906842624)', False);
  Test({LINENUM}23295, 'IsSquareFree(1752489248702471)', True);
  Test({LINENUM}23296, 'IsSquareFree(461529845206245646)', True);

{$IFNDEF QuickTest}
  Test({LINENUM}23299, 'IsSquareFree(461529845206245640)', False);
  Test({LINENUM}23300, 'IsSquareFree(461529845206245641)', True);
  Test({LINENUM}23301, 'IsSquareFree(461529845206245642)', True);
  Test({LINENUM}23302, 'IsSquareFree(461529845206245643)', True);
  Test({LINENUM}23303, 'IsSquareFree(461529845206245644)', False);
  Test({LINENUM}23304, 'IsSquareFree(461529845206245645)', True);
  Test({LINENUM}23305, 'IsSquareFree(461529845206245646)', True);
  Test({LINENUM}23306, 'IsSquareFree(461529845206245647)', True);
  Test({LINENUM}23307, 'IsSquareFree(461529845206245648)', False);
  Test({LINENUM}23308, 'IsSquareFree(461529845206245649)', True);
  Test({LINENUM}23309, 'IsSquareFree(461529845206245650)', False);
  Test({LINENUM}23310, 'IsSquareFree(461529845206245651)', False);
  Test({LINENUM}23311, 'IsSquareFree(461529845206245652)', False);
  Test({LINENUM}23312, 'IsSquareFree(461529845206245653)', True);
{$ENDIF}

  Test({LINENUM}23315, 'IsSquareFree(2)', True);
  Test({LINENUM}23316, 'IsSquareFree(3)', True);
  Test({LINENUM}23317, 'IsSquareFree(4)', False);
  Test({LINENUM}23318, 'IsSquareFree(5)', True);
  Test({LINENUM}23319, 'IsSquareFree(6)', True);
  Test({LINENUM}23320, 'IsSquareFree(7)', True);
  Test({LINENUM}23321, 'IsSquareFree(8)', False);
  Test({LINENUM}23322, 'IsSquareFree(9)', False);
  Test({LINENUM}23323, 'IsSquareFree(10)', True);
  Test({LINENUM}23324, 'IsSquareFree(11)', True);

  Test({LINENUM}23326, 'IsSquareFree(574298353)', True);

{$IFNDEF QuickTest}
  Test({LINENUM}23329, 'IsSquareFree(253241523120337)', True);
  Test({LINENUM}23330, 'IsSquareFree(11253241543723537)', True);
{$ENDIF}



  Test({LINENUM}23335, 'IsSquareFree(-1)', True);
  Test({LINENUM}23336, 'IsSquareFree(-12)', False);
  Test({LINENUM}23337, 'IsSquareFree(-123)', True);
  Test({LINENUM}23338, 'IsSquareFree(-1234)', True);
  Test({LINENUM}23339, 'IsSquareFree(-12345)', True);
  Test({LINENUM}23340, 'IsSquareFree(-123456)', False);
  Test({LINENUM}23341, 'IsSquareFree(-1234567)', True);
  Test({LINENUM}23342, 'IsSquareFree(-12345678)', False);
  Test({LINENUM}23343, 'IsSquareFree(-123456789)', False);

  Test({LINENUM}23345, 'IsSquareFree(-10)', True);
  Test({LINENUM}23346, 'IsSquareFree(-100)', False);
  Test({LINENUM}23347, 'IsSquareFree(-1000)', False);
  Test({LINENUM}23348, 'IsSquareFree(-10000)', False);
  Test({LINENUM}23349, 'IsSquareFree(-100000)', False);
  Test({LINENUM}23350, 'IsSquareFree(-1000000)', False);
  Test({LINENUM}23351, 'IsSquareFree(-10000000)', False);
  Test({LINENUM}23352, 'IsSquareFree(-100000000)', False);
  Test({LINENUM}23353, 'IsSquareFree(-1000000000)', False);

  Test({LINENUM}23355, 'IsSquareFree(-84910)', True);
  Test({LINENUM}23356, 'IsSquareFree(-93874)', True);
  Test({LINENUM}23357, 'IsSquareFree(-925714)', True);
  Test({LINENUM}23358, 'IsSquareFree(-911775)', False);
  Test({LINENUM}23359, 'IsSquareFree(-3529810)', True);
  Test({LINENUM}23360, 'IsSquareFree(-3529811)', True);
  Test({LINENUM}23361, 'IsSquareFree(-7482571)', True);
  Test({LINENUM}23362, 'IsSquareFree(-8267182)', False);
  Test({LINENUM}23363, 'IsSquareFree(-68217455)', True);
  Test({LINENUM}23364, 'IsSquareFree(-716084055)', False);
  Test({LINENUM}23365, 'IsSquareFree(-1817854564)', False);
  Test({LINENUM}23366, 'IsSquareFree(-84042420832)', False);
  Test({LINENUM}23367, 'IsSquareFree(-84914005284)', False);
  Test({LINENUM}23368, 'IsSquareFree(-415041487431)', True);
  Test({LINENUM}23369, 'IsSquareFree(-480818410450)', False);
  Test({LINENUM}23370, 'IsSquareFree(-876900466545)', True);
  Test({LINENUM}23371, 'IsSquareFree(-4080854248054)', True);
  Test({LINENUM}23372, 'IsSquareFree(-78148891090419)', True);
  Test({LINENUM}23373, 'IsSquareFree(-71814860460404)', False);
  Test({LINENUM}23374, 'IsSquareFree(-21289442464403)', True);
  Test({LINENUM}23375, 'IsSquareFree(-232152425429401)', False);
  Test({LINENUM}23376, 'IsSquareFree(-654145381543015)', True);
  Test({LINENUM}23377, 'IsSquareFree(-6895186126573215)', True);
  Test({LINENUM}23378, 'IsSquareFree(-1125899906842624)', False);
  Test({LINENUM}23379, 'IsSquareFree(-1752489248702471)', True);
  Test({LINENUM}23380, 'IsSquareFree(-461529845206245646)', True);

{$IFNDEF QuickTest}
  Test({LINENUM}23383, 'IsSquareFree(-461529845206245640)', False);
  Test({LINENUM}23384, 'IsSquareFree(-461529845206245641)', True);
  Test({LINENUM}23385, 'IsSquareFree(-461529845206245642)', True);
  Test({LINENUM}23386, 'IsSquareFree(-461529845206245643)', True);
  Test({LINENUM}23387, 'IsSquareFree(-461529845206245644)', False);
  Test({LINENUM}23388, 'IsSquareFree(-461529845206245645)', True);
  Test({LINENUM}23389, 'IsSquareFree(-461529845206245646)', True);
  Test({LINENUM}23390, 'IsSquareFree(-461529845206245647)', True);
  Test({LINENUM}23391, 'IsSquareFree(-461529845206245648)', False);
  Test({LINENUM}23392, 'IsSquareFree(-461529845206245649)', True);
  Test({LINENUM}23393, 'IsSquareFree(-461529845206245650)', False);
  Test({LINENUM}23394, 'IsSquareFree(-461529845206245651)', False);
  Test({LINENUM}23395, 'IsSquareFree(-461529845206245652)', False);
  Test({LINENUM}23396, 'IsSquareFree(-461529845206245653)', True);
{$ENDIF}

  Test({LINENUM}23399, 'IsSquareFree(-2)', True);
  Test({LINENUM}23400, 'IsSquareFree(-3)', True);
  Test({LINENUM}23401, 'IsSquareFree(-4)', False);
  Test({LINENUM}23402, 'IsSquareFree(-5)', True);
  Test({LINENUM}23403, 'IsSquareFree(-6)', True);
  Test({LINENUM}23404, 'IsSquareFree(-7)', True);
  Test({LINENUM}23405, 'IsSquareFree(-8)', False);
  Test({LINENUM}23406, 'IsSquareFree(-9)', False);
  Test({LINENUM}23407, 'IsSquareFree(-10)', True);
  Test({LINENUM}23408, 'IsSquareFree(-11)', True);

  Test({LINENUM}23410, 'IsSquareFree(-574298353)', True);

{$IFNDEF QuickTest}
  Test({LINENUM}23413, 'IsSquareFree(-253241523120337)', True);
  Test({LINENUM}23414, 'IsSquareFree(-11253241543723537)', True);
{$ENDIF}

  Test({LINENUM}23417, 'IsSquareFree(5.6)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}23418, 'IsSquareFree()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}23419, 'IsSquareFree(5, 6)', failure, 'Too many arguments.');

  for _i := 1 to 1000 do
    Test({LINENUM}23422, Format('IsSquareFree(%d) = (%d = rad(%d))', [_i, _i, _i]), True);

  for _i := 1 to 1000 do
    Test({LINENUM}23425, Format('IsSquareFree(%d) = (PrimeFactors(%d) = unique(PrimeFactors(%d)))', [_i, _i, _i]), True);

  // Integer factorisation

  Test({LINENUM}23429, 'factors(1)', intarr([1])); // differs from PrimeFactors
  Test({LINENUM}23430, 'factors(12)', intarr([2, 2, 3]));
  Test({LINENUM}23431, 'factors(123)', intarr([3, 41]));
  Test({LINENUM}23432, 'factors(1234)', intarr([2, 617]));
  Test({LINENUM}23433, 'factors(12345)', intarr([3, 5, 823]));
  Test({LINENUM}23434, 'factors(123456)', intarr([2, 2, 2, 2, 2, 2, 3, 643]));
  Test({LINENUM}23435, 'factors(1234567)', intarr([127, 9721]));
  Test({LINENUM}23436, 'factors(12345678)', intarr([2, 3, 3, 47, 14593]));
  Test({LINENUM}23437, 'factors(123456789)', intarr([3, 3, 3607, 3803]));

  Test({LINENUM}23439, 'factors(10)', intarr([2, 5]));
  Test({LINENUM}23440, 'factors(100)', intarr([2, 2, 5, 5]));
  Test({LINENUM}23441, 'factors(1000)', intarr([2, 2, 2, 5, 5, 5]));
  Test({LINENUM}23442, 'factors(10000)', intarr([2, 2, 2, 2, 5, 5, 5, 5]));
  Test({LINENUM}23443, 'factors(100000)', intarr([2, 2, 2, 2, 2, 5, 5, 5, 5, 5]));
  Test({LINENUM}23444, 'factors(1000000)', intarr([2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}23445, 'factors(10000000)', intarr([2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}23446, 'factors(100000000)', intarr([2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}23447, 'factors(1000000000)', intarr([2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5]));

  Test({LINENUM}23449, 'factors(84910)', intarr([2, 5, 7, 1213]));
  Test({LINENUM}23450, 'factors(93874)', intarr([2, 11, 17, 251]));
  Test({LINENUM}23451, 'factors(925714)', intarr([2, 257, 1801]));
  Test({LINENUM}23452, 'factors(911775)', intarr([3, 5, 5, 12157]));
  Test({LINENUM}23453, 'factors(3529810)', intarr([2, 5, 23, 103, 149]));
  Test({LINENUM}23454, 'factors(3529811)', intarr([277, 12743]));
  Test({LINENUM}23455, 'factors(7482571)', intarr([541, 13831]));
  Test({LINENUM}23456, 'factors(8267182)', intarr([2, 7, 7, 11, 7669]));
  Test({LINENUM}23457, 'factors(68217455)', intarr([5, 37, 368743]));
  Test({LINENUM}23458, 'factors(716084055)', intarr([3, 3, 5, 15912979]));
  Test({LINENUM}23459, 'factors(1817854564)', intarr([2, 2, 19, 23919139]));
  Test({LINENUM}23460, 'factors(84042420832)', intarr([2, 2, 2, 2, 2, 211, 12447041]));
  Test({LINENUM}23461, 'factors(84914005284)', intarr([2, 2, 3, 3, 211, 1283, 8713]));
  Test({LINENUM}23462, 'factors(415041487431)', intarr([3, 17, 22271, 365411]));
  Test({LINENUM}23463, 'factors(480818410450)', intarr([2, 5, 5, 7, 89, 15435583]));
  Test({LINENUM}23464, 'factors(876900466545)', intarr([3, 5, 17, 47, 6113, 11969]));
  Test({LINENUM}23465, 'factors(4080854248054)', intarr([2, 347, 5880193441]));
  Test({LINENUM}23466, 'factors(78148891090419)', intarr([3, 26049630363473]));
  Test({LINENUM}23467, 'factors(71814860460404)', intarr([2, 2, 19, 944932374479]));
  Test({LINENUM}23468, 'factors(21289442464403)', intarr([857, 24841823179]));
  Test({LINENUM}23469, 'factors(654145381543015)', intarr([5, 389, 30859, 10898653]));
  Test({LINENUM}23470, 'factors(6895186126573215)', intarr([3, 5, 2767, 166129047743]));
  Test({LINENUM}23471, 'factors(1125899906842624)', intarr([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]));
  Test({LINENUM}23472, 'factors(1752489248702471)', intarr([109, 2531, 20563, 308923]));
  Test({LINENUM}23473, 'factors(461529845206245646)', intarr([2, 23, 47, 83, 499, 563, 1327, 6899]));

{$IFNDEF QuickTest}
  Test({LINENUM}23476, 'factors(461529845206245640)', intarr([2, 2, 2, 5, 11, 1048931466377831]));
  Test({LINENUM}23477, 'factors(461529845206245641)', intarr([7, 29, 179, 12701374499993]));
  Test({LINENUM}23478, 'factors(461529845206245642)', intarr([2, 3, 1091, 236087, 298642571]));
  Test({LINENUM}23479, 'factors(461529845206245643)', intarr([2798921, 164895631283]));
  Test({LINENUM}23480, 'factors(461529845206245644)', intarr([2, 2, 3533, 218287, 149612641]));
  Test({LINENUM}23481, 'factors(461529845206245645)', intarr([3, 5, 1373, 841979, 26615629]));
  Test({LINENUM}23482, 'factors(461529845206245646)', intarr([2, 23, 47, 83, 499, 563, 1327, 6899]));
  Test({LINENUM}23483, 'factors(461529845206245647)', intarr([13, 557, 2387941, 26691787]));
  Test({LINENUM}23484, 'factors(461529845206245648)', intarr([2, 2, 2, 2, 3, 3, 7, 43, 1361, 9973, 784489]));
  Test({LINENUM}23485, 'factors(461529845206245649)', intarr([103, 107, 3116699, 13436431]));
  Test({LINENUM}23486, 'factors(461529845206245650)', intarr([2, 5, 5, 1229, 7510656553397]));
  Test({LINENUM}23487, 'factors(461529845206245651)', intarr([3, 11, 11, 17, 74790122379881]));
  Test({LINENUM}23488, 'factors(461529845206245652)', intarr([2, 2, 27419911, 4207980883]));
  Test({LINENUM}23489, 'factors(461529845206245653)', intarr([373, 1237345429507361]));
{$ENDIF}

  Test({LINENUM}23492, 'factors(2)', intarr([2]));
  Test({LINENUM}23493, 'factors(3)', intarr([3]));
  Test({LINENUM}23494, 'factors(4)', intarr([2, 2]));
  Test({LINENUM}23495, 'factors(5)', intarr([5]));
  Test({LINENUM}23496, 'factors(6)', intarr([2, 3]));
  Test({LINENUM}23497, 'factors(7)', intarr([7]));
  Test({LINENUM}23498, 'factors(8)', intarr([2, 2, 2]));
  Test({LINENUM}23499, 'factors(9)', intarr([3, 3]));
  Test({LINENUM}23500, 'factors(10)', intarr([2, 5]));
  Test({LINENUM}23501, 'factors(11)', intarr([11]));

  Test({LINENUM}23503, 'factors(574298353)', intarr([574298353]));

{$IFNDEF QuickTest}
  Test({LINENUM}23506, 'factors(253241523120337)', intarr([253241523120337]));
  Test({LINENUM}23507, 'factors(11253241543723537)', intarr([11253241543723537]));
{$ENDIF}

  Test({LINENUM}23510, 'factors(0)', intarr([0])); // differs from PrimeFactors

  Test({LINENUM}23512, 'factors(-1)', intarr([-1])); // all negative ones differ from PrimeFactors
  Test({LINENUM}23513, 'factors(-12)', intarr([-2, 2, 3]));
  Test({LINENUM}23514, 'factors(-123)', intarr([-3, 41]));
  Test({LINENUM}23515, 'factors(-1234)', intarr([-2, 617]));
  Test({LINENUM}23516, 'factors(-12345)', intarr([-3, 5, 823]));
  Test({LINENUM}23517, 'factors(-123456)', intarr([-2, 2, 2, 2, 2, 2, 3, 643]));
  Test({LINENUM}23518, 'factors(-1234567)', intarr([-127, 9721]));
  Test({LINENUM}23519, 'factors(-12345678)', intarr([-2, 3, 3, 47, 14593]));
  Test({LINENUM}23520, 'factors(-123456789)', intarr([-3, 3, 3607, 3803]));

  Test({LINENUM}23522, 'factors(-10)', intarr([-2, 5]));
  Test({LINENUM}23523, 'factors(-100)', intarr([-2, 2, 5, 5]));
  Test({LINENUM}23524, 'factors(-1000)', intarr([-2, 2, 2, 5, 5, 5]));
  Test({LINENUM}23525, 'factors(-10000)', intarr([-2, 2, 2, 2, 5, 5, 5, 5]));
  Test({LINENUM}23526, 'factors(-100000)', intarr([-2, 2, 2, 2, 2, 5, 5, 5, 5, 5]));
  Test({LINENUM}23527, 'factors(-1000000)', intarr([-2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}23528, 'factors(-10000000)', intarr([-2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}23529, 'factors(-100000000)', intarr([-2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}23530, 'factors(-1000000000)', intarr([-2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5]));

  Test({LINENUM}23532, 'factors(-84910)', intarr([-2, 5, 7, 1213]));
  Test({LINENUM}23533, 'factors(-93874)', intarr([-2, 11, 17, 251]));
  Test({LINENUM}23534, 'factors(-925714)', intarr([-2, 257, 1801]));
  Test({LINENUM}23535, 'factors(-911775)', intarr([-3, 5, 5, 12157]));
  Test({LINENUM}23536, 'factors(-3529810)', intarr([-2, 5, 23, 103, 149]));
  Test({LINENUM}23537, 'factors(-3529811)', intarr([-277, 12743]));
  Test({LINENUM}23538, 'factors(-7482571)', intarr([-541, 13831]));
  Test({LINENUM}23539, 'factors(-8267182)', intarr([-2, 7, 7, 11, 7669]));
  Test({LINENUM}23540, 'factors(-68217455)', intarr([-5, 37, 368743]));
  Test({LINENUM}23541, 'factors(-716084055)', intarr([-3, 3, 5, 15912979]));
  Test({LINENUM}23542, 'factors(-1817854564)', intarr([-2, 2, 19, 23919139]));
  Test({LINENUM}23543, 'factors(-84042420832)', intarr([-2, 2, 2, 2, 2, 211, 12447041]));
  Test({LINENUM}23544, 'factors(-84914005284)', intarr([-2, 2, 3, 3, 211, 1283, 8713]));
  Test({LINENUM}23545, 'factors(-415041487431)', intarr([-3, 17, 22271, 365411]));
  Test({LINENUM}23546, 'factors(-480818410450)', intarr([-2, 5, 5, 7, 89, 15435583]));
  Test({LINENUM}23547, 'factors(-876900466545)', intarr([-3, 5, 17, 47, 6113, 11969]));
  Test({LINENUM}23548, 'factors(-4080854248054)', intarr([-2, 347, 5880193441]));
  Test({LINENUM}23549, 'factors(-78148891090419)', intarr([-3, 26049630363473]));
  Test({LINENUM}23550, 'factors(-71814860460404)', intarr([-2, 2, 19, 944932374479]));
  Test({LINENUM}23551, 'factors(-21289442464403)', intarr([-857, 24841823179]));
  Test({LINENUM}23552, 'factors(-654145381543015)', intarr([-5, 389, 30859, 10898653]));
  Test({LINENUM}23553, 'factors(-6895186126573215)', intarr([-3, 5, 2767, 166129047743]));
  Test({LINENUM}23554, 'factors(-1125899906842624)', intarr([-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]));
  Test({LINENUM}23555, 'factors(-1752489248702471)', intarr([-109, 2531, 20563, 308923]));
  Test({LINENUM}23556, 'factors(-461529845206245646)', intarr([-2, 23, 47, 83, 499, 563, 1327, 6899]));

{$IFNDEF QuickTest}
  Test({LINENUM}23559, 'factors(-461529845206245640)', intarr([-2, 2, 2, 5, 11, 1048931466377831]));
  Test({LINENUM}23560, 'factors(-461529845206245641)', intarr([-7, 29, 179, 12701374499993]));
  Test({LINENUM}23561, 'factors(-461529845206245642)', intarr([-2, 3, 1091, 236087, 298642571]));
  Test({LINENUM}23562, 'factors(-461529845206245643)', intarr([-2798921, 164895631283]));
  Test({LINENUM}23563, 'factors(-461529845206245644)', intarr([-2, 2, 3533, 218287, 149612641]));
  Test({LINENUM}23564, 'factors(-461529845206245645)', intarr([-3, 5, 1373, 841979, 26615629]));
  Test({LINENUM}23565, 'factors(-461529845206245646)', intarr([-2, 23, 47, 83, 499, 563, 1327, 6899]));
  Test({LINENUM}23566, 'factors(-461529845206245647)', intarr([-13, 557, 2387941, 26691787]));
  Test({LINENUM}23567, 'factors(-461529845206245648)', intarr([-2, 2, 2, 2, 3, 3, 7, 43, 1361, 9973, 784489]));
  Test({LINENUM}23568, 'factors(-461529845206245649)', intarr([-103, 107, 3116699, 13436431]));
  Test({LINENUM}23569, 'factors(-461529845206245650)', intarr([-2, 5, 5, 1229, 7510656553397]));
  Test({LINENUM}23570, 'factors(-461529845206245651)', intarr([-3, 11, 11, 17, 74790122379881]));
  Test({LINENUM}23571, 'factors(-461529845206245652)', intarr([-2, 2, 27419911, 4207980883]));
  Test({LINENUM}23572, 'factors(-461529845206245653)', intarr([-373, 1237345429507361]));
{$ENDIF}

  Test({LINENUM}23575, 'factors(-2)', intarr([-2]));
  Test({LINENUM}23576, 'factors(-3)', intarr([-3]));
  Test({LINENUM}23577, 'factors(-4)', intarr([-2, 2]));
  Test({LINENUM}23578, 'factors(-5)', intarr([-5]));
  Test({LINENUM}23579, 'factors(-6)', intarr([-2, 3]));
  Test({LINENUM}23580, 'factors(-7)', intarr([-7]));
  Test({LINENUM}23581, 'factors(-8)', intarr([-2, 2, 2]));
  Test({LINENUM}23582, 'factors(-9)', intarr([-3, 3]));
  Test({LINENUM}23583, 'factors(-10)', intarr([-2, 5]));
  Test({LINENUM}23584, 'factors(-11)', intarr([-11]));

  Test({LINENUM}23586, 'factors(-574298353)', intarr([-574298353]));

{$IFNDEF QuickTest}
  Test({LINENUM}23589, 'factors(-253241523120337)', intarr([-253241523120337]));
  Test({LINENUM}23590, 'factors(-11253241543723537)', intarr([-11253241543723537]));
{$ENDIF}

  Test({LINENUM}23593, 'factors(5.6)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}23594, 'factors()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}23595, 'factors(5, 6)', failure, 'Too many arguments.');

  // Factorised expression as string

  Test({LINENUM}23599, 'FactorizedExpression(1)', '1');
  Test({LINENUM}23600, 'FactorizedExpression(12)', '2⋅2⋅3');
  Test({LINENUM}23601, 'FactorizedExpression(123)', '3⋅41');
  Test({LINENUM}23602, 'FactorizedExpression(1234)', '2⋅617');
  Test({LINENUM}23603, 'FactorizedExpression(12345)', '3⋅5⋅823');
  Test({LINENUM}23604, 'FactorizedExpression(123456)', '2⋅2⋅2⋅2⋅2⋅2⋅3⋅643');
  Test({LINENUM}23605, 'FactorizedExpression(1234567)', '127⋅9721');
  Test({LINENUM}23606, 'FactorizedExpression(12345678)', '2⋅3⋅3⋅47⋅14593');
  Test({LINENUM}23607, 'FactorizedExpression(123456789)', '3⋅3⋅3607⋅3803');

  Test({LINENUM}23609, 'FactorizedExpression(10)', '2⋅5');
  Test({LINENUM}23610, 'FactorizedExpression(100)', '2⋅2⋅5⋅5');
  Test({LINENUM}23611, 'FactorizedExpression(1000)', '2⋅2⋅2⋅5⋅5⋅5');
  Test({LINENUM}23612, 'FactorizedExpression(10000)', '2⋅2⋅2⋅2⋅5⋅5⋅5⋅5');
  Test({LINENUM}23613, 'FactorizedExpression(100000)', '2⋅2⋅2⋅2⋅2⋅5⋅5⋅5⋅5⋅5');
  Test({LINENUM}23614, 'FactorizedExpression(1000000)', '2⋅2⋅2⋅2⋅2⋅2⋅5⋅5⋅5⋅5⋅5⋅5');
  Test({LINENUM}23615, 'FactorizedExpression(10000000)', '2⋅2⋅2⋅2⋅2⋅2⋅2⋅5⋅5⋅5⋅5⋅5⋅5⋅5');
  Test({LINENUM}23616, 'FactorizedExpression(100000000)', '2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅5⋅5⋅5⋅5⋅5⋅5⋅5⋅5');
  Test({LINENUM}23617, 'FactorizedExpression(1000000000)', '2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅5⋅5⋅5⋅5⋅5⋅5⋅5⋅5⋅5');

  Test({LINENUM}23619, 'FactorizedExpression(84910)', '2⋅5⋅7⋅1213');
  Test({LINENUM}23620, 'FactorizedExpression(93874)', '2⋅11⋅17⋅251');
  Test({LINENUM}23621, 'FactorizedExpression(925714)', '2⋅257⋅1801');
  Test({LINENUM}23622, 'FactorizedExpression(911775)', '3⋅5⋅5⋅12157');
  Test({LINENUM}23623, 'FactorizedExpression(3529810)', '2⋅5⋅23⋅103⋅149');
  Test({LINENUM}23624, 'FactorizedExpression(3529811)', '277⋅12743');
  Test({LINENUM}23625, 'FactorizedExpression(7482571)', '541⋅13831');
  Test({LINENUM}23626, 'FactorizedExpression(8267182)', '2⋅7⋅7⋅11⋅7669');
  Test({LINENUM}23627, 'FactorizedExpression(68217455)', '5⋅37⋅368743');
  Test({LINENUM}23628, 'FactorizedExpression(716084055)', '3⋅3⋅5⋅15912979');
  Test({LINENUM}23629, 'FactorizedExpression(1817854564)', '2⋅2⋅19⋅23919139');
  Test({LINENUM}23630, 'FactorizedExpression(84042420832)', '2⋅2⋅2⋅2⋅2⋅211⋅12447041');
  Test({LINENUM}23631, 'FactorizedExpression(84914005284)', '2⋅2⋅3⋅3⋅211⋅1283⋅8713');
  Test({LINENUM}23632, 'FactorizedExpression(415041487431)', '3⋅17⋅22271⋅365411');
  Test({LINENUM}23633, 'FactorizedExpression(480818410450)', '2⋅5⋅5⋅7⋅89⋅15435583');
  Test({LINENUM}23634, 'FactorizedExpression(876900466545)', '3⋅5⋅17⋅47⋅6113⋅11969');
  Test({LINENUM}23635, 'FactorizedExpression(4080854248054)', '2⋅347⋅5880193441');
  Test({LINENUM}23636, 'FactorizedExpression(78148891090419)', '3⋅26049630363473');
  Test({LINENUM}23637, 'FactorizedExpression(71814860460404)', '2⋅2⋅19⋅944932374479');
  Test({LINENUM}23638, 'FactorizedExpression(21289442464403)', '857⋅24841823179');
  Test({LINENUM}23639, 'FactorizedExpression(654145381543015)', '5⋅389⋅30859⋅10898653');
  Test({LINENUM}23640, 'FactorizedExpression(6895186126573215)', '3⋅5⋅2767⋅166129047743');
  Test({LINENUM}23641, 'FactorizedExpression(1125899906842624)', '2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2');
  Test({LINENUM}23642, 'FactorizedExpression(1752489248702471)', '109⋅2531⋅20563⋅308923');
  Test({LINENUM}23643, 'FactorizedExpression(461529845206245646)', '2⋅23⋅47⋅83⋅499⋅563⋅1327⋅6899');

  Test({LINENUM}23645, 'FactorizedExpression(0)', '0');

  Test({LINENUM}23647, 'FactorizedExpression(-1)', '−1');
  Test({LINENUM}23648, 'FactorizedExpression(-12)', '−2⋅2⋅3');
  Test({LINENUM}23649, 'FactorizedExpression(-123)', '−3⋅41');
  Test({LINENUM}23650, 'FactorizedExpression(-1234)', '−2⋅617');
  Test({LINENUM}23651, 'FactorizedExpression(-12345)', '−3⋅5⋅823');
  Test({LINENUM}23652, 'FactorizedExpression(-123456)', '−2⋅2⋅2⋅2⋅2⋅2⋅3⋅643');
  Test({LINENUM}23653, 'FactorizedExpression(-1234567)', '−127⋅9721');
  Test({LINENUM}23654, 'FactorizedExpression(-12345678)', '−2⋅3⋅3⋅47⋅14593');
  Test({LINENUM}23655, 'FactorizedExpression(-123456789)', '−3⋅3⋅3607⋅3803');

  Test({LINENUM}23657, 'FactorizedExpression(-10)', '−2⋅5');
  Test({LINENUM}23658, 'FactorizedExpression(-100)', '−2⋅2⋅5⋅5');
  Test({LINENUM}23659, 'FactorizedExpression(-1000)', '−2⋅2⋅2⋅5⋅5⋅5');
  Test({LINENUM}23660, 'FactorizedExpression(-10000)', '−2⋅2⋅2⋅2⋅5⋅5⋅5⋅5');
  Test({LINENUM}23661, 'FactorizedExpression(-100000)', '−2⋅2⋅2⋅2⋅2⋅5⋅5⋅5⋅5⋅5');
  Test({LINENUM}23662, 'FactorizedExpression(-1000000)', '−2⋅2⋅2⋅2⋅2⋅2⋅5⋅5⋅5⋅5⋅5⋅5');
  Test({LINENUM}23663, 'FactorizedExpression(-10000000)', '−2⋅2⋅2⋅2⋅2⋅2⋅2⋅5⋅5⋅5⋅5⋅5⋅5⋅5');
  Test({LINENUM}23664, 'FactorizedExpression(-100000000)', '−2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅5⋅5⋅5⋅5⋅5⋅5⋅5⋅5');
  Test({LINENUM}23665, 'FactorizedExpression(-1000000000)', '−2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅5⋅5⋅5⋅5⋅5⋅5⋅5⋅5⋅5');

  Test({LINENUM}23667, 'FactorizedExpression(-84910)', '−2⋅5⋅7⋅1213');
  Test({LINENUM}23668, 'FactorizedExpression(-93874)', '−2⋅11⋅17⋅251');
  Test({LINENUM}23669, 'FactorizedExpression(-925714)', '−2⋅257⋅1801');
  Test({LINENUM}23670, 'FactorizedExpression(-911775)', '−3⋅5⋅5⋅12157');
  Test({LINENUM}23671, 'FactorizedExpression(-3529810)', '−2⋅5⋅23⋅103⋅149');
  Test({LINENUM}23672, 'FactorizedExpression(-3529811)', '−277⋅12743');
  Test({LINENUM}23673, 'FactorizedExpression(-7482571)', '−541⋅13831');
  Test({LINENUM}23674, 'FactorizedExpression(-8267182)', '−2⋅7⋅7⋅11⋅7669');
  Test({LINENUM}23675, 'FactorizedExpression(-68217455)', '−5⋅37⋅368743');
  Test({LINENUM}23676, 'FactorizedExpression(-716084055)', '−3⋅3⋅5⋅15912979');
  Test({LINENUM}23677, 'FactorizedExpression(-1817854564)', '−2⋅2⋅19⋅23919139');
  Test({LINENUM}23678, 'FactorizedExpression(-84042420832)', '−2⋅2⋅2⋅2⋅2⋅211⋅12447041');
  Test({LINENUM}23679, 'FactorizedExpression(-84914005284)', '−2⋅2⋅3⋅3⋅211⋅1283⋅8713');
  Test({LINENUM}23680, 'FactorizedExpression(-415041487431)', '−3⋅17⋅22271⋅365411');
  Test({LINENUM}23681, 'FactorizedExpression(-480818410450)', '−2⋅5⋅5⋅7⋅89⋅15435583');
  Test({LINENUM}23682, 'FactorizedExpression(-876900466545)', '−3⋅5⋅17⋅47⋅6113⋅11969');
  Test({LINENUM}23683, 'FactorizedExpression(-4080854248054)', '−2⋅347⋅5880193441');
  Test({LINENUM}23684, 'FactorizedExpression(-78148891090419)', '−3⋅26049630363473');
  Test({LINENUM}23685, 'FactorizedExpression(-71814860460404)', '−2⋅2⋅19⋅944932374479');
  Test({LINENUM}23686, 'FactorizedExpression(-21289442464403)', '−857⋅24841823179');
  Test({LINENUM}23687, 'FactorizedExpression(-654145381543015)', '−5⋅389⋅30859⋅10898653');
  Test({LINENUM}23688, 'FactorizedExpression(-6895186126573215)', '−3⋅5⋅2767⋅166129047743');
  Test({LINENUM}23689, 'FactorizedExpression(-1125899906842624)', '−2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2⋅2');
  Test({LINENUM}23690, 'FactorizedExpression(-1752489248702471)', '−109⋅2531⋅20563⋅308923');
  Test({LINENUM}23691, 'FactorizedExpression(-461529845206245646)', '−2⋅23⋅47⋅83⋅499⋅563⋅1327⋅6899');

  Test({LINENUM}23693, 'FactorizedExpression(5.6)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}23694, 'FactorizedExpression()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}23695, 'FactorizedExpression(5, 6)', failure, 'Too many arguments.');

  for _i := 123000 to 124000 do
    Test({LINENUM}23698, Format('FactorizedExpression(%d) = join(factors(%d), "⋅")', [_i, _i]), True);

  // Divisors

  Test({LINENUM}23702, 'divisors(1)', intarr([1]));
  Test({LINENUM}23703, 'divisors(2)', intarr([1, 2]));
  Test({LINENUM}23704, 'divisors(3)', intarr([1, 3]));
  Test({LINENUM}23705, 'divisors(4)', intarr([1, 2, 4]));
  Test({LINENUM}23706, 'divisors(5)', intarr([1, 5]));
  Test({LINENUM}23707, 'divisors(6)', intarr([1, 2, 3, 6]));
  Test({LINENUM}23708, 'divisors(7)', intarr([1, 7]));
  Test({LINENUM}23709, 'divisors(8)', intarr([1, 2, 4, 8]));
  Test({LINENUM}23710, 'divisors(9)', intarr([1, 3, 9]));
  Test({LINENUM}23711, 'divisors(10)', intarr([1, 2, 5, 10]));
  Test({LINENUM}23712, 'divisors(11)', intarr([1, 11]));
  Test({LINENUM}23713, 'divisors(12)', intarr([1, 2, 3, 4, 6, 12]));
  Test({LINENUM}23714, 'divisors(13)', intarr([1, 13]));
  Test({LINENUM}23715, 'divisors(14)', intarr([1, 2, 7, 14]));
  Test({LINENUM}23716, 'divisors(15)', intarr([1, 3, 5, 15]));
  Test({LINENUM}23717, 'divisors(16)', intarr([1, 2, 4, 8, 16]));
  Test({LINENUM}23718, 'divisors(17)', intarr([1, 17]));
  Test({LINENUM}23719, 'divisors(18)', intarr([1, 2, 3, 6, 9, 18]));
  Test({LINENUM}23720, 'divisors(19)', intarr([1, 19]));
  Test({LINENUM}23721, 'divisors(20)', intarr([1, 2, 4, 5, 10, 20]));
  Test({LINENUM}23722, 'divisors(21)', intarr([1, 3, 7, 21]));

  Test({LINENUM}23724, 'divisors(123)', intarr([1, 3, 41, 123]));
  Test({LINENUM}23725, 'divisors(1234)', intarr([1, 2, 617, 1234]));
  Test({LINENUM}23726, 'divisors(12345)', intarr([1, 3, 5, 15, 823, 2469, 4115, 12345]));
  Test({LINENUM}23727, 'divisors(123456)', intarr([1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 192, 643, 1286, 1929, 2572, 3858, 5144, 7716, 10288, 15432, 20576, 30864, 41152, 61728, 123456]));
  Test({LINENUM}23728, 'divisors(1234567)', intarr([1, 127, 9721, 1234567]));
  Test({LINENUM}23729, 'divisors(12345678)', intarr([1, 2, 3, 6, 9, 18, 47, 94, 141, 282, 423, 846, 14593, 29186, 43779, 87558, 131337, 262674, 685871, 1371742, 2057613, 4115226, 6172839, 12345678]));
  Test({LINENUM}23730, 'divisors(123456789)', intarr([1, 3, 9, 3607, 3803, 10821, 11409, 32463, 34227, 13717421, 41152263, 123456789]));

  Test({LINENUM}23732, 'divisors(1073741824)', intarr([1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824]));
  Test({LINENUM}23733, 'divisors(1125899906842624)', intarr([1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1125899906842624]));
  Test({LINENUM}23734, 'divisors(1125899906842625)', intarr([1, 5, 25, 41, 101, 125, 205, 505, 1025, 2525, 4141, 5125, 8101, 12625, 20705, 40505, 103525, 202525, 268501, 332141, 517625, 818201, 1012625, 1342505, 1660705, 4091005, 6712525, 8303525, 11008541, 20455025, 27118601, 33546241, 33562625, 41517625, 55042705, 102275125, 135593005, 167731205, 275213525, 677965025, 838656025, 1111862641, 1376067625, 2175126601, 3389825125, 4193280125, 5559313205, 10875633005, 27796566025, 54378165025, 89180190641, 138982830125, 219687786701, 271890825125, 445900953205, 1098438933505, 2229504766025, 5492194667525, 9007199254741, 11147523830125, 27460973337625, 45035996273705, 225179981368525, 1125899906842625]));
  Test({LINENUM}23735, 'divisors(1125899906842625123)', intarr([1, 11, 41, 373, 451, 4103, 13003, 15293, 143033, 168223, 533123, 4850119, 5864353, 53351309, 198854879, 514719767, 2187403669, 5661917437, 21103510447, 191990473091, 232138614917, 2111895204001, 6692901130301, 7871609396731, 73621912433311, 86587703364041, 274408946342341, 2496452121602273, 3018498409765751, 27460973337625003, 102354536985693193, 1125899906842625123]));

  Test({LINENUM}23737, 'divisors(-14)', intarr([1, 2, 7, 14]));
  Test({LINENUM}23738, 'divisors(-12345)', intarr([1, 3, 5, 15, 823, 2469, 4115, 12345]));
  Test({LINENUM}23739, 'divisors(-1125899906842625123)', intarr([1, 11, 41, 373, 451, 4103, 13003, 15293, 143033, 168223, 533123, 4850119, 5864353, 53351309, 198854879, 514719767, 2187403669, 5661917437, 21103510447, 191990473091, 232138614917, 2111895204001, 6692901130301, 7871609396731, 73621912433311, 86587703364041, 274408946342341, 2496452121602273, 3018498409765751, 27460973337625003, 102354536985693193, 1125899906842625123]));

  Test({LINENUM}23741, 'divisors(0)', failure, 'Cannot compute divisors of zero (all non-zero integers are divisors of zero).');

  Test({LINENUM}23743, 'divisors(5.6)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}23744, 'divisors()', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}23745, 'divisors(5, 6)', failure, 'Too many arguments.');

  // Divisibility (divides function)

  Test({LINENUM}23749, 'divides(0, 100)', failure, 'Division by zero');

  Test({LINENUM}23751, 'divides(1, 100)', True);
  Test({LINENUM}23752, 'divides(2, 100)', True);
  Test({LINENUM}23753, 'divides(3, 100)', False);
  Test({LINENUM}23754, 'divides(4, 100)', True);
  Test({LINENUM}23755, 'divides(5, 100)', True);
  Test({LINENUM}23756, 'divides(6, 100)', False);
  Test({LINENUM}23757, 'divides(7, 100)', False);
  Test({LINENUM}23758, 'divides(8, 100)', False);
  Test({LINENUM}23759, 'divides(9, 100)', False);
  Test({LINENUM}23760, 'divides(10, 100)', True);
  Test({LINENUM}23761, 'divides(50, 100)', True);
  Test({LINENUM}23762, 'divides(51, 100)', False);
  Test({LINENUM}23763, 'divides(75, 100)', False);
  Test({LINENUM}23764, 'divides(99, 100)', False);
  Test({LINENUM}23765, 'divides(100, 100)', True);
  Test({LINENUM}23766, 'divides(101, 100)', False);
  Test({LINENUM}23767, 'divides(200, 100)', False);

  Test({LINENUM}23769, 'divides(-1, 100)', True);
  Test({LINENUM}23770, 'divides(-2, 100)', True);
  Test({LINENUM}23771, 'divides(-3, 100)', False);
  Test({LINENUM}23772, 'divides(-4, 100)', True);
  Test({LINENUM}23773, 'divides(-5, 100)', True);
  Test({LINENUM}23774, 'divides(-6, 100)', False);
  Test({LINENUM}23775, 'divides(-7, 100)', False);
  Test({LINENUM}23776, 'divides(-8, 100)', False);
  Test({LINENUM}23777, 'divides(-9, 100)', False);
  Test({LINENUM}23778, 'divides(-10, 100)', True);
  Test({LINENUM}23779, 'divides(-50, 100)', True);
  Test({LINENUM}23780, 'divides(-51, 100)', False);
  Test({LINENUM}23781, 'divides(-75, 100)', False);
  Test({LINENUM}23782, 'divides(-99, 100)', False);
  Test({LINENUM}23783, 'divides(-100, 100)', True);
  Test({LINENUM}23784, 'divides(-101, 100)', False);
  Test({LINENUM}23785, 'divides(-200, 100)', False);

  Test({LINENUM}23787, 'divides(1, 0)', True);
  Test({LINENUM}23788, 'divides(2, 0)', True);
  Test({LINENUM}23789, 'divides(3, 0)', True);
  Test({LINENUM}23790, 'divides(4, 0)', True);
  Test({LINENUM}23791, 'divides(5, 0)', True);
  Test({LINENUM}23792, 'divides(6, 0)', True);
  Test({LINENUM}23793, 'divides(7, 0)', True);
  Test({LINENUM}23794, 'divides(8, 0)', True);
  Test({LINENUM}23795, 'divides(9, 0)', True);
  Test({LINENUM}23796, 'divides(10, 0)', True);
  Test({LINENUM}23797, 'divides(50, 0)', True);
  Test({LINENUM}23798, 'divides(51, 0)', True);
  Test({LINENUM}23799, 'divides(75, 0)', True);
  Test({LINENUM}23800, 'divides(99, 0)', True);
  Test({LINENUM}23801, 'divides(100, 0)', True);
  Test({LINENUM}23802, 'divides(101, 0)', True);
  Test({LINENUM}23803, 'divides(200, 0)', True);

  Test({LINENUM}23805, 'divides(-1, 0)', True);
  Test({LINENUM}23806, 'divides(-2, 0)', True);
  Test({LINENUM}23807, 'divides(-3, 0)', True);
  Test({LINENUM}23808, 'divides(-4, 0)', True);
  Test({LINENUM}23809, 'divides(-5, 0)', True);
  Test({LINENUM}23810, 'divides(-6, 0)', True);
  Test({LINENUM}23811, 'divides(-7, 0)', True);
  Test({LINENUM}23812, 'divides(-8, 0)', True);
  Test({LINENUM}23813, 'divides(-9, 0)', True);
  Test({LINENUM}23814, 'divides(-10, 0)', True);
  Test({LINENUM}23815, 'divides(-50, 0)', True);
  Test({LINENUM}23816, 'divides(-51, 0)', True);
  Test({LINENUM}23817, 'divides(-75, 0)', True);
  Test({LINENUM}23818, 'divides(-99, 0)', True);
  Test({LINENUM}23819, 'divides(-100, 0)', True);
  Test({LINENUM}23820, 'divides(-101, 0)', True);
  Test({LINENUM}23821, 'divides(-200, 0)', True);

  Test({LINENUM}23823, 'divides(1, 30410216477784)', True);
  Test({LINENUM}23824, 'divides(2, 30410216477784)', True);
  Test({LINENUM}23825, 'divides(3, 30410216477784)', True);
  Test({LINENUM}23826, 'divides(4, 30410216477784)', True);
  Test({LINENUM}23827, 'divides(5, 30410216477784)', False);

  Test({LINENUM}23829, 'divides(231893, 30410216477784)', False);
  Test({LINENUM}23830, 'divides(231894, 30410216477784)', True);
  Test({LINENUM}23831, 'divides(231895, 30410216477784)', False);

  Test({LINENUM}23833, 'divides(194937285110, 30410216477784)', False);
  Test({LINENUM}23834, 'divides(194937285111, 30410216477784)', False);
  Test({LINENUM}23835, 'divides(194937285112, 30410216477784)', False);
  Test({LINENUM}23836, 'divides(194937285113, 30410216477784)', False);
  Test({LINENUM}23837, 'divides(194937285114, 30410216477784)', True);
  Test({LINENUM}23838, 'divides(194937285115, 30410216477784)', False);
  Test({LINENUM}23839, 'divides(194937285116, 30410216477784)', False);
  Test({LINENUM}23840, 'divides(194937285117, 30410216477784)', False);
  Test({LINENUM}23841, 'divides(194937285118, 30410216477784)', False);
  Test({LINENUM}23842, 'divides(194937285119, 30410216477784)', False);




  Test({LINENUM}23847, 'NotDivides(0, 100)', failure, 'Division by zero');

  Test({LINENUM}23849, 'NotDivides(1, 100)', False);
  Test({LINENUM}23850, 'NotDivides(2, 100)', False);
  Test({LINENUM}23851, 'NotDivides(3, 100)', True);
  Test({LINENUM}23852, 'NotDivides(4, 100)', False);
  Test({LINENUM}23853, 'NotDivides(5, 100)', False);
  Test({LINENUM}23854, 'NotDivides(6, 100)', True);
  Test({LINENUM}23855, 'NotDivides(7, 100)', True);
  Test({LINENUM}23856, 'NotDivides(8, 100)', True);
  Test({LINENUM}23857, 'NotDivides(9, 100)', True);
  Test({LINENUM}23858, 'NotDivides(10, 100)', False);
  Test({LINENUM}23859, 'NotDivides(50, 100)', False);
  Test({LINENUM}23860, 'NotDivides(51, 100)', True);
  Test({LINENUM}23861, 'NotDivides(75, 100)', True);
  Test({LINENUM}23862, 'NotDivides(99, 100)', True);
  Test({LINENUM}23863, 'NotDivides(100, 100)', False);
  Test({LINENUM}23864, 'NotDivides(101, 100)', True);
  Test({LINENUM}23865, 'NotDivides(200, 100)', True);

  Test({LINENUM}23867, 'NotDivides(-1, 100)', False);
  Test({LINENUM}23868, 'NotDivides(-2, 100)', False);
  Test({LINENUM}23869, 'NotDivides(-3, 100)', True);
  Test({LINENUM}23870, 'NotDivides(-4, 100)', False);
  Test({LINENUM}23871, 'NotDivides(-5, 100)', False);
  Test({LINENUM}23872, 'NotDivides(-6, 100)', True);
  Test({LINENUM}23873, 'NotDivides(-7, 100)', True);
  Test({LINENUM}23874, 'NotDivides(-8, 100)', True);
  Test({LINENUM}23875, 'NotDivides(-9, 100)', True);
  Test({LINENUM}23876, 'NotDivides(-10, 100)', False);
  Test({LINENUM}23877, 'NotDivides(-50, 100)', False);
  Test({LINENUM}23878, 'NotDivides(-51, 100)', True);
  Test({LINENUM}23879, 'NotDivides(-75, 100)', True);
  Test({LINENUM}23880, 'NotDivides(-99, 100)', True);
  Test({LINENUM}23881, 'NotDivides(-100, 100)', False);
  Test({LINENUM}23882, 'NotDivides(-101, 100)', True);
  Test({LINENUM}23883, 'NotDivides(-200, 100)', True);

  Test({LINENUM}23885, 'NotDivides(1, 0)', False);
  Test({LINENUM}23886, 'NotDivides(2, 0)', False);
  Test({LINENUM}23887, 'NotDivides(3, 0)', False);
  Test({LINENUM}23888, 'NotDivides(4, 0)', False);
  Test({LINENUM}23889, 'NotDivides(5, 0)', False);
  Test({LINENUM}23890, 'NotDivides(6, 0)', False);
  Test({LINENUM}23891, 'NotDivides(7, 0)', False);
  Test({LINENUM}23892, 'NotDivides(8, 0)', False);
  Test({LINENUM}23893, 'NotDivides(9, 0)', False);
  Test({LINENUM}23894, 'NotDivides(10, 0)', False);
  Test({LINENUM}23895, 'NotDivides(50, 0)', False);
  Test({LINENUM}23896, 'NotDivides(51, 0)', False);
  Test({LINENUM}23897, 'NotDivides(75, 0)', False);
  Test({LINENUM}23898, 'NotDivides(99, 0)', False);
  Test({LINENUM}23899, 'NotDivides(100, 0)', False);
  Test({LINENUM}23900, 'NotDivides(101, 0)', False);
  Test({LINENUM}23901, 'NotDivides(200, 0)', False);

  Test({LINENUM}23903, 'NotDivides(-1, 0)', False);
  Test({LINENUM}23904, 'NotDivides(-2, 0)', False);
  Test({LINENUM}23905, 'NotDivides(-3, 0)', False);
  Test({LINENUM}23906, 'NotDivides(-4, 0)', False);
  Test({LINENUM}23907, 'NotDivides(-5, 0)', False);
  Test({LINENUM}23908, 'NotDivides(-6, 0)', False);
  Test({LINENUM}23909, 'NotDivides(-7, 0)', False);
  Test({LINENUM}23910, 'NotDivides(-8, 0)', False);
  Test({LINENUM}23911, 'NotDivides(-9, 0)', False);
  Test({LINENUM}23912, 'NotDivides(-10, 0)', False);
  Test({LINENUM}23913, 'NotDivides(-50, 0)', False);
  Test({LINENUM}23914, 'NotDivides(-51, 0)', False);
  Test({LINENUM}23915, 'NotDivides(-75, 0)', False);
  Test({LINENUM}23916, 'NotDivides(-99, 0)', False);
  Test({LINENUM}23917, 'NotDivides(-100, 0)', False);
  Test({LINENUM}23918, 'NotDivides(-101, 0)', False);
  Test({LINENUM}23919, 'NotDivides(-200, 0)', False);

  Test({LINENUM}23921, 'NotDivides(1, 30410216477784)', False);
  Test({LINENUM}23922, 'NotDivides(2, 30410216477784)', False);
  Test({LINENUM}23923, 'NotDivides(3, 30410216477784)', False);
  Test({LINENUM}23924, 'NotDivides(4, 30410216477784)', False);
  Test({LINENUM}23925, 'NotDivides(5, 30410216477784)', True);

  Test({LINENUM}23927, 'NotDivides(231893, 30410216477784)', True);
  Test({LINENUM}23928, 'NotDivides(231894, 30410216477784)', False);
  Test({LINENUM}23929, 'NotDivides(231895, 30410216477784)', True);

  Test({LINENUM}23931, 'NotDivides(194937285110, 30410216477784)', True);
  Test({LINENUM}23932, 'NotDivides(194937285111, 30410216477784)', True);
  Test({LINENUM}23933, 'NotDivides(194937285112, 30410216477784)', True);
  Test({LINENUM}23934, 'NotDivides(194937285113, 30410216477784)', True);
  Test({LINENUM}23935, 'NotDivides(194937285114, 30410216477784)', False);
  Test({LINENUM}23936, 'NotDivides(194937285115, 30410216477784)', True);
  Test({LINENUM}23937, 'NotDivides(194937285116, 30410216477784)', True);
  Test({LINENUM}23938, 'NotDivides(194937285117, 30410216477784)', True);
  Test({LINENUM}23939, 'NotDivides(194937285118, 30410216477784)', True);
  Test({LINENUM}23940, 'NotDivides(194937285119, 30410216477784)', True);

  // Continued fractions

  Test({LINENUM}23944, 'ContinuedFraction(-2)', intarr([-2]));
  Test({LINENUM}23945, 'ContinuedFraction(-1)', intarr([-1]));
  Test({LINENUM}23946, 'ContinuedFraction(0)', intarr([0]));
  Test({LINENUM}23947, 'ContinuedFraction(1)', intarr([1]));
  Test({LINENUM}23948, 'ContinuedFraction(2)', intarr([2]));
  Test({LINENUM}23949, 'ContinuedFraction(3)', intarr([3]));
  Test({LINENUM}23950, 'ContinuedFraction(4)', intarr([4]));
  Test({LINENUM}23951, 'ContinuedFraction(5)', intarr([5]));
  Test({LINENUM}23952, 'ContinuedFraction(6)', intarr([6]));

  Test({LINENUM}23954, 'ContinuedFraction(0.1357)', intarr([0, 7, 2, 1, 2, 2, 3, 6, 1, 2]));

  Test({LINENUM}23956, 'ContinuedFraction(6.5)', intarr([6, 2]));
  Test({LINENUM}23957, 'ContinuedFraction(6.25)', intarr([6, 4]));
  Test({LINENUM}23958, 'ContinuedFraction(6.257)', intarr([6, 3, 1, 8, 5, 1, 1, 2]));

  Test({LINENUM}23960, 'ContinuedFraction(10.7)', intarr([10, 1, 2, 3]));
  Test({LINENUM}23961, 'ContinuedFraction(10.71)', intarr([10, 1, 2, 2, 4, 3]));
  Test({LINENUM}23962, 'ContinuedFraction(10.711)', intarr([10, 1, 2, 2, 5, 1, 3, 1, 1, 2]));
  Test({LINENUM}23963, 'ContinuedFraction(10.7115)', intarr([10, 1, 2, 2, 6, 1, 8, 1, 3]));

  Test({LINENUM}23965, 'ContinuedFraction(123.456)', intarr([123, 2, 5, 5, 2]));
  Test({LINENUM}23966, 'ContinuedFraction(123.456789)', intarr([123, 2, 5, 3, 1, 1, 135, 10, 9]));

  Test({LINENUM}23968, 'ContinuedFraction(10.17536)', intarr([10, 5, 1, 2, 2, 1, 3, 4, 1, 2]));

  Test({LINENUM}23970, 'ContinuedFraction(10.101010)', intarr([10, 9, 1, 9, 1010]));
  Test({LINENUM}23971, 'ContinuedFraction(1000.121416)', intarr([1000, 8, 4, 4, 3, 1, 4, 1, 1, 1, 3, 1, 2]));

  Test({LINENUM}23973, 'ContinuedFraction(1357/10000)', intarr([0, 7, 2, 1, 2, 2, 3, 6, 1, 2]));

  Test({LINENUM}23975, 'ContinuedFraction(13/2)', intarr([6, 2]));
  Test({LINENUM}23976, 'ContinuedFraction(25/4)', intarr([6, 4]));
  Test({LINENUM}23977, 'ContinuedFraction(6257/1000)', intarr([6, 3, 1, 8, 5, 1, 1, 2]));

  Test({LINENUM}23979, 'ContinuedFraction(107/10)', intarr([10, 1, 2, 3]));
  Test({LINENUM}23980, 'ContinuedFraction(1071/100)', intarr([10, 1, 2, 2, 4, 3]));
  Test({LINENUM}23981, 'ContinuedFraction(10711/1000)', intarr([10, 1, 2, 2, 5, 1, 3, 1, 1, 2]));
  Test({LINENUM}23982, 'ContinuedFraction(107115/10000)', intarr([10, 1, 2, 2, 6, 1, 8, 1, 3]));

  Test({LINENUM}23984, 'ContinuedFraction(123456/1000)', intarr([123, 2, 5, 5, 2]));
  Test({LINENUM}23985, 'ContinuedFraction(123456789/1000000)', intarr([123, 2, 5, 3, 1, 1, 135, 10, 9]));

  Test({LINENUM}23987, 'ContinuedFraction(1017536/100000)', intarr([10, 5, 1, 2, 2, 1, 3, 4, 1, 2]));

  Test({LINENUM}23989, 'ContinuedFraction(10101010/1000000)', intarr([10, 9, 1, 9, 1010]));
  Test({LINENUM}23990, 'ContinuedFraction(1000121416/1000000)', intarr([1000, 8, 4, 4, 3, 1, 4, 1, 1, 1, 3, 1, 2]));

  Test({LINENUM}23992, 'ContinuedFraction(0.0)', intarr([0]));
  Test({LINENUM}23993, 'ContinuedFraction(-1.1415)', intarr([-2, 1, 6, 14, 1, 8, 2]));
  Test({LINENUM}23994, 'ContinuedFraction(0.1357902468)', intarr([0, 7, 2, 1, 2, 1, 11, 1, 2, 1, 6, 1, 15, 2, 34, 1, 5, 1]));

  Test({LINENUM}23996, 'ContinuedFraction(17875057260063841/6305034377045117, 1000)',
    intarr([2, 1, 5, 16, 16, 1, 1, 1, 1, 4, 1, 19, 1, 4, 12, 1, 1, 1, 1, 1, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, 2, 1, 4, 2, 1, 1, 9, 4, 7]));

  Test({LINENUM}23999, 'ContinuedFraction(17875057260063841/6305034377045117, 5)',
    intarr([2, 1, 5, 16, 16]));

  Test({LINENUM}24002, 'ContinuedFraction(2 + i)', failure, 'Object isn''t a real number.');

  // To rational number

  // - continued fraction

  Test({LINENUM}24008, 'ToFraction(ContinuedFraction(1/2))', Rat(1, 2));
  Test({LINENUM}24009, 'ToFraction(ContinuedFraction(1/7))', Rat(1, 7));
  Test({LINENUM}24010, 'ToFraction(ContinuedFraction(23/53))', Rat(23, 53));
  Test({LINENUM}24011, 'ToFraction(ContinuedFraction(144/125))', Rat(144, 125));
  Test({LINENUM}24012, 'ToFraction(ContinuedFraction(913/280))', Rat(913, 280));

  Test({LINENUM}24014, 'ToFraction(ContinuedFraction(1/5))', Rat(1, 5));
  Test({LINENUM}24015, 'ToFraction(ContinuedFraction(0.2))', Rat(1, 5));
  Test({LINENUM}24016, 'ToFraction(ContinuedFraction(0.123))', Rat(123, 1000));

  Test({LINENUM}24018, 'ToFraction(''(10, 1, 2, 3))', Rat(107, 10));
  Test({LINENUM}24019, 'ToFraction(''(6, 4))', Rat(25, 4));
  Test({LINENUM}24020, 'ToFraction(''(123, 2, 5, 5, 2))', Rat(15432, 125));
  Test({LINENUM}24021, 'ToFraction(''(0))', Rat(0, 1));
  Test({LINENUM}24022, 'ToFraction(''(7))', Rat(7, 1));
  Test({LINENUM}24023, 'ToFraction(''(-10))', Rat(-10, 1));
  Test({LINENUM}24024, 'ToFraction(''(-2, 1, 6, 14, 1, 8, 2))', Rat(-2283, 2000));

  Test({LINENUM}24026, 'ToFraction(10, 1, 2, 3)', Rat(107, 10));
  Test({LINENUM}24027, 'ToFraction(6, 4)', Rat(25, 4));
  Test({LINENUM}24028, 'ToFraction(123, 2, 5, 5, 2)', Rat(15432, 125));
  Test({LINENUM}24029, 'ToFraction(0)', Rat(0, 1));
  Test({LINENUM}24030, 'ToFraction(7)', Rat(7, 1));
  Test({LINENUM}24031, 'ToFraction(-10)', Rat(-10, 1));
  Test({LINENUM}24032, 'ToFraction(-2, 1, 6, 14, 1, 8, 2)', Rat(-2283, 2000));

  Test({LINENUM}24034, 'ToFraction(''(2, 4))', Rat(9, 4));
  Test({LINENUM}24035, 'ToFraction(''(2, 4, "cat"))', failure, 'The array must contain only objects of type integer, but it contains an object of type string.');

  Test({LINENUM}24037, 'ToFraction(2, 4)', Rat(9, 4));
  Test({LINENUM}24038, 'ToFraction(2, 4, "rabbit")', failure, 'An object of type integer was expected as argument 3, but an object of type string was given.');
                                                                 ///////
  // - real number

  Test({LINENUM}24042, 'ToFraction(12)', Rat(12, 1));
  Test({LINENUM}24043, 'ToFraction(12.0)', Rat(12, 1));
  Test({LINENUM}24044, 'ToFraction(-123)', Rat(-123, 1));
  Test({LINENUM}24045, 'ToFraction(0)', Rat(0, 1));
  Test({LINENUM}24046, 'ToFraction(0.0)', Rat(0, 1));
  Test({LINENUM}24047, 'ToFraction(0.5)', Rat(1, 2));
  Test({LINENUM}24048, 'ToFraction(0.25)', Rat(1, 4));
  Test({LINENUM}24049, 'ToFraction(0.1)', Rat(1, 10));
  Test({LINENUM}24050, 'ToFraction(0.333333333333333333333333333333333333333333333333333333333333333333333)', Rat(1, 3));
  Test({LINENUM}24051, 'ToFraction(0.142857142857142857142857142857142857142857142857142857142)', Rat(1, 7));
  Test({LINENUM}24052, 'ToFraction(17636.57142857142857142857142857142857142857142857142857142)', Rat(123456, 7));
  Test({LINENUM}24053, 'ToFraction(-173.3333333333333333333333333333333333333333333333333333333)', Rat(-520, 3));
  Test({LINENUM}24054, 'ToFraction(0.001)', Rat(1, 1000));
  Test({LINENUM}24055, 'ToFraction(0.228070175438596491228070175438596491228070175438596491228)', Rat(13, 57));
  Test({LINENUM}24056, 'ToFraction(2831.3125)', Rat(45301, 16));
  Test({LINENUM}24057, 'ToFraction(290.96875)', Rat(9311, 32));
  Test({LINENUM}24058, 'ToFraction(0.012409513960703205791106514994829369183040330920372285418)', Rat(12, 967));
  Test({LINENUM}24059, 'ToFraction(0.029001074113856068743286788399570354457572502685284640171)', Rat(27, 931));
  Test({LINENUM}24060, 'ToFraction(0.057363848505099860863087086560688892053858036526178555386)', Rat(5236, 91277));
  Test({LINENUM}24061, 'ToFraction(-0.001279732925302545555710112672137988593684796216441786062)', Rat(-46, 35945));
  Test({LINENUM}24062, 'ToFraction(-11841.42857142857142857142857142857142857142857142857142857)', Rat(-82890, 7));
  Test({LINENUM}24063, 'ToFraction(-0.517792)', Rat(-16181, 31250));
  Test({LINENUM}24064, 'ToFraction(0.999940688018979833926453143534994068801897983392645314353)', Rat(16859, 16860));
  Test({LINENUM}24065, 'ToFraction(0.036210104479748103621010447974810362101044797481036210104)', Rat(253, 6987));
  Test({LINENUM}24066, 'ToFraction(0.00390625)', Rat(1, 256));
  Test({LINENUM}24067, 'ToFraction(-0.0009765625)', Rat(-1, 1024));
  Test({LINENUM}24068, 'ToFraction(0.464285714285714285714285714285714285714285714285714285714)', Rat(13, 28));
  Test({LINENUM}24069, 'ToFraction(853/9111)', Rat(853, 9111));
  Test({LINENUM}24070, 'ToFraction(0.123456)', Rat(1929, 15625));
  Test({LINENUM}24071, 'ToFraction(-0.123456)', Rat(-1929, 15625));

  Test({LINENUM}24073, 'type(ToFraction(π))', 'rational number');
  Test({LINENUM}24074, 'ToFraction(π) ≈ π', True);
  Test({LINENUM}24075, 'RealNumber(ToFraction(π)) ≈ π', True);

  Test({LINENUM}24077, 'ToFraction(2 + i)', failure, 'Object isn''t a rational number.');

  Test({LINENUM}24079, 'ToFraction("dog")', failure, 'An object of type number was expected as argument 1, but an object of type string was given.');
                                                        //////
  Test({LINENUM}24081, 'ToFraction(5, "dog")', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');
                                                           ///////
  Test({LINENUM}24083, 'ToFraction()', failure, 'Too few arguments. A required argument of type number is missing.');
                                                                                //////
  // To symbolic form

  Test({LINENUM}24087, 'ToSymbolicForm(−1)', '−1');
  Test({LINENUM}24088, 'ToSymbolicForm(0)', '0');
  Test({LINENUM}24089, 'ToSymbolicForm(1)', '1');
  Test({LINENUM}24090, 'ToSymbolicForm(123456789)', '123456789');
  Test({LINENUM}24091, 'ToSymbolicForm(123456789123456)', '123456789123456');
  Test({LINENUM}24092, 'ToSymbolicForm(−123456789123456)', '−123456789123456');

  Test({LINENUM}24094, 'ToSymbolicForm(1/2)', '1/2');
  Test({LINENUM}24095, 'ToSymbolicForm(0.5)', '1/2');
  Test({LINENUM}24096, 'ToSymbolicForm(1/4)', '1/4');
  Test({LINENUM}24097, 'ToSymbolicForm(0.25)', '1/4');
  Test({LINENUM}24098, 'ToSymbolicForm(1/3)', '1/3');
  Test({LINENUM}24099, 'ToSymbolicForm(0.33333333333333333333333333333333)', '1/3');
  Test({LINENUM}24100, 'ToSymbolicForm(−1/2)', '−1/2');
  Test({LINENUM}24101, 'ToSymbolicForm(−1/7)', '−1/7');

  Test({LINENUM}24103, 'ToSymbolicForm(297/311)', '297/311');
  Test({LINENUM}24104, 'ToSymbolicForm(−1953/1954)', '−1953/1954');

  Test({LINENUM}24106, 'ToSymbolicForm(0.123456)', '1929/15625');
  Test({LINENUM}24107, 'ToSymbolicForm(7.145539906103286384976525821596244131455399061032863849765)', '1522/213');
  Test({LINENUM}24108, 'ToSymbolicForm(0.252747252747252747252747252747252747252747252747252747252)', '23/91');
  Test({LINENUM}24109, 'ToSymbolicForm(0.525)', '21/40');
  Test({LINENUM}24110, 'ToSymbolicForm(−0.472222222222222222222222222222222222222222222222222222222)', '−17/36');
  Test({LINENUM}24111, 'ToSymbolicForm(0.002089864158829676071055381400208986415882967607105538140)', '2/957');
  Test({LINENUM}24112, 'ToSymbolicForm(0.001582278481012658227848101265822784810126582278481012658)', '1/632');
  Test({LINENUM}24113, 'ToSymbolicForm(0.00390625)', '1/256');
  Test({LINENUM}24114, 'ToSymbolicForm(0.000244140625)', '1/4096');
  Test({LINENUM}24115, 'ToSymbolicForm(3.694026700604197249295943247040441523912728464053728823169)', '586327/158723');
  Test({LINENUM}24116, 'ToSymbolicForm(−1241.173913043478260869565217391304347826086956521739130434)', '−28547/23');
  Test({LINENUM}24117, 'ToSymbolicForm(1.3188610316130989277659812985505717262572042783851865E-6)', '1/758230');
  Test({LINENUM}24118, 'ToSymbolicForm(−0.000031309684085287579448323366417232850120542283728357180)', '−1/31939');
  Test({LINENUM}24119, 'ToSymbolicForm(1.034502587694077055779183438757906843013225991949396204715)', '1799/1739');
  Test({LINENUM}24120, 'ToSymbolicForm(14.05174512689387457771302575033856292870378066011215355356)', '2874158/204541');
  Test({LINENUM}24121, 'ToSymbolicForm(0.000511858044702269237331513393618836376045043507933799692)', '3/5861');
  Test({LINENUM}24122, 'ToSymbolicForm(0.296296296296296296296296296296296296296296296296296296296)', '8/27');
  Test({LINENUM}24123, 'ToSymbolicForm(0.034883720930232558139534883720930232558139534883720930232)', '3/86');
  Test({LINENUM}24124, 'ToSymbolicForm(−0.005446333687566418703506907545164718384697130712008501594)', '−41/7528');
  Test({LINENUM}24125, 'ToSymbolicForm(0.0001)', '1/10000');
  Test({LINENUM}24126, 'ToSymbolicForm(3.1415)', '6283/2000');

  Test({LINENUM}24128, 'ToSymbolicForm(sqrt(2))', '√2');
  Test({LINENUM}24129, 'ToSymbolicForm(−sqrt(2))', '−√2');
  Test({LINENUM}24130, 'ToSymbolicForm(5⋅sqrt(2))', '5⋅√2');
  Test({LINENUM}24131, 'ToSymbolicForm(−3⋅sqrt(2))', '−3⋅√2');
  Test({LINENUM}24132, 'ToSymbolicForm(sqrt(2)/3)', '√2/3');
  Test({LINENUM}24133, 'ToSymbolicForm(−sqrt(2)/3)', '−√2/3');
  Test({LINENUM}24134, 'ToSymbolicForm(1/sqrt(2))', '√2/2'); {would prefer '1/√2'}
  Test({LINENUM}24135, 'ToSymbolicForm(−1/sqrt(2))', '−√2/2'); {would prefer '−1/√2'}
  Test({LINENUM}24136, 'ToSymbolicForm(176⋅sqrt(2)/3437)', '(176/3437)⋅√2');
  Test({LINENUM}24137, 'ToSymbolicForm(−17597⋅sqrt(2)/695)', '(−17597/695)⋅√2');
  Test({LINENUM}24138, 'ToSymbolicForm(-35.8070734634235303219616064459252619979719654546879931563)', '(−17597/695)⋅√2');

  Test({LINENUM}24140, 'ToSymbolicForm(sqrt(5))', '√5');
  Test({LINENUM}24141, 'ToSymbolicForm(sqrt(5)/2)', '√5/2');
  Test({LINENUM}24142, 'ToSymbolicForm(−sqrt(5)/4)', '−√5/4');
  Test({LINENUM}24143, 'ToSymbolicForm(2⋅sqrt(5))', '2⋅√5');
  Test({LINENUM}24144, 'ToSymbolicForm(2⋅sqrt(5)/7)', '(2/7)⋅√5');
  Test({LINENUM}24145, 'ToSymbolicForm(−2⋅sqrt(5)/795)', '(−2/795)⋅√5');
  Test({LINENUM}24146, 'ToSymbolicForm(-0.00562532824528248980228722935529880813947325373487176282)', '(−2/795)⋅√5');

  Test({LINENUM}24148, 'ToSymbolicForm(5⋅sqrt(37)/21)', '(5/21)⋅√37');
  Test({LINENUM}24149, 'ToSymbolicForm(−10⋅sqrt(53)/99)', '(−10/99)⋅√53');
  Test({LINENUM}24150, 'ToSymbolicForm(−10/sqrt(53))', '(−10/53)⋅√53'); {would prefer '−10/√53'}
  Test({LINENUM}24151, 'ToSymbolicForm(-1.37360563948689023982967971538245901769389994010876932799)', '(−10/53)⋅√53'); {would prefer '−10/√53'}

  Test({LINENUM}24153, 'ToSymbolicForm(π)', 'π');
  Test({LINENUM}24154, 'ToSymbolicForm(2⋅π)', '2⋅π');
  Test({LINENUM}24155, 'ToSymbolicForm(7⋅π)', '7⋅π');
  Test({LINENUM}24156, 'ToSymbolicForm(10⋅π)', '10⋅π');
  Test({LINENUM}24157, 'ToSymbolicForm(2000⋅π)', '2000⋅π');
  Test({LINENUM}24158, 'ToSymbolicForm(1000000⋅π)', '1000000⋅π');
  Test({LINENUM}24159, 'ToSymbolicForm(π/2)', 'π/2');
  Test({LINENUM}24160, 'ToSymbolicForm(π/3)', 'π/3');
  Test({LINENUM}24161, 'ToSymbolicForm(π/256)', 'π/256');
  Test({LINENUM}24162, 'ToSymbolicForm(7⋅π/8)', '(7/8)⋅π');
  Test({LINENUM}24163, 'ToSymbolicForm(91⋅π/53)', '(91/53)⋅π');
  Test({LINENUM}24164, 'ToSymbolicForm(1000⋅π/999)', '(1000/999)⋅π');
  Test({LINENUM}24165, 'ToSymbolicForm(−π)', '−π');
  Test({LINENUM}24166, 'ToSymbolicForm(−4⋅π)', '−4⋅π');
  Test({LINENUM}24167, 'ToSymbolicForm(−π/6)', '−π/6');
  Test({LINENUM}24168, 'ToSymbolicForm(−2⋅π/3)', '(−2/3)⋅π');
  Test({LINENUM}24169, 'ToSymbolicForm(−8523⋅π/9197)', '(−8523/9197)⋅π');
  Test({LINENUM}24170, 'ToSymbolicForm(-2.91136176867954852358563765963805622290012773631336597935)', '(−8523/9197)⋅π');

  Test({LINENUM}24172, 'ToSymbolicForm(π^2)', 'π²');
  Test({LINENUM}24173, 'ToSymbolicForm(−π^2)', '−π²');
  Test({LINENUM}24174, 'ToSymbolicForm(3⋅π^2)', '3⋅π²');
  Test({LINENUM}24175, 'ToSymbolicForm(10000⋅π^2)', '10000⋅π²');
  Test({LINENUM}24176, 'ToSymbolicForm(−10000⋅π^2)', '−10000⋅π²');
  Test({LINENUM}24177, 'ToSymbolicForm(π^2/2)', 'π²/2');
  Test({LINENUM}24178, 'ToSymbolicForm(π^2/1024)', 'π²/1024');
  Test({LINENUM}24179, 'ToSymbolicForm(3⋅π^2/2)', '(3/2)⋅π²');
  Test({LINENUM}24180, 'ToSymbolicForm(581⋅π^2/53)', '(581/53)⋅π²');
  Test({LINENUM}24181, 'ToSymbolicForm(−581⋅π^2/53)', '(−581/53)⋅π²');
  Test({LINENUM}24182, 'ToSymbolicForm(-108.193210510055044481940363602415920936174704822771685923)', '(−581/53)⋅π²');

  Test({LINENUM}24184, 'ToSymbolicForm(2/π)', '2⋅π⁻¹');
  Test({LINENUM}24185, 'ToSymbolicForm(1/(4⋅π))', 'π⁻¹/4');
  Test({LINENUM}24186, 'ToSymbolicForm(3/(4⋅π))', '(3/4)⋅π⁻¹');
  Test({LINENUM}24187, 'ToSymbolicForm(−3/(4⋅π))', '(−3/4)⋅π⁻¹');
  Test({LINENUM}24188, 'ToSymbolicForm(-0.23873241463784300365332564505877154305168946861068467312)', '(−3/4)⋅π⁻¹');

  Test({LINENUM}24190, 'ToSymbolicForm(e)', 'e');
  Test({LINENUM}24191, 'ToSymbolicForm(2⋅e)', '2⋅e');
  Test({LINENUM}24192, 'ToSymbolicForm(−e)', '−e');
  Test({LINENUM}24193, 'ToSymbolicForm(−10⋅e)', '−10⋅e');
  Test({LINENUM}24194, 'ToSymbolicForm(1000000⋅e)', '1000000⋅e');
  Test({LINENUM}24195, 'ToSymbolicForm(e/5)', 'e/5');
  Test({LINENUM}24196, 'ToSymbolicForm(−e/7)', '−e/7');
  Test({LINENUM}24197, 'ToSymbolicForm(2⋅e/3)', '(2/3)⋅e');
  Test({LINENUM}24198, 'ToSymbolicForm(−2⋅e/31735)', '(−2/31735)⋅e');
  Test({LINENUM}24199, 'ToSymbolicForm(−2⋅e^2/31735)', '(−2/31735)⋅e²');
  Test({LINENUM}24200, 'ToSymbolicForm(−e^2/7)', '−e²/7');
  Test({LINENUM}24201, 'ToSymbolicForm(−5⋅e^2/271)', '(−5/271)⋅e²');
  Test({LINENUM}24202, 'ToSymbolicForm(-0.13632944831975369422934368008440973825055932786996028273)', '(−5/271)⋅e²');

  Test({LINENUM}24204, 'ToSymbolicForm(1/e)', 'e⁻¹');
  Test({LINENUM}24205, 'ToSymbolicForm(7/e)', '7⋅e⁻¹');
  Test({LINENUM}24206, 'ToSymbolicForm(7/(256⋅e))', '(7/256)⋅e⁻¹');
  Test({LINENUM}24207, 'ToSymbolicForm(0.010059203469531625981127603090352445594221398114149901724)', '(7/256)⋅e⁻¹');

  Test({LINENUM}24209, 'ToSymbolicForm(10/e + sqrt(2)/71 ⋅ i)',
    TAlgosimStructure.CreateWithValue(
      ['Re', 'Im'],
      [ASO('10⋅e⁻¹'), ASO('√2/71')]
    )
  );

  Test({LINENUM}24216, 'ToSymbolicForm()', failure, 'Too few arguments. A required argument of type number is missing.');
  Test({LINENUM}24217, 'ToSymbolicForm("cat")', failure, 'An object of type number was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}24218, 'ToSymbolicForm(5, 6)', failure, 'Too many arguments.');

  // Carol numbers

  Test({LINENUM}24222, 'for(n, 1, 30, assert(IsCarolNumber(4^n − 2^(n+1) − 1)))', null);
  Test({LINENUM}24223, 'filter(SequenceList(-100, 1000000), IsCarolNumber)', intarr([-1, 7, 47, 223, 959, 3967, 16127, 65023, 261119]));
  Test({LINENUM}24224, 'IsCarolNumber(1125899839733759)', True);
  Test({LINENUM}24225, 'IsCarolNumber(281474943156223)', True);
  Test({LINENUM}24226, 'IsCarolNumber(70368727400447)', True);
  Test({LINENUM}24227, 'IsCarolNumber(17592177655807)', True);
  Test({LINENUM}24228, 'IsCarolNumber(4398042316799)', True);
  Test({LINENUM}24229, 'IsCarolNumber(1099509530623)', True);
  Test({LINENUM}24230, 'IsCarolNumber(274876858367)', True);
  Test({LINENUM}24231, 'IsCarolNumber(68718952447)', True);
  Test({LINENUM}24232, 'IsCarolNumber(17179607039)', True);
  Test({LINENUM}24233, 'IsCarolNumber(4294836223)', True);
  Test({LINENUM}24234, 'IsCarolNumber(1073676287)', True);
  Test({LINENUM}24235, 'IsCarolNumber(268402687)', True);
  Test({LINENUM}24236, 'IsCarolNumber(67092479)', True);
  Test({LINENUM}24237, 'IsCarolNumber(16769023)', True);
  Test({LINENUM}24238, 'IsCarolNumber(4190207)', True);
  Test({LINENUM}24239, 'IsCarolNumber(1046527)', True);

  Test({LINENUM}24241, 'IsCarolNumber(1115899839733759)', False);
  Test({LINENUM}24242, 'IsCarolNumber(381474943156223)', False);
  Test({LINENUM}24243, 'IsCarolNumber(72368727400447)', False);
  Test({LINENUM}24244, 'IsCarolNumber(17542177655807)', False);
  Test({LINENUM}24245, 'IsCarolNumber(4398072316799)', False);
  Test({LINENUM}24246, 'IsCarolNumber(1099529530623)', False);
  Test({LINENUM}24247, 'IsCarolNumber(274876658367)', False);
  Test({LINENUM}24248, 'IsCarolNumber(68718952446)', False);
  Test({LINENUM}24249, 'IsCarolNumber(17179607038)', False);
  Test({LINENUM}24250, 'IsCarolNumber(4294836224)', False);
  Test({LINENUM}24251, 'IsCarolNumber(1073676288)', False);
  Test({LINENUM}24252, 'IsCarolNumber(268402617)', False);
  Test({LINENUM}24253, 'IsCarolNumber(67092470)', False);
  Test({LINENUM}24254, 'IsCarolNumber(16769025)', False);
  Test({LINENUM}24255, 'IsCarolNumber(4190227)', False);
  Test({LINENUM}24256, 'IsCarolNumber(1046507)', False);
  Test({LINENUM}24257, 'IsCarolNumber(0)', False);
  Test({LINENUM}24258, 'IsCarolNumber(1)', False);


  //
  // Special functions
  //

  // Error function

  Test({LINENUM}24267, 'erf(0)', 0.0);

  Eps(1E-12); Test({LINENUM}24269, 'erf(0.1)', 0.1124629160182848922032750717439683832216962991597025);
  Eps(1E-12); Test({LINENUM}24270, 'erf(0.2)', 0.2227025892104784541401390068001438163882690384302276);
  Eps(1E-12); Test({LINENUM}24271, 'erf(0.5)', 0.5204998778130465376827466538919645287364515757579637);
  Eps(1E-12); Test({LINENUM}24272, 'erf(0.8)', 0.7421009647076604861671105865029458773176895799147087);
  Eps(1E-12); Test({LINENUM}24273, 'erf(0.9)', 0.7969082124228321285187247851418859375486580415858037);
  Eps(1E-12); Test({LINENUM}24274, 'erf(1.0)', 0.842700792949714869341220635082609259296066997966302908459);
  Eps(1E-12); Test({LINENUM}24275, 'erf(1.5)', 0.9661051464753107270669762616459478586814104792576367);
  Eps(1E-12); Test({LINENUM}24276, 'erf(2.0)', 0.995322265018952734162069256367252928610891797040060076738);
  Eps(1E-12); Test({LINENUM}24277, 'erf(5.0)', 0.99999999999846254020557196514981165651461662110988194968);
  Eps(1E-12); Test({LINENUM}24278, 'erf(10)', 0.999999999999999999999999999999999999999999997911512416237);
  Eps(1E-12); Test({LINENUM}24279, 'erf(100)', 1.0);
  Eps(1E-12); Test({LINENUM}24280, 'erf(1000)', 1.0);
  Eps(1E-12); Test({LINENUM}24281, 'erf(1E6)', 1.0);
  Eps(1E-12); Test({LINENUM}24282, 'erf(1E50)', 1.0);

  Eps(1E-12); Test({LINENUM}24284, 'erf(-0.1)', -0.1124629160182848922032750717439683832216962991597025);
  Eps(1E-12); Test({LINENUM}24285, 'erf(-0.2)', -0.2227025892104784541401390068001438163882690384302276);
  Eps(1E-12); Test({LINENUM}24286, 'erf(-0.5)', -0.5204998778130465376827466538919645287364515757579637);
  Eps(1E-12); Test({LINENUM}24287, 'erf(-0.8)', -0.7421009647076604861671105865029458773176895799147087);
  Eps(1E-12); Test({LINENUM}24288, 'erf(-0.9)', -0.7969082124228321285187247851418859375486580415858037);
  Eps(1E-12); Test({LINENUM}24289, 'erf(-1.0)', -0.842700792949714869341220635082609259296066997966302908459);
  Eps(1E-12); Test({LINENUM}24290, 'erf(-1.5)', -0.9661051464753107270669762616459478586814104792576367);
  Eps(1E-12); Test({LINENUM}24291, 'erf(-2.0)', -0.995322265018952734162069256367252928610891797040060076738);
  Eps(1E-12); Test({LINENUM}24292, 'erf(-5.0)', -0.99999999999846254020557196514981165651461662110988194968);
  Eps(1E-12); Test({LINENUM}24293, 'erf(-10)', -0.999999999999999999999999999999999999999999997911512416237);
  Eps(1E-12); Test({LINENUM}24294, 'erf(-100)', -1.0);
  Eps(1E-12); Test({LINENUM}24295, 'erf(-1000)', -1.0);
  Eps(1E-12); Test({LINENUM}24296, 'erf(-1E6)', -1.0);
  Eps(1E-12); Test({LINENUM}24297, 'erf(-1E50)', -1.0);

  Test({LINENUM}24299, 'erf()', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}24300, 'erf(i)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}24301, 'erf(5, 6)', failure, 'Too many arguments.');

  // Complementary error function

  for _i := -100 to 100 do
    Test({LINENUM}24306, Format('erfc(%d/10) = 1 - erf(%d/10)', [_i, _i]), True);

  Test({LINENUM}24308, 'erfc()', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}24309, 'erfc(i)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}24310, 'erfc(5, 6)', failure, 'Too many arguments.');

  // Fresnel cosine integral

  Test({LINENUM}24314, 'FresnelC(0)', 0.0);

  Eps(1E-12); Test({LINENUM}24316, 'FresnelC(0.1)', 0.0999990000046296189458835350248242780395810402727072);
  Eps(1E-12); Test({LINENUM}24317, 'FresnelC(0.2)', 0.1999680023702828509150530424733365293665368925309025);
  Eps(1E-12); Test({LINENUM}24318, 'FresnelC(0.5)', 0.4968840292147947147473274109631733512829027022886211);
  Eps(1E-12); Test({LINENUM}24319, 'FresnelC(1)', 0.9045242379002720814747883668325571458079918205955017);
  Eps(1E-12); Test({LINENUM}24320, 'FresnelC(2)', 0.4614614624332163728664741555277730352693828342010849);
  Eps(1E-12); Test({LINENUM}24321, 'FresnelC(3)', 0.7028635577302687301744098681780622019533373198375706);
  Eps(1E-12); Test({LINENUM}24322, 'FresnelC(4)', 0.5944603274978229817857606619295196128665370118407959);
  Eps(1E-12); Test({LINENUM}24323, 'FresnelC(5)', 0.6114667663964626117940160504610222269957333983754062);
  Eps(1E-10); Test({LINENUM}24324, 'FresnelC(6)', 0.5442040253871845829563310031105696899884509003539315);
  Eps(1E-10); Test({LINENUM}24325, 'FresnelC(7)', 0.5583343318609714183625036376682713907282436800602031);
  Eps(1E-10); Test({LINENUM}24326, 'FresnelC(8)', 0.6839570275081139328869052603547318682673629909632490);
  Eps(1E-10); Test({LINENUM}24327, 'FresnelC(9)', 0.5914010847421237956093145859746907294150313098800105);
  Eps(1E-10); Test({LINENUM}24328, 'FresnelC(10)', 0.6011251848134443481311911611406102655902173340569311);
{$IFNDEF QuickTest}
  Eps(1E-4); Test({LINENUM}24330, 'FresnelC(50)', 0.62015814775327796);
  Eps(1E-4); Test({LINENUM}24331, 'FresnelC(100)', 0.625129463563781268792952450934527);
{$ENDIF}

  Eps(1E-12); Test({LINENUM}24334, 'FresnelC(-0.1)', -0.0999990000046296189458835350248242780395810402727072);
  Eps(1E-12); Test({LINENUM}24335, 'FresnelC(-0.2)', -0.1999680023702828509150530424733365293665368925309025);
  Eps(1E-12); Test({LINENUM}24336, 'FresnelC(-0.5)', -0.4968840292147947147473274109631733512829027022886211);
  Eps(1E-12); Test({LINENUM}24337, 'FresnelC(-1)', -0.9045242379002720814747883668325571458079918205955017);
  Eps(1E-12); Test({LINENUM}24338, 'FresnelC(-2)', -0.4614614624332163728664741555277730352693828342010849);
  Eps(1E-12); Test({LINENUM}24339, 'FresnelC(-3)', -0.7028635577302687301744098681780622019533373198375706);
  Eps(1E-12); Test({LINENUM}24340, 'FresnelC(-4)', -0.5944603274978229817857606619295196128665370118407959);
  Eps(1E-12); Test({LINENUM}24341, 'FresnelC(-5)', -0.6114667663964626117940160504610222269957333983754062);
  Eps(1E-10); Test({LINENUM}24342, 'FresnelC(-6)', -0.5442040253871845829563310031105696899884509003539315);
  Eps(1E-10); Test({LINENUM}24343, 'FresnelC(-7)', -0.5583343318609714183625036376682713907282436800602031);
  Eps(1E-10); Test({LINENUM}24344, 'FresnelC(-8)', -0.6839570275081139328869052603547318682673629909632490);
  Eps(1E-10); Test({LINENUM}24345, 'FresnelC(-9)', -0.5914010847421237956093145859746907294150313098800105);
  Eps(1E-10); Test({LINENUM}24346, 'FresnelC(-10)', -0.6011251848134443481311911611406102655902173340569311);
{$IFNDEF QuickTest}
  Eps(1E-4); Test({LINENUM}24348, 'FresnelC(-50)', -0.62015814775327796);
  Eps(1E-4); Test({LINENUM}24349, 'FresnelC(-100)', -0.625129463563781268792952450934527);
{$ENDIF}

  Test({LINENUM}24352, 'FresnelC()', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}24353, 'FresnelC(i)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}24354, 'FresnelC(5, 6)', failure, 'Too many arguments.');

  // Fresnel sine integral

  Test({LINENUM}24358, 'FresnelS(0)', 0.0);

  Eps(1E-12); Test({LINENUM}24360, 'FresnelS(0.1)', 0.0003333309523885281253006398044666315606800327779084);
  Eps(1E-12); Test({LINENUM}24361, 'FresnelS(0.2)', 0.0026663619202766228455069422074347799143665632386424);
  Eps(1E-12); Test({LINENUM}24362, 'FresnelS(0.5)', 0.0414810242685474815985281654834999914474996368906335);
  Eps(1E-12); Test({LINENUM}24363, 'FresnelS(1)', 0.3102683017233811018081524231653965075745093888324467);
  Eps(1E-12); Test({LINENUM}24364, 'FresnelS(2)', 0.8047764893437561102962756017926325942235849454136770);
  Eps(1E-12); Test({LINENUM}24365, 'FresnelS(3)', 0.7735625268937690171497721678263028632270460209291312);
  Eps(1E-12); Test({LINENUM}24366, 'FresnelS(4)', 0.7471338446481146561998171240629835783238065841321865);
  Eps(1E-12); Test({LINENUM}24367, 'FresnelS(5)', 0.5279172811653224138446156871849314538314043858781680);
  Eps(1E-10); Test({LINENUM}24368, 'FresnelS(6)', 0.6384591893150103778454080609408122940299921139678892);
  Eps(1E-10); Test({LINENUM}24369, 'FresnelS(7)', 0.6058869316278271054377626517795394767807921931762645);
  Eps(1E-10); Test({LINENUM}24370, 'FresnelS(8)', 0.6017216449352555816074986779173591595323815044572577);
  Eps(1E-10); Test({LINENUM}24371, 'FresnelS(9)', 0.5837286611515135900361274584163298717364608203093222);
  Eps(1E-10); Test({LINENUM}24372, 'FresnelS(10)', 0.5836708999296233421575724092855749812634352727740758);
{$IFNDEF QuickTest}
  Eps(1E-4); Test({LINENUM}24374, 'FresnelS(50)', 0.61906464542382491);
  Eps(1E-4); Test({LINENUM}24375, 'FresnelS(100)', 0.63141720902969061149002048488957);
{$ENDIF}

  Eps(1E-12); Test({LINENUM}24378, 'FresnelS(-0.1)', -0.0003333309523885281253006398044666315606800327779084);
  Eps(1E-12); Test({LINENUM}24379, 'FresnelS(-0.2)', -0.0026663619202766228455069422074347799143665632386424);
  Eps(1E-12); Test({LINENUM}24380, 'FresnelS(-0.5)', -0.0414810242685474815985281654834999914474996368906335);
  Eps(1E-12); Test({LINENUM}24381, 'FresnelS(-1)', -0.3102683017233811018081524231653965075745093888324467);
  Eps(1E-12); Test({LINENUM}24382, 'FresnelS(-2)', -0.8047764893437561102962756017926325942235849454136770);
  Eps(1E-12); Test({LINENUM}24383, 'FresnelS(-3)', -0.7735625268937690171497721678263028632270460209291312);
  Eps(1E-12); Test({LINENUM}24384, 'FresnelS(-4)', -0.7471338446481146561998171240629835783238065841321865);
  Eps(1E-12); Test({LINENUM}24385, 'FresnelS(-5)', -0.5279172811653224138446156871849314538314043858781680);
  Eps(1E-10); Test({LINENUM}24386, 'FresnelS(-6)', -0.6384591893150103778454080609408122940299921139678892);
  Eps(1E-10); Test({LINENUM}24387, 'FresnelS(-7)', -0.6058869316278271054377626517795394767807921931762645);
  Eps(1E-10); Test({LINENUM}24388, 'FresnelS(-8)', -0.6017216449352555816074986779173591595323815044572577);
  Eps(1E-10); Test({LINENUM}24389, 'FresnelS(-9)', -0.5837286611515135900361274584163298717364608203093222);
  Eps(1E-10); Test({LINENUM}24390, 'FresnelS(-10)', -0.5836708999296233421575724092855749812634352727740758);
{$IFNDEF QuickTest}
  Eps(1E-4); Test({LINENUM}24392, 'FresnelS(-50)', -0.61906464542382491);
  Eps(1E-4); Test({LINENUM}24393, 'FresnelS(-100)', -0.63141720902969061149002048488957);
{$ENDIF}

  Test({LINENUM}24396, 'FresnelS()', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}24397, 'FresnelS(i)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}24398, 'FresnelS(5, 6)', failure, 'Too many arguments.');

  // Sine integral

  Test({LINENUM}24402, 'Si(0)', 0.0);

  Eps(1E-12); Test({LINENUM}24404, 'Si(0.1)', 0.099944461108276950160592118554190930431785170581484030555);
  Eps(1E-12); Test({LINENUM}24405, 'Si(0.2)', 0.199556088526233821400456944764165950986603878805513219862);
  Eps(1E-12); Test({LINENUM}24406, 'Si(0.5)', 0.493107418043066689161626707572764653641337138428721131660);
  Eps(1E-12); Test({LINENUM}24407, 'Si(1)', 0.946083070367183014941353313823179657812337954738111790471);
  Eps(1E-12); Test({LINENUM}24408, 'Si(2)', 1.605412976802694848576720148198588940848583422328499660289);
  Eps(1E-12); Test({LINENUM}24409, 'Si(3)', 1.848652527999468256397730251111973245164512730309465694979);
  Eps(1E-12); Test({LINENUM}24410, 'Si(4)', 1.758203138949053058105559303358501617209579460962609792592);
  Eps(1E-12); Test({LINENUM}24411, 'Si(5)', 1.549931244944674137274408400730639012183184893966372210477);
  Eps(1E-10); Test({LINENUM}24412, 'Si(6)', 1.424687551280506535769031027917142018492285449190238213174);
  Eps(1E-10); Test({LINENUM}24413, 'Si(7)', 1.454596614248093590614768493836160420066907406317066317971);
  Eps(1E-10); Test({LINENUM}24414, 'Si(8)', 1.574186821706942052082971451206658507176789221924863859521);
  Eps(1E-10); Test({LINENUM}24415, 'Si(9)', 1.665040075829602495106653427897108463186698581348304888159);
  Eps(1E-10); Test({LINENUM}24416, 'Si(10)', 1.658347594218874049330971879389672480630254348309579842195);
{$IFNDEF QuickTest}
  Eps(1E-4); Test({LINENUM}24418, 'Si(50)', 1.551617072485935894727985594859377543420004615915493673419);
  Eps(1E-4); Test({LINENUM}24419, 'Si(100)', 1.562225466889056293352345138804502677227824980541083456384);
{$ENDIF}

  Eps(1E-12); Test({LINENUM}24422, 'Si(-0.1)', -0.099944461108276950160592118554190930431785170581484030555);
  Eps(1E-12); Test({LINENUM}24423, 'Si(-0.2)', -0.199556088526233821400456944764165950986603878805513219862);
  Eps(1E-12); Test({LINENUM}24424, 'Si(-0.5)', -0.493107418043066689161626707572764653641337138428721131660);
  Eps(1E-12); Test({LINENUM}24425, 'Si(-1)', -0.946083070367183014941353313823179657812337954738111790471);
  Eps(1E-12); Test({LINENUM}24426, 'Si(-2)', -1.605412976802694848576720148198588940848583422328499660289);
  Eps(1E-12); Test({LINENUM}24427, 'Si(-3)', -1.848652527999468256397730251111973245164512730309465694979);
  Eps(1E-12); Test({LINENUM}24428, 'Si(-4)', -1.758203138949053058105559303358501617209579460962609792592);
  Eps(1E-12); Test({LINENUM}24429, 'Si(-5)', -1.549931244944674137274408400730639012183184893966372210477);
  Eps(1E-10); Test({LINENUM}24430, 'Si(-6)', -1.424687551280506535769031027917142018492285449190238213174);
  Eps(1E-10); Test({LINENUM}24431, 'Si(-7)', -1.454596614248093590614768493836160420066907406317066317971);
  Eps(1E-10); Test({LINENUM}24432, 'Si(-8)', -1.574186821706942052082971451206658507176789221924863859521);
  Eps(1E-10); Test({LINENUM}24433, 'Si(-9)', -1.665040075829602495106653427897108463186698581348304888159);
  Eps(1E-10); Test({LINENUM}24434, 'Si(-10)', -1.658347594218874049330971879389672480630254348309579842195);
{$IFNDEF QuickTest}
  Eps(1E-4); Test({LINENUM}24436, 'Si(-50)', -1.551617072485935894727985594859377543420004615915493673419);
  Eps(1E-4); Test({LINENUM}24437, 'Si(-100)', -1.562225466889056293352345138804502677227824980541083456384);
{$ENDIF}

  Test({LINENUM}24440, 'Si()', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}24441, 'Si(i)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}24442, 'Si(5, 6)', failure, 'Too many arguments.');

  // Cosine integral

  Eps(1E-12); Test({LINENUM}24446, 'Ci(0.1)', -1.72786838665729663899772515290657363282848171769703311388);
  Eps(1E-12); Test({LINENUM}24447, 'Ci(0.2)', -1.04220559567278197536291690667588952345312516810593890777);
  Eps(1E-12); Test({LINENUM}24448, 'Ci(0.5)', -0.17778407880661290133581027107056907809051947481262196866);
  Eps(1E-12); Test({LINENUM}24449, 'Ci(1)', 0.337403922900968134662646203889150769997578032585731894801);
  Eps(1E-12); Test({LINENUM}24450, 'Ci(2)', 0.422980828774864995698565153198255894135737756306187688110);
  Eps(1E-12); Test({LINENUM}24451, 'Ci(3)', 0.119629786008000327626472281176677850546836524987071897103);
  Eps(1E-12); Test({LINENUM}24452, 'Ci(4)', -0.14098169788693041163914489869403592671296835546169386158);
  Eps(1E-12); Test({LINENUM}24453, 'Ci(5)', -0.19002974965664387861845890011630080649673915610185662891);
  Eps(1E-10); Test({LINENUM}24454, 'Ci(6)', -0.06805724389324712620416830484061742841596919013564899125);
  Eps(1E-10); Test({LINENUM}24455, 'Ci(7)', 0.076695278482184518382915763031436846848903015516736613052);
  Eps(1E-10); Test({LINENUM}24456, 'Ci(8)', 0.122433882532009557292295958268735027035373787175898220629);
  Eps(1E-10); Test({LINENUM}24457, 'Ci(9)', 0.055347531333133607085641648449793252002663554318911601082);
  Eps(1E-10); Test({LINENUM}24458, 'Ci(10)', -0.04545643300445537263453282995262785288764695795731688693);
{$IFNDEF QuickTest}
  Eps(1E-4); Test({LINENUM}24460, 'Ci(50)', -0.00562838632411630544018589549846409957473375839534749948);
  Eps(1E-4); Test({LINENUM}24461, 'Ci(100)', -0.00514882514261049214444355390534449785032633791932324580);
{$ENDIF}


  Test({LINENUM}24465, 'Ci(0)', failure, 'Cosine integral only defined for positive real numbers.');
  Test({LINENUM}24466, 'Ci(-1)', failure, 'Cosine integral only defined for positive real numbers.');
  Test({LINENUM}24467, 'Ci(-1000)', failure, 'Cosine integral only defined for positive real numbers.');

  Test({LINENUM}24469, 'Ci()', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}24470, 'Ci(i)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}24471, 'Ci(5, 6)', failure, 'Too many arguments.');

  // Bessel functions

  Test({LINENUM}24475, 'Bessel(0, 0)', 1.0);

  Eps(1E-12); Test({LINENUM}24477, 'Bessel(0, 0.1)', 0.9975015620660400322812868984747920848320082326843663);
  Eps(1E-12); Test({LINENUM}24478, 'Bessel(0, 0.2)', 0.9900249722395763908175076200832671191563303563557559);
  Eps(1E-12); Test({LINENUM}24479, 'Bessel(0, 0.5)', 0.9384698072408129042284046735997126255689267970968215);
{$IFNDEF QuickTest} // Bessel functions don't use any integration cache; should implement that
  Eps(1E-12); Test({LINENUM}24481, 'Bessel(0, 1)', 0.765197686557966551449717526102663220909274289755325241861);
  Eps(1E-12); Test({LINENUM}24482, 'Bessel(0, 2)', 0.223890779141235668051827454649948625825154482218607603128);
  Eps(1E-12); Test({LINENUM}24483, 'Bessel(0, 3)', -0.26005195490193343762415469597733143681960865351129327705);
  Eps(1E-12); Test({LINENUM}24484, 'Bessel(0, 4)', -0.39714980986384737228659076845169804197561868528938884014);
  Eps(1E-12); Test({LINENUM}24485, 'Bessel(0, 5)', -0.17759677131433830434739701307475871107113035600850912899);
  Eps(1E-12); Test({LINENUM}24486, 'Bessel(0, 10)', -0.24593576445134833519776086248532875382960007282656656969);
  Eps(1E-12); Test({LINENUM}24487, 'Bessel(0, 15)', -0.01422447282678077323386427061184007334439812577187924319);
  Eps(1E-12); Test({LINENUM}24488, 'Bessel(0, 20)', 0.167024664340583154727320544701384038875333378408533084201);

  Eps(1E-12); Test({LINENUM}24490, 'Bessel(0, -0.1)', 0.9975015620660400322812868984747920848320082326843663);
  Eps(1E-12); Test({LINENUM}24491, 'Bessel(0, -0.2)', 0.9900249722395763908175076200832671191563303563557559);
  Eps(1E-12); Test({LINENUM}24492, 'Bessel(0, -0.5)', 0.9384698072408129042284046735997126255689267970968215);
  Eps(1E-12); Test({LINENUM}24493, 'Bessel(0, -1)', 0.765197686557966551449717526102663220909274289755325241861);
  Eps(1E-12); Test({LINENUM}24494, 'Bessel(0, -2)', 0.223890779141235668051827454649948625825154482218607603128);
  Eps(1E-12); Test({LINENUM}24495, 'Bessel(0, -3)', -0.26005195490193343762415469597733143681960865351129327705);
  Eps(1E-12); Test({LINENUM}24496, 'Bessel(0, -4)', -0.39714980986384737228659076845169804197561868528938884014);
  Eps(1E-12); Test({LINENUM}24497, 'Bessel(0, -5)', -0.17759677131433830434739701307475871107113035600850912899);
  Eps(1E-12); Test({LINENUM}24498, 'Bessel(0, -10)', -0.24593576445134833519776086248532875382960007282656656969);
  Eps(1E-12); Test({LINENUM}24499, 'Bessel(0, -15)', -0.01422447282678077323386427061184007334439812577187924319);
  Eps(1E-12); Test({LINENUM}24500, 'Bessel(0, -20)', 0.167024664340583154727320544701384038875333378408533084201);
{$ENDIF}

  Test({LINENUM}24503, 'Bessel(1, 0)', 0.0);

  Eps(1E-12); Test({LINENUM}24505, 'Bessel(1, 0.1)', 0.0499375260362419975563365524378064840585613541415665);
  Eps(1E-12); Test({LINENUM}24506, 'Bessel(1, 0.2)', 0.0995008326392359953979227693278841598213067853770768);
  Eps(1E-12); Test({LINENUM}24507, 'Bessel(1, 0.5)', 0.2422684576748738863839545761415316408006286544379597);
{$IFNDEF QuickTest}
  Eps(1E-12); Test({LINENUM}24509, 'Bessel(1, 1)', 0.440050585744933515959682203718914913127372301992765251136);
  Eps(1E-12); Test({LINENUM}24510, 'Bessel(1, 2)', 0.576724807756873387202448242269137086920302689719675440121);
  Eps(1E-12); Test({LINENUM}24511, 'Bessel(1, 3)', 0.339058958525936458925514597206478896973080418198008175481);
  Eps(1E-12); Test({LINENUM}24512, 'Bessel(1, 4)', -0.06604332802354913614318542080327502872742341953170756044);
  Eps(1E-12); Test({LINENUM}24513, 'Bessel(1, 5)', -0.32757913759146522203773432191016913276084990462405401868);
  Eps(1E-12); Test({LINENUM}24514, 'Bessel(1, 10)', 0.043472746168861436669748768025859288306272867118594208135);
  Eps(1E-12); Test({LINENUM}24515, 'Bessel(1, 15)', 0.205104038613522761147137412076923635363529311493888391999);
  Eps(1E-12); Test({LINENUM}24516, 'Bessel(1, 20)', 0.066833124175850045578992974193646719982994444621062459423);

  Eps(1E-12); Test({LINENUM}24518, 'Bessel(1, -0.1)', -0.0499375260362419975563365524378064840585613541415665);
  Eps(1E-12); Test({LINENUM}24519, 'Bessel(1, -0.2)', -0.0995008326392359953979227693278841598213067853770768);
  Eps(1E-12); Test({LINENUM}24520, 'Bessel(1, -0.5)', -0.2422684576748738863839545761415316408006286544379597);
  Eps(1E-12); Test({LINENUM}24521, 'Bessel(1, -1)', -0.440050585744933515959682203718914913127372301992765251136);
  Eps(1E-12); Test({LINENUM}24522, 'Bessel(1, -2)', -0.576724807756873387202448242269137086920302689719675440121);
  Eps(1E-12); Test({LINENUM}24523, 'Bessel(1, -3)', -0.339058958525936458925514597206478896973080418198008175481);
  Eps(1E-12); Test({LINENUM}24524, 'Bessel(1, -4)', 0.06604332802354913614318542080327502872742341953170756044);
  Eps(1E-12); Test({LINENUM}24525, 'Bessel(1, -5)', 0.32757913759146522203773432191016913276084990462405401868);
  Eps(1E-12); Test({LINENUM}24526, 'Bessel(1, -10)', -0.043472746168861436669748768025859288306272867118594208135);
  Eps(1E-12); Test({LINENUM}24527, 'Bessel(1, -15)', -0.205104038613522761147137412076923635363529311493888391999);
  Eps(1E-12); Test({LINENUM}24528, 'Bessel(1, -20)', -0.066833124175850045578992974193646719982994444621062459423);
{$ENDIF}

  Eps(1E-12); Test({LINENUM}24531, 'Bessel(1, i)', 0.565159103992485027207696027609863307328899621621092009480*ImaginaryUnit);
  Eps(1E-12); Test({LINENUM}24532, 'Bessel(2, i)', TASC(-0.13574766976703828118285256999499092294987106811277818784));
  Eps(1E-12); Test({LINENUM}24533, 'Bessel(2, 1 + i)', 0.04157988694396212208283336257837005994406413253165264166 + 0.2473976415133063105105919644784222846179418163179320472*ImaginaryUnit);
  Eps(1E-12); Test({LINENUM}24534, 'Bessel(3, 2 - i/3)', 0.1243481479093985857655785476068830597554279374515206589 - 0.05370855043413167121050052711946281700829906437960445723*ImaginaryUnit);

  // Laguerre polynomials

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24540, Format('Laguerre(0, %d)', [_i]), 1.0);
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24545, Format('Laguerre(1, %d)', [_i]), 1.0 - _i);
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24550, Format('Laguerre(2, %d)', [_i]), (1/2) * (_i*_i - 4*_i + 2));
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24555, Format('Laguerre(3, %d)', [_i]), (1/6) * (-_i*_i*_i + 9*_i*_i - 18*_i + 6));
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24560, Format('Laguerre(4, %d)', [_i]), (1/24) * (_i*_i*_i*_i - 16*_i*_i*_i + 72*_i*_i - 96*_i + 24));
  end;

  Test({LINENUM}24563, 'Laguerre(-1, 1)', failure, 'Laguerre polynomial not defined for negative n.');

  Eps; Test({LINENUM}24565, 'Laguerre(0, 1 + i)', TASC(1.0));
  Eps; Test({LINENUM}24566, 'Laguerre(1, 2 + 3⋅i)', -1 - 3*ImaginaryUnit);
  Eps; Test({LINENUM}24567, 'Laguerre(2, 5 - 2⋅i)', 3/2 - 6*ImaginaryUnit);
  Eps; Test({LINENUM}24568, 'Laguerre(3, 7 - 10⋅i)', 589/3 - 305/3 * ImaginaryUnit);
  Eps; Test({LINENUM}24569, 'Laguerre(4, -1 + 2⋅i)', -93/8 - 53/3 * ImaginaryUnit);
  Eps; Test({LINENUM}24570, 'Laguerre(5, -2 - i)', 3307/120 + 1947/40 * ImaginaryUnit);
  Eps; Test({LINENUM}24571, 'Laguerre(6, 5 - i/2)', -39007/15360 - 7237/11520 * ImaginaryUnit);
  Eps; Test({LINENUM}24572, 'Laguerre(7, -i/3)', -78037/524880 + 23345657/11022480 * ImaginaryUnit);

  // (Physicists') Hermite polynomials

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24578, Format('Hermite(0, %d)', [_i]), 1.0);
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24583, Format('Hermite(1, %d)', [_i]), 2.0*_i);
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24588, Format('Hermite(2, %d)', [_i]), 4.0*_i*_i - 2);
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24593, Format('Hermite(3, %d)', [_i]), 8.0*_i*_i*_i - 12*_i);
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24598, Format('Hermite(4, %d)', [_i], DefaultFormatSettings), 16.0*_i*_i*_i*_i - 48*_i*_i + 12);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24604, Format('Hermite(5, %g)', [_x], DefaultFormatSettings), 32*_x*_x*_x*_x*_x - 160*_x*_x*_x + 120*_x);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24610, Format('Hermite(6, %g)', [_x], DefaultFormatSettings), 64*_x*_x*_x*_x*_x*_x - 480*_x*_x*_x*_x + 720*_x*_x - 120);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24616, Format('Hermite(7, %g)', [_x], DefaultFormatSettings), 128*_x*_x*_x*_x*_x*_x*_x - 1344*_x*_x*_x*_x*_x + 3360*_x*_x*_x - 1680*_x);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24622, Format('Hermite(8, %g)', [_x], DefaultFormatSettings), 256*_x*_x*_x*_x*_x*_x*_x*_x - 3584*_x*_x*_x*_x*_x*_x + 13440*_x*_x*_x*_x - 13440*_x*_x + 1680);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24628, Format('Hermite(9, %g)', [_x], DefaultFormatSettings), 512*_x*_x*_x*_x*_x*_x*_x*_x*_x - 9216*_x*_x*_x*_x*_x*_x*_x + 48384*_x*_x*_x*_x*_x - 80640*_x*_x*_x + 30240*_x);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24634, Format('Hermite(10, %g)', [_x], DefaultFormatSettings), 1024*_x*_x*_x*_x*_x*_x*_x*_x*_x*_x - 23040*_x*_x*_x*_x*_x*_x*_x*_x + 161280*_x*_x*_x*_x*_x*_x - 403200*_x*_x*_x*_x + 302400*_x*_x - 30240);
  end;

  Test({LINENUM}24637, 'Hermite(-1, 1)', failure, 'Hermite polynomial only implemented for non-negative n ≤ 10.');
  Test({LINENUM}24638, 'Hermite(11, 1)', failure, 'Hermite polynomial only implemented for non-negative n ≤ 10.');

  Eps; Test({LINENUM}24640, 'Hermite(0, 1 + i)', TASC(1.0));
  Eps; Test({LINENUM}24641, 'Hermite(1, 2 + i/5)', 4 + 2/5 * ImaginaryUnit);
  Eps; Test({LINENUM}24642, 'Hermite(2, 2 - 3⋅i)', -22 - 48 * ImaginaryUnit);
  Eps; Test({LINENUM}24643, 'Hermite(3, -1 + 5⋅i)', 604 - 940 * ImaginaryUnit);
  Eps; Test({LINENUM}24644, 'Hermite(4, -2 + 7⋅i)', 22028 + 41664 * ImaginaryUnit);
  Eps; Test({LINENUM}24645, 'Hermite(5, -2 - i)', 1296 + 328 * ImaginaryUnit);
  Eps; Test({LINENUM}24646, 'Hermite(6, -4 - i/10)', 2322835749/15625 + 86048048/3125 * ImaginaryUnit);
  Eps; Test({LINENUM}24647, 'Hermite(7, -4 - 3⋅i)', -1969472 + 9078096 * ImaginaryUnit);
  Eps; Test({LINENUM}24648, 'Hermite(8, -1 - i)', -47984 + 1792 * ImaginaryUnit);
  Eps; Test({LINENUM}24649, 'Hermite(9, 1/2 - i/3)', 10872793/729 + 120515662/19683 * ImaginaryUnit);
  Eps; Test({LINENUM}24650, 'Hermite(10, -i)', TASC(-921184));

  // Legendre polynomials

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24656, Format('Legendre(0, %d)', [_i]), 1.0);
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24661, Format('Legendre(1, %d)', [_i]), TASR(_i));
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24666, Format('Legendre(2, %d)', [_i]), (1/2) * (3*_i*_i - 1));
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24671, Format('Legendre(3, %d)', [_i]), (1/2) * (5*_i*_i*_i - 3*_i));
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24677, Format('Legendre(4, %g)', [_x], DefaultFormatSettings), (1/8) * (35*_x*_x*_x*_x - 30*_x*_x + 3));
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24683, Format('Legendre(5, %g)', [_x], DefaultFormatSettings), (1/8) * (63*_x*_x*_x*_x*_x - 70*_x*_x*_x + 15*_x));
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24689, Format('Legendre(6, %g)', [_x], DefaultFormatSettings), (1/16) * (231*_x*_x*_x*_x*_x*_x - 315*_x*_x*_x*_x + 105*_x*_x - 5));
  end;

  Test({LINENUM}24692, 'Legendre(-1, 1)', failure, 'Legendre polynomial not defined for negative n.');

  Eps; Test({LINENUM}24694, 'Legendre(0, 1 + i)', TASC(1.0));
  Eps; Test({LINENUM}24695, 'Legendre(1, 2 + i)', 2 + ImaginaryUnit);
  Eps; Test({LINENUM}24696, 'Legendre(3, 5 + 3⋅i)', -65/2 + 981/2 * ImaginaryUnit);
  Eps; Test({LINENUM}24697, 'Legendre(4, 7 - 5⋅i)', -152057/8 - 28875/2 * ImaginaryUnit);
  Eps; Test({LINENUM}24698, 'Legendre(5, -2 + 3⋅i)', -1367 - 9549/2 * ImaginaryUnit);
  Eps; Test({LINENUM}24699, 'Legendre(6, -8 - 2⋅i)', 6512935/16 + 4441122 * ImaginaryUnit);
  Eps; Test({LINENUM}24700, 'Legendre(7, -2⋅i/3)', 84941/5832 * ImaginaryUnit);
  Eps; Test({LINENUM}24701, 'Legendre(8, 2 - i/5)', 3136050367/625000 - 100528071/15625 * ImaginaryUnit);
  Eps; Test({LINENUM}24702, 'Legendre(9, 1 + i/3)', 618947/93312 - 99724117/2519424 * ImaginaryUnit);
  Eps; Test({LINENUM}24703, 'Legendre(10, -1 - i)', -1630263/256 + 382129/128 * ImaginaryUnit);

  // Chebyshev polynomials of the first kind

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24709, Format('Chebyshev(0, %d)', [_i]), 1.0);
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24714, Format('Chebyshev(1, %d)', [_i]), TASR(_i));
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24719, Format('Chebyshev(2, %d)', [_i]), 2.0*_i*_i - 1);
  end;

  for _i := -100 to 100 do
  begin
    Eps; Test({LINENUM}24724, Format('Chebyshev(3, %d)', [_i]), 4.0*_i*_i*_i - 3*_i);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24730, Format('Chebyshev(4, %g)', [_x], DefaultFormatSettings), 8*_x*_x*_x*_x - 8*_x*_x + 1);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24736, Format('Chebyshev(5, %g)', [_x], DefaultFormatSettings), 16*_x*_x*_x*_x*_x - 20*_x*_x*_x + 5*_x);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24742, Format('Chebyshev(6, %g)', [_x], DefaultFormatSettings), 32*_x*_x*_x*_x*_x*_x - 48*_x*_x*_x*_x + 18*_x*_x - 1);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24748, Format('Chebyshev(7, %g)', [_x], DefaultFormatSettings), 64*_x*_x*_x*_x*_x*_x*_x - 112*_x*_x*_x*_x*_x + 56*_x*_x*_x - 7*_x);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24754, Format('Chebyshev(8, %g)', [_x], DefaultFormatSettings), 128*_x*_x*_x*_x*_x*_x*_x*_x - 256*_x*_x*_x*_x*_x*_x + 160*_x*_x*_x*_x - 32*_x*_x + 1);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24760, Format('Chebyshev(9, %g)', [_x], DefaultFormatSettings), 256*_x*_x*_x*_x*_x*_x*_x*_x*_x - 576*_x*_x*_x*_x*_x*_x*_x + 432*_x*_x*_x*_x*_x - 120*_x*_x*_x + 9*_x);
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24766, Format('Chebyshev(10, %g)', [_x], DefaultFormatSettings), 512*_x*_x*_x*_x*_x*_x*_x*_x*_x*_x - 1280*_x*_x*_x*_x*_x*_x*_x*_x + 1120*_x*_x*_x*_x*_x*_x - 400*_x*_x*_x*_x + 50*_x*_x - 1);
  end;

  Eps; Test({LINENUM}24769, 'Chebyshev(0, 1 + i)', TASC(1.0));
  Eps; Test({LINENUM}24770, 'Chebyshev(1, 2 + 3⋅i)', 2 + 3*ImaginaryUnit);
  Eps; Test({LINENUM}24771, 'Chebyshev(2, 5 + 7⋅i)', -49 + 140*ImaginaryUnit);
  Eps; Test({LINENUM}24772, 'Chebyshev(3, 5 - 2⋅i)', 245 - 562*ImaginaryUnit);
  Eps; Test({LINENUM}24773, 'Chebyshev(4, -1 + 6⋅i)', 8929 + 6816*ImaginaryUnit);
  Eps; Test({LINENUM}24774, 'Chebyshev(5, -3 - i)', 537 - 4541*ImaginaryUnit);
  Eps; Test({LINENUM}24775, 'Chebyshev(6, -2 - i/3)', 471469/729 + 112280/81 * ImaginaryUnit);
  Eps; Test({LINENUM}24776, 'Chebyshev(7, -1 - i)', -841 - 41 * ImaginaryUnit);
  Eps; Test({LINENUM}24777, 'Chebyshev(8, 1/2 + i)', -1553/2 - 280 * ImaginaryUnit);
  Eps; Test({LINENUM}24778, 'Chebyshev(9, -i/2)', -38 * ImaginaryUnit);
  Eps; Test({LINENUM}24779, 'Chebyshev(10, 1/2 + 5⋅i/2)', 2221687 + 8046225 * ImaginaryUnit);
  Eps; Test({LINENUM}24780, 'Chebyshev(10, 1/10 + i/5)', -40668013/19531250 + 29343942/9765625 * ImaginaryUnit);

  // Bernstein polynomials

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24787, Format('Bernstein(0, 3, %g)', [_x], DefaultFormatSettings), pow(1 - _x, 3));
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24793, Format('Bernstein(1, 3, %g)', [_x], DefaultFormatSettings), 3*_x*pow(1 - _x, 2));
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24799, Format('Bernstein(2, 3, %g)', [_x], DefaultFormatSettings), 3*_x*_x*(1-_x));
  end;

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24805, Format('Bernstein(3, 3, %g)', [_x], DefaultFormatSettings), _x*_x*_x);
  end;

  Test({LINENUM}24808, 'Bernstein(4, 3, 10)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');
  Test({LINENUM}24809, 'Bernstein(-1, 3, 10)', failure, 'Binomial coefficient C(n, k) only defined for integers n and k satisfying 0 ≤ k ≤ n.');

  Test({LINENUM}24811, 'Bernstein(2, 3)', failure, 'Too few arguments. A required argument of type number is missing.');

  for _i := -100 to 100 do
  begin
    _x := _i / 10;
    Eps; Test({LINENUM}24816, Format('Bernstein(6, 10, %g)', [_x], DefaultFormatSettings), 210*pow(_x, 6)*pow(1 - _x, 4));
  end;

  // Gamma function

  for _i := 1 to 100 do
    Test({LINENUM}24822, Format('gamma(%d)', [_i]), factorial(_i - 1));

  Eps(1E-12); Test({LINENUM}24824, 'gamma(0.5)', Sqrt(Pi));
  Eps(1E-12); Test({LINENUM}24825, 'gamma(1.5)', Sqrt(Pi) / 2);
  Eps(1E-12); Test({LINENUM}24826, 'gamma(2.5)', 3 * Sqrt(Pi) / 4);
  Eps(1E-11); Test({LINENUM}24827, 'gamma(3.5)', 15 * Sqrt(Pi) / 8);
  Eps(1E-10); Test({LINENUM}24828, 'gamma(4.5)', 105 * Sqrt(Pi) / 16);
  Eps(1E-9); Test({LINENUM}24829, 'gamma(5.5)', 945 * Sqrt(Pi) / 32);
  Eps(1E-7); Test({LINENUM}24830, 'gamma(6.5)', 10395 * Sqrt(Pi) / 64);
  Eps(1E-6); Test({LINENUM}24831, 'gamma(7.5)', 135135 * Sqrt(Pi) / 128);
  Eps(1E-5); Test({LINENUM}24832, 'gamma(8.5)', 2027025 * Sqrt(Pi) / 256);
  Eps(1E-4); Test({LINENUM}24833, 'gamma(9.5)', 34459425 * Sqrt(Pi) / 512);
  Eps(1E-4); Test({LINENUM}24834, 'gamma(10.5)', 654729075 * Sqrt(Pi) / 1024);

  Eps(1E-12); Test({LINENUM}24836, 'gamma(-0.5)', -2*Sqrt(Pi));
  Eps(1E-12); Test({LINENUM}24837, 'gamma(-1.5)', 4*Sqrt(Pi)/3);
  Eps(1E-12); Test({LINENUM}24838, 'gamma(-2.5)', -8*Sqrt(Pi)/15);
  Eps(1E-12); Test({LINENUM}24839, 'gamma(-3.5)', 16*Sqrt(Pi)/105);
  Eps(1E-12); Test({LINENUM}24840, 'gamma(-4.5)', -32*Sqrt(Pi)/945);
  Eps(1E-12); Test({LINENUM}24841, 'gamma(-5.5)', 64*Sqrt(Pi)/10395);
  Eps(1E-12); Test({LINENUM}24842, 'gamma(-6.5)', -128*Sqrt(Pi)/135135);
  Eps(1E-12); Test({LINENUM}24843, 'gamma(-7.5)', 256*Sqrt(Pi)/2027025);
  Eps(1E-12); Test({LINENUM}24844, 'gamma(-8.5)', -512*Sqrt(Pi)/34459425);
  Eps(1E-12); Test({LINENUM}24845, 'gamma(-9.5)', 1024*Sqrt(Pi)/654729075);

  for _i := 0 downto -10 do
    Test({LINENUM}24848, Format('gamma(%d)', [_i]), failure, 'Gamma function not defined for non-positive integers.');

  Eps(1E-12); Test({LINENUM}24850, 'gamma(i)', -0.1549498283018106851249551304838866051958796520793249302 - 0.4980156681183560427136911174621980919529629675876500928*ImaginaryUnit);
  Eps(1E-12); Test({LINENUM}24851, 'gamma(1 + i)', 0.49801566811835604271369111746219809195296296758765009289 - 0.15494982830181068512495513048388660519587965207932493026*ImaginaryUnit);
  Eps(1E-12); Test({LINENUM}24852, 'gamma(2 + 3⋅i)', -0.0823952726656118836738703143646259774892907379038426752 + 0.0917742874352593145956674172937769177383779146310396588*ImaginaryUnit);
  Eps(1E-12); Test({LINENUM}24853, 'gamma(5 - 3⋅i/2)', -12.319673342713806765304246118251878830714082981365460957 - 14.189577272950092932314465054480288923528977805372384971*ImaginaryUnit);
  Eps(1E-12); Test({LINENUM}24854, 'gamma(-3 + 7⋅i)', 3.888686566766278461568905334904512455202847233180156E-8 + 1.145975420127756784498523571901256179427475536073713E-8*ImaginaryUnit);
  Eps(1E-12); Test({LINENUM}24855, 'gamma(-2 - i/4)', 0.41931135601757055406034043510793363519171658454211308328 + 1.7820281003262372417054411133763631011586288081694451113*ImaginaryUnit);
  Eps(1E-12); Test({LINENUM}24856, 'gamma(-i/4)', -0.5241053229606349827871712420106509076850207235767397346 + 3.767162961395262571349547483497653734888630754234884715*ImaginaryUnit);

  // Harmonic numbers

  Test({LINENUM}24860, 'HarmonicNumber(0)', 0.0);

  Test({LINENUM}24862, 'HarmonicNumber(1)', 1.0);

  Test({LINENUM}24864, 'HarmonicNumber(2)', 1 + 1/2);
  Test({LINENUM}24865, 'HarmonicNumber(3)', 1 + 1/2 + 1/3);
  Test({LINENUM}24866, 'HarmonicNumber(4)', 1 + 1/2 + 1/3 + 1/4);
  Test({LINENUM}24867, 'HarmonicNumber(5)', 1 + 1/2 + 1/3 + 1/4 + 1/5);
  Test({LINENUM}24868, 'HarmonicNumber(6)', 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6);
  Test({LINENUM}24869, 'HarmonicNumber(7)', 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7);
  Test({LINENUM}24870, 'HarmonicNumber(8)', 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8);
  Test({LINENUM}24871, 'HarmonicNumber(9)', 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9);
  Test({LINENUM}24872, 'HarmonicNumber(10)', 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 + 1/10);

  for _i := 1 to 1000 do
    Test({LINENUM}24875, Format('HarmonicNumber(%d) = HarmonicNumber(%d - 1) + 1/%d', [_i, _i, _i]), True);

  Eps; Test({LINENUM}24877, 'HarmonicNumber(100)', 5.187377517639620260805117675658253157908972126708451653176);
  Eps; Test({LINENUM}24878, 'HarmonicNumber(1000)', 7.485470860550344912656518204333900176521679169708803665773);
  Eps; Test({LINENUM}24879, 'HarmonicNumber(10000)', 9.787606036044382264178477904851605334859262945577691718389);
  Eps; Test({LINENUM}24880, 'HarmonicNumber(100000)', 12.09014612986342794736321936350421950079369894178220110162);
  Eps; Test({LINENUM}24881, 'HarmonicNumber(1000000)', 14.39272672286572363138112749318858767664480001374431165341);
  Eps(1E-14); Test({LINENUM}24882, 'HarmonicNumber(10000000)', 16.69531136585985181539911893954045188424986975237308046278);
  Eps(1E-14); Test({LINENUM}24883, 'HarmonicNumber(100000000)', 18.99789641385389832441711039422398284185097124497010343881);

{$IFNDEF QuickTest}
  Eps(1E-14); Test({LINENUM}24886, 'HarmonicNumber(1000000000)', 21.30048150234794401668510184890834696612707273359888038310);
  Eps(1E-14); Test({LINENUM}24887, 'HarmonicNumber(1000000001)', 21.30048150334794401568510184990834696512707273459888038210);
  Eps(1E-14); Test({LINENUM}24888, 'HarmonicNumber(1000000002)', 21.30048150434794401368510185390834695712707275059888035010);
  Eps(1E-14); Test({LINENUM}24889, 'HarmonicNumber(1000000003)', 21.30048150534794401068510186290834693012707283159888010710);
{$ENDIF}

  Eps(1E-8); Test({LINENUM}24892, 'HarmonicNumber(2000000000)', 21.99362868265788932616483397036652353419476036795913563722);

  Eps(1E-10); Test({LINENUM}24894, 'HarmonicNumber(1E10)', 23.60306659489198970078559330359271117371984172222765335913);
  Eps(1E-10); Test({LINENUM}24895, 'HarmonicNumber(2E10)', 24.29621377542693501020345042505088774179534107533790861325);
  Eps(1E-10); Test({LINENUM}24896, 'HarmonicNumber(5E10)', 25.21250450728609007538715263681889881324544224449617108105);
  Eps(1E-10); Test({LINENUM}24897, 'HarmonicNumber(1E11)', 25.90565168784103538480440975827707538132094237760642633517);
  Eps(1E-12); Test({LINENUM}24898, 'HarmonicNumber(1E12)', 28.20823678083058106882240946296143958892204386615187431120);
  Eps(1E-12); Test({LINENUM}24899, 'HarmonicNumber(1E13)', 30.51082187382417675284040100014580379652314535478063895473);
  Eps(1E-12); Test({LINENUM}24900, 'HarmonicNumber(1E14)', 32.81340696681817743685839245565516800412424684340941192993);
  Eps(1E-12); Test({LINENUM}24901, 'HarmonicNumber(1E15)', 35.11599205981221862087638391034778221172534833203818490597);
  Eps(1E-14); Test({LINENUM}24902, 'HarmonicNumber(1E16)', 37.41857715280626385489437536503222891932644982066695788200);
  Eps(1E-14); Test({LINENUM}24903, 'HarmonicNumber(1E17)', 39.72116224580030949391236681971659395192755130929573085803);
  Eps(1E-14); Test({LINENUM}24904, 'HarmonicNumber(1E18)', 42.02374733879435517343035827440095816777865279792450383407);
  Eps(1E-14); Test({LINENUM}24905, 'HarmonicNumber(1E19)', 44.32633243178840085699834972908532237546225428655327681010);
  Eps(1E-14); Test({LINENUM}24906, 'HarmonicNumber(1E20)', 46.62891752478244654097134118376968658306418077518204978613);

  Eps(1E-14); Test({LINENUM}24908, 'HarmonicNumber(1E50)', 115.7064703146038170615060848243006128110972337673785774004);
  Eps(1E-14); Test({LINENUM}24909, 'HarmonicNumber(1E100)', 230.8357249643061012624056575585188231911523081988172212021);
  Eps(1E-14); Test({LINENUM}24910, 'HarmonicNumber(1E200)', 461.0942342637106696642048030269552439512624570616945188054);
  Eps(1E-14); Test({LINENUM}24911, 'HarmonicNumber(1E500)', 1151.869762161924374869602239432264506231592903650326411615);

  Test({LINENUM}24913, 'HarmonicNumber(-1)', failure, 'To compute the Nth harmonic number, N must be a non-negative integer.');
  Test({LINENUM}24914, 'HarmonicNumber(-2)', failure, 'To compute the Nth harmonic number, N must be a non-negative integer.');
  Test({LINENUM}24915, 'HarmonicNumber(-1E50)', failure);
  Test({LINENUM}24916, 'HarmonicNumber(1.5)', failure);
  Test({LINENUM}24917, 'HarmonicNumber(-1.5)', failure);

  Test({LINENUM}24919, 'HarmonicNumber()', failure, 'Too few arguments. A required argument of type number is missing.');
  Test({LINENUM}24920, 'HarmonicNumber("cat")', failure, 'An object of type number was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}24921, 'HarmonicNumber(1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}24922, 'HarmonicNumber(1 + i)', failure, 'Object isn''t a real number.');


  //
  // Parameterisable container aggregate functions.
  // Sums and products. Max and min. Averages (means).
  // (Tests using parameterisation also test non-standard expression evaluation.)
  //

  // Parameterised values: real numbers (and integers and rational numbers)

  // - sum

  Test({LINENUM}24935, '∑(n, n, 1, 5)', 15);
  Test({LINENUM}24936, '∑(n, n, 1, 1000)', 500500);
  Test({LINENUM}24937, '∑(n, n, -1000, 1000)', 0); // cancellation
  Test({LINENUM}24938, '∑(n, n, -1000, 1002)', 2003);
  Test({LINENUM}24939, '∑(n, n, -1001, 1000)', -1001);
  Test({LINENUM}24940, '∑(n, n, 1, 2)', 3);
  Test({LINENUM}24941, '∑(n, n, 1, 1)', 1);
  Test({LINENUM}24942, '∑(n, n, 123456, 123456)', 123456);

  Test({LINENUM}24944, '∑(n, n, 123457, 123456)', 0); // empty sum
  Test({LINENUM}24945, '∑(n, n, 1, 0)', 0);
  Test({LINENUM}24946, '∑(n, n, 10, 5)', 0);
  Test({LINENUM}24947, '∑(n, n, 1, -5)', 0);
  Test({LINENUM}24948, '∑(n, n, 1000000, -1000000)', 0);
  Test({LINENUM}24949, '∑(n, n, 200000000, -100000000)', 0);
  Test({LINENUM}24950, '∑(n, n, 1000000000000000000, -1000000000000000000)', 0); // returns 0 immediately (fast)

  Test({LINENUM}24952, '∑(n, n, -1000000000000000000, 1000000000000000000)', failure, 'Too many values for the index variable.');

  Test({LINENUM}24954, '∑(n, n, 1000000000000000000, 1000000000000000000)', 1000000000000000000); // large indices work
  Test({LINENUM}24955, '∑(n, n, 1000000000000000000, 1000000000000000001)', 2000000000000000001);

  Test({LINENUM}24957, '∑(n^2, n, 1, 1000)', 333833500);
  Test({LINENUM}24958, '∑(n!, n, 1, 10)', 4037913);
  Test({LINENUM}24959, '∑(n!, n, -10, 10)', failure, 'A non-negative integer was expected as argument 1, but "-10" was given.');
  Test({LINENUM}24960, '∑(prime(n), n, 1, 100)', 24133);
  Test({LINENUM}24961, '∑(prime(n), n, -100, 100)', failure, 'To obtain the Nth prime number, N must be a positive integer.');

  Eps(    ); Test({LINENUM}24963, '∑(2^−k, k, 1, 1000)', 1.0); // geometric series, q = 1/2
  Eps(1E-4); Test({LINENUM}24964, '∑(1/n^2, n, 1, 10000)', Pi*Pi/6);
  Eps(    ); Test({LINENUM}24965, '∑(1/n!, n, 0, 100)', Exp(1)); // Taylor: exp(1)
  Eps(1E-4); Test({LINENUM}24966, '∑((−1)^k/(2⋅k + 1), k, 0, 10000)', Pi/4); // Taylor: arctan(1)
  Eps(    ); Test({LINENUM}24967, '∑((−1)^k ⋅ (π/6)^(2⋅k+1)/(2⋅k+1)!, k, 0, 100)', 0.5); // Taylor: sin(pi/6)
  Eps(1E-4); Test({LINENUM}24968, '∑((−1)^(k+1)/k, k, 1, 10000)', Ln(2)); // Taylor: ln(2)
  Eps(    ); Test({LINENUM}24969, '∑(1/(2^k⋅k), k, 1, 100)', Ln(2));

  Test({LINENUM}24971, 'n ≔ 6; ∑(binomial(n, k), k, 0, n)', 64);
  Test({LINENUM}24972, 'n ≔ 10; ∑(binomial(n, k), k, 0, n)', 1024);

  Test({LINENUM}24974, '∑(Iverson(IsPrime(n)), n, 1, 100) = PrimePi(100)', True);
  Test({LINENUM}24975, '∑(Iverson(IsPrime(n)), n, 1, 500) = PrimePi(500)', True);
  Test({LINENUM}24976, '∑(Iverson(IsPrime(n)), n, 1, 1000) = PrimePi(1000)', True);
  Test({LINENUM}24977, '∑(Iverson(IsPrime(n)), n, 1, 10000) = PrimePi(10000)', True);

  Test({LINENUM}24979, '∑(1/n, n, 1, 50)', HarmonicNumber(50));
  Test({LINENUM}24980, '∑(1/n, n, 1, 100)', HarmonicNumber(100));
  Test({LINENUM}24981, '∑(1/n, n, 1, 1000)', HarmonicNumber(1000));

  Test({LINENUM}24983, '∑(MöbiusMu(k), k, 1, 100) = Mertens(100)', True);
  Test({LINENUM}24984, '∑(MöbiusMu(k), k, 1, 101) = Mertens(101)', True);
  Test({LINENUM}24985, '∑(MöbiusMu(k), k, 1, 102) = Mertens(102)', True);
  Test({LINENUM}24986, '∑(MöbiusMu(k), k, 1, 103) = Mertens(103)', True);
  Test({LINENUM}24987, '∑(MöbiusMu(k), k, 1, 104) = Mertens(104)', True);
  Test({LINENUM}24988, '∑(MöbiusMu(k), k, 1, 105) = Mertens(105)', True);
  Test({LINENUM}24989, '∑(MöbiusMu(k), k, 1, 106) = Mertens(106)', True);
  Test({LINENUM}24990, '∑(MöbiusMu(k), k, 1, 107) = Mertens(107)', True);
  Test({LINENUM}24991, '∑(MöbiusMu(k), k, 1, 108) = Mertens(108)', True);
  Test({LINENUM}24992, '∑(MöbiusMu(k), k, 1, 109) = Mertens(109)', True);

  Test({LINENUM}24994, 'n ≔ 50; ∑(Fibonacci(k), k, 1, n) = Fibonacci(n + 2) − 1', True);
  Test({LINENUM}24995, 'n ≔ 100; ∑(Fibonacci(k), k, 1, n) = Fibonacci(n + 2) − 1', True);
  Test({LINENUM}24996, 'n ≔ 150; ∑(Fibonacci(k), k, 1, n) = Fibonacci(n + 2) − 1', True);
  Test({LINENUM}24997, 'n ≔ 200; ∑(Fibonacci(k), k, 1, n) = Fibonacci(n + 2) − 1', True);

  Test({LINENUM}24999, '∑(∑(k, k, 1, n), n, 1, 100)', 171700); // sum of sum (variable in upper bound)
  Test({LINENUM}25000, '∑(∑(a⋅k, k, 1, 10), a, 1, 20)', 11550); // sum of sum (variable in summand)
  Test({LINENUM}25001, '∑(∑(a⋅k, k, 1, a), a, 1, 10)', 1705); // sum of sum (variable in summand and upper bound)
  Test({LINENUM}25002, '∑(∑(a⋅k, k, 1, a), a, 1, 100)', 12920425);

  Test({LINENUM}25004, '∑(∑(∑(a⋅b⋅k, k, 1, b), a, 1, b), b, 1, 10)', 68629); // sum of sum of sum (mixed positions)
  Test({LINENUM}25005, '∑(∑(∑(a⋅b⋅k, k, 1, b), a, 1, b), b, 9, 10)', 48475);
  Test({LINENUM}25006, '∑(∑(∑(a⋅b⋅k, k, 1, b), a, 1, b), b, 3, 13)', 297187);
  Test({LINENUM}25007, '∑(∑(∑(a⋅b⋅k, k, 1, b), a, 1, b), b, -10, 10)', 68629); // Empty sums don't alter the value
  Test({LINENUM}25008, '∑(∑(∑(a⋅b⋅k, k, 1, b), a, 1, b), b, -10, -3)', 0); // Empty sums

  Test({LINENUM}25010, '∑(∑(∑(a⋅b⋅k, k, 1, b), a, 1, b), b, 1, 10)', 68629);
  Test({LINENUM}25011, '∑(∑(∑(a⋅b⋅k, k, 1, b), a, 1, b), b, 1, 20)', 3455683);
  Test({LINENUM}25012, '∑(∑(∑(a⋅b⋅k, k, 1, b), a, 1, b), b, 1, 30)', 36187912);

  Test({LINENUM}25014, 'f ≔ n ↦ ∑(∑(∑(a⋅b⋅k, k, 1, b), a, 1, b), b, 1, n);', null);
  Test({LINENUM}25015, 'f(10)', 68629);
  Test({LINENUM}25016, 'f(10) + 1', 68630);
  Test({LINENUM}25017, 'f(20/2) + 1', 68630);
  Test({LINENUM}25018, 'f(20)', 3455683);
  Test({LINENUM}25019, 'f(30)', 36187912);
  Test({LINENUM}25020, 'f(0)', 0);
  Test({LINENUM}25021, 'f(-100)', 0);
  Test({LINENUM}25022, 'f(2, 5)', failure, '1 argument(s) expected, but 2 given.');

  Test({LINENUM}25024, 'g ≔ (a, b, k) ↦ a⋅b⋅k; f ≔ n ↦ ∑(∑(∑(g(a, b, k), k, 1, b), a, 1, b), b, 1, n);', null);
  Test({LINENUM}25025, 'f(10)', 68629);
  Test({LINENUM}25026, 'f(10) + 1', 68630);
  Test({LINENUM}25027, 'f(20/2) + 1', 68630);
  Test({LINENUM}25028, 'f(20)', 3455683);
  Test({LINENUM}25029, 'f(30)', 36187912);
  Test({LINENUM}25030, 'f(0)', 0);
  Test({LINENUM}25031, 'f(-100)', 0);
  Test({LINENUM}25032, 'f(2, 5)', failure, '1 argument(s) expected, but 2 given.');

  Eps(1E-9); Test({LINENUM}25034, 'N ≔ 100000; π/N ⋅ ∑(sin(n⋅π/N), n, 1, N)', 2.0); // Riemann sum for the integral of sine from 0 to pi

  Test({LINENUM}25036, 'delete(f); delete(g); delete(n); delete(N)', success);

  // - product

  Test({LINENUM}25040, '∏(k, k, 1, 5)', 120);
  Test({LINENUM}25041, '∏(k, k, 1, 10)', 3628800);
  Eps; Test({LINENUM}25042, '∏(k, k, 1, 50)', 3.0414093201713378043612608166064768844377641568960512E64);

  Test({LINENUM}25044, '∏(k, k, 10, 10)', 10);
  Test({LINENUM}25045, '∏(k, k, 10, 11)', 110);
  Test({LINENUM}25046, '∏(k, k, 99, 100)', 9900);

  Test({LINENUM}25048, '∏(k, k, -10, -10)', -10);
  Test({LINENUM}25049, '∏(k, k, -10, -9)', 90);
  Test({LINENUM}25050, '∏(k, k, -10, -8)', -720);
  Test({LINENUM}25051, '∏(k, k, -10, -7)', 5040);

  Test({LINENUM}25053, '∏(k, k, -10, 10)', 0);

  Test({LINENUM}25055, '∏(k, k, 10, 9)', 1);
  Test({LINENUM}25056, '∏(k, k, 10, -1000000000)', 1);
  Test({LINENUM}25057, '∏(k, k, 1, -1)', 1);
  Test({LINENUM}25058, '∏(k, k, 0, -1)', 1);

  for _i := 0 to 10 do
    Test({LINENUM}25061, Format('∏(k, k, 1, %d) = %d!', [_i, _i]), True);

  Eps(1E-4); Test({LINENUM}25063, '∏((2⋅k)^2/((2⋅k−1)⋅(2⋅k+1)), k, 1, 10000)', Pi/2);

  Eps; Test({LINENUM}25065, 'a ≔ n ↦ (n + 1)/n; ∏(a(n), n, 1, 100)', 101.0);
  Test({LINENUM}25066, 'delete(a)', success);

  Test({LINENUM}25068, '∏(∑(a⋅k, k, 1, a), a, 1, 5)', 324000);

  Test({LINENUM}25070, '∑(∏(∑(a⋅k, k, 1, a), a, 1, n), n, 1, 1)', 1);
  Test({LINENUM}25071, '∑(∏(∑(a⋅k, k, 1, a), a, 1, n), n, 1, 2)', 7);
  Test({LINENUM}25072, '∑(∏(∑(a⋅k, k, 1, a), a, 1, n), n, 1, 3)', 115);
  Test({LINENUM}25073, '∑(∏(∑(a⋅k, k, 1, a), a, 1, n), n, 1, 4)', 4435);
  Test({LINENUM}25074, '∑(∏(∑(a⋅k, k, 1, a), a, 1, n), n, 1, 5)', 328435);
  Test({LINENUM}25075, '∑(∏(∑(a⋅k, k, 1, a), a, 1, n), n, 1, 6)', 41152435);
  Test({LINENUM}25076, '∑(∏(∑(a⋅k, k, 1, a), a, 1, n), n, 1, 7)', 8042656435);

  Test({LINENUM}25078, 'a ≔ N ↦ ∑(∏(∑(a⋅k, k, 1, a), a, 1, n), n, 1, N);', null);

  Test({LINENUM}25080, 'a(1)', 1);
  Test({LINENUM}25081, 'a(2)', 7);
  Test({LINENUM}25082, 'a(3)', 115);
  Test({LINENUM}25083, 'a(4)', 4435);
  Test({LINENUM}25084, 'a(5)', 328435);
  Test({LINENUM}25085, 'a(6)', 41152435);
  Test({LINENUM}25086, 'a(7)', 8042656435);

  Test({LINENUM}25088, '∑(a(n), n, 1, 7)', 8084141863);

  Test({LINENUM}25090, 'delete(a)', success);

  Test({LINENUM}25092, '∑(∑(∏(∑(a⋅k, k, 1, a), a, 1, n), n, 1, N), N, 1, 7)', 8084141863);

  // - min

  Test({LINENUM}25096, 'min(k, k, 5, 37)', 5);
  Test({LINENUM}25097, 'min(k, k, -101, 37)', -101);

  Test({LINENUM}25099, 'min(k/2, k, 5, 37)', 2.5);
  Test({LINENUM}25100, 'min(k/2, k, -102, 37)', -51.0); // switches from Z to R at the second value
  Test({LINENUM}25101, 'min(k/2, k, -102, -102)', -51);

  Test({LINENUM}25103, 'min(n^2 − 6⋅n + 14, n, −100, 100)', 5);
  Test({LINENUM}25104, 'min(n^2 − 6⋅n + 14.0, n, −100, 100)', 5.0);

  Test({LINENUM}25106, 'min(Mertens(n), n, 1, 10000)', -43);

  Test({LINENUM}25108, 'min(Mertens(n), n, 0, 10000)', failure, 'Cannot compute Mertens number for a non-positive index.');
  Test({LINENUM}25109, 'min(Mertens(n), n, 20, 19)', failure, 'Cannot find the smallest value in an empty list.');

  // - max

  Test({LINENUM}25113, 'max(k, k, 5, 37)', 37);
  Test({LINENUM}25114, 'max(k, k, -101, 39)', 39);

  Test({LINENUM}25116, 'max(k/2, k, 5, 37)', 18.5);
  Test({LINENUM}25117, 'max(k/2, k, -102, 39)', 19.5); // switches from Z to R at the second value

  Test({LINENUM}25119, 'max(3 − n^2 − 4⋅n, n, −100, 100)', 7);
  Test({LINENUM}25120, 'max(3. − n^2 − 4⋅n, n, −100, 100)', 7.0);

  Test({LINENUM}25122, 'max(Mertens(n), n, 1, 10000)', 35);

  Test({LINENUM}25124, 'max(Mertens(n), n, 0, 10000)', failure, 'Cannot compute Mertens number for a non-positive index.');
  Test({LINENUM}25125, 'max(Mertens(n), n, 20, 19)', failure, 'Cannot find the largest value in an empty list.');

  // - averages

  Test({LINENUM}25129, 'mean(n^2, n, 1, 10)', 38.5);
  Test({LINENUM}25130, 'average(n^2, n, 1, 10)', 38.5);
  Test({LINENUM}25131, 'ArithmeticMean(n^2, n, 1, 10)', 38.5);

  Eps; Test({LINENUM}25133, 'GeometricMean(n^2, n, 1, 10)', 20.50938353057179320068888417748352765252839967057751932878);

  Eps; Test({LINENUM}25135, 'HarmonicMean(n^2, n, 1, 10)', 6.452579827864142630627298586770809148267388226256890997389);
  Test({LINENUM}25136, 'ToFraction(HarmonicMean(n^2, n, 1, 10))', Rat(12700800, 1968329)); // exact

  // Parameterised values: complex numbers

  // - sum

  Test({LINENUM}25142, '∑(i^n, n, 0, 5)', 1 + ImaginaryUnit);

  Eps; Test({LINENUM}25144, 'N ≔ 100; ∑(e^(n⋅2⋅π⋅i/N), n, 0, N−1)', TASC(0.0));
  Test({LINENUM}25145, 'delete(N)', success);

  Eps; Test({LINENUM}25147, '∑(arcsin(k/10), k, 0, 20)', // first 11 terms are real, then non-real
    22.2860565507812216694373875292991693492858041083232776054 - 9.58906539767535588955651797835686581388739377534929228494*ImaginaryUnit);

  // - product

  Eps; Test({LINENUM}25152, '∏((i + k + 1)/(i + k), k, 1, 10)', 6 - 5*ImaginaryUnit);

  Eps; Test({LINENUM}25154, '∏(arcsin(k/10), k, 1, 20)', // first 10 factors are real, then non-real
    0.3168575833230835118697219099861197069587 + 0.3968699397031834013477504509421124402082*ImaginaryUnit);

  // - min and max (not applicable)

  Test({LINENUM}25159, 'min(arcsin(k/10), k, 1, 20)', failure, 'Object isn''t a real number.');
  Test({LINENUM}25160, 'max(arcsin(k/10), k, 1, 20)', failure, 'Object isn''t a real number.');

  // - averages

  Eps; Test({LINENUM}25164, 'N ≔ 100; average(e^(n⋅2⋅π⋅i/N), n, 0, N−1)', TASC(0.0));
  Eps(1E-4); Test({LINENUM}25165, 'N ≔ 100000; average(e^(n⋅π⋅i/N), n, 0, N)', 0.6366*ImaginaryUnit);
  Test({LINENUM}25166, 'delete(N)', success);

  Test({LINENUM}25168, 'mean(n^2 + i, n, 1, 10)', 38.5 + ImaginaryUnit);
  Test({LINENUM}25169, 'average(n^2 + i, n, 1, 10)', 38.5 + ImaginaryUnit);
  Test({LINENUM}25170, 'ArithmeticMean(n^2 + i, n, 1, 10)', 38.5 + ImaginaryUnit);

  Eps; Test({LINENUM}25172, 'GeometricMean(n^2 + i, n, 1, 10)', 21.1296794732483723780501106219994500192481607582975984365 + 2.82602359727550791780719604001273696999214552115880735774*ImaginaryUnit);

  Eps; Test({LINENUM}25174, 'HarmonicMean(n^2 + i, n, 1, 10)', 7.36987810444769310699592007330432761598639272697814191183 + 4.12361984435842182947838233538305872903090270124293967516*ImaginaryUnit);

  // Parameterised values: vectors

  // - sum

  Test({LINENUM}25180, '∑(❨1, t, t^2❩, t, 0, 100)', ASO(ASR3(101, 5050, 338350)));
  Test({LINENUM}25181, '∑(❨1, t, t^2❩, t, -100, 100)', ASO(ASR3(201, 0, 676700)));
  Test({LINENUM}25182, '∑(❨i, t, t^2❩, t, -100, 100)', ASO(ASC3(201*ImaginaryUnit, 0, 676700)));

  // - product (not applicable)

  Test({LINENUM}25186, '∏(❨1, t, t^2❩, t, 0, 100)', failure, 'Cannot compute product of this container.');
  Test({LINENUM}25187, '∏(❨i, t, t^2❩, t, 0, 100)', failure, 'Cannot compute product of this container.');

  // - min (not applicable)

  Test({LINENUM}25191, 'min(❨1, t, t^2❩, t, 0, 100)', failure, 'Cannot find the smallest value in this list.');
  Test({LINENUM}25192, 'min(❨i, t, t^2❩, t, 0, 100)', failure, 'Cannot find the smallest value in this list.');

  // - max (not applicable)

  Test({LINENUM}25196, 'max(❨1, t, t^2❩, t, 0, 100)', failure, 'Cannot find the largest value in this list.');
  Test({LINENUM}25197, 'max(❨i, t, t^2❩, t, 0, 100)', failure, 'Cannot find the largest value in this list.');

  // - averages

  Eps; Test({LINENUM}25201, 'mean(❨1, t, t^2❩, t, -100, 100)', ASO(ASR3(1, 0, 676700/201)));
  Eps; Test({LINENUM}25202, 'average(❨1, t, t^2❩, t, -100, 100)', ASO(ASR3(1, 0, 676700/201)));
  Eps; Test({LINENUM}25203, 'ArithmeticMean(❨1, t, t^2❩, t, -100, 100)', ASO(ASR3(1, 0, 676700/201)));

  Eps; Test({LINENUM}25205, 'mean(❨i, t, t^2❩, t, -100, 100)', ASO(ASC3(ImaginaryUnit, 0, 676700/201)));
  Eps; Test({LINENUM}25206, 'average(❨i, t, t^2❩, t, -100, 100)', ASO(ASC3(ImaginaryUnit, 0, 676700/201)));
  Eps; Test({LINENUM}25207, 'ArithmeticMean(❨i, t, t^2❩, t, -100, 100)', ASO(ASC3(ImaginaryUnit, 0, 676700/201)));

  Test({LINENUM}25209, 'GeometricMean(❨1, t, t^2❩, t, -100, 100)', failure, 'Cannot compute mean of this object.');
  Test({LINENUM}25210, 'HarmonicMean(❨1, t, t^2❩, t, -100, 100)', failure, 'Cannot compute mean of this object.');
  Test({LINENUM}25211, 'GeometricMean(❨i, t, t^2❩, t, -100, 100)', failure, 'Cannot compute mean of this object.');
  Test({LINENUM}25212, 'HarmonicMean(❨i, t, t^2❩, t, -100, 100)', failure, 'Cannot compute mean of this object.');

  // Parameterised values: matrices

  // - sum

  Test({LINENUM}25218, '∑(❨❨0, 1❩, ❨t, t^2❩❩, t, 0, 100)', 2, [0, 101, 5050, 338350]);
  Test({LINENUM}25219, '∑(❨❨0, 1❩, ❨t, t^2❩❩, t, -100, 100)', 2, [0, 201, 0, 676700]);

  // - product

  Eps; Test({LINENUM}25223, '∏(❨❨1, 0❩, ❨1/t!, 1❩❩, t, 0, 100)', 2, [1, 0, Exp(1), 1]);
  Eps; Test({LINENUM}25224, '∏(❨❨i, 0❩, ❨1/t!, i❩❩, t, 0, 100)', 2, [ImaginaryUnit, 0, Exp(1), ImaginaryUnit]);
  Eps; Test({LINENUM}25225, '∏(❨❨1, 0❩, ❨1/t!, i❩❩, t, 0, 100)', 2, [1, 0, cexp(ImaginaryUnit), ImaginaryUnit]);

  Test({LINENUM}25227, 'rot ≔ φ ↦ ❨❨cos(φ), −sin(φ)❩, ❨sin(φ), cos(φ)❩❩;', null);
  Eps; Test({LINENUM}25228, '∏(rot(n/(100⋅2⋅π)), n, 1, 10)', 2, [Cos(TASR(11/(40*Pi))), -Sin(TASR(11/(40*Pi))), Sin(TASR(11/(40*Pi))), Cos(TASR(11/(40*Pi)))]);
  Test({LINENUM}25229, 'delete(rot)', success);

  // - min (not applicable)

  Test({LINENUM}25233, 'min(❨❨1, 0❩, ❨1/t!, 1❩❩, t, 0, 100)', failure, 'Cannot find the smallest value in this list.');
  Test({LINENUM}25234, 'min(❨❨i, 0❩, ❨1/t!, 1❩❩, t, 0, 100)', failure, 'Cannot find the smallest value in this list.');

  // - max (not applicable)

  Test({LINENUM}25238, 'max(❨❨1, 0❩, ❨1/t!, 1❩❩, t, 0, 100)', failure, 'Cannot find the largest value in this list.');
  Test({LINENUM}25239, 'max(❨❨i, 0❩, ❨1/t!, 1❩❩, t, 0, 100)', failure, 'Cannot find the largest value in this list.');

  // - averages

  Eps; Test({LINENUM}25243, 'mean(❨❨0, 1❩, ❨t, t^2❩❩, t, -100, 100)', 2, [0, 1, 0, 676700/201]);
  Eps; Test({LINENUM}25244, 'average(❨❨0, 1❩, ❨t, t^2❩❩, t, -100, 100)', 2, [0, 1, 0, 676700/201]);
  Eps; Test({LINENUM}25245, 'ArithmeticMean(❨❨0, 1❩, ❨t, t^2❩❩, t, -100, 100)', 2, [0, 1, 0, 676700/201]);

  Eps; Test({LINENUM}25247, 'mean(❨❨0, i❩, ❨t, t^2❩❩, t, -100, 100)', 2, [0, ImaginaryUnit, 0, 676700/201]);
  Eps; Test({LINENUM}25248, 'average(❨❨0, i❩, ❨t, t^2❩❩, t, -100, 100)', 2, [0, ImaginaryUnit, 0, 676700/201]);
  Eps; Test({LINENUM}25249, 'ArithmeticMean(❨❨0, i❩, ❨t, t^2❩❩, t, -100, 100)', 2, [0, ImaginaryUnit, 0, 676700/201]);

  Eps; Test({LINENUM}25251, 'GeometricMean(❨❨0, 1❩, ❨t, t^2❩❩, t, -100, 100)', failure, 'Cannot compute mean of this object.');
  Eps; Test({LINENUM}25252, 'HarmonicMean(❨❨0, 1❩, ❨t, t^2❩❩, t, -100, 100)', failure, 'Cannot compute mean of this object.');
  Eps; Test({LINENUM}25253, 'GeometricMean(❨❨0, i❩, ❨t, t^2❩❩, t, -100, 100)', failure, 'Cannot compute mean of this object.');
  Eps; Test({LINENUM}25254, 'HarmonicMean(❨❨0, i❩, ❨t, t^2❩❩, t, -100, 100)', failure, 'Cannot compute mean of this object.');

  // Given container

  // - sum

  Test({LINENUM}25260, '∑(''(1, 5, 3, 10))', 19);
  Test({LINENUM}25261, '∑(''(1, 5, 3, 10, 10))', 29);
  Test({LINENUM}25262, '∑(''(1, 5, 3, 10, 1000))', 1019);
  Test({LINENUM}25263, '∑(''(21))', 21);
  Test({LINENUM}25264, '∑(''())', 0);

  Test({LINENUM}25266, '∑(''(1, 5, 3, 10.0))', 19.0);
  Test({LINENUM}25267, '∑(''(1, 5, 3, 10, i))', 19 + ImaginaryUnit);

  Eps; Test({LINENUM}25269, '∑(''(1, 5, 3, 10.5 + i/2 + i/3))', 19.5 + 5*ImaginaryUnit/6);

  Test({LINENUM}25271, '∑(❨1, 5, 3, 10❩)', 19.0);
  Test({LINENUM}25272, '∑(❨1, 5, 3, 10, i❩)', 19.0 + ImaginaryUnit);

  Test({LINENUM}25274, '∑(❨❨1, 2❩, ❨3, 4❩❩)', 10.0);
  Test({LINENUM}25275, '∑(❨❨i, 2❩, ❨3, 4❩❩)', 9.0 + ImaginaryUnit);

  Test({LINENUM}25277, '∑({1, 2, 5})', 8);
  Test({LINENUM}25278, '∑({1, 2, 5.0})', 8);
  Test({LINENUM}25279, '∑({1, 2, 5 + i})', 8.0 + ImaginaryUnit);

  Test({LINENUM}25281, '∑({1, 2, 5, 5})', 8);

  Test({LINENUM}25283, '∑({})', 0);
  Test({LINENUM}25284, '∑(∅)', 0);

  Test({LINENUM}25286, '∑(''(❨5, 0, 1❩, ❨1, 4, 9❩, ❨−2, 4, 6❩))', [4, 8, 16]);
  Test({LINENUM}25287, '∑(''(❨5, 0, 1❩, ❨1, 4, 9❩, ❨−2, 4, 6, 8❩))', failure, 'Cannot add two vectors of unequal dimension.');

  Test({LINENUM}25289, '∑(''(❨❨4, 2❩, ❨1, −3❩❩, ❨❨7, 5❩, ❨9, 3❩❩, ❨❨−1, 0❩, ❨4, 4❩❩))', 2, [10, 7, 14, 4]);
  Test({LINENUM}25290, '∑(''(❨❨4, 2❩, ❨1, −3❩❩, ❨❨7, 5❩, ❨9, 3❩❩, ❨❨−1, 0, 5❩, ❨4, 1, 4❩❩))', failure, 'Cannot add two matrices of different sizes.');

  Test({LINENUM}25292, '∑(5)', failure, 'Cannot compute sum of this object.');
  Test({LINENUM}25293, '∑("rat")', failure, 'Cannot compute sum of this container.');
  Test({LINENUM}25294, '∑("5")', failure, 'Cannot compute sum of this container.');

  // - product

  Test({LINENUM}25298, '∏(''(5, 2, 7, 1))', 70);
  Test({LINENUM}25299, '∏(''(5, 2, 7, 1, 2))', 140);
  Test({LINENUM}25300, '∏(''(5, 2, 7, 1.0))', 70.0);
  Test({LINENUM}25301, '∏(''(5, 2, 7, i))', 70 * ImaginaryUnit);
  Test({LINENUM}25302, '∏(''())', 1);

  Test({LINENUM}25304, '∏(❨5, 8, 2❩)', 80.0);
  Test({LINENUM}25305, '∏(❨5, 8, i❩)', 40.0 * ImaginaryUnit);

  Test({LINENUM}25307, '∏(❨❨1, 2❩, ❨3, 4❩❩)', 24.0);
  Test({LINENUM}25308, '∏(❨❨i, 2❩, ❨3, 4❩❩)', 24.0 * ImaginaryUnit);

  Test({LINENUM}25310, '∏({1, 2, 5})', 10);
  Test({LINENUM}25311, '∏({1, 2, 5.0})', 10);
  Test({LINENUM}25312, '∏({1, 2, 5 + i})', 10.0 + 2*ImaginaryUnit);

  Test({LINENUM}25314, '∏({1, 2, 5, 5})', 10);

  Test({LINENUM}25316, '∏({})', 1);
  Test({LINENUM}25317, '∏(∅)', 1);

  Test({LINENUM}25319, '∏(''(❨5, 0, 1❩, ❨1, 4, 9❩, ❨−2, 4, 6❩))', failure, 'Cannot compute product of this container.');
  Test({LINENUM}25320, '∏(''(❨❨4, 2❩, ❨1, −3❩❩, ❨❨7, 5❩, ❨9, 3❩❩, ❨❨−1, 0❩, ❨4, 4❩❩))', 2, [58, 104, 4, -16]);
  Test({LINENUM}25321, '∏(''(❨❨4, 2❩, ❨1, −3❩❩, ❨❨7, 5❩, ❨9, 3❩❩, ❨❨−1, 0❩❩))', failure, 'When multiplying two matrices, the number of columns in the first matrix has to equal the number of rows in the second matrix.');

  Test({LINENUM}25323, '∏(5)', failure, 'Cannot compute product of this object.');
  Test({LINENUM}25324, '∏("rat")', failure, 'Cannot compute product of this container.');
  Test({LINENUM}25325, '∏("5")', failure, 'Cannot compute product of this container.');

  // - max

  Test({LINENUM}25329, 'max(''(1, 7, 2, 0, −3, 5))', 7);
  Test({LINENUM}25330, 'max(''(1, 7, 2, 0, −3, 5.0))', 7.0);
  Test({LINENUM}25331, 'max(''())', failure, 'Cannot find the largest value in an empty list.');

  Test({LINENUM}25333, 'max(❨1, 7, 2, 0, −3, 5❩)', 7.0);
  Test({LINENUM}25334, 'max(❨❨1, 7, 2❩, ❨0, −3, 5❩❩)', 7.0);

  Test({LINENUM}25336, 'max({1, 7, 2, 0, −3, 5})', 7);
  Test({LINENUM}25337, 'max({1, 7, 2, 0, −3, 5.0})', 7);

  Test({LINENUM}25339, 'max(''(1, 7, 2, 0, −3, 5, i))', failure, 'Object isn''t a real number.');
  Test({LINENUM}25340, 'max(❨1, 7, 2, 0, −3, 5, i❩)', failure, 'Object isn''t a real number.');
  Test({LINENUM}25341, 'max(❨❨1, 7, 2❩, ❨0, −3, i❩❩)', failure, 'Object isn''t a real number.');
  Test({LINENUM}25342, 'max({1, 7, 2, 0, −3, 5, i})', failure, 'Object isn''t a real number.');

  Test({LINENUM}25344, 'max(5)', failure, 'Cannot find the largest number in an object of type "integer".');
  Test({LINENUM}25345, 'max(5.0)', failure, 'Cannot find the largest number in an object of type "real number".');
  Test({LINENUM}25346, 'max(i)', failure, 'Cannot find the largest number in an object of type "complex number".');
  Test({LINENUM}25347, 'max("test")', failure, 'Cannot find the largest value in this list.');

  Test({LINENUM}25349, 'max(2, 7)', 7);
  Test({LINENUM}25350, 'max(20, 7)', 20);
  Test({LINENUM}25351, 'max(5/2, 7)', 7.0);
  Test({LINENUM}25352, 'max(2, 7/5)', 2.0);
  Test({LINENUM}25353, 'max(2.0, 7)', 7.0);
  Test({LINENUM}25354, 'max(2, 7.0)', 7.0);
  Test({LINENUM}25355, 'max(5.3, -2.1)', 5.3);
  Test({LINENUM}25356, 'max(-52, -52.001)', -52.0);

  Test({LINENUM}25358, 'max(5, i)', failure, 'An object of type real number was expected as argument 2, but an object of type complex number was given.');
  Test({LINENUM}25359, 'max(i, 2)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}25361, 'max(5, 6, 1)', failure, 'There is no version of this function that can take 3 argument(s).');

  // - min

  Test({LINENUM}25365, 'min(''(1, 7, 2, 0, −3, 5))', -3);
  Test({LINENUM}25366, 'min(''(1, 7, 2, 0, −3, 5.0))', -3.0);
  Test({LINENUM}25367, 'min(''())', failure, 'Cannot find the smallest value in an empty list.');

  Test({LINENUM}25369, 'min(❨1, 7, 2, 0, −3, 5❩)', -3.0);
  Test({LINENUM}25370, 'min(❨❨1, 7, 2❩, ❨0, −3, 5❩❩)', -3.0);

  Test({LINENUM}25372, 'min({1, 7, 2, 0, −3, 5})', -3);
  Test({LINENUM}25373, 'min({1, 7, 2, 0, −3, 5.0})', -3);

  Test({LINENUM}25375, 'min(''(1, 7, 2, 0, −3, 5, i))', failure, 'Object isn''t a real number.');
  Test({LINENUM}25376, 'min(❨1, 7, 2, 0, −3, 5, i❩)', failure, 'Object isn''t a real number.');
  Test({LINENUM}25377, 'min(❨❨1, 7, 2❩, ❨0, −3, i❩❩)', failure, 'Object isn''t a real number.');
  Test({LINENUM}25378, 'min({1, 7, 2, 0, −3, 5, i})', failure, 'Object isn''t a real number.');

  Test({LINENUM}25380, 'min(5)', failure, 'Cannot find the smallest number in an object of type "integer".');
  Test({LINENUM}25381, 'min(5.0)', failure, 'Cannot find the smallest number in an object of type "real number".');
  Test({LINENUM}25382, 'min(i)', failure, 'Cannot find the smallest number in an object of type "complex number".');
  Test({LINENUM}25383, 'min("test")', failure, 'Cannot find the smallest value in this list.');

  Test({LINENUM}25385, 'min(2, 7)', 2);
  Test({LINENUM}25386, 'min(20, 7)', 7);
  Test({LINENUM}25387, 'min(5/2, 7)', 2.5);
  Test({LINENUM}25388, 'min(2, 7/5)', 1.4);
  Test({LINENUM}25389, 'min(2.0, 7)', 2.0);
  Test({LINENUM}25390, 'min(2, 7.0)', 2.0);
  Test({LINENUM}25391, 'min(5.3, -2.1)', -2.1);
  Test({LINENUM}25392, 'min(-52, -52.001)', -52.001);

  Test({LINENUM}25394, 'min(5, i)', failure, 'An object of type real number was expected as argument 2, but an object of type complex number was given.');
  Test({LINENUM}25395, 'min(i, 2)', failure, 'An object of type real number was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}25397, 'min(5, 6, 1)', failure, 'There is no version of this function that can take 3 argument(s).');

  // - averages

  Test({LINENUM}25401, 'mean(''(1, 7, 2, 0, −3, 5))', 2.0);
  Test({LINENUM}25402, 'mean(''(1, 7, 2, 0, −3, 5, i))', 12/7 + ImaginaryUnit/7);
  Test({LINENUM}25403, 'mean(''())', failure, 'Cannot compute the mean of an empty list.');

  Test({LINENUM}25405, 'average(''(1, 7, 2, 0, −3, 5))', 2.0);
  Test({LINENUM}25406, 'average(''(1, 7, 2, 0, −3, 5, i))', 12/7 + ImaginaryUnit/7);
  Test({LINENUM}25407, 'average(''())', failure, 'Cannot compute the mean of an empty list.');

  Test({LINENUM}25409, 'ArithmeticMean(''(1, 7, 2, 0, −3, 5))', 2.0);
  Test({LINENUM}25410, 'ArithmeticMean(''(1, 7, 2, 0, −3, 5, i))', 12/7 + ImaginaryUnit/7);
  Test({LINENUM}25411, 'ArithmeticMean(''())', failure, 'Cannot compute the mean of an empty list.');

  Test({LINENUM}25413, 'mean(❨1, 7, 2, 0, −3, 5❩)', 2.0);
  Test({LINENUM}25414, 'mean(❨❨1, 7, 2❩, ❨0, −3, 5❩❩)', 2.0);
  Test({LINENUM}25415, 'mean(❨i, 7, 2, 0, −3, 5❩)', 11/6 + ImaginaryUnit/6);
  Test({LINENUM}25416, 'mean(❨❨i, 7, 2❩, ❨0, −3, 5❩❩)', 11/6 + ImaginaryUnit/6);

  Test({LINENUM}25418, 'mean({1, 7, 2, 0, −3, 5})', 2.0);
  Test({LINENUM}25419, 'mean({1, 7, 2, 0, −3, 5.0})', 2.0);
  Test({LINENUM}25420, 'mean({1, 7, 2, 0, −3, 5, i})', 12/7 + ImaginaryUnit/7);
  Test({LINENUM}25421, 'mean({})', failure, 'Cannot compute the mean of an empty list.');
  Test({LINENUM}25422, 'mean(∅)', failure, 'Cannot compute the mean of an empty list.');

  Test({LINENUM}25424, 'average(❨1, 7, 2, 0, −3, 5❩)', 2.0);
  Test({LINENUM}25425, 'average(❨❨1, 7, 2❩, ❨0, −3, 5❩❩)', 2.0);
  Test({LINENUM}25426, 'average(❨i, 7, 2, 0, −3, 5❩)', 11/6 + ImaginaryUnit/6);
  Test({LINENUM}25427, 'average(❨❨i, 7, 2❩, ❨0, −3, 5❩❩)', 11/6 + ImaginaryUnit/6);

  Test({LINENUM}25429, 'average({1, 7, 2, 0, −3, 5})', 2.0);
  Test({LINENUM}25430, 'average({1, 7, 2, 0, −3, 5.0})', 2.0);
  Test({LINENUM}25431, 'average({1, 7, 2, 0, −3, 5, i})', 12/7 + ImaginaryUnit/7);
  Test({LINENUM}25432, 'average({})', failure, 'Cannot compute the mean of an empty list.');
  Test({LINENUM}25433, 'average(∅)', failure, 'Cannot compute the mean of an empty list.');

  Test({LINENUM}25435, 'ArithmeticMean(❨1, 7, 2, 0, −3, 5❩)', 2.0);
  Test({LINENUM}25436, 'ArithmeticMean(❨❨1, 7, 2❩, ❨0, −3, 5❩❩)', 2.0);
  Test({LINENUM}25437, 'ArithmeticMean(❨i, 7, 2, 0, −3, 5❩)', 11/6 + ImaginaryUnit/6);
  Test({LINENUM}25438, 'ArithmeticMean(❨❨i, 7, 2❩, ❨0, −3, 5❩❩)', 11/6 + ImaginaryUnit/6);

  Test({LINENUM}25440, 'ArithmeticMean({1, 7, 2, 0, −3, 5})', 2.0);
  Test({LINENUM}25441, 'ArithmeticMean({1, 7, 2, 0, −3, 5.0})', 2.0);
  Test({LINENUM}25442, 'ArithmeticMean({1, 7, 2, 0, −3, 5, i})', 12/7 + ImaginaryUnit/7);
  Test({LINENUM}25443, 'ArithmeticMean({})', failure, 'Cannot compute the mean of an empty list.');
  Test({LINENUM}25444, 'ArithmeticMean(∅)', failure, 'Cannot compute the mean of an empty list.');

  Eps; Test({LINENUM}25446, 'GeometricMean(''(2, 5, 7, 3, 1, 4))', 3.07170766197453541);
  Eps; Test({LINENUM}25447, 'GeometricMean(❨2, 5, 7, 3, 1, 4❩)', 3.07170766197453541);
  Eps; Test({LINENUM}25448, 'GeometricMean(❨❨2, 5, 7❩, ❨3, 1, 4❩❩)', 3.07170766197453541);
  Eps; Test({LINENUM}25449, 'GeometricMean({2, 5, 7, 3, 1, 4})', 3.07170766197453541);

  Eps; Test({LINENUM}25451, 'GeometricMean(''(2, 5, 7, 3, 1, i))', 2.3549426067282413 + 0.631004969694475251*ImaginaryUnit);
  Eps; Test({LINENUM}25452, 'GeometricMean(❨2, 5, 7, 3, 1, i❩)', 2.3549426067282413 + 0.631004969694475251*ImaginaryUnit);
  Eps; Test({LINENUM}25453, 'GeometricMean(❨❨2, 5, 7❩, ❨3, 1, i❩❩)', 2.3549426067282413 + 0.631004969694475251*ImaginaryUnit);
  Eps; Test({LINENUM}25454, 'GeometricMean({2, 5, 7, 3, 1, i})', 2.3549426067282413 + 0.631004969694475251*ImaginaryUnit);

  Eps; Test({LINENUM}25456, 'GeometricMean(''())', failure, 'Cannot compute the mean of an empty list.');
  Eps; Test({LINENUM}25457, 'GeometricMean({})', failure, 'Cannot compute the mean of an empty list.');
  Eps; Test({LINENUM}25458, 'GeometricMean(∅)', failure, 'Cannot compute the mean of an empty list.');

  Eps; Test({LINENUM}25460, 'HarmonicMean(''(2, 5, 7, 3, 1, 4))', 2.47301275760549558);
  Eps; Test({LINENUM}25461, 'HarmonicMean(❨2, 5, 7, 3, 1, 4❩)', 2.47301275760549558);
  Eps; Test({LINENUM}25462, 'HarmonicMean(❨❨2, 5, 7❩, ❨3, 1, 4❩❩)', 2.47301275760549558);
  Eps; Test({LINENUM}25463, 'HarmonicMean({2, 5, 7, 3, 1, 4})', 2.47301275760549558);

  Eps; Test({LINENUM}25465, 'HarmonicMean(''(2, 5, 7, 3, 1, i))', 2.27642726399392763 + 1.04606066835607178*ImaginaryUnit);
  Eps; Test({LINENUM}25466, 'HarmonicMean(❨2, 5, 7, 3, 1, i❩)', 2.27642726399392763 + 1.04606066835607178*ImaginaryUnit);
  Eps; Test({LINENUM}25467, 'HarmonicMean(❨❨2, 5, 7❩, ❨3, 1, i❩❩)', 2.27642726399392763 + 1.04606066835607178*ImaginaryUnit);
  Eps; Test({LINENUM}25468, 'HarmonicMean({2, 5, 7, 3, 1, i})', 2.27642726399392763 + 1.04606066835607178*ImaginaryUnit);

  Eps; Test({LINENUM}25470, 'HarmonicMean(''())', failure, 'Cannot compute the mean of an empty list.');
  Eps; Test({LINENUM}25471, 'HarmonicMean({})', failure, 'Cannot compute the mean of an empty list.');
  Eps; Test({LINENUM}25472, 'HarmonicMean(∅)', failure, 'Cannot compute the mean of an empty list.');


  //
  // Integrals
  //

  Eps(1E-8); Test({LINENUM}25479, '∫(sin(x), x, 0, π)', 2.0);
  Eps(1E-12); Test({LINENUM}25480, '∫(sin(x)^2, x, 0, π)', Pi/2);
  Eps(1E-10); Test({LINENUM}25481, '∫(x^2, x, 0, 1)', 1/3);

  Test({LINENUM}25483, 'err ≔ Δx ↦ ∫(x^2, x, 0, 10, Δx) − 1000./3;', null);
  Test({LINENUM}25484, 'err(1E-1) <  0.02', True);
  Test({LINENUM}25485, 'err(1E-2) <  0.0002', True);
  Test({LINENUM}25486, 'err(1E-3) <  0.000002', True);
  Test({LINENUM}25487, 'err(1E-4) <  0.00000002', True);
  Test({LINENUM}25488, 'err(1E-5) <  0.0000000002', True);
  Test({LINENUM}25489, 'delete(err)', success);

  Eps(1E-4); Test({LINENUM}25491, '∫(∫(x^2 + y, y, 0, 1, 0.01), x, 0, 1, 0.01)', 5/6);

  Eps(1E-4); Test({LINENUM}25493, 'f ≔ (x, y) ↦ x^2 + y; ∫(∫(f(x, y), y, 0, 1, 0.01), x, 0, 1, 0.01)', 5/6);
  Eps(1E-4); Test({LINENUM}25494, 'f ≔ (x, y) ↦ x^2 + y; ∫(∫(f(x, y), y, 0, x, 0.005), x, 0, 1, 0.005)', 5/12);
  Eps(1E-4); Test({LINENUM}25495, 'f ≔ (x, y) ↦ x^2 + y; ∫(∫(f(x, y), y, 0, x^2, 0.005), x, 0, 1, 0.005)', 3/10);

  Test({LINENUM}25497, 'delete(f)', success);

  Test({LINENUM}25499, '∫(prime(x)!, x, 0, 1)', failure, 'To obtain the Nth prime number, N must be a positive integer.');
  Test({LINENUM}25500, '∫(∫(prime(x), y, 0, 1, 0.01), x, 0, 1, 0.01)', failure, 'To obtain the Nth prime number, N must be a positive integer.');

  Test({LINENUM}25502, 'f ≔ n ↦ ∫(x^2, x, 0, n);', null);
  Eps(1E-8); Test({LINENUM}25503, 'f(0)', 0.0);
  Eps(1E-8); Test({LINENUM}25504, 'f(1)', 1/3);
  Eps(1E-8); Test({LINENUM}25505, 'f(2)', 8/3);
  Eps(1E-8); Test({LINENUM}25506, 'f(3)', 9.0);
  Eps(1E-8); Test({LINENUM}25507, 'f(4)', 64/3);
  Eps(1E-8); Test({LINENUM}25508, '∑(f(n), n, 1, 4)', 100/3);
  Eps(1E-8); Test({LINENUM}25509, '∑(∫(x^2, x, 0, n), n, 1, 4)', 100/3);
  Test({LINENUM}25510, 'delete(f)', success);

  Test({LINENUM}25512, '∫(ln(x), x, −2, −1)', failure, 'Integrand must be a real-valued function.');


  //
  // Differentiation (derivative at a point)
  //

  Test({LINENUM}25519, 'diff(7, x, 1)', 0.0);
  Eps(1E-12); Test({LINENUM}25520, 'diff(7⋅x, x, 5)', 7.0);
  Eps(1E-12); Test({LINENUM}25521, 'diff(x^2, x, 2)', 4.0);
  Eps(1E-12); Test({LINENUM}25522, 'diff(sin(x), x, π/6)', Sqrt(3)/2);
  Eps(1E-12); Test({LINENUM}25523, 'diff(exp(x), x, 1)', Exp(1));
  Eps(1E-12); Test({LINENUM}25524, 'diff(ln(x), x, 1)', 1.0);
  Eps(1E-10); Test({LINENUM}25525, 'diff(❨3, 2⋅t − 1, t^2, 4⋅t^2 − 3⋅t + 1❩, t, −2)', [0.0, 2.0, -4.0, -19.0]);
  Eps(1E-10); Test({LINENUM}25526, 'diff(❨cos(t), sin(t)❩, t, π/6)', [-0.5, Sqrt(3)/2]);
  Eps(1E-10); Test({LINENUM}25527, 'diff(❨cos(t), sin(t)❩, t, π/3)', [-Sqrt(3)/2, 0.5]);
  Eps(1E-10); Test({LINENUM}25528, 'diff(❨cos(t), sin(t)❩, t, π/4)', [-1/Sqrt(2), 1/Sqrt(2)]);
  Eps(1E-10); Test({LINENUM}25529, 'diff(❨cos(t), sin(t)❩, t, 0)', [0.0, 1.0]);
  Eps(1E-10); Test({LINENUM}25530, 'diff(❨cos(t), sin(t)❩, t, π/2)', [-1.0, 0.0]);
  Eps(1E-10); Test({LINENUM}25531, 'diff(❨7⋅cos(t), sin(t)❩, t, π/6)', [-7*0.5, Sqrt(3)/2]);
  Eps(1E-10); Test({LINENUM}25532, 'diff(❨cos(t), 7⋅sin(t)❩, t, π/3)', [-Sqrt(3)/2, 7*0.5]);
  Eps(1E-10); Test({LINENUM}25533, 'diff(❨7⋅cos(t), sin(t)❩, t, π/4)', [-7/Sqrt(2), 1/Sqrt(2)]);
  Eps(1E-10); Test({LINENUM}25534, 'diff(❨cos(t), 7⋅sin(t)❩, t, 0)', [0.0, 7.0]);
  Eps(1E-10); Test({LINENUM}25535, 'diff(❨cos(t), 7⋅sin(t)❩, t, π/2)', [-1.0, 0.0]);
  Eps(1E-10); Test({LINENUM}25536, 'diff(❨❨t^3, t^5❩, ❨−t^2, −6❩❩, t, 1)', 2, [3.0, 5.0, -2.0, 0.0]);
  Eps(1E-10); Test({LINENUM}25537, 'diff(ZeroMatrix(100), t, π)', ASO(ZeroMatrix(100)));
  Eps(1E-10); Test({LINENUM}25538, 'diff(5⋅t^2 + 3⋅i⋅t, t, 10)', 100.0 + 3.0*ImaginaryUnit);
  Eps(1E-10); Test({LINENUM}25539, 'diff(❨❨x, i⋅x❩, ❨−i⋅x, x❩❩, x, π)', 2, [1.0, ImaginaryUnit, -ImaginaryUnit, 1.0]);
  Eps(1E-10); Test({LINENUM}25540, 'diff(❨❨x, i⋅x❩, ❨−i⋅x, x^2❩❩, x, π)', 2, [1.0, ImaginaryUnit, -ImaginaryUnit, 2*Pi]);
  Eps(1E-10); Test({LINENUM}25541, 'diff(❨❨x, i⋅x❩, ❨−i⋅x, i⋅x^2❩❩, x, π)', 2, [1.0, ImaginaryUnit, -ImaginaryUnit, 2*Pi*ImaginaryUnit]);

  Test({LINENUM}25543, 'diff(x!, x, 5)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}25544, 'diff("test", x, −2)', failure, 'Invalid function arguments');
  Test({LINENUM}25545, 'diff(false, x, −2)', failure, 'Invalid function arguments');
  Test({LINENUM}25546, 'diff({ 1, "cat", false, x }, x, −2)', failure, 'Invalid function arguments');


  //
  // Intervals
  //

  Test({LINENUM}25553, '[5, 4]', asoarr([]));
  Test({LINENUM}25554, '[5, 5]', asoarr([5.0]));
  Eps; Test({LINENUM}25555, '[5, 6, 0.1]', asoarr([5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6.0]));
  Test({LINENUM}25556, '#[5, 6, 0.1]', 10 + 1);
  Test({LINENUM}25557, '#[5, 6, 0.01]', 100 + 1);
  Test({LINENUM}25558, '#[5, 6, 0.001]', 1000 + 1);
  Test({LINENUM}25559, '#[5, 6, 0.0001]', 10000 + 1);
  Test({LINENUM}25560, '#[5, 6, 0.00001]', 100000 + 1);
  Test({LINENUM}25561, '#[5, 6, 0.000001]', 1000000 + 1);
  Test({LINENUM}25562, 'min([5, 6, 0.000001])', 5.0);
  Test({LINENUM}25563, 'max([5, 6, 0.000001])', 6.0);
  Eps; Test({LINENUM}25564, '[5, 6, 0.2]', asoarr([5.0, 5.2, 5.4, 5.6, 5.8, 6.0]));
  Eps; Test({LINENUM}25565, '[5, 6, 0.3]', asoarr([5.0, 5.3, 5.6, 5.9]));
  Eps; Test({LINENUM}25566, '[5, 6, 0.4]', asoarr([5.0, 5.4, 5.8]));
  Eps; Test({LINENUM}25567, '[5, 6, 0.5]', asoarr([5.0, 5.5, 6.0]));
  Eps; Test({LINENUM}25568, '[5, 6, 0.6]', asoarr([5.0, 5.6]));
  Eps; Test({LINENUM}25569, '[5, 6, 0.7]', asoarr([5.0, 5.7]));
  Eps; Test({LINENUM}25570, '[5, 6, 0.8]', asoarr([5.0, 5.8]));
  Eps; Test({LINENUM}25571, '[5, 6, 0.9]', asoarr([5.0, 5.9]));
  Test({LINENUM}25572, '[5, 6, 1.0]', asoarr([5.0, 6.0]));
  Test({LINENUM}25573, '[5, 6, 1.1]', asoarr([5.0]));
  Test({LINENUM}25574, '[5, 6, 10]', asoarr([5.0]));
  Test({LINENUM}25575, '[5, 6, 100]', asoarr([5.0]));
  Test({LINENUM}25576, '[5, 6, 0]', failure, 'A positive real number was expected as argument 3, but "0" was given.');
  Test({LINENUM}25577, '[5, 6, -1]', failure, 'A positive real number was expected as argument 3, but "-1" was given.');
  Test({LINENUM}25578, '[5, 6, 0.001, 5]', failure, 'Too many arguments.');
  Test({LINENUM}25579, '[5, 6, true]', failure, 'An object of type real number was expected as argument 3, but an object of type boolean was given.');
  Eps; Test({LINENUM}25580, '[-5, 5, 1]', asoarr([-5.0, -4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0]));

  Test({LINENUM}25582, 'interval(5, 4)', asoarr([]));
  Test({LINENUM}25583, 'interval(5, 5)', asoarr([5.0]));
  Eps; Test({LINENUM}25584, 'interval(5, 6, 0.1)', asoarr([5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6.0]));
  Test({LINENUM}25585, '#interval(5, 6, 0.1)', 10 + 1);
  Test({LINENUM}25586, '#interval(5, 6, 0.01)', 100 + 1);
  Test({LINENUM}25587, '#interval(5, 6, 0.001)', 1000 + 1);
  Test({LINENUM}25588, '#interval(5, 6, 0.0001)', 10000 + 1);
  Test({LINENUM}25589, '#interval(5, 6, 0.00001)', 100000 + 1);
  Test({LINENUM}25590, '#interval(5, 6, 0.000001)', 1000000 + 1);
  Test({LINENUM}25591, 'min(interval(5, 6, 0.000001))', 5.0);
  Test({LINENUM}25592, 'max(interval(5, 6, 0.000001))', 6.0);
  Eps; Test({LINENUM}25593, 'interval(5, 6, 0.2)', asoarr([5.0, 5.2, 5.4, 5.6, 5.8, 6.0]));
  Eps; Test({LINENUM}25594, 'interval(5, 6, 0.3)', asoarr([5.0, 5.3, 5.6, 5.9]));
  Eps; Test({LINENUM}25595, 'interval(5, 6, 0.4)', asoarr([5.0, 5.4, 5.8]));
  Eps; Test({LINENUM}25596, 'interval(5, 6, 0.5)', asoarr([5.0, 5.5, 6.0]));
  Eps; Test({LINENUM}25597, 'interval(5, 6, 0.6)', asoarr([5.0, 5.6]));
  Eps; Test({LINENUM}25598, 'interval(5, 6, 0.7)', asoarr([5.0, 5.7]));
  Eps; Test({LINENUM}25599, 'interval(5, 6, 0.8)', asoarr([5.0, 5.8]));
  Eps; Test({LINENUM}25600, 'interval(5, 6, 0.9)', asoarr([5.0, 5.9]));
  Test({LINENUM}25601, 'interval(5, 6, 1.0)', asoarr([5.0, 6.0]));
  Test({LINENUM}25602, 'interval(5, 6, 1.1)', asoarr([5.0]));
  Test({LINENUM}25603, 'interval(5, 6, 10)', asoarr([5.0]));
  Test({LINENUM}25604, 'interval(5, 6, 100)', asoarr([5.0]));
  Test({LINENUM}25605, 'interval(5, 6, 0)', failure, 'A positive real number was expected as argument 3, but "0" was given.');
  Test({LINENUM}25606, 'interval(5, 6, -1)', failure, 'A positive real number was expected as argument 3, but "-1" was given.');
  Test({LINENUM}25607, 'interval(5, 6, 0.001, 5)', failure, 'Too many arguments.');
  Test({LINENUM}25608, 'interval(5, 6, true)', failure, 'An object of type real number was expected as argument 3, but an object of type boolean was given.');
  Eps; Test({LINENUM}25609, 'interval(-5, 5, 1)', asoarr([-5.0, -4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0]));

  Test({LINENUM}25611, 'ClosedInterval(5, 4)', asoarr([]));
  Test({LINENUM}25612, 'ClosedInterval(5, 5)', asoarr([5.0]));
  Eps; Test({LINENUM}25613, 'ClosedInterval(5, 6, 0.1)', asoarr([5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6.0]));
  Test({LINENUM}25614, '#ClosedInterval(5, 6, 0.1)', 10 + 1);
  Test({LINENUM}25615, '#ClosedInterval(5, 6, 0.01)', 100 + 1);
  Test({LINENUM}25616, '#ClosedInterval(5, 6, 0.001)', 1000 + 1);
  Test({LINENUM}25617, '#ClosedInterval(5, 6, 0.0001)', 10000 + 1);
  Test({LINENUM}25618, '#ClosedInterval(5, 6, 0.00001)', 100000 + 1);
  Test({LINENUM}25619, '#ClosedInterval(5, 6, 0.000001)', 1000000 + 1);
  Test({LINENUM}25620, 'min(ClosedInterval(5, 6, 0.000001))', 5.0);
  Test({LINENUM}25621, 'max(ClosedInterval(5, 6, 0.000001))', 6.0);
  Eps; Test({LINENUM}25622, 'ClosedInterval(5, 6, 0.2)', asoarr([5.0, 5.2, 5.4, 5.6, 5.8, 6.0]));
  Eps; Test({LINENUM}25623, 'ClosedInterval(5, 6, 0.3)', asoarr([5.0, 5.3, 5.6, 5.9]));
  Eps; Test({LINENUM}25624, 'ClosedInterval(5, 6, 0.4)', asoarr([5.0, 5.4, 5.8]));
  Eps; Test({LINENUM}25625, 'ClosedInterval(5, 6, 0.5)', asoarr([5.0, 5.5, 6.0]));
  Eps; Test({LINENUM}25626, 'ClosedInterval(5, 6, 0.6)', asoarr([5.0, 5.6]));
  Eps; Test({LINENUM}25627, 'ClosedInterval(5, 6, 0.7)', asoarr([5.0, 5.7]));
  Eps; Test({LINENUM}25628, 'ClosedInterval(5, 6, 0.8)', asoarr([5.0, 5.8]));
  Eps; Test({LINENUM}25629, 'ClosedInterval(5, 6, 0.9)', asoarr([5.0, 5.9]));
  Test({LINENUM}25630, 'ClosedInterval(5, 6, 1.0)', asoarr([5.0, 6.0]));
  Test({LINENUM}25631, 'ClosedInterval(5, 6, 1.1)', asoarr([5.0]));
  Test({LINENUM}25632, 'ClosedInterval(5, 6, 10)', asoarr([5.0]));
  Test({LINENUM}25633, 'ClosedInterval(5, 6, 100)', asoarr([5.0]));
  Test({LINENUM}25634, 'ClosedInterval(5, 6, 0)', failure, 'A positive real number was expected as argument 3, but "0" was given.');
  Test({LINENUM}25635, 'ClosedInterval(5, 6, -1)', failure, 'A positive real number was expected as argument 3, but "-1" was given.');
  Test({LINENUM}25636, 'ClosedInterval(5, 6, 0.001, 5)', failure, 'Too many arguments.');
  Test({LINENUM}25637, 'ClosedInterval(5, 6, true)', failure, 'An object of type real number was expected as argument 3, but an object of type boolean was given.');
  Eps; Test({LINENUM}25638, 'ClosedInterval(-5, 5, 1)', asoarr([-5.0, -4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0]));

  Test({LINENUM}25640, 'OpenInterval(5, 4)', asoarr([]));
  Test({LINENUM}25641, 'OpenInterval(5, 5)', asoarr([]));
  Eps; Test({LINENUM}25642, 'OpenInterval(5, 6, 0.1)', asoarr([5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9]));
  Test({LINENUM}25643, '#OpenInterval(5, 6, 0.1)', 10 - 1);
  Test({LINENUM}25644, '#OpenInterval(5, 6, 0.01)', 100 - 1);
  Test({LINENUM}25645, '#OpenInterval(5, 6, 0.001)', 1000 - 1);
  Test({LINENUM}25646, '#OpenInterval(5, 6, 0.0001)', 10000 - 1);
  Test({LINENUM}25647, '#OpenInterval(5, 6, 0.00001)', 100000 - 1);
  Test({LINENUM}25648, '#OpenInterval(5, 6, 0.000001)', 1000000 - 1);
  Test({LINENUM}25649, 'min(OpenInterval(5, 6, 0.000001))', 5.000001);
  Test({LINENUM}25650, 'max(OpenInterval(5, 6, 0.000001))', 5.999999);
  Eps; Test({LINENUM}25651, 'OpenInterval(5, 6, 0.2)', asoarr([5.2, 5.4, 5.6, 5.8]));
  Eps; Test({LINENUM}25652, 'OpenInterval(5, 6, 0.3)', asoarr([5.3, 5.6]));
  Eps; Test({LINENUM}25653, 'OpenInterval(5, 6, 0.4)', asoarr([5.4]));
  Eps; Test({LINENUM}25654, 'OpenInterval(5, 6, 0.5)', asoarr([5.5]));
  Eps; Test({LINENUM}25655, 'OpenInterval(5, 6, 0.6)', asoarr([]));
  Eps; Test({LINENUM}25656, 'OpenInterval(5, 6, 0.7)', asoarr([]));
  Eps; Test({LINENUM}25657, 'OpenInterval(5, 6, 0.8)', asoarr([]));
  Eps; Test({LINENUM}25658, 'OpenInterval(5, 6, 0.9)', asoarr([]));
  Test({LINENUM}25659, 'OpenInterval(5, 6, 1.0)', asoarr([]));
  Test({LINENUM}25660, 'OpenInterval(5, 6, 1.1)', asoarr([]));
  Test({LINENUM}25661, 'OpenInterval(5, 6, 10)', asoarr([]));
  Test({LINENUM}25662, 'OpenInterval(5, 6, 100)', asoarr([]));
  Test({LINENUM}25663, 'OpenInterval(5, 6, 0)', failure, 'A positive real number was expected as argument 3, but "0" was given.');
  Test({LINENUM}25664, 'OpenInterval(5, 6, -1)', failure, 'A positive real number was expected as argument 3, but "-1" was given.');
  Test({LINENUM}25665, 'OpenInterval(5, 6, 0.001, 5)', failure, 'Too many arguments.');
  Test({LINENUM}25666, 'OpenInterval(5, 6, true)', failure, 'An object of type real number was expected as argument 3, but an object of type boolean was given.');
  Eps; Test({LINENUM}25667, 'OpenInterval(-5, 5, 1)', asoarr([-4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0]));


  // clamp

  Test({LINENUM}25672, 'clamp(27, 10, 100)', 27.0);
  Test({LINENUM}25673, 'clamp(58, 10, 100)', 58.0);
  Test({LINENUM}25674, 'clamp(100, 10, 100)', 100.0);
  Test({LINENUM}25675, 'clamp(10, 10, 100)', 10.0);
  Test({LINENUM}25676, 'clamp(9.9, 10, 100)', 10.0);
  Test({LINENUM}25677, 'clamp(9, 10, 100)', 10.0);
  Test({LINENUM}25678, 'clamp(3, 10, 100)', 10.0);
  Test({LINENUM}25679, 'clamp(0, 10, 100)', 10.0);
  Test({LINENUM}25680, 'clamp(-9, 10, 100)', 10.0);
  Test({LINENUM}25681, 'clamp(-91516123, 10, 100)', 10.0);
  Test({LINENUM}25682, 'clamp(-91516123189123156, 10, 100)', 10.0);
  Test({LINENUM}25683, 'clamp(-9.1E50, 10, 100)', 10.0);
  Test({LINENUM}25684, 'clamp(100.001, 10, 100)', 100.0);
  Test({LINENUM}25685, 'clamp(100.1, 10, 100)', 100.0);
  Test({LINENUM}25686, 'clamp(101, 10, 100)', 100.0);
  Test({LINENUM}25687, 'clamp(153, 10, 100)', 100.0);
  Test({LINENUM}25688, 'clamp(51315, 10, 100)', 100.0);
  Test({LINENUM}25689, 'clamp(7.5E60, 10, 100)', 100.0);
  Test({LINENUM}25690, 'clamp(7.5E60, 10, 90)', 90.0);
  Test({LINENUM}25691, 'clamp(7.5E60, 10, 84.61)', 84.61);
  Test({LINENUM}25692, 'clamp(7.5E60, 10, 18.61)', 18.61);
  Test({LINENUM}25693, 'clamp(7.5E60, 10, 10)', 10.0);
  Test({LINENUM}25694, 'clamp(7.5, 10, 100)', 10.0);
  Test({LINENUM}25695, 'clamp(7.5, 10.1, 100)', 10.1);
  Test({LINENUM}25696, 'clamp(7.5, 99.1, 100)', 99.1);
  Test({LINENUM}25697, 'clamp(7.5, -99.1, 100)', 7.5);
  Test({LINENUM}25698, 'clamp(-700.5, -99.1 ,100)', -99.1);
  Test({LINENUM}25699, 'clamp(7.5, 101, 100)', 101.0);
  Test({LINENUM}25700, 'clamp(100, 101, 100)', 101.0);
  Test({LINENUM}25701, 'clamp(100.5, 101, 100)', 101.0);
  Test({LINENUM}25702, 'clamp(101, 101, 100)', 101.0);
  Test({LINENUM}25703, 'clamp(200.5, 101, 100)', 101.0);
  Test({LINENUM}25704, 'clamp(200.5, 999.71, 100)', 999.71);
  Test({LINENUM}25705, 'clamp(200.5, -999.71, -10000)', -999.71);
  Test({LINENUM}25706, 'clamp(-200.5, -999.71, -10000)', -999.71);
  Test({LINENUM}25707, 'clamp(2000000.5, -999.71, -10000)', -999.71);
  Test({LINENUM}25708, 'clamp(-2000000.5, -999.71, -10000)', -999.71);
  Test({LINENUM}25709, 'clamp(27, 0, 1)', 1.0);
  Test({LINENUM}25710, 'clamp(e, 0, 1)', 1.0);
  Test({LINENUM}25711, 'clamp(1.0001, 0, 1)', 1.0);
  Test({LINENUM}25712, 'clamp(1.0, 0, 1)', 1.0);
  Test({LINENUM}25713, 'clamp(0.987, 0, 1)', 0.987);
  Test({LINENUM}25714, 'clamp(0.5, 0, 1)', 0.5);
  Test({LINENUM}25715, 'clamp(0.0001, 0, 1)', 0.0001);
  Test({LINENUM}25716, 'clamp(1E-25, 0, 1)', 1E-25);
  Test({LINENUM}25717, 'clamp(0, 0, 1)', 0.0);
  Test({LINENUM}25718, 'clamp(-1E-25, 0, 1)', 0.0);
  Test({LINENUM}25719, 'clamp(-0.5, 0, 1)', 0.0);
  Test({LINENUM}25720, 'clamp(-0.6, 0, 1)', 0.0);
  Test({LINENUM}25721, 'clamp(-44.5, 0, 1)', 0.0);
  Test({LINENUM}25722, 'clamp(-44.5E50, 0, 1)', 0.0);
  Test({LINENUM}25723, 'clamp(-44.5E50, 0, 0)', 0.0);
  Test({LINENUM}25724, 'clamp(-44.5E50, 0, -0.001)', 0.0);
  Test({LINENUM}25725, 'clamp(-44.5E50, 0, -1E50)', 0.0);
  Test({LINENUM}25726, 'clamp(+44.5E50, 0, -1E50)', 0.0);
  Test({LINENUM}25727, 'clamp(0, 0, -1E50)', 0.0);
  Test({LINENUM}25728, '∀(flatten(compute(clamp(x, a, b) = max(a, min(x, b)), a, −10, 10, b, −10, 10, x, −10, 10)), identity)', True);

  Test({LINENUM}25730, 'clamp(58, 10)', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}25731, 'clamp(58)', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}25732, 'clamp()', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}25733, 'clamp(58, 10, 100, 150)', failure, 'Too many arguments.');
  Test({LINENUM}25734, 'clamp(58, "cat", 100)', failure, 'An object of type real number was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}25735, 'clamp(58, 10, "dog")', failure, 'An object of type real number was expected as argument 3, but an object of type string was given.');
  Test({LINENUM}25736, 'clamp(true, 10, 100)', failure, 'An object of type real number was expected as argument 1, but an object of type boolean was given.');


  //
  // Random number functions
  //

  Test({LINENUM}25743, 'freqs ≔ ''(0, 0, 0, 0, 0, 0, 0);', null);

  for _i := 1 to 10000 do
    Test({LINENUM}25746, 'n ≔ RandomInt(7); (type(n) = "integer") ∧ (n ≥ 0) ∧ (n < 7) ∧ succeeded(inc(freqs[n+1]))', True);

  for _i := 1 to 7 do
    Test({LINENUM}25749, Format('(freqs[%d] ≥ 1150) ∧ (freqs[%d] ≤ 1700)', [_i, _i]), True);

  Test({LINENUM}25751, 'freqs ≔ ''(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);', null);

  for _i := 1 to 10000 do
    Test({LINENUM}25754, 'n ≔ RandomInt(20, 30); (type(n) = "integer") ∧ (n ≥ 20) ∧ (n < 30) ∧ succeeded(inc(freqs[n-19]))', True);

  for _i := 1 to 10 do
    Test({LINENUM}25757, Format('(freqs[%d] ≥ 750) ∧ (freqs[%d] ≤ 1250)', [_i, _i]), True);

  Test({LINENUM}25759, 'delete(freqs); delete(n)', success);

  for _i := 0 to 10 do
    Test({LINENUM}25762, 'RandomInt(1)', 0);

  Test({LINENUM}25764, 'RandomInt(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}25765, 'RandomInt(-1)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');

  for _i := 0 to 10 do
    Test({LINENUM}25768, 'RandomInt(4, 5)', 4);

  Test({LINENUM}25770, 'RandomInt(4, 4)', failure, 'The set of possible values is empty.');
  Test({LINENUM}25771, 'RandomInt(4, 3)', failure, 'The set of possible values is empty.');
  Test({LINENUM}25772, 'RandomInt(4, -10)', failure, 'The set of possible values is empty.');

  Test({LINENUM}25774, 's ≔ 0.', 0.0);
  for _i := 1 to 10000 do
    Test({LINENUM}25776, 'x ≔ RandomReal(); s ≔ s + x; (x ≥ 0) ∧ (x < 1)', True);
  Test({LINENUM}25777, 'avg ≔ s / 10000; (avg ≥ 0.4) ∧ (avg ≤ 0.6)', True);

  Test({LINENUM}25779, 's ≔ 0.', 0.0);
  for _i := 1 to 10000 do
    Test({LINENUM}25781, 'x ≔ RandomReal(5); s ≔ s + x; (x ≥ 0) ∧ (x < 5)', True);
  Test({LINENUM}25782, 'avg ≔ s / 10000; (avg ≥ 2.2) ∧ (avg ≤ 2.8)', True);

  Test({LINENUM}25784, 's ≔ 0.', 0.0);
  for _i := 1 to 10000 do
    Test({LINENUM}25786, 'x ≔ RandomReal(2, 5); s ≔ s + x; (x ≥ 2) ∧ (x < 5)', True);
  Test({LINENUM}25787, 'avg ≔ s / 10000; (avg ≥ 3.2) ∧ (avg ≤ 3.8)', True);

  Test({LINENUM}25789, 'delete(x); delete(s); delete(avg)', success);


  //
  // Bitwise logical operators
  //

  // Bitwise and (bitwise conjunction)

  Test({LINENUM}25798, '157 ∧ 197', 133);
  Test({LINENUM}25799, '219 ∧ 85', 81);
  Test({LINENUM}25800, '219 ∧ 131', 131);
  Test({LINENUM}25801, '91 ∧ 64', 64);
  Test({LINENUM}25802, '87 ∧ 32', 0);
  Test({LINENUM}25803, '22355 ∧ 42621', 1617);
  Test({LINENUM}25804, '55964 ∧ 20506', 20504);
  Test({LINENUM}25805, '54743 ∧ 5188', 5188);
  Test({LINENUM}25806, '45731 ∧ 38101 ∧ 20981', 4225);
  Test({LINENUM}25807, '219 ∧ 159 ∧ 187', 155);
  Test({LINENUM}25808, '219 ∧ 187 ∧ 106 ∧ 106 ∧ 127', 10);
  Test({LINENUM}25809, '219 ∧ 187 ∧ 106 ∧ 106 ∧ 127 ∧ 1', 0);
  Test({LINENUM}25810, '219 ∧ 187 ∧ 106 ∧ 106 ∧ 127 ∧ 2', 2);
  Test({LINENUM}25811, '175 ∧ 117 ∧ 92 ∧ 115 ∧ 89', 0);
  Test({LINENUM}25812, '519846545615848421 ∧ 251635489456321632', 231052631100129376);
  Test({LINENUM}25813, '5156113200231656 ∧ 120651616515132123', 4423942344);
  Test({LINENUM}25814, '4565165560505615611 ∧ 156151135151510131 ∧ 86515121545115612', 562955393450064);
  Test({LINENUM}25815, '4565165560505615611 ∧ 156151135151510131 ∧ 86515121545115612 ∧ 0', 0);

  Test({LINENUM}25817, '157 ∧ true', failure, 'An object of type integer was expected as argument 2, but an object of type boolean was given.');
  Test({LINENUM}25818, '219 ∧ 157 ∧ "cat"', failure, 'An object of type integer was expected as argument 3, but an object of type string was given.');

  // Bitwise or (bitwise disjunction)

  Test({LINENUM}25822, '157 ∨ 197', 221);
  Test({LINENUM}25823, '219 ∨ 85', 223);
  Test({LINENUM}25824, '219 ∨ 131', 219);
  Test({LINENUM}25825, '91 ∨ 64', 91);
  Test({LINENUM}25826, '87 ∨ 32', 119);
  Test({LINENUM}25827, '22355 ∨ 42621', 63359);
  Test({LINENUM}25828, '55964 ∨ 20506', 55966);
  Test({LINENUM}25829, '54743 ∨ 5188', 54743);
  Test({LINENUM}25830, '45731 ∨ 38101 ∨ 20981', 63479);
  Test({LINENUM}25831, '219 ∨ 159 ∨ 187', 255);
  Test({LINENUM}25832, '219 ∨ 187 ∨ 106 ∨ 106 ∨ 127', 255);
  Test({LINENUM}25833, '219 ∨ 187 ∨ 106 ∨ 106 ∨ 127 ∨ 1', 255);
  Test({LINENUM}25834, '219 ∨ 187 ∨ 106 ∨ 106 ∨ 127 ∨ 2', 255);
  Test({LINENUM}25835, '175 ∨ 117 ∨ 92 ∨ 115 ∨ 89', 255);
  Test({LINENUM}25836, '519846545615848421 ∨ 251635489456321632', 540429403972040677);
  Test({LINENUM}25837, '5156113200231656 ∨ 120651616515132123', 125807725291421435);
  Test({LINENUM}25838, '4565165560505615611 ∨ 156151135151510131 ∨ 86515121545115612', 4574531235602233343);
  Test({LINENUM}25839, '4565165560505615611 ∨ 156151135151510131 ∨ 86515121545115612 ∨ 0', 4574531235602233343);

  Test({LINENUM}25841, '157 ∨ true', failure, 'An object of type integer was expected as argument 2, but an object of type boolean was given.');
  Test({LINENUM}25842, '219 ∨ 157 ∨ "cat"', failure, 'An object of type integer was expected as argument 3, but an object of type string was given.');

  // Bitwise xor

  Test({LINENUM}25846, '47547 ⊻ 23421', 58054);
  Test({LINENUM}25847, '56053 ⊻ 29622', 43331);
  Test({LINENUM}25848, '57093 ⊻ 30173', 43736);
  Test({LINENUM}25849, '222 ⊻ 182', 104);
  Test({LINENUM}25850, '221 ⊻ 0', 221);
  Test({LINENUM}25851, '846515616156056061 ⊻ 185151561564412123', 661649996338864422);
  Test({LINENUM}25852, '510531025361320112 ⊻ 450645161561', 510530924772937449);

  Test({LINENUM}25854, '157 ⊻ true', failure, 'An object of type integer was expected as argument 2, but an object of type boolean was given.');
  Test({LINENUM}25855, '157 ⊻ "nargle"', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');

  // Bitwise not (bitwise negation)

  Test({LINENUM}25859, '¬0', -1);
  Test({LINENUM}25860, '¬-1', 0);
  Test({LINENUM}25861, '¬871065116153', -871065116154);
  Test({LINENUM}25862, '¬61651216505160651', -61651216505160652);
  Test({LINENUM}25863, '¬156156123110567121', -156156123110567122);

  // Misc

  Test({LINENUM}25867, '56123 ∧ ¬2048', 54075);
  Test({LINENUM}25868, '123 ∧ 255', 123);
  Test({LINENUM}25869, '123 ∧ 0', 0);
  Test({LINENUM}25870, '123 ∨ 255', 255);
  Test({LINENUM}25871, '123 ∨ 0', 123);





  //
  //
  //  CHAPTER 5
  //  Vectors and matrices.
  //
  //

  Chapter('Vectors and matrices');

  // Sizes

  Test({LINENUM}25888, 'a ≔ ❨21❩; u ≔ ❨1, 0❩; v ≔ ❨3, 0, −1❩; w ≔ ❨3 + 5⋅i, −7, 2⋅i, 1 − i❩; A ≔ ❨❨1, 2❩, ❨3, 4❩❩; B ≔ ❨❨5, 3, 1❩, ❨1, 6, 8❩❩; C ≔ ❨❨2 + i, 7❩, ❨i, 1 − 2⋅i❩❩; D ≔ ❨❨1, 6, 8, 2, 5❩❩; E ≔ ❨❨4❩, ❨6❩, ❨i❩❩; F ≔ ❨❨6❩❩;', null);

  Test({LINENUM}25890, 'dim(a)', 1);
  Test({LINENUM}25891, 'dim(u)', 2);
  Test({LINENUM}25892, 'dim(v)', 3);
  Test({LINENUM}25893, 'dim(w)', 4);

  Test({LINENUM}25895, 'dim(A)', failure, 'An object of type vector was expected as argument 1, but an object of type real matrix was given.');
  Test({LINENUM}25896, 'dim(5)', failure, 'An object of type vector was expected as argument 1, but an object of type integer was given.');

  for _i := 1 to 100 do
    Test({LINENUM}25899, Format('dim(ZeroVector(%d))', [_i]), _i);

  Test({LINENUM}25901, 'size(π)', ASOSize(1, 1)); Test({LINENUM}0, 'height(π)', 1); Test({LINENUM}0, 'width(π)', 1);
  Test({LINENUM}25902, 'size(a)', ASOSize(1, 1)); Test({LINENUM}0, 'height(a)', 1); Test({LINENUM}0, 'width(a)', 1);
  Test({LINENUM}25903, 'size(u)', ASOSize(2, 1)); Test({LINENUM}0, 'height(u)', 2); Test({LINENUM}0, 'width(u)', 1);
  Test({LINENUM}25904, 'size(v)', ASOSize(3, 1)); Test({LINENUM}0, 'height(v)', 3); Test({LINENUM}0, 'width(v)', 1);
  Test({LINENUM}25905, 'size(w)', ASOSize(4, 1)); Test({LINENUM}0, 'height(w)', 4); Test({LINENUM}0, 'width(w)', 1);
  Test({LINENUM}25906, 'size(A)', ASOSize(2, 2)); Test({LINENUM}0, 'height(A)', 2); Test({LINENUM}0, 'width(A)', 2);
  Test({LINENUM}25907, 'size(B)', ASOSize(2, 3)); Test({LINENUM}0, 'height(B)', 2); Test({LINENUM}0, 'width(B)', 3);
  Test({LINENUM}25908, 'size(C)', ASOSize(2, 2)); Test({LINENUM}0, 'height(C)', 2); Test({LINENUM}0, 'width(C)', 2);
  Test({LINENUM}25909, 'size(D)', ASOSize(1, 5)); Test({LINENUM}0, 'height(D)', 1); Test({LINENUM}0, 'width(D)', 5);
  Test({LINENUM}25910, 'size(E)', ASOSize(3, 1)); Test({LINENUM}0, 'height(E)', 3); Test({LINENUM}0, 'width(E)', 1);
  Test({LINENUM}25911, 'size(F)', ASOSize(1, 1)); Test({LINENUM}0, 'height(F)', 1); Test({LINENUM}0, 'width(F)', 1);

  for _i := 1 to 10 do
    for _j := 1 to 10 do
      Test({LINENUM}25915, Format('size(ZeroMatrix(%d, %d))', [_i, _j]), ASOSize(_i, _j));

  // Real and imaginary parts

  Test({LINENUM}25919, 'Re(a)', [21]);
  Test({LINENUM}25920, 'Im(a)', [0]);

  Test({LINENUM}25922, 'Re(u)', [1, 0]);
  Test({LINENUM}25923, 'Im(u)', [0, 0]);

  Test({LINENUM}25925, 'Re(v)', [3, 0, -1]);
  Test({LINENUM}25926, 'Im(v)', [0, 0, 0]);

  Test({LINENUM}25928, 'Re(w)', [3, -7, 0, 1]);
  Test({LINENUM}25929, 'Im(w)', [5, 0, 2, -1]);

  Test({LINENUM}25931, 'Re(A)', 2, [1, 2, 3, 4]);
  Test({LINENUM}25932, 'Im(A)', 2, [0, 0, 0, 0]);

  Test({LINENUM}25934, 'Re(B)', 3, [5, 3, 1, 1, 6, 8]);
  Test({LINENUM}25935, 'Im(B)', 3, [0, 0, 0, 0, 0, 0]);

  Test({LINENUM}25937, 'Re(C)', 2, [2, 7, 0, 1]);
  Test({LINENUM}25938, 'Im(C)', 2, [1, 0, 1, -2]);

  Test({LINENUM}25940, 'Re(D)', 5, [1, 6, 8, 2, 5]);
  Test({LINENUM}25941, 'Im(D)', 5, [0, 0, 0, 0, 0]);

  Test({LINENUM}25943, 'Re(E)', 1, [4, 6, 0]);
  Test({LINENUM}25944, 'Im(E)', 1, [0, 0, 1]);

  Test({LINENUM}25946, 'Re(F)', 1, [6]);
  Test({LINENUM}25947, 'Im(F)', 1, [0]);

  // Vector constructors

  Test({LINENUM}25951, '❨1❩', [1]);
  Test({LINENUM}25952, '❨1, 0❩', [1, 0]);
  Test({LINENUM}25953, '❨1, 0, 0❩', [1, 0, 0]);

  Test({LINENUM}25955, '❨i❩', [ImaginaryUnit]);
  Test({LINENUM}25956, '❨1, i❩', [1, ImaginaryUnit]);
  Test({LINENUM}25957, '❨1, 0, -i❩', [1, 0, -ImaginaryUnit]);

  Test({LINENUM}25959, '❨❩', ESyntaxException, 'Empty bracket at column 1.');

  Test({LINENUM}25961, 'ZeroVector(1)', [0]);
  Test({LINENUM}25962, 'ZeroVector(2)', [0, 0]);
  Test({LINENUM}25963, 'ZeroVector(3)', [0, 0, 0]);
  Test({LINENUM}25964, 'ZeroVector(4)', [0, 0, 0, 0]);
  Test({LINENUM}25965, 'ZeroVector(5)', [0, 0, 0, 0, 0]);
  Test({LINENUM}25966, 'ZeroVector(6)', [0, 0, 0, 0, 0, 0]);

  Test({LINENUM}25968, 'ZeroVector(100)', ASO(ZeroVector(100)));
  Test({LINENUM}25969, 'v ≔ ZeroVector(1000)', ASO(ZeroVector(1000)));

  Test({LINENUM}25971, 'type(v)', 'real vector');
  Test({LINENUM}25972, 'dim(v)', 1000);
  Test({LINENUM}25973, 'size(v)', ASOSize(1000, 1));
  Test({LINENUM}25974, 'sum(v)', 0.0);
  Test({LINENUM}25975, 'product(v)', 0.0);
  Test({LINENUM}25976, 'average(v)', 0.0);
  Test({LINENUM}25977, 'min(v)', 0.0);
  Test({LINENUM}25978, 'max(v)', 0.0);
  Test({LINENUM}25979, 'delete(v)', success);

  Test({LINENUM}25981, 'ZeroVector(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}25982, 'ZeroVector(-1)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}25983, 'ZeroVector(5, 6)', failure, 'Too many arguments.');

  Test({LINENUM}25985, 'ComplexZeroVector(1)', [TASC(0)]);
  Test({LINENUM}25986, 'ComplexZeroVector(2)', [TASC(0), 0]);
  Test({LINENUM}25987, 'ComplexZeroVector(3)', [TASC(0), 0, 0]);
  Test({LINENUM}25988, 'ComplexZeroVector(4)', [TASC(0), 0, 0, 0]);
  Test({LINENUM}25989, 'ComplexZeroVector(5)', [TASC(0), 0, 0, 0, 0]);
  Test({LINENUM}25990, 'ComplexZeroVector(6)', [TASC(0), 0, 0, 0, 0, 0]);

  Test({LINENUM}25992, 'ComplexZeroVector(100)', ASO(ComplexZeroVector(100)));
  Test({LINENUM}25993, 'v ≔ ComplexZeroVector(1000)', ASO(ComplexZeroVector(1000)));

  Test({LINENUM}25995, 'type(v)', 'complex vector');
  Test({LINENUM}25996, 'dim(v)', 1000);
  Test({LINENUM}25997, 'size(v)', ASOSize(1000, 1));
  Test({LINENUM}25998, 'sum(v)', TASC(0.0));
  Test({LINENUM}25999, 'product(v)', TASC(0.0));
  Test({LINENUM}26000, 'average(v)', TASC(0.0));
  Test({LINENUM}26001, 'min(v)', 0.0);
  Test({LINENUM}26002, 'max(v)', 0.0);
  Test({LINENUM}26003, 'delete(v)', success);

  Test({LINENUM}26005, 'ComplexZeroVector(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26006, 'ComplexZeroVector(-1)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}26007, 'ComplexZeroVector(5, 6)', failure, 'Too many arguments.');

  Test({LINENUM}26009, 'BasisVector(1, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}26010, 'BasisVector(1, 1)', [1]);
  Test({LINENUM}26011, 'BasisVector(1, 2)', failure, 'Invalid unit vector index.');

  Test({LINENUM}26013, 'BasisVector(2, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}26014, 'BasisVector(2, 1)', [1, 0]);
  Test({LINENUM}26015, 'BasisVector(2, 2)', [0, 1]);
  Test({LINENUM}26016, 'BasisVector(2, 3)', failure, 'Invalid unit vector index.');

  Test({LINENUM}26018, 'BasisVector(3, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}26019, 'BasisVector(3, 1)', [1, 0, 0]);
  Test({LINENUM}26020, 'BasisVector(3, 2)', [0, 1, 0]);
  Test({LINENUM}26021, 'BasisVector(3, 3)', [0, 0, 1]);
  Test({LINENUM}26022, 'BasisVector(3, 4)', failure, 'Invalid unit vector index.');

  Test({LINENUM}26024, 'BasisVector(4, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}26025, 'BasisVector(4, 1)', [1, 0, 0, 0]);
  Test({LINENUM}26026, 'BasisVector(4, 2)', [0, 1, 0, 0]);
  Test({LINENUM}26027, 'BasisVector(4, 3)', [0, 0, 1, 0]);
  Test({LINENUM}26028, 'BasisVector(4, 4)', [0, 0, 0, 1]);
  Test({LINENUM}26029, 'BasisVector(4, 5)', failure, 'Invalid unit vector index.');

  Test({LINENUM}26031, 'BasisVector(0, 0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26032, 'BasisVector(-1, 0)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}26033, 'BasisVector(5, 2, 3)', failure, 'Too many arguments.');
  Test({LINENUM}26034, 'BasisVector(5)', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}26036, 'v ≔ BasisVector(1000, 359)', ASO(UnitVector(1000, Pred(359))));
  Test({LINENUM}26037, 'type(v)', 'real vector');
  Test({LINENUM}26038, 'dim(v)', 1000);
  Test({LINENUM}26039, 'size(v)', ASOSize(1000, 1));
  Test({LINENUM}26040, 'sum(v)', 1.0);
  Test({LINENUM}26041, 'product(v)', 0.0);
  Test({LINENUM}26042, 'average(v)', 1/1000);
  Test({LINENUM}26043, 'min(v)', 0.0);
  Test({LINENUM}26044, 'max(v)', 1.0);
  Test({LINENUM}26045, 'delete(v)', success);

  for _i := 1 to 100 do
  begin
    Test({LINENUM}26049, Format('v ≔ RandomVector(%d);', [_i]), null);
    Test({LINENUM}26050, 'dim(v)', _i);
    Test({LINENUM}26051, 'min(v) ≥ 0', True);
    Test({LINENUM}26052, 'max(v) < 1', True);
  end;

  Test({LINENUM}26055, 'avg ≔ mean(RandomVector(10000)); (avg > 0.48) ∧ (avg < 0.52)', True);
  Test({LINENUM}26056, 'delete(v); delete(avg)', success);

  Test({LINENUM}26058, 'RandomVector(5, 3)', failure, 'Too many arguments.');
  Test({LINENUM}26059, 'RandomVector()', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}26060, 'RandomVector(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');

  for _i := 1 to 100 do
  begin
    Test({LINENUM}26064, Format('v ≔ RandomSignedVector(%d);', [_i]), null);
    Test({LINENUM}26065, 'dim(v)', _i);
    Test({LINENUM}26066, 'min(v) ≥ -1', True);
    Test({LINENUM}26067, 'max(v) < 1', True);
  end;

  Test({LINENUM}26070, 'avg ≔ mean(RandomSignedVector(10000)); abs(avg) < 0.02', True);
  Test({LINENUM}26071, 'delete(v); delete(avg)', success);

  Test({LINENUM}26073, 'RandomSignedVector(5, 3)', failure, 'Too many arguments.');
  Test({LINENUM}26074, 'RandomSignedVector()', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}26075, 'RandomSignedVector(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');

  for _i := 1 to 100 do
  begin
    Test({LINENUM}26079, Format('v ≔ RandomIntVector(%d, 17, 21);', [_i]), null);
    Test({LINENUM}26080, 'dim(v)', _i);
    Test({LINENUM}26081, '∀(v, x↦IsInteger(x))', True);
    Test({LINENUM}26082, 'min(v) ≥ 17', True);
    Test({LINENUM}26083, 'max(v) ≤ 20', True);
  end;

  Test({LINENUM}26086, 'avg ≔ mean(RandomIntVector(10000, 17, 21)); (avg > 18.4) ∧ (avg < 18.6)', True);
  Test({LINENUM}26087, 'delete(v); delete(avg)', success);

  Test({LINENUM}26089, 'RandomIntVector()', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}26090, 'RandomIntVector(10)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}26091, 'RandomIntVector(10, 5)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}26092, 'RandomIntVector(10, 5, 8, 9)', failure, 'Too many arguments.');
  Test({LINENUM}26093, 'RandomIntVector(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');

  for _i := 1 to 100 do
  begin
    Test({LINENUM}26097, Format('v ≔ RandomIntVector(%d, 17, 18);', [_i]), null);
    Test({LINENUM}26098, 'dim(v)', _i);
    Test({LINENUM}26099, '∀(v, x↦x=17)', True);
    Test({LINENUM}26100, 'min(v) = 17', True);
    Test({LINENUM}26101, 'max(v) = 17', True);
  end;

  Test({LINENUM}26104, 'delete(v)', success);

  Test({LINENUM}26106, 'RandomIntVector(100, 4, 4)', failure, 'The set of possible values is empty.');
  Test({LINENUM}26107, 'RandomIntVector(100, 4, 3)', failure, 'The set of possible values is empty.');
  Test({LINENUM}26108, 'RandomIntVector(100, 4, -4)', failure, 'The set of possible values is empty.');

  Test({LINENUM}26110, 'SequenceVector()', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}26112, 'SequenceVector(5)', [1, 2, 3, 4, 5]);
  Test({LINENUM}26113, 'SequenceVector(10)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  Test({LINENUM}26114, 'SequenceVector(1)', [1]);
  Test({LINENUM}26115, 'SequenceVector(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');

  Test({LINENUM}26117, 'SequenceVector(1, 5)', [1, 2, 3, 4, 5]);
  Test({LINENUM}26118, 'SequenceVector(0, 5)', [0, 1, 2, 3, 4, 5]);
  Test({LINENUM}26119, 'SequenceVector(-3, 5)', [-3, -2, -1, 0, 1, 2, 3, 4, 5]);
  Test({LINENUM}26120, 'SequenceVector(-10, -5)', [-10, -9, -8, -7, -6, -5]);
  Test({LINENUM}26121, 'SequenceVector(7, 10)', [7, 8, 9, 10]);
  Test({LINENUM}26122, 'SequenceVector(21, 21)', [21]);

  Test({LINENUM}26124, 'SequenceVector(21, 20)', [21, 20]);

  Test({LINENUM}26126, 'SequenceVector(0, 100, 10)', [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]);
  Test({LINENUM}26127, 'SequenceVector(0, 100, 20)', [0, 20, 40, 60, 80, 100]);
  Test({LINENUM}26128, 'SequenceVector(0, 100, 25)', [0, 25, 50, 75, 100]);
  Test({LINENUM}26129, 'SequenceVector(0, 100, 50)', [0, 50, 100]);
  Test({LINENUM}26130, 'SequenceVector(0, 100, 100)', [0, 100]);
  Test({LINENUM}26131, 'SequenceVector(0, 100, 200)', [0]);

  Test({LINENUM}26133, 'SequenceVector(-10, 10, 5)', [-10, -5, 0, 5, 10]);

  Test({LINENUM}26135, 'SequenceVector(0, 100, 10, 5)', failure, 'Too many arguments.');
  Test({LINENUM}26136, 'SequenceVector(0.5, 100, 25)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}26137, 'SequenceVector(0, 100.5, 25)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}26138, 'SequenceVector(0, 100, 25.6)', failure, 'An object of type integer was expected as argument 3, but an object of type real number was given.');

  // Matrix constructors

  Test({LINENUM}26142, '❨❨1, 2❩, ❨3, 4❩❩', 2, [1, 2, 3, 4]);
  Test({LINENUM}26143, '❨❨1, 2, 3❩, ❨10, 20, 30❩❩', 3, [1, 2, 3, 10, 20, 30]);
  Test({LINENUM}26144, '❨❨5, 4, 3, 2, 1❩❩', 5, [5, 4, 3, 2, 1]);
  Test({LINENUM}26145, '❨❨1❩, ❨2❩, ❨10❩❩', 1, [1, 2, 10]);
  Test({LINENUM}26146, '❨❨1, 3❩, ❨5, 7❩, ❨9, 0❩❩', 2, [1, 3, 5, 7, 9, 0]);

  Test({LINENUM}26148, '❨❨1, 3❩, ❨5, 7❩, ❨9, 0, 6❩❩', failure, 'Attempt to create a non-rectangular matrix.');

  Test({LINENUM}26150, '❨❨1, 2❩, ❨i, 4❩❩', 2, [1, 2, ImaginaryUnit, 4]);
  Test({LINENUM}26151, '❨❨i, 2, 3❩, ❨10, 20, 30❩❩', 3, [ImaginaryUnit, 2, 3, 10, 20, 30]);
  Test({LINENUM}26152, '❨❨5, 4, 3, 2, 1 + i❩❩', 5, [5, 4, 3, 2, 1 + ImaginaryUnit]);
  Test({LINENUM}26153, '❨❨1❩, ❨2❩, ❨i❩❩', 1, [1, 2, ImaginaryUnit]);
  Test({LINENUM}26154, '❨❨1, 3❩, ❨5, i/7❩, ❨9, 0❩❩', 2, [1, 3, 5, ImaginaryUnit/7, 9, 0]);

  Test({LINENUM}26156, '❨❨❩❩', ESyntaxException, 'Empty bracket at column 2.');

  Test({LINENUM}26158, '❨❨1, 3❩, ❨5, 7❩, ❨9, i, 6❩❩', failure, 'Attempt to create a non-rectangular matrix.');

  Test({LINENUM}26160, 'matrix(2, 1, 2, 3, -4)', 2, [1, 2, 3, -4]);
  Test({LINENUM}26161, 'matrix(3, 1, 2, 3, 10, 20, 30)', 3, [1, 2, 3, 10, 20, 30]);
  Test({LINENUM}26162, 'matrix(3, 10, 20, 30, 40, 50, 60, 70, 80, 90)', 3, [10, 20, 30, 40, 50, 60, 70, 80, 90]);
  Test({LINENUM}26163, 'matrix(2, 10, 20, 100, 200, 1000, 2000)', 2, [10, 20, 100, 200, 1000, 2000]);
  Test({LINENUM}26164, 'matrix(1, -1, 1, 0)', 1, [-1, 1, 0]);

  Test({LINENUM}26166, 'A ≔ matrix(1, 1, 2, 3, 4, 5, 6)', 1, [1, 2, 3, 4, 5, 6]);
  Test({LINENUM}26167, 'size(A)', ASOSize(6, 1));
  Test({LINENUM}26168, 'A ≔ matrix(2, 1, 2, 3, 4, 5, 6)', 2, [1, 2, 3, 4, 5, 6]);
  Test({LINENUM}26169, 'size(A)', ASOSize(3, 2));
  Test({LINENUM}26170, 'A ≔ matrix(3, 1, 2, 3, 4, 5, 6)', 3, [1, 2, 3, 4, 5, 6]);
  Test({LINENUM}26171, 'size(A)', ASOSize(2, 3));
  Test({LINENUM}26172, 'A ≔ matrix(6, 1, 2, 3, 4, 5, 6)', 6, [1, 2, 3, 4, 5, 6]);
  Test({LINENUM}26173, 'size(A)', ASOSize(1, 6));
  Test({LINENUM}26174, 'type(A)', 'real matrix');
  Test({LINENUM}26175, 'delete(A)', success);

  Test({LINENUM}26177, 'matrix(4, 1, 2, 3, 4, 5, 6)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26178, 'matrix(5, 1, 2, 3, 4, 5, 6)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26179, 'matrix(7, 1, 2, 3, 4, 5, 6)', failure, 'Attempt to create a non-rectangular matrix.');

  Test({LINENUM}26181, 'matrix(0, 1, 2, 3, 4, 5, 6)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26182, 'matrix(-1, 1, 2, 3, 4, 5, 6)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');

  Test({LINENUM}26184, 'matrix(1, 21)', 1, [21]);

  Test({LINENUM}26186, 'matrix(2, i, 2, 3, -4)', 2, [ImaginaryUnit, 2, 3, -4]);
  Test({LINENUM}26187, 'matrix(3, i, 2, 3, 10, 20, 30)', 3, [ImaginaryUnit, 2, 3, 10, 20, 30]);
  Test({LINENUM}26188, 'matrix(3, i, 20, 30, 40, 50, 60, 70, 80, 90)', 3, [ImaginaryUnit, 20, 30, 40, 50, 60, 70, 80, 90]);
  Test({LINENUM}26189, 'matrix(2, i, 20, 100, 200, 1000, 2000)', 2, [ImaginaryUnit, 20, 100, 200, 1000, 2000]);
  Test({LINENUM}26190, 'matrix(1, -1, 1, i/2)', 1, [-1, 1, ImaginaryUnit/2]);

  Test({LINENUM}26192, 'A ≔ matrix(1, i, 2, 3, 4, 5, 6)', 1, [ImaginaryUnit, 2, 3, 4, 5, 6]);
  Test({LINENUM}26193, 'size(A)', ASOSize(6, 1));
  Test({LINENUM}26194, 'A ≔ matrix(2, i, 2, 3, 4, 5, 6)', 2, [ImaginaryUnit, 2, 3, 4, 5, 6]);
  Test({LINENUM}26195, 'size(A)', ASOSize(3, 2));
  Test({LINENUM}26196, 'A ≔ matrix(3, i, 2, 3, 4, 5, 6)', 3, [ImaginaryUnit, 2, 3, 4, 5, 6]);
  Test({LINENUM}26197, 'size(A)', ASOSize(2, 3));
  Test({LINENUM}26198, 'A ≔ matrix(6, i, 2, 3, 4, 5, 6)', 6, [ImaginaryUnit, 2, 3, 4, 5, 6]);
  Test({LINENUM}26199, 'size(A)', ASOSize(1, 6));
  Test({LINENUM}26200, 'type(A)', 'complex matrix');
  Test({LINENUM}26201, 'delete(A)', success);

  Test({LINENUM}26203, 'matrix(4, i, 2, 3, 4, 5, 6)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26204, 'matrix(5, i, 2, 3, 4, 5, 6)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26205, 'matrix(7, i, 2, 3, 4, 5, 6)', failure, 'Attempt to create a non-rectangular matrix.');

  Test({LINENUM}26207, 'matrix(0, i, 2, 3, 4, 5, 6)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26208, 'matrix(-1, i, 2, 3, 4, 5, 6)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');

  Test({LINENUM}26210, 'matrix(1, i/21)', 1, [ImaginaryUnit/21]);

  Test({LINENUM}26212, 'matrix(2, ''(1, 2, 3, 4))', 2, [1, 2, 3, 4]);
  Test({LINENUM}26213, 'matrix(2, ToList(❨1, 2, 3, 4, 5, 6❩))', 2, [1, 2, 3, 4, 5, 6]);
  Test({LINENUM}26214, 'matrix(2, ToList(❨1, 2, 3, 4, 5, 6, 7❩))', failure, 'Attempt to create a non-rectangular matrix.');

  Test({LINENUM}26216, 'ZeroMatrix(1, 1)', 1, [0]);
  Test({LINENUM}26217, 'ZeroMatrix(2, 2)', 2, [0, 0, 0, 0]);
  Test({LINENUM}26218, 'ZeroMatrix(2, 3)', 3, [0, 0, 0, 0, 0, 0]);
  Test({LINENUM}26219, 'ZeroMatrix(4, 1)', 1, [0, 0, 0, 0]);
  Test({LINENUM}26220, 'ZeroMatrix(1, 3)', 3, [0, 0, 0]);

  Test({LINENUM}26222, 'A ≔ ZeroMatrix(3, 2)', 2, [0, 0, 0, 0, 0, 0]);
  Test({LINENUM}26223, 'type(A)', 'real matrix');
  Test({LINENUM}26224, 'size(A)', ASOSize(3, 2));
  Test({LINENUM}26225, 'sum(A)', 0.0);
  Test({LINENUM}26226, 'product(A)', 0.0);
  Test({LINENUM}26227, 'average(A)', 0.0);
  Test({LINENUM}26228, 'min(A)', 0.0);
  Test({LINENUM}26229, 'max(A)', 0.0);
  Test({LINENUM}26230, 'delete(A)', success);

  Test({LINENUM}26232, 'ZeroMatrix(1)', 1, [0]);
  Test({LINENUM}26233, 'ZeroMatrix(2)', 2, [0, 0, 0, 0]);
  Test({LINENUM}26234, 'ZeroMatrix(3)', 3, [0, 0, 0, 0, 0, 0, 0, 0, 0]);
  Test({LINENUM}26235, 'ZeroMatrix(4)', 4, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);

  Test({LINENUM}26237, 'ZeroMatrix()', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}26238, 'ZeroMatrix(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26239, 'ZeroMatrix(-1)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}26240, 'ZeroMatrix(0, 4)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26241, 'ZeroMatrix(4, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}26242, 'ZeroMatrix(4, 4, 6)', failure, 'Too many arguments.');

  Test({LINENUM}26244, 'ComplexZeroMatrix(1, 1)', 1, [TASC(0)]);
  Test({LINENUM}26245, 'ComplexZeroMatrix(2, 2)', 2, [TASC(0), 0, 0, 0]);
  Test({LINENUM}26246, 'ComplexZeroMatrix(2, 3)', 3, [TASC(0), 0, 0, 0, 0, 0]);
  Test({LINENUM}26247, 'ComplexZeroMatrix(4, 1)', 1, [TASC(0), 0, 0, 0]);
  Test({LINENUM}26248, 'ComplexZeroMatrix(1, 3)', 3, [TASC(0), 0, 0]);

  Test({LINENUM}26250, 'A ≔ ComplexZeroMatrix(3, 2)', 2, [TASC(0), 0, 0, 0, 0, 0]);
  Test({LINENUM}26251, 'type(A)', 'complex matrix');
  Test({LINENUM}26252, 'size(A)', ASOSize(3, 2));
  Test({LINENUM}26253, 'sum(A)', TASC(0));
  Test({LINENUM}26254, 'product(A)', TASC(0));
  Test({LINENUM}26255, 'average(A)', TASC(0));
  Test({LINENUM}26256, 'min(A)', 0.0);
  Test({LINENUM}26257, 'max(A)', 0.0);
  Test({LINENUM}26258, 'delete(A)', success);

  Test({LINENUM}26260, 'ComplexZeroMatrix(1)', 1, [TASC(0)]);
  Test({LINENUM}26261, 'ComplexZeroMatrix(2)', 2, [TASC(0), 0, 0, 0]);
  Test({LINENUM}26262, 'ComplexZeroMatrix(3)', 3, [TASC(0), 0, 0, 0, 0, 0, 0, 0, 0]);
  Test({LINENUM}26263, 'ComplexZeroMatrix(4)', 4, [TASC(0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);

  Test({LINENUM}26265, 'ComplexZeroMatrix()', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}26266, 'ComplexZeroMatrix(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26267, 'ComplexZeroMatrix(-1)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}26268, 'ComplexZeroMatrix(0, 4)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26269, 'ComplexZeroMatrix(4, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}26270, 'ComplexZeroMatrix(4, 4, 6)', failure, 'Too many arguments.');

  Test({LINENUM}26272, 'IdentityMatrix(1)', 1, [1]);
  Test({LINENUM}26273, 'IdentityMatrix(2)', 2, [1, 0, 0, 1]);
  Test({LINENUM}26274, 'IdentityMatrix(3)', 3, [1, 0, 0, 0, 1, 0, 0, 0, 1]);
  Test({LINENUM}26275, 'IdentityMatrix(4)', 4, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);

  Test({LINENUM}26277, 'A ≔ IdentityMatrix(100)', ASO(IdentityMatrix(100)));
  Test({LINENUM}26278, 'type(A)', 'real matrix');
  Test({LINENUM}26279, 'size(A)', ASOSize(100, 100));
  Test({LINENUM}26280, 'sum(A)', 100.0);
  Test({LINENUM}26281, 'product(A)', 0.0);
  Test({LINENUM}26282, 'average(A)', 1/100);
  Test({LINENUM}26283, 'min(A)', 0.0);
  Test({LINENUM}26284, 'max(A)', 1.0);
  Test({LINENUM}26285, 'delete(A)', success);

  Test({LINENUM}26287, 'IdentityMatrix(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26288, 'IdentityMatrix()', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}26289, 'IdentityMatrix(3, 4)', failure, 'Too many arguments.');

  for _i := 1 to 100 do
  begin
    Test({LINENUM}26293, Format('A ≔ RandomMatrix(%d);', [_i]), null);
    Test({LINENUM}26294, 'size(A)', ASOSize(_i, _i));
    Test({LINENUM}26295, 'min(A) ≥ 0', True);
    Test({LINENUM}26296, 'max(A) < 1', True);
  end;

  Test({LINENUM}26299, 'A ≔ RandomMatrix(100); avg ≔ mean(A); (avg > 0.49) ∧ (avg < 0.51)', True);
  Test({LINENUM}26300, 'delete(A)', success);

  for _i := 1 to 10 do
    for _j := 1 to 10 do
    begin
      Test({LINENUM}26305, Format('A ≔ RandomMatrix(%d, %d);', [_i, _j]), null);
      Test({LINENUM}26306, 'size(A)', ASOSize(_i, _j));
      Test({LINENUM}26307, 'min(A) ≥ 0', True);
      Test({LINENUM}26308, 'max(A) < 1', True);
    end;

  Test({LINENUM}26311, 'A ≔ RandomMatrix(70, 140); avg ≔ mean(A); (avg > 0.49) ∧ (avg < 0.51)', True);
  Test({LINENUM}26312, 'delete(A)', success);

  Test({LINENUM}26314, 'RandomMatrix()', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}26315, 'RandomMatrix(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26316, 'RandomMatrix(-1)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}26317, 'RandomMatrix(0, 5)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26318, 'RandomMatrix(5, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}26319, 'RandomMatrix(5, 6, 7)', failure, 'Too many arguments.');

  for _i := 1 to 100 do
  begin
    Test({LINENUM}26323, Format('A ≔ RandomIntMatrix(%d, 7, 13);', [_i]), null);
    Test({LINENUM}26324, 'size(A)', ASOSize(_i, _i));
    Test({LINENUM}26325, '∀(A, x↦IsInteger(x))', True);
    Test({LINENUM}26326, 'min(A) ≥ 7', True);
    Test({LINENUM}26327, 'max(A) ≤ 12', True);
  end;

  Test({LINENUM}26330, 'A ≔ RandomIntMatrix(100, 7, 13); avg ≔ mean(A); (avg > 9.4) ∧ (avg < 9.6)', True);
  Test({LINENUM}26331, 'delete(A)', success);

  for _i := 1 to 10 do
    for _j := 1 to 10 do
    begin
      Test({LINENUM}26336, Format('A ≔ RandomIntMatrix(%d, %d, 7, 13);', [_i, _j]), null);
      Test({LINENUM}26337, 'size(A)', ASOSize(_i, _j));
      Test({LINENUM}26338, '∀(A, x↦IsInteger(x))', True);
      Test({LINENUM}26339, 'min(A) ≥ 7', True);
      Test({LINENUM}26340, 'max(A) ≤ 12', True);
    end;

  Test({LINENUM}26343, 'A ≔ RandomIntMatrix(70, 140, 7, 13); avg ≔ mean(A); (avg > 9.4) ∧ (avg < 9.6)', True);
  Test({LINENUM}26344, 'delete(A)', success);

  for _i := 1 to 100 do
  begin
    Test({LINENUM}26348, Format('A ≔ RandomIntMatrix(%d, 7, 8);', [_i]), null);
    Test({LINENUM}26349, 'size(A)', ASOSize(_i, _i));
    Test({LINENUM}26350, '∀(A, x↦x=7)', True);
    Test({LINENUM}26351, 'min(A) = 7', True);
    Test({LINENUM}26352, 'max(A) = 7', True);
  end;

  for _i := 1 to 10 do
    for _j := 1 to 10 do
    begin
      Test({LINENUM}26358, Format('A ≔ RandomIntMatrix(%d, %d, 7, 8);', [_i, _j]), null);
      Test({LINENUM}26359, 'size(A)', ASOSize(_i, _j));
      Test({LINENUM}26360, '∀(A, x↦x=7)', True);
      Test({LINENUM}26361, 'min(A) = 7', True);
      Test({LINENUM}26362, 'max(A) = 7', True);
    end;

  Test({LINENUM}26365, 'RandomIntMatrix(100, 7, 7)', failure, 'The set of possible values is empty.');
  Test({LINENUM}26366, 'RandomIntMatrix(70, 120, 7, 7)', failure, 'The set of possible values is empty.');

  Test({LINENUM}26368, 'RandomIntMatrix(100, 7, 2)', failure, 'The set of possible values is empty.');
  Test({LINENUM}26369, 'RandomIntMatrix(70, 120, 7, 2)', failure, 'The set of possible values is empty.');

  Test({LINENUM}26371, 'RandomIntMatrix(0, 1, 10)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26372, 'RandomIntMatrix(0, 10, 1, 10)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}26373, 'RandomIntMatrix(10, 0, 1, 10)', failure, 'A positive integer was expected as argument 2, but "0" was given.');

  for _i := 1 to 100 do
  begin
    Test({LINENUM}26377, Format('A ≔ RandomIntMatrix(%d, -10, 11);', [_i]), null);
    Test({LINENUM}26378, 'size(A)', ASOSize(_i, _i));
    Test({LINENUM}26379, '∀(A, x↦IsInteger(x))', True);
    Test({LINENUM}26380, 'min(A) ≥ -10', True);
    Test({LINENUM}26381, 'max(A) ≤ 10', True);
  end;

  Test({LINENUM}26384, 'A ≔ RandomIntMatrix(100, -10, 11); avg ≔ mean(A); abs(avg) < 0.25', True);
  Test({LINENUM}26385, 'delete(A)', success);

  for _i := 1 to 10 do
    for _j := 1 to 10 do
    begin
      Test({LINENUM}26390, Format('A ≔ RandomIntMatrix(%d, %d, -10, 11);', [_i, _j]), null);
      Test({LINENUM}26391, 'size(A)', ASOSize(_i, _j));
      Test({LINENUM}26392, '∀(A, x↦IsInteger(x))', True);
      Test({LINENUM}26393, 'min(A) ≥ -10', True);
      Test({LINENUM}26394, 'max(A) ≤ 10', True);
    end;

  Test({LINENUM}26397, 'A ≔ RandomIntMatrix(70, 140, -10, 11); avg ≔ mean(A); abs(avg) < 0.25', True);
  Test({LINENUM}26398, 'delete(A)', success);

  Test({LINENUM}26400, 'RandomIntMatrix(10, 0, 1, 10)', failure, 'A positive integer was expected as argument 2, but "0" was given.');

  Test({LINENUM}26402, 'RandomIntMatrix()', failure, 'There is no version of this function that can take 0 argument(s).');
  Test({LINENUM}26403, 'RandomIntMatrix(10)', failure, 'There is no version of this function that can take 1 argument(s).');
  Test({LINENUM}26404, 'RandomIntMatrix(10, 20)', failure, 'There is no version of this function that can take 2 argument(s).');
  Test({LINENUM}26405, 'RandomIntMatrix(10, 10, 2, 5, 1)', failure, 'There is no version of this function that can take 5 argument(s).');

  Test({LINENUM}26407, 'MatFromCols(❨1, 1, 0❩, ❨0, 2, 0❩, ❨0, 0, 3❩)', 3, [1, 0, 0, 1, 2, 0, 0, 0, 3]);
  Test({LINENUM}26408, 'MatFromCols(❨1, 0❩, ❨2, 0❩, ❨3, 0❩, ❨4, 0❩, ❨5, 10❩)', 5, [1, 2, 3, 4, 5, 0, 0, 0, 0, 10]);
  Test({LINENUM}26409, 'MatFromCols(❨1, 2, 3❩, ❨10, 20, 30❩)', 2, [1, 10, 2, 20, 3, 30]);
  Test({LINENUM}26410, 'MatFromCols(❨1, 0❩)', 1, [1, 0]);

  Test({LINENUM}26412, 'MatFromCols(❨1, 0, 0❩, ❨0, 2, 0❩, ❨0, 3❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26413, 'MatFromCols(❨1, 0❩, ❨2, 0❩, ❨3, 0❩, ❨4, 0❩, ❨5, 10, 25❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26414, 'MatFromCols(❨1, 2, 3, 4❩, ❨10, 20, 30❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26415, 'MatFromCols(❨1, 0❩, ❨1❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26416, 'MatFromCols(❨1, 0, 0❩, ❨0, 2, 0, 1❩, ❨0, 3❩)', failure, 'Attempt to create a non-rectangular matrix.');

  Test({LINENUM}26418, 'MatFromCols()', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}26420, 'MatFromCols(1)', failure, 'An object of type vector was expected as argument 1, but an object of type integer was given.');

  Test({LINENUM}26422, 'MatFromCols(❨i, 0, 0❩, ❨0, 2, 0❩, ❨0, 0, 3❩)', 3, [ImaginaryUnit, 0, 0, 0, 2, 0, 0, 0, 3]);
  Test({LINENUM}26423, 'MatFromCols(❨1, 0, 0❩, ❨0, 2, i❩, ❨0, 0, 3❩)', 3, [1, 0, 0, 0, 2, 0, 0, ImaginaryUnit, 3]);
  Test({LINENUM}26424, 'MatFromCols(❨1, 0, 0❩, ❨0, 2, 0❩, ❨i, 0, 3❩)', 3, [1, 0, ImaginaryUnit, 0, 2, 0, 0, 0, 3]);

  Test({LINENUM}26426, 'MatFromCols(❨i, 0❩, ❨2, 0❩, ❨3, 0❩, ❨4, 0❩, ❨5, 10❩)', 5, [ImaginaryUnit, 2, 3, 4, 5, 0, 0, 0, 0, 10]);
  Test({LINENUM}26427, 'MatFromCols(❨i, 2, 3❩, ❨10, 20, 30❩)', 2, [ImaginaryUnit, 10, 2, 20, 3, 30]);
  Test({LINENUM}26428, 'MatFromCols(❨i, 0❩)', 1, [ImaginaryUnit, 0]);

  Test({LINENUM}26430, 'MatFromCols(❨i, 0, 0❩, ❨0, 2, 0❩, ❨0, 3❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26431, 'MatFromCols(❨i, 0❩, ❨2, 0❩, ❨3, 0❩, ❨4, 0❩, ❨5, 10, 25❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26432, 'MatFromCols(❨i, 2, 3, 4❩, ❨10, 20, 30❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26433, 'MatFromCols(❨i, 0❩, ❨1❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26434, 'MatFromCols(❨i, 0, 0❩, ❨0, 2, 0, 1❩, ❨0, 3❩)', failure, 'Attempt to create a non-rectangular matrix.');

  Test({LINENUM}26436, 'MatFromCols(i)', failure, 'An object of type vector was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}26438, 'MatFromRows(❨1, 2, 3❩, ❨10, 20, 30❩, ❨0, 0, 1❩)', 3, [1, 2, 3, 10, 20, 30, 0, 0, 1]);
  Test({LINENUM}26439, 'MatFromRows(❨1, 2❩, ❨3, 4❩, ❨5, 6❩, ❨7, 8❩)', 2, [1, 2, 3, 4, 5, 6, 7, 8]);
  Test({LINENUM}26440, 'MatFromRows(❨1, 2, 3❩, ❨10, 20, 30❩)', 3, [1, 2, 3, 10, 20, 30]);
  Test({LINENUM}26441, 'MatFromRows(❨10, 11, 12, 13❩)', 4, [10, 11, 12, 13]);

  Test({LINENUM}26443, 'MatFromRows(❨1, 2, 3❩, ❨10, 20, 30, 40❩, ❨0, 0, 1❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26444, 'MatFromRows(❨1, 2, 3❩, ❨10, 20, 30❩, ❨0, 0❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26445, 'MatFromRows(❨1, 2❩, ❨3, 4❩, ❨5, 6, 7❩, ❨7❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26446, 'MatFromRows(❨1, 2, 3❩, ❨10, 20, 30, 40❩)', failure, 'Attempt to create a non-rectangular matrix.');

  Test({LINENUM}26448, 'MatFromRows()', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}26450, 'MatFromRows(1)', failure, 'An object of type vector was expected as argument 1, but an object of type integer was given.');

  Test({LINENUM}26452, 'MatFromRows(❨i, 2, 3❩, ❨10, 20, 30❩, ❨0, 0, 1❩)', 3, [ImaginaryUnit, 2, 3, 10, 20, 30, 0, 0, 1]);
  Test({LINENUM}26453, 'MatFromRows(❨1, 2, 3❩, ❨10, 20, 30❩, ❨0, 0, i❩)', 3, [1, 2, 3, 10, 20, 30, 0, 0, ImaginaryUnit]);
  Test({LINENUM}26454, 'MatFromRows(❨i, 2❩, ❨3, 4❩, ❨5, 6❩, ❨7, 8❩)', 2, [ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8]);
  Test({LINENUM}26455, 'MatFromRows(❨i, 2, 3❩, ❨10, 20, 30❩)', 3, [ImaginaryUnit, 2, 3, 10, 20, 30]);
  Test({LINENUM}26456, 'MatFromRows(❨10, 11, i, 13❩)', 4, [10, 11, ImaginaryUnit, 13]);

  Test({LINENUM}26458, 'MatFromRows(❨1, 2, 3❩, ❨10, 20, 30, 40❩, ❨0, 0, i❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26459, 'MatFromRows(❨i, 2, 3❩, ❨10, 20, 30❩, ❨0, 0❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26460, 'MatFromRows(❨i, 2❩, ❨3, 4❩, ❨5, 6, 7❩, ❨7❩)', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}26461, 'MatFromRows(❨i, 2, 3❩, ❨10, 20, 30, 40❩)', failure, 'Attempt to create a non-rectangular matrix.');

  Test({LINENUM}26463, 'MatFromRows()', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}26465, 'MatFromRows(i)', failure, 'An object of type vector was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}26467, 'MatFromBlocks(2, ❨❨1, 2❩, ❨3, 4❩❩, ❨❨10, 20❩, ❨30, 40❩❩, ❨❨12, 13❩, ❨14, 15❩❩, ❨❨100, 200❩, ❨300, 400❩❩)',
    4, [1, 2, 10, 20, 3, 4, 30, 40, 12, 13, 100, 200, 14, 15, 300, 400]);

  Test({LINENUM}26470, 'MatFromBlocks(2, ❨❨1, 2❩, ❨3, 4❩❩, ❨❨10, 20, 30❩, ❨40, 50, 60❩❩, ❨❨100, 200❩, ❨300, 400❩❩, ❨❨1, 2, 3❩, ❨4, 5, 6❩❩)',
    5, [1, 2, 10, 20, 30, 3, 4, 40, 50, 60, 100, 200, 1, 2, 3, 300, 400, 4, 5, 6]);

  Test({LINENUM}26473, 'MatFromBlocks(2, ❨❨1, 2❩, ❨3, 4❩❩, ❨❨10, 20, 30❩, ❨40, 50, 60❩❩, ❨❨1, 2, 3❩, ❨4, 5, 6❩❩,  ❨❨100, 200❩, ❨300, 400❩❩)',
    failure, 'Invalid block at position (2, 1), index 3.');

  Test({LINENUM}26476, 'MatFromBlocks(2, ❨❨1, 2❩, ❨3, 4❩❩, ❨❨10, 20, 30❩, ❨40, 50, 60❩❩, ❨❨100, 200❩, ❨300, 400❩❩, ❨❨1, 2, 3❩❩)',
    failure, 'Invalid block at position (2, 2), index 4.');

  Test({LINENUM}26479, 'MatFromBlocks(2, ❨❨1, 2❩, ❨3, 4❩❩, ❨❨10, 20, 30❩, ❨40, 50, 60❩, ❨70, 80, 90❩❩, ❨❨100, 200❩, ❨300, 400❩❩, ❨❨1, 2, 3❩, ❨4, 5, 6❩❩)',
    failure, 'Invalid block at position (1, 2), index 2.');

  Test({LINENUM}26482, 'MatFromBlocks(3, ❨❨1, 2❩, ❨3, 4❩❩, IdentityMatrix(2), IdentityMatrix(2), ZeroMatrix(2), ❨❨10, 20❩, ❨30, 40❩❩, IdentityMatrix(2))',
    6, [1, 2, 1, 0, 1, 0, 3, 4, 0, 1, 0, 1, 0, 0, 10, 20, 1, 0, 0, 0, 30, 40, 0, 1]);

  Test({LINENUM}26485, 'I ≔ IdentityMatrix(2); MatFromBlocks(4, I, I, I, I, I, I, I, I)',
    8, [1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1]);

  Test({LINENUM}26488, 'delete(I)', success);

  Test({LINENUM}26490, 'MatFromBlocks(3, ❨❨1❩, ❨2❩❩, ❨❨10❩, ❨20❩❩, ❨❨100❩, ❨200❩❩)',
    3, [1, 10, 100, 2, 20, 200]);

  Test({LINENUM}26493, 'MatFromBlocks(1, ❨❨1, 2❩, ❨3, 4❩❩, ❨❨10, 100❩, ❨100, 10❩❩, ❨❨5, 6❩, ❨7, 8❩❩)',
    2, [1, 2, 3, 4, 10, 100, 100, 10, 5, 6, 7, 8]);

  Test({LINENUM}26496, 'MatFromBlocks(2, ❨❨1, 2❩, ❨3, 4❩❩, ❨❨100, 100❩, ❨200, 200❩❩, ❨❨10, 12❩, ❨14, 16❩❩)',
    4, [1, 2, 100, 100, 3, 4, 200, 200, 10, 12, 0, 0, 14, 16, 0, 0]);

  Test({LINENUM}26499, 'MatFromBlocks(3, IdentityMatrix(2), IdentityMatrix(2), IdentityMatrix(2), IdentityMatrix(2))',
    6, [1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]);

  Test({LINENUM}26502, 'MatFromBlocks(3, IdentityMatrix(2), IdentityMatrix(2), IdentityMatrix(2), IdentityMatrix(3))',
    failure, 'Invalid block at position (2, 1), index 4.');

  Test({LINENUM}26505, 'MatFromBlocks(3, IdentityMatrix(2), IdentityMatrix(2), IdentityMatrix(3), IdentityMatrix(3))',
    failure, 'Invalid block at position (1, 3), index 3.');

  Test({LINENUM}26508, 'MatFromBlocks(3, IdentityMatrix(3))',
    failure, 'Too few blocks to fill the first row.');

  Test({LINENUM}26511, 'MatFromBlocks(3, IdentityMatrix(3), IdentityMatrix(3))',
    failure, 'Too few blocks to fill the first row.');

  Test({LINENUM}26514, 'MatFromBlocks(3, IdentityMatrix(3), IdentityMatrix(3), IdentityMatrix(3))',
    9, [1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1]);

  Test({LINENUM}26517, 'MatFromBlocks(3)', failure, 'The number of blocks has to be at least 1.');

  Test({LINENUM}26519, 'MatFromBlocks(0, IdentityMatrix(3), IdentityMatrix(3))',
    failure, 'A positive integer was expected as argument 1, but "0" was given.');

  Test({LINENUM}26522, 'MatFromBlocks()', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}26524, 'MatFromBlocks(2, ❨❨1, 2❩, ❨3, 4❩❩, ❨❨10, 20❩, ❨30, 40❩❩, ❨❨12, 13❩, ❨14, 15❩❩, ❨❨100, 200❩, ❨300, 400⋅i❩❩)',
    4, [1, 2, 10, 20, 3, 4, 30, 40, 12, 13, 100, 200, 14, 15, 300, 400*ImaginaryUnit]);

  Test({LINENUM}26527, 'MatFromBlocks(2, ❨❨1, 2❩, ❨3, 4❩❩, ❨❨10, 20, 30❩, ❨40, 50, 60❩❩, ❨❨100, 200❩, ❨300, 400❩❩, ❨❨i, 2, 3❩, ❨4, 5, 6❩❩)',
    5, [1, 2, 10, 20, 30, 3, 4, 40, 50, 60, 100, 200, ImaginaryUnit, 2, 3, 300, 400, 4, 5, 6]);

  Test({LINENUM}26530, 'MatFromBlocks(2, ❨❨i, 2❩, ❨3, 4❩❩, ❨❨10, 20, 30❩, ❨40, 50, 60❩❩, ❨❨1, 2, 3❩, ❨4, 5, 6❩❩,  ❨❨100, 200❩, ❨300, 400❩❩)',
    failure, 'Invalid block at position (2, 1), index 3.');

  Test({LINENUM}26533, 'MatFromBlocks(2, ❨❨i, 2❩, ❨3, 4❩❩, ❨❨10, 20, 30❩, ❨40, 50, 60❩❩, ❨❨100, 200❩, ❨300, 400❩❩, ❨❨1, 2, 3❩❩)',
    failure, 'Invalid block at position (2, 2), index 4.');

  Test({LINENUM}26536, 'MatFromBlocks(2, ❨❨i, 2❩, ❨3, 4❩❩, ❨❨10, 20, 30❩, ❨40, 50, 60❩, ❨70, 80, 90❩❩, ❨❨100, 200❩, ❨300, 400❩❩, ❨❨1, 2, 3❩, ❨4, 5, 6❩❩)',
    failure, 'Invalid block at position (1, 2), index 2.');

  Test({LINENUM}26539, 'MatFromBlocks(3, ❨❨i, 2❩, ❨3, 4❩❩, IdentityMatrix(2), IdentityMatrix(2), ZeroMatrix(2), ❨❨10, 20❩, ❨30, 40❩❩, IdentityMatrix(2))',
    6, [ImaginaryUnit, 2, 1, 0, 1, 0, 3, 4, 0, 1, 0, 1, 0, 0, 10, 20, 1, 0, 0, 0, 30, 40, 0, 1]);

  Test({LINENUM}26542, 'I ≔ IdentityMatrix(2); MatFromBlocks(4, I, I, I, I, I, ComplexMatrix(I), I, I)',
    8, [TASC(1), 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1]);

  Test({LINENUM}26545, 'delete(I)', success);

  Test({LINENUM}26547, 'MatFromBlocks(3, ❨❨i❩, ❨2❩❩, ❨❨10❩, ❨20❩❩, ❨❨100❩, ❨200❩❩)',
    3, [ImaginaryUnit, 10, 100, 2, 20, 200]);

  Test({LINENUM}26550, 'MatFromBlocks(1, ❨❨i, 2❩, ❨3, 4❩❩, ❨❨10, 100❩, ❨100, 10❩❩, ❨❨5, 6❩, ❨7, 8❩❩)',
    2, [ImaginaryUnit, 2, 3, 4, 10, 100, 100, 10, 5, 6, 7, 8]);

  Test({LINENUM}26553, 'MatFromBlocks(2, ❨❨i, 2❩, ❨3, 4❩❩, ❨❨100, 100❩, ❨200, 200❩❩, ❨❨10, 12❩, ❨14, 16❩❩)',
    4, [ImaginaryUnit, 2, 100, 100, 3, 4, 200, 200, 10, 12, 0, 0, 14, 16, 0, 0]);

  Test({LINENUM}26556, 'MatFromBlocks(3, IdentityMatrix(2), IdentityMatrix(2), IdentityMatrix(2), ComplexMatrix(IdentityMatrix(2)))',
    6, [1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, TASC(0)]);

  Test({LINENUM}26559, 'MatFromBlocks(3, IdentityMatrix(2), IdentityMatrix(2), IdentityMatrix(2), ComplexMatrix(IdentityMatrix(3)))',
    failure, 'Invalid block at position (2, 1), index 4.');

  Test({LINENUM}26562, 'MatFromBlocks(3, IdentityMatrix(2), IdentityMatrix(2), IdentityMatrix(3), ComplexMatrix(IdentityMatrix(3)))',
    failure, 'Invalid block at position (1, 3), index 3.');

  Test({LINENUM}26565, 'MatFromBlocks(3, ComplexMatrix(IdentityMatrix(3)))',
    failure, 'Too few blocks to fill the first row.');

  Test({LINENUM}26568, 'MatFromBlocks(3, IdentityMatrix(3), ComplexMatrix(IdentityMatrix(3)))',
    failure, 'Too few blocks to fill the first row.');

  Test({LINENUM}26571, 'MatFromBlocks(3, IdentityMatrix(3), IdentityMatrix(3), ComplexMatrix(IdentityMatrix(3)))',
    9, [1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, TASC(1)]);

  Test({LINENUM}26574, 'MatFromBlocks(0, IdentityMatrix(3), ComplexMatrix(IdentityMatrix(3)))',
    failure, 'A positive integer was expected as argument 1, but "0" was given.');

  Test({LINENUM}26577, 'diag()', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}26579, 'diag(1)', 1, [1]);

  Test({LINENUM}26581, 'diag(1, 2)', 2, [1, 0, 0, 2]);

  Test({LINENUM}26583, 'diag(1, 2, 3)', 3, [1, 0, 0, 0, 2, 0, 0, 0, 3]);
  Test({LINENUM}26584, 'diag(i, 2, 3)', 3, [ImaginaryUnit, 0, 0, 0, 2, 0, 0, 0, 3]);

  Test({LINENUM}26586, 'diag(1, 2, 3, 4 + i)', 4, [1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4 + ImaginaryUnit]);

  Test({LINENUM}26588, 'diag(1, 1, 1, 1, 1, 1, 1) = IdentityMatrix(7)', True);
  Test({LINENUM}26589, 'diag(0, 0, 0, 0, 0, 0, 0, 0, 0) = ZeroMatrix(9)', True);

  // Matrix parts

  Test({LINENUM}26593, 'A ≔ ❨❨1, −4, 2❩, ❨0, 1, 5❩, ❨0, −2, 7❩❩; B ≔ ❨❨4, 6, 2, 0❩, ❨−2, 5, 8, 0❩, ❨2, 5, 0, 1❩❩; C ≔ ❨❨1, 0❩, ❨0, 4❩, ❨2, 0❩, ❨1, 1❩❩; Z ≔ ❨❨i, 2, 3❩, ❨0, 0, 1❩❩; W ≔ ❨❨i, 1❩, ❨2, −i❩❩; Q ≔ ❨❨i, 2, −i❩, ❨0, 3, −1❩, ❨2⋅i, 1, 0❩❩;', null);

  Test({LINENUM}26595, 'cols(A)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ASR3(1, 0, 0)),
        ASO(ASR3(-4, 1, -2)),
        ASO(ASR3(2, 5, 7))
      ]
    )
  );

  Test({LINENUM}26605, 'rows(A)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ASR3(1, -4, 2)),
        ASO(ASR3(0, 1, 5)),
        ASO(ASR3(0, -2, 7))
      ]
    )
  );

  Test({LINENUM}26615, 'cols(B)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ASR3(4, -2, 2)),
        ASO(ASR3(6, 5, 5)),
        ASO(ASR3(2, 8, 0)),
        ASO(ASR3(0, 0, 1))
      ]
    )
  );

  Test({LINENUM}26626, 'rows(B)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ASR4(4, 6, 2, 0)),
        ASO(ASR4(-2, 5, 8, 0)),
        ASO(ASR4(2, 5, 0, 1))
      ]
    )
  );

  Test({LINENUM}26636, 'cols(C)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ASR4(1, 0, 2, 1)),
        ASO(ASR4(0, 4, 0, 1))
      ]
    )
  );

  Test({LINENUM}26645, 'rows(C)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ASR2(1, 0)),
        ASO(ASR2(0, 4)),
        ASO(ASR2(2, 0)),
        ASO(ASR2(1, 1))
      ]
    )
  );

  Test({LINENUM}26656, 'cols(Z)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ASC2(ImaginaryUnit, 0)),
        ASO(ASC2(2, 0)),
        ASO(ASC2(3, 1))
      ]
    )
  );

  Test({LINENUM}26666, 'rows(Z)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ASC3(ImaginaryUnit, 2, 3)),
        ASO(ASC3(0, 0, 1))
      ]
    )
  );

  // row, col, MainDiagonal, antidiagonal, superdiagonal, and subdiagonal
  // can be part of lvalues.

  // - lvalue, read

  Test({LINENUM}26680, 'col(A, 1)', [1, 0, 0]);
  Test({LINENUM}26681, 'col(A, 2)', [-4, 1, -2]);
  Test({LINENUM}26682, 'col(A, 3)', [2, 5, 7]);

  Test({LINENUM}26684, 'col(A, 4)', failure, 'Index 4 out of bounds.');
  Test({LINENUM}26685, 'col(A, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}26686, 'col(A, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}26688, 'row(A, 1)', [1, -4, 2]);
  Test({LINENUM}26689, 'row(A, 2)', [0, 1, 5]);
  Test({LINENUM}26690, 'row(A, 3)', [0, -2, 7]);

  Test({LINENUM}26692, 'row(A, 4)', failure, 'Index 4 out of bounds.');
  Test({LINENUM}26693, 'row(A, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}26694, 'row(A, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}26696, 'col(B, 1)', [4, -2, 2]);
  Test({LINENUM}26697, 'col(B, 2)', [6, 5, 5]);
  Test({LINENUM}26698, 'col(B, 3)', [2, 8, 0]);
  Test({LINENUM}26699, 'col(B, 4)', [0, 0, 1]);
  Test({LINENUM}26700, 'col(B, 5)', failure, 'Index 5 out of bounds.');

  Test({LINENUM}26702, 'row(B, 1)', [4, 6, 2, 0]);
  Test({LINENUM}26703, 'row(B, 2)', [-2, 5, 8, 0]);
  Test({LINENUM}26704, 'row(B, 3)', [2, 5, 0, 1]);
  Test({LINENUM}26705, 'row(B, 4)', failure, 'Index 4 out of bounds.');

  Test({LINENUM}26707, 'col(C, 1)', [1, 0, 2, 1]);
  Test({LINENUM}26708, 'col(C, 2)', [0, 4, 0, 1]);
  Test({LINENUM}26709, 'col(C, 3)', failure, 'Index 3 out of bounds.');

  Test({LINENUM}26711, 'row(C, 1)', [1, 0]);
  Test({LINENUM}26712, 'row(C, 2)', [0, 4]);
  Test({LINENUM}26713, 'row(C, 3)', [2, 0]);
  Test({LINENUM}26714, 'row(C, 4)', [1, 1]);
  Test({LINENUM}26715, 'row(C, 5)', failure, 'Index 5 out of bounds.');

  Test({LINENUM}26717, 'col(Z, 1)', [ImaginaryUnit, 0]);
  Test({LINENUM}26718, 'col(Z, 2)', [TASC(2), 0]);
  Test({LINENUM}26719, 'col(Z, 3)', [TASC(3), 1]);
  Test({LINENUM}26720, 'col(Z, 4)', failure, 'Index 4 out of bounds.');

  Test({LINENUM}26722, 'row(Z, 1)', [ImaginaryUnit, 2, 3]);
  Test({LINENUM}26723, 'row(Z, 2)', [TASC(0), 0, 1]);
  Test({LINENUM}26724, 'row(Z, 3)', failure, 'Index 3 out of bounds.');

  Test({LINENUM}26726, 'col(A, 2, 3)', failure, '2 argument(s) expected, but 3 given.');
  Test({LINENUM}26727, 'col(A)', failure, '2 argument(s) expected, but 1 given.');
  Test({LINENUM}26728, 'row(A, 2, 3)', failure, '2 argument(s) expected, but 3 given.');
  Test({LINENUM}26729, 'row(A)', failure, '2 argument(s) expected, but 1 given.');

  Test({LINENUM}26731, 'col(Z, 2, 3)', failure, '2 argument(s) expected, but 3 given.');
  Test({LINENUM}26732, 'col(Z)', failure, '2 argument(s) expected, but 1 given.');
  Test({LINENUM}26733, 'row(Z, 2, 3)', failure, '2 argument(s) expected, but 3 given.');
  Test({LINENUM}26734, 'row(Z)', failure, '2 argument(s) expected, but 1 given.');

  Test({LINENUM}26736, 'MainDiagonal(A)', [1, 1, 7]);
  Test({LINENUM}26737, 'MainDiagonal(B)', [4, 5, 0]);
  Test({LINENUM}26738, 'MainDiagonal(C)', [1, 4]);
  Test({LINENUM}26739, 'MainDiagonal(Z)', [ImaginaryUnit, 0]);
  Test({LINENUM}26740, 'MainDiagonal(Q)', [ImaginaryUnit, 3, 0]);

  Test({LINENUM}26742, 'antidiagonal(A)', [2, 1, 0]);
  Test({LINENUM}26743, 'antidiagonal(B)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}26744, 'antidiagonal(C)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}26745, 'antidiagonal(Z)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}26746, 'antidiagonal(W)', [TASC(1), 2]);
  Test({LINENUM}26747, 'antidiagonal(Q)', [-ImaginaryUnit, 3, 2*ImaginaryUnit]);

  Test({LINENUM}26749, 'superdiagonal(A)', [-4, 5]);
  Test({LINENUM}26750, 'superdiagonal(B)', [6, 8, 1]);
  Test({LINENUM}26751, 'superdiagonal(C)', [0]);
  Test({LINENUM}26752, 'superdiagonal(Z)', [TASC(2), 1]);
  Test({LINENUM}26753, 'superdiagonal(W)', [TASC(1)]);
  Test({LINENUM}26754, 'superdiagonal(Q)', [TASC(2), -1]);

  Test({LINENUM}26756, 'subdiagonal(A)', [0, -2]);
  Test({LINENUM}26757, 'subdiagonal(B)', [-2, 5]);
  Test({LINENUM}26758, 'subdiagonal(C)', [0, 0]);
  Test({LINENUM}26759, 'subdiagonal(Z)', [TASC(0)]);
  Test({LINENUM}26760, 'subdiagonal(W)', [TASC(2)]);
  Test({LINENUM}26761, 'subdiagonal(Q)', [TASC(0), 1]);

  // - rvalue, read

  Test({LINENUM}26765, 'row(❨❨1, 2, 3❩, ❨10, 20, 30❩❩, 1)', [1, 2, 3]);
  Test({LINENUM}26766, 'row(❨❨1, 2, 3❩, ❨10, 20, 30❩❩, 2)', [10, 20, 30]);
  Test({LINENUM}26767, 'row(❨❨1, 2, 3❩, ❨10, 20, 30❩❩, 3)', failure, 'Index 3 out of bounds.');

  Test({LINENUM}26769, 'col(❨❨1, 2, 3❩, ❨10, 20, 30❩❩, 1)', [1, 10]);
  Test({LINENUM}26770, 'col(❨❨1, 2, 3❩, ❨10, 20, 30❩❩, 2)', [2, 20]);
  Test({LINENUM}26771, 'col(❨❨1, 2, 3❩, ❨10, 20, 30❩❩, 3)', [3, 30]);
  Test({LINENUM}26772, 'col(❨❨1, 2, 3❩, ❨10, 20, 30❩❩, 4)', failure, 'Index 4 out of bounds.');

  Test({LINENUM}26774, 'MainDiagonal(❨❨1, 2, 3❩, ❨10, 20, 30❩❩)', [1, 20]);
  Test({LINENUM}26775, 'antidiagonal(❨❨1, 2, 3❩, ❨10, 20, 30❩❩)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}26776, 'superdiagonal(❨❨1, 2, 3❩, ❨10, 20, 30❩❩)', [2, 30]);
  Test({LINENUM}26777, 'subdiagonal(❨❨1, 2, 3❩, ❨10, 20, 30❩❩)', [10]);

  Test({LINENUM}26779, 'MainDiagonal(❨❨1, 2, 3❩, ❨10, 20, 30❩, ❨100, 200, 300❩❩)', [1, 20, 300]);
  Test({LINENUM}26780, 'antidiagonal(❨❨1, 2, 3❩, ❨10, 20, 30❩, ❨100, 200, 300❩❩)', [3, 20, 100]);
  Test({LINENUM}26781, 'superdiagonal(❨❨1, 2, 3❩, ❨10, 20, 30❩, ❨100, 200, 300❩❩)', [2, 30]);
  Test({LINENUM}26782, 'subdiagonal(❨❨1, 2, 3❩, ❨10, 20, 30❩, ❨100, 200, 300❩❩)', [10, 200]);

  Test({LINENUM}26784, 'row(❨❨i, 2, 3❩, ❨10, 20, 30❩❩, 1)', [ImaginaryUnit, 2, 3]);
  Test({LINENUM}26785, 'row(❨❨i, 2, 3❩, ❨10, 20, 30❩❩, 2)', [TASC(10), 20, 30]);
  Test({LINENUM}26786, 'row(❨❨i, 2, 3❩, ❨10, 20, 30❩❩, 3)', failure, 'Index 3 out of bounds.');

  Test({LINENUM}26788, 'col(❨❨i, 2, 3❩, ❨10, 20, 30❩❩, 1)', [ImaginaryUnit, 10]);
  Test({LINENUM}26789, 'col(❨❨i, 2, 3❩, ❨10, 20, 30❩❩, 2)', [TASC(2), 20]);
  Test({LINENUM}26790, 'col(❨❨i, 2, 3❩, ❨10, 20, 30❩❩, 3)', [TASC(3), 30]);
  Test({LINENUM}26791, 'col(❨❨i, 2, 3❩, ❨10, 20, 30❩❩, 4)', failure, 'Index 4 out of bounds.');

  Test({LINENUM}26793, 'MainDiagonal(❨❨i, 2, 3❩, ❨10, 20, 30❩❩)', [ImaginaryUnit, 20]);
  Test({LINENUM}26794, 'antidiagonal(❨❨i, 2, 3❩, ❨10, 20, 30❩❩)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}26795, 'superdiagonal(❨❨i, 2, 3❩, ❨10, 20, 30❩❩)', [TASC(2), 30]);
  Test({LINENUM}26796, 'subdiagonal(❨❨i, 2, 3❩, ❨10, 20, 30❩❩)', [TASC(10)]);

  Test({LINENUM}26798, 'MainDiagonal(❨❨i, 2, 3❩, ❨10, 20, i/3❩, ❨100, 200, 300❩❩)', [ImaginaryUnit, 20, 300]);
  Test({LINENUM}26799, 'antidiagonal(❨❨i, 2, 3❩, ❨10, 20, i/3❩, ❨100, 200, 300❩❩)', [TASC(3), 20, 100]);
  Test({LINENUM}26800, 'superdiagonal(❨❨i, 2, 3❩, ❨10, 20, i/3❩, ❨100, 200, 300❩❩)', [2, ImaginaryUnit/3]);
  Test({LINENUM}26801, 'subdiagonal(❨❨i, 2, 3❩, ❨10, 20, i/3❩, ❨100, 200, 300❩❩)', [TASC(10), 200]);

  // - lvalue, assigned to

  Test({LINENUM}26805, 'A', 3, [1, -4, 2, 0, 1, 5, 0, -2, 7]);

  Test({LINENUM}26807, 'col(A, 1) ≔ ❨7, 8, 9❩', [7, 8, 9]);

  Test({LINENUM}26809, 'A', 3, [7, -4, 2, 8, 1, 5, 9, -2, 7]);

  Test({LINENUM}26811, 'col(A, 2) ≔ ❨1, 2, 3❩', [1, 2, 3]);

  Test({LINENUM}26813, 'A', 3, [7, 1, 2, 8, 2, 5, 9, 3, 7]);

  Test({LINENUM}26815, 'col(A, 3) ≔ ❨10, 20, 30❩', [10, 20, 30]);

  Test({LINENUM}26817, 'A', 3, [7, 1, 10, 8, 2, 20, 9, 3, 30]);

  Test({LINENUM}26819, 'col(A, 4) ≔ ❨5, 6, 7❩', failure, 'Index 4 out of bounds.');
  Test({LINENUM}26820, 'col(A, 0) ≔ ❨5, 6, 7❩', failure, 'Index 0 out of bounds.');
  Test({LINENUM}26821, 'col(A, -1) ≔ ❨5, 6, 7❩', failure, 'Index -1 out of bounds.');

  Test({LINENUM}26823, 'row(A, 1) ≔ ❨1, 2, 3❩', [1, 2, 3]);

  Test({LINENUM}26825, 'A', 3, [1, 2, 3, 8, 2, 20, 9, 3, 30]);

  Test({LINENUM}26827, 'row(A, 2) ≔ ❨10, 20, 30❩', [10, 20, 30]);

  Test({LINENUM}26829, 'A', 3, [1, 2, 3, 10, 20, 30, 9, 3, 30]);

  Test({LINENUM}26831, 'row(A, 3) ≔ ❨0, 0, 1❩', [0, 0, 1]);

  Test({LINENUM}26833, 'A', 3, [1, 2, 3, 10, 20, 30, 0, 0, 1]);

  Test({LINENUM}26835, 'row(A, 4) ≔ ❨5, 6, 7❩', failure, 'Index 4 out of bounds.');
  Test({LINENUM}26836, 'row(A, 0) ≔ ❨5, 6, 7❩', failure, 'Index 0 out of bounds.');
  Test({LINENUM}26837, 'row(A, -1) ≔ ❨5, 6, 7❩', failure, 'Index -1 out of bounds.');

  Test({LINENUM}26839, 'col(A, 1) ≔ ❨1, 2, 3, 4❩', failure, 'Incorrect length of array.');
  Test({LINENUM}26840, 'row(A, 3) ≔ ❨1, 2, 3, 4❩', failure, 'Incorrect length of array.');

  Test({LINENUM}26842, 'col(A, 1, 2) ≔ ❨5, 66, 777❩', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}26843, 'row(A) ≔ ❨5, 66, 777❩', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}26845, 'A', 3, [1, 2, 3, 10, 20, 30, 0, 0, 1]);

  Test({LINENUM}26847, 'col(A, 1+1) ≔ ❨9, 9, 9❩', [9, 9, 9]);

  Test({LINENUM}26849, 'A', 3, [1, 9, 3, 10, 9, 30, 0, 9, 1]);

  Test({LINENUM}26851, 'B', 4, [4, 6, 2, 0, -2, 5, 8, 0, 2, 5, 0, 1]);

  Test({LINENUM}26853, 'col(B, 1) ≔ ❨1, 2, 3❩', [1, 2, 3]);

  Test({LINENUM}26855, 'B', 4, [1, 6, 2, 0, 2, 5, 8, 0, 3, 5, 0, 1]);

  Test({LINENUM}26857, 'col(B, 2) ≔ ❨10, 20, 30❩', [10, 20, 30]);

  Test({LINENUM}26859, 'B', 4, [1, 10, 2, 0, 2, 20, 8, 0, 3, 30, 0, 1]);

  Test({LINENUM}26861, 'col(B, 3) ≔ ❨1, 0, 1❩', [1, 0, 1]);

  Test({LINENUM}26863, 'B', 4, [1, 10, 1, 0, 2, 20, 0, 0, 3, 30, 1, 1]);

  Test({LINENUM}26865, 'col(B, 4) ≔ ❨5, 6, 7❩', [5, 6, 7]);

  Test({LINENUM}26867, 'B', 4, [1, 10, 1, 5, 2, 20, 0, 6, 3, 30, 1, 7]);

  Test({LINENUM}26869, 'col(B, 5) ≔ ❨1, 1, 0❩', failure, 'Index 5 out of bounds.');
  Test({LINENUM}26870, 'col(B, 0) ≔ ❨1, 1, 0❩', failure, 'Index 0 out of bounds.');
  Test({LINENUM}26871, 'col(B, -1) ≔ ❨1, 1, 0❩', failure, 'Index -1 out of bounds.');

  Test({LINENUM}26873, 'row(B, 1) ≔ ❨1, 2, 3, 4❩', [1, 2, 3, 4]);

  Test({LINENUM}26875, 'B', 4, [1, 2, 3, 4, 2, 20, 0, 6, 3, 30, 1, 7]);

  Test({LINENUM}26877, 'row(B, 2) ≔ ❨5, 6, 7, 8❩', [5, 6, 7, 8]);

  Test({LINENUM}26879, 'B', 4, [1, 2, 3, 4, 5, 6, 7, 8, 3, 30, 1, 7]);

  Test({LINENUM}26881, 'row(B, 3) ≔ ❨9, 10, 11, 12❩', [9, 10, 11, 12]);

  Test({LINENUM}26883, 'B', 4, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);

  Test({LINENUM}26885, 'row(B, 4) ≔ ❨13, 14, 15, 16❩', failure, 'Index 4 out of bounds.');
  Test({LINENUM}26886, 'row(B, 0) ≔ ❨13, 14, 15, 16❩', failure, 'Index 0 out of bounds.');
  Test({LINENUM}26887, 'row(B, -1) ≔ ❨13, 14, 15, 16❩', failure, 'Index -1 out of bounds.');

  Test({LINENUM}26889, 'row(B, 2) ≔ ❨5, 6, 7, 8, 9❩', failure, 'Incorrect length of array.');

  Test({LINENUM}26891, 'Z', 3, [ImaginaryUnit, 2, 3, 0, 0, 1]);

  Test({LINENUM}26893, 'col(Z, 1) ≔ ❨i, 2⋅i❩', [ImaginaryUnit, 2*ImaginaryUnit]);

  Test({LINENUM}26895, 'Z', 3, [ImaginaryUnit, 2, 3, 2*ImaginaryUnit, 0, 1]);

  Test({LINENUM}26897, 'col(Z, 2) ≔ ❨10, 20❩', [10, 20]);

  Test({LINENUM}26899, 'Z', 3, [ImaginaryUnit, 10, 3, 2*ImaginaryUnit, 20, 1]);

  Test({LINENUM}26901, 'col(Z, 3) ≔ ❨0, i❩', [0, ImaginaryUnit]);

  Test({LINENUM}26903, 'Z', 3, [ImaginaryUnit, 10, 0, 2*ImaginaryUnit, 20, ImaginaryUnit]);

  Test({LINENUM}26905, 'col(Z, 4) ≔ ❨i, i❩', failure, 'Index 4 out of bounds.');
  Test({LINENUM}26906, 'col(Z, 0) ≔ ❨i, i❩', failure, 'Index 0 out of bounds.');
  Test({LINENUM}26907, 'col(Z, -1) ≔ ❨i, i❩', failure, 'Index -1 out of bounds.');

  Test({LINENUM}26909, 'Z', 3, [ImaginaryUnit, 10, 0, 2*ImaginaryUnit, 20, ImaginaryUnit]);

  Test({LINENUM}26911, 'row(Z, 1) ≔ ❨i, 2⋅i, 3⋅i❩', [ImaginaryUnit, 2*ImaginaryUnit, 3*ImaginaryUnit]);

  Test({LINENUM}26913, 'Z', 3, [ImaginaryUnit, 2*ImaginaryUnit, 3*ImaginaryUnit, 2*ImaginaryUnit, 20, ImaginaryUnit]);

  Test({LINENUM}26915, 'row(Z, 2) ≔ ❨1, 2, 3❩', [1, 2, 3]);

  Test({LINENUM}26917, 'Z', 3, [ImaginaryUnit, 2*ImaginaryUnit, 3*ImaginaryUnit, 1, 2, 3]);

  Test({LINENUM}26919, 'row(Z, 3) ≔ ❨10, 20, 30❩', failure, 'Index 3 out of bounds.');
  Test({LINENUM}26920, 'row(Z, 0) ≔ ❨10, 20, 30❩', failure, 'Index 0 out of bounds.');
  Test({LINENUM}26921, 'row(Z, -1) ≔ ❨10, 20, 30❩', failure, 'Index -1 out of bounds.');

  Test({LINENUM}26923, 'col(Z, 1) ≔ ❨i, 2, 3❩', failure, 'Incorrect length of array.');
  Test({LINENUM}26924, 'row(Z, 2) ≔ ❨1, 2, 3, 4❩', failure, 'Incorrect length of array.');

  Test({LINENUM}26926, 'A', 3, [1, 9, 3, 10, 9, 30, 0, 9, 1]);

  Test({LINENUM}26928, 'MainDiagonal(A) ≔ ❨100, 200, 300❩', [100, 200, 300]);

  Test({LINENUM}26930, 'A', 3, [100, 9, 3, 10, 200, 30, 0, 9, 300]);

  Test({LINENUM}26932, 'MainDiagonal(A) ≔ ❨10, 11❩', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}26933, 'MainDiagonal(A) ≔ ❨10, 11, 12, 13❩', failure, 'Incorrect number of elements in diagonal.');

  Test({LINENUM}26935, 'A', 3, [100, 9, 3, 10, 200, 30, 0, 9, 300]);

  Test({LINENUM}26937, 'superdiagonal(A) ≔ ❨101, 201❩', [101, 201]);

  Test({LINENUM}26939, 'A', 3, [100, 101, 3, 10, 200, 201, 0, 9, 300]);

  Test({LINENUM}26941, 'superdiagonal(A) ≔ ❨1❩', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}26942, 'superdiagonal(A) ≔ ❨1, 2, 3❩', failure, 'Incorrect number of elements in superdiagonal.');

  Test({LINENUM}26944, 'A', 3, [100, 101, 3, 10, 200, 201, 0, 9, 300]);

  Test({LINENUM}26946, 'subdiagonal(A) ≔ ❨199, 299❩', [199, 299]);

  Test({LINENUM}26948, 'A', 3, [100, 101, 3, 199, 200, 201, 0, 299, 300]);

  Test({LINENUM}26950, 'subdiagonal(A) ≔ ❨7❩', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}26951, 'subdiagonal(A) ≔ ❨7, 8, 7❩', failure, 'Incorrect number of elements in subdiagonal.');

  Test({LINENUM}26953, 'A', 3, [100, 101, 3, 199, 200, 201, 0, 299, 300]);

  Test({LINENUM}26955, 'antidiagonal(A) ≔ ❨102, 200, 298❩', [102, 200, 298]);

  Test({LINENUM}26957, 'A', 3, [100, 101, 102, 199, 200, 201, 298, 299, 300]);

  Test({LINENUM}26959, 'antidiagonal(A) ≔ ❨55, 66❩', failure, 'Incorrect number of elements in antidiagonal.');
  Test({LINENUM}26960, 'antidiagonal(A) ≔ ❨55, 66, 77, 88❩', failure, 'Incorrect number of elements in antidiagonal.');

  Test({LINENUM}26962, 'A', 3, [100, 101, 102, 199, 200, 201, 298, 299, 300]);

  Test({LINENUM}26964, 'B', 4, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);

  Test({LINENUM}26966, 'superdiagonal(B) ≔ ❨20, 70, 120❩', [20, 70, 120]);
  Test({LINENUM}26967, 'B', 4, [1, 20, 3, 4, 5, 6, 70, 8, 9, 10, 11, 120]);
  Test({LINENUM}26968, 'subdiagonal(B) ≔ ❨50, 100❩', [50, 100]);
  Test({LINENUM}26969, 'B', 4, [1, 20, 3, 4, 50, 6, 70, 8, 9, 100, 11, 120]);

  Test({LINENUM}26971, 'B ≔ ❨❨1, 2, 3, 4❩, ❨5, 6, 7, 8❩, ❨9, 10, 11, 12❩❩;', null);

  Test({LINENUM}26973, 'superdiagonal(B) ≔ ❨20, 70, 120, 150❩', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}26974, 'superdiagonal(B) ≔ ❨20, 70❩', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}26975, 'subdiagonal(B) ≔ ❨50, 100, 150❩', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}26976, 'subdiagonal(B) ≔ ❨50❩', failure, 'Incorrect number of elements in subdiagonal.');

  Test({LINENUM}26978, 'B', 4, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);

  Test({LINENUM}26980, 'C', 2, [1, 0, 0, 4, 2, 0, 1, 1]);

  Test({LINENUM}26982, 'superdiagonal(C) ≔ ❨21❩', [21]);
  Test({LINENUM}26983, 'C', 2, [1, 21, 0, 4, 2, 0, 1, 1]);
  Test({LINENUM}26984, 'subdiagonal(C) ≔ ❨7, 8❩', [7, 8]);
  Test({LINENUM}26985, 'C', 2, [1, 21, 7, 4, 2, 8, 1, 1]);

  Test({LINENUM}26987, 'C ≔ ❨❨1, 0❩, ❨0, 4❩, ❨2, 0❩, ❨1, 1❩❩;', null);

  Test({LINENUM}26989, 'superdiagonal(C) ≔ ❨21, 23❩', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}26990, 'subdiagonal(C) ≔ ❨7, 8, 9❩', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}26991, 'subdiagonal(C) ≔ ❨7❩', failure, 'Incorrect number of elements in subdiagonal.');

  Test({LINENUM}26993, 'C', 2, [1, 0, 0, 4, 2, 0, 1, 1]);

  Test({LINENUM}26995, 'antidiagonal(B) ≔ ❨1, 2, 3❩', failure, 'A non-square matrix has no antidiagonal.');

  Test({LINENUM}26997, 'Q', 3, [ImaginaryUnit, 2, -ImaginaryUnit, 0, 3, -1, 2*ImaginaryUnit, 1, 0]);

  Test({LINENUM}26999, 'MainDiagonal(Q) ≔ ❨10, 20, 30⋅i❩', [10, 20, 30*ImaginaryUnit]);

  Test({LINENUM}27001, 'Q', 3, [10, 2, -ImaginaryUnit, 0, 20, -1, 2*ImaginaryUnit, 1, 30*ImaginaryUnit]);

  Test({LINENUM}27003, 'MainDiagonal(Q) ≔ ❨1, 2❩', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}27004, 'MainDiagonal(Q) ≔ ❨1, 2, 3, 4❩', failure, 'Incorrect number of elements in diagonal.');

  Test({LINENUM}27006, 'Q', 3, [10, 2, -ImaginaryUnit, 0, 20, -1, 2*ImaginaryUnit, 1, 30*ImaginaryUnit]);

  Test({LINENUM}27008, 'superdiagonal(Q) ≔ ❨1, 2❩', [1, 2]);

  Test({LINENUM}27010, 'Q', 3, [10, 1, -ImaginaryUnit, 0, 20, 2, 2*ImaginaryUnit, 1, 30*ImaginaryUnit]);

  Test({LINENUM}27012, 'superdiagonal(Q) ≔ ❨6❩', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}27013, 'superdiagonal(Q) ≔ ❨6, 7, 8❩', failure, 'Incorrect number of elements in superdiagonal.');

  Test({LINENUM}27015, 'Q', 3, [10, 1, -ImaginaryUnit, 0, 20, 2, 2*ImaginaryUnit, 1, 30*ImaginaryUnit]);

  Test({LINENUM}27017, 'subdiagonal(Q) ≔ ❨i, 2⋅i❩', [ImaginaryUnit, 2*ImaginaryUnit]);

  Test({LINENUM}27019, 'Q', 3, [10, 1, -ImaginaryUnit, ImaginaryUnit, 20, 2, 2*ImaginaryUnit, 2*ImaginaryUnit, 30*ImaginaryUnit]);

  Test({LINENUM}27021, 'subdiagonal(Q) ≔ ❨21❩', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}27022, 'subdiagonal(Q) ≔ ❨21, 22, 23❩', failure, 'Incorrect number of elements in subdiagonal.');

  Test({LINENUM}27024, 'Q', 3, [10, 1, -ImaginaryUnit, ImaginaryUnit, 20, 2, 2*ImaginaryUnit, 2*ImaginaryUnit, 30*ImaginaryUnit]);

  Test({LINENUM}27026, 'antidiagonal(Q) ≔ ❨10, 20, 30❩', [10, 20, 30]);

  Test({LINENUM}27028, 'Q', 3, [10, 1, 10, ImaginaryUnit, 20, 2, 30, 2*ImaginaryUnit, 30*ImaginaryUnit]);

  Test({LINENUM}27030, 'antidiagonal(Q) ≔ ❨−1, −2❩', failure, 'Incorrect number of elements in antidiagonal.');
  Test({LINENUM}27031, 'antidiagonal(Q) ≔ ❨−1, −2, 1, 2❩', failure, 'Incorrect number of elements in antidiagonal.');

  Test({LINENUM}27033, 'Q', 3, [10, 1, 10, ImaginaryUnit, 20, 2, 30, 2*ImaginaryUnit, 30*ImaginaryUnit]);

  Test({LINENUM}27035, 'antidiagonal(Z) ≔ ❨500, 600❩', failure, 'A non-square matrix has no antidiagonal.');

  Test({LINENUM}27037, 'MainDiagonal(A, 2) ≔ ❨5❩', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}27038, 'superdiagonal(A, 2) ≔ ❨5❩', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}27039, 'subdiagonal(A, 2) ≔ ❨5❩', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}27040, 'antidiagonal(A, 2) ≔ ❨5❩', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}27042, 'col(A, 1) ≔ "Test"', failure, 'Cannot convert string "Test" to a real number.');
  Test({LINENUM}27043, 'row(A, 2) ≔ true', failure, 'An object of type "boolean" cannot be converted to a real vector.');

  Test({LINENUM}27045, 'col(Q, 1) ≔ "Test"', failure, 'Cannot convert string "Test" to a complex number.');
  Test({LINENUM}27046, 'row(Q, 2) ≔ true', failure, 'An object of type "boolean" cannot be converted to a complex vector.');

  Test({LINENUM}27048, 'A', 3, [100, 101, 102, 199, 200, 201, 298, 299, 300]);
  Test({LINENUM}27049, 'Q', 3, [10, 1, 10, ImaginaryUnit, 20, 2, 30, 2*ImaginaryUnit, 30*ImaginaryUnit]);

  Test({LINENUM}27051, 'row(A, 1) ≔ ''(1, 2, 3)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(1.0),
        ASO(2.0),
        ASO(3.0)
      ]
    )
  );

  Test({LINENUM}27061, 'A', 3, [1, 2, 3, 199, 200, 201, 298, 299, 300]);

  Test({LINENUM}27063, 'col(A, 2) ≔ ''(1.2, 1.3, 1.4)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(1.2),
        ASO(1.3),
        ASO(1.4)
      ]
    )
  );

  Test({LINENUM}27073, 'A', 3, [1, 1.2, 3, 199, 1.3, 201, 298, 1.4, 300]);

  Test({LINENUM}27075, 'MainDiagonal(A) ≔ ''(10, 20, 30)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(10.0),
        ASO(20.0),
        ASO(30.0)
      ]
    )
  );

  Test({LINENUM}27085, 'A', 3, [10, 1.2, 3, 199, 20, 201, 298, 1.4, 30]);

  Test({LINENUM}27087, 'superdiagonal(A) ≔ ''(0.1, 0.2)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(0.1),
        ASO(0.2)
      ]
    )
  );

  Test({LINENUM}27096, 'A', 3, [10, 0.1, 3, 199, 20, 0.2, 298, 1.4, 30]);

  Test({LINENUM}27098, 'subdiagonal(A) ≔ ''(-1, -2)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(-1.0),
        ASO(-2.0)
      ]
    )
  );

  Test({LINENUM}27107, 'A', 3, [10, 0.1, 3, -1, 20, 0.2, 298, -2, 30]);

  Test({LINENUM}27109, 'antidiagonal(A) ≔ ''(7, 8, 9)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(7.0),
        ASO(8.0),
        ASO(9.0)
      ]
    )
  );

  Test({LINENUM}27119, 'A', 3, [10, 0.1, 7, -1, 8, 0.2, 9, -2, 30]);

  Test({LINENUM}27121, 'MainDiagonal(A) ≔ ''(7, 8, 9, 10)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}27122, 'antidiagonal(A) ≔ ''(7, 8, 9, 10)', failure, 'Incorrect number of elements in antidiagonal.');
  Test({LINENUM}27123, 'superdiagonal(A) ≔ ''(7, 8, 9, 10)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}27124, 'subdiagonal(A) ≔ ''(7, 8, 9, 10)', failure, 'Incorrect number of elements in subdiagonal.');

  Test({LINENUM}27126, 'A', 3, [10, 0.1, 7, -1, 8, 0.2, 9, -2, 30]);

  Test({LINENUM}27128, 'row(Q, 3) ≔ ''(i, 2, 3)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ImaginaryUnit),
        ASO(2),
        ASO(3)
      ]
    )
  );

  Test({LINENUM}27138, 'Q', 3, [10, 1, 10, ImaginaryUnit, 20, 2, ImaginaryUnit, 2, 3]);

  Test({LINENUM}27140, 'col(Q, 1) ≔ ''(5, 7, 9)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(5),
        ASO(7),
        ASO(9)
      ]
    )
  );

  Test({LINENUM}27150, 'Q', 3, [TASC(5), 1, 10, 7, 20, 2, 9, 2, 3]);

  Test({LINENUM}27152, 'MainDiagonal(Q) ≔ ''(i, 2⋅i, 3⋅i)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ImaginaryUnit),
        ASO(2*ImaginaryUnit),
        ASO(3*ImaginaryUnit)
      ]
    )
  );

  Test({LINENUM}27162, 'Q', 3, [ImaginaryUnit, 1, 10, 7, 2*ImaginaryUnit, 2, 9, 2, 3*ImaginaryUnit]);

  Test({LINENUM}27164, 'superdiagonal(Q) ≔ ''(0, 1)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(0),
        ASO(1)
      ]
    )
  );

  Test({LINENUM}27173, 'Q', 3, [ImaginaryUnit, 0, 10, 7, 2*ImaginaryUnit, 1, 9, 2, 3*ImaginaryUnit]);

  Test({LINENUM}27175, 'subdiagonal(Q) ≔ ''(i, -i)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(ImaginaryUnit),
        ASO(-ImaginaryUnit)
      ]
    )
  );

  Test({LINENUM}27184, 'Q', 3, [ImaginaryUnit, 0, 10, ImaginaryUnit, 2*ImaginaryUnit, 1, 9, -ImaginaryUnit, 3*ImaginaryUnit]);

  Test({LINENUM}27186, 'antidiagonal(Q) ≔ ''(-1, -2, -3)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(-1),
        ASO(-2),
        ASO(-3)
      ]
    )
  );

  Test({LINENUM}27196, 'Q', 3, [ImaginaryUnit, 0, -1, ImaginaryUnit, -2, 1, -3, -ImaginaryUnit, 3*ImaginaryUnit]);

  Test({LINENUM}27198, 'MainDiagonal(Q) ≔ ''(7, 8, 9, 10)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}27199, 'antidiagonal(Q) ≔ ''(7, 8, 9, 10)', failure, 'Incorrect number of elements in antidiagonal.');
  Test({LINENUM}27200, 'superdiagonal(Q) ≔ ''(7, 8, 9, 10)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}27201, 'subdiagonal(Q) ≔ ''(7, 8, 9, 10)', failure, 'Incorrect number of elements in subdiagonal.');

  Test({LINENUM}27203, 'A', 3, [10, 0.1, 7, -1, 8, 0.2, 9, -2, 30]);

  Test({LINENUM}27205, 'row(A, 1) ≔ ❨1, i, 3❩', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component i.');
  Test({LINENUM}27206, 'col(A, 3) ≔ ❨2 + 7⋅i, -2, i❩', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component 2 + 7⋅i.');
  Test({LINENUM}27207, 'MainDiagonal(A) ≔ ❨-4⋅i, 2, 1❩', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component −4⋅i.');
  Test({LINENUM}27208, 'antidiagonal(A) ≔ ❨2⋅i, 2, 1❩', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component 2⋅i.');
  Test({LINENUM}27209, 'superdiagonal(A) ≔ ❨7, i❩', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component i.');
  Test({LINENUM}27210, 'subdiagonal(A) ≔ ❨7, 3 + i❩', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component 3 + i.');

  Test({LINENUM}27212, 'row(A, 1) ≔ ''(1, i, 3)', failure, 'Complex number i cannot be converted to a real number.');
  Test({LINENUM}27213, 'col(A, 3) ≔ ''(1, 5 + 2⋅i, 3)', failure, 'Complex number 5 + 2⋅i cannot be converted to a real number.');
  Test({LINENUM}27214, 'MainDiagonal(A) ≔ ''(3 - 5⋅i, 3)', failure, 'Complex number 3 − 5⋅i cannot be converted to a real number.');
  Test({LINENUM}27215, 'antidiagonal(A) ≔ ''(5, -2⋅i, 3)', failure, 'Complex number −2⋅i cannot be converted to a real number.');
  Test({LINENUM}27216, 'superdiagonal(A) ≔ ''(5, 10⋅i)', failure, 'Complex number 10⋅i cannot be converted to a real number.');
  Test({LINENUM}27217, 'superdiagonal(A) ≔ ''(5, -i)', failure, 'Complex number −i cannot be converted to a real number.');
  Test({LINENUM}27218, 'subdiagonal(A) ≔ ''(5, -10 - 9⋅i)', failure, 'Complex number −10 − 9⋅i cannot be converted to a real number.');

  Test({LINENUM}27220, 'A', 3, [10, 0.1, 7, -1, 8, 0.2, 9, -2, 30]);

  // - lvalue, assigned to, protected

  Test({LINENUM}27224, 'A', 3, [10, 0.1, 7, -1, 8, 0.2, 9, -2, 30]);

  Test({LINENUM}27226, 'protect(A)', success);
  Test({LINENUM}27227, 'row(A, 1) ≔ ❨1, 2, 3❩', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}27228, 'A', 3, [10, 0.1, 7, -1, 8, 0.2, 9, -2, 30]);
  Test({LINENUM}27229, 'unprotect(A)', success);
  Test({LINENUM}27230, 'row(A, 1) ≔ ❨1, 2, 3❩', [1, 2, 3]);
  Test({LINENUM}27231, 'A', 3, [1, 2, 3, -1, 8, 0.2, 9, -2, 30]);

  Test({LINENUM}27233, 'protect(A)', success);
  Test({LINENUM}27234, 'col(A, 3) ≔ ❨30, 40, 50❩', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}27235, 'A', 3, [1, 2, 3, -1, 8, 0.2, 9, -2, 30]);
  Test({LINENUM}27236, 'unprotect(A)', success);
  Test({LINENUM}27237, 'col(A, 3) ≔ ❨30, 40, 50❩', [30, 40, 50]);
  Test({LINENUM}27238, 'A', 3, [1, 2, 30, -1, 8, 40, 9, -2, 50]);

  Test({LINENUM}27240, 'protect(A)', success);
  Test({LINENUM}27241, 'MainDiagonal(A) ≔ ❨−1, −2, −3❩', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}27242, 'A', 3, [1, 2, 30, -1, 8, 40, 9, -2, 50]);
  Test({LINENUM}27243, 'unprotect(A)', success);
  Test({LINENUM}27244, 'MainDiagonal(A) ≔ ❨−1, −2, −3❩', [-1, -2, -3]);
  Test({LINENUM}27245, 'A', 3, [-1, 2, 30, -1, -2, 40, 9, -2, -3]);

  Test({LINENUM}27247, 'protect(A)', success);
  Test({LINENUM}27248, 'superdiagonal(A) ≔ ❨10, 20❩', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}27249, 'A', 3, [-1, 2, 30, -1, -2, 40, 9, -2, -3]);
  Test({LINENUM}27250, 'unprotect(A)', success);
  Test({LINENUM}27251, 'superdiagonal(A) ≔ ❨10, 20❩', [10, 20]);
  Test({LINENUM}27252, 'A', 3, [-1, 10, 30, -1, -2, 20, 9, -2, -3]);

  Test({LINENUM}27254, 'protect(A)', success);
  Test({LINENUM}27255, 'subdiagonal(A) ≔ ❨100, 200❩', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}27256, 'A', 3, [-1, 10, 30, -1, -2, 20, 9, -2, -3]);
  Test({LINENUM}27257, 'unprotect(A)', success);
  Test({LINENUM}27258, 'subdiagonal(A) ≔ ❨100, 200❩', [100, 200]);
  Test({LINENUM}27259, 'A', 3, [-1, 10, 30, 100, -2, 20, 9, 200, -3]);

  Test({LINENUM}27261, 'protect(A)', success);
  Test({LINENUM}27262, 'antidiagonal(A) ≔ ❨0, 1, 0❩', failure, 'Cannot modify or delete protected variable "A".');
  Test({LINENUM}27263, 'A', 3, [-1, 10, 30, 100, -2, 20, 9, 200, -3]);
  Test({LINENUM}27264, 'unprotect(A)', success);
  Test({LINENUM}27265, 'antidiagonal(A) ≔ ❨0, 1, 0❩', [0, 1, 0]);
  Test({LINENUM}27266, 'A', 3, [-1, 10, 0, 100, 1, 20, 0, 200, -3]);

  Test({LINENUM}27268, 'Q', 3, [ImaginaryUnit, 0, -1, ImaginaryUnit, -2, 1, -3, -ImaginaryUnit, 3*ImaginaryUnit]);
  Test({LINENUM}27269, 'protect(Q)', success);
  Test({LINENUM}27270, 'row(Q, 2) ≔ ❨1, 2, i❩', failure, 'Cannot modify or delete protected variable "Q".');
  Test({LINENUM}27271, 'Q', 3, [ImaginaryUnit, 0, -1, ImaginaryUnit, -2, 1, -3, -ImaginaryUnit, 3*ImaginaryUnit]);
  Test({LINENUM}27272, 'unprotect(Q)', success);
  Test({LINENUM}27273, 'row(Q, 2) ≔ ❨1, 2, i❩', [1, 2, ImaginaryUnit]);
  Test({LINENUM}27274, 'Q', 3, [ImaginaryUnit, 0, -1, 1, 2, ImaginaryUnit, -3, -ImaginaryUnit, 3*ImaginaryUnit]);

  // - lvalue, assigned to, complex converted to real

  Test({LINENUM}27278, 'A ≔ matrix(3, 10, 0.1, 7, −1, 8, 0.2, 9, −2, 30)', 3, [10, 0.1, 7, -1, 8, 0.2, 9, -2, 30]);
  Test({LINENUM}27279, 'type(A)', 'real matrix');
  Test({LINENUM}27280, 'col(A, 1) ≔ ❨1, i − i + 3, 5❩', [1, TASC(3), 5]);
  Test({LINENUM}27281, 'A', 3, [1, 0.1, 7, 3, 8, 0.2, 5, -2, 30]);
  Test({LINENUM}27282, 'type(A)', 'real matrix');
  Test({LINENUM}27283, 'col(A, 2) ≔ ''(i − i + 2, 4, 6)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(TASC(2)),
        ASO(4),
        ASO(6)
      ]
    )
  );
  Test({LINENUM}27292, 'A', 3, [1, 2, 7, 3, 4, 0.2, 5, 6, 30]);
  Test({LINENUM}27293, 'type(A)', 'real matrix');

  // - additional tests (missing from the above sections)

  Test({LINENUM}27297, 'A ≔ ❨❨4, 5, 7, 8❩❩', 4, [4, 5, 7, 8]);

  Test({LINENUM}27299, 'superdiagonal(A)', [5]);
  Test({LINENUM}27300, 'subdiagonal(A)', ASO(TRealVector.Create([]))); // returns empty vector!

  Test({LINENUM}27302, 'superdiagonal(A) ≔ ❨50❩', [50]);
  Test({LINENUM}27303, 'A', 4, [4, 50, 7, 8]);

  Test({LINENUM}27305, 'subdiagonal(A) ≔ ❨50❩', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}27306, 'A', 4, [4, 50, 7, 8]);

  Test({LINENUM}27308, 'subdiagonal(A) ≔ DebugObject("empty vector")', ASO(TRealVector.Create([])));
  Test({LINENUM}27309, 'A', 4, [4, 50, 7, 8]);

  Test({LINENUM}27311, 'B ≔ ❨❨4❩, ❨5❩, ❨6❩, ❨7❩❩', 1, [4, 5, 6, 7]);

  Test({LINENUM}27313, 'superdiagonal(B)', ASO(TRealVector.Create([]))); // returns empty vector!
  Test({LINENUM}27314, 'subdiagonal(B)', [5]);

  Test({LINENUM}27316, 'subdiagonal(B) ≔ ❨50❩', [50]);
  Test({LINENUM}27317, 'B', 1, [4, 50, 6, 7]);

  Test({LINENUM}27319, 'superdiagonal(B) ≔ ❨100❩', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}27320, 'B', 1, [4, 50, 6, 7]);

  Test({LINENUM}27322, 'superdiagonal(B) ≔ DebugObject("empty vector")', ASO(TRealVector.Create([])));
  Test({LINENUM}27323, 'B', 1, [4, 50, 6, 7]);

  Test({LINENUM}27325, 'C ≔ ❨❨21❩❩', 1, [21]);
  Test({LINENUM}27326, 'C', 1, [21]);
  Test({LINENUM}27327, 'MainDiagonal(C)', [21]);
  Test({LINENUM}27328, 'superdiagonal(C)', ASO(TRealVector.Create([])));
  Test({LINENUM}27329, 'subdiagonal(C)', ASO(TRealVector.Create([])));

  Test({LINENUM}27331, 'MainDiagonal(C) ≔ ❨23❩', [23]);
  Test({LINENUM}27332, 'C', 1, [23]);

  Test({LINENUM}27334, 'superdiagonal(C) ≔ ❨23❩', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}27335, 'subdiagonal(C) ≔ ❨23❩', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}27336, 'C', 1, [23]);

  Test({LINENUM}27338, 'superdiagonal(C) ≔ DebugObject("empty vector")', ASO(TRealVector.Create([])));
  Test({LINENUM}27339, 'subdiagonal(C) ≔ DebugObject("empty vector")', ASO(TRealVector.Create([])));
  Test({LINENUM}27340, 'C', 1, [23]);

  Test({LINENUM}27342, 'A ≔ ❨❨i, 5, 7, 8❩❩', 4, [ImaginaryUnit, 5, 7, 8]);

  Test({LINENUM}27344, 'superdiagonal(A)', [TASC(5)]);
  Test({LINENUM}27345, 'subdiagonal(A)', ASO(TComplexVector.Create([]))); // returns empty vector!

  Test({LINENUM}27347, 'superdiagonal(A) ≔ ❨i/2❩', [ImaginaryUnit/2]);
  Test({LINENUM}27348, 'A', 4, [ImaginaryUnit, ImaginaryUnit/2, 7, 8]);

  Test({LINENUM}27350, 'subdiagonal(A) ≔ ❨i/4❩', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}27351, 'A', 4, [ImaginaryUnit, ImaginaryUnit/2, 7, 8]);

  Test({LINENUM}27353, 'subdiagonal(A) ≔ ComplexVector(DebugObject("empty vector"))', ASO(TComplexVector.Create([])));
  Test({LINENUM}27354, 'A', 4, [ImaginaryUnit, ImaginaryUnit/2, 7, 8]);

  Test({LINENUM}27356, 'B ≔ ❨❨i❩, ❨5❩, ❨6❩, ❨7❩❩', 1, [ImaginaryUnit, 5, 6, 7]);

  Test({LINENUM}27358, 'superdiagonal(B)', ASO(TComplexVector.Create([]))); // returns empty vector!
  Test({LINENUM}27359, 'subdiagonal(B)', [TASC(5)]);

  Test({LINENUM}27361, 'subdiagonal(B) ≔ ❨i/2❩', [ImaginaryUnit/2]);
  Test({LINENUM}27362, 'B', 1, [ImaginaryUnit, ImaginaryUnit/2, 6, 7]);

  Test({LINENUM}27364, 'superdiagonal(B) ≔ ❨i/4❩', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}27365, 'B', 1, [ImaginaryUnit, ImaginaryUnit/2, 6, 7]);

  Test({LINENUM}27367, 'superdiagonal(B) ≔ ComplexVector(DebugObject("empty vector"))', ASO(TComplexVector.Create([])));
  Test({LINENUM}27368, 'B', 1, [ImaginaryUnit, ImaginaryUnit/2, 6, 7]);

  Test({LINENUM}27370, 'C ≔ ❨❨i❩❩', 1, [ImaginaryUnit]);
  Test({LINENUM}27371, 'C', 1, [ImaginaryUnit]);
  Test({LINENUM}27372, 'MainDiagonal(C)', [ImaginaryUnit]);
  Test({LINENUM}27373, 'superdiagonal(C)', ASO(TComplexVector.Create([])));
  Test({LINENUM}27374, 'subdiagonal(C)', ASO(TComplexVector.Create([])));

  Test({LINENUM}27376, 'MainDiagonal(C) ≔ ❨i/2❩', [ImaginaryUnit/2]);
  Test({LINENUM}27377, 'C', 1, [ImaginaryUnit/2]);

  Test({LINENUM}27379, 'superdiagonal(C) ≔ ❨i/4❩', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}27380, 'subdiagonal(C) ≔ ❨i/4❩', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}27381, 'C', 1, [ImaginaryUnit/2]);

  Test({LINENUM}27383, 'superdiagonal(C) ≔ ComplexVector(DebugObject("empty vector"))', ASO(TComplexVector.Create([])));
  Test({LINENUM}27384, 'subdiagonal(C) ≔ ComplexVector(DebugObject("empty vector"))', ASO(TComplexVector.Create([])));
  Test({LINENUM}27385, 'C', 1, [ImaginaryUnit/2]);

  Test({LINENUM}27387, 'delete(A); delete(B); delete(C); delete(Z); delete(W); delete(Q)', success);





  //
  //
  //  CHAPTER 6
  //  Linear algebra.
  //
  //

  Chapter('Linear algebra');

  //
  //  Basic operations
  //

  // Operations on vectors

  // - inner (scalar, dot) product

  Test({LINENUM}27410, '❨2, 6❩ ⋅ ❨−2, 3❩', 14.0);
  Test({LINENUM}27411, '❨1, 4, 2❩ ⋅ ❨6, −1, 2❩', 6.0);
  Test({LINENUM}27412, '❨7, −1, 2❩ ⋅ ❨5, −2, 0❩', 37.0);
  Test({LINENUM}27413, '❨4, 1, 3.5❩ ⋅ ❨−2.4, 6, 4❩', 10.4);
  Test({LINENUM}27414, '❨1, 5, 2, 8, 6❩ ⋅ ❨0, 1, 0, 0, 0❩', 5.0);

  Test({LINENUM}27416, '❨1, 5, 2, 8, 6❩ ⋅ ❨0, 1, 0, 0❩', failure, 'Cannot compute dot product of two vectors of unequal dimension.');

  Test({LINENUM}27418, 'InnerProduct(❨2, 5❩, ❨−4, 6❩)', 22.0);
  Eps; Test({LINENUM}27419, 'InnerProduct(❨−1.2, 4.5, 6.2❩, ❨9.4, −0.2, 0.1❩)', -11.56);
  Test({LINENUM}27420, 'InnerProduct(❨1, 4, 2❩, ❨1, 0❩)', failure, 'Cannot compute dot product of two vectors of unequal dimension.');

  Test({LINENUM}27422, 'InnerProduct()', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27423, 'InnerProduct(❨4, 5❩)', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27424, 'InnerProduct(❨4, 5❩, ❨1, 5❩, ❨3, 6❩)', failure, 'Too many arguments.');
  Test({LINENUM}27425, 'InnerProduct(❨2, 5❩, 7)', failure, 'An object of type vector was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}27426, 'InnerProduct("rat", ❨2, 5❩)', failure, 'An object of type vector was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}27428, '❨i❩ ⋅ ❨1❩', ImaginaryUnit);
  Test({LINENUM}27429, '❨1❩ ⋅ ❨i❩', -ImaginaryUnit);

  Test({LINENUM}27431, '❨2, i, −1❩ ⋅ ❨1, 2, 3❩', -1 + 2*ImaginaryUnit);
  Test({LINENUM}27432, '❨2, 4, −2❩ ⋅ ❨3, i, −i❩', 6 - 6*ImaginaryUnit);
  Test({LINENUM}27433, '❨2 + i, 3, 5 − i❩ ⋅ ❨1, 2 + 3⋅i, −i❩', 9 - 3*ImaginaryUnit);
  Test({LINENUM}27434, '❨2, 3❩ ⋅ ❨2 + i, 5❩', 19 - 2*ImaginaryUnit);
  Test({LINENUM}27435, '❨2, 3❩ ⋅ ❨2 + i, 5, 3❩', failure, 'Cannot compute dot product of two vectors of unequal dimension.');

  Test({LINENUM}27437, 'InnerProduct(❨2, 5, −1❩, ❨3, 2 + i, 7❩)', 9 - 5*ImaginaryUnit);
  Test({LINENUM}27438, 'InnerProduct(❨2+i, 3❩, ❨2, −3❩)', -5 + 2*ImaginaryUnit);
  Test({LINENUM}27439, 'InnerProduct(❨3+i, 2−5⋅i, 3❩, ❨1−i, 2−4⋅i, 5⋅i❩)', 26 - 13*ImaginaryUnit);
  Test({LINENUM}27440, 'InnerProduct(❨3+i, 2−5⋅i, 3❩, ❨1−i, 2−4⋅i, 5⋅i, 2❩)', failure, 'Cannot compute dot product of two vectors of unequal dimension.');
  Test({LINENUM}27441, 'InnerProduct(❨3+i, 2−5⋅i, 3, 7❩, ❨5⋅i, 2❩)', failure, 'Cannot compute dot product of two vectors of unequal dimension.');

  Test({LINENUM}27443, 'InnerProduct()', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27444, 'InnerProduct(❨5⋅i, 2❩)', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27445, 'InnerProduct(❨5⋅i, 2❩, ❨i, -1❩, ❨10, 4❩)', failure, 'Too many arguments.');
  Test({LINENUM}27446, 'InnerProduct(7, ❨2, −3❩)', failure, 'An object of type vector was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}27447, 'InnerProduct(❨2, −3❩, "horse")', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');

  // - vector (cross) product

  Test({LINENUM}27451, '❨1, 0, 0❩ × ❨0, 1, 0❩', [0, 0, 1]);
  Test({LINENUM}27452, '❨6, −2, 3❩ × ❨5, 1, 2❩', [-7, 3, 16]);
  Test({LINENUM}27453, '❨1, 4❩ × ❨6, 2❩', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}27454, '❨1, 4, 7❩ × ❨6, 2❩', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}27455, '❨1, 4❩ × ❨6, 2, 2❩', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}27456, '❨1, 7, 4❩ × ❨6, 2, 2, -2❩', failure, 'Vector cross product only defined in ℝ³.');

  Test({LINENUM}27458, '❨0, 1, 2❩ × ❨−1, 0, 1❩ × ❨1, 2, 3❩', [-8, -2, 4]);
  Test({LINENUM}27459, '❨0, 1, 2❩ × ❨−1, 0, 1❩ × ❨1, 2, 3❩ × ❨0, 3, 1❩', [-14, 8, -24]);

  Test({LINENUM}27461, '❨0, 1, 2❩ × 7', failure, 'An object of type vector was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}27462, '❨0, 1, 2❩ × ❨−1, 0, 1❩ × "cat"', failure, 'An object of type vector was expected as argument 3, but an object of type string was given.');
  Test({LINENUM}27463, '❨0, 1, 2❩ × ❨−1, 0, 1❩ × ❨1, 2, 3❩ × true', failure, 'An object of type vector was expected as argument 4, but an object of type boolean was given.');
  Test({LINENUM}27464, '❨0, 1, 2❩ × ❨−1, 0, 1❩ × ❨1, 2, 3❩ × {1, 2, 3}', failure, 'An object of type vector was expected as argument 4, but an object of type set was given.');

  Test({LINENUM}27466, '5 × ❨0, 1, 2❩', failure, 'An object of type set was expected as argument 1, but an object of type integer was given.'); // non-elegant asymmetry

  Test({LINENUM}27468, '❨0, 1, 2❩ × ❨−1, 0, 1❩ × ❨1, 2, 3, 4❩', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}27469, '❨0, 1, 2❩ × ❨−1, 0, 1❩ × ❨1, 2❩ × ❨0, 3, 1❩', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}27470, '❨0, 1, 2❩ × ❨−1, 0, 1❩ × ❨1, 2, 3❩ × ❨0, 3, 1, -1❩', failure, 'Vector cross product only defined in ℝ³.');

  Test({LINENUM}27472, 'CrossProduct(❨5, −2, 3❩, ❨−1, 2, 10❩)', [-26, -53, 8]);
  Test({LINENUM}27473, 'CrossProduct(❨2, 7, 1❩, ❨−3, 4, 5❩)', [31, -13, 29]);
  Test({LINENUM}27474, 'CrossProduct(❨0, −1, 2❩, ❨1, 2, 4❩)', [-8, 2, 1]);
  Test({LINENUM}27475, 'CrossProduct(❨0, −1, 2❩, ❨1, 2, 4, 6❩)', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}27476, 'CrossProduct(❨0, −1, 2❩, ❨1, 6❩)', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}27477, 'CrossProduct(❨0, 2❩, ❨1, 2, 6❩)', failure, 'Vector cross product only defined in ℝ³.');

  Test({LINENUM}27479, 'CrossProduct(❨0, 1, 2❩, ❨−1, 0, 1❩, ❨1, 2, 3❩)', [-8, -2, 4]);
  Test({LINENUM}27480, 'CrossProduct(❨0, 1, 2❩, ❨−1, 0, 1❩, ❨1, 2, 3❩, ❨0, 3, 1❩)', [-14, 8, -24]);

  Test({LINENUM}27482, 'CrossProduct()', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27483, 'CrossProduct(❨0, 1, 2❩)', [0, 1, 2]);
  Test({LINENUM}27484, 'CrossProduct(5, ❨−1, 0, 1❩, ❨1, 2, 3❩, ❨0, 3, 1❩)', failure, 'An object of type vector was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}27485, 'CrossProduct(❨0, 1, 2❩, "dog", ❨1, 2, 3❩, ❨0, 3, 1❩)', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}27486, 'CrossProduct(❨0, 1, 2❩, ❨−1, 0, 1❩, true, ❨0, 3, 1❩)', failure, 'An object of type vector was expected as argument 3, but an object of type boolean was given.');
  Test({LINENUM}27487, 'CrossProduct(❨0, 1, 2❩, ❨−1, 0, 1❩, ❨1, 2, 3❩, {0, 3, 1})', failure, 'An object of type vector was expected as argument 4, but an object of type set was given.');
  Test({LINENUM}27488, 'CrossProduct(❨0, 1, 2❩, ❨−1, 0, 1❩, ❨1, 2, 3❩, ❨0, 3, 1❩, IdentityMatrix(3))', failure, 'An object of type vector was expected as argument 5, but an object of type real matrix was given.');

  Test({LINENUM}27490, 'CrossProduct(❨0, 1, 2❩, ❨−1, 0, 1❩, ❨1, 2❩)', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}27491, 'CrossProduct(❨0, 1, 2❩, ❨−1, 0, 1, 1❩, ❨1, 2, 3❩, ❨0, 3, 1❩)', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}27492, 'CrossProduct(❨0, 1, 2❩, ❨−1, 0, 1❩, ❨1, 2❩, ❨0, 3, 1❩)', failure, 'Vector cross product only defined in ℝ³.');
  Test({LINENUM}27493, 'CrossProduct(❨0, 1, 2❩, ❨−1, 0, 1❩, ❨1, 2, 3❩, ❨0, 3, 1, 7, 5, 1❩)', failure, 'Vector cross product only defined in ℝ³.');

  Test({LINENUM}27495, '❨3, 2, 1❩ × ❨2, i, 5❩', [10 - ImaginaryUnit, -13, -4 + 3*ImaginaryUnit]);
  Test({LINENUM}27496, '❨2, i, −i❩ × ❨1, 4, −2❩', [2*ImaginaryUnit, 4 - ImaginaryUnit, 8 - ImaginaryUnit]);
  Test({LINENUM}27497, '❨2 + 3⋅i, 5, 0❩ × ❨0, 1 − 2⋅i, 3❩', [15, -6-9*ImaginaryUnit, 8-ImaginaryUnit]);
  Test({LINENUM}27498, '❨1, 0, i❩ × ❨2, −i, 0❩', [-1, 2*ImaginaryUnit, -ImaginaryUnit]);
  Test({LINENUM}27499, '❨1, 0, i❩ × ❨2, −i, 0❩ × ❨2, 0, i❩', [-2, -ImaginaryUnit, -4*ImaginaryUnit]);

  Test({LINENUM}27501, '❨3, 2❩ × ❨2, i❩', failure, 'Vector cross product only defined in ℂ³.');
  Test({LINENUM}27502, '❨3, 2, 5❩ × ❨2, i❩', failure, 'Vector cross product only defined in ℂ³.');
  Test({LINENUM}27503, '❨3, 2❩ × ❨2, i, 1❩', failure, 'Vector cross product only defined in ℂ³.');
  Test({LINENUM}27504, '❨3, i, 5❩ × ❨2, 1, 1, 2❩', failure, 'Vector cross product only defined in ℂ³.');
  Test({LINENUM}27505, '❨3, 3, 5❩ × ❨2, 1, i, 2❩', failure, 'Vector cross product only defined in ℂ³.');
  Test({LINENUM}27506, '❨3, 4, 5❩ × ❨2, 1, 2❩ × ❨2, i❩', failure, 'Vector cross product only defined in ℂ³.');
  Test({LINENUM}27507, '❨3, 4, 5❩ × ❨2, i, 2❩ × ❨2, 8❩', failure, 'Vector cross product only defined in ℂ³.');

  Test({LINENUM}27509, '❨3, 4, 5❩ × 4 × ❨2, i❩', failure, 'An object of type vector was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}27510, '❨3, 4, 5❩ × ❨2, 1, 2❩ × "guinea pig"', failure, 'An object of type vector was expected as argument 3, but an object of type string was given.');
  Test({LINENUM}27511, '❨3, 4, 5❩ × ❨2, 1, 2❩ × {1, 2, 3}', failure, 'An object of type vector was expected as argument 3, but an object of type set was given.');

  Test({LINENUM}27513, 'CrossProduct(❨2, 1, 0❩, ❨3, i, 2❩)', [2, -4, -3 + 2*ImaginaryUnit]);
  Test({LINENUM}27514, 'CrossProduct(❨1, i, −i❩, ❨0, i, 2❩)', [-1 + 2*ImaginaryUnit, -2, ImaginaryUnit]);
  Test({LINENUM}27515, 'CrossProduct(❨2 + i, 3, 1 − i❩, ❨2, 1, 1 + 2⋅i❩)', [2 + 7*ImaginaryUnit, 2 - 7*ImaginaryUnit, -4 + ImaginaryUnit]);
  Test({LINENUM}27516, 'CrossProduct(❨2, 3, i❩)', [2, 3, ImaginaryUnit]);
  Test({LINENUM}27517, 'CrossProduct(❨1, 0, 1❩, ❨2, i, 0❩)', [-ImaginaryUnit, 2, ImaginaryUnit]);
  Test({LINENUM}27518, 'CrossProduct(❨1, 0, 1❩, ❨2, i, 0❩, ❨2, 0, 1❩)', [2, 3*ImaginaryUnit, -4]);

  Test({LINENUM}27520, 'CrossProduct(❨1, 0, 1❩, ❨2, i❩)', failure, 'Vector cross product only defined in ℂ³.');
  Test({LINENUM}27521, 'CrossProduct(❨1, 0, 1❩, ❨2, i, 0❩, ❨1, 2, 0, 1❩)', failure, 'Vector cross product only defined in ℂ³.');
  Test({LINENUM}27522, 'CrossProduct(❨1, 0, 1❩, ❨2, 3, 0❩, ❨i, 2, 0, 1❩)', failure, 'Vector cross product only defined in ℂ³.');
  Test({LINENUM}27523, 'CrossProduct(❨1, 0, i❩, ❨2, 0❩, ❨2, 0, 1❩)', failure, 'Vector cross product only defined in ℂ³.');

  Test({LINENUM}27525, 'CrossProduct(5, ❨2, i, 0❩, ❨2, 0, 1❩)', failure, 'An object of type vector was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}27526, 'CrossProduct(❨1, 0, 1❩, "cat", ❨2, 0, 1❩)', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}27527, 'CrossProduct(❨1, 0, 1❩, ❨2, i, 0❩, ZeroMatrix(2))', failure, 'An object of type vector was expected as argument 3, but an object of type real matrix was given.');

  // - angle between vectors

  Test({LINENUM}27531, '∠(❨1, 0❩, ❨2, 0❩)', 0.0);
  Test({LINENUM}27532, '∠(❨1, 1❩, ❨1, 1❩)', 0.0);
  Test({LINENUM}27533, '∠(❨-3, 2❩, ❨-3, 2❩)', 0.0);
  Test({LINENUM}27534, '∠(❨-1, 1❩, ❨1, -1❩)', Pi);
  Test({LINENUM}27535, '∠(❨1, 1, 1❩, ❨1, 1, 1❩)', 0.0);
  Test({LINENUM}27536, '∠(❨-1, -1, 1❩, ❨1, 1, -1❩)', Pi);
  Eps; Test({LINENUM}27537, '∠(❨1, 0❩, ❨0, 1❩)', Pi/2);
  Eps; Test({LINENUM}27538, '∠(❨1, 0❩, ❨0, -4❩)', Pi/2);
  Eps; Test({LINENUM}27539, '∠(❨1, 0❩, ❨1, 1❩)', Pi/4);
  Eps; Test({LINENUM}27540, '∠(❨2, 0❩, ❨3, 3❩)', Pi/4);
  Eps; Test({LINENUM}27541, '∠(❨−1, −1❩, ❨−1, 0❩)', Pi/4);
  Eps; Test({LINENUM}27542, '∠(❨1, 0❩, ❨−1, 1❩)', 3*Pi/4);
  Eps; Test({LINENUM}27543, '∠(❨1, 0❩, ❨0, -1E20❩)', Pi/2);
  Eps; Test({LINENUM}27544, '∠(❨5, 0❩, ❨−1, 0❩)', Pi);
  Eps; Test({LINENUM}27545, '∠(❨1, 1❩, ❨1, -1❩)', Pi/2);
  Eps; Test({LINENUM}27546, '∠(❨1, 0❩, ❨cos(1.23), sin(1.23)❩)', 1.23);

  Eps; Test({LINENUM}27548, '∠(❨1, 4, 0❩, ❨0, 0, 1❩)', Pi/2);
  Eps; Test({LINENUM}27549, '∠(❨1, 1, 1❩, ❨1, 1, 1❩)', 0.0);
  Eps; Test({LINENUM}27550, '∠(❨1, 2, 3❩, ❨1, 2, 3❩)', 0.0);
  Eps; Test({LINENUM}27551, '∠(❨1, 2, 3❩, ❨10, 20, 30❩)', 0.0);
  Eps; Test({LINENUM}27552, '∠(❨1, 2, 3❩, ❨-10, -20, -30❩)', Pi);
  Eps; Test({LINENUM}27553, '∠(❨1, 2, 3❩, ❨-10, -20, -30❩ / 1E40)', Pi);
  Eps; Test({LINENUM}27554, '∠(❨1, 2, 3❩, ❨10, 20, 30❩ / 1E40)', 0.0);
  Eps; Test({LINENUM}27555, '∠(❨1, 4, 0❩, ❨−1, 2, 1❩)', 0.805011035735014204);

  Test({LINENUM}27557, '∠(❨1, 4, 0❩, ❨−1, 2❩)', failure, 'Cannot compute angle between vectors of different dimension.');

  Test({LINENUM}27559, '∠(❨1, 1❩, ❨0, 0❩)', failure);

  Test({LINENUM}27561, '∠()', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27562, '∠(❨1, 1❩)', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27563, '∠(❨1, 1❩, ❨1, 0❩, ❨1, -1❩)', failure, 'Too many arguments.');
  Test({LINENUM}27564, '∠(7, ❨1, -1❩)', failure, 'An object of type vector was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}27565, '∠(❨1, -1❩, "cat")', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');

  Eps; Test({LINENUM}27567, '∠(❨1, 2 + 3⋅i, −2❩, ❨1 − 2⋅i, i, −i❩)', 1.20643960142319382);
  Eps; Test({LINENUM}27568, '∠(❨1, i, 0❩, ❨0, 0, 2 + 7⋅i/3❩)', Pi/2);
  Eps; Test({LINENUM}27569, '∠(❨1, -5, 0❩, ❨0, 0, 2 + 7⋅i/3❩)', Pi/2);

  Test({LINENUM}27571, 'angle(❨1, 0❩, ❨2, 0❩)', 0.0);
  Test({LINENUM}27572, 'angle(❨1, 1❩, ❨1, 1❩)', 0.0);
  Test({LINENUM}27573, 'angle(❨-3, 2❩, ❨-3, 2❩)', 0.0);
  Test({LINENUM}27574, 'angle(❨-1, 1❩, ❨1, -1❩)', Pi);
  Test({LINENUM}27575, 'angle(❨1, 1, 1❩, ❨1, 1, 1❩)', 0.0);
  Test({LINENUM}27576, 'angle(❨-1, 1, -1❩, ❨1, -1, 1❩)', Pi);
  Eps; Test({LINENUM}27577, 'angle(❨1, 0❩, ❨0, 1❩)', Pi/2);
  Eps; Test({LINENUM}27578, 'angle(❨1, 0❩, ❨0, -4❩)', Pi/2);
  Eps; Test({LINENUM}27579, 'angle(❨1, 0❩, ❨1, 1❩)', Pi/4);
  Eps; Test({LINENUM}27580, 'angle(❨2, 0❩, ❨3, 3❩)', Pi/4);
  Eps; Test({LINENUM}27581, 'angle(❨−1, −1❩, ❨−1, 0❩)', Pi/4);
  Eps; Test({LINENUM}27582, 'angle(❨1, 0❩, ❨−1, 1❩)', 3*Pi/4);
  Eps; Test({LINENUM}27583, 'angle(❨1, 0❩, ❨0, -1E20❩)', Pi/2);
  Eps; Test({LINENUM}27584, 'angle(❨5, 0❩, ❨−1, 0❩)', Pi);
  Eps; Test({LINENUM}27585, 'angle(❨1, 1❩, ❨1, -1❩)', Pi/2);
  Eps; Test({LINENUM}27586, 'angle(❨1, 0❩, ❨cos(1.23), sin(1.23)❩)', 1.23);

  Eps; Test({LINENUM}27588, 'angle(❨1, 4, 0❩, ❨0, 0, 1❩)', Pi/2);
  Eps; Test({LINENUM}27589, 'angle(❨1, 1, 1❩, ❨1, 1, 1❩)', 0.0);
  Eps; Test({LINENUM}27590, 'angle(❨1, 2, 3❩, ❨1, 2, 3❩)', 0.0);
  Eps; Test({LINENUM}27591, 'angle(❨1, 2, 3❩, ❨10, 20, 30❩)', 0.0);
  Eps; Test({LINENUM}27592, 'angle(❨1, 2, 3❩, ❨-10, -20, -30❩)', Pi);
  Eps; Test({LINENUM}27593, 'angle(❨1, 2, 3❩, ❨-10, -20, -30❩ / 1E40)', Pi);
  Eps; Test({LINENUM}27594, 'angle(❨1, 2, 3❩, ❨10, 20, 30❩ / 1E40)', 0.0);
  Eps; Test({LINENUM}27595, 'angle(❨1, 4, 0❩, ❨−1, 2, 1❩)', 0.805011035735014204);

  Test({LINENUM}27597, 'angle(❨1, 4, 0❩, ❨−1, 2❩)', failure, 'Cannot compute angle between vectors of different dimension.');

  Test({LINENUM}27599, 'angle(❨1, 1❩, ❨0, 0❩)', failure);

  Test({LINENUM}27601, 'angle()', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27602, 'angle(❨1, 1❩)', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27603, 'angle(❨1, 1❩, ❨1, 0❩, ❨1, -1❩)', failure, 'Too many arguments.');
  Test({LINENUM}27604, 'angle(7, ❨1, -1❩)', failure, 'An object of type vector was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}27605, 'angle(❨1, -1❩, "cat")', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');

  Eps; Test({LINENUM}27607, 'angle(❨1, 2 + 3⋅i, −2❩, ❨1 − 2⋅i, i, −i❩)', 1.20643960142319382);
  Eps; Test({LINENUM}27608, 'angle(❨1, i, 0❩, ❨0, 0, 2 + 7⋅i/3❩)', Pi/2);
  Eps; Test({LINENUM}27609, 'angle(❨1, -5, 0❩, ❨0, 0, 2 + 7⋅i/3❩)', Pi/2);

  // - parallel

  Test({LINENUM}27613, '❨1, 3, 2❩ ∥ ❨10, 30, 20❩', True);
  Test({LINENUM}27614, '❨1, 3, 2❩ ∥ ❨-10, -30, -20❩', True);
  Test({LINENUM}27615, '❨10, 30, 20❩ ∥ ❨-0.2, -0.6, -0.4❩', True);
  Test({LINENUM}27616, '❨1, 3, 2❩ ∥ ❨10, 30, 21❩', False);
  Test({LINENUM}27617, '❨1, 3, 2❩ ∥ ❨2, 0, -3❩', False);

  Test({LINENUM}27619, '❨1, 3, 2, 7❩ ∥ ❨2, 6, 4, 14❩', True);
  Test({LINENUM}27620, '❨1, 3, 2, 7❩ ∥ ❨-0.2, -0.6, -0.4, -1.4❩', True);
  Test({LINENUM}27621, '❨1, 3, 2, 7❩ ∥ ❨2, 6, 4, 15❩', False);

  Test({LINENUM}27623, '❨1, 3, 2❩ ∥ ❨0, 0, 0❩', True);
  Test({LINENUM}27624, '❨e, √π, 2❩ ∥ ❨0, 0, 0❩', True);
  Test({LINENUM}27625, '❨sin(1), cos(2), arcsinh(2)❩ ∥ ❨0, 0, 0❩', True);
  Test({LINENUM}27626, '❨0, 0, 0❩ ∥ ❨-3, 3, 6❩', True);
  Test({LINENUM}27627, '❨0, 0, 0❩ ∥ ❨0, 0, 0❩', True);
  Test({LINENUM}27628, '❨0, 0, 0, 0❩ ∥ ❨0, 0, 0, 0❩', True);

  Test({LINENUM}27630, '❨arcsin(0.2), 0, 0❩ ∥ ❨2, 0, 0❩', True);
  Test({LINENUM}27631, '❨sinh(e), 0, 0❩ ∥ ❨-e, 0, 0❩', True);
  Test({LINENUM}27632, '❨sinh(e), 0, 0❩ ∥ ❨-e, 0, 5❩', False);
  Test({LINENUM}27633, '❨sinh(e), 1, 0❩ ∥ ❨-e, 0, 0❩', False);

  Test({LINENUM}27635, '❨sin(1), sin(2), cos(1)❩ ∥ √7⋅❨sin(1), sin(2), cos(1)❩', True);
  Test({LINENUM}27636, '❨sin(1), sin(2), cos(1)❩ ∥ −π⋅❨sin(1), sin(2), cos(1)❩/√2', True);
  Test({LINENUM}27637, '❨sin(1), sin(2), cos(1)❩ ∥ √7⋅❨sin(1), sin(2), tan(1)❩', False);

  Test({LINENUM}27639, '❨1, 3, 2❩ ∥ ❨2, 0, -3, 5❩', failure, 'Vectors are of different dimension.');

  Test({LINENUM}27641, 'AreParallel(❨1, 3, 2❩, ❨10, 30, 20❩)', True);
  Test({LINENUM}27642, 'AreParallel(❨1, 3, 2❩, ❨-10, -30, -20❩)', True);
  Test({LINENUM}27643, 'AreParallel(❨10, 30, 20❩, ❨-0.2, -0.6, -0.4❩)', True);
  Test({LINENUM}27644, 'AreParallel(❨1, 3, 2❩, ❨10, 30, 21❩)', False);
  Test({LINENUM}27645, 'AreParallel(❨1, 3, 2❩, ❨2, 0, -3❩)', False);

  Test({LINENUM}27647, 'AreParallel(❨1, 3, 2, 7❩, ❨2, 6, 4, 14❩)', True);
  Test({LINENUM}27648, 'AreParallel(❨1, 3, 2, 7❩, ❨-0.2, -0.6, -0.4, -1.4❩)', True);
  Test({LINENUM}27649, 'AreParallel(❨1, 3, 2, 7❩, ❨2, 6, 4, 14.0001❩)', False);
  Test({LINENUM}27650, 'AreParallel(❨1, 3, 2, 7❩, ❨2, 6, 4, 15❩)', False);

  Test({LINENUM}27652, 'AreParallel(❨1, 3, 2❩, ❨0, 0, 0❩)', True);
  Test({LINENUM}27653, 'AreParallel(❨e, √π, 2❩, ❨0, 0, 0❩)', True);
  Test({LINENUM}27654, 'AreParallel(❨sin(1), cos(2), arcsinh(2)❩, ❨0, 0, 0❩)', True);
  Test({LINENUM}27655, 'AreParallel(❨0, 0, 0❩, ❨-3, 3, 6❩)', True);
  Test({LINENUM}27656, 'AreParallel(❨0, 0, 0❩, ❨0, 0, 0❩)', True);
  Test({LINENUM}27657, 'AreParallel(❨0, 0, 0, 0❩, ❨0, 0, 0, 0❩)', True);

  Test({LINENUM}27659, 'AreParallel(❨arcsin(0.2), 0, 0❩, ❨2, 0, 0❩)', True);
  Test({LINENUM}27660, 'AreParallel(❨sinh(e), 0, 0❩, ❨-e, 0, 0❩)', True);
  Test({LINENUM}27661, 'AreParallel(❨sinh(e), 0, 0❩, ❨-e, 0, 5❩)', False);
  Test({LINENUM}27662, 'AreParallel(❨sinh(e), 1, 0❩, ❨-e, 0, 0❩)', False);

  Test({LINENUM}27664, 'AreParallel(❨sin(1), sin(2), cos(1)❩, √7⋅❨sin(1), sin(2), cos(1)❩)', True);
  Test({LINENUM}27665, 'AreParallel(❨sin(1), sin(2), cos(1)❩, −π⋅❨sin(1), sin(2), cos(1)❩/√2)', True);
  Test({LINENUM}27666, 'AreParallel(❨sin(1), sin(2), cos(1)❩, √7⋅❨sin(1), sin(2), tan(1)❩)', False);

  Test({LINENUM}27668, 'AreParallel(❨1, 3, 2❩, ❨2, 0, -3, 5❩)', failure, 'Vectors are of different dimension.');

  Test({LINENUM}27670, 'AreParallel()', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27671, 'AreParallel(❨1, 3, 2❩)', failure, 'Too few arguments. A required argument of type vector is missing.');

  Test({LINENUM}27673, 'AreParallel(❨1.23, 5.19, −3.66❩, ❨2.13, 8.99, −6.34❩)', False);
  Test({LINENUM}27674, 'AreParallel(❨1.23, 5.19, −3.66❩, ❨2.13, 8.99, −6.34❩, 0.01)', True);
  Test({LINENUM}27675, 'AreParallel(❨1.23, 5.19, −3.66❩, ❨2.13, 8.99, −6.34❩, 0.001)', True);
  Test({LINENUM}27676, 'AreParallel(❨1.23, 5.19, −3.66❩, ❨2.13, 8.99, −6.34❩, 0.0001)', False);
  Test({LINENUM}27677, 'AreParallel(❨1.23, 5.19, −3.66❩, ❨2.13, 8.99, −6.34❩, 0.00001)', False);

  Test({LINENUM}27679, '❨1, 2, i❩ ∥ ❨2, 4, 2⋅i❩', True);
  Test({LINENUM}27680, '❨1, 2, i❩ ∥ ❨−0.1, −0.2, −i/10❩', True);
  Test({LINENUM}27681, '❨1, 2, i❩ ∥ ❨i, 2⋅i, −1❩', True);
  Test({LINENUM}27682, '❨1, 2, i❩ ∥ ❨2 + i, 4 + 2⋅i, −1 + 2⋅i❩', True);
  Test({LINENUM}27683, '❨1, 2, i❩ ∥ ❨2, 4, i❩', False);
  Test({LINENUM}27684, '❨1, 2, i❩ ∥ ❨−0.1, −0.3, −i/10❩', False);
  Test({LINENUM}27685, '❨1, 2, i❩ ∥ ❨i, 2⋅i, 1❩', False);
  Test({LINENUM}27686, '❨1, 2, i❩ ∥ ❨2 + i, 4 + 2⋅i, 1 + 2⋅i❩', False);

  Test({LINENUM}27688, '❨1, 2, i❩ ∥ √3⋅❨2, 4, 2⋅i❩/9999', True);
  Test({LINENUM}27689, '❨1, 2, i❩ ∥ -√π⋅❨2, 4, 2⋅i❩/e^5', True);
  Test({LINENUM}27690, '❨1, 2, i❩ ∥ -√π⋅❨2, 4, 2⋅i❩/(2 - i)', True);
  Test({LINENUM}27691, '❨1, 2, i❩ ∥ -√π⋅e^2⋅❨2, 4, 2⋅i❩/sin(2 - i)', True);
  Test({LINENUM}27692, '❨1, 2, i❩ ∥ -√π⋅e^2⋅❨2, 4, 2.01⋅i❩/sin(2 - i)', False);

  Test({LINENUM}27694, '❨0, 1, 2❩ ∥ ❨0, 7 + 3⋅i/2, 14 + 3⋅i❩', True);
  Test({LINENUM}27695, '❨0, 1, 2❩ ∥ ❨0, 7 + 3⋅i/2, 15 + 3⋅i❩', False);
  Test({LINENUM}27696, '❨0, 1, 2❩ ∥ ❨1, 7 + 3⋅i/2, 14 + 3⋅i❩', False);

  Test({LINENUM}27698, '❨0, 0, 0❩ ∥ ❨1, 7 + 3⋅i/2, 14 + 3⋅i❩', True);
  Test({LINENUM}27699, '❨1, 2, i❩ ∥ ❨0, 0, 0❩', True);

  Test({LINENUM}27701, '❨1, 2, i❩ ∥ 5', failure, 'An object of type vector was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}27702, '❨1, 2, i❩ ∥ true', failure, 'An object of type vector was expected as argument 2, but an object of type boolean was given.');
  Test({LINENUM}27703, 'IdentityMatrix(4) ∥ 5', failure, 'An object of type vector was expected as argument 1, but an object of type real matrix was given.');

  Test({LINENUM}27705, 'AreParallel(❨1, 2, i❩, ❨2, 4, 2⋅i❩)', True);
  Test({LINENUM}27706, 'AreParallel(❨1, 2, i❩, ❨−0.1, −0.2, −i/10❩)', True);
  Test({LINENUM}27707, 'AreParallel(❨1, 2, i❩, ❨i, 2⋅i, −1❩)', True);
  Test({LINENUM}27708, 'AreParallel(❨1, 2, i❩, ❨2 + i, 4 + 2⋅i, −1 + 2⋅i❩)', True);
  Test({LINENUM}27709, 'AreParallel(❨1, 2, i❩, ❨2, 4, i❩)', False);
  Test({LINENUM}27710, 'AreParallel(❨1, 2, i❩, ❨−0.1, −0.3, −i/10❩)', False);
  Test({LINENUM}27711, 'AreParallel(❨1, 2, i❩, ❨i, 2⋅i, 1❩)', False);
  Test({LINENUM}27712, 'AreParallel(❨1, 2, i❩, ❨2 + i, 4 + 2⋅i, 1 + 2⋅i❩)', False);

  Test({LINENUM}27714, 'AreParallel(❨1, 2, i❩, √3⋅❨2, 4, 2⋅i❩/9999)', True);
  Test({LINENUM}27715, 'AreParallel(❨1, 2, i❩, -√π⋅❨2, 4, 2⋅i❩/e^5)', True);
  Test({LINENUM}27716, 'AreParallel(❨1, 2, i❩, -√π⋅❨2, 4, 2⋅i❩/(2 - i))', True);
  Test({LINENUM}27717, 'AreParallel(❨1, 2, i❩, -√π⋅e^2⋅❨2, 4, 2⋅i❩/sin(2 - i))', True);
  Test({LINENUM}27718, 'AreParallel(❨1, 2, i❩, -√π⋅e^2⋅❨2, 4, 2.01⋅i❩/sin(2 - i))', False);

  Test({LINENUM}27720, 'AreParallel(❨0, 1, 2❩, ❨0, 7 + 3⋅i/2, 14 + 3⋅i❩)', True);
  Test({LINENUM}27721, 'AreParallel(❨0, 1, 2❩, ❨0, 7 + 3⋅i/2, 15 + 3⋅i❩)', False);
  Test({LINENUM}27722, 'AreParallel(❨0, 1, 2❩, ❨1, 7 + 3⋅i/2, 14 + 3⋅i❩)', False);

  Test({LINENUM}27724, 'AreParallel(❨0, 0, 0❩, ❨1, 7 + 3⋅i/2, 14 + 3⋅i❩)', True);
  Test({LINENUM}27725, 'AreParallel(❨1, 2, i❩, ❨0, 0, 0❩)', True);

  Test({LINENUM}27727, 'AreParallel(❨5.31 + 2.57⋅i, 4.56 − 9.63⋅i, −2.74 + 3.78⋅i❩, ❨4.84 − 7.27⋅i, −13.21 − 8.62⋅i, 5 + 4.78⋅i❩)', False);
  Test({LINENUM}27728, 'AreParallel(❨5.31 + 2.57⋅i, 4.56 − 9.63⋅i, −2.74 + 3.78⋅i❩, ❨4.84 − 7.27⋅i, −13.21 − 8.62⋅i, 5 + 4.78⋅i❩, 0.01)', True);
  Test({LINENUM}27729, 'AreParallel(❨5.31 + 2.57⋅i, 4.56 − 9.63⋅i, −2.74 + 3.78⋅i❩, ❨4.84 − 7.27⋅i, −13.21 − 8.62⋅i, 5 + 4.78⋅i❩, 0.001)', True);
  Test({LINENUM}27730, 'AreParallel(❨5.31 + 2.57⋅i, 4.56 − 9.63⋅i, −2.74 + 3.78⋅i❩, ❨4.84 − 7.27⋅i, −13.21 − 8.62⋅i, 5 + 4.78⋅i❩, 0.0001)', False);

  Test({LINENUM}27732, '❨1, 3, 2❩ ∦ ❨10, 30, 20❩', False);
  Test({LINENUM}27733, '❨1, 3, 2❩ ∦ ❨-10, -30, -20❩', False);
  Test({LINENUM}27734, '❨10, 30, 20❩ ∦ ❨-0.2, -0.6, -0.4❩', False);
  Test({LINENUM}27735, '❨1, 3, 2❩ ∦ ❨10, 30, 21❩', True);
  Test({LINENUM}27736, '❨1, 3, 2❩ ∦ ❨2, 0, -3❩', True);

  Test({LINENUM}27738, '❨1, 3, 2, 7❩ ∦ ❨2, 6, 4, 14❩', False);
  Test({LINENUM}27739, '❨1, 3, 2, 7❩ ∦ ❨-0.2, -0.6, -0.4, -1.4❩', False);
  Test({LINENUM}27740, '❨1, 3, 2, 7❩ ∦ ❨2, 6, 4, 15❩', True);

  Test({LINENUM}27742, '❨1, 3, 2, 7❩ ∦ ❨2, 6, 4❩', failure, 'Vectors are of different dimension.');

  Test({LINENUM}27744, '❨1, 3, 2❩ ∦ ❨0, 0, 0❩', False);
  Test({LINENUM}27745, '❨e, √π, 2❩ ∦ ❨0, 0, 0❩', False);
  Test({LINENUM}27746, '❨sin(1), cos(2), arcsinh(2)❩ ∦ ❨0, 0, 0❩', False);
  Test({LINENUM}27747, '❨0, 0, 0❩ ∦ ❨-3, 3, 6❩', False);
  Test({LINENUM}27748, '❨0, 0, 0❩ ∦ ❨0, 0, 0❩', False);
  Test({LINENUM}27749, '❨0, 0, 0, 0❩ ∦ ❨0, 0, 0, 0❩', False);

  Test({LINENUM}27751, '❨arcsin(0.2), 0, 0❩ ∦ ❨2, 0, 0❩', False);
  Test({LINENUM}27752, '❨sinh(e), 0, 0❩ ∦ ❨-e, 0, 0❩', False);
  Test({LINENUM}27753, '❨sinh(e), 0, 0❩ ∦ ❨-e, 0, 5❩', True);
  Test({LINENUM}27754, '❨sinh(e), 1, 0❩ ∦ ❨-e, 0, 0❩', True);

  Test({LINENUM}27756, '❨sin(1), sin(2), cos(1)❩ ∦ √7⋅❨sin(1), sin(2), cos(1)❩', False);
  Test({LINENUM}27757, '❨sin(1), sin(2), cos(1)❩ ∦ −π⋅❨sin(1), sin(2), cos(1)❩/√2', False);
  Test({LINENUM}27758, '❨sin(1), sin(2), cos(1)❩ ∦ √7⋅❨sin(1), sin(2), tan(1)❩', True);

  Test({LINENUM}27760, '❨1, 3, 2❩ ∦ ❨2, 0, -3, 5❩', failure, 'Vectors are of different dimension.');

  Test({LINENUM}27762, 'AreNotParallel(❨1, 3, 2❩, ❨10, 30, 20❩)', False);
  Test({LINENUM}27763, 'AreNotParallel(❨1, 3, 2❩, ❨-10, -30, -20❩)', False);
  Test({LINENUM}27764, 'AreNotParallel(❨10, 30, 20❩, ❨-0.2, -0.6, -0.4❩)', False);
  Test({LINENUM}27765, 'AreNotParallel(❨1, 3, 2❩, ❨10, 30, 21❩)', True);
  Test({LINENUM}27766, 'AreNotParallel(❨1, 3, 2❩, ❨2, 0, -3❩)', True);

  Test({LINENUM}27768, 'AreNotParallel(❨1, 3, 2, 7❩, ❨2, 6, 4, 14❩)', False);
  Test({LINENUM}27769, 'AreNotParallel(❨1, 3, 2, 7❩, ❨-0.2, -0.6, -0.4, -1.4❩)', False);
  Test({LINENUM}27770, 'AreNotParallel(❨1, 3, 2, 7❩, ❨2, 6, 4, 15❩)', True);

  Test({LINENUM}27772, 'AreNotParallel(❨1, 3, 2❩, ❨0, 0, 0❩)', False);
  Test({LINENUM}27773, 'AreNotParallel(❨e, √π, 2❩, ❨0, 0, 0❩)', False);
  Test({LINENUM}27774, 'AreNotParallel(❨sin(1), cos(2), arcsinh(2)❩, ❨0, 0, 0❩)', False);
  Test({LINENUM}27775, 'AreNotParallel(❨0, 0, 0❩, ❨-3, 3, 6❩)', False);
  Test({LINENUM}27776, 'AreNotParallel(❨0, 0, 0❩, ❨0, 0, 0❩)', False);
  Test({LINENUM}27777, 'AreNotParallel(❨0, 0, 0, 0❩, ❨0, 0, 0, 0❩)', False);

  Test({LINENUM}27779, 'AreNotParallel(❨arcsin(0.2), 0, 0❩, ❨2, 0, 0❩)', False);
  Test({LINENUM}27780, 'AreNotParallel(❨sinh(e), 0, 0❩, ❨-e, 0, 0❩)', False);
  Test({LINENUM}27781, 'AreNotParallel(❨sinh(e), 0, 0❩, ❨-e, 0, 5❩)', True);
  Test({LINENUM}27782, 'AreNotParallel(❨sinh(e), 1, 0❩, ❨-e, 0, 0❩)', True);

  Test({LINENUM}27784, 'AreNotParallel(❨sin(1), sin(2), cos(1)❩, √7⋅❨sin(1), sin(2), cos(1)❩)', False);
  Test({LINENUM}27785, 'AreNotParallel(❨sin(1), sin(2), cos(1)❩, −π⋅❨sin(1), sin(2), cos(1)❩/√2)', False);
  Test({LINENUM}27786, 'AreNotParallel(❨sin(1), sin(2), cos(1)❩, √7⋅❨sin(1), sin(2), tan(1)❩)', True);

  Test({LINENUM}27788, 'AreNotParallel(❨1, 3, 2❩, ❨2, 0, -3, 5❩)', failure, 'Vectors are of different dimension.');

  Test({LINENUM}27790, 'AreNotParallel()', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27791, 'AreNotParallel(❨1, 3, 2❩)', failure, 'Too few arguments. A required argument of type vector is missing.');

  Test({LINENUM}27793, 'AreNotParallel(❨1.23, 5.19, −3.66❩, ❨2.13, 8.99, −6.34❩)', True);
  Test({LINENUM}27794, 'AreNotParallel(❨1.23, 5.19, −3.66❩, ❨2.13, 8.99, −6.34❩, 0.01)', False);
  Test({LINENUM}27795, 'AreNotParallel(❨1.23, 5.19, −3.66❩, ❨2.13, 8.99, −6.34❩, 0.001)', False);
  Test({LINENUM}27796, 'AreNotParallel(❨1.23, 5.19, −3.66❩, ❨2.13, 8.99, −6.34❩, 0.0001)', True);
  Test({LINENUM}27797, 'AreNotParallel(❨1.23, 5.19, −3.66❩, ❨2.13, 8.99, −6.34❩, 0.00001)', True);

  Test({LINENUM}27799, '❨1, 2, i❩ ∦ ❨2, 4, 2⋅i❩', False);
  Test({LINENUM}27800, '❨1, 2, i❩ ∦ ❨−0.1, −0.2, −i/10❩', False);
  Test({LINENUM}27801, '❨1, 2, i❩ ∦ ❨i, 2⋅i, −1❩', False);
  Test({LINENUM}27802, '❨1, 2, i❩ ∦ ❨2 + i, 4 + 2⋅i, −1 + 2⋅i❩', False);
  Test({LINENUM}27803, '❨1, 2, i❩ ∦ ❨2, 4, i❩', True);
  Test({LINENUM}27804, '❨1, 2, i❩ ∦ ❨−0.1, −0.3, −i/10❩', True);
  Test({LINENUM}27805, '❨1, 2, i❩ ∦ ❨i, 2⋅i, 1❩', True);
  Test({LINENUM}27806, '❨1, 2, i❩ ∦ ❨2 + i, 4 + 2⋅i, 1 + 2⋅i❩', True);

  Test({LINENUM}27808, '❨1, 2, i❩ ∦ ❨2, 4, 2⋅i, i❩', failure, 'Vectors are of different dimension.');

  Test({LINENUM}27810, '❨1, 2, i❩ ∦ √3⋅❨2, 4, 2⋅i❩/9999', False);
  Test({LINENUM}27811, '❨1, 2, i❩ ∦ -√π⋅❨2, 4, 2⋅i❩/e^5', False);
  Test({LINENUM}27812, '❨1, 2, i❩ ∦ -√π⋅❨2, 4, 2⋅i❩/(2 - i)', False);
  Test({LINENUM}27813, '❨1, 2, i❩ ∦ -√π⋅e^2⋅❨2, 4, 2⋅i❩/sin(2 - i)', False);
  Test({LINENUM}27814, '❨1, 2, i❩ ∦ -√π⋅e^2⋅❨2, 4, 2.01⋅i❩/sin(2 - i)', True);

  Test({LINENUM}27816, '❨0, 1, 2❩ ∦ ❨0, 7 + 3⋅i/2, 14 + 3⋅i❩', False);
  Test({LINENUM}27817, '❨0, 1, 2❩ ∦ ❨0, 7 + 3⋅i/2, 15 + 3⋅i❩', True);
  Test({LINENUM}27818, '❨0, 1, 2❩ ∦ ❨1, 7 + 3⋅i/2, 14 + 3⋅i❩', True);

  Test({LINENUM}27820, '❨0, 0, 0❩ ∦ ❨1, 7 + 3⋅i/2, 14 + 3⋅i❩', False);
  Test({LINENUM}27821, '❨1, 2, i❩ ∦ ❨0, 0, 0❩', False);

  Test({LINENUM}27823, '❨1, 2, i❩ ∦ 5', failure, 'An object of type vector was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}27824, '❨1, 2, i❩ ∦ true', failure, 'An object of type vector was expected as argument 2, but an object of type boolean was given.');
  Test({LINENUM}27825, 'IdentityMatrix(4) ∦ 5', failure, 'An object of type vector was expected as argument 1, but an object of type real matrix was given.');

  Test({LINENUM}27827, 'AreNotParallel(❨1, 2, i❩, ❨2, 4, 2⋅i❩)', False);
  Test({LINENUM}27828, 'AreNotParallel(❨1, 2, i❩, ❨−0.1, −0.2, −i/10❩)', False);
  Test({LINENUM}27829, 'AreNotParallel(❨1, 2, i❩, ❨i, 2⋅i, −1❩)', False);
  Test({LINENUM}27830, 'AreNotParallel(❨1, 2, i❩, ❨2 + i, 4 + 2⋅i, −1 + 2⋅i❩)', False);
  Test({LINENUM}27831, 'AreNotParallel(❨1, 2, i❩, ❨2, 4, i❩)', True);
  Test({LINENUM}27832, 'AreNotParallel(❨1, 2, i❩, ❨−0.1, −0.3, −i/10❩)', True);
  Test({LINENUM}27833, 'AreNotParallel(❨1, 2, i❩, ❨i, 2⋅i, 1❩)', True);
  Test({LINENUM}27834, 'AreNotParallel(❨1, 2, i❩, ❨2 + i, 4 + 2⋅i, 1 + 2⋅i❩)', True);

  Test({LINENUM}27836, 'AreNotParallel(❨1, 2, i❩, √3⋅❨2, 4, 2⋅i❩/9999)', False);
  Test({LINENUM}27837, 'AreNotParallel(❨1, 2, i❩, -√π⋅❨2, 4, 2⋅i❩/e^5)', False);
  Test({LINENUM}27838, 'AreNotParallel(❨1, 2, i❩, -√π⋅❨2, 4, 2⋅i❩/(2 - i))', False);
  Test({LINENUM}27839, 'AreNotParallel(❨1, 2, i❩, -√π⋅e^2⋅❨2, 4, 2⋅i❩/sin(2 - i))', False);
  Test({LINENUM}27840, 'AreNotParallel(❨1, 2, i❩, -√π⋅e^2⋅❨2, 4, 2.01⋅i❩/sin(2 - i))', True);

  Test({LINENUM}27842, 'AreNotParallel(❨0, 1, 2❩, ❨0, 7 + 3⋅i/2, 14 + 3⋅i❩)', False);
  Test({LINENUM}27843, 'AreNotParallel(❨0, 1, 2❩, ❨0, 7 + 3⋅i/2, 15 + 3⋅i❩)', True);
  Test({LINENUM}27844, 'AreNotParallel(❨0, 1, 2❩, ❨1, 7 + 3⋅i/2, 14 + 3⋅i❩)', True);

  Test({LINENUM}27846, 'AreNotParallel(❨0, 0, 0❩, ❨1, 7 + 3⋅i/2, 14 + 3⋅i❩)', False);
  Test({LINENUM}27847, 'AreNotParallel(❨1, 2, i❩, ❨0, 0, 0❩)', False);

  Test({LINENUM}27849, 'AreNotParallel(❨5.31 + 2.57⋅i, 4.56 − 9.63⋅i, −2.74 + 3.78⋅i❩, ❨4.84 − 7.27⋅i, −13.21 − 8.62⋅i, 5 + 4.78⋅i❩)', True);
  Test({LINENUM}27850, 'AreNotParallel(❨5.31 + 2.57⋅i, 4.56 − 9.63⋅i, −2.74 + 3.78⋅i❩, ❨4.84 − 7.27⋅i, −13.21 − 8.62⋅i, 5 + 4.78⋅i❩, 0.01)', False);
  Test({LINENUM}27851, 'AreNotParallel(❨5.31 + 2.57⋅i, 4.56 − 9.63⋅i, −2.74 + 3.78⋅i❩, ❨4.84 − 7.27⋅i, −13.21 − 8.62⋅i, 5 + 4.78⋅i❩, 0.001)', False);
  Test({LINENUM}27852, 'AreNotParallel(❨5.31 + 2.57⋅i, 4.56 − 9.63⋅i, −2.74 + 3.78⋅i❩, ❨4.84 − 7.27⋅i, −13.21 − 8.62⋅i, 5 + 4.78⋅i❩, 0.0001)', True);

  // - orthogonality

  Test({LINENUM}27856, '❨1, 0❩ ⟂ ❨0, 1❩', True);
  Test({LINENUM}27857, '❨-2, 0❩ ⟂ ❨0, 8❩', True);
  Test({LINENUM}27858, '❨1, 0❩ ⟂ ❨2, 1❩', False);

  Test({LINENUM}27860, '❨1, 2, 0❩ ⟂ ❨0, 0, −1❩', True);
  Test({LINENUM}27861, '❨1, 2, 0❩ ⟂ ❨1, 0, −1❩', False);
  Test({LINENUM}27862, '❨1, 2, 0❩ ⟂ ❨1, 3, −1❩', False);
  Test({LINENUM}27863, '❨1, 2, 2❩ ⟂ ❨1, 0, −1❩', False);

  Test({LINENUM}27865, '❨1, 2, −1❩ ⟂ ❨2, 0, 2❩', True);
  Test({LINENUM}27866, '❨1, 2, −1❩ ⟂ ❨2, 0, 1❩', False);
  Test({LINENUM}27867, '❨1, 2, 1❩ ⟂ ❨2, 0, 2❩', False);

  Test({LINENUM}27869, '❨1, 2, 2❩ ⟂ ❨0, 0, 0❩', True);
  Test({LINENUM}27870, '❨0, 0, 0❩ ⟂ ❨2, 0, 2❩', True);
  Test({LINENUM}27871, '❨0, 0, 0❩ ⟂ ❨0, 0, 0❩', True);

  Test({LINENUM}27873, '❨1, 0, 2, −1, 3, 1❩ ⟂ ❨0, 1, −1, 2, 2, −2❩', True);
  Test({LINENUM}27874, '❨1, 0, 2, −1, 3, 1❩ ⟂ ❨0, 1, −1, 2, 2, −1❩', False);
  Test({LINENUM}27875, '❨1, 0, 2, −1, 3, 1❩ ⟂ ❨1, 1, −1, 2, 2, −2❩', False);
  Test({LINENUM}27876, '❨1, 0, -2, −1, 3, 1❩ ⟂ ❨0, 1, −1, 2, 2, −2❩', False);

  Test({LINENUM}27878, '❨1, 2, 1❩ ⟂ ❨2, 0❩', failure, 'Cannot compute dot product of two vectors of unequal dimension.');

  Test({LINENUM}27880, '❨1, 2, 6❩ ⟂ 6', failure, 'An object of type vector was expected as argument 2, but an object of type integer was given.');

  Test({LINENUM}27882, 'ArePerpendicular(❨2, 1❩, ❨−1, 2❩)', True);
  Test({LINENUM}27883, 'ArePerpendicular(❨2, 1❩, ❨−1, 1❩)', False);
  Test({LINENUM}27884, 'ArePerpendicular(❨2, 1❩, ❨1, 2❩)', False);

  Test({LINENUM}27886, 'ArePerpendicular(❨0, 1, 0❩, ❨0, 0, 1❩)', True);
  Test({LINENUM}27887, 'ArePerpendicular(❨0, 1, 0❩, ❨0, 1, 1❩)', False);
  Test({LINENUM}27888, 'ArePerpendicular(❨0, 0, 0❩, ❨0, 1, 1❩)', True);

  Test({LINENUM}27890, 'ArePerpendicular(❨2, −1, 4, 2, 1, 0❩, ❨1, 2, −3, 4, 4, 2❩)', True);
  Test({LINENUM}27891, 'ArePerpendicular(❨2, −1, 4, 2, 1, 0❩, ❨1, 2, −3, 4, 4, 5❩)', True);
  Test({LINENUM}27892, 'ArePerpendicular(❨2, −1, 4, 2, 1, 0❩, ❨1, 2, −3, 3, 4, 2❩)', False);
  Test({LINENUM}27893, 'ArePerpendicular(❨2, 1, 4, 2, 1, 0❩, ❨1, 2, −3, 4, 4, 2❩)', False);
  Test({LINENUM}27894, 'ArePerpendicular(❨1, −1, 4, 2, 1, 0❩, ❨1, 2, −3, 4, 4, 2❩)', False);

  Test({LINENUM}27896, 'ArePerpendicular(❨0.80, 1.55, −2.00, 1.41❩, ❨2.45, 1.03, 2.23, 0.64❩)', False);
  Test({LINENUM}27897, 'ArePerpendicular(❨0.80, 1.55, −2.00, 1.41❩, ❨2.45, 1.03, 2.23, 0.64❩, 0.1)', True);
  Test({LINENUM}27898, 'ArePerpendicular(❨0.80, 1.55, −2.00, 1.41❩, ❨2.45, 1.03, 2.23, 0.64❩, 0.01)', True);
  Test({LINENUM}27899, 'ArePerpendicular(❨0.80, 1.55, −2.00, 1.41❩, ❨2.45, 1.03, 2.23, 0.64❩, 0.001)', False);

  Test({LINENUM}27901, '❨2, i, 1❩ ⟂ ❨1, i, −3❩', True);
  Test({LINENUM}27902, '❨2, i, 1❩ ⟂ ❨1, i, 3❩', False);
  Test({LINENUM}27903, '❨1, 2, 0, 1❩ ⟂ ❨3, 1, i, −5❩', True);
  Test({LINENUM}27904, '❨1, 2, 0, 1❩ ⟂ ❨3, 1, i, −4❩', False);
  Test({LINENUM}27905, '❨1, 2, 2, 1❩ ⟂ ❨3, 1, i, −5❩', False);

  Test({LINENUM}27907, '❨1, 2, 2, 1❩ ⟂ ❨3, 1, i, −5, 4❩', failure, 'Cannot compute dot product of two vectors of unequal dimension.');
  Test({LINENUM}27908, '❨1, 2, i❩ ⟂ "cat"', failure, 'An object of type vector was expected as argument 2, but an object of type string was given.');

  Test({LINENUM}27910, 'ArePerpendicular(❨1 + i, 2, −1❩, ❨i, −i, 1 − i❩)', True);
  Test({LINENUM}27911, 'ArePerpendicular(❨1 + i, 2, −1❩, ❨i, −i, 1 + i❩)', False);

  Test({LINENUM}27913, 'ArePerpendicular(❨0.11 + 0.45⋅i, 0.17 − 0.60⋅i, −0.18 + 0.60⋅i❩, ❨2.46 − 0.93⋅i, 2.41 − 0.70⋅i, 0.48 − 0.98⋅i❩)', False);
  Test({LINENUM}27914, 'ArePerpendicular(❨0.11 + 0.45⋅i, 0.17 − 0.60⋅i, −0.18 + 0.60⋅i❩, ❨2.46 − 0.93⋅i, 2.41 − 0.70⋅i, 0.48 − 0.98⋅i❩, 0.1)', True);
  Test({LINENUM}27915, 'ArePerpendicular(❨0.11 + 0.45⋅i, 0.17 − 0.60⋅i, −0.18 + 0.60⋅i❩, ❨2.46 − 0.93⋅i, 2.41 − 0.70⋅i, 0.48 − 0.98⋅i❩, 0.01)', True);
  Test({LINENUM}27916, 'ArePerpendicular(❨0.11 + 0.45⋅i, 0.17 − 0.60⋅i, −0.18 + 0.60⋅i❩, ❨2.46 − 0.93⋅i, 2.41 − 0.70⋅i, 0.48 − 0.98⋅i❩, 0.001)', False);

  Test({LINENUM}27918, 'ArePerpendicular()', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27919, 'ArePerpendicular(❨1, 2, −1❩)', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}27920, 'ArePerpendicular(❨1 + i, 2, −1❩)', failure, 'Too few arguments. A required argument of type vector is missing.');

  // - norms, real spaces

  Test({LINENUM}27924, 'u ≔ ❨1, 2❩; v ≔ ❨1, 2, −4❩; w ≔ ❨2, 0, 1, −1❩; x ≔ ❨7, 4, −6, 5, 2❩;', null);

  Eps; Test({LINENUM}27926, 'norm(u)', Sqrt(5));
  Eps; Test({LINENUM}27927, 'norm(v)', Sqrt(21));
  Eps; Test({LINENUM}27928, 'norm(w)', Sqrt(6));
  Eps; Test({LINENUM}27929, 'norm(x)', Sqrt(130));

  Eps; Test({LINENUM}27931, 'norm(u, "Euclidean")', Sqrt(5));
  Eps; Test({LINENUM}27932, 'norm(v, "Euclidean")', Sqrt(21));
  Eps; Test({LINENUM}27933, 'norm(w, "Euclidean")', Sqrt(6));
  Eps; Test({LINENUM}27934, 'norm(x, "Euclidean")', Sqrt(130));

  Eps; Test({LINENUM}27936, 'norm(u, "Frobenius")', Sqrt(5));
  Eps; Test({LINENUM}27937, 'norm(v, "Frobenius")', Sqrt(21));
  Eps; Test({LINENUM}27938, 'norm(w, "Frobenius")', Sqrt(6));
  Eps; Test({LINENUM}27939, 'norm(x, "Frobenius")', Sqrt(130));

  Eps; Test({LINENUM}27941, 'norm(u, "p", 2)', Sqrt(5));
  Eps; Test({LINENUM}27942, 'norm(v, "p", 2)', Sqrt(21));
  Eps; Test({LINENUM}27943, 'norm(w, "p", 2)', Sqrt(6));
  Eps; Test({LINENUM}27944, 'norm(x, "p", 2)', Sqrt(130));

  Eps; Test({LINENUM}27946, 'norm(u, "p", 3)', cbrt(9));
  Eps; Test({LINENUM}27947, 'norm(v, "p", 3)', cbrt(73));
  Eps; Test({LINENUM}27948, 'norm(w, "p", 3)', cbrt(10));
  Eps; Test({LINENUM}27949, 'norm(x, "p", 3)', cbrt(756));

  Eps; Test({LINENUM}27951, 'norm(u, "p", 4)', frt(17));
  Eps; Test({LINENUM}27952, 'norm(v, "p", 4)', frt(273));
  Eps; Test({LINENUM}27953, 'norm(w, "p", 4)', frt(18));
  Eps; Test({LINENUM}27954, 'norm(x, "p", 4)', frt(4594));

  Eps; Test({LINENUM}27956, 'norm(u, "p", 1)', 3.0);
  Eps; Test({LINENUM}27957, 'norm(v, "p", 1)', 7.0);
  Eps; Test({LINENUM}27958, 'norm(w, "p", 1)', 4.0);
  Eps; Test({LINENUM}27959, 'norm(x, "p", 1)', 24.0);

  Eps; Test({LINENUM}27961, 'norm(u, "sum")', 3.0);
  Eps; Test({LINENUM}27962, 'norm(v, "sum")', 7.0);
  Eps; Test({LINENUM}27963, 'norm(w, "sum")', 4.0);
  Eps; Test({LINENUM}27964, 'norm(x, "sum")', 24.0);

  Eps; Test({LINENUM}27966, 'norm(u, "max column sum")', 3.0);
  Eps; Test({LINENUM}27967, 'norm(v, "max column sum")', 7.0);
  Eps; Test({LINENUM}27968, 'norm(w, "max column sum")', 4.0);
  Eps; Test({LINENUM}27969, 'norm(x, "max column sum")', 24.0);

  Eps; Test({LINENUM}27971, 'norm(u, "max")', 2.0);
  Eps; Test({LINENUM}27972, 'norm(v, "max")', 4.0);
  Eps; Test({LINENUM}27973, 'norm(w, "max")', 2.0);
  Eps; Test({LINENUM}27974, 'norm(x, "max")', 7.0);

  Eps; Test({LINENUM}27976, 'norm(u, "max row sum")', 2.0);
  Eps; Test({LINENUM}27977, 'norm(v, "max row sum")', 4.0);
  Eps; Test({LINENUM}27978, 'norm(w, "max row sum")', 2.0);
  Eps; Test({LINENUM}27979, 'norm(x, "max row sum")', 7.0);

  Eps; Test({LINENUM}27981, 'norm(u, "k", 1)', 2.0);
  Eps; Test({LINENUM}27982, 'norm(u, "k", 2)', 3.0);
  Eps; Test({LINENUM}27983, 'norm(u, "k", 3)', 3.0);
  Eps; Test({LINENUM}27984, 'norm(v, "k", 1)', 4.0);
  Eps; Test({LINENUM}27985, 'norm(v, "k", 2)', 6.0);
  Eps; Test({LINENUM}27986, 'norm(v, "k", 3)', 7.0);
  Eps; Test({LINENUM}27987, 'norm(v, "k", 4)', 7.0);
  Eps; Test({LINENUM}27988, 'norm(w, "k", 1)', 2.0);
  Eps; Test({LINENUM}27989, 'norm(w, "k", 2)', 3.0);
  Eps; Test({LINENUM}27990, 'norm(w, "k", 3)', 4.0);
  Eps; Test({LINENUM}27991, 'norm(w, "k", 4)', 4.0);
  Eps; Test({LINENUM}27992, 'norm(w, "k", 5)', 4.0);
  Eps; Test({LINENUM}27993, 'norm(x, "k", 1)', 7.0);
  Eps; Test({LINENUM}27994, 'norm(x, "k", 2)', 13.0);
  Eps; Test({LINENUM}27995, 'norm(x, "k", 3)', 18.0);
  Eps; Test({LINENUM}27996, 'norm(x, "k", 4)', 22.0);
  Eps; Test({LINENUM}27997, 'norm(x, "k", 5)', 24.0);
  Eps; Test({LINENUM}27998, 'norm(x, "k", 6)', 24.0);

  Test({LINENUM}28000, 'norm(u, "spectral")', failure, 'Cannot compute spectral norm of an object of type "real vector".');
  Test({LINENUM}28001, 'norm(x, "nargle")', failure, 'Unknown norm type "nargle".');

  Eps; Test({LINENUM}28003, 'NormSquared(u)', 5.0);
  Eps; Test({LINENUM}28004, 'NormSquared(v)', 21.0);
  Eps; Test({LINENUM}28005, 'NormSquared(w)', 6.0);
  Eps; Test({LINENUM}28006, 'NormSquared(x)', 130.0);

  Eps; Test({LINENUM}28008, 'normalized(u)', ASO(ASR2(1, 2) / Sqrt(5)));
  Eps; Test({LINENUM}28009, 'normalized(v)', ASO(ASR3(1, 2, -4) / Sqrt(21)));
  Eps; Test({LINENUM}28010, 'normalized(w)', ASO(ASR4(2, 0, 1, -1) / Sqrt(6)));
  Eps; Test({LINENUM}28011, 'normalized(x)', ASO(ASR5(7, 4, -6, 5, 2) / Sqrt(130)));

  // - norms, complex spaces

  Test({LINENUM}28015, 'u ≔ ❨1, 2⋅i❩; v ≔ ❨3, 1 + i, −4❩; w ≔ ❨2, 4 + 5⋅i, 3, −i❩; x ≔ ❨5, 2 + i, 1, 1 − 2⋅i, −4❩;', null);

  Eps; Test({LINENUM}28017, 'norm(u)', Sqrt(5));
  Eps; Test({LINENUM}28018, 'norm(v)', Sqrt(27));
  Eps; Test({LINENUM}28019, 'norm(w)', Sqrt(55));
  Eps; Test({LINENUM}28020, 'norm(x)', Sqrt(52));

  Eps; Test({LINENUM}28022, 'norm(u, "Euclidean")', Sqrt(5));
  Eps; Test({LINENUM}28023, 'norm(v, "Euclidean")', Sqrt(27));
  Eps; Test({LINENUM}28024, 'norm(w, "Euclidean")', Sqrt(55));
  Eps; Test({LINENUM}28025, 'norm(x, "Euclidean")', Sqrt(52));

  Eps; Test({LINENUM}28027, 'norm(u, "Frobenius")', Sqrt(5));
  Eps; Test({LINENUM}28028, 'norm(v, "Frobenius")', Sqrt(27));
  Eps; Test({LINENUM}28029, 'norm(w, "Frobenius")', Sqrt(55));
  Eps; Test({LINENUM}28030, 'norm(x, "Frobenius")', Sqrt(52));

  Eps; Test({LINENUM}28032, 'norm(u, "p", 2)', Sqrt(5));
  Eps; Test({LINENUM}28033, 'norm(v, "p", 2)', Sqrt(27));
  Eps; Test({LINENUM}28034, 'norm(w, "p", 2)', Sqrt(55));
  Eps; Test({LINENUM}28035, 'norm(x, "p", 2)', Sqrt(52));

  Eps; Test({LINENUM}28037, 'norm(u, "p", 3)', cbrt(9));
  Eps; Test({LINENUM}28038, 'norm(v, "p", 3)', cbrt(93.8284271247461901));
  Eps; Test({LINENUM}28039, 'norm(w, "p", 3)', cbrt(298.528093734746796));
  Eps; Test({LINENUM}28040, 'norm(x, "p", 3)', cbrt(212.360679774997897));

  Eps; Test({LINENUM}28042, 'norm(u, "p", 4)', frt(17));
  Eps; Test({LINENUM}28043, 'norm(v, "p", 4)', frt(341));
  Eps; Test({LINENUM}28044, 'norm(w, "p", 4)', frt(1779));
  Eps; Test({LINENUM}28045, 'norm(x, "p", 4)', frt(932));

  Eps; Test({LINENUM}28047, 'norm(u, "p", 1)', 3.0);
  Eps; Test({LINENUM}28048, 'norm(v, "p", 1)', 7 + Sqrt(2));
  Eps; Test({LINENUM}28049, 'norm(w, "p", 1)', 6 + Sqrt(16 + 25));
  Eps; Test({LINENUM}28050, 'norm(x, "p", 1)', 10 + Sqrt(5) + Sqrt(5));

  Eps; Test({LINENUM}28052, 'norm(u, "sum")', 3.0);
  Eps; Test({LINENUM}28053, 'norm(v, "sum")', 7 + Sqrt(2));
  Eps; Test({LINENUM}28054, 'norm(w, "sum")', 6 + Sqrt(16 + 25));
  Eps; Test({LINENUM}28055, 'norm(x, "sum")', 10 + Sqrt(5) + Sqrt(5));

  Eps; Test({LINENUM}28057, 'norm(u, "max column sum")', 3.0);
  Eps; Test({LINENUM}28058, 'norm(v, "max column sum")', 7 + Sqrt(2));
  Eps; Test({LINENUM}28059, 'norm(w, "max column sum")', 6 + Sqrt(16 + 25));
  Eps; Test({LINENUM}28060, 'norm(x, "max column sum")', 10 + Sqrt(5) + Sqrt(5));

  Eps; Test({LINENUM}28062, 'norm(u, "max")', 2.0);
  Eps; Test({LINENUM}28063, 'norm(v, "max")', 4.0);
  Eps; Test({LINENUM}28064, 'norm(w, "max")', Sqrt(16 + 25));
  Eps; Test({LINENUM}28065, 'norm(x, "max")', 5.0);

  Eps; Test({LINENUM}28067, 'norm(u, "max row sum")', 2.0);
  Eps; Test({LINENUM}28068, 'norm(v, "max row sum")', 4.0);
  Eps; Test({LINENUM}28069, 'norm(w, "max row sum")', Sqrt(16 + 25));
  Eps; Test({LINENUM}28070, 'norm(x, "max row sum")', 5.0);

  Eps; Test({LINENUM}28072, 'norm(u, "k", 1)', 2.0);
  Eps; Test({LINENUM}28073, 'norm(u, "k", 2)', 3.0);
  Eps; Test({LINENUM}28074, 'norm(u, "k", 3)', 3.0);
  Eps; Test({LINENUM}28075, 'norm(v, "k", 1)', 4.0);
  Eps; Test({LINENUM}28076, 'norm(v, "k", 2)', 7.0);
  Eps; Test({LINENUM}28077, 'norm(v, "k", 3)', 7.0 + Sqrt(2));
  Eps; Test({LINENUM}28078, 'norm(v, "k", 4)', 7.0 + Sqrt(2));
  Eps; Test({LINENUM}28079, 'norm(w, "k", 1)', Sqrt(16 + 25));
  Eps; Test({LINENUM}28080, 'norm(w, "k", 2)', Sqrt(16 + 25) + 3);
  Eps; Test({LINENUM}28081, 'norm(w, "k", 3)', Sqrt(16 + 25) + 3 + 2);
  Eps; Test({LINENUM}28082, 'norm(w, "k", 4)', Sqrt(16 + 25) + 3 + 2 + 1);
  Eps; Test({LINENUM}28083, 'norm(w, "k", 5)', Sqrt(16 + 25) + 3 + 2 + 1);
  Eps; Test({LINENUM}28084, 'norm(x, "k", 1)', 5.0);
  Eps; Test({LINENUM}28085, 'norm(x, "k", 2)', 5.0 + 4.0);
  Eps; Test({LINENUM}28086, 'norm(x, "k", 3)', 5.0 + 4.0 + Sqrt(5));
  Eps; Test({LINENUM}28087, 'norm(x, "k", 4)', 5.0 + 4.0 + Sqrt(5) + Sqrt(5));
  Eps; Test({LINENUM}28088, 'norm(x, "k", 5)', 5.0 + 4.0 + Sqrt(5) + Sqrt(5) + 1);
  Eps; Test({LINENUM}28089, 'norm(x, "k", 6)', 5.0 + 4.0 + Sqrt(5) + Sqrt(5) + 1);

  Test({LINENUM}28091, 'norm(u, "spectral")', failure, 'Cannot compute spectral norm of an object of type "complex vector".');
  Test({LINENUM}28092, 'norm(x, "nargle")', failure, 'Unknown norm type "nargle".');

  Test({LINENUM}28094, 'NormSquared(u)', 5.0);
  Test({LINENUM}28095, 'NormSquared(v)', 27.0);
  Test({LINENUM}28096, 'NormSquared(w)', 55.0);
  Test({LINENUM}28097, 'NormSquared(x)', 52.0);

  Test({LINENUM}28099, 'normalized(u)', ASO(ASC2(1, 2*ImaginaryUnit) / Sqrt(5)));
  Test({LINENUM}28100, 'normalized(v)', ASO(ASC3(3, 1 + ImaginaryUnit, -4) / Sqrt(27)));
  Test({LINENUM}28101, 'normalized(w)', ASO(ASC4(2, 4 + 5*ImaginaryUnit, 3, -ImaginaryUnit) / Sqrt(55)));
  Test({LINENUM}28102, 'normalized(x)', ASO(ASC5(5, 2 + ImaginaryUnit, 1, 1 - 2*ImaginaryUnit, -4) / Sqrt(52)));

  Test({LINENUM}28104, 'delete(u); delete(v); delete(w); delete(x)', success);

  // - transpose and conjugate transpose

  Test({LINENUM}28108, '❨1, 2, 3❩*', 3, [1, 2, 3]);
  Test({LINENUM}28109, '❨2 + 3⋅i, 5 − i, 7 + 5⋅i❩*', 3, [2 - 3*ImaginaryUnit, 5 + ImaginaryUnit, 7 - 5*ImaginaryUnit]);
  Test({LINENUM}28110, '❨2, i, 5, 1 − i, 6⋅i❩*', 5, [2, -ImaginaryUnit, 5, 1 + ImaginaryUnit, -6*ImaginaryUnit]);

  Test({LINENUM}28112, 'transpose(❨6, 2, 8❩)', 3, [6, 2, 8]);
  Test({LINENUM}28113, 'transpose(❨2 + 3⋅i, 5 − i, 7 + 5⋅i❩)', 3, [2 + 3*ImaginaryUnit, 5 - ImaginaryUnit, 7 + 5*ImaginaryUnit]);
  Test({LINENUM}28114, 'transpose(❨2, i, 5, 1 − i, 6⋅i❩)', 5, [2, ImaginaryUnit, 5, 1 - ImaginaryUnit, 6*ImaginaryUnit]);

  Test({LINENUM}28116, 'ConjugateTranspose(❨6, 2, 8❩)', 3, [6, 2, 8]);
  Test({LINENUM}28117, 'ConjugateTranspose(❨2 + 3⋅i, 5 − i, 7 + 5⋅i❩)', 3, [2 - 3*ImaginaryUnit, 5 + ImaginaryUnit, 7 - 5*ImaginaryUnit]);
  Test({LINENUM}28118, 'ConjugateTranspose(❨2, i, 5, 1 − i, 6⋅i❩)', 5, [2, -ImaginaryUnit, 5, 1 + ImaginaryUnit, -6*ImaginaryUnit]);

  // Operations on matrices

  // - norms, real spaces

  Test({LINENUM}28124, 'A ≔ ❨❨1, 5, −2❩, ❨2, −1, −8❩, ❨0, 1, 3❩❩; B ≔ ❨❨2, 1, −3❩, ❨5, 0, 1❩❩; C ≔ ❨❨1, 5, 2, 3❩, ❨−4, 1, 2, 0❩, ❨3, 2, 7, −1❩, ❨5, 2, 0, 3❩❩;', null);

  Eps; Test({LINENUM}28126, 'norm(A)', Sqrt(109));
  Eps; Test({LINENUM}28127, 'norm(B)', Sqrt(40));
  Eps; Test({LINENUM}28128, 'norm(C)', Sqrt(161));

  Eps; Test({LINENUM}28130, 'norm(A, "Euclidean")', Sqrt(109));
  Eps; Test({LINENUM}28131, 'norm(B, "Euclidean")', Sqrt(40));
  Eps; Test({LINENUM}28132, 'norm(C, "Euclidean")', Sqrt(161));

  Eps; Test({LINENUM}28134, 'norm(A, "Frobenius")', Sqrt(109));
  Eps; Test({LINENUM}28135, 'norm(B, "Frobenius")', Sqrt(40));
  Eps; Test({LINENUM}28136, 'norm(C, "Frobenius")', Sqrt(161));

  Eps; Test({LINENUM}28138, 'norm(A, "p", 2)', Sqrt(109));
  Eps; Test({LINENUM}28139, 'norm(B, "p", 2)', Sqrt(40));
  Eps; Test({LINENUM}28140, 'norm(C, "p", 2)', Sqrt(161));

  Eps; Test({LINENUM}28142, 'norm(A, "p", 3)', cbrt(683));
  Eps; Test({LINENUM}28143, 'norm(B, "p", 3)', cbrt(162));
  Eps; Test({LINENUM}28144, 'norm(C, "p", 3)', cbrt(773));

  Eps; Test({LINENUM}28146, 'norm(A, "p", 4)', frt(4837));
  Eps; Test({LINENUM}28147, 'norm(B, "p", 4)', frt(724));
  Eps; Test({LINENUM}28148, 'norm(C, "p", 4)', frt(4217));

  Eps; Test({LINENUM}28150, 'norm(A, "p", 1)', 23.0);
  Eps; Test({LINENUM}28151, 'norm(B, "p", 1)', 12.0);
  Eps; Test({LINENUM}28152, 'norm(C, "p", 1)', 41.0);

  Eps; Test({LINENUM}28154, 'norm(A, "sum")', 23.0);
  Eps; Test({LINENUM}28155, 'norm(B, "sum")', 12.0);
  Eps; Test({LINENUM}28156, 'norm(C, "sum")', 41.0);

  Eps; Test({LINENUM}28158, 'norm(A, "max")', 8.0);
  Eps; Test({LINENUM}28159, 'norm(B, "max")', 5.0);
  Eps; Test({LINENUM}28160, 'norm(C, "max")', 7.0);

  Eps; Test({LINENUM}28162, 'norm(A, "k", 1)', 8.0);
  Eps; Test({LINENUM}28163, 'norm(A, "k", 2)', 13.0);
  Eps; Test({LINENUM}28164, 'norm(A, "k", 3)', 16.0);
  Eps; Test({LINENUM}28165, 'norm(A, "k", 4)', 18.0);
  Eps; Test({LINENUM}28166, 'norm(A, "k", 5)', 20.0);
  Eps; Test({LINENUM}28167, 'norm(A, "k", 6)', 21.0);
  Eps; Test({LINENUM}28168, 'norm(A, "k", 7)', 22.0);
  Eps; Test({LINENUM}28169, 'norm(A, "k", 8)', 23.0);
  Eps; Test({LINENUM}28170, 'norm(A, "k", 9)', 23.0);
  Eps; Test({LINENUM}28171, 'norm(A, "k", 10)', 23.0);

  Eps; Test({LINENUM}28173, 'norm(B, "k", 1)', 5.0);
  Eps; Test({LINENUM}28174, 'norm(B, "k", 2)', 8.0);
  Eps; Test({LINENUM}28175, 'norm(B, "k", 3)', 10.0);
  Eps; Test({LINENUM}28176, 'norm(B, "k", 4)', 11.0);
  Eps; Test({LINENUM}28177, 'norm(B, "k", 5)', 12.0);
  Eps; Test({LINENUM}28178, 'norm(B, "k", 6)', 12.0);
  Eps; Test({LINENUM}28179, 'norm(B, "k", 7)', 12.0);

  Eps; Test({LINENUM}28181, 'norm(C, "k", 1)', 7.0);
  Eps; Test({LINENUM}28182, 'norm(C, "k", 2)', 12.0);
  Eps; Test({LINENUM}28183, 'norm(C, "k", 3)', 17.0);
  Eps; Test({LINENUM}28184, 'norm(C, "k", 4)', 21.0);
  Eps; Test({LINENUM}28185, 'norm(C, "k", 5)', 24.0);
  Eps; Test({LINENUM}28186, 'norm(C, "k", 6)', 27.0);
  Eps; Test({LINENUM}28187, 'norm(C, "k", 7)', 30.0);
  Eps; Test({LINENUM}28188, 'norm(C, "k", 8)', 32.0);
  Eps; Test({LINENUM}28189, 'norm(C, "k", 9)', 34.0);
  Eps; Test({LINENUM}28190, 'norm(C, "k", 10)', 36.0);
  Eps; Test({LINENUM}28191, 'norm(C, "k", 11)', 38.0);
  Eps; Test({LINENUM}28192, 'norm(C, "k", 12)', 39.0);
  Eps; Test({LINENUM}28193, 'norm(C, "k", 13)', 40.0);
  Eps; Test({LINENUM}28194, 'norm(C, "k", 14)', 41.0);
  Eps; Test({LINENUM}28195, 'norm(C, "k", 15)', 41.0);
  Eps; Test({LINENUM}28196, 'norm(C, "k", 16)', 41.0);
  Eps; Test({LINENUM}28197, 'norm(C, "k", 17)', 41.0);

  Eps; Test({LINENUM}28199, 'norm(A, "max column sum")', 13.0);
  Eps; Test({LINENUM}28200, 'norm(B, "max column sum")', 7.0);
  Eps; Test({LINENUM}28201, 'norm(C, "max column sum")', 13.0);

  Eps; Test({LINENUM}28203, 'norm(A, "max row sum")', 11.0);
  Eps; Test({LINENUM}28204, 'norm(B, "max row sum")', 6.0);
  Eps; Test({LINENUM}28205, 'norm(C, "max row sum")', 13.0);

  Eps; Test({LINENUM}28207, 'norm(A, "spectral")', 9.01391777220033201);
  Eps; Test({LINENUM}28208, 'norm(B, "spectral")', 5.40551056397939965);
  Eps; Test({LINENUM}28209, 'norm(C, "spectral")', 9.56001072060560776);

  // - norms, complex spaces

  Test({LINENUM}28213, 'A ≔ ❨❨2, 1, 1 + i❩, ❨3 − 2⋅i, 2, 4❩, ❨1, 0, i❩❩; B ≔ ❨❨1, 0, i❩, ❨−i, 2, 1❩❩; C ≔ ❨❨2, 1, 3, 2 − 3⋅i❩, ❨3, i, 2, 0❩, ❨1 + 2⋅i, 3, 1 − i, 3❩, ❨0, 2, i, −2⋅i❩❩;', null);

  Eps; Test({LINENUM}28215, 'norm(A)', Sqrt(42));
  Eps; Test({LINENUM}28216, 'norm(B)', Sqrt(8));
  Eps; Test({LINENUM}28217, 'norm(C)', Sqrt(75));

  Eps; Test({LINENUM}28219, 'norm(A, "Euclidean")', Sqrt(42));
  Eps; Test({LINENUM}28220, 'norm(B, "Euclidean")', Sqrt(8));
  Eps; Test({LINENUM}28221, 'norm(C, "Euclidean")', Sqrt(75));

  Eps; Test({LINENUM}28223, 'norm(A, "Frobenius")', Sqrt(42));
  Eps; Test({LINENUM}28224, 'norm(B, "Frobenius")', Sqrt(8));
  Eps; Test({LINENUM}28225, 'norm(C, "Frobenius")', Sqrt(75));

  Eps; Test({LINENUM}28227, 'norm(A, "p", 2)', Sqrt(42));
  Eps; Test({LINENUM}28228, 'norm(B, "p", 2)', Sqrt(8));
  Eps; Test({LINENUM}28229, 'norm(C, "p", 2)', Sqrt(75));

  Eps; Test({LINENUM}28231, 'norm(A, "p", 3)', cbrt(132.700593705778051));
  Eps; Test({LINENUM}28232, 'norm(B, "p", 3)', cbrt(12));
  Eps; Test({LINENUM}28233, 'norm(C, "p", 3)', cbrt(203.880933593276999));

  Eps; Test({LINENUM}28235, 'norm(A, "p", 4)', frt(464));
  Eps; Test({LINENUM}28236, 'norm(B, "p", 4)', frt(20));
  Eps; Test({LINENUM}28237, 'norm(C, "p", 4)', frt(589));

  Eps; Test({LINENUM}28239, 'norm(A, "p", 1)', 11.0 + Sqrt(2) + Sqrt(13));
  Eps; Test({LINENUM}28240, 'norm(B, "p", 1)', 6.0);
  Eps; Test({LINENUM}28241, 'norm(C, "p", 1)', 23.0 + Sqrt(13) + Sqrt(5) + Sqrt(2));

  Eps; Test({LINENUM}28243, 'norm(A, "sum")', 11.0 + Sqrt(2) + Sqrt(13));
  Eps; Test({LINENUM}28244, 'norm(B, "sum")', 6.0);
  Eps; Test({LINENUM}28245, 'norm(C, "sum")', 23.0 + Sqrt(13) + Sqrt(5) + Sqrt(2));

  Eps; Test({LINENUM}28247, 'norm(A, "max")', 4.0);
  Eps; Test({LINENUM}28248, 'norm(B, "max")', 2.0);
  Eps; Test({LINENUM}28249, 'norm(C, "max")', Sqrt(13));

  Eps; Test({LINENUM}28251, 'norm(A, "k", 1)', 4.0);
  Eps; Test({LINENUM}28252, 'norm(A, "k", 2)', 4.0 + Sqrt(13));
  Eps; Test({LINENUM}28253, 'norm(A, "k", 3)', 4.0 + Sqrt(13) + 2);
  Eps; Test({LINENUM}28254, 'norm(A, "k", 4)', 4.0 + Sqrt(13) + 4);
  Eps; Test({LINENUM}28255, 'norm(A, "k", 5)', 4.0 + Sqrt(13) + 4 + Sqrt(2));
  Eps; Test({LINENUM}28256, 'norm(A, "k", 6)', 4.0 + Sqrt(13) + 4 + Sqrt(2) + 1);
  Eps; Test({LINENUM}28257, 'norm(A, "k", 7)', 4.0 + Sqrt(13) + 4 + Sqrt(2) + 2);
  Eps; Test({LINENUM}28258, 'norm(A, "k", 8)', 4.0 + Sqrt(13) + 4 + Sqrt(2) + 3);
  Eps; Test({LINENUM}28259, 'norm(A, "k", 9)', 4.0 + Sqrt(13) + 4 + Sqrt(2) + 3);
  Eps; Test({LINENUM}28260, 'norm(A, "k", 10)', 4.0 + Sqrt(13) + 4 + Sqrt(2) + 3);

  Eps; Test({LINENUM}28262, 'norm(B, "k", 1)', 2.0);
  Eps; Test({LINENUM}28263, 'norm(B, "k", 2)', 3.0);
  Eps; Test({LINENUM}28264, 'norm(B, "k", 3)', 4.0);
  Eps; Test({LINENUM}28265, 'norm(B, "k", 4)', 5.0);
  Eps; Test({LINENUM}28266, 'norm(B, "k", 5)', 6.0);
  Eps; Test({LINENUM}28267, 'norm(B, "k", 6)', 6.0);
  Eps; Test({LINENUM}28268, 'norm(B, "k", 7)', 6.0);

  Eps; Test({LINENUM}28270, 'norm(C, "k", 1)', Sqrt(13));
  Eps; Test({LINENUM}28271, 'norm(C, "k", 2)', Sqrt(13) + 3);
  Eps; Test({LINENUM}28272, 'norm(C, "k", 3)', Sqrt(13) + 6);
  Eps; Test({LINENUM}28273, 'norm(C, "k", 4)', Sqrt(13) + 9);
  Eps; Test({LINENUM}28274, 'norm(C, "k", 5)', Sqrt(13) + 12);
  Eps; Test({LINENUM}28275, 'norm(C, "k", 6)', Sqrt(13) + 12 + Sqrt(5));
  Eps; Test({LINENUM}28276, 'norm(C, "k", 7)', Sqrt(13) + 12 + Sqrt(5) + 2);
  Eps; Test({LINENUM}28277, 'norm(C, "k", 8)', Sqrt(13) + 12 + Sqrt(5) + 4);
  Eps; Test({LINENUM}28278, 'norm(C, "k", 9)', Sqrt(13) + 12 + Sqrt(5) + 6);
  Eps; Test({LINENUM}28279, 'norm(C, "k", 10)', Sqrt(13) + 12 + Sqrt(5) + 8);
  Eps; Test({LINENUM}28280, 'norm(C, "k", 11)', Sqrt(13) + 12 + Sqrt(5) + 8 + Sqrt(2));
  Eps; Test({LINENUM}28281, 'norm(C, "k", 12)', Sqrt(13) + 12 + Sqrt(5) + 8 + Sqrt(2) + 1);
  Eps; Test({LINENUM}28282, 'norm(C, "k", 13)', Sqrt(13) + 12 + Sqrt(5) + 8 + Sqrt(2) + 2);
  Eps; Test({LINENUM}28283, 'norm(C, "k", 14)', Sqrt(13) + 12 + Sqrt(5) + 8 + Sqrt(2) + 3);
  Eps; Test({LINENUM}28284, 'norm(C, "k", 15)', Sqrt(13) + 12 + Sqrt(5) + 8 + Sqrt(2) + 3);
  Eps; Test({LINENUM}28285, 'norm(C, "k", 16)', Sqrt(13) + 12 + Sqrt(5) + 8 + Sqrt(2) + 3);
  Eps; Test({LINENUM}28286, 'norm(C, "k", 17)', Sqrt(13) + 12 + Sqrt(5) + 8 + Sqrt(2) + 3);

  Eps; Test({LINENUM}28288, 'norm(A, "max column sum")', 3 + Sqrt(13));
  Eps; Test({LINENUM}28289, 'norm(B, "max column sum")', 2.0);
  Eps; Test({LINENUM}28290, 'norm(C, "max column sum")', Sqrt(13) + 5);

  Eps; Test({LINENUM}28292, 'norm(A, "max row sum")', 6 + Sqrt(13));
  Eps; Test({LINENUM}28293, 'norm(B, "max row sum")', 4.0);
  Eps; Test({LINENUM}28294, 'norm(C, "max row sum")', 6 + Sqrt(5) + Sqrt(2));

  Eps; Test({LINENUM}28296, 'norm(A, "spectral")', 6.38943232171595646);
  Eps; Test({LINENUM}28297, 'norm(B, "spectral")', 2.61312592975275306);
  Eps; Test({LINENUM}28298, 'norm(C, "spectral")', 7.08203992175305035);

  // - transpose and conjugate transpose

  Test({LINENUM}28302, 'A ≔ ❨❨1, 5, −2❩, ❨2, −1, −8❩, ❨0, 1, 3❩❩; B ≔ ❨❨2, 1, −3❩, ❨5, 0, 1❩❩; C ≔ ❨❨1, 5, 2, 3❩, ❨−4, 1, 2, 0❩, ❨3, 2, 7, −1❩, ❨5, 2, 0, 3❩❩;', null);

  Test({LINENUM}28304, 'A*', 3, [1, 2, 0, 5, -1, 1, -2, -8, 3]);
  Test({LINENUM}28305, 'B*', 2, [2, 5, 1, 0, -3, 1]);
  Test({LINENUM}28306, 'C*', 4, [1, -4, 3, 5, 5, 1, 2, 2, 2, 2, 7, 0, 3, 0, -1, 3]);

  Test({LINENUM}28308, 'ConjugateTranspose(A)', 3, [1, 2, 0, 5, -1, 1, -2, -8, 3]);
  Test({LINENUM}28309, 'ConjugateTranspose(B)', 2, [2, 5, 1, 0, -3, 1]);
  Test({LINENUM}28310, 'ConjugateTranspose(C)', 4, [1, -4, 3, 5, 5, 1, 2, 2, 2, 2, 7, 0, 3, 0, -1, 3]);

  Test({LINENUM}28312, 'transpose(A)', 3, [1, 2, 0, 5, -1, 1, -2, -8, 3]);
  Test({LINENUM}28313, 'transpose(B)', 2, [2, 5, 1, 0, -3, 1]);
  Test({LINENUM}28314, 'transpose(C)', 4, [1, -4, 3, 5, 5, 1, 2, 2, 2, 2, 7, 0, 3, 0, -1, 3]);

  Test({LINENUM}28316, 'A ≔ ❨❨2, 1, 1 + i❩, ❨3 − 2⋅i, 2, 4❩, ❨1, 0, i❩❩; B ≔ ❨❨1, 0, i❩, ❨−i, 2, 1❩❩; C ≔ ❨❨2, 1, 3, 2 − 3⋅i❩, ❨3, i, 2, 0❩, ❨1 + 2⋅i, 3, 1 − i, 3❩, ❨0, 2, i, −2⋅i❩❩;', null);

  Test({LINENUM}28318, 'A*', 3, [2, 3 + 2*ImaginaryUnit, 1, 1, 2, 0, 1 - ImaginaryUnit, 4, -ImaginaryUnit]);
  Test({LINENUM}28319, 'B*', 2, [1, ImaginaryUnit, 0, 2, -ImaginaryUnit, 1]);
  Test({LINENUM}28320, 'C*', 4, [2, 3, 1 - 2*ImaginaryUnit, 0, 1, -ImaginaryUnit, 3, 2, 3, 2, 1 + ImaginaryUnit, -ImaginaryUnit, 2 + 3*ImaginaryUnit, 0, 3, 2*ImaginaryUnit]);

  Test({LINENUM}28322, 'ConjugateTranspose(A)', 3, [2, 3 + 2*ImaginaryUnit, 1, 1, 2, 0, 1 - ImaginaryUnit, 4, -ImaginaryUnit]);
  Test({LINENUM}28323, 'ConjugateTranspose(B)', 2, [1, ImaginaryUnit, 0, 2, -ImaginaryUnit, 1]);
  Test({LINENUM}28324, 'ConjugateTranspose(C)', 4, [2, 3, 1 - 2*ImaginaryUnit, 0, 1, -ImaginaryUnit, 3, 2, 3, 2, 1 + ImaginaryUnit, -ImaginaryUnit, 2 + 3*ImaginaryUnit, 0, 3, 2*ImaginaryUnit]);

  Test({LINENUM}28326, 'transpose(A)', 3, [2, 3 - 2*ImaginaryUnit, 1, 1, 2, 0, 1 + ImaginaryUnit, 4, ImaginaryUnit]);
  Test({LINENUM}28327, 'transpose(B)', 2, [1, -ImaginaryUnit, 0, 2, ImaginaryUnit, 1]);
  Test({LINENUM}28328, 'transpose(C)', 4, [2, 3, 1 + 2*ImaginaryUnit, 0, 1, ImaginaryUnit, 3, 2, 3, 2, 1 - ImaginaryUnit, ImaginaryUnit, 2 - 3*ImaginaryUnit, 0, 3, -2*ImaginaryUnit]);

  Test({LINENUM}28330, 'delete(A); delete(B); delete(C)', success);


  //
  // Special real matrices
  //

  Test({LINENUM}28337, 'A ≔ ❨❨5, 3, 1❩, ❨0, −2, 4❩, ❨−7, 1, 6❩❩; B ≔ ❨❨4, 2, 0❩, ❨−1, 2, 5❩❩; C ≔ ❨❨2, 3, 0, −1❩, ❨2, 4, −5, 5❩, ❨0, 7, 2, 6❩, ❨2, 8, 7, 1❩❩; D ≔ ❨❨1❩, ❨0❩, ❨−1❩, ❨2❩❩;', null);
  Test({LINENUM}28338, 'E ≔ ❨❨4, 8, 1❩❩; F ≔ ❨❨4, 0, 0❩, ❨0, 6, 0❩, ❨0, 0, −2❩❩; g ≔ ❨❨2, 3, 0❩, ❨1, 2, 6❩, ❨3, 2, 0❩❩; h ≔ ❨❨1, 2, 1❩, ❨2, 3, 8❩, ❨1, 6, 2❩❩;', null);
  Test({LINENUM}28339, 'G ≔ ❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩, ❨0, 0, 0❩❩; H ≔ ❨❨3, 2, 0, 3❩, ❨0, 1, 1, 0❩, ❨0, 0, 5, 2❩, ❨0, 0, 0, −2❩❩; I ≔ ❨❨2, 0, 0, 0❩, ❨0, 3, 0, 0❩, ❨0, 2, 5, 0❩, ❨1, 3, 3, 0❩❩;', null);
  Test({LINENUM}28340, 'J ≔ ❨❨2, 2, 0, 0❩, ❨0, 3, 3, 0❩, ❨0, 2, 5, 1❩, ❨1, 3, 3, 0❩❩; K ≔ ❨❨−2, 0, −3, −5❩, ❨0, 0, 0, −1❩❩; L ≔ ❨❨−1, −2, −4, −5❩, ❨−2, −5, −3, −4❩, ❨−8, −6, −9, −7❩❩;', null);
  Test({LINENUM}28341, 'M ≔ ❨❨1, 2, 0, 0❩, ❨0, 2, 3, 0❩, ❨0, 0, 8, 4❩, ❨0, 0, 0, −1❩❩; N ≔ ❨❨0, 1❩, ❨0, 1❩, ❨1, 0❩, ❨0, 1❩❩; O ≔ ❨❨1, 0, 0❩, ❨0, 0, 1❩, ❨0, 1, 0❩❩; P ≔ ❨❨1, 2, 3, 4❩, ❨4, 1, 2, 3❩, ❨3, 4, 1, 2❩, ❨2, 3, 4, 1❩❩;', null);
  Test({LINENUM}28342, 'Q ≔ ❨❨1, 4, 16, 64❩, ❨1, 2, 4, 8❩, ❨1, 3, 9, 27❩, ❨1, 5, 25, 125❩❩; R ≔ ❨❨1, 1, 1, 1❩, ❨1, 2, 3, 4❩, ❨1, 4, 9, 16❩, ❨1, 8, 27, 64❩❩; S ≔ ❨❨4, −2, 7❩, ❨−2, 1, 9❩, ❨7, 9, 3❩❩;', null);
  Test({LINENUM}28343, 'T ≔ ❨❨1, 0, 0❩, ❨0, 1/√2, −1/√2❩, ❨0, 1/√2, 1/√2❩❩; U ≔ ❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 0❩❩; V ≔ ❨❨−1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩; W ≔ ❨❨2, 0, 0❩, ❨2, 2, 0❩, ❨0, 0, 2❩❩;', null);
  Test({LINENUM}28344, 'X ≔ ❨❨5, 2, 7, −6❩, ❨0, 5, 2, 7❩, ❨0, 0, 5, 2❩, ❨0, 0, 0, 5❩❩; Y ≔ ❨❨0, 0, 0, 2❩, ❨0, 0, 3, 0❩, ❨0, −2, 0, 0❩, ❨0, 0, 0, 0❩❩; Z ≔ ❨❨2, 0, 0, 0❩, ❨1, 3, 0, 0❩, ❨0, 0, −1, 0❩, ❨0, 0, 5, 2❩❩;'+' j ≔ ❨❨0, 5, −2, 3❩, ❨−5, 0, −4, −2❩, ❨2, 4, 0, −1❩, ❨−3, 2, 1, 0❩❩;', null);
  Test({LINENUM}28345, 'k ≔ ❨❨1, 1, 1❩, ❨1, 2, 4❩, ❨1, 3, 9❩, ❨1, 4, 16❩❩; l ≔ ❨❨2, −2, 3, 5, 7❩, ❨6, 2, −2, 3, 5❩, ❨−10, 6, 2, −2, 3❩, ❨−1, −10, 6, 2, −2❩❩; m ≔ ❨❨6, 3, −5, 10, 1❩, ❨1, 6, 3, −5, 10❩, ❨10, 1, 6, 3, −5❩, ❨−5, 10, 1, 6, 3❩❩;', null);
  Test({LINENUM}28346, 'n ≔ ❨❨7, 2, −3❩, ❨1, 5, 1❩, ❨−3, 2, 7❩❩; o ≔ ❨❨2, −5, 7, 1❩, ❨5, 3, −2, 2❩, ❨2, −2, 3, 5❩, ❨1, 7, −5, 8❩❩; p ≔ ❨❨0, 0, 0, 1❩, ❨0, 0, 1, 0❩, ❨0, 1, 0, 0❩, ❨1, 0, 0, 0❩❩; q ≔ ❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩;', null);
  Test({LINENUM}28347, 'r ≔ ❨❨1, 1, 1, 1❩, ❨1, 1, −1, −1❩, ❨1, −1, 1, −1❩, ❨1, −1, −1, 1❩❩; s ≔ ❨❨0, 1, 3, 5❩, ❨0, 0, 2, 1❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩; a ≔ ❨❨1, 2, 0, 0❩, ❨5, 2, 3, 0❩, ❨0, 3, 8, 4❩, ❨0, 0, 2, −1❩❩;', null);
  Test({LINENUM}28348, 'b ≔ ❨❨1, 0, 0, 0❩, ❨5, 2, 0, 0❩, ❨0, 3, 8, 0❩, ❨0, 0, 2, −1❩❩; c ≔ ❨❨5, 2, 1, 7❩, ❨2, 1, 7, 9❩, ❨1, 7, 9, 5❩, ❨7, 9, 5, 2❩❩; d ≔ ❨❨−5, 0, 0❩, ❨0, −9, 0❩, ❨0, 0, −1❩❩; f ≔ ❨❨−5, 0, 0❩, ❨0, 0, 0❩, ❨0, 0, −1❩❩;', null);
  Test({LINENUM}28349, 't ≔ ❨❨0, 0❩, ❨0, 0❩❩; u ≔ ❨❨0, 0, 0, 0❩, ❨0, 0, 0, 0❩❩; v ≔ ❨❨1, 0❩, ❨0, 1❩❩; w ≔ ❨❨1❩, ❨0❩❩; x ≔ ❨❨0, 0, 0, 0❩, ❨0, 2, 0, 1❩, ❨0, 0, 3, 1❩, ❨0, 0, 0, 2❩❩; y ≔ ❨❨1, 0, 3, 0, 0❩, ❨0, 1, 2, 0, 0❩, ❨0, 0, 0, 1, 0❩, ❨0, 0, 0, 0, 1❩❩; '+'Ö ≔ ❨❨1, 4, 0❩, ❨0, 0, 1❩, ❨0, 0, 0❩, ❨0, 0, 0❩❩;', null);
  Test({LINENUM}28350, 'z ≔ ❨❨1, 0, 3, 0, 0, 2❩, ❨0, 1, 2, 0, 0, 1❩, ❨0, 0, 0, 1, 0, 1❩, ❨0, 0, 0, 0, 1, 2❩, ❨0, 0, 0, 0, 0, 0❩❩;', null);
  Test({LINENUM}28351, 'Å ≔ ❨❨1, 0, 3, 0, 0, 2❩, ❨0, 1, 2, 1, 0, 1❩, ❨0, 0, 0, 1, 0, 1❩, ❨0, 0, 0, 0, 1, 2❩, ❨0, 0, 0, 0, 0, 0❩❩; å ≔ ❨❨7, 0❩, ❨0, 7❩❩;', null);
  Test({LINENUM}28352, 'Ä ≔ ❨❨1, 0, 3, 0, 0, 2❩, ❨0, 1, 2, 0, 0, 1❩, ❨0, 0, 0, −1, 0, 1❩, ❨0, 0, 0, 0, 1, 2❩, ❨0, 0, 0, 0, 0, 0❩❩; ä ≔ ❨❨0, 0❩, ❨0, 0❩, ❨0, 0❩, ❨0, 0❩❩;', null);

  TestRealMatrixQ({LINENUM}28354, 'IsMatrix', RealMatrixNames);
  TestRealMatrixQ({LINENUM}28355, 'IsRow', 'E');
  TestRealMatrixQ({LINENUM}28356, 'IsCol', 'Dw');
  TestRealMatrixQ({LINENUM}28357, 'IsSquare', 'ACFghHIJMOPQRSTUVWXYZjnopqrsabcdftvxå');
  TestRealMatrixQ({LINENUM}28358, 'IsIdentity', 'qv');
  TestRealMatrixQ({LINENUM}28359, 'IsZeroMatrix', 'tuä');
  TestRealMatrixQ({LINENUM}28360, 'IsDiagonal', 'FGUVqdftuvwåä');
  TestRealMatrixQ({LINENUM}28361, 'IsAntidiagonal', 'Ypt');
  TestRealMatrixQ({LINENUM}28362, 'IsReversal', 'p');
  TestRealMatrixQ({LINENUM}28363, 'IsUpperTriangular', 'EFGHKMUVXqsdftuvwxyÖzÅÄåä');
  TestRealMatrixQ({LINENUM}28364, 'IsLowerTriangular', 'DFGIUVWZqbdftuvwåä');
  TestRealMatrixQ({LINENUM}28365, 'IsTriangular', 'EFGHKMUVXqsdftuvwDFGIUVWZqbdftuvwxyÖzÅÄåä');
  TestRealMatrixQ({LINENUM}28366, 'IsRowEchelonForm', 'EFGHKMUVXqsdtuvwyÖzÅÄåä');
  TestRealMatrixQ({LINENUM}28367, 'IsReducedRowEchelonForm', 'GUqtuvwyÖzä');
  TestRealMatrixQ({LINENUM}28368, 'IsScalar', 'qtvå');
  TestRealMatrixQ({LINENUM}28369, 'IsSymmetric', 'FOSUVpqrcdftvå');
  TestRealMatrixQ({LINENUM}28370, 'IsSkewSymmetric', 'jt');
  TestRealMatrixQ({LINENUM}28371, 'IsHermitian', 'FOSUVpqrcdftvå');
  TestRealMatrixQ({LINENUM}28372, 'IsSkewHermitian', 'jt');
  TestRealMatrixQ({LINENUM}28373, 'IsOrthogonal', 'OTVpqv');
  TestRealMatrixQ({LINENUM}28374, 'IsUnitary', 'OTVpqv');
  TestRealMatrixQ({LINENUM}28375, 'IsNormal', 'FOPSTUVpqrcdfjtvå');
  TestRealMatrixQ({LINENUM}28376, 'IsBinary', 'GNOUpqtuvwä');
  TestRealMatrixQ({LINENUM}28377, 'IsPermutation', 'Opqv');
  TestRealMatrixQ({LINENUM}28378, 'IsCirculant', 'EPämqtuåv');
  TestRealMatrixQ({LINENUM}28379, 'IsToeplitz', 'DEGPäXlmqtuåvw');
  TestRealMatrixQ({LINENUM}28380, 'IsHankel', 'DEOäpcftuåvw');
  TestRealMatrixQ({LINENUM}28381, 'IsUpperHessenberg', 'BEFGKHMOTUVWXYZÅÄÖqsabdftuwyzåävx');
  TestRealMatrixQ({LINENUM}28382, 'IsLowerHessenberg', 'BDGFgIJMNOTUVWZÖqabdftuwåäv');
  TestRealMatrixQ({LINENUM}28383, 'IsTridiagonal', 'FMOTUVWZqabdftåv');
  TestRealMatrixQ({LINENUM}28384, 'IsUpperBidiagonal', 'FMUVqdftåv');
  TestRealMatrixQ({LINENUM}28385, 'IsLowerBidiagonal', 'FUVWZqbdftåv');
  TestRealMatrixQ({LINENUM}28386, 'IsBidiagonal', 'FMUVqdftåvWZb');
  TestRealMatrixQ({LINENUM}28387, 'IsCentrosymmetric', 'npqtvå');
  TestRealMatrixQ({LINENUM}28388, 'IsVandermonde', 'Qk');
  TestRealMatrixQ({LINENUM}28389, 'IsIdempotent', 'Uqtv');
  TestRealMatrixQ({LINENUM}28390, 'IsInvolution', 'OVpqv');
  TestRealMatrixQ({LINENUM}28391, 'IsPositiveDefinite', 'qvå');
  TestRealMatrixQ({LINENUM}28392, 'IsPositiveSemidefinite', 'Uqtvå');
  TestRealMatrixQ({LINENUM}28393, 'IsNegativeDefinite', 'd');
  TestRealMatrixQ({LINENUM}28394, 'IsNegativeSemidefinite', 'dft');
  TestRealMatrixQ({LINENUM}28395, 'IsIndefinite', 'FOSVprc');
  TestRealMatrixQ({LINENUM}28396, 'IsNilpotent', 'st');
  TestRealMatrixQ({LINENUM}28397, 'IsPositive', 'EhPQRkc');
  TestRealMatrixQ({LINENUM}28398, 'IsNonNegative', 'EghGIJNOPäQRUWkpqsctuåvwxyÖzÅ');
  TestRealMatrixQ({LINENUM}28399, 'IsNegative', 'L');
  TestRealMatrixQ({LINENUM}28400, 'IsNonPositive', 'KLädftu');
  TestRealMatrixQ({LINENUM}28401, 'IsZero', 'tuä');
  TestRealMatrixQ({LINENUM}28402, 'IsNonZero', 'ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖabcdfghjklmnopqrsvwxyzå');
  TestRealMatrixQ({LINENUM}28403, 'IsDiagonallyDominant', 'FTUVWnqdftåvx');
  TestRealMatrixQ({LINENUM}28404, 'IsStrictlyDiagonallyDominant', 'FVnqdåv');

  TestRealMatrixQImplies({LINENUM}28406, 'IsUpperTriangular', 'IsTriangular');
  TestRealMatrixQImplies({LINENUM}28407, 'IsLowerTriangular', 'IsTriangular');

  TestRealMatrixQImplies({LINENUM}28409, 'IsUpperTriangular', 'IsUpperHessenberg');
  TestRealMatrixQImplies({LINENUM}28410, 'IsLowerTriangular', 'IsLowerHessenberg');

  TestRealMatrixQImplies({LINENUM}28412, 'IsUpperBidiagonal', 'IsBidiagonal');
  TestRealMatrixQImplies({LINENUM}28413, 'IsLowerBidiagonal', 'IsBidiagonal');

  TestRealMatrixQImplies({LINENUM}28415, 'IsBidiagonal', 'IsTridiagonal');

  TestRealMatrixQImplies({LINENUM}28417, 'IsRowEchelonForm', 'IsUpperTriangular');
  TestRealMatrixQImplies({LINENUM}28418, 'IsReducedRowEchelonForm', 'IsRowEchelonForm');

  TestRealMatrixQImplies({LINENUM}28420, 'IsIdentity', 'IsScalar');
  TestRealMatrixQImplies({LINENUM}28421, 'IsScalar', 'IsDiagonal');

  TestRealMatrixQImplies({LINENUM}28423, 'IsReversal', 'IsAntidiagonal');

  TestRealMatrixQImplies({LINENUM}28425, 'IsCirculant', 'IsToeplitz');

  TestRealMatrixQImplies({LINENUM}28427, 'IsIdentity', 'IsPermutation');
  TestRealMatrixQImplies({LINENUM}28428, 'IsReversal', 'IsPermutation');
  TestRealMatrixQImplies({LINENUM}28429, 'IsPermutation', 'IsBinary');

  TestRealMatrixQImplies({LINENUM}28431, 'IsPositiveDefinite', 'IsPositiveSemidefinite');
  TestRealMatrixQImplies({LINENUM}28432, 'IsNegativeDefinite', 'IsNegativeSemidefinite');

  TestRealMatrixQImplies({LINENUM}28434, 'IsPositiveDefinite', 'IsSymmetric');
  TestRealMatrixQImplies({LINENUM}28435, 'IsNegativeDefinite', 'IsSymmetric');
  TestRealMatrixQImplies({LINENUM}28436, 'IsPositiveSemidefinite', 'IsSymmetric');
  TestRealMatrixQImplies({LINENUM}28437, 'IsNegativeSemidefinite', 'IsSymmetric');
  TestRealMatrixQImplies({LINENUM}28438, 'IsIndefinite', 'IsSymmetric');

  TestRealMatrixQImplies({LINENUM}28440, 'IsSymmetric', 'IsNormal');
  TestRealMatrixQImplies({LINENUM}28441, 'IsSkewSymmetric', 'IsNormal');
  TestRealMatrixQImplies({LINENUM}28442, 'IsOrthogonal', 'IsNormal');

  TestRealMatrixQImplies({LINENUM}28444, 'IsSymmetric', 'IsSquare');
  TestRealMatrixQImplies({LINENUM}28445, 'IsSkewSymmetric', 'IsSquare');
  TestRealMatrixQImplies({LINENUM}28446, 'IsOrthogonal', 'IsSquare');
  TestRealMatrixQImplies({LINENUM}28447, 'IsNormal', 'IsSquare');
  TestRealMatrixQImplies({LINENUM}28448, 'IsIdentity', 'IsSquare');
  TestRealMatrixQImplies({LINENUM}28449, 'IsReversal', 'IsSquare');
  TestRealMatrixQImplies({LINENUM}28450, 'IsScalar', 'IsSquare');
  TestRealMatrixQImplies({LINENUM}28451, 'IsNilpotent', 'IsSquare');

  TestRealMatrixQImplies({LINENUM}28453, 'IsPositive', 'IsNonNegative');
  TestRealMatrixQImplies({LINENUM}28454, 'IsNegative', 'IsNonPositive');

  TestRealMatrixQImplies({LINENUM}28456, 'IsStrictlyDiagonallyDominant', 'IsDiagonallyDominant');

  TestRealMatrixQImplies({LINENUM}28458, 'IsRow', 'IsToeplitz');
  TestRealMatrixQImplies({LINENUM}28459, 'IsRow', 'IsCirculant');
  TestRealMatrixQImplies({LINENUM}28460, 'IsRow', 'IsHankel');
  TestRealMatrixQImplies({LINENUM}28461, 'IsRow', 'IsUpperTriangular');

  TestRealMatrixQImplies({LINENUM}28463, 'IsCol', 'IsToeplitz');
  TestRealMatrixQImplies({LINENUM}28464, 'IsCol', 'IsHankel');
  TestRealMatrixQImplies({LINENUM}28465, 'IsCol', 'IsLowerTriangular');

  Test({LINENUM}28467, 'delete(A); delete(B); delete(C); delete(D); delete(E); delete(F); delete(g); delete(h); delete(G); delete(H); delete(I); delete(J); delete(K); delete(L); delete(M)', success);
  Test({LINENUM}28468, 'delete(N), delete(O); delete(P); delete(Q); delete(R); delete(S); delete(T); delete(U); delete(V); delete(W); delete(X); delete(Y); delete(Z); delete(j); delete(k)', success);
  Test({LINENUM}28469, 'delete(l); delete(m); delete(n); delete(o); delete(p); delete(q); delete(r); delete(s); delete(a); delete(b); delete(c); delete(f); delete(t); delete(u); delete(v)', success);
  Test({LINENUM}28470, 'delete(w); delete(x); delete(y); delete(z); delete(Å); delete(Ä); delete(Ö); delete(å); delete(ä)', success);

  Test({LINENUM}28472, 'IsIdentity(❨❨1, 0.00002❩, ❨0, 1❩❩)', False);
  Test({LINENUM}28473, 'IsIdentity(❨❨1, 0.00002❩, ❨0, 1❩❩, 1E-6)', False);
  Test({LINENUM}28474, 'IsIdentity(❨❨1, 0.00002❩, ❨0, 1❩❩, 1E-5)', False);
  Test({LINENUM}28475, 'IsIdentity(❨❨1, 0.00002❩, ❨0, 1❩❩, 1E-4)', True);
  Test({LINENUM}28476, 'IsIdentity(❨❨1, 0.00002❩, ❨0, 1❩❩, 1E-3)', True);

  Test({LINENUM}28478, 'IsIdentity(❨❨1.002, 0.00002❩, ❨0, 1❩❩)', False);
  Test({LINENUM}28479, 'IsIdentity(❨❨1.002, 0.00002❩, ❨0, 1❩❩, 1E-6)', False);
  Test({LINENUM}28480, 'IsIdentity(❨❨1.002, 0.00002❩, ❨0, 1❩❩, 1E-5)', False);
  Test({LINENUM}28481, 'IsIdentity(❨❨1.002, 0.00002❩, ❨0, 1❩❩, 1E-4)', False);
  Test({LINENUM}28482, 'IsIdentity(❨❨1.002, 0.00002❩, ❨0, 1❩❩, 1E-3)', False);
  Test({LINENUM}28483, 'IsIdentity(❨❨1.002, 0.00002❩, ❨0, 1❩❩, 1E-2)', True);
  Test({LINENUM}28484, 'IsIdentity(❨❨1.002, 0.00002❩, ❨0, 1❩❩, 1E-1)', True);

  Test({LINENUM}28486, 'IsZeroMatrix(❨❨0, 0, 0❩, ❨0, 0, 0.02❩❩)', False);
  Test({LINENUM}28487, 'IsZeroMatrix(❨❨0, 0, 0❩, ❨0, 0, 0.02❩❩, 1E-3)', False);
  Test({LINENUM}28488, 'IsZeroMatrix(❨❨0, 0, 0❩, ❨0, 0, 0.02❩❩, 1E-2)', False);
  Test({LINENUM}28489, 'IsZeroMatrix(❨❨0, 0, 0❩, ❨0, 0, 0.02❩❩, 1E-1)', True);

  Test({LINENUM}28491, 'IsDiagonal(❨❨6, 0, 0❩, ❨0, 7, 0❩, ❨0, 0.0002, 2❩❩)', False);
  Test({LINENUM}28492, 'IsDiagonal(❨❨6, 0, 0❩, ❨0, 7, 0❩, ❨0, 0.0002, 2❩❩, 1E-5)', False);
  Test({LINENUM}28493, 'IsDiagonal(❨❨6, 0, 0❩, ❨0, 7, 0❩, ❨0, 0.0002, 2❩❩, 1E-4)', False);
  Test({LINENUM}28494, 'IsDiagonal(❨❨6, 0, 0❩, ❨0, 7, 0❩, ❨0, 0.0002, 2❩❩, 1E-3)', True);
  Test({LINENUM}28495, 'IsDiagonal(❨❨6, 0, 0❩, ❨0, 7, 0❩, ❨0, 0.0002, 2❩❩, 1E-2)', True);

  Test({LINENUM}28497, 'IsAntidiagonal(❨❨0, 0, 4❩, ❨0, 3, 0.000002❩, ❨1, 0, 0❩❩)', False);
  Test({LINENUM}28498, 'IsAntidiagonal(❨❨0, 0, 4❩, ❨0, 3, 0.000002❩, ❨1, 0, 0❩❩, 1E-7)', False);
  Test({LINENUM}28499, 'IsAntidiagonal(❨❨0, 0, 4❩, ❨0, 3, 0.000002❩, ❨1, 0, 0❩❩, 1E-6)', False);
  Test({LINENUM}28500, 'IsAntidiagonal(❨❨0, 0, 4❩, ❨0, 3, 0.000002❩, ❨1, 0, 0❩❩, 1E-5)', True);
  Test({LINENUM}28501, 'IsAntidiagonal(❨❨0, 0, 4❩, ❨0, 3, 0.000002❩, ❨1, 0, 0❩❩, 1E-4)', True);

  Test({LINENUM}28503, 'IsReversal(❨❨0, 0, 1❩, ❨0, 1, 0❩, ❨1.0002, 0, 0❩❩)', False);
  Test({LINENUM}28504, 'IsReversal(❨❨0, 0, 1❩, ❨0, 1, 0❩, ❨1.0002, 0, 0❩❩, 1E-5)', False);
  Test({LINENUM}28505, 'IsReversal(❨❨0, 0, 1❩, ❨0, 1, 0❩, ❨1.0002, 0, 0❩❩, 1E-4)', False);
  Test({LINENUM}28506, 'IsReversal(❨❨0, 0, 1❩, ❨0, 1, 0❩, ❨1.0002, 0, 0❩❩, 1E-3)', True);
  Test({LINENUM}28507, 'IsReversal(❨❨0, 0, 1❩, ❨0, 1, 0❩, ❨1.0002, 0, 0❩❩, 1E-2)', True);

  Test({LINENUM}28509, 'IsUpperTriangular(❨❨3, 5, 1, 2❩, ❨0, 4, 1, 6❩, ❨0, 0, 1, 1❩, ❨0, 0.0002, 0, 7❩❩)', False);
  Test({LINENUM}28510, 'IsUpperTriangular(❨❨3, 5, 1, 2❩, ❨0, 4, 1, 6❩, ❨0, 0, 1, 1❩, ❨0, 0.0002, 0, 7❩❩, 1E-5)', False);
  Test({LINENUM}28511, 'IsUpperTriangular(❨❨3, 5, 1, 2❩, ❨0, 4, 1, 6❩, ❨0, 0, 1, 1❩, ❨0, 0.0002, 0, 7❩❩, 1E-4)', False);
  Test({LINENUM}28512, 'IsUpperTriangular(❨❨3, 5, 1, 2❩, ❨0, 4, 1, 6❩, ❨0, 0, 1, 1❩, ❨0, 0.0002, 0, 7❩❩, 1E-3)', True);
  Test({LINENUM}28513, 'IsUpperTriangular(❨❨3, 5, 1, 2❩, ❨0, 4, 1, 6❩, ❨0, 0, 1, 1❩, ❨0, 0.0002, 0, 7❩❩, 1E-2)', True);

  Test({LINENUM}28515, 'IsLowerTriangular(❨❨1, 0, 0❩, ❨1, 6, 0.02❩, ❨2, 6, 2❩❩)', False);
  Test({LINENUM}28516, 'IsLowerTriangular(❨❨1, 0, 0❩, ❨1, 6, 0.02❩, ❨2, 6, 2❩❩, 1E-3)', False);
  Test({LINENUM}28517, 'IsLowerTriangular(❨❨1, 0, 0❩, ❨1, 6, 0.02❩, ❨2, 6, 2❩❩, 1E-2)', False);
  Test({LINENUM}28518, 'IsLowerTriangular(❨❨1, 0, 0❩, ❨1, 6, 0.02❩, ❨2, 6, 2❩❩, 1E-1)', True);

  Test({LINENUM}28520, 'IsTriangular(❨❨3, 5, 1, 2❩, ❨0, 4, 1, 6❩, ❨0, 0, 1, 1❩, ❨0, 0.0002, 0, 7❩❩)', False);
  Test({LINENUM}28521, 'IsTriangular(❨❨3, 5, 1, 2❩, ❨0, 4, 1, 6❩, ❨0, 0, 1, 1❩, ❨0, 0.0002, 0, 7❩❩, 1E-5)', False);
  Test({LINENUM}28522, 'IsTriangular(❨❨3, 5, 1, 2❩, ❨0, 4, 1, 6❩, ❨0, 0, 1, 1❩, ❨0, 0.0002, 0, 7❩❩, 1E-4)', False);
  Test({LINENUM}28523, 'IsTriangular(❨❨3, 5, 1, 2❩, ❨0, 4, 1, 6❩, ❨0, 0, 1, 1❩, ❨0, 0.0002, 0, 7❩❩, 1E-3)', True);
  Test({LINENUM}28524, 'IsTriangular(❨❨3, 5, 1, 2❩, ❨0, 4, 1, 6❩, ❨0, 0, 1, 1❩, ❨0, 0.0002, 0, 7❩❩, 1E-2)', True);

  Test({LINENUM}28526, 'IsTriangular(❨❨1, 0, 0❩, ❨1, 6, 0.02❩, ❨2, 6, 2❩❩)', False);
  Test({LINENUM}28527, 'IsTriangular(❨❨1, 0, 0❩, ❨1, 6, 0.02❩, ❨2, 6, 2❩❩, 1E-3)', False);
  Test({LINENUM}28528, 'IsTriangular(❨❨1, 0, 0❩, ❨1, 6, 0.02❩, ❨2, 6, 2❩❩, 1E-2)', False);
  Test({LINENUM}28529, 'IsTriangular(❨❨1, 0, 0❩, ❨1, 6, 0.02❩, ❨2, 6, 2❩❩, 1E-1)', True);

  Test({LINENUM}28531, 'IsRowEchelonForm(❨❨5, 2, 3, 1❩, ❨0.002, 0, 1, 7❩, ❨0, 0, 0, 2❩❩)', False);
  Test({LINENUM}28532, 'IsRowEchelonForm(❨❨5, 2, 3, 1❩, ❨0.002, 0, 1, 7❩, ❨0, 0, 0, 2❩❩, 1E-4)', False);
  Test({LINENUM}28533, 'IsRowEchelonForm(❨❨5, 2, 3, 1❩, ❨0.002, 0, 1, 7❩, ❨0, 0, 0, 2❩❩, 1E-3)', False);
  Test({LINENUM}28534, 'IsRowEchelonForm(❨❨5, 2, 3, 1❩, ❨0.002, 0, 1, 7❩, ❨0, 0, 0, 2❩❩, 1E-2)', True);
  Test({LINENUM}28535, 'IsRowEchelonForm(❨❨5, 2, 3, 1❩, ❨0.002, 0, 1, 7❩, ❨0, 0, 0, 2❩❩, 1E-1)', True);

  Test({LINENUM}28537, 'IsReducedRowEchelonForm(❨❨1, 3, 0.002, 0❩, ❨0, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩)', False);
  Test({LINENUM}28538, 'IsReducedRowEchelonForm(❨❨1, 3, 0.002, 0❩, ❨0, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩, 1E-4)', False);
  Test({LINENUM}28539, 'IsReducedRowEchelonForm(❨❨1, 3, 0.002, 0❩, ❨0, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩, 1E-3)', False);
  Test({LINENUM}28540, 'IsReducedRowEchelonForm(❨❨1, 3, 0.002, 0❩, ❨0, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩, 1E-2)', True);
  Test({LINENUM}28541, 'IsReducedRowEchelonForm(❨❨1, 3, 0.002, 0❩, ❨0, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩, 1E-1)', True);

  Test({LINENUM}28543, 'IsReducedRowEchelonForm(❨❨1.02, 0, 0.002, 0❩, ❨0, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩)', False);
  Test({LINENUM}28544, 'IsReducedRowEchelonForm(❨❨1.02, 0, 0.002, 0❩, ❨0, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩, 1E-4)', False);
  Test({LINENUM}28545, 'IsReducedRowEchelonForm(❨❨1.02, 0, 0.002, 0❩, ❨0, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩, 1E-3)', False);
  Test({LINENUM}28546, 'IsReducedRowEchelonForm(❨❨1.02, 0, 0.002, 0❩, ❨0, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩, 1E-2)', False);
  Test({LINENUM}28547, 'IsReducedRowEchelonForm(❨❨1.02, 0, 0.002, 0❩, ❨0, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩, 1E-1)', True);

  Test({LINENUM}28549, 'IsScalar(❨❨2.55, 0, 0❩, ❨0, 2.56, 0❩, ❨0, 0, 2.55❩❩)', False);
  Test({LINENUM}28550, 'IsScalar(❨❨2.55, 0, 0❩, ❨0, 2.56, 0❩, ❨0, 0, 2.55❩❩, 1E-3)', False);
  Test({LINENUM}28551, 'IsScalar(❨❨2.55, 0, 0❩, ❨0, 2.56, 0❩, ❨0, 0, 2.55❩❩, 1E-2)', True);
  Test({LINENUM}28552, 'IsScalar(❨❨2.55, 0, 0❩, ❨0, 2.56, 0❩, ❨0, 0, 2.55❩❩, 1E-1)', True);

  Test({LINENUM}28554, 'IsScalar(❨❨2.55, 0, 0❩, ❨0, 2.55, 0.02❩, ❨0, 0, 2.55❩❩)', False);
  Test({LINENUM}28555, 'IsScalar(❨❨2.55, 0, 0❩, ❨0, 2.55, 0.02❩, ❨0, 0, 2.55❩❩, 1E-3)', False);
  Test({LINENUM}28556, 'IsScalar(❨❨2.55, 0, 0❩, ❨0, 2.55, 0.02❩, ❨0, 0, 2.55❩❩, 1E-2)', False);
  Test({LINENUM}28557, 'IsScalar(❨❨2.55, 0, 0❩, ❨0, 2.55, 0.02❩, ❨0, 0, 2.55❩❩, 1E-1)', True);

  Test({LINENUM}28559, 'IsSymmetric(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩)', False);
  Test({LINENUM}28560, 'IsSymmetric(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩, 1E-3)', False);
  Test({LINENUM}28561, 'IsSymmetric(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩, 1E-2)', True);
  Test({LINENUM}28562, 'IsSymmetric(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩, 1E-1)', True);

  Test({LINENUM}28564, 'IsSkewSymmetric(❨❨0, 2.65, −4.32, 0.47❩, ❨−2.64, 0, −1.16, −7.02❩, ❨4.31, 1.16, 0, 0.43❩, ❨−0.48, 7.02, −0.43, 0❩❩)', False);
  Test({LINENUM}28565, 'IsSkewSymmetric(❨❨0, 2.65, −4.32, 0.47❩, ❨−2.64, 0, −1.16, −7.02❩, ❨4.31, 1.16, 0, 0.43❩, ❨−0.48, 7.02, −0.43, 0❩❩, 1E-3)', False);
  Test({LINENUM}28566, 'IsSkewSymmetric(❨❨0, 2.65, −4.32, 0.47❩, ❨−2.64, 0, −1.16, −7.02❩, ❨4.31, 1.16, 0, 0.43❩, ❨−0.48, 7.02, −0.43, 0❩❩, 1E-2)', True);
  Test({LINENUM}28567, 'IsSkewSymmetric(❨❨0, 2.65, −4.32, 0.47❩, ❨−2.64, 0, −1.16, −7.02❩, ❨4.31, 1.16, 0, 0.43❩, ❨−0.48, 7.02, −0.43, 0❩❩, 1E-1)', True);

  Test({LINENUM}28569, 'IsHermitian(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩)', False);
  Test({LINENUM}28570, 'IsHermitian(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩, 1E-3)', False);
  Test({LINENUM}28571, 'IsHermitian(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩, 1E-2)', True);
  Test({LINENUM}28572, 'IsHermitian(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩, 1E-1)', True);

  Test({LINENUM}28574, 'IsSkewHermitian(❨❨0, 2.65, −4.32, 0.47❩, ❨−2.64, 0, −1.16, −7.02❩, ❨4.31, 1.16, 0, 0.43❩, ❨−0.48, 7.02, −0.43, 0❩❩)', False);
  Test({LINENUM}28575, 'IsSkewHermitian(❨❨0, 2.65, −4.32, 0.47❩, ❨−2.64, 0, −1.16, −7.02❩, ❨4.31, 1.16, 0, 0.43❩, ❨−0.48, 7.02, −0.43, 0❩❩, 1E-3)', False);
  Test({LINENUM}28576, 'IsSkewHermitian(❨❨0, 2.65, −4.32, 0.47❩, ❨−2.64, 0, −1.16, −7.02❩, ❨4.31, 1.16, 0, 0.43❩, ❨−0.48, 7.02, −0.43, 0❩❩, 1E-2)', True);
  Test({LINENUM}28577, 'IsSkewHermitian(❨❨0, 2.65, −4.32, 0.47❩, ❨−2.64, 0, −1.16, −7.02❩, ❨4.31, 1.16, 0, 0.43❩, ❨−0.48, 7.02, −0.43, 0❩❩, 1E-1)', True);

  Test({LINENUM}28579, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, 0.8775, −0.4794❩, ❨0, 0.4794, 0.8775❩❩)', False);
  Test({LINENUM}28580, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, 0.8775, −0.4794❩, ❨0, 0.4794, 0.8775❩❩, 1E-5)', False);
  Test({LINENUM}28581, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, 0.8775, −0.4794❩, ❨0, 0.4794, 0.8775❩❩, 1E-4)', False);
  Test({LINENUM}28582, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, 0.8775, −0.4794❩, ❨0, 0.4794, 0.8775❩❩, 1E-3)', True);
  Test({LINENUM}28583, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, 0.8775, −0.4794❩, ❨0, 0.4794, 0.8775❩❩, 1E-2)', True);

  Test({LINENUM}28585, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.8775, −0.4794❩, ❨0, 0.4794, 0.8775❩❩)', False);
  Test({LINENUM}28586, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.8775, −0.4794❩, ❨0, 0.4794, 0.8775❩❩, 1E-5)', False);
  Test({LINENUM}28587, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.8775, −0.4794❩, ❨0, 0.4794, 0.8775❩❩, 1E-4)', False);
  Test({LINENUM}28588, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.8775, −0.4794❩, ❨0, 0.4794, 0.8775❩❩, 1E-3)', True);
  Test({LINENUM}28589, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.8775, −0.4794❩, ❨0, 0.4794, 0.8775❩❩, 1E-2)', True);

  Test({LINENUM}28591, 'IsNormal(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩)', False);
  Test({LINENUM}28592, 'IsNormal(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩, 1E-3)', False);
  Test({LINENUM}28593, 'IsNormal(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩, 1E-2)', True);
  Test({LINENUM}28594, 'IsNormal(❨❨2.44, 7.70, 9.13, 12.98❩, ❨7.71, 10.24, 10.62, 9.48❩, ❨9.14, 10.62, 2.24, 7.98❩, ❨12.98, 9.48, 7.99, 10.42❩❩, 1E-1)', True);

  Test({LINENUM}28596, 'IsBinary(❨❨0.0001, 1.0019, 0.000001, 0.999999❩, ❨1.0002, 0.99998, −0.0003, 0.0001❩, ❨−0.00045, 0.9995, 0.0004, 1.0005❩❩)', False);
  Test({LINENUM}28597, 'IsBinary(❨❨0.0001, 1.0019, 0.000001, 0.999999❩, ❨1.0002, 0.99998, −0.0003, 0.0001❩, ❨−0.00045, 0.9995, 0.0004, 1.0005❩❩, 1E-5)', False);
  Test({LINENUM}28598, 'IsBinary(❨❨0.0001, 1.0019, 0.000001, 0.999999❩, ❨1.0002, 0.99998, −0.0003, 0.0001❩, ❨−0.00045, 0.9995, 0.0004, 1.0005❩❩, 1E-4)', False);
  Test({LINENUM}28599, 'IsBinary(❨❨0.0001, 1.0019, 0.000001, 0.999999❩, ❨1.0002, 0.99998, −0.0003, 0.0001❩, ❨−0.00045, 0.9995, 0.0004, 1.0005❩❩, 1E-3)', False);
  Test({LINENUM}28600, 'IsBinary(❨❨0.0001, 1.0019, 0.000001, 0.999999❩, ❨1.0002, 0.99998, −0.0003, 0.0001❩, ❨−0.00045, 0.9995, 0.0004, 1.0005❩❩, 1E-2)', True);
  Test({LINENUM}28601, 'IsBinary(❨❨0.0001, 1.0019, 0.000001, 0.999999❩, ❨1.0002, 0.99998, −0.0003, 0.0001❩, ❨−0.00045, 0.9995, 0.0004, 1.0005❩❩, 1E-1)', True);

  Test({LINENUM}28603, 'IsPermutation(❨❨0, 0, 1.001, 0❩, ❨0, 1, 0, 0❩, ❨0, 0, 0, 1❩, ❨1, 0.002, 0, 0❩❩)', False);
  Test({LINENUM}28604, 'IsPermutation(❨❨0, 0, 1.001, 0❩, ❨0, 1, 0, 0❩, ❨0, 0, 0, 1❩, ❨1, 0.002, 0, 0❩❩, 1E-3)', False);
  Test({LINENUM}28605, 'IsPermutation(❨❨0, 0, 1.001, 0❩, ❨0, 1, 0, 0❩, ❨0, 0, 0, 1❩, ❨1, 0.002, 0, 0❩❩, 1E-2)', True);
  Test({LINENUM}28606, 'IsPermutation(❨❨0, 0, 1.001, 0❩, ❨0, 1, 0, 0❩, ❨0, 0, 0, 1❩, ❨1, 0.002, 0, 0❩❩, 1E-1)', True);

  Test({LINENUM}28608, 'IsCirculant(❨❨6, 2, 3, 7❩, ❨7, 6, 2, 3❩, ❨3, 7, 6, 2❩, ❨2, 3.002, 7, 6❩❩)', False);
  Test({LINENUM}28609, 'IsCirculant(❨❨6, 2, 3, 7❩, ❨7, 6, 2, 3❩, ❨3, 7, 6, 2❩, ❨2, 3.002, 7, 6❩❩, 1E-4)', False);
  Test({LINENUM}28610, 'IsCirculant(❨❨6, 2, 3, 7❩, ❨7, 6, 2, 3❩, ❨3, 7, 6, 2❩, ❨2, 3.002, 7, 6❩❩, 1E-3)', False);
  Test({LINENUM}28611, 'IsCirculant(❨❨6, 2, 3, 7❩, ❨7, 6, 2, 3❩, ❨3, 7, 6, 2❩, ❨2, 3.002, 7, 6❩❩, 1E-2)', True);
  Test({LINENUM}28612, 'IsCirculant(❨❨6, 2, 3, 7❩, ❨7, 6, 2, 3❩, ❨3, 7, 6, 2❩, ❨2, 3.002, 7, 6❩❩, 1E-1)', True);

  Test({LINENUM}28614, 'IsToeplitz(❨❨4, 1, 2, 5❩, ❨8, 4, 1.002, 2❩, ❨6, 8, 4, 1❩, ❨9, 6, 8, 4❩❩)', False);
  Test({LINENUM}28615, 'IsToeplitz(❨❨4, 1, 2, 5❩, ❨8, 4, 1.002, 2❩, ❨6, 8, 4, 1❩, ❨9, 6, 8, 4❩❩, 1E-4)', False);
  Test({LINENUM}28616, 'IsToeplitz(❨❨4, 1, 2, 5❩, ❨8, 4, 1.002, 2❩, ❨6, 8, 4, 1❩, ❨9, 6, 8, 4❩❩, 1E-3)', False);
  Test({LINENUM}28617, 'IsToeplitz(❨❨4, 1, 2, 5❩, ❨8, 4, 1.002, 2❩, ❨6, 8, 4, 1❩, ❨9, 6, 8, 4❩❩, 1E-2)', True);
  Test({LINENUM}28618, 'IsToeplitz(❨❨4, 1, 2, 5❩, ❨8, 4, 1.002, 2❩, ❨6, 8, 4, 1❩, ❨9, 6, 8, 4❩❩, 1E-1)', True);

  Test({LINENUM}28620, 'IsHankel(❨❨4, 2, 1.002, 3❩, ❨2.003, 1, 3, 7❩, ❨1, 3, 6.999, 5❩, ❨3, 7, 5, 0❩❩)', False);
  Test({LINENUM}28621, 'IsHankel(❨❨4, 2, 1.002, 3❩, ❨2.003, 1, 3, 7❩, ❨1, 3, 6.999, 5❩, ❨3, 7, 5, 0❩❩, 1E-4)', False);
  Test({LINENUM}28622, 'IsHankel(❨❨4, 2, 1.002, 3❩, ❨2.003, 1, 3, 7❩, ❨1, 3, 6.999, 5❩, ❨3, 7, 5, 0❩❩, 1E-3)', False);
  Test({LINENUM}28623, 'IsHankel(❨❨4, 2, 1.002, 3❩, ❨2.003, 1, 3, 7❩, ❨1, 3, 6.999, 5❩, ❨3, 7, 5, 0❩❩, 1E-2)', True);
  Test({LINENUM}28624, 'IsHankel(❨❨4, 2, 1.002, 3❩, ❨2.003, 1, 3, 7❩, ❨1, 3, 6.999, 5❩, ❨3, 7, 5, 0❩❩, 1E-1)', True);

  Test({LINENUM}28626, 'IsUpperHessenberg(❨❨1, 5, 2, 3, 6❩, ❨2, 5, 7, 3, 6❩, ❨−0.001, 1, 4, 5, 6❩, ❨0.003, 0.002, 2, 1, 2❩, ❨0.001, 0.002, −0.001, 6, 2❩❩)', False);
  Test({LINENUM}28627, 'IsUpperHessenberg(❨❨1, 5, 2, 3, 6❩, ❨2, 5, 7, 3, 6❩, ❨−0.001, 1, 4, 5, 6❩, ❨0.003, 0.002, 2, 1, 2❩, ❨0.001, 0.002, −0.001, 6, 2❩❩, 1E-4)', False);
  Test({LINENUM}28628, 'IsUpperHessenberg(❨❨1, 5, 2, 3, 6❩, ❨2, 5, 7, 3, 6❩, ❨−0.001, 1, 4, 5, 6❩, ❨0.003, 0.002, 2, 1, 2❩, ❨0.001, 0.002, −0.001, 6, 2❩❩, 1E-3)', False);
  Test({LINENUM}28629, 'IsUpperHessenberg(❨❨1, 5, 2, 3, 6❩, ❨2, 5, 7, 3, 6❩, ❨−0.001, 1, 4, 5, 6❩, ❨0.003, 0.002, 2, 1, 2❩, ❨0.001, 0.002, −0.001, 6, 2❩❩, 1E-2)', True);
  Test({LINENUM}28630, 'IsUpperHessenberg(❨❨1, 5, 2, 3, 6❩, ❨2, 5, 7, 3, 6❩, ❨−0.001, 1, 4, 5, 6❩, ❨0.003, 0.002, 2, 1, 2❩, ❨0.001, 0.002, −0.001, 6, 2❩❩, 1E-1)', True);

  Test({LINENUM}28632, 'IsLowerHessenberg(❨❨1, 4, 0.003, -0.001❩, ❨5, 2, 3, 0.002❩, ❨4, 6, 2, 2❩, ❨6, 3, 1, 5❩❩)', False);
  Test({LINENUM}28633, 'IsLowerHessenberg(❨❨1, 4, 0.003, -0.001❩, ❨5, 2, 3, 0.002❩, ❨4, 6, 2, 2❩, ❨6, 3, 1, 5❩❩, 1E-4)', False);
  Test({LINENUM}28634, 'IsLowerHessenberg(❨❨1, 4, 0.003, -0.001❩, ❨5, 2, 3, 0.002❩, ❨4, 6, 2, 2❩, ❨6, 3, 1, 5❩❩, 1E-3)', False);
  Test({LINENUM}28635, 'IsLowerHessenberg(❨❨1, 4, 0.003, -0.001❩, ❨5, 2, 3, 0.002❩, ❨4, 6, 2, 2❩, ❨6, 3, 1, 5❩❩, 1E-2)', True);
  Test({LINENUM}28636, 'IsLowerHessenberg(❨❨1, 4, 0.003, -0.001❩, ❨5, 2, 3, 0.002❩, ❨4, 6, 2, 2❩, ❨6, 3, 1, 5❩❩, 1E-1)', True);

  Test({LINENUM}28638, 'IsTridiagonal(❨❨1, 3, 0.02, 0.01❩, ❨5, 2, 1, 0.01❩, ❨0.03, 1, 3, 2❩, ❨−0.01, 0.02, 1, 2❩❩)', False);
  Test({LINENUM}28639, 'IsTridiagonal(❨❨1, 3, 0.02, 0.01❩, ❨5, 2, 1, 0.01❩, ❨0.03, 1, 3, 2❩, ❨−0.01, 0.02, 1, 2❩❩, 1E-3)', False);
  Test({LINENUM}28640, 'IsTridiagonal(❨❨1, 3, 0.02, 0.01❩, ❨5, 2, 1, 0.01❩, ❨0.03, 1, 3, 2❩, ❨−0.01, 0.02, 1, 2❩❩, 1E-2)', False);
  Test({LINENUM}28641, 'IsTridiagonal(❨❨1, 3, 0.02, 0.01❩, ❨5, 2, 1, 0.01❩, ❨0.03, 1, 3, 2❩, ❨−0.01, 0.02, 1, 2❩❩, 1E-1)', True);

  Test({LINENUM}28643, 'IsUpperBidiagonal(❨❨1, 3, 0.02, 0.01❩, ❨−0.01, 2, 1, 0.01❩, ❨0.03, 0.01, 3, 2❩, ❨−0.01, 0.02, 0.01, 2❩❩)', False);
  Test({LINENUM}28644, 'IsUpperBidiagonal(❨❨1, 3, 0.02, 0.01❩, ❨−0.01, 2, 1, 0.01❩, ❨0.03, 0.01, 3, 2❩, ❨−0.01, 0.02, 0.01, 2❩❩, 1E-3)', False);
  Test({LINENUM}28645, 'IsUpperBidiagonal(❨❨1, 3, 0.02, 0.01❩, ❨−0.01, 2, 1, 0.01❩, ❨0.03, 0.01, 3, 2❩, ❨−0.01, 0.02, 0.01, 2❩❩, 1E-2)', False);
  Test({LINENUM}28646, 'IsUpperBidiagonal(❨❨1, 3, 0.02, 0.01❩, ❨−0.01, 2, 1, 0.01❩, ❨0.03, 0.01, 3, 2❩, ❨−0.01, 0.02, 0.01, 2❩❩, 1E-1)', True);

  Test({LINENUM}28648, 'IsLowerBidiagonal(❨❨1, 0.01, 0.02, 0.01❩, ❨5, 2, 0.02, 0.01❩, ❨0.03, 1, 3, −0.03❩, ❨−0.01, 0.02, 1, 2❩❩)', False);
  Test({LINENUM}28649, 'IsLowerBidiagonal(❨❨1, 0.01, 0.02, 0.01❩, ❨5, 2, 0.02, 0.01❩, ❨0.03, 1, 3, −0.03❩, ❨−0.01, 0.02, 1, 2❩❩, 1E-3)', False);
  Test({LINENUM}28650, 'IsLowerBidiagonal(❨❨1, 0.01, 0.02, 0.01❩, ❨5, 2, 0.02, 0.01❩, ❨0.03, 1, 3, −0.03❩, ❨−0.01, 0.02, 1, 2❩❩, 1E-2)', False);
  Test({LINENUM}28651, 'IsLowerBidiagonal(❨❨1, 0.01, 0.02, 0.01❩, ❨5, 2, 0.02, 0.01❩, ❨0.03, 1, 3, −0.03❩, ❨−0.01, 0.02, 1, 2❩❩, 1E-1)', True);

  Test({LINENUM}28653, 'IsBidiagonal(❨❨1, 0.01, 0.02, 0.01❩, ❨5, 2, 0.02, 0.01❩, ❨0.03, 1, 3, −0.03❩, ❨−0.01, 0.02, 1, 2❩❩)', False);
  Test({LINENUM}28654, 'IsBidiagonal(❨❨1, 0.01, 0.02, 0.01❩, ❨5, 2, 0.02, 0.01❩, ❨0.03, 1, 3, −0.03❩, ❨−0.01, 0.02, 1, 2❩❩, 1E-3)', False);
  Test({LINENUM}28655, 'IsBidiagonal(❨❨1, 0.01, 0.02, 0.01❩, ❨5, 2, 0.02, 0.01❩, ❨0.03, 1, 3, −0.03❩, ❨−0.01, 0.02, 1, 2❩❩, 1E-2)', False);
  Test({LINENUM}28656, 'IsBidiagonal(❨❨1, 0.01, 0.02, 0.01❩, ❨5, 2, 0.02, 0.01❩, ❨0.03, 1, 3, −0.03❩, ❨−0.01, 0.02, 1, 2❩❩, 1E-1)', True);

  Test({LINENUM}28658, 'IsBidiagonal(❨❨1, 3, 0.02, 0.01❩, ❨−0.01, 2, 1, 0.01❩, ❨0.03, 0.01, 3, 2❩, ❨−0.01, 0.02, 0.01, 2❩❩)', False);
  Test({LINENUM}28659, 'IsBidiagonal(❨❨1, 3, 0.02, 0.01❩, ❨−0.01, 2, 1, 0.01❩, ❨0.03, 0.01, 3, 2❩, ❨−0.01, 0.02, 0.01, 2❩❩, 1E-3)', False);
  Test({LINENUM}28660, 'IsBidiagonal(❨❨1, 3, 0.02, 0.01❩, ❨−0.01, 2, 1, 0.01❩, ❨0.03, 0.01, 3, 2❩, ❨−0.01, 0.02, 0.01, 2❩❩, 1E-2)', False);
  Test({LINENUM}28661, 'IsBidiagonal(❨❨1, 3, 0.02, 0.01❩, ❨−0.01, 2, 1, 0.01❩, ❨0.03, 0.01, 3, 2❩, ❨−0.01, 0.02, 0.01, 2❩❩, 1E-1)', True);

  Test({LINENUM}28663, 'IsCentrosymmetric(❨❨2, 4, 7❩, ❨5, 1, 5.002❩, ❨7, 4, 2❩❩)', False);
  Test({LINENUM}28664, 'IsCentrosymmetric(❨❨2, 4, 7❩, ❨5, 1, 5.002❩, ❨7, 4, 2❩❩, 1E-4)', False);
  Test({LINENUM}28665, 'IsCentrosymmetric(❨❨2, 4, 7❩, ❨5, 1, 5.002❩, ❨7, 4, 2❩❩, 1E-3)', False);
  Test({LINENUM}28666, 'IsCentrosymmetric(❨❨2, 4, 7❩, ❨5, 1, 5.002❩, ❨7, 4, 2❩❩, 1E-2)', True);
  Test({LINENUM}28667, 'IsCentrosymmetric(❨❨2, 4, 7❩, ❨5, 1, 5.002❩, ❨7, 4, 2❩❩, 1E-1)', True);

  Test({LINENUM}28669, 'IsVandermonde(❨❨1, 2, 4, 8❩, ❨1.001, −1, 1, −1❩, ❨1, 3.002, 9, 27❩, ❨1, 5, 24.998, 125❩, ❨1, 1, 1, 1.002❩❩)', False);
  Test({LINENUM}28670, 'IsVandermonde(❨❨1, 2, 4, 8❩, ❨1.001, −1, 1, −1❩, ❨1, 3.002, 9, 27❩, ❨1, 5, 24.998, 125❩, ❨1, 1, 1, 1.002❩❩, 1E-3)', False);
  Test({LINENUM}28671, 'IsVandermonde(❨❨1, 2, 4, 8❩, ❨1.001, −1, 1, −1❩, ❨1, 3.002, 9, 27❩, ❨1, 5, 24.998, 125❩, ❨1, 1, 1, 1.002❩❩, 1E-2)', False);
  Test({LINENUM}28672, 'IsVandermonde(❨❨1, 2, 4, 8❩, ❨1.001, −1, 1, −1❩, ❨1, 3.002, 9, 27❩, ❨1, 5, 24.998, 125❩, ❨1, 1, 1, 1.002❩❩, 1E-1)', True);

  Test({LINENUM}28674, 'IsIdempotent(❨❨1, 0, 0.002, 0❩, ❨0, 1, 0, 0❩, ❨−0.002, 0, 1, 0.003❩, ❨−0.002, 0, 0.003, 0❩❩)', False);
  Test({LINENUM}28675, 'IsIdempotent(❨❨1, 0, 0.002, 0❩, ❨0, 1, 0, 0❩, ❨−0.002, 0, 1, 0.003❩, ❨−0.002, 0, 0.003, 0❩❩, 1E-4)', False);
  Test({LINENUM}28676, 'IsIdempotent(❨❨1, 0, 0.002, 0❩, ❨0, 1, 0, 0❩, ❨−0.002, 0, 1, 0.003❩, ❨−0.002, 0, 0.003, 0❩❩, 1E-3)', False);
  Test({LINENUM}28677, 'IsIdempotent(❨❨1, 0, 0.002, 0❩, ❨0, 1, 0, 0❩, ❨−0.002, 0, 1, 0.003❩, ❨−0.002, 0, 0.003, 0❩❩, 1E-2)', True);
  Test({LINENUM}28678, 'IsIdempotent(❨❨1, 0, 0.002, 0❩, ❨0, 1, 0, 0❩, ❨−0.002, 0, 1, 0.003❩, ❨−0.002, 0, 0.003, 0❩❩, 1E-1)', True);

  Test({LINENUM}28680, 'IsInvolution(❨❨1, 0, 0.002, 0❩, ❨0, 1, 0, 0❩, ❨−0.002, 0, 1, 0.003❩, ❨−0.002, 0, 0.003, −1.001❩❩)', False);
  Test({LINENUM}28681, 'IsInvolution(❨❨1, 0, 0.002, 0❩, ❨0, 1, 0, 0❩, ❨−0.002, 0, 1, 0.003❩, ❨−0.002, 0, 0.003, −1.001❩❩, 1E-4)', False);
  Test({LINENUM}28682, 'IsInvolution(❨❨1, 0, 0.002, 0❩, ❨0, 1, 0, 0❩, ❨−0.002, 0, 1, 0.003❩, ❨−0.002, 0, 0.003, −1.001❩❩, 1E-3)', False);
  Test({LINENUM}28683, 'IsInvolution(❨❨1, 0, 0.002, 0❩, ❨0, 1, 0, 0❩, ❨−0.002, 0, 1, 0.003❩, ❨−0.002, 0, 0.003, −1.001❩❩, 1E-2)', True);
  Test({LINENUM}28684, 'IsInvolution(❨❨1, 0, 0.002, 0❩, ❨0, 1, 0, 0❩, ❨−0.002, 0, 1, 0.003❩, ❨−0.002, 0, 0.003, −1.001❩❩, 1E-1)', True);

  Test({LINENUM}28686, 'IsPositive(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, 1❩❩)', True);
  Test({LINENUM}28687, 'IsPositive(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, 1❩❩, 1E-6)', True);
  Test({LINENUM}28688, 'IsPositive(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, 1❩❩, 1E-5)', True);
  Test({LINENUM}28689, 'IsPositive(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, 1❩❩, 1E-4)', True);
  Test({LINENUM}28690, 'IsPositive(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, 1❩❩, 1E-3)', False);
  Test({LINENUM}28691, 'IsPositive(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, 1❩❩, 1E-2)', False);
  Test({LINENUM}28692, 'IsPositive(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, 1❩❩, 1E-1)', False);

  Test({LINENUM}28694, 'IsNonNegative(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, −0.0002❩❩)', False);
  Test({LINENUM}28695, 'IsNonNegative(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, −0.0002❩❩, 1E-6)', False);
  Test({LINENUM}28696, 'IsNonNegative(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, −0.0002❩❩, 1E-5)', False);
  Test({LINENUM}28697, 'IsNonNegative(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, −0.0002❩❩, 1E-4)', False);
  Test({LINENUM}28698, 'IsNonNegative(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, −0.0002❩❩, 1E-3)', True);
  Test({LINENUM}28699, 'IsNonNegative(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, −0.0002❩❩, 1E-2)', True);
  Test({LINENUM}28700, 'IsNonNegative(❨❨3, 1, 5, 2❩, ❨0.0002, 2, 3, −0.0002❩❩, 1E-1)', True);

  Test({LINENUM}28702, 'IsZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩)', False);
  Test({LINENUM}28703, 'IsZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-6)', False);
  Test({LINENUM}28704, 'IsZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-5)', False);
  Test({LINENUM}28705, 'IsZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-4)', False);
  Test({LINENUM}28706, 'IsZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-3)', True);
  Test({LINENUM}28707, 'IsZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-2)', True);
  Test({LINENUM}28708, 'IsZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-1)', True);

  Test({LINENUM}28710, 'IsNonZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩)', True);
  Test({LINENUM}28711, 'IsNonZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-6)', True);
  Test({LINENUM}28712, 'IsNonZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-5)', True);
  Test({LINENUM}28713, 'IsNonZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-4)', True);
  Test({LINENUM}28714, 'IsNonZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-3)', False);
  Test({LINENUM}28715, 'IsNonZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-2)', False);
  Test({LINENUM}28716, 'IsNonZero(❨❨0.0002, 0.0001, −0.0003, 0.0000052❩, ❨−0.00013, 0.00042, 0.00021, 0.000051❩❩, 1E-1)', False);

  Test({LINENUM}28718, 'IsNegative(❨❨−4, −5, −2, −1❩, ❨−0.003, −4, −2, −1❩❩)', True);
  Test({LINENUM}28719, 'IsNegative(❨❨−4, −5, −2, −1❩, ❨−0.003, −4, −2, −1❩❩, 1E-5)', True);
  Test({LINENUM}28720, 'IsNegative(❨❨−4, −5, −2, −1❩, ❨−0.003, −4, −2, −1❩❩, 1E-4)', True);
  Test({LINENUM}28721, 'IsNegative(❨❨−4, −5, −2, −1❩, ❨−0.003, −4, −2, −1❩❩, 1E-3)', True);
  Test({LINENUM}28722, 'IsNegative(❨❨−4, −5, −2, −1❩, ❨−0.003, −4, −2, −1❩❩, 1E-2)', False);
  Test({LINENUM}28723, 'IsNegative(❨❨−4, −5, −2, −1❩, ❨−0.003, −4, −2, −1❩❩, 1E-1)', False);

  Test({LINENUM}28725, 'IsNonPositive(❨❨−4, −5, −2, −1❩, ❨0.003, −4, −2, −1❩❩)', False);
  Test({LINENUM}28726, 'IsNonPositive(❨❨−4, −5, −2, −1❩, ❨0.003, −4, −2, −1❩❩, 1E-5)', False);
  Test({LINENUM}28727, 'IsNonPositive(❨❨−4, −5, −2, −1❩, ❨0.003, −4, −2, −1❩❩, 1E-4)', False);
  Test({LINENUM}28728, 'IsNonPositive(❨❨−4, −5, −2, −1❩, ❨0.003, −4, −2, −1❩❩, 1E-3)', False);
  Test({LINENUM}28729, 'IsNonPositive(❨❨−4, −5, −2, −1❩, ❨0.003, −4, −2, −1❩❩, 1E-2)', True);
  Test({LINENUM}28730, 'IsNonPositive(❨❨−4, −5, −2, −1❩, ❨0.003, −4, −2, −1❩❩, 1E-1)', True);


  //
  // Special complex matrices
  //

  Test({LINENUM}28737, 'A ≔ ❨❨2, i, 1❩, ❨3, −1, −i❩, ❨0, 1, 2❩❩; B ≔ ❨❨1, 0, i❩, ❨0, 1, −2❩❩; C ≔ ❨❨1, 2❩, ❨i, −i❩, ❨0, 1❩❩; D ≔ ❨❨1❩, ❨0❩, ❨i❩, ❨1❩❩; E ≔ ❨❨2, 0, i❩❩;', null);
  Test({LINENUM}28738, 'F ≔ ComplexMatrix(❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩); G ≔ ❨❨2, 5, 2❩, ❨0, i, 2❩, ❨0, 0, 5❩❩; H ≔ ❨❨i, 0, 0❩, ❨3, i, 0❩, ❨7, 4, −1❩❩; I ≔ ❨❨1, 0, 0❩, ❨0, 0, −i❩, ❨0, i, 0❩❩; J ≔ ComplexMatrix(❨❨1, 0, 0❩, ❨0, 0, 1❩, ❨0, 1, 0❩❩);', null);
  Test({LINENUM}28739, 'K ≔ ❨❨2, 1, 0, 0❩, ❨0, 3, i, 0❩, ❨0, 0, 1, 3❩, ❨0, 0, 0, i❩❩; L ≔ ❨❨i, 0, 0, 0❩, ❨1, −i, 0, 0❩, ❨0, 1, 1, 0❩, ❨0, 0, 3, −1❩❩; M ≔ ❨❨1, 0, 0, 0❩, ❨1, 2, 3, 0❩, ❨0, 0, 6, 1❩, ❨0, 0, 5, i❩❩; N ≔ ❨❨2, 2, 0, 0❩, ❨3, 6, 1, 0❩, ❨0, 5, 4, 1❩, ❨1, 2, i, 2❩❩;', null);
  Test({LINENUM}28740, 'O ≔ ❨❨2, 2, 3, 2❩, ❨4, 1, 1, 1❩, ❨0, 6, i, 2❩, ❨0, 0, 0, 1❩❩; P ≔ ❨❨1, 0, 2, i❩, ❨0, 1, 2, 3❩, ❨2, 2, 5, i❩, ❨i, 3, i, 3❩❩; Q ≔ ❨❨2, i, 1, 3❩, ❨−i, 5, 0, i❩, ❨1, 0, 9, 1❩, ❨3, −i, 1, 2❩❩; '+'R ≔ ComplexMatrix(❨❨0, 0, 0, 1❩, ❨0, 0, 1, 0❩, ❨0, 1, 0, 0❩, ❨1, 0, 0, 0❩❩);', null);
  Test({LINENUM}28741, 'S ≔ ❨❨2, 1, 0, 0❩, ❨0, 6, 5, i❩, ❨0, 0, 3, 3❩, ❨0, 0, 0, 2❩❩; T ≔ ❨❨3, 2, 0, 1❩, ❨0, 0, i, 5❩, ❨0, 0, 0, 5❩, ❨0, 0, 0, 0❩❩; U ≔ ❨❨3, 2, 0, 1❩, ❨0, 0, 0, 0❩, ❨0, 0, i, 5❩, ❨0, 0, 0, 5❩❩; V ≔ ❨❨5, 2, 1, 2❩, ❨0, 6, i, −i❩, ❨0, 0, 0, 1❩❩;', null);
  Test({LINENUM}28742, 'W ≔ ❨❨1, 0, i, 0❩, ❨0, 1, 4, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩; X ≔ ❨❨1, 1, i, 0❩, ❨0, 1, 4, 0❩, ❨0, 0, 0, 1❩, ❨0, 0, 0, 0❩❩; Y ≔ ❨❨1, 0, i, 0❩, ❨0, 1, 4, 0❩, ❨0, 0, 0, i❩, ❨0, 0, 0, 0❩❩; Z ≔ ❨❨1, 0, 5, 0❩, ❨0, 1, i, 0❩, ❨0, 0, 0, 1❩❩;', null);
  Test({LINENUM}28743, 'a ≔ ❨❨1, 0, 5, 0❩, ❨0, 1, i, i❩, ❨0, 0, 0, 1❩❩; b ≔ ❨❨1, 0, 5, 0❩, ❨0, 1, i, 0❩, ❨0, 0, 0, i❩❩; c ≔ ComplexMatrix(❨❨1, 0, 0❩, ❨0, 1/√2, −1/√2❩, ❨0, 1/√2, 1/√2❩❩); d ≔ ❨❨1, i, 5, 2❩, ❨i, 5, 2, 7❩, ❨5, 2, 7, 1❩, ❨2, 7, 1, 0❩❩;', null);
  Test({LINENUM}28744, 'f ≔ ❨❨2, 1, i, 3❩, ❨1, i, 3, 2❩, ❨i, 3, 2, 1❩, ❨3, 2, 1, i❩❩; g ≔ ❨❨5, 1, 2, i❩, ❨8, 5, 1, 2❩, ❨3, 8, 5, 1❩, ❨7, 3, 8, 5❩❩; h ≔ ❨❨i, 2, 5, 9❩, ❨9, i, 2, 5❩, ❨5, 9, i, 2❩, ❨2, 5, 9, i❩❩; j ≔ ❨❨0, 2, 5, i❩, ❨−2, 0, 1, −1❩, ❨−5, −1, 0, 7❩, ❨−i, 1, −7, 0❩❩;', null);
  Test({LINENUM}28745, 'k ≔ ❨❨0, 3, 1, i❩, ❨−3, 0, −i, 5❩, ❨−1, −i, 0, −2❩, ❨i, −5, 2, 0❩❩; l ≔ ❨❨1, 0, 0❩, ❨0, i/√2, −1/√2❩, ❨0, i/√2, 1/√2❩❩; m ≔ ❨❨1, 0, 0❩, ❨0, i, √2❩, ❨0, −√2, i❩❩; n ≔ ❨❨i, 0, 0❩, ❨0, i, 0❩, ❨0, 0, i❩❩;', null);
  Test({LINENUM}28746, 'p ≔ ComplexMatrix(❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 0❩❩); q ≔ ComplexMatrix(❨❨−1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩); r ≔ ❨❨1, 2, 3❩, ❨4, i, 4❩, ❨3, 2, 1❩❩; s ≔ ComplexMatrix(❨❨0, 1, 0❩, ❨0, 0, 2❩, ❨0, 0, 0❩❩); t ≔ ComplexMatrix(❨❨3, 0, 5❩, ❨0, 1, 2❩, ❨5, 2, 7❩❩);', null);
  Test({LINENUM}28747, 'u ≔ ❨❨−3, i, 1❩, ❨−i, −1, 1❩, ❨1, 1, −3❩❩; v ≔ ❨❨−1, 0, i❩, ❨0, −1, −1❩, ❨−i, −1, 1❩❩; w ≔ ❨❨1, 0, i❩, ❨0, 1, −1❩, ❨−i, −1, 2❩❩; x ≔ ❨❨−2, i, 1❩, ❨−i, −1, 1❩, ❨1, 1, −3❩❩; ë ≔ ❨❨0, 0❩❩;', null);
  Test({LINENUM}28748, 'y ≔ ❨❨1, 3, i❩, ❨3, −2, 1❩, ❨−i, 1, 3❩❩; z ≔ ❨❨2, 0, i❩, ❨0, 1, −1❩, ❨−i, −1, 2❩❩; o ≔ ❨❨1, 2, 4, 3❩, ❨0, 5, i, 7❩, ❨7, i, 5, 0❩, ❨3, 4, 2, 1❩❩; Å ≔ ❨❨1, 2, 4, 8❩, ❨1, i, −1, −i❩, ❨1, 5, 25, 125❩, ❨1, −1, 1, −1❩❩; ü ≔ ComplexMatrix(❨❨0❩, ❨0❩, ❨0❩, ❨0❩❩);', null);
  Test({LINENUM}28749, 'Ä ≔ ComplexMatrix(❨❨2, 5, 7❩, ❨6, 2, 5❩, ❨8, 4, 3❩❩); Ö ≔ ComplexMatrix(❨❨−2, −3, −1❩, ❨−4, −5, −1❩, ❨−1, −1, −5❩❩); å ≔ ComplexMatrix(❨❨5, 1, 2❩, ❨1, −6, 1❩, ❨1, 2, 3❩❩); ä ≔ ComplexMatrix(❨❨7, 3, 1❩, ❨1, 5, 0❩, ❨1, 1, −3❩❩); '+'ö ≔ ComplexMatrix(❨❨0, 0, 0❩, ❨0, 0, 0❩, ❨0, 0, 0❩❩);', null);

  TestComplexMatrixQ({LINENUM}28751, 'IsMatrix', ComplexMatrixNames);
  TestComplexMatrixQ({LINENUM}28752, 'IsRow', 'Eë');
  TestComplexMatrixQ({LINENUM}28753, 'IsCol', 'Dü');
  TestComplexMatrixQ({LINENUM}28754, 'IsSquare', 'AFGHIJKLMNOPQRSTUWXYcdfghjklmnpqrstuvwxyzoÅÄÖåäö');
  TestComplexMatrixQ({LINENUM}28755, 'IsIdentity', 'F');
  TestComplexMatrixQ({LINENUM}28756, 'IsZeroMatrix', 'ëüö');
  TestComplexMatrixQ({LINENUM}28757, 'IsDiagonal', 'Fnpqëüö');
  TestComplexMatrixQ({LINENUM}28758, 'IsAntidiagonal', 'Rö');
  TestComplexMatrixQ({LINENUM}28759, 'IsReversal', 'R');
  TestComplexMatrixQ({LINENUM}28760, 'IsUpperTriangular', 'BEFGKSTUVWXYZabnpqsëüö');
  TestComplexMatrixQ({LINENUM}28761, 'IsLowerTriangular', 'DFHLnpqëüö');
  TestComplexMatrixQ({LINENUM}28762, 'IsTriangular', 'BEFGKSTUVWXYZabnpqsëüöDFHLnpqëüö');
  TestComplexMatrixQ({LINENUM}28763, 'IsRowEchelonForm', 'BEFGKSTVWXYZabnpqsëüö');
  TestComplexMatrixQ({LINENUM}28764, 'IsReducedRowEchelonForm', 'BFWZpëüö');
  TestComplexMatrixQ({LINENUM}28765, 'IsScalar', 'Fnö');
  TestComplexMatrixQ({LINENUM}28766, 'IsSymmetric', 'FJPRdfnpqtö');
  TestComplexMatrixQ({LINENUM}28767, 'IsSkewSymmetric', 'jö');
  TestComplexMatrixQ({LINENUM}28768, 'IsHermitian', 'FIJQRpqtuvwxyzö');
  TestComplexMatrixQ({LINENUM}28769, 'IsSkewHermitian', 'knö');
  TestComplexMatrixQ({LINENUM}28770, 'IsOrthogonal', 'FJRcmq');
  TestComplexMatrixQ({LINENUM}28771, 'IsUnitary', 'FIJRclnq');
  TestComplexMatrixQ({LINENUM}28772, 'IsNormal', 'FIJQRchklmnpqtuvwxyzö');
  TestComplexMatrixQ({LINENUM}28773, 'IsBinary', 'FJRpëüö');
  TestComplexMatrixQ({LINENUM}28774, 'IsPermutation', 'FJR');
  TestComplexMatrixQ({LINENUM}28775, 'IsCirculant', 'EFhnëüö');
  TestComplexMatrixQ({LINENUM}28776, 'IsToeplitz', 'DEFghnëüö');
  TestComplexMatrixQ({LINENUM}28777, 'IsHankel', 'DEJRdfëüö');
  TestComplexMatrixQ({LINENUM}28778, 'IsUpperHessenberg', 'ABCEFGIJKLMOSTUVWXYZabclmnpqsëüö');
  TestComplexMatrixQ({LINENUM}28779, 'IsLowerHessenberg', 'CDFHIJKLMNclmnpqsëüö');
  TestComplexMatrixQ({LINENUM}28780, 'IsTridiagonal', 'FIJKLMclmnpqsö');
  TestComplexMatrixQ({LINENUM}28781, 'IsUpperBidiagonal', 'FKnpqsö');
  TestComplexMatrixQ({LINENUM}28782, 'IsLowerBidiagonal', 'FLnpqö');
  TestComplexMatrixQ({LINENUM}28783, 'IsBidiagonal', 'FKLnpqsö');
  TestComplexMatrixQ({LINENUM}28784, 'IsCentrosymmetric', 'FRnroö');
  TestComplexMatrixQ({LINENUM}28785, 'IsVandermonde', 'Å');
  TestComplexMatrixQ({LINENUM}28786, 'IsIdempotent', 'Fpö');
  TestComplexMatrixQ({LINENUM}28787, 'IsInvolution', 'FIJRq');
//  TestComplexMatrixQ({LINENUM}28788, 'IsPositiveDefinite', 'Fz');                              // TODO (5279121). Cannot compute spectrum of v and w. Investigate. Wishlist.
//  TestComplexMatrixQ({LINENUM}28789, 'IsPositiveSemidefinite', 'Fpwzö');
//  TestComplexMatrixQ({LINENUM}28790, 'IsNegativeDefinite', 'u');
//  TestComplexMatrixQ({LINENUM}28791, 'IsNegativeSemidefinite', 'uxö');
//  TestComplexMatrixQ({LINENUM}28792, 'IsIndefinite', 'QRIJqtvy');
//  TestComplexMatrixQ({LINENUM}28793, 'IsNilpotent', 'sö');
//  TestComplexMatrixQ({LINENUM}28794, 'IsPositive', '');                                        // N/A to complex matrices
//  TestComplexMatrixQ({LINENUM}28795, 'IsNonNegative', '');
//  TestComplexMatrixQ({LINENUM}28796, 'IsNegative', '');
//  TestComplexMatrixQ({LINENUM}28797, 'IsNonPositive', '');
  TestComplexMatrixQ({LINENUM}28798, 'IsZero', 'ëüö');
  TestComplexMatrixQ({LINENUM}28799, 'IsNonZero', 'ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖabcdfghjklmnopqrstuvwxyzåä');
  TestComplexMatrixQ({LINENUM}28800, 'IsDiagonallyDominant', 'FSclnpqwzåäö');
  TestComplexMatrixQ({LINENUM}28801, 'IsStrictlyDiagonallyDominant', 'Fnqä');

  TestComplexMatrixQImplies({LINENUM}28803, 'IsUpperTriangular', 'IsTriangular');
  TestComplexMatrixQImplies({LINENUM}28804, 'IsLowerTriangular', 'IsTriangular');

  TestComplexMatrixQImplies({LINENUM}28806, 'IsUpperTriangular', 'IsUpperHessenberg');
  TestComplexMatrixQImplies({LINENUM}28807, 'IsLowerTriangular', 'IsLowerHessenberg');

  TestComplexMatrixQImplies({LINENUM}28809, 'IsUpperBidiagonal', 'IsBidiagonal');
  TestComplexMatrixQImplies({LINENUM}28810, 'IsLowerBidiagonal', 'IsBidiagonal');

  TestComplexMatrixQImplies({LINENUM}28812, 'IsBidiagonal', 'IsTridiagonal');

  TestComplexMatrixQImplies({LINENUM}28814, 'IsRowEchelonForm', 'IsUpperTriangular');
  TestComplexMatrixQImplies({LINENUM}28815, 'IsReducedRowEchelonForm', 'IsRowEchelonForm');

  TestComplexMatrixQImplies({LINENUM}28817, 'IsIdentity', 'IsScalar');
  TestComplexMatrixQImplies({LINENUM}28818, 'IsScalar', 'IsDiagonal');

  TestComplexMatrixQImplies({LINENUM}28820, 'IsReversal', 'IsAntidiagonal');

  TestComplexMatrixQImplies({LINENUM}28822, 'IsCirculant', 'IsToeplitz');

  TestComplexMatrixQImplies({LINENUM}28824, 'IsIdentity', 'IsPermutation');
  TestComplexMatrixQImplies({LINENUM}28825, 'IsReversal', 'IsPermutation');
  TestComplexMatrixQImplies({LINENUM}28826, 'IsPermutation', 'IsBinary');

//  TestComplexMatrixQImplies({LINENUM}28828, 'IsPositiveDefinite', 'IsPositiveSemidefinite');   // TODO (see bm 5279121)
//  TestComplexMatrixQImplies({LINENUM}28829, 'IsNegativeDefinite', 'IsNegativeSemidefinite');

//  TestComplexMatrixQImplies({LINENUM}28831, 'IsPositiveDefinite', 'IsSymmetric');
//  TestComplexMatrixQImplies({LINENUM}28832, 'IsNegativeDefinite', 'IsSymmetric');
//  TestComplexMatrixQImplies({LINENUM}28833, 'IsPositiveSemidefinite', 'IsSymmetric');
//  TestComplexMatrixQImplies({LINENUM}28834, 'IsNegativeSemidefinite', 'IsSymmetric');
//  TestComplexMatrixQImplies({LINENUM}28835, 'IsIndefinite', 'IsSymmetric');

  TestComplexMatrixQImplies({LINENUM}28837, 'IsHermitian', 'IsNormal');
  TestComplexMatrixQImplies({LINENUM}28838, 'IsSkewHermitian', 'IsNormal');
  TestComplexMatrixQImplies({LINENUM}28839, 'IsUnitary', 'IsNormal');

  TestComplexMatrixQImplies({LINENUM}28841, 'IsSymmetric', 'IsSquare');
  TestComplexMatrixQImplies({LINENUM}28842, 'IsSkewSymmetric', 'IsSquare');
  TestComplexMatrixQImplies({LINENUM}28843, 'IsHermitian', 'IsSquare');
  TestComplexMatrixQImplies({LINENUM}28844, 'IsSkewHermitian', 'IsSquare');
  TestComplexMatrixQImplies({LINENUM}28845, 'IsOrthogonal', 'IsSquare');
  TestComplexMatrixQImplies({LINENUM}28846, 'IsUnitary', 'IsSquare');
  TestComplexMatrixQImplies({LINENUM}28847, 'IsNormal', 'IsSquare');
  TestComplexMatrixQImplies({LINENUM}28848, 'IsIdentity', 'IsSquare');
  TestComplexMatrixQImplies({LINENUM}28849, 'IsReversal', 'IsSquare');
  TestComplexMatrixQImplies({LINENUM}28850, 'IsScalar', 'IsSquare');
//  TestComplexMatrixQImplies({LINENUM}28851, 'IsNilpotent', 'IsSquare');                        // TODO (see bm 5279121)

  TestComplexMatrixQImplies({LINENUM}28853, 'IsStrictlyDiagonallyDominant', 'IsDiagonallyDominant');

  TestComplexMatrixQImplies({LINENUM}28855, 'IsRow', 'IsToeplitz');
  TestComplexMatrixQImplies({LINENUM}28856, 'IsRow', 'IsCirculant');
  TestComplexMatrixQImplies({LINENUM}28857, 'IsRow', 'IsHankel');
  TestComplexMatrixQImplies({LINENUM}28858, 'IsRow', 'IsUpperTriangular');

  TestComplexMatrixQImplies({LINENUM}28860, 'IsCol', 'IsToeplitz');
  TestComplexMatrixQImplies({LINENUM}28861, 'IsCol', 'IsHankel');
  TestComplexMatrixQImplies({LINENUM}28862, 'IsCol', 'IsLowerTriangular');

  Test({LINENUM}28864, 'delete(A); delete(B); delete(C); delete(D); delete(E); delete(F); delete(g); delete(h); delete(G); delete(H); delete(I); delete(J); delete(K); delete(L); delete(M)', success);
  Test({LINENUM}28865, 'delete(N), delete(O); delete(P); delete(Q); delete(R); delete(S); delete(T); delete(U); delete(V); delete(W); delete(X); delete(Y); delete(Z); delete(j); delete(k)', success);
  Test({LINENUM}28866, 'delete(l); delete(m); delete(n); delete(o); delete(p); delete(q); delete(r); delete(s); delete(a); delete(b); delete(c); delete(f); delete(t); delete(u); delete(v)', success);
  Test({LINENUM}28867, 'delete(w); delete(x); delete(y); delete(z); delete(Å); delete(Ä); delete(Ö); delete(å); delete(ä); delete(ö); delete(ü); delete(ë)', success);

  Test({LINENUM}28869, 'IsIdentity(❨❨1.0002, 0, 0.00001⋅i❩, ❨0, 0.9992, 0❩, ❨0, 0, 1.0003❩❩)', False);
  Test({LINENUM}28870, 'IsIdentity(❨❨1.0002, 0, 0.00001⋅i❩, ❨0, 0.9992, 0❩, ❨0, 0, 1.0003❩❩, 1E-6)', False);
  Test({LINENUM}28871, 'IsIdentity(❨❨1.0002, 0, 0.00001⋅i❩, ❨0, 0.9992, 0❩, ❨0, 0, 1.0003❩❩, 1E-5)', False);
  Test({LINENUM}28872, 'IsIdentity(❨❨1.0002, 0, 0.00001⋅i❩, ❨0, 0.9992, 0❩, ❨0, 0, 1.0003❩❩, 1E-4)', False);
  Test({LINENUM}28873, 'IsIdentity(❨❨1.0002, 0, 0.00001⋅i❩, ❨0, 0.9992, 0❩, ❨0, 0, 1.0003❩❩, 1E-3)', True);
  Test({LINENUM}28874, 'IsIdentity(❨❨1.0002, 0, 0.00001⋅i❩, ❨0, 0.9992, 0❩, ❨0, 0, 1.0003❩❩, 1E-2)', True);
  Test({LINENUM}28875, 'IsIdentity(❨❨1.0002, 0, 0.00001⋅i❩, ❨0, 0.9992, 0❩, ❨0, 0, 1.0003❩❩, 1E-1)', True);

  Test({LINENUM}28877, 'IsZeroMatrix(❨❨0, 0.002, 0.003⋅i, −0.001❩, ❨0.0002, 0.004, 0.001⋅i, 0❩❩)', False);
  Test({LINENUM}28878, 'IsZeroMatrix(❨❨0, 0.002, 0.003⋅i, −0.001❩, ❨0.0002, 0.004, 0.001⋅i, 0❩❩, 1E-6)', False);
  Test({LINENUM}28879, 'IsZeroMatrix(❨❨0, 0.002, 0.003⋅i, −0.001❩, ❨0.0002, 0.004, 0.001⋅i, 0❩❩, 1E-5)', False);
  Test({LINENUM}28880, 'IsZeroMatrix(❨❨0, 0.002, 0.003⋅i, −0.001❩, ❨0.0002, 0.004, 0.001⋅i, 0❩❩, 1E-4)', False);
  Test({LINENUM}28881, 'IsZeroMatrix(❨❨0, 0.002, 0.003⋅i, −0.001❩, ❨0.0002, 0.004, 0.001⋅i, 0❩❩, 1E-3)', False);
  Test({LINENUM}28882, 'IsZeroMatrix(❨❨0, 0.002, 0.003⋅i, −0.001❩, ❨0.0002, 0.004, 0.001⋅i, 0❩❩, 1E-2)', True);
  Test({LINENUM}28883, 'IsZeroMatrix(❨❨0, 0.002, 0.003⋅i, −0.001❩, ❨0.0002, 0.004, 0.001⋅i, 0❩❩, 1E-1)', True);

  Test({LINENUM}28885, 'IsDiagonal(❨❨1, 0.0003, 0.0002⋅i❩, ❨−0.0005, 2, 0.0002⋅i❩, ❨0.0003⋅i, 0.0001 + 0.0002⋅i, 3❩❩)', False);
  Test({LINENUM}28886, 'IsDiagonal(❨❨1, 0.0003, 0.0002⋅i❩, ❨−0.0005, 2, 0.0002⋅i❩, ❨0.0003⋅i, 0.0001 + 0.0002⋅i, 3❩❩, 1E-6)', False);
  Test({LINENUM}28887, 'IsDiagonal(❨❨1, 0.0003, 0.0002⋅i❩, ❨−0.0005, 2, 0.0002⋅i❩, ❨0.0003⋅i, 0.0001 + 0.0002⋅i, 3❩❩, 1E-5)', False);
  Test({LINENUM}28888, 'IsDiagonal(❨❨1, 0.0003, 0.0002⋅i❩, ❨−0.0005, 2, 0.0002⋅i❩, ❨0.0003⋅i, 0.0001 + 0.0002⋅i, 3❩❩, 1E-4)', False);
  Test({LINENUM}28889, 'IsDiagonal(❨❨1, 0.0003, 0.0002⋅i❩, ❨−0.0005, 2, 0.0002⋅i❩, ❨0.0003⋅i, 0.0001 + 0.0002⋅i, 3❩❩, 1E-3)', True);
  Test({LINENUM}28890, 'IsDiagonal(❨❨1, 0.0003, 0.0002⋅i❩, ❨−0.0005, 2, 0.0002⋅i❩, ❨0.0003⋅i, 0.0001 + 0.0002⋅i, 3❩❩, 1E-2)', True);
  Test({LINENUM}28891, 'IsDiagonal(❨❨1, 0.0003, 0.0002⋅i❩, ❨−0.0005, 2, 0.0002⋅i❩, ❨0.0003⋅i, 0.0001 + 0.0002⋅i, 3❩❩, 1E-1)', True);

  Test({LINENUM}28893, 'IsAntidiagonal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 2, 0.0004❩, ❨3⋅i, −0.00031, 0.0004❩❩)', False);
  Test({LINENUM}28894, 'IsAntidiagonal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 2, 0.0004❩, ❨3⋅i, −0.00031, 0.0004❩❩, 1E-6)', False);
  Test({LINENUM}28895, 'IsAntidiagonal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 2, 0.0004❩, ❨3⋅i, −0.00031, 0.0004❩❩, 1E-5)', False);
  Test({LINENUM}28896, 'IsAntidiagonal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 2, 0.0004❩, ❨3⋅i, −0.00031, 0.0004❩❩, 1E-4)', False);
  Test({LINENUM}28897, 'IsAntidiagonal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 2, 0.0004❩, ❨3⋅i, −0.00031, 0.0004❩❩, 1E-3)', True);
  Test({LINENUM}28898, 'IsAntidiagonal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 2, 0.0004❩, ❨3⋅i, −0.00031, 0.0004❩❩, 1E-2)', True);
  Test({LINENUM}28899, 'IsAntidiagonal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 2, 0.0004❩, ❨3⋅i, −0.00031, 0.0004❩❩, 1E-1)', True);

  Test({LINENUM}28901, 'IsReversal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 1.00001, 0.0004❩, ❨1 + 0.0001⋅i, −0.00031, 0.0004❩❩)', False);
  Test({LINENUM}28902, 'IsReversal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 1.00001, 0.0004❩, ❨1 + 0.0001⋅i, −0.00031, 0.0004❩❩, 1E-6)', False);
  Test({LINENUM}28903, 'IsReversal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 1.00001, 0.0004❩, ❨1 + 0.0001⋅i, −0.00031, 0.0004❩❩, 1E-5)', False);
  Test({LINENUM}28904, 'IsReversal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 1.00001, 0.0004❩, ❨1 + 0.0001⋅i, −0.00031, 0.0004❩❩, 1E-4)', False);
  Test({LINENUM}28905, 'IsReversal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 1.00001, 0.0004❩, ❨1 + 0.0001⋅i, −0.00031, 0.0004❩❩, 1E-3)', True);
  Test({LINENUM}28906, 'IsReversal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 1.00001, 0.0004❩, ❨1 + 0.0001⋅i, −0.00031, 0.0004❩❩, 1E-2)', True);
  Test({LINENUM}28907, 'IsReversal(❨❨0.0002, 0.0003⋅i, 1❩, ❨0.0001 + 0.0002⋅i, 1.00001, 0.0004❩, ❨1 + 0.0001⋅i, −0.00031, 0.0004❩❩, 1E-1)', True);

  Test({LINENUM}28909, 'IsUpperTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩)', False);
  Test({LINENUM}28910, 'IsUpperTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-6)', False);
  Test({LINENUM}28911, 'IsUpperTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-5)', False);
  Test({LINENUM}28912, 'IsUpperTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-4)', False);
  Test({LINENUM}28913, 'IsUpperTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-3)', True);
  Test({LINENUM}28914, 'IsUpperTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-2)', True);
  Test({LINENUM}28915, 'IsUpperTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-1)', True);

  Test({LINENUM}28917, 'IsLowerTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩)', False);
  Test({LINENUM}28918, 'IsLowerTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-6)', False);
  Test({LINENUM}28919, 'IsLowerTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-5)', False);
  Test({LINENUM}28920, 'IsLowerTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-4)', False);
  Test({LINENUM}28921, 'IsLowerTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-3)', False);
  Test({LINENUM}28922, 'IsLowerTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-2)', True);
  Test({LINENUM}28923, 'IsLowerTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-1)', True);

  Test({LINENUM}28925, 'IsTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩)', False);
  Test({LINENUM}28926, 'IsTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-6)', False);
  Test({LINENUM}28927, 'IsTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-5)', False);
  Test({LINENUM}28928, 'IsTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-4)', False);
  Test({LINENUM}28929, 'IsTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-3)', True);
  Test({LINENUM}28930, 'IsTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-2)', True);
  Test({LINENUM}28931, 'IsTriangular(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-1)', True);

  Test({LINENUM}28933, 'IsTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩)', False);
  Test({LINENUM}28934, 'IsTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-6)', False);
  Test({LINENUM}28935, 'IsTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-5)', False);
  Test({LINENUM}28936, 'IsTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-4)', False);
  Test({LINENUM}28937, 'IsTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-3)', False);
  Test({LINENUM}28938, 'IsTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-2)', True);
  Test({LINENUM}28939, 'IsTriangular(❨❨4, 0.001, 0.002❩, ❨5, i, 0.001 + 0.002⋅i❩, ❨4, 1, i❩❩, 1E-1)', True);

  Test({LINENUM}28941, 'IsRowEchelonForm(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩)', False);
  Test({LINENUM}28942, 'IsRowEchelonForm(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-6)', False);
  Test({LINENUM}28943, 'IsRowEchelonForm(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-5)', False);
  Test({LINENUM}28944, 'IsRowEchelonForm(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-4)', False);
  Test({LINENUM}28945, 'IsRowEchelonForm(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-3)', True);
  Test({LINENUM}28946, 'IsRowEchelonForm(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-2)', True);
  Test({LINENUM}28947, 'IsRowEchelonForm(❨❨3, 2⋅i, 5, 6❩, ❨0.0001, 5, 2, 1❩, ❨−0.0002, 0.0005, i, 3❩, ❨0.0002⋅i, 0.0001, 0.0003, 5❩❩, 1E-1)', True);

  Test({LINENUM}28949, 'IsReducedRowEchelonForm(❨❨1, 0.00001⋅i, 0.0001, 0❩, ❨0.0001, 1.00001, 0.0002, 0.0003❩, ❨−0.0002, 0.0005, 0.999999, 0.0001⋅i❩, ❨0.0002⋅i, 0.0001, 0.0003, 1❩❩)', False);
  Test({LINENUM}28950, 'IsReducedRowEchelonForm(❨❨1, 0.00001⋅i, 0.0001, 0❩, ❨0.0001, 1.00001, 0.0002, 0.0003❩, ❨−0.0002, 0.0005, 0.999999, 0.0001⋅i❩, ❨0.0002⋅i, 0.0001, 0.0003, 1❩❩, 1E-6)', False);
  Test({LINENUM}28951, 'IsReducedRowEchelonForm(❨❨1, 0.00001⋅i, 0.0001, 0❩, ❨0.0001, 1.00001, 0.0002, 0.0003❩, ❨−0.0002, 0.0005, 0.999999, 0.0001⋅i❩, ❨0.0002⋅i, 0.0001, 0.0003, 1❩❩, 1E-5)', False);
  Test({LINENUM}28952, 'IsReducedRowEchelonForm(❨❨1, 0.00001⋅i, 0.0001, 0❩, ❨0.0001, 1.00001, 0.0002, 0.0003❩, ❨−0.0002, 0.0005, 0.999999, 0.0001⋅i❩, ❨0.0002⋅i, 0.0001, 0.0003, 1❩❩, 1E-4)', False);
  Test({LINENUM}28953, 'IsReducedRowEchelonForm(❨❨1, 0.00001⋅i, 0.0001, 0❩, ❨0.0001, 1.00001, 0.0002, 0.0003❩, ❨−0.0002, 0.0005, 0.999999, 0.0001⋅i❩, ❨0.0002⋅i, 0.0001, 0.0003, 1❩❩, 1E-3)', True);
  Test({LINENUM}28954, 'IsReducedRowEchelonForm(❨❨1, 0.00001⋅i, 0.0001, 0❩, ❨0.0001, 1.00001, 0.0002, 0.0003❩, ❨−0.0002, 0.0005, 0.999999, 0.0001⋅i❩, ❨0.0002⋅i, 0.0001, 0.0003, 1❩❩, 1E-2)', True);
  Test({LINENUM}28955, 'IsReducedRowEchelonForm(❨❨1, 0.00001⋅i, 0.0001, 0❩, ❨0.0001, 1.00001, 0.0002, 0.0003❩, ❨−0.0002, 0.0005, 0.999999, 0.0001⋅i❩, ❨0.0002⋅i, 0.0001, 0.0003, 1❩❩, 1E-1)', True);

  Test({LINENUM}28957, 'IsScalar(❨❨1.0002⋅i, 0, 0.0001❩, ❨0.0001⋅i, 1.0001⋅i, 0.0003❩, ❨0.0004, 0.0001, 1.0004⋅i❩❩)', False);
  Test({LINENUM}28958, 'IsScalar(❨❨1.0002⋅i, 0, 0.0001❩, ❨0.0001⋅i, 1.0001⋅i, 0.0003❩, ❨0.0004, 0.0001, 1.0004⋅i❩❩, 1E-6)', False);
  Test({LINENUM}28959, 'IsScalar(❨❨1.0002⋅i, 0, 0.0001❩, ❨0.0001⋅i, 1.0001⋅i, 0.0003❩, ❨0.0004, 0.0001, 1.0004⋅i❩❩, 1E-5)', False);
  Test({LINENUM}28960, 'IsScalar(❨❨1.0002⋅i, 0, 0.0001❩, ❨0.0001⋅i, 1.0001⋅i, 0.0003❩, ❨0.0004, 0.0001, 1.0004⋅i❩❩, 1E-4)', False);
  Test({LINENUM}28961, 'IsScalar(❨❨1.0002⋅i, 0, 0.0001❩, ❨0.0001⋅i, 1.0001⋅i, 0.0003❩, ❨0.0004, 0.0001, 1.0004⋅i❩❩, 1E-3)', True);
  Test({LINENUM}28962, 'IsScalar(❨❨1.0002⋅i, 0, 0.0001❩, ❨0.0001⋅i, 1.0001⋅i, 0.0003❩, ❨0.0004, 0.0001, 1.0004⋅i❩❩, 1E-2)', True);
  Test({LINENUM}28963, 'IsScalar(❨❨1.0002⋅i, 0, 0.0001❩, ❨0.0001⋅i, 1.0001⋅i, 0.0003❩, ❨0.0004, 0.0001, 1.0004⋅i❩❩, 1E-1)', True);

  Test({LINENUM}28965, 'IsSymmetric(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 + 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 + 0.42⋅i, 7.62, 4.66❩❩)', False);
  Test({LINENUM}28966, 'IsSymmetric(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 + 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 + 0.42⋅i, 7.62, 4.66❩❩, 1E-4)', False);
  Test({LINENUM}28967, 'IsSymmetric(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 + 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 + 0.42⋅i, 7.62, 4.66❩❩, 1E-3)', False);
  Test({LINENUM}28968, 'IsSymmetric(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 + 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 + 0.42⋅i, 7.62, 4.66❩❩, 1E-2)', True);
  Test({LINENUM}28969, 'IsSymmetric(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 + 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 + 0.42⋅i, 7.62, 4.66❩❩, 1E-1)', True);

  Test({LINENUM}28971, 'IsSkewSymmetric(❨❨0, 1.78, −4.22 + 3.1⋅i, 0.98❩, ❨−1.79, 0, 2.11, −2.13 + 0.43⋅i❩, ❨4.21 − 3.1⋅i, −2.11, 0, −2.8❩, ❨−0.97, 2.13 − 0.42⋅i, 2.8, 0❩❩)', False);
  Test({LINENUM}28972, 'IsSkewSymmetric(❨❨0, 1.78, −4.22 + 3.1⋅i, 0.98❩, ❨−1.79, 0, 2.11, −2.13 + 0.43⋅i❩, ❨4.21 − 3.1⋅i, −2.11, 0, −2.8❩, ❨−0.97, 2.13 − 0.42⋅i, 2.8, 0❩❩, 1E-4)', False);
  Test({LINENUM}28973, 'IsSkewSymmetric(❨❨0, 1.78, −4.22 + 3.1⋅i, 0.98❩, ❨−1.79, 0, 2.11, −2.13 + 0.43⋅i❩, ❨4.21 − 3.1⋅i, −2.11, 0, −2.8❩, ❨−0.97, 2.13 − 0.42⋅i, 2.8, 0❩❩, 1E-3)', False);
  Test({LINENUM}28974, 'IsSkewSymmetric(❨❨0, 1.78, −4.22 + 3.1⋅i, 0.98❩, ❨−1.79, 0, 2.11, −2.13 + 0.43⋅i❩, ❨4.21 − 3.1⋅i, −2.11, 0, −2.8❩, ❨−0.97, 2.13 − 0.42⋅i, 2.8, 0❩❩, 1.1E-2)', True);
  Test({LINENUM}28975, 'IsSkewSymmetric(❨❨0, 1.78, −4.22 + 3.1⋅i, 0.98❩, ❨−1.79, 0, 2.11, −2.13 + 0.43⋅i❩, ❨4.21 − 3.1⋅i, −2.11, 0, −2.8❩, ❨−0.97, 2.13 − 0.42⋅i, 2.8, 0❩❩, 1E-1)', True);

  Test({LINENUM}28977, 'IsHermitian(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 − 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 − 0.42⋅i, 7.62, 4.66❩❩)', False);
  Test({LINENUM}28978, 'IsHermitian(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 − 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 − 0.42⋅i, 7.62, 4.66❩❩, 1E-4)', False);
  Test({LINENUM}28979, 'IsHermitian(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 − 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 − 0.42⋅i, 7.62, 4.66❩❩, 1E-3)', False);
  Test({LINENUM}28980, 'IsHermitian(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 − 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 − 0.42⋅i, 7.62, 4.66❩❩, 1E-2)', True);
  Test({LINENUM}28981, 'IsHermitian(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 − 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 − 0.42⋅i, 7.62, 4.66❩❩, 1E-1)', True);

  Test({LINENUM}28983, 'IsSkewHermitian(❨❨0, 1.78, −4.22 + 3.1⋅i, 0.98❩, ❨−1.79, 0, 2.11, −2.13 + 0.43⋅i❩, ❨4.21 + 3.1⋅i, −2.11, 0, −2.8❩, ❨−0.97, 2.13 + 0.42⋅i, 2.8, 0❩❩)', False);
  Test({LINENUM}28984, 'IsSkewHermitian(❨❨0, 1.78, −4.22 + 3.1⋅i, 0.98❩, ❨−1.79, 0, 2.11, −2.13 + 0.43⋅i❩, ❨4.21 + 3.1⋅i, −2.11, 0, −2.8❩, ❨−0.97, 2.13 + 0.42⋅i, 2.8, 0❩❩, 1E-4)', False);
  Test({LINENUM}28985, 'IsSkewHermitian(❨❨0, 1.78, −4.22 + 3.1⋅i, 0.98❩, ❨−1.79, 0, 2.11, −2.13 + 0.43⋅i❩, ❨4.21 + 3.1⋅i, −2.11, 0, −2.8❩, ❨−0.97, 2.13 + 0.42⋅i, 2.8, 0❩❩, 1E-3)', False);
  Test({LINENUM}28986, 'IsSkewHermitian(❨❨0, 1.78, −4.22 + 3.1⋅i, 0.98❩, ❨−1.79, 0, 2.11, −2.13 + 0.43⋅i❩, ❨4.21 + 3.1⋅i, −2.11, 0, −2.8❩, ❨−0.97, 2.13 + 0.42⋅i, 2.8, 0❩❩, 1.1E-2)', True);
  Test({LINENUM}28987, 'IsSkewHermitian(❨❨0, 1.78, −4.22 + 3.1⋅i, 0.98❩, ❨−1.79, 0, 2.11, −2.13 + 0.43⋅i❩, ❨4.21 + 3.1⋅i, −2.11, 0, −2.8❩, ❨−0.97, 2.13 + 0.42⋅i, 2.8, 0❩❩, 1E-1)', True);

  Test({LINENUM}28989, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, i, 1.414❩, ❨0, −1.414, i❩❩)', False);
  Test({LINENUM}28990, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, i, 1.414❩, ❨0, −1.414, i❩❩, 1E-6)', False);
  Test({LINENUM}28991, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, i, 1.414❩, ❨0, −1.414, i❩❩, 1E-5)', False);
  Test({LINENUM}28992, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, i, 1.414❩, ❨0, −1.414, i❩❩, 1E-4)', False);
  Test({LINENUM}28993, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, i, 1.414❩, ❨0, −1.414, i❩❩, 1E-3)', True);
  Test({LINENUM}28994, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, i, 1.414❩, ❨0, −1.414, i❩❩, 1E-2)', True);
  Test({LINENUM}28995, 'IsOrthogonal(❨❨1, 0, 0❩, ❨0, i, 1.414❩, ❨0, −1.414, i❩❩, 1E-1)', True);

  Test({LINENUM}28997, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.707⋅i, −0.707❩, ❨0, 0.707⋅i, 0.707❩❩)', False);
  Test({LINENUM}28998, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.707⋅i, −0.707❩, ❨0, 0.707⋅i, 0.707❩❩, 1E-6)', False);
  Test({LINENUM}28999, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.707⋅i, −0.707❩, ❨0, 0.707⋅i, 0.707❩❩, 1E-5)', False);
  Test({LINENUM}29000, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.707⋅i, −0.707❩, ❨0, 0.707⋅i, 0.707❩❩, 1E-4)', False);
  Test({LINENUM}29001, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.707⋅i, −0.707❩, ❨0, 0.707⋅i, 0.707❩❩, 1E-3)', True);
  Test({LINENUM}29002, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.707⋅i, −0.707❩, ❨0, 0.707⋅i, 0.707❩❩, 1E-2)', True);
  Test({LINENUM}29003, 'IsUnitary(❨❨1, 0, 0❩, ❨0, 0.707⋅i, −0.707❩, ❨0, 0.707⋅i, 0.707❩❩, 1E-1)', True);

  Test({LINENUM}29005, 'IsNormal(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 − 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 − 0.42⋅i, 7.62, 4.66❩❩)', False);
  Test({LINENUM}29006, 'IsNormal(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 − 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 − 0.42⋅i, 7.62, 4.66❩❩, 1E-4)', False);
  Test({LINENUM}29007, 'IsNormal(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 − 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 − 0.42⋅i, 7.62, 4.66❩❩, 1E-3)', False);
  Test({LINENUM}29008, 'IsNormal(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 − 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 − 0.42⋅i, 7.62, 4.66❩❩, 1E-2)', False);
  Test({LINENUM}29009, 'IsNormal(❨❨2.46, 3.24, 4.22 + 3.1⋅i, 1.88❩, ❨3.25, 2.84, 3.23, 2.13 + 0.41⋅i❩, ❨4.21 − 3.1⋅i, 3.23, 4.92, 7.62❩, ❨1.87, 2.13 − 0.42⋅i, 7.62, 4.66❩❩, 1E-1)', True);

  Test({LINENUM}29011, 'IsBinary(❨❨1.0001, 0.0002⋅i, 1.0001 − 0.0003⋅i❩, ❨1.00031, 0.00051⋅i, −0.0001⋅i❩❩)', False);
  Test({LINENUM}29012, 'IsBinary(❨❨1.0001, 0.0002⋅i, 1.0001 − 0.0003⋅i❩, ❨1.00031, 0.00051⋅i, −0.0001⋅i❩❩, 1E-6)', False);
  Test({LINENUM}29013, 'IsBinary(❨❨1.0001, 0.0002⋅i, 1.0001 − 0.0003⋅i❩, ❨1.00031, 0.00051⋅i, −0.0001⋅i❩❩, 1E-5)', False);
  Test({LINENUM}29014, 'IsBinary(❨❨1.0001, 0.0002⋅i, 1.0001 − 0.0003⋅i❩, ❨1.00031, 0.00051⋅i, −0.0001⋅i❩❩, 1E-4)', False);
  Test({LINENUM}29015, 'IsBinary(❨❨1.0001, 0.0002⋅i, 1.0001 − 0.0003⋅i❩, ❨1.00031, 0.00051⋅i, −0.0001⋅i❩❩, 1E-3)', True);
  Test({LINENUM}29016, 'IsBinary(❨❨1.0001, 0.0002⋅i, 1.0001 − 0.0003⋅i❩, ❨1.00031, 0.00051⋅i, −0.0001⋅i❩❩, 1E-2)', True);
  Test({LINENUM}29017, 'IsBinary(❨❨1.0001, 0.0002⋅i, 1.0001 − 0.0003⋅i❩, ❨1.00031, 0.00051⋅i, −0.0001⋅i❩❩, 1E-1)', True);

  Test({LINENUM}29019, 'IsPermutation(❨❨1.0001, 0.0001, 0.0001⋅i❩, ❨−0.0002, 0.00003⋅i, 0.999999❩, ❨0.0002, 1.000003, 0.000012❩❩)', False);
  Test({LINENUM}29020, 'IsPermutation(❨❨1.0001, 0.0001, 0.0001⋅i❩, ❨−0.0002, 0.00003⋅i, 0.999999❩, ❨0.0002, 1.000003, 0.000012❩❩, 1E-6)', False);
  Test({LINENUM}29021, 'IsPermutation(❨❨1.0001, 0.0001, 0.0001⋅i❩, ❨−0.0002, 0.00003⋅i, 0.999999❩, ❨0.0002, 1.000003, 0.000012❩❩, 1E-5)', False);
  Test({LINENUM}29022, 'IsPermutation(❨❨1.0001, 0.0001, 0.0001⋅i❩, ❨−0.0002, 0.00003⋅i, 0.999999❩, ❨0.0002, 1.000003, 0.000012❩❩, 1E-4)', False);
  Test({LINENUM}29023, 'IsPermutation(❨❨1.0001, 0.0001, 0.0001⋅i❩, ❨−0.0002, 0.00003⋅i, 0.999999❩, ❨0.0002, 1.000003, 0.000012❩❩, 1E-3)', True);
  Test({LINENUM}29024, 'IsPermutation(❨❨1.0001, 0.0001, 0.0001⋅i❩, ❨−0.0002, 0.00003⋅i, 0.999999❩, ❨0.0002, 1.000003, 0.000012❩❩, 1E-2)', True);
  Test({LINENUM}29025, 'IsPermutation(❨❨1.0001, 0.0001, 0.0001⋅i❩, ❨−0.0002, 0.00003⋅i, 0.999999❩, ❨0.0002, 1.000003, 0.000012❩❩, 1E-1)', True);

  Test({LINENUM}29027, 'IsCirculant(❨❨3, i, 2, 5❩, ❨5, 3, i, 2❩, ❨2, 5, 2.995, i❩, ❨i, 2, 5, 3❩❩)', False);
  Test({LINENUM}29028, 'IsCirculant(❨❨3, i, 2, 5❩, ❨5, 3, i, 2❩, ❨2, 5, 2.995, i❩, ❨i, 2, 5, 3❩❩, 1E-6)', False);
  Test({LINENUM}29029, 'IsCirculant(❨❨3, i, 2, 5❩, ❨5, 3, i, 2❩, ❨2, 5, 2.995, i❩, ❨i, 2, 5, 3❩❩, 1E-5)', False);
  Test({LINENUM}29030, 'IsCirculant(❨❨3, i, 2, 5❩, ❨5, 3, i, 2❩, ❨2, 5, 2.995, i❩, ❨i, 2, 5, 3❩❩, 1E-4)', False);
  Test({LINENUM}29031, 'IsCirculant(❨❨3, i, 2, 5❩, ❨5, 3, i, 2❩, ❨2, 5, 2.995, i❩, ❨i, 2, 5, 3❩❩, 1E-3)', False);
  Test({LINENUM}29032, 'IsCirculant(❨❨3, i, 2, 5❩, ❨5, 3, i, 2❩, ❨2, 5, 2.995, i❩, ❨i, 2, 5, 3❩❩, 1E-2)', True);
  Test({LINENUM}29033, 'IsCirculant(❨❨3, i, 2, 5❩, ❨5, 3, i, 2❩, ❨2, 5, 2.995, i❩, ❨i, 2, 5, 3❩❩, 1E-1)', True);

  Test({LINENUM}29035, 'IsToeplitz(❨❨1, 3, 2, i❩, ❨5, 1.0002, 3, 2❩, ❨6, 5, 1, 3❩, ❨8, 6, 5, 1❩❩)', False);
  Test({LINENUM}29036, 'IsToeplitz(❨❨1, 3, 2, i❩, ❨5, 1.0002, 3, 2❩, ❨6, 5, 1, 3❩, ❨8, 6, 5, 1❩❩, 1E-6)', False);
  Test({LINENUM}29037, 'IsToeplitz(❨❨1, 3, 2, i❩, ❨5, 1.0002, 3, 2❩, ❨6, 5, 1, 3❩, ❨8, 6, 5, 1❩❩, 1E-5)', False);
  Test({LINENUM}29038, 'IsToeplitz(❨❨1, 3, 2, i❩, ❨5, 1.0002, 3, 2❩, ❨6, 5, 1, 3❩, ❨8, 6, 5, 1❩❩, 1E-4)', False);
  Test({LINENUM}29039, 'IsToeplitz(❨❨1, 3, 2, i❩, ❨5, 1.0002, 3, 2❩, ❨6, 5, 1, 3❩, ❨8, 6, 5, 1❩❩, 1E-3)', True);
  Test({LINENUM}29040, 'IsToeplitz(❨❨1, 3, 2, i❩, ❨5, 1.0002, 3, 2❩, ❨6, 5, 1, 3❩, ❨8, 6, 5, 1❩❩, 1E-2)', True);
  Test({LINENUM}29041, 'IsToeplitz(❨❨1, 3, 2, i❩, ❨5, 1.0002, 3, 2❩, ❨6, 5, 1, 3❩, ❨8, 6, 5, 1❩❩, 1E-1)', True);

  Test({LINENUM}29043, 'IsHankel(❨❨7, 4, i, 2❩, ❨4, i, 2, 8❩, ❨i, 2, 8, 0❩, ❨2, 8, 0.00002, 1❩❩)', False);
  Test({LINENUM}29044, 'IsHankel(❨❨7, 4, i, 2❩, ❨4, i, 2, 8❩, ❨i, 2, 8, 0❩, ❨2, 8, 0.00002, 1❩❩, 1E-6)', False);
  Test({LINENUM}29045, 'IsHankel(❨❨7, 4, i, 2❩, ❨4, i, 2, 8❩, ❨i, 2, 8, 0❩, ❨2, 8, 0.00002, 1❩❩, 1E-5)', False);
  Test({LINENUM}29046, 'IsHankel(❨❨7, 4, i, 2❩, ❨4, i, 2, 8❩, ❨i, 2, 8, 0❩, ❨2, 8, 0.00002, 1❩❩, 1E-4)', True);
  Test({LINENUM}29047, 'IsHankel(❨❨7, 4, i, 2❩, ❨4, i, 2, 8❩, ❨i, 2, 8, 0❩, ❨2, 8, 0.00002, 1❩❩, 1E-3)', True);
  Test({LINENUM}29048, 'IsHankel(❨❨7, 4, i, 2❩, ❨4, i, 2, 8❩, ❨i, 2, 8, 0❩, ❨2, 8, 0.00002, 1❩❩, 1E-2)', True);
  Test({LINENUM}29049, 'IsHankel(❨❨7, 4, i, 2❩, ❨4, i, 2, 8❩, ❨i, 2, 8, 0❩, ❨2, 8, 0.00002, 1❩❩, 1E-1)', True);

  Test({LINENUM}29051, 'IsUpperHessenberg(❨❨6, 2, 3, 1❩, ❨7, 3, i, i❩, ❨0.003, 4, 1, 2❩, ❨0.001, 0.002, 5, 8❩❩)', False);
  Test({LINENUM}29052, 'IsUpperHessenberg(❨❨6, 2, 3, 1❩, ❨7, 3, i, i❩, ❨0.003, 4, 1, 2❩, ❨0.001, 0.002, 5, 8❩❩, 1E-6)', False);
  Test({LINENUM}29053, 'IsUpperHessenberg(❨❨6, 2, 3, 1❩, ❨7, 3, i, i❩, ❨0.003, 4, 1, 2❩, ❨0.001, 0.002, 5, 8❩❩, 1E-5)', False);
  Test({LINENUM}29054, 'IsUpperHessenberg(❨❨6, 2, 3, 1❩, ❨7, 3, i, i❩, ❨0.003, 4, 1, 2❩, ❨0.001, 0.002, 5, 8❩❩, 1E-4)', False);
  Test({LINENUM}29055, 'IsUpperHessenberg(❨❨6, 2, 3, 1❩, ❨7, 3, i, i❩, ❨0.003, 4, 1, 2❩, ❨0.001, 0.002, 5, 8❩❩, 1E-3)', False);
  Test({LINENUM}29056, 'IsUpperHessenberg(❨❨6, 2, 3, 1❩, ❨7, 3, i, i❩, ❨0.003, 4, 1, 2❩, ❨0.001, 0.002, 5, 8❩❩, 1E-2)', True);
  Test({LINENUM}29057, 'IsUpperHessenberg(❨❨6, 2, 3, 1❩, ❨7, 3, i, i❩, ❨0.003, 4, 1, 2❩, ❨0.001, 0.002, 5, 8❩❩, 1E-1)', True);

  Test({LINENUM}29059, 'IsLowerHessenberg(❨❨4, 5, 0.0001, 0.0002❩, ❨6, 2, 4, 0.0001❩, ❨i, 2, 4, 6❩, ❨6, 2, 2, 1❩❩)', False);
  Test({LINENUM}29060, 'IsLowerHessenberg(❨❨4, 5, 0.0001, 0.0002❩, ❨6, 2, 4, 0.0001❩, ❨i, 2, 4, 6❩, ❨6, 2, 2, 1❩❩, 1E-6)', False);
  Test({LINENUM}29061, 'IsLowerHessenberg(❨❨4, 5, 0.0001, 0.0002❩, ❨6, 2, 4, 0.0001❩, ❨i, 2, 4, 6❩, ❨6, 2, 2, 1❩❩, 1E-5)', False);
  Test({LINENUM}29062, 'IsLowerHessenberg(❨❨4, 5, 0.0001, 0.0002❩, ❨6, 2, 4, 0.0001❩, ❨i, 2, 4, 6❩, ❨6, 2, 2, 1❩❩, 1E-4)', False);
  Test({LINENUM}29063, 'IsLowerHessenberg(❨❨4, 5, 0.0001, 0.0002❩, ❨6, 2, 4, 0.0001❩, ❨i, 2, 4, 6❩, ❨6, 2, 2, 1❩❩, 1E-3)', True);
  Test({LINENUM}29064, 'IsLowerHessenberg(❨❨4, 5, 0.0001, 0.0002❩, ❨6, 2, 4, 0.0001❩, ❨i, 2, 4, 6❩, ❨6, 2, 2, 1❩❩, 1E-2)', True);
  Test({LINENUM}29065, 'IsLowerHessenberg(❨❨4, 5, 0.0001, 0.0002❩, ❨6, 2, 4, 0.0001❩, ❨i, 2, 4, 6❩, ❨6, 2, 2, 1❩❩, 1E-1)', True);

  Test({LINENUM}29067, 'IsTridiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨5, 1, 2, 0.0003❩, ❨0.0001, 2, i, 4❩, ❨0.0002, 0.0003, 6, 2❩❩)', False);
  Test({LINENUM}29068, 'IsTridiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨5, 1, 2, 0.0003❩, ❨0.0001, 2, i, 4❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-6)', False);
  Test({LINENUM}29069, 'IsTridiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨5, 1, 2, 0.0003❩, ❨0.0001, 2, i, 4❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-5)', False);
  Test({LINENUM}29070, 'IsTridiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨5, 1, 2, 0.0003❩, ❨0.0001, 2, i, 4❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-4)', False);
  Test({LINENUM}29071, 'IsTridiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨5, 1, 2, 0.0003❩, ❨0.0001, 2, i, 4❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-3)', True);
  Test({LINENUM}29072, 'IsTridiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨5, 1, 2, 0.0003❩, ❨0.0001, 2, i, 4❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-2)', True);
  Test({LINENUM}29073, 'IsTridiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨5, 1, 2, 0.0003❩, ❨0.0001, 2, i, 4❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-1)', True);

  Test({LINENUM}29075, 'IsUpperBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩)', False);
  Test({LINENUM}29076, 'IsUpperBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-6)', False);
  Test({LINENUM}29077, 'IsUpperBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-5)', False);
  Test({LINENUM}29078, 'IsUpperBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-4)', False);
  Test({LINENUM}29079, 'IsUpperBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-3)', True);
  Test({LINENUM}29080, 'IsUpperBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-2)', True);
  Test({LINENUM}29081, 'IsUpperBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-1)', True);

  Test({LINENUM}29083, 'IsLowerBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩)', False);
  Test({LINENUM}29084, 'IsLowerBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-6)', False);
  Test({LINENUM}29085, 'IsLowerBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-5)', False);
  Test({LINENUM}29086, 'IsLowerBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-4)', False);
  Test({LINENUM}29087, 'IsLowerBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-3)', True);
  Test({LINENUM}29088, 'IsLowerBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-2)', True);
  Test({LINENUM}29089, 'IsLowerBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-1)', True);

  Test({LINENUM}29091, 'IsBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩)', False);
  Test({LINENUM}29092, 'IsBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-6)', False);
  Test({LINENUM}29093, 'IsBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-5)', False);
  Test({LINENUM}29094, 'IsBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-4)', False);
  Test({LINENUM}29095, 'IsBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-3)', True);
  Test({LINENUM}29096, 'IsBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-2)', True);
  Test({LINENUM}29097, 'IsBidiagonal(❨❨6, 2, 0.0001, 0.0002❩, ❨0, 1, 2, 0.0003❩, ❨0.0001, 0.0001, i, 4❩, ❨0.0002, 0.0003, 0, 2❩❩, 1E-1)', True);

  Test({LINENUM}29099, 'IsBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩)', False);
  Test({LINENUM}29100, 'IsBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-6)', False);
  Test({LINENUM}29101, 'IsBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-5)', False);
  Test({LINENUM}29102, 'IsBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-4)', False);
  Test({LINENUM}29103, 'IsBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-3)', True);
  Test({LINENUM}29104, 'IsBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-2)', True);
  Test({LINENUM}29105, 'IsBidiagonal(❨❨6, 0.0001, 0.0001, 0.0002❩, ❨5, 1, 0.0001, 0.0003❩, ❨0.0001, 2, i, 0.0001❩, ❨0.0002, 0.0003, 6, 2❩❩, 1E-1)', True);

  Test({LINENUM}29107, 'IsCentrosymmetric(❨❨1, 3.0002, i, 6❩, ❨4.0003, 2, 7, 5❩, ❨5.0001, 7, 2.0003, 4❩, ❨6, i, 3, 0.99999❩❩)', False);
  Test({LINENUM}29108, 'IsCentrosymmetric(❨❨1, 3.0002, i, 6❩, ❨4.0003, 2, 7, 5❩, ❨5.0001, 7, 2.0003, 4❩, ❨6, i, 3, 0.99999❩❩, 1E-6)', False);
  Test({LINENUM}29109, 'IsCentrosymmetric(❨❨1, 3.0002, i, 6❩, ❨4.0003, 2, 7, 5❩, ❨5.0001, 7, 2.0003, 4❩, ❨6, i, 3, 0.99999❩❩, 1E-5)', False);
  Test({LINENUM}29110, 'IsCentrosymmetric(❨❨1, 3.0002, i, 6❩, ❨4.0003, 2, 7, 5❩, ❨5.0001, 7, 2.0003, 4❩, ❨6, i, 3, 0.99999❩❩, 1E-4)', False);
  Test({LINENUM}29111, 'IsCentrosymmetric(❨❨1, 3.0002, i, 6❩, ❨4.0003, 2, 7, 5❩, ❨5.0001, 7, 2.0003, 4❩, ❨6, i, 3, 0.99999❩❩, 1E-3)', True);
  Test({LINENUM}29112, 'IsCentrosymmetric(❨❨1, 3.0002, i, 6❩, ❨4.0003, 2, 7, 5❩, ❨5.0001, 7, 2.0003, 4❩, ❨6, i, 3, 0.99999❩❩, 1E-2)', True);
  Test({LINENUM}29113, 'IsCentrosymmetric(❨❨1, 3.0002, i, 6❩, ❨4.0003, 2, 7, 5❩, ❨5.0001, 7, 2.0003, 4❩, ❨6, i, 3, 0.99999❩❩, 1E-1)', True);

  Test({LINENUM}29115, 'IsVandermonde(❨❨1, 3.000002, 9, 27❩, ❨1, 2, 4.000001, 8❩, ❨0.99999999, 5, 25, 125❩, ❨1, i, −1, −i❩, ❨1, −1.0000003, 1, −1❩, ❨1, 10, 100, 1000❩❩)', False);
  Test({LINENUM}29116, 'IsVandermonde(❨❨1, 3.000002, 9, 27❩, ❨1, 2, 4.000001, 8❩, ❨0.99999999, 5, 25, 125❩, ❨1, i, −1, −i❩, ❨1, −1.0000003, 1, −1❩, ❨1, 10, 100, 1000❩❩, 1E-6)', False);
  Test({LINENUM}29117, 'IsVandermonde(❨❨1, 3.000002, 9, 27❩, ❨1, 2, 4.000001, 8❩, ❨0.99999999, 5, 25, 125❩, ❨1, i, −1, −i❩, ❨1, −1.0000003, 1, −1❩, ❨1, 10, 100, 1000❩❩, 1E-5)', False);
  Test({LINENUM}29118, 'IsVandermonde(❨❨1, 3.000002, 9, 27❩, ❨1, 2, 4.000001, 8❩, ❨0.99999999, 5, 25, 125❩, ❨1, i, −1, −i❩, ❨1, −1.0000003, 1, −1❩, ❨1, 10, 100, 1000❩❩, 1E-4)', True);
  Test({LINENUM}29119, 'IsVandermonde(❨❨1, 3.000002, 9, 27❩, ❨1, 2, 4.000001, 8❩, ❨0.99999999, 5, 25, 125❩, ❨1, i, −1, −i❩, ❨1, −1.0000003, 1, −1❩, ❨1, 10, 100, 1000❩❩, 1E-3)', True);
  Test({LINENUM}29120, 'IsVandermonde(❨❨1, 3.000002, 9, 27❩, ❨1, 2, 4.000001, 8❩, ❨0.99999999, 5, 25, 125❩, ❨1, i, −1, −i❩, ❨1, −1.0000003, 1, −1❩, ❨1, 10, 100, 1000❩❩, 1E-2)', True);
  Test({LINENUM}29121, 'IsVandermonde(❨❨1, 3.000002, 9, 27❩, ❨1, 2, 4.000001, 8❩, ❨0.99999999, 5, 25, 125❩, ❨1, i, −1, −i❩, ❨1, −1.0000003, 1, −1❩, ❨1, 10, 100, 1000❩❩, 1E-1)', True);

  Test({LINENUM}29123, 'IsIdempotent(❨❨0, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩)', False);
  Test({LINENUM}29124, 'IsIdempotent(❨❨0, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-6)', False);
  Test({LINENUM}29125, 'IsIdempotent(❨❨0, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-5)', False);
  Test({LINENUM}29126, 'IsIdempotent(❨❨0, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-4)', False);
  Test({LINENUM}29127, 'IsIdempotent(❨❨0, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-3)', True);
  Test({LINENUM}29128, 'IsIdempotent(❨❨0, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-2)', True);
  Test({LINENUM}29129, 'IsIdempotent(❨❨0, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-1)', True);

  Test({LINENUM}29131, 'IsInvolution(❨❨−0.9999999, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩)', False);
  Test({LINENUM}29132, 'IsInvolution(❨❨−0.9999999, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-6)', False);
  Test({LINENUM}29133, 'IsInvolution(❨❨−0.9999999, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-5)', False);
  Test({LINENUM}29134, 'IsInvolution(❨❨−0.9999999, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-4)', False);
  Test({LINENUM}29135, 'IsInvolution(❨❨−0.9999999, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-3)', False);
  Test({LINENUM}29136, 'IsInvolution(❨❨−0.9999999, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-2)', True);
  Test({LINENUM}29137, 'IsInvolution(❨❨−0.9999999, 0.0001, 0.0002⋅i❩, ❨0.00032, 1.00001, 0.0001❩, ❨−0.000036, 0.0005⋅i, 0.999999❩❩, 1E-1)', True);

  Test({LINENUM}29139, 'IsZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩)', False);
  Test({LINENUM}29140, 'IsZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-6)', False);
  Test({LINENUM}29141, 'IsZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-5)', False);
  Test({LINENUM}29142, 'IsZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-4)', False);
  Test({LINENUM}29143, 'IsZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-3)', True);
  Test({LINENUM}29144, 'IsZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-2)', True);
  Test({LINENUM}29145, 'IsZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-1)', True);

  Test({LINENUM}29147, 'IsNonZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩)', True);
  Test({LINENUM}29148, 'IsNonZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-6)', True);
  Test({LINENUM}29149, 'IsNonZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-5)', True);
  Test({LINENUM}29150, 'IsNonZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-4)', True);
  Test({LINENUM}29151, 'IsNonZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-3)', False);
  Test({LINENUM}29152, 'IsNonZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-2)', False);
  Test({LINENUM}29153, 'IsNonZero(❨❨0.0003, 0.0001 + 0.0001⋅i, −0.0002❩❩, 1E-1)', False);


  //
  // Basic functions on matrices
  //

  // Determinant

  Eps; Test({LINENUM}29162, 'det(❨❨2, 1❩, ❨5, 3❩❩)', 1.0);
  Eps; Test({LINENUM}29163, 'det(❨❨2, 8❩, ❨4, 5❩❩)', -22.0);
  Eps; Test({LINENUM}29164, 'det(❨❨7, −3❩, ❨−2, 8❩❩)', 50.0);

  Eps; Test({LINENUM}29166, 'det(❨❨5, 2, 1❩, ❨−2, 5, 1❩, ❨5, 2, 8❩❩)', 203.0);
  Eps; Test({LINENUM}29167, 'det(❨❨−2, 4, 6❩, ❨2.7, −5.3, 5❩, ❨7, 2, 1❩❩)', 414.8);
  Eps; Test({LINENUM}29168, 'det(❨❨1.5, 2.4, 7.4❩, ❨−2.3, 0.4, 7.5❩, ❨0.1, 4.6, 0❩❩)', -128.538);

  Eps; Test({LINENUM}29170, 'det(❨❨5, 2, 4, 8❩, ❨2, 4, 1, 6❩, ❨0, 5, 2, 2❩, ❨5, 7, 8, 2❩❩)', -300.0);
  Eps; Test({LINENUM}29171, 'det(❨❨7.5, 3.4, 2.2, −6.7❩, ❨4.1, 2.6, −2.4, 7.8❩, ❨2.6, 3.3, 7.2, 3.4❩, ❨2.5, 7.3, 2.2, 1.6❩❩)', -3788.5386);
  Eps; Test({LINENUM}29172, 'det(❨❨6, 2, 4, 5❩, ❨5, 1, 0, 5❩, ❨1, 3, 0, 0❩, ❨0, 1, 0, 0❩❩)', 20.0);   // fun textbook example!

  Eps; Test({LINENUM}29174, 'det(❨❨6, 2, 4, 1, 2❩, ❨6, 2, 1, 4, −2❩, ❨2, 4, 6, 8, 9❩, ❨−1, 5, 2, 2, 1❩, ❨4, 6, 2, 7, 2❩❩)', -2646.0);
  Eps; Test({LINENUM}29175, 'det(❨❨6, 2, 3, −4, 6❩, ❨1, 5, 7, 3, 2❩, ❨5, 1042, 2, 5, 7❩, ❨−5, 6, 2, 2, 1❩, ❨4, 2, 5, 7, 8❩❩)', 2279440.0);
  Eps; Test({LINENUM}29176, 'det(❨❨1534, 5432, 72, 527, 245❩, ❨63, 245, 752, 8375, 123❩, ❨35, 542, 876, 23, 524❩, ❨2314, 6453, 62, 7, 345❩, ❨35, 643, 87, 563, 345❩❩)', 5927413833983547.0);

  Eps; Test({LINENUM}29178, 'det(❨❨5, 6, 2, 3, 4, 7, 8, 4, 6, 7❩, ❨1, 5, 7, 2, 6, 8, 9, 4, 5, 7❩, ❨4, 3, 7, 6, 4, 8, 9, 0, 2, 4❩, ❨4, 7, 8, 4, 3, 7, 8, 5, 6, 9❩, ❨1, 2, 5, 7, 8, 4, 3, 7, 6, 4❩, ❨4, 7, 8, 7, 5, 2, 5, 7, 1, 3❩, ❨2, 4, 6, 7, 5, 4, 2, 4, 8, 6❩, '+'❨4, 6, 1, 5, 8, 3, 2, 4, 6, 8❩, ❨4, 6, 2, 6, 8, 2, 3, 4, 4, 3❩, ❨1, 4, 7, 3, 2, 6, 8, 5, 2, 3❩❩)', 76224.0);
  Eps; Test({LINENUM}29179, 'det(❨❨7, 6, 5, 6, 7, 5, 2, 3, 4, 5❩, ❨7, 6, 4, 8, 4, 3, 2, 1, 6, 7❩, ❨5, 6, 2, 3, 4, 5, 7, 8, 5, 3❩, ❨4, 6, 8, 3, 1, 3, 3, 6, 7, 8❩, ❨2, 8, 5, 4, 3, 3, 2, 4, 7, 8❩, ❨5, 2, 1, 3, 4, 7, 5, 4, 3, 2❩, ❨6, 3, 2, 6, 8, 5, 4, 3, 2, 6❩, '+'❨6, 7, 3, 3, 2, 1, 7, 5, 4, 2❩, ❨5, 7, 8, 3, 3, 2, 6, 7, 3, 7❩, ❨5, 2, 2, 2, 3, 1, 6, 2, 7, 4❩❩)', -1262250.0);
  Eps; Test({LINENUM}29180, 'det(❨❨5, 6, 5, 3, 8, 6, 8, 6, 8, 9❩, ❨4, 5, 7, 2, −6, 7, 3, 5, 8, 1❩, ❨0, 5, 2, 7, 8, −3, 6, 7, 7, 6❩, ❨2, 4, 5, 6, 7, 2, 123, 5, 6, 7❩, ❨1, 2, 4, 0, 5, 6, 3, 5.6, 7, 8❩, ❨4, 3, 2, 3, 7, 2, −3, 5, 2, 1❩, ❨5, 3, 6, 7, 5, 2, 1, 3, 4, −5❩, '+'❨4, 6, 6, 2, 1, 3, 7, 4, 2, 4.5❩, ❨5, 2, 4, 6, 7, 3, 4, 1, 2, 5❩, ❨6, 3, 3, 2, 21, 22, 5, 6, 0, 3❩❩)', 5192807543.4);

  Eps; Test({LINENUM}29182, 'det(' + MatLit_50x50_Rand_A + ')', 1460982.95465541113);
  Eps; Test({LINENUM}29183, 'det(' + MatLit_50x50_Rand_B + ')', 28063.2591503821555);

  Test({LINENUM}29185, 'A ≔ ' + MatLit_100x100_Rand_A + ';', null);
  Test({LINENUM}29186, 'B ≔ ' + MatLit_100x100_Rand_B + ';', null);
  Test({LINENUM}29187, 'C ≔ ' + MatLit_100x100_Rand_C + ';', null);

  Eps; Test({LINENUM}29189, 'det(A)', 5.12406946272844878E24);
  Eps; Test({LINENUM}29190, 'det(B)', 2.83947627757255657E25);
  Eps; Test({LINENUM}29191, 'det(C)', -4.14560652548419427E23);

  Eps(1E-13 * 1E50); Test({LINENUM}29193, 'det(A⋅B)', 5.12406946272844878E24 * 2.83947627757255657E25);
  Eps(1E-13 * 2E48); Test({LINENUM}29194, 'det(A⋅C)', 5.12406946272844878E24 * -4.14560652548419427E23);
  Eps(1E-13 * 1E49); Test({LINENUM}29195, 'det(B⋅C)', 2.83947627757255657E25 * -4.14560652548419427E23);

{$IFDEF QuickTest}
  Test({LINENUM}29198, 'A ≔ RandomMatrix(1000);', null);
  StartStopwatch;
  Test({LINENUM}29200, 'det(A);', null);
  StopStopwatch;
  TestDuration({LINENUM}29202, 2.5);
{$ELSE}
  Test({LINENUM}29204, 'A, B, C ≔ RandomMatrix(1000), RandomMatrix(1000), RandomMatrix(1000);', null);
  StartStopwatch;
  Test({LINENUM}29206, '''(det(A), det(B), det(C));', null);
  StopStopwatch;
  TestDuration({LINENUM}29208, 8);
{$ENDIF}

  Test({LINENUM}29211, 'A ≔ ' + MatLit_100x100_Rand_A + ';', null);
  Test({LINENUM}29212, 'B ≔ ' + MatLit_100x100_Rand_B + ';', null);
  Test({LINENUM}29213, 'C ≔ ' + MatLit_100x100_Rand_C + ';', null);

  Test({LINENUM}29215, 'det(ZeroMatrix(10))', 0.0);
  Test({LINENUM}29216, 'det(ZeroMatrix(50))', 0.0);
  Test({LINENUM}29217, 'det(ZeroMatrix(100))', 0.0);
  Test({LINENUM}29218, 'det(ZeroMatrix(500))', 0.0);

  Test({LINENUM}29220, 'det(IdentityMatrix(10))', 1.0);
  Test({LINENUM}29221, 'det(IdentityMatrix(50))', 1.0);
  Test({LINENUM}29222, 'det(IdentityMatrix(100))', 1.0);
  Test({LINENUM}29223, 'det(IdentityMatrix(500))', 1.0);

  Eps; Test({LINENUM}29225, 'det(❨❨2 + 3⋅i, 1 − 2⋅i❩, ❨4 + 5⋅i, −2 + i❩❩)', -21 - ImaginaryUnit);
  Eps; Test({LINENUM}29226, 'det(❨❨3 + 2⋅i, 1 − 2⋅i, 2 + 5⋅i❩, ❨−2 + 2⋅i, 3 + 4⋅i, 1 − i❩, ❨5 − 3⋅i, 2 + i, 1 + 4⋅i❩❩)', -95 - 190*ImaginaryUnit);
  Eps; Test({LINENUM}29227, 'det(❨❨5, 2, 7, i❩, ❨1, −2, 4, 7❩, ❨4, −i, 2, 1+i❩, ❨2, 5, 7, 2❩❩)', 528 - 134*ImaginaryUnit);
  Eps; Test({LINENUM}29228, 'det(❨❨6, 2, 4, 5, 1❩, ❨4, 6, i, 2, 1❩, ❨5, 2, 1, 8, 6❩, ❨5, −7, 2, 5, 8❩, ❨i, 2, 5, 6, 8❩❩)', 10199 - 831*ImaginaryUnit);
  Eps; Test({LINENUM}29229, 'det(❨❨6, 7, 2, 4, 5, i❩, ❨2, 3, 5, 1, 2, 1+i❩, ❨5, 2, −i, 3, 5+2⋅i, 4❩, ❨5, 6, 2, 1, 5.6, 7❩, ❨i, 2, 3, 9, 6, 7❩, ❨4, 5, 1 − i, 5, 7, 2❩❩)', 14796 - 1437.8*ImaginaryUnit);

  Eps; Test({LINENUM}29231, 'det(A + B⋅i)', -4.52570721632352749E40 + 4.52896057650712066E40*ImaginaryUnit);
  Eps; Test({LINENUM}29232, 'det(A + C⋅i)', 8.91088961396279729E40 + 3.56936742573770336E40*ImaginaryUnit);
  Eps; Test({LINENUM}29233, 'det(B + C⋅i)', 5.73508107803082928E40 + 2.07593237007640487E41*ImaginaryUnit);

  Test({LINENUM}29235, 'delete(A); delete(B); delete(C)', success);

  // Trace

  Test({LINENUM}29239, 'A ≔ ' + MatLit_100x100_Rand_A + ';', null);
  Test({LINENUM}29240, 'B ≔ ' + MatLit_100x100_Rand_B + ';', null);
  Test({LINENUM}29241, 'C ≔ ' + MatLit_100x100_Rand_C + ';', null);

  Test({LINENUM}29243, 'tr(❨❨5, 1❩, ❨2, 6❩❩)', 11.0);
  Test({LINENUM}29244, 'tr(❨❨5, 1, 6❩, ❨2, 6, 5❩, ❨4, 1, 2❩❩)', 13.0);
  Test({LINENUM}29245, 'tr(❨❨5, 1, 6, 4❩, ❨2, 6, 5, 1❩, ❨4, 1, 2, 7❩, ❨5, 2, 7, 3❩❩)', 16.0);

  Eps; Test({LINENUM}29247, 'tr(A)', 49.531483373139054);
  Eps; Test({LINENUM}29248, 'tr(B)', 45.333559668157250);
  Eps; Test({LINENUM}29249, 'tr(C)', 45.182895293924958);

  Test({LINENUM}29251, 'tr(ZeroMatrix(10))', 0.0);
  Test({LINENUM}29252, 'tr(ZeroMatrix(50))', 0.0);
  Test({LINENUM}29253, 'tr(ZeroMatrix(100))', 0.0);
  Test({LINENUM}29254, 'tr(ZeroMatrix(500))', 0.0);

  Test({LINENUM}29256, 'tr(IdentityMatrix(10))', 10.0);
  Test({LINENUM}29257, 'tr(IdentityMatrix(50))', 50.0);
  Test({LINENUM}29258, 'tr(IdentityMatrix(100))', 100.0);
  Test({LINENUM}29259, 'tr(IdentityMatrix(500))', 500.0);

  Test({LINENUM}29261, 'tr(❨❨5 + 2⋅i, 2 + 3⋅i❩, ❨−5 + 2⋅i, 4 − 5⋅i❩❩)', 9 - 3*ImaginaryUnit);
  Test({LINENUM}29262, 'tr(❨❨3, 5, 1❩, ❨2, i, 7❩, ❨4, 2, i❩❩)', 3 + 2*ImaginaryUnit);
  Test({LINENUM}29263, 'tr(❨❨5, 6, 2, i❩, ❨4, −i, 2, 6❩, ❨5, 2, 1, 7❩, ❨0, 2, 1, 2⋅i❩❩)', 6 + ImaginaryUnit);

  Eps; Test({LINENUM}29265, 'tr(A + B⋅i)', 49.5314833731390536 + 45.3335596681572497*ImaginaryUnit);
  Eps; Test({LINENUM}29266, 'tr(A + C⋅i)', 49.5314833731390536 + 45.1828952939249575*ImaginaryUnit);
  Eps; Test({LINENUM}29267, 'tr(B + C⋅i)', 45.3335596681572497 + 45.1828952939249575*ImaginaryUnit);

  Test({LINENUM}29269, 'delete(A); delete(B); delete(C)', success);

  // Inverse

  Test({LINENUM}29273, 'A ≔ ❨❨3, 1❩, ❨-2, 4❩❩', 2, [3, 1, -2, 4]);
  Eps; Test({LINENUM}29274, 'B ≔ inv(A)', 2, [0.285714285714285714, -0.0714285714285714286, 0.142857142857142857, 0.214285714285714286]);
  Test({LINENUM}29275, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29276, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29278, 'A ≔ ❨❨4, 2, 1❩, ❨4, −1, 2❩, ❨1, 5, 2❩❩', 3, [4, 2, 1, 4, -1, 2, 1, 5, 2]);
  Eps; Test({LINENUM}29279, 'B ≔ inv(A)', 3, [0.307692307692307692, -0.025641025641025641, -0.128205128205128205, 0.153846153846153846, -0.179487179487179487, 0.102564102564102564, -0.538461538461538462, 0.461538461538461538, 0.307692307692307692]);
  Test({LINENUM}29280, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29281, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29283, 'A ≔ ❨❨5, 1, 2, 3❩, ❨6, 2, 1, −4❩, ❨9, 2, 4, 7❩, ❨4, 1, 6, 8❩❩', 4, [5, 1, 2, 3, 6, 2, 1, -4, 9, 2, 4, 7, 4, 1, 6, 8]);
  Eps; Test({LINENUM}29284, 'B ≔ inv(A)', 4, [1.38636363636363636, -0.0909090909090909091, -0.568181818181818182, -0.0681818181818181818, -5.81818181818181818, 0.545454545454545455, 2.90909090909090909, -0.090909090909090909, 0.863636363636363636, 0.0909090909090909091, -0.681818181818181818, 0.318181818181818182, -0.613636363636363636, -0.0909090909090909091, 0.431818181818181818, -0.0681818181818181818]);
  Test({LINENUM}29285, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29286, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29288, 'A ≔ ❨❨5, 2, −6, 1, 2❩, ❨0, 2, 6, −7, 2❩, ❨1, 2, 7, 2, 3❩, ❨9, 8, −7, 1, 6❩, ❨5, 1, 2, 7, 6❩❩', 5, [5, 2, -6, 1, 2, 0, 2, 6, -7, 2, 1, 2, 7, 2, 3, 9, 8, -7, 1, 6, 5, 1, 2, 7, 6]);
  Eps; Test({LINENUM}29289, 'B ≔ inv(A)', 5, [0.963923337091319053, -0.00338218714768883875, 0.553175497933107854, -0.347237880496054115, -0.249530251785043217, -0.226606538895152198, -0.114994363021420519, 0.141300263059000376, 0.19391206313416009, -0.150695227358136039, 0.285231116121758737, -0.00450958286358511838, 0.293122886133032694, -0.129650507328072153, -0.1104847801578354, -0.0496054114994363021, -0.129650507328072153, 0.0939496429913566329, 0.0225479143179255919, -0.00977076287110108982, -0.802705749718151071, 0.174746335963923337, -0.691845170988350244, 0.273957158962795941, 0.447951897782788425]);
  Test({LINENUM}29290, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29291, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29293, 'A ≔ ' + MatLit_100x100_Rand_A + ';', null);
  Test({LINENUM}29294, 'B ≔ ' + MatLit_100x100_Rand_B + ';', null);
  Test({LINENUM}29295, 'C ≔ ' + MatLit_100x100_Rand_C + ';', null);

  StartStopwatch;
  Test({LINENUM}29298, 'Ai ≔ inv(A);', null);
  Test({LINENUM}29299, 'Bi ≔ inv(B);', null);
  Test({LINENUM}29300, 'Ci ≔ inv(C);', null);
  StopStopwatch;
  TestDuration({LINENUM}29302, 0.1);

  Test({LINENUM}29304, 'IsIdentity(A⋅Ai)', True);
  Test({LINENUM}29305, 'IsIdentity(Ai⋅A)', True);
  Test({LINENUM}29306, 'IsIdentity(B⋅Bi)', True);
  Test({LINENUM}29307, 'IsIdentity(Bi⋅B)', True);
  Test({LINENUM}29308, 'IsIdentity(C⋅Ci)', True);
  Test({LINENUM}29309, 'IsIdentity(Ci⋅C)', True);

  Test({LINENUM}29311, 'inv(❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 0❩❩)', failure, 'Matrix is singular.');
  Test({LINENUM}29312, 'inv(❨❨1, 0, 0❩, ❨0, 1, 0❩❩)', failure, 'Cannot compute inverse of non-square matrix.');

  Test({LINENUM}29314, 'A ≔ ❨❨2 + 3⋅i, 1 − 2⋅i❩, ❨−4⋅i, 6 + 5⋅i❩❩', 2, [2 + 3*ImaginaryUnit, 1 - 2*ImaginaryUnit, -4*ImaginaryUnit, 6 + 5*ImaginaryUnit]);
  Eps; Test({LINENUM}29315, 'B ≔ inv(A)', 2, [0.181124880838894185 - 0.159199237368922784*ImaginaryUnit, 0.0562440419447092469 + 0.0400381315538608198*ImaginaryUnit, 0.122020972354623451 + 0.0190657769304099142*ImaginaryUnit, 0.101048617731172545 - 0.0467111534795042898*ImaginaryUnit]);
  Test({LINENUM}29316, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29317, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29319, 'A ≔ ❨❨2, 1, i❩, ❨5, 1, 2❩, ❨−2, 5, −i❩❩', 3, [2, 1, ImaginaryUnit, 5, 1, 2, -2, 5, -ImaginaryUnit]);
  Eps; Test({LINENUM}29320, 'B ≔ inv(A)', 3, [0.142276422764227642 + 0.21951219512195122*ImaginaryUnit, 0.121951219512195122 - 0.0975609756097560976*ImaginaryUnit, -0.0528455284552845528 - 0.0243902439024390244*ImaginaryUnit, 0.166666666666666667 + 5.01945450224770571E-21*ImaginaryUnit, -5.01945450224770571E-21, 0.166666666666666667, -0.439024390243902439 - 0.548780487804878049*ImaginaryUnit, 0.195121951219512195 + 0.243902439024390244*ImaginaryUnit, 0.0487804878048780488 + 0.060975609756097561*ImaginaryUnit]);
  Test({LINENUM}29321, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29322, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29324, 'A ≔ ❨❨5, 2, i, 1❩, ❨6, 2, 1, 2❩, ❨−4, 1, 2, i❩, ❨−i, 1, 5, 8❩❩', 4, [5, 2, ImaginaryUnit, 1, 6, 2, 1, 2, -4, 1, 2, ImaginaryUnit, -ImaginaryUnit, 1, 5, 8]);
  Eps; Test({LINENUM}29325, 'B ≔ inv(A)', 4, [-0.173183213920163767 - 0.142169907881269191*ImaginaryUnit, 0.242579324462640737 + 0.129989764585465711*ImaginaryUnit, -0.103070624360286592 + 0.026202661207778915*ImaginaryUnit, -0.035721596724667349 - 0.00184237461617195497*ImaginaryUnit, 0.50962128966223132 + 0.424564994882292733*ImaginaryUnit, -0.180143295803480041 - 0.396110542476970317*ImaginaryUnit, 0.366837256908904811 - 0.0570112589559877175*ImaginaryUnit, -0.0257932446264073695 + 0.000102354145342886399*ImaginaryUnit, -0.446878198567041965 - 0.61330603889457523*ImaginaryUnit, 0.430910951893551689 + 0.589559877175025589*ImaginaryUnit, 0.0679631525076765609 + 0.126714431934493347*ImaginaryUnit, -0.0360286591606960082 - 0.0792221084953940635*ImaginaryUnit, 0.233367451381780962 + 0.308597748208802456*ImaginaryUnit, -0.263050153531218014 - 0.288638689866939611*ImaginaryUnit, -0.0916069600818833163 - 0.0849539406345957011*ImaginaryUnit, 0.150972364380757421 + 0.0450358239508700102*ImaginaryUnit]);
  Test({LINENUM}29326, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29327, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29329, 'A ≔ ' + MatLit_100x100_Rand_A + ';', null);
  Test({LINENUM}29330, 'B ≔ ' + MatLit_100x100_Rand_B + ';', null);
  Test({LINENUM}29331, 'C ≔ ' + MatLit_100x100_Rand_C + ';', null);

  Test({LINENUM}29333, 'X ≔ A + B⋅i;', null);
  Test({LINENUM}29334, 'Y ≔ A + C⋅i;', null);
  Test({LINENUM}29335, 'Z ≔ B + C⋅i;', null);

  StartStopwatch;
  Test({LINENUM}29338, 'Xi ≔ inv(X);', null);
  Test({LINENUM}29339, 'Yi ≔ inv(Y);', null);
  Test({LINENUM}29340, 'Zi ≔ inv(Z);', null);
  StopStopwatch;
  TestDuration({LINENUM}29342, 0.2);

  Test({LINENUM}29344, 'IsIdentity(X⋅Xi)', True);
  Test({LINENUM}29345, 'IsIdentity(Xi⋅X)', True);
  Test({LINENUM}29346, 'IsIdentity(Y⋅Yi)', True);
  Test({LINENUM}29347, 'IsIdentity(Yi⋅Y)', True);
  Test({LINENUM}29348, 'IsIdentity(Z⋅Zi)', True);
  Test({LINENUM}29349, 'IsIdentity(Zi⋅Z)', True);

  Test({LINENUM}29351, 'inv(❨❨i, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 0❩❩)', failure, 'Matrix is singular.');
  Test({LINENUM}29352, 'inv(❨❨i, 0, 0❩, ❨0, 1, 0❩❩)', failure, 'Cannot compute inverse of non-square matrix.');

  Test({LINENUM}29354, 'A ≔ ❨❨3, 1❩, ❨-2, 4❩❩', 2, [3, 1, -2, 4]);
  Eps; Test({LINENUM}29355, 'B ≔ A^−1', 2, [0.285714285714285714, -0.0714285714285714286, 0.142857142857142857, 0.214285714285714286]);
  Test({LINENUM}29356, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29357, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29359, 'A ≔ ❨❨4, 2, 1❩, ❨4, −1, 2❩, ❨1, 5, 2❩❩', 3, [4, 2, 1, 4, -1, 2, 1, 5, 2]);
  Eps; Test({LINENUM}29360, 'B ≔ A^−1', 3, [0.307692307692307692, -0.025641025641025641, -0.128205128205128205, 0.153846153846153846, -0.179487179487179487, 0.102564102564102564, -0.538461538461538462, 0.461538461538461538, 0.307692307692307692]);
  Test({LINENUM}29361, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29362, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29364, 'A ≔ ❨❨5, 1, 2, 3❩, ❨6, 2, 1, −4❩, ❨9, 2, 4, 7❩, ❨4, 1, 6, 8❩❩', 4, [5, 1, 2, 3, 6, 2, 1, -4, 9, 2, 4, 7, 4, 1, 6, 8]);
  Eps; Test({LINENUM}29365, 'B ≔ A^−1', 4, [1.38636363636363636, -0.0909090909090909091, -0.568181818181818182, -0.0681818181818181818, -5.81818181818181818, 0.545454545454545455, 2.90909090909090909, -0.090909090909090909, 0.863636363636363636, 0.0909090909090909091, -0.681818181818181818, 0.318181818181818182, -0.613636363636363636, -0.0909090909090909091, 0.431818181818181818, -0.0681818181818181818]);
  Test({LINENUM}29366, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29367, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29369, 'A ≔ ❨❨5, 2, −6, 1, 2❩, ❨0, 2, 6, −7, 2❩, ❨1, 2, 7, 2, 3❩, ❨9, 8, −7, 1, 6❩, ❨5, 1, 2, 7, 6❩❩', 5, [5, 2, -6, 1, 2, 0, 2, 6, -7, 2, 1, 2, 7, 2, 3, 9, 8, -7, 1, 6, 5, 1, 2, 7, 6]);
  Eps; Test({LINENUM}29370, 'B ≔ A^−1', 5, [0.963923337091319053, -0.00338218714768883875, 0.553175497933107854, -0.347237880496054115, -0.249530251785043217, -0.226606538895152198, -0.114994363021420519, 0.141300263059000376, 0.19391206313416009, -0.150695227358136039, 0.285231116121758737, -0.00450958286358511838, 0.293122886133032694, -0.129650507328072153, -0.1104847801578354, -0.0496054114994363021, -0.129650507328072153, 0.0939496429913566329, 0.0225479143179255919, -0.00977076287110108982, -0.802705749718151071, 0.174746335963923337, -0.691845170988350244, 0.273957158962795941, 0.447951897782788425]);
  Test({LINENUM}29371, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29372, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29374, 'A ≔ ❨❨2 + 3⋅i, 1 − 2⋅i❩, ❨−4⋅i, 6 + 5⋅i❩❩', 2, [2 + 3*ImaginaryUnit, 1 - 2*ImaginaryUnit, -4*ImaginaryUnit, 6 + 5*ImaginaryUnit]);
  Eps; Test({LINENUM}29375, 'B ≔ A^−1', 2, [0.181124880838894185 - 0.159199237368922784*ImaginaryUnit, 0.0562440419447092469 + 0.0400381315538608198*ImaginaryUnit, 0.122020972354623451 + 0.0190657769304099142*ImaginaryUnit, 0.101048617731172545 - 0.0467111534795042898*ImaginaryUnit]);
  Test({LINENUM}29376, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29377, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29379, 'A ≔ ❨❨2, 1, i❩, ❨5, 1, 2❩, ❨−2, 5, −i❩❩', 3, [2, 1, ImaginaryUnit, 5, 1, 2, -2, 5, -ImaginaryUnit]);
  Eps; Test({LINENUM}29380, 'B ≔ A^−1', 3, [0.142276422764227642 + 0.21951219512195122*ImaginaryUnit, 0.121951219512195122 - 0.0975609756097560976*ImaginaryUnit, -0.0528455284552845528 - 0.0243902439024390244*ImaginaryUnit, 0.166666666666666667 + 5.01945450224770571E-21*ImaginaryUnit, -5.01945450224770571E-21, 0.166666666666666667, -0.439024390243902439 - 0.548780487804878049*ImaginaryUnit, 0.195121951219512195 + 0.243902439024390244*ImaginaryUnit, 0.0487804878048780488 + 0.060975609756097561*ImaginaryUnit]);
  Test({LINENUM}29381, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29382, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29384, 'A ≔ ❨❨5, 2, i, 1❩, ❨6, 2, 1, 2❩, ❨−4, 1, 2, i❩, ❨−i, 1, 5, 8❩❩', 4, [5, 2, ImaginaryUnit, 1, 6, 2, 1, 2, -4, 1, 2, ImaginaryUnit, -ImaginaryUnit, 1, 5, 8]);
  Eps; Test({LINENUM}29385, 'B ≔ A^−1', 4, [-0.173183213920163767 - 0.142169907881269191*ImaginaryUnit, 0.242579324462640737 + 0.129989764585465711*ImaginaryUnit, -0.103070624360286592 + 0.026202661207778915*ImaginaryUnit, -0.035721596724667349 - 0.00184237461617195497*ImaginaryUnit, 0.50962128966223132 + 0.424564994882292733*ImaginaryUnit, -0.180143295803480041 - 0.396110542476970317*ImaginaryUnit, 0.366837256908904811 - 0.0570112589559877175*ImaginaryUnit, -0.0257932446264073695 + 0.000102354145342886399*ImaginaryUnit, -0.446878198567041965 - 0.61330603889457523*ImaginaryUnit, 0.430910951893551689 + 0.589559877175025589*ImaginaryUnit, 0.0679631525076765609 + 0.126714431934493347*ImaginaryUnit, -0.0360286591606960082 - 0.0792221084953940635*ImaginaryUnit, 0.233367451381780962 + 0.308597748208802456*ImaginaryUnit, -0.263050153531218014 - 0.288638689866939611*ImaginaryUnit, -0.0916069600818833163 - 0.0849539406345957011*ImaginaryUnit, 0.150972364380757421 + 0.0450358239508700102*ImaginaryUnit]);
  Test({LINENUM}29386, 'IsIdentity(A⋅B)', True);
  Test({LINENUM}29387, 'IsIdentity(B⋅A)', True);

  Test({LINENUM}29389, 'delete(A); delete(B); delete(C); delete(Ai); delete(Bi); delete(Ci); delete(X); delete(Y); delete(Z); delete(Xi); delete(Yi); delete(Zi)', success);

  // Rank, nullity, singularity

  Test({LINENUM}29393, 'A ≔ ❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩; B ≔ ❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 0❩❩; C ≔ ❨❨1, 0, 0❩, ❨0, 0, 0❩, ❨0, 0, 0❩❩; D ≔ ❨❨0, 0, 0❩, ❨0, 0, 0❩, ❨0, 0, 0❩❩;', null);
  Test({LINENUM}29394, 'E ≔ ❨❨5, 6, 5❩, ❨2, 3, 2❩, ❨1, −2, 5❩❩; F ≔ ❨❨5, 6, 2❩, ❨2, 3, 2❩, ❨1, −2, −6❩❩; G ≔ ❨❨2, −6, 4❩, ❨−1, 3, −2❩, ❨3, −9, 6❩❩;', null);
  Test({LINENUM}29395, 'H ≔ ❨❨2, 5❩, ❨1, 4❩, ❨7, 4❩❩; I ≔ ❨❨2, 4❩, ❨1, 2❩, ❨7, 14❩❩; J ≔ ❨❨3, −2, 7❩, ❨1, 4, 6❩❩; K ≔ ❨❨3, −2, −1❩, ❨1, 4, 5❩❩; L ≔ ❨❨3, 6, 9❩, ❨1, 2, 3❩❩;', null);
  Test({LINENUM}29396, 'M ≔ ❨❨5, 2, 4, 7❩, ❨8, 5, 3, −5❩, ❨3, 6, 8, 2❩, ❨1, −1, 7, 4❩❩; N ≔ ❨❨5, 2, 14, 7❩, ❨8, 5, 8, −5❩, ❨3, 6, 11, 2❩, ❨1, −1, 4, 4❩❩; O ≔ ❨❨5, 2, 3, −2❩, ❨8, 5, 3, 4❩, ❨3, 6, −3, 18❩, ❨1, −1, 2, −6❩❩;'+' P ≔ ❨❨5, 10, 15, −5❩, ❨8, 16, 24, −8❩, ❨3, 6, 9, −3❩, ❨1, 2, 3, −1❩❩;', null);
  Test({LINENUM}29397, 'Q ≔ ❨❨2, 5, 4, 1, 5, 8❩, ❨2, −5, 6, 2, 7, 0❩, ❨2, 6, 3, 7, 5, 8❩, ❨5, 6, 9, −1, 5, 7❩, ❨9, 3, −9, 2, 0, 1❩, ❨4, 8, 6, 8, 3, 5❩❩; '+'R ≔ ❨❨2, 5, 4, 1, 5, 8❩, ❨3, −5, 6, 2, 7, 0❩, ❨2, 6, 3, 0, 5, 8❩, ❨5, 6, 9, 9, 5, 7❩, ❨9, 3, −9, 0, 0, 1❩, ❨4, 8, 6, 7, 3, 5❩❩; '+'S ≔ ❨❨2, 4, 4, 1, 5, 8❩, ❨3, −5, 6, 2, 7, 0❩, ❨2, 3, 3, 0, 5, 8❩, ❨5, 11, 9, 9, 5, 7❩, ❨9, 1, −9, 0, 0, 1❩, ❨4, 9, 6, 7, 3, 5❩❩;', null);

  Test({LINENUM}29399, 'rank(A)', 3);
  Test({LINENUM}29400, 'nullity(A)', 0);
  Test({LINENUM}29401, 'IsSingular(A)', False);

  Test({LINENUM}29403, 'rank(B)', 2);
  Test({LINENUM}29404, 'nullity(B)', 1);
  Test({LINENUM}29405, 'IsSingular(B)', True);

  Test({LINENUM}29407, 'rank(C)', 1);
  Test({LINENUM}29408, 'nullity(C)', 2);
  Test({LINENUM}29409, 'IsSingular(C)', True);

  Test({LINENUM}29411, 'rank(D)', 0);
  Test({LINENUM}29412, 'nullity(D)', 3);
  Test({LINENUM}29413, 'IsSingular(D)', True);

  Test({LINENUM}29415, 'rank(E)', 3);
  Test({LINENUM}29416, 'nullity(E)', 0);
  Test({LINENUM}29417, 'IsSingular(E)', False);

  Test({LINENUM}29419, 'rank(F)', 2);
  Test({LINENUM}29420, 'nullity(F)', 1);
  Test({LINENUM}29421, 'IsSingular(F)', True);

  Test({LINENUM}29423, 'rank(G)', 1);
  Test({LINENUM}29424, 'nullity(G)', 2);
  Test({LINENUM}29425, 'IsSingular(G)', True);

  Test({LINENUM}29427, 'rank(H)', 2);
  Test({LINENUM}29428, 'nullity(H)', 0);
  Test({LINENUM}29429, 'IsSingular(H)', failure, 'Matrix is not square.');

  Test({LINENUM}29431, 'rank(I)', 1);
  Test({LINENUM}29432, 'nullity(I)', 1);
  Test({LINENUM}29433, 'IsSingular(I)', failure, 'Matrix is not square.');

  Test({LINENUM}29435, 'rank(J)', 2);
  Test({LINENUM}29436, 'nullity(J)', 1);
  Test({LINENUM}29437, 'IsSingular(J)', failure, 'Matrix is not square.');

  Test({LINENUM}29439, 'rank(K)', 2);
  Test({LINENUM}29440, 'nullity(K)', 1);
  Test({LINENUM}29441, 'IsSingular(K)', failure, 'Matrix is not square.');

  Test({LINENUM}29443, 'rank(L)', 1);
  Test({LINENUM}29444, 'nullity(L)', 2);
  Test({LINENUM}29445, 'IsSingular(L)', failure, 'Matrix is not square.');

  Test({LINENUM}29447, 'rank(M)', 4);
  Test({LINENUM}29448, 'nullity(M)', 0);
  Test({LINENUM}29449, 'IsSingular(M)', False);

  Test({LINENUM}29451, 'rank(N)', 3);
  Test({LINENUM}29452, 'nullity(N)', 1);
  Test({LINENUM}29453, 'IsSingular(N)', True);

  Test({LINENUM}29455, 'rank(O)', 2);
  Test({LINENUM}29456, 'nullity(O)', 2);
  Test({LINENUM}29457, 'IsSingular(O)', True);

  Test({LINENUM}29459, 'rank(P)', 1);
  Test({LINENUM}29460, 'nullity(P)', 3);
  Test({LINENUM}29461, 'IsSingular(P)', True);

  Test({LINENUM}29463, 'rank(Q)', 6);
  Test({LINENUM}29464, 'nullity(Q)', 0);
  Test({LINENUM}29465, 'IsSingular(Q)', False);

  Test({LINENUM}29467, 'rank(R)', 5);
  Test({LINENUM}29468, 'nullity(R)', 1);
  Test({LINENUM}29469, 'IsSingular(R)', True);

  Test({LINENUM}29471, 'rank(S)', 4);
  Test({LINENUM}29472, 'nullity(S)', 2);
  Test({LINENUM}29473, 'IsSingular(S)', True);

  Test({LINENUM}29475, 'delete(A); delete(B); delete(C); delete(D); delete(E); delete(F); delete(G); delete(H); delete(I); delete(J); delete(K); delete(L); delete(M); delete(N); delete(O); delete(P); delete(Q); delete(R); delete(S)', success);

  Test({LINENUM}29477, 'A ≔ ' + MatLit_100x100_Rand_A + ';', null);
  Test({LINENUM}29478, 'B ≔ ' + MatLit_100x100_Rand_B + ';', null);
  Test({LINENUM}29479, 'C ≔ ' + MatLit_100x100_Rand_C + ';', null);

  StartStopwatch;

  Test({LINENUM}29483, 'rank(A)', 100);
  Test({LINENUM}29484, 'nullity(A)', 0);
  Test({LINENUM}29485, 'IsSingular(A)', False);

  Test({LINENUM}29487, 'rank(B)', 100);
  Test({LINENUM}29488, 'nullity(B)', 0);
  Test({LINENUM}29489, 'IsSingular(B)', False);

  Test({LINENUM}29491, 'rank(C)', 100);
  Test({LINENUM}29492, 'nullity(C)', 0);
  Test({LINENUM}29493, 'IsSingular(C)', False);

  StopStopwatch;
  TestDuration({LINENUM}29496, 0.15);

  Test({LINENUM}29498, 'col(A, 3) ≔ col(A, 1) + col(A, 2);', null);
  Test({LINENUM}29499, 'rank(A)', 99);
  Test({LINENUM}29500, 'nullity(A)', 1);
  Test({LINENUM}29501, 'IsSingular(A)', True);

  Test({LINENUM}29503, 'A ≔ ❨❨i, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩; B ≔ ❨❨i, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 0❩❩; C ≔ ❨❨i, 0, 0❩, ❨0, 0, 0❩, ❨0, 0, 0❩❩; D ≔ ComplexMatrix(❨❨0, 0, 0❩, ❨0, 0, 0❩, ❨0, 0, 0❩❩);', null);
  Test({LINENUM}29504, 'E ≔ ❨❨5, 6, 5❩, ❨2, 3, 2❩, ❨i, −2, 5❩❩; F ≔ ❨❨5, 6, 1❩, ❨2, 3, 1❩, ❨i, −2, −2−i❩❩; G ≔ ❨❨2, −6, 4❩, ❨−1, 3, −2❩, ❨i, −3⋅i, 2⋅i❩❩;', null);
  Test({LINENUM}29505, 'H ≔ ❨❨2, 5❩, ❨i, 4❩, ❨7, 4❩❩; I ≔ ❨❨2, 4❩, ❨i, 2⋅i❩, ❨7, 14❩❩; J ≔ ❨❨3, −2, 7❩, ❨i, 4, 6❩❩; K ≔ ❨❨3, −2, 1❩, ❨i, 4, 4+i❩❩; L ≔ ❨❨3, 6, 9❩, ❨i, 2⋅i, 3⋅i❩❩;', null);
  Test({LINENUM}29506, 'M ≔ ❨❨5, 2, 4, 7❩, ❨8, 5, 3, −5❩, ❨3, 6, 8, 2❩, ❨i, −1, 7, 4❩❩; N ≔ ❨❨5, 2, 14, 7❩, ❨8, 5, 8, −5❩, ❨3, 6, 11, 2❩, ❨i, −1, 3+i, 4❩❩; O ≔ ❨❨5, 2, 7, 3❩, ❨8, 5, 13, 3❩, ❨3, 6, 9, −3❩, ❨i, −1, −1+i, 1+i❩❩;'+' P ≔ ❨❨5, 10, 15, −5❩, ❨8, 16, 24, −8❩, ❨3, 6, 9, −3❩, ❨i, 2⋅i, 3⋅i, −i❩❩;', null);
  Test({LINENUM}29507, 'Q ≔ ❨❨2, 5, 4, i, 5, 8❩, ❨3, −5, 6, 2, 7, 0❩, ❨2, 6, 3, 7, 5, 8❩, ❨5, 6, 9, −1, 5, 7❩, ❨9, 3, −9, 2, 0, 1❩, ❨4, 8, 6, 8, 3, 5❩❩; '+'R ≔ ❨❨2, 5, 4, i, 4+i, 8❩, ❨3, -5, 6, 2, 8, 0❩, ❨2, 6, 3, 7, 10, 8❩, ❨5, 6, 9, -1, 8, 7❩, ❨9, 3, −9, 2, -7, 1❩, ❨4, 8, 6, 8, 14, 5❩❩; '+'S ≔ ❨❨2, 5, 4, i, 4+i, 7❩, ❨3, −5, 6, 2, 8, -2❩, ❨2, 6, 3, 7, 10, 8❩, ❨5, 6, 9, -1, 8, 11❩, ❨9, 3, −9, 2, -7, 12❩, ❨4, 8, 6, 8, 14, 12❩❩;', null);

  Test({LINENUM}29509, 'rank(A)', 3);
  Test({LINENUM}29510, 'nullity(A)', 0);
  Test({LINENUM}29511, 'IsSingular(A)', False);

  Test({LINENUM}29513, 'rank(B)', 2);
  Test({LINENUM}29514, 'nullity(B)', 1);
  Test({LINENUM}29515, 'IsSingular(B)', True);

  Test({LINENUM}29517, 'rank(C)', 1);
  Test({LINENUM}29518, 'nullity(C)', 2);
  Test({LINENUM}29519, 'IsSingular(C)', True);

  Test({LINENUM}29521, 'rank(D)', 0);
  Test({LINENUM}29522, 'nullity(D)', 3);
  Test({LINENUM}29523, 'IsSingular(D)', True);

  Test({LINENUM}29525, 'rank(E)', 3);
  Test({LINENUM}29526, 'nullity(E)', 0);
  Test({LINENUM}29527, 'IsSingular(E)', False);

  Test({LINENUM}29529, 'rank(F)', 2);
  Test({LINENUM}29530, 'nullity(F)', 1);
  Test({LINENUM}29531, 'IsSingular(F)', True);

  Test({LINENUM}29533, 'rank(G)', 1);
  Test({LINENUM}29534, 'nullity(G)', 2);
  Test({LINENUM}29535, 'IsSingular(G)', True);

  Test({LINENUM}29537, 'rank(H)', 2);
  Test({LINENUM}29538, 'nullity(H)', 0);
  Test({LINENUM}29539, 'IsSingular(H)', failure, 'Matrix is not square.');

  Test({LINENUM}29541, 'rank(I)', 1);
  Test({LINENUM}29542, 'nullity(I)', 1);
  Test({LINENUM}29543, 'IsSingular(I)', failure, 'Matrix is not square.');

  Test({LINENUM}29545, 'rank(J)', 2);
  Test({LINENUM}29546, 'nullity(J)', 1);
  Test({LINENUM}29547, 'IsSingular(J)', failure, 'Matrix is not square.');

  Test({LINENUM}29549, 'rank(K)', 2);
  Test({LINENUM}29550, 'nullity(K)', 1);
  Test({LINENUM}29551, 'IsSingular(K)', failure, 'Matrix is not square.');

  Test({LINENUM}29553, 'rank(L)', 1);
  Test({LINENUM}29554, 'nullity(L)', 2);
  Test({LINENUM}29555, 'IsSingular(L)', failure, 'Matrix is not square.');

  Test({LINENUM}29557, 'rank(M)', 4);
  Test({LINENUM}29558, 'nullity(M)', 0);
  Test({LINENUM}29559, 'IsSingular(M)', False);

  Test({LINENUM}29561, 'rank(N)', 3);
  Test({LINENUM}29562, 'nullity(N)', 1);
  Test({LINENUM}29563, 'IsSingular(N)', True);

  Test({LINENUM}29565, 'rank(O)', 2);
  Test({LINENUM}29566, 'nullity(O)', 2);
  Test({LINENUM}29567, 'IsSingular(O)', True);

  Test({LINENUM}29569, 'rank(P)', 1);
  Test({LINENUM}29570, 'nullity(P)', 3);
  Test({LINENUM}29571, 'IsSingular(P)', True);

  Test({LINENUM}29573, 'rank(Q)', 6);
  Test({LINENUM}29574, 'nullity(Q)', 0);
  Test({LINENUM}29575, 'IsSingular(Q)', False);

  Test({LINENUM}29577, 'rank(R)', 5);
  Test({LINENUM}29578, 'nullity(R)', 1);
  Test({LINENUM}29579, 'IsSingular(R)', True);

  Test({LINENUM}29581, 'rank(S)', 4);
  Test({LINENUM}29582, 'nullity(S)', 2);
  Test({LINENUM}29583, 'IsSingular(S)', True);

  Test({LINENUM}29585, 'A ≔ ' + MatLit_100x100_Rand_A + ';', null);
  Test({LINENUM}29586, 'B ≔ ' + MatLit_100x100_Rand_B + ';', null);
  Test({LINENUM}29587, 'C ≔ ' + MatLit_100x100_Rand_C + ';', null);

  Test({LINENUM}29589, 'X ≔ A + B⋅i;', null);
  Test({LINENUM}29590, 'Y ≔ A + C⋅i;', null);
  Test({LINENUM}29591, 'Z ≔ B + C⋅i;', null);

  Test({LINENUM}29593, 'rank(X)', 100);
  Test({LINENUM}29594, 'nullity(X)', 0);
  Test({LINENUM}29595, 'IsSingular(X)', False);

  Test({LINENUM}29597, 'rank(Y)', 100);
  Test({LINENUM}29598, 'nullity(Y)', 0);
  Test({LINENUM}29599, 'IsSingular(Y)', False);

  Test({LINENUM}29601, 'rank(Z)', 100);
  Test({LINENUM}29602, 'nullity(Z)', 0);
  Test({LINENUM}29603, 'IsSingular(Z)', False);

  Test({LINENUM}29605, 'col(X, 85) ≔ col(X, 31) + col(X, 57);', null);
  Test({LINENUM}29606, 'rank(X)', 99);
  Test({LINENUM}29607, 'nullity(X)', 1);
  Test({LINENUM}29608, 'IsSingular(X)', True);

  Test({LINENUM}29610, 'delete(A); delete(B); delete(C); delete(D); delete(E); delete(F); delete(G); delete(H); delete(I); delete(J); delete(K); delete(L); delete(M); delete(N); delete(O); delete(P); delete(Q); delete(R); delete(S); delete(X); delete(Y); delete(Z)', success);

  // Matrix square root

  Eps; Test({LINENUM}29614, '√❨❨97, 52, 8❩, ❨52, 36, 18❩, ❨8, 18, 29❩❩', 3, [9, 4, 0, 4, 4, 2, 0, 2, 5]);
  Eps; Test({LINENUM}29615, '√❨❨254, 223, 159❩, ❨223, 326, 309❩, ❨159, 309, 414❩❩', 3, [14, 7, 3, 7, 14, 9, 3, 9, 18]);
  Eps(1E-15); Test({LINENUM}29616, '√❨❨78, 29, -110❩, ❨29, 174, 10❩, ❨-110, 10, 171❩❩', 3, [5, 2, -7, 2, 13, 1, -7, 1, 11]);
  Eps; Test({LINENUM}29617, '√❨❨110, 43, 81❩, ❨43, 38, 43❩, ❨81, 43, 70❩❩', 3, [9, 2, 5, 2, 5, 3, 5, 3, 6]);

  Eps; Test({LINENUM}29619, '√❨❨3851, -3325, 2089, -1042, -228, -1852❩, ❨-3325, 8385, -239, -2309, 2257, 2174❩, ❨2089, -239, 9449, -477, 1633, -432❩, ❨-1042, -2309, -477, 3079, -170, -1546❩, ❨-228, 2257, 1633, -170, 2070, -1689❩, ❨-1852, 2174, -432, -1546, -1689, 5123❩❩',
    6, [46, -27, 15, -21, -4, -18, -27, 81, -1, -21, 22, 13, 15, -1, 95, -1, 14, 1, -21, -21, -1, 44, -2, -16, -4, 22, 14, -2, 29, -23, -18, 13, 1, -16, -23, 62]);

  Eps; Test({LINENUM}29622, '√❨❨2.7188, 1.673, -2.6948, -1.7114, -2.4302, -3.0205❩, ❨1.673, 3.0471, -1.7734, -0.1466, -1.7598, -1.1892❩, ❨-2.6948, -1.7734, 2.9028, 1.5929, 2.7186, 3.4337❩, ❨-1.7114, -0.1466, 1.5929, 1.7656, 1.295, 1.5489❩, '+'❨-2.4302, -1.7598, 2.7186, 1.295, 5.3695, 6.4108❩, ❨-3.0205, -1.1892, 3.4337, 1.5489, 6.4108, 9.1433❩❩',
    6, [1.03, 0.5, -0.77, -0.63, -0.34, -0.55, 0.5, 1.52, -0.49, 0.21, -0.45, 0, -0.77, -0.49, 1.12, 0.47, 0.43, 0.64, -0.63, 0.21, 0.47, 1, 0.29, 0.14, -0.34, -0.45, 0.43, 0.29, 1.68, 1.4, -0.55, 0, 0.64, 0.14, 1.4, 2.54]);

  Test({LINENUM}29625, '√❨❨4, 1, 2❩, ❨6, 2, 2❩, ❨6, 7, 2❩❩', failure, 'Matrix square root only defined for positive semidefinite symmetric matrices.');

  Eps; Test({LINENUM}29627, '√❨❨359, 165 - 231⋅i, -115 + 184⋅i❩, ❨165 + 231⋅i, 435, -81 + 5⋅i❩, ❨-115 - 184⋅i, -81 - 5⋅i, 170❩❩',
    3, [14, 5 - 7*ImaginaryUnit, -5 + 8*ImaginaryUnit, 5 + 7*ImaginaryUnit, 19, 0, -5 - 8*ImaginaryUnit, 0, 9]);

  Eps; Test({LINENUM}29630, '√❨❨26.4021, 0.2278 + 10.1106⋅i, 13.3148 + 23.222⋅i, 5.0529 - 20.124⋅i, -7.901 - 14.2179⋅i, -13.1404 + 0.042⋅i❩, ❨0.2278 - 10.1106⋅i, 9.4228, 8.4996 - 2.7067⋅i, -13.4986 - 6.9818⋅i, -6.7041 + 1.6279⋅i, 8.5688 + 5.9575⋅i❩, '+'❨13.3148 - 23.222⋅i, 8.4996 + 2.7067⋅i, 32.7353, -21.7024 - 7.3565⋅i, -22.3923 + 0.4343⋅i, -2.345 + 4.8311⋅i❩, ❨5.0529 + 20.124⋅i, -13.4986 + 6.9818⋅i, -21.7024 + 7.3565⋅i, 40.997, 19.3339 - 0.0229999999999999992⋅i, -22.8175 - 2.0227⋅i❩, '+'❨-7.901 + 14.2179⋅i, -6.7041 - 1.6279⋅i, -22.3923 - 0.4343⋅i, 19.3339 + 0.0229999999999999992⋅i, 20.7363, -2.6089 - 0.8045⋅i❩, ❨-13.1404 - 0.042⋅i, 8.5688 - 5.9575⋅i, -2.345 - 4.8311⋅i, -22.8175 + 2.0227⋅i, -2.6089 + 0.8045⋅i, 33.2686❩❩',
    6, [3.27, 0.08 + 0.88*ImaginaryUnit, 1.52 + 2.23*ImaginaryUnit, 0.7 - 1.8*ImaginaryUnit, -0.98 - 1.03*ImaginaryUnit, -1.27 - 0.53*ImaginaryUnit, 0.08 - 0.88*ImaginaryUnit, 2.06, 0.43 - 0.25*ImaginaryUnit, -1.23 - 1.02*ImaginaryUnit, -0.62 + 0.54*ImaginaryUnit, 0.89 + 0.36*ImaginaryUnit, 1.52 - 2.23*ImaginaryUnit, 0.43 + 0.25*ImaginaryUnit, 4.14, -1.78 - 0.43*ImaginaryUnit, -2.11 + 0.24*ImaginaryUnit, -0.42 + 0.16*ImaginaryUnit, 0.7 + 1.8*ImaginaryUnit, -1.23 + 1.02*ImaginaryUnit, -1.78 + 0.43*ImaginaryUnit, 4.77, 1.77 + 0.67*ImaginaryUnit, -2.24 + 0.09*ImaginaryUnit, -0.98 + 1.03*ImaginaryUnit, -0.62 - 0.54*ImaginaryUnit, -2.11 - 0.24*ImaginaryUnit, 1.77 - 0.67*ImaginaryUnit, 3.15, -0.13 - 0.09*ImaginaryUnit, -1.27 + 0.53*ImaginaryUnit, 0.89 - 0.36*ImaginaryUnit, -0.42 - 0.16*ImaginaryUnit, -2.24 - 0.09*ImaginaryUnit, -0.13 + 0.09*ImaginaryUnit, 5.02]);

  // Hermitian square and modulus

  Test({LINENUM}29635, 'HermitianSquare(❨❨3, 5, 1❩, ❨2, 1, 5❩❩)', 3, [13, 17, 13, 17, 26, 10, 13, 10, 26]);
  Test({LINENUM}29636, 'HermitianSquare(❨❨6, 1, 3, 5❩❩)', 4, [36, 6, 18, 30, 6, 1, 3, 5, 18, 3, 9, 15, 30, 5, 15, 25]);
  Test({LINENUM}29637, 'HermitianSquare(❨❨5, 1, 2, 3❩, ❨6, 2, 1, 1❩, ❨0, 6, 7, −3❩, ❨5, 1, 3, 8❩❩)', 4, [86, 22, 31, 61, 22, 42, 49, -5, 31, 49, 63, 10, 61, -5, 10, 83]);

  Test({LINENUM}29639, 'HermitianSquare(❨❨3, i❩, ❨1, −i❩, ❨4, 7❩❩)', 2, [26, 28 + 2*ImaginaryUnit, 28 - 2*ImaginaryUnit, 51]);
  Test({LINENUM}29640, 'HermitianSquare(❨❨6, 1 + i, 2 − 3⋅i❩, ❨6, 1, i❩❩)', 3, [72, 12+6*ImaginaryUnit, 12-12*ImaginaryUnit, 12-6*ImaginaryUnit, 3, -1-4*ImaginaryUnit, 12+12*ImaginaryUnit, -1+4*ImaginaryUnit, 14]);
  Test({LINENUM}29641, 'HermitianSquare(❨❨1, 4, i❩, ❨4, −2, 1❩, ❨0, 1, 5❩❩)', 3, [17, -4, 4+ImaginaryUnit, -4, 21, 3+4*ImaginaryUnit, 4-ImaginaryUnit, 3-4*ImaginaryUnit, 27]);

  Test({LINENUM}29643, 'A ≔ ❨❨4, 3, 5❩, ❨7, −3, 1❩, ❨1, 4, 8❩❩', 3, [4, 3, 5, 7, -3, 1, 1, 4, 8]);
  Eps; Test({LINENUM}29644, 'M ≔ modulus(A)', 3, [7.66161489598277892, -1.15637609417388669, 2.44181316125495937, -1.15637609417388669, 4.38980424381820705, 3.6595645956559922, 2.44181316125495937, 3.6595645956559922, 8.4050660589755781]);
  Test({LINENUM}29645, 'IsPositiveSemidefinite(M)', True);
  Test({LINENUM}29646, 'M^2 ≈ A*⋅A', True);
  Test({LINENUM}29647, 'norm(A) ≈ norm(M)', True);
  Test({LINENUM}29648, 'abs(det(A)) ≈ det(M)', True);

  Test({LINENUM}29650, 'A ≔ ❨❨5, 2, 3, 1❩, ❨−4, 7, 5, 9❩, ❨2, 0, −3, 4❩, ❨4, 4, 7, 5❩❩', 4, [5, 2, 3, 1, -4, 7, 5, 9, 2, 0, -3, 4, 4, 4, 7, 5]);
  Eps; Test({LINENUM}29651, 'M ≔ modulus(A)', 4, [7.69100520985240193, -0.46899091993611459, 1.251703432597207, -0.248444955402715359, -0.46899091993611459, 5.13206129403951794, 4.19592279964112954, 4.98359571501246989, 1.251703432597207, 4.19592279964112954, 8.03390062336959419, 2.87817844306042996, -0.248444955402715359, 4.98359571501246989, 2.87817844306042996, 9.47724314889865696]);
  Test({LINENUM}29652, 'IsPositiveSemidefinite(M)', True);
  Test({LINENUM}29653, 'M^2 ≈ A*⋅A', True);
  Test({LINENUM}29654, 'norm(A) ≈ norm(M)', True);
  Test({LINENUM}29655, 'abs(det(A)) ≈ det(M)', True);

  Test({LINENUM}29657, 'A ≔ ❨❨5, 1, 2❩, ❨6, 2, 8❩❩', 3, [5, 1, 2, 6, 2, 8]);
  Eps; Test({LINENUM}29658, 'M ≔ modulus(A)', 3, [6.43800469034064263, 1.51325427264365605, 4.15477521816494974, 1.51325427264365605, 0.442691589144319934, 1.58558685136658348, 4.15477521816494974, 1.58558685136658348, 6.94433274140113465]);
  Test({LINENUM}29659, 'IsPositiveSemidefinite(M)', True);
  Test({LINENUM}29660, 'M^2 ≈ A*⋅A', True);
  Test({LINENUM}29661, 'norm(A) ≈ norm(M)', True);
  Test({LINENUM}29662, 'det(M)', 0.0);

  Test({LINENUM}29664, 'A ≔ ❨❨5, 3 + i, 2❩, ❨1, 7, 5❩, ❨−i, 3, 4❩❩;', null);
  Eps; Test({LINENUM}29665, 'M ≔ modulus(A)', 3, [4.83787163654284113, 1.59310281607896703 + 0.620663163540410443*ImaginaryUnit, 0.805031261583889188 + 0.154023865138550882*ImaginaryUnit, 1.59310281607896703 - 0.620663163540410443*ImaginaryUnit, 6.77228650762633288, 4.38075209080517553 - 0.148145983251944481*ImaginaryUnit, 0.805031261583889188 - 0.154023865138550882*ImaginaryUnit, 4.38075209080517553 + 0.148145983251944481*ImaginaryUnit, 5.01151326481261855]);
  Test({LINENUM}29666, 'IsPositiveSemidefinite(M)', True);
  Test({LINENUM}29667, 'M^2 ≈ A*⋅A', True);
  Test({LINENUM}29668, 'norm(A) ≈ norm(M)', True);
  Test({LINENUM}29669, 'abs(det(A)) ≈ det(M)', True);


  //
  // Eigenvalues and eigenvectors
  //

  // Eigenvalues

  // - eigenvalues of real symmetric matrices

  Test({LINENUM}29680, 'A ≔ ❨❨21❩❩;', null);
  Test({LINENUM}29681, 'Λ ≔ eigenvalues(A)', [21]);
  Test({LINENUM}29682, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29683, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29685, 'A ≔ ❨❨3, 5❩, ❨5, 2❩❩;', null);
  Eps(1E-14); Test({LINENUM}29686, 'Λ ≔ eigenvalues(A)', [7.524937810560445, -2.524937810560445]);
  Test({LINENUM}29687, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29688, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29690, 'A ≔ ❨❨4, 1, 8❩, ❨1, 2, 5❩, ❨8, 5, 3❩❩;', null);
  Eps(1E-14); Test({LINENUM}29691, 'Λ ≔ eigenvalues(A)', [13.136085649145485, -5.802319968129476, 1.666234318983990]);
  Test({LINENUM}29692, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29693, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29695, 'A ≔ ❨❨2, 0, 1❩, ❨0, 2, 0❩, ❨1, 0, 2❩❩;', null);
  Eps(1E-14); Test({LINENUM}29696, 'Λ ≔ eigenvalues(A)', [3, 2, 1]);
  Test({LINENUM}29697, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29698, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29700, 'A ≔ ❨❨0, 0, 2❩, ❨0, 2, 0❩, ❨2, 0, 0❩❩;', null);
  Eps(1E-14); Test({LINENUM}29701, 'Λ ≔ eigenvalues(A)', [-2, 2, 2]);
  Test({LINENUM}29702, '∏(Λ) ≈ det(A)', True);               {2}
  Test({LINENUM}29703, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29705, 'A ≔ ❨❨6, 1, 3, 2❩, ❨1, 8, 5, 1❩, ❨3, 5, 2, 0❩, ❨2, 1, 0, 7❩❩;', null);
  Eps(1E-14); Test({LINENUM}29706, 'Λ ≔ eigenvalues(A)', [12.317576522344481, 7.443877742227379, 4.830339943837674, -1.591794208409535]);
  Test({LINENUM}29707, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29708, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29710, 'A ≔ ❨❨0, 1, 0, 2❩, ❨1, -2, 2, 0❩, ❨0, 2, 0, -1❩, ❨2, 0, -1, 2❩❩;', null);
  Eps(1E-14); Test({LINENUM}29711, 'Λ ≔ eigenvalues(A)', [-3.449489742783178, 3.449489742783178, -1.449489742783178, 1.449489742783178]);
  Test({LINENUM}29712, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29713, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29715, 'A ≔ ❨❨0, 1, 0, 2❩, ❨1, -2, 2, 0❩, ❨0, 2, 0, -1❩, ❨2, 0, -1, -2❩❩;', null);
  Eps(1E-14); Test({LINENUM}29716, 'Λ ≔ eigenvalues(A)', [-3.449489742783178, -3.449489742783178, 1.449489742783178, 1.449489742783178]);
  Test({LINENUM}29717, '∏(Λ) ≈ det(A)', True);            {2}                                    {2}
  Test({LINENUM}29718, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29720, 'A ≔ ❨❨0, 0, 1, 2❩, ❨0, -2, 0, 0❩, ❨1, 0, 0, 1❩, ❨2, 0, 1, 0❩❩;', null);
  Eps(1E-14); Test({LINENUM}29721, 'Λ ≔ eigenvalues(A)', [2.732050807568878, -2, -2, -0.732050807568878]);
  Test({LINENUM}29722, '∏(Λ) ≈ det(A)', True);                               {2}
  Test({LINENUM}29723, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29725, 'A ≔ ❨❨3.09090210854135331, -0.0989480787770248203, 0.206696174292443883, -0.173565216686099517❩, '+'❨-0.0989480787770248203, 3.10770621771892455, -0.224991363401589891, 0.188927902874714558❩, ❨0.206696174292443883, -0.224991363401589891, 3.4699924914029535, -0.394658241210492851❩, '+'❨-0.173565216686099517, 0.188927902874714558, -0.394658241210492851, 3.33139918233676864❩❩;', null);
  Eps(1E-14); Test({LINENUM}29726, 'Λ ≔ eigenvalues(A)', [4, 3, 3, 3]);
  Test({LINENUM}29727, '∏(Λ) ≈ det(A)', True);              {3}
  Test({LINENUM}29728, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29730, 'A ≔ ❨❨3, 2, 1, 0, 1❩, ❨2, 5, 7, 3, 8❩, ❨1, 7, 6, 0, 2❩, ❨0, 3, 0, 5, 3❩, ❨1, 8, 2, 3, 9❩❩;', null);
  Eps(1E-14); Test({LINENUM}29731, 'Λ ≔ eigenvalues(A)', [19.613776982166058, 6.482010475356414, -3.831681427313180, 3.142965451970841, 2.592928517819864]);
  Test({LINENUM}29732, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29733, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29735, 'A ≔ ❨❨2, 0, 1, 0, 0❩, ❨0, 0, 0, 2, 0❩, ❨1, 0, 0, 1, 1❩, ❨0, 2, 1, 0, 0❩, ❨0, 0, 1, 0, 2❩❩;', null);
  Eps(1E-14); Test({LINENUM}29736, 'Λ ≔ eigenvalues(A)', [2.895106515927531, -2.292401585224621, 2, 2, -0.602704930702910]);
  Test({LINENUM}29737, '∏(Λ) ≈ det(A)', True);                                                  {2}
  Test({LINENUM}29738, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29740, 'A ≔ ❨❨0, 1, 1, 0, 0❩, ❨1, 0, 0, 0, 1❩, ❨1, 0, 0, 1, 0❩, ❨0, 0, 1, 0, 1❩, ❨0, 1, 0, 1, 0❩❩;', null);
  Eps(1E-14); Test({LINENUM}29741, 'Λ ≔ eigenvalues(A)', [2, -1.618033988749895, -1.618033988749895, 0.618033988749895, 0.618033988749895]);
  Test({LINENUM}29742, '∏(Λ) ≈ det(A)', True);               {2}                                    {2}
  Test({LINENUM}29743, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29745, 'A ≔ ❨❨4.88518185435250995, -0.0503410125523369264, 2.41500433970266516, -0.3526553784998275, 0.377477078463321959❩, '+'❨-0.0503410125523369266, 6.99880168536003428, 0.0574866278829369505, -0.00839458885495496514, 0.00898544320902995499❩, ❨2.41500433970266516, 0.0574866278829369505, 4.24219977363724693, 0.402712768116436254, -0.431057764708227601❩, '+'❨-0.3526553784998275, -0.00839458885495496536, 0.402712768116436254, 6.94119313935299163, 0.0629459900627696699❩, ❨0.377477078463321959, 0.00898544320902995499, -0.431057764708227601, 0.0629459900627696697, 6.93262354729721721❩❩;', null);
  Eps(1E-14); Test({LINENUM}29746, 'Λ ≔ eigenvalues(A)', [7, 7, 7, 7, 2]);
  Test({LINENUM}29747, '∏(Λ) ≈ det(A)', True);           {4}
  Test({LINENUM}29748, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29750, 'A ≔ ❨❨2, −1, 0, 3, 8, 2❩, ❨−1, 7, 5, 4, 8, 1❩, ❨0, 5, 2, 9, 3, 0❩, ❨3, 4, 9, −7, 2, 5❩, ❨8, 8, 3, 2, 1, 3❩, ❨2, 1, 0, 5, 3, 8❩❩;', null);
  Eps(1E-14); Test({LINENUM}29751, 'Λ ≔ eigenvalues(A)', [20.369654342915162, -14.157794981021667, -8.732880602208134, 8.619138715827635, 5.073173708519922, 1.828708815967091]);
  Test({LINENUM}29752, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29753, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29755, 'A ≔ ❨❨10, 16, 9, 8, 0, 7, 8❩, ❨16, 12, 5, 10, 4, 11, 14❩, ❨9, 5, 2, 12, 12, 5, 14❩, ❨8, 10, 12, 16, 12, 9, 3❩, ❨0, 4, 12, 12, 16, 17, 7❩, ❨7, 11, 5, 9, 17, 18, 7❩, ❨8, 14, 14, 3, 7, 7, 14❩❩;', null);
  Eps(1E-13); Test({LINENUM}29756, 'Λ ≔ eigenvalues(A)', [67.387186371351689, 22.239241106426356, -13.887324208091441, 10.960115323234580, 9.767062366458459, -5.676556998202810, -2.789723961176876]);
  Test({LINENUM}29757, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29758, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29760, 'A ≔ ❨❨10, 5, 14, 10, 9, 13, 9, 15❩, ❨5, 4, 8, 7, 7, 4, 9, 13❩, ❨14, 8, 4, 6, 7, 5, 1, 14❩, ❨10, 7, 6, 18, 13, 12, 5, 11❩, ❨9, 7, 7, 13, 14, 12, 3, 14❩, ❨13, 4, 5, 12, 12, 18, 10, 15❩, ❨9, 9, 1, 5, 3, 10, 14, 14❩, ❨15, 13, 14, 11, 14, 15, 14, 6❩❩;', null);
  Eps(1E-13); Test({LINENUM}29761, 'Λ ≔ eigenvalues(A)', [79.906455303672033, 15.007966465439917, -14.248879078663860, 10.321739350164814, -10.196871321023851, 6.862620180127339, 3.257195862090613, -2.910226761807029]);
  Test({LINENUM}29762, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29763, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29765, 'A ≔ ❨❨10, 7, 11, 13, 15, 11, 9, 17, 7❩, ❨7, 8, 12, 3, 6, 10, 14, 7, 8❩, ❨11, 12, 18, 4, 11, 7, 9, 11, 2❩, ❨13, 3, 4, 0, 4, 9, 16, 11, 13❩, ❨15, 6, 11, 4, 4, 6, 11, 4, 11❩, ❨11, 10, 7, 9, 6, 8, 8, 10, 14❩, ❨9, 14, 9, 16, 11, 8, 10, 11, 13❩, '+'❨17, 7, 11, 11, 4, 10, 11, 14, 9❩, ❨7, 8, 2, 13, 11, 14, 13, 9, 6❩❩;', null);
  Eps(1E-13); Test({LINENUM}29766, 'Λ ≔ eigenvalues(A)', [86.264296094535837, -19.275500362885520, 16.623302682936547, -12.030952595962669, 10.184197789201297, -6.930309037497170, 4.449115111645037, -3.598599758479221, 2.314450076505832]);
  Test({LINENUM}29767, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29768, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29770, 'A ≔ ❨❨6, 6, 8, 14, 12, 14, 5, 9, 12, 10❩, ❨6, 0, 4, 4, 10, 8, 15, 14, 13, 11❩, ❨8, 4, 10, 6, 3, 11, 11, 9, 9, 13❩, ❨14, 4, 6, 10, 9, 17, 16, 9, 11, 8❩, ❨12, 10, 3, 9, 10, 8, 12, 10, 9, 8❩, ❨14, 8, 11, 17, 8, 2, 4, 12, 12, 14❩, '+'❨5, 15, 11, 16, 12, 4, 0, 9, 14, 11❩, ❨9, 14, 9, 9, 10, 12, 9, 18, 9, 8❩, ❨12, 13, 9, 11, 9, 12, 14, 9, 2, 7❩, ❨10, 11, 13, 8, 8, 14, 11, 8, 7, 6❩❩;', null);
  Eps(1E-13); Test({LINENUM}29771, 'Λ ≔ eigenvalues(A)', [96.530449307303996, -23.793421334022021, -16.961843873973226, -11.581585212083253, 11.447090905627016, 9.824786945678492, 5.683157788780861, -4.401418812239814, -3.708291806892070, 0.961076091819928]);
  Test({LINENUM}29772, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29773, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29775, 'A ≔ ❨❨4.45528983757093495, -0.0878217640871465801, 0.587220808461187196, 0.381484594913282418, 0.806374962066634831, 0.415539821124804545, -1.07626065503415, -0.174476853005194865, 0.6117764065082528, 0.479713560928682166❩, '+'❨-0.0878217640871465801, 4.39333906061644079, -1.16146861964970503, 0.189604671732296926, 0.549866251807311702, 0.959584846946758171, -0.559867163033034075, 0.601342029002866998, 0.908395415505047237, -0.0481674127191538071❩, '+
    '❨0.587220808461187195, -1.16146861964970503, 4.731699905531466, -0.297368715494811859, 0.174137444046764151, 0.158862374235097095, 0.0708587702680495379, 0.527044617773810588, 0.717806236876411773, 0.100941787359586736❩, '+'❨0.381484594913282417, 0.189604671732296926, -0.297368715494811859, 5.20093245260149577, -0.422111106264731792, -0.609505049911372394, 0.430772405093700426, -0.075450459824149398, -0.0231177557010034982, 1.02271233462064678❩, '+
    '❨0.806374962066634831, 0.549866251807311702, 0.174137444046764151, -0.422111106264731792, 4.65483119820909985, 0.289795090828546352, 0.795841033040542465, -0.226199611183290607, -1.41597888676298831, 0.547038811317080901❩, '+'❨0.415539821124804545, 0.959584846946758171, 0.158862374235097095, -0.609505049911372394, 0.289795090828546352, 3.97252873681661176, 0.586614812369869111, -0.203645718668121608, 0.548222506108191402, -0.0260783651922211985❩, '+
    '❨-1.07626065503415, -0.559867163033034075, 0.0708587702680495379, 0.430772405093700426, 0.795841033040542465, 0.586614812369869111, 5.07303988296985066, 0.0852567827171805209, 0.721798919103536904, 0.0913845737686953809❩, '+'❨-0.174476853005194865, 0.601342029002866998, 0.527044617773810588, -0.0754504598241493979, -0.226199611183290607, -0.203645718668121608, 0.0852567827171805208, 5.72552879232507247, -0.381852810701084683, 0.248741195041378638❩, '+'❨0.6117764065082528, 0.908395415505047237, 0.717806236876411773, -0.0231177557010034982, -1.41597888676298831, 0.548222506108191402, 0.721798919103536904, -0.381852810701084683, 4.15028770968589867, 0.0862862168111860338❩, '+'❨0.479713560928682166, -0.0481674127191538071, 0.100941787359586736, 1.02271233462064678, 0.547038811317080901, -0.0260783651922211984, 0.0913845737686953809, 0.248741195041378638, 0.0862862168111860338, 3.64252242367312907❩❩;', null);
  Eps(1E-13); Test({LINENUM}29779, 'Λ ≔ eigenvalues(A)', [6, 6, 6, 6, 6, 6, 3, 3, 3, 1]);
  Test({LINENUM}29780, '∏(Λ) ≈ det(A)', True);           {6}               {3}
  Test({LINENUM}29781, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29783, 'A ≔ ReversalMatrix(10);', null);
  Eps(1E-13); Test({LINENUM}29784, 'Λ ≔ eigenvalues(A)', [-1, -1, -1, -1, -1, 1, 1, 1, 1, 1]);
  Test({LINENUM}29785, '∏(Λ) ≈ det(A)', True);            {5}                {5}
  Test({LINENUM}29786, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29788, 'A ≔ ❨❨0.947217218464429805, -0.0797032009555874838, 0.455681246175844459, -0.890506530889571131, 0.0810219664601976321, -0.4241414032969027, -0.325611817072624359, 0.442131323976784809, 0.696001040652687542, -0.363371579820000821❩, '+'❨-0.0797032009555874838, 0.664262086761071853, 0.151183874385912782, 0.366175763890158299, -0.362499363441370523, 0.345609605325798349, -0.36153060182114391, -0.370383371480650959, -0.351151983839811129, -0.192995673028588803❩, '+
    '❨0.455681246175844459, 0.151183874385912782, 0.965112845520727124, -0.379442604818156945, -0.0868548299522641688, -0.703208127497219295, -0.29273075622571167, 0.392533036681992209, 0.433785161673175889, -0.0198556703071645884❩, '+'❨-0.890506530889571131, 0.366175763890158299, -0.379442604818156945, 1.60196556896465841, 0.0343051071296422081, 0.587093406299823787, -0.485735414772669726, -0.766652742695679709, -0.63672778172637717, -0.0824745994586258031❩, '+
    '❨0.0810219664601976321, -0.362499363441370523, -0.0868548299522641688, 0.0343051071296422081, 0.327534361557092576, -0.222948382709437083, -0.0500390113869091228, 0.161756725513035523, 0.21826384416565025, -0.135644537928391234❩, '+'❨-0.4241414032969027, 0.345609605325798349, -0.703208127497219295, 0.587093406299823787, -0.222948382709437083, 0.989037781112786131, -0.126211410841058615, -0.699854415829559306, -0.413031006405435901, 0.131956448780506888❩, '+
    '❨-0.325611817072624359, -0.36153060182114391, -0.29273075622571167, -0.485735414772669726, -0.0500390113869091228, -0.126211410841058615, 1.00217393220066957, 0.281471732316985816, -0.335032854995363073, 0.398331000774434439❩, '+'❨0.442131323976784809, -0.370383371480650959, 0.392533036681992209, -0.766652742695679709, 0.161756725513035523, -0.699854415829559306, 0.281471732316985816, 0.61286300125401041, 0.371247429623465179, -0.0611706531297214894❩, '+
    '❨0.696001040652687542, -0.351151983839811129, 0.433785161673175889, -0.63672778172637717, 0.21826384416565025, -0.413031006405435901, -0.335032854995363073, 0.371247429623465179, 0.960656361843560564, 0.149752326353616183❩, '+'❨-0.363371579820000821, -0.192995673028588803, -0.0198556703071645884, -0.0824745994586258031, -0.135644537928391234, 0.131956448780506888, 0.398331000774434439, -0.0611706531297214894, 0.149752326353616183, 0.929176842320993553❩❩;', null);
  Eps(1E-13); Test({LINENUM}29793, 'Λ ≔ eigenvalues(A)', [4, 2, 1, 1, 1, 0, 0, 0, 0, 0]);
  Test({LINENUM}29794, '∏(Λ) ≈ det(A)', True);                 {3}      {5}
  Test({LINENUM}29795, '∑(Λ) ≈ tr(A)', True);

  // - eigenvalues of real non-symmetric matrices

  Test({LINENUM}29799, 'A ≔ ❨❨1, 2❩, ❨3, 4❩❩;', null);
  Eps(1E-14); Test({LINENUM}29800, 'Λ ≔ eigenvalues(A)', [5.372281323269014, -0.372281323269014]);
  Test({LINENUM}29801, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29802, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29804, 'A ≔ ❨❨5, 7, 4❩, ❨0, 2, 6❩, ❨1, 5, 3❩❩;', null);
  Eps(1E-14); Test({LINENUM}29805, 'Λ ≔ eigenvalues(A)', [9.334366656868244, 3.386344569047903, -2.720711225916147]);
  Test({LINENUM}29806, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29807, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29809, 'A ≔ ❨❨1, 0, 2❩, ❨1, 0, -1❩, ❨1, 1, 2❩❩;', null);
  Eps(1E-14); Test({LINENUM}29810, 'Λ ≔ eigenvalues(A)', [3, ImaginaryUnit, -ImaginaryUnit]);
  Test({LINENUM}29811, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29812, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29814, 'A ≔ ❨❨1, 1, 0❩, ❨1, 0, -1❩, ❨1, 2, 1❩❩;', null);
  Eps(1E-14); Test({LINENUM}29815, 'Λ ≔ eigenvalues(A)', [1 + ImaginaryUnit, 1 - ImaginaryUnit, 0]);
  Test({LINENUM}29816, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29817, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29819, 'A ≔ ❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 0, 1❩❩;', null);
  Eps(1E-14); Test({LINENUM}29820, 'Λ ≔ eigenvalues(A)', [1, 1, 0]);
  Test({LINENUM}29821, '∏(Λ) ≈ det(A)', True);           {2}
  Test({LINENUM}29822, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29824, 'A ≔ ❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 0, 2❩❩;', null);
  Eps(1E-14); Test({LINENUM}29825, 'Λ ≔ eigenvalues(A)', [2, 1, 0]);
  Test({LINENUM}29826, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29827, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29829, 'A ≔ ❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 1, 2❩❩;', null);
  Eps(1E-14); Test({LINENUM}29830, 'Λ ≔ eigenvalues(A)', [1, 1, 1]);
  Test({LINENUM}29831, '∏(Λ) ≈ det(A)', True);           {3}
  Test({LINENUM}29832, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29834, 'A ≔ ❨❨5, 4, 7, 2❩, ❨6, 3, 5, 7❩, ❨0, 5, 7, 8❩, ❨3, 4, 1, 9❩❩;', null);
  Eps(1E-14); Test({LINENUM}29835, 'Λ ≔ eigenvalues(A)', [18.722583143817452, 3.494347146728337 + 3.992775601519464*ImaginaryUnit, 3.494347146728337 - 3.992775601519464*ImaginaryUnit, -1.711277437274135]);
  Test({LINENUM}29836, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29837, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29839, 'A ≔ ❨❨0, 0, 1, 0❩, ❨0, 0, 0, 0❩, ❨1, 0, 0, 0❩, ❨0, 0, 0, 2❩❩;', null);
  Eps(1E-14); Test({LINENUM}29840, 'Λ ≔ eigenvalues(A)', [2, -1, 1, 0]);
  Test({LINENUM}29841, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29842, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29844, 'A ≔ ❨❨5, 8, 4, 0, 2❩, ❨6, 3, 0, 4, 8❩, ❨6, 5, 4, 9, 2❩, ❨5, 6, 3, 8, 7❩, ❨1, 0, 2, 9, 7❩❩;', null);
  Eps(1E-14); Test({LINENUM}29845, 'Λ ≔ eigenvalues(A)', [22.814428493209221, 4.634582172214291, -3.664877452474182, 1.607933393525328 + 2.605736529318042*ImaginaryUnit, 1.607933393525328 - 2.605736529318042*ImaginaryUnit]);
  Test({LINENUM}29846, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29847, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29849, 'A ≔ ❨❨5, 4, 7, 0, 2, 5❩, ❨6, 5, 8, 9, 5, 1❩, ❨0, 5, 8, 2, 3, 6❩, ❨4, 5, 8, 4, 6, 2❩, ❨7, 5, 9, 6, 1, 0❩, ❨5, 4, 7, 5, 2, 6❩❩;', null);
  Eps(1E-13); Test({LINENUM}29850, 'Λ ≔ eigenvalues(A)', [27.475808456817589, -5.000337888753362, 4.427726124516064, 0.935932122112036 + 3.027434842214514*ImaginaryUnit, 0.935932122112036 - 3.027434842214514*ImaginaryUnit, 0.224939063195599]);
  Test({LINENUM}29851, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29852, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29854, 'A ≔ ❨❨4, 2, 5, 8, 9, 6, 3❩, ❨5, 8, 4, 5, 8, 6, 3❩, ❨0, 5, 4, 7, 8, 9, 6❩, ❨4, 1, 2, 5, 0, 8, 6❩, ❨6, 6, 5, 0, 7, 4, 8❩, ❨4, 7, 5, 1, 9, 8, 6❩, ❨5, 3, 6, 8, 4, 1, 2❩❩;', null);
  Eps(1E-13); Test({LINENUM}29855, 'Λ ≔ eigenvalues(A)', [35.314786301350608, -4.702400410143717 + 3.178692995712497*ImaginaryUnit, -4.702400410143717 - 3.178692995712497*ImaginaryUnit, 3.918347191792202 + 2.136398063157340*ImaginaryUnit, 3.918347191792202 - 2.136398063157340*ImaginaryUnit, 2.126660067676175 + 2.808465290149118*ImaginaryUnit, 2.126660067676175 - 2.808465290149118*ImaginaryUnit]);
  Test({LINENUM}29856, 'SameValue(∏(Λ), det(A), 1E-12)', True);
  Test({LINENUM}29857, 'SameValue(∑(Λ), tr(A), 1E-12)', True);

  Test({LINENUM}29859, 'A ≔ ❨❨5, 8, 6, 5, 4, 7, 1, 2❩, ❨6, 3, 2, 5, 6, 9, 8, 5❩, ❨4, 5, 6, 9, 2, 0, 4, 7❩, ❨3, 6, 0, 8, 2, 4, 5, 9❩, ❨6, 3, 5, 4, 7, 8, 5, 2❩, ❨5, 3, 2, 1, 9, 8, 5, 6❩, ❨5, 4, 6, 8, 2, 1, 0, 7❩, ❨6, 3, 9, 5, 8, 3, 4, 7❩❩;', null);
  Eps(1E-13); Test({LINENUM}29860, 'Λ ≔ eigenvalues(A)', [39.293880621805755, 8.438596968391407, 1.305365440546036 + 5.337213095091579*ImaginaryUnit, 1.305365440546036 - 5.337213095091579*ImaginaryUnit, -3.112298271457913 + 2.269218103413521*ImaginaryUnit, -3.112298271457913 - 2.269218103413521*ImaginaryUnit, -0.854171490023212, 0.735559561649804]);
  Test({LINENUM}29861, 'SameValue(∏(Λ), det(A), 1E-12)', True);
  Test({LINENUM}29862, 'SameValue(∑(Λ), tr(A), 1E-12)', True);

  Test({LINENUM}29864, 'A ≔ ❨❨5, 7, 6, 9, 5, 6, 3, 2, 5❩, ❨5, 4, 0, 2, 5, 8, 9, 6, 5❩, ❨7, 4, 5, 2, 1, 5, 6, 9, 8❩, ❨3, 6, 5, 4, 7, 8, 5, 2, 0❩, ❨2, 0, 8, 4, 6, 0, 8, 7, 3❩, ❨0, 1, 6, 8, 5, 3, 7, 9, 4❩, ❨5, 6, 3, 8, 7, 4, 1, 0, 5❩, '+'❨6, 5, 3, 8, 9, 4, 5, 2, 1❩, ❨4, 6, 3, 5, 5, 8, 9, 3, 2❩❩;', null);
  Eps(1E-13); Test({LINENUM}29865, 'Λ ≔ eigenvalues(A)', [42.560831728333504, 3.031197245527941 + 5.541734598766467*ImaginaryUnit, 3.031197245527941 - 5.541734598766467*ImaginaryUnit, -4.182206830119297 + 4.492519814382946*ImaginaryUnit, -4.182206830119297 - 4.492519814382946*ImaginaryUnit, -5.948944747014972, -2.836934201726346, 1.910903175127180, -1.383836785536604]);
  Test({LINENUM}29866, 'SameValue(∏(Λ), det(A), 1E-11)', True);
  Test({LINENUM}29867, 'SameValue(∑(Λ), tr(A), 1E-11)', True);

  Test({LINENUM}29869, 'A ≔ ❨❨5, 4, 1, 5, 2, 9, 8, 3, 0, 5❩, ❨5, 6, 3, 2, 0, 8, 5, 6, 9, 7❩, ❨4, 5, 6, 8, 2, 3, 6, 5, 7, 0❩, ❨4, 5, 9, 6, 3, 6, 5, 6, 8, 9❩, ❨4, 5, 5, 2, 6, 8, 7, 9, 2, 5❩, ❨5, 6, 3, 2, 0, 5, 4, 7, 8, 5❩, ❨4, 5, 4, 5, 6, 0, 2, 3, 7, 9❩, '+'❨5, 6, 3, 2, 5, 4, 7, 8, 4, 1❩, ❨5, 6, 3, 2, 0, 4, 5, 1, 2, 7❩, ❨6, 5, 6, 4, 1, 2, 7, 8, 4, 0❩❩;', null);
  Eps(1E-13); Test({LINENUM}29870, 'Λ ≔ eigenvalues(A)', [45.848201925978358, 7.971524351830347, -4.126771995866862 + 4.957293600551936*ImaginaryUnit, -4.126771995866862 - 4.957293600551936*ImaginaryUnit, -4.767288464064574, 4.390252727621196 + 0.962177492102693*ImaginaryUnit, 4.390252727621196 - 0.962177492102693*ImaginaryUnit, -2.883665412954859, -0.347866932148989 + 0.497719878697392*ImaginaryUnit, -0.347866932148989 - 0.497719878697392*ImaginaryUnit]);
  Test({LINENUM}29871, 'SameValue(∏(Λ), det(A), 1E-11)', True);
  Test({LINENUM}29872, 'SameValue(∑(Λ), tr(A), 1E-11)', True);

  // - eigenvalues of real symmetric matrices (complex data type)

  Test({LINENUM}29876, 'A ≔ ComplexMatrix(❨❨21❩❩);', null);
  Test({LINENUM}29877, 'Λ ≔ eigenvalues(A)', [21]);
  Test({LINENUM}29878, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29879, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29881, 'A ≔ ComplexMatrix(❨❨3, 5❩, ❨5, 2❩❩);', null);
  Eps(1E-14); Test({LINENUM}29882, 'Λ ≔ eigenvalues(A)', [7.524937810560445, -2.524937810560445]);
  Test({LINENUM}29883, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29884, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29886, 'A ≔ ComplexMatrix(❨❨4, 1, 8❩, ❨1, 2, 5❩, ❨8, 5, 3❩❩);', null);
  Eps(1E-14); Test({LINENUM}29887, 'Λ ≔ eigenvalues(A)', [13.136085649145485, -5.802319968129476, 1.666234318983990]);
  Test({LINENUM}29888, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29889, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29891, 'A ≔ ComplexMatrix(❨❨0, 0, 2❩, ❨0, 2, 0❩, ❨2, 0, 0❩❩);', null);
  Eps(1E-14); Test({LINENUM}29892, 'Λ ≔ eigenvalues(A)', [-2, 2, 2]);
  Test({LINENUM}29893, '∏(Λ) ≈ det(A)', True);               {2}
  Test({LINENUM}29894, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29896, 'A ≔ ComplexMatrix(❨❨6, 1, 3, 2❩, ❨1, 8, 5, 1❩, ❨3, 5, 2, 0❩, ❨2, 1, 0, 7❩❩);', null);
  Eps(1E-14); Test({LINENUM}29897, 'Λ ≔ eigenvalues(A)', [12.317576522344481, 7.443877742227379, 4.830339943837674, -1.591794208409535]);
  Test({LINENUM}29898, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29899, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29901, 'A ≔ ComplexMatrix(❨❨0, 1, 0, 2❩, ❨1, -2, 2, 0❩, ❨0, 2, 0, -1❩, ❨2, 0, -1, 2❩❩);', null);
  Eps(1E-14); Test({LINENUM}29902, 'Λ ≔ eigenvalues(A)', [-3.449489742783178, 3.449489742783178, -1.449489742783178, 1.449489742783178]);
  Test({LINENUM}29903, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29904, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29906, 'A ≔ ComplexMatrix(❨❨0, 1, 0, 2❩, ❨1, -2, 2, 0❩, ❨0, 2, 0, -1❩, ❨2, 0, -1, -2❩❩);', null);
  Eps(1E-14); Test({LINENUM}29907, 'Λ ≔ eigenvalues(A)', [-3.449489742783178, -3.449489742783178, 1.449489742783178, 1.449489742783178]);
  Test({LINENUM}29908, '∏(Λ) ≈ det(A)', True);            {2}                                    {2}
  Test({LINENUM}29909, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29911, 'A ≔ ComplexMatrix(❨❨3, 2, 1, 0, 1❩, ❨2, 5, 7, 3, 8❩, ❨1, 7, 6, 0, 2❩, ❨0, 3, 0, 5, 3❩, ❨1, 8, 2, 3, 9❩❩);', null);
  Eps(1E-14); Test({LINENUM}29912, 'Λ ≔ eigenvalues(A)', [19.613776982166058, 6.482010475356414, -3.831681427313180, 3.142965451970841, 2.592928517819864]);
  Test({LINENUM}29913, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29914, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29916, 'A ≔ ComplexMatrix(❨❨2, −1, 0, 3, 8, 2❩, ❨−1, 7, 5, 4, 8, 1❩, ❨0, 5, 2, 9, 3, 0❩, ❨3, 4, 9, −7, 2, 5❩, ❨8, 8, 3, 2, 1, 3❩, ❨2, 1, 0, 5, 3, 8❩❩);', null);
  Eps(1E-14); Test({LINENUM}29917, 'Λ ≔ eigenvalues(A)', [20.369654342915162, -14.157794981021667, -8.732880602208134, 8.619138715827635, 5.073173708519922, 1.828708815967091]);
  Test({LINENUM}29918, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29919, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29921, 'A ≔ ComplexMatrix(❨❨10, 16, 9, 8, 0, 7, 8❩, ❨16, 12, 5, 10, 4, 11, 14❩, ❨9, 5, 2, 12, 12, 5, 14❩, ❨8, 10, 12, 16, 12, 9, 3❩, ❨0, 4, 12, 12, 16, 17, 7❩, ❨7, 11, 5, 9, 17, 18, 7❩, ❨8, 14, 14, 3, 7, 7, 14❩❩);', null);
  Eps(1E-13); Test({LINENUM}29922, 'Λ ≔ eigenvalues(A)', [67.387186371351689, 22.239241106426356, -13.887324208091441, 10.960115323234580, 9.767062366458459, -5.676556998202810, -2.789723961176876]);
  Test({LINENUM}29923, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29924, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29926, 'A ≔ ComplexMatrix(❨❨10, 5, 14, 10, 9, 13, 9, 15❩, ❨5, 4, 8, 7, 7, 4, 9, 13❩, ❨14, 8, 4, 6, 7, 5, 1, 14❩, ❨10, 7, 6, 18, 13, 12, 5, 11❩, '+'❨9, 7, 7, 13, 14, 12, 3, 14❩, ❨13, 4, 5, 12, 12, 18, 10, 15❩, ❨9, 9, 1, 5, 3, 10, 14, 14❩, ❨15, 13, 14, 11, 14, 15, 14, 6❩❩);', null);
  Eps(1E-13); Test({LINENUM}29927, 'Λ ≔ eigenvalues(A)', [79.906455303672033, 15.007966465439917, -14.248879078663860, 10.321739350164814, -10.196871321023851, 6.862620180127339, 3.257195862090613, -2.910226761807029]);
  Test({LINENUM}29928, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29929, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29931, 'A ≔ ComplexMatrix(❨❨10, 7, 11, 13, 15, 11, 9, 17, 7❩, ❨7, 8, 12, 3, 6, 10, 14, 7, 8❩, ❨11, 12, 18, 4, 11, 7, 9, 11, 2❩, ❨13, 3, 4, 0, 4, 9, 16, 11, 13❩, ❨15, 6, 11, 4, 4, 6, 11, 4, 11❩, ❨11, 10, 7, 9, 6, 8, 8, 10, 14❩, ❨9, 14, 9, 16, 11, 8, 10, 11, 13❩, '+'❨17, 7, 11, 11, 4, 10, 11, 14, 9❩, ❨7, 8, 2, 13, 11, 14, 13, 9, 6❩❩);', null);
  Eps(1E-13); Test({LINENUM}29932, 'Λ ≔ eigenvalues(A)', [86.264296094535837, -19.275500362885520, 16.623302682936547, -12.030952595962669, 10.184197789201297, -6.930309037497170, 4.449115111645037, -3.598599758479221, 2.314450076505832]);
  Test({LINENUM}29933, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29934, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29936, 'A ≔ ComplexMatrix(❨❨6, 6, 8, 14, 12, 14, 5, 9, 12, 10❩, ❨6, 0, 4, 4, 10, 8, 15, 14, 13, 11❩, ❨8, 4, 10, 6, 3, 11, 11, 9, 9, 13❩, ❨14, 4, 6, 10, 9, 17, 16, 9, 11, 8❩, ❨12, 10, 3, 9, 10, 8, 12, 10, 9, 8❩, ❨14, 8, 11, 17, 8, 2, 4, 12, 12, 14❩, '+'❨5, 15, 11, 16, 12, 4, 0, 9, 14, 11❩, ❨9, 14, 9, 9, 10, 12, 9, 18, 9, 8❩, ❨12, 13, 9, 11, 9, 12, 14, 9, 2, 7❩, ❨10, 11, 13, 8, 8, 14, 11, 8, 7, 6❩❩);', null);
  Eps(1E-13); Test({LINENUM}29937, 'Λ ≔ eigenvalues(A)', [96.530449307303996, -23.793421334022021, -16.961843873973226, -11.581585212083253, 11.447090905627016, 9.824786945678492, 5.683157788780861, -4.401418812239814, -3.708291806892070, 0.961076091819928]);
  Test({LINENUM}29938, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29939, '∑(Λ) ≈ tr(A)', True);

  // - eigenvalues of real non-symmetric matrices (complex data type)

  Test({LINENUM}29943, 'A ≔ ComplexMatrix(❨❨1, 2❩, ❨3, 4❩❩);', null);
  Eps(1E-14); Test({LINENUM}29944, 'Λ ≔ eigenvalues(A)', [5.372281323269014, -0.372281323269014]);
  Test({LINENUM}29945, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29946, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29948, 'A ≔ ComplexMatrix(❨❨5, 7, 4❩, ❨0, 2, 6❩, ❨1, 5, 3❩❩);', null);
  Eps(1E-14); Test({LINENUM}29949, 'Λ ≔ eigenvalues(A)', [9.334366656868244, 3.386344569047903, -2.720711225916147]);
  Test({LINENUM}29950, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29951, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29953, 'A ≔ ComplexMatrix(❨❨1, 0, 2❩, ❨1, 0, -1❩, ❨1, 1, 2❩❩);', null);
  Eps(1E-14); Test({LINENUM}29954, 'Λ ≔ eigenvalues(A)', [3, ImaginaryUnit, -ImaginaryUnit]);
  Test({LINENUM}29955, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29956, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29958, 'A ≔ ComplexMatrix(❨❨1, 1, 0❩, ❨1, 0, -1❩, ❨1, 2, 1❩❩);', null);
  Eps(1E-14); Test({LINENUM}29959, 'Λ ≔ eigenvalues(A)', [1 + ImaginaryUnit, 1 - ImaginaryUnit, 0]);
  Test({LINENUM}29960, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29961, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29963, 'A ≔ ComplexMatrix(❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 0, 1❩❩);', null);
  Eps(1E-14); Test({LINENUM}29964, 'Λ ≔ eigenvalues(A)', [1, 1, 0]);
  Test({LINENUM}29965, '∏(Λ) ≈ det(A)', True);           {2}
  Test({LINENUM}29966, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29968, 'A ≔ ComplexMatrix(❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 0, 2❩❩);', null);
  Eps(1E-14); Test({LINENUM}29969, 'Λ ≔ eigenvalues(A)', [2, 1, 0]);
  Test({LINENUM}29970, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}29971, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29973, 'A ≔ ComplexMatrix(❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 1, 2❩❩);', null);          // slightly lower precision
  Eps(1E-9); Test({LINENUM}29974, 'Λ ≔ eigenvalues(A)', [ASC(1), 1, 1]);                         // too great imaginary part to be automatically dropped
  Test({LINENUM}29975, '∏(Λ) ≈ det(A)', True);           {3}
  Test({LINENUM}29976, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}29978, 'A ≔ ComplexMatrix(❨❨5, 4, 7, 2❩, ❨6, 3, 5, 7❩, ❨0, 5, 7, 8❩, ❨3, 4, 1, 9❩❩);', null);
  Eps(1E-14); Test({LINENUM}29979, 'Λ ≔ eigenvalues(A)', [18.722583143817452, 3.494347146728337 + 3.992775601519464*ImaginaryUnit, 3.494347146728337 - 3.992775601519464*ImaginaryUnit, -1.711277437274135]);
  Test({LINENUM}29980, 'SameValue(∏(Λ), det(A), 1E-12)', True);
  Test({LINENUM}29981, 'SameValue(∑(Λ), tr(A), 1E-12)', True);

  Test({LINENUM}29983, 'A ≔ ComplexMatrix(❨❨0, 0, 1, 0❩, ❨0, 0, 0, 0❩, ❨1, 0, 0, 0❩, ❨0, 0, 0, 2❩❩);', null);
  Eps(1E-14); Test({LINENUM}29984, 'Λ ≔ eigenvalues(A)', [2, -1, 1, 0]);
  Test({LINENUM}29985, 'SameValue(∏(Λ), det(A), 1E-12)', True);
  Test({LINENUM}29986, 'SameValue(∑(Λ), tr(A), 1E-12)', True);

  Test({LINENUM}29988, 'A ≔ ComplexMatrix(❨❨5, 8, 4, 0, 2❩, ❨6, 3, 0, 4, 8❩, ❨6, 5, 4, 9, 2❩, ❨5, 6, 3, 8, 7❩, ❨1, 0, 2, 9, 7❩❩);', null);
  Eps(1E-14); Test({LINENUM}29989, 'Λ ≔ eigenvalues(A)', [22.814428493209221, 4.634582172214291, -3.664877452474182, 1.607933393525328 + 2.605736529318042*ImaginaryUnit, 1.607933393525328 - 2.605736529318042*ImaginaryUnit]);
  Test({LINENUM}29990, 'SameValue(∏(Λ), det(A), 1E-12)', True);
  Test({LINENUM}29991, 'SameValue(∑(Λ), tr(A), 1E-12)', True);

  Test({LINENUM}29993, 'A ≔ ComplexMatrix(❨❨5, 4, 7, 0, 2, 5❩, ❨6, 5, 8, 9, 5, 1❩, ❨0, 5, 8, 2, 3, 6❩, ❨4, 5, 8, 4, 6, 2❩, ❨7, 5, 9, 6, 1, 0❩, ❨5, 4, 7, 5, 2, 6❩❩);', null);
  Eps(1E-13); Test({LINENUM}29994, 'Λ ≔ eigenvalues(A)', [27.475808456817589, -5.000337888753362, 4.427726124516064, 0.935932122112036 + 3.027434842214514*ImaginaryUnit, 0.935932122112036 - 3.027434842214514*ImaginaryUnit, 0.224939063195599]);
  Test({LINENUM}29995, 'SameValue(∏(Λ), det(A), 1E-12)', True);
  Test({LINENUM}29996, 'SameValue(∑(Λ), tr(A), 1E-12)', True);

  Test({LINENUM}29998, 'A ≔ ComplexMatrix(❨❨4, 2, 5, 8, 9, 6, 3❩, ❨5, 8, 4, 5, 8, 6, 3❩, ❨0, 5, 4, 7, 8, 9, 6❩, ❨4, 1, 2, 5, 0, 8, 6❩, ❨6, 6, 5, 0, 7, 4, 8❩, ❨4, 7, 5, 1, 9, 8, 6❩, ❨5, 3, 6, 8, 4, 1, 2❩❩);', null);
  Eps(1E-13); Test({LINENUM}29999, 'Λ ≔ eigenvalues(A)', [35.314786301350608, -4.702400410143717 + 3.178692995712497*ImaginaryUnit, -4.702400410143717 - 3.178692995712497*ImaginaryUnit, 3.918347191792202 + 2.136398063157340*ImaginaryUnit, 3.918347191792202 - 2.136398063157340*ImaginaryUnit, 2.126660067676175 + 2.808465290149118*ImaginaryUnit, 2.126660067676175 - 2.808465290149118*ImaginaryUnit]);
  Test({LINENUM}30000, 'SameValue(∏(Λ), det(A), 1E-12)', True);
  Test({LINENUM}30001, 'SameValue(∑(Λ), tr(A), 1E-12)', True);

  Test({LINENUM}30003, 'A ≔ ComplexMatrix(❨❨5, 8, 6, 5, 4, 7, 1, 2❩, ❨6, 3, 2, 5, 6, 9, 8, 5❩, ❨4, 5, 6, 9, 2, 0, 4, 7❩, ❨3, 6, 0, 8, 2, 4, 5, 9❩, ❨6, 3, 5, 4, 7, 8, 5, 2❩, ❨5, 3, 2, 1, 9, 8, 5, 6❩, ❨5, 4, 6, 8, 2, 1, 0, 7❩, ❨6, 3, 9, 5, 8, 3, 4, 7❩❩);', null);
  Eps(1E-13); Test({LINENUM}30004, 'Λ ≔ eigenvalues(A)', [39.293880621805755, 8.438596968391407, 1.305365440546036 + 5.337213095091579*ImaginaryUnit, 1.305365440546036 - 5.337213095091579*ImaginaryUnit, -3.112298271457913 + 2.269218103413521*ImaginaryUnit, -3.112298271457913 - 2.269218103413521*ImaginaryUnit, -0.854171490023212, 0.735559561649804]);
  Test({LINENUM}30005, 'SameValue(∏(Λ), det(A), 1E-12)', True);
  Test({LINENUM}30006, 'SameValue(∑(Λ), tr(A), 1E-12)', True);

  Test({LINENUM}30008, 'A ≔ ComplexMatrix(❨❨5, 7, 6, 9, 5, 6, 3, 2, 5❩, ❨5, 4, 0, 2, 5, 8, 9, 6, 5❩, ❨7, 4, 5, 2, 1, 5, 6, 9, 8❩, ❨3, 6, 5, 4, 7, 8, 5, 2, 0❩, ❨2, 0, 8, 4, 6, 0, 8, 7, 3❩, ❨0, 1, 6, 8, 5, 3, 7, 9, 4❩, ❨5, 6, 3, 8, 7, 4, 1, 0, 5❩, '+'❨6, 5, 3, 8, 9, 4, 5, 2, 1❩, ❨4, 6, 3, 5, 5, 8, 9, 3, 2❩❩);', null);
  Eps(1E-13); Test({LINENUM}30009, 'Λ ≔ eigenvalues(A)', [42.560831728333504, 3.031197245527941 + 5.541734598766467*ImaginaryUnit, 3.031197245527941 - 5.541734598766467*ImaginaryUnit, -4.182206830119297 + 4.492519814382946*ImaginaryUnit, -4.182206830119297 - 4.492519814382946*ImaginaryUnit, -5.948944747014972, -2.836934201726346, 1.910903175127180, -1.383836785536604]);
  Test({LINENUM}30010, 'SameValue(∏(Λ), det(A), 1E-10)', True);
  Test({LINENUM}30011, 'SameValue(∑(Λ), tr(A), 1E-11)', True);

  Test({LINENUM}30013, 'A ≔ ComplexMatrix(❨❨5, 4, 1, 5, 2, 9, 8, 3, 0, 5❩, ❨5, 6, 3, 2, 0, 8, 5, 6, 9, 7❩, ❨4, 5, 6, 8, 2, 3, 6, 5, 7, 0❩, ❨4, 5, 9, 6, 3, 6, 5, 6, 8, 9❩, ❨4, 5, 5, 2, 6, 8, 7, 9, 2, 5❩, ❨5, 6, 3, 2, 0, 5, 4, 7, 8, 5❩, ❨4, 5, 4, 5, 6, 0, 2, 3, 7, 9❩, '+'❨5, 6, 3, 2, 5, 4, 7, 8, 4, 1❩, ❨5, 6, 3, 2, 0, 4, 5, 1, 2, 7❩, ❨6, 5, 6, 4, 1, 2, 7, 8, 4, 0❩❩);', null);
  Eps(1E-13); Test({LINENUM}30014, 'Λ ≔ eigenvalues(A)', [45.848201925978358, 7.971524351830347, -4.126771995866862 + 4.957293600551936*ImaginaryUnit, -4.126771995866862 - 4.957293600551936*ImaginaryUnit, -4.767288464064574, 4.390252727621196 + 0.962177492102693*ImaginaryUnit, 4.390252727621196 - 0.962177492102693*ImaginaryUnit, -2.883665412954859, -0.347866932148989 + 0.497719878697392*ImaginaryUnit, -0.347866932148989 - 0.497719878697392*ImaginaryUnit]);
  Test({LINENUM}30015, 'SameValue(∏(Λ), det(A), 1E-10)', True);
  Test({LINENUM}30016, 'SameValue(∑(Λ), tr(A), 1E-11)', True);

  // - eigenvalues of complex Hermitian matrices

  Test({LINENUM}30020, 'A ≔ ComplexMatrix(❨❨3❩❩);', null);
  Eps(1E-13); Test({LINENUM}30021, 'Λ ≔ eigenvalues(A)', [3]);
  Test({LINENUM}30022, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30023, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30025, 'A ≔ ❨❨1, i❩, ❨-i, 2❩❩;', null);
  Eps(1E-13); Test({LINENUM}30026, 'Λ ≔ eigenvalues(A)', [2.618033988749895, 0.381966011250105]);
  Test({LINENUM}30027, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30028, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30030, 'A ≔ ❨❨2, i, 3❩, ❨-i, 5, 1❩, ❨3, 1, 0❩❩;', null);
  Eps(1E-13); Test({LINENUM}30031, 'Λ ≔ eigenvalues(A)', [5.754405707945917, 3.547781109928436, -2.302186817874350]);
  Test({LINENUM}30032, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30033, '∑(Λ) ≈ tr(A)', True);

//  Test({LINENUM}30035, 'A ≔ ❨❨−1, 0, i❩, ❨0, −1, −1❩, ❨−i, −1, 1❩❩;', null);                                   // TODO (see bm 5279121)
//  Eps(1E-13); Test({LINENUM}30036, 'Λ ≔ eigenvalues(A)', [-1.732050807568877, 1.732050807568878, -1]);
//  Test({LINENUM}30037, '∏(Λ) ≈ det(A)', True);
//  Test({LINENUM}30038, '∑(Λ) ≈ tr(A)', True);

//  Test({LINENUM}30040, 'A ≔ ❨❨1, 0, i❩, ❨0, 1, −1❩, ❨−i, −1, 2❩❩;', null);
//  Eps(1E-13); Test({LINENUM}30041, 'Λ ≔ eigenvalues(A)', [3, 1, 0]);
//  Test({LINENUM}30042, '∏(Λ) ≈ det(A)', True);
//  Test({LINENUM}30043, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30045, 'A ≔ ❨❨3, 2, i, 5❩, ❨2, 7, 0, 1❩, ❨−i, 0, 2, −i❩, ❨5, 1, i, 3❩❩;', null);
  Eps(1E-13); Test({LINENUM}30046, 'Λ ≔ eigenvalues(A)', [9.854644953717658, 5.564431100382422, -2.058222288315847, 1.639146234215764]);
  Test({LINENUM}30047, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30048, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30050, 'A ≔ ❨❨5, i, 1, 2, 3❩, ❨−i, 4, 8, 3, 5❩, ❨1, 8, 1, 2, −i❩, ❨2, 3, 2, 5, 9❩, ❨3, 5, i, 9, 3❩❩;', null);
  Eps(1E-13); Test({LINENUM}30051, 'Λ ≔ eigenvalues(A)', [18.188313753340950, -7.992020539830704, 7.386862064294815, 3.719849391723610, -3.303004669528673]);
  Test({LINENUM}30052, 'SameValue(∏(Λ), det(A), 1E-13)', True);
  Test({LINENUM}30053, 'SameValue(∑(Λ), tr(A), 1E-13)', True);

  Test({LINENUM}30055, 'A ≔ ❨❨3, 8, 5, 1, 2, 0❩, ❨8, 8, 0, i, 7, 2❩, ❨5, 0, 5, 0, 1, 8❩, ❨1, −i, 0, 3, i, 2❩, ❨2, 7, 1, −i, 7, 9❩, ❨0, 2, 8, 2, 9, 2❩❩;', null);
  Eps(1E-13); Test({LINENUM}30056, 'Λ ≔ eigenvalues(A)', [22.508205131012872, 9.731573786579915, -9.030969704262825, 6.534082020312578, -4.802456736301678, 3.059565502659126]);
  Test({LINENUM}30057, 'SameValue(∏(Λ), det(A), 1E-13)', True);
  Test({LINENUM}30058, 'SameValue(∑(Λ), tr(A), 1E-13)', True);

  Test({LINENUM}30060, 'A ≔ ❨❨2, 8, i, 0, 9, 3, 1❩, ❨8, 5, 2, 7, −i, 3, 0❩, ❨−i, 2, 0, 4, 3, 9, 1❩, ❨0, 7, 4, 6, 2, 1, i❩, ❨9, i, 3, 2, 8, 0, 5❩, ❨3, 3, 9, 1, 0, 3, 2❩, ❨1, 0, 1, −i, 5, 2, 4❩❩;', null);
  Eps(1E-13); Test({LINENUM}30061, 'Λ ≔ eigenvalues(A)', [22.174399966828524, 11.679014591078959, -10.611248368420329, -7.740114065328601, 7.675160638625790, 3.968782044056573, 0.854005193159086]);
  Test({LINENUM}30062, 'SameValue(∏(Λ), det(A), 1E-11)', True);
  Test({LINENUM}30063, 'SameValue(∑(Λ), tr(A), 1E-11)', True);

  Test({LINENUM}30065, 'A ≔ ❨❨2, 8, 5, 3, i, 2, 7, 1❩, ❨8, 2, 7, 8, 0, 3, 4, 6❩, ❨5, 7, 1, 2, i, 5, 7, 1❩, ❨3, 8, 2, 6, 3, 2, −i, i❩, ❨−i, 0, −i, 3, 5, 7, 0, 8❩, ❨2, 3, 5, 2, 7, 3, 2, i❩, ❨7, 4, 7, i, 0, 2, 5, 7❩, ❨1, 6, 1, −i, 8, −i, 7, 8❩❩;', null);
  Eps(1E-13); Test({LINENUM}30066, 'Λ ≔ eigenvalues(A)', [29.502669186726628, 12.778533826477519, -11.255008945938719, 9.448283569095759, -6.801121864010132, 5.153648915796556, -3.757699283727493, -3.069305404420104]);
  Test({LINENUM}30067, 'SameValue(∏(Λ), det(A), 1E-10)', True);
  Test({LINENUM}30068, 'SameValue(∑(Λ), tr(A), 1E-10)', True);

  Test({LINENUM}30070, 'A ≔ ❨❨3, 2, 8, 5, 0, 7, 9, 6, 5❩, ❨2, 1, 0, i, 3, 8, 0, 2, 2❩, ❨8, 0, 5, 7, 9, 3, 0, 8, 6❩, ❨5, −i, 7, 1, 2, 4, 9, 3, 5❩, ❨0, 3, 9, 2, 6, −i, i, 2, 8❩, ❨7, 8, 3, 4, i, 5, 4, 9, 8❩, ❨9, 0, 0, 9, −i, 4, 3, 6, 7❩, '+'❨6, 2, 8, 3, 2, 9, 6, 2, 8❩, ❨5, 2, 6, 5, 8, 8, 7, 8, 5❩❩;', null);
  Eps(1E-13); Test({LINENUM}30071, 'Λ ≔ eigenvalues(A)', [42.725142660244707, -13.296262193399452, 12.514481402540193, -9.322363301852313, 8.085873429233777, -6.520876606050006, -4.072755888595437, 1.921419591541651, -1.034659093663105]);
  Test({LINENUM}30072, 'SameValue(∏(Λ), det(A), 1E-10)', True);
  Test({LINENUM}30073, 'SameValue(∑(Λ), tr(A), 1E-10)', True);

  Test({LINENUM}30075, 'A ≔ ❨❨1, 2, 3, 4, 5, 6, 7, 8, 9, i❩, ❨2, 3, 4, 5, 6, 7, 8, 9, i, 1❩, ❨3, 4, 5, 6, 7, 8, 9, i, 1, 2❩, ❨4, 5, 6, 7, 8, 9, i, 1, 2, 3❩, ❨5, 6, 7, 8, 9, i, 1, 2, 3, 4❩, ❨6, 7, 8, 9, −i, 1, 2, 3, 4, 5❩, '+'❨7, 8, 9, −i, 1, 2, 3, 4, 5, 6❩, ❨8, 9, −i, 1, 2, 3, 4, 5, 6, 7❩, ❨9, −i, 1, 2, 3, 4, 5, 6, 7, 8❩, ❨−i, 1, 2, 3, 4, 5, 6, 7, 8, 9❩❩;', null);
  Eps(1E-13); Test({LINENUM}30076, 'Λ ≔ eigenvalues(A)', [45.027811551304595, -16.240738290136697, 16.217270719887843, -8.583046327320011, 8.582382067187316, -6.236363349096755, 6.234384102220631, -5.275735156559826, 5.274352985531571, 4.999681696981297]);
  Test({LINENUM}30077, 'SameValue(∏(Λ), det(A), 1E-7)', True);
  Test({LINENUM}30078, 'SameValue(∑(Λ), tr(A), 1E-7)', True);

  // - eigenvalues of complex non-Hermitian matrices

  Test({LINENUM}30082, 'A ≔ ❨❨i❩❩;', null);
  Eps(1E-13); Test({LINENUM}30083, 'Λ ≔ eigenvalues(A)', [ImaginaryUnit]);
  Test({LINENUM}30084, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30085, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30087, 'A ≔ ❨❨2, i❩, ❨4, 1❩❩;', null);
  Eps(1E-13); Test({LINENUM}30088, 'Λ ≔ eigenvalues(A)', [2.959075886558056 + 1.370730623694961*ImaginaryUnit, 0.040924113441945 - 1.370730623694960*ImaginaryUnit]);
  Test({LINENUM}30089, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30090, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30092, 'A ≔ ❨❨9, 3, i❩, ❨5, 0, −i❩, ❨3, 4, 1❩❩;', null);
  Eps(1E-13); Test({LINENUM}30093, 'Λ ≔ eigenvalues(A)', [10.459935146351672 + 0.323571498463665*ImaginaryUnit, -1.957811822820754 + 1.128535366894418*ImaginaryUnit, 1.497876676469088 - 1.452106865358084*ImaginaryUnit]);
  Test({LINENUM}30094, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30095, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30097, 'A ≔ ❨❨1, 1, i❩, ❨0, i, 0❩, ❨1, 0, i❩❩;', null);
  Eps(1E-13); Test({LINENUM}30098, 'Λ ≔ eigenvalues(A)', [1 + ImaginaryUnit, ImaginaryUnit, 0]);
  Test({LINENUM}30099, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30100, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30102, 'A ≔ ❨❨0, 1, i❩, ❨0, i, 1❩, ❨1, i, 0❩❩;', null);
//  Eps(1E-13); Test({LINENUM}30103, 'Λ ≔ eigenvalues(A)', [-1 - ImaginaryUnit, 1 + ImaginaryUnit, ImaginaryUnit]);
  Eps(1E-13); Test({LINENUM}30104, 'Λ ≔ eigenvalues(A)', [1 + ImaginaryUnit, -1 - ImaginaryUnit, ImaginaryUnit]); // for numerical reasons, the absolute values of the first two eigenvalues differ slightly
  Test({LINENUM}30105, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30106, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30108, 'A ≔ ❨❨1, 0, 0❩, ❨i, 1, i❩, ❨1, i, 1❩❩;', null);
  Eps(1E-13); Test({LINENUM}30109, 'Λ ≔ eigenvalues(A)', [1 + ImaginaryUnit, 1 - ImaginaryUnit, 1]);
  Test({LINENUM}30110, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30111, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30113, 'A ≔ ❨❨-1, 0, -1❩, ❨i, 1, 0❩, ❨0, 0, 1❩❩;', null);
  Eps(1E-13); Test({LINENUM}30114, 'Λ ≔ eigenvalues(A)', [-1, 1, 1]);
  Test({LINENUM}30115, '∏(Λ) ≈ det(A)', True);               {2}
  Test({LINENUM}30116, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30118, 'A ≔ ❨❨1, 0, 1❩, ❨i, 1, 0❩, ❨0, 0, 1❩❩;', null);
  Eps(1E-13); Test({LINENUM}30119, 'Λ ≔ eigenvalues(A)', [1, 1, 1]);
  Test({LINENUM}30120, '∏(Λ) ≈ det(A)', True);           {3}
  Test({LINENUM}30121, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30123, 'A ≔ ❨❨1, 0, 0, 0❩, ❨0, i, i, 0❩, ❨1, 0, 0, 1❩, ❨0, 0, 0, i❩❩;', null);
  Eps(1E-13); Test({LINENUM}30124, 'Λ ≔ eigenvalues(A)', [ImaginaryUnit, ImaginaryUnit, 1, 0]);
  Test({LINENUM}30125, '∏(Λ) ≈ det(A)', True);           {2}
  Test({LINENUM}30126, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30128, 'A ≔ ❨❨1, 0, 0, 0❩, ❨0, 1, i, 0❩, ❨1, 0, 0, 1❩, ❨0, 0, 0, 1❩❩;', null);
  Eps(1E-13); Test({LINENUM}30129, 'Λ ≔ eigenvalues(A)', [1, 1, 1, 0]);
  Test({LINENUM}30130, '∏(Λ) ≈ det(A)', True);           {3}
  Test({LINENUM}30131, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30133, 'A ≔ ❨❨1, 0, 0, 0❩, ❨0, 1, i, 0❩, ❨1, 1, 0, 1❩, ❨0, 0, 0, 1❩❩;', null);
  Eps(1E-13); Test({LINENUM}30134, 'Λ ≔ eigenvalues(A)', [1.300242590220120 + 0.624810533843827*ImaginaryUnit, 1, 1, -0.300242590220120 - 0.624810533843827*ImaginaryUnit]);
  Test({LINENUM}30135, '∏(Λ) ≈ det(A)', True);                                                                {2}
  Test({LINENUM}30136, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30138, 'A ≔ ❨❨6, 2, 1, 4❩, ❨i, 0, 3, 1❩, ❨2, 8, 7, i❩, ❨3, 7, 5, i❩❩;', null);
  Eps(1E-13); Test({LINENUM}30139, 'Λ ≔ eigenvalues(A)', [11.610435836773123 + 0.971168150072798*ImaginaryUnit, 5.288062915106729 - 0.432329623857917*ImaginaryUnit, -3.546816515929571 + 0.571906149712652*ImaginaryUnit, -0.351682235950283 - 0.110744675927530*ImaginaryUnit]);
  Test({LINENUM}30140, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30141, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30143, 'A ≔ ❨❨1, 5, 2, 8, 6❩, ❨4, 3, 2, 0, i❩, ❨2, 5, 3, 9, 4❩, ❨0, 7, 5, 2, i❩, ❨6, 5, 0, 8, 7❩❩;', null);
  Eps(1E-13); Test({LINENUM}30144, 'Λ ≔ eigenvalues(A)', [17.007411042679909 + 0.894883766897211*ImaginaryUnit, 4.053715298377216 - 0.463689356139747*ImaginaryUnit, -1.557595666415852 - 2.588121240940120*ImaginaryUnit, -2.024809742194188 + 2.164016139445834*ImaginaryUnit, -1.478720932447073 - 0.007089309263174*ImaginaryUnit]);
  Test({LINENUM}30145, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30146, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30148, 'A ≔ ❨❨5, i, 3, 0, 5, 1❩, ❨7, 6, 3, 2, 6, 9❩, ❨4, 2, i, 4, 5, 0❩, ❨2, 3, 8, 5, 6, 9❩, ❨4, 2, 8, i, 6, 3❩, ❨4, 8, 3, 2, 9, 7❩❩;', null);
  Eps(1E-13); Test({LINENUM}30149, 'Λ ≔ eigenvalues(A)', [23.728019358667826 + 0.814189552450136*ImaginaryUnit, 6.679408809815122 - 1.673047202539371*ImaginaryUnit, -6.327308146805672 + 0.677513478539412*ImaginaryUnit, 5.914415432219343 + 1.336712335249757*ImaginaryUnit, -0.762401540029106 - 2.264439635456942*ImaginaryUnit, -0.232133913867463 + 2.109071471757015*ImaginaryUnit]);
  Test({LINENUM}30150, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30151, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30153, 'A ≔ ❨❨5, 2, 3, 6, 9, 7, 5❩, ❨0, 9, 6, 3, 5, 7, 6❩, ❨5, 4, i, 4, 2, 9, 6❩, ❨7, 6, 3, 0, 8, 4, i❩, ❨9, 6, 3, 2, 7, 1, 4❩, ❨2, 5, 3, 6, 0, 1, 1❩, ❨8, 6, 3, i, 4, 5, 6❩❩;', null);
  Eps(1E-13); Test({LINENUM}30154, 'Λ ≔ eigenvalues(A)', [30.739187794060115 + 0.331697323990786*ImaginaryUnit, 8.059962976283682 - 0.006684792990958*ImaginaryUnit, -6.737671725109822 + 0.024618872830778*ImaginaryUnit, -6.368560021382779 + 0.537842454048868*ImaginaryUnit, 2.826230004301034 - 2.925394611754156*ImaginaryUnit, -3.175369396823525 + 1.089346221020855*ImaginaryUnit, 2.656220368671315 + 1.948574532853833*ImaginaryUnit]);
  Test({LINENUM}30155, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30156, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30158, 'A ≔ ❨❨5, i, 3, 6, 2, i, 4, 8❩, ❨3, 6, 2, 5, 8, 0, 4, 7❩, ❨4, 5, 3, 8, i, 0, 2, 4❩, ❨7, 5, 6, 3, 0, 2, 5, 2❩, ❨5, 8, 9, 0, 2, 1, 5, 3❩, ❨6, 3, 2, 5, 7, 4, 0, 8❩, ❨9, 3, 5, 8, 0, 2, 5, 4❩, ❨6, i, 3, 0, 2, 5, 6, 7❩❩;', null);
  Eps(1E-13); Test({LINENUM}30159, 'Λ ≔ eigenvalues(A)', [30.772312425651990 + 0.781844424960348*ImaginaryUnit, -8.161318213160694 - 0.407042381222211*ImaginaryUnit, 7.548847048048358 - 0.954391117238968*ImaginaryUnit, 6.117233002689495 + 0.248167551071669*ImaginaryUnit, -0.742832773919414 - 3.105136633221925*ImaginaryUnit, 0.258068235369258 + 2.689896604426479*ImaginaryUnit, -0.207188727333182 + 1.961737071914902*ImaginaryUnit, -0.585120997345780 - 1.215075520690294*ImaginaryUnit]);
  Test({LINENUM}30160, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30161, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30163, 'A ≔ ❨❨3, 2, 5, 6, 8, 0, 2, 5, 6❩, ❨8, 5, 0, 3, 6, 5, 1, 4, 7❩, ❨4, 3, 6, 5, 2, 8, 9, 6, 0❩, ❨4, 5, 6, i, 8, 9, 6, 6, 3❩, ❨0, 2, 5, 1, 3, 5, 4, 9, 7❩, ❨6, 3, 2, 5, 6, 4, 1, 7, 0❩, ❨8, 2, 5, 0, 1, 9, 6, 4, 7❩, '+'❨6, i, 3, 6, 4, 7, 8, 0, 2❩, ❨3, 5, 0, 4, 9, 2, 1, i, 8❩❩;', null);
  Eps(1E-13); Test({LINENUM}30164, 'Λ ≔ eigenvalues(A)', [37.908238069312972 + 0.345722875150198*ImaginaryUnit, 9.987869809597976 - 0.223815022736451*ImaginaryUnit, -1.372978560723225 + 7.134561075565384*ImaginaryUnit, -1.083409905970040 - 7.158553458460958*ImaginaryUnit, -6.153342951102821 + 3.302132200426763*ImaginaryUnit, -6.469416592038341 - 2.437820528872786*ImaginaryUnit, 2.449249834737968 - 0.134944071188362*ImaginaryUnit, 0.419736230114992 + 1.959426976919182*ImaginaryUnit, -0.685945933929473 - 1.786710046802955*ImaginaryUnit]);
  Test({LINENUM}30165, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30166, '∑(Λ) ≈ tr(A)', True);

  Test({LINENUM}30168, 'A ≔ ❨❨1, 2, 3, 4, 5, 6, 7, 8, 9, i❩, ❨2, 3, 4, 5, 6, 7, 8, 9, i, 1❩, ❨3, 4, 5, 6, 7, 8, 9, i, 1, 2❩, ❨4, 5, 6, 7, 8, 9, i, 1, 2, 3❩, ❨5, 6, 7, 8, 9, i, 1, 2, 3, 4❩, ❨6, 7, 8, 9, i, 1, 2, 3, 4, 5❩, '+'❨7, 8, 9, i, 1, 2, 3, 4, 5, 6❩, ❨8, 9, i, 1, 2, 3, 4, 5, 6, 7❩, ❨9, i, 1, 2, 3, 4, 5, 6, 7, 8❩, ❨i, 1, 2, 3, 4, 5, 6, 7, 8, 9❩❩;', null);
  Eps(1E-13); Test({LINENUM}30169, 'Λ ≔ eigenvalues(A)', [45 + ImaginaryUnit, -16.152375098265388 + 0.309551998983540*ImaginaryUnit, 16.152375098265420 - 0.309551998983539*ImaginaryUnit, -8.468134950725567 + 0.590448785841750*ImaginaryUnit, 8.468134950725586 - 0.590448785841751*ImaginaryUnit, -6.152802719222792 + 0.812637789340920*ImaginaryUnit, 6.152802719222786 - 0.812637789340917*ImaginaryUnit, -5.248510696295683 + 0.952651197515692*ImaginaryUnit, 5.248510696295685 - 0.952651197515693*ImaginaryUnit, 5 - ImaginaryUnit]);
  Test({LINENUM}30170, '∏(Λ) ≈ det(A)', True);
  Test({LINENUM}30171, '∑(Λ) ≈ tr(A)', True);

  // Eigenvectors

  // - eigenvectors of real symmetric matrices

  Test({LINENUM}30177, 'A ≔ ❨❨21❩❩;', null);
  Test({LINENUM}30178, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30179, 'IsOrthogonal(E)', True);
  Test({LINENUM}30180, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Test({LINENUM}30182, 'Λ', [21]);

  // -

  Test({LINENUM}30186, 'A ≔ ❨❨7, 4❩, ❨4, 1❩❩;', null);
  Test({LINENUM}30187, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30188, 'IsOrthogonal(E)', True);
  Test({LINENUM}30189, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30191, 'Λ', [9, -1]);

  // -

  Test({LINENUM}30195, 'A ≔ ❨❨5, 1, 7❩, ❨1, 2, 4❩, ❨7, 4, 3❩❩;', null);
  Test({LINENUM}30196, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30197, 'IsOrthogonal(E)', True);
  Test({LINENUM}30198, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30200, 'Λ', [12.227056515812240, -4.115127714597712, 1.888071198785468]);
  Test({LINENUM}30201, 'col(E, 1) ∥ ❨0.681034009183674, 0.323520554185660, 0.656907245624993❩', True);
  Test({LINENUM}30202, 'col(E, 2) ∥ ❨0.529539308281996, 0.402013635885016, -0.746976008682163❩', True);
  Test({LINENUM}30203, 'col(E, 3) ∥ ❨0.505747762545161, -0.856574274410522, -0.102468107714796❩', True);

  Test({LINENUM}30205, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30206, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30207, 'IsEigenvector(A, col(E, 3))', True);

  Test({LINENUM}30209, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30210, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30211, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);

  Test({LINENUM}30213, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30214, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30215, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);

  Test({LINENUM}30217, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30218, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30219, 'IsEigenpair(A, col(E, 3), Λ[3])', True);

  Test({LINENUM}30221, 'IsEigenvector(A, ❨0.681034009183674, 0.323520554185660, 0.656907245624993❩)', True);
  Test({LINENUM}30222, 'IsEigenvector(A, ❨0.681034009183674, 0.323520554185660, 0.656917245624993❩)', False);
  Test({LINENUM}30223, 'IsEigenvector(A, ❨0.681034009183674, 0.323620554185660, 0.656907245624993❩)', False);
  Test({LINENUM}30224, 'IsEigenvector(A, ❨0.681044009183674, 0.323520554185660, 0.656907245624993❩)', False);

  Test({LINENUM}30226, 'IsEigenvector(A, ❨0.529539308281996, 0.402013635885016, -0.746976008682163❩)', True);
  Test({LINENUM}30227, 'IsEigenvector(A, ❨0.529539308281996, 0.402013635885016, -0.746986008682163❩)', False);
  Test({LINENUM}30228, 'IsEigenvector(A, ❨0.529539308281996, 0.402014635885016, -0.746976008682163❩)', False);
  Test({LINENUM}30229, 'IsEigenvector(A, ❨0.529549308281996, 0.402013635885016, -0.746976008682163❩)', False);

  Test({LINENUM}30231, 'IsEigenvector(A, ❨0.505747762545161, -0.856574274410522, -0.102468107714796❩)', True);
  Test({LINENUM}30232, 'IsEigenvector(A, ❨0.505747762545161, -0.856574274410522, -0.102469107714796❩)', False);
  Test({LINENUM}30233, 'IsEigenvector(A, ❨0.505747762545161, 0.856574274410522, -0.102468107714796❩)', False);
  Test({LINENUM}30234, 'IsEigenvector(A, ❨0.505757762545161, -0.856574274410522, -0.102468107714796❩)', False);

  Test({LINENUM}30236, 'IsEigenvector(A, ❨1, 2❩)', failure, 'Vector is of wrong dimension.');

  Test({LINENUM}30238, 'EigenvalueOf(A, ❨1, 2, 3❩)', failure, 'A vector which isn''t an eigenvector has no associated eigenvalue.');
  Test({LINENUM}30239, 'EigenvalueOf(A, ❨1, 2❩)', failure, 'Vector is of wrong dimension.');

  Test({LINENUM}30241, 'EigenvectorOf(A, 5)', failure, 'Couldn''t compute associated eigenvector.');

  Test({LINENUM}30243, 'IsEigenpair(A, ❨0.681034009183674, 0.323520554185660, 0.656907245624993❩, 12.227056515812240)', True);
  Test({LINENUM}30244, 'IsEigenpair(A, ❨0.681014009183674, 0.323520554185660, 0.656907245624993❩, 12.227056515812240)', False);
  Test({LINENUM}30245, 'IsEigenpair(A, ❨0.681034009183674, 0.323510554185660, 0.656907245624993❩, 12.227056515812240)', False);
  Test({LINENUM}30246, 'IsEigenpair(A, ❨0.681034009183674, 0.323520554185660, 0.656917245624993❩, 12.227056515812240)', False);
  Test({LINENUM}30247, 'IsEigenpair(A, ❨0.681034009183674, 0.323520554185660, 0.656907245624993❩, 12.227256515812240)', False);

  Test({LINENUM}30249, 'IsEigenpair(A, ❨0.681034009183674, 0.323520554185660❩, 12.227056515812240)', failure, 'Vector is of wrong dimension.');

  Test({LINENUM}30251, 'IsEigenvector(❨❨1, 2, 3❩, ❨5, 6, 7❩❩, ❨3, 1❩)', failure, 'Non-square matrix cannot have eigenvectors.');
  Test({LINENUM}30252, 'IsEigenvector(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1❩)', failure, 'Vector is of wrong dimension.');
  Test({LINENUM}30253, 'IsEigenvector(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1, 6❩)', False);

  Test({LINENUM}30255, 'EigenvalueOf(❨❨1, 2, 3❩, ❨5, 6, 7❩❩, ❨3, 1❩)', failure, 'Non-square matrix cannot have eigenvectors.');
  Test({LINENUM}30256, 'EigenvalueOf(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1❩)', failure, 'Vector is of wrong dimension.');
  Test({LINENUM}30257, 'EigenvalueOf(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1, 6❩)', failure, 'A vector which isn''t an eigenvector has no associated eigenvalue.');

  Test({LINENUM}30259, 'IsEigenpair(❨❨1, 2, 3❩, ❨5, 6, 7❩❩, ❨3, 1, 9❩, 6)', failure, 'Non-square matrix cannot have eigenvectors.');
  Test({LINENUM}30260, 'IsEigenpair(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1❩, 6)', failure, 'Vector is of wrong dimension.');
  Test({LINENUM}30261, 'IsEigenpair(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1, 7❩, 6)', False);

  Test({LINENUM}30263, 'IsEigenvector(A, ❨0, 0, 0❩)', False);
  Test({LINENUM}30264, 'IsEigenvector(A, ❨1, 0, 0❩)', False);

  // --

  Test({LINENUM}30268, 'A ≔ ❨❨0, 0, 2❩, ❨0, 2, 0❩, ❨2, 0, 0❩❩;', null);
  Test({LINENUM}30269, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30270, 'IsOrthogonal(E)', True);
  Test({LINENUM}30271, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30273, 'Λ', [-2, 2, 2]);
                            {2}

  // --

  Test({LINENUM}30278, 'A ≔ ❨❨2, 8, 0, 5❩, ❨8, 3, 9, 1❩, ❨0, 9, 7, 0❩, ❨5, 1, 0, 1❩❩;', null);
  Test({LINENUM}30279, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30280, 'IsOrthogonal(E)', True);
  Test({LINENUM}30281, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30283, 'Λ', [16.697147626100790, -8.901304306038915, 6.690502206743226, -1.486345526805109]);

  Test({LINENUM}30285, 'col(E, 1) ∥ ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩', True);
  Test({LINENUM}30286, 'col(E, 2) ∥ ❨-0.597306724171091, 0.667546370768639, -0.377825442573040, 0.234210279616640❩', True);
  Test({LINENUM}30287, 'col(E, 3) ∥ ❨-0.605102871175434, -0.020256078111149, 0.589033934885276, -0.535237545533168❩', True);
  Test({LINENUM}30288, 'col(E, 4) ∥ ❨-0.323277235566436, -0.354560706938906, 0.376021262906496, 0.792708359929243❩', True);

  Test({LINENUM}30290, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30291, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30292, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}30293, 'IsEigenvector(A, col(E, 4))', True);

  Test({LINENUM}30295, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30296, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30297, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}30298, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);

  Test({LINENUM}30300, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30301, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30302, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}30303, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);

  Test({LINENUM}30305, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30306, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30307, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}30308, 'IsEigenpair(A, col(E, 4), Λ[4])', True);

  Test({LINENUM}30310, 'IsEigenvector(A, ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩)', True);
  Test({LINENUM}30311, 'IsEigenvector(A, ❨0.415421869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩)', False);
  Test({LINENUM}30312, 'IsEigenvector(A, ❨0.415411869738660, 0.654454424709722, 0.607367243387605, 0.174010835501171❩)', False);
  Test({LINENUM}30313, 'IsEigenvector(A, ❨0.415411869738660, 0.654414424709722, 0.607368243387605, 0.174010835501171❩)', False);
  Test({LINENUM}30314, 'IsEigenvector(A, ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174011835501171❩)', False);

  Test({LINENUM}30316, 'IsEigenvector(A, ❨-0.597306724171091, 0.667546370768639, -0.377825442573040, 0.234210279616640❩)', True);
  Test({LINENUM}30317, 'IsEigenvector(A, ❨0.597306724171091, 0.667546370768639, -0.377825442573040, 0.234210279616640❩)', False);
  Test({LINENUM}30318, 'IsEigenvector(A, ❨-0.597316724171091, 0.667546370768639, -0.377825442573040, 0.234210279616640❩)', False);
  Test({LINENUM}30319, 'IsEigenvector(A, ❨-0.597306724171091, 0.667556370768639, -0.377825442573040, 0.234210279616640❩)', False);
  Test({LINENUM}30320, 'IsEigenvector(A, ❨-0.597306724171091, 0.667546370768639, -0.377815442573040, 0.234220279616640❩)', False);

  Test({LINENUM}30322, 'IsEigenvector(A, ❨-0.605102871175434, -0.020256078111149, 0.589033934885276, -0.535237545533168❩)', True);
  Test({LINENUM}30323, 'IsEigenvector(A, ❨-0.605107871175434, -0.020256078111149, 0.589033934885276, -0.535237545533168❩)', False);
  Test({LINENUM}30324, 'IsEigenvector(A, ❨-0.605102871175434, -0.020258078111149, 0.589033934885276, -0.535237545533168❩)', False);
  Test({LINENUM}30325, 'IsEigenvector(A, ❨-0.605102871175434, -0.020256078111149, 0.589034934885276, -0.535237545533168❩)', False);
  Test({LINENUM}30326, 'IsEigenvector(A, ❨-0.605102871175434, -0.020256078111149, 0.589033934885276, 0.535237545533168❩)', False);

  Test({LINENUM}30328, 'IsEigenvector(A, ❨-0.323277235566436, -0.354560706938906, 0.376021262906496, 0.792708359929243❩)', True);
  Test({LINENUM}30329, 'IsEigenvector(A, ❨-0.323217235566436, -0.354560706938906, 0.376021262906496, 0.792708359929243❩)', False);
  Test({LINENUM}30330, 'IsEigenvector(A, ❨-0.323277235566436, -0.354564706938906, 0.376021262906496, 0.792708359929243❩)', False);
  Test({LINENUM}30331, 'IsEigenvector(A, ❨-0.323277235566436, -0.354560706938906, 0.376023262906496, 0.792708359929243❩)', False);
  Test({LINENUM}30332, 'IsEigenvector(A, ❨-0.323277235566436, -0.354560706938906, 0.376021262906496, 0.792718359929243❩)', False);

  Test({LINENUM}30334, 'IsEigenvector(A, ❨-0.35, -0.75, 0.05, 0.43❩)', False);

  Test({LINENUM}30336, 'IsEigenvector(A, ❨0, 0, 0, 0❩)', False);
  Test({LINENUM}30337, 'IsEigenvector(A, ❨1, 0, 0, 0❩)', False);

  Test({LINENUM}30339, 'IsEigenvector(A, ❨0, 0, 0❩)', failure, 'Vector is of wrong dimension.');

  Test({LINENUM}30341, 'IsEigenpair(A, ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩, 16.697147626100790)', True);
  Test({LINENUM}30342, 'IsEigenpair(A, ❨0.415421869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩, 16.697147626100790)', False);
  Test({LINENUM}30343, 'IsEigenpair(A, ❨0.415411869738660, 0.654416424709722, 0.607367243387605, 0.174010835501171❩, 16.697147626100790)', False);
  Test({LINENUM}30344, 'IsEigenpair(A, ❨0.415411869738660, 0.654414424709722, 0.607377243387605, 0.174010835501171❩, 16.697147626100790)', False);
  Test({LINENUM}30345, 'IsEigenpair(A, ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174014835501171❩, 16.697147626100790)', False);
  Test({LINENUM}30346, 'IsEigenpair(A, ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩, 16.697137626100790)', False);

  // --

  Test({LINENUM}30350, 'A ≔ ❨❨0, 1, 0, 2❩, ❨1, -2, 2, 0❩, ❨0, 2, 0, -1❩, ❨2, 0, -1, -2❩❩;', null);
  Test({LINENUM}30351, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30352, 'IsOrthogonal(E)', True);
  Test({LINENUM}30353, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30355, 'Λ', [-3.449489742783178, -3.449489742783178, 1.449489742783178, 1.449489742783178]);
                         {2}                                    {2}

  // --

  Test({LINENUM}30360, 'A ≔ ❨❨0, 0, 1, 2❩, ❨0, -2, 0, 0❩, ❨1, 0, 0, 1❩, ❨2, 0, 1, 0❩❩;', null);
  Test({LINENUM}30361, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30362, 'IsOrthogonal(E)', True);
  Test({LINENUM}30363, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30365, 'Λ', [2.732050807568878, -2, -2, -0.732050807568878]);
                                            {2}

  // --

  Test({LINENUM}30370, 'A ≔ ❨❨3.09090210854135331, -0.0989480787770248203, 0.206696174292443883, -0.173565216686099517❩, '+'❨-0.0989480787770248203, 3.10770621771892455, -0.224991363401589891, 0.188927902874714558❩, ❨0.206696174292443883, -0.224991363401589891, 3.4699924914029535, -0.394658241210492851❩, '+'❨-0.173565216686099517, 0.188927902874714558, -0.394658241210492851, 3.33139918233676864❩❩;', null);
  Test({LINENUM}30371, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30372, 'IsOrthogonal(E)', True);
  Test({LINENUM}30373, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30375, 'Λ', [4, 3, 3, 3]);
                           {3}

  // --

  Test({LINENUM}30380, 'A ≔ ❨❨3, 9, 2, 5, 1❩, ❨9, 2, 8, 2, 7❩, ❨2, 8, 3, 2, 5❩, ❨5, 2, 2, 6, 2❩, ❨1, 7, 5, 2, 4❩❩;', null);
  Test({LINENUM}30381, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30382, 'IsOrthogonal(E)', True);
  Test({LINENUM}30383, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30385, 'Λ', [21.437075526003142, -9.608848480894173, 6.159627148842105, 1.764018208004057, -1.751872401955133]);

  Test({LINENUM}30387, 'col(E, 1) ∥ ❨0.438718328790090, 0.571040527424050, 0.444736969767807, 0.328057963353101, 0.419554459427209❩', True);
  Test({LINENUM}30388, 'col(E, 2) ∥ ❨-0.517317497184398, 0.742773501365916, -0.312648829278767, 0.142651379319237, -0.250142811818416❩', True);
  Test({LINENUM}30389, 'col(E, 3) ∥ ❨0.384970537144515, -0.154132214465530, -0.335181955611742, 0.737631277204982, -0.414239183945520❩', True);
  Test({LINENUM}30390, 'col(E, 4) ∥ ❨0.588766415101779, 0.309639465780580, -0.112488495387063, -0.562252131562491, -0.478222112243157❩', True);
  Test({LINENUM}30391, 'col(E, 5) ∥ ❨-0.212274890341188, -0.050664616873610, 0.761222130728086, 0.108633310275057, -0.600926067928628❩', True);

  Test({LINENUM}30393, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30394, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30395, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}30396, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}30397, 'IsEigenvector(A, col(E, 5))', True);

  Test({LINENUM}30399, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30400, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30401, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}30402, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}30403, 'SameValue(EigenvalueOf(A, col(E, 5)), Λ[5], 1E-15)', True);

  Test({LINENUM}30405, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30406, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30407, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}30408, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}30409, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);

  Test({LINENUM}30411, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30412, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30413, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}30414, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}30415, 'IsEigenpair(A, col(E, 5), Λ[5])', True);

  Test({LINENUM}30417, 'IsEigenvector(A, ❨0.438718328790090, 0.571040527424050, 0.444736969767807, 0.328057963353101, 0.419554459427209❩)', True);
  Test({LINENUM}30418, 'IsEigenvector(A, ❨0.438728328790090, 0.571040527424050, 0.444736969767807, 0.328057963353101, 0.419554459427209❩)', False);
  Test({LINENUM}30419, 'IsEigenvector(A, ❨0.438718328790090, 0.571041527424050, 0.444736969767807, 0.328057963353101, 0.419554459427209❩)', False);
  Test({LINENUM}30420, 'IsEigenvector(A, ❨0.438718328790090, 0.571040527424050, 0.444746969767807, 0.328057963353101, 0.419554459427209❩)', False);
  Test({LINENUM}30421, 'IsEigenvector(A, ❨0.438718328790090, 0.571040527424050, 0.444736969767807, 0.328027963353101, 0.419554459427209❩)', False);
  Test({LINENUM}30422, 'IsEigenvector(A, ❨0.438718328790090, 0.571040527424050, 0.444736969767807, 0.328057963353101, 0.419555459427209❩)', False);

  Test({LINENUM}30424, 'IsEigenpair(A, ❨0.588766415101779, 0.309639465780580, -0.112488495387063, -0.562252131562491, -0.478222112243157❩, 1.764018208004057)', True);
  Test({LINENUM}30425, 'IsEigenpair(A, ❨0.588761415101779, 0.309639465780580, -0.112488495387063, -0.562252131562491, -0.478222112243157❩, 1.764018208004057)', False);
  Test({LINENUM}30426, 'IsEigenpair(A, ❨0.588766415101779, 0.309632465780580, -0.112488495387063, -0.562252131562491, -0.478222112243157❩, 1.764018208004057)', False);
  Test({LINENUM}30427, 'IsEigenpair(A, ❨0.588766415101779, 0.309639465780580, -0.112468495387063, -0.562252131562491, -0.478222112243157❩, 1.764018208004057)', False);
  Test({LINENUM}30428, 'IsEigenpair(A, ❨0.588766415101779, 0.309639465780580, -0.112488495387063, -0.562257131562491, -0.478222112243157❩, 1.764018208004057)', False);
  Test({LINENUM}30429, 'IsEigenpair(A, ❨0.588766415101779, 0.309639465780580, -0.112488495387063, -0.562252131562491, -0.478223112243157❩, 1.764018208004057)', False);
  Test({LINENUM}30430, 'IsEigenpair(A, ❨0.588766415101779, 0.309639465780580, -0.112488495387063, -0.562252131562491, -0.478222112243157❩, 1.764014208004057)', False);

  // --

  Test({LINENUM}30434, 'A ≔ ❨❨2, 0, 1, 0, 0❩, ❨0, 0, 0, 2, 0❩, ❨1, 0, 0, 1, 1❩, ❨0, 2, 1, 0, 0❩, ❨0, 0, 1, 0, 2❩❩;', null);
  Test({LINENUM}30435, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30436, 'IsOrthogonal(E)', True);
  Test({LINENUM}30437, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30439, 'Λ', [2.895106515927531, -2.292401585224621, 2, 2, -0.602704930702910]);
                                                               {2}
  // --

  Test({LINENUM}30443, 'A ≔ ❨❨0, 1, 1, 0, 0❩, ❨1, 0, 0, 0, 1❩, ❨1, 0, 0, 1, 0❩, ❨0, 0, 1, 0, 1❩, ❨0, 1, 0, 1, 0❩❩;', null);
  Test({LINENUM}30444, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30445, 'IsOrthogonal(E)', True);
  Test({LINENUM}30446, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30448, 'Λ', [2, -1.618033988749895, -1.618033988749895, 0.618033988749895, 0.618033988749895]);
                            {2}                                    {2}

  // --

  Test({LINENUM}30453, 'A ≔ ❨❨4.88518185435250995, -0.0503410125523369264, 2.41500433970266516, -0.3526553784998275, 0.377477078463321959❩, '+'❨-0.0503410125523369266, 6.99880168536003428, 0.0574866278829369505, -0.00839458885495496514, 0.00898544320902995499❩, ❨2.41500433970266516, 0.0574866278829369505, 4.24219977363724693, 0.402712768116436254, -0.431057764708227601❩, '+'❨-0.3526553784998275, -0.00839458885495496536, 0.402712768116436254, 6.94119313935299163, 0.0629459900627696699❩, ❨0.377477078463321959, 0.00898544320902995499, -0.431057764708227601, 0.0629459900627696697, 6.93262354729721721❩❩;', null);
  Test({LINENUM}30454, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30455, 'IsOrthogonal(E)', True);
  Test({LINENUM}30456, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30458, 'Λ', [7, 7, 7, 7, 2]);
                        {4}

  // --

  Test({LINENUM}30463, 'A ≔ ❨❨4, 2, 8, 1, 7, 5❩, ❨2, 3, 9, 4, 1, 2❩, ❨8, 9, 7, 5, 2, 1❩, ❨1, 4, 5, 8, 0, 9❩, ❨7, 1, 2, 0, 3, 2❩, ❨5, 2, 1, 9, 2, 6❩❩;', null);
  Test({LINENUM}30464, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30465, 'IsOrthogonal(E)', True);
  Test({LINENUM}30466, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30468, 'Λ', [25.699931912397357, 10.666684085724908, -7.835696371596078, 7.409797588520018, -2.807084819210859, -2.133632395835343]);

  Test({LINENUM}30470, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30471, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30472, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}30473, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}30474, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}30475, 'IsEigenvector(A, col(E, 6))', True);

  Test({LINENUM}30477, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30478, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30479, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}30480, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}30481, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}30482, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);

  Test({LINENUM}30484, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30485, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30486, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}30487, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}30488, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}30489, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);

  Test({LINENUM}30491, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30492, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30493, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}30494, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}30495, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}30496, 'IsEigenpair(A, col(E, 6), Λ[6])', True);

  // --

  Test({LINENUM}30500, 'A ≔ ❨❨9, 2, 1, 3, 5, 4, 0❩, ❨2, 7, 2, 8, 3, 5, 2❩, ❨1, 2, 6, 9, 0, 3, 1❩, ❨3, 8, 9, 5, 4, 9, 2❩, ❨5, 3, 0, 4, 3, 7, 4❩, ❨4, 5, 3, 9, 7, 8, 4❩, ❨0, 2, 1, 2, 4, 4, 3❩❩;', null);
  Test({LINENUM}30501, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30502, 'IsOrthogonal(E)', True);
  Test({LINENUM}30503, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30505, 'Λ', [30.641044817744506384, 9.8517787330299055632, -6.5550797165196624249, 6.2412143228197048481, 3.6651048576610945760, -3.1057270151052322463, 0.26166400036968330015]);

  Test({LINENUM}30507, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30508, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30509, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}30510, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}30511, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}30512, 'IsEigenvector(A, col(E, 6))', True);
  Test({LINENUM}30513, 'IsEigenvector(A, col(E, 7))', True);

  Test({LINENUM}30515, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30516, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30517, 'SameValue(EigenvalueOf(A, col(E, 3)), Λ[3], 1E-14)', True);
  Test({LINENUM}30518, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}30519, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}30520, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);
  Test({LINENUM}30521, 'EigenvalueOf(A, col(E, 7)) ≈ Λ[7]', True);

  Test({LINENUM}30523, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30524, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30525, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}30526, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}30527, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}30528, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);
  Test({LINENUM}30529, 'EigenvectorOf(A, Λ[7]) ∥ col(E, 7)', True);

  Test({LINENUM}30531, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30532, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30533, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}30534, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}30535, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}30536, 'IsEigenpair(A, col(E, 6), Λ[6])', True);
  Test({LINENUM}30537, 'IsEigenpair(A, col(E, 7), Λ[7])', True);

  // --

  Test({LINENUM}30541, 'A ≔ ❨❨3, 7, 1, 5, 2, 0, 6, 8❩, ❨7, 3, 9, 4, 7, 8, 2, 1❩, ❨1, 9, 5, 6, 0, 1, 9, 2❩, ❨5, 4, 6, 6, 3, 9, 1, 1❩, ❨2, 7, 0, 3, 4, 2, 6, 2❩, ❨0, 8, 1, 9, 2, 9, 0, 5❩, ❨6, 2, 9, 1, 6, 0, 4, 3❩, ❨8, 1, 2, 1, 2, 5, 3, 1❩❩;', null);
  Test({LINENUM}30542, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30543, 'IsOrthogonal(E)', True);
  Test({LINENUM}30544, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-13); Test({LINENUM}30546, 'Λ', [32.776937694011345, -15.258689129816567, 12.644822532655207, 6.717980397487340, -5.958148232873256, 4.141024331011820, -0.325483553395741, 0.261555960919853]);

  Test({LINENUM}30548, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30549, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30550, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}30551, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}30552, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}30553, 'IsEigenvector(A, col(E, 6))', True);
  Test({LINENUM}30554, 'IsEigenvector(A, col(E, 7))', True);
  Test({LINENUM}30555, 'IsEigenvector(A, col(E, 8))', True);

  Test({LINENUM}30557, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30558, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30559, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}30560, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}30561, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}30562, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);
  Test({LINENUM}30563, 'EigenvalueOf(A, col(E, 7)) ≈ Λ[7]', True);
  Test({LINENUM}30564, 'EigenvalueOf(A, col(E, 8)) ≈ Λ[8]', True);

  Test({LINENUM}30566, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30567, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30568, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}30569, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}30570, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}30571, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);
  Test({LINENUM}30572, 'EigenvectorOf(A, Λ[7]) ∥ col(E, 7)', True);
  Test({LINENUM}30573, 'EigenvectorOf(A, Λ[8]) ∥ col(E, 8)', True);

  Test({LINENUM}30575, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30576, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30577, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}30578, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}30579, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}30580, 'IsEigenpair(A, col(E, 6), Λ[6])', True);
  Test({LINENUM}30581, 'IsEigenpair(A, col(E, 7), Λ[7])', True);
  Test({LINENUM}30582, 'IsEigenpair(A, col(E, 8), Λ[8])', True);

  // --

  Test({LINENUM}30586, 'A ≔ ❨❨3, 2, 1, 5, 9, 8, 7, 0, 2❩, ❨2, 5, 4, 8, 3, 0, 7, 1, 8❩, ❨1, 4, 2, 9, 3, 4, 5, 9, 2❩, ❨5, 8, 9, 8, 2, 6, 4, 8, 5❩, ❨9, 3, 3, 2, 0, 2, 9, 7, 1❩, ❨8, 0, 4, 6, 2, 5, 4, 8, 0❩, '+'❨7, 7, 5, 4, 9, 4, 3, 2, 5❩, ❨0, 1, 9, 8, 7, 8, 2, 8, 1❩, ❨2, 8, 2, 5, 1, 0, 5, 1, 9❩❩;', null);
  Test({LINENUM}30587, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30588, 'IsOrthogonal(E)', True);
  Test({LINENUM}30589, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-13); Test({LINENUM}30591, 'Λ', [41.547567826293928, 15.294422185576229, -12.701166678543432, 11.116110823642684, -8.128109328768399, -4.470204023755420, -3.750820326108707, 2.912735795595040, 1.179463726068098]);

  Test({LINENUM}30593, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30594, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30595, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}30596, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}30597, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}30598, 'IsEigenvector(A, col(E, 6))', True);
  Test({LINENUM}30599, 'IsEigenvector(A, col(E, 7))', True);
  Test({LINENUM}30600, 'IsEigenvector(A, col(E, 8))', True);
  Test({LINENUM}30601, 'IsEigenvector(A, col(E, 9))', True);

  Test({LINENUM}30603, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30604, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30605, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}30606, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}30607, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}30608, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);
  Test({LINENUM}30609, 'EigenvalueOf(A, col(E, 7)) ≈ Λ[7]', True);
  Test({LINENUM}30610, 'EigenvalueOf(A, col(E, 8)) ≈ Λ[8]', True);
  Test({LINENUM}30611, 'EigenvalueOf(A, col(E, 9)) ≈ Λ[9]', True);

  Test({LINENUM}30613, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30614, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30615, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}30616, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}30617, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}30618, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);
  Test({LINENUM}30619, 'EigenvectorOf(A, Λ[7]) ∥ col(E, 7)', True);
  Test({LINENUM}30620, 'EigenvectorOf(A, Λ[8]) ∥ col(E, 8)', True);
  Test({LINENUM}30621, 'EigenvectorOf(A, Λ[9]) ∥ col(E, 9)', True);

  Test({LINENUM}30623, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30624, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30625, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}30626, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}30627, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}30628, 'IsEigenpair(A, col(E, 6), Λ[6])', True);
  Test({LINENUM}30629, 'IsEigenpair(A, col(E, 7), Λ[7])', True);
  Test({LINENUM}30630, 'IsEigenpair(A, col(E, 8), Λ[8])', True);
  Test({LINENUM}30631, 'IsEigenpair(A, col(E, 9), Λ[9])', True);

  // --

  Test({LINENUM}30635, 'A ≔ ❨❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩, ❨2, 3, 4, 5, 6, 7, 8, 9, 10, 1❩, ❨3, 4, 5, 6, 7, 8, 9, 10, 1, 2❩, ❨4, 5, 6, 7, 8, 9, 10, 1, 2, 3❩, ❨5, 6, 7, 8, 9, 10, 1, 2, 3, 4❩, '+'❨6, 7, 8, 9, 10, 1, 2, 3, 4, 5❩, ❨7, 8, 9, 10, 1, 2, 3, 4, 5, 6❩, ❨8, 9, 10, 1, 2, 3, 4, 5, 6, 7❩, ❨9, 10, 1, 2, 3, 4, 5, 6, 7, 8❩, ❨10, 1, 2, 3, 4, 5, 6, 7, 8, 9❩❩;', null);
  Test({LINENUM}30636, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30637, 'IsOrthogonal(E)', True);
  Test({LINENUM}30638, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-13); Test({LINENUM}30640, 'Λ', [55, -16.180339887498950, 16.180339887498950, -8.506508083520398, 8.506508083520398, -6.180339887498945, 6.180339887498937, -5.257311121191338, 5.257311121191338, -5]);

  Test({LINENUM}30642, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30643, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30644, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}30645, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}30646, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}30647, 'IsEigenvector(A, col(E, 6))', True);
  Test({LINENUM}30648, 'IsEigenvector(A, col(E, 7))', True);
  Test({LINENUM}30649, 'IsEigenvector(A, col(E, 8))', True);
  Test({LINENUM}30650, 'IsEigenvector(A, col(E, 9))', True);
  Test({LINENUM}30651, 'IsEigenvector(A, col(E, 10))', True);

  Test({LINENUM}30653, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30654, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30655, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}30656, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}30657, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}30658, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);
  Test({LINENUM}30659, 'EigenvalueOf(A, col(E, 7)) ≈ Λ[7]', True);
  Test({LINENUM}30660, 'EigenvalueOf(A, col(E, 8)) ≈ Λ[8]', True);
  Test({LINENUM}30661, 'EigenvalueOf(A, col(E, 9)) ≈ Λ[9]', True);
  Test({LINENUM}30662, 'EigenvalueOf(A, col(E, 10)) ≈ Λ[10]', True);

  Test({LINENUM}30664, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30665, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30666, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}30667, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}30668, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}30669, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);
  Test({LINENUM}30670, 'EigenvectorOf(A, Λ[7]) ∥ col(E, 7)', True);
  Test({LINENUM}30671, 'EigenvectorOf(A, Λ[8]) ∥ col(E, 8)', True);
  Test({LINENUM}30672, 'EigenvectorOf(A, Λ[9]) ∥ col(E, 9)', True);
  Test({LINENUM}30673, 'EigenvectorOf(A, Λ[10]) ∥ col(E, 10)', True);

  Test({LINENUM}30675, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30676, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30677, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}30678, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}30679, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}30680, 'IsEigenpair(A, col(E, 6), Λ[6])', True);
  Test({LINENUM}30681, 'IsEigenpair(A, col(E, 7), Λ[7])', True);
  Test({LINENUM}30682, 'IsEigenpair(A, col(E, 8), Λ[8])', True);
  Test({LINENUM}30683, 'IsEigenpair(A, col(E, 9), Λ[9])', True);
  Test({LINENUM}30684, 'IsEigenpair(A, col(E, 10), Λ[10])', True);

  // --

  Test({LINENUM}30688, 'A ≔ ❨❨4.45528983757093495, -0.0878217640871465801, 0.587220808461187196, 0.381484594913282418, 0.806374962066634831, 0.415539821124804545, -1.07626065503415, -0.174476853005194865, 0.6117764065082528, 0.479713560928682166❩, '+'❨-0.0878217640871465801, 4.39333906061644079, -1.16146861964970503, 0.189604671732296926, 0.549866251807311702, 0.959584846946758171, -0.559867163033034075, 0.601342029002866998, 0.908395415505047237, -0.0481674127191538071❩, '+
    '❨0.587220808461187195, -1.16146861964970503, 4.731699905531466, -0.297368715494811859, 0.174137444046764151, 0.158862374235097095, 0.0708587702680495379, 0.527044617773810588, 0.717806236876411773, 0.100941787359586736❩, '+'❨0.381484594913282417, 0.189604671732296926, -0.297368715494811859, 5.20093245260149577, -0.422111106264731792, -0.609505049911372394, 0.430772405093700426, -0.075450459824149398, -0.0231177557010034982, 1.02271233462064678❩, '+
    '❨0.806374962066634831, 0.549866251807311702, 0.174137444046764151, -0.422111106264731792, 4.65483119820909985, 0.289795090828546352, 0.795841033040542465, -0.226199611183290607, -1.41597888676298831, 0.547038811317080901❩, '+'❨0.415539821124804545, 0.959584846946758171, 0.158862374235097095, -0.609505049911372394, 0.289795090828546352, 3.97252873681661176, 0.586614812369869111, -0.203645718668121608, 0.548222506108191402, -0.0260783651922211985❩, '+
    '❨-1.07626065503415, -0.559867163033034075, 0.0708587702680495379, 0.430772405093700426, 0.795841033040542465, 0.586614812369869111, 5.07303988296985066, 0.0852567827171805209, 0.721798919103536904, 0.0913845737686953809❩, '+'❨-0.174476853005194865, 0.601342029002866998, 0.527044617773810588, -0.0754504598241493979, -0.226199611183290607, -0.203645718668121608, 0.0852567827171805208, 5.72552879232507247, -0.381852810701084683, 0.248741195041378638❩, '+'❨0.6117764065082528, 0.908395415505047237, 0.717806236876411773, -0.0231177557010034982, -1.41597888676298831, 0.548222506108191402, 0.721798919103536904, -0.381852810701084683, 4.15028770968589867, 0.0862862168111860338❩, '+'❨0.479713560928682166, -0.0481674127191538071, 0.100941787359586736, 1.02271233462064678, 0.547038811317080901, -0.0260783651922211984, 0.0913845737686953809, 0.248741195041378638, 0.0862862168111860338, 3.64252242367312907❩❩;', null);
  Test({LINENUM}30692, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30693, 'IsOrthogonal(E)', True);
  Test({LINENUM}30694, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30696, 'Λ', [6, 6, 6, 6, 6, 6, 3, 3, 3, 1]);
                        {6}               {3}

  // --

  Test({LINENUM}30701, 'A ≔ ❨❨0.947217218464429805, -0.0797032009555874838, 0.455681246175844459, -0.890506530889571131, 0.0810219664601976321, -0.4241414032969027, -0.325611817072624359, 0.442131323976784809, 0.696001040652687542, -0.363371579820000821❩, '+'❨-0.0797032009555874838, 0.664262086761071853, 0.151183874385912782, 0.366175763890158299, -0.362499363441370523, 0.345609605325798349, -0.36153060182114391, -0.370383371480650959, -0.351151983839811129, -0.192995673028588803❩, '+
    '❨0.455681246175844459, 0.151183874385912782, 0.965112845520727124, -0.379442604818156945, -0.0868548299522641688, -0.703208127497219295, -0.29273075622571167, 0.392533036681992209, 0.433785161673175889, -0.0198556703071645884❩, '+'❨-0.890506530889571131, 0.366175763890158299, -0.379442604818156945, 1.60196556896465841, 0.0343051071296422081, 0.587093406299823787, -0.485735414772669726, -0.766652742695679709, -0.63672778172637717, -0.0824745994586258031❩, '+
    '❨0.0810219664601976321, -0.362499363441370523, -0.0868548299522641688, 0.0343051071296422081, 0.327534361557092576, -0.222948382709437083, -0.0500390113869091228, 0.161756725513035523, 0.21826384416565025, -0.135644537928391234❩, '+'❨-0.4241414032969027, 0.345609605325798349, -0.703208127497219295, 0.587093406299823787, -0.222948382709437083, 0.989037781112786131, -0.126211410841058615, -0.699854415829559306, -0.413031006405435901, 0.131956448780506888❩, '+
    '❨-0.325611817072624359, -0.36153060182114391, -0.29273075622571167, -0.485735414772669726, -0.0500390113869091228, -0.126211410841058615, 1.00217393220066957, 0.281471732316985816, -0.335032854995363073, 0.398331000774434439❩, '+'❨0.442131323976784809, -0.370383371480650959, 0.392533036681992209, -0.766652742695679709, 0.161756725513035523, -0.699854415829559306, 0.281471732316985816, 0.61286300125401041, 0.371247429623465179, -0.0611706531297214894❩, '+
    '❨0.696001040652687542, -0.351151983839811129, 0.433785161673175889, -0.63672778172637717, 0.21826384416565025, -0.413031006405435901, -0.335032854995363073, 0.371247429623465179, 0.960656361843560564, 0.149752326353616183❩, '+'❨-0.363371579820000821, -0.192995673028588803, -0.0198556703071645884, -0.0824745994586258031, -0.135644537928391234, 0.131956448780506888, 0.398331000774434439, -0.0611706531297214894, 0.149752326353616183, 0.929176842320993553❩❩;', null);
  Test({LINENUM}30706, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30707, 'IsOrthogonal(E)', True);
  Test({LINENUM}30708, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30710, 'Λ', [4, 2, 1, 1, 1, 0, 0, 0, 0, 0]);
                              {3}      {5}

  // --

  Test({LINENUM}30715, 'A ≔ ReversalMatrix(10);', null);
  Test({LINENUM}30716, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30717, 'IsOrthogonal(E)', True);
  Test({LINENUM}30718, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30720, 'Λ', [-1, -1, -1, -1, -1, 1, 1, 1, 1, 1]);
                         {5}                {5}
  // --

  Test({LINENUM}30724, 'A ≔ diag(12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);', null);
  Test({LINENUM}30725, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30726, 'IsOrthogonal(E)', True);
  Test({LINENUM}30727, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Test({LINENUM}30729, 'IsIdentity(E)', True);
  Test({LINENUM}30730, 'A = diag(Λ)', True);

  // --

  Test({LINENUM}30734, 'A ≔ IdentityMatrix(10);', null);
  Test({LINENUM}30735, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30736, 'IsOrthogonal(E)', True);
  Test({LINENUM}30737, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Test({LINENUM}30739, 'IsIdentity(E)', True);
  Test({LINENUM}30740, 'IsIdentity(diag(Λ))', True);

  // --

  Test({LINENUM}30744, 'A ≔ ZeroMatrix(10);', null);
  Test({LINENUM}30745, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30746, 'IsOrthogonal(E)', True);
  Test({LINENUM}30747, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Test({LINENUM}30749, 'IsIdentity(E)', True);
  Test({LINENUM}30750, 'IsZero(Λ)', True);

  // - eigenvectors of real non-symmetric matrices

  Test({LINENUM}30754, 'A ≔ ❨❨5, 2, 1❩, ❨0, 2, 4❩, ❨1, 2, 1❩❩;', null);
  Test({LINENUM}30755, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30756, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}30758, 'Λ', [6, 3.236067977499790, -1.236067977499789]);

  Test({LINENUM}30760, 'col(E, 1) ∥ ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩', True);
  Test({LINENUM}30761, 'col(E, 2) ∥ ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩', True);
  Test({LINENUM}30762, 'col(E, 3) ∥ ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩', True);

  Test({LINENUM}30764, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30765, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30766, 'IsEigenvector(A, col(E, 3))', True);

  Test({LINENUM}30768, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30769, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30770, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);

  Test({LINENUM}30772, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30773, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30774, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);

  Test({LINENUM}30776, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30777, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30778, 'IsEigenpair(A, col(E, 3), Λ[3])', True);

  Test({LINENUM}30780, 'IsEigenvector(A, ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩)', True);
  Test({LINENUM}30781, 'IsEigenvector(A, ❨0.904554033733291, 0.301511344577764, 0.301511344577764❩)', False);
  Test({LINENUM}30782, 'IsEigenvector(A, ❨0.904534033733291, 0.301571344577764, 0.301511344577764❩)', False);
  Test({LINENUM}30783, 'IsEigenvector(A, ❨0.904534033733291, 0.301511344577764, 0.301510344577764❩)', False);

  Test({LINENUM}30785, 'IsEigenvector(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩)', True);
  Test({LINENUM}30786, 'IsEigenvector(A, ❨0.781038693640056, -0.596654357427190, -0.184376336212866❩)', False);
  Test({LINENUM}30787, 'IsEigenvector(A, ❨0.781030693640056, -0.596650357427190, -0.184376336212866❩)', False);
  Test({LINENUM}30788, 'IsEigenvector(A, ❨0.781030693640056, -0.596654357427190, -0.184374336212866❩)', False);

  Test({LINENUM}30790, 'IsEigenvector(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩)', True);
  Test({LINENUM}30791, 'IsEigenvector(A, ❨0.146862297110534, -0.769007151342417, 0.622139854231882❩)', False);
  Test({LINENUM}30792, 'IsEigenvector(A, ❨0.146867297110534, -0.769004151342417, 0.622139854231882❩)', False);
  Test({LINENUM}30793, 'IsEigenvector(A, ❨0.146867297110534, -0.769007151342417, 0.622199854231882❩)', False);

  Test({LINENUM}30795, 'IsEigenpair(A, ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩, 6)', True);
  Test({LINENUM}30796, 'IsEigenpair(A, ❨0.904535033733291, 0.301511344577764, 0.301511344577764❩, 6)', False);
  Test({LINENUM}30797, 'IsEigenpair(A, ❨0.904534033733291, 0.301514344577764, 0.301511344577764❩, 6)', False);
  Test({LINENUM}30798, 'IsEigenpair(A, ❨0.904534033733291, 0.301511344577764, 0.301510344577764❩, 6)', False);
  Test({LINENUM}30799, 'IsEigenpair(A, ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩, 7)', False);
  Test({LINENUM}30800, 'IsEigenpair(A, ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩, 6.0001)', False);
  Test({LINENUM}30801, 'IsEigenpair(A, ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩, -6)', False);

  Test({LINENUM}30803, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩, 3.236067977499790)', True);
  Test({LINENUM}30804, 'IsEigenpair(A, ❨0.781034693640056, -0.596654357427190, -0.184376336212866❩, 3.236067977499790)', False);
  Test({LINENUM}30805, 'IsEigenpair(A, ❨0.781030693640056, -0.596644357427190, -0.184376336212866❩, 3.236067977499790)', False);
  Test({LINENUM}30806, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184370336212866❩, 3.236067977499790)', False);
  Test({LINENUM}30807, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩, 3.236068977499790)', False);
  Test({LINENUM}30808, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩, -3.236067977499790)', False);
  Test({LINENUM}30809, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩, 0)', False);
  Test({LINENUM}30810, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩, 6)', False);

  Test({LINENUM}30812, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, -1.236067977499789)', True);
  Test({LINENUM}30813, 'IsEigenpair(A, ❨0.146865297110534, -0.769007151342417, 0.622139854231882❩, -1.236067977499789)', False);
  Test({LINENUM}30814, 'IsEigenpair(A, ❨0.146867297110534, -0.769047151342417, 0.622139854231882❩, -1.236067977499789)', False);
  Test({LINENUM}30815, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622130854231882❩, -1.236067977499789)', False);
  Test({LINENUM}30816, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, -1.236064977499789)', False);
  Test({LINENUM}30817, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, 1.236067977499789)', False);
  Test({LINENUM}30818, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, 6)', False);
  Test({LINENUM}30819, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, 3.236067977499790)', False);
  Test({LINENUM}30820, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, 0)', False);
  Test({LINENUM}30821, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, 1E100)', False);

  // -

  Test({LINENUM}30825, 'A ≔ ❨❨2, 3, 0, 1❩, ❨5, 6, 8, 1❩, ❨4, 2, 5, 7❩, ❨3, 0, 2, 6❩❩;', null);
  Test({LINENUM}30826, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30827, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}30829, 'Λ', [13.109772228646445, 3.890227771353548, 3, -1]);

  Test({LINENUM}30831, 'col(E, 1) ∥ ❨0.233782511971403, 0.784104790434032, 0.520117226972313, 0.244956087740999❩', True);
  Test({LINENUM}30832, 'col(E, 2) ∥ ❨-0.596105141205652, -0.513975993546188, 0.456218061914745, 0.415153488085013❩', True);
  Test({LINENUM}30833, 'col(E, 3) ∥ ❨-0.696310623822791, -0.348155311911396, 0.522232967867093, 0.348155311911397❩', True);
  Test({LINENUM}30834, 'col(E, 4) ∥ ❨-0.713563032023560, 0.600041640565266, -0.121630062276743, 0.340564174374881❩', True);

  Test({LINENUM}30836, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30837, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30838, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}30839, 'IsEigenvector(A, col(E, 4))', True);

  Test({LINENUM}30841, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30842, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30843, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}30844, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);

  Test({LINENUM}30846, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30847, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30848, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}30849, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);

  Test({LINENUM}30851, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30852, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30853, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}30854, 'IsEigenpair(A, col(E, 4), Λ[4])', True);

  // -

  Test({LINENUM}30858, 'A ≔ ❨❨6, 4, 2, 1, 3❩, ❨5, 0, 4, 7, 3❩, ❨9, 5, 3, 0, 2❩, ❨4, 4, 2, 8, 5❩, ❨3, 6, 0, 4, 7❩❩;', null);
  Test({LINENUM}30859, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30860, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}30862, 'Λ', [19.317943284512630, 6.195170660848524, -3.837738100539873, 2.388435089272784, -0.063810934094071]);

  Test({LINENUM}30864, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30865, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30866, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}30867, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}30868, 'IsEigenvector(A, col(E, 5))', True);

  Test({LINENUM}30870, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30871, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30872, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}30873, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}30874, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);

  Test({LINENUM}30876, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30877, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30878, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}30879, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}30880, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);

  Test({LINENUM}30882, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30883, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30884, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}30885, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}30886, 'IsEigenpair(A, col(E, 5), Λ[5])', True);

  // -

  Test({LINENUM}30890, 'A ≔ ❨❨3, 6, 2, 5, 4, 7❩, ❨2, 0, 1, 4, 2, 0❩, ❨3, 6, 9, 8, 5, 2❩, ❨2, 7, 6, 4, 3, 1❩, ❨5, 6, 9, 8, 2, 4❩, ❨6, 5, 3, 9, 5, 7❩❩;', null);
  Test({LINENUM}30891, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30892, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}30894, 'Λ', [25.608230542132779785, 6.8775642608200556778, -4.2970302684870303417, -3.5268871389883464722, 0.86082458257068375765, -0.52270197804814240633]);

  Test({LINENUM}30896, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30897, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30898, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}30899, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}30900, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}30901, 'IsEigenvector(A, col(E, 6))', True);

  Test({LINENUM}30903, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30904, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30905, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}30906, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}30907, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}30908, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);

  Test({LINENUM}30910, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30911, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30912, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}30913, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}30914, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}30915, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);

  Test({LINENUM}30917, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30918, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30919, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}30920, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}30921, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}30922, 'IsEigenpair(A, col(E, 6), Λ[6])', True);

  // -

  Test({LINENUM}30926, 'A ≔ ❨❨0, 2, 0❩, ❨1, −1, 1❩, ❨2, 0, 1❩❩;', null);
  Eps(1E-14); Test({LINENUM}30927, 'eigenvalues(A)', [2, -1, -1]); // -1: geometric multiplicity = 1 < 2 = algebraic multiplicity
  Test({LINENUM}30928, 'eigenvectors(A)', failure, 'Couldn''t compute eigenvectors.');

  // -

  Test({LINENUM}30932, 'A ≔ ❨❨0, 1, 0❩, ❨−1, −2, 0❩, ❨1, 0, −1❩❩;', null);
  Eps(1E-14); Test({LINENUM}30933, 'eigenvalues(A)', [-1, -1, -1]); // -1: geometric multiplicity = 1 < 3 = algebraic multiplicity
  Test({LINENUM}30934, 'eigenvectors(A)', failure, 'Couldn''t compute eigenvectors.');

  // - eigenvectors of real symmetric matrices (complex data type)

  Test({LINENUM}30938, 'A ≔ ComplexMatrix(❨❨21❩❩);', null);
  Test({LINENUM}30939, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30940, 'IsOrthogonal(E)', True);
  Test({LINENUM}30941, 'IsUnitary(E)', True);
  Test({LINENUM}30942, 'IsReal(E)', True);
  Test({LINENUM}30943, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Test({LINENUM}30945, 'Λ', [TASC(21)]);

  // -

  Test({LINENUM}30949, 'A ≔ ComplexMatrix(❨❨7, 4❩, ❨4, 1❩❩);', null);
  Test({LINENUM}30950, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30951, 'IsOrthogonal(E)', True);
  Test({LINENUM}30952, 'IsUnitary(E)', True);
  Test({LINENUM}30953, 'IsReal(E)', True);
  Test({LINENUM}30954, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30956, 'Λ', [TASC(9), -1]);

  // -

  Test({LINENUM}30960, 'A ≔ ComplexMatrix(❨❨5, 1, 7❩, ❨1, 2, 4❩, ❨7, 4, 3❩❩);', null);
  Test({LINENUM}30961, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}30962, 'IsOrthogonal(E)', True);
  Test({LINENUM}30963, 'IsUnitary(E)', True);
  Test({LINENUM}30964, 'IsReal(E)', True);
  Test({LINENUM}30965, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}30967, 'Λ', [TASC(12.227056515812240), -4.115127714597712, 1.888071198785468]);
  Test({LINENUM}30968, 'col(E, 1) ∥ ❨0.681034009183674, 0.323520554185660, 0.656907245624993❩', True);
  Test({LINENUM}30969, 'col(E, 2) ∥ ❨0.529539308281996, 0.402013635885016, -0.746976008682163❩', True);
  Test({LINENUM}30970, 'col(E, 3) ∥ ❨0.505747762545161, -0.856574274410522, -0.102468107714796❩', True);

  Test({LINENUM}30972, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}30973, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}30974, 'IsEigenvector(A, col(E, 3))', True);

  Test({LINENUM}30976, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}30977, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}30978, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);

  Test({LINENUM}30980, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}30981, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}30982, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);

  Test({LINENUM}30984, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}30985, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}30986, 'IsEigenpair(A, col(E, 3), Λ[3])', True);

  Test({LINENUM}30988, 'IsEigenvector(A, ❨0.681034009183674, 0.323520554185660, 0.656907245624993❩)', True);
  Test({LINENUM}30989, 'IsEigenvector(A, ❨0.681034009183674, 0.323520554185660, 0.656917245624993❩)', False);
  Test({LINENUM}30990, 'IsEigenvector(A, ❨0.681034009183674, 0.323620554185660, 0.656907245624993❩)', False);
  Test({LINENUM}30991, 'IsEigenvector(A, ❨0.681044009183674, 0.323520554185660, 0.656907245624993❩)', False);

  Test({LINENUM}30993, 'IsEigenvector(A, ❨0.529539308281996, 0.402013635885016, -0.746976008682163❩)', True);
  Test({LINENUM}30994, 'IsEigenvector(A, ❨0.529539308281996, 0.402013635885016, -0.746986008682163❩)', False);
  Test({LINENUM}30995, 'IsEigenvector(A, ❨0.529539308281996, 0.402014635885016, -0.746976008682163❩)', False);
  Test({LINENUM}30996, 'IsEigenvector(A, ❨0.529549308281996, 0.402013635885016, -0.746976008682163❩)', False);

  Test({LINENUM}30998, 'IsEigenvector(A, ❨0.505747762545161, -0.856574274410522, -0.102468107714796❩)', True);
  Test({LINENUM}30999, 'IsEigenvector(A, ❨0.505747762545161, -0.856574274410522, -0.102469107714796❩)', False);
  Test({LINENUM}31000, 'IsEigenvector(A, ❨0.505747762545161, 0.856574274410522, -0.102468107714796❩)', False);
  Test({LINENUM}31001, 'IsEigenvector(A, ❨0.505757762545161, -0.856574274410522, -0.102468107714796❩)', False);

  Test({LINENUM}31003, 'IsEigenvector(A, ❨1, 2❩)', failure, 'Vector is of wrong dimension.');

  Test({LINENUM}31005, 'EigenvalueOf(A, ❨1, 2, 3❩)', failure, 'A vector which isn''t an eigenvector has no associated eigenvalue.');
  Test({LINENUM}31006, 'EigenvalueOf(A, ❨1, 2❩)', failure, 'Vector is of wrong dimension.');

  Test({LINENUM}31008, 'EigenvectorOf(A, 5)', failure, 'Couldn''t compute associated eigenvector.');

  Test({LINENUM}31010, 'IsEigenpair(A, ❨0.681034009183674, 0.323520554185660, 0.656907245624993❩, 12.227056515812240)', True);
  Test({LINENUM}31011, 'IsEigenpair(A, ❨0.681014009183674, 0.323520554185660, 0.656907245624993❩, 12.227056515812240)', False);
  Test({LINENUM}31012, 'IsEigenpair(A, ❨0.681034009183674, 0.323510554185660, 0.656907245624993❩, 12.227056515812240)', False);
  Test({LINENUM}31013, 'IsEigenpair(A, ❨0.681034009183674, 0.323520554185660, 0.656917245624993❩, 12.227056515812240)', False);
  Test({LINENUM}31014, 'IsEigenpair(A, ❨0.681034009183674, 0.323520554185660, 0.656907245624993❩, 12.227256515812240)', False);

  Test({LINENUM}31016, 'IsEigenpair(A, ❨0.681034009183674, 0.323520554185660❩, 12.227056515812240)', failure, 'Vector is of wrong dimension.');

  Test({LINENUM}31018, 'IsEigenvector(❨❨1, 2, 3❩, ❨5, 6, 7❩❩, ❨3, 1❩)', failure, 'Non-square matrix cannot have eigenvectors.');
  Test({LINENUM}31019, 'IsEigenvector(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1❩)', failure, 'Vector is of wrong dimension.');
  Test({LINENUM}31020, 'IsEigenvector(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1, 6❩)', False);

  Test({LINENUM}31022, 'EigenvalueOf(❨❨1, 2, 3❩, ❨5, 6, 7❩❩, ❨3, 1❩)', failure, 'Non-square matrix cannot have eigenvectors.');
  Test({LINENUM}31023, 'EigenvalueOf(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1❩)', failure, 'Vector is of wrong dimension.');
  Test({LINENUM}31024, 'EigenvalueOf(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1, 6❩)', failure, 'A vector which isn''t an eigenvector has no associated eigenvalue.');

  Test({LINENUM}31026, 'IsEigenpair(❨❨1, 2, 3❩, ❨5, 6, 7❩❩, ❨3, 1, 9❩, 6)', failure, 'Non-square matrix cannot have eigenvectors.');
  Test({LINENUM}31027, 'IsEigenpair(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1❩, 6)', failure, 'Vector is of wrong dimension.');
  Test({LINENUM}31028, 'IsEigenpair(❨❨1, 2, 3❩, ❨5, 6, 7❩, ❨6, 7, 8❩❩, ❨3, 1, 7❩, 6)', False);

  Test({LINENUM}31030, 'IsEigenvector(A, ❨0, 0, 0❩)', False);
  Test({LINENUM}31031, 'IsEigenvector(A, ❨1, 0, 0❩)', False);

  // --

  Test({LINENUM}31035, 'A ≔ ComplexMatrix(❨❨0, 0, 2❩, ❨0, 2, 0❩, ❨2, 0, 0❩❩);', null);
  Test({LINENUM}31036, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31037, 'IsOrthogonal(E)', True);
  Test({LINENUM}31038, 'IsUnitary(E)', True);
  Test({LINENUM}31039, 'IsReal(E)', True);
  Test({LINENUM}31040, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31042, 'Λ', [TASC(-2), 2, 2]);
                                  {2}

  // --

  Test({LINENUM}31047, 'A ≔ ComplexMatrix(❨❨2, 8, 0, 5❩, ❨8, 3, 9, 1❩, ❨0, 9, 7, 0❩, ❨5, 1, 0, 1❩❩);', null);
  Test({LINENUM}31048, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31049, 'IsOrthogonal(E)', True);
  Test({LINENUM}31050, 'IsUnitary(E)', True);
  Test({LINENUM}31051, 'IsReal(E)', True);
  Test({LINENUM}31052, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31054, 'Λ', [TASC(16.697147626100790), -8.901304306038915, 6.690502206743226, -1.486345526805109]);

  Test({LINENUM}31056, 'col(E, 1) ∥ ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩', True);
  Test({LINENUM}31057, 'col(E, 2) ∥ ❨-0.597306724171091, 0.667546370768639, -0.377825442573040, 0.234210279616640❩', True);
  Test({LINENUM}31058, 'col(E, 3) ∥ ❨-0.605102871175434, -0.020256078111149, 0.589033934885276, -0.535237545533168❩', True);
  Test({LINENUM}31059, 'col(E, 4) ∥ ❨-0.323277235566436, -0.354560706938906, 0.376021262906496, 0.792708359929243❩', True);

  Test({LINENUM}31061, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31062, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31063, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31064, 'IsEigenvector(A, col(E, 4))', True);

  Test({LINENUM}31066, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31067, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31068, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31069, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);

  Test({LINENUM}31071, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31072, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31073, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31074, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);

  Test({LINENUM}31076, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31077, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31078, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31079, 'IsEigenpair(A, col(E, 4), Λ[4])', True);

  Test({LINENUM}31081, 'IsEigenvector(A, ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩)', True);
  Test({LINENUM}31082, 'IsEigenvector(A, ❨0.415421869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩)', False);
  Test({LINENUM}31083, 'IsEigenvector(A, ❨0.415411869738660, 0.654454424709722, 0.607367243387605, 0.174010835501171❩)', False);
  Test({LINENUM}31084, 'IsEigenvector(A, ❨0.415411869738660, 0.654414424709722, 0.607368243387605, 0.174010835501171❩)', False);
  Test({LINENUM}31085, 'IsEigenvector(A, ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174011835501171❩)', False);

  Test({LINENUM}31087, 'IsEigenvector(A, ❨-0.597306724171091, 0.667546370768639, -0.377825442573040, 0.234210279616640❩)', True);
  Test({LINENUM}31088, 'IsEigenvector(A, ❨0.597306724171091, 0.667546370768639, -0.377825442573040, 0.234210279616640❩)', False);
  Test({LINENUM}31089, 'IsEigenvector(A, ❨-0.597316724171091, 0.667546370768639, -0.377825442573040, 0.234210279616640❩)', False);
  Test({LINENUM}31090, 'IsEigenvector(A, ❨-0.597306724171091, 0.667556370768639, -0.377825442573040, 0.234210279616640❩)', False);
  Test({LINENUM}31091, 'IsEigenvector(A, ❨-0.597306724171091, 0.667546370768639, -0.377815442573040, 0.234220279616640❩)', False);

  Test({LINENUM}31093, 'IsEigenvector(A, ❨-0.605102871175434, -0.020256078111149, 0.589033934885276, -0.535237545533168❩)', True);
  Test({LINENUM}31094, 'IsEigenvector(A, ❨-0.605107871175434, -0.020256078111149, 0.589033934885276, -0.535237545533168❩)', False);
  Test({LINENUM}31095, 'IsEigenvector(A, ❨-0.605102871175434, -0.020258078111149, 0.589033934885276, -0.535237545533168❩)', False);
  Test({LINENUM}31096, 'IsEigenvector(A, ❨-0.605102871175434, -0.020256078111149, 0.589034934885276, -0.535237545533168❩)', False);
  Test({LINENUM}31097, 'IsEigenvector(A, ❨-0.605102871175434, -0.020256078111149, 0.589033934885276, 0.535237545533168❩)', False);

  Test({LINENUM}31099, 'IsEigenvector(A, ❨-0.323277235566436, -0.354560706938906, 0.376021262906496, 0.792708359929243❩)', True);
  Test({LINENUM}31100, 'IsEigenvector(A, ❨-0.323217235566436, -0.354560706938906, 0.376021262906496, 0.792708359929243❩)', False);
  Test({LINENUM}31101, 'IsEigenvector(A, ❨-0.323277235566436, -0.354564706938906, 0.376021262906496, 0.792708359929243❩)', False);
  Test({LINENUM}31102, 'IsEigenvector(A, ❨-0.323277235566436, -0.354560706938906, 0.376023262906496, 0.792708359929243❩)', False);
  Test({LINENUM}31103, 'IsEigenvector(A, ❨-0.323277235566436, -0.354560706938906, 0.376021262906496, 0.792718359929243❩)', False);

  Test({LINENUM}31105, 'IsEigenvector(A, ❨-0.35, -0.75, 0.05, 0.43❩)', False);

  Test({LINENUM}31107, 'IsEigenvector(A, ❨0, 0, 0, 0❩)', False);
  Test({LINENUM}31108, 'IsEigenvector(A, ❨1, 0, 0, 0❩)', False);

  Test({LINENUM}31110, 'IsEigenvector(A, ❨0, 0, 0❩)', failure, 'Vector is of wrong dimension.');

  Test({LINENUM}31112, 'IsEigenpair(A, ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩, 16.697147626100790)', True);
  Test({LINENUM}31113, 'IsEigenpair(A, ❨0.415421869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩, 16.697147626100790)', False);
  Test({LINENUM}31114, 'IsEigenpair(A, ❨0.415411869738660, 0.654416424709722, 0.607367243387605, 0.174010835501171❩, 16.697147626100790)', False);
  Test({LINENUM}31115, 'IsEigenpair(A, ❨0.415411869738660, 0.654414424709722, 0.607377243387605, 0.174010835501171❩, 16.697147626100790)', False);
  Test({LINENUM}31116, 'IsEigenpair(A, ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174014835501171❩, 16.697147626100790)', False);
  Test({LINENUM}31117, 'IsEigenpair(A, ❨0.415411869738660, 0.654414424709722, 0.607367243387605, 0.174010835501171❩, 16.697137626100790)', False);

  // --

  Test({LINENUM}31121, 'A ≔ ComplexMatrix(❨❨0, 0, 1, 2❩, ❨0, -2, 0, 0❩, ❨1, 0, 0, 1❩, ❨2, 0, 1, 0❩❩);', null);
  Test({LINENUM}31122, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31123, 'IsOrthogonal(E)', True);
  Test({LINENUM}31124, 'IsUnitary(E)', True);
  Test({LINENUM}31125, 'IsReal(E)', True);
  Test({LINENUM}31126, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31128, 'Λ', [TASC(2.732050807568878), -2, -2, -0.732050807568878]);
                                                  {2}

  // --

  Test({LINENUM}31133, 'A ≔ ComplexMatrix(❨❨3.09090210854135331, -0.0989480787770248203, 0.206696174292443883, -0.173565216686099517❩, '+'❨-0.0989480787770248203, 3.10770621771892455, -0.224991363401589891, 0.188927902874714558❩, ❨0.206696174292443883, -0.224991363401589891, 3.4699924914029535, -0.394658241210492851❩, '+'❨-0.173565216686099517, 0.188927902874714558, -0.394658241210492851, 3.33139918233676864❩❩);', null);
  Test({LINENUM}31134, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31135, 'IsOrthogonal(E)', True);
  Test({LINENUM}31136, 'IsUnitary(E)', True);
  Test({LINENUM}31137, 'IsReal(E)', True);
  Test({LINENUM}31138, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31140, 'Λ', [TASC(4), 3, 3, 3]);
                                 {3}

  // --

  Test({LINENUM}31145, 'A ≔ ComplexMatrix(❨❨3, 9, 2, 5, 1❩, ❨9, 2, 8, 2, 7❩, ❨2, 8, 3, 2, 5❩, ❨5, 2, 2, 6, 2❩, ❨1, 7, 5, 2, 4❩❩);', null);
  Test({LINENUM}31146, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31147, 'IsOrthogonal(E)', True);
  Test({LINENUM}31148, 'IsUnitary(E)', True);
  Test({LINENUM}31149, 'IsReal(E)', True);
  Test({LINENUM}31150, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31152, 'Λ', [TASC(21.437075526003142), -9.608848480894173, 6.159627148842105, 1.764018208004057, -1.751872401955133]);

  Test({LINENUM}31154, 'col(E, 1) ∥ ❨0.438718328790090, 0.571040527424050, 0.444736969767807, 0.328057963353101, 0.419554459427209❩', True);
  Test({LINENUM}31155, 'col(E, 2) ∥ ❨-0.517317497184398, 0.742773501365916, -0.312648829278767, 0.142651379319237, -0.250142811818416❩', True);
  Test({LINENUM}31156, 'col(E, 3) ∥ ❨0.384970537144515, -0.154132214465530, -0.335181955611742, 0.737631277204982, -0.414239183945520❩', True);
  Test({LINENUM}31157, 'col(E, 4) ∥ ❨0.588766415101779, 0.309639465780580, -0.112488495387063, -0.562252131562491, -0.478222112243157❩', True);
  Test({LINENUM}31158, 'col(E, 5) ∥ ❨-0.212274890341188, -0.050664616873610, 0.761222130728086, 0.108633310275057, -0.600926067928628❩', True);

  Test({LINENUM}31160, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31161, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31162, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31163, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31164, 'IsEigenvector(A, col(E, 5))', True);

  Test({LINENUM}31166, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31167, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31168, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31169, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}31170, 'SameValue(EigenvalueOf(A, col(E, 5)), Λ[5], 1E-15)', True);

  Test({LINENUM}31172, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31173, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31174, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31175, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}31176, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);

  Test({LINENUM}31178, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31179, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31180, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31181, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31182, 'IsEigenpair(A, col(E, 5), Λ[5])', True);

  Test({LINENUM}31184, 'IsEigenvector(A, ❨0.438718328790090, 0.571040527424050, 0.444736969767807, 0.328057963353101, 0.419554459427209❩)', True);
  Test({LINENUM}31185, 'IsEigenvector(A, ❨0.438728328790090, 0.571040527424050, 0.444736969767807, 0.328057963353101, 0.419554459427209❩)', False);
  Test({LINENUM}31186, 'IsEigenvector(A, ❨0.438718328790090, 0.571041527424050, 0.444736969767807, 0.328057963353101, 0.419554459427209❩)', False);
  Test({LINENUM}31187, 'IsEigenvector(A, ❨0.438718328790090, 0.571040527424050, 0.444746969767807, 0.328057963353101, 0.419554459427209❩)', False);
  Test({LINENUM}31188, 'IsEigenvector(A, ❨0.438718328790090, 0.571040527424050, 0.444736969767807, 0.328027963353101, 0.419554459427209❩)', False);
  Test({LINENUM}31189, 'IsEigenvector(A, ❨0.438718328790090, 0.571040527424050, 0.444736969767807, 0.328057963353101, 0.419555459427209❩)', False);

  Test({LINENUM}31191, 'IsEigenpair(A, ❨0.588766415101779, 0.309639465780580, -0.112488495387063, -0.562252131562491, -0.478222112243157❩, 1.764018208004057)', True);
  Test({LINENUM}31192, 'IsEigenpair(A, ❨0.588761415101779, 0.309639465780580, -0.112488495387063, -0.562252131562491, -0.478222112243157❩, 1.764018208004057)', False);
  Test({LINENUM}31193, 'IsEigenpair(A, ❨0.588766415101779, 0.309632465780580, -0.112488495387063, -0.562252131562491, -0.478222112243157❩, 1.764018208004057)', False);
  Test({LINENUM}31194, 'IsEigenpair(A, ❨0.588766415101779, 0.309639465780580, -0.112468495387063, -0.562252131562491, -0.478222112243157❩, 1.764018208004057)', False);
  Test({LINENUM}31195, 'IsEigenpair(A, ❨0.588766415101779, 0.309639465780580, -0.112488495387063, -0.562257131562491, -0.478222112243157❩, 1.764018208004057)', False);
  Test({LINENUM}31196, 'IsEigenpair(A, ❨0.588766415101779, 0.309639465780580, -0.112488495387063, -0.562252131562491, -0.478223112243157❩, 1.764018208004057)', False);
  Test({LINENUM}31197, 'IsEigenpair(A, ❨0.588766415101779, 0.309639465780580, -0.112488495387063, -0.562252131562491, -0.478222112243157❩, 1.764014208004057)', False);

  // --

  Test({LINENUM}31201, 'A ≔ ComplexMatrix(❨❨2, 0, 1, 0, 0❩, ❨0, 0, 0, 2, 0❩, ❨1, 0, 0, 1, 1❩, ❨0, 2, 1, 0, 0❩, ❨0, 0, 1, 0, 2❩❩);', null);
  Test({LINENUM}31202, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31203, 'IsOrthogonal(E)', True);
  Test({LINENUM}31204, 'IsUnitary(E)', True);
  Test({LINENUM}31205, 'IsReal(E)', True);
  Test({LINENUM}31206, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31208, 'Λ', [TASC(2.895106515927531), -2.292401585224621, 2, 2, -0.602704930702910]);
                                                                     {2}

  // --

  Test({LINENUM}31213, 'A ≔ ComplexMatrix(❨❨0, 1, 1, 0, 0❩, ❨1, 0, 0, 0, 1❩, ❨1, 0, 0, 1, 0❩, ❨0, 0, 1, 0, 1❩, ❨0, 1, 0, 1, 0❩❩);', null);
  Test({LINENUM}31214, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31215, 'IsOrthogonal(E)', True);
  Test({LINENUM}31216, 'IsUnitary(E)', True);
  Test({LINENUM}31217, 'IsReal(E)', True);
  Test({LINENUM}31218, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31220, 'Λ', [TASC(2), -1.618033988749895, -1.618033988749895, 0.618033988749895, 0.618033988749895]);
                                  {2}                                    {2}

  // --

  Test({LINENUM}31225, 'A ≔ ComplexMatrix(❨❨4.88518185435250995, -0.0503410125523369264, 2.41500433970266516, -0.3526553784998275, 0.377477078463321959❩, '+'❨-0.0503410125523369266, 6.99880168536003428, 0.0574866278829369505, -0.00839458885495496514, 0.00898544320902995499❩, ❨2.41500433970266516, 0.0574866278829369505, 4.24219977363724693, 0.402712768116436254, -0.431057764708227601❩, '+'❨-0.3526553784998275, -0.00839458885495496536, 0.402712768116436254, 6.94119313935299163, 0.0629459900627696699❩, ❨0.377477078463321959, 0.00898544320902995499, -0.431057764708227601, 0.0629459900627696697, 6.93262354729721721❩❩);', null);
  Test({LINENUM}31226, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31227, 'IsOrthogonal(E)', True);
  Test({LINENUM}31228, 'IsUnitary(E)', True);
  Test({LINENUM}31229, 'IsReal(E)', True);
  Test({LINENUM}31230, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31232, 'Λ', [TASC(7), 7, 7, 7, 2]);
                             {4}

  // --

  Test({LINENUM}31237, 'A ≔ ComplexMatrix(❨❨4, 2, 8, 1, 7, 5❩, ❨2, 3, 9, 4, 1, 2❩, ❨8, 9, 7, 5, 2, 1❩, ❨1, 4, 5, 8, 0, 9❩, ❨7, 1, 2, 0, 3, 2❩, ❨5, 2, 1, 9, 2, 6❩❩);', null);
  Test({LINENUM}31238, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31239, 'IsOrthogonal(E)', True);
  Test({LINENUM}31240, 'IsUnitary(E)', True);
  Test({LINENUM}31241, 'IsReal(E)', True);
  Test({LINENUM}31242, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31244, 'Λ', [TASC(25.699931912397357), 10.666684085724908, -7.835696371596078, 7.409797588520018, -2.807084819210859, -2.133632395835343]);

  Test({LINENUM}31246, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31247, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31248, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31249, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31250, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}31251, 'IsEigenvector(A, col(E, 6))', True);

  Test({LINENUM}31253, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31254, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31255, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31256, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}31257, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}31258, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);

  Test({LINENUM}31260, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31261, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31262, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31263, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}31264, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}31265, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);

  Test({LINENUM}31267, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31268, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31269, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31270, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31271, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}31272, 'IsEigenpair(A, col(E, 6), Λ[6])', True);

  // --

  Test({LINENUM}31276, 'A ≔ ComplexMatrix(❨❨9, 2, 1, 3, 5, 4, 0❩, ❨2, 7, 2, 8, 3, 5, 2❩, ❨1, 2, 6, 9, 0, 3, 1❩, ❨3, 8, 9, 5, 4, 9, 2❩, ❨5, 3, 0, 4, 3, 7, 4❩, ❨4, 5, 3, 9, 7, 8, 4❩, ❨0, 2, 1, 2, 4, 4, 3❩❩);', null);
  Test({LINENUM}31277, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31278, 'IsOrthogonal(E)', True);
  Test({LINENUM}31279, 'IsUnitary(E)', True);
  Test({LINENUM}31280, 'IsReal(E)', True);
  Test({LINENUM}31281, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31283, 'Λ', [TASC(30.641044817744506384), 9.8517787330299055632, -6.5550797165196624249, 6.2412143228197048481, 3.6651048576610945760, -3.1057270151052322463, 0.26166400036968330015]);

  Test({LINENUM}31285, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31286, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31287, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31288, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31289, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}31290, 'IsEigenvector(A, col(E, 6))', True);
  Test({LINENUM}31291, 'IsEigenvector(A, col(E, 7))', True);

  Test({LINENUM}31293, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31294, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31295, 'SameValue(EigenvalueOf(A, col(E, 3)), Λ[3], 1E-14)', True);
  Test({LINENUM}31296, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}31297, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}31298, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);
  Test({LINENUM}31299, 'EigenvalueOf(A, col(E, 7)) ≈ Λ[7]', True);

  Test({LINENUM}31301, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31302, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31303, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31304, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}31305, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}31306, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);
  Test({LINENUM}31307, 'EigenvectorOf(A, Λ[7]) ∥ col(E, 7)', True);

  Test({LINENUM}31309, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31310, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31311, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31312, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31313, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}31314, 'IsEigenpair(A, col(E, 6), Λ[6])', True);
  Test({LINENUM}31315, 'IsEigenpair(A, col(E, 7), Λ[7])', True);

  // --

  Test({LINENUM}31319, 'A ≔ ComplexMatrix(❨❨3, 7, 1, 5, 2, 0, 6, 8❩, ❨7, 3, 9, 4, 7, 8, 2, 1❩, ❨1, 9, 5, 6, 0, 1, 9, 2❩, ❨5, 4, 6, 6, 3, 9, 1, 1❩, ❨2, 7, 0, 3, 4, 2, 6, 2❩, ❨0, 8, 1, 9, 2, 9, 0, 5❩, ❨6, 2, 9, 1, 6, 0, 4, 3❩, ❨8, 1, 2, 1, 2, 5, 3, 1❩❩);', null);
  Test({LINENUM}31320, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31321, 'IsOrthogonal(E)', True);
  Test({LINENUM}31322, 'IsUnitary(E)', True);
  Test({LINENUM}31323, 'IsReal(E)', True);
  Test({LINENUM}31324, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-13); Test({LINENUM}31326, 'Λ', [TASC(32.776937694011345), -15.258689129816567, 12.644822532655207, 6.717980397487340, -5.958148232873256, 4.141024331011820, -0.325483553395741, 0.261555960919853]);

  Test({LINENUM}31328, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31329, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31330, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31331, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31332, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}31333, 'IsEigenvector(A, col(E, 6))', True);
  Test({LINENUM}31334, 'IsEigenvector(A, col(E, 7))', True);
  Test({LINENUM}31335, 'IsEigenvector(A, col(E, 8))', True);

  Test({LINENUM}31337, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31338, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31339, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31340, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}31341, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}31342, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);
  Test({LINENUM}31343, 'EigenvalueOf(A, col(E, 7)) ≈ Λ[7]', True);
  Test({LINENUM}31344, 'EigenvalueOf(A, col(E, 8)) ≈ Λ[8]', True);

  Test({LINENUM}31346, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31347, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31348, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31349, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}31350, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}31351, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);
  Test({LINENUM}31352, 'EigenvectorOf(A, Λ[7]) ∥ col(E, 7)', True);
  Test({LINENUM}31353, 'EigenvectorOf(A, Λ[8]) ∥ col(E, 8)', True);

  Test({LINENUM}31355, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31356, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31357, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31358, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31359, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}31360, 'IsEigenpair(A, col(E, 6), Λ[6])', True);
  Test({LINENUM}31361, 'IsEigenpair(A, col(E, 7), Λ[7])', True);
  Test({LINENUM}31362, 'IsEigenpair(A, col(E, 8), Λ[8])', True);

  // --

  Test({LINENUM}31366, 'A ≔ ComplexMatrix(❨❨3, 2, 1, 5, 9, 8, 7, 0, 2❩, ❨2, 5, 4, 8, 3, 0, 7, 1, 8❩, ❨1, 4, 2, 9, 3, 4, 5, 9, 2❩, ❨5, 8, 9, 8, 2, 6, 4, 8, 5❩, ❨9, 3, 3, 2, 0, 2, 9, 7, 1❩, ❨8, 0, 4, 6, 2, 5, 4, 8, 0❩, '+'❨7, 7, 5, 4, 9, 4, 3, 2, 5❩, ❨0, 1, 9, 8, 7, 8, 2, 8, 1❩, ❨2, 8, 2, 5, 1, 0, 5, 1, 9❩❩);', null);
  Test({LINENUM}31367, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31368, 'IsOrthogonal(E)', True);
  Test({LINENUM}31369, 'IsUnitary(E)', True);
  Test({LINENUM}31370, 'IsReal(E)', True);
  Test({LINENUM}31371, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-13); Test({LINENUM}31373, 'Λ', [TASC(41.547567826293928), 15.294422185576229, -12.701166678543432, 11.116110823642684, -8.128109328768399, -4.470204023755420, -3.750820326108707, 2.912735795595040, 1.179463726068098]);

  Test({LINENUM}31375, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31376, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31377, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31378, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31379, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}31380, 'IsEigenvector(A, col(E, 6))', True);
  Test({LINENUM}31381, 'IsEigenvector(A, col(E, 7))', True);
  Test({LINENUM}31382, 'IsEigenvector(A, col(E, 8))', True);
  Test({LINENUM}31383, 'IsEigenvector(A, col(E, 9))', True);

  Test({LINENUM}31385, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31386, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31387, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31388, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}31389, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}31390, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);
  Test({LINENUM}31391, 'EigenvalueOf(A, col(E, 7)) ≈ Λ[7]', True);
  Test({LINENUM}31392, 'EigenvalueOf(A, col(E, 8)) ≈ Λ[8]', True);
  Test({LINENUM}31393, 'EigenvalueOf(A, col(E, 9)) ≈ Λ[9]', True);

  Test({LINENUM}31395, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31396, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31397, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31398, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}31399, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}31400, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);
  Test({LINENUM}31401, 'EigenvectorOf(A, Λ[7]) ∥ col(E, 7)', True);
  Test({LINENUM}31402, 'EigenvectorOf(A, Λ[8]) ∥ col(E, 8)', True);
  Test({LINENUM}31403, 'EigenvectorOf(A, Λ[9]) ∥ col(E, 9)', True);

  Test({LINENUM}31405, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31406, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31407, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31408, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31409, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}31410, 'IsEigenpair(A, col(E, 6), Λ[6])', True);
  Test({LINENUM}31411, 'IsEigenpair(A, col(E, 7), Λ[7])', True);
  Test({LINENUM}31412, 'IsEigenpair(A, col(E, 8), Λ[8])', True);
  Test({LINENUM}31413, 'IsEigenpair(A, col(E, 9), Λ[9])', True);

  // --

  Test({LINENUM}31417, 'A ≔ ComplexMatrix(❨❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩, ❨2, 3, 4, 5, 6, 7, 8, 9, 10, 1❩, ❨3, 4, 5, 6, 7, 8, 9, 10, 1, 2❩, ❨4, 5, 6, 7, 8, 9, 10, 1, 2, 3❩, ❨5, 6, 7, 8, 9, 10, 1, 2, 3, 4❩, '+'❨6, 7, 8, 9, 10, 1, 2, 3, 4, 5❩, ❨7, 8, 9, 10, 1, 2, 3, 4, 5, 6❩, ❨8, 9, 10, 1, 2, 3, 4, 5, 6, 7❩, ❨9, 10, 1, 2, 3, 4, 5, 6, 7, 8❩, ❨10, 1, 2, 3, 4, 5, 6, 7, 8, 9❩❩);', null);
  Test({LINENUM}31418, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31419, 'IsOrthogonal(E)', True);
  Test({LINENUM}31420, 'IsUnitary(E)', True);
  Test({LINENUM}31421, 'IsReal(E)', True);
  Test({LINENUM}31422, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-13); Test({LINENUM}31424, 'Λ', [TASC(55), -16.180339887498950, 16.180339887498950, -8.506508083520398, 8.506508083520398, -6.180339887498945, 6.180339887498937, -5.257311121191338, 5.257311121191338, -5]);

  Test({LINENUM}31426, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31427, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31428, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31429, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31430, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}31431, 'IsEigenvector(A, col(E, 6))', True);
  Test({LINENUM}31432, 'IsEigenvector(A, col(E, 7))', True);
  Test({LINENUM}31433, 'IsEigenvector(A, col(E, 8))', True);
  Test({LINENUM}31434, 'IsEigenvector(A, col(E, 9))', True);
  Test({LINENUM}31435, 'IsEigenvector(A, col(E, 10))', True);

  Test({LINENUM}31437, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31438, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31439, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31440, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}31441, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}31442, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);
  Test({LINENUM}31443, 'EigenvalueOf(A, col(E, 7)) ≈ Λ[7]', True);
  Test({LINENUM}31444, 'EigenvalueOf(A, col(E, 8)) ≈ Λ[8]', True);
  Test({LINENUM}31445, 'EigenvalueOf(A, col(E, 9)) ≈ Λ[9]', True);
  Test({LINENUM}31446, 'EigenvalueOf(A, col(E, 10)) ≈ Λ[10]', True);

  Test({LINENUM}31448, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31449, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31450, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31451, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}31452, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}31453, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);
  Test({LINENUM}31454, 'EigenvectorOf(A, Λ[7]) ∥ col(E, 7)', True);
  Test({LINENUM}31455, 'EigenvectorOf(A, Λ[8]) ∥ col(E, 8)', True);
  Test({LINENUM}31456, 'EigenvectorOf(A, Λ[9]) ∥ col(E, 9)', True);
  Test({LINENUM}31457, 'EigenvectorOf(A, Λ[10]) ∥ col(E, 10)', True);

  Test({LINENUM}31459, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31460, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31461, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31462, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31463, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}31464, 'IsEigenpair(A, col(E, 6), Λ[6])', True);
  Test({LINENUM}31465, 'IsEigenpair(A, col(E, 7), Λ[7])', True);
  Test({LINENUM}31466, 'IsEigenpair(A, col(E, 8), Λ[8])', True);
  Test({LINENUM}31467, 'IsEigenpair(A, col(E, 9), Λ[9])', True);
  Test({LINENUM}31468, 'IsEigenpair(A, col(E, 10), Λ[10])', True);

  // --

  Test({LINENUM}31472, 'A ≔ ComplexMatrix(❨❨4.45528983757093495, -0.0878217640871465801, 0.587220808461187196, 0.381484594913282418, 0.806374962066634831, 0.415539821124804545, -1.07626065503415, -0.174476853005194865, 0.6117764065082528, 0.479713560928682166❩, '+'❨-0.0878217640871465801, 4.39333906061644079, -1.16146861964970503, 0.189604671732296926, 0.549866251807311702, 0.959584846946758171, -0.559867163033034075, 0.601342029002866998, 0.908395415505047237, -0.0481674127191538071❩, '+
    '❨0.587220808461187195, -1.16146861964970503, 4.731699905531466, -0.297368715494811859, 0.174137444046764151, 0.158862374235097095, 0.0708587702680495379, 0.527044617773810588, 0.717806236876411773, 0.100941787359586736❩, '+'❨0.381484594913282417, 0.189604671732296926, -0.297368715494811859, 5.20093245260149577, -0.422111106264731792, -0.609505049911372394, 0.430772405093700426, -0.075450459824149398, -0.0231177557010034982, 1.02271233462064678❩, '+
    '❨0.806374962066634831, 0.549866251807311702, 0.174137444046764151, -0.422111106264731792, 4.65483119820909985, 0.289795090828546352, 0.795841033040542465, -0.226199611183290607, -1.41597888676298831, 0.547038811317080901❩, '+'❨0.415539821124804545, 0.959584846946758171, 0.158862374235097095, -0.609505049911372394, 0.289795090828546352, 3.97252873681661176, 0.586614812369869111, -0.203645718668121608, 0.548222506108191402, -0.0260783651922211985❩, '+
    '❨-1.07626065503415, -0.559867163033034075, 0.0708587702680495379, 0.430772405093700426, 0.795841033040542465, 0.586614812369869111, 5.07303988296985066, 0.0852567827171805209, 0.721798919103536904, 0.0913845737686953809❩, '+'❨-0.174476853005194865, 0.601342029002866998, 0.527044617773810588, -0.0754504598241493979, -0.226199611183290607, -0.203645718668121608, 0.0852567827171805208, 5.72552879232507247, -0.381852810701084683, 0.248741195041378638❩, '+'❨0.6117764065082528, 0.908395415505047237, 0.717806236876411773, -0.0231177557010034982, -1.41597888676298831, 0.548222506108191402, 0.721798919103536904, -0.381852810701084683, 4.15028770968589867, 0.0862862168111860338❩, '+'❨0.479713560928682166, -0.0481674127191538071, 0.100941787359586736, 1.02271233462064678, 0.547038811317080901, -0.0260783651922211984, 0.0913845737686953809, 0.248741195041378638, 0.0862862168111860338, 3.64252242367312907❩❩);', null);
  Test({LINENUM}31476, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31477, 'IsOrthogonal(E)', True);
  Test({LINENUM}31478, 'IsUnitary(E)', True);
  Test({LINENUM}31479, 'IsReal(E)', True);
  Test({LINENUM}31480, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31482, 'Λ', [TASC(6), 6, 6, 6, 6, 6, 3, 3, 3, 1]);
                             {6}                {3}

  // --

  Test({LINENUM}31487, 'A ≔ ComplexMatrix(❨❨0.947217218464429805, -0.0797032009555874838, 0.455681246175844459, -0.890506530889571131, 0.0810219664601976321, -0.4241414032969027, -0.325611817072624359, 0.442131323976784809, 0.696001040652687542, -0.363371579820000821❩, '+'❨-0.0797032009555874838, 0.664262086761071853, 0.151183874385912782, 0.366175763890158299, -0.362499363441370523, 0.345609605325798349, -0.36153060182114391, -0.370383371480650959, -0.351151983839811129, -0.192995673028588803❩, '+
    '❨0.455681246175844459, 0.151183874385912782, 0.965112845520727124, -0.379442604818156945, -0.0868548299522641688, -0.703208127497219295, -0.29273075622571167, 0.392533036681992209, 0.433785161673175889, -0.0198556703071645884❩, '+'❨-0.890506530889571131, 0.366175763890158299, -0.379442604818156945, 1.60196556896465841, 0.0343051071296422081, 0.587093406299823787, -0.485735414772669726, -0.766652742695679709, -0.63672778172637717, -0.0824745994586258031❩, '+
    '❨0.0810219664601976321, -0.362499363441370523, -0.0868548299522641688, 0.0343051071296422081, 0.327534361557092576, -0.222948382709437083, -0.0500390113869091228, 0.161756725513035523, 0.21826384416565025, -0.135644537928391234❩, '+'❨-0.4241414032969027, 0.345609605325798349, -0.703208127497219295, 0.587093406299823787, -0.222948382709437083, 0.989037781112786131, -0.126211410841058615, -0.699854415829559306, -0.413031006405435901, 0.131956448780506888❩, '+
    '❨-0.325611817072624359, -0.36153060182114391, -0.29273075622571167, -0.485735414772669726, -0.0500390113869091228, -0.126211410841058615, 1.00217393220066957, 0.281471732316985816, -0.335032854995363073, 0.398331000774434439❩, '+'❨0.442131323976784809, -0.370383371480650959, 0.392533036681992209, -0.766652742695679709, 0.161756725513035523, -0.699854415829559306, 0.281471732316985816, 0.61286300125401041, 0.371247429623465179, -0.0611706531297214894❩, '+
    '❨0.696001040652687542, -0.351151983839811129, 0.433785161673175889, -0.63672778172637717, 0.21826384416565025, -0.413031006405435901, -0.335032854995363073, 0.371247429623465179, 0.960656361843560564, 0.149752326353616183❩, '+'❨-0.363371579820000821, -0.192995673028588803, -0.0198556703071645884, -0.0824745994586258031, -0.135644537928391234, 0.131956448780506888, 0.398331000774434439, -0.0611706531297214894, 0.149752326353616183, 0.929176842320993553❩❩);', null);
  Test({LINENUM}31492, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31493, 'IsOrthogonal(E)', True);
  Test({LINENUM}31494, 'IsUnitary(E)', True);
  Test({LINENUM}31495, 'IsReal(E)', True);
  Test({LINENUM}31496, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31498, 'Λ', [TASC(4), 2, 1, 1, 1, 0, 0, 0, 0, 0]);
                                    {3}      {5}

  // --

  Test({LINENUM}31503, 'A ≔ ComplexMatrix(ReversalMatrix(10));', null);
  Test({LINENUM}31504, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31505, 'IsOrthogonal(E)', True);
  Test({LINENUM}31506, 'IsUnitary(E)', True);
  Test({LINENUM}31507, 'IsReal(E)', True);
  Test({LINENUM}31508, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31510, 'Λ', [TASC(-1), -1, -1, -1, -1, 1, 1, 1, 1, 1]);
                              {5}                 {5}

  // --

  Test({LINENUM}31515, 'A ≔ ComplexMatrix(diag(12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0));', null);
  Test({LINENUM}31516, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31517, 'IsOrthogonal(E)', True);
  Test({LINENUM}31518, 'IsUnitary(E)', True);
  Test({LINENUM}31519, 'IsReal(E)', True);
  Test({LINENUM}31520, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Test({LINENUM}31522, 'IsIdentity(E)', True);
  Test({LINENUM}31523, 'A = diag(Λ)', True);

  // --

  Test({LINENUM}31527, 'A ≔ ComplexMatrix(IdentityMatrix(10));', null);
  Test({LINENUM}31528, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31529, 'IsOrthogonal(E)', True);
  Test({LINENUM}31530, 'IsUnitary(E)', True);
  Test({LINENUM}31531, 'IsReal(E)', True);
  Test({LINENUM}31532, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Test({LINENUM}31534, 'IsIdentity(E)', True);
  Test({LINENUM}31535, 'IsIdentity(diag(Λ))', True);

  // --

  Test({LINENUM}31539, 'A ≔ ComplexMatrix(ZeroMatrix(10));', null);
  Test({LINENUM}31540, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31541, 'IsOrthogonal(E)', True);
  Test({LINENUM}31542, 'IsUnitary(E)', True);
  Test({LINENUM}31543, 'IsReal(E)', True);
  Test({LINENUM}31544, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Test({LINENUM}31546, 'IsIdentity(E)', True);
  Test({LINENUM}31547, 'IsZero(Λ)', True);

  // - eigenvectors of real non-symmetric matrices (complex data type)

  Test({LINENUM}31551, 'A ≔ ComplexMatrix(❨❨5, 2, 1❩, ❨0, 2, 4❩, ❨1, 2, 1❩❩);', null);
  Test({LINENUM}31552, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31553, 'IsReal(E)', True);
  Test({LINENUM}31554, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}31556, 'Λ', [TASC(6), 3.236067977499790, -1.236067977499789]);

  Test({LINENUM}31558, 'col(E, 1) ∥ ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩', True);
  Test({LINENUM}31559, 'col(E, 2) ∥ ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩', True);
  Test({LINENUM}31560, 'col(E, 3) ∥ ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩', True);

  Test({LINENUM}31562, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31563, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31564, 'IsEigenvector(A, col(E, 3))', True);

  Test({LINENUM}31566, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31567, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31568, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);

  Test({LINENUM}31570, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31571, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31572, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);

  Test({LINENUM}31574, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31575, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31576, 'IsEigenpair(A, col(E, 3), Λ[3])', True);

  Test({LINENUM}31578, 'IsEigenvector(A, ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩)', True);
  Test({LINENUM}31579, 'IsEigenvector(A, ❨0.904554033733291, 0.301511344577764, 0.301511344577764❩)', False);
  Test({LINENUM}31580, 'IsEigenvector(A, ❨0.904534033733291, 0.301571344577764, 0.301511344577764❩)', False);
  Test({LINENUM}31581, 'IsEigenvector(A, ❨0.904534033733291, 0.301511344577764, 0.301510344577764❩)', False);

  Test({LINENUM}31583, 'IsEigenvector(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩)', True);
  Test({LINENUM}31584, 'IsEigenvector(A, ❨0.781038693640056, -0.596654357427190, -0.184376336212866❩)', False);
  Test({LINENUM}31585, 'IsEigenvector(A, ❨0.781030693640056, -0.596650357427190, -0.184376336212866❩)', False);
  Test({LINENUM}31586, 'IsEigenvector(A, ❨0.781030693640056, -0.596654357427190, -0.184374336212866❩)', False);

  Test({LINENUM}31588, 'IsEigenvector(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩)', True);
  Test({LINENUM}31589, 'IsEigenvector(A, ❨0.146862297110534, -0.769007151342417, 0.622139854231882❩)', False);
  Test({LINENUM}31590, 'IsEigenvector(A, ❨0.146867297110534, -0.769004151342417, 0.622139854231882❩)', False);
  Test({LINENUM}31591, 'IsEigenvector(A, ❨0.146867297110534, -0.769007151342417, 0.622199854231882❩)', False);

  Test({LINENUM}31593, 'IsEigenpair(A, ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩, 6)', True);
  Test({LINENUM}31594, 'IsEigenpair(A, ❨0.904535033733291, 0.301511344577764, 0.301511344577764❩, 6)', False);
  Test({LINENUM}31595, 'IsEigenpair(A, ❨0.904534033733291, 0.301514344577764, 0.301511344577764❩, 6)', False);
  Test({LINENUM}31596, 'IsEigenpair(A, ❨0.904534033733291, 0.301511344577764, 0.301510344577764❩, 6)', False);
  Test({LINENUM}31597, 'IsEigenpair(A, ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩, 7)', False);
  Test({LINENUM}31598, 'IsEigenpair(A, ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩, 6.0001)', False);
  Test({LINENUM}31599, 'IsEigenpair(A, ❨0.904534033733291, 0.301511344577764, 0.301511344577764❩, -6)', False);

  Test({LINENUM}31601, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩, 3.236067977499790)', True);
  Test({LINENUM}31602, 'IsEigenpair(A, ❨0.781034693640056, -0.596654357427190, -0.184376336212866❩, 3.236067977499790)', False);
  Test({LINENUM}31603, 'IsEigenpair(A, ❨0.781030693640056, -0.596644357427190, -0.184376336212866❩, 3.236067977499790)', False);
  Test({LINENUM}31604, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184370336212866❩, 3.236067977499790)', False);
  Test({LINENUM}31605, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩, 3.236068977499790)', False);
  Test({LINENUM}31606, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩, -3.236067977499790)', False);
  Test({LINENUM}31607, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩, 0)', False);
  Test({LINENUM}31608, 'IsEigenpair(A, ❨0.781030693640056, -0.596654357427190, -0.184376336212866❩, 6)', False);

  Test({LINENUM}31610, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, -1.236067977499789)', True);
  Test({LINENUM}31611, 'IsEigenpair(A, ❨0.146865297110534, -0.769007151342417, 0.622139854231882❩, -1.236067977499789)', False);
  Test({LINENUM}31612, 'IsEigenpair(A, ❨0.146867297110534, -0.769047151342417, 0.622139854231882❩, -1.236067977499789)', False);
  Test({LINENUM}31613, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622130854231882❩, -1.236067977499789)', False);
  Test({LINENUM}31614, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, -1.236064977499789)', False);
  Test({LINENUM}31615, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, 1.236067977499789)', False);
  Test({LINENUM}31616, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, 6)', False);
  Test({LINENUM}31617, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, 3.236067977499790)', False);
  Test({LINENUM}31618, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, 0)', False);
  Test({LINENUM}31619, 'IsEigenpair(A, ❨0.146867297110534, -0.769007151342417, 0.622139854231882❩, 1E100)', False);

  // -

  Test({LINENUM}31623, 'A ≔ ComplexMatrix(❨❨2, 3, 0, 1❩, ❨5, 6, 8, 1❩, ❨4, 2, 5, 7❩, ❨3, 0, 2, 6❩❩);', null);
  Test({LINENUM}31624, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31625, 'IsReal(E)', True);
  Test({LINENUM}31626, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}31628, 'Λ', [TASC(13.109772228646445), 3.890227771353548, 3, -1]);

  Test({LINENUM}31630, 'col(E, 1) ∥ ❨0.233782511971403, 0.784104790434032, 0.520117226972313, 0.244956087740999❩', True);
  Test({LINENUM}31631, 'col(E, 2) ∥ ❨-0.596105141205652, -0.513975993546188, 0.456218061914745, 0.415153488085013❩', True);
  Test({LINENUM}31632, 'col(E, 3) ∥ ❨-0.696310623822791, -0.348155311911396, 0.522232967867093, 0.348155311911397❩', True);
  Test({LINENUM}31633, 'col(E, 4) ∥ ❨-0.713563032023560, 0.600041640565266, -0.121630062276743, 0.340564174374881❩', True);

  Test({LINENUM}31635, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31636, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31637, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31638, 'IsEigenvector(A, col(E, 4))', True);

  Test({LINENUM}31640, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31641, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31642, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31643, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);

  Test({LINENUM}31645, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31646, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31647, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31648, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);

  Test({LINENUM}31650, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31651, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31652, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31653, 'IsEigenpair(A, col(E, 4), Λ[4])', True);

  // -

  Test({LINENUM}31657, 'A ≔ ComplexMatrix(❨❨6, 4, 2, 1, 3❩, ❨5, 0, 4, 7, 3❩, ❨9, 5, 3, 0, 2❩, ❨4, 4, 2, 8, 5❩, ❨3, 6, 0, 4, 7❩❩);', null);
  Test({LINENUM}31658, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31659, 'IsReal(E)', True);
  Test({LINENUM}31660, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}31662, 'Λ', [TASC(19.317943284512630), 6.195170660848524, -3.837738100539873, 2.388435089272784, -0.063810934094071]);

  Test({LINENUM}31664, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31665, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31666, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31667, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31668, 'IsEigenvector(A, col(E, 5))', True);

  Test({LINENUM}31670, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31671, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31672, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31673, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}31674, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);

  Test({LINENUM}31676, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31677, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31678, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31679, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}31680, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);

  Test({LINENUM}31682, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31683, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31684, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31685, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31686, 'IsEigenpair(A, col(E, 5), Λ[5])', True);

  // -

  Test({LINENUM}31690, 'A ≔ ComplexMatrix(❨❨3, 6, 2, 5, 4, 7❩, ❨2, 0, 1, 4, 2, 0❩, ❨3, 6, 9, 8, 5, 2❩, ❨2, 7, 6, 4, 3, 1❩, ❨5, 6, 9, 8, 2, 4❩, ❨6, 5, 3, 9, 5, 7❩❩);', null);
  Test({LINENUM}31691, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31692, 'IsReal(E)', True);
  Test({LINENUM}31693, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}31695, 'Λ', [TASC(25.608230542132779785), 6.8775642608200556778, -4.2970302684870303417, -3.5268871389883464722, 0.86082458257068375765, -0.52270197804814240633]);

  Test({LINENUM}31697, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31698, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31699, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31700, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31701, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}31702, 'IsEigenvector(A, col(E, 6))', True);

  Test({LINENUM}31704, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31705, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31706, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31707, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}31708, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}31709, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);

  Test({LINENUM}31711, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31712, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31713, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31714, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}31715, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}31716, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);

  Test({LINENUM}31718, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31719, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31720, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31721, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31722, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}31723, 'IsEigenpair(A, col(E, 6), Λ[6])', True);

  // -

  Test({LINENUM}31727, 'A ≔ ComplexMatrix(❨❨0, 2, 0❩, ❨1, −1, 1❩, ❨2, 0, 1❩❩);', null);
  Eps(1E-14); Test({LINENUM}31728, 'eigenvalues(A)', [2, -1, -1]); // -1: geometric multiplicity = 1 < 2 = algebraic multiplicity
  Test({LINENUM}31729, 'eigenvectors(A)', failure, 'Couldn''t compute eigenvectors.');

  // - eigenvectors of non-real Hermitian matrices

  Test({LINENUM}31733, 'A ≔ ❨❨2, i❩, ❨-i, 7❩❩;', null);
  Test({LINENUM}31734, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31735, 'IsReal(Λ)', True);
  Test({LINENUM}31736, 'IsUnitary(E)', True);
  Test({LINENUM}31737, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31739, 'Λ', [TASC(7.192582403567252), 1.807417596432748]);

  // -

  Test({LINENUM}31743, 'A ≔ ❨❨2, 5, i❩, ❨5, 7, −i❩, ❨−i, i, 4❩❩;', null);
  Test({LINENUM}31744, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31745, 'IsReal(Λ)', True);
  Test({LINENUM}31746, 'IsUnitary(E)', True);
  Test({LINENUM}31747, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31749, 'Λ', [TASC(10.107946815755056), 4.331111110781892, -1.439057926536950]);

  Test({LINENUM}31751, 'col(E, 1) ∥ ❨0.519222484861137⋅i,  0.852891389063453⋅i, -0.054628652518984❩', True);
  Test({LINENUM}31752, 'col(E, 2) ∥ ❨0.237720398905681⋅i, -0.082730280819671⋅i, 0.967804067246890❩', True);
  Test({LINENUM}31753, 'col(E, 3) ∥ ❨0.820912311491764⋅i, -0.515491977723137⋅i, -0.245705103211833❩', True);

  Test({LINENUM}31755, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31756, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31757, 'IsEigenvector(A, col(E, 3))', True);

  Test({LINENUM}31759, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31760, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31761, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);

  Test({LINENUM}31763, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31764, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31765, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);

  Test({LINENUM}31767, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31768, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31769, 'IsEigenpair(A, col(E, 3), Λ[3])', True);

  Test({LINENUM}31771, 'IsEigenvector(A, ❨0.519222484861137⋅i,  0.852891389063453⋅i, -0.054628652518984❩)', True);
  Test({LINENUM}31772, 'IsEigenvector(A, ❨0.519232484861137⋅i,  0.852891389063453⋅i, -0.054628652518984❩)', False);
  Test({LINENUM}31773, 'IsEigenvector(A, ❨0.519222484861137⋅i,  0.852898389063453⋅i, -0.054628652518984❩)', False);
  Test({LINENUM}31774, 'IsEigenvector(A, ❨0.519222484861137⋅i,  0.852891389063453⋅i, -0.054620652518984❩)', False);
  Test({LINENUM}31775, 'IsEigenvector(A, ❨0.519222484861137⋅i,  0.00003 + 0.852891389063453⋅i, -0.054628652518984❩)', False);
  Test({LINENUM}31776, 'IsEigenvector(A, ❨0.00004 + 0.519222484861137⋅i,  0.852891389063453⋅i, -0.054628652518984❩)', False);
  Test({LINENUM}31777, 'IsEigenvector(A, ❨0.519222484861137,  0.852891389063453⋅i, -0.054628652518984❩)', False);
  Test({LINENUM}31778, 'IsEigenvector(A, ❨0.519222484861137,  0.852891389063453, -0.054628652518984❩)', False);

  Test({LINENUM}31780, 'IsEigenvector(A, ❨0.237720398905681⋅i, -0.082730280819671⋅i, 0.967804067246890❩)', True);
  Test({LINENUM}31781, 'IsEigenvector(A, ❨0.237725398905681⋅i, -0.082730280819671⋅i, 0.967804067246890❩)', False);
  Test({LINENUM}31782, 'IsEigenvector(A, ❨0.237720398905681⋅i, -0.082737280819671⋅i, 0.967804067246890❩)', False);
  Test({LINENUM}31783, 'IsEigenvector(A, ❨0.237720398905681⋅i, -0.082730280819671⋅i, 0.967864067246890❩)', False);
  Test({LINENUM}31784, 'IsEigenvector(A, ❨0.237720398905681⋅i, -0.082730280819671, 0.967804067246890❩)', False);
  Test({LINENUM}31785, 'IsEigenvector(A, ❨0.237720398905681, -0.082730280819671⋅i, 0.967804067246890❩)', False);
  Test({LINENUM}31786, 'IsEigenvector(A, ❨0.237720398905681, -0.082730280819671, 0.967804067246890❩)', False);
  Test({LINENUM}31787, 'IsEigenvector(A, ❨0.237720398905681⋅i, -0.082730280819671⋅i, 0.967804067246890⋅i❩)', False);
  Test({LINENUM}31788, 'IsEigenvector(A, ❨0.237720398905681⋅i, -0.082730280819671⋅i, 0.6 + 0.967804067246890❩)', False);
  Test({LINENUM}31789, 'IsEigenvector(A, ❨0.237720398905681⋅i, 0.082730280819671⋅i, 0.967804067246890❩)', False);

  Test({LINENUM}31791, 'IsEigenvector(A, ❨0.820912311491764⋅i, -0.515491977723137⋅i, -0.245705103211833❩)', True);
  Test({LINENUM}31792, 'IsEigenvector(A, ❨0.820911311491764⋅i, -0.515491977723137⋅i, -0.245705103211833❩)', False);
  Test({LINENUM}31793, 'IsEigenvector(A, ❨0.820912311491764⋅i, -0.515495977723137⋅i, -0.245705103211833❩)', False);
  Test({LINENUM}31794, 'IsEigenvector(A, ❨0.820912311491764⋅i, -0.515491977723137⋅i, -0.245707103211833❩)', False);
  Test({LINENUM}31795, 'IsEigenvector(A, ❨0.820912311491764⋅i, -0.515491977723137⋅i, 0.245705103211833❩)', False);
  Test({LINENUM}31796, 'IsEigenvector(A, ❨0.820912311491764⋅i, -0.515491977723137⋅i + 0.0006, -0.245705103211833❩)', False);
  Test({LINENUM}31797, 'IsEigenvector(A, ❨0.820912311491764, -0.515491977723137⋅i, -0.245705103211833❩)', False);
  Test({LINENUM}31798, 'IsEigenvector(A, ❨0.00006 - 0.820912311491764⋅i, -0.515491977723137⋅i, -0.245705103211833❩)', False);

  Test({LINENUM}31800, 'IsEigenvector(A, ❨1, 2❩)', failure, 'Vector is of wrong dimension.');

  Test({LINENUM}31802, 'EigenvalueOf(A, ❨1, 2, 3❩)', failure, 'A vector which isn''t an eigenvector has no associated eigenvalue.');
  Test({LINENUM}31803, 'EigenvalueOf(A, ❨1, 2❩)', failure, 'Vector is of wrong dimension.');

  Test({LINENUM}31805, 'EigenvectorOf(A, 5)', failure, 'Couldn''t compute associated eigenvector.');

  Test({LINENUM}31807, 'IsEigenpair(A, ❨0.237720398905681⋅i, -0.082730280819671⋅i, 0.967804067246890❩, 4.331111110781892)', True);
  Test({LINENUM}31808, 'IsEigenpair(A, ❨0.237730398905681⋅i, -0.082730280819671⋅i, 0.967804067246890❩, 4.331111110781892)', False);
  Test({LINENUM}31809, 'IsEigenpair(A, ❨0.237720398905681⋅i, -0.082740280819671⋅i, 0.967804067246890❩, 4.331111110781892)', False);
  Test({LINENUM}31810, 'IsEigenpair(A, ❨0.237720398905681⋅i, -0.082730280819671⋅i, 0.967864067246890❩, 4.331111110781892)', False);
  Test({LINENUM}31811, 'IsEigenpair(A, ❨0.237720398905681⋅i, -0.082730280819671⋅i, 0.967804067246890❩, 4.331171110781892)', False);
  Test({LINENUM}31812, 'IsEigenpair(A, ❨0.237720398905681⋅i, 0.00001-0.082730280819671⋅i, 0.967804067246890❩, 4.331111110781892)', False);
  Test({LINENUM}31813, 'IsEigenpair(A, ❨0.237720398905681, -0.082730280819671⋅i, 0.967804067246890❩, 4.331111110781892)', False);
  Test({LINENUM}31814, 'IsEigenpair(A, ❨0.237720398905681, -0.082730280819671, 0.967804067246890❩, 4.331111110781892)', False);
  Test({LINENUM}31815, 'IsEigenpair(A, ❨0.237720398905681⋅i, -0.082730280819671⋅i, 0.967804067246890 + 0.0005⋅i❩, 4.331111110781892)', False);
  Test({LINENUM}31816, 'IsEigenpair(A, ❨0.237720398905681⋅i, -0.082730280819671⋅i, 0.967804067246890❩, 10.107946815755056)', False);

  // -

  Test({LINENUM}31820, 'A ≔ ❨❨1, i, 0❩, ❨−i, 3, 0❩, ❨0, 0, 0❩❩;', null);
  Test({LINENUM}31821, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31822, 'IsReal(Λ)', True);
  Test({LINENUM}31823, 'IsUnitary(E)', True);
  Test({LINENUM}31824, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31826, 'Λ', [TASC(3.414213562373095), 0.585786437626905, 0]);
                                                                    {0}
  // -

  Test({LINENUM}31830, 'A ≔ ❨❨3, i, 8, 2❩, ❨−i, 5, 3, i❩, ❨8, 3, 2, 7❩, ❨2, −i, 7, 1❩❩;', null);
  Test({LINENUM}31831, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31832, 'IsReal(Λ)', True);
  Test({LINENUM}31833, 'IsUnitary(E)', True);
  Test({LINENUM}31834, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31836, 'Λ', [TASC(14.219175497193367), -8.046249768016203, 5.279072848214093, -0.451998577391262]);

  Test({LINENUM}31838, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31839, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31840, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31841, 'IsEigenvector(A, col(E, 4))', True);

  Test({LINENUM}31843, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31844, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31845, 'SameValue(EigenvalueOf(A, col(E, 3)), Λ[3], 1E-15)', True);
  Test({LINENUM}31846, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);

  Test({LINENUM}31848, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31849, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31850, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31851, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);

  Test({LINENUM}31853, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31854, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31855, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31856, 'IsEigenpair(A, col(E, 4), Λ[4])', True);

  // -

  Test({LINENUM}31860, 'A ≔ ❨❨0, 0, 0, i❩, ❨0, 0, 1, 0❩, ❨0, 1, 0, 0❩, ❨−i, 0, 0, 0❩❩;', null);
  Test({LINENUM}31861, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31862, 'IsReal(Λ)', True);
  Test({LINENUM}31863, 'IsUnitary(E)', True);
  Test({LINENUM}31864, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31866, 'Λ', [TASC(-1), -1, 1, 1]);
                              {2}     {2}

  Test({LINENUM}31869, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31870, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31871, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31872, 'IsEigenvector(A, col(E, 4))', True);

  Test({LINENUM}31874, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31875, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31876, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31877, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);

  Test({LINENUM}31879, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31880, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31881, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31882, 'IsEigenpair(A, col(E, 4), Λ[4])', True);

  // -

  Test({LINENUM}31886, 'A ≔ ❨❨5, 2, −i, 7, 4❩, ❨2, 3, 9, 1, i❩, ❨i, 9, 5, 9, 8❩, ❨7, 1, 9, 2, 3❩, ❨4, −i, 8, 3, 6❩❩;', null);
  Test({LINENUM}31887, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31888, 'IsReal(Λ)', True);
  Test({LINENUM}31889, 'IsUnitary(E)', True);
  Test({LINENUM}31890, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}31892, 'Λ', [TASC(22.691445962489553), -11.503186518668644, 7.060493996470923, 3.839332450777222, -1.088085891069047]);

  Test({LINENUM}31894, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31895, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31896, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31897, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31898, 'IsEigenvector(A, col(E, 5))', True);

  Test({LINENUM}31900, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31901, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31902, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31903, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}31904, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);

  Test({LINENUM}31906, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31907, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31908, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31909, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}31910, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);

  Test({LINENUM}31912, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31913, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31914, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31915, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31916, 'IsEigenpair(A, col(E, 5), Λ[5])', True);

  // -

  Test({LINENUM}31920, 'A ≔ ❨❨0, 0, −i, −1, 0❩, ❨0, 0, 0, 0, 1❩, ❨i, 0, 0, −i, 0❩, ❨−1, 0, i, 0, 0❩, ❨0, 1, 0, 0, 0❩❩;', null);
  Test({LINENUM}31921, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31922, 'IsReal(Λ)', True);
  Test({LINENUM}31923, 'IsUnitary(E, 1E-15)', True);
  Test({LINENUM}31924, 'SameValue(A, E ⋅ diag(Λ) ⋅ E*, 1E-14)', True);

  Eps(1E-14); Test({LINENUM}31926, 'Λ', [TASC(2), -1, -1, -1, 1]);
                                  {3}

  Test({LINENUM}31929, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31930, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31931, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31932, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31933, 'IsEigenvector(A, col(E, 5))', True);

  Test({LINENUM}31935, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31936, 'SameValue(EigenvalueOf(A, col(E, 2)), Λ[2], 1E-14)', True);
  Test({LINENUM}31937, 'SameValue(EigenvalueOf(A, col(E, 3)), Λ[3], 1E-14)', True);
  Test({LINENUM}31938, 'SameValue(EigenvalueOf(A, col(E, 4)), Λ[4], 1E-13)', True);
  Test({LINENUM}31939, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);

  Test({LINENUM}31941, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31942, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);

  Test({LINENUM}31944, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31945, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31946, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31947, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31948, 'IsEigenpair(A, col(E, 5), Λ[5])', True);

  // -

//  Test({LINENUM}31952, 'A ≔ ❨❨0, 0, 0, 1, 1−i❩, ❨0, 0, 0, i, 0❩, ❨0, 0, 0, 0, 1❩, ❨1, −i, 0, 0, 0❩, ❨1+i, 0, 1, 0, 0❩❩;', null);  // TODO. Wishlist. (Currently obtains the complete spectrum and all eigenspaces except the 0 one (the nullspace).)
//  Test({LINENUM}31953, '(Λ, E) ≔ eigenvectors(A);', null);
//  Test({LINENUM}31954, 'IsReal(Λ)', True);
//  Test({LINENUM}31955, 'IsUnitary(E)', True);
//  Test({LINENUM}31956, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);
//
//  Eps(1E-14); Test({LINENUM}31958, 'Λ', [TASC(-2), 2, -1, 1, 0]);

  // -

  Test({LINENUM}31962, 'A ≔ ❨❨9, 2, i, 2, i, 5❩, ❨2, 8, 0, 2, 3, 1❩, ❨−i, 0, 5, −i, 3, 4❩, ❨2, 2, i, 6, 2, 1❩, ❨−i, 3, 3, 2, 3, i❩, ❨5, 1, 4, 1, −i, 0❩❩;', null);
  Test({LINENUM}31963, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}31964, 'IsReal(Λ)', True);
  Test({LINENUM}31965, 'IsUnitary(E)', True);
  Test({LINENUM}31966, 'SameValue(A, E ⋅ diag(Λ) ⋅ E*, 1E-15)', True);

  Eps(1E-14); Test({LINENUM}31968, 'Λ', [TASC(14.589433207624165), 8.499935664587964, 7.224883679054878, 4.563236528531559, -4.322019577002851, 0.444530497204293]);

  Test({LINENUM}31970, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}31971, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}31972, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}31973, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}31974, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}31975, 'IsEigenvector(A, col(E, 6))', True);

  Test({LINENUM}31977, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}31978, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}31979, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}31980, 'SameValue(EigenvalueOf(A, col(E, 4)), Λ[4], 1E-15)', True);
  Test({LINENUM}31981, 'SameValue(EigenvalueOf(A, col(E, 5)), Λ[5], 1E-15)', True);
  Test({LINENUM}31982, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);

  Test({LINENUM}31984, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}31985, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}31986, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}31987, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}31988, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}31989, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);

  Test({LINENUM}31991, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}31992, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}31993, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}31994, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}31995, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}31996, 'IsEigenpair(A, col(E, 6), Λ[6])', True);

  // -

  Test({LINENUM}32000, 'A ≔ ❨❨2, 0, 8, 3, i, 4, 5❩, ❨0, 6, 3, 7, 1, 2, 0❩, ❨8, 3, 8, 9, 3, i, 6❩, ❨3, 7, 9, 5, 2, 9, −i❩, ❨−i, 1, 3, 2, 7, 3, 1❩, ❨4, 2, −i, 9, 3, 5, i❩, ❨5, 0, 6, i, 1, −i, 2❩❩;', null);
  Test({LINENUM}32001, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32002, 'IsReal(Λ)', True);
  Test({LINENUM}32003, 'IsUnitary(E)', True);
  Test({LINENUM}32004, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-14); Test({LINENUM}32006, 'Λ', [TASC(26.784922520579256993), 10.967618684890724839, -9.3773999257987389970, 6.6504097990874679751, 4.7855475613601607466, -4.2277575354832616959, -0.58334110463560986115]);

  Test({LINENUM}32008, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}32009, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}32010, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}32011, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}32012, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}32013, 'IsEigenvector(A, col(E, 6))', True);
  Test({LINENUM}32014, 'IsEigenvector(A, col(E, 7))', True);

  Test({LINENUM}32016, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}32017, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}32018, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}32019, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}32020, 'SameValue(EigenvalueOf(A, col(E, 5)), Λ[5], 1E-14)', True);
  Test({LINENUM}32021, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);
  Test({LINENUM}32022, 'EigenvalueOf(A, col(E, 7)) ≈ Λ[7]', True);

  Test({LINENUM}32024, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}32025, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}32026, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}32027, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}32028, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}32029, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);
  Test({LINENUM}32030, 'EigenvectorOf(A, Λ[7]) ∥ col(E, 7)', True);

  Test({LINENUM}32032, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}32033, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}32034, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}32035, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}32036, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}32037, 'IsEigenpair(A, col(E, 6), Λ[6])', True);
  Test({LINENUM}32038, 'IsEigenpair(A, col(E, 7), Λ[7])', True);

  // -

  Test({LINENUM}32042, 'A ≔ ❨❨3, 2, 8, 0, i, 5, 7, 2❩, ❨2, 3, 9, 2, 7, 1, 2, 5❩, ❨8, 9, 9, 0, 3, 1, 5, 7❩, ❨0, 2, 0, 6, i, 3, 0, 8❩, ❨−i, 7, 3, −i, 7, 6, 1, −i❩, ❨5, 1, 1, 3, 6, 5, 2, 1❩, ❨7, 2, 5, 0, 1, 2, 3, 9❩, ❨2, 5, 7, 8, i, 1, 9, 6❩❩;', null);
  Test({LINENUM}32043, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32044, 'IsReal(Λ)', True);
  Test({LINENUM}32045, 'IsUnitary(E)', True);
  Test({LINENUM}32046, 'A ≈ E ⋅ diag(Λ) ⋅ E*', True);

  Eps(1E-13); Test({LINENUM}32048, 'Λ', [TASC(31.541450879650441), 12.451388642998566, 9.945326338353777, -9.132216213673990, 6.957054234677591, -5.929873813622360, -4.821944371529606, 0.988814303145571]);

  Test({LINENUM}32050, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}32051, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}32052, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}32053, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}32054, 'IsEigenvector(A, col(E, 5))', True);
  Test({LINENUM}32055, 'IsEigenvector(A, col(E, 6))', True);
  Test({LINENUM}32056, 'IsEigenvector(A, col(E, 7))', True);
  Test({LINENUM}32057, 'IsEigenvector(A, col(E, 8))', True);

  Test({LINENUM}32059, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}32060, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}32061, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}32062, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}32063, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);
  Test({LINENUM}32064, 'EigenvalueOf(A, col(E, 6)) ≈ Λ[6]', True);
  Test({LINENUM}32065, 'EigenvalueOf(A, col(E, 7)) ≈ Λ[7]', True);
  Test({LINENUM}32066, 'EigenvalueOf(A, col(E, 8)) ≈ Λ[8]', True);

  Test({LINENUM}32068, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}32069, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}32070, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}32071, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}32072, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);
  Test({LINENUM}32073, 'EigenvectorOf(A, Λ[6]) ∥ col(E, 6)', True);
  Test({LINENUM}32074, 'EigenvectorOf(A, Λ[7]) ∥ col(E, 7)', True);
  Test({LINENUM}32075, 'EigenvectorOf(A, Λ[8]) ∥ col(E, 8)', True);

  Test({LINENUM}32077, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}32078, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}32079, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}32080, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}32081, 'IsEigenpair(A, col(E, 5), Λ[5])', True);
  Test({LINENUM}32082, 'IsEigenpair(A, col(E, 6), Λ[6])', True);
  Test({LINENUM}32083, 'IsEigenpair(A, col(E, 7), Λ[7])', True);
  Test({LINENUM}32084, 'IsEigenpair(A, col(E, 8), Λ[8])', True);

  // - eigenvectors of non-real non-Hermitian matrices

  Test({LINENUM}32088, 'A ≔ ❨❨3, 5, i❩, ❨1, i, −2❩, ❨4, 0, 1❩❩;', null);
  Test({LINENUM}32089, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32090, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}32092, 'Λ', [3.796762780724884 + 2.608464621094820*ImaginaryUnit, 2.828938723402460 - 1.856597124782495*ImaginaryUnit, -2.625701504127345 + 0.248132503687670*ImaginaryUnit]);

  Test({LINENUM}32094, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}32095, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}32096, 'IsEigenvector(A, col(E, 3))', True);

  Test({LINENUM}32098, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}32099, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}32100, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);

  Test({LINENUM}32102, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}32103, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}32104, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);

  Test({LINENUM}32106, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}32107, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}32108, 'IsEigenpair(A, col(E, 3), Λ[3])', True);

  // -

//  Test({LINENUM}32112, 'A ≔ ❨❨2, 0, i❩, ❨1, 0, 0❩, ❨0, 0, i❩❩;', null);                        // TODO. Wishlist.
//  Test({LINENUM}32113, '(Λ, E) ≔ eigenvectors(A);', null);
//  Test({LINENUM}32114, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);
//
//  Eps(1E-14); Test({LINENUM}32116, 'Λ', [2, ImaginaryUnit, 0]);

  // -

  Test({LINENUM}32120, 'A ≔ ❨❨3, 5, i, 4❩, ❨0, 5, 3, 8❩, ❨i, 4, 2, 6❩, ❨1, 3, 2, i❩❩;', null);
  Test({LINENUM}32121, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32122, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}32124, 'Λ', [11.107149435941459 + 0.533069641032313*ImaginaryUnit, -3.378066601503166 + 0.872708325271380*ImaginaryUnit, 2.593743367634961 - 1.064199910826719*ImaginaryUnit, -0.322826202073264 + 0.658421944523025*ImaginaryUnit]);

  Test({LINENUM}32126, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}32127, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}32128, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}32129, 'IsEigenvector(A, col(E, 4))', True);

  Test({LINENUM}32131, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}32132, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}32133, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}32134, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);

  Test({LINENUM}32136, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}32137, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}32138, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}32139, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);

  Test({LINENUM}32141, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}32142, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}32143, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}32144, 'IsEigenpair(A, col(E, 4), Λ[4])', True);

  // -

  Test({LINENUM}32148, 'A ≔ ❨❨1.57519401408085795 + 0.432308033321589517⋅i, -0.315432944876384471 + 0.121542553437335565⋅i, -1.53883608840310379 + 0.248576747227350505⋅i, -0.632999052211440081 + 0.410919464237228956⋅i❩, '+'❨-0.315432944876384471 + 0.121542553437335565⋅i, 1.94355816819509714 + 0.0341714498862397758⋅i, 0.0315808797266594304 + 0.069886863658359134⋅i, -0.262122163108155187 + 0.115529199299754214⋅i❩, '+'❨-1.53883608840310379 + 0.248576747227350505⋅i, 0.0315808797266594304 + 0.069886863658359134⋅i, 4.18134443375707839 + 0.142931415794822536⋅i, -0.919820668174180992 + 0.23627833840531786⋅i❩, '+'❨-0.632999052211440081 + 0.410919464237228956⋅i, -0.262122163108155187 + 0.115529199299754214⋅i, -0.919820668174180992 + 0.23627833840531786⋅i, 1.29990338396696651 + 0.390589100997348171⋅i❩❩;', null);
  Test({LINENUM}32149, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32150, 'SameValue(A, E ⋅ diag(Λ) ⋅ inv(E), 1E-15)', True);

  Eps(1E-14); Test({LINENUM}32152, 'Λ', [5, 2, 2, ImaginaryUnit]);
                           {2}
  // -

  Test({LINENUM}32156, 'A ≔ ❨❨2, 4, i, 3, 6❩, ❨i, 2, 6, 3, 0❩, ❨9, 3, 0, 2, 5❩, ❨4, 2, 6, i, 4❩, ❨7, 3, 0, 6, 8❩❩;', null);
  Test({LINENUM}32157, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32158, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}32160, 'Λ', [17.606360994938018071 + 0.565120228698768441*ImaginaryUnit, -2.8607289727538659348 - 4.4336014674947297475*ImaginaryUnit, -1.9673163287759711292 + 4.6514948618516669997*ImaginaryUnit, -3.4143709271513932924 + 0.1742140430021373782*ImaginaryUnit, 2.6360552337432122859 + 0.0427723339421569283*ImaginaryUnit]);

  Test({LINENUM}32162, 'IsEigenvector(A, col(E, 1))', True);
  Test({LINENUM}32163, 'IsEigenvector(A, col(E, 2))', True);
  Test({LINENUM}32164, 'IsEigenvector(A, col(E, 3))', True);
  Test({LINENUM}32165, 'IsEigenvector(A, col(E, 4))', True);
  Test({LINENUM}32166, 'IsEigenvector(A, col(E, 5))', True);

  Test({LINENUM}32168, 'EigenvalueOf(A, col(E, 1)) ≈ Λ[1]', True);
  Test({LINENUM}32169, 'EigenvalueOf(A, col(E, 2)) ≈ Λ[2]', True);
  Test({LINENUM}32170, 'EigenvalueOf(A, col(E, 3)) ≈ Λ[3]', True);
  Test({LINENUM}32171, 'EigenvalueOf(A, col(E, 4)) ≈ Λ[4]', True);
  Test({LINENUM}32172, 'EigenvalueOf(A, col(E, 5)) ≈ Λ[5]', True);

  Test({LINENUM}32174, 'EigenvectorOf(A, Λ[1]) ∥ col(E, 1)', True);
  Test({LINENUM}32175, 'EigenvectorOf(A, Λ[2]) ∥ col(E, 2)', True);
  Test({LINENUM}32176, 'EigenvectorOf(A, Λ[3]) ∥ col(E, 3)', True);
  Test({LINENUM}32177, 'EigenvectorOf(A, Λ[4]) ∥ col(E, 4)', True);
  Test({LINENUM}32178, 'EigenvectorOf(A, Λ[5]) ∥ col(E, 5)', True);

  Test({LINENUM}32180, 'IsEigenpair(A, col(E, 1), Λ[1])', True);
  Test({LINENUM}32181, 'IsEigenpair(A, col(E, 2), Λ[2])', True);
  Test({LINENUM}32182, 'IsEigenpair(A, col(E, 3), Λ[3])', True);
  Test({LINENUM}32183, 'IsEigenpair(A, col(E, 4), Λ[4])', True);
  Test({LINENUM}32184, 'IsEigenpair(A, col(E, 5), Λ[5])', True);

  // -

  Test({LINENUM}32188, 'A ≔ ❨❨3, 6, 2, 0, 1, 4❩, ❨i, 5, 2, 6, i, 8❩, ❨4, 1, 5, 2, 0, i❩, ❨3, 6, 2, 5, 4, 7❩, ❨i, 5, 2, 3, 0, 9❩, ❨9, 5, 4, 2, i, 4❩❩;', null);
  Test({LINENUM}32189, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32190, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}32192, 'Λ', [20.338027259929576518 + 0.850874501029312238*ImaginaryUnit, -3.3305909558888180389 - 4.0193288703545500750*ImaginaryUnit, -1.7862303576469919606 + 3.6512377259081217118*ImaginaryUnit, 3.1004341929871214890 + 0.2640193696616336506*ImaginaryUnit, 1.5283992101013815889 - 2.6017126813340652695*ImaginaryUnit, 2.1499606505177304036 + 1.8549099550895477446*ImaginaryUnit]);

  // -

  Test({LINENUM}32196, 'A ≔ ❨❨2, 5, 1, i, 5, 3, 6❩, ❨4, 5, 2, 8, 5, 6, i❩, ❨i, i, 2, 4, 0, 1, 8❩, ❨5, 0, 4, 7, 8, 6, 5❩, ❨2, 5, i, 3, 6, 9, 4❩, ❨7, 4, 5, 2, 0, 3, 6❩, ❨i, 4, 7, 1, 2, 4, 5❩❩;', null);
  Test({LINENUM}32197, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32198, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  // -

  Test({LINENUM}32202, 'A ≔ ❨❨4, 2, 5, 3, 0, i, 4, 5❩, ❨5, 6, 3, 2, 1, 4, 5, 7❩, ❨5, 4, 3, 6, 2, 5, 7, 8❩, ❨5, 6, 3, 0, 2, 8, 5, 4❩, ❨7, i, 5, 6, 4, 1, 2, 2❩, ❨6, 9, 8, 7, i, 4, 5, 6❩, ❨4, 3, 0, 8, 5, 7, 9, i❩, ❨5, 6, 3, 6, 1, 7, 4, 5❩❩;', null);
  Test({LINENUM}32203, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32204, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  // -

  Test({LINENUM}32208, 'A ≔ ❨❨5, 4, 1, 2, 5, 3, 6, 9, 5❩, ❨4, 1, 7, i, 5, 6, 3, 2, 5❩, ❨8, 5, 2, 5, 3, 6, 2, 1, 0❩, ❨4, 5, 9, 6, 5, 8, 7, 4, 0❩, ❨6, 3, 5, 2, 6, 5, 8, 9, 4❩, ❨4, 5, 2, 3, 1, 7, 5, 6, 8❩, ❨5, 4, 2, 1, 3, 6, 5, 8, 9❩, '+'❨4, 1, 1, 5, 6, 8, 5, 9, 7❩, ❨5, i, 1, 2, 3, 6, 5, 7, 8❩❩;', null);
  Test({LINENUM}32209, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32210, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  // -

  Test({LINENUM}32214, 'A ≔ ❨❨−i, 1, i, 1, i, 1, i, 1, i, −1❩, ❨i, 2, −i, 2, i, 2, i, −2, i, 2❩, ❨i, 3, i, 3, −i, −3, i, 3, i, 3❩, ❨i, 4, i, −4, i, 4, −i, 4, i, 4❩, ❨i, −5, i, 5, i, 5, i, 5, −i, 5❩, ❨−i, 6, i, 6, i, 6, i, 6, i, −6❩, '+'❨i, 7, −i, 7, i, 7, i, −7, i, 7❩, ❨i, 8, i, 8, −i, −8, i, 8, i, 8❩, ❨i, 9, i, −9, i, 9, −i, 9, i, 9❩, ❨i, 0, i, 0, i, 0, i, 0, −i, 0❩❩;', null);
  Test({LINENUM}32215, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32216, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  // -

  Test({LINENUM}32220, 'A ≔ ❨❨1, 0, i❩, ❨1, 1, 1❩, ❨0, 0, i❩❩;', null);
  Test({LINENUM}32221, '(Λ, E) ≔ eigenvectors(A);', failure, 'Couldn''t compute eigenvectors.'); // eigenvalue 1: geometric multiplicity = 1 < 2 = algebraic multiplicity

  // - real matrices with non-real eigenvalues

  Test({LINENUM}32225, 'A ≔ ❨❨2, 3, 4❩, ❨4, 5, −7❩, ❨1, 2, −2❩❩;', null);
  Test({LINENUM}32226, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32227, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}32229, 'Λ', [6.475176326140790,  -0.737588163070393 + 1.734355939710355*ImaginaryUnit, -0.737588163070393 - 1.734355939710355*ImaginaryUnit]);

  Test({LINENUM}32231, 'A ≔ ComplexMatrix(❨❨2, 3, 4❩, ❨4, 5, −7❩, ❨1, 2, −2❩❩);', null);
  Test({LINENUM}32232, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32233, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}32235, 'Λ', [6.475176326140790,  -0.737588163070393 + 1.734355939710355*ImaginaryUnit, -0.737588163070393 - 1.734355939710355*ImaginaryUnit]);

  // -

  Test({LINENUM}32239, 'A ≔ ❨❨5, 2, 0, 1❩, ❨3, 0, 5, 8❩, ❨4, 3, 1, 9❩, ❨3, 6, 0, 7❩❩;', null);
  Test({LINENUM}32240, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32241, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}32243, 'Λ', [14.036206157473359, 4, -2.518103078736678 + 1.829859219363527*ImaginaryUnit, -2.518103078736678 - 1.829859219363527*ImaginaryUnit]);

  Test({LINENUM}32245, 'A ≔ ComplexMatrix(❨❨5, 2, 0, 1❩, ❨3, 0, 5, 8❩, ❨4, 3, 1, 9❩, ❨3, 6, 0, 7❩❩);', null);
  Test({LINENUM}32246, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32247, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}32249, 'Λ', [14.036206157473359, 4, -2.518103078736678 + 1.829859219363527*ImaginaryUnit, -2.518103078736678 - 1.829859219363527*ImaginaryUnit]);

  // -

  Test({LINENUM}32253, 'A ≔ ❨❨−6, 2, 3, 5, −8❩, ❨4, 0, 2, 6, 5❩, ❨0, 0, 1, 6, 7❩, ❨5, 4, 8, 0, 2❩, ❨4, 3, 6, 6, 2❩❩;', null);
  Test({LINENUM}32254, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32255, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}32257, 'Λ', [14.738054917903042, -9.047156047492546, -3.898428540473577 + 1.621125566153341*ImaginaryUnit, -3.898428540473577 - 1.621125566153341*ImaginaryUnit, -0.894041789463348]);

  Test({LINENUM}32259, 'A ≔ ComplexMatrix(❨❨−6, 2, 3, 5, −8❩, ❨4, 0, 2, 6, 5❩, ❨0, 0, 1, 6, 7❩, ❨5, 4, 8, 0, 2❩, ❨4, 3, 6, 6, 2❩❩);', null);
  Test({LINENUM}32260, '(Λ, E) ≔ eigenvectors(A);', null);
  Test({LINENUM}32261, 'A ≈ E ⋅ diag(Λ) ⋅ inv(E)', True);

  Eps(1E-14); Test({LINENUM}32263, 'Λ', [14.738054917903042, -9.047156047492546, -3.898428540473577 + 1.621125566153341*ImaginaryUnit, -3.898428540473577 - 1.621125566153341*ImaginaryUnit, -0.894041789463348]);

  // - epsilons

  Test({LINENUM}32267, 'A ≔ ❨❨5, 1, 7❩, ❨1, 2, 4❩, ❨7, 4, 3❩❩;', null);

  Test({LINENUM}32269, 'IsEigenvector(A, ❨0.681034009183674, 0.323520554185660, 0.656907245624993❩)', True);

  Test({LINENUM}32271, 'IsEigenvector(A, ❨0.681, 0.323, 0.656❩)', False);

  Test({LINENUM}32273, 'IsEigenvector(A, ❨0.681, 0.323, 0.656❩, 1E-6)', False);
  Test({LINENUM}32274, 'IsEigenvector(A, ❨0.681, 0.323, 0.656❩, 1E-5)', False);
  Test({LINENUM}32275, 'IsEigenvector(A, ❨0.681, 0.323, 0.656❩, 1E-4)', False);

  Test({LINENUM}32277, 'IsEigenvector(A, ❨0.681, 0.323, 0.656❩, 1E-2)', True);
  Test({LINENUM}32278, 'IsEigenvector(A, ❨0.681, 0.323, 0.656❩, 1E-1)', True);

  Test({LINENUM}32280, 'IsEigenpair(A, ❨0.681034009183674, 0.323520554185660, 0.656907245624993❩, 12.227056515812240)', True);

  Test({LINENUM}32282, 'IsEigenpair(A, ❨0.68103, 0.32352, 0.65690❩, 12.22705)', False);

  Test({LINENUM}32284, 'IsEigenpair(A, ❨0.68103, 0.32352, 0.65690❩, 12.22705, 1E-8)', False);
  Test({LINENUM}32285, 'IsEigenpair(A, ❨0.68103, 0.32352, 0.65690❩, 12.22705, 1E-7)', False);
  Test({LINENUM}32286, 'IsEigenpair(A, ❨0.68103, 0.32352, 0.65690❩, 12.22705, 1E-6)', False);

  Test({LINENUM}32288, 'IsEigenpair(A, ❨0.68103, 0.32352, 0.65690❩, 12.22705, 1E-4)', True);
  Test({LINENUM}32289, 'IsEigenpair(A, ❨0.68103, 0.32352, 0.65690❩, 12.22705, 1E-3)', True);
  Test({LINENUM}32290, 'IsEigenpair(A, ❨0.68103, 0.32352, 0.65690❩, 12.22705, 1E-2)', True);
  Test({LINENUM}32291, 'IsEigenpair(A, ❨0.68103, 0.32352, 0.65690❩, 12.22705, 1E-1)', True);

  // - spectral radius

  Eps(1E-13); Test({LINENUM}32295, 'A ≔ ❨❨21❩❩; SpectralRadius(A)', 21.0);
  Eps(1E-13); Test({LINENUM}32296, 'A ≔ ❨❨3, 5❩, ❨5, 2❩❩; SpectralRadius(A)', 7.524937810560445);
  Eps(1E-13); Test({LINENUM}32297, 'A ≔ ❨❨4, 1, 8❩, ❨1, 2, 5❩, ❨8, 5, 3❩❩; SpectralRadius(A)', 13.136085649145485);
  Eps(1E-13); Test({LINENUM}32298, 'A ≔ ❨❨2, 0, 1❩, ❨0, 2, 0❩, ❨1, 0, 2❩❩; SpectralRadius(A)', 3.0);
  Eps(1E-13); Test({LINENUM}32299, 'A ≔ ❨❨0, 0, 2❩, ❨0, 2, 0❩, ❨2, 0, 0❩❩; SpectralRadius(A)', 2.0);
  Eps(1E-13); Test({LINENUM}32300, 'A ≔ ❨❨6, 1, 3, 2❩, ❨1, 8, 5, 1❩, ❨3, 5, 2, 0❩, ❨2, 1, 0, 7❩❩; SpectralRadius(A)', 12.317576522344481);
  Eps(1E-13); Test({LINENUM}32301, 'A ≔ ❨❨0, 1, 0, 2❩, ❨1, -2, 2, 0❩, ❨0, 2, 0, -1❩, ❨2, 0, -1, 2❩❩; SpectralRadius(A)', 3.449489742783178);
  Eps(1E-13); Test({LINENUM}32302, 'A ≔ ❨❨0, 1, 0, 2❩, ❨1, -2, 2, 0❩, ❨0, 2, 0, -1❩, ❨2, 0, -1, -2❩❩; SpectralRadius(A)', 3.449489742783178);
  Eps(1E-13); Test({LINENUM}32303, 'A ≔ ❨❨0, 0, 1, 2❩, ❨0, -2, 0, 0❩, ❨1, 0, 0, 1❩, ❨2, 0, 1, 0❩❩; SpectralRadius(A)', 2.732050807568878);
  Eps(1E-13); Test({LINENUM}32304, 'A ≔ ❨❨3.09090210854135331, -0.0989480787770248203, 0.206696174292443883, -0.173565216686099517❩, '+'❨-0.0989480787770248203, 3.10770621771892455, -0.224991363401589891, 0.188927902874714558❩, ❨0.206696174292443883, -0.224991363401589891, 3.4699924914029535, -0.394658241210492851❩, '+'❨-0.173565216686099517, 0.188927902874714558, -0.394658241210492851, 3.33139918233676864❩❩; SpectralRadius(A)', 4.0);
  Eps(1E-13); Test({LINENUM}32305, 'A ≔ ❨❨3, 2, 1, 0, 1❩, ❨2, 5, 7, 3, 8❩, ❨1, 7, 6, 0, 2❩, ❨0, 3, 0, 5, 3❩, ❨1, 8, 2, 3, 9❩❩; SpectralRadius(A)', 19.613776982166058);
  Eps(1E-13); Test({LINENUM}32306, 'A ≔ ❨❨2, 0, 1, 0, 0❩, ❨0, 0, 0, 2, 0❩, ❨1, 0, 0, 1, 1❩, ❨0, 2, 1, 0, 0❩, ❨0, 0, 1, 0, 2❩❩; SpectralRadius(A)', 2.895106515927531);
  Eps(1E-13); Test({LINENUM}32307, 'A ≔ ❨❨0, 1, 1, 0, 0❩, ❨1, 0, 0, 0, 1❩, ❨1, 0, 0, 1, 0❩, ❨0, 0, 1, 0, 1❩, ❨0, 1, 0, 1, 0❩❩; SpectralRadius(A)', 2.0);
  Eps(1E-13); Test({LINENUM}32308, 'A ≔ ❨❨4.88518185435250995, -0.0503410125523369264, 2.41500433970266516, -0.3526553784998275, 0.377477078463321959❩, '+'❨-0.0503410125523369266, 6.99880168536003428, 0.0574866278829369505, -0.00839458885495496514, 0.00898544320902995499❩, ❨2.41500433970266516, 0.0574866278829369505, 4.24219977363724693, 0.402712768116436254, -0.431057764708227601❩, '+'❨-0.3526553784998275, -0.00839458885495496536, 0.402712768116436254, 6.94119313935299163, 0.0629459900627696699❩, ❨0.377477078463321959, 0.00898544320902995499, -0.431057764708227601, 0.0629459900627696697, 6.93262354729721721❩❩; SpectralRadius(A)', 7.0);
  Eps(1E-13); Test({LINENUM}32309, 'A ≔ ❨❨2, −1, 0, 3, 8, 2❩, ❨−1, 7, 5, 4, 8, 1❩, ❨0, 5, 2, 9, 3, 0❩, ❨3, 4, 9, −7, 2, 5❩, ❨8, 8, 3, 2, 1, 3❩, ❨2, 1, 0, 5, 3, 8❩❩; SpectralRadius(A)', 20.369654342915162);
  Eps(1E-13); Test({LINENUM}32310, 'A ≔ ❨❨10, 16, 9, 8, 0, 7, 8❩, ❨16, 12, 5, 10, 4, 11, 14❩, ❨9, 5, 2, 12, 12, 5, 14❩, ❨8, 10, 12, 16, 12, 9, 3❩, ❨0, 4, 12, 12, 16, 17, 7❩, ❨7, 11, 5, 9, 17, 18, 7❩, ❨8, 14, 14, 3, 7, 7, 14❩❩; SpectralRadius(A)', 67.387186371351689);
  Eps(1E-13); Test({LINENUM}32311, 'A ≔ ❨❨10, 5, 14, 10, 9, 13, 9, 15❩, ❨5, 4, 8, 7, 7, 4, 9, 13❩, ❨14, 8, 4, 6, 7, 5, 1, 14❩, ❨10, 7, 6, 18, 13, 12, 5, 11❩, ❨9, 7, 7, 13, 14, 12, 3, 14❩, ❨13, 4, 5, 12, 12, 18, 10, 15❩, ❨9, 9, 1, 5, 3, 10, 14, 14❩, '+'❨15, 13, 14, 11, 14, 15, 14, 6❩❩; SpectralRadius(A)', 79.906455303672033);
  Eps(1E-13); Test({LINENUM}32312, 'A ≔ ❨❨10, 7, 11, 13, 15, 11, 9, 17, 7❩, ❨7, 8, 12, 3, 6, 10, 14, 7, 8❩, ❨11, 12, 18, 4, 11, 7, 9, 11, 2❩, ❨13, 3, 4, 0, 4, 9, 16, 11, 13❩, ❨15, 6, 11, 4, 4, 6, 11, 4, 11❩, ❨11, 10, 7, 9, 6, 8, 8, 10, 14❩, ❨9, 14, 9, 16, 11, 8, 10, 11, 13❩, '+'❨17, 7, 11, 11, 4, 10, 11, 14, 9❩, ❨7, 8, 2, 13, 11, 14, 13, 9, 6❩❩; SpectralRadius(A)', 86.264296094535837);
  Eps(1E-13); Test({LINENUM}32313, 'A ≔ ❨❨6, 6, 8, 14, 12, 14, 5, 9, 12, 10❩, ❨6, 0, 4, 4, 10, 8, 15, 14, 13, 11❩, ❨8, 4, 10, 6, 3, 11, 11, 9, 9, 13❩, ❨14, 4, 6, 10, 9, 17, 16, 9, 11, 8❩, ❨12, 10, 3, 9, 10, 8, 12, 10, 9, 8❩, ❨14, 8, 11, 17, 8, 2, 4, 12, 12, 14❩, '+'❨5, 15, 11, 16, 12, 4, 0, 9, 14, 11❩, ❨9, 14, 9, 9, 10, 12, 9, 18, 9, 8❩, ❨12, 13, 9, 11, 9, 12, 14, 9, 2, 7❩, ❨10, 11, 13, 8, 8, 14, 11, 8, 7, 6❩❩; SpectralRadius(A)', 96.530449307303996);
  Eps(1E-13); Test({LINENUM}32314, 'A ≔ ❨❨4.45528983757093495, -0.0878217640871465801, 0.587220808461187196, 0.381484594913282418, 0.806374962066634831, 0.415539821124804545, -1.07626065503415, -0.174476853005194865, 0.6117764065082528, 0.479713560928682166❩, '+'❨-0.0878217640871465801, 4.39333906061644079, -1.16146861964970503, 0.189604671732296926, 0.549866251807311702, 0.959584846946758171, -0.559867163033034075, 0.601342029002866998, 0.908395415505047237, -0.0481674127191538071❩, '+
    '❨0.587220808461187195, -1.16146861964970503, 4.731699905531466, -0.297368715494811859, 0.174137444046764151, 0.158862374235097095, 0.0708587702680495379, 0.527044617773810588, 0.717806236876411773, 0.100941787359586736❩, '+'❨0.381484594913282417, 0.189604671732296926, -0.297368715494811859, 5.20093245260149577, -0.422111106264731792, -0.609505049911372394, 0.430772405093700426, -0.075450459824149398, -0.0231177557010034982, 1.02271233462064678❩, '+
    '❨0.806374962066634831, 0.549866251807311702, 0.174137444046764151, -0.422111106264731792, 4.65483119820909985, 0.289795090828546352, 0.795841033040542465, -0.226199611183290607, -1.41597888676298831, 0.547038811317080901❩, '+'❨0.415539821124804545, 0.959584846946758171, 0.158862374235097095, -0.609505049911372394, 0.289795090828546352, 3.97252873681661176, 0.586614812369869111, -0.203645718668121608, 0.548222506108191402, -0.0260783651922211985❩, '+
    '❨-1.07626065503415, -0.559867163033034075, 0.0708587702680495379, 0.430772405093700426, 0.795841033040542465, 0.586614812369869111, 5.07303988296985066, 0.0852567827171805209, 0.721798919103536904, 0.0913845737686953809❩, '+'❨-0.174476853005194865, 0.601342029002866998, 0.527044617773810588, -0.0754504598241493979, -0.226199611183290607, -0.203645718668121608, 0.0852567827171805208, 5.72552879232507247, -0.381852810701084683, 0.248741195041378638❩, '+'❨0.6117764065082528, 0.908395415505047237, 0.717806236876411773, -0.0231177557010034982, -1.41597888676298831, 0.548222506108191402, 0.721798919103536904, -0.381852810701084683, 4.15028770968589867, 0.0862862168111860338❩, '+'❨0.479713560928682166, -0.0481674127191538071, 0.100941787359586736, 1.02271233462064678, 0.547038811317080901, -0.0260783651922211984, 0.0913845737686953809, 0.248741195041378638, 0.0862862168111860338, 3.64252242367312907❩❩; SpectralRadius(A)',
    6.0);
  Eps(1E-13); Test({LINENUM}32319, 'A ≔ ReversalMatrix(10); SpectralRadius(A)', 1.0);
  Eps(1E-13); Test({LINENUM}32320, 'A ≔ ❨❨0.947217218464429805, -0.0797032009555874838, 0.455681246175844459, -0.890506530889571131, 0.0810219664601976321, -0.4241414032969027, -0.325611817072624359, 0.442131323976784809, 0.696001040652687542, -0.363371579820000821❩, '+'❨-0.0797032009555874838, 0.664262086761071853, 0.151183874385912782, 0.366175763890158299, -0.362499363441370523, 0.345609605325798349, -0.36153060182114391, -0.370383371480650959, -0.351151983839811129, -0.192995673028588803❩, '+
    '❨0.455681246175844459, 0.151183874385912782, 0.965112845520727124, -0.379442604818156945, -0.0868548299522641688, -0.703208127497219295, -0.29273075622571167, 0.392533036681992209, 0.433785161673175889, -0.0198556703071645884❩, '+'❨-0.890506530889571131, 0.366175763890158299, -0.379442604818156945, 1.60196556896465841, 0.0343051071296422081, 0.587093406299823787, -0.485735414772669726, -0.766652742695679709, -0.63672778172637717, -0.0824745994586258031❩, '+
    '❨0.0810219664601976321, -0.362499363441370523, -0.0868548299522641688, 0.0343051071296422081, 0.327534361557092576, -0.222948382709437083, -0.0500390113869091228, 0.161756725513035523, 0.21826384416565025, -0.135644537928391234❩, '+'❨-0.4241414032969027, 0.345609605325798349, -0.703208127497219295, 0.587093406299823787, -0.222948382709437083, 0.989037781112786131, -0.126211410841058615, -0.699854415829559306, -0.413031006405435901, 0.131956448780506888❩, '+
    '❨-0.325611817072624359, -0.36153060182114391, -0.29273075622571167, -0.485735414772669726, -0.0500390113869091228, -0.126211410841058615, 1.00217393220066957, 0.281471732316985816, -0.335032854995363073, 0.398331000774434439❩, '+'❨0.442131323976784809, -0.370383371480650959, 0.392533036681992209, -0.766652742695679709, 0.161756725513035523, -0.699854415829559306, 0.281471732316985816, 0.61286300125401041, 0.371247429623465179, -0.0611706531297214894❩, '+
    '❨0.696001040652687542, -0.351151983839811129, 0.433785161673175889, -0.63672778172637717, 0.21826384416565025, -0.413031006405435901, -0.335032854995363073, 0.371247429623465179, 0.960656361843560564, 0.149752326353616183❩, '+'❨-0.363371579820000821, -0.192995673028588803, -0.0198556703071645884, -0.0824745994586258031, -0.135644537928391234, 0.131956448780506888, 0.398331000774434439, -0.0611706531297214894, 0.149752326353616183, 0.929176842320993553❩❩; SpectralRadius(A)',
    4.0);
  Eps(1E-13); Test({LINENUM}32326, 'A ≔ ❨❨1, 2❩, ❨3, 4❩❩; SpectralRadius(A)', 5.372281323269014);
  Eps(1E-13); Test({LINENUM}32327, 'A ≔ ❨❨5, 7, 4❩, ❨0, 2, 6❩, ❨1, 5, 3❩❩; SpectralRadius(A)', 9.334366656868244);
  Eps(1E-13); Test({LINENUM}32328, 'A ≔ ❨❨1, 0, 2❩, ❨1, 0, -1❩, ❨1, 1, 2❩❩; SpectralRadius(A)', 3.0);
  Eps(1E-13); Test({LINENUM}32329, 'A ≔ ❨❨1, 1, 0❩, ❨1, 0, -1❩, ❨1, 2, 1❩❩; SpectralRadius(A)', Sqrt(2));
  Eps(1E-13); Test({LINENUM}32330, 'A ≔ ❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 0, 1❩❩; SpectralRadius(A)', 1.0);
  Eps(1E-13); Test({LINENUM}32331, 'A ≔ ❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 0, 2❩❩; SpectralRadius(A)', 2.0);
  Eps(1E-13); Test({LINENUM}32332, 'A ≔ ❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 1, 2❩❩; SpectralRadius(A)', 1.0);
  Eps(1E-13); Test({LINENUM}32333, 'A ≔ ❨❨5, 4, 7, 2❩, ❨6, 3, 5, 7❩, ❨0, 5, 7, 8❩, ❨3, 4, 1, 9❩❩; SpectralRadius(A)', 18.722583143817452);
  Eps(1E-13); Test({LINENUM}32334, 'A ≔ ❨❨0, 0, 1, 0❩, ❨0, 0, 0, 0❩, ❨1, 0, 0, 0❩, ❨0, 0, 0, 2❩❩; SpectralRadius(A)', 2.0);
  Eps(1E-13); Test({LINENUM}32335, 'A ≔ ❨❨5, 8, 4, 0, 2❩, ❨6, 3, 0, 4, 8❩, ❨6, 5, 4, 9, 2❩, ❨5, 6, 3, 8, 7❩, ❨1, 0, 2, 9, 7❩❩; SpectralRadius(A)', 22.814428493209221);
  Eps(1E-13); Test({LINENUM}32336, 'A ≔ ❨❨5, 4, 7, 0, 2, 5❩, ❨6, 5, 8, 9, 5, 1❩, ❨0, 5, 8, 2, 3, 6❩, ❨4, 5, 8, 4, 6, 2❩, ❨7, 5, 9, 6, 1, 0❩, ❨5, 4, 7, 5, 2, 6❩❩; SpectralRadius(A)', 27.475808456817589);
  Eps(1E-13); Test({LINENUM}32337, 'A ≔ ❨❨4, 2, 5, 8, 9, 6, 3❩, ❨5, 8, 4, 5, 8, 6, 3❩, ❨0, 5, 4, 7, 8, 9, 6❩, ❨4, 1, 2, 5, 0, 8, 6❩, ❨6, 6, 5, 0, 7, 4, 8❩, ❨4, 7, 5, 1, 9, 8, 6❩, ❨5, 3, 6, 8, 4, 1, 2❩❩; SpectralRadius(A)', 35.314786301350608);
  Eps(1E-13); Test({LINENUM}32338, 'A ≔ ❨❨5, 8, 6, 5, 4, 7, 1, 2❩, ❨6, 3, 2, 5, 6, 9, 8, 5❩, ❨4, 5, 6, 9, 2, 0, 4, 7❩, ❨3, 6, 0, 8, 2, 4, 5, 9❩, ❨6, 3, 5, 4, 7, 8, 5, 2❩, ❨5, 3, 2, 1, 9, 8, 5, 6❩, ❨5, 4, 6, 8, 2, 1, 0, 7❩, ❨6, 3, 9, 5, 8, 3, 4, 7❩❩; SpectralRadius(A)', 39.293880621805755);
  Eps(1E-13); Test({LINENUM}32339, 'A ≔ ❨❨5, 7, 6, 9, 5, 6, 3, 2, 5❩, ❨5, 4, 0, 2, 5, 8, 9, 6, 5❩, ❨7, 4, 5, 2, 1, 5, 6, 9, 8❩, ❨3, 6, 5, 4, 7, 8, 5, 2, 0❩, ❨2, 0, 8, 4, 6, 0, 8, 7, 3❩, ❨0, 1, 6, 8, 5, 3, 7, 9, 4❩, ❨5, 6, 3, 8, 7, 4, 1, 0, 5❩, '+'❨6, 5, 3, 8, 9, 4, 5, 2, 1❩, ❨4, 6, 3, 5, 5, 8, 9, 3, 2❩❩; SpectralRadius(A)', 42.560831728333504);
  Eps(1E-13); Test({LINENUM}32340, 'A ≔ ❨❨5, 4, 1, 5, 2, 9, 8, 3, 0, 5❩, ❨5, 6, 3, 2, 0, 8, 5, 6, 9, 7❩, ❨4, 5, 6, 8, 2, 3, 6, 5, 7, 0❩, ❨4, 5, 9, 6, 3, 6, 5, 6, 8, 9❩, ❨4, 5, 5, 2, 6, 8, 7, 9, 2, 5❩, ❨5, 6, 3, 2, 0, 5, 4, 7, 8, 5❩, ❨4, 5, 4, 5, 6, 0, 2, 3, 7, 9❩, '+'❨5, 6, 3, 2, 5, 4, 7, 8, 4, 1❩, ❨5, 6, 3, 2, 0, 4, 5, 1, 2, 7❩, ❨6, 5, 6, 4, 1, 2, 7, 8, 4, 0❩❩; SpectralRadius(A)', 45.848201925978358);

  Eps(1E-13); Test({LINENUM}32342, 'A ≔ ❨❨21❩❩; SpectralRadius(ComplexMatrix(A))', 21.0);
  Eps(1E-13); Test({LINENUM}32343, 'A ≔ ❨❨3, 5❩, ❨5, 2❩❩; SpectralRadius(ComplexMatrix(A))', 7.524937810560445);
  Eps(1E-13); Test({LINENUM}32344, 'A ≔ ❨❨4, 1, 8❩, ❨1, 2, 5❩, ❨8, 5, 3❩❩; SpectralRadius(ComplexMatrix(A))', 13.136085649145485);
  Eps(1E-13); Test({LINENUM}32345, 'A ≔ ❨❨2, 0, 1❩, ❨0, 2, 0❩, ❨1, 0, 2❩❩; SpectralRadius(ComplexMatrix(A))', 3.0);
  Eps(1E-13); Test({LINENUM}32346, 'A ≔ ❨❨0, 0, 2❩, ❨0, 2, 0❩, ❨2, 0, 0❩❩; SpectralRadius(ComplexMatrix(A))', 2.0);
  Eps(1E-13); Test({LINENUM}32347, 'A ≔ ❨❨6, 1, 3, 2❩, ❨1, 8, 5, 1❩, ❨3, 5, 2, 0❩, ❨2, 1, 0, 7❩❩; SpectralRadius(ComplexMatrix(A))', 12.317576522344481);
  Eps(1E-13); Test({LINENUM}32348, 'A ≔ ❨❨0, 1, 0, 2❩, ❨1, -2, 2, 0❩, ❨0, 2, 0, -1❩, ❨2, 0, -1, 2❩❩; SpectralRadius(ComplexMatrix(A))', 3.449489742783178);
  Eps(1E-13); Test({LINENUM}32349, 'A ≔ ❨❨0, 1, 0, 2❩, ❨1, -2, 2, 0❩, ❨0, 2, 0, -1❩, ❨2, 0, -1, -2❩❩; SpectralRadius(ComplexMatrix(A))', 3.449489742783178);
  Eps(1E-13); Test({LINENUM}32350, 'A ≔ ❨❨0, 0, 1, 2❩, ❨0, -2, 0, 0❩, ❨1, 0, 0, 1❩, ❨2, 0, 1, 0❩❩; SpectralRadius(ComplexMatrix(A))', 2.732050807568878);
  Eps(1E-13); Test({LINENUM}32351, 'A ≔ ❨❨3.09090210854135331, -0.0989480787770248203, 0.206696174292443883, -0.173565216686099517❩, '+'❨-0.0989480787770248203, 3.10770621771892455, -0.224991363401589891, 0.188927902874714558❩, ❨0.206696174292443883, -0.224991363401589891, 3.4699924914029535, -0.394658241210492851❩, '+'❨-0.173565216686099517, 0.188927902874714558, -0.394658241210492851, 3.33139918233676864❩❩; SpectralRadius(ComplexMatrix(A))', 4.0);
  Eps(1E-13); Test({LINENUM}32352, 'A ≔ ❨❨3, 2, 1, 0, 1❩, ❨2, 5, 7, 3, 8❩, ❨1, 7, 6, 0, 2❩, ❨0, 3, 0, 5, 3❩, ❨1, 8, 2, 3, 9❩❩; SpectralRadius(ComplexMatrix(A))', 19.613776982166058);
  Eps(1E-13); Test({LINENUM}32353, 'A ≔ ❨❨2, 0, 1, 0, 0❩, ❨0, 0, 0, 2, 0❩, ❨1, 0, 0, 1, 1❩, ❨0, 2, 1, 0, 0❩, ❨0, 0, 1, 0, 2❩❩; SpectralRadius(ComplexMatrix(A))', 2.895106515927531);
  Eps(1E-13); Test({LINENUM}32354, 'A ≔ ❨❨0, 1, 1, 0, 0❩, ❨1, 0, 0, 0, 1❩, ❨1, 0, 0, 1, 0❩, ❨0, 0, 1, 0, 1❩, ❨0, 1, 0, 1, 0❩❩; SpectralRadius(ComplexMatrix(A))', 2.0);
  Eps(1E-13); Test({LINENUM}32355, 'A ≔ ❨❨4.88518185435250995, -0.0503410125523369264, 2.41500433970266516, -0.3526553784998275, 0.377477078463321959❩, '+'❨-0.0503410125523369266, 6.99880168536003428, 0.0574866278829369505, -0.00839458885495496514, 0.00898544320902995499❩, '+'❨2.41500433970266516, 0.0574866278829369505, 4.24219977363724693, 0.402712768116436254, -0.431057764708227601❩, '+'❨-0.3526553784998275, -0.00839458885495496536, 0.402712768116436254, 6.94119313935299163, 0.0629459900627696699❩, '+'❨0.377477078463321959, 0.00898544320902995499, -0.431057764708227601, 0.0629459900627696697, 6.93262354729721721❩❩; SpectralRadius(ComplexMatrix(A))', 7.0);
  Eps(1E-13); Test({LINENUM}32356, 'A ≔ ❨❨2, −1, 0, 3, 8, 2❩, ❨−1, 7, 5, 4, 8, 1❩, ❨0, 5, 2, 9, 3, 0❩, ❨3, 4, 9, −7, 2, 5❩, ❨8, 8, 3, 2, 1, 3❩, ❨2, 1, 0, 5, 3, 8❩❩; SpectralRadius(ComplexMatrix(A))', 20.369654342915162);
  Eps(1E-13); Test({LINENUM}32357, 'A ≔ ❨❨10, 16, 9, 8, 0, 7, 8❩, ❨16, 12, 5, 10, 4, 11, 14❩, ❨9, 5, 2, 12, 12, 5, 14❩, ❨8, 10, 12, 16, 12, 9, 3❩, ❨0, 4, 12, 12, 16, 17, 7❩, ❨7, 11, 5, 9, 17, 18, 7❩, ❨8, 14, 14, 3, 7, 7, 14❩❩; SpectralRadius(ComplexMatrix(A))', 67.387186371351689);
  Eps(1E-13); Test({LINENUM}32358, 'A ≔ ❨❨10, 5, 14, 10, 9, 13, 9, 15❩, ❨5, 4, 8, 7, 7, 4, 9, 13❩, ❨14, 8, 4, 6, 7, 5, 1, 14❩, ❨10, 7, 6, 18, 13, 12, 5, 11❩, ❨9, 7, 7, 13, 14, 12, 3, 14❩, ❨13, 4, 5, 12, 12, 18, 10, 15❩, ❨9, 9, 1, 5, 3, 10, 14, 14❩, '+'❨15, 13, 14, 11, 14, 15, 14, 6❩❩; SpectralRadius(ComplexMatrix(A))', 79.906455303672033);
  Eps(1E-13); Test({LINENUM}32359, 'A ≔ ❨❨10, 7, 11, 13, 15, 11, 9, 17, 7❩, ❨7, 8, 12, 3, 6, 10, 14, 7, 8❩, ❨11, 12, 18, 4, 11, 7, 9, 11, 2❩, ❨13, 3, 4, 0, 4, 9, 16, 11, 13❩, ❨15, 6, 11, 4, 4, 6, 11, 4, 11❩, ❨11, 10, 7, 9, 6, 8, 8, 10, 14❩, ❨9, 14, 9, 16, 11, 8, 10, 11, 13❩, '+'❨17, 7, 11, 11, 4, 10, 11, 14, 9❩, ❨7, 8, 2, 13, 11, 14, 13, 9, 6❩❩; SpectralRadius(ComplexMatrix(A))', 86.264296094535837);
  Eps(1E-13); Test({LINENUM}32360, 'A ≔ ❨❨6, 6, 8, 14, 12, 14, 5, 9, 12, 10❩, ❨6, 0, 4, 4, 10, 8, 15, 14, 13, 11❩, ❨8, 4, 10, 6, 3, 11, 11, 9, 9, 13❩, ❨14, 4, 6, 10, 9, 17, 16, 9, 11, 8❩, ❨12, 10, 3, 9, 10, 8, 12, 10, 9, 8❩, ❨14, 8, 11, 17, 8, 2, 4, 12, 12, 14❩, '+'❨5, 15, 11, 16, 12, 4, 0, 9, 14, 11❩, ❨9, 14, 9, 9, 10, 12, 9, 18, 9, 8❩, ❨12, 13, 9, 11, 9, 12, 14, 9, 2, 7❩, ❨10, 11, 13, 8, 8, 14, 11, 8, 7, 6❩❩; SpectralRadius(ComplexMatrix(A))', 96.530449307303996);
  Eps(1E-13); Test({LINENUM}32361, 'A ≔ ❨❨4.45528983757093495, -0.0878217640871465801, 0.587220808461187196, 0.381484594913282418, 0.806374962066634831, 0.415539821124804545, -1.07626065503415, -0.174476853005194865, 0.6117764065082528, 0.479713560928682166❩, '+'❨-0.0878217640871465801, 4.39333906061644079, -1.16146861964970503, 0.189604671732296926, 0.549866251807311702, 0.959584846946758171, -0.559867163033034075, 0.601342029002866998, 0.908395415505047237, -0.0481674127191538071❩, '+
    '❨0.587220808461187195, -1.16146861964970503, 4.731699905531466, -0.297368715494811859, 0.174137444046764151, 0.158862374235097095, 0.0708587702680495379, 0.527044617773810588, 0.717806236876411773, 0.100941787359586736❩, '+'❨0.381484594913282417, 0.189604671732296926, -0.297368715494811859, 5.20093245260149577, -0.422111106264731792, -0.609505049911372394, 0.430772405093700426, -0.075450459824149398, -0.0231177557010034982, 1.02271233462064678❩, '+
    '❨0.806374962066634831, 0.549866251807311702, 0.174137444046764151, -0.422111106264731792, 4.65483119820909985, 0.289795090828546352, 0.795841033040542465, -0.226199611183290607, -1.41597888676298831, 0.547038811317080901❩, '+'❨0.415539821124804545, 0.959584846946758171, 0.158862374235097095, -0.609505049911372394, 0.289795090828546352, 3.97252873681661176, 0.586614812369869111, -0.203645718668121608, 0.548222506108191402, -0.0260783651922211985❩, '+
    '❨-1.07626065503415, -0.559867163033034075, 0.0708587702680495379, 0.430772405093700426, 0.795841033040542465, 0.586614812369869111, 5.07303988296985066, 0.0852567827171805209, 0.721798919103536904, 0.0913845737686953809❩, '+'❨-0.174476853005194865, 0.601342029002866998, 0.527044617773810588, -0.0754504598241493979, -0.226199611183290607, -0.203645718668121608, 0.0852567827171805208, 5.72552879232507247, -0.381852810701084683, 0.248741195041378638❩, '+'❨0.6117764065082528, 0.908395415505047237, 0.717806236876411773, -0.0231177557010034982, -1.41597888676298831, 0.548222506108191402, 0.721798919103536904, -0.381852810701084683, 4.15028770968589867, 0.0862862168111860338❩, '+'❨0.479713560928682166, -0.0481674127191538071, 0.100941787359586736, 1.02271233462064678, 0.547038811317080901, -0.0260783651922211984, 0.0913845737686953809, 0.248741195041378638, 0.0862862168111860338, 3.64252242367312907❩❩; '+'SpectralRadius(ComplexMatrix(A))',
    6.0);
  Eps(1E-13); Test({LINENUM}32366, 'A ≔ ReversalMatrix(10); SpectralRadius(ComplexMatrix(A))', 1.0);
  Eps(1E-13); Test({LINENUM}32367, 'A ≔ ❨❨0.947217218464429805, -0.0797032009555874838, 0.455681246175844459, -0.890506530889571131, 0.0810219664601976321, -0.4241414032969027, -0.325611817072624359, 0.442131323976784809, 0.696001040652687542, -0.363371579820000821❩, '+'❨-0.0797032009555874838, 0.664262086761071853, 0.151183874385912782, 0.366175763890158299, -0.362499363441370523, 0.345609605325798349, -0.36153060182114391, -0.370383371480650959, -0.351151983839811129, -0.192995673028588803❩, '+
    '❨0.455681246175844459, 0.151183874385912782, 0.965112845520727124, -0.379442604818156945, -0.0868548299522641688, -0.703208127497219295, -0.29273075622571167, 0.392533036681992209, 0.433785161673175889, -0.0198556703071645884❩, '+'❨-0.890506530889571131, 0.366175763890158299, -0.379442604818156945, 1.60196556896465841, 0.0343051071296422081, 0.587093406299823787, -0.485735414772669726, -0.766652742695679709, -0.63672778172637717, -0.0824745994586258031❩, '+
    '❨0.0810219664601976321, -0.362499363441370523, -0.0868548299522641688, 0.0343051071296422081, 0.327534361557092576, -0.222948382709437083, -0.0500390113869091228, 0.161756725513035523, 0.21826384416565025, -0.135644537928391234❩, '+'❨-0.4241414032969027, 0.345609605325798349, -0.703208127497219295, 0.587093406299823787, -0.222948382709437083, 0.989037781112786131, -0.126211410841058615, -0.699854415829559306, -0.413031006405435901, 0.131956448780506888❩, '+
    '❨-0.325611817072624359, -0.36153060182114391, -0.29273075622571167, -0.485735414772669726, -0.0500390113869091228, -0.126211410841058615, 1.00217393220066957, 0.281471732316985816, -0.335032854995363073, 0.398331000774434439❩, '+'❨0.442131323976784809, -0.370383371480650959, 0.392533036681992209, -0.766652742695679709, 0.161756725513035523, -0.699854415829559306, 0.281471732316985816, 0.61286300125401041, 0.371247429623465179, -0.0611706531297214894❩, '+
    '❨0.696001040652687542, -0.351151983839811129, 0.433785161673175889, -0.63672778172637717, 0.21826384416565025, -0.413031006405435901, -0.335032854995363073, 0.371247429623465179, 0.960656361843560564, 0.149752326353616183❩, '+'❨-0.363371579820000821, -0.192995673028588803, -0.0198556703071645884, -0.0824745994586258031, -0.135644537928391234, 0.131956448780506888, 0.398331000774434439, -0.0611706531297214894, 0.149752326353616183, 0.929176842320993553❩❩; '+'SpectralRadius(ComplexMatrix(A))',
    4.0);
  Eps(1E-13); Test({LINENUM}32373, 'A ≔ ❨❨1, 2❩, ❨3, 4❩❩; SpectralRadius(ComplexMatrix(A))', 5.372281323269014);
  Eps(1E-13); Test({LINENUM}32374, 'A ≔ ❨❨5, 7, 4❩, ❨0, 2, 6❩, ❨1, 5, 3❩❩; SpectralRadius(ComplexMatrix(A))', 9.334366656868244);
  Eps(1E-13); Test({LINENUM}32375, 'A ≔ ❨❨1, 0, 2❩, ❨1, 0, -1❩, ❨1, 1, 2❩❩; SpectralRadius(ComplexMatrix(A))', 3.0);
  Eps(1E-13); Test({LINENUM}32376, 'A ≔ ❨❨1, 1, 0❩, ❨1, 0, -1❩, ❨1, 2, 1❩❩; SpectralRadius(ComplexMatrix(A))', Sqrt(2));
  Eps(1E-13); Test({LINENUM}32377, 'A ≔ ❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 0, 1❩❩; SpectralRadius(ComplexMatrix(A))', 1.0);
  Eps(1E-13); Test({LINENUM}32378, 'A ≔ ❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 0, 2❩❩; SpectralRadius(ComplexMatrix(A))', 2.0);
  Eps(1E-13); Test({LINENUM}32379, 'A ≔ ❨❨1, 0, 0❩, ❨1, 0, -1❩, ❨1, 1, 2❩❩; SpectralRadius(ComplexMatrix(A))', 1.0);
  Eps(1E-13); Test({LINENUM}32380, 'A ≔ ❨❨5, 4, 7, 2❩, ❨6, 3, 5, 7❩, ❨0, 5, 7, 8❩, ❨3, 4, 1, 9❩❩; SpectralRadius(ComplexMatrix(A))', 18.722583143817452);
  Eps(1E-13); Test({LINENUM}32381, 'A ≔ ❨❨0, 0, 1, 0❩, ❨0, 0, 0, 0❩, ❨1, 0, 0, 0❩, ❨0, 0, 0, 2❩❩; SpectralRadius(ComplexMatrix(A))', 2.0);
  Eps(1E-13); Test({LINENUM}32382, 'A ≔ ❨❨5, 8, 4, 0, 2❩, ❨6, 3, 0, 4, 8❩, ❨6, 5, 4, 9, 2❩, ❨5, 6, 3, 8, 7❩, ❨1, 0, 2, 9, 7❩❩; SpectralRadius(ComplexMatrix(A))', 22.814428493209221);
  Eps(1E-13); Test({LINENUM}32383, 'A ≔ ❨❨5, 4, 7, 0, 2, 5❩, ❨6, 5, 8, 9, 5, 1❩, ❨0, 5, 8, 2, 3, 6❩, ❨4, 5, 8, 4, 6, 2❩, ❨7, 5, 9, 6, 1, 0❩, ❨5, 4, 7, 5, 2, 6❩❩; SpectralRadius(ComplexMatrix(A))', 27.475808456817589);
  Eps(1E-13); Test({LINENUM}32384, 'A ≔ ❨❨4, 2, 5, 8, 9, 6, 3❩, ❨5, 8, 4, 5, 8, 6, 3❩, ❨0, 5, 4, 7, 8, 9, 6❩, ❨4, 1, 2, 5, 0, 8, 6❩, ❨6, 6, 5, 0, 7, 4, 8❩, ❨4, 7, 5, 1, 9, 8, 6❩, ❨5, 3, 6, 8, 4, 1, 2❩❩; SpectralRadius(ComplexMatrix(A))', 35.314786301350608);
  Eps(1E-13); Test({LINENUM}32385, 'A ≔ ❨❨5, 8, 6, 5, 4, 7, 1, 2❩, ❨6, 3, 2, 5, 6, 9, 8, 5❩, ❨4, 5, 6, 9, 2, 0, 4, 7❩, ❨3, 6, 0, 8, 2, 4, 5, 9❩, ❨6, 3, 5, 4, 7, 8, 5, 2❩, ❨5, 3, 2, 1, 9, 8, 5, 6❩, ❨5, 4, 6, 8, 2, 1, 0, 7❩, ❨6, 3, 9, 5, 8, 3, 4, 7❩❩; SpectralRadius(ComplexMatrix(A))', 39.293880621805755);
  Eps(1E-13); Test({LINENUM}32386, 'A ≔ ❨❨5, 7, 6, 9, 5, 6, 3, 2, 5❩, ❨5, 4, 0, 2, 5, 8, 9, 6, 5❩, ❨7, 4, 5, 2, 1, 5, 6, 9, 8❩, ❨3, 6, 5, 4, 7, 8, 5, 2, 0❩, ❨2, 0, 8, 4, 6, 0, 8, 7, 3❩, ❨0, 1, 6, 8, 5, 3, 7, 9, 4❩, ❨5, 6, 3, 8, 7, 4, 1, 0, 5❩, '+'❨6, 5, 3, 8, 9, 4, 5, 2, 1❩, ❨4, 6, 3, 5, 5, 8, 9, 3, 2❩❩; SpectralRadius(ComplexMatrix(A))', 42.560831728333504);
  Eps(1E-13); Test({LINENUM}32387, 'A ≔ ❨❨5, 4, 1, 5, 2, 9, 8, 3, 0, 5❩, ❨5, 6, 3, 2, 0, 8, 5, 6, 9, 7❩, ❨4, 5, 6, 8, 2, 3, 6, 5, 7, 0❩, ❨4, 5, 9, 6, 3, 6, 5, 6, 8, 9❩, ❨4, 5, 5, 2, 6, 8, 7, 9, 2, 5❩, ❨5, 6, 3, 2, 0, 5, 4, 7, 8, 5❩, ❨4, 5, 4, 5, 6, 0, 2, 3, 7, 9❩, '+'❨5, 6, 3, 2, 5, 4, 7, 8, 4, 1❩, ❨5, 6, 3, 2, 0, 4, 5, 1, 2, 7❩, ❨6, 5, 6, 4, 1, 2, 7, 8, 4, 0❩❩; SpectralRadius(ComplexMatrix(A))', 45.848201925978358);


  Eps(1E-13); Test({LINENUM}32390, 'A ≔ ❨❨1, i❩, ❨-i, 2❩❩; SpectralRadius(A)', 2.618033988749895);
  Eps(1E-13); Test({LINENUM}32391, 'A ≔ ❨❨2, i, 3❩, ❨-i, 5, 1❩, ❨3, 1, 0❩❩; SpectralRadius(A)', 5.754405707945917);
  Eps(1E-13); Test({LINENUM}32392, 'A ≔ ❨❨3, 2, i, 5❩, ❨2, 7, 0, 1❩, ❨−i, 0, 2, −i❩, ❨5, 1, i, 3❩❩; SpectralRadius(A)', 9.854644953717658);
  Eps(1E-13); Test({LINENUM}32393, 'A ≔ ❨❨5, i, 1, 2, 3❩, ❨−i, 4, 8, 3, 5❩, ❨1, 8, 1, 2, −i❩, ❨2, 3, 2, 5, 9❩, ❨3, 5, i, 9, 3❩❩; SpectralRadius(A)', 18.188313753340950);
  Eps(1E-13); Test({LINENUM}32394, 'A ≔ ❨❨3, 8, 5, 1, 2, 0❩, ❨8, 8, 0, i, 7, 2❩, ❨5, 0, 5, 0, 1, 8❩, ❨1, −i, 0, 3, i, 2❩, ❨2, 7, 1, −i, 7, 9❩, ❨0, 2, 8, 2, 9, 2❩❩; SpectralRadius(A)', 22.508205131012872);
  Eps(1E-13); Test({LINENUM}32395, 'A ≔ ❨❨2, 8, i, 0, 9, 3, 1❩, ❨8, 5, 2, 7, −i, 3, 0❩, ❨−i, 2, 0, 4, 3, 9, 1❩, ❨0, 7, 4, 6, 2, 1, i❩, ❨9, i, 3, 2, 8, 0, 5❩, ❨3, 3, 9, 1, 0, 3, 2❩, ❨1, 0, 1, −i, 5, 2, 4❩❩; SpectralRadius(A)', 22.174399966828524);
  Eps(1E-13); Test({LINENUM}32396, 'A ≔ ❨❨2, 8, 5, 3, i, 2, 7, 1❩, ❨8, 2, 7, 8, 0, 3, 4, 6❩, ❨5, 7, 1, 2, i, 5, 7, 1❩, ❨3, 8, 2, 6, 3, 2, −i, i❩, ❨−i, 0, −i, 3, 5, 7, 0, 8❩, ❨2, 3, 5, 2, 7, 3, 2, i❩, ❨7, 4, 7, i, 0, 2, 5, 7❩, ❨1, 6, 1, −i, 8, −i, 7, 8❩❩; SpectralRadius(A)', 29.502669186726628);
  Eps(1E-13); Test({LINENUM}32397, 'A ≔ ❨❨3, 2, 8, 5, 0, 7, 9, 6, 5❩, ❨2, 1, 0, i, 3, 8, 0, 2, 2❩, ❨8, 0, 5, 7, 9, 3, 0, 8, 6❩, ❨5, −i, 7, 1, 2, 4, 9, 3, 5❩, ❨0, 3, 9, 2, 6, −i, i, 2, 8❩, ❨7, 8, 3, 4, i, 5, 4, 9, 8❩, ❨9, 0, 0, 9, −i, 4, 3, 6, 7❩, '+'❨6, 2, 8, 3, 2, 9, 6, 2, 8❩, ❨5, 2, 6, 5, 8, 8, 7, 8, 5❩❩; SpectralRadius(A)', 42.725142660244707);
  Eps(1E-13); Test({LINENUM}32398, 'A ≔ ❨❨1, 2, 3, 4, 5, 6, 7, 8, 9, i❩, ❨2, 3, 4, 5, 6, 7, 8, 9, i, 1❩, ❨3, 4, 5, 6, 7, 8, 9, i, 1, 2❩, ❨4, 5, 6, 7, 8, 9, i, 1, 2, 3❩, ❨5, 6, 7, 8, 9, i, 1, 2, 3, 4❩, ❨6, 7, 8, 9, −i, 1, 2, 3, 4, 5❩, '+'❨7, 8, 9, −i, 1, 2, 3, 4, 5, 6❩, ❨8, 9, −i, 1, 2, 3, 4, 5, 6, 7❩, ❨9, −i, 1, 2, 3, 4, 5, 6, 7, 8❩, ❨−i, 1, 2, 3, 4, 5, 6, 7, 8, 9❩❩; SpectralRadius(A)', 45.027811551304595);
  Eps(1E-13); Test({LINENUM}32399, 'A ≔ ❨❨i❩❩; SpectralRadius(A)', 1.0);
  Eps(1E-13); Test({LINENUM}32400, 'A ≔ ❨❨2, i❩, ❨4, 1❩❩; SpectralRadius(A)', 3.26113976166991682);
  Eps(1E-13); Test({LINENUM}32401, 'A ≔ ❨❨9, 3, i❩, ❨5, 0, −i❩, ❨3, 4, 1❩❩; SpectralRadius(A)', 10.4649386897631176);
  Eps(1E-13); Test({LINENUM}32402, 'A ≔ ❨❨1, 1, i❩, ❨0, i, 0❩, ❨1, 0, i❩❩; SpectralRadius(A)', Sqrt(2));
  Eps(1E-13); Test({LINENUM}32403, 'A ≔ ❨❨0, 1, i❩, ❨0, i, 1❩, ❨1, i, 0❩❩; SpectralRadius(A)', Sqrt(2));
  Eps(1E-13); Test({LINENUM}32404, 'A ≔ ❨❨1, 0, 0❩, ❨i, 1, i❩, ❨1, i, 1❩❩; SpectralRadius(A)', Sqrt(2));
  Eps(1E-13); Test({LINENUM}32405, 'A ≔ ❨❨-1, 0, -1❩, ❨i, 1, 0❩, ❨0, 0, 1❩❩; SpectralRadius(A)', 1.0);
  Eps(1E-13); Test({LINENUM}32406, 'A ≔ ❨❨1, 0, 1❩, ❨i, 1, 0❩, ❨0, 0, 1❩❩; SpectralRadius(A)', 1.0);
  Eps(1E-13); Test({LINENUM}32407, 'A ≔ ❨❨1, 0, 0, 0❩, ❨0, i, i, 0❩, ❨1, 0, 0, 1❩, ❨0, 0, 0, i❩❩; SpectralRadius(A)', 1.0);
  Eps(1E-13); Test({LINENUM}32408, 'A ≔ ❨❨1, 0, 0, 0❩, ❨0, 1, i, 0❩, ❨1, 0, 0, 1❩, ❨0, 0, 0, 1❩❩; SpectralRadius(A)', 1.0);
  Eps(1E-13); Test({LINENUM}32409, 'A ≔ ❨❨1, 0, 0, 0❩, ❨0, 1, i, 0❩, ❨1, 1, 0, 1❩, ❨0, 0, 0, 1❩❩; SpectralRadius(A)', 1.44257374044605948);
  Eps(1E-13); Test({LINENUM}32410, 'A ≔ ❨❨6, 2, 1, 4❩, ❨i, 0, 3, 1❩, ❨2, 8, 7, i❩, ❨3, 7, 5, i❩❩; SpectralRadius(A)', 11.6509822717031644);
  Eps(1E-13); Test({LINENUM}32411, 'A ≔ ❨❨1, 5, 2, 8, 6❩, ❨4, 3, 2, 0, i❩, ❨2, 5, 3, 9, 4❩, ❨0, 7, 5, 2, i❩, ❨6, 5, 0, 8, 7❩❩; SpectralRadius(A)', 17.0309379463060299);
  Eps(1E-13); Test({LINENUM}32412, 'A ≔ ❨❨5, i, 3, 0, 5, 1❩, ❨7, 6, 3, 2, 6, 9❩, ❨4, 2, i, 4, 5, 0❩, ❨2, 3, 8, 5, 6, 9❩, ❨4, 2, 8, i, 6, 3❩, ❨4, 8, 3, 2, 9, 7❩❩; SpectralRadius(A)', 23.7419840643665259);
  Eps(1E-13); Test({LINENUM}32413, 'A ≔ ❨❨5, 2, 3, 6, 9, 7, 5❩, ❨0, 9, 6, 3, 5, 7, 6❩, ❨5, 4, i, 4, 2, 9, 6❩, ❨7, 6, 3, 0, 8, 4, i❩, ❨9, 6, 3, 2, 7, 1, 4❩, ❨2, 5, 3, 6, 0, 1, 1❩, ❨8, 6, 3, i, 4, 5, 6❩❩; SpectralRadius(A)', 30.7409773649641304);
  Eps(1E-13); Test({LINENUM}32414, 'A ≔ ❨❨5, i, 3, 6, 2, i, 4, 8❩, ❨3, 6, 2, 5, 8, 0, 4, 7❩, ❨4, 5, 3, 8, i, 0, 2, 4❩, ❨7, 5, 6, 3, 0, 2, 5, 2❩, ❨5, 8, 9, 0, 2, 1, 5, 3❩, ❨6, 3, 2, 5, 7, 4, 0, 8❩, ❨9, 3, 5, 8, 0, 2, 5, 4❩, ❨6, i, 3, 0, 2, 5, 6, 7❩❩; SpectralRadius(A)', 30.7822431399464038);
  Eps(1E-13); Test({LINENUM}32415, 'A ≔ ❨❨3, 2, 5, 6, 8, 0, 2, 5, 6❩, ❨8, 5, 0, 3, 6, 5, 1, 4, 7❩, ❨4, 3, 6, 5, 2, 8, 9, 6, 0❩, ❨4, 5, 6, i, 8, 9, 6, 6, 3❩, ❨0, 2, 5, 1, 3, 5, 4, 9, 7❩, ❨6, 3, 2, 5, 6, 4, 1, 7, 0❩, ❨8, 2, 5, 0, 1, 9, 6, 4, 7❩, '+'❨6, i, 3, 6, 4, 7, 8, 0, 2❩, ❨3, 5, 0, 4, 9, 2, 1, i, 8❩❩; SpectralRadius(A)', 37.9098145316765089);
  Eps(1E-13); Test({LINENUM}32416, 'A ≔ ❨❨1, 2, 3, 4, 5, 6, 7, 8, 9, i❩, ❨2, 3, 4, 5, 6, 7, 8, 9, i, 1❩, ❨3, 4, 5, 6, 7, 8, 9, i, 1, 2❩, ❨4, 5, 6, 7, 8, 9, i, 1, 2, 3❩, ❨5, 6, 7, 8, 9, i, 1, 2, 3, 4❩, ❨6, 7, 8, 9, i, 1, 2, 3, 4, 5❩, '+'❨7, 8, 9, i, 1, 2, 3, 4, 5, 6❩, ❨8, 9, i, 1, 2, 3, 4, 5, 6, 7❩, ❨9, i, 1, 2, 3, 4, 5, 6, 7, 8❩, ❨i, 1, 2, 3, 4, 5, 6, 7, 8, 9❩❩; SpectralRadius(A)', 45.0111097397075959);
  Eps(1E-13); Test({LINENUM}32417, 'A ≔ ❨❨2, 8, 0, 5❩, ❨8, 3, 9, 1❩, ❨0, 9, 7, 0❩, ❨5, 1, 0, 1❩❩; SpectralRadius(A)', 16.697147626100790);
  Eps(1E-13); Test({LINENUM}32418, 'A ≔ ❨❨4.88518185435250995, -0.0503410125523369264, 2.41500433970266516, -0.3526553784998275, 0.377477078463321959❩, '+'❨-0.0503410125523369266, 6.99880168536003428, 0.0574866278829369505, -0.00839458885495496514, 0.00898544320902995499❩, ❨2.41500433970266516, 0.0574866278829369505, 4.24219977363724693, 0.402712768116436254, -0.431057764708227601❩, '+'❨-0.3526553784998275, -0.00839458885495496536, 0.402712768116436254, 6.94119313935299163, 0.0629459900627696699❩, ❨0.377477078463321959, 0.00898544320902995499, -0.431057764708227601, 0.0629459900627696697, 6.93262354729721721❩❩; SpectralRadius(A)', 7.0);
  Eps(1E-13); Test({LINENUM}32419, 'A ≔ ❨❨4, 2, 8, 1, 7, 5❩, ❨2, 3, 9, 4, 1, 2❩, ❨8, 9, 7, 5, 2, 1❩, ❨1, 4, 5, 8, 0, 9❩, ❨7, 1, 2, 0, 3, 2❩, ❨5, 2, 1, 9, 2, 6❩❩; SpectralRadius(A)', 25.699931912397357);
  Eps(1E-13); Test({LINENUM}32420, 'A ≔ ❨❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩, ❨2, 3, 4, 5, 6, 7, 8, 9, 10, 1❩, ❨3, 4, 5, 6, 7, 8, 9, 10, 1, 2❩, ❨4, 5, 6, 7, 8, 9, 10, 1, 2, 3❩, ❨5, 6, 7, 8, 9, 10, 1, 2, 3, 4❩, '+'❨6, 7, 8, 9, 10, 1, 2, 3, 4, 5❩, ❨7, 8, 9, 10, 1, 2, 3, 4, 5, 6❩, ❨8, 9, 10, 1, 2, 3, 4, 5, 6, 7❩, ❨9, 10, 1, 2, 3, 4, 5, 6, 7, 8❩, ❨10, 1, 2, 3, 4, 5, 6, 7, 8, 9❩❩; SpectralRadius(A)', 55.0);
  Eps(1E-13); Test({LINENUM}32421, 'A ≔ ❨❨4.45528983757093495, -0.0878217640871465801, 0.587220808461187196, 0.381484594913282418, 0.806374962066634831, 0.415539821124804545, -1.07626065503415, -0.174476853005194865, 0.6117764065082528, 0.479713560928682166❩, '+'❨-0.0878217640871465801, 4.39333906061644079, -1.16146861964970503, 0.189604671732296926, 0.549866251807311702, 0.959584846946758171, -0.559867163033034075, 0.601342029002866998, 0.908395415505047237, -0.0481674127191538071❩, '+
    '❨0.587220808461187195, -1.16146861964970503, 4.731699905531466, -0.297368715494811859, 0.174137444046764151, 0.158862374235097095, 0.0708587702680495379, 0.527044617773810588, 0.717806236876411773, 0.100941787359586736❩, '+'❨0.381484594913282417, 0.189604671732296926, -0.297368715494811859, 5.20093245260149577, -0.422111106264731792, -0.609505049911372394, 0.430772405093700426, -0.075450459824149398, -0.0231177557010034982, 1.02271233462064678❩, '+
    '❨0.806374962066634831, 0.549866251807311702, 0.174137444046764151, -0.422111106264731792, 4.65483119820909985, 0.289795090828546352, 0.795841033040542465, -0.226199611183290607, -1.41597888676298831, 0.547038811317080901❩, '+'❨0.415539821124804545, 0.959584846946758171, 0.158862374235097095, -0.609505049911372394, 0.289795090828546352, 3.97252873681661176, 0.586614812369869111, -0.203645718668121608, 0.548222506108191402, -0.0260783651922211985❩, '+
    '❨-1.07626065503415, -0.559867163033034075, 0.0708587702680495379, 0.430772405093700426, 0.795841033040542465, 0.586614812369869111, 5.07303988296985066, 0.0852567827171805209, 0.721798919103536904, 0.0913845737686953809❩, '+'❨-0.174476853005194865, 0.601342029002866998, 0.527044617773810588, -0.0754504598241493979, -0.226199611183290607, -0.203645718668121608, 0.0852567827171805208, 5.72552879232507247, -0.381852810701084683, 0.248741195041378638❩, '+'❨0.6117764065082528, 0.908395415505047237, 0.717806236876411773, -0.0231177557010034982, -1.41597888676298831, 0.548222506108191402, 0.721798919103536904, -0.381852810701084683, 4.15028770968589867, 0.0862862168111860338❩, '+'❨0.479713560928682166, -0.0481674127191538071, 0.100941787359586736, 1.02271233462064678, 0.547038811317080901, -0.0260783651922211984, 0.0913845737686953809, 0.248741195041378638, 0.0862862168111860338, 3.64252242367312907❩❩; SpectralRadius(A)', 6.0);
  Eps(1E-13); Test({LINENUM}32425, 'A ≔ ❨❨0.947217218464429805, -0.0797032009555874838, 0.455681246175844459, -0.890506530889571131, 0.0810219664601976321, -0.4241414032969027, -0.325611817072624359, 0.442131323976784809, 0.696001040652687542, -0.363371579820000821❩, '+'❨-0.0797032009555874838, 0.664262086761071853, 0.151183874385912782, 0.366175763890158299, -0.362499363441370523, 0.345609605325798349, -0.36153060182114391, -0.370383371480650959, -0.351151983839811129, -0.192995673028588803❩, '+
    '❨0.455681246175844459, 0.151183874385912782, 0.965112845520727124, -0.379442604818156945, -0.0868548299522641688, -0.703208127497219295, -0.29273075622571167, 0.392533036681992209, 0.433785161673175889, -0.0198556703071645884❩, '+'❨-0.890506530889571131, 0.366175763890158299, -0.379442604818156945, 1.60196556896465841, 0.0343051071296422081, 0.587093406299823787, -0.485735414772669726, -0.766652742695679709, -0.63672778172637717, -0.0824745994586258031❩, '+
    '❨0.0810219664601976321, -0.362499363441370523, -0.0868548299522641688, 0.0343051071296422081, 0.327534361557092576, -0.222948382709437083, -0.0500390113869091228, 0.161756725513035523, 0.21826384416565025, -0.135644537928391234❩, '+'❨-0.4241414032969027, 0.345609605325798349, -0.703208127497219295, 0.587093406299823787, -0.222948382709437083, 0.989037781112786131, -0.126211410841058615, -0.699854415829559306, -0.413031006405435901, 0.131956448780506888❩, '+
    '❨-0.325611817072624359, -0.36153060182114391, -0.29273075622571167, -0.485735414772669726, -0.0500390113869091228, -0.126211410841058615, 1.00217393220066957, 0.281471732316985816, -0.335032854995363073, 0.398331000774434439❩, '+'❨0.442131323976784809, -0.370383371480650959, 0.392533036681992209, -0.766652742695679709, 0.161756725513035523, -0.699854415829559306, 0.281471732316985816, 0.61286300125401041, 0.371247429623465179, -0.0611706531297214894❩, '+
    '❨0.696001040652687542, -0.351151983839811129, 0.433785161673175889, -0.63672778172637717, 0.21826384416565025, -0.413031006405435901, -0.335032854995363073, 0.371247429623465179, 0.960656361843560564, 0.149752326353616183❩, '+'❨-0.363371579820000821, -0.192995673028588803, -0.0198556703071645884, -0.0824745994586258031, -0.135644537928391234, 0.131956448780506888, 0.398331000774434439, -0.0611706531297214894, 0.149752326353616183, 0.929176842320993553❩❩; SpectralRadius(A)', 4.0);
  Eps(1E-13); Test({LINENUM}32430, 'A ≔ IdentityMatrix(10); SpectralRadius(A)', 1.0);
  Eps(1E-13); Test({LINENUM}32431, 'A ≔ ZeroMatrix(10); SpectralRadius(A)', 0.0);
  Eps(1E-13); Test({LINENUM}32432, 'A ≔ ❨❨2, 3, 0, 1❩, ❨5, 6, 8, 1❩, ❨4, 2, 5, 7❩, ❨3, 0, 2, 6❩❩; SpectralRadius(A)', 13.109772228646445);

  Eps(1E-13); Test({LINENUM}32434, 'A ≔ ❨❨0, 0, 0, i❩, ❨0, 0, 1, 0❩, ❨0, 1, 0, 0❩, ❨−i, 0, 0, 0❩❩; SpectralRadius(A)', 1.0);
  Eps(1E-13); Test({LINENUM}32435, 'A ≔ ❨❨5, 2, −i, 7, 4❩, ❨2, 3, 9, 1, i❩, ❨i, 9, 5, 9, 8❩, ❨7, 1, 9, 2, 3❩, ❨4, −i, 8, 3, 6❩❩; SpectralRadius(A)', 22.691445962489553);
  Eps(1E-13); Test({LINENUM}32436, 'A ≔ ❨❨0, 0, −i, −1, 0❩, ❨0, 0, 0, 0, 1❩, ❨i, 0, 0, −i, 0❩, ❨−1, 0, i, 0, 0❩, ❨0, 1, 0, 0, 0❩❩; SpectralRadius(A)', 2.0);
  Eps(1E-13); Test({LINENUM}32437, 'A ≔ ❨❨3, 2, 8, 0, i, 5, 7, 2❩, ❨2, 3, 9, 2, 7, 1, 2, 5❩, ❨8, 9, 9, 0, 3, 1, 5, 7❩, ❨0, 2, 0, 6, i, 3, 0, 8❩, ❨−i, 7, 3, −i, 7, 6, 1, −i❩, ❨5, 1, 1, 3, 6, 5, 2, 1❩, ❨7, 2, 5, 0, 1, 2, 3, 9❩, ❨2, 5, 7, 8, i, 1, 9, 6❩❩; SpectralRadius(A)', 31.541450879650441);
  Eps(1E-13); Test({LINENUM}32438, 'A ≔ ❨❨−6, 2, 3, 5, −8❩, ❨4, 0, 2, 6, 5❩, ❨0, 0, 1, 6, 7❩, ❨5, 4, 8, 0, 2❩, ❨4, 3, 6, 6, 2❩❩; SpectralRadius(A)', 14.738054917903042);

  Test({LINENUM}32440, 'delete(A)', success);

  //
  // Other matrix decompositions
  //

  // QR decomposition

  Test({LINENUM}32448, 'A ≔ ❨❨21❩❩;', null);
  Test({LINENUM}32449, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32450, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32451, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32452, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32453, 'A ≈ Q⋅R', True);

  Test({LINENUM}32455, 'A ≔ ❨❨6, 1❩, ❨5, 4❩❩;', null);
  Test({LINENUM}32456, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32457, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32458, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32459, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32460, 'A ≈ Q⋅R', True);

  Test({LINENUM}32462, 'A ≔ ❨❨5, 2, 1❩, ❨4, 6, 8❩, ❨4, 3, 2❩❩;', null);
  Test({LINENUM}32463, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32464, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32465, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32466, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32467, 'A ≈ Q⋅R', True);

  Test({LINENUM}32469, 'A ≔ ❨❨6, 3, 2, 5❩, ❨7, 1, 4, 5❩, ❨5, 6, 0, 4❩, ❨−5, 2, 8, 7❩❩;', null);
  Test({LINENUM}32470, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32471, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32472, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32473, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32474, 'A ≈ Q⋅R', True);

  Test({LINENUM}32476, 'A ≔ ❨❨2, 1, 5, 3, 0❩, ❨5, 2, 0, 4, 7❩, ❨6, 3, 4, 2, 1❩, ❨−5, 3, 9, 5, 0❩, ❨5, 2, 1, −7, 9❩❩;', null);
  Test({LINENUM}32477, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32478, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32479, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32480, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32481, 'A ≈ Q⋅R', True);

  Test({LINENUM}32483, 'A ≔ ❨❨3, 2, 5, 0, 1, 4❩, ❨7, 5, 6, 3, 2, 6❩, ❨4, 7, 8, 9, 5, 3❩, ❨4, 2, 0, 3, −4, −7❩, ❨6, 3, 5, 0, 1, 7❩, ❨5, 0, 2, 1, 0, 9❩❩;', null);
  Test({LINENUM}32484, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32485, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32486, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32487, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32488, 'A ≈ Q⋅R', True);

  Test({LINENUM}32490, 'A ≔ ❨❨6, 3, 0, 2, 4, 1, 7❩, ❨5, 2, 0, −3, 1, 4, 7❩, ❨2, 5, 9, −6, −20, 4, 1❩, ❨7, 5, 2, 3, 6, −7, 4❩, ❨5, 6, 3, 0, 2, 8, 9❩, ❨0, 0, 0, 0, 0, 0, 0❩, ❨9, 5, 3, 4, 1, 5, −7❩❩;', null);
  Test({LINENUM}32491, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32492, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32493, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32494, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32495, 'A ≈ Q⋅R', True);

  Test({LINENUM}32497, 'A ≔ ❨❨4, 7, 5, 6, 2, 1, 0, 5❩, ❨5, 4, 7, 6, 3, 2, 1, 4❩, ❨5, 2, 0, 8, 4, 6, 3, 2❩, ❨4, 7, 8, 5, 1, 6, 9, 0❩, ❨6, 3, 2, 7, 9, 1, 3, 4❩, ❨5, 6, 2, 5, 8, 0, 1, 4❩, ❨6, 3, 9, 5, 7, 4, 1, 8❩, ❨7, 4, 5, 6, 3, 2, 2, 8❩❩;', null);
  Test({LINENUM}32498, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32499, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32500, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32501, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32502, 'A ≈ Q⋅R', True);

  Test({LINENUM}32504, 'A ≔ ❨❨4, 5, 2, 1, 5, 8, 9, 6, 3❩, ❨4, 1, 2, 5, 6, 4, 7, 8, 2❩, ❨0, 0, 0, 0, 0, 0, 0, 0, 0❩, ❨4, 6, 3, 2, 5, 8, 9, 60, 1❩, ❨4, 5, 6, 3, 5, 2, 8, 0, 1❩, ❨4, 3, 6, 3, 2, 2, 5, 9, 7❩, '+'❨4, 1, 2, 5, 6, 3, 8, 7, 5❩, ❨4, 5, 6, 3, 2, 5, 8, 9, 0❩, ❨5, 0, 2, 3, 6, 1, 4, 8, −7❩❩;', null);
  Test({LINENUM}32505, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32506, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32507, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32508, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32509, 'A ≈ Q⋅R', True);

  Test({LINENUM}32511, 'A ≔ IdentityMatrix(10);', null);
  Test({LINENUM}32512, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32513, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32514, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32515, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32516, 'A ≈ Q⋅R', True);

  Test({LINENUM}32518, 'A ≔ ReversalMatrix(10);', null);
  Test({LINENUM}32519, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32520, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32521, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32522, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32523, 'A ≈ Q⋅R', True);

  Test({LINENUM}32525, 'A ≔ ZeroMatrix(10);', null);
  Test({LINENUM}32526, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32527, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32528, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32529, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32530, 'A ≈ Q⋅R', True);

  Test({LINENUM}32532, 'A ≔ CirculantMatrix(❨1, 2, 3, 4, 5, 6, 7, 8, 9, 0❩);', null);
  Test({LINENUM}32533, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32534, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32535, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32536, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32537, 'A ≈ Q⋅R', True);

  Test({LINENUM}32539, 'A ≔ ForwardShiftMatrix(10);', null);
  Test({LINENUM}32540, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32541, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32542, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32543, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32544, 'A ≈ Q⋅R', True);

  Test({LINENUM}32546, 'A ≔ HilbertMatrix(10);', null);
  Test({LINENUM}32547, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32548, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32549, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32550, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32551, 'A ≈ Q⋅R', True);

  Test({LINENUM}32553, 'A ≔ ❨❨i/21❩❩;', null);
  Test({LINENUM}32554, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32555, 'IsUnitary(Q)', True);
  Test({LINENUM}32556, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32557, 'A ≈ Q⋅R', True);

  Test({LINENUM}32559, 'A ≔ ❨❨i, 3❩, ❨5, -i❩❩;', null);
  Test({LINENUM}32560, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32561, 'IsUnitary(Q)', True);
  Test({LINENUM}32562, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32563, 'A ≈ Q⋅R', True);

  Test({LINENUM}32565, 'A ≔ ❨❨3, 0, i❩, ❨4, i, i❩, ❨1, 2, 8❩❩;', null);
  Test({LINENUM}32566, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32567, 'IsUnitary(Q)', True);
  Test({LINENUM}32568, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32569, 'A ≈ Q⋅R', True);

  Test({LINENUM}32571, 'A ≔ ❨❨3, 5, 2, i❩, ❨1, 0, 4, 7❩, ❨5, i, i, 6❩, ❨1, 0, 7, 4❩❩;', null);
  Test({LINENUM}32572, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32573, 'IsUnitary(Q)', True);
  Test({LINENUM}32574, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32575, 'A ≈ Q⋅R', True);

  Test({LINENUM}32577, 'A ≔ ❨❨3, 6, 9, 8, i❩, ❨5, 4, i, 2, 3❩, ❨4, 0, 7, 1, i❩, ❨5, i, 3, 6, 9❩, ❨8, 5, 4, 4, 0❩❩;', null);
  Test({LINENUM}32578, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32579, 'IsUnitary(Q)', True);
  Test({LINENUM}32580, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32581, 'A ≈ Q⋅R', True);

  Test({LINENUM}32583, 'A ≔ ❨❨i, 4, 5, 6, 0, 2❩, ❨3, 0, 4, 7, 0, 4❩, ❨3, 6, i, 4, 1, i❩, ❨7, 0, 4, 1, 5, 9❩, ❨−5, 20, 100, 6, 7, i/1000❩, ❨1 + i, 5, 8, 4, −i, 6❩❩;', null);
  Test({LINENUM}32584, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32585, 'IsUnitary(Q)', True);
  Test({LINENUM}32586, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32587, 'A ≈ Q⋅R', True);

  Test({LINENUM}32589, 'A ≔ ❨❨i, 4, 0, i, 36, 4❩, ❨7, 0, −4, 5, 6, 9❩, ❨7, 3, 0, 4, i, 4❩, ❨0, 0, 0, 0, 0, 0❩, ❨0, 0, 0, 0, 0, 0❩, ❨4, i, 3, 6, 9, 8❩❩;', null);
  Test({LINENUM}32590, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32591, 'IsUnitary(Q)', True);
  Test({LINENUM}32592, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32593, 'A ≈ Q⋅R', True);

  Test({LINENUM}32595, 'A ≔ ❨❨4, 8, 3, i, 4, 1, 5❩, ❨4, 2, 0, 1, 4, 5, 9❩, ❨6, 3, 0, 5, 7, i, 4❩, ❨−4, 5, 8, 1, 1000, 6, 3❩, ❨4, 7, 5, 4, i, 6, 3❩, ❨1, 0, 2, 5, 9, 3, 1❩, ❨4, 6, 8, 5, 0, i, i❩❩;', null);
  Test({LINENUM}32596, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32597, 'IsUnitary(Q)', True);
  Test({LINENUM}32598, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32599, 'A ≈ Q⋅R', True);

  Test({LINENUM}32601, 'A ≔ ❨❨2, 5, 3, 0, 2, 1, 4, 8❩, ❨5, 6, 3, 0, 4, 2, 8, 9❩, ❨5, i, 4, 1, 2, 0, 7, 9❩, ❨5, 3, 6, 0, 5, 8, i, 7❩, ❨4, 2, 3, 6, 0, 11, 4, 5❩, ❨−5, −6, −7, −2, −4, −5, −9, −8❩, ❨4, 6, 0, i, 5, 7, 9, 6❩, ❨5, 3, 1, 4, 5, 0, 2, 8❩❩;', null);
  Test({LINENUM}32602, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32603, 'IsUnitary(Q)', True);
  Test({LINENUM}32604, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32605, 'A ≈ Q⋅R', True);

  StartStopwatch;
  _i := RandSeed;
  try
    RandSeed := 4318675;
    Test({LINENUM}32611, 'A ≔ RandomMatrix(100);', null);
    Test({LINENUM}32612, '(Q, R) ≔ QR(A);', null);
    Test({LINENUM}32613, 'IsUnitary(Q)', True);
    Test({LINENUM}32614, 'IsUpperTriangular(R)', True);
    Test({LINENUM}32615, 'A ≈ Q⋅R', True);
  finally
    RandSeed := _i;
  end;
  StopStopwatch;
  TestDuration({LINENUM}32620, 0.7);

{$IFNDEF QuickTest}
  StartStopwatch;
  _i := RandSeed;
  try
    RandSeed := 4318675;
    for _j := 1 to 100 do
    begin
      Test({LINENUM}32629, Format('A ≔ RandomMatrix(%d);', [_j]), null);
      Test({LINENUM}32630, '(Q, R) ≔ QR(A);', null);
      Test({LINENUM}32631, 'IsUnitary(Q)', True);
      Test({LINENUM}32632, 'IsUpperTriangular(R)', True);
      Test({LINENUM}32633, 'A ≈ Q⋅R', True);
    end;
  finally
    RandSeed := _i;
  end;
  StopStopwatch;
  TestDuration({LINENUM}32639, 15);
{$ENDIF}

  Test({LINENUM}32642, 'A ≔ ❨❨5, 3, 6❩, ❨5, 0, 1❩, ❨8, 1, 7❩, ❨3, 0, 2❩, ❨4, 5, 8❩❩;', null);
  Test({LINENUM}32643, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32644, 'IsOrthogonal(Q)', True);
  Test({LINENUM}32645, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32646, 'IsRealType(Q) ∧ IsRealType(R)', True);
  Test({LINENUM}32647, 'A ≈ Q⋅R', True);

  Test({LINENUM}32649, 'A ≔ ❨❨6, i, 1, 5❩, ❨7, i, −2, 0❩, ❨4, 5, 3, 6❩, ❨4, i, 9, 0❩, ❨4, 1, 2, i❩, ❨5, 6, 3, 2❩, ❨4, 7, 8, 5❩, ❨1, 5, i, 6❩❩;', null);
  Test({LINENUM}32650, '(Q, R) ≔ QR(A);', null);
  Test({LINENUM}32651, 'IsUnitary(Q)', True);
  Test({LINENUM}32652, 'IsUpperTriangular(R)', True);
  Test({LINENUM}32653, 'A ≈ Q⋅R', True);

  Test({LINENUM}32655, 'A ≔ ❨❨6, 7, 1, 5❩, ❨7, 5, −2, 0❩❩;', null);
  Test({LINENUM}32656, '(Q, R) ≔ QR(A);', failure, 'QR decomposition only implemented for square and tall matrices.');

  Test({LINENUM}32658, 'A ≔ ❨❨6, 7, 1, 5❩, ❨7, 5, −2, i❩❩;', null);
  Test({LINENUM}32659, '(Q, R) ≔ QR(A);', failure, 'QR decomposition only implemented for square and tall matrices.');

  Test({LINENUM}32661, 'delete(A); delete(Q); delete(R)', success);

  // LU decomposition

  Test({LINENUM}32665, 'A ≔ ❨❨21❩❩;', null);
  Test({LINENUM}32666, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32667, 'IsPermutation(P)', True);
  Test({LINENUM}32668, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32669, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32670, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32671, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32673, 'A ≔ ❨❨6, 8❩, ❨5, 3❩❩;', null);
  Test({LINENUM}32674, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32675, 'IsPermutation(P)', True);
  Test({LINENUM}32676, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32677, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32678, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32679, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32681, 'A ≔ ❨❨5, 1, 3❩, ❨6, 1, 0❩, ❨6, 8, 4❩❩;', null);
  Test({LINENUM}32682, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32683, 'IsPermutation(P)', True);
  Test({LINENUM}32684, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32685, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32686, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32687, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32689, 'A ≔ ❨❨4, 0, 2, 3❩, ❨4, 8, 9, 6❩, ❨2, 0, 1, 4❩, ❨5, 6, 3, 2❩❩;', null);
  Test({LINENUM}32690, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32691, 'IsPermutation(P)', True);
  Test({LINENUM}32692, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32693, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32694, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32695, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32697, 'A ≔ ❨❨4, 5, 6, 0, 1❩, ❨2, 3, 1, 0, 5❩, ❨8, 6, 6, 7, 9❩, ❨4, 0, 2, −1, 2❩, ❨1, 5, 6, 3, 2❩❩;', null);
  Test({LINENUM}32698, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32699, 'IsPermutation(P)', True);
  Test({LINENUM}32700, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32701, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32702, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32703, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32705, 'A ≔ ❨❨3, 6, 2, 5, 4, 7❩, ❨1, 0, 2, 6, 9, 8❩, ❨4, 5, 6, 3, 2, 9❩, ❨4, 0, 1, 2, 8, 7❩, ❨5, 6, 3, 2, 9, 8❩, ❨5, 2, 1, 4, 7, 8❩❩;', null);
  Test({LINENUM}32706, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32707, 'IsPermutation(P)', True);
  Test({LINENUM}32708, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32709, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32710, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32711, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32713, 'A ≔ ❨❨5, 7, 4, 9, 0, 3, 2❩, ❨5, 2, 1, 4, 6, 9, 0❩, ❨5, 3, 2, 8, 5, 9, 6❩, ❨4, 5, 2, 1, 6, 9, 0❩, ❨8, 5, 4, 7, 7, −2, 6❩, ❨5, 6, 3, 2, 5, 8, 9❩, ❨4, 0, 5, 7, 8, 0, 6❩❩;', null);
  Test({LINENUM}32714, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32715, 'IsPermutation(P)', True);
  Test({LINENUM}32716, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32717, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32718, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32719, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32721, 'A ≔ ❨❨5, 4, 7, 5, 0, 3, 2, 6❩, ❨4, 5, 2, 1, 3, 6, 5, 8❩, ❨7, 3, 1, 0, 5, 2, 6, 9❩, ❨4, 2, 5, 0, 4, 7, 9, 6❩, ❨4, 3, 0, 2, 1, 5, 6, 7❩, ❨6, 5, 4, 8, 2, 3, 3, 6❩, ❨5, 2, 0, 1, 3, 5, 7, 8❩, ❨6, 5, 2, 0, 1, 4, 1, 2❩❩;', null);
  Test({LINENUM}32722, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32723, 'IsPermutation(P)', True);
  Test({LINENUM}32724, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32725, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32726, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32727, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32729, 'A ≔ ❨❨5, 4, 7, 5, 0, 3, 2, 6❩, ❨4, 5, 2, 1, 3, 6, 5, 8❩, ❨7, 3, 1, 0, 5, 2, 6, 9❩, ❨10, 8, 14, 10, 0, 6, 4, 12❩, ❨4, 3, 0, 2, 1, 5, 6, 7❩, ❨6, 5, 4, 8, 2, 3, 3, 6❩, ❨5, 2, 0, 1, 3, 5, 7, 8❩, ❨6, 5, 2, 0, 1, 4, 1, 2❩❩;', null);
  Test({LINENUM}32730, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32731, 'IsPermutation(P)', True);
  Test({LINENUM}32732, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32733, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32734, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32735, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32737, 'A ≔ CirculantMatrix(❨1, 2, 3, 4, 5, 6, 7, 8, 9❩);', null);
  Test({LINENUM}32738, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32739, 'IsPermutation(P)', True);
  Test({LINENUM}32740, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32741, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32742, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32743, 'A ≈ P*⋅L⋅U', True);

  StartStopwatch;
  _i := RandSeed;
  try
    RandSeed := 4318675;
    for _j := 1 to 1000 do
    begin
      Test({LINENUM}32751, 'A ≔ RandomMatrix(10);', null);
      Test({LINENUM}32752, '(P, L, U) ≔ LU(A);', null);
      Test({LINENUM}32753, 'IsPermutation(P)', True);
      Test({LINENUM}32754, 'IsLowerTriangular(L)', True);
      Test({LINENUM}32755, 'IsUpperTriangular(U)', True);
      Test({LINENUM}32756, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
      Test({LINENUM}32757, 'A ≈ P*⋅L⋅U', True);
    end;
  finally
    RandSeed := _i;
  end;
  StopStopwatch;
  TestDuration({LINENUM}32763, 0.5);

{$IFNDEF QuickTest}
  StartStopwatch;
  _i := RandSeed;
  try
    RandSeed := 4318675;
    for _j := 1 to 100 do
    begin
      Test({LINENUM}32772, Format('A ≔ RandomMatrix(%d);', [_j]), null);
      Test({LINENUM}32773, '(P, L, U) ≔ LU(A);', null);
      Test({LINENUM}32774, 'IsPermutation(P)', True);
      Test({LINENUM}32775, 'IsLowerTriangular(L)', True);
      Test({LINENUM}32776, 'IsUpperTriangular(U)', True);
      Test({LINENUM}32777, 'IsRealType(P) ∧ IsRealType(L) ∧ IsRealType(U)', True);
      Test({LINENUM}32778, 'A ≈ P*⋅L⋅U', True);
    end;
  finally
    RandSeed := _i;
  end;
  StopStopwatch;
  TestDuration({LINENUM}32784, 20);
{$ENDIF}

  Test({LINENUM}32787, 'A ≔ ❨❨4, 0, 2, 3❩, ❨4, 8, 9, 6❩, ❨2, 0, 1, 4❩❩;', null);
  Test({LINENUM}32788, '(P, L, U) ≔ LU(A);', failure, 'LU decomposition only implemented for square matrices.');

  Test({LINENUM}32790, 'A ≔ ❨❨4, 0❩, ❨4, 8❩, ❨2, 0❩❩;', null);
  Test({LINENUM}32791, '(P, L, U) ≔ LU(A);', failure, 'LU decomposition only implemented for square matrices.');

  Test({LINENUM}32793, 'A ≔ ❨❨5, 3, i❩, ❨1, −i, 7❩, ❨4, 9, 2❩❩;', null);
  Test({LINENUM}32794, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32795, 'IsPermutation(P)', True);
  Test({LINENUM}32796, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32797, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32798, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32800, 'A ≔ ❨❨5, 3, i, 5❩, ❨1, 0, 8, i❩, ❨9, 2, 6, 5❩, ❨i, i, 2, 3❩❩;', null);
  Test({LINENUM}32801, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32802, 'IsPermutation(P)', True);
  Test({LINENUM}32803, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32804, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32805, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32807, 'A ≔ ❨❨5, 3, i, 5, 9❩, ❨1, 2, 9, 2, 3❩, ❨5, 7, i, 6, 3❩, ❨4, 1, 2, i, 6❩, ❨5, 7, 0, 1, 4❩❩;', null);
  Test({LINENUM}32808, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32809, 'IsPermutation(P)', True);
  Test({LINENUM}32810, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32811, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32812, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32814, 'A ≔ ❨❨5, i, 3, 0, 2, 4❩, ❨9, 0, 1, 2, 4, 6❩, ❨9, 0, 2, 3, 6, i❩, ❨4, 1, 7, 0, 9, 5❩, ❨6, 3, 2, 5, 0, i❩, ❨1, 20, 3, −5, 6, −9❩❩;', null);
  Test({LINENUM}32815, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32816, 'IsPermutation(P)', True);
  Test({LINENUM}32817, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32818, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32819, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32821, 'A ≔ ❨❨5, 3, 0, 2, i, 4, 6❩, ❨2, 8, 0, 4, i, 6, 3❩, ❨7, 0, 21, i, 6, 3, 5❩, ❨0, 0, 0, 0, 0, 0, 0❩, ❨4, 8, i, 6, i, 1, 2❩, ❨5, 6, 9, 0, 2, 6, 7❩, ❨9, i, 4, 6, 3, 2, 4❩❩;', null);
  Test({LINENUM}32822, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32823, 'IsPermutation(P)', True);
  Test({LINENUM}32824, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32825, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32826, 'A ≈ P*⋅L⋅U', True);

  Test({LINENUM}32828, 'A ≔ ❨❨i, i, i, 1, 5, 2, 3, 0❩, ❨4, 6, 0, 3, 5, 9, 4, i❩, ❨1 + i, 2, 3, 6, 5, 8, 4 − 3⋅i, 5❩, ❨4, 6, 3, 0, 5, 8, 9, 7❩, ❨1, i, 6, 3, 2, 5, 0, 4❩, ❨5, 6, −7, −2, 1, 2, 33, 1000❩, ❨5, 6, 9, 8, 0, 1, 2, 0❩, ❨0, 0, 0, 0, 0, 0, 0, 0❩❩;', null);
  Test({LINENUM}32829, '(P, L, U) ≔ LU(A);', null);
  Test({LINENUM}32830, 'IsPermutation(P)', True);
  Test({LINENUM}32831, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32832, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32833, 'A ≈ P*⋅L⋅U', True);

  StartStopwatch;
  _i := RandSeed;
  try
    RandSeed := 4318675;
    for _j := 1 to 1000 do
    begin
      Test({LINENUM}32841, 'A ≔ RandomMatrix(10) + RandomMatrix(10)⋅i;', null);
      Test({LINENUM}32842, '(P, L, U) ≔ LU(A);', null);
      Test({LINENUM}32843, 'IsPermutation(P)', True);
      Test({LINENUM}32844, 'IsLowerTriangular(L)', True);
      Test({LINENUM}32845, 'IsUpperTriangular(U)', True);
      Test({LINENUM}32846, 'A ≈ P*⋅L⋅U', True);
    end;
  finally
    RandSeed := _i;
  end;
  StopStopwatch;
  TestDuration({LINENUM}32852, 0.8);

  Test({LINENUM}32854, 'A ≔ ❨❨4, i, 2, 3❩, ❨4, 8, 9, 6❩, ❨2, 0, 1, 4❩❩;', null);
  Test({LINENUM}32855, '(P, L, U) ≔ LU(A);', failure, 'LU decomposition only implemented for square matrices.');

  Test({LINENUM}32857, 'A ≔ ❨❨4, i❩, ❨4, 8❩, ❨2, 0❩❩;', null);
  Test({LINENUM}32858, '(P, L, U) ≔ LU(A);', failure, 'LU decomposition only implemented for square matrices.');

  Test({LINENUM}32860, 'A ≔ ❨❨6, 2, 3❩, ❨4, 2, 8❩, ❨1, 0, 7❩❩;', null);
  Test({LINENUM}32861, '(L, U) ≔ LU(A);', null);
  Test({LINENUM}32862, 'IsLowerTriangular(L)', True);
  Test({LINENUM}32863, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32864, 'IsRealType(L) ∧ IsRealType(U)', True);
  Test({LINENUM}32865, 'A ≈ L⋅U', True);

  Test({LINENUM}32867, 'delete(A); delete(P); delete(L); delete(U)', success);

  // Cholesky decomposition

  Test({LINENUM}32871, 'A ≔ ❨❨6, 3, 2❩, ❨4, 0, 7❩, ❨4, 5, 8❩❩; U ≔ Cholesky(A)', failure, 'Couldn''t compute Cholesky factor.');
  Test({LINENUM}32872, 'A ≔ ❨❨1, 3, 6❩, ❨5, 7, 0❩, ❨4, 5, 2❩❩; U ≔ Cholesky(A)', failure, 'Couldn''t compute Cholesky factor.');
  Test({LINENUM}32873, 'A ≔ ❨❨4, 5, 8❩, ❨0, 1, 2❩, ❨6, 3, 7❩❩; U ≔ Cholesky(A)', failure, 'Couldn''t compute Cholesky factor.');
  Test({LINENUM}32874, 'A ≔ ❨❨5, 6, 2, 4❩, ❨0, 1, −2, 7❩, ❨6, 3, 9, 8❩, ❨4, 3, 2, 5❩❩; U ≔ Cholesky(A)', failure, 'Couldn''t compute Cholesky factor.');

  Test({LINENUM}32876, 'A ≔ ❨❨4.93597888649073641, 0.120575953845758162, -1.26079836241812257❩, ❨0.120575953845758162, 5.13324261553148423, -0.672122365157388638❩, ❨-1.26079836241812257, -0.672122365157388638, 5.93077849797777936❩❩;', null);
  Eps; Test({LINENUM}32877, 'eigenvalues(A)', [7, 5, 4]);
  Test({LINENUM}32878, 'IsPositiveDefinite(A)', True);
  Test({LINENUM}32879, 'U ≔ Cholesky(A);', null);
  Test({LINENUM}32880, 'IsRealType(U)', True);
  Test({LINENUM}32881, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32882, 'A ≈ U*⋅U', True);

  Test({LINENUM}32884, 'A ≔ ❨❨3.71446288866910665, 1.97136689961010517, 1.36957261324154093, 1.08432078976074785❩, ❨1.97136689961010517, 2.64085379111499924, 1.03939132918314869, 0.307712302509145893❩, '+'❨1.36957261324154093, 1.03939132918314869, 3.7026136585939855, 1.34869495616383325❩, ❨1.08432078976074785, 0.307712302509145893, 1.34869495616383325, 2.94206966162190861❩❩;', null);
  Eps; Test({LINENUM}32885, 'eigenvalues(A)', [7, 3, 2, 1]);
  Test({LINENUM}32886, 'IsPositiveDefinite(A)', True);
  Test({LINENUM}32887, 'U ≔ Cholesky(A);', null);
  Test({LINENUM}32888, 'IsRealType(U)', True);
  Test({LINENUM}32889, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32890, 'A ≈ U*⋅U', True);

  Test({LINENUM}32892, 'A ≔ ❨❨4.69244961335086436, -6.99003683346844873, -5.70144991196682375, 14.5654009984260046, -1.79267787409596933❩, ❨-6.99003683346844873, 14.102246678978645, 6.84207579510503739, -29.4503294077709206, 5.333709056019228❩, '+'❨-5.70144991196682375, 6.84207579510503739, 9.34933653581810971, -16.8252095806600843, 2.26175847549628046❩, ❨14.5654009984260046, -29.4503294077709206, -16.8252095806600843, 79.0669934855477114, -14.656691988681412❩, '+'❨-1.79267787409596933, 5.333709056019228, 2.26175847549628046, -14.656691988681412, 3.79897368630466946❩❩;', null);
  Eps; Test({LINENUM}32893, 'eigenvalues(A)', [100, 7, 3, 1, 0.01]);
  Test({LINENUM}32894, 'IsPositiveDefinite(A)', True);
  Test({LINENUM}32895, 'U ≔ Cholesky(A);', null);
  Test({LINENUM}32896, 'IsRealType(U)', True);
  Test({LINENUM}32897, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32898, 'A ≈ U*⋅U', True);

  Test({LINENUM}32900, 'A ≔ ❨❨3.25569141373115836, 0.354843150024904775, -0.985274339831795524, 0.055669454145733476, -0.239379057083828038, 0.313951103595871587❩, '+'❨0.354843150024904775, 3.92438030278724386, -0.139064360631726472, -0.486972902917455806, 0.335571278864453504, 1.57495113789696396❩, '+'❨-0.985274339831795524, -0.139064360631726472, 4.1059099176304882, 0.457914417220631855, 0.0478988777066919346, -1.57111201529170735❩, '+'❨0.055669454145733476, -0.486972902917455806, 0.457914417220631855, 5.11247207849193247, -0.421896385014884285, -1.28677508019808249❩, '+'❨-0.239379057083828038, 0.335571278864453504, 0.0478988777066919348, -0.421896385014884284, 4.11143853521532303, -0.599959767468462238❩, '+'❨0.313951103595871587, 1.57495113789696396, -1.57111201529170735, -1.28677508019808249, -0.599959767468462238, 5.49010775214385409❩❩;', null);
  Eps; Test({LINENUM}32901, 'eigenvalues(A)', [8, 5, 4, 4, 3, 2]);
  Test({LINENUM}32902, 'IsPositiveDefinite(A)', True);
  Test({LINENUM}32903, 'U ≔ Cholesky(A);', null);
  Test({LINENUM}32904, 'IsRealType(U)', True);
  Test({LINENUM}32905, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32906, 'A ≈ U*⋅U', True);

  StartStopwatch;
  _i := RandSeed;
  try
    RandSeed := 4318675;
    for _j := 1 to 1000 do
    begin
      Test({LINENUM}32914, 'E ≔ GramSchmidt(RandomMatrix(10)); D ≔ diag(RandomIntVector(10, 1, 100)); A ≔ E⋅D⋅E*;', null);
      Test({LINENUM}32915, 'IsPositiveDefinite(A)', True);
      Test({LINENUM}32916, 'U ≔ Cholesky(A);', null);
      Test({LINENUM}32917, 'IsRealType(U)', True);
      Test({LINENUM}32918, 'IsUpperTriangular(U)', True);
      Test({LINENUM}32919, 'A ≈ U*⋅U', True);
    end;
  finally
    RandSeed := _i;
  end;
  StopStopwatch;
  TestDuration({LINENUM}32925, 1.75);

  Test({LINENUM}32927, 'Cholesky(❨❨3, 5, 1❩, ❨1, 2, 3❩❩)', failure, 'Cannot compute Cholesky decomposition of non-square matrix.');

  Test({LINENUM}32929, 'A ≔ ❨❨6, 3, 2❩, ❨4, i, 7❩, ❨4, 5, 8❩❩; U ≔ Cholesky(A)', failure, 'Couldn''t compute Cholesky factor.');
  Test({LINENUM}32930, 'A ≔ ❨❨1, 3, 6❩, ❨5, 7, 0❩, ❨4, 5, i❩❩; U ≔ Cholesky(A)', failure, 'Couldn''t compute Cholesky factor.');
  Test({LINENUM}32931, 'A ≔ ❨❨i, 5, 8❩, ❨i, 1, 2❩, ❨6, 3, 7❩❩; U ≔ Cholesky(A)', failure, 'Couldn''t compute Cholesky factor.');
  Test({LINENUM}32932, 'A ≔ ❨❨5, 6, 2, 4❩, ❨i, 1, −2, 7❩, ❨6, 3, i, 8❩, ❨4, i, 2, 5❩❩; U ≔ Cholesky(A)', failure, 'Couldn''t compute Cholesky factor.');

  Test({LINENUM}32934, 'A ≔ ❨❨4.50691891236022514, 0.805836912347700675 - 0.781252166154897276⋅i, -1.60956385463046235 + 1.10788519536159756⋅i❩, '+'❨0.805836912347700675 + 0.781252166154897276⋅i, 5.86871548240192601 - 2.16840434497100887E-19⋅i, 0.0519096184238235582 - 0.318264548670979053⋅i❩, '+'❨-1.60956385463046235 - 1.10788519536159756⋅i, 0.0519096184238235582 + 0.318264548670979053⋅i, 6.62436560523784885 - 4.06575814682064163E-20⋅i❩❩;', null);
  Eps; Test({LINENUM}32935, 'eigenvalues(A)', [8, 6, 3]);
  Test({LINENUM}32936, 'IsPositiveDefinite(A)', True);
  Test({LINENUM}32937, 'U ≔ Cholesky(A);', null);
  Test({LINENUM}32938, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32939, 'A ≈ U*⋅U', True);

  Test({LINENUM}32941, 'A ≔ ❨❨2.42567155884810701 + 1.69406589450860068E-21⋅i, -0.541458499166476172 + 0.56837332764644428⋅i, -0.393760848951031678 - 0.200974439686655447⋅i, 0.178116003053974962 - 0.306653013032412579⋅i❩, '+'❨-0.541458499166476172 - 0.56837332764644428⋅i, 2.9538256920912331, -0.536922443662477092 - 0.253491327740968221⋅i, -0.689023915988372674 + 0.192306297849908853⋅i❩, '+'❨-0.393760848951031678 + 0.200974439686655447⋅i, -0.536922443662477092 + 0.253491327740968221⋅i, 2.31141835941757323, -0.22890956682993686 + 0.710034350116213099⋅i❩, '+'❨0.178116003053974962 + 0.306653013032412579⋅i, -0.689023915988372674 - 0.192306297849908853⋅i, -0.22890956682993686 - 0.710034350116213099⋅i, 2.30908438964308665❩❩;', null);
  Eps; Test({LINENUM}32942, 'eigenvalues(A)', [4, 3, 2, 1]);
  Test({LINENUM}32943, 'IsPositiveDefinite(A)', True);
  Test({LINENUM}32944, 'U ≔ Cholesky(A);', null);
  Test({LINENUM}32945, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32946, 'A ≈ U*⋅U', True);

  Test({LINENUM}32948, 'A ≔ ❨❨36.3817607324922451 + 8.67361737988403547E-19⋅i, -36.6631490448397316 + 11.9438621354627077⋅i, 16.1462702944291521 - 6.45264231481579467⋅i, 8.32436985104583655 + 0.472261109207546581⋅i, -9.19237247530613032 + 12.7318875244064349⋅i❩, '+
    '❨-36.6631490448397316 - 11.9438621354627077⋅i, 67.8912853886941801 - 1.73472347597680709E-18⋅i, -3.70294041953983936 - 6.47584262976698282⋅i, -10.0301011261191165 + 4.80142282853594383⋅i, -15.6514488868485211 - 1.84532777081835844⋅i❩, '+
    '❨16.1462702944291521 + 6.45264231481579467⋅i, -3.70294041953983936 + 6.47584262976698282⋅i, 20.2238960752888459, 1.0433984716634792 + 6.91050096705167366⋅i, -27.3678999125304748 - 1.06525611362937123⋅i❩, '+
    '❨8.32436985104583655 - 0.472261109207546581⋅i, -10.0301011261191165 - 4.80142282853594383⋅i, 1.0433984716634792 - 6.91050096705167366⋅i, 8.00119570117276258, 3.66804497600672684 + 15.1619742113008918⋅i❩, '+
    '❨-9.19237247530613032 - 12.7318875244064349⋅i, -15.6514488868485211 + 1.84532777081835844⋅i, -27.3678999125304748 + 1.06525611362937123⋅i, 3.66804497600672684 - 15.1619742113008918⋅i, 53.5118621023519662❩❩;', null);
  Eps; Test({LINENUM}32953, 'eigenvalues(A)', [100, 80, 4, 2, 0.01]);
  Test({LINENUM}32954, 'IsPositiveDefinite(A)', True);
  Test({LINENUM}32955, 'U ≔ Cholesky(A);', null);
  Test({LINENUM}32956, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32957, 'A ≈ U*⋅U', True);

  Test({LINENUM}32959, 'A ≔ ❨❨4.34340365873964928 + 2.71050543121376108E-20⋅i, -0.270944788535373213 + 0.579123555674773119⋅i, 0.19735481426685348 + 0.0124292686296485832⋅i, '+'3.97275958037236907 - 3.12323842085080762⋅i, 0.561937145744118512 - 0.72958734512521⋅i, -0.6262804092054267 + 1.7607648350037341⋅i❩, '+
    '❨-0.270944788535373213 - 0.579123555674773119⋅i, 5.79497317381224502 + 3.81164826264435153E-21⋅i, -0.0730171048477857757 - 0.0286433657347114163⋅i, '+'-3.11349167800771644 + 0.666002984820350029⋅i, -0.364589053672550824 + 1.59369429955185477⋅i, 3.30418029981095185 + 1.09829976554579104⋅i❩, '+
    '❨0.19735481426685348 - 0.0124292686296485833⋅i, -0.0730171048477857757 + 0.0286433657347114163⋅i, 5.13651914269719606 - 1.33407689192552303E-20⋅i, 0.867664101100140022 - 1.21101352008563466⋅i, '+'1.73306691447269943 - 1.40209341706461094⋅i, 0.726979190979306421 + 0.98143185800994314⋅i❩, '+
    '❨3.97275958037236907 + 3.12323842085080762⋅i, -3.11349167800771644 - 0.666002984820350029⋅i, 0.867664101100140022 + 1.21101352008563466⋅i, 10.4528342533782368 + 1.74700545371199445E-21⋅i, '+'4.1144040114747787 - 0.33680898741005859⋅i, -3.97640945258550905 - 2.41659196047885716⋅i❩, '+
    '❨0.561937145744118512 + 0.72958734512521⋅i, -0.364589053672550824 - 1.59369429955185477⋅i, 1.73306691447269943 + 1.40209341706461094⋅i, 4.1144040114747787 + 0.33680898741005859⋅i, '+'5.20913085698579575 - 1.07573184301296143E-19⋅i, -2.57546656541027782 - 2.58593478583507784⋅i❩, '+
    '❨-0.6262804092054267 - 1.7607648350037341⋅i, 3.30418029981095185 - 1.09829976554579104⋅i, 0.726979190979306421 - 0.98143185800994314⋅i, -3.97640945258550905 + 2.41659196047885716⋅i, '+'-2.57546656541027782 + 2.58593478583507784⋅i, 8.36313891438687709 - 1.21972744404619249E-19⋅i❩❩;', null);
  Eps; Test({LINENUM}32965, 'eigenvalues(A)', [20, 8, 6, 4, 1, 0.3]);
  Test({LINENUM}32966, 'IsPositiveDefinite(A)', True);
  Test({LINENUM}32967, 'U ≔ Cholesky(A);', null);
  Test({LINENUM}32968, 'IsUpperTriangular(U)', True);
  Test({LINENUM}32969, 'A ≈ U*⋅U', True);

  StartStopwatch;
  _i := RandSeed;
  try
    RandSeed := 4318675;
    for _j := 1 to 100 do
    begin
      Test({LINENUM}32977, 'E ≔ GramSchmidt(RandomMatrix(10) + RandomMatrix(10)⋅i); D ≔ diag(RandomIntVector(10, 1, 100)); A ≔ E⋅D⋅E*;', null);
      Test({LINENUM}32978, 'IsPositiveDefinite(A)', True);
      Test({LINENUM}32979, 'U ≔ Cholesky(A);', null);
      Test({LINENUM}32980, 'IsUpperTriangular(U)', True);
      Test({LINENUM}32981, 'A ≈ U*⋅U', True);
    end;
  finally
    RandSeed := _i;
  end;
  StopStopwatch;
  TestDuration({LINENUM}32987, 0.75);

  Test({LINENUM}32989, 'Cholesky(❨❨3, 5, i❩, ❨1, 2, 3❩❩)', failure, 'Cannot compute Cholesky decomposition of non-square matrix.');

  Test({LINENUM}32991, 'delete(A); delete(E); delete(D); delete(U)', success);

  // Singular values

  Eps(1E-14); Test({LINENUM}32995, 'A ≔ ❨❨6, 3, 2❩, ❨1, 0, 4❩, ❨7, 5, 9❩❩; SingularValues(A)',
    [14.299417303552637, 3.955854687507967, 0.936951690419907]);

  Eps(1E-14); Test({LINENUM}32998, 'A ≔ ❨❨6, 3, 2, 8❩, ❨−1, 4, 5, 3❩, ❨5, 6, 9, 0❩, ❨1, 3, 4, 2❩❩; SingularValues(A)',
    [15.972205617385749, 7.872260828866542, 4.348624447378992, 0.074983824272194]);

  Eps(1E-14); Test({LINENUM}33001, 'A ≔ ❨❨0, 2, 8, 5, 1❩, ❨9, 3, 5, 4, 6❩, ❨1, 0, 2, 4, 7❩, ❨5, 2, 6, 3, 7❩, ❨4, 0, 1, 2, 4❩❩; SingularValues(A)',
    [20.060555101346626, 7.551329780423160, 5.251105360879447, 1.872338213422416, 0.686869475687951]);

  Eps(1E-14); Test({LINENUM}33004, 'A ≔ ❨❨2, 3, 6, 5, 8, 1❩, ❨4, 5, 6, 3, 2, 6❩, ❨9, 0, 1, 4, 5, 2❩, ❨4, 1, 4, 2, 8, 0❩, ❨6, 9, 0, 1, 4, 5❩, ❨6, 3, 2, 5, 8, 7❩❩; SingularValues(A)',
    [25.493993327503308, 9.561016689465456, 7.373500539267359, 5.077075421109402, 3.761916202225462, 1.829219925051135]);

  Eps(1E-14); Test({LINENUM}33007, 'A ≔ ❨❨5, 6, 3, 2, 1❩, ❨4, 5, 2, 8, 0❩, ❨4, 9, 6, 3, 5❩❩; SingularValues(A)',
    [17.527362377345845, 6.092045778009372, 2.584288360814148]);

  Eps(1E-14); Test({LINENUM}33010, 'A ≔ ❨❨5, 8❩, ❨1, 3❩, ❨5, 9❩, ❨5, −4❩, ❨1, 8❩, ❨3, −4❩❩; SingularValues(A)',
    [16.493005456603921, 7.998798097741513]);

  Eps(1E-14); Test({LINENUM}33013, 'A ≔ ❨❨5, i, 3❩, ❨1, 0, i❩, ❨4, 5, 7❩❩; SingularValues(A)',
    [10.628784294206016, 3.642097016433973, 0.874113122039879]);

  Eps(1E-14); Test({LINENUM}33016, 'A ≔ ❨❨5, 2, i, 4❩, ❨1, 0, 3, 6❩, ❨6, 3, i, 1❩, ❨i, 7, 4, 9❩❩; SingularValues(A)',
    [14.604621042142906, 7.538203029364286, 3.837684363640320, 1.073647068896616]);

  Eps(1E-14); Test({LINENUM}33019, 'A ≔ ❨❨3, 6, 2, 4, i❩, ❨5, 7, 4, 1, 5❩, ❨1, 0, i, 6, 9❩, ❨6, 3, 2, 5, 8❩, ❨4, 5, i, 8, 9❩❩; SingularValues(A)',
    [22.668597020219032, 9.181152640007719, 4.621352049130089, 2.227629797014103, 1.233659621310555]);

  Eps(1E-14); Test({LINENUM}33022, 'A ≔ ❨❨3, 2, 5, 1, i, 4❩, ❨4, 0, 3, 2, 1, 6❩, ❨8, 7, i, 4, 5, 6❩, ❨4, 5, 6, 1, 0, 8❩, ❨6, 5, 2, 7, 8, i❩, ❨7, 5, 0, 2, 9, 6❩❩; SingularValues(A)',
    [25.412555473507545, 11.281608112707431, 5.787205131709382, 3.683491102796632, 2.882401896112685, 0.747831575701784]);

  Eps(1E-14); Test({LINENUM}33025, 'A ≔ ❨❨2, 5, 6, 8, 7❩, ❨i, 4, 5, 1, 2❩❩; SingularValues(A)',
    [14.486417927389791, 3.891490155840011]);

  Eps(1E-14); Test({LINENUM}33028, 'A ≔ ❨❨5, 1, 2❩, ❨6, i, 2❩, ❨9, 7, 4❩, ❨5, 6, i❩, ❨5, 3, −3❩❩; SingularValues(A)',
    [16.624178394796832, 5.433725873857354, 4.013890360453734]);

  Eps(1E-14); Test({LINENUM}33031, 'A ≔ ❨❨3, 5, 0, 2, −8, 7, 3, 2❩❩; SingularValues(A)',
    [12.806248474865699]);

  Eps(1E-14); Test({LINENUM}33034, 'A ≔ ❨❨5❩, ❨2❩, ❨i❩, ❨−3❩❩; SingularValues(A)',
    [6.244997998398398]);

  Test({LINENUM}33037, 'delete(A)', success);

  // Similar Hessenberg matrix

  Test({LINENUM}33041, 'A ≔ ❨❨6, 1, 3❩, ❨7, 3, 1❩, ❨2, 4, 6❩❩;', null);
  Test({LINENUM}33042, '(H, U) ≔ Hessenberg(A);', null);
  Test({LINENUM}33043, 'IsRealType(H) ∧ IsRealType(U)', True);
  Test({LINENUM}33044, 'IsOrthogonal(U) ∧ IsUpperHessenberg(H)', True);
  Test({LINENUM}33045, 'A ≈ U ⋅ H ⋅ U*', True);

  Test({LINENUM}33047, 'A ≔ ❨❨3, 0, 2, 5❩, ❨7, 1, 4, 5❩, ❨−3, 6, 8, 9❩, ❨4, 5, 2, 6❩❩;', null);
  Test({LINENUM}33048, '(H, U) ≔ Hessenberg(A);', null);
  Test({LINENUM}33049, 'IsRealType(H) ∧ IsRealType(U)', True);
  Test({LINENUM}33050, 'IsOrthogonal(U) ∧ IsUpperHessenberg(H)', True);
  Test({LINENUM}33051, 'A ≈ U ⋅ H ⋅ U*', True);

  Test({LINENUM}33053, 'A ≔ ❨❨6, 3, 0, 2, 5❩, ❨7, 1, 0, 6, 5❩, ❨8, 1, 4, 5, 6❩, ❨8, 5, 2, 3, 6❩, ❨4, 5, 2, 0, 1❩❩;', null);
  Test({LINENUM}33054, '(H, U) ≔ Hessenberg(A);', null);
  Test({LINENUM}33055, 'IsRealType(H) ∧ IsRealType(U)', True);
  Test({LINENUM}33056, 'IsOrthogonal(U) ∧ IsUpperHessenberg(H)', True);
  Test({LINENUM}33057, 'A ≈ U ⋅ H ⋅ U*', True);

  Test({LINENUM}33059, 'A ≔ ❨❨6, 5, 2, 0, 1, 4❩, ❨8, 5, 0, 4, 1, 9❩, ❨−5, 2, 3, 6, −4, 7❩, ❨8, 0, 1, 4, 5, 3❩, ❨6, 5, 2, 3, 0, 4❩, ❨8, 5, 6, 9, −7, 5❩❩;', null);
  Test({LINENUM}33060, '(H, U) ≔ Hessenberg(A);', null);
  Test({LINENUM}33061, 'IsRealType(H) ∧ IsRealType(U)', True);
  Test({LINENUM}33062, 'IsOrthogonal(U) ∧ IsUpperHessenberg(H)', True);
  Test({LINENUM}33063, 'A ≈ U ⋅ H ⋅ U*', True);

  Test({LINENUM}33065, 'A ≔ ❨❨8, 0, 1, 4, 5, 3❩, ❨6, 5, 2, 3, 0, 4❩, ❨8, 5, 6, 9, −7, 5❩❩;', null);
  Test({LINENUM}33066, '(H, U) ≔ Hessenberg(A);', failure, 'Cannot find similar Hessenberg matrix of non-square matrix.');

  Test({LINENUM}33068, 'A ≔ ❨❨5, i, 6❩, ❨1, 3, 4❩, ❨6, 0, 4❩❩;', null);
  Test({LINENUM}33069, '(H, U) ≔ Hessenberg(A);', null);
  Test({LINENUM}33070, 'IsUnitary(U) ∧ IsUpperHessenberg(H)', True);
  Test({LINENUM}33071, 'A ≈ U ⋅ H ⋅ U*', True);

  Test({LINENUM}33073, 'A ≔ ❨❨3, 5, i, 9❩, ❨5, 2, 1, 4❩, ❨1, 2, 5, i❩, ❨7, 0, 9, 6❩❩;', null);
  Test({LINENUM}33074, '(H, U) ≔ Hessenberg(A);', null);
  Test({LINENUM}33075, 'IsUnitary(U) ∧ IsUpperHessenberg(H)', True);
  Test({LINENUM}33076, 'A ≈ U ⋅ H ⋅ U*', True);

  Test({LINENUM}33078, 'A ≔ ❨❨6, 2, 5, 4, i❩, ❨5, 0, 1, 4, 9❩, ❨8, 0, 3, 2, 6❩, ❨5, 2, 1, i, 4❩, ❨6, 5, 2, 3, i❩❩;', null);
  Test({LINENUM}33079, '(H, U) ≔ Hessenberg(A);', null);
  Test({LINENUM}33080, 'IsUnitary(U) ∧ IsUpperHessenberg(H)', True);
  Test({LINENUM}33081, 'A ≈ U ⋅ H ⋅ U*', True);

  Test({LINENUM}33083, 'A ≔ ❨❨6, 5, 2, 4, i, 1❩, ❨4, 7, 2, 5, 3, 6❩, ❨5, 4, 7, 8, 9, i❩, ❨6, 0, 2, 4, 3, 1❩, ❨5, 1, 2, 4, 7, 3❩, ❨6, 5, 4, 0, 3, 7❩❩;', null);
  Test({LINENUM}33084, '(H, U) ≔ Hessenberg(A);', null);
  Test({LINENUM}33085, 'IsUnitary(U) ∧ IsUpperHessenberg(H)', True);
  Test({LINENUM}33086, 'A ≈ U ⋅ H ⋅ U*', True);

  Test({LINENUM}33088, 'A ≔ ❨❨8, i❩, ❨6, i❩, ❨8, 5❩❩;', null);
  Test({LINENUM}33089, '(H, U) ≔ Hessenberg(A);', failure, 'Cannot find similar Hessenberg matrix of non-square matrix.');

  Test({LINENUM}33091, 'delete(A); delete(H); delete(U)', success);


  //
  // Misc. matrix functions
  //

  // Minors

  Test({LINENUM}33100, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −1, 4, 5❩, ❨9, 6, 3, 0, 5❩, ❨7, 3, 0, 6, 4❩❩;', null);
  Eps; Test({LINENUM}33101, 'minor(A, 3, 2)', -479.0);
  Eps; Test({LINENUM}33102, 'minor(A, 1, 5)', 45.0);
  Eps; Test({LINENUM}33103, 'minor(A, 4, 3)', -74.0);

  Test({LINENUM}33105, 'minor(A, 6, 3)', failure, 'Invalid row or column index');
  Test({LINENUM}33106, 'minor(A, 2, 7)', failure, 'Invalid row or column index');

  Test({LINENUM}33108, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −1, 4, 5❩❩;', null);
  Test({LINENUM}33109, 'minor(A, 3, 2)', failure, 'Cannot compute determinant of non-square matrix.');

  Test({LINENUM}33111, 'A ≔ ❨❨5, i, 3, 6, 2, −1❩, ❨4, 5, 8, i, 9, −5❩, ❨4, 2, 5, 3, −1, i❩, ❨5, 7, 0, 2, 3, 6❩, ❨−i, 4, 5, 0, 2, 9❩, ❨7, 5, 9, 0, −4, i❩❩;', null);
  Eps; Test({LINENUM}33112, 'minor(A, 5, 2)', 7275 + 1755*ImaginaryUnit);
  Eps; Test({LINENUM}33113, 'minor(A, 3, 6)', 19222 + 2216*ImaginaryUnit);
  Eps; Test({LINENUM}33114, 'minor(A, 4, 4)', 2393 + 213*ImaginaryUnit);
  Eps; Test({LINENUM}33115, 'minor(A, 1, 3)', 63 + 1347*ImaginaryUnit);

  Test({LINENUM}33117, 'minor(A, 7, 3)', failure, 'Invalid row or column index');
  Test({LINENUM}33118, 'minor(A, 2, 120)', failure, 'Invalid row or column index');

  Test({LINENUM}33120, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −i, 4, 5❩❩;', null);
  Test({LINENUM}33121, 'minor(A, 3, 2)', failure, 'Cannot compute determinant of non-square matrix.');

  Test({LINENUM}33123, 'A ≔ ❨❨5, 3❩, ❨4, 1❩❩;', null);
  Eps; Test({LINENUM}33124, 'minor(A, 1, 1)', 1.0);
  Eps; Test({LINENUM}33125, 'minor(A, 1, 2)', 4.0);
  Eps; Test({LINENUM}33126, 'minor(A, 2, 1)', 3.0);
  Eps; Test({LINENUM}33127, 'minor(A, 2, 2)', 5.0);

  Test({LINENUM}33129, 'minor(A, 2, 2, 1)', failure, 'Too many arguments.');
  Test({LINENUM}33130, 'minor(A, 2)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}33131, 'minor(A, 2, -1)', failure, 'A positive integer was expected as argument 3, but "-1" was given.');

  Test({LINENUM}33133, 'A ≔ ❨❨21❩❩;', null);
  Test({LINENUM}33134, 'minor(A, 1, 1)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33136, 'A ≔ ❨❨21, 22, 23, 24, 25❩❩;', null);
  Test({LINENUM}33137, 'minor(A, 1, 4)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33139, 'A ≔ ❨❨1❩, ❨2❩, ❨3❩, ❨4❩❩;', null);
  Test({LINENUM}33140, 'minor(A, 3, 1)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33142, 'A ≔ ❨❨21⋅i❩❩;', null);
  Test({LINENUM}33143, 'minor(A, 1, 1)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33145, 'A ≔ ❨❨21, 22⋅i, 23, 24, 25❩❩;', null);
  Test({LINENUM}33146, 'minor(A, 1, 4)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33148, 'A ≔ ❨❨1❩, ❨2⋅i❩, ❨3❩, ❨4❩❩;', null);
  Test({LINENUM}33149, 'minor(A, 3, 1)', failure, 'A matrix must have size at least 1×1.');

  // Cofactors

  Test({LINENUM}33153, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −1, 4, 5❩, ❨9, 6, 3, 0, 5❩, ❨7, 3, 0, 6, 4❩❩;', null);
  Eps; Test({LINENUM}33154, 'cofactor(A, 3, 2)', 479.0);
  Eps; Test({LINENUM}33155, 'cofactor(A, 1, 5)', 45.0);
  Eps; Test({LINENUM}33156, 'cofactor(A, 4, 3)', 74.0);

  Test({LINENUM}33158, 'cofactor(A, 6, 3)', failure, 'Invalid row or column index');
  Test({LINENUM}33159, 'cofactor(A, 2, 7)', failure, 'Invalid row or column index');

  Test({LINENUM}33161, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −1, 4, 5❩❩;', null);
  Test({LINENUM}33162, 'cofactor(A, 3, 2)', failure, 'Cannot compute determinant of non-square matrix.');

  Test({LINENUM}33164, 'A ≔ ❨❨5, i, 3, 6, 2, −1❩, ❨4, 5, 8, i, 9, −5❩, ❨4, 2, 5, 3, −1, i❩, ❨5, 7, 0, 2, 3, 6❩, ❨−i, 4, 5, 0, 2, 9❩, ❨7, 5, 9, 0, −4, i❩❩;', null);
  Eps; Test({LINENUM}33165, 'cofactor(A, 5, 2)', -7275 - 1755*ImaginaryUnit);
  Eps; Test({LINENUM}33166, 'cofactor(A, 3, 6)', -19222 - 2216*ImaginaryUnit);
  Eps; Test({LINENUM}33167, 'cofactor(A, 4, 4)', 2393 + 213*ImaginaryUnit);
  Eps; Test({LINENUM}33168, 'cofactor(A, 1, 3)', 63 + 1347*ImaginaryUnit);

  Test({LINENUM}33170, 'cofactor(A, 7, 3)', failure, 'Invalid row or column index');
  Test({LINENUM}33171, 'cofactor(A, 2, 120)', failure, 'Invalid row or column index');

  Test({LINENUM}33173, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −i, 4, 5❩❩;', null);
  Test({LINENUM}33174, 'cofactor(A, 3, 2)', failure, 'Cannot compute determinant of non-square matrix.');

  Test({LINENUM}33176, 'A ≔ ❨❨5, 3❩, ❨4, 1❩❩;', null);
  Eps; Test({LINENUM}33177, 'cofactor(A, 1, 1)', 1.0);
  Eps; Test({LINENUM}33178, 'cofactor(A, 1, 2)', -4.0);
  Eps; Test({LINENUM}33179, 'cofactor(A, 2, 1)', -3.0);
  Eps; Test({LINENUM}33180, 'cofactor(A, 2, 2)', 5.0);

  Test({LINENUM}33182, 'cofactor(A, 2, 2, 1)', failure, 'Too many arguments.');
  Test({LINENUM}33183, 'cofactor(A, 2)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}33184, 'cofactor(A, 2, -1)', failure, 'A positive integer was expected as argument 3, but "-1" was given.');

  Test({LINENUM}33186, 'A ≔ ❨❨21❩❩;', null);
  Test({LINENUM}33187, 'cofactor(A, 1, 1)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33189, 'A ≔ ❨❨21, 22, 23, 24, 25❩❩;', null);
  Test({LINENUM}33190, 'cofactor(A, 1, 4)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33192, 'A ≔ ❨❨1❩, ❨2❩, ❨3❩, ❨4❩❩;', null);
  Test({LINENUM}33193, 'cofactor(A, 3, 1)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33195, 'A ≔ ❨❨21⋅i❩❩;', null);
  Test({LINENUM}33196, 'cofactor(A, 1, 1)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33198, 'A ≔ ❨❨21, 22⋅i, 23, 24, 25❩❩;', null);
  Test({LINENUM}33199, 'cofactor(A, 1, 4)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33201, 'A ≔ ❨❨1❩, ❨2⋅i❩, ❨3❩, ❨4❩❩;', null);
  Test({LINENUM}33202, 'cofactor(A, 3, 1)', failure, 'A matrix must have size at least 1×1.');

  // Cofactor matrices

  Test({LINENUM}33206, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −1, 4, 5❩, ❨9, 6, 3, 0, 5❩, ❨7, 3, 0, 6, 4❩❩;', null);
  Eps; Test({LINENUM}33207, 'CofactorMatrix(A)', 5, [-360, 580, -155, 100, 45, 270, -452, 129, -75, -21, -285, 479, -173, 65, 42, 145, -227, 74, -45, -16, 265, -426, 137, -50, -48]);
  Test({LINENUM}33208, 'A ≔ ❨❨5, i, 3, 6, 2, −1❩, ❨4, 5, 8, i, 9, −5❩, ❨4, 2, 5, 3, −1, i❩, ❨5, 7, 0, 2, 3, 6❩, ❨−i, 4, 5, 0, 2, 9❩, ❨7, 5, 9, 0, −4, i❩❩;', null);
  Eps; Test({LINENUM}33209, 'CofactorMatrix(A)', 6, [24305 - 1220*ImaginaryUnit, -26508 - 954*ImaginaryUnit, 63 + 1347*ImaginaryUnit, -11186 - 2548*ImaginaryUnit, 9067 + 2170*ImaginaryUnit,
    9867 + 1894*ImaginaryUnit, -2217 - 1021*ImaginaryUnit, 2724 + 1074*ImaginaryUnit, 1851 - 1011*ImaginaryUnit, -564 + 2152*ImaginaryUnit, 3539 - 3447*ImaginaryUnit,
    -2912 + 604*ImaginaryUnit, -49001 + 5799*ImaginaryUnit, 47382 + 2256*ImaginaryUnit, 3117 - 5727*ImaginaryUnit, 42767 - 8661*ImaginaryUnit, -18957 - 4723*ImaginaryUnit,
    -19222 - 2216*ImaginaryUnit, 76 - 3930*ImaginaryUnit, 8988 - 1884*ImaginaryUnit, -5370 + 3624*ImaginaryUnit, 2393 + 213*ImaginaryUnit, -489 - 1195*ImaginaryUnit,
    -466 - 902*ImaginaryUnit, 1535 + 5113*ImaginaryUnit, -7275 - 1755*ImaginaryUnit, 4077 - 3333*ImaginaryUnit, -3572 - 2032*ImaginaryUnit, 3268 + 946*ImaginaryUnit,
    6765 - 2009*ImaginaryUnit, 20239 - 4748*ImaginaryUnit, -15867 - 915*ImaginaryUnit, 1428 + 882*ImaginaryUnit, -17545 + 4877*ImaginaryUnit, 2548 + 4439*ImaginaryUnit,
    6220 + 1179*ImaginaryUnit]);
  Test({LINENUM}33216, 'A ≔ ❨❨5, 3❩, ❨4, 1❩❩;', null);
  Eps; Test({LINENUM}33217, 'CofactorMatrix(A)', 2, [1, -4, -3, 5]);

  Test({LINENUM}33219, 'CofactorMatrix(A, 2)', failure, 'Too many arguments.');

  Test({LINENUM}33221, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −1, 4, 5❩❩;', null);
  Test({LINENUM}33222, 'CofactorMatrix(A)', failure, 'Cannot compute cofactor matrix of non-square matrix.');

  Test({LINENUM}33224, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −i, 4, 5❩❩;', null);
  Test({LINENUM}33225, 'CofactorMatrix(A)', failure, 'Cannot compute cofactor matrix of non-square matrix.');

  Test({LINENUM}33227, 'A ≔ ❨❨21❩❩;', null);
  Test({LINENUM}33228, 'CofactorMatrix(A)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33230, 'A ≔ ❨❨21, 22⋅i, 23, 24, 25❩❩;', null);
  Test({LINENUM}33231, 'CofactorMatrix(A)', failure, 'Cannot compute cofactor matrix of non-square matrix.');

  Test({LINENUM}33233, 'A ≔ ❨❨1❩, ❨2❩, ❨3❩, ❨4❩❩;', null);
  Test({LINENUM}33234, 'CofactorMatrix(A)', failure, 'Cannot compute cofactor matrix of non-square matrix.');

  // Adjugate matrices

  Test({LINENUM}33238, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −1, 4, 5❩, ❨9, 6, 3, 0, 5❩, ❨7, 3, 0, 6, 4❩❩;', null);
  Eps; Test({LINENUM}33239, 'AdjugateMatrix(A)', 5, [-360, 270, -285, 145, 265, 580, -452, 479, -227, -426, -155, 129, -173, 74, 137, 100, -75, 65, -45, -50, 45, -21, 42, -16, -48]);
  Test({LINENUM}33240, 'A ≔ ❨❨5, i, 3, 6, 2, −1❩, ❨4, 5, 8, i, 9, −5❩, ❨4, 2, 5, 3, −1, i❩, ❨5, 7, 0, 2, 3, 6❩, ❨−i, 4, 5, 0, 2, 9❩, ❨7, 5, 9, 0, −4, i❩❩;', null);
  Eps; Test({LINENUM}33241, 'AdjugateMatrix(A)', 6, [24305 - 1220*ImaginaryUnit, -2217 - 1021*ImaginaryUnit, -49001 + 5799*ImaginaryUnit, 76 - 3930*ImaginaryUnit,
    1535 + 5113*ImaginaryUnit, 20239 - 4748*ImaginaryUnit, -26508 - 954*ImaginaryUnit, 2724 + 1074*ImaginaryUnit, 47382 + 2256*ImaginaryUnit,
    8988 - 1884*ImaginaryUnit, -7275 - 1755*ImaginaryUnit, -15867 - 915*ImaginaryUnit, 63 + 1347*ImaginaryUnit, 1851 - 1011*ImaginaryUnit,
    3117 - 5727*ImaginaryUnit, -5370 + 3624*ImaginaryUnit, 4077 - 3333*ImaginaryUnit, 1428 + 882*ImaginaryUnit, -11186 - 2548*ImaginaryUnit,
    -564 + 2152*ImaginaryUnit, 42767 - 8661*ImaginaryUnit, 2393 + 213*ImaginaryUnit, -3572 - 2032*ImaginaryUnit, -17545 + 4877*ImaginaryUnit,
    9067 + 2170*ImaginaryUnit, 3539 - 3447*ImaginaryUnit, -18957 - 4723*ImaginaryUnit, -489 - 1195*ImaginaryUnit, 3268 + 946*ImaginaryUnit,
    2548 + 4439*ImaginaryUnit, 9867 + 1894*ImaginaryUnit, -2912 + 604*ImaginaryUnit, -19222 - 2216*ImaginaryUnit, -466 - 902*ImaginaryUnit,
    6765 - 2009*ImaginaryUnit, 6220 + 1179*ImaginaryUnit]);
  Test({LINENUM}33249, 'A ≔ ❨❨5, 3❩, ❨4, 1❩❩;', null);
  Eps; Test({LINENUM}33250, 'AdjugateMatrix(A)', 2, [1, -3, -4, 5]);

  Test({LINENUM}33252, 'AdjugateMatrix(A, 2)', failure, 'Too many arguments.');

  Test({LINENUM}33254, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −1, 4, 5❩❩;', null);
  Test({LINENUM}33255, 'AdjugateMatrix(A)', failure, 'Cannot compute cofactor matrix of non-square matrix.');

  Test({LINENUM}33257, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −i, 4, 5❩❩;', null);
  Test({LINENUM}33258, 'AdjugateMatrix(A)', failure, 'Cannot compute cofactor matrix of non-square matrix.');

  Test({LINENUM}33260, 'A ≔ ❨❨21❩❩;', null);
  Test({LINENUM}33261, 'AdjugateMatrix(A)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}33263, 'A ≔ ❨❨21, 22⋅i, 23, 24, 25❩❩;', null);
  Test({LINENUM}33264, 'AdjugateMatrix(A)', failure, 'Cannot compute cofactor matrix of non-square matrix.');

  Test({LINENUM}33266, 'A ≔ ❨❨1❩, ❨2❩, ❨3❩, ❨4❩❩;', null);
  Test({LINENUM}33267, 'AdjugateMatrix(A)', failure, 'Cannot compute cofactor matrix of non-square matrix.');

  Test({LINENUM}33269, 'A ≔ ❨❨6, 3, 2, 5, 7❩, ❨4, 1, 0, 5, 8❩, ❨7, 3, −1, 4, 5❩, ❨9, 6, 3, 0, 5❩, ❨7, 3, 0, 6, 4❩❩;', null);
  Test({LINENUM}33270, 'C ≔ CofactorMatrix(A); Adj ≔ AdjugateMatrix(A);', null);
  Test({LINENUM}33271, 'C = transpose(Adj)', True);
  Test({LINENUM}33272, 'SameValue(Adj ⋅ A, det(A) ⋅ IdentityMatrix(5), 1E−15)', True);
  Test({LINENUM}33273, 'SameValue(A ⋅ Adj, det(A) ⋅ IdentityMatrix(5), 1E−15)', True);
  Test({LINENUM}33274, 'A^−1 ≈ det(A)^−1 ⋅ Adj', True);

  Test({LINENUM}33276, 'A ≔ ❨❨5, i, 3, 6, 2, −1❩, ❨4, 5, 8, i, 9, −5❩, ❨4, 2, 5, 3, −1, i❩, ❨5, 7, 0, 2, 3, 6❩, ❨−i, 4, 5, 0, 2, 9❩, ❨7, 5, 9, 0, −4, i❩❩;', null);
  Test({LINENUM}33277, 'C ≔ CofactorMatrix(A); Adj ≔ AdjugateMatrix(A);', null);
  Test({LINENUM}33278, 'C = transpose(Adj)', True);
  Test({LINENUM}33279, 'SameValue(Adj ⋅ A, det(A) ⋅ IdentityMatrix(6), 1E−13)', True);
  Test({LINENUM}33280, 'SameValue(A ⋅ Adj, det(A) ⋅ IdentityMatrix(6), 1E−13)', True);
  Test({LINENUM}33281, 'A^−1 ≈ det(A)^−1 ⋅ Adj', True);

  Test({LINENUM}33283, 'x ≔ ❨1, 5, i, 3, 2, −3❩; b ≔ A⋅x;', null);
  Test({LINENUM}33284, 'x ≈ Adj ⋅ b / det(A)', True);
  Test({LINENUM}33285, 'x[1] ≈ det(ReplaceCol(A, 1, b)) / det(A)', True);
  Test({LINENUM}33286, 'x[2] ≈ det(ReplaceCol(A, 2, b)) / det(A)', True);
  Test({LINENUM}33287, 'x[3] ≈ det(ReplaceCol(A, 3, b)) / det(A)', True);
  Test({LINENUM}33288, 'x[4] ≈ det(ReplaceCol(A, 4, b)) / det(A)', True);
  Test({LINENUM}33289, 'x[5] ≈ det(ReplaceCol(A, 5, b)) / det(A)', True);
  Test({LINENUM}33290, 'x[6] ≈ det(ReplaceCol(A, 6, b)) / det(A)', True);

  Test({LINENUM}33292, 'delete(A); delete(C); delete(Adj); delete(x); delete(b)', success);

  // Nilpotency index

  Test({LINENUM}33296, 'A ≔ ❨❨0, 5, 3, 1, 4❩, ❨0, 0, 2, 6, 3❩, ❨0, 0, 0, 5, 3❩, ❨0, 0, 0, 0, 7❩, ❨0, 0, 0, 0, 0❩❩;', null);
  Test({LINENUM}33297, 'NilpotencyIndex(A)', 5);

  Test({LINENUM}33299, 'A ≔ ❨❨0, 6, -96, 90, -30, -54, 44, -73, -91, -53❩, ❨0, 0, 84, 63, -10, 10, -19, 54, 54, -17❩, '+'❨0, 0, 0, -98, -38, 87, -86, -30, -29, 10❩, ❨0, 0, 0, 0, 15, -35, -18, 95, 14, 35❩, '+'❨0, 0, 0, 0, 0, 58, 14, -61, -32, -15❩, ❨0, 0, 0, 0, 0, 0, -88, -86, -69, 35❩, '+'❨0, 0, 0, 0, 0, 0, 0, -87, -33, -42❩, ❨0, 0, 0, 0, 0, 0, 0, 0, 90, -85❩, '+'❨0, 0, 0, 0, 0, 0, 0, 0, 0, -52❩, ❨0, 0, 0, 0, 0, 0, 0, 0, 0, 0❩❩;', null);
  Test({LINENUM}33300, 'NilpotencyIndex(A)', 10);

  Test({LINENUM}33302, 'A ≔ ReplaceDiagonal(ToUpperTriangular(RandomIntMatrix(50, 1, 100)), ZeroVector(50));', null);
  Test({LINENUM}33303, 'NilpotencyIndex(A)', 50);

  Test({LINENUM}33305, 'A ≔ ❨❨5, −3, 2❩, ❨15, −9, 6❩, ❨10, −6, 4❩❩;', null);
  Test({LINENUM}33306, 'NilpotencyIndex(A)', 2);

  Test({LINENUM}33308, 'A ≔ ❨❨−4, 2, 5❩, ❨8, −4, −6❩, ❨−8, 4, 8❩❩;', null);
  Test({LINENUM}33309, 'NilpotencyIndex(A)', 3);

  Test({LINENUM}33311, 'A ≔ ❨❨−2, 1, 3, 2❩, ❨−2, 0, 4, −2❩, ❨−4, 2, 4, 4❩, ❨2, −1, −3, −2❩❩;', null);
  Test({LINENUM}33312, 'NilpotencyIndex(A)', 4);

  Test({LINENUM}33314, 'A ≔ ❨❨2, 2, 2, 2, −4❩, ❨7, 1, 1, 1, −5❩, ❨1, 7, 1, 1, −5❩, ❨1, 1, 7, 1, −5❩, ❨1, 1, 1, 7, −5❩❩;', null);
  Test({LINENUM}33315, 'NilpotencyIndex(A)', 5);

  Test({LINENUM}33317, 'A ≔ ❨❨2, -3, -2, -1, 2❩, ❨2, 0, -2, 2, 2❩, ❨-3, -2, -1, -2, 1❩, ❨-1, -2, 1, -3, -1❩, ❨-3, -2, -1, -3, 2❩❩;', null);
  Test({LINENUM}33318, 'NilpotencyIndex(A)', 5);

  Test({LINENUM}33320, 'A ≔ ❨❨0, -4, -1, 1❩, ❨2, -4, 7, -2❩, ❨5, 5, -3, 9❩, ❨5, -2, 5, -5❩❩;', null);
  Test({LINENUM}33321, 'NilpotencyIndex(A)', -1);

  Test({LINENUM}33323, 'A ≔ ❨❨1, 2, -8, -5, 8❩, ❨2, -1, 1, 2, 4❩, ❨8, 7, -6, -9, -5❩, ❨5, -7, -10, 1, 6❩, ❨1, -5, -1, 4, 4❩❩;', null);
  Test({LINENUM}33324, 'NilpotencyIndex(A)', -1);

  Test({LINENUM}33326, 'A ≔ ❨❨5, 4, 7, 8, 2❩, ❨4, 6, 5, 5, 2❩❩;', null);
  Test({LINENUM}33327, 'NilpotencyIndex(A)', failure, 'Cannot find nilpotency index of non-square matrix.');

  for _i := 1 to 50 do
    Test({LINENUM}33330, Format('NilpotencyIndex(BackwardShiftMatrix(%d))', [_i]), _i);

  _j := RandSeed;
  RandSeed := 6411481; // Never needed in practice, of course.
  try
    StartStopwatch;
    for _i := 1 to 100 do
      Test({LINENUM}33337, Format('NilpotencyIndex(RandomMatrix(%d))', [_i]), -1);
    StopStopwatch;
    TestDuration({LINENUM}33339, 0.01);
  finally
    RandSeed := _j;
  end;

  Test({LINENUM}33344, 'A ≔ ❨❨0, 5, 3, i, 4❩, ❨0, 0, 2, 6, 3❩, ❨0, 0, 0, 5, 3❩, ❨0, 0, 0, 0, 7❩, ❨0, 0, 0, 0, 0❩❩;', null);
  Test({LINENUM}33345, 'NilpotencyIndex(A)', 5);

  Test({LINENUM}33347, 'A ≔ ❨❨0, 6, -96, i, -30, -54, 44, -73, -91, -53❩, ❨0, 0, 84, 63, -10, i, -19, 54, 54, -17❩, '+'❨0, 0, 0, -98, -38, i, -86, -30, -29, 10❩, ❨0, 0, 0, 0, 15, -35, -18, i, 14, 35❩, '+'❨0, 0, 0, 0, 0, 58, 14, -61, -32, -15❩, ❨0, 0, 0, 0, 0, 0, -88, -86, -69, 35❩, '+'❨0, 0, 0, 0, 0, 0, 0, -87, -i, -42❩, ❨0, 0, 0, 0, 0, 0, 0, 0, 90, -85❩, '+'❨0, 0, 0, 0, 0, 0, 0, 0, 0, -52❩, ❨0, 0, 0, 0, 0, 0, 0, 0, 0, 0❩❩;', null);
  Test({LINENUM}33348, 'NilpotencyIndex(A)', 10);

  Test({LINENUM}33350, 'A ≔ ReplaceDiagonal(ToUpperTriangular(RandomIntMatrix(50, 1, 100) + RandomIntMatrix(50, 1, 100)⋅i), ZeroVector(50));', null);
  Test({LINENUM}33351, 'NilpotencyIndex(A)', 50);

  Test({LINENUM}33353, 'A ≔ ❨❨1+i, −3−2⋅i, −1−3⋅i❩, ❨1+i, 2⋅i, −3+i❩, ❨−3+i, −1+2⋅i, −1−3⋅i❩❩;', null);
  Test({LINENUM}33354, 'NilpotencyIndex(A)', 3);

  for _i := 1 to 50 do
    Test({LINENUM}33357, Format('NilpotencyIndex(ComplexMatrix(BackwardShiftMatrix(%d)))', [_i]), _i);

  _j := RandSeed;
  RandSeed := 6411481; // Never needed in practice, of course.
  try
    StartStopwatch;
    for _i := 1 to 100 do
      Test({LINENUM}33364, Format('NilpotencyIndex(RandomMatrix(%d) + RandomMatrix(%d)⋅i)', [_i, _i]), -1);
    StopStopwatch;
    TestDuration({LINENUM}33366, 0.05);
  finally
    RandSeed := _j;
  end;

  Test({LINENUM}33371, 'D ≔ diag(0.1, 0.1, 0.1); NilpotencyIndex(D)', -1);
  Test({LINENUM}33372, 'D ≔ diag(−0.1, −0.1, 0.2); NilpotencyIndex(D)', -1);

  Test({LINENUM}33374, 'A ≔ ❨❨0, 3, 6❩, ❨0.0001, 0, 1❩, ❨0, 0, 0❩❩; NilpotencyIndex(A)', -1);
  Test({LINENUM}33375, 'A ≔ ❨❨0, 3, 6❩, ❨0.0001, 0, 1❩, ❨0, 0, 0❩❩; NilpotencyIndex(A, 1E-4)', -1);
  Test({LINENUM}33376, 'A ≔ ❨❨0, 3, 6❩, ❨0.0001, 0, 1❩, ❨0, 0, 0❩❩; NilpotencyIndex(A, 1E-3)', -1);
  Test({LINENUM}33377, 'A ≔ ❨❨0, 3, 6❩, ❨0.0001, 0, 1❩, ❨0, 0, 0❩❩; NilpotencyIndex(A, 1E-2)', 3);

  Test({LINENUM}33379, 'D ≔ diag(i/10, i/10, i/10); NilpotencyIndex(D)', -1);
  Test({LINENUM}33380, 'D ≔ diag(−i/10, −i/10, i/5); NilpotencyIndex(D)', -1);

  Test({LINENUM}33382, 'A ≔ ❨❨0, 3, i❩, ❨0.0001, 0, 1❩, ❨0, 0, 0❩❩; NilpotencyIndex(A)', -1);
  Test({LINENUM}33383, 'A ≔ ❨❨0, 3, i❩, ❨0.0001, 0, 1❩, ❨0, 0, 0❩❩; NilpotencyIndex(A, 1E-4)', -1);
  Test({LINENUM}33384, 'A ≔ ❨❨0, 3, i❩, ❨0.0001, 0, 1❩, ❨0, 0, 0❩❩; NilpotencyIndex(A, 1E-3)', 3);
  Test({LINENUM}33385, 'A ≔ ❨❨0, 3, i❩, ❨0.0001, 0, 1❩, ❨0, 0, 0❩❩; NilpotencyIndex(A, 1E-2)', 3);

  Test({LINENUM}33387, 'delete(A); delete(D)', success);

  // Pivot pos

  Test({LINENUM}33391, 'A ≔ ❨❨6, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨6, 5, 2, 3, 6❩, ❨0, 0, 0, 0, 5❩❩;', null);

  Test({LINENUM}33393, 'PivotPos(A, 1)', 1);
  Test({LINENUM}33394, 'PivotPos(A, 2)', 2);
  Test({LINENUM}33395, 'PivotPos(A, 3)', 4);
  Test({LINENUM}33396, 'PivotPos(A, 4)', 0);
  Test({LINENUM}33397, 'PivotPos(A, 5)', 3);
  Test({LINENUM}33398, 'PivotPos(A, 6)', 1);
  Test({LINENUM}33399, 'PivotPos(A, 7)', 5);
  Test({LINENUM}33400, 'PivotPos(A, 8)', failure, 'The specified row does not exist.');
  Test({LINENUM}33401, 'PivotPos(A, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33402, 'PivotPos(A, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33404, 'A ≔ ❨❨6, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨0.00001, 0.0001, 0.001, 0.01, 0.1❩, ❨0, 0, 0, 0, 5❩❩;', null);

  Test({LINENUM}33406, 'PivotPos(A, 6)', 1);
  Test({LINENUM}33407, 'PivotPos(A, 6, 2E-6)', 1);
  Test({LINENUM}33408, 'PivotPos(A, 6, 2E-5)', 2);
  Test({LINENUM}33409, 'PivotPos(A, 6, 2E-4)', 3);
  Test({LINENUM}33410, 'PivotPos(A, 6, 2E-3)', 4);
  Test({LINENUM}33411, 'PivotPos(A, 6, 2E-2)', 5);
  Test({LINENUM}33412, 'PivotPos(A, 6, 2E-1)', 0);

  Test({LINENUM}33414, 'A ≔ ❨❨i, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨6, 5, 2, 3, 6❩, ❨0, 0, 0, 0, 5❩❩;', null);

  Test({LINENUM}33416, 'PivotPos(A, 1)', 1);
  Test({LINENUM}33417, 'PivotPos(A, 2)', 2);
  Test({LINENUM}33418, 'PivotPos(A, 3)', 4);
  Test({LINENUM}33419, 'PivotPos(A, 4)', 0);
  Test({LINENUM}33420, 'PivotPos(A, 5)', 3);
  Test({LINENUM}33421, 'PivotPos(A, 6)', 1);
  Test({LINENUM}33422, 'PivotPos(A, 7)', 5);
  Test({LINENUM}33423, 'PivotPos(A, 8)', failure, 'The specified row does not exist.');
  Test({LINENUM}33424, 'PivotPos(A, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33425, 'PivotPos(A, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33427, 'A ≔ ❨❨i, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨0.00001, 0.0001, 0.001, 0.01, 0.1❩, ❨0, 0, 0, 0, 5❩❩;', null);

  Test({LINENUM}33429, 'PivotPos(A, 6)', 1);
  Test({LINENUM}33430, 'PivotPos(A, 6, 2E-6)', 1);
  Test({LINENUM}33431, 'PivotPos(A, 6, 2E-5)', 2);
  Test({LINENUM}33432, 'PivotPos(A, 6, 2E-4)', 3);
  Test({LINENUM}33433, 'PivotPos(A, 6, 2E-3)', 4);
  Test({LINENUM}33434, 'PivotPos(A, 6, 2E-2)', 5);
  Test({LINENUM}33435, 'PivotPos(A, 6, 2E-1)', 0);

  // Zero row

  Test({LINENUM}33439, 'A ≔ ❨❨6, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨6, 5, 2, 3, 6❩, ❨0, 0, 0, 0, 5❩❩;', null);

  Test({LINENUM}33441, 'IsZeroRow(A, 1)', False);
  Test({LINENUM}33442, 'IsZeroRow(A, 2)', False);
  Test({LINENUM}33443, 'IsZeroRow(A, 3)', False);
  Test({LINENUM}33444, 'IsZeroRow(A, 4)', True);
  Test({LINENUM}33445, 'IsZeroRow(A, 5)', False);
  Test({LINENUM}33446, 'IsZeroRow(A, 6)', False);
  Test({LINENUM}33447, 'IsZeroRow(A, 7)', False);
  Test({LINENUM}33448, 'IsZeroRow(A, 8)', failure, 'The specified row does not exist.');
  Test({LINENUM}33449, 'IsZeroRow(A, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33450, 'IsZeroRow(A, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33452, 'A ≔ ❨❨6, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0.0001, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨6, 5, 2, 3, 6❩, ❨0, 0, 0, 0, 5❩❩;', null);

  Test({LINENUM}33454, 'IsZeroRow(A, 4)', False);
  Test({LINENUM}33455, 'IsZeroRow(A, 4, 2E-6)', False);
  Test({LINENUM}33456, 'IsZeroRow(A, 4, 2E-5)', False);
  Test({LINENUM}33457, 'IsZeroRow(A, 4, 2E-4)', True);
  Test({LINENUM}33458, 'IsZeroRow(A, 4, 2E-3)', True);
  Test({LINENUM}33459, 'IsZeroRow(A, 4, 2E-2)', True);

  Test({LINENUM}33461, 'A ≔ ❨❨i, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨6, 5, 2, 3, 6❩, ❨0, 0, 0, 0, 5❩❩;', null);

  Test({LINENUM}33463, 'IsZeroRow(A, 1)', False);
  Test({LINENUM}33464, 'IsZeroRow(A, 2)', False);
  Test({LINENUM}33465, 'IsZeroRow(A, 3)', False);
  Test({LINENUM}33466, 'IsZeroRow(A, 4)', True);
  Test({LINENUM}33467, 'IsZeroRow(A, 5)', False);
  Test({LINENUM}33468, 'IsZeroRow(A, 6)', False);
  Test({LINENUM}33469, 'IsZeroRow(A, 7)', False);
  Test({LINENUM}33470, 'IsZeroRow(A, 8)', failure, 'The specified row does not exist.');
  Test({LINENUM}33471, 'IsZeroRow(A, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33472, 'IsZeroRow(A, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33474, 'A ≔ ❨❨i, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0.0001, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨6, 5, 2, 3, 6❩, ❨0, 0, 0, 0, 5❩❩;', null);

  Test({LINENUM}33476, 'IsZeroRow(A, 4)', False);
  Test({LINENUM}33477, 'IsZeroRow(A, 4, 2E-6)', False);
  Test({LINENUM}33478, 'IsZeroRow(A, 4, 2E-5)', False);
  Test({LINENUM}33479, 'IsZeroRow(A, 4, 2E-4)', True);
  Test({LINENUM}33480, 'IsZeroRow(A, 4, 2E-3)', True);
  Test({LINENUM}33481, 'IsZeroRow(A, 4, 2E-2)', True);

  Test({LINENUM}33483, 'A ≔ ❨❨6, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨6, 5, 2, 3, 6❩, ❨0, 0, 0, 0, 5❩❩;', null);

  Test({LINENUM}33485, 'IsEssentiallyZeroRow(A, 1)', False);
  Test({LINENUM}33486, 'IsEssentiallyZeroRow(A, 2)', False);
  Test({LINENUM}33487, 'IsEssentiallyZeroRow(A, 3)', False);
  Test({LINENUM}33488, 'IsEssentiallyZeroRow(A, 4)', True);
  Test({LINENUM}33489, 'IsEssentiallyZeroRow(A, 5)', False);
  Test({LINENUM}33490, 'IsEssentiallyZeroRow(A, 6)', False);
  Test({LINENUM}33491, 'IsEssentiallyZeroRow(A, 7)', True);
  Test({LINENUM}33492, 'IsEssentiallyZeroRow(A, 8)', failure, 'The specified row does not exist.');
  Test({LINENUM}33493, 'IsEssentiallyZeroRow(A, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33494, 'IsEssentiallyZeroRow(A, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33496, 'A ≔ ❨❨6, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0.0001, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨6, 5, 2, 3, 6❩, ❨0, 0, 0, 0, 5❩❩;', null);

  Test({LINENUM}33498, 'IsEssentiallyZeroRow(A, 4)', False);
  Test({LINENUM}33499, 'IsEssentiallyZeroRow(A, 4, 2E-6)', False);
  Test({LINENUM}33500, 'IsEssentiallyZeroRow(A, 4, 2E-5)', False);
  Test({LINENUM}33501, 'IsEssentiallyZeroRow(A, 4, 2E-4)', True);
  Test({LINENUM}33502, 'IsEssentiallyZeroRow(A, 4, 2E-3)', True);
  Test({LINENUM}33503, 'IsEssentiallyZeroRow(A, 4, 2E-2)', True);

  Test({LINENUM}33505, 'A ≔ ❨❨i, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨6, 5, 2, 3, 6❩, ❨0, 0, 0, 0, i❩❩;', null);

  Test({LINENUM}33507, 'IsEssentiallyZeroRow(A, 1)', False);
  Test({LINENUM}33508, 'IsEssentiallyZeroRow(A, 2)', False);
  Test({LINENUM}33509, 'IsEssentiallyZeroRow(A, 3)', False);
  Test({LINENUM}33510, 'IsEssentiallyZeroRow(A, 4)', True);
  Test({LINENUM}33511, 'IsEssentiallyZeroRow(A, 5)', False);
  Test({LINENUM}33512, 'IsEssentiallyZeroRow(A, 6)', False);
  Test({LINENUM}33513, 'IsEssentiallyZeroRow(A, 7)', True);
  Test({LINENUM}33514, 'IsEssentiallyZeroRow(A, 8)', failure, 'The specified row does not exist.');
  Test({LINENUM}33515, 'IsEssentiallyZeroRow(A, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33516, 'IsEssentiallyZeroRow(A, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33518, 'A ≔ ❨❨i, 5, 3, 2, 5❩, ❨0, 4, 5, 3, 1❩, ❨0, 0, 0, 5, 4❩, ❨0, 0, 0.0001, 0, 0❩, ❨0, 0, 5, 4, 8❩, ❨6, 5, 2, 3, 6❩, ❨0, 0, 0, 0, i❩❩;', null);

  Test({LINENUM}33520, 'IsEssentiallyZeroRow(A, 4)', False);
  Test({LINENUM}33521, 'IsEssentiallyZeroRow(A, 4, 2E-6)', False);
  Test({LINENUM}33522, 'IsEssentiallyZeroRow(A, 4, 2E-5)', False);
  Test({LINENUM}33523, 'IsEssentiallyZeroRow(A, 4, 2E-4)', True);
  Test({LINENUM}33524, 'IsEssentiallyZeroRow(A, 4, 2E-3)', True);
  Test({LINENUM}33525, 'IsEssentiallyZeroRow(A, 4, 2E-2)', True);

  Test({LINENUM}33527, 'delete(A)', success);

  // Commuting matrices

  Test({LINENUM}33531, 'A ≔ ❨❨6, 3, 2❩, ❨4, 2, 0❩, ❨9, 0, 1❩❩; B ≔ ❨❨3, 0, 5❩, ❨4, 5, 2❩, ❨4, 5, 1❩❩; C ≔ diag(4, 4, 4); D ≔ diag(5, 2, 3); E ≔ diag(2, 7, 4);', null);

  Test({LINENUM}33533, 'commute(A, B)', False);
  Test({LINENUM}33534, 'commute(B, A)', False);

  Test({LINENUM}33536, 'commute(A, C)', True);
  Test({LINENUM}33537, 'commute(C, A)', True);

  Test({LINENUM}33539, 'commute(A, D)', False);
  Test({LINENUM}33540, 'commute(D, A)', False);

  Test({LINENUM}33542, 'commute(B, C)', True);
  Test({LINENUM}33543, 'commute(C, B)', True);

  Test({LINENUM}33545, 'commute(B, D)', False);
  Test({LINENUM}33546, 'commute(D, B)', False);

  Test({LINENUM}33548, 'commute(C, D)', True);
  Test({LINENUM}33549, 'commute(D, C)', True);

  Test({LINENUM}33551, 'commute(D, E)', True);
  Test({LINENUM}33552, 'commute(E, D)', True);

  Test({LINENUM}33554, 'A ≔ ❨❨6, 3, 2❩, ❨4, 2, i❩, ❨9, 0, 1❩❩; B ≔ ❨❨3, 0, 5❩, ❨4, 5, 2❩, ❨4, 5, 1❩❩; C ≔ diag(4, 4, 4); D ≔ diag(5, 2, 3); E ≔ diag(2, 7, 4);', null);

  Test({LINENUM}33556, 'commute(A, B)', False);
  Test({LINENUM}33557, 'commute(B, A)', False);

  Test({LINENUM}33559, 'commute(A, C)', True);
  Test({LINENUM}33560, 'commute(C, A)', True);

  Test({LINENUM}33562, 'commute(A, D)', False);
  Test({LINENUM}33563, 'commute(D, A)', False);

  Test({LINENUM}33565, 'commute(B, C)', True);
  Test({LINENUM}33566, 'commute(C, B)', True);

  Test({LINENUM}33568, 'commute(B, D)', False);
  Test({LINENUM}33569, 'commute(D, B)', False);

  Test({LINENUM}33571, 'commute(C, D)', True);
  Test({LINENUM}33572, 'commute(D, C)', True);

  Test({LINENUM}33574, 'commute(D, E)', True);
  Test({LINENUM}33575, 'commute(E, D)', True);

  Test({LINENUM}33577, 'A ≔ ❨❨6, 3, 2❩, ❨4, 2, 0❩, ❨9, 0, 1❩❩; B ≔ ❨❨3, 0, 5❩, ❨4, 5, 2❩, ❨4, 5, 1❩❩; C ≔ diag(i, i, i); D ≔ diag(5, 2, 3); E ≔ diag(2, 7, 4);', null);

  Test({LINENUM}33579, 'commute(A, B)', False);
  Test({LINENUM}33580, 'commute(B, A)', False);

  Test({LINENUM}33582, 'commute(A, C)', True);
  Test({LINENUM}33583, 'commute(C, A)', True);

  Test({LINENUM}33585, 'commute(A, D)', False);
  Test({LINENUM}33586, 'commute(D, A)', False);

  Test({LINENUM}33588, 'commute(B, C)', True);
  Test({LINENUM}33589, 'commute(C, B)', True);

  Test({LINENUM}33591, 'commute(B, D)', False);
  Test({LINENUM}33592, 'commute(D, B)', False);

  Test({LINENUM}33594, 'commute(C, D)', True);
  Test({LINENUM}33595, 'commute(D, C)', True);

  Test({LINENUM}33597, 'commute(D, E)', True);
  Test({LINENUM}33598, 'commute(E, D)', True);

  Test({LINENUM}33600, 'A ≔ ❨❨6, 3, 2❩, ❨4, 2, i❩, ❨9, 0, 1❩❩; B ≔ ❨❨3, 0, i❩, ❨4, 5, 2❩, ❨4, 5, 1❩❩; C ≔ diag(1+i, 1+i, 1+i); D ≔ diag(5, i/2, 3); E ≔ diag(2, 7, 3 + i);', null);

  Test({LINENUM}33602, 'commute(A, B)', False);
  Test({LINENUM}33603, 'commute(B, A)', False);

  Test({LINENUM}33605, 'commute(A, C)', True);
  Test({LINENUM}33606, 'commute(C, A)', True);

  Test({LINENUM}33608, 'commute(A, D)', False);
  Test({LINENUM}33609, 'commute(D, A)', False);

  Test({LINENUM}33611, 'commute(B, C)', True);
  Test({LINENUM}33612, 'commute(C, B)', True);

  Test({LINENUM}33614, 'commute(B, D)', False);
  Test({LINENUM}33615, 'commute(D, B)', False);

  Test({LINENUM}33617, 'commute(C, D)', True);
  Test({LINENUM}33618, 'commute(D, C)', True);

  Test({LINENUM}33620, 'commute(D, E)', True);
  Test({LINENUM}33621, 'commute(E, D)', True);

  Test({LINENUM}33623, 'G ≔ ❨❨4, 1, 3❩, ❨6, 7, 7❩❩; K ≔ ❨❨4, 5, 2, 6, 7, 3, 3, 5, 6❩❩*;', null);
  Test({LINENUM}33624, 'commute(G, K)', failure, 'When multiplying two matrices, ');

  Test({LINENUM}33626, 'G ≔ ❨❨4, i, 3❩, ❨6, 7, 7❩❩; K ≔ ❨❨4, 5, 2, 6, 7, 3, 3, 5, 6❩❩*;', null);
  Test({LINENUM}33627, 'commute(G, K)', failure, 'When multiplying two matrices, ');

  Test({LINENUM}33629, 'G ≔ ❨❨4, 1, 3❩, ❨6, 7, 7❩❩; K ≔ ❨❨4, 5, i, 6, 7, 3, 3, 5, 6❩❩*;', null);
  Test({LINENUM}33630, 'commute(G, K)', failure, 'When multiplying two matrices, ');

  Test({LINENUM}33632, 'G ≔ ❨❨4, i, 3❩, ❨6, 7, 7❩❩; K ≔ ❨❨4, 5, i, 6, 7, 3, 3, 5, 6❩❩*;', null);
  Test({LINENUM}33633, 'commute(G, K)', failure, 'When multiplying two matrices, ');

  Test({LINENUM}33635, 'delete(A); delete(B); delete(C); delete(D); delete(E); delete(G); delete(K)', success);

  // Matrix zeroing functions

  Test({LINENUM}33639, 'A ≔ ❨❨6, 3, 2, 5, 4❩, ❨7, 1, 4, 2, 6❩, ❨3, 9, 5, 6, 8❩, ❨4, 1, 2, 5, 8❩, ❨6, 5, 2, 3, 1❩❩;', null);
  Test({LINENUM}33640, 'B ≔ ❨❨6, 3, 2, 5, 6, 8, 7, 9, 5, 6❩, ❨4, 5, 2, 3, 1, 4, 5, 6, 8, 9❩, ❨2, 3, 1, 4, 5, 2, 3, 6, 7, 8❩, ❨4, 5, 2, 3, 6, 1, 2, 3, 5, 9❩❩;', null);
  Test({LINENUM}33641, 'C ≔ B*;', null);

  Test({LINENUM}33643, 'ToLowerTriangular(A)', 5, [6, 0, 0, 0, 0, 7, 1, 0, 0, 0, 3, 9, 5, 0, 0, 4, 1, 2, 5, 0, 6, 5, 2, 3, 1]);
  Test({LINENUM}33644, 'IsLowerTriangular(ToLowerTriangular(A))', True);

  Test({LINENUM}33646, 'ToLowerTriangular(B)', 10, [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0, 0, 4, 5, 2, 3, 0, 0, 0, 0, 0, 0]);
  Test({LINENUM}33647, 'IsLowerTriangular(ToLowerTriangular(B))', True);

  Test({LINENUM}33649, 'ToLowerTriangular(C)', 4, [6, 0, 0, 0, 3, 5, 0, 0, 2, 2, 1, 0, 5, 3, 4, 3, 6, 1, 5, 6, 8, 4, 2, 1, 7, 5, 3, 2, 9, 6, 6, 3, 5, 8, 7, 5, 6, 9, 8, 9]);
  Test({LINENUM}33650, 'IsLowerTriangular(ToLowerTriangular(C))', True);

  Test({LINENUM}33652, 'ToUpperTriangular(A)', 5, [6, 3, 2, 5, 4, 0, 1, 4, 2, 6, 0, 0, 5, 6, 8, 0, 0, 0, 5, 8, 0, 0, 0, 0, 1]);
  Test({LINENUM}33653, 'IsUpperTriangular(ToUpperTriangular(A))', True);

  Test({LINENUM}33655, 'ToUpperTriangular(B)', 10, [6, 3, 2, 5, 6, 8, 7, 9, 5, 6, 0, 5, 2, 3, 1, 4, 5, 6, 8, 9, 0, 0, 1, 4, 5, 2, 3, 6, 7, 8, 0, 0, 0, 3, 6, 1, 2, 3, 5, 9]);
  Test({LINENUM}33656, 'IsUpperTriangular(ToUpperTriangular(B))', True);

  Test({LINENUM}33658, 'ToUpperTriangular(C)', 4, [6, 4, 2, 4, 0, 5, 3, 5, 0, 0, 1, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
  Test({LINENUM}33659, 'IsUpperTriangular(ToUpperTriangular(C))', True);

  Test({LINENUM}33661, 'ToUpperHessenberg(A)', 5, [6, 3, 2, 5, 4, 7, 1, 4, 2, 6, 0, 9, 5, 6, 8, 0, 0, 2, 5, 8, 0, 0, 0, 3, 1]);
  Test({LINENUM}33662, 'IsUpperHessenberg(ToUpperHessenberg(A))', True);

  Test({LINENUM}33664, 'ToUpperHessenberg(B)', 10, [6, 3, 2, 5, 6, 8, 7, 9, 5, 6, 4, 5, 2, 3, 1, 4, 5, 6, 8, 9, 0, 3, 1, 4, 5, 2, 3, 6, 7, 8, 0, 0, 2, 3, 6, 1, 2, 3, 5, 9]);
  Test({LINENUM}33665, 'IsUpperHessenberg(ToUpperHessenberg(B))', True);

  Test({LINENUM}33667, 'ToUpperHessenberg(C)', 4, [6, 4, 2, 4, 3, 5, 3, 5, 0, 2, 1, 2, 0, 0, 4, 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
  Test({LINENUM}33668, 'IsUpperHessenberg(ToUpperHessenberg(C))', True);

  Test({LINENUM}33670, 'A ≔ ❨❨i, 3, 2, 5, 4❩, ❨7, 1, 4, 2, 6❩, ❨3, 9, 5, 6, 8❩, ❨4, 1, 2, 5, 8❩, ❨6, 5, 2, 3, 1❩❩;', null);
  Test({LINENUM}33671, 'B ≔ ❨❨i, 3, 2, 5, 6, 8, 7, 9, 5, 6❩, ❨4, 5, 2, 3, 1, 4, 5, 6, 8, 9❩, ❨2, 3, 1, 4, 5, 2, 3, 6, 7, 8❩, ❨4, 5, 2, 3, 6, 1, 2, 3, 5, 9❩❩;', null);
  Test({LINENUM}33672, 'C ≔ B*;', null);

  Test({LINENUM}33674, 'ToLowerTriangular(A)', 5, [ImaginaryUnit, 0, 0, 0, 0, 7, 1, 0, 0, 0, 3, 9, 5, 0, 0, 4, 1, 2, 5, 0, 6, 5, 2, 3, 1]);
  Test({LINENUM}33675, 'IsLowerTriangular(ToLowerTriangular(A))', True);

  Test({LINENUM}33677, 'ToLowerTriangular(B)', 10, [ImaginaryUnit, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0, 0, 4, 5, 2, 3, 0, 0, 0, 0, 0, 0]);
  Test({LINENUM}33678, 'IsLowerTriangular(ToLowerTriangular(B))', True);

  Test({LINENUM}33680, 'ToLowerTriangular(C)', 4, [-ImaginaryUnit, 0, 0, 0, 3, 5, 0, 0, 2, 2, 1, 0, 5, 3, 4, 3, 6, 1, 5, 6, 8, 4, 2, 1, 7, 5, 3, 2, 9, 6, 6, 3, 5, 8, 7, 5, 6, 9, 8, 9]);
  Test({LINENUM}33681, 'IsLowerTriangular(ToLowerTriangular(C))', True);

  Test({LINENUM}33683, 'ToUpperTriangular(A)', 5, [ImaginaryUnit, 3, 2, 5, 4, 0, 1, 4, 2, 6, 0, 0, 5, 6, 8, 0, 0, 0, 5, 8, 0, 0, 0, 0, 1]);
  Test({LINENUM}33684, 'IsUpperTriangular(ToUpperTriangular(A))', True);

  Test({LINENUM}33686, 'ToUpperTriangular(B)', 10, [ImaginaryUnit, 3, 2, 5, 6, 8, 7, 9, 5, 6, 0, 5, 2, 3, 1, 4, 5, 6, 8, 9, 0, 0, 1, 4, 5, 2, 3, 6, 7, 8, 0, 0, 0, 3, 6, 1, 2, 3, 5, 9]);
  Test({LINENUM}33687, 'IsUpperTriangular(ToUpperTriangular(B))', True);

  Test({LINENUM}33689, 'ToUpperTriangular(C)', 4, [-ImaginaryUnit, 4, 2, 4, 0, 5, 3, 5, 0, 0, 1, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
  Test({LINENUM}33690, 'IsUpperTriangular(ToUpperTriangular(C))', True);

  Test({LINENUM}33692, 'delete(A); delete(B); delete(C)', success);

  // Deleted absolute row sum

  Test({LINENUM}33696, 'A ≔ ❨❨-6, -3, 2, 5, 4❩, ❨-7, 1, 4, 2, 6❩, ❨3, 9, 5, 6, 8❩, ❨4, 1, -2, -5, -8❩, ❨6, -5, 2, -3, -1❩❩;', null);
  Test({LINENUM}33697, 'B ≔ ❨❨6, 3, -2, 5, 6, 8, -7, 9, 5, 6❩, ❨4, -5, 2, 3, 1, -4, 5, 6, 8, 9❩, ❨-2, 3, 1, -4, 5, 2, 3, 6, 7, -8❩, ❨4, -5, -2, -3, -6, 1, 2, 3, 5, 9❩❩;', null);
  Test({LINENUM}33698, 'C ≔ B*;', null);

  Test({LINENUM}33700, 'DeletedAbsoluteRowSum(A, 1)', 14.0);
  Test({LINENUM}33701, 'DeletedAbsoluteRowSum(A, 2)', 19.0);
  Test({LINENUM}33702, 'DeletedAbsoluteRowSum(A, 3)', 26.0);
  Test({LINENUM}33703, 'DeletedAbsoluteRowSum(A, 4)', 15.0);
  Test({LINENUM}33704, 'DeletedAbsoluteRowSum(A, 5)', 16.0);
  Test({LINENUM}33705, 'DeletedAbsoluteRowSum(A, 6)', failure, 'Index 6 out of bounds.');
  Test({LINENUM}33706, 'DeletedAbsoluteRowSum(A, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33707, 'DeletedAbsoluteRowSum(A, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33709, 'DeletedAbsoluteRowSum(B, 1)', 51.0);
  Test({LINENUM}33710, 'DeletedAbsoluteRowSum(B, 2)', 42.0);
  Test({LINENUM}33711, 'DeletedAbsoluteRowSum(B, 3)', 40.0);
  Test({LINENUM}33712, 'DeletedAbsoluteRowSum(B, 4)', 37.0);
  Test({LINENUM}33713, 'DeletedAbsoluteRowSum(B, 5)', failure, 'Index 5 out of bounds.');
  Test({LINENUM}33714, 'DeletedAbsoluteRowSum(B, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33715, 'DeletedAbsoluteRowSum(B, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33717, 'DeletedAbsoluteRowSum(C, 1)', 10.0);
  Test({LINENUM}33718, 'DeletedAbsoluteRowSum(C, 2)', 11.0);
  Test({LINENUM}33719, 'DeletedAbsoluteRowSum(C, 3)', 6.0);
  Test({LINENUM}33720, 'DeletedAbsoluteRowSum(C, 4)', 12.0);
  Test({LINENUM}33721, 'DeletedAbsoluteRowSum(C, 5)', 18.0);
  Test({LINENUM}33722, 'DeletedAbsoluteRowSum(C, 6)', 15.0);
  Test({LINENUM}33723, 'DeletedAbsoluteRowSum(C, 7)', 17.0);
  Test({LINENUM}33724, 'DeletedAbsoluteRowSum(C, 8)', 24.0);
  Test({LINENUM}33725, 'DeletedAbsoluteRowSum(C, 9)', 25.0);
  Test({LINENUM}33726, 'DeletedAbsoluteRowSum(C, 10)', 32.0);
  Test({LINENUM}33727, 'DeletedAbsoluteRowSum(C, 11)', failure, 'Index 11 out of bounds.');
  Test({LINENUM}33728, 'DeletedAbsoluteRowSum(C, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33729, 'DeletedAbsoluteRowSum(C, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33731, 'A ≔ ❨❨-i, -3, 2, 5, 4❩, ❨-7, i, 4, 2, 6❩, ❨3, 9, 5, 6, 8❩, ❨4, -i, -2, 3 + 4⋅i, -8❩, ❨6, -5, 2, -3, -1❩❩;', null);
  Test({LINENUM}33732, 'B ≔ ❨❨i, 3, -2, 5, 6, 8, -7, 9, 5, 6❩, ❨4, -3 + 4⋅i, 2, 3, i, -4, 3 - 4⋅i, 6, 8, 9❩, ❨-2, 3, i, -4, 5, 2, 3, 6, 7, -8❩, ❨4, -5, -2, -3, -6, i, 2, 3, 3 + 4⋅i, 9❩❩;', null);
  Test({LINENUM}33733, 'C ≔ B*;', null);

  Test({LINENUM}33735, 'DeletedAbsoluteRowSum(A, 1)', 14.0);
  Test({LINENUM}33736, 'DeletedAbsoluteRowSum(A, 2)', 19.0);
  Test({LINENUM}33737, 'DeletedAbsoluteRowSum(A, 3)', 26.0);
  Test({LINENUM}33738, 'DeletedAbsoluteRowSum(A, 4)', 15.0);
  Test({LINENUM}33739, 'DeletedAbsoluteRowSum(A, 5)', 16.0);
  Test({LINENUM}33740, 'DeletedAbsoluteRowSum(A, 6)', failure, 'Index 6 out of bounds.');
  Test({LINENUM}33741, 'DeletedAbsoluteRowSum(A, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33742, 'DeletedAbsoluteRowSum(A, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33744, 'DeletedAbsoluteRowSum(B, 1)', 51.0);
  Test({LINENUM}33745, 'DeletedAbsoluteRowSum(B, 2)', 42.0);
  Test({LINENUM}33746, 'DeletedAbsoluteRowSum(B, 3)', 40.0);
  Test({LINENUM}33747, 'DeletedAbsoluteRowSum(B, 4)', 37.0);
  Test({LINENUM}33748, 'DeletedAbsoluteRowSum(B, 5)', failure, 'Index 5 out of bounds.');
  Test({LINENUM}33749, 'DeletedAbsoluteRowSum(B, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33750, 'DeletedAbsoluteRowSum(B, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33752, 'DeletedAbsoluteRowSum(C, 1)', 10.0);
  Test({LINENUM}33753, 'DeletedAbsoluteRowSum(C, 2)', 11.0);
  Test({LINENUM}33754, 'DeletedAbsoluteRowSum(C, 3)', 6.0);
  Test({LINENUM}33755, 'DeletedAbsoluteRowSum(C, 4)', 12.0);
  Test({LINENUM}33756, 'DeletedAbsoluteRowSum(C, 5)', 18.0);
  Test({LINENUM}33757, 'DeletedAbsoluteRowSum(C, 6)', 15.0);
  Test({LINENUM}33758, 'DeletedAbsoluteRowSum(C, 7)', 17.0);
  Test({LINENUM}33759, 'DeletedAbsoluteRowSum(C, 8)', 24.0);
  Test({LINENUM}33760, 'DeletedAbsoluteRowSum(C, 9)', 25.0);
  Test({LINENUM}33761, 'DeletedAbsoluteRowSum(C, 10)', 32.0);
  Test({LINENUM}33762, 'DeletedAbsoluteRowSum(C, 11)', failure, 'Index 11 out of bounds.');
  Test({LINENUM}33763, 'DeletedAbsoluteRowSum(C, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}33764, 'DeletedAbsoluteRowSum(C, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}33766, 'delete(A); delete(B); delete(C)', success);

  // Zero row counts

  Test({LINENUM}33770, 'A ≔ ❨❨2, 3, 6, 5❩, ❨5, 1, 2, 5❩, ❨0, 0, 0, 0❩, ❨6, 3, 2, 5❩, ❨7, 4, 1, 0❩, '+
    '❨2, 0, 1, 0❩, ❨0, 0, 0, 1❩, ❨2, 0, 0, 0❩, ❨3, 6, 3, 0❩, ❨0, 0, 0, 0❩, ❨5, 2, 1, 0❩, '+
    '❨0, 0, 0, 0.0001❩, ❨0, 4, 2, 0❩, ❨0, 0, 0, 0.01❩, ❨0, 0.000001, 0.00000001, 0❩, '+
    '❨0.001, 0.0001, 0, 0❩, ❨4, 0, 1, 7❩, ❨6, 3, 2, 1❩, ❨0, 0, 0, 0.01❩, ❨0, 0.00001, 0.0001, 0❩, '+
    '❨0, 0, 0, 0❩, ❨0, 0, 0, 0❩, ❨0, 0, 0, 0❩❩;', null);

  Test({LINENUM}33776, 'ZeroRowCount(A)', 5);
  Test({LINENUM}33777, 'ZeroRowCount(A, 2E-9)', 5);
  Test({LINENUM}33778, 'ZeroRowCount(A, 2E-8)', 5);
  Test({LINENUM}33779, 'ZeroRowCount(A, 2E-7)', 5);
  Test({LINENUM}33780, 'ZeroRowCount(A, 2E-6)', 6);
  Test({LINENUM}33781, 'ZeroRowCount(A, 2E-5)', 6);
  Test({LINENUM}33782, 'ZeroRowCount(A, 2E-4)', 8);
  Test({LINENUM}33783, 'ZeroRowCount(A, 2E-3)', 9);
  Test({LINENUM}33784, 'ZeroRowCount(A, 2E-2)', 11);
  Test({LINENUM}33785, 'ZeroRowCount(A, 2E-1)', 11);

  Test({LINENUM}33787, 'TrailingZeroRowCount(A)', 3);
  Test({LINENUM}33788, 'TrailingZeroRowCount(A, 2E-9)', 3);
  Test({LINENUM}33789, 'TrailingZeroRowCount(A, 2E-8)', 3);
  Test({LINENUM}33790, 'TrailingZeroRowCount(A, 2E-7)', 3);
  Test({LINENUM}33791, 'TrailingZeroRowCount(A, 2E-6)', 3);
  Test({LINENUM}33792, 'TrailingZeroRowCount(A, 2E-5)', 3);
  Test({LINENUM}33793, 'TrailingZeroRowCount(A, 2E-4)', 4);
  Test({LINENUM}33794, 'TrailingZeroRowCount(A, 2E-3)', 4);
  Test({LINENUM}33795, 'TrailingZeroRowCount(A, 2E-2)', 5);
  Test({LINENUM}33796, 'TrailingZeroRowCount(A, 2E-1)', 5);

  Test({LINENUM}33798, 'A ≔ ❨❨2, 3, 6, 5❩, ❨5, i, 2, 5❩, ❨0, 0, 0, 0❩, ❨6, 3, 2, 5❩, ❨7, 4, 1, 0❩, '+
    '❨2, 0, 1 + i, 0❩, ❨0, 0, 0, i❩, ❨2, 0, 0, 0❩, ❨3, 6, 3, 0❩, ❨0, 0, 0, 0❩, ❨i/10000, i/2, i, 0❩, '+
    '❨0, 0, 0, 0.0001❩, ❨0, 4, 2, 0❩, ❨0, 0, 0, 0.01❩, ❨0, 0.000001⋅i, 0.00000001⋅i, 0❩, '+
    '❨0.001, 0.0001⋅i, 0, 0❩, ❨4, 0, 1, 7❩, ❨6, 3, 2, 1❩, ❨0, 0, 0, 0.01⋅i❩, ❨0, 0.00001, 0.0001⋅i, 0❩, '+
    '❨0, 0, 0, 0❩, ❨0, 0, 0, 0❩, ❨0, 0, 0, 0❩❩;', null);

  Test({LINENUM}33804, 'ZeroRowCount(A)', 5);
  Test({LINENUM}33805, 'ZeroRowCount(A, 2E-9)', 5);
  Test({LINENUM}33806, 'ZeroRowCount(A, 2E-8)', 5);
  Test({LINENUM}33807, 'ZeroRowCount(A, 2E-7)', 5);
  Test({LINENUM}33808, 'ZeroRowCount(A, 2E-6)', 6);
  Test({LINENUM}33809, 'ZeroRowCount(A, 2E-5)', 6);
  Test({LINENUM}33810, 'ZeroRowCount(A, 2E-4)', 8);
  Test({LINENUM}33811, 'ZeroRowCount(A, 2E-3)', 9);
  Test({LINENUM}33812, 'ZeroRowCount(A, 2E-2)', 11);
  Test({LINENUM}33813, 'ZeroRowCount(A, 2E-1)', 11);

  Test({LINENUM}33815, 'TrailingZeroRowCount(A)', 3);
  Test({LINENUM}33816, 'TrailingZeroRowCount(A, 2E-9)', 3);
  Test({LINENUM}33817, 'TrailingZeroRowCount(A, 2E-8)', 3);
  Test({LINENUM}33818, 'TrailingZeroRowCount(A, 2E-7)', 3);
  Test({LINENUM}33819, 'TrailingZeroRowCount(A, 2E-6)', 3);
  Test({LINENUM}33820, 'TrailingZeroRowCount(A, 2E-5)', 3);
  Test({LINENUM}33821, 'TrailingZeroRowCount(A, 2E-4)', 4);
  Test({LINENUM}33822, 'TrailingZeroRowCount(A, 2E-3)', 4);
  Test({LINENUM}33823, 'TrailingZeroRowCount(A, 2E-2)', 5);
  Test({LINENUM}33824, 'TrailingZeroRowCount(A, 2E-1)', 5);

  Test({LINENUM}33826, 'delete(A)', success);

  for _i := 1 to 100 do
    Test({LINENUM}33829, Format('ZeroRowCount(ZeroMatrix(%d))', [_i]), _i);

  for _i := 1 to 100 do
    Test({LINENUM}33832, Format('TrailingZeroRowCount(ZeroMatrix(%d))', [_i]), _i);

  for _i := 1 to 100 do
    Test({LINENUM}33835, Format('ZeroRowCount(ComplexZeroMatrix(%d))', [_i]), _i);

  for _i := 1 to 100 do
    Test({LINENUM}33838, Format('TrailingZeroRowCount(ComplexZeroMatrix(%d))', [_i]), _i);

  // The Gram-Schmidt orthogonalization procedure

  Test({LINENUM}33842, 'A ≔ ❨❨5, 3, 2❩, ❨1, 4, −1❩, ❨7, 2, 0❩❩;', null);
  Eps; Test({LINENUM}33843, 'B ≔ GramSchmidt(A)', 3, [0.577350269189625765, 0.210235332491054675, 0.788966267744725799, 0.115470053837925153, 0.935547229585193303, -0.333793420968922454, 0.80829037686547607, -0.283817698862923811, -0.515862559679243792]);
  Test({LINENUM}33844, 'IsOrthogonal(B)', True);

  Test({LINENUM}33846, 'A ≔ ❨❨5, 3, 2, 9❩, ❨1, 4, −1, 5❩, ❨7, 2, 0, 6❩❩;', null);
  Test({LINENUM}33847, 'rank(A)', 3);
  Eps; Test({LINENUM}33848, 'B ≔ GramSchmidt(A)', 4, [0.577350269189625765, 0.210235332491054675, 0.788966267744725799, 0, 0.115470053837925153, 0.935547229585193303, -0.333793420968922454, 0, 0.80829037686547607, -0.283817698862923811, -0.515862559679243792, 0]);
  Test({LINENUM}33849, 'rank(B)', 3);

  Test({LINENUM}33851, 'A ≔ ❨❨6, 3, 9❩, ❨5, 2, 9❩, ❨6, 1, 15❩❩;', null);
  Test({LINENUM}33852, 'rank(A)', 2);
  Eps; Test({LINENUM}33853, 'B ≔ GramSchmidt(A)', 3, [0.609207699080171426, 0.621523709890218689, 0, 0.507673082566809522, 0.171454816521439638, 0, 0.609207699080171426, -0.764402723658085054, 0]);
  Test({LINENUM}33854, 'rank(B)', 2);

  StartStopwatch;
  _j := RandSeed;
  RandSeed := 6230517;
  try
    for _i := 1 to 100 do
      Test({LINENUM}33861, 'IsOrthogonal(GramSchmidt(RandomMatrix(6)))', True);
  finally
    RandSeed := _j;
  end;
  StopStopwatch;
  TestDuration({LINENUM}33866, 0.007);

  Test({LINENUM}33868, 'A ≔ ❨❨2, 3, i❩, ❨i, 1, 5❩, ❨4, 7, 2❩❩;', null);
  Eps; Test({LINENUM}33869, 'B ≔ GramSchmidt(A)', 3, [0.436435780471984763, -0.120490673177969969 + 0.0481962692711879875*ImaginaryUnit, -0.121196321612797194 + 0.882039896182024025*ImaginaryUnit, 0.218217890235992381*ImaginaryUnit, 0.481962692711879875 - 0.819336577610195788*ImaginaryUnit, 0.175061353440707058 + 0.13466257956977466*ImaginaryUnit, 0.872871560943969525, 0.265079480991533932 + 0.096392538542375975*ImaginaryUnit, 0.0269325159139549317 - 0.397254609730835248*ImaginaryUnit]);
  Test({LINENUM}33870, 'IsUnitary(B)', True);

  Test({LINENUM}33872, 'A ≔ ❨❨2, 3, i, 5❩, ❨i, 1, 5, -7❩, ❨4, 7, 2, 1+i❩❩;', null);
  Test({LINENUM}33873, 'rank(A)', 3);
  Eps; Test({LINENUM}33874, 'B ≔ GramSchmidt(A)', 4, [0.436435780471984763, -0.120490673177969969 + 0.0481962692711879875*ImaginaryUnit, -0.121196321612797194 + 0.882039896182024025*ImaginaryUnit, 0, 0.218217890235992381*ImaginaryUnit, 0.481962692711879875 - 0.819336577610195788*ImaginaryUnit, 0.175061353440707058 + 0.13466257956977466*ImaginaryUnit, 0, 0.872871560943969525, 0.265079480991533932 + 0.096392538542375975*ImaginaryUnit, 0.0269325159139549317 - 0.397254609730835248*ImaginaryUnit, 0]);
  Test({LINENUM}33875, 'rank(B)', 3);

  StartStopwatch;
  _j := RandSeed;
  RandSeed := 6230517;
  try
    for _i := 1 to 100 do
      Test({LINENUM}33882, 'IsUnitary(GramSchmidt(RandomMatrix(6) + RandomMatrix(6)⋅i))', True);
  finally
    RandSeed := _j;
  end;
  StopStopwatch;
  TestDuration({LINENUM}33887, 0.01);

  Test({LINENUM}33889, 'GramSchmidt(❨❨5❩❩)', 1, [1]);
  Test({LINENUM}33890, 'GramSchmidt(❨❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, -21❩❩)', 12, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);

  Test({LINENUM}33892, 'delete(A); delete(B)', success);

  // Column space basis

  Test({LINENUM}33896, 'A ≔ ❨❨6, 2, -5, 7❩, ❨3, 0, 3, 1❩, ❨2, 1, 0, -4❩, ❨5, 3, 2, 5❩❩;', null);
  Test({LINENUM}33897, 'ColumnSpaceBasis(A)', 4, [6, 2, -5, 7, 3, 0, 3, 1, 2, 1, 0, -4, 5, 3, 2, 5]);
  Test({LINENUM}33898, 'rank(A)', 4);

  Test({LINENUM}33900, 'A ≔ ❨❨6, 2, -5, 7, 5, -3❩, ❨3, 0, 3, 1, 3, 5❩, ❨2, 1, 0, -4, 0, -4❩, ❨5, 3, 2, 5, 8, 8❩❩;', null);
  Test({LINENUM}33901, 'ColumnSpaceBasis(A)', 4, [6, 2, -5, 7, 3, 0, 3, 1, 2, 1, 0, -4, 5, 3, 2, 5]);
  Test({LINENUM}33902, 'rank(A)', 4);

  Test({LINENUM}33904, 'A ≔ ❨❨6, 2, 6, 20, -14, 7❩, ❨3, 0, 6, 15, -9, 1❩, ❨2, 1, 1, 5, -4, -4❩, ❨5, 3, 1, 10, -9, 5❩❩;', null);
  Test({LINENUM}33905, 'ColumnSpaceBasis(A)', 3, [6, 2, 7, 3, 0, 1, 2, 1, -4, 5, 3, 5]);
  Test({LINENUM}33906, 'rank(A)', 3);

  Test({LINENUM}33908, 'A ≔ ❨❨6, -12, 2, 4, 7, 5, -11, -6❩, ❨3, -6, 0, 3, 1, 3, -2, 6❩, ❨2, -4, 1, 1, -4, 0, 11, 12❩, ❨5, -10, 3, 2, 5, 8, -10, 9❩❩;', null);
  Test({LINENUM}33909, 'ColumnSpaceBasis(A)', 4, [6, 2, 7, 5, 3, 0, 1, 3, 2, 1, -4, 0, 5, 3, 5, 8]);
  Test({LINENUM}33910, 'rank(A)', 4);

  Test({LINENUM}33912, 'A ≔ ❨❨7, 14, -7, 21, 5, 1, 13, 10❩, ❨1, 2, -1, 3, 3, 7, -5, -10❩, ❨-4, -8, 4, -12, 0, 8, -16, -20❩, ❨5, 10, -5, 15, 8, 14, -4, -15❩❩;', null);
  Test({LINENUM}33913, 'ColumnSpaceBasis(A)', 2, [7, 5, 1, 3, -4, 0, 5, 8]);
  Test({LINENUM}33914, 'rank(A)', 2);

  Test({LINENUM}33916, 'A ≔ ❨❨7, 21, -14, 28, 35, -7, -21, 0, 7❩, ❨1, 3, -2, 4, 5, -1, -3, 0, 1❩, ❨-4, -12, 8, -16, -20, 4, 12, 0, -4❩, ❨5, 15, -10, 20, 25, -5, -15, 0, 5❩❩;', null);
  Test({LINENUM}33917, 'ColumnSpaceBasis(A)', 1, [7, 1, -4, 5]);
  Test({LINENUM}33918, 'rank(A)', 1);

  Test({LINENUM}33920, 'A ≔ ❨❨21❩❩;', null);
  Test({LINENUM}33921, 'ColumnSpaceBasis(A)', 1, [21]);
  Test({LINENUM}33922, 'rank(A)', 1);

  Test({LINENUM}33924, 'A ≔ ❨❨1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12❩❩;', null);
  Test({LINENUM}33925, 'ColumnSpaceBasis(A)', 1, [1]);
  Test({LINENUM}33926, 'rank(A)', 1);

  Test({LINENUM}33928, 'A ≔ IdentityMatrix(100);', null);
  Test({LINENUM}33929, 'ColumnSpaceBasis(A) = IdentityMatrix(100)', True);
  Test({LINENUM}33930, 'rank(A)', 100);

  Test({LINENUM}33932, 'A ≔ ❨❨i, 2, -5, 7❩, ❨3, 0, 3, 1❩, ❨2, 1, 0, -4❩, ❨5, 3, 2, 5❩❩;', null);
  Test({LINENUM}33933, 'ColumnSpaceBasis(A)', 4, [ImaginaryUnit, 2, -5, 7, 3, 0, 3, 1, 2, 1, 0, -4, 5, 3, 2, 5]);
  Test({LINENUM}33934, 'rank(A)', 4);

  Test({LINENUM}33936, 'A ≔ ❨❨i, 2, 2 + i, -2 + i, 7, 5 + i, -5 + i❩, ❨3, 0, 3, 3, 1, 4, 2❩, ❨2, 1, 3, 1, -4, -3, 7❩, ❨5, 3, 8, 2, 5, 7, 3❩❩;', null);
  Test({LINENUM}33937, 'ColumnSpaceBasis(A)', 3, [ImaginaryUnit, 2, 7, 3, 0, 1, 2, 1, -4, 5, 3, 5]);
  Test({LINENUM}33938, 'rank(A)', 3);

  Test({LINENUM}33940, 'A ≔ ❨❨i/2❩❩;', null);
  Test({LINENUM}33941, 'ColumnSpaceBasis(A)', 1, [ImaginaryUnit/2]);
  Test({LINENUM}33942, 'rank(A)', 1);

  Test({LINENUM}33944, 'A ≔ ❨❨i, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12❩❩;', null);
  Test({LINENUM}33945, 'ColumnSpaceBasis(A)', 1, [ImaginaryUnit]);
  Test({LINENUM}33946, 'rank(A)', 1);

  Test({LINENUM}33948, 'A ≔ ComplexMatrix(IdentityMatrix(100));', null);
  Test({LINENUM}33949, 'ColumnSpaceBasis(A) = IdentityMatrix(100)', True);
  Test({LINENUM}33950, 'rank(A)', 100);

  Test({LINENUM}33952, 'delete(A)', success);

  // Column space projection

  Test({LINENUM}33956, 'A ≔ ❨❨3, 2, 1❩, ❨2, 0, 7❩, ❨−3, 2, 5❩❩;', null);

  Eps; Test({LINENUM}33958, 'ColumnSpaceProjection(A, ❨12, 30, 5❩)', [12, 30, 5]);
  Eps; Test({LINENUM}33959, 'DistanceFromColumnSpace(A, ❨12, 30, 5❩)', 0.0);
  Eps; Test({LINENUM}33960, 'ColumnSpaceProjection(A, ❨−3, 20, 1❩)', [-3, 20, 1]);
  Eps; Test({LINENUM}33961, 'DistanceFromColumnSpace(A, ❨−3, 20, 1❩)', 0.0);

  Test({LINENUM}33963, 'A ≔ ❨❨6, 3, 2❩, ❨0, −2, 4❩, ❨7, 0, 9❩, ❨6, 3, 0❩❩; v ≔ ❨5, 3, 0, 1❩;', null);
  Eps; Test({LINENUM}33964, 'ColumnSpaceProjection(A, v)', [2.95361527967257844, -0.581173260572987722, 2.04638472032742156, 0.658935879945429741]);
  Eps; Test({LINENUM}33965, 'DistanceFromColumnSpace(A, v)', 4.61698034470698621);

  Test({LINENUM}33967, 'A ≔ ❨❨4, 7, 9, 0❩, ❨1, 3, -6, 6❩, ❨6, 5, 0, 1❩, ❨2, 6, 1, 0❩, ❨1, 1, 4, 2❩❩; v ≔ ❨2, 0, 1, −1, 0❩;', null);
  Eps; Test({LINENUM}33968, 'ColumnSpaceProjection(A, v)', [1.28748228789665694, -0.330209821415635332, 1.13177746933524194, -0.267562437880864553, 0.924740729579285025]);
  Eps; Test({LINENUM}33969, 'DistanceFromColumnSpace(A, v)', 1.42326930585556422);

  Test({LINENUM}33971, 'A ≔ ❨❨4, 7, 9, 6❩, ❨1, 3, -6, -8❩, ❨6, 5, 0, 1❩, ❨2, 6, 1, -3❩, ❨1, 1, 4, 4❩❩; v ≔ ❨3, 5, 1, 4, 1❩;', null);
  Test({LINENUM}33972, 'rank(A)', 3);
  Eps; Test({LINENUM}33973, 'ColumnSpaceProjection(A, v)', [2.79078582702608652, 3.83413494401153325, 1.30851447249046145, 4.81697177584728384, -0.482308638753215764]);
  Eps; Test({LINENUM}33974, 'DistanceFromColumnSpace(A, v)', 2.08874959287553019);

  Test({LINENUM}33976, 'A ≔ ❨❨4, 7, -2, 1❩, ❨1, 3, -3, -1❩, ❨6, 5, 8, 7❩, ❨2, 6, -6, -2❩, ❨1, 1, 1, 1❩❩; v ≔ ❨3, 5, 1, 4, 1❩;', null);
  Test({LINENUM}33977, 'rank(A)', 2);
  Eps; Test({LINENUM}33978, 'ColumnSpaceProjection(A, v)', [4.07277628032345013, 2.24797843665768194, 0.698113207547169812, 4.49595687331536388, 0.28032345013477089]);
  Eps; Test({LINENUM}33979, 'DistanceFromColumnSpace(A, v)', 3.09507913061973969);

  Test({LINENUM}33981, 'A ≔ ❨❨4, -8, 12, -4❩, ❨1, -2, 3, -1❩, ❨6, -12, 18, -6❩, ❨2, -4, 6, -2❩, ❨1, -2, 3, -1❩❩; v ≔ ❨3, 5, 1, 4, 1❩;', null);
  Test({LINENUM}33982, 'rank(A)', 1);
  Eps; Test({LINENUM}33983, 'ColumnSpaceProjection(A, v)', [2.20689655172413793, 0.551724137931034483, 3.3103448275862069, 1.10344827586206897, 0.551724137931034483]);
  Eps; Test({LINENUM}33984, 'DistanceFromColumnSpace(A, v)', 5.8604460228046548);

  Test({LINENUM}33986, 'A ≔ ❨❨4, 7, 1, -2, 9, -4❩, ❨1, 3, -1, -3, -6, 6❩, ❨6, 5, 7, 8, 0, 13❩, ❨2, 6, -2, -6, 1, -1❩, ❨1, 1, 1, 1, 4, -2❩❩; v ≔ ❨1, 0, −2, 1, 2❩;', null);
  Test({LINENUM}33987, 'rank(A)', 3);
  Eps; Test({LINENUM}33988, 'ColumnSpaceProjection(A, v)', [1.38405229732920721, -0.515292743248449598, -1.89602674521208506, 0.995600462324298125, 0.364043100555534842]);
  Eps; Test({LINENUM}33989, 'DistanceFromColumnSpace(A, v)', 1.76074062508117727);

  Test({LINENUM}33991, 'ColumnSpaceProjection(ComplexMatrix(A), v)', failure, 'Not implemented for complex matrices.');
  Test({LINENUM}33992, 'ColumnSpaceProjection(A, ComplexVector(v))', failure, 'Not implemented for complex matrices.');
  Test({LINENUM}33993, 'DistanceFromColumnSpace(ComplexMatrix(A), v)', failure, 'Not implemented for complex matrices.');
  Test({LINENUM}33994, 'DistanceFromColumnSpace(A, ComplexVector(v))', failure, 'Not implemented for complex matrices.');

  Test({LINENUM}33996, 'A ≔ ❨❨6, 3, 2❩, ❨0, −2, 4❩, ❨7, 0, 9❩, ❨6, 3, 0❩❩; v ≔ ❨5, 3, 0❩;', null);
  Eps; Test({LINENUM}33997, 'ColumnSpaceProjection(A, v)', failure, 'When multiplying two matrices, ');
  Eps; Test({LINENUM}33998, 'DistanceFromColumnSpace(A, v)', failure, 'When multiplying two matrices, ');

  Test({LINENUM}34000, 'delete(A); delete(v)', success);

  // Additional column space tests (with explicit matrix constructions)

  Test({LINENUM}34004, '(a, b, c, d) ≔ ❨3, 0, 1, −2, 1❩, ❨0, 2, 4, −3, 1❩, ❨6, 2, 3, −1, 2❩, ❨0, 0, 2, 3, −1❩;', null);

  Test({LINENUM}34006, 'A ≔ MatFromCols(a, b, c, d);', null);
  Test({LINENUM}34007, 'rank(A)', 4);
  Test({LINENUM}34008, 'ColumnSpaceBasis(A)', 4, [3, 0, 6, 0, 0, 2, 2, 0, 1, 4, 3, 2, -2, -3, -1, 3, 1, 1, 2, -1]); // = A

  Test({LINENUM}34010, 'A ≔ MatFromCols(a, b, c, 2⋅a − b − c);', null);
  Test({LINENUM}34011, 'rank(A)', 3);
  Test({LINENUM}34012, 'ColumnSpaceBasis(A)', 3, [3, 0, 6, 0, 2, 2, 1, 4, 3, -2, -3, -1, 1, 1, 2]);

  Test({LINENUM}34014, 'A ≔ MatFromCols(a, b, a − 2⋅b, c);', null);
  Test({LINENUM}34015, 'rank(A)', 3);
  Test({LINENUM}34016, 'ColumnSpaceBasis(A)', 3, [3, 0, 6, 0, 2, 2, 1, 4, 3, -2, -3, -1, 1, 1, 2]);

  Test({LINENUM}34018, 'A ≔ MatFromCols(a, b, a − 2⋅b, 3⋅a − 2⋅b);', null);
  Test({LINENUM}34019, 'rank(A)', 2);
  Test({LINENUM}34020, 'ColumnSpaceBasis(A)', 2, [3, 0, 0, 2, 1, 4, -2, -3, 1, 1]);

  Test({LINENUM}34022, 'A ≔ MatFromCols(a, b, 2⋅b − a, c, a − 2⋅b + c, 2⋅c − b, d);', null);
  Test({LINENUM}34023, 'rank(A)', 4);
  Test({LINENUM}34024, 'ColumnSpaceBasis(A)', 4, [3, 0, 6, 0, 0, 2, 2, 0, 1, 4, 3, 2, -2, -3, -1, 3, 1, 1, 2, -1]);

  Test({LINENUM}34026, 'A ≔ MatFromCols(a, b, 2⋅b − a, c, a − 2⋅b + c, 2⋅c − b, 2⋅b − a − c);', null);
  Test({LINENUM}34027, 'rank(A)', 3);
  Test({LINENUM}34028, 'ColumnSpaceBasis(A)', 3, [3, 0, 6, 0, 2, 2, 1, 4, 3, -2, -3, -1, 1, 1, 2]);

  Test({LINENUM}34030, 'A ≔ MatFromCols(a, b, 5⋅a − 4⋅b, 3⋅b − 2⋅a, 2⋅a − b, b − a, 5⋅b − 3⋅a);', null);
  Test({LINENUM}34031, 'rank(A)', 2);
  Test({LINENUM}34032, 'ColumnSpaceBasis(A)', 2, [3, 0, 0, 2, 1, 4, -2, -3, 1, 1]);

  Test({LINENUM}34034, 'A ≔ MatFromCols(a, b, 5⋅a − 4⋅b, 3⋅b − 2⋅a, 2⋅a − b, c, 5⋅b − 3⋅a);', null);
  Test({LINENUM}34035, 'rank(A)', 3);
  Test({LINENUM}34036, 'ColumnSpaceBasis(A)', 3, [3, 0, 6, 0, 2, 2, 1, 4, 3, -2, -3, -1, 1, 1, 2]);

  Test({LINENUM}34038, 'A ≔ MatFromCols(a, b);', null);
  Test({LINENUM}34039, 'rank(A)', 2);
  Test({LINENUM}34040, 'ColumnSpaceBasis(A)', 2, [3, 0, 0, 2, 1, 4, -2, -3, 1, 1]);

  Test({LINENUM}34042, 'A ≔ MatFromCols(a);', null);
  Test({LINENUM}34043, 'rank(A)', 1);
  Test({LINENUM}34044, 'ColumnSpaceBasis(A)', 1, [3, 0, 1, -2, 1]);

  Test({LINENUM}34046, 'delete(A)', success);

  // Row operations

  Test({LINENUM}34050, 'A ≔ ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩;', null);

  Test({LINENUM}34052, 'RowSwap(A, 3, 3) = A', True);
  Test({LINENUM}34053, 'RowSwap(A, 2, 4) = ❨❨3, 2, 1, 4❩, ❨8, 3, 0, 1❩, ❨7, 2, 1, 6❩, ❨6, 0, 2, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34054, 'RowSwap(A, 1, 2) = ❨❨6, 0, 2, 1❩, ❨3, 2, 1, 4❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34055, 'RowSwap(A, 1, 6) = ❨❨0, 4, 8, 2❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨3, 2, 1, 4❩❩', True);
  Test({LINENUM}34056, 'RowSwap(A, 1, 1) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34057, 'RowSwap(A, 6, 6) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34058, 'RowSwap(RowSwap(A, 1, 3), 3, 1) = A', True);
  Test({LINENUM}34059, 'RowSwap(RowSwap(A, 1, 3), 1, 3) = A', True);
  Test({LINENUM}34060, 'RowSwap(RowSwap(A, 3, 1), 3, 1) = A', True);
  Test({LINENUM}34061, 'RowSwap(RowSwap(A, 3, 1), 1, 3) = A', True);
  Test({LINENUM}34062, 'RowSwap(A, 1, 7)', failure, 'Index 7 out of bounds.');
  Test({LINENUM}34063, 'RowSwap(A, 1, 0)', failure, 'A positive integer was expected as argument 3, but "0" was given.');
  Test({LINENUM}34064, 'RowSwap(A, 1, -2)', failure, 'A positive integer was expected as argument 3, but "-2" was given.');
  Test({LINENUM}34065, 'RowSwap(A, 7, 2)', failure, 'Index 7 out of bounds.');
  Test({LINENUM}34066, 'RowSwap(A, 0, 2)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}34067, 'RowSwap(A, -2, 2)', failure, 'A positive integer was expected as argument 2, but "-2" was given.');
  Test({LINENUM}34068, 'RowSwap(4, 1, 2)', failure, 'An object of type matrix was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}34069, 'RowSwap(❨1, 2, 3, 4❩, 1, 2)', failure, 'An object of type matrix was expected as argument 1, but an object of type real vector was given.');

  Test({LINENUM}34071, 'A ≔ ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩;', null);

  Test({LINENUM}34073, 'RowSwap(A, 3, 3) = A', True);
  Test({LINENUM}34074, 'RowSwap(A, 2, 4) = ❨❨3, 2, i, 4❩, ❨8, 3, 0, 1❩, ❨7, 2, 1, 6❩, ❨6, 0, 2, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34075, 'RowSwap(A, 1, 2) = ❨❨6, 0, 2, 1❩, ❨3, 2, i, 4❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34076, 'RowSwap(A, 1, 6) = ❨❨0, 4, 8, 2❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨3, 2, i, 4❩❩', True);
  Test({LINENUM}34077, 'RowSwap(A, 1, 1) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34078, 'RowSwap(A, 6, 6) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34079, 'RowSwap(RowSwap(A, 1, 3), 3, 1) = A', True);
  Test({LINENUM}34080, 'RowSwap(RowSwap(A, 1, 3), 1, 3) = A', True);
  Test({LINENUM}34081, 'RowSwap(RowSwap(A, 3, 1), 3, 1) = A', True);
  Test({LINENUM}34082, 'RowSwap(RowSwap(A, 3, 1), 1, 3) = A', True);
  Test({LINENUM}34083, 'RowSwap(A, 1, 7)', failure, 'Index 7 out of bounds.');
  Test({LINENUM}34084, 'RowSwap(A, 1, 0)', failure, 'A positive integer was expected as argument 3, but "0" was given.');
  Test({LINENUM}34085, 'RowSwap(A, 1, -2)', failure, 'A positive integer was expected as argument 3, but "-2" was given.');
  Test({LINENUM}34086, 'RowSwap(A, 7, 2)', failure, 'Index 7 out of bounds.');
  Test({LINENUM}34087, 'RowSwap(A, 0, 2)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}34088, 'RowSwap(A, -2, 2)', failure, 'A positive integer was expected as argument 2, but "-2" was given.');
  Test({LINENUM}34089, 'RowSwap(i, 1, 2)', failure, 'An object of type matrix was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}34090, 'RowSwap(❨i, 2, 3, 4❩, 1, 2)', failure, 'An object of type matrix was expected as argument 1, but an object of type complex vector was given.');

  Test({LINENUM}34092, 'A ≔ ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩;', null);

  Test({LINENUM}34094, 'RowScale(A, 3, 10) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨70, 20, 10, 60❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34095, 'RowScale(A, 5, 2) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨10, 10, 6, 2❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34096, 'RowScale(A, 1, -1) = ❨❨-3, -2, -1, -4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34097, 'RowScale(A, 4, -3) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨-24, -9, 0, -3❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34098, 'RowScale(A, 6, 1/2) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 2, 4, 1❩❩', True);
  Test({LINENUM}34099, 'RowScale(A, 1, 1/3) = ❨❨1, 2/3, 1/3, 4/3❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34100, 'RowScale(A, 1, 1) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34101, 'RowScale(A, 1, 0) = ❨❨0, 0, 0, 0❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34102, 'RowScale(A, 7, 1)', failure, 'Index 7 out of bounds.');
  Test({LINENUM}34103, 'RowScale(A, 0, 1)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}34104, 'RowScale(A, -5, 1)', failure, 'A positive integer was expected as argument 2, but "-5" was given.');
  Test({LINENUM}34105, 'RowScale(❨4, 1, 2❩, 2, 3)', failure, 'An object of type matrix was expected as argument 1, but an object of type real vector was given.');

  Test({LINENUM}34107, 'A ≔ ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩;', null);

  Test({LINENUM}34109, 'RowScale(A, 3, 10) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨70, 20, 10, 60❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34110, 'RowScale(A, 5, 2) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨10, 10, 6, 2❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34111, 'RowScale(A, 1, -1) = ❨❨-3, -2, -i, -4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34112, 'RowScale(A, 4, -3) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨-24, -9, 0, -3❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34113, 'RowScale(A, 6, 1/2) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 2, 4, 1❩❩', True);
  Test({LINENUM}34114, 'RowScale(A, 1, 1/3) = ❨❨1, 2/3, i/3, 4/3❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34115, 'RowScale(A, 1, 1) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34116, 'RowScale(A, 1, 0) = ❨❨0, 0, 0, 0❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34117, 'RowScale(A, 7, 1)', failure, 'Index 7 out of bounds.');
  Test({LINENUM}34118, 'RowScale(A, 0, 1)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}34119, 'RowScale(A, -5, 1)', failure, 'A positive integer was expected as argument 2, but "-5" was given.');
  Test({LINENUM}34120, 'RowScale(❨4, i, 2❩, 2, 3)', failure, 'An object of type matrix was expected as argument 1, but an object of type complex vector was given.');

  Test({LINENUM}34122, 'A ≔ ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩;', null);

  Test({LINENUM}34124, 'RowAddMul(A, 3, 2, 5) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨37, 2, 11, 11❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34125, 'RowAddMul(A, 6, 3, -1) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨-7, 2, 7, -4❩❩', True);
  Test({LINENUM}34126, 'RowAddMul(A, 5, 6, 2) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 13, 19, 5❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34127, 'RowAddMul(A, 5, 6, 0) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34128, 'RowAddMul(A, 3, 1, 10) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨37, 22, 11, 46❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34129, 'RowAddMul(A, 4, 4, 2) = ❨❨3, 2, 1, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨24, 9, 0, 3❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34130, 'RowAddMul(A, 7, 6, 2)', failure, 'Index 7 out of bounds.');
  Test({LINENUM}34131, 'RowAddMul(A, 5, 7, 2)', failure, 'Index 7 out of bounds.');
  Test({LINENUM}34132, 'RowAddMul(A, 0, 6, 2)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}34133, 'RowAddMul(A, 5, -2, 2)', failure, 'A positive integer was expected as argument 3, but "-2" was given.');

  Test({LINENUM}34135, 'A ≔ ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩;', null);

  Test({LINENUM}34137, 'RowAddMul(A, 3, 2, 5) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨37, 2, 11, 11❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34138, 'RowAddMul(A, 6, 3, -1) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨-7, 2, 7, -4❩❩', True);
  Test({LINENUM}34139, 'RowAddMul(A, 5, 6, 2) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 13, 19, 5❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34140, 'RowAddMul(A, 5, 6, 0) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34141, 'RowAddMul(A, 3, 1, 10) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨37, 22, 1 + 10⋅i, 46❩, ❨8, 3, 0, 1❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34142, 'RowAddMul(A, 4, 4, 2) = ❨❨3, 2, i, 4❩, ❨6, 0, 2, 1❩, ❨7, 2, 1, 6❩, ❨24, 9, 0, 3❩, ❨5, 5, 3, 1❩, ❨0, 4, 8, 2❩❩', True);
  Test({LINENUM}34143, 'RowAddMul(A, 7, 6, 2)', failure, 'Index 7 out of bounds.');
  Test({LINENUM}34144, 'RowAddMul(A, 5, 7, 2)', failure, 'Index 7 out of bounds.');
  Test({LINENUM}34145, 'RowAddMul(A, 0, 6, 2)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}34146, 'RowAddMul(A, 5, -2, 2)', failure, 'A positive integer was expected as argument 3, but "-2" was given.');

  // Row echelon form and reduced row echelon form

  StartStopwatch;

  _j := RandSeed;
  RandSeed := 312537;
  try
    for _i := 1 to 100 do
    begin
      Test({LINENUM}34157, 'A ≔ RandomMatrix(10);', null);
      Test({LINENUM}34158, 'B ≔ RowEchelonForm(A);', null);
      Test({LINENUM}34159, 'IsRowEchelonForm(B)', True);
      Test({LINENUM}34160, 'abs(det(A)) ≈ abs(det(B))', True);
      Test({LINENUM}34161, 'C ≔ ReducedRowEchelonForm(A);', null);
      Test({LINENUM}34162, 'IsReducedRowEchelonForm(C)', True);
    end;

    for _i := 1 to 100 do
    begin

      Test({LINENUM}34168, 'A ≔ RandomMatrix(10, 11);', null);
      Test({LINENUM}34169, 'u ≔ SysSolve(A);', null);

      Test({LINENUM}34171, 'B ≔ RowEchelonForm(A);', null);
      Test({LINENUM}34172, 'IsRowEchelonForm(B)', True);
      Test({LINENUM}34173, 'v ≔ SysSolve(B);', null);
      Test({LINENUM}34174, 'u ≈ v', True);

      Test({LINENUM}34176, 'C ≔ ReducedRowEchelonForm(A);', null);
      Test({LINENUM}34177, 'IsReducedRowEchelonForm(C)', True);
      Test({LINENUM}34178, 'w ≔ SysSolve(C);', null);
      Test({LINENUM}34179, 'u ≈ w', True);

    end;

  finally
    RandSeed := _j;
  end;

  StopStopwatch;
  TestDuration({LINENUM}34188, 0.1);

  StartStopwatch;

  _j := RandSeed;
  RandSeed := 312537;
  try
    for _i := 1 to 100 do
    begin
      Test({LINENUM}34197, 'A ≔ RandomMatrix(10) + RandomMatrix(10)⋅i;', null);
      Test({LINENUM}34198, 'B ≔ RowEchelonForm(A);', null);
      Test({LINENUM}34199, 'IsRowEchelonForm(B)', True);
      Test({LINENUM}34200, 'abs(det(A)) ≈ abs(det(B))', True);
      Test({LINENUM}34201, 'C ≔ ReducedRowEchelonForm(A);', null);
      Test({LINENUM}34202, 'IsReducedRowEchelonForm(C)', True);
    end;

    for _i := 1 to 100 do
    begin

      Test({LINENUM}34208, 'A ≔ RandomMatrix(10, 11) + RandomMatrix(10, 11)⋅i;', null);
      Test({LINENUM}34209, 'u ≔ SysSolve(A);', null);

      Test({LINENUM}34211, 'B ≔ RowEchelonForm(A);', null);
      Test({LINENUM}34212, 'IsRowEchelonForm(B)', True);
      Test({LINENUM}34213, 'v ≔ SysSolve(B);', null);
      Test({LINENUM}34214, 'u ≈ v', True);

      Test({LINENUM}34216, 'C ≔ ReducedRowEchelonForm(A);', null);
      Test({LINENUM}34217, 'IsReducedRowEchelonForm(C)', True);
      Test({LINENUM}34218, 'w ≔ SysSolve(C);', null);
      Test({LINENUM}34219, 'u ≈ w', True);

    end;

  finally
    RandSeed := _j;
  end;

  StopStopwatch;
  TestDuration({LINENUM}34228, 0.2);

  Test({LINENUM}34230, 'delete(A); delete(B); delete(C); delete(u); delete(v); delete(w)', success);

  Test({LINENUM}34232, 'RowEchelonForm(❨❨21❩❩)', 1, [21]);
  Test({LINENUM}34233, 'ReducedRowEchelonForm(❨❨21❩❩)', 1, [1]);

  Test({LINENUM}34235, 'RowEchelonForm(❨❨21⋅i❩❩)', 1, [21*ImaginaryUnit]);
  Test({LINENUM}34236, 'ReducedRowEchelonForm(❨❨21⋅i❩❩)', 1, [TASC(1)]);

  Test({LINENUM}34238, 'RowEchelonForm(❨❨21, 22, 23❩❩)', 3, [21, 22, 23]);
  Test({LINENUM}34239, 'ReducedRowEchelonForm(❨❨21, 22, 23❩❩)', 3, [1, 22/21, 23/21]);

  Test({LINENUM}34241, 'RowEchelonForm(ComplexMatrix(❨❨21, 22, 23❩❩))', 3, [TASC(21), 22, 23]);
  Test({LINENUM}34242, 'ReducedRowEchelonForm(ComplexMatrix(❨❨21, 22, 23❩❩))', 3, [TASC(1), 22/21, 23/21]);

  Test({LINENUM}34244, 'RowEchelonForm(❨❨21, 22, 23❩❩*)', 1, [23, 0, 0]); // the greatest pivot element is selected
  Test({LINENUM}34245, 'ReducedRowEchelonForm(❨❨21, 22, 23❩❩*)', 1, [1, 0, 0]);

  Test({LINENUM}34247, 'RowEchelonForm(ComplexMatrix(❨❨21, 22, 23❩❩*))', 1, [TASC(23), 0, 0]); // the greatest pivot element is selected
  Test({LINENUM}34248, 'ReducedRowEchelonForm(ComplexMatrix(❨❨21, 22, 23❩❩*))', 1, [TASC(1), 0, 0]);


  //
  // Special matrix constructors
  //

  // Reversal matrices

  Test({LINENUM}34257, 'ReversalMatrix(1)', 1, [1]);
  Test({LINENUM}34258, 'ReversalMatrix(2)', 2, [0, 1, 1, 0]);
  Test({LINENUM}34259, 'ReversalMatrix(3)', 3, [0, 0, 1, 0, 1, 0, 1, 0, 0]);
  Test({LINENUM}34260, 'ReversalMatrix(4)', 4, [0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0]);
  Test({LINENUM}34261, 'ReversalMatrix(5)', 5, [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0]);

  for _i := 1 to 100 do
  begin
    Test({LINENUM}34265, Format('A ≔ ReversalMatrix(%d);', [_i]), null);
    Test({LINENUM}34266, 'IsReversal(A)', True);
    Test({LINENUM}34267, 'IsPermutation(A)', True);
    Test({LINENUM}34268, 'IsBinary(A)', True);
    Test({LINENUM}34269, 'IsOrthogonal(A)', True);
    Test({LINENUM}34270, 'IsSymmetric(A)', True);
    Test({LINENUM}34271, 'IsNormal(A)', True);
  end;

  Test({LINENUM}34274, 'ReversalMatrix(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}34275, 'ReversalMatrix(-1)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');

  // Circulant matrices

  Test({LINENUM}34279, 'CirculantMatrix(❨21❩)', 1, [21]);
  Test({LINENUM}34280, 'CirculantMatrix(❨1, 2❩)', 2, [1, 2, 2, 1]);
  Test({LINENUM}34281, 'CirculantMatrix(❨1, 2, 3❩)', 3, [1, 2, 3, 3, 1, 2, 2, 3, 1]);
  Test({LINENUM}34282, 'CirculantMatrix(❨1, 2, 3, 4❩)', 4, [1, 2, 3, 4, 4, 1, 2, 3, 3, 4, 1, 2, 2, 3, 4, 1]);
  Test({LINENUM}34283, 'CirculantMatrix(❨1, 2, 3, 4, 5❩)', 5, [1, 2, 3, 4, 5, 5, 1, 2, 3, 4, 4, 5, 1, 2, 3, 3, 4, 5, 1, 2, 2, 3, 4, 5, 1]);

  for _i := 1 to 100 do
  begin
    Test({LINENUM}34287, Format('A ≔ CirculantMatrix(SequenceVector(%d));', [_i]), null);
    Test({LINENUM}34288, 'IsCirculant(A)', True);
    Test({LINENUM}34289, 'IsToeplitz(A)', True);
  end;

  Test({LINENUM}34292, 'CirculantMatrix(❨1, i, 2, −i❩)', 4, [1, ImaginaryUnit, 2, -ImaginaryUnit, -ImaginaryUnit, 1, ImaginaryUnit, 2, 2, -ImaginaryUnit, 1, ImaginaryUnit, ImaginaryUnit, 2, -ImaginaryUnit, 1]);
  Test({LINENUM}34293, 'IsCirculant(CirculantMatrix(❨1, i, 2, −i❩))', True);
  Test({LINENUM}34294, 'IsToeplitz(CirculantMatrix(❨1, i, 2, −i❩))', True);

  // Toeplitz matrices

  Test({LINENUM}34298, 'ToeplitzMatrix(❨1, 2, 3, 4, 5❩)', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}34299, 'ToeplitzMatrix(❨1, 2, 3, 4, 5❩, ❨1, 20, 30, 40, 50❩)', 5, [1, 2, 3, 4, 5, 20, 1, 2, 3, 4, 30, 20, 1, 2, 3, 40, 30, 20, 1, 2, 50, 40, 30, 20, 1]);
  Test({LINENUM}34300, 'ToeplitzMatrix(❨1, 2, 3, 4, 5❩, ❨10, 20, 30, 40, 50❩)', failure, 'The first element of the first row must equal the first element of the first column.');

  Test({LINENUM}34302, 'ToeplitzMatrix(❨1, 2, 3, 4❩, ❨1, 20, 30, 40, 50❩)', 4, [1, 2, 3, 4, 20, 1, 2, 3, 30, 20, 1, 2, 40, 30, 20, 1, 50, 40, 30, 20]);
  Test({LINENUM}34303, 'ToeplitzMatrix(❨1, 2, 3, 4, 5❩, ❨1, 20, 30, 40❩)', 5, [1, 2, 3, 4, 5, 20, 1, 2, 3, 4, 30, 20, 1, 2, 3, 40, 30, 20, 1, 2]);

  Test({LINENUM}34305, 'ToeplitzMatrix(❨i, 2, 3, 4, 5❩)', failure, 'Too few arguments. A required argument of type vector is missing.');
  Test({LINENUM}34306, 'ToeplitzMatrix(❨i, 2, 3, 4, 5❩, ❨i, 20, 30, 40, 50❩)', 5, [ImaginaryUnit, 2, 3, 4, 5, 20, ImaginaryUnit, 2, 3, 4, 30, 20, ImaginaryUnit, 2, 3, 40, 30, 20, ImaginaryUnit, 2, 50, 40, 30, 20, ImaginaryUnit]);
  Test({LINENUM}34307, 'ToeplitzMatrix(❨i, 2, 3, 4, 5❩, ❨10, 20, 30, 40, 50❩)', failure, 'The first element of the first row must equal the first element of the first column.');

  Test({LINENUM}34309, 'ToeplitzMatrix(❨i, 2, 3, 4❩, ❨i, 20, 30, 40, 50❩)', 4, [ImaginaryUnit, 2, 3, 4, 20, ImaginaryUnit, 2, 3, 30, 20, ImaginaryUnit, 2, 40, 30, 20, ImaginaryUnit, 50, 40, 30, 20]);
  Test({LINENUM}34310, 'ToeplitzMatrix(❨i, 2, 3, 4, 5❩, ❨i, 20, 30, 40❩)', 5, [ImaginaryUnit, 2, 3, 4, 5, 20, ImaginaryUnit, 2, 3, 4, 30, 20, ImaginaryUnit, 2, 3, 40, 30, 20, ImaginaryUnit, 2]);

  Test({LINENUM}34312, 'ToeplitzMatrix(❨1, 2, 3, 4, i, 6❩, ❨1, 20, 30❩)', 6, [1, 2, 3, 4, ImaginaryUnit, 6, 20, 1, 2, 3, 4, ImaginaryUnit, 30, 20, 1, 2, 3, 4]);
  Test({LINENUM}34313, 'ToeplitzMatrix(❨1, 2, 3❩, ❨1, 20, 30, 40, i, 50❩)', 3, [1, 2, 3, 20, 1, 2, 30, 20, 1, 40, 30, 20, ImaginaryUnit, 40, 30, 50, ImaginaryUnit, 40]);

  Test({LINENUM}34315, 'IsToeplitz(ToeplitzMatrix(❨1, 2, 3, 4❩, ❨1, 20, 30, 40, 50❩))', True);
  Test({LINENUM}34316, 'IsToeplitz(ToeplitzMatrix(❨1, 2, 3, 4, 5❩, ❨1, 20, 30, 40❩))', True);

  Test({LINENUM}34318, 'IsToeplitz(ToeplitzMatrix(❨i, 2, 3, 4, 5❩, ❨i, 20, 30, 40, 50❩))', True);

  Test({LINENUM}34320, 'IsToeplitz(ToeplitzMatrix(❨i, 2, 3, 4❩, ❨i, 20, 30, 40, 50❩))', True);
  Test({LINENUM}34321, 'IsToeplitz(ToeplitzMatrix(❨i, 2, 3, 4, 5❩, ❨i, 20, 30, 40❩))', True);

  Test({LINENUM}34323, 'IsToeplitz(ToeplitzMatrix(❨1, 2, 3, 4, i, 6❩, ❨1, 20, 30❩))', True);
  Test({LINENUM}34324, 'IsToeplitz(ToeplitzMatrix(❨1, 2, 3❩, ❨1, 20, 30, 40, i, 50❩))', True);

  Test({LINENUM}34326, 'ToeplitzMatrix(❨1, 2, 3, 4, 5❩, ❨1❩)', 5, [1, 2, 3, 4, 5]);
  Test({LINENUM}34327, 'ToeplitzMatrix(❨1❩, ❨1, 2, 3❩)', 1, [1, 2, 3]);
  Test({LINENUM}34328, 'ToeplitzMatrix(❨21❩, ❨21❩)', 1, [21]);
  Test({LINENUM}34329, 'ToeplitzMatrix(❨21❩, ❨22❩)', failure, 'The first element of the first row must equal the first element of the first column.');
  Test({LINENUM}34330, 'ToeplitzMatrix(❨21❩, ❨22❩, ❨23❩)', failure, 'Too many arguments.');

  // Hankel matrices

  Test({LINENUM}34334, 'HankelMatrix(❨1, 2, 3, 4, 5❩, ❨5, 40, 30, 20, 10❩)', 5, [1, 2, 3, 4, 5, 2, 3, 4, 5, 40, 3, 4, 5, 40, 30, 4, 5, 40, 30, 20, 5, 40, 30, 20, 10]);
  Test({LINENUM}34335, 'HankelMatrix(❨1, 2, 3, 4, 5❩, ❨50, 40, 30, 20, 10❩)', failure, 'The last element of the first row must equal the first element of the last column.');

  Test({LINENUM}34337, 'HankelMatrix(❨1, 2, 3, 4, 5❩, ❨5, 40, 30❩)', 5, [1, 2, 3, 4, 5, 2, 3, 4, 5, 40, 3, 4, 5, 40, 30]);
  Test({LINENUM}34338, 'HankelMatrix(❨1, 2, 3❩, ❨3, 40, 50, 60, 70❩)', 3, [1, 2, 3, 2, 3, 40, 3, 40, 50, 40, 50, 60, 50, 60, 70]);

  Test({LINENUM}34340, 'HankelMatrix(❨i, 2, 3, 4, 5❩, ❨5, 40, 30, 20, 10❩)', 5, [ImaginaryUnit, 2, 3, 4, 5, 2, 3, 4, 5, 40, 3, 4, 5, 40, 30, 4, 5, 40, 30, 20, 5, 40, 30, 20, 10]);
  Test({LINENUM}34341, 'HankelMatrix(❨i, 2, 3, 4, 5❩, ❨50, 40, 30, 20, 10❩)', failure, 'The last element of the first row must equal the first element of the last column.');

  Test({LINENUM}34343, 'HankelMatrix(❨i, 2, 3, 4, 5❩, ❨5, 40, 30❩)', 5, [ImaginaryUnit, 2, 3, 4, 5, 2, 3, 4, 5, 40, 3, 4, 5, 40, 30]);
  Test({LINENUM}34344, 'HankelMatrix(❨i, 2, 3❩, ❨3, 40, 50, 60, 70❩)', 3, [ImaginaryUnit, 2, 3, 2, 3, 40, 3, 40, 50, 40, 50, 60, 50, 60, 70]);

  Test({LINENUM}34346, 'HankelMatrix(❨1, 2, 3, 4, 5❩, ❨5, 40, 30, 20, i❩)', 5, [1, 2, 3, 4, 5, 2, 3, 4, 5, 40, 3, 4, 5, 40, 30, 4, 5, 40, 30, 20, 5, 40, 30, 20, ImaginaryUnit]);
  Test({LINENUM}34347, 'HankelMatrix(❨1, 2, 3, 4, 5❩, ❨50, 40, 30, 20, i❩)', failure, 'The last element of the first row must equal the first element of the last column.');

  Test({LINENUM}34349, 'HankelMatrix(❨1, 2, 3, 4, 5❩, ❨5, 40, i❩)', 5, [1, 2, 3, 4, 5, 2, 3, 4, 5, 40, 3, 4, 5, 40, ImaginaryUnit]);
  Test({LINENUM}34350, 'HankelMatrix(❨1, 2, 3❩, ❨3, 40, 50, i, 70❩)', 3, [1, 2, 3, 2, 3, 40, 3, 40, 50, 40, 50, ImaginaryUnit, 50, ImaginaryUnit, 70]);

  Test({LINENUM}34352, 'HankelMatrix(❨i, 2, 3, 4, 5❩, ❨i, 40, i❩)', failure, 'The last element of the first row must equal the first element of the last column.');
  Test({LINENUM}34353, 'HankelMatrix(❨i, 2, 3, 4, 5❩, ❨5, 40, i❩)', 5, [ImaginaryUnit, 2, 3, 4, 5, 2, 3, 4, 5, 40, 3, 4, 5, 40, ImaginaryUnit]);
  Test({LINENUM}34354, 'HankelMatrix(❨i, 2, 3❩, ❨3, 40, 50, i, 70❩)', 3, [ImaginaryUnit, 2, 3, 2, 3, 40, 3, 40, 50, 40, 50, ImaginaryUnit, 50, ImaginaryUnit, 70]);

  Test({LINENUM}34356, 'IsHankel(HankelMatrix(❨1, 2, 3, 4, 5❩, ❨5, 40, 30, 20, 10❩))', True);
  Test({LINENUM}34357, 'IsHankel(HankelMatrix(❨1, 2, 3, 4, 5❩, ❨5, 40, 30❩))', True);
  Test({LINENUM}34358, 'IsHankel(HankelMatrix(❨i, 2, 3, 4, 5❩, ❨5, 40, 30❩))', True);
  Test({LINENUM}34359, 'IsHankel(HankelMatrix(❨i, 2, 3❩, ❨3, 40, 50, 60, 70❩))', True);
  Test({LINENUM}34360, 'IsHankel(HankelMatrix(❨1, 2, 3❩, ❨3, 40, 50, 60, 70❩))', True);
  Test({LINENUM}34361, 'IsHankel(HankelMatrix(❨1, 2, 3, 4, 5❩, ❨5, 40, i❩))', True);
  Test({LINENUM}34362, 'IsHankel(HankelMatrix(❨1, 2, 3❩, ❨3, 40, 50, i, 70❩))', True);
  Test({LINENUM}34363, 'IsHankel(HankelMatrix(❨i, 2, 3, 4, 5❩, ❨5, 40, i❩))', True);
  Test({LINENUM}34364, 'IsHankel(HankelMatrix(❨i, 2, 3❩, ❨3, 40, 50, i, 70❩))', True);

  Test({LINENUM}34366, 'IsSymmetric(HankelMatrix(❨1, 2, 3, 4, 5❩, ❨5, 40, 30, 20, 10❩))', True);

  // Backward shift matrices

  Test({LINENUM}34370, 'BackwardShiftMatrix(1)', 1, [0]);
  Test({LINENUM}34371, 'BackwardShiftMatrix(2)', 2, [0, 1, 0, 0]);
  Test({LINENUM}34372, 'BackwardShiftMatrix(3)', 3, [0, 1, 0, 0, 0, 1, 0, 0, 0]);
  Test({LINENUM}34373, 'BackwardShiftMatrix(4)', 4, [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0]);
  Test({LINENUM}34374, 'BackwardShiftMatrix(5)', 5, [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]);

  Test({LINENUM}34376, 'BackwardShiftMatrix(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}34377, 'BackwardShiftMatrix(-1)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');

  for _i := 1 to 100 do
  begin
    Test({LINENUM}34381, Format('A ≔ BackwardShiftMatrix(%d);', [_i]), null);
    Test({LINENUM}34382, 'IsBinary(A)', True);
    Test({LINENUM}34383, 'rank(A)', _i - 1);
    if _i mod 25 = 0 then
      Test({LINENUM}34385, 'NilpotencyIndex(A)', _i);
    if _i >= 2 then
      Test({LINENUM}34387, Format('IsZero(ReplaceSuperdiagonal(A, ZeroVector(%d)))', [_i - 1]), True);
  end;

  Test({LINENUM}34390, 'BackwardShiftMatrix(1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}34391, 'BackwardShiftMatrix()', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}34392, 'BackwardShiftMatrix(π)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}34393, 'BackwardShiftMatrix(i)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  // Forward shift matrices

  Test({LINENUM}34397, 'ForwardShiftMatrix(1)', 1, [0]);
  Test({LINENUM}34398, 'ForwardShiftMatrix(2)', 2, [0, 0, 1, 0]);
  Test({LINENUM}34399, 'ForwardShiftMatrix(3)', 3, [0, 0, 0, 1, 0, 0, 0, 1, 0]);
  Test({LINENUM}34400, 'ForwardShiftMatrix(4)', 4, [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0]);
  Test({LINENUM}34401, 'ForwardShiftMatrix(5)', 5, [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0]);

  Test({LINENUM}34403, 'ForwardShiftMatrix(0)', failure, 'A positive integer was expected as argument 1, but "0" was given.');
  Test({LINENUM}34404, 'ForwardShiftMatrix(-1)', failure, 'A positive integer was expected as argument 1, but "-1" was given.');

  for _i := 1 to 100 do
  begin
    Test({LINENUM}34408, Format('A ≔ ForwardShiftMatrix(%d);', [_i]), null);
    Test({LINENUM}34409, 'IsBinary(A)', True);
    Test({LINENUM}34410, 'rank(A)', _i - 1);
    if _i mod 25 = 0 then
      Test({LINENUM}34412, 'NilpotencyIndex(A)', _i);
    if _i >= 2 then
      Test({LINENUM}34414, Format('IsZero(ReplaceSubdiagonal(A, ZeroVector(%d)))', [_i - 1]), True);
  end;

  Test({LINENUM}34417, 'ForwardShiftMatrix(1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}34418, 'ForwardShiftMatrix()', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}34419, 'ForwardShiftMatrix(π)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}34420, 'ForwardShiftMatrix(i)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  // Vandermonde matrices

  Test({LINENUM}34424, 'VandermondeMatrix(❨1, 2, 3, 4❩)', 4, [1, 1, 1, 1, 1, 2, 4, 8, 1, 3, 9, 27, 1, 4, 16, 64]);

  Test({LINENUM}34426, 'VandermondeMatrix(❨1, 2, 3, 4❩, 5)', 5, [1, 1, 1, 1, 1, 1, 2, 4, 8, 16, 1, 3, 9, 27, 81, 1, 4, 16, 64, 256]);
  Test({LINENUM}34427, 'VandermondeMatrix(❨1, 2, 3, 4❩, 4)', 4, [1, 1, 1, 1, 1, 2, 4, 8, 1, 3, 9, 27, 1, 4, 16, 64]);
  Test({LINENUM}34428, 'VandermondeMatrix(❨1, 2, 3, 4❩, 3)', 3, [1, 1, 1, 1, 2, 4, 1, 3, 9, 1, 4, 16]);
  Test({LINENUM}34429, 'VandermondeMatrix(❨1, 2, 3, 4❩, 2)', 2, [1, 1, 1, 2, 1, 3, 1, 4]);
  Test({LINENUM}34430, 'VandermondeMatrix(❨1, 2, 3, 4❩, 1)', 1, [1, 1, 1, 1]);
  Test({LINENUM}34431, 'VandermondeMatrix(❨1, 2, 3, 4❩, 0)', 4, [1, 1, 1, 1, 1, 2, 4, 8, 1, 3, 9, 27, 1, 4, 16, 64]);

  Test({LINENUM}34433, 'VandermondeMatrix(❨1, 2, 3, 4❩, -1)', failure, 'A non-negative integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}34435, 'VandermondeMatrix(❨2❩, 11)', 11, [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]);

  Test({LINENUM}34437, 'VandermondeMatrix(❨2, −1, i❩, 11)', 11, [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, ImaginaryUnit, -1, -ImaginaryUnit, 1, ImaginaryUnit, -1, -ImaginaryUnit, 1, ImaginaryUnit, -1]);
  Test({LINENUM}34438, 'VandermondeMatrix(❨2, −1, i❩)', 3, [1, 2, 4, 1, -1, 1, 1, ImaginaryUnit, -1]);
  Test({LINENUM}34439, 'VandermondeMatrix(❨2, −1, i❩, 3)', 3, [1, 2, 4, 1, -1, 1, 1, ImaginaryUnit, -1]);
  Test({LINENUM}34440, 'VandermondeMatrix(❨2, −1, i❩, 0)', 3, [1, 2, 4, 1, -1, 1, 1, ImaginaryUnit, -1]);
  Test({LINENUM}34441, 'VandermondeMatrix(❨i❩, 5)', 5, [1, ImaginaryUnit, -1, -ImaginaryUnit, 1]);

  // Hilbert matrices

  Eps; Test({LINENUM}34445, 'HilbertMatrix(1)', 1, [1]);
  Eps; Test({LINENUM}34446, 'HilbertMatrix(2)', 2, [1, 1/2, 1/2, 1/3]);
  Eps; Test({LINENUM}34447, 'HilbertMatrix(3)', 3, [1, 1/2, 1/3, 1/2, 1/3, 1/4, 1/3, 1/4, 1/5]);
  Eps; Test({LINENUM}34448, 'HilbertMatrix(4)', 4, [1, 1/2, 1/3, 1/4, 1/2, 1/3, 1/4, 1/5, 1/3, 1/4, 1/5, 1/6, 1/4, 1/5, 1/6, 1/7]);
  Eps; Test({LINENUM}34449, 'HilbertMatrix(5)', 5, [1, 1/2, 1/3, 1/4, 1/5, 1/2, 1/3, 1/4, 1/5, 1/6, 1/3, 1/4, 1/5, 1/6, 1/7, 1/4, 1/5, 1/6, 1/7, 1/8, 1/5, 1/6, 1/7, 1/8, 1/9]);

  Eps; Test({LINENUM}34451, 'HilbertMatrix(3, 5)', 5, [1, 1/2, 1/3, 1/4, 1/5, 1/2, 1/3, 1/4, 1/5, 1/6, 1/3, 1/4, 1/5, 1/6, 1/7]);
  Eps; Test({LINENUM}34452, 'HilbertMatrix(6, 3)', 3, [1, 1/2, 1/3, 1/2, 1/3, 1/4, 1/3, 1/4, 1/5, 1/4, 1/5, 1/6, 1/5, 1/6, 1/7, 1/6, 1/7, 1/8]);

  Eps; Test({LINENUM}34454, 'HilbertMatrix(1, 10)', 10, [1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10]);
  Eps; Test({LINENUM}34455, 'HilbertMatrix(10, 1)', 1, [1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10]);

  for _i := 1 to 10 do
    for _j := 1 to 10 do
    begin
      Test({LINENUM}34460, Format('A ≔ HilbertMatrix(%d, %d);', [_i, _j]), null);
      Test({LINENUM}34461, 'IsHankel(A)', True);
      if _i = _j then
      begin
        Test({LINENUM}34464, 'IsSymmetric(A)', True);
        Test({LINENUM}34465, 'IsPositiveDefinite(A)', True);
      end;
    end;

  for _i := 1 to 100 do
  begin
    Test({LINENUM}34471, Format('A ≔ HilbertMatrix(%d);', [_i]), null);
    Test({LINENUM}34472, 'IsHankel(A)', True);
    Test({LINENUM}34473, 'IsSymmetric(A)', True);
  end;

  Test({LINENUM}34476, 'delete(A)', success);

  // Rotation matrices

  Eps; Test({LINENUM}34480, 'RotationMatrix(1.234)', 2, [0.330465108071729857, -0.943818209374633705, 0.943818209374633705, 0.330465108071729857]);
  Eps; Test({LINENUM}34481, 'RotationMatrix(1.234, 2)', 2, [0.330465108071729857, -0.943818209374633705, 0.943818209374633705, 0.330465108071729857]);

  Eps; Test({LINENUM}34483, 'RotationMatrix(1.234, 3)', 3, [0.330465108071729857, -0.943818209374633705, 0, 0.943818209374633705, 0.330465108071729857, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34484, 'RotationMatrix(1.234, 3, 1, 2)', 3, [0.330465108071729857, -0.943818209374633705, 0, 0.943818209374633705, 0.330465108071729857, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34485, 'RotationMatrix(1.234, 3, 2, 1)', 3, [0.330465108071729857, -0.943818209374633705, 0, 0.943818209374633705, 0.330465108071729857, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34486, 'RotationMatrix(1.234, 3, 2, 3)', 3, [1, 0, 0, 0, 0.330465108071729857, -0.943818209374633705, 0, 0.943818209374633705, 0.330465108071729857]);
  Eps; Test({LINENUM}34487, 'RotationMatrix(1.234, 3, 3, 2)', 3, [1, 0, 0, 0, 0.330465108071729857, -0.943818209374633705, 0, 0.943818209374633705, 0.330465108071729857]);

  Eps; Test({LINENUM}34489, 'RotationMatrix(1.234, 10, 3, 7)', 10, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.330465108071729857, 0, 0, 0, -0.943818209374633705, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0.943818209374633705, 0, 0, 0, 0.330465108071729857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34490, 'RotationMatrix(1.234, 10, 7, 3)', 10, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.330465108071729857, 0, 0, 0, -0.943818209374633705, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0.943818209374633705, 0, 0, 0, 0.330465108071729857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);

  Test({LINENUM}34492, 'RotationMatrix(1.234, 10, 3, 11)', failure, 'Invalid coordinate indices.');
  Test({LINENUM}34493, 'RotationMatrix(1.234, 10, 11, 3)', failure, 'Invalid coordinate indices.');

  Test({LINENUM}34495, 'RotationMatrix(1.234, 10, 0, 7)', failure, 'A positive integer was expected as argument 3, but "0" was given.');
  Test({LINENUM}34496, 'RotationMatrix(1.234, 10, -3, 7)', failure, 'A positive integer was expected as argument 3, but "-3" was given.');

  Test({LINENUM}34498, 'RotationMatrix(1.234, 10, 3, 0)', failure, 'A positive integer was expected as argument 4, but "0" was given.');
  Test({LINENUM}34499, 'RotationMatrix(1.234, 10, 3, -3)', failure, 'A positive integer was expected as argument 4, but "-3" was given.');

  Test({LINENUM}34501, 'RotationMatrix(1.234, 10, 3, 3)', failure, 'Invalid coordinate indices.');

  Test({LINENUM}34503, 'RotationMatrix(1.234, 1)', failure, 'Invalid coordinate indices.');
  Test({LINENUM}34504, 'RotationMatrix(1.234, 1, 1, 1)', failure, 'Invalid coordinate indices.');
  Test({LINENUM}34505, 'RotationMatrix(1.234, 1, 1, 2)', failure, 'Invalid coordinate indices.');

  Test({LINENUM}34507, 'RotationMatrix(1.234, 10, 7, 3, 5)', failure, 'Too many arguments.');
  Test({LINENUM}34508, 'RotationMatrix()', failure, 'Too few arguments. A required argument of type real number is missing.');

  Eps; Test({LINENUM}34510, 'RotationMatrix(90°, ❨1, 0, 0❩) ⋅ ❨1, 0, 0❩', [1, 0, 0]);
  Eps; Test({LINENUM}34511, 'RotationMatrix(90°, ❨1, 0, 0❩) ⋅ ❨0, 1, 0❩', [0, 0, 1]);
  Eps; Test({LINENUM}34512, 'RotationMatrix(90°, ❨1, 0, 0❩) ⋅ ❨0, 0, 1❩', [0, -1, 0]);

  Eps; Test({LINENUM}34514, 'RotationMatrix(90°, ❨0, 1, 0❩) ⋅ ❨1, 0, 0❩', [0, 0, -1]);
  Eps; Test({LINENUM}34515, 'RotationMatrix(90°, ❨0, 1, 0❩) ⋅ ❨0, 1, 0❩', [0, 1, 0]);
  Eps; Test({LINENUM}34516, 'RotationMatrix(90°, ❨0, 1, 0❩) ⋅ ❨0, 0, 1❩', [1, 0, 0]);

  Eps; Test({LINENUM}34518, 'RotationMatrix(90°, ❨0, 0, 1❩) ⋅ ❨1, 0, 0❩', [0, 1, 0]);
  Eps; Test({LINENUM}34519, 'RotationMatrix(90°, ❨0, 0, 1❩) ⋅ ❨0, 1, 0❩', [-1, 0, 0]);
  Eps; Test({LINENUM}34520, 'RotationMatrix(90°, ❨0, 0, 1❩) ⋅ ❨0, 0, 1❩', [0, 0, 1]);

  Eps; Test({LINENUM}34522, 'RotationMatrix(90°, ❨0, 0, 1❩) ⋅ ❨1, 1, 1❩', [-1, 1, 1]); // (really nothing but linearity...)

  Eps; Test({LINENUM}34524, 'RotationMatrix(90°, ❨1, 1, 0❩) ⋅ ❨1, 0, 0❩', [0.5, 0.5, -1/Sqrt(TASR(2))]);
  Eps; Test({LINENUM}34525, 'RotationMatrix(90°, ❨1, 1, 0❩) ⋅ ❨0, 1, 0❩', [0.5, 0.5, +1/Sqrt(TASR(2))]);
  Eps; Test({LINENUM}34526, 'RotationMatrix(90°, ❨1, 1, 0❩) ⋅ ❨0, 0, 1❩', [1/Sqrt(TASR(2)), -1/Sqrt(TASR(2)), 0]);

  Eps; Test({LINENUM}34528, 'RotationMatrix(90°, ❨1, 0, 1❩) ⋅ ❨1, 0, 0❩', [1/2, 1/Sqrt(TASR(2)), 1/2]);
  Eps; Test({LINENUM}34529, 'RotationMatrix(90°, ❨1, 0, 1❩) ⋅ ❨0, 1, 0❩', [-1/Sqrt(TASR(2)), 0, 1/Sqrt(TASR(2))]);
  Eps; Test({LINENUM}34530, 'RotationMatrix(90°, ❨1, 0, 1❩) ⋅ ❨0, 0, 1❩', [1/2, -1/Sqrt(TASR(2)), 1/2]);

  Eps; Test({LINENUM}34532, 'RotationMatrix(90°, ❨0, 1, 1❩) ⋅ ❨1, 0, 0❩', [0, 1/Sqrt(TASR(2)), -1/Sqrt(TASR(2))]);
  Eps; Test({LINENUM}34533, 'RotationMatrix(90°, ❨0, 1, 1❩) ⋅ ❨0, 1, 0❩', [-1/Sqrt(TASR(2)), 1/2, 1/2]);
  Eps; Test({LINENUM}34534, 'RotationMatrix(90°, ❨0, 1, 1❩) ⋅ ❨0, 0, 1❩', [1/Sqrt(TASR(2)), 1/2, 1/2]);

  Eps; Test({LINENUM}34536, 'RotationMatrix(90°, ❨1, 1, 1❩) ⋅ ❨1, 0, 0❩', [1/3, 0.910683602522959098, -0.244016935856292431]);
  Eps; Test({LINENUM}34537, 'RotationMatrix(90°, ❨1, 1, 1❩) ⋅ ❨0, 1, 0❩', [-0.244016935856292431, 1/3, 0.910683602522959098]);
  Eps; Test({LINENUM}34538, 'RotationMatrix(90°, ❨1, 1, 1❩) ⋅ ❨0, 0, 1❩', [0.910683602522959098, -0.244016935856292431, 1/3]);

  Eps; Test({LINENUM}34540, 'RotationMatrix(38°, ❨1, 2, -1❩) ⋅ ❨1, 2, 3❩', [2.86941579418709284, 0.711976692250990176, 2.29336917868907319]);

  Eps; Test({LINENUM}34542, 'RotationMatrix(360°, ❨1, 2, -1❩) ⋅ ❨1, 2, 3❩', [1, 2, 3]);
  Eps; Test({LINENUM}34543, 'RotationMatrix(0°, ❨1, 2, -1❩) ⋅ ❨1, 2, 3❩', [1, 2, 3]);
  Eps; Test({LINENUM}34544, 'RotationMatrix(180°, ❨1, 2, -1❩) ⋅ RotationMatrix(180°, ❨1, 2, -1❩) ⋅ ❨1, 2, 3❩', [1, 2, 3]);
  Eps; Test({LINENUM}34545, 'RotationMatrix(17°, ❨1, 2, -1❩) ⋅ RotationMatrix(-17°, ❨1, 2, -1❩) ⋅ ❨1, 2, 3❩', [1, 2, 3]);
  Eps; Test({LINENUM}34546, 'RotationMatrix(377°, ❨1, 2, -1❩) ⋅ RotationMatrix(-17°, ❨1, 2, -1❩) ⋅ ❨1, 2, 3❩', [1, 2, 3]);

  Test({LINENUM}34548, 'RotationMatrix(38°, ❨0, 0, 0❩) ⋅ ❨1, 2, 3❩', failure, 'Cannot rotate about the zero vector.');

  _j := RandSeed;
  RandSeed := 632014737;
  try

    for _i := 1 to 100 do
    begin
      Test({LINENUM}34556, Format('A ≔ RotationMatrix(%d°, ❨%d, %d, %d❩);', [Random(1000)-500, 1+Random(10), Random(20)-10, Random(20)-10]), null);
      Test({LINENUM}34557, 'IsOrthogonal(A)', True);
      Eps; Test({LINENUM}34558, 'det(A)', 1.0);
    end;

    for _i := 1 to 100 do
    begin
      Test({LINENUM}34563, Format('v ≔ %d°; A ≔ RotationMatrix(v, ❨1, 0, −1❩); B ≔ RotationMatrix(−v, ❨1, 0, −1❩);', [Random(1000)-500]), null);
      Test({LINENUM}34564, 'SameValue(inv(A), B)', True);
    end;

  finally
    RandSeed := _j
  end;

  Test({LINENUM}34571, 'delete(A); delete(B); delete(v)', success);

  // Reflection matrices

  Eps; Test({LINENUM}34575, 'ReflectionMatrix(❨21❩)', 1, [-1]);
  Eps; Test({LINENUM}34576, 'ReflectionMatrix(❨-21❩)', 1, [-1]);
  Eps; Test({LINENUM}34577, 'ReflectionMatrix(❨1❩)', 1, [-1]);

  Eps; Test({LINENUM}34579, 'ReflectionMatrix(❨1, 0❩)', 2, [-1, 0, 0, 1]);
  Eps; Test({LINENUM}34580, 'ReflectionMatrix(❨0, 1❩)', 2, [1, 0, 0, -1]);

  Eps; Test({LINENUM}34582, 'ReflectionMatrix(❨1, 0, 0❩)', 3, [-1, 0, 0, 0, 1, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34583, 'ReflectionMatrix(❨0, 1, 0❩)', 3, [1, 0, 0, 0, -1, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34584, 'ReflectionMatrix(❨0, 0, 1❩)', 3, [1, 0, 0, 0, 1, 0, 0, 0, -1]);

  Eps; Test({LINENUM}34586, 'ReflectionMatrix(❨1, 0, 0, 0❩)', 4, [-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34587, 'ReflectionMatrix(❨0, 1, 0, 0❩)', 4, [1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34588, 'ReflectionMatrix(❨0, 0, 1, 0❩)', 4, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34589, 'ReflectionMatrix(❨0, 0, 0, 1❩)', 4, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1]);

  Eps; Test({LINENUM}34591, 'ReflectionMatrix(❨1, -1❩)', 2, [0, 1, 1, 0]);

  Eps; Test({LINENUM}34593, 'ReflectionMatrix(❨1, 1, 0❩)', 3, [0, -1, 0, -1, 0, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34594, 'ReflectionMatrix(❨1, 1, 1❩)', 3, [1/3, -2/3, -2/3, -2/3, 1/3, -2/3, -2/3, -2/3, 1/3]);

  Test({LINENUM}34596, 'ReflectionMatrix(❨0❩)', failure, 'Vector cannot be zero.');
  Test({LINENUM}34597, 'ReflectionMatrix(❨0, 0❩)', failure, 'Vector cannot be zero.');
  Test({LINENUM}34598, 'ReflectionMatrix(❨0, 0, 0❩)', failure, 'Vector cannot be zero.');
  Test({LINENUM}34599, 'ReflectionMatrix(❨0, 0, 0, 0❩)', failure, 'Vector cannot be zero.');

  Eps; Test({LINENUM}34601, 'ReflectionMatrix(ComplexVector(❨21❩))', 1, [TASC(-1)]);
  Eps; Test({LINENUM}34602, 'ReflectionMatrix(ComplexVector(❨-21❩))', 1, [TASC(-1)]);
  Eps; Test({LINENUM}34603, 'ReflectionMatrix(ComplexVector(❨1❩))', 1, [TASC(-1)]);

  Eps; Test({LINENUM}34605, 'ReflectionMatrix(ComplexVector(❨1, 0❩))', 2, [TASC(-1), 0, 0, 1]);
  Eps; Test({LINENUM}34606, 'ReflectionMatrix(ComplexVector(❨0, 1❩))', 2, [TASC(1), 0, 0, -1]);

  Eps; Test({LINENUM}34608, 'ReflectionMatrix(ComplexVector(❨1, 0, 0❩))', 3, [TASC(-1), 0, 0, 0, 1, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34609, 'ReflectionMatrix(ComplexVector(❨0, 1, 0❩))', 3, [1, 0, 0, 0, TASC(-1), 0, 0, 0, 1]);
  Eps; Test({LINENUM}34610, 'ReflectionMatrix(ComplexVector(❨0, 0, 1❩))', 3, [1, 0, 0, 0, 1, 0, 0, 0, TASC(-1)]);

  Eps; Test({LINENUM}34612, 'ReflectionMatrix(ComplexVector(❨1, 0, 0, 0❩))', 4, [TASC(-1), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34613, 'ReflectionMatrix(ComplexVector(❨0, 1, 0, 0❩))', 4, [1, 0, 0, 0, 0, TASC(-1), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34614, 'ReflectionMatrix(ComplexVector(❨0, 0, 1, 0❩))', 4, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, TASC(-1), 0, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34615, 'ReflectionMatrix(ComplexVector(❨0, 0, 0, 1❩))', 4, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, TASC(-1)]);

  Eps; Test({LINENUM}34617, 'ReflectionMatrix(ComplexVector(❨1, -1❩))', 2, [0, TASC(1), 1, 0]);

  Eps; Test({LINENUM}34619, 'ReflectionMatrix(ComplexVector(❨1, 1, 0❩))', 3, [0, TASC(-1), 0, TASC(-1), 0, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34620, 'ReflectionMatrix(ComplexVector(❨1, 1, 1❩))', 3, [TASC(1/3), -2/3, -2/3, -2/3, 1/3, -2/3, -2/3, -2/3, 1/3]);

  Test({LINENUM}34622, 'ReflectionMatrix(ComplexVector(❨0❩))', failure, 'Vector cannot be zero.');
  Test({LINENUM}34623, 'ReflectionMatrix(ComplexVector(❨0, 0❩))', failure, 'Vector cannot be zero.');
  Test({LINENUM}34624, 'ReflectionMatrix(ComplexVector(❨0, 0, 0❩))', failure, 'Vector cannot be zero.');
  Test({LINENUM}34625, 'ReflectionMatrix(ComplexVector(❨0, 0, 0, 0❩))', failure, 'Vector cannot be zero.');

  Test({LINENUM}34627, 'A ≔ ReflectionMatrix(❨5, 3, 0, 1, 4❩);', null);
  Test({LINENUM}34628, 'IsSymmetric(A)', True);
  Test({LINENUM}34629, 'IsOrthogonal(A)', True);
  Test({LINENUM}34630, 'IsNormal(A)', True);
  Test({LINENUM}34631, 'IsInvolution(A)', True);
  Eps; Test({LINENUM}34632, 'det(A)', -1.0);

  Test({LINENUM}34634, 'A ≔ ReflectionMatrix(❨5, 3, 0, i, 4❩);', null);
  Test({LINENUM}34635, 'IsHermitian(A)', True);
  Test({LINENUM}34636, 'IsUnitary(A)', True);
  Test({LINENUM}34637, 'IsNormal(A)', True);
  Test({LINENUM}34638, 'IsInvolution(A)', True);
  Eps; Test({LINENUM}34639, 'det(A)', TASC(-1.0));

  Test({LINENUM}34641, 'delete(A)', success);


  //
  // Systems of linear equations
  //

  // General system solver (real)

  Test({LINENUM}34650, 'A ≔ ❨❨3, 5, 0❩, ❨1, 4, −2❩, ❨6, 2, 9❩❩;', null);

  // - one by one

  Test({LINENUM}34654, 'SysSolve(A, ❨13, 3, 37❩)', [1, 2, 3]);
  Test({LINENUM}34655, 'SysSolve(A, ❨30, 15, 45❩)', [5, 3, 1]);
  Test({LINENUM}34656, 'SysSolve(A, ❨14, −1, 56❩)', [3, 1, 4]);

  // - one by one, augmented matrix

  Test({LINENUM}34660, 'SysSolve(aug(A, ❨13, 3, 37❩))', [1, 2, 3]);
  Test({LINENUM}34661, 'SysSolve(aug(A, ❨30, 15, 45❩))', [5, 3, 1]);
  Test({LINENUM}34662, 'SysSolve(aug(A, ❨14, −1, 56❩))', [3, 1, 4]);

  // - all at once

  Test({LINENUM}34666, 'SysSolve(A, ❨❨13, 30, 14❩, ❨3, 15, -1❩, ❨37, 45, 56❩❩)', 3, [1, 5, 3, 2, 3, 1, 3, 1, 4]);

  // -

  Test({LINENUM}34670, 'A ≔ ❨❨3, 0, 2, 1❩, ❨8, 4, 2, 9❩, ❨5, 3, −4, 2❩, ❨7, 0, 2, 5❩❩;', null);

  Test({LINENUM}34672, 'SysSolve(A, ❨26, 52, 15, 42❩)', [6, 3, 5, -2]);
  Test({LINENUM}34673, 'SysSolve(A, ❨1, 6, 9, 5❩)', [1, 0, -1, 0]);
  Test({LINENUM}34674, 'SysSolve(A, ❨0, 0, 0, 0❩)', [0, 0, 0, 0]);

  Test({LINENUM}34676, 'SysSolve(aug(A, ❨26, 52, 15, 42❩))', [6, 3, 5, -2]);
  Test({LINENUM}34677, 'SysSolve(aug(A, ❨1, 6, 9, 5❩))', [1, 0, -1, 0]);
  Test({LINENUM}34678, 'SysSolve(aug(A, ❨0, 0, 0, 0❩))', [0, 0, 0, 0]);

  Test({LINENUM}34680, 'SysSolve(A, ❨❨26, 1, 0❩, ❨52, 6, 0❩, ❨15, 9, 0❩, ❨42, 5, 0❩❩)', 3, [6, 1, 0, 3, 0, 0, 5, -1, 0, -2, 0, 0]);

  // -

  Test({LINENUM}34684, 'A ≔ ❨❨3, 6, 5, 2, 0, 1, 4, 7, 0, 2❩, ❨5, −3, 2, 1, 4, 5, 0, 7, 8, 6❩, ❨6, 2, 3, 5, 0, 7, 4, 9, 6, 5❩, ❨−5, 0, 3, 7, 4, 1, 5, 6, 3, 3❩, ❨5, 2, 0, 4, 1, −6, 7, 8, 5, 0❩, ❨4, 2, 5, 3, 3, 1, 0, 4, 9, 5❩, ❨7, 4, 5, 2, 6, 0, 7, 4, 9, 6❩, '+'❨−5, 6, 3, 2, −8, 4, 6, 2, 1, 7❩, ❨5, 6, 6, 3, 9, 5, 0, 4, 1, 2❩, ❨0, 5, 8, 6, 2, 1, 4, 2, 3, 6❩❩;', null);

  Eps; Test({LINENUM}34686, 'SysSolve(A, ❨148, 247, 285, 198, 152, 219, 290, 145, 183, 205❩)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  Eps; Test({LINENUM}34687, 'SysSolve(A, ❨12, 19, 19, 10, 18, 21, 34, -3, 21, 17❩)', [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]);
  Eps; Test({LINENUM}34688, 'SysSolve(A, ❨2, 6, 5, 3, 0, 5, 6, 7, 2, 6❩)', [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
  Eps; Test({LINENUM}34689, 'SysSolve(A, ❨3, 5, 6, -5, 5, 4, 7, -5, 5, 0❩)', [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
  Eps; Test({LINENUM}34690, 'SysSolve(A, ❨129, 137, 196, 79, 91, 86, 153, 58, 160, 90❩)', [6, 3, 0, 1, 4, 7, 5, 8, -2, 4]);
  Eps(1E-12); Test({LINENUM}34691, 'SysSolve(A, ❨16, 400030, 47, 400021, 100008, 300048, 600051, -799970, 900039, 200049❩)', [1, 2, 1, 3, 100000, 2, 0, -2, 3, 1]);
  Eps; Test({LINENUM}34692, 'SysSolve(A, ❨0, 0, 0, 0, 0, 0, 0, 0, 0, 0❩)', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);

  // -

  Test({LINENUM}34696, 'A ≔ ❨❨3, 6, 5, 2, 0, 1, 4, 2, 0, 2❩, ❨5, -3, 2, 1, 4, 5, 0, -3, 8, 6❩, ❨6, 2, 3, 5, 0, 7, 4, 5, 6, 5❩, ❨-5, 0, 3, 7, 4, 1, 5, 3, 3, 3❩, ❨5, 2, 0, 4, 1, -6, 7, 3, 5, 0❩, ❨4, 2, 5, 3, 3, 1, 0, 0, 9, 5❩, ❨7, 4, 5, 2, 6, 0, 7, -4, 9, 6❩, '+'❨-5, 6, 3, 2, -8, 4, 6, 10, 1, 7❩, ❨5, 6, 6, 3, 9, 5, 0, -6, 1, 2❩, ❨0, 5, 8, 6, 2, 1, 4, 4, 3, 6❩❩;', null);
  Eps; Test({LINENUM}34697, 'SysSolve(A, ❨12, 19, 19, 10, 18, 21, 34, -3, 21, 17❩)', failure, 'Matrix is singular.');

  Test({LINENUM}34699, 'SysSolve(ZeroMatrix(5), ❨5, 6, 3, 2, 1❩)', failure, 'Matrix is singular.');
  Test({LINENUM}34700, 'SysSolve(aug(ZeroMatrix(5), ❨5, 6, 3, 2, 1❩))', failure, 'Matrix is singular.');
  Test({LINENUM}34701, 'SysSolve(ZeroMatrix(5), ❨❨5❩, ❨6❩, ❨3❩, ❨2❩, ❨1❩❩)', failure, 'Matrix is singular.');

  // -

  Test({LINENUM}34705, 'SysSolve(❨❨6, 3, 2, 1❩, ❨5, 4, 0, 1❩, ❨−5, 2, 1, 7❩, ❨0, 1, 2, 9❩❩, ❨6❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34706, 'SysSolve(❨❨6, 3, 2, 1❩, ❨5, 4, 0, 1❩, ❨−5, 2, 1, 7❩, ❨0, 1, 2, 9❩❩, ❨6, 3❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34707, 'SysSolve(❨❨6, 3, 2, 1❩, ❨5, 4, 0, 1❩, ❨−5, 2, 1, 7❩, ❨0, 1, 2, 9❩❩, ❨6, 3, 0❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34708, 'SysSolve(❨❨6, 3, 2, 1❩, ❨5, 4, 0, 1❩, ❨−5, 2, 1, 7❩, ❨0, 1, 2, 9❩❩, ❨6, 3, 0, 7, 8❩)', failure, 'RHS is of wrong dimension.');

  Test({LINENUM}34710, 'SysSolve(❨❨6, 3, 2, 1❩, ❨5, 4, 0, 1❩, ❨−5, 2, 1, 7❩, ❨0, 1, 2, 9❩❩, ❨❨6❩, ❨3❩, ❨0❩❩)', failure, 'RHS is of wrong dimension.');

  Test({LINENUM}34712, 'SysSolve(RandomMatrix(100), ❨6, 3, 0❩)', failure, 'RHS is of wrong dimension.');

  // -

  Test({LINENUM}34716, 'SysSolve(❨❨5, 4, 1, 2❩, ❨6, 3, 0, 2❩, ❨1, 5, 7, 2❩❩, ❨4, 5, 7, 6❩)', failure, 'Coefficient matrix isn''t square.');
  Test({LINENUM}34717, 'SysSolve(❨❨5, 4, 1, 2❩, ❨6, 3, 0, 2❩, ❨1, 5, 7, 2❩, ❨7, 5, 6, 1❩, ❨0, −2, 4, 8❩❩, ❨4, 5, 7, 6❩)', failure, 'Coefficient matrix isn''t square.');
  Test({LINENUM}34718, 'SysSolve(❨❨3, 2, 5, 6❩, ❨7, 4, 2, 1❩❩)', failure);

  Test({LINENUM}34720, 'SysSolve(❨❨5, 4, 1, 2❩, ❨6, 3, 0, 2❩, ❨1, 5, 7, 2❩❩, ❨❨4❩, ❨5❩, ❨7❩, ❨6❩❩)', failure, 'Coefficient matrix isn''t square.');

  // General system solver (complex)

  Test({LINENUM}34724, 'A ≔ ❨❨2, i, 6❩, ❨−7, 0, i❩, ❨3, 2, 4❩❩;', null);

  // - one by one

  Eps; Test({LINENUM}34728, 'SysSolve(A, ❨6 + 6⋅i, −22, 9 + 4⋅i❩)', [3, 0, ImaginaryUnit]);
  Eps; Test({LINENUM}34729, 'SysSolve(A, ❨16 − 2⋅i, −35 + i, 15❩)', [TASC(5), -2, 1]);
  Eps; Test({LINENUM}34730, 'SysSolve(A, ❨1 − 6⋅i, −6, 3 − 2⋅i❩)', [1, ImaginaryUnit, -ImaginaryUnit]);
  Eps; Test({LINENUM}34731, 'SysSolve(A, ❨7, 4, −2❩)', [-0.622467771639042357 + 0.173112338858195212*ImaginaryUnit, -2.48987108655616943 - 0.97421731123388582*ImaginaryUnit, 1.21178637200736648 + 0.357274401473296501*ImaginaryUnit]);

  // - one by one, augmented matrix

  Eps; Test({LINENUM}34735, 'SysSolve(aug(A, ❨6 + 6⋅i, −22, 9 + 4⋅i❩))', [3, 0, ImaginaryUnit]);
  Eps; Test({LINENUM}34736, 'SysSolve(aug(A, ❨16 − 2⋅i, −35 + i, 15❩))', [TASC(5), -2, 1]);
  Eps; Test({LINENUM}34737, 'SysSolve(aug(A, ❨1 − 6⋅i, −6, 3 − 2⋅i❩))', [1, ImaginaryUnit, -ImaginaryUnit]);
  Eps; Test({LINENUM}34738, 'SysSolve(aug(A, ❨7, 4, −2❩))', [-0.622467771639042357 + 0.173112338858195212*ImaginaryUnit, -2.48987108655616943 - 0.97421731123388582*ImaginaryUnit, 1.21178637200736648 + 0.357274401473296501*ImaginaryUnit]);

  // - all at once

  Eps; Test({LINENUM}34742, 'SysSolve(A, ❨❨6 + 6⋅i, 16 - 2⋅i, 1 - 6⋅i, 7❩, ❨-22, -35 + i, -6, 4❩, ❨9 + 4⋅i, 15, 3 - 2⋅i, -2❩❩)', 4, [3, 5, 1, -0.622467771639042357 + 0.173112338858195212*ImaginaryUnit, 0, -2, ImaginaryUnit, -2.48987108655616943 - 0.97421731123388582*ImaginaryUnit, ImaginaryUnit, 1, -ImaginaryUnit, 1.21178637200736648 + 0.357274401473296501*ImaginaryUnit]);

  // -

  Test({LINENUM}34746, 'A ≔ ❨❨3, 6, 5, 1❩, ❨7, 4, 5, 2❩, ❨0, 8, 6, 3❩, ❨5, 1, 4, 2❩❩;', null);

  Eps; Test({LINENUM}34748, 'SysSolve(A, ❨38 + 5⋅i, 52 + 2⋅i, 30 + 5⋅i, 32 - i❩)', [5, 3 + ImaginaryUnit, 1, -ImaginaryUnit]);
  Eps; Test({LINENUM}34749, 'SysSolve(aug(A, ❨38 + 5⋅i, 52 + 2⋅i, 30 + 5⋅i, 32 - i❩))', [5, 3 + ImaginaryUnit, 1, -ImaginaryUnit]);

  // -

  Test({LINENUM}34753, 'A ≔ ❨❨6, 3, 0, i, 1, 2, 4, 5, 3, 0❩, ❨1, 4, 2, 3, 0, 5, 9, i, 6, 3❩, ❨5, 7, i, 1, 2, 4, 4, 7, 1, 0❩, ❨3, 2, 0, 6, 2, 7, i, 7, 4, 1❩, ❨2, 1, 4, 5, 3, 0, 2, 8, 7, 6❩, ❨5, 2, 3, 1, 0, 4, 7, 8, 6, 0❩, ❨7, 4, 8, 6, i, 1, 2, 3, 6, 9❩, '+'❨4, 1, 5, 2, 3, 0, 8, 2, 3, 6❩, ❨1, 0, 4, i, i, 6, 8, 7, 9, 6❩, ❨9, 6, 3, 0, 1, i, 4, 4, 7, 1❩❩;', null);

  Eps; Test({LINENUM}34755, 'SysSolve(A, ❨67 - 4⋅i, 103 + 2⋅i, 84 - 3⋅i, 92 + 8⋅i, 114 + 15⋅i, 93 - 6⋅i, 159 + 21⋅i, 84 + 6⋅i, 142 + 3⋅i, 114 + 2⋅i❩)',
    [3, 5, 0, ImaginaryUnit, -1, 4, -ImaginaryUnit, 2, 6, 8 + 2*ImaginaryUnit]);

  Eps; Test({LINENUM}34758, 'SysSolve(A, ❨0, 3 + 3⋅i, 0, 1 + i, 6 + 6⋅i, 0, 9 + 9⋅i, 6 + 6⋅i, 6 + 6⋅i, 1 + i❩)',
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 1 + ImaginaryUnit]);

  Eps; Test({LINENUM}34761, 'SysSolve(A, ❨6 - 6⋅i, 1 - i, 5 - 5⋅i, 3 - 3⋅i, 2 - 2⋅i, 5 - 5⋅i, 7 - 7⋅i, 4 - 4⋅i, 1 - i, 9 - 9⋅i❩)',
    [1 - ImaginaryUnit, 0, 0, 0, 0, 0, 0, 0, 0, 0]);

  // -

  Test({LINENUM}34766, 'A ≔ ❨❨6, 3, 0, i, 1, 2, 4, -9 + i, 3, 0❩, ❨1, 4, 2, 3, 0, 5, 9, -20, 6, 3❩, ❨5, 7, i, 1, 2, 4, 4, -4, 1, 0❩, ❨3, 2, 0, 6, 2, 7, i, 8 - 3⋅i, 4, 1❩, ❨2, 1, 4, 5, 3, 0, 2, 0, 7, 6❩, ❨5, 2, 3, 1, 0, 4, 7, -18, 6, 0❩, ❨7, 4, 8, 6, i, 1, 2, 4, 6, 9❩, '+'❨4, 1, 5, 2, 3, 0, 8, -21, 3, 6❩, ❨1, 0, 4, i, i, 6, 8, -24 + i, 9, 6❩, ❨9, 6, 3, 0, 1, i, 4, -6, 7, 1❩❩;', null);

  Test({LINENUM}34768, 'SysSolve(A, ❨67 - 4⋅i, 103 + 2⋅i, 84 - 3⋅i, 92 + 8⋅i, 114 + 15⋅i, 93 - 6⋅i, 159 + 21⋅i, 84 + 6⋅i, 142 + 3⋅i, 114 + 2⋅i❩)', failure, 'Matrix is singular.');
  Test({LINENUM}34769, 'SysSolve(aug(A, ❨67 - 4⋅i, 103 + 2⋅i, 84 - 3⋅i, 92 + 8⋅i, 114 + 15⋅i, 93 - 6⋅i, 159 + 21⋅i, 84 + 6⋅i, 142 + 3⋅i, 114 + 2⋅i❩))', failure, 'Matrix is singular.');

  Test({LINENUM}34771, 'SysSolve(ComplexZeroMatrix(5), IdentityMatrix(5))', failure, 'Matrix is singular.');

  // -

  Test({LINENUM}34775, 'SysSolve(❨❨6, 3, i, 1❩, ❨1, i, 5, 2❩, ❨0, 4, 9, i❩, ❨6, 3, 2, 1❩❩, ❨4❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34776, 'SysSolve(❨❨6, 3, i, 1❩, ❨1, i, 5, 2❩, ❨0, 4, 9, i❩, ❨6, 3, 2, 1❩❩, ❨4, 7❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34777, 'SysSolve(❨❨6, 3, i, 1❩, ❨1, i, 5, 2❩, ❨0, 4, 9, i❩, ❨6, 3, 2, 1❩❩, ❨4, 7, i❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34778, 'SysSolve(❨❨6, 3, i, 1❩, ❨1, i, 5, 2❩, ❨0, 4, 9, i❩, ❨6, 3, 2, 1❩❩, ❨4, 7, i, 7, 8❩)', failure, 'RHS is of wrong dimension.');

  Test({LINENUM}34780, 'SysSolve(❨❨6, 3, i, 1❩, ❨1, i, 5, 2❩, ❨0, 4, 9, i❩, ❨6, 3, 2, 1❩❩, IdentityMatrix(3))', failure, 'RHS is of wrong dimension.');

  // -

  Test({LINENUM}34784, 'SysSolve(❨❨6, 3, i, 1❩, ❨1, i, 5, 2❩, ❨0, 4, 9, i❩❩, ❨4, 7, i, 5❩)', failure, 'Coefficient matrix isn''t square.');
  Test({LINENUM}34785, 'SysSolve(❨❨6, 3, i, 1❩, ❨1, i, 5, 2❩, ❨0, 4, 9, i❩, ❨5, i, -1, i❩, ❨4, 1, 1, -1❩❩, ❨4, 7, i, 5❩)', failure, 'Coefficient matrix isn''t square.');

  Test({LINENUM}34787, 'SysSolve(❨❨6, 3, i, 1❩, ❨1, i, 5, 2❩, ❨0, 4, 9, i❩❩, IdentityMatrix(3))', failure, 'Coefficient matrix isn''t square.');
  Test({LINENUM}34788, 'SysSolve(❨❨6, 3, i, 1❩, ❨1, i, 5, 2❩, ❨0, 4, 9, i❩❩, IdentityMatrix(4))', failure, 'Coefficient matrix isn''t square.');

  // Back substitution

  Test({LINENUM}34792, 'A ≔ ❨❨4, 5, 3, 0❩, ❨0, 5, 1, 2❩, ❨0, 0, 2, 1❩, ❨0, 0, 0, 7❩❩;', null);
  Test({LINENUM}34793, 'BackSubstitution(A, ❨23, 21, 10, 28❩)', [1, 2, 3, 4]);

  Test({LINENUM}34795, 'BackSubstitution(A, ❨23, 21, 10❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34796, 'BackSubstitution(A, ❨23, 21❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34797, 'BackSubstitution(A, ❨23, 21, 10, 56, 98, 12❩)', failure, 'RHS is of wrong dimension.');

  Test({LINENUM}34799, 'A ≔ ❨❨4, 5, 3, 0❩, ❨0, 5, 1, 2❩, ❨0, 0, 2, 1❩, ❨0, 0, 0, 0❩❩;', null);
  Test({LINENUM}34800, 'BackSubstitution(A, ❨23, 21, 10, 28❩)', failure, 'Matrix is singular.');

  Test({LINENUM}34802, 'A ≔ ❨❨4, 5, 3, 0❩, ❨0, 5, 1, 2❩, ❨0, 0, 2, 1❩, ❨0, 0, 0, 7❩, ❨0, 3, 2, 7❩❩;', null);
  Test({LINENUM}34803, 'BackSubstitution(A, ❨23, 21, 10, 28❩)', failure, 'Coefficient matrix isn''t square.');
  Test({LINENUM}34804, 'A ≔ ❨❨4, 5, 3, 0❩, ❨0, 5, 1, 2❩, ❨0, 0, 2, 1❩❩;', null);
  Test({LINENUM}34805, 'BackSubstitution(A, ❨23, 21, 10, 28❩)', failure, 'Coefficient matrix isn''t square.');

  Test({LINENUM}34807, 'A ≔ ❨❨3, 5, i, 4❩, ❨0, i, 2, 1❩, ❨0, 0, 4, 8❩, ❨0, 0, 0, 3❩❩;', null);
  Test({LINENUM}34808, 'BackSubstitution(A, ❨29 + 23⋅i, 10 + 7⋅i, 44 + 40⋅i, 12 + 15⋅i❩)', [1, 2, 3, 4 + 5*ImaginaryUnit]);

  Test({LINENUM}34810, 'BackSubstitution(A, ❨29 + 23⋅i, 10 + 7⋅i, 44 + 40⋅i, 12 + 15⋅i, 82❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34811, 'BackSubstitution(A, ❨29 + 23⋅i, 10 + 7⋅i, 44 + 40⋅i❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34812, 'BackSubstitution(A, ❨29 + 23⋅i, 10 + 7⋅i❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34813, 'BackSubstitution(A, ❨29 + 23⋅i❩)', failure, 'RHS is of wrong dimension.');

  Test({LINENUM}34815, 'A ≔ ❨❨3, 5, i, 4❩, ❨0, i, 2, 1❩, ❨0, 0, 4, 8❩, ❨0, 0, 0, 0❩❩;', null);
  Test({LINENUM}34816, 'BackSubstitution(A, ❨29 + 23⋅i, 10 + 7⋅i, 44 + 40⋅i, 12 + 15⋅i❩)', failure, 'Matrix is singular.');

  Test({LINENUM}34818, 'BackSubstitution(❨❨3, 5, i, 4❩, ❨0, i, 2, 1❩, ❨0, 0, 4, 8❩, ❨0, 0, 0, 3❩, ❨0, 0, 0, 6❩❩, ❨29 + 23⋅i, 10 + 7⋅i, 44 + 40⋅i, 12 + 15⋅i❩)', failure, 'Coefficient matrix isn''t square.');
  Test({LINENUM}34819, 'BackSubstitution(❨❨3, 5, i, 4❩, ❨0, i, 2, 1❩, ❨0, 0, 4, 8❩❩, ❨29 + 23⋅i, 10 + 7⋅i, 44 + 40⋅i, 12 + 15⋅i❩)', failure, 'Coefficient matrix isn''t square.');

  // - performance comparison

  Test({LINENUM}34823, 'N ≔ 10;', null);
  Test({LINENUM}34824, 'M, Y, X, X2 ≔ SequenceList(10000);', null);
  Test({LINENUM}34825, 'for(i, 1, length(M), (M[i] ≔ ToUpperTriangular(RandomMatrix(N))));', null);
  Test({LINENUM}34826, 'for(i, 1, length(Y), (Y[i] ≔ RandomVector(N)));', null);

  StartStopwatch;
  Test({LINENUM}34829, 'for(i, 1, length(M), (X[i] ≔ SysSolve(M[i], Y[i])));', null);
  Test({LINENUM}34830, 't1 ≔ history(-1).EvalTime;', null);
  StopStopwatch;
  TestDuration({LINENUM}34832, 0.17);

  StartStopwatch;
  Test({LINENUM}34835, 'for(i, 1, length(M), (X2[i] ≔ BackSubstitution(M[i], Y[i])));', null);
  Test({LINENUM}34836, 't2 ≔ history(-1).EvalTime;', null);
  StopStopwatch;
  TestDuration({LINENUM}34838, 0.12);

  Test({LINENUM}34840, 't2 < t1', True);

  Test({LINENUM}34842, 'for(i, 1, length(M), (X[i] = X2[i]));', null);

  Test({LINENUM}34844, 'delete(A); delete(N); delete(M); delete(Y); delete(X); delete(X2); delete(t1); delete(t2)', success);

  // Forward substitution

  Test({LINENUM}34848, 'A ≔ ❨❨6, 0, 0, 0❩, ❨1, 2, 0, 0❩, ❨5, 4, 9, 0❩, ❨7, 3, 2, 1❩❩;', null);
  Test({LINENUM}34849, 'ForwardSubstitution(A, ❨48, 10, 116, 80❩)', [8, 1, 8, 5]);
  Test({LINENUM}34850, 'ForwardSubstitution(A, ❨48, 10❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34851, 'ForwardSubstitution(A, ❨48, 10, 116❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34852, 'ForwardSubstitution(A, ❨48, 10, 116, 80, 21❩)', failure, 'RHS is of wrong dimension.');

  Test({LINENUM}34854, 'A ≔ ❨❨0, 0, 0, 0❩, ❨1, 2, 0, 0❩, ❨5, 4, 9, 0❩, ❨7, 3, 2, 1❩❩;', null);
  Test({LINENUM}34855, 'ForwardSubstitution(A, ❨48, 10, 116, 80❩)', failure, 'Matrix is singular.');

  Test({LINENUM}34857, 'A ≔ ❨❨0, 0, 0, 0❩, ❨1, 2, 0, 0❩, ❨5, 4, 9, 0❩, ❨7, 3, 2, 1❩, ❨1, 4, 0, 1❩❩;', null);
  Test({LINENUM}34858, 'ForwardSubstitution(A, ❨48, 10, 116, 80❩)', failure, 'Coefficient matrix isn''t square.');

  Test({LINENUM}34860, 'A ≔ ❨❨0, 0, 0, 0❩, ❨1, 2, 0, 0❩, ❨5, 4, 9, 0❩❩;', null);
  Test({LINENUM}34861, 'ForwardSubstitution(A, ❨48, 10, 116, 80❩)', failure, 'Coefficient matrix isn''t square.');

  Test({LINENUM}34863, 'A ≔ ❨❨3, 0, 0, 0, 0❩, ❨2, i, 0, 0, 0❩, ❨1, 3, 4, 0, 0❩, ❨5, 3, i, 7, 0❩, ❨4, i, 2, 0, 1❩❩;', null);
  Test({LINENUM}34864, 'ForwardSubstitution(A, ❨12 + 3⋅i, 8 + 4⋅i, 10 + i, 26 - 2⋅i, 23 + 6⋅i❩)', [4 + ImaginaryUnit, 2, 0, -ImaginaryUnit, 7]);

  Test({LINENUM}34866, 'A ≔ ❨❨0, 0, 0, 0, 0❩, ❨2, i, 0, 0, 0❩, ❨1, 3, 4, 0, 0❩, ❨5, 3, i, 7, 0❩, ❨4, i, 2, 0, 1❩❩;', null);
  Test({LINENUM}34867, 'ForwardSubstitution(A, ❨12 + 3⋅i, 8 + 4⋅i, 10 + i, 26 - 2⋅i, 23 + 6⋅i❩)', failure, 'Matrix is singular.');

  Test({LINENUM}34869, 'A ≔ ❨❨3, 0, 0, 0, 0❩, ❨2, i, 0, 0, 0❩, ❨1, 3, 4, 0, 0❩, ❨5, 3, i, 7, 0❩, ❨4, i, 2, 0, 1❩❩;', null);
  Test({LINENUM}34870, 'ForwardSubstitution(A, ❨12 + 3⋅i, 8 + 4⋅i, 10 + i, 26 - 2⋅i, 23 + 6⋅i, 4❩)', failure, 'RHS is of wrong dimension.');
  Test({LINENUM}34871, 'ForwardSubstitution(A, ❨12 + 3⋅i, 8 + 4⋅i, 10 + i, 26 - 2⋅i❩)', failure, 'RHS is of wrong dimension.');

  Test({LINENUM}34873, 'A ≔ ❨❨3, 0, 0, 0, 0❩, ❨2, i, 0, 0, 0❩, ❨1, 3, 4, 0, 0❩, ❨5, 3, i, 7, 0❩, ❨4, i, 2, 0, 1❩, ❨-4, 7, 4, -3, 1❩❩;', null);
  Test({LINENUM}34874, 'ForwardSubstitution(A, ❨12 + 3⋅i, 8 + 4⋅i, 10 + i, 26 - 2⋅i, 23 + 6⋅i❩)', failure, 'Coefficient matrix isn''t square.');

  Test({LINENUM}34876, 'A ≔ ❨❨3, 0, 0, 0, 0❩, ❨2, i, 0, 0, 0❩, ❨1, 3, 4, 0, 0❩, ❨5, 3, i, 7, 0❩❩;', null);
  Test({LINENUM}34877, 'ForwardSubstitution(A, ❨12 + 3⋅i, 8 + 4⋅i, 10 + i, 26 - 2⋅i, 23 + 6⋅i❩)', failure, 'Coefficient matrix isn''t square.');

  Test({LINENUM}34879, 'delete(A)', success);


  //
  // Least-squares polynomial curve fitting
  //

  Eps; Test({LINENUM}34886, 'polyfit(❨1, 2, 3, 4, 5❩, ❨2, 4, 6, 8, 10❩, 1)', [0, 2]);
  Eps; Test({LINENUM}34887, 'polyfit(❨1, 2, 3, 4, 5❩, ❨3, 6, 9, 12, 15❩, 1)', [0, 3]);
  Eps; Test({LINENUM}34888, 'polyfit(❨1, 2, 3, 4, 5❩, ❨10, 20, 30, 40, 50❩, 1)', [0, 10]);
  Eps; Test({LINENUM}34889, 'polyfit(❨1, 2, 3, 4, 5❩, ❨15, 25, 35, 45, 55❩, 1)', [5, 10]);

  Eps; Test({LINENUM}34891, 'polyfit(❨1, 2, 3, 4, 5❩, ❨2, 4, 6, 8, 10❩, 2)', [0, 2, 0]);
  Eps; Test({LINENUM}34892, 'polyfit(❨1, 2, 3, 4, 5❩, ❨3, 6, 9, 12, 15❩, 2)', [0, 3, 0]);
  Eps(1E-15); Test({LINENUM}34893, 'polyfit(❨1, 2, 3, 4, 5❩, ❨10, 20, 30, 40, 50❩, 2)', [0, 10, 0]);
  Eps; Test({LINENUM}34894, 'polyfit(❨1, 2, 3, 4, 5❩, ❨15, 25, 35, 45, 55❩, 2)', [5, 10, 0]);

  Eps; Test({LINENUM}34896, 'polyfit(❨1, 2, 3, 4, 5❩, ❨1, 4, 9, 16, 25❩, 2)', [0, 0, 1]);
  Eps; Test({LINENUM}34897, 'polyfit(❨1, 2, 3, 4, 5❩, ❨3, 8, 15, 24, 35❩, 2)', [0, 2, 1]);
  Eps; Test({LINENUM}34898, 'polyfit(❨1, 2, 3, 4, 5❩, ❨6, 11, 18, 27, 38❩, 2)', [3, 2, 1]);

  Eps(1E-15); Test({LINENUM}34900, 'polyfit(❨1, 2, 3, 4, 5❩, ❨6, 11, 18, 27, 38❩, 3)', [3, 2, 1, 0]);

  Test({LINENUM}34902, 'polyfit(❨1, 2, 3, 4, 5❩, ❨6, 11, 18, 27❩, 2)', failure, 'X and Y vectors must have the same dimension.');

  Eps; Test({LINENUM}34904, 'polyfit(❨1, 2❩, ❨2, 4❩, 1)', [0, 2]);
  Eps; Test({LINENUM}34905, 'polyfit(❨1, 2❩, ❨1, 4❩, 1)', [-2, 3]);
  Eps; Test({LINENUM}34906, 'polyfit(❨1, 2❩, ❨2, 4❩, 0)', [3]);
  Eps; Test({LINENUM}34907, 'polyfit(❨1, 2❩, ❨1, 4❩, 0)', [2.5]);
  Eps; Test({LINENUM}34908, 'polyfit(❨1, 2❩, ❨1, 2❩, 0)', [1.5]);

  Eps; Test({LINENUM}34910, 'polyfit(❨1❩, ❨1❩, 0)', [1]);

  Test({LINENUM}34912, 'polyfit(❨1, 2❩, ❨1, 4❩, -1)', failure, 'A non-negative integer was expected as argument 3, but "-1" was given.');

  SetLength(_xarr, 1000);
  SetLength(_yarr, 1000);
  SetLength(_sxarr, 1000);
  SetLength(_syarr, 1000);
  for _i := 0 to High(_xarr) do
  begin
    _xarr[_i] := _i;
    _yarr[_i] := 2*_i*_i*_i + 4*_i*_i - _i + 1;
    _sxarr[_i] := _xarr[_i].ToString(DefaultFormatSettings);
    _syarr[_i] := _yarr[_i].ToString(DefaultFormatSettings);
  end;

  Test({LINENUM}34926, Format('X ≔ ❨%s❩;', [string.Join(', ', _sxarr)]), null);
  Test({LINENUM}34927, Format('Y ≔ ❨%s❩;', [string.Join(', ', _syarr)]), null);

  Eps(1E-6); Test({LINENUM}34929, 'polyfit(X, Y, 3)', [1, -1, 4, 2]);

  for _i := 0 to High(_xarr) do
  begin
    _xarr[_i] := _i;
    _yarr[_i] := 2*_i*_i*_i + 4*_i*_i - _i + 1 + 0.1*Random;
    _sxarr[_i] := _xarr[_i].ToString(DefaultFormatSettings);
    _syarr[_i] := _yarr[_i].ToString(DefaultFormatSettings);
  end;

  Test({LINENUM}34939, Format('X ≔ ❨%s❩;', [string.Join(', ', _sxarr)]), null);
  Test({LINENUM}34940, Format('Y ≔ ❨%s❩;', [string.Join(', ', _syarr)]), null);

  Eps(1E-1); Test({LINENUM}34942, 'polyfit(X, Y, 3)', [1, -1, 4, 2]);

  Eps; Test({LINENUM}34944, 'polyfit(❨1, 2, 3, 4, 5, i❩, ❨2, 4, 6, 8, 10, 2⋅i❩, 1)', [TASC(0), 2]);
  Eps; Test({LINENUM}34945, 'polyfit(❨1, 2, 3, 4, 5, i❩, ❨3, 6, 9, 12, 15, 3⋅i❩, 1)', [TASC(0), 3]);
  Eps; Test({LINENUM}34946, 'polyfit(❨1, 2, 3, 4, 5, i❩, ❨4, 7, 10, 13, 16, 3⋅i + 1❩, 1)', [TASC(1), 3]);
  Eps; Test({LINENUM}34947, 'polyfit(❨1, 2, 3, 4, 5, i❩, ❨2⋅i, 4⋅i, 6⋅i, 8⋅i, 10⋅i, -2❩, 1)', [0, 2*ImaginaryUnit]);
  Eps; Test({LINENUM}34948, 'polyfit(❨1, 2, 3, 4, 5, i❩, ❨3 + 2⋅i, 3 + 4⋅i, 3 + 6⋅i, 3 + 8⋅i, 3 + 10⋅i, 1❩, 1)', [3, 2*ImaginaryUnit]);

  SetLength(_cxarr, 1000);
  SetLength(_cyarr, 1000);
  SetLength(_sxarr, 1000);
  SetLength(_syarr, 1000);
  for _i := 0 to High(_cxarr) do
  begin
    _cxarr[_i] := _i;
    _cyarr[_i] := (3 + 7*ImaginaryUnit)*_i*_i*_i - 4*_i*_i - ImaginaryUnit*_i + 4 + 3*ImaginaryUnit;
    _sxarr[_i] := ComplexToStr(_cxarr[_i], False, InputFormOptions);
    _syarr[_i] := ComplexToStr(_cyarr[_i], False, InputFormOptions);
  end;

  Test({LINENUM}34962, Format('X ≔ ❨%s❩;', [string.Join(', ', _sxarr)]), null);
  Test({LINENUM}34963, Format('Y ≔ ❨%s❩;', [string.Join(', ', _syarr)]), null);

  Eps(1E-6); Test({LINENUM}34965, 'polyfit(X, Y, 3)', [4 + 3*ImaginaryUnit, -ImaginaryUnit, -4, 3 + 7*ImaginaryUnit]);

  _xarr := nil;
  _yarr := nil;
  _cxarr := nil;
  _cyarr := nil;
  _sxarr := nil;
  _syarr := nil;

  Test({LINENUM}34974, 'delete(X); delete(Y)', success);


  //
  // Supermatrices, submatrices, vector conversions, replacing parts
  //

  // Replacing parts

  Test({LINENUM}34983, 'A ≔ ❨❨4, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨4, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨1, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨5, 6, 3❩❩; E ≔ ❨❨7❩, ❨1❩❩; F ≔ ❨❨21❩❩;', null);

  Test({LINENUM}34985, 'ReplaceRow(A, 1, ❨1, 2, 3, 4❩)', 4, [1, 2, 3, 4, 0, 1, 8, 7, 9, 3, 5, 4, 1, 7, 5, 2]);
  Test({LINENUM}34986, 'ReplaceRow(A, 2, ❨10, 20, 30, 40❩)', 4, [4, 2, 3, 6, 10, 20, 30, 40, 9, 3, 5, 4, 1, 7, 5, 2]);
  Test({LINENUM}34987, 'ReplaceRow(A, 3, ❨9, 8, 7, 6❩)', 4, [4, 2, 3, 6, 0, 1, 8, 7, 9, 8, 7, 6, 1, 7, 5, 2]);
  Test({LINENUM}34988, 'ReplaceRow(A, 4, ❨0, 1, 0, 1❩)', 4, [4, 2, 3, 6, 0, 1, 8, 7, 9, 3, 5, 4, 0, 1, 0, 1]);

  Test({LINENUM}34990, 'ReplaceRow(A, 5, ❨0, 1, 0, 1❩)', failure, 'Index 5 out of bounds.');
  Test({LINENUM}34991, 'ReplaceRow(A, 0, ❨0, 1, 0, 1❩)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}34992, 'ReplaceRow(A, -1, ❨0, 1, 0, 1❩)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}34994, 'ReplaceRow(A, 1, ❨1, 2, 3❩)', failure, 'Incorrect length of array.');
  Test({LINENUM}34995, 'ReplaceRow(A, 1, ❨1, 2, 3, 4, 5❩)', failure, 'Incorrect length of array.');

  Test({LINENUM}34997, 'ReplaceRow(B, 1, ❨5, 4, 3, 2, 1❩)', 5, [5, 4, 3, 2, 1, 7, 4, 5, 1, 2]);
  Test({LINENUM}34998, 'ReplaceRow(B, 2, ❨0, 0, 0, 0, 0❩)', 5, [4, 6, 5, 3, 2, 0, 0, 0, 0, 0]);
  Test({LINENUM}34999, 'ReplaceRow(B, 3, ❨0, 0, 0, 0, 0❩)', failure, 'Index 3 out of bounds.');

  Test({LINENUM}35001, 'ReplaceRow(C, 4, ❨10, 20, 30❩)', 3, [1, 4, 0, 7, 5, 6, 7, 8, 5, 10, 20, 30, 4, 7, 8]);

  Test({LINENUM}35003, 'ReplaceRow(D, 1, ❨4, 5, 6❩)', 3, [4, 5, 6]);
  Test({LINENUM}35004, 'ReplaceRow(E, 2, ❨21❩)', 1, [7, 21]);

  Test({LINENUM}35006, 'ReplaceRow(F, 1, ❨6❩)', 1, [6]);

  Test({LINENUM}35008, 'ReplaceCol(A, 1, ❨1, 2, 3, 4❩)', 4, [1, 2, 3, 6, 2, 1, 8, 7, 3, 3, 5, 4, 4, 7, 5, 2]);
  Test({LINENUM}35009, 'ReplaceCol(A, 2, ❨9, 8, 7, 6❩)', 4, [4, 9, 3, 6, 0, 8, 8, 7, 9, 7, 5, 4, 1, 6, 5, 2]);
  Test({LINENUM}35010, 'ReplaceCol(A, 3, ❨0, 0, 0, 0❩)', 4, [4, 2, 0, 6, 0, 1, 0, 7, 9, 3, 0, 4, 1, 7, 0, 2]);
  Test({LINENUM}35011, 'ReplaceCol(A, 4, ❨5, 0, 4, 0❩)', 4, [4, 2, 3, 5, 0, 1, 8, 0, 9, 3, 5, 4, 1, 7, 5, 0]);

  Test({LINENUM}35013, 'ReplaceCol(A, 5, ❨5, 0, 4, 0❩)', failure, 'Index 5 out of bounds.');
  Test({LINENUM}35014, 'ReplaceCol(A, 0, ❨5, 0, 4, 0❩)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}35015, 'ReplaceCol(A, -1, ❨5, 0, 4, 0❩)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}35017, 'ReplaceCol(A, 3, ❨1, 2, 3❩)', failure, 'Incorrect length of array.');
  Test({LINENUM}35018, 'ReplaceCol(A, 3, ❨1, 2, 3, 4, 5❩)', failure, 'Incorrect length of array.');

  Test({LINENUM}35020, 'ReplaceCol(B, 4, ❨10, 20❩)', 5, [4, 6, 5, 10, 2, 7, 4, 5, 20, 2]);
  Test({LINENUM}35021, 'ReplaceCol(C, 3, ❨10, 20, 30, 40, 50❩)', 3, [1, 4, 10, 7, 5, 20, 7, 8, 30, 2, 0, 40, 4, 7, 50]);
  Test({LINENUM}35022, 'ReplaceCol(D, 2, ❨1❩)', 3, [5, 1, 3]);
  Test({LINENUM}35023, 'ReplaceCol(E, 1, ❨9, 8❩)', 1, [9, 8]);
  Test({LINENUM}35024, 'ReplaceCol(F, 1, ❨4❩)', 1, [4]);

  Test({LINENUM}35026, 'ReplaceDiagonal(A, ❨1, 2, 3, 4❩)', 4, [1, 2, 3, 6, 0, 2, 8, 7, 9, 3, 3, 4, 1, 7, 5, 4]);
  Test({LINENUM}35027, 'ReplaceDiagonal(A, ❨1, 2, 3❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35028, 'ReplaceDiagonal(A, ❨1, 2, 3, 4, 5❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35029, 'ReplaceDiagonal(B, ❨1, 2❩)', 5, [1, 6, 5, 3, 2, 7, 2, 5, 1, 2]);
  Test({LINENUM}35030, 'ReplaceDiagonal(B, ❨1, 2, 3❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35031, 'ReplaceDiagonal(C, ❨1, 2, 3❩)', 3, [1, 4, 0, 7, 2, 6, 7, 8, 3, 2, 0, 3, 4, 7, 8]);
  Test({LINENUM}35032, 'ReplaceDiagonal(C, ❨1, 2, 3, 4❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35033, 'ReplaceDiagonal(D, ❨21❩)', 3, [21, 6, 3]);
  Test({LINENUM}35034, 'ReplaceDiagonal(D, ❨21, 22❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35035, 'ReplaceDiagonal(E, ❨21❩)', 1, [21, 1]);
  Test({LINENUM}35036, 'ReplaceDiagonal(E, ❨21, 11❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35037, 'ReplaceDiagonal(F, ❨23❩)', 1, [23]);
  Test({LINENUM}35038, 'ReplaceDiagonal(F, ❨23, 24❩)', failure, 'Incorrect number of elements in diagonal.');

  Test({LINENUM}35040, 'ReplaceSuperdiagonal(A, ❨10, 20, 30❩)', 4, [4, 10, 3, 6, 0, 1, 20, 7, 9, 3, 5, 30, 1, 7, 5, 2]);
  Test({LINENUM}35041, 'ReplaceSuperdiagonal(A, ❨10, 20❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35042, 'ReplaceSuperdiagonal(A, ❨10, 20, 30, 40❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35043, 'ReplaceSuperdiagonal(B, ❨60, 50❩)', 5, [4, 60, 5, 3, 2, 7, 4, 50, 1, 2]);
  Test({LINENUM}35044, 'ReplaceSuperdiagonal(B, ❨60❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35045, 'ReplaceSuperdiagonal(B, ❨60, 50, 40❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35046, 'ReplaceSuperdiagonal(C, ❨40, 60❩)', 3, [1, 40, 0, 7, 5, 60, 7, 8, 5, 2, 0, 3, 4, 7, 8]);
  Test({LINENUM}35047, 'ReplaceSuperdiagonal(C, ❨40❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35048, 'ReplaceSuperdiagonal(C, ❨40, 60, 80❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35049, 'ReplaceSuperdiagonal(D, ❨60❩)', 3, [5, 60, 3]);
  Test({LINENUM}35050, 'ReplaceSuperdiagonal(D, ❨60, 70❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35051, 'ReplaceSuperdiagonal(E, DebugObject("empty vector"))', 1, [7, 1]);
  Test({LINENUM}35052, 'ReplaceSuperdiagonal(E, ❨80❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35053, 'ReplaceSuperdiagonal(F, DebugObject("empty vector"))', 1, [21]);
  Test({LINENUM}35054, 'ReplaceSuperdiagonal(F, ❨23❩)', failure, 'Incorrect number of elements in superdiagonal.');

  Test({LINENUM}35056, 'ReplaceSubdiagonal(A, ❨10, 20, 30❩)', 4, [4, 2, 3, 6, 10, 1, 8, 7, 9, 20, 5, 4, 1, 7, 30, 2]);
  Test({LINENUM}35057, 'ReplaceSubdiagonal(A, ❨10, 20❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35058, 'ReplaceSubdiagonal(A, ❨10, 20, 30, 40❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35059, 'ReplaceSubdiagonal(B, ❨70❩)', 5, [4, 6, 5, 3, 2, 70, 4, 5, 1, 2]);
  Test({LINENUM}35060, 'ReplaceSubdiagonal(B, ❨70, 80❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35061, 'ReplaceSubdiagonal(C, ❨70, 80, 90❩)', 3, [1, 4, 0, 70, 5, 6, 7, 80, 5, 2, 0, 90, 4, 7, 8]);
  Test({LINENUM}35062, 'ReplaceSubdiagonal(C, ❨70, 80❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35063, 'ReplaceSubdiagonal(C, ❨70, 80, 90, 100❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35064, 'ReplaceSubdiagonal(D, ❨100❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35065, 'ReplaceSubdiagonal(D, DebugObject("empty vector"))', 3, [5, 6, 3]);
  Test({LINENUM}35066, 'ReplaceSubdiagonal(E, ❨10❩)', 1, [7, 10]);
  Test({LINENUM}35067, 'ReplaceSubdiagonal(E, ❨10, 20❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35068, 'ReplaceSubdiagonal(F, ❨1000❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35069, 'ReplaceSubdiagonal(F, DebugObject("empty vector"))', 1, [21]);

  Test({LINENUM}35071, 'ReplaceAntidiagonal(A, ❨10, 20, 30, 40❩)', 4, [4, 2, 3, 10, 0, 1, 20, 7, 9, 30, 5, 4, 40, 7, 5, 2]);
  Test({LINENUM}35072, 'ReplaceAntidiagonal(A, ❨10, 20, 30❩)', failure, 'Incorrect number of elements in antidiagonal.');
  Test({LINENUM}35073, 'ReplaceAntidiagonal(A, ❨10, 20, 30, 40, 50❩)', failure, 'Incorrect number of elements in antidiagonal.');
  Test({LINENUM}35074, 'ReplaceAntidiagonal(B, ❨10, 20❩)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}35075, 'ReplaceAntidiagonal(C, ❨10, 20, 30❩)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}35076, 'ReplaceAntidiagonal(D, ❨10❩)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}35077, 'ReplaceAntidiagonal(E, ❨10❩)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}35078, 'ReplaceAntidiagonal(F, ❨10❩)', 1, [10]);
  Test({LINENUM}35079, 'ReplaceAntidiagonal(F, ❨10, 20❩)', failure, 'Incorrect number of elements in antidiagonal.');

  Test({LINENUM}35081, 'A ≔ ❨❨i, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨i, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨i, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨i, 6, 3❩❩; E ≔ ❨❨i❩, ❨1❩❩; F ≔ ❨❨i❩❩;', null);

  Test({LINENUM}35083, 'ReplaceRow(A, 1, ❨1, 2, 3, 4❩)', 4, [TASC(1), 2, 3, 4, 0, 1, 8, 7, 9, 3, 5, 4, 1, 7, 5, 2]);
  Test({LINENUM}35084, 'ReplaceRow(A, 1, ❨1, 2, 3, i/4❩)', 4, [TASC(1), 2, 3, ImaginaryUnit/4, 0, 1, 8, 7, 9, 3, 5, 4, 1, 7, 5, 2]);
  Test({LINENUM}35085, 'ReplaceRow(A, 2, ❨10, 20, 30, 40❩)', 4, [ImaginaryUnit, 2, 3, 6, 10, 20, 30, 40, 9, 3, 5, 4, 1, 7, 5, 2]);
  Test({LINENUM}35086, 'ReplaceRow(A, 3, ❨9, 8, 7, 6❩)', 4, [ImaginaryUnit, 2, 3, 6, 0, 1, 8, 7, 9, 8, 7, 6, 1, 7, 5, 2]);
  Test({LINENUM}35087, 'ReplaceRow(A, 4, ❨0, 1, 0, 1❩)', 4, [ImaginaryUnit, 2, 3, 6, 0, 1, 8, 7, 9, 3, 5, 4, 0, 1, 0, 1]);

  Test({LINENUM}35089, 'ReplaceRow(A, 5, ❨0, 1, 0, 1❩)', failure, 'Index 5 out of bounds.');
  Test({LINENUM}35090, 'ReplaceRow(A, 0, ❨0, 1, 0, 1❩)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}35091, 'ReplaceRow(A, -1, ❨0, 1, 0, 1❩)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}35093, 'ReplaceRow(A, 1, ❨1, 2, 3❩)', failure, 'Incorrect length of array.');
  Test({LINENUM}35094, 'ReplaceRow(A, 1, ❨1, 2, 3, 4, 5❩)', failure, 'Incorrect length of array.');

  Test({LINENUM}35096, 'ReplaceRow(B, 1, ❨5, 4, 3, 2, 1❩)', 5, [TASC(5), 4, 3, 2, 1, 7, 4, 5, 1, 2]);
  Test({LINENUM}35097, 'ReplaceRow(B, 2, ❨0, 0, 0, 0, 0❩)', 5, [ImaginaryUnit, 6, 5, 3, 2, 0, 0, 0, 0, 0]);
  Test({LINENUM}35098, 'ReplaceRow(B, 3, ❨0, 0, 0, 0, 0❩)', failure, 'Index 3 out of bounds.');

  Test({LINENUM}35100, 'ReplaceRow(C, 4, ❨10, 20, 30❩)', 3, [ImaginaryUnit, 4, 0, 7, 5, 6, 7, 8, 5, 10, 20, 30, 4, 7, 8]);

  Test({LINENUM}35102, 'ReplaceRow(D, 1, ❨4, 5, 6❩)', 3, [TASC(4), 5, 6]);
  Test({LINENUM}35103, 'ReplaceRow(E, 2, ❨21❩)', 1, [ImaginaryUnit, 21]);

  Test({LINENUM}35105, 'ReplaceRow(F, 1, ❨i/2❩)', 1, [ImaginaryUnit/2]);

  Test({LINENUM}35107, 'ReplaceCol(A, 1, ❨1, 2, 3, 4❩)', 4, [TASC(1), 2, 3, 6, 2, 1, 8, 7, 3, 3, 5, 4, 4, 7, 5, 2]);
  Test({LINENUM}35108, 'ReplaceCol(A, 1, ❨1, 2, 3, i/4❩)', 4, [TASC(1), 2, 3, 6, 2, 1, 8, 7, 3, 3, 5, 4, ImaginaryUnit/4, 7, 5, 2]);
  Test({LINENUM}35109, 'ReplaceCol(A, 2, ❨9, 8, 7, 6❩)', 4, [ImaginaryUnit, 9, 3, 6, 0, 8, 8, 7, 9, 7, 5, 4, 1, 6, 5, 2]);
  Test({LINENUM}35110, 'ReplaceCol(A, 3, ❨0, 0, 0, 0❩)', 4, [ImaginaryUnit, 2, 0, 6, 0, 1, 0, 7, 9, 3, 0, 4, 1, 7, 0, 2]);
  Test({LINENUM}35111, 'ReplaceCol(A, 4, ❨5, 0, 4, 0❩)', 4, [ImaginaryUnit, 2, 3, 5, 0, 1, 8, 0, 9, 3, 5, 4, 1, 7, 5, 0]);

  Test({LINENUM}35113, 'ReplaceCol(A, 5, ❨5, 0, 4, 0❩)', failure, 'Index 5 out of bounds.');
  Test({LINENUM}35114, 'ReplaceCol(A, 0, ❨5, 0, 4, 0❩)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}35115, 'ReplaceCol(A, -1, ❨5, i, 4, 0❩)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}35117, 'ReplaceCol(A, 3, ❨i, 2, 3❩)', failure, 'Incorrect length of array.');
  Test({LINENUM}35118, 'ReplaceCol(A, 3, ❨1, 2, 3, 4, 5❩)', failure, 'Incorrect length of array.');

  Test({LINENUM}35120, 'ReplaceCol(B, 4, ❨10, 20❩)', 5, [ImaginaryUnit, 6, 5, 10, 2, 7, 4, 5, 20, 2]);
  Test({LINENUM}35121, 'ReplaceCol(C, 3, ❨10, 20, 30, 40, 50❩)', 3, [ImaginaryUnit, 4, 10, 7, 5, 20, 7, 8, 30, 2, 0, 40, 4, 7, 50]);
  Test({LINENUM}35122, 'ReplaceCol(D, 2, ❨1❩)', 3, [ImaginaryUnit, 1, 3]);
  Test({LINENUM}35123, 'ReplaceCol(E, 1, ❨9, 8❩)', 1, [TASC(9), 8]);
  Test({LINENUM}35124, 'ReplaceCol(F, 1, ❨4❩)', 1, [TASC(4)]);

  Test({LINENUM}35126, 'ReplaceDiagonal(A, ❨1, 2, 3, 4❩)', 4, [TASC(1), 2, 3, 6, 0, 2, 8, 7, 9, 3, 3, 4, 1, 7, 5, 4]);
  Test({LINENUM}35127, 'ReplaceDiagonal(A, ❨1, 2, 3, i/4❩)', 4, [TASC(1), 2, 3, 6, 0, 2, 8, 7, 9, 3, 3, 4, 1, 7, 5, ImaginaryUnit/4]);
  Test({LINENUM}35128, 'ReplaceDiagonal(A, ❨1, 2, 3❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35129, 'ReplaceDiagonal(A, ❨1, i, 3, 4, 5❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35130, 'ReplaceDiagonal(B, ❨1, 2❩)', 5, [TASC(1), 6, 5, 3, 2, 7, 2, 5, 1, 2]);
  Test({LINENUM}35131, 'ReplaceDiagonal(B, ❨1, 2, 3❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35132, 'ReplaceDiagonal(C, ❨1, 2, 3❩)', 3, [TASC(1), 4, 0, 7, 2, 6, 7, 8, 3, 2, 0, 3, 4, 7, 8]);
  Test({LINENUM}35133, 'ReplaceDiagonal(C, ❨1, 2, 3, 4❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35134, 'ReplaceDiagonal(D, ❨21❩)', 3, [TASC(21), 6, 3]);
  Test({LINENUM}35135, 'ReplaceDiagonal(D, ❨i, 22❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35136, 'ReplaceDiagonal(E, ❨i/4❩)', 1, [ImaginaryUnit/4, 1]);
  Test({LINENUM}35137, 'ReplaceDiagonal(E, ❨21, 11❩)', failure, 'Incorrect number of elements in diagonal.');
  Test({LINENUM}35138, 'ReplaceDiagonal(F, ❨23❩)', 1, [TASC(23)]);
  Test({LINENUM}35139, 'ReplaceDiagonal(F, ❨23, 24❩)', failure, 'Incorrect number of elements in diagonal.');

  Test({LINENUM}35141, 'ReplaceSuperdiagonal(A, ❨10, 20, 30❩)', 4, [ImaginaryUnit, 10, 3, 6, 0, 1, 20, 7, 9, 3, 5, 30, 1, 7, 5, 2]);
  Test({LINENUM}35142, 'ReplaceSuperdiagonal(A, ❨10, 20❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35143, 'ReplaceSuperdiagonal(A, ❨10, 20, 30, 40❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35144, 'ReplaceSuperdiagonal(B, ❨60, 50❩)', 5, [ImaginaryUnit, 60, 5, 3, 2, 7, 4, 50, 1, 2]);
  Test({LINENUM}35145, 'ReplaceSuperdiagonal(B, ❨60❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35146, 'ReplaceSuperdiagonal(B, ❨60, 50, 40❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35147, 'ReplaceSuperdiagonal(C, ❨40, 60⋅i❩)', 3, [ImaginaryUnit, 40, 0, 7, 5, 60*ImaginaryUnit, 7, 8, 5, 2, 0, 3, 4, 7, 8]);
  Test({LINENUM}35148, 'ReplaceSuperdiagonal(C, ❨40❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35149, 'ReplaceSuperdiagonal(C, ❨40, 60, 80❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35150, 'ReplaceSuperdiagonal(D, ❨60❩)', 3, [ImaginaryUnit, 60, 3]);
  Test({LINENUM}35151, 'ReplaceSuperdiagonal(D, ❨60, 70❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35152, 'ReplaceSuperdiagonal(E, DebugObject("empty vector"))', 1, [ImaginaryUnit, 1]);
  Test({LINENUM}35153, 'ReplaceSuperdiagonal(E, ❨80❩)', failure, 'Incorrect number of elements in superdiagonal.');
  Test({LINENUM}35154, 'ReplaceSuperdiagonal(F, DebugObject("empty vector"))', 1, [ImaginaryUnit]);
  Test({LINENUM}35155, 'ReplaceSuperdiagonal(F, ❨23❩)', failure, 'Incorrect number of elements in superdiagonal.');

  Test({LINENUM}35157, 'ReplaceSubdiagonal(A, ❨10, 20, 30❩)', 4, [ImaginaryUnit, 2, 3, 6, 10, 1, 8, 7, 9, 20, 5, 4, 1, 7, 30, 2]);
  Test({LINENUM}35158, 'ReplaceSubdiagonal(A, ❨10, 20❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35159, 'ReplaceSubdiagonal(A, ❨10, 20, 30, 40❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35160, 'ReplaceSubdiagonal(B, ❨70⋅i❩)', 5, [ImaginaryUnit, 6, 5, 3, 2, 70*ImaginaryUnit, 4, 5, 1, 2]);
  Test({LINENUM}35161, 'ReplaceSubdiagonal(B, ❨70, 80❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35162, 'ReplaceSubdiagonal(C, ❨70, 80, 90❩)', 3, [ImaginaryUnit, 4, 0, 70, 5, 6, 7, 80, 5, 2, 0, 90, 4, 7, 8]);
  Test({LINENUM}35163, 'ReplaceSubdiagonal(C, ❨70, 80❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35164, 'ReplaceSubdiagonal(C, ❨70, 80, 90, 100❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35165, 'ReplaceSubdiagonal(D, ❨100❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35166, 'ReplaceSubdiagonal(D, DebugObject("empty vector"))', 3, [ImaginaryUnit, 6, 3]);
  Test({LINENUM}35167, 'ReplaceSubdiagonal(E, ❨10❩)', 1, [ImaginaryUnit, 10]);
  Test({LINENUM}35168, 'ReplaceSubdiagonal(E, ❨10, 20❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35169, 'ReplaceSubdiagonal(F, ❨1000❩)', failure, 'Incorrect number of elements in subdiagonal.');
  Test({LINENUM}35170, 'ReplaceSubdiagonal(F, DebugObject("empty vector"))', 1, [ImaginaryUnit]);

  Test({LINENUM}35172, 'ReplaceAntidiagonal(A, ❨10, 20, 30, 40❩)', 4, [ImaginaryUnit, 2, 3, 10, 0, 1, 20, 7, 9, 30, 5, 4, 40, 7, 5, 2]);
  Test({LINENUM}35173, 'ReplaceAntidiagonal(A, ❨10, 20, 30❩)', failure, 'Incorrect number of elements in antidiagonal.');
  Test({LINENUM}35174, 'ReplaceAntidiagonal(A, ❨10, 20, 30, 40, 50❩)', failure, 'Incorrect number of elements in antidiagonal.');
  Test({LINENUM}35175, 'ReplaceAntidiagonal(B, ❨10, 20❩)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}35176, 'ReplaceAntidiagonal(C, ❨10, 20, 30❩)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}35177, 'ReplaceAntidiagonal(D, ❨10❩)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}35178, 'ReplaceAntidiagonal(E, ❨10❩)', failure, 'A non-square matrix has no antidiagonal.');
  Test({LINENUM}35179, 'ReplaceAntidiagonal(F, ❨10❩)', 1, [TASC(10)]);
  Test({LINENUM}35180, 'ReplaceAntidiagonal(F, ❨10, 20❩)', failure, 'Incorrect number of elements in antidiagonal.');

  // Vector conversions

  Test({LINENUM}35184, 'A ≔ ❨❨4, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨4, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨1, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨5, 6, 3❩❩; E ≔ ❨❨7❩, ❨1❩❩; F ≔ ❨❨21❩❩;', null);

  Test({LINENUM}35186, 'vector(A)', [4, 2, 3, 6, 0, 1, 8, 7, 9, 3, 5, 4, 1, 7, 5, 2]);
  Test({LINENUM}35187, 'vector(B)', [4, 6, 5, 3, 2, 7, 4, 5, 1, 2]);
  Test({LINENUM}35188, 'vector(C)', [1, 4, 0, 7, 5, 6, 7, 8, 5, 2, 0, 3, 4, 7, 8]);
  Test({LINENUM}35189, 'vector(D)', [5, 6, 3]);
  Test({LINENUM}35190, 'vector(E)', [7, 1]);
  Test({LINENUM}35191, 'vector(F)', [21]);

  Test({LINENUM}35193, 'vec(A)', [4, 0, 9, 1, 2, 1, 3, 7, 3, 8, 5, 5, 6, 7, 4, 2]);
  Test({LINENUM}35194, 'vec(B)', [4, 7, 6, 4, 5, 5, 3, 1, 2, 2]);
  Test({LINENUM}35195, 'vec(C)', [1, 7, 7, 2, 4, 4, 5, 8, 0, 7, 0, 6, 5, 3, 8]);
  Test({LINENUM}35196, 'vec(D)', [5, 6, 3]);
  Test({LINENUM}35197, 'vec(E)', [7, 1]);
  Test({LINENUM}35198, 'vec(F)', [21]);

  Test({LINENUM}35200, 'vectorization(A)', [4, 0, 9, 1, 2, 1, 3, 7, 3, 8, 5, 5, 6, 7, 4, 2]);
  Test({LINENUM}35201, 'vectorization(B)', [4, 7, 6, 4, 5, 5, 3, 1, 2, 2]);
  Test({LINENUM}35202, 'vectorization(C)', [1, 7, 7, 2, 4, 4, 5, 8, 0, 7, 0, 6, 5, 3, 8]);
  Test({LINENUM}35203, 'vectorization(D)', [5, 6, 3]);
  Test({LINENUM}35204, 'vectorization(E)', [7, 1]);
  Test({LINENUM}35205, 'vectorization(F)', [21]);

  Test({LINENUM}35207, 'A ≔ ❨❨i, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨i, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨i, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨i, 6, 3❩❩; E ≔ ❨❨i❩, ❨1❩❩; F ≔ ❨❨i❩❩;', null);

  Test({LINENUM}35209, 'vector(A)', [ImaginaryUnit, 2, 3, 6, 0, 1, 8, 7, 9, 3, 5, 4, 1, 7, 5, 2]);
  Test({LINENUM}35210, 'vector(B)', [ImaginaryUnit, 6, 5, 3, 2, 7, 4, 5, 1, 2]);
  Test({LINENUM}35211, 'vector(C)', [ImaginaryUnit, 4, 0, 7, 5, 6, 7, 8, 5, 2, 0, 3, 4, 7, 8]);
  Test({LINENUM}35212, 'vector(D)', [ImaginaryUnit, 6, 3]);
  Test({LINENUM}35213, 'vector(E)', [ImaginaryUnit, 1]);
  Test({LINENUM}35214, 'vector(F)', [ImaginaryUnit]);

  Test({LINENUM}35216, 'vec(A)', [ImaginaryUnit, 0, 9, 1, 2, 1, 3, 7, 3, 8, 5, 5, 6, 7, 4, 2]);
  Test({LINENUM}35217, 'vec(B)', [ImaginaryUnit, 7, 6, 4, 5, 5, 3, 1, 2, 2]);
  Test({LINENUM}35218, 'vec(C)', [ImaginaryUnit, 7, 7, 2, 4, 4, 5, 8, 0, 7, 0, 6, 5, 3, 8]);
  Test({LINENUM}35219, 'vec(D)', [ImaginaryUnit, 6, 3]);
  Test({LINENUM}35220, 'vec(E)', [ImaginaryUnit, 1]);
  Test({LINENUM}35221, 'vec(F)', [ImaginaryUnit]);

  Test({LINENUM}35223, 'vectorization(A)', [ImaginaryUnit, 0, 9, 1, 2, 1, 3, 7, 3, 8, 5, 5, 6, 7, 4, 2]);
  Test({LINENUM}35224, 'vectorization(B)', [ImaginaryUnit, 7, 6, 4, 5, 5, 3, 1, 2, 2]);
  Test({LINENUM}35225, 'vectorization(C)', [ImaginaryUnit, 7, 7, 2, 4, 4, 5, 8, 0, 7, 0, 6, 5, 3, 8]);
  Test({LINENUM}35226, 'vectorization(D)', [ImaginaryUnit, 6, 3]);
  Test({LINENUM}35227, 'vectorization(E)', [ImaginaryUnit, 1]);
  Test({LINENUM}35228, 'vectorization(F)', [ImaginaryUnit]);

  // Matrix augmentation

  Test({LINENUM}35232, 'A ≔ ❨❨4, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨4, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨1, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨5, 6, 3❩❩; E ≔ ❨❨7❩, ❨1❩❩; F ≔ ❨❨21❩❩;', null);

  Test({LINENUM}35234, 'aug(A, ❨10, 20, 30, 40❩)', 5, [4, 2, 3, 6, 10, 0, 1, 8, 7, 20, 9, 3, 5, 4, 30, 1, 7, 5, 2, 40]);
  Test({LINENUM}35235, 'aug(A, ❨10, 20, 30❩)', failure, 'Cannot augment matrix with different number of rows.');
  Test({LINENUM}35236, 'aug(A, ❨10, 20, 30, 40, 50❩)', failure, 'Cannot augment matrix with different number of rows.');

  Test({LINENUM}35238, 'aug(A, ❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩, ❨7, 8❩❩)', 6, [4, 2, 3, 6, 1, 2, 0, 1, 8, 7, 3, 4, 9, 3, 5, 4, 5, 6, 1, 7, 5, 2, 7, 8]);
  Test({LINENUM}35239, 'aug(A, ❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩)', failure, 'Cannot augment matrix with different number of rows.');
  Test({LINENUM}35240, 'aug(A, ❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩, ❨7, 8❩, ❨9, 10❩❩)', failure, 'Cannot augment matrix with different number of rows.');

  Test({LINENUM}35242, 'aug(B, ❨0, 1❩)', 6, [4, 6, 5, 3, 2, 0, 7, 4, 5, 1, 2, 1]);
  Test({LINENUM}35243, 'aug(D, ❨8❩)', 4, [5, 6, 3, 8]);
  Test({LINENUM}35244, 'aug(E, ❨4, 2❩)', 2, [7, 4, 1, 2]);
  Test({LINENUM}35245, 'aug(F, ❨23❩)', 2, [21, 23]);

  Test({LINENUM}35247, 'aug(❨1, 2, 3❩, ❨4, 5, 6❩)', 2, [1, 4, 2, 5, 3, 6]);

  Test({LINENUM}35249, 'aug(❨1, 2, 3❩, IdentityMatrix(3))', 4, [1, 1, 0, 0, 2, 0, 1, 0, 3, 0, 0, 1]);

  Test({LINENUM}35251, 'aug(IdentityMatrix(3), IdentityMatrix(3))', 6, [1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1]);
  Test({LINENUM}35252, 'aug(IdentityMatrix(3), IdentityMatrix(2))', failure, 'Cannot augment matrix with different number of rows.');

  Test({LINENUM}35254, 'A ≔ ❨❨i, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨i, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨i, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨i, 6, 3❩❩; E ≔ ❨❨i❩, ❨1❩❩; F ≔ ❨❨i❩❩;', null);

  Test({LINENUM}35256, 'aug(A, ❨10, 20, 30, 40❩)', 5, [ImaginaryUnit, 2, 3, 6, 10, 0, 1, 8, 7, 20, 9, 3, 5, 4, 30, 1, 7, 5, 2, 40]);
  Test({LINENUM}35257, 'aug(A, ❨10, 20, 30❩)', failure, 'Cannot augment matrix with different number of rows.');
  Test({LINENUM}35258, 'aug(A, ❨10, 20, 30, 40, 50❩)', failure, 'Cannot augment matrix with different number of rows.');

  Test({LINENUM}35260, 'aug(A, ❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩, ❨7, 8❩❩)', 6, [ImaginaryUnit, 2, 3, 6, 1, 2, 0, 1, 8, 7, 3, 4, 9, 3, 5, 4, 5, 6, 1, 7, 5, 2, 7, 8]);
  Test({LINENUM}35261, 'aug(A, ❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩)', failure, 'Cannot augment matrix with different number of rows.');
  Test({LINENUM}35262, 'aug(A, ❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩, ❨7, 8❩, ❨9, 10❩❩)', failure, 'Cannot augment matrix with different number of rows.');

  Test({LINENUM}35264, 'aug(B, ❨0, 1❩)', 6, [ImaginaryUnit, 6, 5, 3, 2, 0, 7, 4, 5, 1, 2, 1]);
  Test({LINENUM}35265, 'aug(D, ❨8❩)', 4, [ImaginaryUnit, 6, 3, 8]);
  Test({LINENUM}35266, 'aug(E, ❨4, 2❩)', 2, [ImaginaryUnit, 4, 1, 2]);
  Test({LINENUM}35267, 'aug(F, ❨23❩)', 2, [ImaginaryUnit, 23]);

  Test({LINENUM}35269, 'aug(❨i, 2, 3❩, ❨4, 5, 6❩)', 2, [ImaginaryUnit, 4, 2, 5, 3, 6]);
  Test({LINENUM}35270, 'aug(❨1, 2, 3❩, ❨i/4, 5, 6❩)', 2, [1, ImaginaryUnit/4, 2, 5, 3, 6]);
  Test({LINENUM}35271, 'aug(❨i, 2, 3❩, ❨i/4, 5, 6❩)', 2, [ImaginaryUnit, ImaginaryUnit/4, 2, 5, 3, 6]);

  Test({LINENUM}35273, 'aug(❨i, 2, 3❩, IdentityMatrix(3))', 4, [ImaginaryUnit, 1, 0, 0, 2, 0, 1, 0, 3, 0, 0, 1]);

  Test({LINENUM}35275, 'aug(IdentityMatrix(3), ComplexMatrix(IdentityMatrix(3)))', 6, [TASC(1), 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1]);
  Test({LINENUM}35276, 'aug(IdentityMatrix(3), ComplexMatrix(IdentityMatrix(2)))', failure, 'Cannot augment matrix with different number of rows.');

  Test({LINENUM}35278, 'A ≔ ❨❨4, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨4, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨1, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨5, 6, 3❩❩; E ≔ ❨❨7❩, ❨1❩❩; F ≔ ❨❨21❩❩;', null);

  Test({LINENUM}35280, 'lessen(A)', 3, [4, 2, 3, 0, 1, 8, 9, 3, 5, 1, 7, 5]);
  Test({LINENUM}35281, 'lessen(B)', 4, [4, 6, 5, 3, 7, 4, 5, 1]);
  Test({LINENUM}35282, 'lessen(C)', 2, [1, 4, 7, 5, 7, 8, 2, 0, 4, 7]);
  Test({LINENUM}35283, 'lessen(D)', 2, [5, 6]);
  Test({LINENUM}35284, 'lessen(E)', failure, 'Cannot lessen a single-column matrix.');
  Test({LINENUM}35285, 'lessen(F)', failure, 'Cannot lessen a single-column matrix.');

  Test({LINENUM}35287, 'A ≔ ❨❨i, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨i, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨i, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨i, 6, 3❩❩; E ≔ ❨❨i❩, ❨1❩❩; F ≔ ❨❨i❩❩;', null);

  Test({LINENUM}35289, 'lessen(A)', 3, [ImaginaryUnit, 2, 3, 0, 1, 8, 9, 3, 5, 1, 7, 5]);
  Test({LINENUM}35290, 'lessen(B)', 4, [ImaginaryUnit, 6, 5, 3, 7, 4, 5, 1]);
  Test({LINENUM}35291, 'lessen(C)', 2, [ImaginaryUnit, 4, 7, 5, 7, 8, 2, 0, 4, 7]);
  Test({LINENUM}35292, 'lessen(D)', 2, [ImaginaryUnit, 6]);
  Test({LINENUM}35293, 'lessen(E)', failure, 'Cannot lessen a single-column matrix.');
  Test({LINENUM}35294, 'lessen(F)', failure, 'Cannot lessen a single-column matrix.');

  for _i := 1 to 100 do
  begin
    Test({LINENUM}35298, Format('A ≔ RandomMatrix(%d); v ≔ RandomVector(%d);', [_i, _i]), null); // random seed irrelevant
    Test({LINENUM}35299, 'lessen(aug(A, v)) = A', True);
  end;

  // Submatrices

  Test({LINENUM}35304, 'A ≔ ❨❨4, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨4, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨1, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨5, 6, 3❩❩; E ≔ ❨❨7❩, ❨1❩❩; F ≔ ❨❨21❩❩;', null);

  Test({LINENUM}35306, 'SubmatrixByRemoval(A, 2, 3)', 3, [4, 2, 6, 9, 3, 4, 1, 7, 2]);
  Test({LINENUM}35307, 'SubmatrixByRemoval(A, 2, 5)', failure, 'Invalid row or column index');
  Test({LINENUM}35308, 'SubmatrixByRemoval(A, 5, 3)', failure, 'Invalid row or column index');

  Test({LINENUM}35310, 'SubmatrixByRemoval(B, 1, 4)', 4, [7, 4, 5, 2]);
  Test({LINENUM}35311, 'SubmatrixByRemoval(C, 4, 1)', 2, [4, 0, 5, 6, 8, 5, 7, 8]);
  Test({LINENUM}35312, 'SubmatrixByRemoval(D, 1, 2)', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}35313, 'SubmatrixByRemoval(E, 1, 1)', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}35314, 'SubmatrixByRemoval(F, 1, 1)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}35316, 'A ≔ ❨❨i, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨i, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨i, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨i, 6, 3❩❩; E ≔ ❨❨i❩, ❨1❩❩; F ≔ ❨❨i❩❩;', null);

  Test({LINENUM}35318, 'SubmatrixByRemoval(A, 2, 3)', 3, [ImaginaryUnit, 2, 6, 9, 3, 4, 1, 7, 2]);
  Test({LINENUM}35319, 'SubmatrixByRemoval(A, 2, 5)', failure, 'Invalid row or column index');
  Test({LINENUM}35320, 'SubmatrixByRemoval(A, 5, 3)', failure, 'Invalid row or column index');

  Test({LINENUM}35322, 'SubmatrixByRemoval(B, 1, 4)', 4, [TASC(7), 4, 5, 2]);
  Test({LINENUM}35323, 'SubmatrixByRemoval(C, 4, 1)', 2, [TASC(4), 0, 5, 6, 8, 5, 7, 8]);
  Test({LINENUM}35324, 'SubmatrixByRemoval(D, 1, 2)', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}35325, 'SubmatrixByRemoval(E, 1, 1)', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}35326, 'SubmatrixByRemoval(F, 1, 1)', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}35328, 'A ≔ ❨❨4, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨4, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨1, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨5, 6, 3❩❩; E ≔ ❨❨7❩, ❨1❩❩; F ≔ ❨❨21❩❩;', null);

  Test({LINENUM}35330, 'LeadingPrincipalSubmatrix(A)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}35331, 'LeadingPrincipalSubmatrix(A, 1)', 1, [4]);
  Test({LINENUM}35332, 'LeadingPrincipalSubmatrix(A, 2)', 2, [4, 2, 0, 1]);
  Test({LINENUM}35333, 'LeadingPrincipalSubmatrix(A, 3)', 3, [4, 2, 3, 0, 1, 8, 9, 3, 5]);
  Test({LINENUM}35334, 'LeadingPrincipalSubmatrix(A, 4)', 4, [4, 2, 3, 6, 0, 1, 8, 7, 9, 3, 5, 4, 1, 7, 5, 2]);
  Test({LINENUM}35335, 'LeadingPrincipalSubmatrix(A, 5)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35337, 'LeadingPrincipalSubmatrix(B, 1)', 1, [4]);
  Test({LINENUM}35338, 'LeadingPrincipalSubmatrix(B, 2)', 2, [4, 6, 7, 4]);
  Test({LINENUM}35339, 'LeadingPrincipalSubmatrix(B, 3)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35341, 'LeadingPrincipalSubmatrix(C, 1)', 1, [1]);
  Test({LINENUM}35342, 'LeadingPrincipalSubmatrix(C, 2)', 2, [1, 4, 7, 5]);
  Test({LINENUM}35343, 'LeadingPrincipalSubmatrix(C, 3)', 3, [1, 4, 0, 7, 5, 6, 7, 8, 5]);
  Test({LINENUM}35344, 'LeadingPrincipalSubmatrix(C, 4)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35346, 'LeadingPrincipalSubmatrix(D, 1)', 1, [5]);
  Test({LINENUM}35347, 'LeadingPrincipalSubmatrix(D, 2)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35349, 'LeadingPrincipalSubmatrix(E, 1)', 1, [7]);
  Test({LINENUM}35350, 'LeadingPrincipalSubmatrix(E, 2)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35352, 'LeadingPrincipalSubmatrix(F, 1)', 1, [21]);
  Test({LINENUM}35353, 'LeadingPrincipalSubmatrix(F, 2)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35355, 'A ≔ ❨❨i, 2, 3, 6❩, ❨0, 1, 8, 7❩, ❨9, 3, 5, 4❩, ❨1, 7, 5, 2❩❩; B ≔ ❨❨i, 6, 5, 3, 2❩, ❨7, 4, 5, 1, 2❩❩; C ≔ ❨❨i, 4, 0❩, ❨7, 5, 6❩, ❨7, 8, 5❩, ❨2, 0, 3❩, ❨4, 7, 8❩❩; D ≔ ❨❨i, 6, 3❩❩; E ≔ ❨❨i❩, ❨1❩❩; F ≔ ❨❨i❩❩;', null);

  Test({LINENUM}35357, 'LeadingPrincipalSubmatrix(A)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}35358, 'LeadingPrincipalSubmatrix(A, 1)', 1, [ImaginaryUnit]);
  Test({LINENUM}35359, 'LeadingPrincipalSubmatrix(A, 2)', 2, [ImaginaryUnit, 2, 0, 1]);
  Test({LINENUM}35360, 'LeadingPrincipalSubmatrix(A, 3)', 3, [ImaginaryUnit, 2, 3, 0, 1, 8, 9, 3, 5]);
  Test({LINENUM}35361, 'LeadingPrincipalSubmatrix(A, 4)', 4, [ImaginaryUnit, 2, 3, 6, 0, 1, 8, 7, 9, 3, 5, 4, 1, 7, 5, 2]);
  Test({LINENUM}35362, 'LeadingPrincipalSubmatrix(A, 5)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35364, 'LeadingPrincipalSubmatrix(B, 1)', 1, [ImaginaryUnit]);
  Test({LINENUM}35365, 'LeadingPrincipalSubmatrix(B, 2)', 2, [ImaginaryUnit, 6, 7, 4]);
  Test({LINENUM}35366, 'LeadingPrincipalSubmatrix(B, 3)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35368, 'LeadingPrincipalSubmatrix(C, 1)', 1, [ImaginaryUnit]);
  Test({LINENUM}35369, 'LeadingPrincipalSubmatrix(C, 2)', 2, [ImaginaryUnit, 4, 7, 5]);
  Test({LINENUM}35370, 'LeadingPrincipalSubmatrix(C, 3)', 3, [ImaginaryUnit, 4, 0, 7, 5, 6, 7, 8, 5]);
  Test({LINENUM}35371, 'LeadingPrincipalSubmatrix(C, 4)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35373, 'LeadingPrincipalSubmatrix(D, 1)', 1, [ImaginaryUnit]);
  Test({LINENUM}35374, 'LeadingPrincipalSubmatrix(D, 2)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35376, 'LeadingPrincipalSubmatrix(E, 1)', 1, [ImaginaryUnit]);
  Test({LINENUM}35377, 'LeadingPrincipalSubmatrix(E, 2)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35379, 'LeadingPrincipalSubmatrix(F, 1)', 1, [ImaginaryUnit]);
  Test({LINENUM}35380, 'LeadingPrincipalSubmatrix(F, 2)', failure, 'Invalid index arrays passed to function Submatrix.');

  Test({LINENUM}35382, 'delete(A); delete(B); delete(C); delete(D); delete(E); delete(F)', success);





  //
  //
  //  CHAPTER 7
  //  String functions.
  //
  //

  Chapter('String functions');

  //
  //  Basic string functions
  //

  // Length

  Test({LINENUM}35403, 'length("Hello, World!")', 13);
  Test({LINENUM}35404, 'length("It does not do to dwell on dreams, and forget to live.")', 54);
  Test({LINENUM}35405, 'length("")', 0);
  Test({LINENUM}35406, 'length("∫⌬dx")', 4);

  _s := LoremIpsum(100);
  Test({LINENUM}35409, 'length("' + _s + '")', _s.Length);

  Test({LINENUM}35411, 's ≔ "Hello, World!"; length(s)', 13);
  Test({LINENUM}35412, 's ≔ "It does not do to dwell on dreams, and forget to live."; length(s)', 54);
  Test({LINENUM}35413, 's ≔ ""; length(s)', 0);
  Test({LINENUM}35414, 's ≔ "∫⌬dx"; length(s)', 4);
  Test({LINENUM}35415, 's ≔ "' + _s + '"; length(s)', _s.Length);

  Test({LINENUM}35417, '#"Hello, World!"', 13);
  Test({LINENUM}35418, '#"It does not do to dwell on dreams, and forget to live."', 54);
  Test({LINENUM}35419, '#""', 0);
  Test({LINENUM}35420, '#"∫⌬dx"', 4);

  _s := LoremIpsum(100);
  Test({LINENUM}35423, '#"' + _s + '"', _s.Length);

  Test({LINENUM}35425, 's ≔ "Hello, World!"; #s', 13);
  Test({LINENUM}35426, 's ≔ "It does not do to dwell on dreams, and forget to live."; #s', 54);
  Test({LINENUM}35427, 's ≔ ""; #s', 0);
  Test({LINENUM}35428, 's ≔ "∫⌬dx"; #s', 4);
  Test({LINENUM}35429, 's ≔ "' + _s + '"; #s', _s.Length);

  _s := '';
  Test({LINENUM}35432, 'LoremStr ≔ s; delete(s)', success);

  // Reversal

  Test({LINENUM}35436, 'reverse("Hello, World!")', '!dlroW ,olleH');
  Test({LINENUM}35437, 'reverse("PARIS")', 'SIRAP');
  Test({LINENUM}35438, 'reverse("")', '');
  Test({LINENUM}35439, 'reverse("A")', 'A');
  Test({LINENUM}35440, 'reverse("∫⌬dx")', 'xd⌬∫');
  Test({LINENUM}35441, 'reverse("erised")', 'desire');

  Test({LINENUM}35443, 'length(reverse(LoremStr)) = length(LoremStr)', True);

  // Shuffling

  Test({LINENUM}35447, 's ≔ "Hello, World!"; s2 ≔ shuffle(s); #s = #s2 ∧ ToSet(s) = ToSet(s2)', True);
  Test({LINENUM}35448, 's ≔ "It does not do to dwell on dreams, and forget to live."; s2 ≔ shuffle(s); #s = #s2 ∧ ToSet(s) = ToSet(s2)', True);
  Test({LINENUM}35449, 's ≔ ""; s2 ≔ shuffle(s); #s = #s2 ∧ ToSet(s) = ToSet(s2)', True);
  Test({LINENUM}35450, 's ≔ "∫⌬dx"; s2 ≔ shuffle(s); #s = #s2 ∧ ToSet(s) = ToSet(s2)', True);
  Test({LINENUM}35451, 's ≔ LoremStr; s2 ≔ shuffle(s); #s = #s2 ∧ ToSet(s) = ToSet(s2)', True);
  Test({LINENUM}35452, 'delete(s)', success);

  // Substring search

  Test({LINENUM}35456, 'StringPos("test", "t")', 1);
  Test({LINENUM}35457, 'StringPos("test", "te")', 1);
  Test({LINENUM}35458, 'StringPos("test", "tes")', 1);
  Test({LINENUM}35459, 'StringPos("test", "test")', 1);
  Test({LINENUM}35460, 'StringPos("test", "testa")', 0);
  Test({LINENUM}35461, 'StringPos("test", "katt")', 0);
  Test({LINENUM}35462, 'StringPos("test", "e")', 2);
  Test({LINENUM}35463, 'StringPos("test", "st")', 3);
  Test({LINENUM}35464, 'StringPos("test", "st", "w")', 0);
  Test({LINENUM}35465, 'StringPos("test", "ST")', 0);
  Test({LINENUM}35466, 'StringPos("test", "ST", "i")', 3);
  Test({LINENUM}35467, 'StringPos("test", "ST", "iw")', 0);
  Test({LINENUM}35468, 'StringPos("test", "ST", "wi")', 0);
  Test({LINENUM}35469, 'StringPos("test", "TEST", "wi")', 1);
  Test({LINENUM}35470, 'StringPos("test", "TEST", "w")', 0);
  Test({LINENUM}35471, 'StringPos("test", "t", "")', 1);
  Test({LINENUM}35472, 'StringPos("test", "t", "", 1)', 1);
  Test({LINENUM}35473, 'StringPos("test", "t", "", 2)', 4);
  Test({LINENUM}35474, 'StringPos("test", "t", "", 5)', 0);
  Test({LINENUM}35475, 'StringPos("test", "")', 0);
  Test({LINENUM}35476, 'StringPos("", "t")', 0);
  Test({LINENUM}35477, 'StringPos("", "")', 0);
  Test({LINENUM}35478, 'StringPos("test")', failure, 'Too few arguments. A required argument of type string is missing.');
  Test({LINENUM}35479, 'StringPos("test", "t", "", 1, 2)', failure, 'Too many arguments.');
  Test({LINENUM}35480, 'StringPos("test", "t", "", "cat")', failure, 'An object of type integer was expected as argument 4, but an object of type string was given.');
  Test({LINENUM}35481, 'StringPos("test", "t", 1)', failure, 'An object of type string was expected as argument 3, but an object of type integer was given.');
  Test({LINENUM}35482, 'StringPos("test", 2)', failure, 'An object of type string was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}35483, 'StringPos(5, "t")', failure, 'An object of type string was expected as argument 1, but an object of type integer was given.');

  Test({LINENUM}35485, 'LoremStr ≔ "' + LoremIpsum(1) + '";', null);

  // 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor ' +
  // 'incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis ' +
  // 'nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ' +
  // 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu ' +
  // 'fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in ' +
  // 'culpa qui officia deserunt mollit anim id est laborum.';

  Test({LINENUM}35494, 'StringPos(LoremStr, "con")', 29);
  Test({LINENUM}35495, 'StringPos(LoremStr, "laboris")', 184);
  Test({LINENUM}35496, 'StringPos(LoremStr, "Lorem")', 1);
  Test({LINENUM}35497, 'StringPos(LoremStr, "laborum.")', 438);
  Test({LINENUM}35498, 'StringPos(LoremStr, ".")', 123);
  Test({LINENUM}35499, 'StringPos(LoremStr, " ")', 6);
  Test({LINENUM}35500, 'StringPos(LoremStr, "..")', 0);
  Test({LINENUM}35501, 'StringPos(LoremStr, "acetylkolinesteras")', 0);

  Test({LINENUM}35503, 'StringPos(LoremStr, "LOREM")', 0);
  Test({LINENUM}35504, 'StringPos(LoremStr, "lorem")', 0);
  Test({LINENUM}35505, 'StringPos(LoremStr, "DOLOR")', 0);

  Test({LINENUM}35507, 'StringPos(LoremStr, "LOREM", "i")', 1);
  Test({LINENUM}35508, 'StringPos(LoremStr, "lorem", "i")', 1);
  Test({LINENUM}35509, 'StringPos(LoremStr, "DOLOR", "i")', 13);
  Test({LINENUM}35510, 'StringPos(LoremStr, "ELIT", "i")', 52);
  Test({LINENUM}35511, 'StringPos(LoremStr, "ELIT")', 0);

  Test({LINENUM}35513, 'StringPos(LoremStr, "con")', 29);
  Test({LINENUM}35514, 'StringPos(LoremStr, "con", "i")', 29);
  Test({LINENUM}35515, 'StringPos(LoremStr, "con", "w")', 0);
  Test({LINENUM}35516, 'StringPos(LoremStr, "con", "iw")', 0);
  Test({LINENUM}35517, 'StringPos(LoremStr, "con", "wi")', 0);

  Test({LINENUM}35519, 'StringPos(LoremStr, "do")', 13);
  Test({LINENUM}35520, 'StringPos(LoremStr, "do", "w")', 62);

  Test({LINENUM}35522, 'StringPos(LoremStr, "Pariat", "iw")', 0);
  Test({LINENUM}35523, 'StringPos(LoremStr, "Pariat", "wi")', 0);
  Test({LINENUM}35524, 'StringPos(LoremStr, "Pariat", "i")', 326);
  Test({LINENUM}35525, 'StringPos(LoremStr, "Pariat", "w")', 0);
  Test({LINENUM}35526, 'StringPos(LoremStr, "Pariat", "")', 0);

  Test({LINENUM}35528, 'StringPos(LoremStr, "IN", "i")', 48);
  Test({LINENUM}35529, 'StringPos(LoremStr, "IN", "iw")', 255);
  Test({LINENUM}35530, 'StringPos(LoremStr, "IN", "wi")', 255);
  Test({LINENUM}35531, 'StringPos(LoremStr, "IN", "")', 0);
  Test({LINENUM}35532, 'StringPos(LoremStr, "IN", "w")', 0);

  Test({LINENUM}35534, 'StringPos(LoremStr, "in")', 48);
  Test({LINENUM}35535, 'StringPos(LoremStr, "in", "")', 48);
  Test({LINENUM}35536, 'StringPos(LoremStr, "in", "", 47)', 48);
  Test({LINENUM}35537, 'StringPos(LoremStr, "in", "", 48)', 48);
  Test({LINENUM}35538, 'StringPos(LoremStr, "in", "", 49)', 80);
  Test({LINENUM}35539, 'StringPos(LoremStr, "in", "", 79)', 80);
  Test({LINENUM}35540, 'StringPos(LoremStr, "in", "", 80)', 80);
  Test({LINENUM}35541, 'StringPos(LoremStr, "in", "", 81)', 137);
  Test({LINENUM}35542, 'StringPos(LoremStr, "in", "", 136)', 137);
  Test({LINENUM}35543, 'StringPos(LoremStr, "in", "", 137)', 137);
  Test({LINENUM}35544, 'StringPos(LoremStr, "in", "", 138)', 255);
  Test({LINENUM}35545, 'StringPos(LoremStr, "in", "", 254)', 255);
  Test({LINENUM}35546, 'StringPos(LoremStr, "in", "", 255)', 255);
  Test({LINENUM}35547, 'StringPos(LoremStr, "in", "", 256)', 272);
  Test({LINENUM}35548, 'StringPos(LoremStr, "in", "", 271)', 272);
  Test({LINENUM}35549, 'StringPos(LoremStr, "in", "", 272)', 272);
  Test({LINENUM}35550, 'StringPos(LoremStr, "in", "", 273)', 347);
  Test({LINENUM}35551, 'StringPos(LoremStr, "in", "", 346)', 347);
  Test({LINENUM}35552, 'StringPos(LoremStr, "in", "", 347)', 347);
  Test({LINENUM}35553, 'StringPos(LoremStr, "in", "", 348)', 389);
  Test({LINENUM}35554, 'StringPos(LoremStr, "in", "", 388)', 389);
  Test({LINENUM}35555, 'StringPos(LoremStr, "in", "", 389)', 389);
  Test({LINENUM}35556, 'StringPos(LoremStr, "in", "", 390)', 0);
  Test({LINENUM}35557, 'StringPos(LoremStr, "in", "", 500)', 0);
  Test({LINENUM}35558, 'StringPos(LoremStr, "in", "", 5000)', 0);
  Test({LINENUM}35559, 'StringPos(LoremStr, "in", "", 50000)', 0);

  Test({LINENUM}35561, 'StringPos(LoremStr, "IN")', 0);
  Test({LINENUM}35562, 'StringPos(LoremStr, "IN", "")', 0);
  Test({LINENUM}35563, 'StringPos(LoremStr, "IN", "", 47)', 0);
  Test({LINENUM}35564, 'StringPos(LoremStr, "IN", "", 48)', 0);
  Test({LINENUM}35565, 'StringPos(LoremStr, "IN", "", 49)', 0);
  Test({LINENUM}35566, 'StringPos(LoremStr, "IN", "", 79)', 0);
  Test({LINENUM}35567, 'StringPos(LoremStr, "IN", "", 80)', 0);
  Test({LINENUM}35568, 'StringPos(LoremStr, "IN", "", 81)', 0);
  Test({LINENUM}35569, 'StringPos(LoremStr, "IN", "", 136)', 0);
  Test({LINENUM}35570, 'StringPos(LoremStr, "IN", "", 137)', 0);
  Test({LINENUM}35571, 'StringPos(LoremStr, "IN", "", 138)', 0);
  Test({LINENUM}35572, 'StringPos(LoremStr, "IN", "", 254)', 0);
  Test({LINENUM}35573, 'StringPos(LoremStr, "IN", "", 255)', 0);
  Test({LINENUM}35574, 'StringPos(LoremStr, "IN", "", 256)', 0);
  Test({LINENUM}35575, 'StringPos(LoremStr, "IN", "", 271)', 0);
  Test({LINENUM}35576, 'StringPos(LoremStr, "IN", "", 272)', 0);
  Test({LINENUM}35577, 'StringPos(LoremStr, "IN", "", 273)', 0);
  Test({LINENUM}35578, 'StringPos(LoremStr, "IN", "", 346)', 0);
  Test({LINENUM}35579, 'StringPos(LoremStr, "IN", "", 347)', 0);
  Test({LINENUM}35580, 'StringPos(LoremStr, "IN", "", 348)', 0);
  Test({LINENUM}35581, 'StringPos(LoremStr, "IN", "", 388)', 0);
  Test({LINENUM}35582, 'StringPos(LoremStr, "IN", "", 389)', 0);
  Test({LINENUM}35583, 'StringPos(LoremStr, "IN", "", 390)', 0);
  Test({LINENUM}35584, 'StringPos(LoremStr, "IN", "", 500)', 0);
  Test({LINENUM}35585, 'StringPos(LoremStr, "IN", "", 5000)', 0);
  Test({LINENUM}35586, 'StringPos(LoremStr, "IN", "", 50000)', 0);

  Test({LINENUM}35588, 'StringPos(LoremStr, "IN")', 0);
  Test({LINENUM}35589, 'StringPos(LoremStr, "IN", "i")', 48);
  Test({LINENUM}35590, 'StringPos(LoremStr, "IN", "i", 47)', 48);
  Test({LINENUM}35591, 'StringPos(LoremStr, "IN", "i", 48)', 48);
  Test({LINENUM}35592, 'StringPos(LoremStr, "IN", "i", 49)', 80);
  Test({LINENUM}35593, 'StringPos(LoremStr, "IN", "i", 79)', 80);
  Test({LINENUM}35594, 'StringPos(LoremStr, "IN", "i", 80)', 80);
  Test({LINENUM}35595, 'StringPos(LoremStr, "IN", "i", 81)', 137);
  Test({LINENUM}35596, 'StringPos(LoremStr, "IN", "i", 136)', 137);
  Test({LINENUM}35597, 'StringPos(LoremStr, "IN", "i", 137)', 137);
  Test({LINENUM}35598, 'StringPos(LoremStr, "IN", "i", 138)', 255);
  Test({LINENUM}35599, 'StringPos(LoremStr, "IN", "i", 254)', 255);
  Test({LINENUM}35600, 'StringPos(LoremStr, "IN", "i", 255)', 255);
  Test({LINENUM}35601, 'StringPos(LoremStr, "IN", "i", 256)', 272);
  Test({LINENUM}35602, 'StringPos(LoremStr, "IN", "i", 271)', 272);
  Test({LINENUM}35603, 'StringPos(LoremStr, "IN", "i", 272)', 272);
  Test({LINENUM}35604, 'StringPos(LoremStr, "IN", "i", 273)', 347);
  Test({LINENUM}35605, 'StringPos(LoremStr, "IN", "i", 346)', 347);
  Test({LINENUM}35606, 'StringPos(LoremStr, "IN", "i", 347)', 347);
  Test({LINENUM}35607, 'StringPos(LoremStr, "IN", "i", 348)', 389);
  Test({LINENUM}35608, 'StringPos(LoremStr, "IN", "i", 388)', 389);
  Test({LINENUM}35609, 'StringPos(LoremStr, "IN", "i", 389)', 389);
  Test({LINENUM}35610, 'StringPos(LoremStr, "IN", "i", 390)', 0);
  Test({LINENUM}35611, 'StringPos(LoremStr, "IN", "i", 500)', 0);
  Test({LINENUM}35612, 'StringPos(LoremStr, "IN", "i", 5000)', 0);
  Test({LINENUM}35613, 'StringPos(LoremStr, "IN", "i", 50000)', 0);

  Test({LINENUM}35615, 'StringPos(LoremStr, "IN")', 0);
  Test({LINENUM}35616, 'StringPos(LoremStr, "IN", "i")', 48);
  Test({LINENUM}35617, 'StringPos(LoremStr, "IN", "iw")', 255);
  Test({LINENUM}35618, 'StringPos(LoremStr, "IN", "iw", 254)', 255);
  Test({LINENUM}35619, 'StringPos(LoremStr, "IN", "wi", 255)', 255);
  Test({LINENUM}35620, 'StringPos(LoremStr, "IN", "iw", 256)', 272);
  Test({LINENUM}35621, 'StringPos(LoremStr, "IN", "iw", 271)', 272);
  Test({LINENUM}35622, 'StringPos(LoremStr, "IN", "iw", 272)', 272);
  Test({LINENUM}35623, 'StringPos(LoremStr, "IN", "wi", 273)', 389);
  Test({LINENUM}35624, 'StringPos(LoremStr, "IN", "iw", 288)', 389);
  Test({LINENUM}35625, 'StringPos(LoremStr, "IN", "iw", 389)', 389);
  Test({LINENUM}35626, 'StringPos(LoremStr, "IN", "wi", 390)', 0);

  Test({LINENUM}35628, 'StringPos(LoremStr, "IN")', 0);
  Test({LINENUM}35629, 'StringPos(LoremStr, "IN", "")', 0);
  Test({LINENUM}35630, 'StringPos(LoremStr, "IN", "w")', 0);
  Test({LINENUM}35631, 'StringPos(LoremStr, "IN", "w", 254)', 0);
  Test({LINENUM}35632, 'StringPos(LoremStr, "IN", "w", 255)', 0);
  Test({LINENUM}35633, 'StringPos(LoremStr, "IN", "w", 256)', 0);
  Test({LINENUM}35634, 'StringPos(LoremStr, "IN", "w", 271)', 0);
  Test({LINENUM}35635, 'StringPos(LoremStr, "IN", "w", 272)', 0);
  Test({LINENUM}35636, 'StringPos(LoremStr, "IN", "w", 273)', 0);
  Test({LINENUM}35637, 'StringPos(LoremStr, "IN", "w", 288)', 0);
  Test({LINENUM}35638, 'StringPos(LoremStr, "IN", "w", 389)', 0);
  Test({LINENUM}35639, 'StringPos(LoremStr, "IN", "w", 390)', 0);

  Test({LINENUM}35641, 'StringPos(LoremStr, "in")', 48);
  Test({LINENUM}35642, 'StringPos(LoremStr, "in", "w")', 255);
  Test({LINENUM}35643, 'StringPos(LoremStr, "in", "w", 254)', 255);
  Test({LINENUM}35644, 'StringPos(LoremStr, "in", "w", 255)', 255);
  Test({LINENUM}35645, 'StringPos(LoremStr, "in", "w", 256)', 272);
  Test({LINENUM}35646, 'StringPos(LoremStr, "in", "w", 271)', 272);
  Test({LINENUM}35647, 'StringPos(LoremStr, "in", "w", 272)', 272);
  Test({LINENUM}35648, 'StringPos(LoremStr, "in", "w", 273)', 389);
  Test({LINENUM}35649, 'StringPos(LoremStr, "in", "w", 288)', 389);
  Test({LINENUM}35650, 'StringPos(LoremStr, "in", "w", 389)', 389);
  Test({LINENUM}35651, 'StringPos(LoremStr, "in", "w", 390)', 0);

  Test({LINENUM}35653, 'StringPos(LoremStr, "")', 0);
  Test({LINENUM}35654, 'StringPos(LoremStr, "", "i")', 0);
  Test({LINENUM}35655, 'StringPos(LoremStr, "", "w")', 0);
  Test({LINENUM}35656, 'StringPos(LoremStr, "", "iw")', 0);
  Test({LINENUM}35657, 'StringPos(LoremStr, "", "wi")', 0);
  Test({LINENUM}35658, 'StringPos(LoremStr, "", "", 20)', 0);
  Test({LINENUM}35659, 'StringPos(LoremStr, "", "i", 20)', 0);
  Test({LINENUM}35660, 'StringPos(LoremStr, "", "w", 20)', 0);
  Test({LINENUM}35661, 'StringPos(LoremStr, "", "iw", 20)', 0);
  Test({LINENUM}35662, 'StringPos(LoremStr, "", "wi", 20)', 0);
  Test({LINENUM}35663, 'StringPos(LoremStr, "", "", 5000)', 0);
  Test({LINENUM}35664, 'StringPos(LoremStr, "", "i", 5000)', 0);
  Test({LINENUM}35665, 'StringPos(LoremStr, "", "w", 5000)', 0);
  Test({LINENUM}35666, 'StringPos(LoremStr, "", "iw", 5000)', 0);
  Test({LINENUM}35667, 'StringPos(LoremStr, "", "wi", 5000)', 0);

  Test({LINENUM}35669, 'StringPos("", "in")', 0);
  Test({LINENUM}35670, 'StringPos("", "in", "i")', 0);
  Test({LINENUM}35671, 'StringPos("", "in", "w")', 0);
  Test({LINENUM}35672, 'StringPos("", "in", "iw")', 0);
  Test({LINENUM}35673, 'StringPos("", "in", "wi")', 0);
  Test({LINENUM}35674, 'StringPos("", "in", "", 20)', 0);
  Test({LINENUM}35675, 'StringPos("", "in", "i", 20)', 0);
  Test({LINENUM}35676, 'StringPos("", "in", "w", 20)', 0);
  Test({LINENUM}35677, 'StringPos("", "in", "iw", 20)', 0);
  Test({LINENUM}35678, 'StringPos("", "in", "wi", 20)', 0);
  Test({LINENUM}35679, 'StringPos("", "in", "", 5000)', 0);
  Test({LINENUM}35680, 'StringPos("", "in", "i", 5000)', 0);
  Test({LINENUM}35681, 'StringPos("", "in", "w", 5000)', 0);
  Test({LINENUM}35682, 'StringPos("", "in", "iw", 5000)', 0);
  Test({LINENUM}35683, 'StringPos("", "in", "wi", 5000)', 0);

  Test({LINENUM}35685, 'StringPos("", "")', 0);
  Test({LINENUM}35686, 'StringPos("", "", "i")', 0);
  Test({LINENUM}35687, 'StringPos("", "", "w")', 0);
  Test({LINENUM}35688, 'StringPos("", "", "iw")', 0);
  Test({LINENUM}35689, 'StringPos("", "", "wi")', 0);
  Test({LINENUM}35690, 'StringPos("", "", "", 20)', 0);
  Test({LINENUM}35691, 'StringPos("", "", "i", 20)', 0);
  Test({LINENUM}35692, 'StringPos("", "", "w", 20)', 0);
  Test({LINENUM}35693, 'StringPos("", "", "iw", 20)', 0);
  Test({LINENUM}35694, 'StringPos("", "", "wi", 20)', 0);
  Test({LINENUM}35695, 'StringPos("", "", "", 5000)', 0);
  Test({LINENUM}35696, 'StringPos("", "", "i", 5000)', 0);
  Test({LINENUM}35697, 'StringPos("", "", "w", 5000)', 0);
  Test({LINENUM}35698, 'StringPos("", "", "iw", 5000)', 0);
  Test({LINENUM}35699, 'StringPos("", "", "wi", 5000)', 0);

  Test({LINENUM}35701, 'StringPos(LoremStr, "Ex")', 336);
  Test({LINENUM}35702, 'StringPos(LoremStr, "Ex", "i")', 163);
  Test({LINENUM}35703, 'StringPos(LoremStr, "Ex", "iw")', 208);
  Test({LINENUM}35704, 'StringPos(LoremStr, "Ex", "wi")', 208);
  Test({LINENUM}35705, 'StringPos(LoremStr, "Ex", "w")', 0);

  Test({LINENUM}35707, 'StringPos(LoremStr, "lorem", "j")', failure, 'Unsupported character "j".');
  Test({LINENUM}35708, 'StringPos(LoremStr, "lorem", "c")', failure, 'Unsupported character "c".');
  Test({LINENUM}35709, 'StringPos(LoremStr, "lorem", "iwb")', failure, 'Unsupported character "b".');
  Test({LINENUM}35710, 'StringPos(LoremStr, "lorem", "ibw")', failure, 'Unsupported character "b".');
  Test({LINENUM}35711, 'StringPos(LoremStr, "lorem", "biw")', failure, 'Unsupported character "b".');

  Test({LINENUM}35713, 'StringPos(LoremStr, "lorem", "i", 0)', failure, 'A positive integer was expected as argument 4, but "0" was given.');
  Test({LINENUM}35714, 'StringPos(LoremStr, "lorem", "i", -1)', failure, 'A positive integer was expected as argument 4, but "-1" was given.');

  Test({LINENUM}35716, 'StringPos("t", "test")', 0);
  Test({LINENUM}35717, 'StringPos("t", "test", "iw")', 0);
  Test({LINENUM}35718, 'StringPos("t", "test", "iw", 5)', 0);

  _s := LoremIpsum(1000);
  Test({LINENUM}35721, 'LoremStr ≔ "' + _s + ' nargle";', null);

  StartStopwatch;
  Test({LINENUM}35724, 'StringPos(LoremStr, "nargle")', _s.Length + 2);
  Test({LINENUM}35725, 'StringPos(LoremStr, "nargl")', _s.Length + 2);
  StopStopwatch;
  TestDuration({LINENUM}35727, 0.02);

  StartStopwatch;
  Test({LINENUM}35730, 'StringPos(LoremStr, "nargle", "w")', _s.Length + 2);
  Test({LINENUM}35731, 'StringPos(LoremStr, "nargl", "w")', 0);
  StopStopwatch;
  TestDuration({LINENUM}35733, 0.04);

  StartStopwatch;
  Test({LINENUM}35736, 'StringPos(LoremStr, "Nargle", "wi")', _s.Length + 2);
  Test({LINENUM}35737, 'StringPos(LoremStr, "Nargle", "w")', 0);
  StopStopwatch;
  TestDuration({LINENUM}35739, 0.04);

  Test({LINENUM}35741, 'StringPos(LoremStr, "laborum." + chr(13) + chr(10) + "Lorem")', 438);

  Test({LINENUM}35743, 'delete(LoremStr)', success);
  _s := '';

  Test({LINENUM}35746, 's ≔ "A cat is a good/excellent" + chr(13) + chr(10) + "mister. –Indeed!"', 'A cat is a good/excellent'#13#10'mister. –Indeed!');

  Test({LINENUM}35748, 'StringPos(s, "a")', 4);
  Test({LINENUM}35749, 'StringPos(s, "a", "i")', 1);
  Test({LINENUM}35750, 'StringPos(s, "a", "", 3)', 4);
  Test({LINENUM}35751, 'StringPos(s, "a", "w", 3)', 10);
  Test({LINENUM}35752, 'StringPos(s, "go")', 12);
  Test({LINENUM}35753, 'StringPos(s, "go", "w")', 0);
  Test({LINENUM}35754, 'StringPos(s, "good", "")', 12);
  Test({LINENUM}35755, 'StringPos(s, "good", "w")', 12);
  Test({LINENUM}35756, 'StringPos(s, "excel")', 17);
  Test({LINENUM}35757, 'StringPos(s, "excel", "w")', 0);
  Test({LINENUM}35758, 'StringPos(s, "excellent")', 17);
  Test({LINENUM}35759, 'StringPos(s, "excellent", "w")', 17);
  Test({LINENUM}35760, 'StringPos(s, "mist")', 28);
  Test({LINENUM}35761, 'StringPos(s, "mist", "w")', 0);
  Test({LINENUM}35762, 'StringPos(s, "mister")', 28);
  Test({LINENUM}35763, 'StringPos(s, "mister", "w")', 28);
  Test({LINENUM}35764, 'StringPos(s, "deed")', 39);
  Test({LINENUM}35765, 'StringPos(s, "deed", "w")', 0);
  Test({LINENUM}35766, 'StringPos(s, "indeed")', 0);
  Test({LINENUM}35767, 'StringPos(s, "indeed", "i")', 37);
  Test({LINENUM}35768, 'StringPos(s, "indeed", "iw")', 37);

  Test({LINENUM}35770, 's ≔ "Överskatta inte köpmannens förkärlek för sångfågeln."', 'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}35772, 'StringPos(s, "skatt")', 5);
  Test({LINENUM}35773, 'StringPos(s, "skatt", "w")', 0);
  Test({LINENUM}35774, 'StringPos(s, "överskatta", "")', 0);
  Test({LINENUM}35775, 'StringPos(s, "överskatta", "i")', 1);
  Test({LINENUM}35776, 'StringPos(s, "överskatta", "iw")', 1);
  Test({LINENUM}35777, 'StringPos(s, "köpman")', 17);
  Test({LINENUM}35778, 'StringPos(s, "köpman", "w")', 0);
  Test({LINENUM}35779, 'StringPos(s, "köpmannens")', 17);
  Test({LINENUM}35780, 'StringPos(s, "köpmannens", "w")', 17);
  Test({LINENUM}35781, 'StringPos(s, "kärlek")', 31);
  Test({LINENUM}35782, 'StringPos(s, "kärlek", "w")', 0);
  Test({LINENUM}35783, 'StringPos(s, "förkärlek")', 28);
  Test({LINENUM}35784, 'StringPos(s, "förkärlek", "w")', 28);
  Test({LINENUM}35785, 'StringPos(s, "sång")', 42);
  Test({LINENUM}35786, 'StringPos(s, "sång", "w")', 0);
  Test({LINENUM}35787, 'StringPos(s, "sångfågeln")', 42);
  Test({LINENUM}35788, 'StringPos(s, "sångfågeln", "w")', 42);
  Test({LINENUM}35789, 'StringPos(s, "fågel")', 46);
  Test({LINENUM}35790, 'StringPos(s, "fågel", "w")', 0);
  Test({LINENUM}35791, 'StringPos(s, "fågeln")', 46);
  Test({LINENUM}35792, 'StringPos(s, "fågeln", "w")', 0);

  Test({LINENUM}35794, 's ≔ "Ansökan om måsten?"', 'Ansökan om måsten?');

  Test({LINENUM}35796, 'StringPos(s, "ansökan")', 0);
  Test({LINENUM}35797, 'StringPos(s, "ansökan", "i")', 1);
  Test({LINENUM}35798, 'StringPos(s, "ansökan", "iw")', 1);
  Test({LINENUM}35799, 'StringPos(s, "kan")', 5);
  Test({LINENUM}35800, 'StringPos(s, "kan", "w")', 0);
  Test({LINENUM}35801, 'StringPos(s, "måste")', 12);
  Test({LINENUM}35802, 'StringPos(s, "måste", "w")', 0);
  Test({LINENUM}35803, 'StringPos(s, "måsten")', 12);
  Test({LINENUM}35804, 'StringPos(s, "måsten", "w")', 12);
  Test({LINENUM}35805, 'StringPos(s, "sten")', 14);
  Test({LINENUM}35806, 'StringPos(s, "sten", "w")', 0);

  Test({LINENUM}35808, 's ≔ "aaaaaaAAAAAAA"', 'aaaaaaAAAAAAA');

  Test({LINENUM}35810, 'StringPos(s, "a")', 1);
  Test({LINENUM}35811, 'StringPos(s, "a", "i")', 1);
  Test({LINENUM}35812, 'StringPos(s, "a", "iw")', 0);
  Test({LINENUM}35813, 'StringPos(s, "A")', 7);
  Test({LINENUM}35814, 'StringPos(s, "A", "i")', 1);
  Test({LINENUM}35815, 'StringPos(s, "A", "iw")', 0);

  Test({LINENUM}35817, 'StringPos(s, "aa")', 1);
  Test({LINENUM}35818, 'StringPos(s, "aaa")', 1);
  Test({LINENUM}35819, 'StringPos(s, "aaaa")', 1);
  Test({LINENUM}35820, 'StringPos(s, "aaaaa")', 1);
  Test({LINENUM}35821, 'StringPos(s, "aaaaaa")', 1);
  Test({LINENUM}35822, 'StringPos(s, "aaaaaaa")', 0);
  Test({LINENUM}35823, 'StringPos(s, "aaaaaaaa")', 0);
  Test({LINENUM}35824, 'StringPos(s, "aaaaaaaaa")', 0);
  Test({LINENUM}35825, 'StringPos(s, "aaaaaaaaaa")', 0);
  Test({LINENUM}35826, 'StringPos(s, "aaaaaaaaaaa")', 0);
  Test({LINENUM}35827, 'StringPos(s, "aaaaaaaaaaaa")', 0);
  Test({LINENUM}35828, 'StringPos(s, "aaaaaaaaaaaaa")', 0);
  Test({LINENUM}35829, 'StringPos(s, "aaaaaaaaaaaaaa")', 0);

  Test({LINENUM}35831, 'StringPos(s, "aa", "i")', 1);
  Test({LINENUM}35832, 'StringPos(s, "aaa", "i")', 1);
  Test({LINENUM}35833, 'StringPos(s, "aaaa", "i")', 1);
  Test({LINENUM}35834, 'StringPos(s, "aaaaa", "i")', 1);
  Test({LINENUM}35835, 'StringPos(s, "aaaaaa", "i")', 1);
  Test({LINENUM}35836, 'StringPos(s, "aaaaaaa", "i")', 1);
  Test({LINENUM}35837, 'StringPos(s, "aaaaaaaa", "i")', 1);
  Test({LINENUM}35838, 'StringPos(s, "aaaaaaaaa", "i")', 1);
  Test({LINENUM}35839, 'StringPos(s, "aaaaaaaaaa", "i")', 1);
  Test({LINENUM}35840, 'StringPos(s, "aaaaaaaaaaa", "i")', 1);
  Test({LINENUM}35841, 'StringPos(s, "aaaaaaaaaaaa", "i")', 1);
  Test({LINENUM}35842, 'StringPos(s, "aaaaaaaaaaaaa", "i")', 1);
  Test({LINENUM}35843, 'StringPos(s, "aaaaaaaaaaaaaa", "i")', 0);

  Test({LINENUM}35845, 'StringPos(s, "a", "", 1)', 1);
  Test({LINENUM}35846, 'StringPos(s, "a", "", 2)', 2);
  Test({LINENUM}35847, 'StringPos(s, "a", "", 3)', 3);
  Test({LINENUM}35848, 'StringPos(s, "a", "", 4)', 4);
  Test({LINENUM}35849, 'StringPos(s, "a", "", 5)', 5);
  Test({LINENUM}35850, 'StringPos(s, "a", "", 6)', 6);
  Test({LINENUM}35851, 'StringPos(s, "a", "", 7)', 0);

  Test({LINENUM}35853, 'StringPos(s, "aa", "", 1)', 1);
  Test({LINENUM}35854, 'StringPos(s, "aa", "", 2)', 2);
  Test({LINENUM}35855, 'StringPos(s, "aa", "", 3)', 3);
  Test({LINENUM}35856, 'StringPos(s, "aa", "", 4)', 4);
  Test({LINENUM}35857, 'StringPos(s, "aa", "", 5)', 5);
  Test({LINENUM}35858, 'StringPos(s, "aa", "", 6)', 0);
  Test({LINENUM}35859, 'StringPos(s, "aa", "", 7)', 0);

  Test({LINENUM}35861, 'StringPos(s, "aaa", "", 1)', 1);
  Test({LINENUM}35862, 'StringPos(s, "aaa", "", 2)', 2);
  Test({LINENUM}35863, 'StringPos(s, "aaa", "", 3)', 3);
  Test({LINENUM}35864, 'StringPos(s, "aaa", "", 4)', 4);
  Test({LINENUM}35865, 'StringPos(s, "aaa", "", 5)', 0);
  Test({LINENUM}35866, 'StringPos(s, "aaa", "", 6)', 0);
  Test({LINENUM}35867, 'StringPos(s, "aaa", "", 7)', 0);

  Test({LINENUM}35869, 'StringPos(s, "aaaa", "", 1)', 1);
  Test({LINENUM}35870, 'StringPos(s, "aaaa", "", 2)', 2);
  Test({LINENUM}35871, 'StringPos(s, "aaaa", "", 3)', 3);
  Test({LINENUM}35872, 'StringPos(s, "aaaa", "", 4)', 0);
  Test({LINENUM}35873, 'StringPos(s, "aaaa", "", 5)', 0);
  Test({LINENUM}35874, 'StringPos(s, "aaaa", "", 6)', 0);
  Test({LINENUM}35875, 'StringPos(s, "aaaa", "", 7)', 0);


  // -

  Test({LINENUM}35880, 'LoremStr ≔ "' + LoremIpsum(1) + '";', null);

  Test({LINENUM}35882, 'StringContains(LoremStr, "Lorem")', True);
  Test({LINENUM}35883, 'StringContains(LoremStr, "ipsum")', True);
  Test({LINENUM}35884, 'StringContains(LoremStr, "tempor")', True);
  Test({LINENUM}35885, 'StringContains(LoremStr, "nostrud")', True);
  Test({LINENUM}35886, 'StringContains(LoremStr, "pariatur")', True);
  Test({LINENUM}35887, 'StringContains(LoremStr, "Duis aute irure dolor in reprehenderit in voluptate")', True);
  Test({LINENUM}35888, 'StringContains(LoremStr, "horcrux")', False);
  Test({LINENUM}35889, 'StringContains(LoremStr, "diadem")', False);
  Test({LINENUM}35890, 'StringContains(LoremStr, "diary")', False);
  Test({LINENUM}35891, 'StringContains(LoremStr, "Defence Against the Dark Arts")', False);

  Test({LINENUM}35893, 'StringContains(LoremStr, "lorem")', False);
  Test({LINENUM}35894, 'StringContains(LoremStr, "lorem", "")', False);
  Test({LINENUM}35895, 'StringContains(LoremStr, "lorem", "i")', True);

  Test({LINENUM}35897, 'StringContains(LoremStr, "LABORIS")', False);
  Test({LINENUM}35898, 'StringContains(LoremStr, "LABORIS", "")', False);
  Test({LINENUM}35899, 'StringContains(LoremStr, "LABORIS", "i")', True);

  Test({LINENUM}35901, 'StringContains(LoremStr, "mini")', True);
  Test({LINENUM}35902, 'StringContains(LoremStr, "mini", "")', True);
  Test({LINENUM}35903, 'StringContains(LoremStr, "mini", "w")', False);
  Test({LINENUM}35904, 'StringContains(LoremStr, "minim", "w")', True);

  Test({LINENUM}35906, 'StringContains(LoremStr, "MOLL")', False);
  Test({LINENUM}35907, 'StringContains(LoremStr, "MOLL", "")', False);
  Test({LINENUM}35908, 'StringContains(LoremStr, "MOLL", "i")', True);
  Test({LINENUM}35909, 'StringContains(LoremStr, "MOLL", "iw")', False);
  Test({LINENUM}35910, 'StringContains(LoremStr, "MOLL", "wi")', False);
  Test({LINENUM}35911, 'StringContains(LoremStr, "MOLL", "w")', False);

  Test({LINENUM}35913, 'StringContains(LoremStr, "in")', True);
  Test({LINENUM}35914, 'StringContains(LoremStr, "in", "", 388)', True);
  Test({LINENUM}35915, 'StringContains(LoremStr, "in", "", 389)', True);
  Test({LINENUM}35916, 'StringContains(LoremStr, "in", "", 390)', False);
  Test({LINENUM}35917, 'StringContains(LoremStr, "in", "", 1000000)', False);

  Test({LINENUM}35919, 'StringContains(LoremStr, "ut")', True);
  Test({LINENUM}35920, 'StringContains(LoremStr, "ut", "", 238)', True);
  Test({LINENUM}35921, 'StringContains(LoremStr, "ut", "", 239)', True);
  Test({LINENUM}35922, 'StringContains(LoremStr, "ut", "", 240)', False);
  Test({LINENUM}35923, 'StringContains(LoremStr, "ut", "", 240000)', False);

  Test({LINENUM}35925, 'StringContains(LoremStr, "ut", "w")', True);
  Test({LINENUM}35926, 'StringContains(LoremStr, "ut", "w", 196)', True);
  Test({LINENUM}35927, 'StringContains(LoremStr, "ut", "w", 197)', True);
  Test({LINENUM}35928, 'StringContains(LoremStr, "ut", "w", 198)', False);
  Test({LINENUM}35929, 'StringContains(LoremStr, "ut", "w", 238)', False);
  Test({LINENUM}35930, 'StringContains(LoremStr, "ut", "w", 239)', False);
  Test({LINENUM}35931, 'StringContains(LoremStr, "ut", "w", 240)', False);
  Test({LINENUM}35932, 'StringContains(LoremStr, "ut", "w", 24000)', False);

  Test({LINENUM}35934, 'StringContains(LoremStr, "Ex")', True);
  Test({LINENUM}35935, 'StringContains(LoremStr, "Ex", "")', True);
  Test({LINENUM}35936, 'StringContains(LoremStr, "Ex", "w")', False);
  Test({LINENUM}35937, 'StringContains(LoremStr, "Ex", "wi")', True);
  Test({LINENUM}35938, 'StringContains(LoremStr, "Ex", "iw")', True);
  Test({LINENUM}35939, 'StringContains(LoremStr, "Ex", "i")', True);
  Test({LINENUM}35940, 'StringContains(LoremStr, "Ex", "", 233)', True);
  Test({LINENUM}35941, 'StringContains(LoremStr, "Ex", "w", 233)', False);
  Test({LINENUM}35942, 'StringContains(LoremStr, "Ex", "w", 200)', False);
  Test({LINENUM}35943, 'StringContains(LoremStr, "Ex", "wi", 200)', True);

  Test({LINENUM}35945, 'StringContains(LoremStr, "")', False);
  Test({LINENUM}35946, 'StringContains("", "ipsum")', False);
  Test({LINENUM}35947, 'StringContains("", "")', False);

  Test({LINENUM}35949, 'StringContains(LoremStr, "", "i")', False);
  Test({LINENUM}35950, 'StringContains("", "ipsum", "i")', False);
  Test({LINENUM}35951, 'StringContains("", "", "i")', False);

  Test({LINENUM}35953, 'StringContains(LoremStr, "", "w")', False);
  Test({LINENUM}35954, 'StringContains("", "ipsum", "w")', False);
  Test({LINENUM}35955, 'StringContains("", "", "w")', False);

  Test({LINENUM}35957, 'StringContains(LoremStr, "", "wi")', False);
  Test({LINENUM}35958, 'StringContains("", "ipsum", "wi")', False);
  Test({LINENUM}35959, 'StringContains("", "", "wi")', False);

  Test({LINENUM}35961, 'StringContains(LoremStr, "in", "c")', failure, 'Unsupported character "c".');
  Test({LINENUM}35962, 'StringContains(LoremStr, "in", "iwc")', failure, 'Unsupported character "c".');
  Test({LINENUM}35963, 'StringContains(LoremStr, "in", "iw", "cat")', failure, 'An object of type integer was expected as argument 4, but an object of type string was given.');
  Test({LINENUM}35964, 'StringContains(LoremStr, "in", 20, 50)', failure, 'An object of type string was expected as argument 3, but an object of type integer was given.');

  _s := LoremIpsum(1000);
  Test({LINENUM}35967, 'LoremStr ≔ "' + _s + ' nargle";', null);

  Test({LINENUM}35969, 'StringContains(LoremStr, "nargle")', True);
  Test({LINENUM}35970, 'StringContains(LoremStr, "laborum." + chr(13) + chr(10) + "Lorem")', True);

  Test({LINENUM}35972, 'delete(LoremStr)', success);
  _s := '';

  Test({LINENUM}35975, 's ≔ "A cat is a good/excellent" + chr(13) + chr(10) + "mister. –Indeed!"', 'A cat is a good/excellent'#13#10'mister. –Indeed!');

  Test({LINENUM}35977, 'StringContains(s, "a")', True);
  Test({LINENUM}35978, 'StringContains(s, "a", "i")', True);
  Test({LINENUM}35979, 'StringContains(s, "a", "", 3)', True);
  Test({LINENUM}35980, 'StringContains(s, "a", "w", 3)', True);
  Test({LINENUM}35981, 'StringContains(s, "go")', True);
  Test({LINENUM}35982, 'StringContains(s, "go", "w")', False);
  Test({LINENUM}35983, 'StringContains(s, "good", "")', True);
  Test({LINENUM}35984, 'StringContains(s, "good", "w")', True);
  Test({LINENUM}35985, 'StringContains(s, "excel")', True);
  Test({LINENUM}35986, 'StringContains(s, "excel", "w")', False);
  Test({LINENUM}35987, 'StringContains(s, "excellent")', True);
  Test({LINENUM}35988, 'StringContains(s, "excellent", "w")', True);
  Test({LINENUM}35989, 'StringContains(s, "mist")', True);
  Test({LINENUM}35990, 'StringContains(s, "mist", "w")', False);
  Test({LINENUM}35991, 'StringContains(s, "mister")', True);
  Test({LINENUM}35992, 'StringContains(s, "mister", "w")', True);
  Test({LINENUM}35993, 'StringContains(s, "deed")', True);
  Test({LINENUM}35994, 'StringContains(s, "deed", "w")', False);
  Test({LINENUM}35995, 'StringContains(s, "indeed")', False);
  Test({LINENUM}35996, 'StringContains(s, "indeed", "i")', True);
  Test({LINENUM}35997, 'StringContains(s, "indeed", "iw")', True);

  Test({LINENUM}35999, 's ≔ "Överskatta inte köpmannens förkärlek för sångfågeln."', 'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36001, 'StringContains(s, "skatt")', True);
  Test({LINENUM}36002, 'StringContains(s, "skatt", "w")', False);
  Test({LINENUM}36003, 'StringContains(s, "överskatta", "")', False);
  Test({LINENUM}36004, 'StringContains(s, "överskatta", "i")', True);
  Test({LINENUM}36005, 'StringContains(s, "överskatta", "iw")', True);
  Test({LINENUM}36006, 'StringContains(s, "köpman")', True);
  Test({LINENUM}36007, 'StringContains(s, "köpman", "w")', False);
  Test({LINENUM}36008, 'StringContains(s, "köpmannens")', True);
  Test({LINENUM}36009, 'StringContains(s, "köpmannens", "w")', True);
  Test({LINENUM}36010, 'StringContains(s, "kärlek")', True);
  Test({LINENUM}36011, 'StringContains(s, "kärlek", "w")', False);
  Test({LINENUM}36012, 'StringContains(s, "förkärlek")', True);
  Test({LINENUM}36013, 'StringContains(s, "förkärlek", "w")', True);
  Test({LINENUM}36014, 'StringContains(s, "sång")', True);
  Test({LINENUM}36015, 'StringContains(s, "sång", "w")', False);
  Test({LINENUM}36016, 'StringContains(s, "sångfågeln")', True);
  Test({LINENUM}36017, 'StringContains(s, "sångfågeln", "w")', True);
  Test({LINENUM}36018, 'StringContains(s, "fågel")', True);
  Test({LINENUM}36019, 'StringContains(s, "fågel", "w")', False);
  Test({LINENUM}36020, 'StringContains(s, "fågeln")', True);
  Test({LINENUM}36021, 'StringContains(s, "fågeln", "w")', False);

  Test({LINENUM}36023, 's ≔ "Ansökan om måsten?"', 'Ansökan om måsten?');

  Test({LINENUM}36025, 'StringContains(s, "ansökan")', False);
  Test({LINENUM}36026, 'StringContains(s, "ansökan", "i")', True);
  Test({LINENUM}36027, 'StringContains(s, "ansökan", "iw")', True);
  Test({LINENUM}36028, 'StringContains(s, "kan")', True);
  Test({LINENUM}36029, 'StringContains(s, "kan", "w")', False);
  Test({LINENUM}36030, 'StringContains(s, "måste")', True);
  Test({LINENUM}36031, 'StringContains(s, "måste", "w")', False);
  Test({LINENUM}36032, 'StringContains(s, "måsten")', True);
  Test({LINENUM}36033, 'StringContains(s, "måsten", "w")', True);
  Test({LINENUM}36034, 'StringContains(s, "sten")', True);
  Test({LINENUM}36035, 'StringContains(s, "sten", "w")', False);

  Test({LINENUM}36037, 's ≔ "aaaaaaAAAAAAA"', 'aaaaaaAAAAAAA');

  Test({LINENUM}36039, 'StringContains(s, "a")', True);
  Test({LINENUM}36040, 'StringContains(s, "a", "i")', True);
  Test({LINENUM}36041, 'StringContains(s, "a", "iw")', False);
  Test({LINENUM}36042, 'StringContains(s, "A")', True);
  Test({LINENUM}36043, 'StringContains(s, "A", "i")', True);
  Test({LINENUM}36044, 'StringContains(s, "A", "iw")', False);

  Test({LINENUM}36046, 'StringContains(s, "aa")', True);
  Test({LINENUM}36047, 'StringContains(s, "aaa")', True);
  Test({LINENUM}36048, 'StringContains(s, "aaaa")', True);
  Test({LINENUM}36049, 'StringContains(s, "aaaaa")', True);
  Test({LINENUM}36050, 'StringContains(s, "aaaaaa")', True);
  Test({LINENUM}36051, 'StringContains(s, "aaaaaaa")', False);
  Test({LINENUM}36052, 'StringContains(s, "aaaaaaaa")', False);
  Test({LINENUM}36053, 'StringContains(s, "aaaaaaaaa")', False);
  Test({LINENUM}36054, 'StringContains(s, "aaaaaaaaaa")', False);
  Test({LINENUM}36055, 'StringContains(s, "aaaaaaaaaaa")', False);
  Test({LINENUM}36056, 'StringContains(s, "aaaaaaaaaaaa")', False);
  Test({LINENUM}36057, 'StringContains(s, "aaaaaaaaaaaaa")', False);
  Test({LINENUM}36058, 'StringContains(s, "aaaaaaaaaaaaaa")', False);

  Test({LINENUM}36060, 'StringContains(s, "aa", "i")', True);
  Test({LINENUM}36061, 'StringContains(s, "aaa", "i")', True);
  Test({LINENUM}36062, 'StringContains(s, "aaaa", "i")', True);
  Test({LINENUM}36063, 'StringContains(s, "aaaaa", "i")', True);
  Test({LINENUM}36064, 'StringContains(s, "aaaaaa", "i")', True);
  Test({LINENUM}36065, 'StringContains(s, "aaaaaaa", "i")', True);
  Test({LINENUM}36066, 'StringContains(s, "aaaaaaaa", "i")', True);
  Test({LINENUM}36067, 'StringContains(s, "aaaaaaaaa", "i")', True);
  Test({LINENUM}36068, 'StringContains(s, "aaaaaaaaaa", "i")', True);
  Test({LINENUM}36069, 'StringContains(s, "aaaaaaaaaaa", "i")', True);
  Test({LINENUM}36070, 'StringContains(s, "aaaaaaaaaaaa", "i")', True);
  Test({LINENUM}36071, 'StringContains(s, "aaaaaaaaaaaaa", "i")', True);
  Test({LINENUM}36072, 'StringContains(s, "aaaaaaaaaaaaaa", "i")', False);

  Test({LINENUM}36074, 'StringContains(s, "a", "", 1)', True);
  Test({LINENUM}36075, 'StringContains(s, "a", "", 2)', True);
  Test({LINENUM}36076, 'StringContains(s, "a", "", 3)', True);
  Test({LINENUM}36077, 'StringContains(s, "a", "", 4)', True);
  Test({LINENUM}36078, 'StringContains(s, "a", "", 5)', True);
  Test({LINENUM}36079, 'StringContains(s, "a", "", 6)', True);
  Test({LINENUM}36080, 'StringContains(s, "a", "", 7)', False);

  Test({LINENUM}36082, 'StringContains(s, "aa", "", 1)', True);
  Test({LINENUM}36083, 'StringContains(s, "aa", "", 2)', True);
  Test({LINENUM}36084, 'StringContains(s, "aa", "", 3)', True);
  Test({LINENUM}36085, 'StringContains(s, "aa", "", 4)', True);
  Test({LINENUM}36086, 'StringContains(s, "aa", "", 5)', True);
  Test({LINENUM}36087, 'StringContains(s, "aa", "", 6)', False);
  Test({LINENUM}36088, 'StringContains(s, "aa", "", 7)', False);

  Test({LINENUM}36090, 'StringContains(s, "aaa", "", 1)', True);
  Test({LINENUM}36091, 'StringContains(s, "aaa", "", 2)', True);
  Test({LINENUM}36092, 'StringContains(s, "aaa", "", 3)', True);
  Test({LINENUM}36093, 'StringContains(s, "aaa", "", 4)', True);
  Test({LINENUM}36094, 'StringContains(s, "aaa", "", 5)', False);
  Test({LINENUM}36095, 'StringContains(s, "aaa", "", 6)', False);
  Test({LINENUM}36096, 'StringContains(s, "aaa", "", 7)', False);

  Test({LINENUM}36098, 'StringContains(s, "aaaa", "", 1)', True);
  Test({LINENUM}36099, 'StringContains(s, "aaaa", "", 2)', True);
  Test({LINENUM}36100, 'StringContains(s, "aaaa", "", 3)', True);
  Test({LINENUM}36101, 'StringContains(s, "aaaa", "", 4)', False);
  Test({LINENUM}36102, 'StringContains(s, "aaaa", "", 5)', False);
  Test({LINENUM}36103, 'StringContains(s, "aaaa", "", 6)', False);
  Test({LINENUM}36104, 'StringContains(s, "aaaa", "", 7)', False);

  // -

  Test({LINENUM}36108, 'LoremStr ≔ "' + LoremIpsum(1) + '";', null);

  Test({LINENUM}36110, 'StringCount(LoremStr, "dolor")', 4);
  Test({LINENUM}36111, 'StringCount(LoremStr, "et")', 3);
  Test({LINENUM}36112, 'StringCount(LoremStr, "a")', 29);
  Test({LINENUM}36113, 'StringCount(LoremStr, " ")', 68);

  Test({LINENUM}36115, 'StringCount(LoremStr, "in")', 7);
  Test({LINENUM}36116, 'StringCount(LoremStr, "in", "w")', 3);

  Test({LINENUM}36118, 'StringCount(LoremStr, "ex")', 2);
  Test({LINENUM}36119, 'StringCount(LoremStr, "ex", "i")', 3);
  Test({LINENUM}36120, 'StringCount(LoremStr, "ex", "wi")', 1);
  Test({LINENUM}36121, 'StringCount(LoremStr, "ex", "iw")', 1);
  Test({LINENUM}36122, 'StringCount(LoremStr, "ex", "w")', 1);

  Test({LINENUM}36124, 'StringCount(LoremStr, "Ex")', 1);
  Test({LINENUM}36125, 'StringCount(LoremStr, "Ex", "i")', 3);
  Test({LINENUM}36126, 'StringCount(LoremStr, "Ex", "wi")', 1);
  Test({LINENUM}36127, 'StringCount(LoremStr, "Ex", "iw")', 1);
  Test({LINENUM}36128, 'StringCount(LoremStr, "Ex", "w")', 0);

  Test({LINENUM}36130, 'StringCount(LoremStr, "do")', 6);
  Test({LINENUM}36131, 'StringCount(LoremStr, "do", "w")', 1);

  Test({LINENUM}36133, 'StringCount(LoremStr, "")', 0);
  Test({LINENUM}36134, 'StringCount("", "in")', 0);
  Test({LINENUM}36135, 'StringCount("", "")', 0);

  Test({LINENUM}36137, 'StringCount(LoremStr, "", "w")', 0);
  Test({LINENUM}36138, 'StringCount("", "in", "w")', 0);
  Test({LINENUM}36139, 'StringCount("", "", "w")', 0);

  Test({LINENUM}36141, 'StringCount(LoremStr, "", "i")', 0);
  Test({LINENUM}36142, 'StringCount("", "in", "i")', 0);
  Test({LINENUM}36143, 'StringCount("", "", "i")', 0);

  Test({LINENUM}36145, 'StringCount(LoremStr, "", "wi")', 0);
  Test({LINENUM}36146, 'StringCount("", "in", "wi")', 0);
  Test({LINENUM}36147, 'StringCount("", "", "wi")', 0);

  _s := LoremIpsum(1000);
  Test({LINENUM}36150, 'LoremStr ≔ "' + _s + ' nargle";', null);

  Test({LINENUM}36152, 'StringCount(LoremStr, "ipsum")', 1000);
  Test({LINENUM}36153, 'StringCount(LoremStr, "et")', 3000);
  Test({LINENUM}36154, 'StringCount(LoremStr, "et", "w")', 1000);

  Test({LINENUM}36156, 'StringCount(LoremStr, "nargle")', 1);

  Test({LINENUM}36158, 'StringCount(LoremStr, chr(13) + chr(10))', 999);
  Test({LINENUM}36159, 'StringCount(LoremStr, chr(13) + chr(10), "i")', 999);
  Test({LINENUM}36160, 'StringCount(LoremStr, "laborum." + chr(13) + chr(10) + "Lorem")', 999);
  Test({LINENUM}36161, 'StringCount(LoremStr, "laborum." + chr(13) + chr(10) + "lorem")', 0);
  Test({LINENUM}36162, 'StringCount(LoremStr, "laborum." + chr(13) + chr(10) + "lorem", "i")', 999);

  Test({LINENUM}36164, 's ≔ "A cat is a good/excellent" + chr(13) + chr(10) + "mister. –Indeed!"', 'A cat is a good/excellent'#13#10'mister. –Indeed!');

  Test({LINENUM}36166, 'StringCount(s, "a")', 2);
  Test({LINENUM}36167, 'StringCount(s, "a", "i")', 3);
  Test({LINENUM}36168, 'StringCount(s, "a", "", 3)', 2);
  Test({LINENUM}36169, 'StringCount(s, "a", "w", 3)', 1);
  Test({LINENUM}36170, 'StringCount(s, "go")', 1);
  Test({LINENUM}36171, 'StringCount(s, "go", "w")', 0);
  Test({LINENUM}36172, 'StringCount(s, "good", "")', 1);
  Test({LINENUM}36173, 'StringCount(s, "good", "w")', 1);
  Test({LINENUM}36174, 'StringCount(s, "excel")', 1);
  Test({LINENUM}36175, 'StringCount(s, "excel", "w")', 0);
  Test({LINENUM}36176, 'StringCount(s, "excellent")', 1);
  Test({LINENUM}36177, 'StringCount(s, "excellent", "w")', 1);
  Test({LINENUM}36178, 'StringCount(s, "mist")', 1);
  Test({LINENUM}36179, 'StringCount(s, "mist", "w")', 0);
  Test({LINENUM}36180, 'StringCount(s, "mister")', 1);
  Test({LINENUM}36181, 'StringCount(s, "mister", "w")', 1);
  Test({LINENUM}36182, 'StringCount(s, "deed")', 1);
  Test({LINENUM}36183, 'StringCount(s, "deed", "w")', 0);
  Test({LINENUM}36184, 'StringCount(s, "indeed")', 0);
  Test({LINENUM}36185, 'StringCount(s, "indeed", "i")', 1);
  Test({LINENUM}36186, 'StringCount(s, "indeed", "iw")', 1);

  Test({LINENUM}36188, 's ≔ "Överskatta inte köpmannens förkärlek för sångfågeln."', 'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36190, 'StringCount(s, "skatt")', 1);
  Test({LINENUM}36191, 'StringCount(s, "skatt", "w")', 0);
  Test({LINENUM}36192, 'StringCount(s, "överskatta", "")', 0);
  Test({LINENUM}36193, 'StringCount(s, "överskatta", "i")', 1);
  Test({LINENUM}36194, 'StringCount(s, "överskatta", "iw")', 1);
  Test({LINENUM}36195, 'StringCount(s, "köpman")', 1);
  Test({LINENUM}36196, 'StringCount(s, "köpman", "w")', 0);
  Test({LINENUM}36197, 'StringCount(s, "köpmannens")', 1);
  Test({LINENUM}36198, 'StringCount(s, "köpmannens", "w")', 1);
  Test({LINENUM}36199, 'StringCount(s, "kärlek")', 1);
  Test({LINENUM}36200, 'StringCount(s, "kärlek", "w")', 0);
  Test({LINENUM}36201, 'StringCount(s, "förkärlek")', 1);
  Test({LINENUM}36202, 'StringCount(s, "förkärlek", "w")', 1);
  Test({LINENUM}36203, 'StringCount(s, "sång")', 1);
  Test({LINENUM}36204, 'StringCount(s, "sång", "w")', 0);
  Test({LINENUM}36205, 'StringCount(s, "sångfågeln")', 1);
  Test({LINENUM}36206, 'StringCount(s, "sångfågeln", "w")', 1);
  Test({LINENUM}36207, 'StringCount(s, "fågel")', 1);
  Test({LINENUM}36208, 'StringCount(s, "fågel", "w")', 0);
  Test({LINENUM}36209, 'StringCount(s, "fågeln")', 1);
  Test({LINENUM}36210, 'StringCount(s, "fågeln", "w")', 0);

  Test({LINENUM}36212, 's ≔ "Ansökan om måsten?"', 'Ansökan om måsten?');

  Test({LINENUM}36214, 'StringCount(s, "ansökan")', 0);
  Test({LINENUM}36215, 'StringCount(s, "ansökan", "i")', 1);
  Test({LINENUM}36216, 'StringCount(s, "ansökan", "iw")', 1);
  Test({LINENUM}36217, 'StringCount(s, "kan")', 1);
  Test({LINENUM}36218, 'StringCount(s, "kan", "w")', 0);
  Test({LINENUM}36219, 'StringCount(s, "måste")', 1);
  Test({LINENUM}36220, 'StringCount(s, "måste", "w")', 0);
  Test({LINENUM}36221, 'StringCount(s, "måsten")', 1);
  Test({LINENUM}36222, 'StringCount(s, "måsten", "w")', 1);
  Test({LINENUM}36223, 'StringCount(s, "sten")', 1);
  Test({LINENUM}36224, 'StringCount(s, "sten", "w")', 0);

  Test({LINENUM}36226, 's ≔ "aaaaaaAAAAAAA"', 'aaaaaaAAAAAAA');

  Test({LINENUM}36228, 'StringCount(s, "a")', 6);
  Test({LINENUM}36229, 'StringCount(s, "a", "i")', 13);
  Test({LINENUM}36230, 'StringCount(s, "a", "iw")', 0);
  Test({LINENUM}36231, 'StringCount(s, "A")', 7);
  Test({LINENUM}36232, 'StringCount(s, "A", "i")', 13);
  Test({LINENUM}36233, 'StringCount(s, "A", "iw")', 0);

  Test({LINENUM}36235, 'StringCount(s, "aa")', 3);
  Test({LINENUM}36236, 'StringCount(s, "aaa")', 2);
  Test({LINENUM}36237, 'StringCount(s, "aaaa")', 1);
  Test({LINENUM}36238, 'StringCount(s, "aaaaa")', 1);
  Test({LINENUM}36239, 'StringCount(s, "aaaaaa")', 1);
  Test({LINENUM}36240, 'StringCount(s, "aaaaaaa")', 0);
  Test({LINENUM}36241, 'StringCount(s, "aaaaaaaa")', 0);
  Test({LINENUM}36242, 'StringCount(s, "aaaaaaaaa")', 0);
  Test({LINENUM}36243, 'StringCount(s, "aaaaaaaaaa")', 0);
  Test({LINENUM}36244, 'StringCount(s, "aaaaaaaaaaa")', 0);
  Test({LINENUM}36245, 'StringCount(s, "aaaaaaaaaaaa")', 0);
  Test({LINENUM}36246, 'StringCount(s, "aaaaaaaaaaaaa")', 0);
  Test({LINENUM}36247, 'StringCount(s, "aaaaaaaaaaaaaa")', 0);

  Test({LINENUM}36249, 'StringCount(s, "aa", "i")', 6);
  Test({LINENUM}36250, 'StringCount(s, "aaa", "i")', 4);
  Test({LINENUM}36251, 'StringCount(s, "aaaa", "i")', 3);
  Test({LINENUM}36252, 'StringCount(s, "aaaaa", "i")', 2);
  Test({LINENUM}36253, 'StringCount(s, "aaaaaa", "i")', 2);
  Test({LINENUM}36254, 'StringCount(s, "aaaaaaa", "i")', 1);
  Test({LINENUM}36255, 'StringCount(s, "aaaaaaaa", "i")', 1);
  Test({LINENUM}36256, 'StringCount(s, "aaaaaaaaa", "i")', 1);
  Test({LINENUM}36257, 'StringCount(s, "aaaaaaaaaa", "i")', 1);
  Test({LINENUM}36258, 'StringCount(s, "aaaaaaaaaaa", "i")', 1);
  Test({LINENUM}36259, 'StringCount(s, "aaaaaaaaaaaa", "i")', 1);
  Test({LINENUM}36260, 'StringCount(s, "aaaaaaaaaaaaa", "i")', 1);
  Test({LINENUM}36261, 'StringCount(s, "aaaaaaaaaaaaaa", "i")', 0);

  Test({LINENUM}36263, 'StringCount(s, "a", "", 1)', 6);
  Test({LINENUM}36264, 'StringCount(s, "a", "", 2)', 5);
  Test({LINENUM}36265, 'StringCount(s, "a", "", 3)', 4);
  Test({LINENUM}36266, 'StringCount(s, "a", "", 4)', 3);
  Test({LINENUM}36267, 'StringCount(s, "a", "", 5)', 2);
  Test({LINENUM}36268, 'StringCount(s, "a", "", 6)', 1);
  Test({LINENUM}36269, 'StringCount(s, "a", "", 7)', 0);

  Test({LINENUM}36271, 'StringCount(s, "aa", "", 1)', 3);
  Test({LINENUM}36272, 'StringCount(s, "aa", "", 2)', 2);
  Test({LINENUM}36273, 'StringCount(s, "aa", "", 3)', 2);
  Test({LINENUM}36274, 'StringCount(s, "aa", "", 4)', 1);
  Test({LINENUM}36275, 'StringCount(s, "aa", "", 5)', 1);
  Test({LINENUM}36276, 'StringCount(s, "aa", "", 6)', 0);
  Test({LINENUM}36277, 'StringCount(s, "aa", "", 7)', 0);

  Test({LINENUM}36279, 'StringCount(s, "aaa", "", 1)', 2);
  Test({LINENUM}36280, 'StringCount(s, "aaa", "", 2)', 1);
  Test({LINENUM}36281, 'StringCount(s, "aaa", "", 3)', 1);
  Test({LINENUM}36282, 'StringCount(s, "aaa", "", 4)', 1);
  Test({LINENUM}36283, 'StringCount(s, "aaa", "", 5)', 0);
  Test({LINENUM}36284, 'StringCount(s, "aaa", "", 6)', 0);
  Test({LINENUM}36285, 'StringCount(s, "aaa", "", 7)', 0);

  Test({LINENUM}36287, 'StringCount(s, "aaaa", "", 1)', 1);
  Test({LINENUM}36288, 'StringCount(s, "aaaa", "", 2)', 1);
  Test({LINENUM}36289, 'StringCount(s, "aaaa", "", 3)', 1);
  Test({LINENUM}36290, 'StringCount(s, "aaaa", "", 4)', 0);
  Test({LINENUM}36291, 'StringCount(s, "aaaa", "", 5)', 0);
  Test({LINENUM}36292, 'StringCount(s, "aaaa", "", 6)', 0);
  Test({LINENUM}36293, 'StringCount(s, "aaaa", "", 7)', 0);

  // -

  Test({LINENUM}36297, 'LoremStr ≔ "' + LoremIpsum(1) + '";', null);

  Test({LINENUM}36299, 'StringIndices(LoremStr, "dolor")', intarr([13, 104, 249, 303]));
  Test({LINENUM}36300, 'StringIndices(LoremStr, "et")', intarr([25, 36, 101]));
  Test({LINENUM}36301, 'StringIndices(LoremStr, "a")', intarr([23, 41, 95, 112, 115, 117, 122, 133, 146, 170, 179, 185, 200, 212, 229, 238, 281, 317, 324, 327, 330, 354, 357, 365, 367, 396, 408, 426, 439]));
  Test({LINENUM}36302, 'StringIndices(LoremStr, " ")', intarr([6, 12, 18, 22, 28, 40, 51, 57, 61, 64, 72, 79, 90, 93, 100, 103, 110, 116, 124, 127, 132, 135, 141, 149, 154, 162, 175, 183, 191, 196, 199, 207, 210, 213, 221, 232, 237, 242, 248, 254, 257, 271, 274, 284, 290, 295, 302, 309, 312, 319, 325, 335, 345, 350, 359, 369, 373, 383, 388, 391, 397, 401, 409, 418, 425, 430, 433, 437]));

  Test({LINENUM}36304, 'StringIndices(LoremStr, "in")', intarr([48, 80, 137, 255, 272, 347, 389]));
  Test({LINENUM}36305, 'StringIndices(LoremStr, "in", "w")', intarr([255, 272, 389]));

  Test({LINENUM}36307, 'StringIndices(LoremStr, "ex")', intarr([163, 208]));
  Test({LINENUM}36308, 'StringIndices(LoremStr, "ex", "i")', intarr([163, 208, 336]));
  Test({LINENUM}36309, 'StringIndices(LoremStr, "ex", "wi")', intarr([208]));
  Test({LINENUM}36310, 'StringIndices(LoremStr, "ex", "iw")', intarr([208]));
  Test({LINENUM}36311, 'StringIndices(LoremStr, "ex", "w")', intarr([208]));

  Test({LINENUM}36313, 'StringIndices(LoremStr, "Ex")', intarr([336]));
  Test({LINENUM}36314, 'StringIndices(LoremStr, "Ex", "i")', intarr([163, 208, 336]));
  Test({LINENUM}36315, 'StringIndices(LoremStr, "Ex", "wi")', intarr([208]));
  Test({LINENUM}36316, 'StringIndices(LoremStr, "Ex", "iw")', intarr([208]));
  Test({LINENUM}36317, 'StringIndices(LoremStr, "Ex", "w")', intarr([]));

  Test({LINENUM}36319, 'StringIndices(LoremStr, "do")', intarr([13, 62, 104, 219, 249, 303]));
  Test({LINENUM}36320, 'StringIndices(LoremStr, "do", "w")', intarr([62]));

  Test({LINENUM}36322, 'StringIndices(LoremStr, "")', intarr([]));
  Test({LINENUM}36323, 'StringIndices("", "in")', intarr([]));
  Test({LINENUM}36324, 'StringIndices("", "")', intarr([]));

  Test({LINENUM}36326, 'StringIndices(LoremStr, "", "w")', intarr([]));
  Test({LINENUM}36327, 'StringIndices("", "in", "w")', intarr([]));
  Test({LINENUM}36328, 'StringIndices("", "", "w")', intarr([]));

  Test({LINENUM}36330, 'StringIndices(LoremStr, "", "i")', intarr([]));
  Test({LINENUM}36331, 'StringIndices("", "in", "i")', intarr([]));
  Test({LINENUM}36332, 'StringIndices("", "", "i")', intarr([]));

  Test({LINENUM}36334, 'StringIndices(LoremStr, "", "wi")', intarr([]));
  Test({LINENUM}36335, 'StringIndices("", "in", "wi")', intarr([]));
  Test({LINENUM}36336, 'StringIndices("", "", "wi")', intarr([]));

  _s := LoremIpsum(1000);
  Test({LINENUM}36339, 'LoremStr ≔ "' + _s + ' nargle";', null);

  Test({LINENUM}36341, 'StringIndices(LoremStr, "nargle")', intarr([_s.Length + 2]));

  Test({LINENUM}36343, 's ≔ "A cat is a good/excellent" + chr(13) + chr(10) + "mister. –Indeed!"', 'A cat is a good/excellent'#13#10'mister. –Indeed!');

  Test({LINENUM}36345, 'StringIndices(s, "a")', intarr([4, 10]));
  Test({LINENUM}36346, 'StringIndices(s, "a", "i")', intarr([1, 4, 10]));
  Test({LINENUM}36347, 'StringIndices(s, "a", "", 3)', intarr([4, 10]));
  Test({LINENUM}36348, 'StringIndices(s, "a", "w", 3)', intarr([10]));
  Test({LINENUM}36349, 'StringIndices(s, "go")', intarr([12]));
  Test({LINENUM}36350, 'StringIndices(s, "go", "w")', intarr([]));
  Test({LINENUM}36351, 'StringIndices(s, "good", "")', intarr([12]));
  Test({LINENUM}36352, 'StringIndices(s, "good", "w")', intarr([12]));
  Test({LINENUM}36353, 'StringIndices(s, "excel")', intarr([17]));
  Test({LINENUM}36354, 'StringIndices(s, "excel", "w")', intarr([]));
  Test({LINENUM}36355, 'StringIndices(s, "excellent")', intarr([17]));
  Test({LINENUM}36356, 'StringIndices(s, "excellent", "w")', intarr([17]));
  Test({LINENUM}36357, 'StringIndices(s, "mist")', intarr([28]));
  Test({LINENUM}36358, 'StringIndices(s, "mist", "w")', intarr([]));
  Test({LINENUM}36359, 'StringIndices(s, "mister")', intarr([28]));
  Test({LINENUM}36360, 'StringIndices(s, "mister", "w")', intarr([28]));
  Test({LINENUM}36361, 'StringIndices(s, "deed")', intarr([39]));
  Test({LINENUM}36362, 'StringIndices(s, "deed", "w")', intarr([]));
  Test({LINENUM}36363, 'StringIndices(s, "indeed")', intarr([]));
  Test({LINENUM}36364, 'StringIndices(s, "indeed", "i")', intarr([37]));
  Test({LINENUM}36365, 'StringIndices(s, "indeed", "iw")', intarr([37]));

  Test({LINENUM}36367, 's ≔ "Överskatta inte köpmannens förkärlek för sångfågeln."', 'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36369, 'StringIndices(s, "skatt")', intarr([5]));
  Test({LINENUM}36370, 'StringIndices(s, "skatt", "w")', intarr([]));
  Test({LINENUM}36371, 'StringIndices(s, "överskatta", "")', intarr([]));
  Test({LINENUM}36372, 'StringIndices(s, "överskatta", "i")', intarr([1]));
  Test({LINENUM}36373, 'StringIndices(s, "överskatta", "iw")', intarr([1]));
  Test({LINENUM}36374, 'StringIndices(s, "köpman")', intarr([17]));
  Test({LINENUM}36375, 'StringIndices(s, "köpman", "w")', intarr([]));
  Test({LINENUM}36376, 'StringIndices(s, "köpmannens")', intarr([17]));
  Test({LINENUM}36377, 'StringIndices(s, "köpmannens", "w")', intarr([17]));
  Test({LINENUM}36378, 'StringIndices(s, "kärlek")', intarr([31]));
  Test({LINENUM}36379, 'StringIndices(s, "kärlek", "w")', intarr([]));
  Test({LINENUM}36380, 'StringIndices(s, "förkärlek")', intarr([28]));
  Test({LINENUM}36381, 'StringIndices(s, "förkärlek", "w")', intarr([28]));
  Test({LINENUM}36382, 'StringIndices(s, "sång")', intarr([42]));
  Test({LINENUM}36383, 'StringIndices(s, "sång", "w")', intarr([]));
  Test({LINENUM}36384, 'StringIndices(s, "sångfågeln")', intarr([42]));
  Test({LINENUM}36385, 'StringIndices(s, "sångfågeln", "w")', intarr([42]));
  Test({LINENUM}36386, 'StringIndices(s, "fågel")', intarr([46]));
  Test({LINENUM}36387, 'StringIndices(s, "fågel", "w")', intarr([]));
  Test({LINENUM}36388, 'StringIndices(s, "fågeln")', intarr([46]));
  Test({LINENUM}36389, 'StringIndices(s, "fågeln", "w")', intarr([]));

  Test({LINENUM}36391, 's ≔ "Ansökan om måsten?"', 'Ansökan om måsten?');

  Test({LINENUM}36393, 'StringIndices(s, "ansökan")', intarr([]));
  Test({LINENUM}36394, 'StringIndices(s, "ansökan", "i")', intarr([1]));
  Test({LINENUM}36395, 'StringIndices(s, "ansökan", "iw")', intarr([1]));
  Test({LINENUM}36396, 'StringIndices(s, "kan")', intarr([5]));
  Test({LINENUM}36397, 'StringIndices(s, "kan", "w")', intarr([]));
  Test({LINENUM}36398, 'StringIndices(s, "måste")', intarr([12]));
  Test({LINENUM}36399, 'StringIndices(s, "måste", "w")', intarr([]));
  Test({LINENUM}36400, 'StringIndices(s, "måsten")', intarr([12]));
  Test({LINENUM}36401, 'StringIndices(s, "måsten", "w")', intarr([12]));
  Test({LINENUM}36402, 'StringIndices(s, "sten")', intarr([14]));
  Test({LINENUM}36403, 'StringIndices(s, "sten", "w")', intarr([]));

  Test({LINENUM}36405, 's ≔ "aaaaaaAAAAAAA"', 'aaaaaaAAAAAAA');

  Test({LINENUM}36407, 'StringIndices(s, "a")', intarr([1, 2, 3, 4, 5, 6]));
  Test({LINENUM}36408, 'StringIndices(s, "a", "i")', intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]));
  Test({LINENUM}36409, 'StringIndices(s, "a", "iw")', intarr([]));
  Test({LINENUM}36410, 'StringIndices(s, "A")', intarr([7, 8, 9, 10, 11, 12, 13]));
  Test({LINENUM}36411, 'StringIndices(s, "A", "i")', intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]));
  Test({LINENUM}36412, 'StringIndices(s, "A", "iw")', intarr([]));

  Test({LINENUM}36414, 'StringIndices(s, "aa")', intarr([1, 3, 5]));
  Test({LINENUM}36415, 'StringIndices(s, "aaa")', intarr([1, 4]));
  Test({LINENUM}36416, 'StringIndices(s, "aaaa")', intarr([1]));
  Test({LINENUM}36417, 'StringIndices(s, "aaaaa")', intarr([1]));
  Test({LINENUM}36418, 'StringIndices(s, "aaaaaa")', intarr([1]));
  Test({LINENUM}36419, 'StringIndices(s, "aaaaaaa")', intarr([]));
  Test({LINENUM}36420, 'StringIndices(s, "aaaaaaaa")', intarr([]));
  Test({LINENUM}36421, 'StringIndices(s, "aaaaaaaaa")', intarr([]));
  Test({LINENUM}36422, 'StringIndices(s, "aaaaaaaaaa")', intarr([]));
  Test({LINENUM}36423, 'StringIndices(s, "aaaaaaaaaaa")', intarr([]));
  Test({LINENUM}36424, 'StringIndices(s, "aaaaaaaaaaaa")', intarr([]));
  Test({LINENUM}36425, 'StringIndices(s, "aaaaaaaaaaaaa")', intarr([]));
  Test({LINENUM}36426, 'StringIndices(s, "aaaaaaaaaaaaaa")', intarr([]));

  Test({LINENUM}36428, 'StringIndices(s, "aa", "i")', intarr([1, 3, 5, 7, 9, 11]));
  Test({LINENUM}36429, 'StringIndices(s, "aaa", "i")', intarr([1, 4, 7, 10]));
  Test({LINENUM}36430, 'StringIndices(s, "aaaa", "i")', intarr([1, 5, 9]));
  Test({LINENUM}36431, 'StringIndices(s, "aaaaa", "i")', intarr([1, 6]));
  Test({LINENUM}36432, 'StringIndices(s, "aaaaaa", "i")', intarr([1, 7]));
  Test({LINENUM}36433, 'StringIndices(s, "aaaaaaa", "i")', intarr([1]));
  Test({LINENUM}36434, 'StringIndices(s, "aaaaaaaa", "i")', intarr([1]));
  Test({LINENUM}36435, 'StringIndices(s, "aaaaaaaaa", "i")', intarr([1]));
  Test({LINENUM}36436, 'StringIndices(s, "aaaaaaaaaa", "i")', intarr([1]));
  Test({LINENUM}36437, 'StringIndices(s, "aaaaaaaaaaa", "i")', intarr([1]));
  Test({LINENUM}36438, 'StringIndices(s, "aaaaaaaaaaaa", "i")', intarr([1]));
  Test({LINENUM}36439, 'StringIndices(s, "aaaaaaaaaaaaa", "i")', intarr([1]));
  Test({LINENUM}36440, 'StringIndices(s, "aaaaaaaaaaaaaa", "i")', intarr([]));

  Test({LINENUM}36442, 'StringIndices(s, "a", "", 1)', intarr([1, 2, 3, 4, 5, 6]));
  Test({LINENUM}36443, 'StringIndices(s, "a", "", 2)', intarr([2, 3, 4, 5, 6]));
  Test({LINENUM}36444, 'StringIndices(s, "a", "", 3)', intarr([3, 4, 5, 6]));
  Test({LINENUM}36445, 'StringIndices(s, "a", "", 4)', intarr([4, 5, 6]));
  Test({LINENUM}36446, 'StringIndices(s, "a", "", 5)', intarr([5, 6]));
  Test({LINENUM}36447, 'StringIndices(s, "a", "", 6)', intarr([6]));
  Test({LINENUM}36448, 'StringIndices(s, "a", "", 7)', intarr([]));

  Test({LINENUM}36450, 'StringIndices(s, "aa", "", 1)', intarr([1, 3, 5]));
  Test({LINENUM}36451, 'StringIndices(s, "aa", "", 2)', intarr([2, 4]));
  Test({LINENUM}36452, 'StringIndices(s, "aa", "", 3)', intarr([3, 5]));
  Test({LINENUM}36453, 'StringIndices(s, "aa", "", 4)', intarr([4]));
  Test({LINENUM}36454, 'StringIndices(s, "aa", "", 5)', intarr([5]));
  Test({LINENUM}36455, 'StringIndices(s, "aa", "", 6)', intarr([]));
  Test({LINENUM}36456, 'StringIndices(s, "aa", "", 7)', intarr([]));

  Test({LINENUM}36458, 'StringIndices(s, "aaa", "", 1)', intarr([1, 4]));
  Test({LINENUM}36459, 'StringIndices(s, "aaa", "", 2)', intarr([2]));
  Test({LINENUM}36460, 'StringIndices(s, "aaa", "", 3)', intarr([3]));
  Test({LINENUM}36461, 'StringIndices(s, "aaa", "", 4)', intarr([4]));
  Test({LINENUM}36462, 'StringIndices(s, "aaa", "", 5)', intarr([]));
  Test({LINENUM}36463, 'StringIndices(s, "aaa", "", 6)', intarr([]));
  Test({LINENUM}36464, 'StringIndices(s, "aaa", "", 7)', intarr([]));

  Test({LINENUM}36466, 'StringIndices(s, "aaaa", "", 1)', intarr([1]));
  Test({LINENUM}36467, 'StringIndices(s, "aaaa", "", 2)', intarr([2]));
  Test({LINENUM}36468, 'StringIndices(s, "aaaa", "", 3)', intarr([3]));
  Test({LINENUM}36469, 'StringIndices(s, "aaaa", "", 4)', intarr([]));
  Test({LINENUM}36470, 'StringIndices(s, "aaaa", "", 5)', intarr([]));
  Test({LINENUM}36471, 'StringIndices(s, "aaaa", "", 6)', intarr([]));
  Test({LINENUM}36472, 'StringIndices(s, "aaaa", "", 7)', intarr([]));

  // Replace all

  Test({LINENUM}36476, 's ≔ "A car named Carry was careful not to care about roundabouts being too round to care too much about cars with carry.";', null); // No, it's not supposed to make sense.

  Test({LINENUM}36478, 'StringReplace(s, "car", "bike")',
    'A bike named Carry was bikeeful not to bikee about roundabouts being too round to bikee too much about bikes with bikery.');

  Test({LINENUM}36481, 'StringReplace(s, "car", "bike", "i")',
    'A bike named bikery was bikeeful not to bikee about roundabouts being too round to bikee too much about bikes with bikery.');

  Test({LINENUM}36484, 'StringReplace(s, "car", "bike", "w")',
    'A bike named Carry was careful not to care about roundabouts being too round to care too much about cars with carry.');

  Test({LINENUM}36487, 'StringReplace(s, "car", "bike", "iw")',
    'A bike named Carry was careful not to care about roundabouts being too round to care too much about cars with carry.');

  Test({LINENUM}36490, 'StringReplace(s, "care", "forget")',
    'A car named Carry was forgetful not to forget about roundabouts being too round to forget too much about cars with carry.');

  Test({LINENUM}36493, 'StringReplace(s, "care", "forget", "w")',
    'A car named Carry was careful not to forget about roundabouts being too round to forget too much about cars with carry.');

  Test({LINENUM}36496, 'StringReplace(s, "carry", "bikery")',
    'A car named Carry was careful not to care about roundabouts being too round to care too much about cars with bikery.');

  Test({LINENUM}36499, 'StringReplace(s, "carry", "bikery", "i")',
    'A car named bikery was careful not to care about roundabouts being too round to care too much about cars with bikery.');

  Test({LINENUM}36502, 'StringReplace(s, "about", "for")',
    'A car named Carry was careful not to care for roundfors being too round to care too much for cars with carry.');

  Test({LINENUM}36505, 'StringReplace(s, "about", "for", "w")',
    'A car named Carry was careful not to care for roundabouts being too round to care too much for cars with carry.');

  Test({LINENUM}36508, 'StringReplace(s, "a", "u")',
    'A cur numed Curry wus cureful not to cure ubout roundubouts being too round to cure too much ubout curs with curry.');

  Test({LINENUM}36511, 'StringReplace(s, "a", "u", "i")',
    'u cur numed Curry wus cureful not to cure ubout roundubouts being too round to cure too much ubout curs with curry.');

  Test({LINENUM}36514, 'StringReplace(s, "a", "u", "w")',
    'A car named Carry was careful not to care about roundabouts being too round to care too much about cars with carry.');

  Test({LINENUM}36517, 'StringReplace(s, "a", "u", "iw")',
    'u car named Carry was careful not to care about roundabouts being too round to care too much about cars with carry.');

  Test({LINENUM}36520, 'StringReplace(s, "e", "ee")',
    'A car nameed Carry was careeful not to caree about roundabouts beeing too round to caree too much about cars with carry.');

  Test({LINENUM}36523, 'StringReplace(s, "much", "little", "w")',
    'A car named Carry was careful not to care about roundabouts being too round to care too little about cars with carry.');

  Test({LINENUM}36526, 'StringReplace(s, "roundabout", "hippogriff")',
    'A car named Carry was careful not to care about hippogriffs being too round to care too much about cars with carry.');

  Test({LINENUM}36529, 'StringReplace(s, "roundabout", "hippogriff", "w")',
    'A car named Carry was careful not to care about roundabouts being too round to care too much about cars with carry.');

  Test({LINENUM}36532, 'StringReplace(s, "nargle", "wrackspurt")',
    'A car named Carry was careful not to care about roundabouts being too round to care too much about cars with carry.');

  Test({LINENUM}36535, 'StringReplace(s, "being too round", "not being round enough")',
    'A car named Carry was careful not to care about roundabouts not being round enough to care too much about cars with carry.');

  Test({LINENUM}36538, 'StringReplace(s, "being too round", "not being round enough", "iw")',
    'A car named Carry was careful not to care about roundabouts not being round enough to care too much about cars with carry.');

  Test({LINENUM}36541, 'StringReplace(s, "not", "")',
    'A car named Carry was careful  to care about roundabouts being too round to care too much about cars with carry.');

  Test({LINENUM}36544, 'StringReplace(s, "not ", "")',
    'A car named Carry was careful to care about roundabouts being too round to care too much about cars with carry.');

  Test({LINENUM}36547, 'StringReplace(s, " ", "")',
    'AcarnamedCarrywascarefulnottocareaboutroundaboutsbeingtooroundtocaretoomuchaboutcarswithcarry.');

  Test({LINENUM}36550, 'StringReplace(s, " ", "-")',
    'A-car-named-Carry-was-careful-not-to-care-about-roundabouts-being-too-round-to-care-too-much-about-cars-with-carry.');

  Test({LINENUM}36553, 'StringReplace(s, "c", "b")',
    'A bar named Carry was bareful not to bare about roundabouts being too round to bare too mubh about bars with barry.');

  Test({LINENUM}36556, 'StringReplace(s, "c", "b", "i")',
    'A bar named barry was bareful not to bare about roundabouts being too round to bare too mubh about bars with barry.');

  Test({LINENUM}36559, 's ≔ "A cat is a good/excellent" + chr(13) + chr(10) + "mister. –Indeed!"', 'A cat is a good/excellent'#13#10'mister. –Indeed!');

  Test({LINENUM}36561, 'StringReplace(s, "go", "run")',
    'A cat is a runod/excellent'#13#10'mister. –Indeed!');

  Test({LINENUM}36564, 'StringReplace(s, "go", "run", "w")',
    'A cat is a good/excellent'#13#10'mister. –Indeed!');

  Test({LINENUM}36567, 'StringReplace(s, "good", "terrific")',
    'A cat is a terrific/excellent'#13#10'mister. –Indeed!');

  Test({LINENUM}36570, 'StringReplace(s, "good", "terrific", "w")',
    'A cat is a terrific/excellent'#13#10'mister. –Indeed!');

  Test({LINENUM}36573, 'StringReplace(s, "excellent", "splendid", "w")',
    'A cat is a good/splendid'#13#10'mister. –Indeed!');

  Test({LINENUM}36576, 'StringReplace(s, "mister", "friend", "w")',
    'A cat is a good/excellent'#13#10'friend. –Indeed!');

  Test({LINENUM}36579, 'StringReplace(s, "indeed", "yes")',
    'A cat is a good/excellent'#13#10'mister. –Indeed!');

  Test({LINENUM}36582, 'StringReplace(s, "indeed", "yes", "i")',
    'A cat is a good/excellent'#13#10'mister. –yes!');

  Test({LINENUM}36585, 'StringReplace(s, "indeed", "yes", "iw")',
    'A cat is a good/excellent'#13#10'mister. –yes!');

  Test({LINENUM}36588, 's ≔ "Överskatta inte köpmannens förkärlek för sångfågeln."', 'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36590, 'StringReplace(s, "överskatta", "underskatta")',
    'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36593, 'StringReplace(s, "överskatta", "underskatta", "i")',
    'underskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36596, 'StringReplace(s, "skatta", "deklarera")',
    'Överdeklarera inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36599, 'StringReplace(s, "skatta", "deklarera", "w")',
    'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36602, 'StringReplace(s, "man", "kvinna")',
    'Överskatta inte köpkvinnanens förkärlek för sångfågeln.');

  Test({LINENUM}36605, 'StringReplace(s, "man", "kvinna", "w")',
    'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36608, 'StringReplace(s, "kärlek", "hopp")',
    'Överskatta inte köpmannens förhopp för sångfågeln.');

  Test({LINENUM}36611, 'StringReplace(s, "kärlek", "hopp", "w")',
    'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36614, 'StringReplace(s, "sång", "musik")',
    'Överskatta inte köpmannens förkärlek för musikfågeln.');

  Test({LINENUM}36617, 'StringReplace(s, "sång", "musik", "w")',
    'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36620, 'StringReplace(s, "fågel", "uggla")',
    'Överskatta inte köpmannens förkärlek för sångugglan.');

  Test({LINENUM}36623, 'StringReplace(s, "fågel", "uggla", "w")',
    'Överskatta inte köpmannens förkärlek för sångfågeln.');

  Test({LINENUM}36626, 's ≔ "Ansökan om måsten?"', 'Ansökan om måsten?');

  Test({LINENUM}36628, 'StringReplace(s, "kan", "bör")',
    'Ansöbör om måsten?');

  Test({LINENUM}36631, 'StringReplace(s, "kan", "bör", "w")',
    'Ansökan om måsten?');

  Test({LINENUM}36634, 'StringReplace(s, "sten", "rot")',
    'Ansökan om mårot?');

  Test({LINENUM}36637, 'StringReplace(s, "sten", "rot", "w")',
    'Ansökan om måsten?');

  Test({LINENUM}36640, 'StringReplace(s, "om", "utan", "w")',
    'Ansökan utan måsten?');

  Test({LINENUM}36643, 's ≔ "aaaaaaAAAAAAA"', 'aaaaaaAAAAAAA');

  Test({LINENUM}36645, 'StringReplace(s, "a", "b")',
    'bbbbbbAAAAAAA');

  Test({LINENUM}36648, 'StringReplace(s, "a", "b", "i")',
    'bbbbbbbbbbbbb');

  Test({LINENUM}36651, 'StringReplace(s, "a", "(a)")',
    '(a)(a)(a)(a)(a)(a)AAAAAAA');

  Test({LINENUM}36654, 'StringReplace(s, "aa", "cd")',
    'cdcdcdAAAAAAA');

  Test({LINENUM}36657, 'StringReplace(s, "aa", "cat")',
    'catcatcatAAAAAAA');

  Test({LINENUM}36660, 'StringReplace(s, "aaa", "cat")',
    'catcatAAAAAAA');

  Test({LINENUM}36663, 'StringReplace(s, "aaa", "!")',
    '!!AAAAAAA');

  Test({LINENUM}36666, 'StringReplace(s, "aaaa", "cat")',
    'cataaAAAAAAA');

  Test({LINENUM}36669, 'StringReplace(s, "a", "")',
    'AAAAAAA');

  Test({LINENUM}36672, 'StringReplace(s, "aa", "")',
    'AAAAAAA');

  Test({LINENUM}36675, 'StringReplace(s, "aaa", "")',
    'AAAAAAA');

  Test({LINENUM}36678, 'StringReplace(s, "aaaa", "")',
    'aaAAAAAAA');

  Test({LINENUM}36681, 'StringReplace(s, "aaaaa", "")',
    'aAAAAAAA');

  Test({LINENUM}36684, 'StringReplace(s, "aaaaa", "", "i")',
    'AAA');

  Test({LINENUM}36687, 'StringReplace(s, "aA", "a" + chr(13) + chr(10) + "A")',
    'aaaaaa'#13#10'AAAAAAA');

  _s := LoremIpsum(10000);
  Test({LINENUM}36691, 'LoremStr ≔ "' + _s + '";', null);

  _s2 := SysUtils.StringReplace(_s, 'ipsum', 'hipster', [rfReplaceAll]);

  StartStopwatch;
  Test({LINENUM}36696, 'StringReplace(LoremStr, "ipsum", "hipster")', _s2);
  StopStopwatch;
  TestDuration({LINENUM}36698, 0.1);

  StartStopwatch;
  Test({LINENUM}36701, 'StringReplace(LoremStr, "ipsum", "hipster", "iw")', _s2);
  StopStopwatch;
  TestDuration({LINENUM}36703, 0.1);

  _s2 := SysUtils.StringReplace(_s, ' ', #13#10, [rfReplaceAll]);

  StartStopwatch;
  Test({LINENUM}36708, 'StringReplace(LoremStr, " ", chr(13) + chr(10))', _s2);
  StopStopwatch;
  TestDuration({LINENUM}36710, 0.12);

  Test({LINENUM}36712, 'delete(s); delete(LoremStr)', success);
  _s := '';
  _s2 := '';

  // Splitting

  Test({LINENUM}36718, 'split("alfa beta gamma", " ")', strarr(['alfa', 'beta', 'gamma']));
  Test({LINENUM}36719, 'split("alfa,beta,gamma", " ")', strarr(['alfa,beta,gamma']));
  Test({LINENUM}36720, 'split("alfa,beta,gamma", ",")', strarr(['alfa', 'beta', 'gamma']));

  Test({LINENUM}36722, 'split(" alfa, beta,  gamma ", ",")', strarr([' alfa', ' beta', '  gamma ']));
  Test({LINENUM}36723, 'split(" alfa, beta,  gamma ", ",") @ trim', strarr(['alfa', 'beta', 'gamma']));

  Test({LINENUM}36725, 'split("alfa beta,gamma", " ")', strarr(['alfa', 'beta,gamma']));
  Test({LINENUM}36726, 'split("alfa beta,gamma", ",")', strarr(['alfa beta', 'gamma']));
  Test({LINENUM}36727, 'split("alfa beta,gamma", ''(" ", ","))', strarr(['alfa', 'beta', 'gamma']));

  Test({LINENUM}36729, 'split("alfa beta  gamma", " ")', strarr(['alfa', 'beta', '', 'gamma']));
  Test({LINENUM}36730, 'split("alfa beta gamma  ", " ")', strarr(['alfa', 'beta', 'gamma', '', '']));
  Test({LINENUM}36731, 'split(" alfa beta gamma", " ")', strarr(['', 'alfa', 'beta', 'gamma']));

  Test({LINENUM}36733, 'split("", " ")', strarr([]));
  Test({LINENUM}36734, 'split(" ", " ")', strarr(['', '']));

  Test({LINENUM}36736, 'split("", ",")', strarr([]));
  Test({LINENUM}36737, 'split("alfa", ",")', strarr(['alfa']));
  Test({LINENUM}36738, 'split("alfa,beta", ",")', strarr(['alfa', 'beta']));
  Test({LINENUM}36739, 'split("alfa,beta,gamma", ",")', strarr(['alfa', 'beta', 'gamma']));
  Test({LINENUM}36740, 'split("alfa,beta,gamma,delta", ",")', strarr(['alfa', 'beta', 'gamma', 'delta']));

  Test({LINENUM}36742, 'split("1 2 3;4 5 6;7 8 9", ''(" ", ";"))', strarr(['1', '2', '3', '4', '5', '6', '7', '8', '9']));

  Test({LINENUM}36744, 's ≔ "' + LoremIpsum(10000) + '";', null);
  StartStopwatch;
  Test({LINENUM}36746, '#split(s, ''(" ", chr(13) + chr(10)))', 69 * 10000);
  StopStopwatch;
  TestDuration({LINENUM}36748, 0.3);

  Test({LINENUM}36750, 'delete(s)', success);

  Test({LINENUM}36752, 'split("alfa beta gamma", "")', strarr(['alfa beta gamma']));
  Test({LINENUM}36753, 'split("alfa beta gamma", ''())', strarr(['alfa beta gamma']));

  Test({LINENUM}36755, 'split("alfa beta gamma", 5)', failure, 'An object of type array was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}36756, 'split("alfa beta gamma", ''(1, 3))', failure, 'The array must contain only objects of type string, but it contains an object of type integer.');

  // Joining

  Test({LINENUM}36760, 'letters ≔ ''("alpha", "beta", "gamma", "delta", "epsilon")',
    strarr(['alpha', 'beta', 'gamma', 'delta', 'epsilon']));

  Test({LINENUM}36763, 'join(letters)', 'alpha, beta, gamma, delta, epsilon');
  Test({LINENUM}36764, 'join(letters, " ")', 'alpha beta gamma delta epsilon');
  Test({LINENUM}36765, 'join(letters, ",")', 'alpha,beta,gamma,delta,epsilon');
  Test({LINENUM}36766, 'join(letters, ";")', 'alpha;beta;gamma;delta;epsilon');

  Test({LINENUM}36768, 'join(letters, UpperCase)', 'ALPHA, BETA, GAMMA, DELTA, EPSILON');
  Test({LINENUM}36769, 'join(letters, UpperCase, " ")', 'ALPHA BETA GAMMA DELTA EPSILON');
  Test({LINENUM}36770, 'join(letters, UpperCase, ",")', 'ALPHA,BETA,GAMMA,DELTA,EPSILON');
  Test({LINENUM}36771, 'join(letters, UpperCase, ";")', 'ALPHA;BETA;GAMMA;DELTA;EPSILON');

  Test({LINENUM}36773, 'join(letters, ", ", """", """")', '"alpha", "beta", "gamma", "delta", "epsilon"');
  Test({LINENUM}36774, 'join(letters, ", ", "(", ")")', '(alpha), (beta), (gamma), (delta), (epsilon)');
  Test({LINENUM}36775, 'join(letters, ", ", "(")', '(alpha, (beta, (gamma, (delta, (epsilon');

  Test({LINENUM}36777, 'join(letters, UpperCase, ", ", """", """")', '"ALPHA", "BETA", "GAMMA", "DELTA", "EPSILON"');
  Test({LINENUM}36778, 'join(letters, UpperCase, ", ", "(", ")")', '(ALPHA), (BETA), (GAMMA), (DELTA), (EPSILON)');
  Test({LINENUM}36779, 'join(letters, UpperCase, ", ", "(")', '(ALPHA, (BETA, (GAMMA, (DELTA, (EPSILON');

  Test({LINENUM}36781, 'join(letters, ", ", """", """", "[", "]")', '["alpha", "beta", "gamma", "delta", "epsilon"]');
  Test({LINENUM}36782, 'join(letters, ", ", "(", ")", "[", "]")', '[(alpha), (beta), (gamma), (delta), (epsilon)]');
  Test({LINENUM}36783, 'join(letters, ", ", "(", ")", "[")', '[(alpha), (beta), (gamma), (delta), (epsilon)');

  Test({LINENUM}36785, 'join(letters, UpperCase, ", ", """", """", "[", "]")', '["ALPHA", "BETA", "GAMMA", "DELTA", "EPSILON"]');
  Test({LINENUM}36786, 'join(letters, UpperCase, ", ", "(", ")", "[", "]")', '[(ALPHA), (BETA), (GAMMA), (DELTA), (EPSILON)]');
  Test({LINENUM}36787, 'join(letters, UpperCase, ", ", "(", ")", "[")', '[(ALPHA), (BETA), (GAMMA), (DELTA), (EPSILON)');

  Test({LINENUM}36789, 'letters ≔ ''("alpha")', strarr(['alpha']));

  Test({LINENUM}36791, 'join(letters)', 'alpha');
  Test({LINENUM}36792, 'join(letters, " ")', 'alpha');
  Test({LINENUM}36793, 'join(letters, ",")', 'alpha');
  Test({LINENUM}36794, 'join(letters, ";")', 'alpha');

  Test({LINENUM}36796, 'join(letters, UpperCase)', 'ALPHA');
  Test({LINENUM}36797, 'join(letters, UpperCase, " ")', 'ALPHA');
  Test({LINENUM}36798, 'join(letters, UpperCase, ",")', 'ALPHA');
  Test({LINENUM}36799, 'join(letters, UpperCase, ";")', 'ALPHA');

  Test({LINENUM}36801, 'join(letters, ", ", """", """")', '"alpha"');
  Test({LINENUM}36802, 'join(letters, ", ", "(", ")")', '(alpha)');
  Test({LINENUM}36803, 'join(letters, ", ", "(")', '(alpha');

  Test({LINENUM}36805, 'join(letters, UpperCase, ", ", """", """")', '"ALPHA"');
  Test({LINENUM}36806, 'join(letters, UpperCase, ", ", "(", ")")', '(ALPHA)');
  Test({LINENUM}36807, 'join(letters, UpperCase, ", ", "(")', '(ALPHA');

  Test({LINENUM}36809, 'join(letters, ", ", """", """", "[", "]")', '["alpha"]');
  Test({LINENUM}36810, 'join(letters, ", ", "(", ")", "[", "]")', '[(alpha)]');
  Test({LINENUM}36811, 'join(letters, ", ", "(", ")", "[")', '[(alpha)');

  Test({LINENUM}36813, 'join(letters, UpperCase, ", ", """", """", "[", "]")', '["ALPHA"]');
  Test({LINENUM}36814, 'join(letters, UpperCase, ", ", "(", ")", "[", "]")', '[(ALPHA)]');
  Test({LINENUM}36815, 'join(letters, UpperCase, ", ", "(", ")", "[")', '[(ALPHA)');

  Test({LINENUM}36817, 'letters ≔ ''()', strarr([]));

  Test({LINENUM}36819, 'join(letters)', '');
  Test({LINENUM}36820, 'join(letters, " ")', '');
  Test({LINENUM}36821, 'join(letters, ",")', '');
  Test({LINENUM}36822, 'join(letters, ";")', '');

  Test({LINENUM}36824, 'join(letters, UpperCase)', '');
  Test({LINENUM}36825, 'join(letters, UpperCase, " ")', '');
  Test({LINENUM}36826, 'join(letters, UpperCase, ",")', '');
  Test({LINENUM}36827, 'join(letters, UpperCase, ";")', '');

  Test({LINENUM}36829, 'join(letters, ", ", """", """")', '');
  Test({LINENUM}36830, 'join(letters, ", ", "(", ")")', '');
  Test({LINENUM}36831, 'join(letters, ", ", "(")', '');

  Test({LINENUM}36833, 'join(letters, UpperCase, ", ", """", """")', '');
  Test({LINENUM}36834, 'join(letters, UpperCase, ", ", "(", ")")', '');
  Test({LINENUM}36835, 'join(letters, UpperCase, ", ", "(")', '');

  Test({LINENUM}36837, 'join(letters, ", ", """", """", "[", "]")', '[]');
  Test({LINENUM}36838, 'join(letters, ", ", "(", ")", "[", "]")', '[]');
  Test({LINENUM}36839, 'join(letters, ", ", "(", ")", "[")', '[');

  Test({LINENUM}36841, 'join(letters, UpperCase, ", ", """", """", "[", "]")', '[]');
  Test({LINENUM}36842, 'join(letters, UpperCase, ", ", "(", ")", "[", "]")', '[]');
  Test({LINENUM}36843, 'join(letters, UpperCase, ", ", "(", ")", "[")', '[');

  Test({LINENUM}36845, 'letters ≔ ''("alpha", "beta", "gamma", "", "epsilon")',
    strarr(['alpha', 'beta', 'gamma', '', 'epsilon']));

  Test({LINENUM}36848, 'join(letters)', 'alpha, beta, gamma, , epsilon');
  Test({LINENUM}36849, 'join(letters, " ")', 'alpha beta gamma  epsilon');
  Test({LINENUM}36850, 'join(letters, ",")', 'alpha,beta,gamma,,epsilon');
  Test({LINENUM}36851, 'join(letters, ";")', 'alpha;beta;gamma;;epsilon');

  Test({LINENUM}36853, 'join(letters, UpperCase)', 'ALPHA, BETA, GAMMA, , EPSILON');
  Test({LINENUM}36854, 'join(letters, UpperCase, " ")', 'ALPHA BETA GAMMA  EPSILON');
  Test({LINENUM}36855, 'join(letters, UpperCase, ",")', 'ALPHA,BETA,GAMMA,,EPSILON');
  Test({LINENUM}36856, 'join(letters, UpperCase, ";")', 'ALPHA;BETA;GAMMA;;EPSILON');

  Test({LINENUM}36858, 'join(letters, ", ", """", """")', '"alpha", "beta", "gamma", "", "epsilon"');
  Test({LINENUM}36859, 'join(letters, ", ", "(", ")")', '(alpha), (beta), (gamma), (), (epsilon)');
  Test({LINENUM}36860, 'join(letters, ", ", "(")', '(alpha, (beta, (gamma, (, (epsilon');

  Test({LINENUM}36862, 'join(letters, UpperCase, ", ", """", """")', '"ALPHA", "BETA", "GAMMA", "", "EPSILON"');
  Test({LINENUM}36863, 'join(letters, UpperCase, ", ", "(", ")")', '(ALPHA), (BETA), (GAMMA), (), (EPSILON)');
  Test({LINENUM}36864, 'join(letters, UpperCase, ", ", "(")', '(ALPHA, (BETA, (GAMMA, (, (EPSILON');

  Test({LINENUM}36866, 'join(letters, ", ", """", """", "[", "]")', '["alpha", "beta", "gamma", "", "epsilon"]');
  Test({LINENUM}36867, 'join(letters, ", ", "(", ")", "[", "]")', '[(alpha), (beta), (gamma), (), (epsilon)]');
  Test({LINENUM}36868, 'join(letters, ", ", "(", ")", "[")', '[(alpha), (beta), (gamma), (), (epsilon)');

  Test({LINENUM}36870, 'join(letters, UpperCase, ", ", """", """", "[", "]")', '["ALPHA", "BETA", "GAMMA", "", "EPSILON"]');
  Test({LINENUM}36871, 'join(letters, UpperCase, ", ", "(", ")", "[", "]")', '[(ALPHA), (BETA), (GAMMA), (), (EPSILON)]');
  Test({LINENUM}36872, 'join(letters, UpperCase, ", ", "(", ")", "[")', '[(ALPHA), (BETA), (GAMMA), (), (EPSILON)');

  Test({LINENUM}36874, 'letters ≔ ''("")', strarr(['']));

  Test({LINENUM}36876, 'join(letters)', '');
  Test({LINENUM}36877, 'join(letters, " ")', '');
  Test({LINENUM}36878, 'join(letters, ",")', '');
  Test({LINENUM}36879, 'join(letters, ";")', '');

  Test({LINENUM}36881, 'join(letters, UpperCase)', '');
  Test({LINENUM}36882, 'join(letters, UpperCase, " ")', '');
  Test({LINENUM}36883, 'join(letters, UpperCase, ",")', '');
  Test({LINENUM}36884, 'join(letters, UpperCase, ";")', '');

  Test({LINENUM}36886, 'join(letters, ", ", """", """")', '""');
  Test({LINENUM}36887, 'join(letters, ", ", "(", ")")', '()');
  Test({LINENUM}36888, 'join(letters, ", ", "(")', '(');

  Test({LINENUM}36890, 'join(letters, UpperCase, ", ", """", """")', '""');
  Test({LINENUM}36891, 'join(letters, UpperCase, ", ", "(", ")")', '()');
  Test({LINENUM}36892, 'join(letters, UpperCase, ", ", "(")', '(');

  Test({LINENUM}36894, 'join(letters, ", ", """", """", "[", "]")', '[""]');
  Test({LINENUM}36895, 'join(letters, ", ", "(", ")", "[", "]")', '[()]');
  Test({LINENUM}36896, 'join(letters, ", ", "(", ")", "[")', '[()');

  Test({LINENUM}36898, 'join(letters, UpperCase, ", ", """", """", "[", "]")', '[""]');
  Test({LINENUM}36899, 'join(letters, UpperCase, ", ", "(", ")", "[", "]")', '[()]');
  Test({LINENUM}36900, 'join(letters, UpperCase, ", ", "(", ")", "[")', '[()');

  Test({LINENUM}36902, 'letters ≔ ''("alpha", "beta", "gamma", "delta", "epsilon")',
    strarr(['alpha', 'beta', 'gamma', 'delta', 'epsilon']));

  Test({LINENUM}36905, 'join(letters, (s ↦ UpperCase(reverse(s))))', 'AHPLA, ATEB, AMMAG, ATLED, NOLISPE');
  Test({LINENUM}36906, 'join(letters, (s ↦ UpperCase(reverse(s))), " ")', 'AHPLA ATEB AMMAG ATLED NOLISPE');
  Test({LINENUM}36907, 'join(letters, (s ↦ UpperCase(reverse(s))), ",")', 'AHPLA,ATEB,AMMAG,ATLED,NOLISPE');
  Test({LINENUM}36908, 'join(letters, (s ↦ UpperCase(reverse(s))), ";")', 'AHPLA;ATEB;AMMAG;ATLED;NOLISPE');

  Test({LINENUM}36910, 'delete(letters)', success);

  // Trimming

  Test({LINENUM}36914, 'trim("   Hello, World!  ")', 'Hello, World!');
  Test({LINENUM}36915, 'TrimLeft("   Hello, World!  ")', 'Hello, World!  ');
  Test({LINENUM}36916, 'TrimRight("   Hello, World!  ")', '   Hello, World!');

  Test({LINENUM}36918, 'trim("   ")', '');
  Test({LINENUM}36919, 'TrimLeft("   ")', '');
  Test({LINENUM}36920, 'TrimRight("   ")', '');

  Test({LINENUM}36922, 'trim("")', '');
  Test({LINENUM}36923, 'TrimLeft("")', '');
  Test({LINENUM}36924, 'TrimRight("")', '');

  Test({LINENUM}36926, 'trim(chr(13) + chr(10) + "  Hello, World!   " + chr(13) + chr(10))', 'Hello, World!');
  Test({LINENUM}36927, 'TrimLeft(chr(13) + chr(10) + "  Hello, World!   " + chr(13) + chr(10))', 'Hello, World!   '#13#10);
  Test({LINENUM}36928, 'TrimRight(chr(13) + chr(10) + "  Hello, World!   " + chr(13) + chr(10))', #13#10'  Hello, World!');

  Test({LINENUM}36930, 'trim("  ' + LoremIpsum(1000) + '        ")', LoremIpsum(1000));

  Test({LINENUM}36932, 'trim(5)', failure, 'An object of type string was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}36933, 'TrimLeft(5)', failure, 'An object of type string was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}36934, 'TrimRight(5)', failure, 'An object of type string was expected as argument 1, but an object of type integer was given.');

  Test({LINENUM}36936, 'trim()', failure, 'Too few arguments. A required argument of type string is missing.');
  Test({LINENUM}36937, 'trim("  test  ", 5)', failure, 'Too many arguments.');

  // Padding

  Test({LINENUM}36941, 'StringPad("test")', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}36942, 'StringPad("test", 0)', 'test');
  Test({LINENUM}36943, 'StringPad("test", 1)', 'test');
  Test({LINENUM}36944, 'StringPad("test", 2)', 'test');
  Test({LINENUM}36945, 'StringPad("test", 3)', 'test');
  Test({LINENUM}36946, 'StringPad("test", 4)', 'test');
  Test({LINENUM}36947, 'StringPad("test", 5)', 'test ');
  Test({LINENUM}36948, 'StringPad("test", 6)', 'test  ');
  Test({LINENUM}36949, 'StringPad("test", 7)', 'test   ');
  Test({LINENUM}36950, 'StringPad("test", 8)', 'test    ');
  Test({LINENUM}36951, 'StringPad("test", 9)', 'test     ');
  Test({LINENUM}36952, 'StringPad("test", 10)', 'test      ');
  Test({LINENUM}36953, 'StringPad("test", -1)', failure, 'A non-negative integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}36955, 'StringPad("test", 0, "l")', 'test');
  Test({LINENUM}36956, 'StringPad("test", 1, "l")', 'test');
  Test({LINENUM}36957, 'StringPad("test", 2, "l")', 'test');
  Test({LINENUM}36958, 'StringPad("test", 3, "l")', 'test');
  Test({LINENUM}36959, 'StringPad("test", 4, "l")', 'test');
  Test({LINENUM}36960, 'StringPad("test", 5, "l")', 'test ');
  Test({LINENUM}36961, 'StringPad("test", 6, "l")', 'test  ');
  Test({LINENUM}36962, 'StringPad("test", 7, "l")', 'test   ');
  Test({LINENUM}36963, 'StringPad("test", 8, "l")', 'test    ');
  Test({LINENUM}36964, 'StringPad("test", 9, "l")', 'test     ');
  Test({LINENUM}36965, 'StringPad("test", 10, "l")', 'test      ');

  Test({LINENUM}36967, 'StringPad("test", 0, "r")', 'test');
  Test({LINENUM}36968, 'StringPad("test", 1, "r")', 'test');
  Test({LINENUM}36969, 'StringPad("test", 2, "r")', 'test');
  Test({LINENUM}36970, 'StringPad("test", 3, "r")', 'test');
  Test({LINENUM}36971, 'StringPad("test", 4, "r")', 'test');
  Test({LINENUM}36972, 'StringPad("test", 5, "r")', ' test');
  Test({LINENUM}36973, 'StringPad("test", 6, "r")', '  test');
  Test({LINENUM}36974, 'StringPad("test", 7, "r")', '   test');
  Test({LINENUM}36975, 'StringPad("test", 8, "r")', '    test');
  Test({LINENUM}36976, 'StringPad("test", 9, "r")', '     test');
  Test({LINENUM}36977, 'StringPad("test", 10, "r")', '      test');

  Test({LINENUM}36979, 'StringPad("test", 0, "c")', 'test');
  Test({LINENUM}36980, 'StringPad("test", 1, "c")', 'test');
  Test({LINENUM}36981, 'StringPad("test", 2, "c")', 'test');
  Test({LINENUM}36982, 'StringPad("test", 3, "c")', 'test');
  Test({LINENUM}36983, 'StringPad("test", 4, "c")', 'test');
  Test({LINENUM}36984, 'StringPad("test", 5, "c")', 'test ');
  Test({LINENUM}36985, 'StringPad("test", 6, "c")', ' test ');
  Test({LINENUM}36986, 'StringPad("test", 7, "c")', ' test  ');
  Test({LINENUM}36987, 'StringPad("test", 8, "c")', '  test  ');
  Test({LINENUM}36988, 'StringPad("test", 9, "c")', '  test   ');
  Test({LINENUM}36989, 'StringPad("test", 10, "c")', '   test   ');

  Test({LINENUM}36991, 'StringPad("test", 6, "a")', failure, 'Character "a" not allowed as argument. Expected one of "lrc".');

  Test({LINENUM}36993, 'StringPad("test", 0, "l", ".")', 'test');
  Test({LINENUM}36994, 'StringPad("test", 1, "l", ".")', 'test');
  Test({LINENUM}36995, 'StringPad("test", 2, "l", ".")', 'test');
  Test({LINENUM}36996, 'StringPad("test", 3, "l", ".")', 'test');
  Test({LINENUM}36997, 'StringPad("test", 4, "l", ".")', 'test');
  Test({LINENUM}36998, 'StringPad("test", 5, "l", ".")', 'test.');
  Test({LINENUM}36999, 'StringPad("test", 6, "l", ".")', 'test..');
  Test({LINENUM}37000, 'StringPad("test", 7, "l", ".")', 'test...');
  Test({LINENUM}37001, 'StringPad("test", 8, "l", ".")', 'test....');
  Test({LINENUM}37002, 'StringPad("test", 9, "l", ".")', 'test.....');
  Test({LINENUM}37003, 'StringPad("test", 10, "l", ".")', 'test......');

  Test({LINENUM}37005, 'StringPad("test", 0, "r", ".")', 'test');
  Test({LINENUM}37006, 'StringPad("test", 1, "r", ".")', 'test');
  Test({LINENUM}37007, 'StringPad("test", 2, "r", ".")', 'test');
  Test({LINENUM}37008, 'StringPad("test", 3, "r", ".")', 'test');
  Test({LINENUM}37009, 'StringPad("test", 4, "r", ".")', 'test');
  Test({LINENUM}37010, 'StringPad("test", 5, "r", ".")', '.test');
  Test({LINENUM}37011, 'StringPad("test", 6, "r", ".")', '..test');
  Test({LINENUM}37012, 'StringPad("test", 7, "r", ".")', '...test');
  Test({LINENUM}37013, 'StringPad("test", 8, "r", ".")', '....test');
  Test({LINENUM}37014, 'StringPad("test", 9, "r", ".")', '.....test');
  Test({LINENUM}37015, 'StringPad("test", 10, "r", ".")', '......test');

  Test({LINENUM}37017, 'StringPad("test", 0, "c", ".")', 'test');
  Test({LINENUM}37018, 'StringPad("test", 1, "c", ".")', 'test');
  Test({LINENUM}37019, 'StringPad("test", 2, "c", ".")', 'test');
  Test({LINENUM}37020, 'StringPad("test", 3, "c", ".")', 'test');
  Test({LINENUM}37021, 'StringPad("test", 4, "c", ".")', 'test');
  Test({LINENUM}37022, 'StringPad("test", 5, "c", ".")', 'test.');
  Test({LINENUM}37023, 'StringPad("test", 6, "c", ".")', '.test.');
  Test({LINENUM}37024, 'StringPad("test", 7, "c", ".")', '.test..');
  Test({LINENUM}37025, 'StringPad("test", 8, "c", ".")', '..test..');
  Test({LINENUM}37026, 'StringPad("test", 9, "c", ".")', '..test...');
  Test({LINENUM}37027, 'StringPad("test", 10, "c", ".")', '...test...');

  Test({LINENUM}37029, 'StringPad("test", 10, "c", "..")', failure, 'A character was expected as argument 4, but ".." was given.');

  Test({LINENUM}37031, 'StringPad("", 10, "l", ".")', '..........');
  Test({LINENUM}37032, 'StringPad("", 11, "l", ".")', '...........');
  Test({LINENUM}37033, 'StringPad("", 10, "r", ".")', '..........');
  Test({LINENUM}37034, 'StringPad("", 11, "r", ".")', '...........');
  Test({LINENUM}37035, 'StringPad("", 10, "c", ".")', '..........');
  Test({LINENUM}37036, 'StringPad("", 11, "c", ".")', '...........');


  //
  // Transformations
  //

  // Case conversion

  Test({LINENUM}37045, 's ≔ "Luna Lovegood loves to care for magical creatures. And she does it well."',
    'Luna Lovegood loves to care for magical creatures. And she does it well.');

  Test({LINENUM}37048, 'UpperCase(s)', 'LUNA LOVEGOOD LOVES TO CARE FOR MAGICAL CREATURES. AND SHE DOES IT WELL.');

  Test({LINENUM}37050, 'LowerCase(s)', 'luna lovegood loves to care for magical creatures. and she does it well.');

  Test({LINENUM}37052, 'InvertCase(s)', 'lUNA lOVEGOOD LOVES TO CARE FOR MAGICAL CREATURES. aND SHE DOES IT WELL.');

  Test({LINENUM}37054, 'TitleCase(s)', 'Luna Lovegood Loves To Care For Magical Creatures. And She Does It Well.');

  Test({LINENUM}37056, 'SentenceCase(s)', 'Luna Lovegood loves to care for magical creatures. And she does it well.');
  Test({LINENUM}37057, 'SentenceCase(LowerCase(s))', 'Luna lovegood loves to care for magical creatures. And she does it well.');

  Test({LINENUM}37059, 'UpperCase("")', '');
  Test({LINENUM}37060, 'LowerCase("")', '');
  Test({LINENUM}37061, 'InvertCase("")', '');
  Test({LINENUM}37062, 'TitleCase("")', '');
  Test({LINENUM}37063, 'SentenceCase("")', '');

  Test({LINENUM}37065, 'SentenceCase("this is merely an example. it isn''t important! or is it? maybe, I wouldn''t know. many would care; however, I don''t care.")',
    'This is merely an example. It isn''t important! Or is it? Maybe, I wouldn''t know. Many would care; however, I don''t care.');

  Test({LINENUM}37068, 'SentenceCase("(most) people like dogs. (almost) everyone was there.")',
    '(Most) people like dogs. (Almost) everyone was there.');

  Test({LINENUM}37071, 'SentenceCase("wait... almost there!")', 'Wait... Almost there!');

  Test({LINENUM}37073, 'SentenceCase("no?! really?")', 'No?! Really?');
  Test({LINENUM}37074, 'SentenceCase("no‽ really?")', 'No‽ Really?');

  // Obfuscation

  Test({LINENUM}37078, 'rot13("Past the point of no return.")', 'Cnfg gur cbvag bs ab erghea.');
  Test({LINENUM}37079, 'rot13("Gur svany guerfubyq.")', 'The final threshold.');
  Test({LINENUM}37080, 'rot13(rot13("What warm, unspoken secrets will we learn?"))', 'What warm, unspoken secrets will we learn?');

  Test({LINENUM}37082, 'rot13("Sjung om igen med mig, vår kärlekssång.")', 'Fwhat bz vtra zrq zvt, iåe xäeyrxffåat.');

  Test({LINENUM}37084, 'rot13("")', '');

  Test({LINENUM}37086, 'rot13("∫sin(x)dx")', '∫fva(k)qk');

  // -

  Test({LINENUM}37090, 'Caesar("What raging fire shall flood the soul?", 10)',
    'Grkd bkqsxq psbo crkvv pvyyn dro cyev?');

  Test({LINENUM}37093, 'Caesar("What rich desire unlocks its door?", 15)',
    'Lwpi gxrw sthxgt jcadrzh xih sddg?');

  Test({LINENUM}37096, 'Caesar("What sweet seduction lies before us?", 2)',
    'Yjcv uyggv ugfwevkqp nkgu dghqtg wu?');

  Test({LINENUM}37099, 'Caesar("What raging fire shall flood the soul?", 10 + 26)',
    'Grkd bkqsxq psbo crkvv pvyyn dro cyev?');

  Test({LINENUM}37102, 'Caesar("What rich desire unlocks its door?", 15 + 26 + 26)',
    'Lwpi gxrw sthxgt jcadrzh xih sddg?');

  Test({LINENUM}37105, 'Caesar("What sweet seduction lies before us?", 2 + 26 + 26 + 26)',
    'Yjcv uyggv ugfwevkqp nkgu dghqtg wu?');

  Test({LINENUM}37108, 'Caesar(Caesar("What raging fire shall flood the soul?", 10), -10)',
    'What raging fire shall flood the soul?');

  Test({LINENUM}37111, 'Caesar(Caesar("What rich desire unlocks its door?", 15), -15)',
    'What rich desire unlocks its door?');

  Test({LINENUM}37114, 'Caesar(Caesar("What sweet seduction lies before us?", 2), -2)',
    'What sweet seduction lies before us?');

  Test({LINENUM}37117, 'Caesar("Och du må fly min blick, och frukta mig.", 5)',
    'Thm iz rå kqd rns gqnhp, thm kwzpyf rnl.');

  Test({LINENUM}37120, 'Caesar("Och du må fly min blick, och frukta mig.", 6)',
    'Uin ja så lre sot hroiq, uin lxaqzg som.');

  Test({LINENUM}37123, 'Caesar(Caesar("Och du må fly min blick, och frukta mig.", 6), -6)',
    'Och du må fly min blick, och frukta mig.');

  Test({LINENUM}37126, 'Caesar("", 10)', '');

  // -

  Test({LINENUM}37130, 'VigenèreEncode("And do I dream again?", "opera")',
    'Och dc M dfted ovezn?');

  Test({LINENUM}37133, 'VigenèreDecode(VigenèreEncode("And do I dream again?", "opera"), "opera")',
    'And do I dream again?');

  Test({LINENUM}37136, 'VigenèreEncode("Nu är sista gränsen nådd, och överstigen.", "opera")',
    'Bj är hmjto kiäbhie båhu, dgy ökiishxkvn.');

  Test({LINENUM}37139, 'VigenèreDecode(VigenèreEncode("Nu är sista gränsen nådd, och överstigen.", "opera"), "opera")',
    'Nu är sista gränsen nådd, och överstigen.');

  Test({LINENUM}37142, 'VigenèreEncode("And do I dream again?", "opera!")', failure, 'Invalid character in Vigenère key.');
  Test({LINENUM}37143, 'VigenèreEncode("And do I dream again?", "opera ghost")', failure, 'Invalid character in Vigenère key.');
  Test({LINENUM}37144, 'VigenèreEncode("And do I dream again?", "ändlös")', failure, 'Invalid character in Vigenère key.');

  Test({LINENUM}37146, 'VigenèreEncode("", "opera")', '');
  Test({LINENUM}37147, 'VigenèreDecode("", "opera")', '');

  Test({LINENUM}37149, 'VigenèreEncode("And do I dream again?", "")', failure, 'Vigenère key is empty.');
  Test({LINENUM}37150, 'VigenèreDecode("And do I dream again?", "")', failure, 'Vigenère key is empty.');


  //
  // The Format function
  //

  Test({LINENUM}37157, 'format("Welcome %1. You have %2 new message(s).", ''("Mr Weasley", 517))',
    'Welcome Mr Weasley. You have 517 new message(s).');

  Test({LINENUM}37160, 'format("Welcome %1. You have %2 new message(s), %1.", ''("Mr Weasley", 517))',
    'Welcome Mr Weasley. You have 517 new message(s), Mr Weasley.');

  Test({LINENUM}37163, 'format("There are %1 messages, %2%% of which are internal.", ''(517, 85))',
    'There are 517 messages, 85% of which are internal.');

  Test({LINENUM}37166, 'format("(%1, %2, %3)", ''(25, 36, 411))',
    '(25, 36, 411)');

  Test({LINENUM}37169, 'format("(%3, %2, %1)", ''(25, 36, 411))',
    '(411, 36, 25)');

  Test({LINENUM}37172, 'format("(%1, %2, %3) ~ (%3, %1, %2)", ''(25, 36, 411))',
    '(25, 36, 411) ~ (411, 25, 36)');

  Test({LINENUM}37175, 'format("B%1m%2", ''("oooooooo", "!!!!!!"))',
    'Boooooooom!!!!!!');

  Test({LINENUM}37178, 'format("B%1m%2", ''("oooooooo", "!!!!!!", "????"))',
    'Boooooooom!!!!!!');

  Test({LINENUM}37181, 'format("Welcome %1. You have %2 new message(s) and %3 new alert(s).", ''("Mr Weasley", 517))',
    failure, 'Format string references non-existing object.');

  Test({LINENUM}37184, 'format("Welcome %1. You have % new message(s).", ''("Mr Weasley", 517))',
    failure, 'Invalid format string.');

  Test({LINENUM}37187, 'format("Welcome!", ''())', 'Welcome!');

  Test({LINENUM}37189, 'format("Welcome!", ''(1, 2, 3))', 'Welcome!');

  Test({LINENUM}37191, 'format("%1", ''("Welcome!"))', 'Welcome!');

  Test({LINENUM}37193, 'format("%1%2%1", ''("Welcome!", "  "))', 'Welcome!  Welcome!');

  Test({LINENUM}37195, 'format("", ''())', '');
  Test({LINENUM}37196, 'format("", ''(1, 2, 3))', '');

  Test({LINENUM}37198, 'format("Is 1+1=2? Answer: %1", ''(1+1=2))',
    'Is 1+1=2? Answer: true');


  //
  // Character tests
  //

  TestCharType({LINENUM}37206, 'ChrIsLetter', 'GHNÖÅÉÏÔÂÑΓΒΘЧmbåñõéïγεφю');
  TestCharType({LINENUM}37207, 'ChrIsDigit', '75610');
  TestCharType({LINENUM}37208, 'ChrIsLetterOrDigit', 'GHNÖÅÉÏÔÂÑΓΒΘЧmbåñõéïγεφю75610');
  TestCharType({LINENUM}37209, 'ChrIsNumber', '75610½¼¾⅛ⅷ፹Ⅳ⑭〤⑽⒖㉑');
  TestCharType({LINENUM}37210, 'ChrIsPunctuation', '.,!?-;:()');
  TestCharType({LINENUM}37211, 'ChrIsSeparator', #32#$A0);
  TestCharType({LINENUM}37212, 'ChrIsWhitespace', #32#9#13#10#$A0);
  TestCharType({LINENUM}37213, 'ChrIsUpperCase', 'GHNÖÅÉÏÔÂÑΓΒΘЧ');
  TestCharType({LINENUM}37214, 'ChrIsLowerCase', 'mbåñõéïγεφю');
  TestCharType({LINENUM}37215, 'ChrIsSymbol', '∫∅∂⌬⌨');
  TestCharType({LINENUM}37216, 'ChrIsASCII', 'GHNmb75610.,!?-;:()'#32#9#13#10#1#2#7#24#27#28#31);
  TestCharType({LINENUM}37217, 'ChrIsControl', #9#13#10#1#2#7#24#27#28#31);

  Test({LINENUM}37219, 'ChrNumVal("0")', 0);
  Test({LINENUM}37220, 'ChrNumVal("1")', 1);
  Test({LINENUM}37221, 'ChrNumVal("2")', 2);
  Test({LINENUM}37222, 'ChrNumVal("3")', 3);
  Test({LINENUM}37223, 'ChrNumVal("4")', 4);
  Test({LINENUM}37224, 'ChrNumVal("5")', 5);
  Test({LINENUM}37225, 'ChrNumVal("6")', 6);
  Test({LINENUM}37226, 'ChrNumVal("7")', 7);
  Test({LINENUM}37227, 'ChrNumVal("8")', 8);
  Test({LINENUM}37228, 'ChrNumVal("9")', 9);

  Test({LINENUM}37230, 'ChrNumVal("½")', 1/2);
  Test({LINENUM}37231, 'ChrNumVal("¼")', 1/4);
  Test({LINENUM}37232, 'ChrNumVal("¾")', 3/4);
  Test({LINENUM}37233, 'ChrNumVal("⅛")', 1/8);

  Test({LINENUM}37235, 'ChrNumVal("Ⅳ")', 4);
  Test({LINENUM}37236, 'ChrNumVal("ⅷ")', 8);

  Test({LINENUM}37238, 'ChrNumVal("፹")', 80);

  Test({LINENUM}37240, 'ChrNumVal("〤")', 4);

  Test({LINENUM}37242, 'ChrNumVal("⑭")', 14);
  Test({LINENUM}37243, 'ChrNumVal("⑽")', 10);
  Test({LINENUM}37244, 'ChrNumVal("⒖")', 15);
  Test({LINENUM}37245, 'ChrNumVal("㉑")', 21);


  //
  // UCD functions
  //

  Test({LINENUM}37252, 'ChrName("A")', 'LATIN CAPITAL LETTER A');
  Test({LINENUM}37253, 'ChrName("B")', 'LATIN CAPITAL LETTER B');
  Test({LINENUM}37254, 'ChrName("C")', 'LATIN CAPITAL LETTER C');
  Test({LINENUM}37255, 'ChrName("D")', 'LATIN CAPITAL LETTER D');
  Test({LINENUM}37256, 'ChrName("E")', 'LATIN CAPITAL LETTER E');
  Test({LINENUM}37257, 'ChrName("F")', 'LATIN CAPITAL LETTER F');
  Test({LINENUM}37258, 'ChrName("G")', 'LATIN CAPITAL LETTER G');
  Test({LINENUM}37259, 'ChrName("H")', 'LATIN CAPITAL LETTER H');
  Test({LINENUM}37260, 'ChrName("I")', 'LATIN CAPITAL LETTER I');
  Test({LINENUM}37261, 'ChrName("J")', 'LATIN CAPITAL LETTER J');
  Test({LINENUM}37262, 'ChrName("K")', 'LATIN CAPITAL LETTER K');
  Test({LINENUM}37263, 'ChrName("L")', 'LATIN CAPITAL LETTER L');
  Test({LINENUM}37264, 'ChrName("M")', 'LATIN CAPITAL LETTER M');
  Test({LINENUM}37265, 'ChrName("N")', 'LATIN CAPITAL LETTER N');
  Test({LINENUM}37266, 'ChrName("O")', 'LATIN CAPITAL LETTER O');
  Test({LINENUM}37267, 'ChrName("P")', 'LATIN CAPITAL LETTER P');
  Test({LINENUM}37268, 'ChrName("Q")', 'LATIN CAPITAL LETTER Q');
  Test({LINENUM}37269, 'ChrName("R")', 'LATIN CAPITAL LETTER R');
  Test({LINENUM}37270, 'ChrName("S")', 'LATIN CAPITAL LETTER S');
  Test({LINENUM}37271, 'ChrName("T")', 'LATIN CAPITAL LETTER T');
  Test({LINENUM}37272, 'ChrName("U")', 'LATIN CAPITAL LETTER U');
  Test({LINENUM}37273, 'ChrName("V")', 'LATIN CAPITAL LETTER V');
  Test({LINENUM}37274, 'ChrName("W")', 'LATIN CAPITAL LETTER W');
  Test({LINENUM}37275, 'ChrName("X")', 'LATIN CAPITAL LETTER X');
  Test({LINENUM}37276, 'ChrName("Y")', 'LATIN CAPITAL LETTER Y');
  Test({LINENUM}37277, 'ChrName("Z")', 'LATIN CAPITAL LETTER Z');

  Test({LINENUM}37279, 'ChrName("a")', 'LATIN SMALL LETTER A');
  Test({LINENUM}37280, 'ChrName("b")', 'LATIN SMALL LETTER B');
  Test({LINENUM}37281, 'ChrName("c")', 'LATIN SMALL LETTER C');
  Test({LINENUM}37282, 'ChrName("d")', 'LATIN SMALL LETTER D');
  Test({LINENUM}37283, 'ChrName("e")', 'LATIN SMALL LETTER E');
  Test({LINENUM}37284, 'ChrName("f")', 'LATIN SMALL LETTER F');
  Test({LINENUM}37285, 'ChrName("g")', 'LATIN SMALL LETTER G');
  Test({LINENUM}37286, 'ChrName("h")', 'LATIN SMALL LETTER H');
  Test({LINENUM}37287, 'ChrName("i")', 'LATIN SMALL LETTER I');
  Test({LINENUM}37288, 'ChrName("j")', 'LATIN SMALL LETTER J');
  Test({LINENUM}37289, 'ChrName("k")', 'LATIN SMALL LETTER K');
  Test({LINENUM}37290, 'ChrName("l")', 'LATIN SMALL LETTER L');
  Test({LINENUM}37291, 'ChrName("m")', 'LATIN SMALL LETTER M');
  Test({LINENUM}37292, 'ChrName("n")', 'LATIN SMALL LETTER N');
  Test({LINENUM}37293, 'ChrName("o")', 'LATIN SMALL LETTER O');
  Test({LINENUM}37294, 'ChrName("p")', 'LATIN SMALL LETTER P');
  Test({LINENUM}37295, 'ChrName("q")', 'LATIN SMALL LETTER Q');
  Test({LINENUM}37296, 'ChrName("r")', 'LATIN SMALL LETTER R');
  Test({LINENUM}37297, 'ChrName("s")', 'LATIN SMALL LETTER S');
  Test({LINENUM}37298, 'ChrName("t")', 'LATIN SMALL LETTER T');
  Test({LINENUM}37299, 'ChrName("u")', 'LATIN SMALL LETTER U');
  Test({LINENUM}37300, 'ChrName("v")', 'LATIN SMALL LETTER V');
  Test({LINENUM}37301, 'ChrName("w")', 'LATIN SMALL LETTER W');
  Test({LINENUM}37302, 'ChrName("x")', 'LATIN SMALL LETTER X');
  Test({LINENUM}37303, 'ChrName("y")', 'LATIN SMALL LETTER Y');
  Test({LINENUM}37304, 'ChrName("z")', 'LATIN SMALL LETTER Z');

  Test({LINENUM}37306, 'ChrName("Å")', 'LATIN CAPITAL LETTER A WITH RING ABOVE');
  Test({LINENUM}37307, 'ChrName("Ä")', 'LATIN CAPITAL LETTER A WITH DIAERESIS');
  Test({LINENUM}37308, 'ChrName("Ö")', 'LATIN CAPITAL LETTER O WITH DIAERESIS');
  Test({LINENUM}37309, 'ChrName("å")', 'LATIN SMALL LETTER A WITH RING ABOVE');
  Test({LINENUM}37310, 'ChrName("ä")', 'LATIN SMALL LETTER A WITH DIAERESIS');
  Test({LINENUM}37311, 'ChrName("ö")', 'LATIN SMALL LETTER O WITH DIAERESIS');
  Test({LINENUM}37312, 'ChrName("ï")', 'LATIN SMALL LETTER I WITH DIAERESIS');
  Test({LINENUM}37313, 'ChrName("ñ")', 'LATIN SMALL LETTER N WITH TILDE');
  Test({LINENUM}37314, 'ChrName("ô")', 'LATIN SMALL LETTER O WITH CIRCUMFLEX');
  Test({LINENUM}37315, 'ChrName("é")', 'LATIN SMALL LETTER E WITH ACUTE');

  Test({LINENUM}37317, 'ChrName("Γ")', 'GREEK CAPITAL LETTER GAMMA');
  Test({LINENUM}37318, 'ChrName("Λ")', 'GREEK CAPITAL LETTER LAMDA');
  Test({LINENUM}37319, 'ChrName("Δ")', 'GREEK CAPITAL LETTER DELTA');
  Test({LINENUM}37320, 'ChrName("Π")', 'GREEK CAPITAL LETTER PI');
  Test({LINENUM}37321, 'ChrName("Ω")', 'GREEK CAPITAL LETTER OMEGA');
  Test({LINENUM}37322, 'ChrName("Ξ")', 'GREEK CAPITAL LETTER XI');
  Test({LINENUM}37323, 'ChrName("α")', 'GREEK SMALL LETTER ALPHA');
  Test({LINENUM}37324, 'ChrName("β")', 'GREEK SMALL LETTER BETA');
  Test({LINENUM}37325, 'ChrName("φ")', 'GREEK SMALL LETTER PHI');
  Test({LINENUM}37326, 'ChrName("π")', 'GREEK SMALL LETTER PI');
  Test({LINENUM}37327, 'ChrName("ξ")', 'GREEK SMALL LETTER XI');
  Test({LINENUM}37328, 'ChrName("μ")', 'GREEK SMALL LETTER MU');

  Test({LINENUM}37330, 'ChrName("Ѩ")', 'CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS');
  Test({LINENUM}37331, 'ChrName("Խ")', 'ARMENIAN CAPITAL LETTER XEH');
  Test({LINENUM}37332, 'ChrName("ל")', 'HEBREW LETTER LAMED');
  Test({LINENUM}37333, 'ChrName("س")', 'ARABIC LETTER SEEN');
  Test({LINENUM}37334, 'ChrName("ޘ")', 'THAANA LETTER TTAA');
  Test({LINENUM}37335, 'ChrName("߷")', 'NKO SYMBOL GBAKURUNEN');
  Test({LINENUM}37336, 'ChrName("औ")', 'DEVANAGARI LETTER AU');
  Test({LINENUM}37337, 'ChrName("ঊ")', 'BENGALI LETTER UU');
  Test({LINENUM}37338, 'ChrName("ஊ")', 'TAMIL LETTER UU');
  Test({LINENUM}37339, 'ChrName("ಊ")', 'KANNADA LETTER UU');
  Test({LINENUM}37340, 'ChrName("ഊ")', 'MALAYALAM LETTER UU');
  Test({LINENUM}37341, 'ChrName("ඖ")', 'SINHALA LETTER AUYANNA');
  Test({LINENUM}37342, 'ChrName("ช")', 'THAI CHARACTER CHO CHANG');
  Test({LINENUM}37343, 'ChrName("༒")', 'TIBETAN MARK RGYA GRAM SHAD');
  Test({LINENUM}37344, 'ChrName("ማ")', 'ETHIOPIC SYLLABLE MAA');
  Test({LINENUM}37345, 'ChrName("Ꮚ")', 'CHEROKEE LETTER QUU');
  Test({LINENUM}37346, 'ChrName("ᚠ")', 'RUNIC LETTER FEHU FEOH FE F');
  Test({LINENUM}37347, 'ChrName("៚")', 'KHMER SIGN KOOMUUT');
  Test({LINENUM}37348, 'ChrName("ᠿ")', 'MONGOLIAN LETTER ZRA');
  Test({LINENUM}37349, 'ChrName("⡨")', 'BRAILLE PATTERN DOTS-467');
  Test({LINENUM}37350, 'ChrName("ꕥ")', 'VAI SYLLABLE ZHA');

  Test({LINENUM}37352, 'ChrName("0")', 'DIGIT ZERO');
  Test({LINENUM}37353, 'ChrName("1")', 'DIGIT ONE');
  Test({LINENUM}37354, 'ChrName("2")', 'DIGIT TWO');
  Test({LINENUM}37355, 'ChrName("3")', 'DIGIT THREE');
  Test({LINENUM}37356, 'ChrName("4")', 'DIGIT FOUR');
  Test({LINENUM}37357, 'ChrName("5")', 'DIGIT FIVE');
  Test({LINENUM}37358, 'ChrName("6")', 'DIGIT SIX');
  Test({LINENUM}37359, 'ChrName("7")', 'DIGIT SEVEN');
  Test({LINENUM}37360, 'ChrName("8")', 'DIGIT EIGHT');
  Test({LINENUM}37361, 'ChrName("9")', 'DIGIT NINE');

  Test({LINENUM}37363, 'ChrName("Ⅳ")', 'ROMAN NUMERAL FOUR');
  Test({LINENUM}37364, 'ChrName("ⅷ")', 'SMALL ROMAN NUMERAL EIGHT');

  Test({LINENUM}37366, 'ChrName("㉑")', 'CIRCLED NUMBER TWENTY ONE');

  Test({LINENUM}37368, 'ChrName(" ")', 'SPACE');
  Test({LINENUM}37369, 'ChrName(".")', 'FULL STOP');
  Test({LINENUM}37370, 'ChrName(",")', 'COMMA');
  Test({LINENUM}37371, 'ChrName(":")', 'COLON');
  Test({LINENUM}37372, 'ChrName(";")', 'SEMICOLON');
  Test({LINENUM}37373, 'ChrName("!")', 'EXCLAMATION MARK');
  Test({LINENUM}37374, 'ChrName("?")', 'QUESTION MARK');
  Test({LINENUM}37375, 'ChrName("-")', 'HYPHEN-MINUS');
  Test({LINENUM}37376, 'ChrName("–")', 'EN DASH');
  Test({LINENUM}37377, 'ChrName("_")', 'LOW LINE');
  Test({LINENUM}37378, 'ChrName("@")', 'COMMERCIAL AT');

  Test({LINENUM}37380, 'ChrName("µ")', 'MICRO SIGN');

  Test({LINENUM}37382, 'ChrName("""")', 'QUOTATION MARK');
  Test({LINENUM}37383, 'ChrName("''")', 'APOSTROPHE');
  Test({LINENUM}37384, 'ChrName("+")', 'PLUS SIGN');
  Test({LINENUM}37385, 'ChrName("−")', 'MINUS SIGN');
  Test({LINENUM}37386, 'ChrName("*")', 'ASTERISK');
  Test({LINENUM}37387, 'ChrName("/")', 'SOLIDUS');
  Test({LINENUM}37388, 'ChrName("\")', 'REVERSE SOLIDUS');

  Test({LINENUM}37390, 'ChrName("&")', 'AMPERSAND');
  Test({LINENUM}37391, 'ChrName("%")', 'PERCENT SIGN');
  Test({LINENUM}37392, 'ChrName("½")', 'VULGAR FRACTION ONE HALF');
  Test({LINENUM}37393, 'ChrName("¾")', 'VULGAR FRACTION THREE QUARTERS');
  Test({LINENUM}37394, 'ChrName("⅛")', 'VULGAR FRACTION ONE EIGHTH');
  Test({LINENUM}37395, 'ChrName("°")', 'DEGREE SIGN');
  Test({LINENUM}37396, 'ChrName("©")', 'COPYRIGHT SIGN');

  Test({LINENUM}37398, 'ChrName("≈")', 'ALMOST EQUAL TO');
  Test({LINENUM}37399, 'ChrName("×")', 'MULTIPLICATION SIGN');
  Test({LINENUM}37400, 'ChrName("√")', 'SQUARE ROOT');
  Test({LINENUM}37401, 'ChrName("∫")', 'INTEGRAL');
  Test({LINENUM}37402, 'ChrName("∬")', 'DOUBLE INTEGRAL');
  Test({LINENUM}37403, 'ChrName("∭")', 'TRIPLE INTEGRAL');
  Test({LINENUM}37404, 'ChrName("∑")', 'N-ARY SUMMATION');
  Test({LINENUM}37405, 'ChrName("∏")', 'N-ARY PRODUCT');
  Test({LINENUM}37406, 'ChrName("∅")', 'EMPTY SET');
  Test({LINENUM}37407, 'ChrName("∂")', 'PARTIAL DIFFERENTIAL');
  Test({LINENUM}37408, 'ChrName("∇")', 'NABLA');
  Test({LINENUM}37409, 'ChrName("∈")', 'ELEMENT OF');
  Test({LINENUM}37410, 'ChrName("⊂")', 'SUBSET OF');
  Test({LINENUM}37411, 'ChrName("∪")', 'UNION');
  Test({LINENUM}37412, 'ChrName("∩")', 'INTERSECTION');
  Test({LINENUM}37413, 'ChrName("∖")', 'SET MINUS');
  Test({LINENUM}37414, 'ChrName("∁")', 'COMPLEMENT');
  Test({LINENUM}37415, 'ChrName("∧")', 'LOGICAL AND');
  Test({LINENUM}37416, 'ChrName("∨")', 'LOGICAL OR');
  Test({LINENUM}37417, 'ChrName("¬")', 'NOT SIGN');
  Test({LINENUM}37418, 'ChrName("∴")', 'THEREFORE');
  Test({LINENUM}37419, 'ChrName("∎")', 'END OF PROOF');
  Test({LINENUM}37420, 'ChrName("≤")', 'LESS-THAN OR EQUAL TO');
  Test({LINENUM}37421, 'ChrName("≥")', 'GREATER-THAN OR EQUAL TO');
  Test({LINENUM}37422, 'ChrName("∃")', 'THERE EXISTS');
  Test({LINENUM}37423, 'ChrName("∀")', 'FOR ALL');
  Test({LINENUM}37424, 'ChrName("∞")', 'INFINITY');

  Test({LINENUM}37426, 'ChrName("ℕ")', 'DOUBLE-STRUCK CAPITAL N');
  Test({LINENUM}37427, 'ChrName("ℤ")', 'DOUBLE-STRUCK CAPITAL Z');
  Test({LINENUM}37428, 'ChrName("ℚ")', 'DOUBLE-STRUCK CAPITAL Q');
  Test({LINENUM}37429, 'ChrName("ℝ")', 'DOUBLE-STRUCK CAPITAL R');
  Test({LINENUM}37430, 'ChrName("ℂ")', 'DOUBLE-STRUCK CAPITAL C');
  Test({LINENUM}37431, 'ChrName("ℍ")', 'DOUBLE-STRUCK CAPITAL H');

  Test({LINENUM}37433, 'ChrName("⚘")', 'FLOWER');
  Test({LINENUM}37434, 'ChrName("⌬")', 'BENZENE RING');
  Test({LINENUM}37435, 'ChrName("⌨")', 'KEYBOARD');
  Test({LINENUM}37436, 'ChrName("⌛")', 'HOURGLASS');
  Test({LINENUM}37437, 'ChrName("☘")', 'SHAMROCK');

  Test({LINENUM}37439, 'ChrName("cat")', failure, 'A character was expected as argument 1, but "cat" was given.');
  Test({LINENUM}37440, 'ChrName("")', failure, 'A character was expected as argument 1, but "" was given.');

  Test({LINENUM}37442, 'ChrBlock("A")', 'Basic Latin');
  Test({LINENUM}37443, 'ChrBlock("b")', 'Basic Latin');
  Test({LINENUM}37444, 'ChrBlock("3")', 'Basic Latin');
  Test({LINENUM}37445, 'ChrBlock("!")', 'Basic Latin');
  Test({LINENUM}37446, 'ChrBlock("ñ")', 'Latin-1 Supplement');
  Test({LINENUM}37447, 'ChrBlock("–")', 'General Punctuation');
  Test({LINENUM}37448, 'ChrBlock("Λ")', 'Greek and Coptic');
  Test({LINENUM}37449, 'ChrBlock("Ѩ")', 'Cyrillic');
  Test({LINENUM}37450, 'ChrBlock("Խ")', 'Armenian');
  Test({LINENUM}37451, 'ChrBlock("ל")', 'Hebrew');
  Test({LINENUM}37452, 'ChrBlock("س")', 'Arabic');
  Test({LINENUM}37453, 'ChrBlock("ޘ")', 'Thaana');
  Test({LINENUM}37454, 'ChrBlock("߷")', 'NKo');
  Test({LINENUM}37455, 'ChrBlock("औ")', 'Devanagari');
  Test({LINENUM}37456, 'ChrBlock("ঊ")', 'Bengali');
  Test({LINENUM}37457, 'ChrBlock("ஊ")', 'Tamil');
  Test({LINENUM}37458, 'ChrBlock("ಊ")', 'Kannada');
  Test({LINENUM}37459, 'ChrBlock("ഊ")', 'Malayalam');
  Test({LINENUM}37460, 'ChrBlock("ඖ")', 'Sinhala');
  Test({LINENUM}37461, 'ChrBlock("ช")', 'Thai');
  Test({LINENUM}37462, 'ChrBlock("༒")', 'Tibetan');
  Test({LINENUM}37463, 'ChrBlock("ማ")', 'Ethiopic');
  Test({LINENUM}37464, 'ChrBlock("Ꮚ")', 'Cherokee');
  Test({LINENUM}37465, 'ChrBlock("ᚠ")', 'Runic');
  Test({LINENUM}37466, 'ChrBlock("៚")', 'Khmer');
  Test({LINENUM}37467, 'ChrBlock("ᠿ")', 'Mongolian');
  Test({LINENUM}37468, 'ChrBlock("⡨")', 'Braille Patterns');
  Test({LINENUM}37469, 'ChrBlock("ꕥ")', 'Vai');
  Test({LINENUM}37470, 'ChrBlock("Ⅳ")', 'Number Forms');
  Test({LINENUM}37471, 'ChrBlock("−")', 'Mathematical Operators');
  Test({LINENUM}37472, 'ChrBlock("∫")', 'Mathematical Operators');
  Test({LINENUM}37473, 'ChrBlock("∑")', 'Mathematical Operators');
  Test({LINENUM}37474, 'ChrBlock("∂")', 'Mathematical Operators');
  Test({LINENUM}37475, 'ChrBlock("∧")', 'Mathematical Operators');
  Test({LINENUM}37476, 'ChrBlock("≤")', 'Mathematical Operators');
  Test({LINENUM}37477, 'ChrBlock("∀")', 'Mathematical Operators');
  Test({LINENUM}37478, 'ChrBlock("∞")', 'Mathematical Operators');
  Test({LINENUM}37479, 'ChrBlock("ℕ")', 'Letterlike Symbols');
  Test({LINENUM}37480, 'ChrBlock("ℝ")', 'Letterlike Symbols');
  Test({LINENUM}37481, 'ChrBlock("ℂ")', 'Letterlike Symbols');
  Test({LINENUM}37482, 'ChrBlock("⚘")', 'Miscellaneous Symbols');
  Test({LINENUM}37483, 'ChrBlock("☘")', 'Miscellaneous Symbols');
  Test({LINENUM}37484, 'ChrBlock("⌨")', 'Miscellaneous Technical');
  Test({LINENUM}37485, 'ChrBlock("⌬")', 'Miscellaneous Technical');
  Test({LINENUM}37486, 'ChrBlock("▉")', 'Block Elements');
  Test({LINENUM}37487, 'ChrBlock("▲")', 'Geometric Shapes');

  Test({LINENUM}37489, '#ChrBlocks() ≥ 262', True);
  Test({LINENUM}37490, 'contains(ChrBlocks(), "Basic Latin")', True);
  Test({LINENUM}37491, 'contains(ChrBlocks(), "Latin-1 Supplement")', True);
  Test({LINENUM}37492, 'contains(ChrBlocks(), "General Punctuation")', True);
  Test({LINENUM}37493, 'contains(ChrBlocks(), "Greek and Coptic")', True);
  Test({LINENUM}37494, 'contains(ChrBlocks(), "Cyrillic")', True);
  Test({LINENUM}37495, 'contains(ChrBlocks(), "Armenian")', True);
  Test({LINENUM}37496, 'contains(ChrBlocks(), "Hebrew")', True);
  Test({LINENUM}37497, 'contains(ChrBlocks(), "Arabic")', True);
  Test({LINENUM}37498, 'contains(ChrBlocks(), "Tamil")', True);
  Test({LINENUM}37499, 'contains(ChrBlocks(), "Thai")', True);
  Test({LINENUM}37500, 'contains(ChrBlocks(), "Runic")', True);
  Test({LINENUM}37501, 'contains(ChrBlocks(), "Mongolian")', True);
  Test({LINENUM}37502, 'contains(ChrBlocks(), "Braille Patterns")', True);
  Test({LINENUM}37503, 'contains(ChrBlocks(), "Number Forms")', True);
  Test({LINENUM}37504, 'contains(ChrBlocks(), "Mathematical Operators")', True);
  Test({LINENUM}37505, 'contains(ChrBlocks(), "Letterlike Symbols")', True);
  Test({LINENUM}37506, 'contains(ChrBlocks(), "Miscellaneous Symbols")', True);
  Test({LINENUM}37507, 'contains(ChrBlocks(), "Miscellaneous Technical")', True);
  Test({LINENUM}37508, 'contains(ChrBlocks(), "Block Elements")', True);
  Test({LINENUM}37509, 'contains(ChrBlocks(), "Geometric Shapes")', True);
  Test({LINENUM}37510, '¬contains(ChrBlocks(), "Supplemental Death Eater Lullaby Symbols 2")', True);

  Test({LINENUM}37512, 'ChrBlockRange("Basic Latin")',
    TAlgosimStructure.CreateWithValue(
      ['start', 'end'],
      [ASOInt(0), ASOInt(127)]
    )
  );

  Test({LINENUM}37519, 'ChrBlockRange("Mathematical Operators")',
    TAlgosimStructure.CreateWithValue(
      ['start', 'end'],
      [ASOInt(8704), ASOInt(8959)]
    )
  );

  Test({LINENUM}37526, 'ord("'#0'")', 0);
  Test({LINENUM}37527, 'chr(0)', #0);

  Test({LINENUM}37529, 'ChrName(chr(0))', '<control> (NULL)');

  Test({LINENUM}37531, 'ord("A")', 65);
  Test({LINENUM}37532, 'chr(65)', 'A');

  Test({LINENUM}37534, 'ord("∫")', $222B);
  Test({LINENUM}37535, 'chr(16#222B)', '∫');


  //
  // Word wrapping
  //

  Test({LINENUM}37542, 's ≔ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.');

  Test({LINENUM}37545, 'WordWrap(s, 10000)',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.');

  Test({LINENUM}37548, 'WordWrap(s, 231)',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.');

  Test({LINENUM}37551, 'WordWrap(s, 230)',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo'#13#10'consequat.');

  Test({LINENUM}37554, 'WordWrap(s)',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor'#13#10 +
    'incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis'#13#10 +
    'nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.');

  Test({LINENUM}37559, 'WordWrap(s, 80)',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor'#13#10 +
    'incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis'#13#10 +
    'nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.');

  Test({LINENUM}37564, 'WordWrap(s, 70)',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do'#13#10 +
    'eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad'#13#10 +
    'minim veniam, quis nostrud exercitation ullamco laboris nisi ut'#13#10 +
    'aliquip ex ea commodo consequat.');

  Test({LINENUM}37570, 'WordWrap(s, 60)',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed'#13#10 +
    'do eiusmod tempor incididunt ut labore et dolore magna'#13#10 +
    'aliqua. Ut enim ad minim veniam, quis nostrud exercitation'#13#10 +
    'ullamco laboris nisi ut aliquip ex ea commodo consequat.');

  Test({LINENUM}37576, 'WordWrap(s, 50)',
    'Lorem ipsum dolor sit amet, consectetur adipiscing'#13#10 +
    'elit, sed do eiusmod tempor incididunt ut labore'#13#10 +
    'et dolore magna aliqua. Ut enim ad minim veniam,'#13#10 +
    'quis nostrud exercitation ullamco laboris nisi ut'#13#10 +
    'aliquip ex ea commodo consequat.');

  Test({LINENUM}37583, 'WordWrap(s, 40)',
    'Lorem ipsum dolor sit amet, consectetur'#13#10 +
    'adipiscing elit, sed do eiusmod tempor'#13#10 +
    'incididunt ut labore et dolore magna'#13#10 +
    'aliqua. Ut enim ad minim veniam, quis'#13#10 +
    'nostrud exercitation ullamco laboris'#13#10 +
    'nisi ut aliquip ex ea commodo consequat.');

  Test({LINENUM}37591, 'WordWrap(s, 30)',
    'Lorem ipsum dolor sit amet,'#13#10 +
    'consectetur adipiscing elit,'#13#10 +
    'sed do eiusmod tempor'#13#10 +
    'incididunt ut labore et dolore'#13#10 +
    'magna aliqua. Ut enim ad minim'#13#10 +
    'veniam, quis nostrud'#13#10 +
    'exercitation ullamco laboris'#13#10 +
    'nisi ut aliquip ex ea commodo'#13#10 +
    'consequat.');

  Test({LINENUM}37602, 'WordWrap(s, 20)',
    'Lorem ipsum dolor'#13#10 +
    'sit amet,'#13#10 +
    'consectetur'#13#10 +
    'adipiscing elit, sed'#13#10 +
    'do eiusmod tempor'#13#10 +
    'incididunt ut labore'#13#10 +
    'et dolore magna'#13#10 +
    'aliqua. Ut enim ad'#13#10 +
    'minim veniam, quis'#13#10 +
    'nostrud exercitation'#13#10 +
    'ullamco laboris nisi'#13#10 +
    'ut aliquip ex ea'#13#10 +
    'commodo consequat.');

  Test({LINENUM}37617, 'WordWrap(s, 10)',
    'Lorem'#13#10 +
    'ipsum'#13#10 +
    'dolor sit'#13#10 +
    'amet,'#13#10 +
    'consectetu'#13#10 +
    'r'#13#10 +
    'adipiscing'#13#10 +
    'elit, sed'#13#10 +
    'do eiusmod'#13#10 +
    'tempor'#13#10 +
    'incididunt'#13#10 +
    'ut labore'#13#10 +
    'et dolore'#13#10 +
    'magna'#13#10 +
    'aliqua. Ut'#13#10 +
    'enim ad'#13#10 +
    'minim'#13#10 +
    'veniam,'#13#10 +
    'quis'#13#10 +
    'nostrud'#13#10 +
    'exercitati'#13#10 +
    'on ullamco'#13#10 +
    'laboris'#13#10 +
    'nisi ut'#13#10 +
    'aliquip ex'#13#10 +
    'ea commodo'#13#10 +
    'consequat.');

  Test({LINENUM}37646, 'WordWrap(s, 1)',
    'L'#13#10+'o'#13#10+'r'#13#10+'e'#13#10+'m'#13#10+'i'#13#10+'p'#13#10+'s'#13#10+'u'#13#10+'m'#13#10+'d'#13#10+'o'#13#10+'l'#13#10+'o'#13#10+'r'#13#10+'s'#13#10+'i'#13#10+'t'#13#10+'a'#13#10+'m'#13#10+'e'#13#10+'t'#13#10+','#13#10+'c'#13#10+'o'#13#10+'n'#13#10+'s'#13#10+'e'#13#10+'c'#13#10+'t'#13#10+'e'#13#10+'t'#13#10+'u'#13#10+'r'#13#10+'a'#13#10+
    'd'#13#10+'i'#13#10+'p'#13#10+'i'#13#10+'s'#13#10+'c'#13#10+'i'#13#10+'n'#13#10+'g'#13#10+'e'#13#10+'l'#13#10+'i'#13#10+'t'#13#10+','#13#10+'s'#13#10+'e'#13#10+'d'#13#10+'d'#13#10+'o'#13#10+'e'#13#10+'i'#13#10+'u'#13#10+'s'#13#10+'m'#13#10+'o'#13#10+'d'#13#10+'t'#13#10+'e'#13#10+'m'#13#10+'p'#13#10+'o'#13#10+'r'#13#10+'i'#13#10+'n'#13#10+'c'#13#10+
    'i'#13#10+'d'#13#10+'i'#13#10+'d'#13#10+'u'#13#10+'n'#13#10+'t'#13#10+'u'#13#10+'t'#13#10+'l'#13#10+'a'#13#10+'b'#13#10+'o'#13#10+'r'#13#10+'e'#13#10+'e'#13#10+'t'#13#10+'d'#13#10+'o'#13#10+'l'#13#10+'o'#13#10+'r'#13#10+'e'#13#10+'m'#13#10+'a'#13#10+'g'#13#10+'n'#13#10+'a'#13#10+'a'#13#10+'l'#13#10+'i'#13#10+'q'#13#10+'u'#13#10+'a'#13#10+'.'#13#10+
    'U'#13#10+'t'#13#10+'e'#13#10+'n'#13#10+'i'#13#10+'m'#13#10+'a'#13#10+'d'#13#10+'m'#13#10+'i'#13#10+'n'#13#10+'i'#13#10+'m'#13#10+'v'#13#10+'e'#13#10+'n'#13#10+'i'#13#10+'a'#13#10+'m'#13#10+','#13#10+'q'#13#10+'u'#13#10+'i'#13#10+'s'#13#10+'n'#13#10+'o'#13#10+'s'#13#10+'t'#13#10+'r'#13#10+'u'#13#10+'d'#13#10+'e'#13#10+'x'#13#10+'e'#13#10+'r'#13#10+
    'c'#13#10+'i'#13#10+'t'#13#10+'a'#13#10+'t'#13#10+'i'#13#10+'o'#13#10+'n'#13#10+'u'#13#10+'l'#13#10+'l'#13#10+'a'#13#10+'m'#13#10+'c'#13#10+'o'#13#10+'l'#13#10+'a'#13#10+'b'#13#10+'o'#13#10+'r'#13#10+'i'#13#10+'s'#13#10+'n'#13#10+'i'#13#10+'s'#13#10+'i'#13#10+'u'#13#10+'t'#13#10+'a'#13#10+'l'#13#10+'i'#13#10+'q'#13#10+'u'#13#10+'i'#13#10+'p'#13#10+
    'e'#13#10+'x'#13#10+'e'#13#10+'a'#13#10+'c'#13#10+'o'#13#10+'m'#13#10+'m'#13#10+'o'#13#10+'d'#13#10+'o'#13#10+'c'#13#10+'o'#13#10+'n'#13#10+'s'#13#10+'e'#13#10+'q'#13#10+'u'#13#10+'a'#13#10+'t'#13#10+'.');

  Test({LINENUM}37654, 'WordWrap(s, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');

  Test({LINENUM}37656, 'WordWrap("Word wrapping is great fun.", 27)', 'Word wrapping is great fun.');
  Test({LINENUM}37657, 'WordWrap("Word wrapping is great fun.", 26)', 'Word wrapping is great'#13#10'fun.');

  Test({LINENUM}37659, 'WordWrap("Word wrapping is great fun, isn''t it?", 37)', 'Word wrapping is great fun, isn''t it?');
  Test({LINENUM}37660, 'WordWrap("Word wrapping is great fun, isn''t it?", 36)', 'Word wrapping is great fun, isn''t'#13#10'it?');
  Test({LINENUM}37661, 'WordWrap("Word wrapping is great fun, isn''t it?", 35)', 'Word wrapping is great fun, isn''t'#13#10'it?');
  Test({LINENUM}37662, 'WordWrap("Word wrapping is great fun, isn''t it?", 34)', 'Word wrapping is great fun, isn''t'#13#10'it?');
  Test({LINENUM}37663, 'WordWrap("Word wrapping is great fun, isn''t it?", 33)', 'Word wrapping is great fun, isn''t'#13#10'it?');
  Test({LINENUM}37664, 'WordWrap("Word wrapping is great fun, isn''t it?", 32)', 'Word wrapping is great fun,'#13#10'isn''t it?');
  Test({LINENUM}37665, 'WordWrap("Word wrapping is great fun, isn''t it?", 31)', 'Word wrapping is great fun,'#13#10'isn''t it?');
  Test({LINENUM}37666, 'WordWrap("Word wrapping is great fun, isn''t it?", 30)', 'Word wrapping is great fun,'#13#10'isn''t it?');
  Test({LINENUM}37667, 'WordWrap("Word wrapping is great fun, isn''t it?", 29)', 'Word wrapping is great fun,'#13#10'isn''t it?');
  Test({LINENUM}37668, 'WordWrap("Word wrapping is great fun, isn''t it?", 28)', 'Word wrapping is great fun,'#13#10'isn''t it?');
  Test({LINENUM}37669, 'WordWrap("Word wrapping is great fun, isn''t it?", 27)', 'Word wrapping is great fun,'#13#10'isn''t it?');
  Test({LINENUM}37670, 'WordWrap("Word wrapping is great fun, isn''t it?", 26)', 'Word wrapping is great'#13#10'fun, isn''t it?');
  Test({LINENUM}37671, 'WordWrap("Word wrapping is great fun, isn''t it?", 25)', 'Word wrapping is great'#13#10'fun, isn''t it?');
  Test({LINENUM}37672, 'WordWrap("Word wrapping is great fun, isn''t it?", 24)', 'Word wrapping is great'#13#10'fun, isn''t it?');
  Test({LINENUM}37673, 'WordWrap("Word wrapping is great fun, isn''t it?", 23)', 'Word wrapping is great'#13#10'fun, isn''t it?');
  Test({LINENUM}37674, 'WordWrap("Word wrapping is great fun, isn''t it?", 22)', 'Word wrapping is great'#13#10'fun, isn''t it?');
  Test({LINENUM}37675, 'WordWrap("Word wrapping is great fun, isn''t it?", 21)', 'Word wrapping is'#13#10'great fun, isn''t it?');
  Test({LINENUM}37676, 'WordWrap("Word wrapping is great fun, isn''t it?", 20)', 'Word wrapping is'#13#10'great fun, isn''t it?');

  Test({LINENUM}37678, 'WordWrap("Word wrapping is great fun, isn’t it?", 37)', 'Word wrapping is great fun, isn’t it?');
  Test({LINENUM}37679, 'WordWrap("Word wrapping is great fun, isn’t it?", 36)', 'Word wrapping is great fun, isn’t'#13#10'it?');
  Test({LINENUM}37680, 'WordWrap("Word wrapping is great fun, isn’t it?", 35)', 'Word wrapping is great fun, isn’t'#13#10'it?');
  Test({LINENUM}37681, 'WordWrap("Word wrapping is great fun, isn’t it?", 34)', 'Word wrapping is great fun, isn’t'#13#10'it?');
  Test({LINENUM}37682, 'WordWrap("Word wrapping is great fun, isn’t it?", 33)', 'Word wrapping is great fun, isn’t'#13#10'it?');
  Test({LINENUM}37683, 'WordWrap("Word wrapping is great fun, isn’t it?", 32)', 'Word wrapping is great fun,'#13#10'isn’t it?');
  Test({LINENUM}37684, 'WordWrap("Word wrapping is great fun, isn’t it?", 31)', 'Word wrapping is great fun,'#13#10'isn’t it?');
  Test({LINENUM}37685, 'WordWrap("Word wrapping is great fun, isn’t it?", 30)', 'Word wrapping is great fun,'#13#10'isn’t it?');
  Test({LINENUM}37686, 'WordWrap("Word wrapping is great fun, isn’t it?", 29)', 'Word wrapping is great fun,'#13#10'isn’t it?');
  Test({LINENUM}37687, 'WordWrap("Word wrapping is great fun, isn’t it?", 28)', 'Word wrapping is great fun,'#13#10'isn’t it?');
  Test({LINENUM}37688, 'WordWrap("Word wrapping is great fun, isn’t it?", 27)', 'Word wrapping is great fun,'#13#10'isn’t it?');
  Test({LINENUM}37689, 'WordWrap("Word wrapping is great fun, isn’t it?", 26)', 'Word wrapping is great'#13#10'fun, isn’t it?');
  Test({LINENUM}37690, 'WordWrap("Word wrapping is great fun, isn’t it?", 25)', 'Word wrapping is great'#13#10'fun, isn’t it?');
  Test({LINENUM}37691, 'WordWrap("Word wrapping is great fun, isn’t it?", 24)', 'Word wrapping is great'#13#10'fun, isn’t it?');
  Test({LINENUM}37692, 'WordWrap("Word wrapping is great fun, isn’t it?", 23)', 'Word wrapping is great'#13#10'fun, isn’t it?');
  Test({LINENUM}37693, 'WordWrap("Word wrapping is great fun, isn’t it?", 22)', 'Word wrapping is great'#13#10'fun, isn’t it?');
  Test({LINENUM}37694, 'WordWrap("Word wrapping is great fun, isn’t it?", 21)', 'Word wrapping is'#13#10'great fun, isn’t it?');
  Test({LINENUM}37695, 'WordWrap("Word wrapping is great fun, isn’t it?", 20)', 'Word wrapping is'#13#10'great fun, isn’t it?');

  Test({LINENUM}37697, 'WordWrap("He’s a crime-fighting canine.")', 'He’s a crime-fighting canine.');
  Test({LINENUM}37698, 'WordWrap("He’s a crime-fighting canine.", 29)', 'He’s a crime-fighting canine.');
  Test({LINENUM}37699, 'WordWrap("He’s a crime-fighting canine.", 28)', 'He’s a crime-fighting'#13#10'canine.');
  Test({LINENUM}37700, 'WordWrap("He’s a crime-fighting canine.", 27)', 'He’s a crime-fighting'#13#10'canine.');
  Test({LINENUM}37701, 'WordWrap("He’s a crime-fighting canine.", 26)', 'He’s a crime-fighting'#13#10'canine.');
  Test({LINENUM}37702, 'WordWrap("He’s a crime-fighting canine.", 25)', 'He’s a crime-fighting'#13#10'canine.');
  Test({LINENUM}37703, 'WordWrap("He’s a crime-fighting canine.", 24)', 'He’s a crime-fighting'#13#10'canine.');
  Test({LINENUM}37704, 'WordWrap("He’s a crime-fighting canine.", 23)', 'He’s a crime-fighting'#13#10'canine.');
  Test({LINENUM}37705, 'WordWrap("He’s a crime-fighting canine.", 22)', 'He’s a crime-fighting'#13#10'canine.');
  Test({LINENUM}37706, 'WordWrap("He’s a crime-fighting canine.", 21)', 'He’s a crime-fighting'#13#10'canine.');
  Test({LINENUM}37707, 'WordWrap("He’s a crime-fighting canine.", 20)', 'He’s a crime-'#13#10'fighting canine.');
  Test({LINENUM}37708, 'WordWrap("He’s a crime-fighting canine.", 19)', 'He’s a crime-'#13#10'fighting canine.');
  Test({LINENUM}37709, 'WordWrap("He’s a crime-fighting canine.", 18)', 'He’s a crime-'#13#10'fighting canine.');
  Test({LINENUM}37710, 'WordWrap("He’s a crime-fighting canine.", 17)', 'He’s a crime-'#13#10'fighting canine.');
  Test({LINENUM}37711, 'WordWrap("He’s a crime-fighting canine.", 16)', 'He’s a crime-'#13#10'fighting canine.');
  Test({LINENUM}37712, 'WordWrap("He’s a crime-fighting canine.", 15)', 'He’s a crime-'#13#10'fighting'#13#10'canine.');
  Test({LINENUM}37713, 'WordWrap("He’s a crime-fighting canine.", 14)', 'He’s a crime-'#13#10'fighting'#13#10'canine.');
  Test({LINENUM}37714, 'WordWrap("He’s a crime-fighting canine.", 13)', 'He’s a crime-'#13#10'fighting'#13#10'canine.');
  Test({LINENUM}37715, 'WordWrap("He’s a crime-fighting canine.", 12)', 'He’s a'#13#10'crime-'#13#10'fighting'#13#10'canine.');
  Test({LINENUM}37716, 'WordWrap("He’s a crime-fighting canine.", 11)', 'He’s a'#13#10'crime-'#13#10'fighting'#13#10'canine.');
  Test({LINENUM}37717, 'WordWrap("He’s a crime-fighting canine.", 10)', 'He’s a'#13#10'crime-'#13#10'fighting'#13#10'canine.');

                            {nbhyp}
  Test({LINENUM}37720, 'WordWrap("He’s a crime‑fighting canine.")', 'He’s a crime‑fighting canine.');
  Test({LINENUM}37721, 'WordWrap("He’s a crime‑fighting canine.", 29)', 'He’s a crime‑fighting canine.');
  Test({LINENUM}37722, 'WordWrap("He’s a crime‑fighting canine.", 28)', 'He’s a crime‑fighting'#13#10'canine.');
  Test({LINENUM}37723, 'WordWrap("He’s a crime‑fighting canine.", 27)', 'He’s a crime‑fighting'#13#10'canine.');
  Test({LINENUM}37724, 'WordWrap("He’s a crime‑fighting canine.", 26)', 'He’s a crime‑fighting'#13#10'canine.');
  Test({LINENUM}37725, 'WordWrap("He’s a crime‑fighting canine.", 25)', 'He’s a crime‑fighting'#13#10'canine.');
  Test({LINENUM}37726, 'WordWrap("He’s a crime‑fighting canine.", 24)', 'He’s a crime‑fighting'#13#10'canine.');
  Test({LINENUM}37727, 'WordWrap("He’s a crime‑fighting canine.", 23)', 'He’s a crime‑fighting'#13#10'canine.');
  Test({LINENUM}37728, 'WordWrap("He’s a crime‑fighting canine.", 22)', 'He’s a crime‑fighting'#13#10'canine.');
  Test({LINENUM}37729, 'WordWrap("He’s a crime‑fighting canine.", 21)', 'He’s a crime‑fighting'#13#10'canine.');
  Test({LINENUM}37730, 'WordWrap("He’s a crime‑fighting canine.", 20)', 'He’s a'#13#10'crime‑fighting'#13#10'canine.');
  Test({LINENUM}37731, 'WordWrap("He’s a crime‑fighting canine.", 19)', 'He’s a'#13#10'crime‑fighting'#13#10'canine.');
  Test({LINENUM}37732, 'WordWrap("He’s a crime‑fighting canine.", 18)', 'He’s a'#13#10'crime‑fighting'#13#10'canine.');
  Test({LINENUM}37733, 'WordWrap("He’s a crime‑fighting canine.", 17)', 'He’s a'#13#10'crime‑fighting'#13#10'canine.');
  Test({LINENUM}37734, 'WordWrap("He’s a crime‑fighting canine.", 16)', 'He’s a'#13#10'crime‑fighting'#13#10'canine.');
  Test({LINENUM}37735, 'WordWrap("He’s a crime‑fighting canine.", 15)', 'He’s a'#13#10'crime‑fighting'#13#10'canine.');
  Test({LINENUM}37736, 'WordWrap("He’s a crime‑fighting canine.", 14)', 'He’s a'#13#10'crime‑fighting'#13#10'canine.');
  Test({LINENUM}37737, 'WordWrap("He’s a crime‑fighting canine.", 13)', 'He’s a'#13#10'crime‑fightin'#13#10'g canine.');
  Test({LINENUM}37738, 'WordWrap("He’s a crime‑fighting canine.", 12)', 'He’s a'#13#10'crime‑fighti'#13#10'ng canine.');
  Test({LINENUM}37739, 'WordWrap("He’s a crime‑fighting canine.", 11)', 'He’s a'#13#10'crime‑fight'#13#10'ing canine.');
  Test({LINENUM}37740, 'WordWrap("He’s a crime‑fighting canine.", 10)', 'He’s a'#13#10'crime‑figh'#13#10'ting'#13#10'canine.');

  Test({LINENUM}37742, 'WordWrap("Jag är 100 % säker.")', 'Jag är 100 % säker.');
  Test({LINENUM}37743, 'WordWrap("Jag är 100 % säker.", 19)', 'Jag är 100 % säker.');
  Test({LINENUM}37744, 'WordWrap("Jag är 100 % säker.", 18)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37745, 'WordWrap("Jag är 100 % säker.", 17)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37746, 'WordWrap("Jag är 100 % säker.", 16)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37747, 'WordWrap("Jag är 100 % säker.", 15)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37748, 'WordWrap("Jag är 100 % säker.", 14)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37749, 'WordWrap("Jag är 100 % säker.", 13)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37750, 'WordWrap("Jag är 100 % säker.", 12)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37751, 'WordWrap("Jag är 100 % säker.", 11)', 'Jag är 100'#13#10'% säker.');
  Test({LINENUM}37752, 'WordWrap("Jag är 100 % säker.", 10)', 'Jag är 100'#13#10'% säker.');
  Test({LINENUM}37753, 'WordWrap("Jag är 100 % säker.", 9)', 'Jag är'#13#10'100 %'#13#10'säker.');

                          {nbsp}
  Test({LINENUM}37756, 'WordWrap("Jag är 100 % säker.")', 'Jag är 100 % säker.');
  Test({LINENUM}37757, 'WordWrap("Jag är 100 % säker.", 19)', 'Jag är 100 % säker.');
  Test({LINENUM}37758, 'WordWrap("Jag är 100 % säker.", 18)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37759, 'WordWrap("Jag är 100 % säker.", 17)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37760, 'WordWrap("Jag är 100 % säker.", 16)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37761, 'WordWrap("Jag är 100 % säker.", 15)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37762, 'WordWrap("Jag är 100 % säker.", 14)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37763, 'WordWrap("Jag är 100 % säker.", 13)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37764, 'WordWrap("Jag är 100 % säker.", 12)', 'Jag är 100 %'#13#10'säker.');
  Test({LINENUM}37765, 'WordWrap("Jag är 100 % säker.", 11)', 'Jag är'#13#10'100 %'#13#10'säker.');
  Test({LINENUM}37766, 'WordWrap("Jag är 100 % säker.", 10)', 'Jag är'#13#10'100 %'#13#10'säker.');
  Test({LINENUM}37767, 'WordWrap("Jag är 100 % säker.", 9)', 'Jag är'#13#10'100 %'#13#10'säker.');

  Test({LINENUM}37769, 'nl ≔ chr(13) + chr(10); s ≔ "Lorem ipsum dolor sit amet," + nl + "consectetur adipiscing elit," + nl + "sed do eiusmod tempor" + nl + "incididunt ut labore et dolore" + nl + "magna aliqua."',
    'Lorem ipsum dolor sit amet,'#13#10 +
    'consectetur adipiscing elit,'#13#10 +
    'sed do eiusmod tempor'#13#10 +
    'incididunt ut labore et dolore'#13#10 +
    'magna aliqua.'
    );

  Test({LINENUM}37777, 'WordWrap(s)',
    'Lorem ipsum dolor sit amet,'#13#10 +
    'consectetur adipiscing elit,'#13#10 +
    'sed do eiusmod tempor'#13#10 +
    'incididunt ut labore et dolore'#13#10 +
    'magna aliqua.'
    );

  Test({LINENUM}37785, 'WordWrap(s, 25)',
    'Lorem ipsum dolor sit'#13#10 +
    'amet,'#13#10 +
    'consectetur adipiscing'#13#10 +
    'elit,'#13#10 +
    'sed do eiusmod tempor'#13#10 +
    'incididunt ut labore et'#13#10 +
    'dolore'#13#10 +
    'magna aliqua.'
    );

  Test({LINENUM}37796, 's ≔ "Lorem ipsum dolor sit amet," + 2⋅nl + "consectetur adipiscing elit," + 2⋅nl + "sed do eiusmod tempor incididunt" + 2⋅nl + "ut labore et dolore magna aliqua."',
    'Lorem ipsum dolor sit amet,'#13#10#13#10 +
    'consectetur adipiscing elit,'#13#10#13#10 +
    'sed do eiusmod tempor incididunt'#13#10#13#10 +
    'ut labore et dolore magna aliqua.'
    );

  Test({LINENUM}37803, 'WordWrap(s)',
    'Lorem ipsum dolor sit amet,'#13#10#13#10 +
    'consectetur adipiscing elit,'#13#10#13#10 +
    'sed do eiusmod tempor incididunt'#13#10#13#10 +
    'ut labore et dolore magna aliqua.'
    );

  Test({LINENUM}37810, 'WordWrap(s, 25)',
    'Lorem ipsum dolor sit'#13#10'amet,'#13#10#13#10 +
    'consectetur adipiscing'#13#10'elit,'#13#10#13#10 +
    'sed do eiusmod tempor'#13#10'incididunt'#13#10#13#10 +
    'ut labore et dolore magna'#13#10'aliqua.'
    );

  Test({LINENUM}37817, 'WordWrap("system.properties.registry.keys.count")',
    'system.properties.registry.keys.count');

  Test({LINENUM}37820, 'WordWrap("system.properties.registry.keys.count", 34)',
    'system.properties.registry.keys.'#13#10'count');

  Test({LINENUM}37823, 'WordWrap("system.properties.registry.keys.count", 25)',
    'system.properties.'#13#10'registry.keys.count');

  Test({LINENUM}37826, 'WordWrap("system.properties.registry.keys.count", 18)',
    'system.properties.'#13#10'registry.keys.'#13#10'count');

  Test({LINENUM}37829, 'WordWrap("system.properties.registry.keys.count", 17)',
    'system.'#13#10'properties.'#13#10'registry.keys.'#13#10'count');

  Test({LINENUM}37832, 'WordWrap("")', '');
  Test({LINENUM}37833, 'WordWrap("       ")', '       ');
  Test({LINENUM}37834, 'WordWrap("       " + nl + "   ")', #13#10'   ');
  Test({LINENUM}37835, 'WordWrap(nl + nl + nl)', #13#10#13#10#13#10);

  Test({LINENUM}37837, 'trim(WordWrap("     " + nl + 1000⋅"         " + 1000⋅nl + nl + "   cat   " + nl + nl + 1000⋅"     " + nl))', 'cat');

  Test({LINENUM}37839, 'delete(s); delete(nl)', success);


  //
  // Word and character extraction
  //

  // Word extraction

  Test({LINENUM}37848, 's ≔ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."',
       'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.');

  Test({LINENUM}37851, 'words(s)',
    strarr(
      ['Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua']
    ));

  Test({LINENUM}37856, 's ≔ "He''s a super-cute crime-fighting canine.";', null);
  Test({LINENUM}37857, 'words(s)',
    strarr(
      ['He''s', 'a', 'super-cute', 'crime-fighting', 'canine']
    ));

  Test({LINENUM}37862, 's ≔ "It’s not hard to see he hasn’t done it before.";', null);
  Test({LINENUM}37863, 'words(s)',
    strarr(
      ['It’s', 'not', 'hard', 'to', 'see', 'he', 'hasn’t', 'done', 'it', 'before']
    ));

  Test({LINENUM}37868, 's ≔ "He’s done it before, hasn’t he?";', null);
  Test({LINENUM}37869, 'words(s)',
    strarr(
      ['He’s', 'done', 'it', 'before', 'hasn’t', 'he']
    ));

  Test({LINENUM}37874, 's ≔ "What?! Is that what you think?";', null);
  Test({LINENUM}37875, 'words(s)',
    strarr(
      ['What', 'Is', 'that', 'what', 'you', 'think']
    ));

  Test({LINENUM}37880, 's ≔ "What‽ Is that what you think?";', null);
  Test({LINENUM}37881, 'words(s)',
    strarr(
      ['What', 'Is', 'that', 'what', 'you', 'think']
    ));

  Test({LINENUM}37886, 's ≔ "This is because of a hormone (aldosterone) produced by the adrenal glands.";', null);
  Test({LINENUM}37887, 'words(s)',
    strarr(
      ['This', 'is', 'because', 'of', 'a', 'hormone', 'aldosterone', 'produced', 'by', 'the', 'adrenal', 'glands']
    ));

  Test({LINENUM}37892, 's ≔ "Vitamin D3 is produced from 7-dehydrocholesterol in the skin.";', null);
  Test({LINENUM}37893, 'words(s)',
    strarr(
      ['Vitamin', 'D3', 'is', 'produced', 'from', '7-dehydrocholesterol', 'in', 'the', 'skin']
    ));

  Test({LINENUM}37898, 's ≔ "We saw 531 paintings; they were all awesome.";', null);
  Test({LINENUM}37899, 'words(s)',
    strarr(
      ['We', 'saw', 'paintings', 'they', 'were', 'all', 'awesome']
    ));

  Test({LINENUM}37904, 's ≔ "We found that d ≈ 0.591.";', null);
  Test({LINENUM}37905, 'words(s)',
    strarr(
      ['We', 'found', 'that', 'd']
    ));

  Test({LINENUM}37910, 's ≔ "d ≈ 5.7; ε ≤ 0.4";', null);
  Test({LINENUM}37911, 'words(s)',
    strarr(
      ['d', 'ε']
    ));

  Test({LINENUM}37916, 's ≔ "What do you have to say about this ""horrible"" suggestion?";', null);
  Test({LINENUM}37917, 'words(s)',
    strarr(
      ['What', 'do', 'you', 'have', 'to', 'say', 'about', 'this', 'horrible', 'suggestion']
    ));

  Test({LINENUM}37922, 's ≔ "What do you have to say about this ''horrible'' suggestion?";', null);
  Test({LINENUM}37923, 'words(s)',
    strarr(
      ['What', 'do', 'you', 'have', 'to', 'say', 'about', 'this', 'horrible', 'suggestion']
    ));

  Test({LINENUM}37928, 's ≔ "What do you have to say about this “horrible” suggestion?";', null);
  Test({LINENUM}37929, 'words(s)',
    strarr(
      ['What', 'do', 'you', 'have', 'to', 'say', 'about', 'this', 'horrible', 'suggestion']
    ));

  Test({LINENUM}37934, 's ≔ "What do you have to say about this ‘horrible’ suggestion?";', null);
  Test({LINENUM}37935, 'words(s)',
    strarr(
      ['What', 'do', 'you', 'have', 'to', 'say', 'about', 'this', 'horrible', 'suggestion']
    ));

  Test({LINENUM}37940, 's ≔ "He was a good player – and a dear friend – before the accident.";', null);
  Test({LINENUM}37941, 'words(s)',
    strarr(
      ['He', 'was', 'a', 'good', 'player', 'and', 'a', 'dear', 'friend', 'before', 'the', 'accident']
    ));

  Test({LINENUM}37946, 's ≔ "He was a good player—and a dear friend—before the accident.";', null);
  Test({LINENUM}37947, 'words(s)',
    strarr(
      ['He', 'was', 'a', 'good', 'player', 'and', 'a', 'dear', 'friend', 'before', 'the', 'accident']
    ));

  Test({LINENUM}37952, 's ≔ "Compiling...";', null);
  Test({LINENUM}37953, 'words(s)',
    strarr(
      ['Compiling']
    ));

  Test({LINENUM}37958, 's ≔ "Please submit your question/suggestion before 6 pm this Thursday.";', null);
  Test({LINENUM}37959, 'words(s)',
    strarr(
      ['Please', 'submit', 'your', 'question', 'suggestion', 'before', 'pm', 'this', 'Thursday']
    ));

  Test({LINENUM}37964, 's ≔ "Jag köpte en ny tv-apparat som jag kan koppla dvd-spelaren till.";', null);
  Test({LINENUM}37965, 'words(s)',
    strarr(
      ['Jag', 'köpte', 'en', 'ny', 'tv-apparat', 'som', 'jag', 'kan', 'koppla', 'dvd-spelaren', 'till']
    ));

  Test({LINENUM}37970, 's ≔ "En 22-årig grönsaksodlare hittade en 500-kronorssedel under 100-årsjubileet.";', null);
  Test({LINENUM}37971, 'words(s)',
    strarr(
      ['En', '22-årig', 'grönsaksodlare', 'hittade', 'en', '500-kronorssedel', 'under', '100-årsjubileet']
    ));

  Test({LINENUM}37976, 's ≔ "en 5-åring med β-talassemi";', null);
  Test({LINENUM}37977, 'words(s)',
    strarr(
      ['en', '5-åring', 'med', 'β-talassemi']
    ));

  Test({LINENUM}37982, 's ≔ "en C++-programmerare med ledvärk";', null);
  Test({LINENUM}37983, 'words(s)',
    strarr(
      ['en', 'C++-programmerare', 'med', 'ledvärk']
    ));

  Test({LINENUM}37988, 's ≔ "SVT:s ledning kände till sms:ets innehåll.";', null);
  Test({LINENUM}37989, 'words(s)',
    strarr(
      ['SVT:s', 'ledning', 'kände', 'till', 'sms:ets', 'innehåll']
    ));

  Test({LINENUM}37994, 's ≔ "Kan man ta igen en 7–3-förlust?";', null);
  Test({LINENUM}37995, 'words(s)',
    strarr(
      ['Kan', 'man', 'ta', 'igen', 'en', '7–3-förlust']
    ));

  Test({LINENUM}38000, 's ≔ "I have one dog, two rats (!), and three birds (all parakeets).";', null);
  Test({LINENUM}38001, 'words(s)',
    strarr(
      ['I', 'have', 'one', 'dog', 'two', 'rats', 'and', 'three', 'birds', 'all', 'parakeets']
    ));

  Test({LINENUM}38006, 's ≔ "I have three cars: one Volvo, one Peugeot, and one BMW.";', null);
  Test({LINENUM}38007, 'words(s)',
    strarr(
      ['I', 'have', 'three', 'cars', 'one', 'Volvo', 'one', 'Peugeot', 'and', 'one', 'BMW']
    ));

  Test({LINENUM}38012, 's ≔ "It can record more than 560 actions/second.";', null);
  Test({LINENUM}38013, 'words(s)',
    strarr(
      ['It', 'can', 'record', 'more', 'than', 'actions', 'second']
    ));

  Test({LINENUM}38018, 's ≔ "Please read pages 20–34.";', null);
  Test({LINENUM}38019, 'words(s)',
    strarr(
      ['Please', 'read', 'pages']
    ));

  Test({LINENUM}38024, 's ≔ "These toys are designed for kids aged 7–10.";', null);
  Test({LINENUM}38025, 'words(s)',
    strarr(
      ['These', 'toys', 'are', 'designed', 'for', 'kids', 'aged']
    ));

  Test({LINENUM}38030, 's ≔ "What''s your favo(u)rite colo(u)r?";', null);
  Test({LINENUM}38031, 'words(s)',
    strarr(
      ['What''s', 'your', 'favo(u)rite', 'colo(u)r']
    ));

  Test({LINENUM}38036, 's ≔ "Hello, World!" + chr(13) + chr(10) + "How are you?";', null);
  Test({LINENUM}38037, 'words(s)',
    strarr(
      ['Hello', 'World', 'How', 'are', 'you']
    ));

  Test({LINENUM}38042, 's ≔ "acetylkolinesteras";', null);
  Test({LINENUM}38043, 'words(s)',
    strarr(
      ['acetylkolinesteras']
    ));

  Test({LINENUM}38048, 's ≔ "";', null);
  Test({LINENUM}38049, 'words(s)',
    strarr(
      []
    ));

  Test({LINENUM}38054, 's ≔ "         ";', null);
  Test({LINENUM}38055, 'words(s)',
    strarr(
      []
    ));

  Test({LINENUM}38060, 's ≔ "     7!((.    ";', null);
  Test({LINENUM}38061, 'words(s)',
    strarr(
      []
    ));

  Test({LINENUM}38066, 's ≔ ".........";', null);
  Test({LINENUM}38067, 'words(s)',
    strarr(
      []
    ));

  Test({LINENUM}38072, 's ≔ "A million people in lockdown because of Covid-19.";', null);
  Test({LINENUM}38073, 'words(s)',
    strarr(
      ['A', 'million', 'people', 'in', 'lockdown', 'because', 'of', 'Covid-19']
    ));

  _s :=
    'program randword;'#13#10 +
    ''#13#10 +
    '{$APPTYPE CONSOLE}'#13#10 +
    ''#13#10 +
    '{$R *.res}'#13#10 +
    ''#13#10 +
    'uses'#13#10 +
    '  System.SysUtils;'#13#10 +
    ''#13#10 +
    'function RandomWordLength: Integer;'#13#10 +
    'begin'#13#10 +
    '  Result := 1 + Random(12);'#13#10 +
    'end;'#13#10 +
    ''#13#10 +
    'function RandomWord(ALength: Integer): string;'#13#10 +
    'var'#13#10 +
    '  i: Integer;'#13#10 +
    'begin'#13#10 +
    '  SetLength(Result, ALength);'#13#10 +
    '  for i := 1 to Result.Length do'#13#10 +
    '    Result[i] := Chr(Ord(''a'') + Random(Ord(''z'') - Ord(''a'') + 1));'#13#10 +
    'end;'#13#10 +
    ''#13#10 +
    'begin'#13#10 +
    '  try'#13#10 +
    '    Randomize;'#13#10 +
    '    try'#13#10 +
    '      while True do'#13#10 +
    '      begin'#13#10 +
    '        Writeln(RandomWord(RandomWordLength));'#13#10 +
    '        Sleep(1000);'#13#10 +
    '      end;'#13#10 +
    '    except'#13#10 +
    '      on E: Exception do'#13#10 +
    '        Writeln(E.ClassName, '': '', E.Message);'#13#10 +
    '    end;'#13#10 +
    '  finally'#13#10 +
    '    Writeln(''Done.'');'#13#10 +
    '    Readln;'#13#10 +
    '  end;'#13#10 +
    'end.'#13#10;

  Test({LINENUM}38121, 's ≔ "' + _s + '"', _s);

  Test({LINENUM}38123, 'words(s)', // "wrong" settings
    strarr(
      [
        'program',
        'randword',
        '$APPTYPE',
        'CONSOLE',
        '$R',
        'res',
        'uses',
        'System.SysUtils',
        'function',
        'RandomWordLength',
        'Integer',
        'begin',
        'Result',
        'Random(12',
        'end',
        'function',
        'RandomWord(ALength',
        'Integer',
        'string',
        'var',
        'i',
        'Integer',
        'begin',
        'SetLength(Result',
        'ALength',
        'for',
        'i',
        'to',
        'Result.Length',
        'do',
        'Result[i',
        'Chr(Ord(''a',
        'Random(Ord(''z',
        'Ord(''a',
        'end',
        'begin',
        'try',
        'Randomize',
        'try',
        'while',
        'True',
        'do',
        'begin',
        'Writeln(RandomWord(RandomWordLength',
        'Sleep(1000',
        'end',
        'except',
        'on',
        'E',
        'Exception',
        'do',
        'Writeln(E.ClassName',
        'E.Message',
        'end',
        'finally',
        'Writeln(''Done',
        'Readln',
        'end',
        'end'
      ]
    ));


  Test({LINENUM}38189, 'words(s, "source code")',
    strarr(
      [
        'program',
        'randword',
        'APPTYPE',
        'CONSOLE',
        'R',
        'res',
        'uses',
        'System',
        'SysUtils',
        'function',
        'RandomWordLength',
        'Integer',
        'begin',
        'Result',
        'Random',
        'end',
        'function',
        'RandomWord',
        'ALength',
        'Integer',
        'string',
        'var',
        'i',
        'Integer',
        'begin',
        'SetLength',
        'Result',
        'ALength',
        'for',
        'i',
        'to',
        'Result',
        'Length',
        'do',
        'Result',
        'i',
        'Chr',
        'Ord',
        'a',
        'Random',
        'Ord',
        'z',
        'Ord',
        'a',
        'end',
        'begin',
        'try',
        'Randomize',
        'try',
        'while',
        'True',
        'do',
        'begin',
        'Writeln',
        'RandomWord',
        'RandomWordLength',
        'Sleep',
        'end',
        'except',
        'on',
        'E',
        'Exception',
        'do',
        'Writeln',
        'E',
        'ClassName',
        'E',
        'Message',
        'end',
        'finally',
        'Writeln',
        'Done',
        'Readln',
        'end',
        'end'
      ]
    ));

  Test({LINENUM}38270, 's ≔ "x := fcn(@val) + ptr^; { great, isn''t it? }";', null);
  Test({LINENUM}38271, 'words(s, "source code")',
    strarr(
      ['x', 'fcn', 'val', 'ptr', 'great', 'isn''t', 'it']
    ));

  Test({LINENUM}38276, 's ≔ "∫cos(x)dx = sin(x) + C";', null);
  Test({LINENUM}38277, 'words(s, "math")',
    strarr(
      ['cos', 'x', 'dx', 'sin', 'x', 'C']
    ));

  // Character extraction

  Test({LINENUM}38284, 'characters("Hello, World!")', chrarr(['H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!']));
  Test({LINENUM}38285, 'characters("∫⌬dx")', chrarr(['∫', '⌬', 'd', 'x']));
  Test({LINENUM}38286, 'characters("ABC")', chrarr(['A', 'B', 'C']));
  Test({LINENUM}38287, 'characters("A")', chrarr(['A']));
  Test({LINENUM}38288, 'characters("")', chrarr([]));
  Test({LINENUM}38289, 'characters(10000⋅"A")', chrarr(StringOfChar('A', 10000).ToCharArray));

  Test({LINENUM}38291, 'characters(1024)', failure, 'An object of type string was expected as argument 1, but an object of type integer was given.');
  Test({LINENUM}38292, 'characters()', failure, 'Too few arguments. A required argument of type string is missing.');
  Test({LINENUM}38293, 'characters("cat", "dog")', failure, 'Too many arguments.');





  //
  //
  //  CHAPTER 8
  //  Date and time functions.
  //
  //

  Chapter('Date and time functions');

  FixedTime := EncodeDateTime(2020, 05, 15, 14, 30, 20, 123);
  try


    //
    // Datetime constructors
    //

    // date

    Test({LINENUM}38318, 'date()', ASODate(2020, 05, 15)); // current date

    Test({LINENUM}38320, 'date(43966)', ASODate(2020, 05, 15)); // "cast": get date struct from timestamp (double)
    Test({LINENUM}38321, 'date(32137)', ASODate(1987, 12, 26));
    Test({LINENUM}38322, 'date(18464)', ASODate(1950, 07, 20));
    Test({LINENUM}38323, 'date(54989)', ASODate(2050, 07, 20));
    Test({LINENUM}38324, 'date(43890)', ASODate(2020, 02, 29));
    Test({LINENUM}38325, 'date(0)', ASODate(1899, 12, 30));
    Test({LINENUM}38326, 'date(-10)', ASODate(1899, 12, 20));

    Test({LINENUM}38328, 'date(date(1963, 08, 02))', ASODate(1963, 08, 02)); // "cast": get date struct from date struct (testing outer fcn)
    Test({LINENUM}38329, 'date(date(1999, 12, 24))', ASODate(1999, 12, 24));
    Test({LINENUM}38330, 'date(date(2043, 06, 07))', ASODate(2043, 06, 07));

    Test({LINENUM}38332, 'date(datetime(2004, 06, 05, 18, 12, 32, 123))', ASODate(2004, 06, 05)); // extract date part of datetime struct
    Test({LINENUM}38333, 'date(datetime(2119, 04, 28, 14, 42, 00))', ASODate(2119, 04, 28));

    Test({LINENUM}38335, 'date(1963, 08, 02)', ASODate(1963, 08, 02)); // encode a specific date
    Test({LINENUM}38336, 'date(1999, 12, 24)', ASODate(1999, 12, 24));
    Test({LINENUM}38337, 'date(2043, 06, 07)', ASODate(2043, 06, 07));

    Test({LINENUM}38339, 'date(2043, 06, 07, 08)', failure, 'There is no version of this function that can take 4 argument(s).');
    Test({LINENUM}38340, 'date(2043, 06, 07, 08, 30, 25)', failure, 'There is no version of this function that can take 6 argument(s).');

    // time

    Test({LINENUM}38344, 'time()', ASOTime(14, 30, 20, 123)); // current time

    Test({LINENUM}38346, 'time(0.604399571759259259)', ASOTime(14, 30, 20, 123)); // "cast": get time struct from timestamp (double)
    Test({LINENUM}38347, 'time(0.524268391203703704)', ASOTime(12, 34, 56, 789));
    Test({LINENUM}38348, 'time(0.5)', ASOTime(12, 00, 00, 000));
    Test({LINENUM}38349, 'time(0.0)', ASOTime(00, 00, 00, 000));
    Test({LINENUM}38350, 'time(0.947916666666666667)', ASOTime(22, 45, 00, 000));

    Test({LINENUM}38352, 'time(time(16, 30, 10, 521))', ASOTime(16, 30, 10, 521)); // "cast": get time struct from time struct (testing outer fcn)
    Test({LINENUM}38353, 'time(time(18, 07, 03))', ASOTime(18, 07, 03, 000));
    Test({LINENUM}38354, 'time(time(00, 00, 00))', ASOTime(00, 00, 00, 000));
    Test({LINENUM}38355, 'time(time(23, 59, 59, 999))', ASOTime(23, 59, 59, 999));

    Test({LINENUM}38357, 'time(datetime(2004, 06, 05, 18, 12, 32, 123))', ASOTime(18, 12, 32, 123)); // extract time part of datetime struct
    Test({LINENUM}38358, 'time(datetime(2119, 04, 28, 14, 42, 00))', ASOTime(14, 42, 00, 000));

    Test({LINENUM}38360, 'time(16, 30, 10, 521)', ASOTime(16, 30, 10, 521)); // encode a specific time
    Test({LINENUM}38361, 'time(18, 07, 03)', ASOTime(18, 07, 03, 000));
    Test({LINENUM}38362, 'time(00, 00, 00)', ASOTime(00, 00, 00, 000));
    Test({LINENUM}38363, 'time(23, 59, 59, 999)', ASOTime(23, 59, 59, 999));

    // now

    Test({LINENUM}38367, 'now()', ASODateTime(2020, 05, 15, 14, 30, 20, 123));

    // datetime

    Test({LINENUM}38371, 'datetime()', ASODateTime(2020, 05, 15, 14, 30, 20, 123)); // current time

    Test({LINENUM}38373, 'datetime(43966.604399571759259259)', ASODateTime(2020, 05, 15, 14, 30, 20, 123)); // "cast": get datetime struct from timestamp (double)
    Test({LINENUM}38374, 'datetime(32137.524268391203703704)', ASODateTime(1987, 12, 26, 12, 34, 56, 789));
    Test({LINENUM}38375, 'datetime(18464.5)', ASODateTime(1950, 07, 20, 12, 00, 00, 000));
    Test({LINENUM}38376, 'datetime(54989.0)', ASODateTime(2050, 07, 20, 00, 00, 00, 000));
    Test({LINENUM}38377, 'datetime(43890.947916666666666667)', ASODateTime(2020, 02, 29, 22, 45, 00, 000));
    Test({LINENUM}38378, 'datetime(0.25)', ASODateTime(1899, 12, 30, 06, 00, 00, 000));

    Test({LINENUM}38380, 'datetime(datetime(1942, 07, 08, 15, 03, 22, 987))', ASODateTime(1942, 07, 08, 15, 03, 22, 987)); // "cast": get datetime struct from datetime struct
    Test({LINENUM}38381, 'datetime(datetime(2032, 04, 30, 19, 28, 40))', ASODateTime(2032, 04, 30, 19, 28, 40, 000));
    Test({LINENUM}38382, 'datetime(date(1995, 08, 20))', ASODateTime(1995, 08, 20, 00, 00, 00, 000));
    Test({LINENUM}38383, 'datetime(time(23, 36, 10))', failure, 'An object of type DateTime was expected as argument 1, but an object of type structure of type "Time" was given.');

    Test({LINENUM}38385, 'datetime(1942, 07, 08, 15, 03, 22, 987)', ASODateTime(1942, 07, 08, 15, 03, 22, 987)); // encode a specific datetime
    Test({LINENUM}38386, 'datetime(2032, 04, 30, 19, 28, 40)', ASODateTime(2032, 04, 30, 19, 28, 40, 000));
    Test({LINENUM}38387, 'datetime(2008, 05, 02, 09, 41)', ASODateTime(2008, 05, 02, 09, 41, 00, 000));
    Test({LINENUM}38388, 'datetime(2008, 05, 02, 09)', ASODateTime(2008, 05, 02, 09, 00, 00, 000));
    Test({LINENUM}38389, 'datetime(2008, 05, 02)', ASODateTime(2008, 05, 02, 00, 00, 00, 000));
    Test({LINENUM}38390, 'datetime(2008, 05)', failure, 'An object of type Date was expected as argument 1, but an object of type integer was given.');

    Test({LINENUM}38392, 'datetime(date(1994, 06, 20), time(18, 50, 55))', ASODateTime(1994, 06, 20, 18, 50, 55, 000)); // get datetime strucutre from date and time structures
    Test({LINENUM}38393, 'datetime(date(2000, 05, 13), time(09, 50, 11, 456))', ASODateTime(2000, 05, 13, 09, 50, 11, 456));

    // named days relative today

    Test({LINENUM}38397, 'today()', ASODate(2020, 05, 15));
    Test({LINENUM}38398, 'yesterday()', ASODate(2020, 05, 14));
    Test({LINENUM}38399, 'tomorrow()', ASODate(2020, 05, 16));


    //
    // Addition
    //

    // milliseconds

    Test({LINENUM}38408, 'AddMilliseconds(datetime(2020, 04, 10, 18, 33, 20, 123), 0)',
      ASODateTime(2020, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38411, 'AddMilliseconds(datetime(2020, 04, 10, 18, 33, 20, 123), 5)',
      ASODateTime(2020, 04, 10, 18, 33, 20, 128));

    Test({LINENUM}38414, 'AddMilliseconds(datetime(2020, 04, 10, 18, 33, 20, 123), 1000)',
      ASODateTime(2020, 04, 10, 18, 33, 21, 123));

    Test({LINENUM}38417, 'AddMilliseconds(datetime(2020, 04, 10, 18, 33, 20, 123), -5)',
      ASODateTime(2020, 04, 10, 18, 33, 20, 118));

    // seconds

    Test({LINENUM}38422, 'AddSeconds(datetime(2020, 04, 10, 18, 33, 20, 123), 0)',
      ASODateTime(2020, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38425, 'AddSeconds(datetime(2020, 04, 10, 18, 33, 20, 123), 5)',
      ASODateTime(2020, 04, 10, 18, 33, 25, 123));

    Test({LINENUM}38428, 'AddSeconds(datetime(2020, 04, 10, 18, 33, 20, 123), 60)',
      ASODateTime(2020, 04, 10, 18, 34, 20, 123));

    Test({LINENUM}38431, 'AddSeconds(datetime(2020, 04, 10, 18, 33, 20, 123), -5)',
      ASODateTime(2020, 04, 10, 18, 33, 15, 123));

    Test({LINENUM}38434, 'AddSeconds(datetime(2020, 04, 10, 18, 33, 20, 123), 123456)',
      ASODateTime(2020, 04, 12, 04, 50, 56, 123));

    // minutes

    Test({LINENUM}38439, 'AddMinutes(datetime(2020, 04, 10, 18, 33, 20, 123), 0)',
      ASODateTime(2020, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38442, 'AddMinutes(datetime(2020, 04, 10, 18, 33, 20, 123), 5)',
      ASODateTime(2020, 04, 10, 18, 38, 20, 123));

    Test({LINENUM}38445, 'AddMinutes(datetime(2020, 04, 10, 18, 33, 20, 123), 60)',
      ASODateTime(2020, 04, 10, 19, 33, 20, 123));

    Test({LINENUM}38448, 'AddMinutes(datetime(2020, 04, 10, 18, 33, 20, 123), -5)',
      ASODateTime(2020, 04, 10, 18, 28, 20, 123));

    // hours

    Test({LINENUM}38453, 'AddHours(datetime(2020, 04, 10, 18, 33, 20, 123), 0)',
      ASODateTime(2020, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38456, 'AddHours(datetime(2020, 04, 10, 18, 33, 20, 123), 5)',
      ASODateTime(2020, 04, 10, 23, 33, 20, 123));

    Test({LINENUM}38459, 'AddHours(datetime(2020, 04, 10, 18, 33, 20, 123), 24)',
      ASODateTime(2020, 04, 11, 18, 33, 20, 123));

    Test({LINENUM}38462, 'AddHours(datetime(2020, 04, 10, 18, 33, 20, 123), -5)',
      ASODateTime(2020, 04, 10, 13, 33, 20, 123));

    // days

    Test({LINENUM}38467, 'AddDays(datetime(2020, 04, 10, 18, 33, 20, 123), 0)',
      ASODateTime(2020, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38470, 'AddDays(datetime(2020, 04, 10, 18, 33, 20, 123), 5)',
      ASODateTime(2020, 04, 15, 18, 33, 20, 123));

    Test({LINENUM}38473, 'AddDays(datetime(2020, 04, 10, 18, 33, 20, 123), 30)',
      ASODateTime(2020, 05, 10, 18, 33, 20, 123));

    Test({LINENUM}38476, 'AddDays(datetime(2020, 04, 10, 18, 33, 20, 123), -5)',
      ASODateTime(2020, 04, 5, 18, 33, 20, 123));

    // weeks

    Test({LINENUM}38481, 'AddWeeks(datetime(2020, 04, 10, 18, 33, 20, 123), 0)',
      ASODateTime(2020, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38484, 'AddWeeks(datetime(2020, 04, 10, 18, 33, 20, 123), 5)',
      ASODateTime(2020, 05, 15, 18, 33, 20, 123));

    Test({LINENUM}38487, 'AddWeeks(datetime(2020, 04, 10, 18, 33, 20, 123), -1)',
      ASODateTime(2020, 04, 3, 18, 33, 20, 123));

    // months (special)

    Test({LINENUM}38492, 'AddMonths(datetime(2020, 04, 10, 18, 33, 20, 123), 0)',
      ASODateTime(2020, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38495, 'AddMonths(datetime(2020, 04, 10, 18, 33, 20, 123), 5)',
      ASODateTime(2020, 09, 10, 18, 33, 20, 123));

    Test({LINENUM}38498, 'AddMonths(datetime(2020, 04, 10, 18, 33, 20, 123), 12)',
      ASODateTime(2021, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38501, 'AddMonths(datetime(2020, 04, 10, 18, 33, 20, 123), 1)',
      ASODateTime(2020, 05, 10, 18, 33, 20, 123));

    Test({LINENUM}38504, 'AddMonths(datetime(2020, 04, 10, 18, 33, 20, 123), -2)',
      ASODateTime(2020, 02, 10, 18, 33, 20, 123));

    Test({LINENUM}38507, 'AddMonths(datetime(2020, 04, 10, 18, 33, 20, 123), -5)',
      ASODateTime(2019, 11, 10, 18, 33, 20, 123));

    Test({LINENUM}38510, 'AddMonths(datetime(2020, 01, 29, 18, 33, 20, 123), 1)',
      ASODateTime(2020, 02, 29, 18, 33, 20, 123));

    Test({LINENUM}38513, 'AddMonths(datetime(2020, 01, 30, 18, 33, 20, 123), 1)',
      ASODateTime(2020, 02, 29, 18, 33, 20, 123));

    Test({LINENUM}38516, 'AddMonths(datetime(2020, 03, 30, 18, 33, 20, 123), -1)',
      ASODateTime(2020, 02, 29, 18, 33, 20, 123));

    Test({LINENUM}38519, 'AddMonths(datetime(2021, 01, 30, 18, 33, 20, 123), 1)',
      ASODateTime(2021, 02, 28, 18, 33, 20, 123));

    Test({LINENUM}38522, 'AddMonths(datetime(2021, 03, 30, 18, 33, 20, 123), -1)',
      ASODateTime(2021, 02, 28, 18, 33, 20, 123));

    Test({LINENUM}38525, 'AddMonths(datetime(2021, 01, 31, 18, 33, 20, 123), 1)',
      ASODateTime(2021, 02, 28, 18, 33, 20, 123));

    Test({LINENUM}38528, 'AddMonths(datetime(2021, 03, 31, 18, 33, 20, 123), -1)',
      ASODateTime(2021, 02, 28, 18, 33, 20, 123));

    Test({LINENUM}38531, 'AddMonths(datetime(2021, 03, 31, 18, 33, 20, 123), 1)',
      ASODateTime(2021, 04, 30, 18, 33, 20, 123));

    Test({LINENUM}38534, 'AddMonths(datetime(2020, 02, 29, 18, 33, 20, 123), 12)',
      ASODateTime(2021, 02, 28, 18, 33, 20, 123));

    // years

    Test({LINENUM}38539, 'AddYears(datetime(2020, 04, 10, 18, 33, 20, 123), 0)',
      ASODateTime(2020, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38542, 'AddYears(datetime(2020, 04, 10, 18, 33, 20, 123), 1)',
      ASODateTime(2021, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38545, 'AddYears(datetime(2020, 04, 10, 18, 33, 20, 123), 10)',
      ASODateTime(2030, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38548, 'AddYears(datetime(2020, 04, 10, 18, 33, 20, 123), 20)',
      ASODateTime(2040, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38551, 'AddYears(datetime(2020, 04, 10, 18, 33, 20, 123), 100)',
      ASODateTime(2120, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38554, 'AddYears(datetime(2020, 04, 10, 18, 33, 20, 123), 1000)',
      ASODateTime(3020, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38557, 'AddYears(datetime(2020, 04, 10, 18, 33, 20, 123), -1)',
      ASODateTime(2019, 04, 10, 18, 33, 20, 123));

    Test({LINENUM}38560, 'AddYears(datetime(2020, 02, 29, 18, 33, 20, 123), 1)',
      ASODateTime(2021, 02, 28, 18, 33, 20, 123));

    Test({LINENUM}38563, 'AddYears(datetime(2020, 02, 29, 18, 33, 20, 123), -1)',
      ASODateTime(2019, 02, 28, 18, 33, 20, 123));

    Test({LINENUM}38566, 'AddYears(datetime(2020, 02, 29, 18, 33, 20, 123), 4)',
      ASODateTime(2024, 02, 29, 18, 33, 20, 123));

    Test({LINENUM}38569, 'AddYears(datetime(2020, 02, 29, 18, 33, 20, 123), 5)',
      ASODateTime(2025, 02, 28, 18, 33, 20, 123));


    //
    // Validation
    //

    Test({LINENUM}38577, 'IsValidDate(date(2020, 04, 10))', True);
    Test({LINENUM}38578, 'IsValidDate(date(1987, 12, 26))', True);
    Test({LINENUM}38579, 'IsValidDate(date(1940, 06, 18))', True);
    Test({LINENUM}38580, 'IsValidDate(date(2150, 08, 01))', True);
    Test({LINENUM}38581, 'IsValidDate(date(2000, 02, 29))', True);
    Test({LINENUM}38582, 'IsValidDate(date(2020, 02, 29))', True);
    Test({LINENUM}38583, 'IsValidDate(date(2400, 02, 29))', True);

    Test({LINENUM}38585, 'IsValidDate(date(2020, 13, 10))', False);
    Test({LINENUM}38586, 'IsValidDate(date(2020, 0, 10))', False);
    Test({LINENUM}38587, 'IsValidDate(date(2020, -2, 10))', False);
    Test({LINENUM}38588, 'IsValidDate(date(2020, 04, 0))', False);
    Test({LINENUM}38589, 'IsValidDate(date(2020, 04, 32))', False);
    Test({LINENUM}38590, 'IsValidDate(date(2020, 04, 100))', False);
    Test({LINENUM}38591, 'IsValidDate(date(2020, 02, 30))', False);
    Test({LINENUM}38592, 'IsValidDate(date(2020, 04, 31))', False);
    Test({LINENUM}38593, 'IsValidDate(date(2020, 11, 31))', False);
    Test({LINENUM}38594, 'IsValidDate(date(2020, 04, -5))', False);
    Test({LINENUM}38595, 'IsValidDate(date(2300, 02, 29))', False);
    Test({LINENUM}38596, 'IsValidDate(date(1900, 02, 29))', False);

    Test({LINENUM}38598, 'IsValidTime(time(20, 40, 30))', True);
    Test({LINENUM}38599, 'IsValidTime(time(20, 40, 30, 000))', True);
    Test({LINENUM}38600, 'IsValidTime(time(20, 40, 30, 123))', True);
    Test({LINENUM}38601, 'IsValidTime(time(20, 40, 30, 999))', True);
    Test({LINENUM}38602, 'IsValidTime(time(20, 40, 00))', True);
    Test({LINENUM}38603, 'IsValidTime(time(23, 59, 59))', True);
    Test({LINENUM}38604, 'IsValidTime(time(23, 59, 59, 999))', True);
    Test({LINENUM}38605, 'IsValidTime(time(00, 00, 00))', True);

    Test({LINENUM}38607, 'IsValidTime(time(24, 40, 30))', False);
    Test({LINENUM}38608, 'IsValidTime(time(25, 40, 30))', False);
    Test({LINENUM}38609, 'IsValidTime(time(200, 40, 30))', False);
    Test({LINENUM}38610, 'IsValidTime(time(-1, 40, 30))', False);
    Test({LINENUM}38611, 'IsValidTime(time(-2, 40, 30))', False);
    Test({LINENUM}38612, 'IsValidTime(time(20, 60, 30))', False);
    Test({LINENUM}38613, 'IsValidTime(time(20, 120, 30))', False);
    Test({LINENUM}38614, 'IsValidTime(time(20, -2, 30))', False);
    Test({LINENUM}38615, 'IsValidTime(time(20, 40, 60))', False);
    Test({LINENUM}38616, 'IsValidTime(time(20, 40, 70))', False);
    Test({LINENUM}38617, 'IsValidTime(time(20, 40, -1))', False);
    Test({LINENUM}38618, 'IsValidTime(time(20, 40, 30, 1000))', False);
    Test({LINENUM}38619, 'IsValidTime(time(20, 40, 30, 1234))', False);
    Test({LINENUM}38620, 'IsValidTime(time(20, 40, 30, -2))', False);

    Test({LINENUM}38622, 'IsValidDatetime(datetime(2020, 04, 10, 20, 45, 30, 123))', True);
    Test({LINENUM}38623, 'IsValidDatetime(datetime(2020, 02, 29, 20, 45, 30, 123))', True);
    Test({LINENUM}38624, 'IsValidDatetime(datetime(2000, 02, 29, 20, 45, 30, 123))', True);
    Test({LINENUM}38625, 'IsValidDatetime(datetime(2400, 02, 29, 20, 45, 30, 123))', True);
    Test({LINENUM}38626, 'IsValidDatetime(datetime(1987, 12, 26, 12, 30, 30, 000))', True);
    Test({LINENUM}38627, 'IsValidDatetime(datetime(2610, 10, 02, 09, 10, 20, 000))', True);
    Test({LINENUM}38628, 'IsValidDatetime(datetime(1920, 05, 07, 13, 08, 02, 000))', True);
    Test({LINENUM}38629, 'IsValidDatetime(datetime(1999, 12, 31, 12, 59, 59, 999))', True);
    Test({LINENUM}38630, 'IsValidDatetime(datetime(2000, 01, 01, 00, 00, 00, 000))', True);
    Test({LINENUM}38631, 'IsValidDatetime(datetime(1900, 02, 28, 09, 52, 12, 766))', True);
    Test({LINENUM}38632, 'IsValidDatetime(datetime(2062, 07, 19, 07, 41, 20, 547))', True);
    Test({LINENUM}38633, 'IsValidDatetime(datetime(2020, 04, 05, 22, 17, 52, 711))', True);

    Test({LINENUM}38635, 'IsValidDatetime(datetime(2020, 00, 10, 20, 45, 30, 123))', False);
    Test({LINENUM}38636, 'IsValidDatetime(datetime(2020, 13, 10, 20, 45, 30, 123))', False);
    Test({LINENUM}38637, 'IsValidDatetime(datetime(2020, -1, 10, 20, 45, 30, 123))', False);
    Test({LINENUM}38638, 'IsValidDatetime(datetime(2020, 04, 00, 20, 45, 30, 123))', False);
    Test({LINENUM}38639, 'IsValidDatetime(datetime(2020, 04, 31, 20, 45, 30, 123))', False);
    Test({LINENUM}38640, 'IsValidDatetime(datetime(2020, 05, 32, 20, 45, 30, 123))', False);
    Test({LINENUM}38641, 'IsValidDatetime(datetime(2020, 04, 50, 20, 45, 30, 123))', False);
    Test({LINENUM}38642, 'IsValidDatetime(datetime(2020, 04, -5, 20, 45, 30, 123))', False);
    Test({LINENUM}38643, 'IsValidDatetime(datetime(2020, 04, 10, 24, 45, 30, 123))', False);
    Test({LINENUM}38644, 'IsValidDatetime(datetime(2020, 04, 10, 28, 45, 30, 123))', False);
    Test({LINENUM}38645, 'IsValidDatetime(datetime(2020, 04, 10, -1, 45, 30, 123))', False);
    Test({LINENUM}38646, 'IsValidDatetime(datetime(2020, 04, 10, 20, 60, 30, 123))', False);
    Test({LINENUM}38647, 'IsValidDatetime(datetime(2020, 04, 10, 20, 80, 30, 123))', False);
    Test({LINENUM}38648, 'IsValidDatetime(datetime(2020, 04, 10, 20, -2, 30, 123))', False);
    Test({LINENUM}38649, 'IsValidDatetime(datetime(2020, 04, 10, 20, 45, 60, 123))', False);
    Test({LINENUM}38650, 'IsValidDatetime(datetime(2020, 04, 10, 20, 45, 90, 123))', False);
    Test({LINENUM}38651, 'IsValidDatetime(datetime(2020, 04, 10, 20, 45, -4, 123))', False);
    Test({LINENUM}38652, 'IsValidDatetime(datetime(2020, 04, 10, 20, 45, 30, 1123))', False);
    Test({LINENUM}38653, 'IsValidDatetime(datetime(2020, 04, 10, 20, 45, 30, -50))', False);
    Test({LINENUM}38654, 'IsValidDatetime(datetime(2021, 02, 29, 20, 45, 30, 123))', False);
    Test({LINENUM}38655, 'IsValidDatetime(datetime(2100, 02, 29, 20, 45, 30, 123))', False);
    Test({LINENUM}38656, 'IsValidDatetime(datetime(1900, 02, 29, 01, 50, 00, 000))', False);


    //
    // Distance
    //

    // milliseconds

    Eps(1E-3); Test({LINENUM}38665, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.0);
    Eps(1E-3); Test({LINENUM}38666, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 123))', 123.0);
    Eps(1E-3); Test({LINENUM}38667, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 123), datetime(2020, 04, 10, 21, 00, 00, 000))', 123.0);
    Eps(1E-3); Test({LINENUM}38668, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 30, 000))', 30000.0);
    Eps(1E-3); Test({LINENUM}38669, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 30, 00, 000))', 30*60*1000.0);
    Eps(1E-3); Test({LINENUM}38670, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 30, 00, 123))', 30*60*1000.0+123.0);
    Eps(1E-3); Test({LINENUM}38671, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 23, 00, 00, 000))', 2*60*60*1000.0);
    Eps(1E-3); Test({LINENUM}38672, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 15, 21, 00, 00, 000))', 5*24*60*60*1000.0);
    Eps(1E-3); Test({LINENUM}38673, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 05, 10, 21, 00, 00, 000))', 30*24*60*60*1000.0);
    Eps(1E-3); Test({LINENUM}38674, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2021, 04, 10, 21, 00, 00, 000))', 365*24*60*60*1000.0);
    Eps(1E-3); Test({LINENUM}38675, 'MillisecondsBetween(datetime(2021, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 365*24*60*60*1000.0);
    Eps(1E-3); Test({LINENUM}38676, 'MillisecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2022, 04, 10, 21, 00, 00, 000))', 2*365*24*60*60*1000.0);
    Eps(1E-3); Test({LINENUM}38677, 'MillisecondsBetween(datetime(2019, 04, 10, 21, 00, 00, 000), datetime(2021, 04, 10, 21, 00, 00, 000))', (366+365)*24*60*60*1000.0);

    Eps(1E-3); Test({LINENUM}38679, 'MillisecondsBetween(date(2020, 04, 10), date(2020, 05, 10))', 30*24*60*60*1000.0);
    Test({LINENUM}38680, 'MillisecondsBetween(time(14, 20, 30), time(14, 50, 00))', failure, 'An object of type DateTime was expected as argument 1, but an object of type structure of type "Time" was given.');

    // seconds

    Eps(1E-6); Test({LINENUM}38684, 'SecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.0);
    Eps(1E-6); Test({LINENUM}38685, 'SecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 123))', 0.123);
    Eps(1E-6); Test({LINENUM}38686, 'SecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 123), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.123);
    Eps(1E-6); Test({LINENUM}38687, 'SecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 20, 000))', 20.0);
    Eps(1E-6); Test({LINENUM}38688, 'SecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 10, 00, 000))', 600.0);
    Eps(1E-6); Test({LINENUM}38689, 'SecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 10, 23, 000))', 623.0);
    Eps(1E-6); Test({LINENUM}38690, 'SecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 10, 23, 500))', 623.5);
    Eps(1E-6); Test({LINENUM}38691, 'SecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 22, 00, 00, 000))', 3600.0);
    Eps(1E-6); Test({LINENUM}38692, 'SecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 15, 21, 00, 00, 000))', 5*24*60*60.0);
    Eps(1E-6); Test({LINENUM}38693, 'SecondsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 05, 10, 21, 00, 00, 000))', 30*24*60*60.0);
    Eps(1E-6); Test({LINENUM}38694, 'SecondsBetween(datetime(2021, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 365*24*60*60.0);
    Eps(1E-6); Test({LINENUM}38695, 'SecondsBetween(datetime(2022, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 2*365*24*60*60.0);
    Eps(1E-6); Test({LINENUM}38696, 'SecondsBetween(datetime(2022, 04, 10, 21, 00, 00, 000), datetime(2019, 04, 10, 21, 00, 00, 000))', (2*365+366)*24*60*60.0);

    Eps(1E-6); Test({LINENUM}38698, 'SecondsBetween(date(2020, 04, 10), date(2020, 04, 15))', 5*24*60*60.0);
    Test({LINENUM}38699, 'SecondsBetween(time(14, 20, 30), time(14, 50, 00))', failure, 'An object of type DateTime was expected as argument 1, but an object of type structure of type "Time" was given.');

    // minutes

    Eps(1E-8); Test({LINENUM}38703, 'MinutesBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.0);
    Eps(1E-8); Test({LINENUM}38704, 'MinutesBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 123))', 0.123/60);
    Eps(1E-8); Test({LINENUM}38705, 'MinutesBetween(datetime(2020, 04, 10, 21, 00, 00, 123), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.123/60);
    Eps(1E-8); Test({LINENUM}38706, 'MinutesBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 57, 000))', 57/60);
    Eps(1E-8); Test({LINENUM}38707, 'MinutesBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 45, 00, 000))', 45.0);
    Eps(1E-8); Test({LINENUM}38708, 'MinutesBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 23, 00, 00, 000))', 120.0);
    Eps(1E-8); Test({LINENUM}38709, 'MinutesBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 23, 15, 00, 000))', 135.0);
    Eps(1E-8); Test({LINENUM}38710, 'MinutesBetween(datetime(2020, 04, 12, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 2*24*60.0);
    Eps(1E-8); Test({LINENUM}38711, 'MinutesBetween(datetime(2020, 06, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', (30+31)*24*60.0);
    Eps(1E-8); Test({LINENUM}38712, 'MinutesBetween(datetime(2021, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 365*24*60.0);
    Eps(1E-8); Test({LINENUM}38713, 'MinutesBetween(datetime(2022, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 2*365*24*60.0);
    Eps(1E-8); Test({LINENUM}38714, 'MinutesBetween(datetime(2023, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 3*365*24*60.0);
    Eps(1E-8); Test({LINENUM}38715, 'MinutesBetween(datetime(2024, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', (3*365 + 366)*24*60.0);

    Eps(1E-8); Test({LINENUM}38717, 'MinutesBetween(date(2020, 04, 12), date(2020, 04, 10))', 2*24*60.0);
    Test({LINENUM}38718, 'MinutesBetween(time(14, 20, 30), time(14, 50, 00))', failure, 'An object of type DateTime was expected as argument 1, but an object of type structure of type "Time" was given.');

    // hours

    Eps(1E-9); Test({LINENUM}38722, 'HoursBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.0);
    Eps(1E-9); Test({LINENUM}38723, 'HoursBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 123))', 0.123/3600);
    Eps(1E-9); Test({LINENUM}38724, 'HoursBetween(datetime(2020, 04, 10, 21, 00, 00, 123), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.123/3600);
    Eps(1E-9); Test({LINENUM}38725, 'HoursBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 40, 000))', 40/3600);
    Eps(1E-9); Test({LINENUM}38726, 'HoursBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 20, 00, 000))', 20/60);
    Eps(1E-9); Test({LINENUM}38727, 'HoursBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 20, 40, 000))', 20/60 + 40/3600);
    Eps(1E-9); Test({LINENUM}38728, 'HoursBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 11, 05, 00, 00, 000))', 8.0);
    Eps(1E-9); Test({LINENUM}38729, 'HoursBetween(datetime(2020, 04, 11, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 24.0);
    Eps(1E-9); Test({LINENUM}38730, 'HoursBetween(datetime(2020, 05, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 30*24.0);
    Eps(1E-9); Test({LINENUM}38731, 'HoursBetween(datetime(2021, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 365*24.0);
    Eps(1E-9); Test({LINENUM}38732, 'HoursBetween(datetime(2022, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 2*365*24.0);
    Eps(1E-9); Test({LINENUM}38733, 'HoursBetween(datetime(2023, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 3*365*24.0);
    Eps(1E-9); Test({LINENUM}38734, 'HoursBetween(datetime(2024, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', (3*365+366)*24.0);

    Eps(1E-9); Test({LINENUM}38736, 'HoursBetween(date(2020, 05, 10), date(2020, 04, 10))', 30*24.0);
    Test({LINENUM}38737, 'HoursBetween(time(14, 20, 30), time(14, 50, 00))', failure, 'An object of type DateTime was expected as argument 1, but an object of type structure of type "Time" was given.');

    // days

    Eps(1E-11); Test({LINENUM}38741, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.0);
    Eps(1E-11); Test({LINENUM}38742, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 123))', 0.123/86400);
    Eps(1E-11); Test({LINENUM}38743, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 123), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.123/86400);
    Eps(1E-11); Test({LINENUM}38744, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 10, 000))', 10/86400);
    Eps(1E-11); Test({LINENUM}38745, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 50, 00, 000))', 50/1440);
    Eps(1E-11); Test({LINENUM}38746, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 50, 30, 000))', 50/1440 + 30/86400);
    Eps(1E-11); Test({LINENUM}38747, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 11, 00, 00, 00, 000))', 3/24);
    Eps(1E-11); Test({LINENUM}38748, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 17, 21, 00, 00, 000))', 7.0);
    Eps(1E-11); Test({LINENUM}38749, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 05, 10, 21, 00, 00, 000))', 30.0);
    Eps(1E-11); Test({LINENUM}38750, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2021, 04, 10, 21, 00, 00, 000))', 365.0);
    Eps(1E-11); Test({LINENUM}38751, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2022, 04, 10, 21, 00, 00, 000))', 2*365.0);
    Eps(1E-11); Test({LINENUM}38752, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2023, 04, 10, 21, 00, 00, 000))', 3*365.0);
    Eps(1E-11); Test({LINENUM}38753, 'DaysBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2024, 04, 10, 21, 00, 00, 000))', 3*365.0 + 366);

    Eps(1E-11); Test({LINENUM}38755, 'DaysBetween(date(2020, 04, 10), date(2023, 04, 10))', 3*365.0);
    Test({LINENUM}38756, 'DaysBetween(time(14, 20, 30), time(14, 50, 00))', failure, 'An object of type DateTime was expected as argument 1, but an object of type structure of type "Time" was given.');

    // weeks

    Eps(1E-11); Test({LINENUM}38760, 'WeeksBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.0);
    Eps(1E-11); Test({LINENUM}38761, 'WeeksBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 123))', 0.123/604800);
    Eps(1E-11); Test({LINENUM}38762, 'WeeksBetween(datetime(2020, 04, 10, 21, 00, 00, 123), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.123/604800);
    Eps(1E-11); Test({LINENUM}38763, 'WeeksBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 30, 000))', 30/604800);
    Eps(1E-11); Test({LINENUM}38764, 'WeeksBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 20, 00, 000))', 20/10080);
    Eps(1E-11); Test({LINENUM}38765, 'WeeksBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 22, 00, 00, 000))', 1/168);
    Eps(1E-11); Test({LINENUM}38766, 'WeeksBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 12, 21, 00, 00, 000))', 2/7);
    Eps(1E-11); Test({LINENUM}38767, 'WeeksBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 30, 21, 00, 00, 000))', 20/7);
    Eps(1E-11); Test({LINENUM}38768, 'WeeksBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 06, 10, 21, 00, 00, 000))', (30+31)/7);
    Eps(1E-11); Test({LINENUM}38769, 'WeeksBetween(datetime(2021, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 365/7);
    Eps(1E-11); Test({LINENUM}38770, 'WeeksBetween(datetime(2022, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 2*365/7);
    Eps(1E-11); Test({LINENUM}38771, 'WeeksBetween(datetime(2023, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 3*365/7);
    Eps(1E-11); Test({LINENUM}38772, 'WeeksBetween(datetime(2024, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', (3*365 + 366)/7);

    Eps(1E-11); Test({LINENUM}38774, 'WeeksBetween(date(2020, 04, 10), date(2020, 06, 10))', (30+31)/7);
    Test({LINENUM}38775, 'WeeksBetween(time(14, 20, 30), time(14, 50, 00))', failure, 'An object of type DateTime was expected as argument 1, but an object of type structure of type "Time" was given.');

    // months

    Eps(1E-12); Test({LINENUM}38779, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.0);
    Eps(1E-12); Test({LINENUM}38780, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 123))', 0.123/(60*60*24*30.4375));
    Eps(1E-12); Test({LINENUM}38781, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 123), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.123/(60*60*24*30.4375));
    Eps(1E-12); Test({LINENUM}38782, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 15, 000))', 15/(60*60*24*30.4375));
    Eps(1E-12); Test({LINENUM}38783, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 45, 00, 000))', 45/(60*24*30.4375));
    Eps(1E-12); Test({LINENUM}38784, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 22, 00, 00, 000))', 1/(24*30.4375));
    Eps(1E-12); Test({LINENUM}38785, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 17, 21, 00, 00, 000))', 7/30.4375);
    Eps(1E-12); Test({LINENUM}38786, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 05, 10, 21, 00, 00, 000))', 30/30.4375);
    Eps(1E-12); Test({LINENUM}38787, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2021, 04, 10, 21, 00, 00, 000))', 365/30.4375);
    Eps(1E-12); Test({LINENUM}38788, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2022, 04, 10, 21, 00, 00, 000))', 2*365/30.4375);
    Eps(1E-12); Test({LINENUM}38789, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2023, 04, 10, 21, 00, 00, 000))', 3*365/30.4375);
    Eps(1E-12); Test({LINENUM}38790, 'MonthsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2024, 04, 10, 21, 00, 00, 000))', 4*12.0);

    Eps(1E-12); Test({LINENUM}38792, 'MonthsBetween(date(2020, 04, 10), date(2021, 04, 10))', 365/30.4375);
    Test({LINENUM}38793, 'MonthsBetween(time(14, 20, 30), time(14, 50, 00))', failure, 'An object of type DateTime was expected as argument 1, but an object of type structure of type "Time" was given.');

    // years

    Eps(1E-13); Test({LINENUM}38797, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.0);
    Eps(1E-13); Test({LINENUM}38798, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 00, 123))', 0.123/(60*60*24*365.25));
    Eps(1E-13); Test({LINENUM}38799, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 123), datetime(2020, 04, 10, 21, 00, 00, 000))', 0.123/(60*60*24*365.25));
    Eps(1E-13); Test({LINENUM}38800, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 00, 17, 000))', 17/(60*60*24*365.25));
    Eps(1E-13); Test({LINENUM}38801, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 21, 20, 00, 000))', 20/(60*24*365.25));
    Eps(1E-13); Test({LINENUM}38802, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 10, 22, 00, 00, 000))', 1/(24*365.25));
    Eps(1E-13); Test({LINENUM}38803, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 04, 19, 21, 00, 00, 000))', 9/365.25);
    Eps(1E-13); Test({LINENUM}38804, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2020, 05, 10, 21, 00, 00, 000))', 30/365.25);
    Eps(1E-13); Test({LINENUM}38805, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2021, 04, 10, 21, 00, 00, 000))', 365/365.25);
    Eps(1E-13); Test({LINENUM}38806, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2022, 04, 10, 21, 00, 00, 000))', 2*365/365.25);
    Eps(1E-13); Test({LINENUM}38807, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2023, 04, 10, 21, 00, 00, 000))', 3*365/365.25);
    Eps(1E-13); Test({LINENUM}38808, 'YearsBetween(datetime(2020, 04, 10, 21, 00, 00, 000), datetime(2024, 04, 10, 21, 00, 00, 000))', 4.0);

    Eps(1E-13); Test({LINENUM}38810, 'YearsBetween(date(2020, 04, 10), date(2024, 04, 10))', 4.0);
    Eps(1E-13); Test({LINENUM}38811, 'YearsBetween(date(2020, 04, 10), date(2020, 06, 10))', (30+31) / 365.25);
    Test({LINENUM}38812, 'YearsBetween(time(14, 20, 30), time(14, 50, 00))', failure, 'An object of type DateTime was expected as argument 1, but an object of type structure of type "Time" was given.');


    //
    // Extraction
    //

    Test({LINENUM}38819, 'DayOfTheWeek()', 5);
    Test({LINENUM}38820, 'DayOfTheWeek(now())', 5);
    Test({LINENUM}38821, 'DayOfTheWeek(date())', 5);
    Test({LINENUM}38822, 'DayOfTheWeek(today())', 5);
    Test({LINENUM}38823, 'DayOfTheWeek(yesterday())', 4);
    Test({LINENUM}38824, 'DayOfTheWeek(tomorrow())', 6);
    Test({LINENUM}38825, 'DayOfTheWeek(time())', failure, 'An object of type DateTime was expected as argument 1, but an object of type structure of type "Time" was given.');

    Test({LINENUM}38827, 'DayOfTheWeek(date(2020, 04, 11))', 6);
    Test({LINENUM}38828, 'DayOfTheWeek(date(2020, 04, 12))', 7); // Sunday
    Test({LINENUM}38829, 'DayOfTheWeek(date(2020, 04, 13))', 1); // Monday

    Test({LINENUM}38831, 'DayOfTheWeek(date(1944, 06, 14))', 3);
    Test({LINENUM}38832, 'DayOfTheWeek(date(2076, 08, 20))', 4);

    // -

    Test({LINENUM}38836, 'DayOfTheMonth()', 15);
    Test({LINENUM}38837, 'DayOfTheMonth(date(1944, 06, 14))', 14);
    Test({LINENUM}38838, 'DayOfTheMonth(date(2076, 08, 20))', 20);

    // -

    Test({LINENUM}38842, 'DayOfTheYear()', 136);
    Test({LINENUM}38843, 'DayOfTheYear(date(1944, 06, 14))', 166);
    Test({LINENUM}38844, 'DayOfTheYear(date(2077, 08, 20))', 232);

    // -

    Test({LINENUM}38848, 'WeekOfTheYear()', 20);
    Test({LINENUM}38849, 'WeekOfTheYear(date(1944, 06, 14))', 24);
    Test({LINENUM}38850, 'WeekOfTheYear(date(2076, 08, 20))', 34);

    // -

    Test({LINENUM}38854, 'SecondOfTheDay()', 52220);
    Test({LINENUM}38855, 'SecondOfTheDay(date(1944, 06, 14))', 0);
    Test({LINENUM}38856, 'SecondOfTheDay(date(2076, 08, 20))', 0);

    Test({LINENUM}38858, 'SecondOfTheDay(datetime(1944, 06, 14, 08, 45, 30))', 31530);
    Test({LINENUM}38859, 'SecondOfTheDay(datetime(2076, 08, 20, 20, 14, 07, 610))', 72847{.61});

    // -

    Test({LINENUM}38863, 'SecondOfTheWeek()', 4*86400 + 52220);
    Test({LINENUM}38864, 'SecondOfTheWeek(date(1944, 06, 14))', 2*24*60*60);
    Test({LINENUM}38865, 'SecondOfTheWeek(date(2076, 08, 20))', 3*24*60*60);

    Test({LINENUM}38867, 'SecondOfTheWeek(datetime(1944, 06, 14, 08, 45, 30))', 2*24*60*60 + 31530);
    Test({LINENUM}38868, 'SecondOfTheWeek(datetime(2076, 08, 20, 20, 14, 07, 610))', 3*24*60*60 + 72847{.61});

    // -

    Test({LINENUM}38872, 'SecondOfTheMonth()', 14*86400 + 52220);
    Test({LINENUM}38873, 'SecondOfTheMonth(date(1944, 06, 14))', 13*24*60*60);
    Test({LINENUM}38874, 'SecondOfTheMonth(date(2076, 08, 20))', 19*24*60*60);

    Test({LINENUM}38876, 'SecondOfTheMonth(datetime(1944, 06, 14, 08, 45, 30))', 13*24*60*60 + 31530);
    Test({LINENUM}38877, 'SecondOfTheMonth(datetime(2076, 08, 20, 20, 14, 07, 610))', 19*24*60*60 + 72847{.61});

    // -

    Test({LINENUM}38881, 'SecondOfTheYear()', 11716220);
    Test({LINENUM}38882, 'SecondOfTheYear(date(1944, 06, 14))', 165*24*60*60);
    Test({LINENUM}38883, 'SecondOfTheYear(date(2077, 08, 20))', 231*24*60*60);

    Test({LINENUM}38885, 'SecondOfTheYear(datetime(1944, 06, 14, 08, 45, 30))', 165*24*60*60 + 31530);
    Test({LINENUM}38886, 'SecondOfTheYear(datetime(2077, 08, 20, 20, 14, 07, 610))', 231*24*60*60 + 72847{.61});

    // -

    Test({LINENUM}38890, 'MillisecondOfTheDay()', 52220123);
    Test({LINENUM}38891, 'MillisecondOfTheDay(date(1944, 06, 14))', 1000*(0));
    Test({LINENUM}38892, 'MillisecondOfTheDay(date(2076, 08, 20))', 1000*(0));

    Test({LINENUM}38894, 'MillisecondOfTheDay(datetime(1944, 06, 14, 08, 45, 30))', 1000*(31530));
    Test({LINENUM}38895, 'MillisecondOfTheDay(datetime(2076, 08, 20, 20, 14, 07, 610))', 1000*(72847{.61}) + 610);

    // -

    Test({LINENUM}38899, 'MillisecondOfTheWeek()', 397820123);
    Test({LINENUM}38900, 'MillisecondOfTheWeek(date(1944, 06, 14))', 1000*(2*24*60*60));
    Test({LINENUM}38901, 'MillisecondOfTheWeek(date(2076, 08, 20))', 1000*(3*24*60*60));

    Test({LINENUM}38903, 'MillisecondOfTheWeek(datetime(1944, 06, 14, 08, 45, 30))', 1000*(2*24*60*60 + 31530));
    Test({LINENUM}38904, 'MillisecondOfTheWeek(datetime(2076, 08, 20, 20, 14, 07, 610))', 1000*(3*24*60*60 + 72847{.61}) + 610);

    // -

    Test({LINENUM}38908, 'MillisecondOfTheMonth()', 1261820123);
    Test({LINENUM}38909, 'MillisecondOfTheMonth(date(1944, 06, 14))', 1000*(13*24*60*60));
    Test({LINENUM}38910, 'MillisecondOfTheMonth(date(2076, 08, 20))', 1000*(19*24*60*60));

    Test({LINENUM}38912, 'MillisecondOfTheMonth(datetime(1944, 06, 14, 08, 45, 30))', 1000*(13*24*60*60 + 31530));
    Test({LINENUM}38913, 'MillisecondOfTheMonth(datetime(2076, 08, 20, 20, 14, 07, 610))', 1000*(19*24*60*60 + 72847{.61}) + 610);

    // -

    Test({LINENUM}38917, 'MillisecondOfTheYear()', 11716220123);
    Test({LINENUM}38918, 'MillisecondOfTheYear(date(1944, 06, 14))', Int64(1000)*(165*24*60*60));
    Test({LINENUM}38919, 'MillisecondOfTheYear(date(2077, 08, 20))', Int64(1000)*(231*24*60*60));

    Test({LINENUM}38921, 'MillisecondOfTheYear(datetime(1944, 06, 14, 08, 45, 30))', Int64(1000)*(165*24*60*60 + 31530));
    Test({LINENUM}38922, 'MillisecondOfTheYear(datetime(2077, 08, 20, 20, 14, 07, 610))', Int64(1000)*(231*24*60*60 + 72847{.61}) + 610);


    //
    // Miscellaneous functions
    //

    Test({LINENUM}38929, 'IsLeapYear(1996)', True);
    Test({LINENUM}38930, 'IsLeapYear(1997)', False);
    Test({LINENUM}38931, 'IsLeapYear(1998)', False);
    Test({LINENUM}38932, 'IsLeapYear(1999)', False);
    Test({LINENUM}38933, 'IsLeapYear(2000)', True);
    Test({LINENUM}38934, 'IsLeapYear(2001)', False);
    Test({LINENUM}38935, 'IsLeapYear(2002)', False);
    Test({LINENUM}38936, 'IsLeapYear(2003)', False);
    Test({LINENUM}38937, 'IsLeapYear(2004)', True);
    Test({LINENUM}38938, 'IsLeapYear(2005)', False);
    Test({LINENUM}38939, 'IsLeapYear(2006)', False);
    Test({LINENUM}38940, 'IsLeapYear(2007)', False);
    Test({LINENUM}38941, 'IsLeapYear(2008)', True);

    Test({LINENUM}38943, 'IsLeapYear(2100)', False);
    Test({LINENUM}38944, 'IsLeapYear(2200)', False);
    Test({LINENUM}38945, 'IsLeapYear(2300)', False);
    Test({LINENUM}38946, 'IsLeapYear(2400)', True);

    // -

    Test({LINENUM}38950, 'DaysInYear(1996)', 366);
    Test({LINENUM}38951, 'DaysInYear(1997)', 365);
    Test({LINENUM}38952, 'DaysInYear(1998)', 365);
    Test({LINENUM}38953, 'DaysInYear(1999)', 365);
    Test({LINENUM}38954, 'DaysInYear(2000)', 366);
    Test({LINENUM}38955, 'DaysInYear(2001)', 365);
    Test({LINENUM}38956, 'DaysInYear(2002)', 365);
    Test({LINENUM}38957, 'DaysInYear(2003)', 365);
    Test({LINENUM}38958, 'DaysInYear(2004)', 366);
    Test({LINENUM}38959, 'DaysInYear(2005)', 365);
    Test({LINENUM}38960, 'DaysInYear(2006)', 365);
    Test({LINENUM}38961, 'DaysInYear(2007)', 365);
    Test({LINENUM}38962, 'DaysInYear(2008)', 366);

    Test({LINENUM}38964, 'DaysInYear(2100)', 365);
    Test({LINENUM}38965, 'DaysInYear(2200)', 365);
    Test({LINENUM}38966, 'DaysInYear(2300)', 365);
    Test({LINENUM}38967, 'DaysInYear(2400)', 366);

    // -

    Test({LINENUM}38971, 'DaysInMonth(1996, 2)', 29);
    Test({LINENUM}38972, 'DaysInMonth(1997, 2)', 28);
    Test({LINENUM}38973, 'DaysInMonth(1998, 2)', 28);
    Test({LINENUM}38974, 'DaysInMonth(1999, 2)', 28);
    Test({LINENUM}38975, 'DaysInMonth(2000, 2)', 29);
    Test({LINENUM}38976, 'DaysInMonth(2001, 2)', 28);
    Test({LINENUM}38977, 'DaysInMonth(2002, 2)', 28);
    Test({LINENUM}38978, 'DaysInMonth(2003, 2)', 28);
    Test({LINENUM}38979, 'DaysInMonth(2004, 2)', 29);
    Test({LINENUM}38980, 'DaysInMonth(2005, 2)', 28);
    Test({LINENUM}38981, 'DaysInMonth(2006, 2)', 28);
    Test({LINENUM}38982, 'DaysInMonth(2007, 2)', 28);
    Test({LINENUM}38983, 'DaysInMonth(2008, 2)', 29);

    Test({LINENUM}38985, 'DaysInMonth(2100, 2)', 28);
    Test({LINENUM}38986, 'DaysInMonth(2200, 2)', 28);
    Test({LINENUM}38987, 'DaysInMonth(2300, 2)', 28);
    Test({LINENUM}38988, 'DaysInMonth(2400, 2)', 29);

    Test({LINENUM}38990, 'DaysInMonth(1996, 3)', 31);
    Test({LINENUM}38991, 'DaysInMonth(1997, 3)', 31);
    Test({LINENUM}38992, 'DaysInMonth(1998, 3)', 31);
    Test({LINENUM}38993, 'DaysInMonth(1999, 3)', 31);
    Test({LINENUM}38994, 'DaysInMonth(2000, 3)', 31);
    Test({LINENUM}38995, 'DaysInMonth(2001, 3)', 31);
    Test({LINENUM}38996, 'DaysInMonth(2002, 3)', 31);
    Test({LINENUM}38997, 'DaysInMonth(2003, 3)', 31);
    Test({LINENUM}38998, 'DaysInMonth(2004, 3)', 31);
    Test({LINENUM}38999, 'DaysInMonth(2005, 3)', 31);
    Test({LINENUM}39000, 'DaysInMonth(2006, 3)', 31);
    Test({LINENUM}39001, 'DaysInMonth(2007, 3)', 31);
    Test({LINENUM}39002, 'DaysInMonth(2008, 3)', 31);

    Test({LINENUM}39004, 'DaysInMonth(2100, 3)', 31);
    Test({LINENUM}39005, 'DaysInMonth(2200, 3)', 31);
    Test({LINENUM}39006, 'DaysInMonth(2300, 3)', 31);
    Test({LINENUM}39007, 'DaysInMonth(2400, 3)', 31);

    // -

    Eps; Test({LINENUM}39011, 'timestamp()', 43966.604399571759259291);
    Eps; Test({LINENUM}39012, 'timestamp(now())', 43966.604399571759259291);
    Eps; Test({LINENUM}39013, 'timestamp(datetime())', 43966.604399571759259291);
    Eps; Test({LINENUM}39014, 'timestamp(date())', 43966.0);
    Eps(1E-10); Test({LINENUM}39015, 'timestamp(time())', 0.604399571759259291);
    Eps; Test({LINENUM}39016, 'timestamp(today())', 43966.0);
    Eps; Test({LINENUM}39017, 'timestamp(yesterday())', 43965.0);
    Eps; Test({LINENUM}39018, 'timestamp(tomorrow())', 43967.0);

    Eps; Test({LINENUM}39020, 'timestamp(date(2050, 07, 05))', 54974.0);
    Eps; Test({LINENUM}39021, 'timestamp(datetime(2050, 07, 05, 09, 20, 00, 000))', 54974.388888888888888889);
    Eps; Test({LINENUM}39022, 'timestamp(time(09, 20, 00, 000))', 0.388888888888888889);

    Eps; Test({LINENUM}39024, 'timestamp(54974.0)', 54974.0);
    Eps; Test({LINENUM}39025, 'timestamp(54974.388888888888888889)', 54974.388888888888888889);
    Eps; Test({LINENUM}39026, 'timestamp(0.388888888888888889)', 0.388888888888888889);


    //
    // Truncation
    //

    Test({LINENUM}39033, 'TruncToMillisecond(now())', ASODateTime(2020, 05, 15, 14, 30, 20, 123));
    Test({LINENUM}39034, 'TruncToSecond(now())', ASODateTime(2020, 05, 15, 14, 30, 20, 000));
    Test({LINENUM}39035, 'TruncToMinute(now())', ASODateTime(2020, 05, 15, 14, 30, 00, 000));
    Test({LINENUM}39036, 'TruncToHour(now())', ASODateTime(2020, 05, 15, 14, 00, 00, 000));
    Test({LINENUM}39037, 'TruncToDay(now())', ASODateTime(2020, 05, 15, 00, 00, 00, 000));
    Test({LINENUM}39038, 'TruncToMonth(now())', ASODateTime(2020, 05, 01, 00, 00, 00, 000));
    Test({LINENUM}39039, 'TruncToYear(now())', ASODateTime(2020, 01, 01, 00, 00, 00, 000));

    Test({LINENUM}39041, 'TruncToMillisecond(timestamp(now()))', ASOToDateTimeFree(ASODateTime(2020, 05, 15, 14, 30, 20, 123)));
    Test({LINENUM}39042, 'TruncToSecond(timestamp(now()))', ASOToDateTimeFree(ASODateTime(2020, 05, 15, 14, 30, 20, 000)));
    Test({LINENUM}39043, 'TruncToMinute(timestamp(now()))', ASOToDateTimeFree(ASODateTime(2020, 05, 15, 14, 30, 00, 000)));
    Test({LINENUM}39044, 'TruncToHour(timestamp(now()))', ASOToDateTimeFree(ASODateTime(2020, 05, 15, 14, 00, 00, 000)));
    Test({LINENUM}39045, 'TruncToDay(timestamp(now()))', ASOToDateTimeFree(ASODateTime(2020, 05, 15, 00, 00, 00, 000)));
    Test({LINENUM}39046, 'TruncToMonth(timestamp(now()))', ASOToDateTimeFree(ASODateTime(2020, 05, 01, 00, 00, 00, 000)));
    Test({LINENUM}39047, 'TruncToYear(timestamp(now()))', ASOToDateTimeFree(ASODateTime(2020, 01, 01, 00, 00, 00, 000)));

    Eps(1E-11); Test({LINENUM}39049, 'TruncToMillisecond(43966.60439957703703703703703703703703703703703703703703703)', 43966.60439957175925925925925925925925925925925925925925925);


    //
    // Formatting
    //

    Test({LINENUM}39056, 'FormatDateTime(now())', '2020-05-15 14:30:20');

    Test({LINENUM}39058, 'FormatDateTime(now(), "yyyy""-""mm""-""dd"" ""hh"":""nn"":""ss")', '2020-05-15 14:30:20');
    Test({LINENUM}39059, 'FormatDateTime(now(), "yyyy""-""mm""-""dd"" ""hh"":""mm"":""ss")', '2020-05-15 14:30:20');
    Test({LINENUM}39060, 'FormatDateTime(now(), "yyyy-mm-dd hh:nn:ss")', '2020-05-15 14:30:20');

    Test({LINENUM}39062, 'FormatDateTime(now(), "yyyy-mm-dd hh:nn:ss"".""zzz")', '2020-05-15 14:30:20.123');
    Test({LINENUM}39063, 'FormatDateTime(now(), "yyyy-mm-dd""T""hh:nn:ss.zzz""Z""")', '2020-05-15T14:30:20.123Z');

    Test({LINENUM}39065, 'FormatDateTime(now(), "yyyy-mm-dd")', '2020-05-15');
    Test({LINENUM}39066, 'FormatDateTime(now(), "dd""/""mm ""-""yy")', '15/05 -20');
    Test({LINENUM}39067, 'FormatDateTime(now(), "dd""/""m ""-""yy")', '15/5 -20');
    Test({LINENUM}39068, 'FormatDateTime(now(), "(yyyy, mm, dd; hh, nn, ss)")', '(2020, 05, 15; 14, 30, 20)');

    Test({LINENUM}39070, 'FormatDateTime(now(), """klockan"" hh:nn")', 'klockan 14:30');

    Test({LINENUM}39072, 'FormatDateTime(now(), "mmmm dd")', 'May 15');
    Test({LINENUM}39073, 'FormatDateTime(now(), "dd mmmm yyyy")', '15 May 2020');

    Test({LINENUM}39075, 'DateTimeString(now(), "sv-SE")', '2020-05-15 14:30:20');
    Test({LINENUM}39076, 'DateTimeString(now(), "da-DK")', '15-05-2020 14:30:20');
    Test({LINENUM}39077, 'DateTimeString(now(), "nb-NO")', '15.05.2020 14:30:20');
    Test({LINENUM}39078, 'DateTimeString(now(), "en-GB")', '15/05/2020 14:30:20');
    Test({LINENUM}39079, 'DateTimeString(now(), "en-US")', '5/15/2020 2:30:20 PM');
    Test({LINENUM}39080, 'DateTimeString(now(), "de-DE")', '15.05.2020 14:30:20');
    Test({LINENUM}39081, 'DateTimeString(now(), "el")', '15/5/2020 2:30:20 μμ');
    Test({LINENUM}39082, 'DateTimeString(now(), "ko")', '2020-05-15 오후 2:30:20');

    Test({LINENUM}39084, 'DateString(now(), "sv-SE")', '2020-05-15');
    Test({LINENUM}39085, 'DateString(now(), "da-DK")', '15-05-2020');
    Test({LINENUM}39086, 'DateString(now(), "nb-NO")', '15.05.2020');
    Test({LINENUM}39087, 'DateString(now(), "en-GB")', '15/05/2020');
    Test({LINENUM}39088, 'DateString(now(), "en-US")', '5/15/2020');
    Test({LINENUM}39089, 'DateString(now(), "de-DE")', '15.05.2020');
    Test({LINENUM}39090, 'DateString(now(), "el")', '15/5/2020');
    Test({LINENUM}39091, 'DateString(now(), "ko")', '2020-05-15');

    Test({LINENUM}39093, 'TimeString(now(), "sv-SE")', '14:30:20');
    Test({LINENUM}39094, 'TimeString(now(), "da-DK")', '14:30:20');
    Test({LINENUM}39095, 'TimeString(now(), "nb-NO")', '14:30:20');
    Test({LINENUM}39096, 'TimeString(now(), "en-GB")', '14:30:20');
    Test({LINENUM}39097, 'TimeString(now(), "en-US")', '2:30:20 PM');
    Test({LINENUM}39098, 'TimeString(now(), "de-DE")', '14:30:20');
    Test({LINENUM}39099, 'TimeString(now(), "el")', '2:30:20 μμ');
    Test({LINENUM}39100, 'TimeString(now(), "ko")', '오후 2:30:20');

  finally
    FixedTime := 0.0;
  end;





  //
  //
  //  CHAPTER 9
  //  Container functions.
  //
  //

  Chapter('Container functions');

  //
  // first, rest, and last
  //

  Test({LINENUM}39123, 'first("Expecto Patronum")', 'E');
  Test({LINENUM}39124, 'rest("Expecto Patronum")', 'xpecto Patronum');
  Test({LINENUM}39125, 'last("Expecto Patronum")', 'm');

  Test({LINENUM}39127, 'first("")', failure, 'Index 1 out of bounds.');
  Test({LINENUM}39128, 'rest("")', '');
  Test({LINENUM}39129, 'last("")', failure, 'Index -1 out of bounds.');

  Test({LINENUM}39131, 's ≔ "Expecto Patronum"; EmptyStr ≔ "";', null);

  Test({LINENUM}39133, 'first(s)', 'E');
  Test({LINENUM}39134, 'rest(s)', 'xpecto Patronum');
  Test({LINENUM}39135, 'last(s)', 'm');

  Test({LINENUM}39137, 'first(EmptyStr)', failure, 'Index 1 out of bounds.');
  Test({LINENUM}39138, 'rest(EmptyStr)', '');
  Test({LINENUM}39139, 'last(EmptyStr)', failure, 'Index -1 out of bounds.');

  Test({LINENUM}39141, 'first(s) ≔ "I"', 'I');
  Test({LINENUM}39142, 's', 'Ixpecto Patronum');

  Test({LINENUM}39144, 'last(s) ≔ "s"', 's');
  Test({LINENUM}39145, 's', 'Ixpecto Patronus');

  Test({LINENUM}39147, 'rest(s) ≔ "test"', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}39148, 's', 'Ixpecto Patronus');

  Test({LINENUM}39150, 'first(EmptyStr) ≔ "A"', failure, 'Index 1 out of bounds.');
  Test({LINENUM}39151, 'last(EmptyStr) ≔ "A"', failure, 'Index -1 out of bounds.');

  Test({LINENUM}39153, 'protect(s)', success);
  Test({LINENUM}39154, 'first(s) ≔ "E"', failure, 'Cannot modify or delete protected variable "s".');
  Test({LINENUM}39155, 's', 'Ixpecto Patronus');
  Test({LINENUM}39156, 'unprotect(s)', success);
  Test({LINENUM}39157, 'first(s) ≔ "E"', 'E');
  Test({LINENUM}39158, 's', 'Expecto Patronus');

  Test({LINENUM}39160, 'protect(s)', success);
  Test({LINENUM}39161, 'last(s) ≔ "m"', failure, 'Cannot modify or delete protected variable "s".');
  Test({LINENUM}39162, 's', 'Expecto Patronus');
  Test({LINENUM}39163, 'unprotect(s)', success);
  Test({LINENUM}39164, 'last(s) ≔ "m"', 'm');
  Test({LINENUM}39165, 's', 'Expecto Patronum');

  Test({LINENUM}39167, 'first("test") ≔ "T"', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}39168, 'last("test") ≔ "T"', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}39170, 'first(❨7, 3, 4❩)', 7.0);
  Test({LINENUM}39171, 'rest(❨7, 3, 4❩)', [3, 4]);
  Test({LINENUM}39172, 'last(❨7, 3, 4❩)', 4.0);

  Test({LINENUM}39174, 'first(DebugObject("empty vector"))', failure, 'Index 1 out of bounds.');
  Test({LINENUM}39175, 'rest(DebugObject("empty vector"))', TAlgosimRealVector.Create);
  Test({LINENUM}39176, 'last(DebugObject("empty vector"))', failure, 'Index -1 out of bounds.');

  Test({LINENUM}39178, 'v ≔ ❨5, 0, 2, 8❩', [5, 0, 2, 8]);
  Test({LINENUM}39179, 'first(v)', 5.0);
  Test({LINENUM}39180, 'rest(v)', [0, 2, 8]);
  Test({LINENUM}39181, 'last(v)', 8.0);

  Test({LINENUM}39183, 'first(v) ≔ 50', 50);
  Test({LINENUM}39184, 'v', [50, 0, 2, 8]);
  Test({LINENUM}39185, 'last(v) ≔ 80', 80);
  Test({LINENUM}39186, 'v', [50, 0, 2, 80]);

  Test({LINENUM}39188, 'protect(v)', success);
  Test({LINENUM}39189, 'first(v) ≔ 500', failure, 'Cannot modify or delete protected variable "v".');
  Test({LINENUM}39190, 'v', [50, 0, 2, 80]);
  Test({LINENUM}39191, 'unprotect(v)', success);
  Test({LINENUM}39192, 'first(v) ≔ 500', 500);
  Test({LINENUM}39193, 'v', [500, 0, 2, 80]);

  Test({LINENUM}39195, 'protect(v)', success);
  Test({LINENUM}39196, 'last(v) ≔ 800', failure, 'Cannot modify or delete protected variable "v".');
  Test({LINENUM}39197, 'v', [500, 0, 2, 80]);
  Test({LINENUM}39198, 'unprotect(v)', success);
  Test({LINENUM}39199, 'last(v) ≔ 800', 800);
  Test({LINENUM}39200, 'v', [500, 0, 2, 800]);

  Test({LINENUM}39202, 'first(❨7⋅i, 3, 4❩)', 7.0 * ImaginaryUnit);
  Test({LINENUM}39203, 'rest(❨7⋅i, 3, 4❩)', [TASC(3), 4]);
  Test({LINENUM}39204, 'last(❨7⋅i, 3, 4❩)', TASC(4.0));

  Test({LINENUM}39206, 'first(ComplexVector(DebugObject("empty vector")))', failure, 'Index 1 out of bounds.');
  Test({LINENUM}39207, 'rest(ComplexVector(DebugObject("empty vector")))', TAlgosimComplexVector.Create);
  Test({LINENUM}39208, 'last(ComplexVector(DebugObject("empty vector")))', failure, 'Index -1 out of bounds.');

  Test({LINENUM}39210, 'v ≔ ❨5, 0, 2, 8⋅i❩', [5, 0, 2, 8*ImaginaryUnit]);
  Test({LINENUM}39211, 'first(v)', TASC(5.0));
  Test({LINENUM}39212, 'rest(v)', [0, 2, 8*ImaginaryUnit]);
  Test({LINENUM}39213, 'last(v)', 8.0*ImaginaryUnit);

  Test({LINENUM}39215, 'first(v) ≔ 50', 50);
  Test({LINENUM}39216, 'v', [50, 0, 2, 8*ImaginaryUnit]);
  Test({LINENUM}39217, 'last(v) ≔ 80⋅i', 80*ImaginaryUnit);
  Test({LINENUM}39218, 'v', [50, 0, 2, 80*ImaginaryUnit]);

  Test({LINENUM}39220, 'protect(v)', success);
  Test({LINENUM}39221, 'first(v) ≔ 500', failure, 'Cannot modify or delete protected variable "v".');
  Test({LINENUM}39222, 'v', [50, 0, 2, 80*ImaginaryUnit]);
  Test({LINENUM}39223, 'unprotect(v)', success);
  Test({LINENUM}39224, 'first(v) ≔ 500', 500);
  Test({LINENUM}39225, 'v', [500, 0, 2, 80*ImaginaryUnit]);

  Test({LINENUM}39227, 'protect(v)', success);
  Test({LINENUM}39228, 'last(v) ≔ 800⋅i', failure, 'Cannot modify or delete protected variable "v".');
  Test({LINENUM}39229, 'v', [500, 0, 2, 80*ImaginaryUnit]);
  Test({LINENUM}39230, 'unprotect(v)', success);
  Test({LINENUM}39231, 'last(v) ≔ 800⋅i', 800*ImaginaryUnit);
  Test({LINENUM}39232, 'v', [500, 0, 2, 800*ImaginaryUnit]);

  Test({LINENUM}39234, 'first(❨1, 2, 3❩) ≔ 10', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}39235, 'first(❨i, 2, 3❩) ≔ 10', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}39236, 'last(❨1, 2, 3❩) ≔ 10', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}39237, 'last(❨i, 2, 3❩) ≔ 10', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}39239, 'first(❨❨1, 2❩, ❨3, 4❩❩)', 1.0);
  Test({LINENUM}39240, 'rest(❨❨1, 2❩, ❨3, 4❩❩)', failure, 'Object type "real matrix" is not a suitable container.');
  Test({LINENUM}39241, 'last(❨❨1, 2❩, ❨3, 4❩❩)', 4.0);
  Test({LINENUM}39242, 'first(❨❨3, 5, 2❩, ❨7, 1, 0❩❩)', 3.0);
  Test({LINENUM}39243, 'rest(❨❨3, 5, 2❩, ❨7, 1, 0❩❩)', failure, 'Object type "real matrix" is not a suitable container.');
  Test({LINENUM}39244, 'last(❨❨3, 5, 2❩, ❨7, 1, 0❩❩)', 0.0);

  Test({LINENUM}39246, 'first(DebugObject("empty matrix"))', failure, 'Index 1 out of bounds.');
  Test({LINENUM}39247, 'last(DebugObject("empty matrix"))', failure, 'Index -1 out of bounds.');

  Test({LINENUM}39249, 'M ≔ ❨❨4, 2, 1❩, ❨0, 5, 9❩❩', 3, [4, 2, 1, 0, 5, 9]);
  Test({LINENUM}39250, 'first(M)', 4.0);
  Test({LINENUM}39251, 'last(M)', 9.0);

  Test({LINENUM}39253, 'first(M) ≔ 40', 40);
  Test({LINENUM}39254, 'M', 3, [40, 2, 1, 0, 5, 9]);
  Test({LINENUM}39255, 'last(M) ≔ 90', 90);
  Test({LINENUM}39256, 'M', 3, [40, 2, 1, 0, 5, 90]);

  Test({LINENUM}39258, 'protect(M)', success);
  Test({LINENUM}39259, 'first(M) ≔ 400', failure, 'Cannot modify or delete protected variable "M".');
  Test({LINENUM}39260, 'M', 3, [40, 2, 1, 0, 5, 90]);
  Test({LINENUM}39261, 'unprotect(M)', success);
  Test({LINENUM}39262, 'first(M) ≔ 400', 400);
  Test({LINENUM}39263, 'M', 3, [400, 2, 1, 0, 5, 90]);

  Test({LINENUM}39265, 'protect(M)', success);
  Test({LINENUM}39266, 'last(M) ≔ 900', failure, 'Cannot modify or delete protected variable "M".');
  Test({LINENUM}39267, 'M', 3, [400, 2, 1, 0, 5, 90]);
  Test({LINENUM}39268, 'unprotect(M)', success);
  Test({LINENUM}39269, 'last(M) ≔ 900', 900);
  Test({LINENUM}39270, 'M', 3, [400, 2, 1, 0, 5, 900]);

  Test({LINENUM}39272, 'first(❨❨5, 3❩, ❨7, 8❩, ❨1, 2❩❩) ≔ π', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}39273, 'last(❨❨5, 3❩, ❨7, 8❩, ❨1, 2❩❩) ≔ π^2', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}39275, 'first(❨❨i, 2❩, ❨3, 4❩❩)', ImaginaryUnit);
  Test({LINENUM}39276, 'rest(❨❨i, 2❩, ❨3, 4❩❩)', failure, 'Object type "complex matrix" is not a suitable container.');
  Test({LINENUM}39277, 'last(❨❨i, 2❩, ❨3, 4❩❩)', TASC(4.0));
  Test({LINENUM}39278, 'first(❨❨3, 5, 2❩, ❨7, i, 0❩❩)', TASC(3.0));
  Test({LINENUM}39279, 'rest(❨❨3, 5, 2❩, ❨7, i, 0❩❩)', failure, 'Object type "complex matrix" is not a suitable container.');
  Test({LINENUM}39280, 'last(❨❨3, 5, 2❩, ❨7, i, 0❩❩)', TASC(0.0));

  Test({LINENUM}39282, 'first(ComplexMatrix(DebugObject("empty matrix")))', failure, 'Index 1 out of bounds.');
  Test({LINENUM}39283, 'last(ComplexMatrix(DebugObject("empty matrix")))', failure, 'Index -1 out of bounds.');

  Test({LINENUM}39285, 'M ≔ ❨❨4, 2, i❩, ❨0, 5, 9❩❩', 3, [4, 2, ImaginaryUnit, 0, 5, 9]);
  Test({LINENUM}39286, 'first(M)', TASC(4.0));
  Test({LINENUM}39287, 'last(M)', TASC(9.0));

  Test({LINENUM}39289, 'first(M) ≔ 40', 40);
  Test({LINENUM}39290, 'M', 3, [40, 2, ImaginaryUnit, 0, 5, 9]);
  Test({LINENUM}39291, 'last(M) ≔ 90', 90);
  Test({LINENUM}39292, 'M', 3, [40, 2, ImaginaryUnit, 0, 5, 90]);

  Test({LINENUM}39294, 'protect(M)', success);
  Test({LINENUM}39295, 'first(M) ≔ 400', failure, 'Cannot modify or delete protected variable "M".');
  Test({LINENUM}39296, 'M', 3, [40, 2, ImaginaryUnit, 0, 5, 90]);
  Test({LINENUM}39297, 'unprotect(M)', success);
  Test({LINENUM}39298, 'first(M) ≔ 400', 400);
  Test({LINENUM}39299, 'M', 3, [400, 2, ImaginaryUnit, 0, 5, 90]);

  Test({LINENUM}39301, 'protect(M)', success);
  Test({LINENUM}39302, 'last(M) ≔ 900', failure, 'Cannot modify or delete protected variable "M".');
  Test({LINENUM}39303, 'M', 3, [400, 2, ImaginaryUnit, 0, 5, 90]);
  Test({LINENUM}39304, 'unprotect(M)', success);
  Test({LINENUM}39305, 'last(M) ≔ 900', 900);
  Test({LINENUM}39306, 'M', 3, [400, 2, ImaginaryUnit, 0, 5, 900]);

  Test({LINENUM}39308, 'first(❨❨5, 3❩, ❨7, 8❩, ❨i, 2❩❩) ≔ π', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}39309, 'last(❨❨5, 3❩, ❨7, 8❩, ❨i, 2❩❩) ≔ π^2', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}39311, 'first(''(5, true, "cat", "dog"))', 5);
  Test({LINENUM}39312, 'rest(''(5, true, "cat", "dog"))', asoarr([True, 'cat', 'dog']));
  Test({LINENUM}39313, 'last(''(5, true, "cat", "dog"))', 'dog');

  Test({LINENUM}39315, 'first(''())', failure, 'Index 1 out of bounds.');
  Test({LINENUM}39316, 'last(''())', failure, 'Index -1 out of bounds.');

  Test({LINENUM}39318, 'L ≔ ''(true, 3.1415, "rat", 2.5)', asoarr([True, 3.1415, 'rat', 2.5]));

  Test({LINENUM}39320, 'first(L)', True);
  Test({LINENUM}39321, 'last(L)', 2.5);

  Test({LINENUM}39323, 'first(L) ≔ "thestral"', 'thestral');
  Test({LINENUM}39324, 'L', asoarr(['thestral', 3.1415, 'rat', 2.5]));
  Test({LINENUM}39325, 'last(L) ≔ 99', 99);
  Test({LINENUM}39326, 'L', asoarr(['thestral', 3.1415, 'rat', 99]));

  Test({LINENUM}39328, 'protect(L)', success);
  Test({LINENUM}39329, 'first(L) ≔ "hippogriff"', failure, 'Cannot modify or delete protected variable "L".');
  Test({LINENUM}39330, 'L', asoarr(['thestral', 3.1415, 'rat', 99]));
  Test({LINENUM}39331, 'unprotect(L)', success);
  Test({LINENUM}39332, 'first(L) ≔ "hippogriff"', 'hippogriff');
  Test({LINENUM}39333, 'L', asoarr(['hippogriff', 3.1415, 'rat', 99]));

  Test({LINENUM}39335, 'protect(L)', success);
  Test({LINENUM}39336, 'last(L) ≔ 99.9', failure, 'Cannot modify or delete protected variable "L".');
  Test({LINENUM}39337, 'L', asoarr(['hippogriff', 3.1415, 'rat', 99]));
  Test({LINENUM}39338, 'unprotect(L)', success);
  Test({LINENUM}39339, 'last(L) ≔ 99.9', 99.9);
  Test({LINENUM}39340, 'L', asoarr(['hippogriff', 3.1415, 'rat', 99.9]));

  Test({LINENUM}39342, 'S ≔ ToSet(L);', null);
  Test({LINENUM}39343, 'first(S) ∈ S', True);
  Test({LINENUM}39344, 'rest(S)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}39345, 'last(S) ∈ S', True);

  Test({LINENUM}39347, 'first(''(true, 3.1415, "rat", 2.5)) ≔ false', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}39348, 'last(''(true, 3.1415, "rat", 2.5)) ≔ false', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}39350, 'L ≔ ''();', null);
  Test({LINENUM}39351, 'first(L) ≔ 5', failure, 'Index 1 out of bounds.');
  Test({LINENUM}39352, 'last(L) ≔ 5', failure, 'Index -1 out of bounds.');

  Test({LINENUM}39354, 'first("hippogriff", 0)', '');
  Test({LINENUM}39355, 'first("hippogriff", 1)', 'h');
  Test({LINENUM}39356, 'first("hippogriff", 2)', 'hi');
  Test({LINENUM}39357, 'first("hippogriff", 3)', 'hip');
  Test({LINENUM}39358, 'first("hippogriff", 4)', 'hipp');
  Test({LINENUM}39359, 'first("hippogriff", 5)', 'hippo');
  Test({LINENUM}39360, 'first("hippogriff", 6)', 'hippog');
  Test({LINENUM}39361, 'first("hippogriff", 7)', 'hippogr');
  Test({LINENUM}39362, 'first("hippogriff", 8)', 'hippogri');
  Test({LINENUM}39363, 'first("hippogriff", 9)', 'hippogrif');
  Test({LINENUM}39364, 'first("hippogriff", 10)', 'hippogriff');
  Test({LINENUM}39365, 'first("hippogriff", 11)', 'hippogriff');
  Test({LINENUM}39366, 'first("hippogriff", 12)', 'hippogriff');
  Test({LINENUM}39367, 'first("hippogriff", 13)', 'hippogriff');
  Test({LINENUM}39368, 'first("hippogriff", 14)', 'hippogriff');
  Test({LINENUM}39369, 'first("hippogriff", 15)', 'hippogriff');
  Test({LINENUM}39370, 'first("hippogriff", 1000000)', 'hippogriff');

  Test({LINENUM}39372, 'first(❨10, 20, 30❩, 0)', TAlgosimRealVector.Create);
  Test({LINENUM}39373, 'first(❨10, 20, 30❩, 1)', [10]);
  Test({LINENUM}39374, 'first(❨10, 20, 30❩, 2)', [10, 20]);
  Test({LINENUM}39375, 'first(❨10, 20, 30❩, 3)', [10, 20, 30]);
  Test({LINENUM}39376, 'first(❨10, 20, 30❩, 4)', [10, 20, 30]);
  Test({LINENUM}39377, 'first(❨10, 20, 30❩, 5)', [10, 20, 30]);
  Test({LINENUM}39378, 'first(❨10, 20, 30❩, 1000000)', [10, 20, 30]);

  Test({LINENUM}39380, 'first(❨i, 20, 30❩, 0)', TAlgosimComplexVector.Create);
  Test({LINENUM}39381, 'first(❨i, 20, 30❩, 1)', [ImaginaryUnit]);
  Test({LINENUM}39382, 'first(❨i, 20, 30❩, 2)', [ImaginaryUnit, 20]);
  Test({LINENUM}39383, 'first(❨i, 20, 30❩, 3)', [ImaginaryUnit, 20, 30]);
  Test({LINENUM}39384, 'first(❨i, 20, 30❩, 4)', [ImaginaryUnit, 20, 30]);
  Test({LINENUM}39385, 'first(❨i, 20, 30❩, 5)', [ImaginaryUnit, 20, 30]);
  Test({LINENUM}39386, 'first(❨i, 20, 30❩, 1000000)', [ImaginaryUnit, 20, 30]);

  Test({LINENUM}39388, 'first(''(10, "dog", 20, true, 30), 0)', asoarr([]));
  Test({LINENUM}39389, 'first(''(10, "dog", 20, true, 30), 1)', asoarr([10]));
  Test({LINENUM}39390, 'first(''(10, "dog", 20, true, 30), 2)', asoarr([10, 'dog']));
  Test({LINENUM}39391, 'first(''(10, "dog", 20, true, 30), 3)', asoarr([10, 'dog', 20]));
  Test({LINENUM}39392, 'first(''(10, "dog", 20, true, 30), 4)', asoarr([10, 'dog', 20, True]));
  Test({LINENUM}39393, 'first(''(10, "dog", 20, true, 30), 5)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39394, 'first(''(10, "dog", 20, true, 30), 6)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39395, 'first(''(10, "dog", 20, true, 30), 7)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39396, 'first(''(10, "dog", 20, true, 30), 8)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39397, 'first(''(10, "dog", 20, true, 30), 9)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39398, 'first(''(10, "dog", 20, true, 30), 10000)', asoarr([10, 'dog', 20, True, 30]));

  Test({LINENUM}39400, 'x ≔ "hippogriff"', 'hippogriff');
  Test({LINENUM}39401, 'first(x, 0)', '');
  Test({LINENUM}39402, 'first(x, 1)', 'h');
  Test({LINENUM}39403, 'first(x, 2)', 'hi');
  Test({LINENUM}39404, 'first(x, 3)', 'hip');
  Test({LINENUM}39405, 'first(x, 4)', 'hipp');
  Test({LINENUM}39406, 'first(x, 5)', 'hippo');
  Test({LINENUM}39407, 'first(x, 6)', 'hippog');
  Test({LINENUM}39408, 'first(x, 7)', 'hippogr');
  Test({LINENUM}39409, 'first(x, 8)', 'hippogri');
  Test({LINENUM}39410, 'first(x, 9)', 'hippogrif');
  Test({LINENUM}39411, 'first(x, 10)', 'hippogriff');
  Test({LINENUM}39412, 'first(x, 11)', 'hippogriff');
  Test({LINENUM}39413, 'first(x, 12)', 'hippogriff');
  Test({LINENUM}39414, 'first(x, 13)', 'hippogriff');
  Test({LINENUM}39415, 'first(x, 14)', 'hippogriff');
  Test({LINENUM}39416, 'first(x, 15)', 'hippogriff');
  Test({LINENUM}39417, 'first(x, 1000000)', 'hippogriff');

  Test({LINENUM}39419, 'x ≔ ❨10, 20, 30❩', [10, 20, 30]);
  Test({LINENUM}39420, 'first(x, 0)', TAlgosimRealVector.Create);
  Test({LINENUM}39421, 'first(x, 1)', [10]);
  Test({LINENUM}39422, 'first(x, 2)', [10, 20]);
  Test({LINENUM}39423, 'first(x, 3)', [10, 20, 30]);
  Test({LINENUM}39424, 'first(x, 4)', [10, 20, 30]);
  Test({LINENUM}39425, 'first(x, 5)', [10, 20, 30]);
  Test({LINENUM}39426, 'first(x, 1000000)', [10, 20, 30]);

  Test({LINENUM}39428, 'x ≔ ❨i, 20, 30❩', [ImaginaryUnit, 20, 30]);
  Test({LINENUM}39429, 'first(x, 0)', TAlgosimComplexVector.Create);
  Test({LINENUM}39430, 'first(x, 1)', [ImaginaryUnit]);
  Test({LINENUM}39431, 'first(x, 2)', [ImaginaryUnit, 20]);
  Test({LINENUM}39432, 'first(x, 3)', [ImaginaryUnit, 20, 30]);
  Test({LINENUM}39433, 'first(x, 4)', [ImaginaryUnit, 20, 30]);
  Test({LINENUM}39434, 'first(x, 5)', [ImaginaryUnit, 20, 30]);
  Test({LINENUM}39435, 'first(x, 1000000)', [ImaginaryUnit, 20, 30]);

  Test({LINENUM}39437, 'x ≔ ''(10, "dog", 20, true, 30)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39438, 'first(x, 0)', asoarr([]));
  Test({LINENUM}39439, 'first(x, 1)', asoarr([10]));
  Test({LINENUM}39440, 'first(x, 2)', asoarr([10, 'dog']));
  Test({LINENUM}39441, 'first(x, 3)', asoarr([10, 'dog', 20]));
  Test({LINENUM}39442, 'first(x, 4)', asoarr([10, 'dog', 20, True]));
  Test({LINENUM}39443, 'first(x, 5)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39444, 'first(x, 6)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39445, 'first(x, 7)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39446, 'first(x, 8)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39447, 'first(x, 9)', asoarr([10, 'dog', 20, True, 30]));
  Test({LINENUM}39448, 'first(x, 10000)', asoarr([10, 'dog', 20, True, 30]));

  Test({LINENUM}39450, 'first(❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩, 0)', asoarr([]));
  Test({LINENUM}39451, 'first(❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩, 1)', asoarr([1.0]));
  Test({LINENUM}39452, 'first(❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩, 2)', asoarr([1.0, 2.0]));
  Test({LINENUM}39453, 'first(❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩, 3)', asoarr([1.0, 2.0, 3.0]));
  Test({LINENUM}39454, 'first(❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩, 4)', asoarr([1.0, 2.0, 3.0, 4.0]));
  Test({LINENUM}39455, 'first(❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩, 5)', asoarr([1.0, 2.0, 3.0, 4.0, 5.0]));
  Test({LINENUM}39456, 'first(❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩, 6)', asoarr([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]));
  Test({LINENUM}39457, 'first(❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩, 7)', asoarr([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]));
  Test({LINENUM}39458, 'first(❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩, 8)', asoarr([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]));
  Test({LINENUM}39459, 'first(❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩, 100000)', asoarr([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]));

  Test({LINENUM}39461, 'first(❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩, 0)', asoarrex([]));
  Test({LINENUM}39462, 'first(❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩, 1)', asoarrex([ASO(ImaginaryUnit)]));
  Test({LINENUM}39463, 'first(❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩, 2)', asoarrex([ASO(ImaginaryUnit), ASO(2.0)]));
  Test({LINENUM}39464, 'first(❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩, 3)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0)]));
  Test({LINENUM}39465, 'first(❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩, 4)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0)]));
  Test({LINENUM}39466, 'first(❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩, 5)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0), ASO(5.0)]));
  Test({LINENUM}39467, 'first(❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩, 6)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0), ASO(5.0), ASO(6.0)]));
  Test({LINENUM}39468, 'first(❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩, 7)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0), ASO(5.0), ASO(6.0)]));
  Test({LINENUM}39469, 'first(❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩, 8)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0), ASO(5.0), ASO(6.0)]));
  Test({LINENUM}39470, 'first(❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩, 100000)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0), ASO(5.0), ASO(6.0)]));

  Test({LINENUM}39472, 'x ≔ ❨❨1, 2❩, ❨3, 4❩, ❨5, 6❩❩', 2, [1, 2, 3, 4, 5, 6]);
  Test({LINENUM}39473, 'first(x, 0)', asoarr([]));
  Test({LINENUM}39474, 'first(x, 1)', asoarr([1.0]));
  Test({LINENUM}39475, 'first(x, 2)', asoarr([1.0, 2.0]));
  Test({LINENUM}39476, 'first(x, 3)', asoarr([1.0, 2.0, 3.0]));
  Test({LINENUM}39477, 'first(x, 4)', asoarr([1.0, 2.0, 3.0, 4.0]));
  Test({LINENUM}39478, 'first(x, 5)', asoarr([1.0, 2.0, 3.0, 4.0, 5.0]));
  Test({LINENUM}39479, 'first(x, 6)', asoarr([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]));
  Test({LINENUM}39480, 'first(x, 7)', asoarr([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]));
  Test({LINENUM}39481, 'first(x, 8)', asoarr([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]));
  Test({LINENUM}39482, 'first(x, 100000)', asoarr([1.0, 2.0, 3.0, 4.0, 5.0, 6.0]));

  Test({LINENUM}39484, 'x ≔ ❨❨i, 2❩, ❨3, 4❩, ❨5, 6❩❩', 2, [ImaginaryUnit, 2, 3, 4, 5, 6]);
  Test({LINENUM}39485, 'first(x, 0)', asoarrex([]));
  Test({LINENUM}39486, 'first(x, 1)', asoarrex([ASO(ImaginaryUnit)]));
  Test({LINENUM}39487, 'first(x, 2)', asoarrex([ASO(ImaginaryUnit), ASO(2.0)]));
  Test({LINENUM}39488, 'first(x, 3)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0)]));
  Test({LINENUM}39489, 'first(x, 4)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0)]));
  Test({LINENUM}39490, 'first(x, 5)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0), ASO(5.0)]));
  Test({LINENUM}39491, 'first(x, 6)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0), ASO(5.0), ASO(6.0)]));
  Test({LINENUM}39492, 'first(x, 7)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0), ASO(5.0), ASO(6.0)]));
  Test({LINENUM}39493, 'first(x, 8)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0), ASO(5.0), ASO(6.0)]));
  Test({LINENUM}39494, 'first(x, 100000)', asoarrex([ASO(ImaginaryUnit), ASO(2.0), ASO(3.0), ASO(4.0), ASO(5.0), ASO(6.0)]));

  Test({LINENUM}39496, 'first(ColorGradient(1, 2, "white", "black"))', ASOColor(clWhite));
  Test({LINENUM}39497, 'first(ColorGradient(1, 2, "white", "black"), 0)', asoarrex([]));
  Test({LINENUM}39498, 'first(ColorGradient(1, 2, "white", "black"), 1)', asoarrex([ASOColor(clWhite)]));
  Test({LINENUM}39499, 'first(ColorGradient(1, 2, "white", "black"), 2)', asoarrex([ASOColor(clWhite), ASOColor(clBlack)]));
  Test({LINENUM}39500, 'first(ColorGradient(1, 2, "white", "black"), 10000)', asoarrex([ASOColor(clWhite), ASOColor(clBlack)]));

  Test({LINENUM}39502, 'pm ≔ ColorGradient(1, 2, "white", "black");', null);
  Test({LINENUM}39503, 'first(pm)', ASOColor(clWhite));
  Test({LINENUM}39504, 'first(pm, 0)', asoarrex([]));
  Test({LINENUM}39505, 'first(pm, 1)', asoarrex([ASOColor(clWhite)]));
  Test({LINENUM}39506, 'first(pm, 2)', asoarrex([ASOColor(clWhite), ASOColor(clBlack)]));
  Test({LINENUM}39507, 'first(pm, 10000)', asoarrex([ASOColor(clWhite), ASOColor(clBlack)]));

  Test({LINENUM}39509, 'last("hippogriff")', 'f');
  Test({LINENUM}39510, 'last("hippogriff", 0)', '');
  Test({LINENUM}39511, 'last("hippogriff", 1)', 'f');
  Test({LINENUM}39512, 'last("hippogriff", 2)', 'ff');
  Test({LINENUM}39513, 'last("hippogriff", 3)', 'iff');
  Test({LINENUM}39514, 'last("hippogriff", 4)', 'riff');
  Test({LINENUM}39515, 'last("hippogriff", 5)', 'griff');
  Test({LINENUM}39516, 'last("hippogriff", 6)', 'ogriff');
  Test({LINENUM}39517, 'last("hippogriff", 7)', 'pogriff');
  Test({LINENUM}39518, 'last("hippogriff", 8)', 'ppogriff');
  Test({LINENUM}39519, 'last("hippogriff", 9)', 'ippogriff');
  Test({LINENUM}39520, 'last("hippogriff", 10)', 'hippogriff');
  Test({LINENUM}39521, 'last("hippogriff", 11)', 'hippogriff');
  Test({LINENUM}39522, 'last("hippogriff", 12)', 'hippogriff');
  Test({LINENUM}39523, 'last("hippogriff", 10000000)', 'hippogriff');

  Test({LINENUM}39525, 'x ≔ "hippogriff"', 'hippogriff');
  Test({LINENUM}39526, 'last(x)', 'f');
  Test({LINENUM}39527, 'last(x, 0)', '');
  Test({LINENUM}39528, 'last(x, 1)', 'f');
  Test({LINENUM}39529, 'last(x, 2)', 'ff');
  Test({LINENUM}39530, 'last(x, 3)', 'iff');
  Test({LINENUM}39531, 'last(x, 4)', 'riff');
  Test({LINENUM}39532, 'last(x, 5)', 'griff');
  Test({LINENUM}39533, 'last(x, 6)', 'ogriff');
  Test({LINENUM}39534, 'last(x, 7)', 'pogriff');
  Test({LINENUM}39535, 'last(x, 8)', 'ppogriff');
  Test({LINENUM}39536, 'last(x, 9)', 'ippogriff');
  Test({LINENUM}39537, 'last(x, 10)', 'hippogriff');
  Test({LINENUM}39538, 'last(x, 11)', 'hippogriff');
  Test({LINENUM}39539, 'last(x, 12)', 'hippogriff');
  Test({LINENUM}39540, 'last(x, 10000000)', 'hippogriff');

  Test({LINENUM}39542, 'last(❨5, 2, 1❩)', 1.0);
  Test({LINENUM}39543, 'last(❨5, 2, 1❩, 0)', TAlgosimRealVector.Create);
  Test({LINENUM}39544, 'last(❨5, 2, 1❩, 1)', [1]);
  Test({LINENUM}39545, 'last(❨5, 2, 1❩, 2)', [2, 1]);
  Test({LINENUM}39546, 'last(❨5, 2, 1❩, 3)', [5, 2, 1]);
  Test({LINENUM}39547, 'last(❨5, 2, 1❩, 4)', [5, 2, 1]);
  Test({LINENUM}39548, 'last(❨5, 2, 1❩, 5)', [5, 2, 1]);
  Test({LINENUM}39549, 'last(❨5, 2, 1❩, 100000000)', [5, 2, 1]);

  Test({LINENUM}39551, 'x ≔ ❨5, 2, 1❩', [5, 2, 1]);
  Test({LINENUM}39552, 'last(x)', 1.0);
  Test({LINENUM}39553, 'last(x, 0)', TAlgosimRealVector.Create);
  Test({LINENUM}39554, 'last(x, 1)', [1]);
  Test({LINENUM}39555, 'last(x, 2)', [2, 1]);
  Test({LINENUM}39556, 'last(x, 3)', [5, 2, 1]);
  Test({LINENUM}39557, 'last(x, 4)', [5, 2, 1]);
  Test({LINENUM}39558, 'last(x, 5)', [5, 2, 1]);
  Test({LINENUM}39559, 'last(x, 100000000)', [5, 2, 1]);

  Test({LINENUM}39561, 'last(❨5, 2, i❩)', ImaginaryUnit);
  Test({LINENUM}39562, 'last(❨5, 2, i❩, 0)', TAlgosimComplexVector.Create);
  Test({LINENUM}39563, 'last(❨5, 2, i❩, 1)', [ImaginaryUnit]);
  Test({LINENUM}39564, 'last(❨5, 2, i❩, 2)', [2, ImaginaryUnit]);
  Test({LINENUM}39565, 'last(❨5, 2, i❩, 3)', [5, 2, ImaginaryUnit]);
  Test({LINENUM}39566, 'last(❨5, 2, i❩, 4)', [5, 2, ImaginaryUnit]);
  Test({LINENUM}39567, 'last(❨5, 2, i❩, 5)', [5, 2, ImaginaryUnit]);
  Test({LINENUM}39568, 'last(❨5, 2, i❩, 100000000)', [5, 2, ImaginaryUnit]);

  Test({LINENUM}39570, 'x ≔ ❨5, 2, i❩', [5, 2, ImaginaryUnit]);
  Test({LINENUM}39571, 'last(x)', ImaginaryUnit);
  Test({LINENUM}39572, 'last(x, 0)', TAlgosimComplexVector.Create);
  Test({LINENUM}39573, 'last(x, 1)', [ImaginaryUnit]);
  Test({LINENUM}39574, 'last(x, 2)', [2, ImaginaryUnit]);
  Test({LINENUM}39575, 'last(x, 3)', [5, 2, ImaginaryUnit]);
  Test({LINENUM}39576, 'last(x, 4)', [5, 2, ImaginaryUnit]);
  Test({LINENUM}39577, 'last(x, 5)', [5, 2, ImaginaryUnit]);
  Test({LINENUM}39578, 'last(x, 100000000)', [5, 2, ImaginaryUnit]);

  Test({LINENUM}39580, 'last(''("dog", 4, true))', True);
  Test({LINENUM}39581, 'last(''("dog", 4, true), 0)', asoarr([]));
  Test({LINENUM}39582, 'last(''("dog", 4, true), 1)', asoarr([True]));
  Test({LINENUM}39583, 'last(''("dog", 4, true), 2)', asoarr([4.0, True]));
  Test({LINENUM}39584, 'last(''("dog", 4, true), 3)', asoarr(['dog', 4.0, True]));
  Test({LINENUM}39585, 'last(''("dog", 4, true), 4)', asoarr(['dog', 4.0, True]));
  Test({LINENUM}39586, 'last(''("dog", 4, true), 5)', asoarr(['dog', 4.0, True]));
  Test({LINENUM}39587, 'last(''("dog", 4, true), 10000000)', asoarr(['dog', 4.0, True]));

  Test({LINENUM}39589, 'x ≔ ''("dog", 4, true)', asoarr(['dog', 4.0, True]));
  Test({LINENUM}39590, 'last(x)', True);
  Test({LINENUM}39591, 'last(x, 0)', asoarr([]));
  Test({LINENUM}39592, 'last(x, 1)', asoarr([True]));
  Test({LINENUM}39593, 'last(x, 2)', asoarr([4.0, True]));
  Test({LINENUM}39594, 'last(x, 3)', asoarr(['dog', 4.0, True]));
  Test({LINENUM}39595, 'last(x, 4)', asoarr(['dog', 4.0, True]));
  Test({LINENUM}39596, 'last(x, 5)', asoarr(['dog', 4.0, True]));
  Test({LINENUM}39597, 'last(x, 10000000)', asoarr(['dog', 4.0, True]));

  Test({LINENUM}39599, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩)', 3.0);
  Test({LINENUM}39600, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 0)', asoarr([]));
  Test({LINENUM}39601, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 1)', asoarr([3]));
  Test({LINENUM}39602, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 2)', asoarr([10, 3]));
  Test({LINENUM}39603, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 3)', asoarr([2, 10, 3]));
  Test({LINENUM}39604, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 4)', asoarr([5, 2, 10, 3]));
  Test({LINENUM}39605, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 5)', asoarr([1, 5, 2, 10, 3]));
  Test({LINENUM}39606, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 6)', asoarr([2, 1, 5, 2, 10, 3]));
  Test({LINENUM}39607, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 7)', asoarr([2, 1, 5, 2, 10, 3]));
  Test({LINENUM}39608, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 8)', asoarr([2, 1, 5, 2, 10, 3]));
  Test({LINENUM}39609, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 9)', asoarr([2, 1, 5, 2, 10, 3]));
  Test({LINENUM}39610, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 10)', asoarr([2, 1, 5, 2, 10, 3]));
  Test({LINENUM}39611, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩, 10000000)', asoarr([2, 1, 5, 2, 10, 3]));

  Test({LINENUM}39613, 'x ≔ ❨❨2, 1❩, ❨5, 2❩, ❨10, 3❩❩', 2, [2, 1, 5, 2, 10, 3]);
  Test({LINENUM}39614, 'last(x)', 3.0);
  Test({LINENUM}39615, 'last(x, 0)', asoarr([]));
  Test({LINENUM}39616, 'last(x, 1)', asoarr([3]));
  Test({LINENUM}39617, 'last(x, 2)', asoarr([10, 3]));
  Test({LINENUM}39618, 'last(x, 3)', asoarr([2, 10, 3]));
  Test({LINENUM}39619, 'last(x, 4)', asoarr([5, 2, 10, 3]));
  Test({LINENUM}39620, 'last(x, 5)', asoarr([1, 5, 2, 10, 3]));
  Test({LINENUM}39621, 'last(x, 6)', asoarr([2, 1, 5, 2, 10, 3]));
  Test({LINENUM}39622, 'last(x, 7)', asoarr([2, 1, 5, 2, 10, 3]));
  Test({LINENUM}39623, 'last(x, 8)', asoarr([2, 1, 5, 2, 10, 3]));
  Test({LINENUM}39624, 'last(x, 9)', asoarr([2, 1, 5, 2, 10, 3]));
  Test({LINENUM}39625, 'last(x, 10)', asoarr([2, 1, 5, 2, 10, 3]));
  Test({LINENUM}39626, 'last(x, 10000000)', asoarr([2, 1, 5, 2, 10, 3]));

  Test({LINENUM}39628, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩)', ImaginaryUnit);
  Test({LINENUM}39629, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 0)', asoarrex([]));
  Test({LINENUM}39630, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 1)', asoarrex([ASO(ImaginaryUnit)]));
  Test({LINENUM}39631, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 2)', asoarrex([ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39632, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 3)', asoarrex([ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39633, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 4)', asoarrex([ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39634, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 5)', asoarrex([ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39635, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 6)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39636, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 7)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39637, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 8)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39638, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 9)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39639, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 10)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39640, 'last(❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩, 10000000)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));

  Test({LINENUM}39642, 'x ≔ ❨❨2, 1❩, ❨5, 2❩, ❨10, i❩❩', 2, [2, 1, 5, 2, 10, ImaginaryUnit]);
  Test({LINENUM}39643, 'last(x)', ImaginaryUnit);
  Test({LINENUM}39644, 'last(x, 0)', asoarrex([]));
  Test({LINENUM}39645, 'last(x, 1)', asoarrex([ASO(ImaginaryUnit)]));
  Test({LINENUM}39646, 'last(x, 2)', asoarrex([ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39647, 'last(x, 3)', asoarrex([ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39648, 'last(x, 4)', asoarrex([ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39649, 'last(x, 5)', asoarrex([ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39650, 'last(x, 6)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39651, 'last(x, 7)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39652, 'last(x, 8)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39653, 'last(x, 9)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39654, 'last(x, 10)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));
  Test({LINENUM}39655, 'last(x, 10000000)', asoarrex([ASO(2), ASO(1), ASO(5), ASO(2), ASO(10), ASO(ImaginaryUnit)]));

  Test({LINENUM}39657, 'last(ColorGradient(1, 2, "white", "black"))', ASOColor(clBlack));
  Test({LINENUM}39658, 'last(ColorGradient(1, 2, "white", "black"), 0)', asoarrex([]));
  Test({LINENUM}39659, 'last(ColorGradient(1, 2, "white", "black"), 1)', asoarrex([ASOColor(clBlack)]));
  Test({LINENUM}39660, 'last(ColorGradient(1, 2, "white", "black"), 2)', asoarrex([ASOColor(clWhite), ASOColor(clBlack)]));
  Test({LINENUM}39661, 'last(ColorGradient(1, 2, "white", "black"), 10000)', asoarrex([ASOColor(clWhite), ASOColor(clBlack)]));

  Test({LINENUM}39663, 'pm ≔ ColorGradient(1, 2, "white", "black");', null);
  Test({LINENUM}39664, 'last(pm)', ASOColor(clBlack));
  Test({LINENUM}39665, 'last(pm, 0)', asoarrex([]));
  Test({LINENUM}39666, 'last(pm, 1)', asoarrex([ASOColor(clBlack)]));
  Test({LINENUM}39667, 'last(pm, 2)', asoarrex([ASOColor(clWhite), ASOColor(clBlack)]));
  Test({LINENUM}39668, 'last(pm, 10000)', asoarrex([ASOColor(clWhite), ASOColor(clBlack)]));


  //
  // part and range
  //

  Test({LINENUM}39675, 'part("Expecto Patronum", range(1, 7))', 'Expecto');
  Test({LINENUM}39676, 'part("Expecto Patronum", range(9, 16))', 'Patronum');
  Test({LINENUM}39677, 'part("Expecto Patronum", range(-8, -1))', 'Patronum');

  Test({LINENUM}39679, 'part("Expecto Patronum", range(0, 7))', 'Expecto');  // The `part` function is forgiving.
  Test({LINENUM}39680, 'part("Expecto Patronum", range(9, 20))', 'Patronum'); // The `part` function is forgiving.
  Test({LINENUM}39681, 'part("Expecto Patronum", range(9, 200000000))', 'Patronum'); // The `part` function is forgiving.

  Test({LINENUM}39683, 'part("Expecto Patronum", range(1))', 'E');
  Test({LINENUM}39684, 'part("Expecto Patronum", range(2))', 'x');
  Test({LINENUM}39685, 'part("Expecto Patronum", range(5))', 'c');
  Test({LINENUM}39686, 'part("Expecto Patronum", range(16))', 'm');
  Test({LINENUM}39687, 'part("Expecto Patronum", range(17))', '');

  Test({LINENUM}39689, 'part("Expecto Patronum", 1)', 'E');
  Test({LINENUM}39690, 'part("Expecto Patronum", 2)', 'x');
  Test({LINENUM}39691, 'part("Expecto Patronum", 5)', 'c');
  Test({LINENUM}39692, 'part("Expecto Patronum", 16)', 'm');
  Test({LINENUM}39693, 'part("Expecto Patronum", 17)', '');

  Test({LINENUM}39695, 'part("Expecto Patronum", range(7, 1))', 'otcepxE'); // picking members in the reverse order
  Test({LINENUM}39696, 'part("Expecto Patronum", range(-1, -8))', 'munortaP'); // picking members in the reverse order
  Test({LINENUM}39697, 'part("Expecto Patronum", range(-10, -16))', 'otcepxE'); // picking members in the reverse order
  Test({LINENUM}39698, 'part("Expecto Patronum", range(-10, -10000))', 'otcepxE'); // still forgiving

  Test({LINENUM}39700, 'part("Expecto Patronum", range(1, 100, 2))', 'EpcoPtou'); // take every other
  Test({LINENUM}39701, 'part("Expecto Patronum", range(9, 100, 2))', 'Ptou');
  Test({LINENUM}39702, 'part("Expecto Patronum", range(9, 11, 2))', 'Pt');
  Test({LINENUM}39703, 'part("Expecto Patronum", range(9, 10, 2))', 'P');
  Test({LINENUM}39704, 'part("Expecto Patronum", range(9, 9, 2))', 'P');
  Test({LINENUM}39705, 'part("Expecto Patronum", range(-8, -1, 2))', 'Ptou');
  Test({LINENUM}39706, 'part("Expecto Patronum", range(7, 1, 2))', 'ocpE');
  Test({LINENUM}39707, 'part("Expecto Patronum", range(7, -100, 2))', 'ocpE');
  Test({LINENUM}39708, 'part("Expecto Patronum", range(-1, -8, 2))', 'mnra');

  Test({LINENUM}39710, 'part("Expecto Patronum", ''(1, 5, 6, 8))', 'Ect ');
  Test({LINENUM}39711, 'part("Expecto Patronum", ''(1, 5, 6, 8, -2))', 'Ect u');
  Test({LINENUM}39712, 'part("Expecto Patronum", ''(1, 5, 6, 8, -2, -3))', 'Ect un');
  Test({LINENUM}39713, 'part("Expecto Patronum", ''(1, 5, 6, 8, -2, -3, 1))', 'Ect unE');
  Test({LINENUM}39714, 'part("Expecto Patronum", ''(1, 5, 6, 8, 50000, -2, -3, -123, 1))', 'Ect unE');
  Test({LINENUM}39715, 'part("Expecto Patronum", ''(4, 0))', 'e');
  Test({LINENUM}39716, 'part("Expecto Patronum", ''(4))', 'e');
  Test({LINENUM}39717, 'part("Expecto Patronum", ''())', '');
  Test({LINENUM}39718, 'part("Expecto Patronum", ''(1000))', '');

  Test({LINENUM}39720, 's ≔ "Expecto Patronum"', 'Expecto Patronum');

  Test({LINENUM}39722, 'part(s, range(1, 7))', 'Expecto');
  Test({LINENUM}39723, 'part(s, range(9, 16))', 'Patronum');
  Test({LINENUM}39724, 'part(s, range(-8, -1))', 'Patronum');

  Test({LINENUM}39726, 'part(s, range(0, 7))', 'Expecto');  // The `part` function is forgiving.
  Test({LINENUM}39727, 'part(s, range(9, 20))', 'Patronum'); // The `part` function is forgiving.
  Test({LINENUM}39728, 'part(s, range(9, 200000000))', 'Patronum'); // The `part` function is forgiving.

  Test({LINENUM}39730, 'part(s, range(1))', 'E');
  Test({LINENUM}39731, 'part(s, range(2))', 'x');
  Test({LINENUM}39732, 'part(s, range(5))', 'c');
  Test({LINENUM}39733, 'part(s, range(16))', 'm');
  Test({LINENUM}39734, 'part(s, range(17))', '');

  Test({LINENUM}39736, 'part(s, 1)', 'E');
  Test({LINENUM}39737, 'part(s, 2)', 'x');
  Test({LINENUM}39738, 'part(s, 5)', 'c');
  Test({LINENUM}39739, 'part(s, 16)', 'm');
  Test({LINENUM}39740, 'part(s, 17)', '');

  Test({LINENUM}39742, 'part(s, range(7, 1))', 'otcepxE'); // picking members in the reverse order
  Test({LINENUM}39743, 'part(s, range(-1, -8))', 'munortaP'); // picking members in the reverse order
  Test({LINENUM}39744, 'part(s, range(-10, -16))', 'otcepxE'); // picking members in the reverse order
  Test({LINENUM}39745, 'part(s, range(-10, -10000))', 'otcepxE'); // still forgiving

  Test({LINENUM}39747, 'part(s, range(1, 100, 2))', 'EpcoPtou'); // take every other
  Test({LINENUM}39748, 'part(s, range(9, 100, 2))', 'Ptou');
  Test({LINENUM}39749, 'part(s, range(9, 11, 2))', 'Pt');
  Test({LINENUM}39750, 'part(s, range(9, 10, 2))', 'P');
  Test({LINENUM}39751, 'part(s, range(9, 9, 2))', 'P');
  Test({LINENUM}39752, 'part(s, range(-8, -1, 2))', 'Ptou');
  Test({LINENUM}39753, 'part(s, range(7, 1, 2))', 'ocpE');
  Test({LINENUM}39754, 'part(s, range(7, -100, 2))', 'ocpE');
  Test({LINENUM}39755, 'part(s, range(-1, -8, 2))', 'mnra');

  Test({LINENUM}39757, 'part(s, ''(1, 5, 6, 8))', 'Ect ');
  Test({LINENUM}39758, 'part(s, ''(1, 5, 6, 8, -2))', 'Ect u');
  Test({LINENUM}39759, 'part(s, ''(1, 5, 6, 8, -2, -3))', 'Ect un');
  Test({LINENUM}39760, 'part(s, ''(1, 5, 6, 8, -2, -3, 1))', 'Ect unE');
  Test({LINENUM}39761, 'part(s, ''(1, 5, 6, 8, 50000, -2, -3, -123, 1))', 'Ect unE');
  Test({LINENUM}39762, 'part(s, ''(4, 0))', 'e');
  Test({LINENUM}39763, 'part(s, ''(4))', 'e');
  Test({LINENUM}39764, 'part(s, ''())', '');
  Test({LINENUM}39765, 'part(s, ''(1000))', '');

  Test({LINENUM}39767, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(2, 5))', [1, 4, 1, 5]);
  Test({LINENUM}39768, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(2, 100))', [1, 4, 1, 5, 9, 2]);
  Test({LINENUM}39769, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(1, 3))', [3, 1, 4]);
  Test({LINENUM}39770, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(-2, -1))', [9, 2]);
  Test({LINENUM}39771, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(100, 3))', [2, 9, 5, 1, 4]);
  Test({LINENUM}39772, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(-1, -100))', [2, 9, 5, 1, 4, 1, 3]);
  Test({LINENUM}39773, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(1, 100, 2))', [3, 4, 5, 2]);
  Test({LINENUM}39774, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(1, 100, 3))', [3, 1, 2]);
  Test({LINENUM}39775, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(1, 100, 4))', [3, 5]);
  Test({LINENUM}39776, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(1, 100, 5))', [3, 9]);
  Test({LINENUM}39777, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(1, 100, 6))', [3, 2]);
  Test({LINENUM}39778, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(1, 100, 7))', [3]);
  Test({LINENUM}39779, 'part(❨3, 1, 4, 1, 5, 9, 2❩, range(-1, -100, 2))', [2, 5, 4, 3]);

  Test({LINENUM}39781, 'part(❨3, 1, 4, 1, 5, 9, 2❩, ''(2, 5, 6))', [1, 5, 9]);
  Test({LINENUM}39782, 'part(❨3, 1, 4, 1, 5, 9, 2❩, ''(2, 5, 6, -2))', [1, 5, 9, 9]);
  Test({LINENUM}39783, 'part(❨3, 1, 4, 1, 5, 9, 2❩, ''(2, 5, 6, -2, -1))', [1, 5, 9, 9, 2]);
  Test({LINENUM}39784, 'part(❨3, 1, 4, 1, 5, 9, 2❩, ''(2, -5, 6, -2, -1))', [1, 4, 9, 9, 2]);
  Test({LINENUM}39785, 'part(❨3, 1, 4, 1, 5, 9, 2❩, ''(2, -5, 6, 5000, -2, -1))', [1, 4, 9, 9, 2]);
  Test({LINENUM}39786, 'part(❨3, 1, 4, 1, 5, 9, 2❩, ''(2, -5, 6, -5000, -2, -1))', [1, 4, 9, 9, 2]);
  Test({LINENUM}39787, 'part(❨3, 1, 4, 1, 5, 9, 2❩, ''(2))', [1]);
  Test({LINENUM}39788, '#part(❨3, 1, 4, 1, 5, 9, 2❩, ''(500))', 0);
  Test({LINENUM}39789, '#part(❨3, 1, 4, 1, 5, 9, 2❩, ''())', 0);

  Test({LINENUM}39791, 'v ≔ ❨3, 1, 4, 1, 5, 9, 2❩', [3, 1, 4, 1, 5, 9, 2]);

  Test({LINENUM}39793, 'part(v, range(2, 5))', [1, 4, 1, 5]);
  Test({LINENUM}39794, 'part(v, range(2, 100))', [1, 4, 1, 5, 9, 2]);
  Test({LINENUM}39795, 'part(v, range(1, 3))', [3, 1, 4]);
  Test({LINENUM}39796, 'part(v, range(-2, -1))', [9, 2]);
  Test({LINENUM}39797, 'part(v, range(100, 3))', [2, 9, 5, 1, 4]);
  Test({LINENUM}39798, 'part(v, range(-1, -100))', [2, 9, 5, 1, 4, 1, 3]);
  Test({LINENUM}39799, 'part(v, range(1, 100, 2))', [3, 4, 5, 2]);
  Test({LINENUM}39800, 'part(v, range(1, 100, 3))', [3, 1, 2]);
  Test({LINENUM}39801, 'part(v, range(1, 100, 4))', [3, 5]);
  Test({LINENUM}39802, 'part(v, range(1, 100, 5))', [3, 9]);
  Test({LINENUM}39803, 'part(v, range(1, 100, 6))', [3, 2]);
  Test({LINENUM}39804, 'part(v, range(1, 100, 7))', [3]);
  Test({LINENUM}39805, 'part(v, range(-1, -100, 2))', [2, 5, 4, 3]);

  Test({LINENUM}39807, 'part(v, ''(2, 5, 6))', [1, 5, 9]);
  Test({LINENUM}39808, 'part(v, ''(2, 5, 6, -2))', [1, 5, 9, 9]);
  Test({LINENUM}39809, 'part(v, ''(2, 5, 6, -2, -1))', [1, 5, 9, 9, 2]);
  Test({LINENUM}39810, 'part(v, ''(2, -5, 6, -2, -1))', [1, 4, 9, 9, 2]);
  Test({LINENUM}39811, 'part(v, ''(2, -5, 6, 5000, -2, -1))', [1, 4, 9, 9, 2]);
  Test({LINENUM}39812, 'part(v, ''(2, -5, 6, -5000, -2, -1))', [1, 4, 9, 9, 2]);
  Test({LINENUM}39813, 'part(v, ''(2))', [1]);
  Test({LINENUM}39814, '#part(v, ''(500))', 0);
  Test({LINENUM}39815, '#part(v, ''())', 0);

  Test({LINENUM}39817, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(2, 5))', [ImaginaryUnit, 4, 1, 5]);
  Test({LINENUM}39818, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(2, 100))', [ImaginaryUnit, 4, 1, 5, 9, 2]);
  Test({LINENUM}39819, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(1, 3))', [3, ImaginaryUnit, 4]);
  Test({LINENUM}39820, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(-2, -1))', [TASC(9), 2]);
  Test({LINENUM}39821, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(100, 3))', [TASC(2), 9, 5, 1, 4]);
  Test({LINENUM}39822, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(-1, -100))', [2, 9, 5, 1, 4, ImaginaryUnit, 3]);
  Test({LINENUM}39823, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(1, 100, 2))', [TASC(3), 4, 5, 2]);
  Test({LINENUM}39824, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(1, 100, 3))', [TASC(3), 1, 2]);
  Test({LINENUM}39825, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(1, 100, 4))', [TASC(3), 5]);
  Test({LINENUM}39826, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(1, 100, 5))', [TASC(3), 9]);
  Test({LINENUM}39827, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(1, 100, 6))', [TASC(3), 2]);
  Test({LINENUM}39828, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(1, 100, 7))', [TASC(3)]);
  Test({LINENUM}39829, 'part(❨3, i, 4, 1, 5, 9, 2❩, range(-1, -100, 2))', [2, 5, 4, TASC(3)]);

  Test({LINENUM}39831, 'part(❨3, i, 4, 1, 5, 9, 2❩, ''(2, 5, 6))', [ImaginaryUnit, 5, 9]);
  Test({LINENUM}39832, 'part(❨3, i, 4, 1, 5, 9, 2❩, ''(2, 5, 6, -2))', [ImaginaryUnit, 5, 9, 9]);
  Test({LINENUM}39833, 'part(❨3, i, 4, 1, 5, 9, 2❩, ''(2, 5, 6, -2, -1))', [ImaginaryUnit, 5, 9, 9, 2]);
  Test({LINENUM}39834, 'part(❨3, i, 4, 1, 5, 9, 2❩, ''(2, -5, 6, -2, -1))', [ImaginaryUnit, 4, 9, 9, 2]);
  Test({LINENUM}39835, 'part(❨3, i, 4, 1, 5, 9, 2❩, ''(2, -5, 6, 5000, -2, -1))', [ImaginaryUnit, 4, 9, 9, 2]);
  Test({LINENUM}39836, 'part(❨3, i, 4, 1, 5, 9, 2❩, ''(2, -5, 6, -5000, -2, -1))', [ImaginaryUnit, 4, 9, 9, 2]);
  Test({LINENUM}39837, 'part(❨3, i, 4, 1, 5, 9, 2❩, ''(2))', [ImaginaryUnit]);
  Test({LINENUM}39838, '#part(❨3, i, 4, 1, 5, 9, 2❩, ''(500))', 0);
  Test({LINENUM}39839, '#part(❨3, i, 4, 1, 5, 9, 2❩, ''())', 0);

  Test({LINENUM}39841, 'v ≔ ❨3, i, 4, 1, 5, 9, 2❩', [3, ImaginaryUnit, 4, 1, 5, 9, 2]);

  Test({LINENUM}39843, 'part(v, range(2, 5))', [ImaginaryUnit, 4, 1, 5]);
  Test({LINENUM}39844, 'part(v, range(2, 100))', [ImaginaryUnit, 4, 1, 5, 9, 2]);
  Test({LINENUM}39845, 'part(v, range(1, 3))', [3, ImaginaryUnit, 4]);
  Test({LINENUM}39846, 'part(v, range(-2, -1))', [TASC(9), 2]);
  Test({LINENUM}39847, 'part(v, range(100, 3))', [TASC(2), 9, 5, 1, 4]);
  Test({LINENUM}39848, 'part(v, range(-1, -100))', [2, 9, 5, 1, 4, ImaginaryUnit, 3]);
  Test({LINENUM}39849, 'part(v, range(1, 100, 2))', [TASC(3), 4, 5, 2]);
  Test({LINENUM}39850, 'part(v, range(1, 100, 3))', [TASC(3), 1, 2]);
  Test({LINENUM}39851, 'part(v, range(1, 100, 4))', [TASC(3), 5]);
  Test({LINENUM}39852, 'part(v, range(1, 100, 5))', [TASC(3), 9]);
  Test({LINENUM}39853, 'part(v, range(1, 100, 6))', [TASC(3), 2]);
  Test({LINENUM}39854, 'part(v, range(1, 100, 7))', [TASC(3)]);
  Test({LINENUM}39855, 'part(v, range(-1, -100, 2))', [2, 5, 4, TASC(3)]);

  Test({LINENUM}39857, 'part(v, ''(2, 5, 6))', [ImaginaryUnit, 5, 9]);
  Test({LINENUM}39858, 'part(v, ''(2, 5, 6, -2))', [ImaginaryUnit, 5, 9, 9]);
  Test({LINENUM}39859, 'part(v, ''(2, 5, 6, -2, -1))', [ImaginaryUnit, 5, 9, 9, 2]);
  Test({LINENUM}39860, 'part(v, ''(2, -5, 6, -2, -1))', [ImaginaryUnit, 4, 9, 9, 2]);
  Test({LINENUM}39861, 'part(v, ''(2, -5, 6, 5000, -2, -1))', [ImaginaryUnit, 4, 9, 9, 2]);
  Test({LINENUM}39862, 'part(v, ''(2, -5, 6, -5000, -2, -1))', [ImaginaryUnit, 4, 9, 9, 2]);
  Test({LINENUM}39863, 'part(v, ''(2))', [ImaginaryUnit]);
  Test({LINENUM}39864, '#part(v, ''(500))', 0);
  Test({LINENUM}39865, '#part(v, ''())', 0);

  Test({LINENUM}39867, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 5))', asoarr([1.0, 4.0, 1.0, 5.0]));
  Test({LINENUM}39868, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(-4, -1))', asoarr([2.0, 6.0, 5.0, 3.0]));
  Test({LINENUM}39869, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(5, 1))', asoarr([5.0, 1.0, 4.0, 1.0, 3.0]));
  Test({LINENUM}39870, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(5, 6))', asoarr([5.0, 9.0]));
  Test({LINENUM}39871, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 100))', asoarr([1.0, 4.0, 1.0, 5.0, 9.0, 2.0, 6.0, 5.0, 3.0]));
  Test({LINENUM}39872, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 100, 2))', asoarr([1.0, 1.0, 9.0, 6.0, 3.0]));

  Test({LINENUM}39874, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(8, 2, -1))', asoarr([6, 1, 3]));
  Test({LINENUM}39875, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(8, 2, 8000, -1))', asoarr([6, 1, 3]));
  Test({LINENUM}39876, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(8000))', asoarr([]));
  Test({LINENUM}39877, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''())', asoarr([]));

  Test({LINENUM}39879, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 4), range(1, 2))', 3, [1, 4, 1, 2, 6, 5]);
  Test({LINENUM}39880, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 5), range(1, 2))', 4, [1, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}39881, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 50000), range(1, 2))', 4, [1, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}39882, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 50000), range(1, 1))', 4, [1, 4, 1, 5]);
  Test({LINENUM}39883, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 50000), 1)', 4, [1, 4, 1, 5]);
  Test({LINENUM}39884, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 50000), range(1, 20000))', 4, [1, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}39885, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(1, 2), range(1, 2))', 2, [3, 1, 9, 2]);
  Test({LINENUM}39886, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(1, 1), range(1, 2))', 1, [3, 9]);
  Test({LINENUM}39887, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, 1, range(1, 2))', 1, [3, 9]);

  Test({LINENUM}39889, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(3, 5), range(1, 2))', 3, [4, 1, 5, 6, 5, 3]);
  Test({LINENUM}39890, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(-3, -1), range(1, 2))', 3, [4, 1, 5, 6, 5, 3]);

  Test({LINENUM}39892, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(5, 3), range(1, 2))', 3, [5, 1, 4, 3, 5, 6]);
  Test({LINENUM}39893, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(5, 3), range(2, 1))', 3, [3, 5, 6, 5, 1, 4]);

  Test({LINENUM}39895, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(3, 5), range(-1, -2))', 3, [6, 5, 3, 4, 1, 5]);

  Test({LINENUM}39897, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(3, 5, 2), range(1, 2))', 2, [4, 5, 6, 3]);

  Test({LINENUM}39899, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(1, 100, 2), range(1, 2))', 3, [3, 4, 5, 9, 6, 3]);
  Test({LINENUM}39900, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(-1, -100, 2), range(1, 2))', 3, [5, 4, 3, 3, 6, 9]);

  Test({LINENUM}39902, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(1, 2, -2), ''(1))', 3, [3, 1, 1]);
  Test({LINENUM}39903, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(1, 2, -2), ''(2, 1))', 3, [9, 2, 5, 3, 1, 1]);
  Test({LINENUM}39904, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(500, 1, 2, -2), ''(2, -500, -1))', 3, [9, 2, 5, 9, 2, 5]);
  Test({LINENUM}39905, 'part(❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(1, 2, -2), ''())', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}39907, 'M ≔ ❨❨3, 1, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩', 5, [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]);

  Test({LINENUM}39909, 'part(M, range(2, 5))', asoarr([1.0, 4.0, 1.0, 5.0]));
  Test({LINENUM}39910, 'part(M, range(-4, -1))', asoarr([2.0, 6.0, 5.0, 3.0]));
  Test({LINENUM}39911, 'part(M, range(5, 1))', asoarr([5.0, 1.0, 4.0, 1.0, 3.0]));
  Test({LINENUM}39912, 'part(M, range(5, 6))', asoarr([5.0, 9.0]));
  Test({LINENUM}39913, 'part(M, range(2, 100))', asoarr([1.0, 4.0, 1.0, 5.0, 9.0, 2.0, 6.0, 5.0, 3.0]));
  Test({LINENUM}39914, 'part(M, range(2, 100, 2))', asoarr([1.0, 1.0, 9.0, 6.0, 3.0]));

  Test({LINENUM}39916, 'part(M, ''(8, 2, -1))', asoarr([6, 1, 3]));
  Test({LINENUM}39917, 'part(M, ''(8, 2, 8000, -1))', asoarr([6, 1, 3]));
  Test({LINENUM}39918, 'part(M, ''(8000))', asoarr([]));
  Test({LINENUM}39919, 'part(M, ''())', asoarr([]));

  Test({LINENUM}39921, 'part(M, range(2, 4), range(1, 2))', 3, [1, 4, 1, 2, 6, 5]);
  Test({LINENUM}39922, 'part(M, range(2, 5), range(1, 2))', 4, [1, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}39923, 'part(M, range(2, 50000), range(1, 2))', 4, [1, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}39924, 'part(M, range(2, 50000), range(1, 1))', 4, [1, 4, 1, 5]);
  Test({LINENUM}39925, 'part(M, range(2, 50000), 1)', 4, [1, 4, 1, 5]);
  Test({LINENUM}39926, 'part(M, range(2, 50000), range(1, 20000))', 4, [1, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}39927, 'part(M, range(1, 2), range(1, 2))', 2, [3, 1, 9, 2]);
  Test({LINENUM}39928, 'part(M, range(1, 1), range(1, 2))', 1, [3, 9]);
  Test({LINENUM}39929, 'part(M, 1, range(1, 2))', 1, [3, 9]);

  Test({LINENUM}39931, 'part(M, range(3, 5), range(1, 2))', 3, [4, 1, 5, 6, 5, 3]);
  Test({LINENUM}39932, 'part(M, range(-3, -1), range(1, 2))', 3, [4, 1, 5, 6, 5, 3]);

  Test({LINENUM}39934, 'part(M, range(5, 3), range(1, 2))', 3, [5, 1, 4, 3, 5, 6]);
  Test({LINENUM}39935, 'part(M, range(5, 3), range(2, 1))', 3, [3, 5, 6, 5, 1, 4]);

  Test({LINENUM}39937, 'part(M, range(3, 5), range(-1, -2))', 3, [6, 5, 3, 4, 1, 5]);

  Test({LINENUM}39939, 'part(M, range(3, 5, 2), range(1, 2))', 2, [4, 5, 6, 3]);

  Test({LINENUM}39941, 'part(M, range(1, 100, 2), range(1, 2))', 3, [3, 4, 5, 9, 6, 3]);
  Test({LINENUM}39942, 'part(M, range(-1, -100, 2), range(1, 2))', 3, [5, 4, 3, 3, 6, 9]);

  Test({LINENUM}39944, 'part(M, ''(1, 2, -2), ''(1))', 3, [3, 1, 1]);
  Test({LINENUM}39945, 'part(M, ''(1, 2, -2), ''(2, 1))', 3, [9, 2, 5, 3, 1, 1]);
  Test({LINENUM}39946, 'part(M, ''(500, 1, 2, -2), ''(2, -500, -1))', 3, [9, 2, 5, 9, 2, 5]);
  Test({LINENUM}39947, 'part(M, ''(1, 2, -2), ''())', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}39949, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 5))', asoarrex([ASO(ImaginaryUnit), ASO(TASC(4.0)), ASO(TASC(1.0)), ASO(TASC(5.0))]));
  Test({LINENUM}39950, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(-4, -1))', asoarrex([ASO(TASC(2.0)), ASO(TASC(6.0)), ASO(TASC(5.0)), ASO(TASC(3.0))]));
  Test({LINENUM}39951, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(5, 1))', asoarrex([ASO(TASC(5.0)), ASO(TASC(1.0)), ASO(TASC(4.0)), ASO(ImaginaryUnit), ASO(TASC(3.0))]));
  Test({LINENUM}39952, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(5, 6))', asoarrex([ASO(TASC(5.0)), ASO(TASC(9.0))]));
  Test({LINENUM}39953, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 100))', asoarrex([ASO(ImaginaryUnit), ASO(TASC(4.0)), ASO(TASC(1.0)), ASO(TASC(5.0)), ASO(TASC(9.0)), ASO(TASC(2.0)), ASO(TASC(6.0)), ASO(TASC(5.0)), ASO(TASC(3.0))]));
  Test({LINENUM}39954, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 100, 2))', asoarrex([ASO(ImaginaryUnit), ASO(TASC(1.0)), ASO(TASC(9.0)), ASO(TASC(6.0)), ASO(TASC(3.0))]));

  Test({LINENUM}39956, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(8, 2, -1))', asoarrex([ASO(TASC(6)), ASO(ImaginaryUnit), ASO(TASC(3))]));
  Test({LINENUM}39957, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(8, 2, 8000, -1))', asoarrex([ASO(TASC(6)), ASO(ImaginaryUnit), ASO(TASC(3))]));
  Test({LINENUM}39958, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(8000))', asoarrex([]));
  Test({LINENUM}39959, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''())', asoarrex([]));

  Test({LINENUM}39961, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 4), range(1, 2))', 3, [ImaginaryUnit, 4, 1, 2, 6, 5]);
  Test({LINENUM}39962, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 5), range(1, 2))', 4, [ImaginaryUnit, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}39963, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 50000), range(1, 2))', 4, [ImaginaryUnit, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}39964, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 50000), range(1, 1))', 4, [ImaginaryUnit, 4, 1, 5]);
  Test({LINENUM}39965, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 50000), 1)', 4, [ImaginaryUnit, 4, 1, 5]);
  Test({LINENUM}39966, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(2, 50000), range(1, 20000))', 4, [ImaginaryUnit, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}39967, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(1, 2), range(1, 2))', 2, [3, ImaginaryUnit, 9, 2]);
  Test({LINENUM}39968, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(1, 1), range(1, 2))', 1, [TASC(3), 9]);
  Test({LINENUM}39969, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, 1, range(1, 2))', 1, [TASC(3), 9]);

  Test({LINENUM}39971, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(3, 5), range(1, 2))', 3, [TASC(4), 1, 5, 6, 5, 3]);
  Test({LINENUM}39972, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(-3, -1), range(1, 2))', 3, [TASC(4), 1, 5, 6, 5, 3]);

  Test({LINENUM}39974, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(5, 3), range(1, 2))', 3, [TASC(5), 1, 4, 3, 5, 6]);
  Test({LINENUM}39975, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(5, 3), range(2, 1))', 3, [TASC(3), 5, 6, 5, 1, 4]);

  Test({LINENUM}39977, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(3, 5), range(-1, -2))', 3, [TASC(6), 5, 3, 4, 1, 5]);

  Test({LINENUM}39979, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(3, 5, 2), range(1, 2))', 2, [TASC(4), 5, 6, 3]);

  Test({LINENUM}39981, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(1, 100, 2), range(1, 2))', 3, [TASC(3), 4, 5, 9, 6, 3]);
  Test({LINENUM}39982, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, range(-1, -100, 2), range(1, 2))', 3, [TASC(5), 4, 3, 3, 6, 9]);

  Test({LINENUM}39984, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(1, 2, -2), ''(1))', 3, [3, ImaginaryUnit, 1]);
  Test({LINENUM}39985, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(1, 2, -2), ''(2, 1))', 3, [9, 2, 5, 3, ImaginaryUnit, 1]);
  Test({LINENUM}39986, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(500, 1, 2, -2), ''(2, -500, -1))', 3, [TASC(9), 2, 5, 9, 2, 5]);
  Test({LINENUM}39987, 'part(❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩, ''(1, 2, -2), ''())', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}39989, 'M ≔ ❨❨3, i, 4, 1, 5❩, ❨9, 2, 6, 5, 3❩❩', 5, [3, ImaginaryUnit, 4, 1, 5, 9, 2, 6, 5, 3]);

  Test({LINENUM}39991, 'part(M, range(2, 5))', asoarrex([ASO(ImaginaryUnit), ASO(TASC(4.0)), ASO(TASC(1.0)), ASO(TASC(5.0))]));
  Test({LINENUM}39992, 'part(M, range(-4, -1))', asoarrex([ASO(TASC(2.0)), ASO(TASC(6.0)), ASO(TASC(5.0)), ASO(TASC(3.0))]));
  Test({LINENUM}39993, 'part(M, range(5, 1))', asoarrex([ASO(TASC(5.0)), ASO(TASC(1.0)), ASO(TASC(4.0)), ASO(ImaginaryUnit), ASO(TASC(3.0))]));
  Test({LINENUM}39994, 'part(M, range(5, 6))', asoarrex([ASO(TASC(5.0)), ASO(TASC(9.0))]));
  Test({LINENUM}39995, 'part(M, range(2, 100))', asoarrex([ASO(ImaginaryUnit), ASO(TASC(4.0)), ASO(TASC(1.0)), ASO(TASC(5.0)), ASO(TASC(9.0)), ASO(TASC(2.0)), ASO(TASC(6.0)), ASO(TASC(5.0)), ASO(TASC(3.0))]));
  Test({LINENUM}39996, 'part(M, range(2, 100, 2))', asoarrex([ASO(ImaginaryUnit), ASO(TASC(1.0)), ASO(TASC(9.0)), ASO(TASC(6.0)), ASO(TASC(3.0))]));

  Test({LINENUM}39998, 'part(M, ''(8, 2, -1))', asoarrex([ASO(TASC(6)), ASO(ImaginaryUnit), ASO(TASC(3))]));
  Test({LINENUM}39999, 'part(M, ''(8, 2, 8000, -1))', asoarrex([ASO(TASC(6)), ASO(ImaginaryUnit), ASO(TASC(3))]));
  Test({LINENUM}40000, 'part(M, ''(8000))', asoarrex([]));
  Test({LINENUM}40001, 'part(M, ''())', asoarrex([]));

  Test({LINENUM}40003, 'part(M, range(2, 4), range(1, 2))', 3, [ImaginaryUnit, 4, 1, 2, 6, 5]);
  Test({LINENUM}40004, 'part(M, range(2, 5), range(1, 2))', 4, [ImaginaryUnit, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}40005, 'part(M, range(2, 50000), range(1, 2))', 4, [ImaginaryUnit, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}40006, 'part(M, range(2, 50000), range(1, 1))', 4, [ImaginaryUnit, 4, 1, 5]);
  Test({LINENUM}40007, 'part(M, range(2, 50000), 1)', 4, [ImaginaryUnit, 4, 1, 5]);
  Test({LINENUM}40008, 'part(M, range(2, 50000), range(1, 20000))', 4, [ImaginaryUnit, 4, 1, 5, 2, 6, 5, 3]);
  Test({LINENUM}40009, 'part(M, range(1, 2), range(1, 2))', 2, [3, ImaginaryUnit, 9, 2]);
  Test({LINENUM}40010, 'part(M, range(1, 1), range(1, 2))', 1, [TASC(3), 9]);
  Test({LINENUM}40011, 'part(M, 1, range(1, 2))', 1, [TASC(3), 9]);

  Test({LINENUM}40013, 'part(M, range(3, 5), range(1, 2))', 3, [TASC(4), 1, 5, 6, 5, 3]);
  Test({LINENUM}40014, 'part(M, range(-3, -1), range(1, 2))', 3, [TASC(4), 1, 5, 6, 5, 3]);

  Test({LINENUM}40016, 'part(M, range(5, 3), range(1, 2))', 3, [TASC(5), 1, 4, 3, 5, 6]);
  Test({LINENUM}40017, 'part(M, range(5, 3), range(2, 1))', 3, [TASC(3), 5, 6, 5, 1, 4]);

  Test({LINENUM}40019, 'part(M, range(3, 5), range(-1, -2))', 3, [TASC(6), 5, 3, 4, 1, 5]);

  Test({LINENUM}40021, 'part(M, range(3, 5, 2), range(1, 2))', 2, [TASC(4), 5, 6, 3]);

  Test({LINENUM}40023, 'part(M, range(1, 100, 2), range(1, 2))', 3, [TASC(3), 4, 5, 9, 6, 3]);
  Test({LINENUM}40024, 'part(M, range(-1, -100, 2), range(1, 2))', 3, [TASC(5), 4, 3, 3, 6, 9]);

  Test({LINENUM}40026, 'part(M, ''(1, 2, -2), ''(1))', 3, [3, ImaginaryUnit, 1]);
  Test({LINENUM}40027, 'part(M, ''(1, 2, -2), ''(2, 1))', 3, [9, 2, 5, 3, ImaginaryUnit, 1]);
  Test({LINENUM}40028, 'part(M, ''(500, 1, 2, -2), ''(2, -500, -1))', 3, [TASC(9), 2, 5, 9, 2, 5]);
  Test({LINENUM}40029, 'part(M, ''(1, 2, -2), ''())', failure, 'A matrix must have size at least 1×1.');

  Test({LINENUM}40031, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), range(2, 4))', asoarr([True, 4.1, 4.2]));
  Test({LINENUM}40032, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), range(2, 6))', asoarr([True, 4.1, 4.2, 4.3, 'astronomy']));
  Test({LINENUM}40033, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), range(2, 1000000))', asoarr([True, 4.1, 4.2, 4.3, 'astronomy']));

  Test({LINENUM}40035, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), range(-3, -2))', asoarr([4.2, 4.3]));
  Test({LINENUM}40036, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), range(-100, -2))', asoarr([6, True, 4.1, 4.2, 4.3]));

  Test({LINENUM}40038, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), range(4, 2))', asoarr([4.2, 4.1, True]));

  Test({LINENUM}40040, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), range(2, 100, 2))', asoarr([True, 4.2, 'astronomy']));

  Test({LINENUM}40042, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), ''(5, -1, 2, 2))', asoarr([4.3, 'astronomy', True, True]));
  Test({LINENUM}40043, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), ''(5, 5000, -1, -123, -123, 2, 2))', asoarr([4.3, 'astronomy', True, True]));
  Test({LINENUM}40044, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), ''(1000))', asoarr([]));
  Test({LINENUM}40045, 'part(''(6, true, 4.1, 4.2, 4.3, "astronomy"), ''())', asoarr([]));

  Test({LINENUM}40047, 'L ≔ ''(6, true, 4.1, 4.2, 4.3, "astronomy");', null);

  Test({LINENUM}40049, 'part(L, range(2, 4))', asoarr([True, 4.1, 4.2]));
  Test({LINENUM}40050, 'part(L, range(2, 6))', asoarr([True, 4.1, 4.2, 4.3, 'astronomy']));
  Test({LINENUM}40051, 'part(L, range(2, 1000000))', asoarr([True, 4.1, 4.2, 4.3, 'astronomy']));

  Test({LINENUM}40053, 'part(L, range(-3, -2))', asoarr([4.2, 4.3]));
  Test({LINENUM}40054, 'part(L, range(-100, -2))', asoarr([6, True, 4.1, 4.2, 4.3]));

  Test({LINENUM}40056, 'part(L, range(4, 2))', asoarr([4.2, 4.1, True]));

  Test({LINENUM}40058, 'part(L, range(2, 100, 2))', asoarr([True, 4.2, 'astronomy']));

  Test({LINENUM}40060, 'part(L, ''(5, -1, 2, 2))', asoarr([4.3, 'astronomy', True, True]));
  Test({LINENUM}40061, 'part(L, ''(5, 5000, -1, -123, -123, 2, 2))', asoarr([4.3, 'astronomy', True, True]));
  Test({LINENUM}40062, 'part(L, ''(1000))', asoarr([]));
  Test({LINENUM}40063, 'part(L, ''())', asoarr([]));

  Test({LINENUM}40065, 'S ≔ ToSet(L);', null);
  Test({LINENUM}40066, '#part(S, range(2, 4))', 3);

  Test({LINENUM}40068, 'delete(s); delete(v); delete(M); delete(L); delete(S)', success);


  //
  // Sorting
  //

  // sort

  Test({LINENUM}40077, 'v ≔ ❨6, 2, 0, −10, 1, −2, 4, 8, −3, 9, 2❩', [6, 2, 0, -10, 1, -2, 4, 8, -3, 9, 2]);

  Test({LINENUM}40079, 'sort(v)', [-10, -3, -2, 0, 1, 2, 2, 4, 6, 8, 9]);
  Test({LINENUM}40080, 'sort(v, "standard order")', [-10, -3, -2, 0, 1, 2, 2, 4, 6, 8, 9]);
  Test({LINENUM}40081, 'sort(v, "standard order descending")', [9, 8, 6, 4, 2, 2, 1, 0, -2, -3, -10]);
  Test({LINENUM}40082, 'sort(v, "absolute value")', [0, 1, -2, 2, 2, -3, 4, 6, 8, 9, -10]);
  Test({LINENUM}40083, 'sort(v, "absolute value descending")', [-10, 9, 8, 6, 4, -3, 2, 2, -2, 1, 0]);
  Test({LINENUM}40084, 'sort(v, "real and imaginary parts")', [-10, -3, -2, 0, 1, 2, 2, 4, 6, 8, 9]);
  Test({LINENUM}40085, 'sort(v, "real and imaginary parts descending")', [9, 8, 6, 4, 2, 2, 1, 0, -2, -3, -10]);
  Test({LINENUM}40086, 'sort(v, "modulus")', [0, 1, -2, 2, 2, -3, 4, 6, 8, 9, -10]);
  Test({LINENUM}40087, 'sort(v, "modulus descending")', [-10, 9, 8, 6, 4, -3, 2, 2, -2, 1, 0]);
  Test({LINENUM}40088, 'sort(v, "argument")', [0, 1, 2, 2, 4, 6, 8, 9, -2, -3, -10]);
  Test({LINENUM}40089, 'sort(v, "argument descending")', [-10, -3, -2, 9, 8, 6, 4, 2, 2, 1, 0]);
  Test({LINENUM}40090, 'sort(v, "modulus argument")', [0, 1, 2, 2, -2, -3, 4, 6, 8, 9, -10]);
  Test({LINENUM}40091, 'sort(v, "modulus argument descending")', [-10, 9, 8, 6, 4, -3, -2, 2, 2, 1, 0]);

  Test({LINENUM}40093, 'v ≔ ComplexVector(❨6, 2, 0, −10, 1, −2, 4, 8, −3, 9, 2❩)', [TASC(6), 2, 0, -10, 1, -2, 4, 8, -3, 9, 2]);

  Test({LINENUM}40095, 'sort(v)', failure, 'No comparison method specified.');
  Test({LINENUM}40096, 'sort(v, "standard order")', [TASC(-10), -3, -2, 0, 1, 2, 2, 4, 6, 8, 9]);
  Test({LINENUM}40097, 'sort(v, "standard order descending")', [TASC(9), 8, 6, 4, 2, 2, 1, 0, -2, -3, -10]);
  Test({LINENUM}40098, 'sort(v, "absolute value")', [TASC(0), 1, -2, 2, 2, -3, 4, 6, 8, 9, -10]);
  Test({LINENUM}40099, 'sort(v, "absolute value descending")', [TASC(-10), 9, 8, 6, 4, -3, 2, 2, -2, 1, 0]);
  Test({LINENUM}40100, 'sort(v, "real and imaginary parts")', [TASC(-10), -3, -2, 0, 1, 2, 2, 4, 6, 8, 9]);
  Test({LINENUM}40101, 'sort(v, "real and imaginary parts descending")', [TASC(9), 8, 6, 4, 2, 2, 1, 0, -2, -3, -10]);
  Test({LINENUM}40102, 'sort(v, "modulus")', [TASC(0), 1, -2, 2, 2, -3, 4, 6, 8, 9, -10]);
  Test({LINENUM}40103, 'sort(v, "modulus descending")', [TASC(-10), 9, 8, 6, 4, -3, 2, 2, -2, 1, 0]);
  Test({LINENUM}40104, 'sort(v, "argument")', [TASC(0), 1, 2, 2, 4, 6, 8, 9, -2, -3, -10]);
  Test({LINENUM}40105, 'sort(v, "argument descending")', [TASC(-10), -3, -2, 9, 8, 6, 4, 2, 2, 1, 0]);
  Test({LINENUM}40106, 'sort(v, "modulus argument")', [TASC(0), 1, 2, 2, -2, -3, 4, 6, 8, 9, -10]);
  Test({LINENUM}40107, 'sort(v, "modulus argument descending")', [TASC(-10), 9, 8, 6, 4, -3, -2, 2, 2, 1, 0]);

  Test({LINENUM}40109, 'v ≔ ❨3, −5, 5⋅i, −1, 1 + i, −4⋅i, −10, −5⋅i, 12 + 10⋅i, 12 − 10⋅i, 0, 5❩',
    [3, -5, 5*ImaginaryUnit, -1, 1 + ImaginaryUnit, -4*ImaginaryUnit, -10, -5*ImaginaryUnit, 12 + 10*ImaginaryUnit, 12 - 10*ImaginaryUnit, 0, 5]);

  Test({LINENUM}40112, 'sort(v)', failure, 'No comparison method specified.');
  Test({LINENUM}40113, 'sort(v, "standard order")', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component 5⋅i.');
  Test({LINENUM}40114, 'sort(v, "standard order descending")', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component 5⋅i.');
  Test({LINENUM}40115, 'sort(v, "absolute value")', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component 5⋅i.');
  Test({LINENUM}40116, 'sort(v, "absolute value descending")', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component 5⋅i.');
  Test({LINENUM}40117, 'sort(v, "real and imaginary parts")', [-10, -5, -1, -5*ImaginaryUnit, -4*ImaginaryUnit, 0, 5*ImaginaryUnit, 1+ImaginaryUnit, 3, 5, 12-10*ImaginaryUnit, 12+10*ImaginaryUnit]);
  Test({LINENUM}40118, 'sort(v, "real and imaginary parts descending")', [12+10*ImaginaryUnit, 12-10*ImaginaryUnit, 5, 3, 1+ImaginaryUnit, 5*ImaginaryUnit, 0, -4*ImaginaryUnit, -5*ImaginaryUnit, -1, -5, -10]);
  Test({LINENUM}40119, 'sort(v, "modulus")', [0, -1, 1 + ImaginaryUnit, 3, -4*ImaginaryUnit, -5, -5*ImaginaryUnit, 5*ImaginaryUnit, 5, -10, 12 - 10*ImaginaryUnit, 12 + 10*ImaginaryUnit]);
  Test({LINENUM}40120, 'sort(v, "modulus descending")', [12 + 10*ImaginaryUnit, 12 - 10*ImaginaryUnit, -10, 5, 5*ImaginaryUnit, -5*ImaginaryUnit, -5, -4*ImaginaryUnit, 3, 1 + ImaginaryUnit, -1, 0]);
  Test({LINENUM}40121, 'sort(v, "argument")', [-4*ImaginaryUnit, -5*ImaginaryUnit, 12 - 10*ImaginaryUnit, 0, 3, 5, 12 + 10*ImaginaryUnit, 1 + ImaginaryUnit, 5*ImaginaryUnit, -1, -5, -10]);
  Test({LINENUM}40122, 'sort(v, "argument descending")', [-10, -5, -1, 5*ImaginaryUnit, 1 + ImaginaryUnit, 12 + 10*ImaginaryUnit, 5, 3, 0, 12 - 10*ImaginaryUnit, -5*ImaginaryUnit, -4*ImaginaryUnit]);
  Test({LINENUM}40123, 'sort(v, "modulus argument")', [0, -1, 1 + ImaginaryUnit, 3, -4*ImaginaryUnit, -5*ImaginaryUnit, 5, 5*ImaginaryUnit, -5, -10, 12 - 10*ImaginaryUnit, 12 + 10*ImaginaryUnit]);
  Test({LINENUM}40124, 'sort(v, "modulus argument descending")', [12 + 10*ImaginaryUnit, 12 - 10*ImaginaryUnit, -10, -5, 5*ImaginaryUnit, 5, -5*ImaginaryUnit, -4*ImaginaryUnit, 3, 1 + ImaginaryUnit, -1, 0]);

  Test({LINENUM}40126, 'A ≔ ❨❨3, 7, 0, −4❩, ❨−10, 4, 1, 4❩, ❨5, 8, 0, 1❩❩', 4, [3, 7, 0, -4, -10, 4, 1, 4, 5, 8, 0, 1]);

  Test({LINENUM}40128, 'sort(A)', 4, [-10, -4, 0, 0, 1, 1, 3, 4, 4, 5, 7, 8]);
  Test({LINENUM}40129, 'sort(A, "standard order")', 4, [-10, -4, 0, 0, 1, 1, 3, 4, 4, 5, 7, 8]);
  Test({LINENUM}40130, 'sort(A, "standard order descending")', 4, [8, 7, 5, 4, 4, 3, 1, 1, 0, 0, -4, -10]);
  Test({LINENUM}40131, 'sort(A, "absolute value")', 4, [0, 0, 1, 1, 3, -4, 4, 4, 5, 7, 8, -10]);
  Test({LINENUM}40132, 'sort(A, "absolute value descending")', 4, [-10, 8, 7, 5, 4, 4, -4, 3, 1, 1, 0, 0]);
  Test({LINENUM}40133, 'sort(A, "real and imaginary parts")', 4, [-10, -4, 0, 0, 1, 1, 3, 4, 4, 5, 7, 8]);
  Test({LINENUM}40134, 'sort(A, "real and imaginary parts descending")', 4, [8, 7, 5, 4, 4, 3, 1, 1, 0, 0, -4, -10]);
  Test({LINENUM}40135, 'sort(A, "modulus")', 4, [0, 0, 1, 1, 3, -4, 4, 4, 5, 7, 8, -10]);
  Test({LINENUM}40136, 'sort(A, "modulus descending")', 4, [-10, 8, 7, 5, 4, 4, -4, 3, 1, 1, 0, 0]);
  Test({LINENUM}40137, 'sort(A, "argument")', 4, [0, 0, 1, 1, 3, 4, 4, 5, 7, 8, -4, -10]);
  Test({LINENUM}40138, 'sort(A, "argument descending")', 4, [-10, -4, 8, 7, 5, 4, 4, 3, 1, 1, 0, 0]);
  Test({LINENUM}40139, 'sort(A, "modulus argument")', 4, [0, 0, 1, 1, 3, 4, 4, -4, 5, 7, 8, -10]);
  Test({LINENUM}40140, 'sort(A, "modulus argument descending")', 4, [-10, 8, 7, 5, -4, 4, 4, 3, 1, 1, 0, 0]);

  Test({LINENUM}40142, 'A ≔ ComplexMatrix(❨❨3, 7, 0, −4❩, ❨−10, 4, 1, 4❩, ❨5, 8, 0, 1❩❩)', 4, [TASC(3), 7, 0, -4, -10, 4, 1, 4, 5, 8, 0, 1]);

  Test({LINENUM}40144, 'sort(A)', failure, 'No comparison method specified.');
  Test({LINENUM}40145, 'sort(A, "standard order")', 4, [TASC(-10), -4, 0, 0, 1, 1, 3, 4, 4, 5, 7, 8]);
  Test({LINENUM}40146, 'sort(A, "standard order descending")', 4, [TASC(8), 7, 5, 4, 4, 3, 1, 1, 0, 0, -4, -10]);
  Test({LINENUM}40147, 'sort(A, "absolute value")', 4, [TASC(0), 0, 1, 1, 3, -4, 4, 4, 5, 7, 8, -10]);
  Test({LINENUM}40148, 'sort(A, "absolute value descending")', 4, [TASC(-10), 8, 7, 5, 4, 4, -4, 3, 1, 1, 0, 0]);
  Test({LINENUM}40149, 'sort(A, "real and imaginary parts")', 4, [TASC(-10), -4, 0, 0, 1, 1, 3, 4, 4, 5, 7, 8]);
  Test({LINENUM}40150, 'sort(A, "real and imaginary parts descending")', 4, [TASC(8), 7, 5, 4, 4, 3, 1, 1, 0, 0, -4, -10]);
  Test({LINENUM}40151, 'sort(A, "modulus")', 4, [TASC(0), 0, 1, 1, 3, -4, 4, 4, 5, 7, 8, -10]);
  Test({LINENUM}40152, 'sort(A, "modulus descending")', 4, [TASC(-10), 8, 7, 5, 4, 4, -4, 3, 1, 1, 0, 0]);
  Test({LINENUM}40153, 'sort(A, "argument")', 4, [TASC(0), 0, 1, 1, 3, 4, 4, 5, 7, 8, -4, -10]);
  Test({LINENUM}40154, 'sort(A, "argument descending")', 4, [TASC(-10), -4, 8, 7, 5, 4, 4, 3, 1, 1, 0, 0]);
  Test({LINENUM}40155, 'sort(A, "modulus argument")', 4, [TASC(0), 0, 1, 1, 3, 4, 4, -4, 5, 7, 8, -10]);
  Test({LINENUM}40156, 'sort(A, "modulus argument descending")', 4, [TASC(-10), 8, 7, 5, -4, 4, 4, 3, 1, 1, 0, 0]);

  Test({LINENUM}40158, 'A ≔ ❨❨4, −2, 5, 0❩, ❨−5, 1, 5⋅i, 10❩, ❨−5⋅i, −2⋅i, −7, i❩❩',
    4, [4, -2, 5, 0, -5, 1, 5*ImaginaryUnit, 10, -5*ImaginaryUnit, -2*ImaginaryUnit, -7, ImaginaryUnit]);

  Test({LINENUM}40161, 'sort(A)', failure, 'No comparison method specified.');
  Test({LINENUM}40162, 'sort(A, "standard order")', failure, 'Complex matrix cannot be converted to real matrix because it contains a non-real component 5⋅i.');
  Test({LINENUM}40163, 'sort(A, "standard order descending")', failure, 'Complex matrix cannot be converted to real matrix because it contains a non-real component 5⋅i.');
  Test({LINENUM}40164, 'sort(A, "absolute value")', failure, 'Complex matrix cannot be converted to real matrix because it contains a non-real component 5⋅i.');
  Test({LINENUM}40165, 'sort(A, "absolute value descending")', failure, 'Complex matrix cannot be converted to real matrix because it contains a non-real component 5⋅i.');
  Test({LINENUM}40166, 'sort(A, "real and imaginary parts")', 4, [-7, -5, -2, -5*ImaginaryUnit, -2*ImaginaryUnit, 0, ImaginaryUnit, 5*ImaginaryUnit, 1, 4, 5, 10]);
  Test({LINENUM}40167, 'sort(A, "real and imaginary parts descending")', 4, [10, 5, 4, 1, 5*ImaginaryUnit, ImaginaryUnit, 0, -2*ImaginaryUnit, -5*ImaginaryUnit, -2, -5, -7]);
  Test({LINENUM}40168, 'sort(A, "modulus")', 4, [0, ImaginaryUnit, 1, -2, -2*ImaginaryUnit, 4, -5, -5*ImaginaryUnit, 5*ImaginaryUnit, 5, -7, 10]);
  Test({LINENUM}40169, 'sort(A, "modulus descending")', 4, [10, -7, 5, 5*ImaginaryUnit, -5*ImaginaryUnit, -5, 4, -2*ImaginaryUnit, -2, 1, ImaginaryUnit, 0]);
  Test({LINENUM}40170, 'sort(A, "argument")', 4, [-2*ImaginaryUnit, -5*ImaginaryUnit, 0, 1, 4, 5, 10, ImaginaryUnit, 5*ImaginaryUnit, -2, -5, -7]);
  Test({LINENUM}40171, 'sort(A, "argument descending")', 4, [-7, -5, -2, 5*ImaginaryUnit, ImaginaryUnit, 10, 5, 4, 1, 0, -5*ImaginaryUnit, -2*ImaginaryUnit]);
  Test({LINENUM}40172, 'sort(A, "modulus argument")', 4, [0, 1, ImaginaryUnit, -2*ImaginaryUnit, -2, 4, -5*ImaginaryUnit, 5, 5*ImaginaryUnit, -5, -7, 10]);
  Test({LINENUM}40173, 'sort(A, "modulus argument descending")', 4, [10, -7, -5, 5*ImaginaryUnit, 5, -5*ImaginaryUnit, 4, -2, -2*ImaginaryUnit, ImaginaryUnit, 1, 0]);

  Test({LINENUM}40175, 'sort(v, "I will have order!")', failure, 'Unknown comparison method "i will have order!".');

  Test({LINENUM}40177, '#sort(DebugObject("empty vector"))', 0);
  Test({LINENUM}40178, '#sort(ComplexVector(DebugObject("empty vector")), "modulus")', 0);
  Test({LINENUM}40179, '#sort(DebugObject("empty matrix"))', 0);
  Test({LINENUM}40180, '#sort(ComplexMatrix(DebugObject("empty matrix")), "modulus")', 0);

  Test({LINENUM}40182, 'L ≔ ''(5, 2, −3, 0, −2, 2, 1, 7, −10, 4, 2, 6)', intarr([5, 2, -3, 0, -2, 2, 1, 7, -10, 4, 2, 6]));

  Test({LINENUM}40184, 'sort(L)', intarr([-10, -3, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40185, 'sort(L, "standard order")', intarr([-10, -3, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40186, 'sort(L, "standard order descending")', intarr([7, 6, 5, 4, 2, 2, 2, 1, 0, -2, -3, -10]));
  Test({LINENUM}40187, 'sort(L, "absolute value")', intarr([0, 1, -2, 2, 2, 2, -3, 4, 5, 6, 7, -10]));
  Test({LINENUM}40188, 'sort(L, "absolute value descending")', intarr([-10, 7, 6, 5, 4, -3, 2, 2, 2, -2, 1, 0]));
  Test({LINENUM}40189, 'sort(L, "real and imaginary parts")', intarr([-10, -3, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40190, 'sort(L, "real and imaginary parts descending")', intarr([7, 6, 5, 4, 2, 2, 2, 1, 0, -2, -3, -10]));
  Test({LINENUM}40191, 'sort(L, "modulus")', intarr([0, 1, -2, 2, 2, 2, -3, 4, 5, 6, 7, -10]));
  Test({LINENUM}40192, 'sort(L, "modulus descending")', intarr([-10, 7, 6, 5, 4, -3, 2, 2, 2, -2, 1, 0]));
  Test({LINENUM}40193, 'sort(L, "argument")', intarr([0, 1, 2, 2, 2, 4, 5, 6, 7, -2, -3, -10]));
  Test({LINENUM}40194, 'sort(L, "argument descending")', intarr([-10, -3, -2, 7, 6, 5, 4, 2, 2, 2, 1, 0]));
  Test({LINENUM}40195, 'sort(L, "modulus argument")', intarr([0, 1, 2, 2, 2, -2, -3, 4, 5, 6, 7, -10]));
  Test({LINENUM}40196, 'sort(L, "modulus argument descending")', intarr([-10, 7, 6, 5, 4, -3, -2, 2, 2, 2, 1, 0]));

  Test({LINENUM}40198, 'L ≔ ''(5, 2, −3.0, 0, −2.0, 2, 1, 7, −10, 4, 2, 6.0)', asoarr([5, 2, -3.0, 0, -2.0, 2, 1, 7, -10, 4, 2, 6.0]));

  Test({LINENUM}40200, 'sort(L)', asoarr([-10, -3.0, -2.0, 0, 1, 2, 2, 2, 4, 5, 6.0, 7]));
  Test({LINENUM}40201, 'sort(L, "standard order")', asoarr([-10, -3.0, -2.0, 0, 1, 2, 2, 2, 4, 5, 6.0, 7]));
  Test({LINENUM}40202, 'sort(L, "standard order descending")', asoarr([7, 6.0, 5, 4, 2, 2, 2, 1, 0, -2.0, -3.0, -10]));
  Test({LINENUM}40203, 'sort(L, "absolute value")', asoarr([0, 1, -2.0, 2, 2, 2, -3.0, 4, 5, 6.0, 7, -10]));
  Test({LINENUM}40204, 'sort(L, "absolute value descending")', asoarr([-10, 7, 6.0, 5, 4, -3.0, 2, 2, 2, -2.0, 1, 0]));
  Test({LINENUM}40205, 'sort(L, "real and imaginary parts")', asoarr([-10, -3.0, -2.0, 0, 1, 2, 2, 2, 4, 5, 6.0, 7]));
  Test({LINENUM}40206, 'sort(L, "real and imaginary parts descending")', asoarr([7, 6.0, 5, 4, 2, 2, 2, 1, 0, -2.0, -3.0, -10]));
  Test({LINENUM}40207, 'sort(L, "modulus")', asoarr([0, 1, -2.0, 2, 2, 2, -3.0, 4, 5, 6.0, 7, -10]));
  Test({LINENUM}40208, 'sort(L, "modulus descending")', asoarr([-10, 7, 6.0, 5, 4, -3.0, 2, 2, 2, -2.0, 1, 0]));
  Test({LINENUM}40209, 'sort(L, "argument")', asoarr([0, 1, 2, 2, 2, 4, 5, 6.0, 7, -2.0, -3.0, -10]));
  Test({LINENUM}40210, 'sort(L, "argument descending")', asoarr([-10, -3.0, -2.0, 7, 6.0, 5, 4, 2, 2, 2, 1, 0]));
  Test({LINENUM}40211, 'sort(L, "modulus argument")', asoarr([0, 1, 2, 2, 2, -2.0, -3.0, 4, 5, 6.0, 7, -10]));
  Test({LINENUM}40212, 'sort(L, "modulus argument descending")', asoarr([-10, 7, 6.0, 5, 4, -3.0, -2.0, 2, 2, 2, 1, 0]));

  Test({LINENUM}40214, 'L ≔ ''(5, 2, −3.5, 0, −2, 2, 1, 7, −10, 4, 2, 6)', asoarr([5, 2, -3.5, 0, -2, 2, 1, 7, -10, 4, 2, 6]));

  Test({LINENUM}40216, 'sort(L)', asoarr([-10, -3.5, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40217, 'sort(L, "standard order")', asoarr([-10, -3.5, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40218, 'sort(L, "standard order descending")', asoarr([7, 6, 5, 4, 2, 2, 2, 1, 0, -2, -3.5, -10]));
  Test({LINENUM}40219, 'sort(L, "absolute value")', asoarr([0, 1, -2, 2, 2, 2, -3.5, 4, 5, 6, 7, -10]));
  Test({LINENUM}40220, 'sort(L, "absolute value descending")', asoarr([-10, 7, 6, 5, 4, -3.5, 2, 2, 2, -2, 1, 0]));
  Test({LINENUM}40221, 'sort(L, "real and imaginary parts")', asoarr([-10, -3.5, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40222, 'sort(L, "real and imaginary parts descending")', asoarr([7, 6, 5, 4, 2, 2, 2, 1, 0, -2, -3.5, -10]));
  Test({LINENUM}40223, 'sort(L, "modulus")', asoarr([0, 1, -2, 2, 2, 2, -3.5, 4, 5, 6, 7, -10]));
  Test({LINENUM}40224, 'sort(L, "modulus descending")', asoarr([-10, 7, 6, 5, 4, -3.5, 2, 2, 2, -2, 1, 0]));
  Test({LINENUM}40225, 'sort(L, "argument")', asoarr([0, 1, 2, 2, 2, 4, 5, 6, 7, -2, -3.5, -10]));
  Test({LINENUM}40226, 'sort(L, "argument descending")', asoarr([-10, -3.5, -2, 7, 6, 5, 4, 2, 2, 2, 1, 0]));
  Test({LINENUM}40227, 'sort(L, "modulus argument")', asoarr([0, 1, 2, 2, 2, -2, -3.5, 4, 5, 6, 7, -10]));
  Test({LINENUM}40228, 'sort(L, "modulus argument descending")', asoarr([-10, 7, 6, 5, 4, -3.5, -2, 2, 2, 2, 1, 0]));

  Test({LINENUM}40230, 'L ≔ ''(5, 2, −3.5, 0, −2, 2.0, 1, 7, −10, 4, 2, 6)', asoarr([5, 2, -3.5, 0, -2, 2.0, 1, 7, -10, 4, 2, 6]));

  Test({LINENUM}40232, 'sort(L)', asoarr([-10, -3.5, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40233, 'sort(L, "standard order")', asoarr([-10, -3.5, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40234, 'sort(L, "standard order descending")', asoarr([7, 6, 5, 4, 2, 2, 2, 1, 0, -2, -3.5, -10]));
  Test({LINENUM}40235, 'sort(L, "absolute value")', asoarr([0, 1, -2, 2, 2, 2, -3.5, 4, 5, 6, 7, -10]));
  Test({LINENUM}40236, 'sort(L, "absolute value descending")', asoarr([-10, 7, 6, 5, 4, -3.5, 2, 2, 2, -2, 1, 0]));
  Test({LINENUM}40237, 'sort(L, "real and imaginary parts")', asoarr([-10, -3.5, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40238, 'sort(L, "real and imaginary parts descending")', asoarr([7, 6, 5, 4, 2, 2, 2, 1, 0, -2, -3.5, -10]));
  Test({LINENUM}40239, 'sort(L, "modulus")', asoarr([0, 1, -2, 2, 2, 2, -3.5, 4, 5, 6, 7, -10]));
  Test({LINENUM}40240, 'sort(L, "modulus descending")', asoarr([-10, 7, 6, 5, 4, -3.5, 2, 2, 2, -2, 1, 0]));
  Test({LINENUM}40241, 'sort(L, "argument")', asoarr([0, 1, 2, 2, 2, 4, 5, 6, 7, -2, -3.5, -10]));
  Test({LINENUM}40242, 'sort(L, "argument descending")', asoarr([-10, -3.5, -2, 7, 6, 5, 4, 2, 2, 2, 1, 0]));
  Test({LINENUM}40243, 'sort(L, "modulus argument")', asoarr([0, 1, 2, 2, 2, -2, -3.5, 4, 5, 6, 7, -10]));
  Test({LINENUM}40244, 'sort(L, "modulus argument descending")', asoarr([-10, 7, 6, 5, 4, -3.5, -2, 2, 2, 2, 1, 0]));

  Test({LINENUM}40246, 'L ≔ ''(5, 2, −3.5, 0, −2, 2.0, 1, 7, −10, 4, 2, ComplexNumber(6));', null);

  Test({LINENUM}40248, 'sort(L)', asoarr([-10, -3.5, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40249, 'sort(L, "standard order")', asoarr([-10, -3.5, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40250, 'sort(L, "standard order descending")', asoarr([7, 6, 5, 4, 2, 2, 2, 1, 0, -2, -3.5, -10]));
  Test({LINENUM}40251, 'sort(L, "absolute value")', asoarr([0, 1, -2, 2, 2, 2, -3.5, 4, 5, 6, 7, -10]));
  Test({LINENUM}40252, 'sort(L, "absolute value descending")', asoarr([-10, 7, 6, 5, 4, -3.5, 2, 2, 2, -2, 1, 0]));
  Test({LINENUM}40253, 'sort(L, "real and imaginary parts")', asoarr([-10, -3.5, -2, 0, 1, 2, 2, 2, 4, 5, 6, 7]));
  Test({LINENUM}40254, 'sort(L, "real and imaginary parts descending")', asoarr([7, 6, 5, 4, 2, 2, 2, 1, 0, -2, -3.5, -10]));
  Test({LINENUM}40255, 'sort(L, "modulus")', asoarr([0, 1, -2, 2, 2, 2, -3.5, 4, 5, 6, 7, -10]));
  Test({LINENUM}40256, 'sort(L, "modulus descending")', asoarr([-10, 7, 6, 5, 4, -3.5, 2, 2, 2, -2, 1, 0]));
  Test({LINENUM}40257, 'sort(L, "argument")', asoarr([0, 1, 2, 2, 2, 4, 5, 6, 7, -2, -3.5, -10]));
  Test({LINENUM}40258, 'sort(L, "argument descending")', asoarr([-10, -3.5, -2, 7, 6, 5, 4, 2, 2, 2, 1, 0]));
  Test({LINENUM}40259, 'sort(L, "modulus argument")', asoarr([0, 1, 2, 2, 2, -2, -3.5, 4, 5, 6, 7, -10]));
  Test({LINENUM}40260, 'sort(L, "modulus argument descending")', asoarr([-10, 7, 6, 5, 4, -3.5, -2, 2, 2, 2, 1, 0]));

  Test({LINENUM}40262, 'L ≔ ''("b" : 23, 5 + i, "rabbit", 5, −3, "dog", 1, "cat", 5.8, 3⋅i, true, −10, "a" : 21, 0, −i, "rat", false)',
    TAlgosimArray.CreateWithValue(
      [
        ASOMember(sm('b', ASOInt(23))),
        ASO(5 + ImaginaryUnit),
        ASO('rabbit'),
        ASOInt(5),
        ASOInt(-3),
        ASO('dog'),
        ASOInt(1),
        ASO('cat'),
        ASO(5.8),
        ASO(3*ImaginaryUnit),
        ASO(True),
        ASOInt(-10),
        ASOMember(sm('a', ASOInt(21))),
        ASOInt(0),
        ASO(-ImaginaryUnit),
        ASO('rat'),
        ASO(False)
      ]
    )
  );

  Test({LINENUM}40286, 'sort(L)',
    TAlgosimArray.CreateWithValue(
      [
        ASO(False),
        ASO(True),
        ASOInt(-10),
        ASOInt(-3),
        ASO(-ImaginaryUnit),
        ASOInt(0),
        ASO(3*ImaginaryUnit),
        ASOInt(1),
        ASOInt(5),
        ASO(5 + ImaginaryUnit),
        ASO(5.8),
        ASO('cat'),
        ASO('dog'),
        ASO('rabbit'),
        ASO('rat'),
        ASOMember(sm('a', ASOInt(21))),
        ASOMember(sm('b', ASOInt(23)))
      ]
    )
  );

  Test({LINENUM}40310, 'sort(L, "standard order")', failure, 'Object isn''t a real number.');
  Test({LINENUM}40311, 'sort(L, "standard order descending")', failure, 'Object isn''t a real number.');
  Test({LINENUM}40312, 'sort(L, "absolute value")', failure, 'Object isn''t a real number.');
  Test({LINENUM}40313, 'sort(L, "absolute value descending")', failure, 'Object isn''t a real number.');
  Test({LINENUM}40314, 'sort(L, "real and imaginary parts")', failure, 'Object isn''t a complex number.');
  Test({LINENUM}40315, 'sort(L, "real and imaginary parts descending")', failure, 'Object isn''t a complex number.');
  Test({LINENUM}40316, 'sort(L, "modulus")', failure, 'Object isn''t a complex number.');
  Test({LINENUM}40317, 'sort(L, "modulus descending")', failure, 'Object isn''t a complex number.');
  Test({LINENUM}40318, 'sort(L, "argument")', failure, 'Object isn''t a complex number.');
  Test({LINENUM}40319, 'sort(L, "argument descending")', failure, 'Object isn''t a complex number.');
  Test({LINENUM}40320, 'sort(L, "modulus argument")', failure, 'Object isn''t a complex number.');
  Test({LINENUM}40321, 'sort(L, "modulus argument descending")', failure, 'Object isn''t a complex number.');

  Test({LINENUM}40323, 'sort(''())', asoarr([]));
  Test({LINENUM}40324, 'sort(''(), "standard order")', asoarr([]));
  Test({LINENUM}40325, 'sort(''(), "modulus")', asoarr([]));

  Test({LINENUM}40327, 'L ≔ ''(3, 5.5, 0, −2/3, i, 3⋅i, 7, −10, −3, 5, 1+i, −3⋅i, 6, 5/2, −3.8, 5.0)',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(3),
        ASO(5.5),
        ASOInt(0),
        ASO(rat(-2, 3)),
        ASO(ImaginaryUnit),
        ASO(3*ImaginaryUnit),
        ASOInt(7),
        ASOInt(-10),
        ASOInt(-3),
        ASOInt(5),
        ASO(1+ImaginaryUnit),
        ASO(-3*ImaginaryUnit),
        ASOInt(6),
        ASO(rat(5, 2)),
        ASO(-3.8),
        ASO(5.0)
      ]
    )
  );

  Test({LINENUM}40350, 'sort(L)',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(-10),
        ASO(-3.8),
        ASOInt(-3),
        ASO(rat(-2, 3)),
        ASO(-3*ImaginaryUnit),
        ASOInt(0),
        ASO(ImaginaryUnit),
        ASO(3*ImaginaryUnit),
        ASO(1+ImaginaryUnit),
        ASO(rat(5, 2)),
        ASOInt(3),
        ASOInt(5),
        ASO(5.0),
        ASO(5.5),
        ASOInt(6),
        ASOInt(7)
      ]
    )
  );

  Test({LINENUM}40373, 'sort(L, "real and imaginary parts")',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(-10),
        ASO(-3.8),
        ASOInt(-3),
        ASO(rat(-2, 3)),
        ASO(-3*ImaginaryUnit),
        ASOInt(0),
        ASO(ImaginaryUnit),
        ASO(3*ImaginaryUnit),
        ASO(1+ImaginaryUnit),
        ASO(rat(5, 2)),
        ASOInt(3),
        ASOInt(5),
        ASO(5.0),
        ASO(5.5),
        ASOInt(6),
        ASOInt(7)
      ]
    )
  );

  Test({LINENUM}40396, 'sort(L, "real and imaginary parts descending")',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(7),
        ASOInt(6),
        ASO(5.5),
        ASO(5.0),
        ASOInt(5),
        ASOInt(3),
        ASO(rat(5, 2)),
        ASO(1+ImaginaryUnit),
        ASO(3*ImaginaryUnit),
        ASO(ImaginaryUnit),
        ASOInt(0),
        ASO(-3*ImaginaryUnit),
        ASO(rat(-2, 3)),
        ASOInt(-3),
        ASO(-3.8),
        ASOInt(-10)
      ]
    )
  );

  Test({LINENUM}40419, 'sort(L, "standard order")', failure, 'Object isn''t a real number.');
  Test({LINENUM}40420, 'sort(L, "standard order descending")', failure, 'Object isn''t a real number.');
  Test({LINENUM}40421, 'sort(L, "absolute value")', failure, 'Object isn''t a real number.');
  Test({LINENUM}40422, 'sort(L, "absolute value descending")', failure, 'Object isn''t a real number.');

  Test({LINENUM}40424, 'sort(L, "modulus")',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(0),
        ASO(rat(-2, 3)),
        ASO(ImaginaryUnit),
        ASO(1+ImaginaryUnit),
        ASO(rat(5, 2)),
        ASOInt(-3),
        ASO(-3*ImaginaryUnit),
        ASO(3*ImaginaryUnit),
        ASOInt(3),
        ASO(-3.8),
        ASOInt(5),
        ASO(5.0),
        ASO(5.5),
        ASOInt(6),
        ASOInt(7),
        ASOInt(-10)
      ]
    )
  );

  Test({LINENUM}40447, 'sort(L, "modulus descending")',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(-10),
        ASOInt(7),
        ASOInt(6),
        ASO(5.5),
        ASO(5.0),
        ASOInt(5),
        ASO(-3.8),
        ASOInt(3),
        ASO(3*ImaginaryUnit),
        ASO(-3*ImaginaryUnit),
        ASOInt(-3),
        ASO(rat(5, 2)),
        ASO(1+ImaginaryUnit),
        ASO(ImaginaryUnit),
        ASO(rat(-2, 3)),
        ASOInt(0)
      ]
    )
  );

  Test({LINENUM}40470, 'sort(L, "argument")',
    TAlgosimArray.CreateWithValue(
      [
        ASO(-3*ImaginaryUnit),
        ASOInt(0),
        ASO(rat(5, 2)),
        ASOInt(3),
        ASO(5.0),
        ASOInt(5),
        ASO(5.5),
        ASOInt(6),
        ASOInt(7),
        ASO(1+ImaginaryUnit),
        ASO(ImaginaryUnit),
        ASO(3*ImaginaryUnit),
        ASO(rat(-2, 3)),
        ASOInt(-3),
        ASO(-3.8),
        ASOInt(-10)
      ]
    )
  );

  Test({LINENUM}40493, 'sort(L, "argument descending")',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(-10),
        ASO(-3.8),
        ASOInt(-3),
        ASO(rat(-2, 3)),
        ASO(3*ImaginaryUnit),
        ASO(ImaginaryUnit),
        ASO(1+ImaginaryUnit),
        ASOInt(7),
        ASOInt(6),
        ASO(5.5),
        ASOInt(5),
        ASO(5.0),
        ASOInt(3),
        ASO(rat(5, 2)),
        ASOInt(0),
        ASO(-3*ImaginaryUnit)
      ]
    )
  );

  Test({LINENUM}40516, 'sort(L, "modulus argument")',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(0),
        ASO(rat(-2, 3)),
        ASO(ImaginaryUnit),
        ASO(1+ImaginaryUnit),
        ASO(rat(5, 2)),
        ASO(-3*ImaginaryUnit),
        ASOInt(3),
        ASO(3*ImaginaryUnit),
        ASOInt(-3),
        ASO(-3.8),
        ASOInt(5),
        ASO(5.0),
        ASO(5.5),
        ASOInt(6),
        ASOInt(7),
        ASOInt(-10)
      ]
    )
  );

  Test({LINENUM}40539, 'sort(L, "modulus argument descending")',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(-10),
        ASOInt(7),
        ASOInt(6),
        ASO(5.5),
        ASO(5.0),
        ASOInt(5),
        ASO(-3.8),
        ASOInt(-3),
        ASO(3*ImaginaryUnit),
        ASOInt(3),
        ASO(-3*ImaginaryUnit),
        ASO(rat(5, 2)),
        ASO(1+ImaginaryUnit),
        ASO(ImaginaryUnit),
        ASO(rat(-2, 3)),
        ASOInt(0)
      ]
    )
  );

  Test({LINENUM}40562, 'L ≔ ''("cat", "RAT", "rabbit", "dog", "HORSE", "bird", "guinea pig", "hamster", "PIG", "thestral", "elephant", "ACROMANTULA", "owl")',
    TAlgosimArray.CreateWithValue(
      [
        ASO('cat'),
        ASO('RAT'),
        ASO('rabbit'),
        ASO('dog'),
        ASO('HORSE'),
        ASO('bird'),
        ASO('guinea pig'),
        ASO('hamster'),
        ASO('PIG'),
        ASO('thestral'),
        ASO('elephant'),
        ASO('ACROMANTULA'),
        ASO('owl')
      ]
    )
  );

  Test({LINENUM}40582, 'sort(L)',
    TAlgosimArray.CreateWithValue(
      [
        ASO('ACROMANTULA'),
        ASO('bird'),
        ASO('cat'),
        ASO('dog'),
        ASO('elephant'),
        ASO('guinea pig'),
        ASO('hamster'),
        ASO('HORSE'),
        ASO('owl'),
        ASO('PIG'),
        ASO('rabbit'),
        ASO('RAT'),
        ASO('thestral')
      ]
    )
  );

  Test({LINENUM}40602, 'L ≔ ''("cat", "CAT", "Cat", "cAT", "cAt", "CaT", "caT", "CAt")',
    strarr(
      [
        'cat',
        'CAT',
        'Cat',
        'cAT',
        'cAt',
        'CaT',
        'caT',
        'CAt'
      ]
    )
  );

  Test({LINENUM}40617, 'sort(L)',
    strarr(
      [
        'CAT',
        'CAt',
        'CaT',
        'Cat',
        'cAT',
        'cAt',
        'caT',
        'cat'
      ]
    )
  );

  Test({LINENUM}40632, 'S ≔ ToSet(L);', null);
  Test({LINENUM}40633, 'sort(S)', failure, 'An object of type "set" cannot be sorted');

  // CustomSort

  Test({LINENUM}40637, 'v ≔ ❨6, 3, −8, 2, 9, 5, −1, 0, 7, −4❩', [6, 3, -8, 2, 9, 5, -1, 0, 7, -4]);

  Test({LINENUM}40639, 'CustomSort(v, CompareValue(left, right))',
    [-8, -4, -1, 0, 2, 3, 5, 6, 7, 9]);

  Test({LINENUM}40642, 'CustomSort(v, left − right)',
    [-8, -4, -1, 0, 2, 3, 5, 6, 7, 9]);

  Test({LINENUM}40645, 'CustomSort(v, CompareValue(abs(left), abs(right)))',
    [0, -1, 2, 3, -4, 5, 6, 7, -8, 9]);

  Test({LINENUM}40648, 'w ≔ CustomSort(v, CompareValue(Iverson(odd(left)), Iverson(odd(right))));', null);
  Test({LINENUM}40649, 'sort(part(w, range(1, 5)))', [-8, -4, 0, 2, 6]);
  Test({LINENUM}40650, 'sort(part(w, range(6, 10)))', [-1, 3, 5, 7, 9]);

  Test({LINENUM}40652, 'v ≔ ❨6.3, 4.2, 8.7, 5.1, 7.8, 1.9, 2.6, 3.5❩', [6.3, 4.2, 8.7, 5.1, 7.8, 1.9, 2.6, 3.5]);

  Test({LINENUM}40654, 'CustomSort(v, CompareValue(left, right))',
    [1.9, 2.6, 3.5, 4.2, 5.1, 6.3, 7.8, 8.7]);

  Test({LINENUM}40657, 'CustomSort(v, CompareValue(frac(left), frac(right)))',
    [5.1, 4.2, 6.3, 3.5, 2.6, 8.7, 7.8, 1.9]);

  Test({LINENUM}40660, 'CustomSort(v, frac(left) - frac(right))',
    [5.1, 4.2, 6.3, 3.5, 2.6, 8.7, 7.8, 1.9]);

  Test({LINENUM}40663, 'CustomSort(v, wrong - right)', failure, 'Unknown identifier "wrong".');

  Test({LINENUM}40665, 'CustomSort(v, left − right / 0)', failure, 'Floating point division by zero');

  Test({LINENUM}40667, 'v ≔ ❨−3⋅i, 5, 7, −1, 6, 8⋅i, 2⋅i, 9, −4❩', [-3*ImaginaryUnit, 5, 7, -1, 6, 8*ImaginaryUnit, 2*ImaginaryUnit, 9, -4]);

  Test({LINENUM}40669, 'w ≔ CustomSort(v, CompareValue(Re(left), Re(right)));', null);
  Test({LINENUM}40670, 'part(w, range(1, 2))', [TASC(-4), -1]);
  Test({LINENUM}40671, 'sort(part(w, range(3, 5)), "real and imaginary parts")', [-3*ImaginaryUnit, 2*ImaginaryUnit, 8*ImaginaryUnit]);
  Test({LINENUM}40672, 'part(w, range(6, 9))', [TASC(5), 6, 7, 9]);

  Test({LINENUM}40674, 'w ≔ CustomSort(v, CompareValue(Im(left), Im(right)));', null);
  Test({LINENUM}40675, 'part(w, range(1, 1))', [-3*ImaginaryUnit]);
  Test({LINENUM}40676, 'sort(part(w, range(2, 7)), "real and imaginary parts")', [TASC(-4), -1, 5, 6, 7, 9]);
  Test({LINENUM}40677, 'part(w, range(8, 9))', [2*ImaginaryUnit, 8*ImaginaryUnit]);

  Test({LINENUM}40679, 'CustomSort(v, CompareValue(abs(left), abs(right)))',
    [-1, 2*ImaginaryUnit, -3*ImaginaryUnit, -4, 5, 6, 7, 8*ImaginaryUnit, 9]);

  Test({LINENUM}40682, 'CustomSort(v, sin(left + right))', failure, 'The comparer was expected to return a real number, but an object of type complex number was returned.');

  Test({LINENUM}40684, 'A ≔ ❨❨5.3, 2.5, −7.2, 1.6❩, ❨9.7, 3.4, −8.8, 4.1❩❩', 4,
    [5.3, 2.5, -7.2, 1.6, 9.7, 3.4, -8.8, 4.1]);

  Test({LINENUM}40687, 'CustomSort(A, CompareValue(left, right))', 4,
    [-8.8, -7.2, 1.6, 2.5, 3.4, 4.1, 5.3, 9.7]);

  Test({LINENUM}40690, 'CustomSort(A, CompareValue(abs(left), abs(right)))', 4,
    [1.6, 2.5, 3.4, 4.1, 5.3, -7.2, -8.8, 9.7]);

  Test({LINENUM}40693, 'CustomSort(A, CompareValue(abs(frac(left)), abs(frac(right))))', 4,
    [4.1, -7.2, 5.3, 3.4, 2.5, 1.6, 9.7, -8.8]);

  Test({LINENUM}40696, 'CustomSort(A, abs(frac(left)) − abs(frac(right)))', 4,
    [4.1, -7.2, 5.3, 3.4, 2.5, 1.6, 9.7, -8.8]);

  Test({LINENUM}40699, 'A ≔ ❨❨2, 3⋅i, 5, 7, −3❩, ❨−3⋅i, −8, 3, 0, 1 + i❩❩', 5,
    [2, 3*ImaginaryUnit, 5, 7, -3, -3*ImaginaryUnit, -8, 3, 0, 1+ImaginaryUnit]);

  Test({LINENUM}40702, 'B ≔ CustomSort(A, Re(left) − Re(right));', null);

  Test({LINENUM}40704, 'part(vector(B), range(1, 2))', [TASC(-8), -3]);
  Test({LINENUM}40705, 'sort(part(vector(B), range(3, 5)), "real and imaginary parts")', [-3*ImaginaryUnit, 0, 3*ImaginaryUnit]);
  Test({LINENUM}40706, 'part(vector(B), range(6, 10))', [1 + ImaginaryUnit, 2, 3, 5, 7]);

  Test({LINENUM}40708, 'B ≔ CustomSort(A, Im(left) − Im(right));', null);
  Test({LINENUM}40709, 'B[1, 1]', -3*ImaginaryUnit);
  Test({LINENUM}40710, 'sort(part(vector(B), range(2, 8)), "real and imaginary parts")', [TASC(-8), -3, 0, 2, 3, 5, 7]);
  Test({LINENUM}40711, 'B[2, 4]', 1 + ImaginaryUnit);
  Test({LINENUM}40712, 'B[2, 5]', 3*ImaginaryUnit);

  Test({LINENUM}40714, 'B ≔ CustomSort(A, abs(left) − abs(right));', null);
  Test({LINENUM}40715, 'part(vector(B), range(1, 3))', [0, 1 + ImaginaryUnit, 2]);
  Test({LINENUM}40716, 'sort(part(vector(B), range(4, 7)), "real and imaginary parts")', [-3, -3*ImaginaryUnit, 3*ImaginaryUnit, 3]);
  Test({LINENUM}40717, 'part(vector(B), range(8, 10))', [TASC(5), 7, -8]);

  Test({LINENUM}40719, 'L ≔ ''(5, 5/2, 3.6, −4.2, 3⋅i, 5.0, 7/2, −6, 1−i)',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(5),
        ASO(rat(5, 2)),
        ASO(3.6),
        ASO(-4.2),
        ASO(3*ImaginaryUnit),
        ASO(5.0),
        ASO(rat(7, 2)),
        ASOInt(-6),
        ASO(1-ImaginaryUnit)
      ]
    )
  );

  Test({LINENUM}40735, 'CustomSort(L, Re(left) - Re(right))',
    TAlgosimArray.CreateWithValue(
      [
        ASOInt(-6),
        ASO(-4.2),
        ASO(3*ImaginaryUnit),
        ASO(1-ImaginaryUnit),
        ASO(rat(5, 2)),
        ASO(rat(7, 2)),
        ASO(3.6),
        ASOInt(5),
        ASO(5.0)
      ]
    )
  );

  Test({LINENUM}40751, 'CustomSort(L, abs(left) - abs(right))',
    TAlgosimArray.CreateWithValue(
      [
        ASO(1-ImaginaryUnit),
        ASO(rat(5, 2)),
        ASO(3*ImaginaryUnit),
        ASO(rat(7, 2)),
        ASO(3.6),
        ASO(-4.2),
        ASOInt(5),
        ASO(5.0),
        ASOInt(-6)
      ]
    )
  );

  Test({LINENUM}40767, 'L ≔ ''("RAT", "rabbit", "cat", "DOG", "horse", "guinea pig", "THESTRAL")',
    strarr(
      [
        'RAT',
        'rabbit',
        'cat',
        'DOG',
        'horse',
        'guinea pig',
        'THESTRAL'
      ]
    )
  );

  Test({LINENUM}40781, 'CustomSort(L, CompareValue(left, right))',
    strarr(
      [
        'cat',
        'DOG',
        'guinea pig',
        'horse',
        'rabbit',
        'RAT',
        'THESTRAL'
      ]
    )
  );

  Test({LINENUM}40795, 'CustomSort(L, CompareString(left, right))',
    strarr(
      [
        'DOG',
        'RAT',
        'THESTRAL',
        'cat',
        'guinea pig',
        'horse',
        'rabbit'
      ]
    )
  );

  Test({LINENUM}40809, 'CustomSort(L, #left − #right + CompareValue(left, right) / 1000)',
    strarr(
      [
        'cat',
        'DOG',
        'RAT',
        'horse',
        'rabbit',
        'THESTRAL',
        'guinea pig'
      ]
    )
  );

  Test({LINENUM}40823, 'CustomSort(L, left + right)', failure, 'The comparer was expected to return a real number, but an object of type string was returned.');

  Test({LINENUM}40825, 'p ≔ (name, age) ↦ struct("name": name, "age": age);', null);
  Test({LINENUM}40826, 'L ≔ ''(p("Andrew", 32), p("Sarah", 28), p("John", 53), p("David", 45), p("Elizabeth", 80), p("Eric", 16), p("Sophie", 22), p("Bill", 75))',
    TAlgosimArray.CreateWithValue(
      [
        SPerson('Andrew', 32),
        SPerson('Sarah', 28),
        SPerson('John', 53),
        SPerson('David', 45),
        SPerson('Elizabeth', 80),
        SPerson('Eric', 16),
        SPerson('Sophie', 22),
        SPerson('Bill', 75)
      ]
    )
  );

  Test({LINENUM}40841, 'sort(L)',
    TAlgosimArray.CreateWithValue(
      [
        SPerson('Andrew', 32),
        SPerson('Bill', 75),
        SPerson('David', 45),
        SPerson('Elizabeth', 80),
        SPerson('Eric', 16),
        SPerson('John', 53),
        SPerson('Sarah', 28),
        SPerson('Sophie', 22)
      ]
    )
  );

  Test({LINENUM}40856, 'CustomSort(L, CompareValue(left.name, right.name))',
    TAlgosimArray.CreateWithValue(
      [
        SPerson('Andrew', 32),
        SPerson('Bill', 75),
        SPerson('David', 45),
        SPerson('Elizabeth', 80),
        SPerson('Eric', 16),
        SPerson('John', 53),
        SPerson('Sarah', 28),
        SPerson('Sophie', 22)
      ]
    )
  );

  Test({LINENUM}40871, 'CustomSort(L, CompareValue(left.age, right.age))',
    TAlgosimArray.CreateWithValue(
      [
        SPerson('Eric', 16),
        SPerson('Sophie', 22),
        SPerson('Sarah', 28),
        SPerson('Andrew', 32),
        SPerson('David', 45),
        SPerson('John', 53),
        SPerson('Bill', 75),
        SPerson('Elizabeth', 80)
      ]
    )
  );

  Test({LINENUM}40886, 'CustomSort(L, CompareValue(left.height, right.height))', failure, 'There is no member named "height".');

  Test({LINENUM}40888, 'S ≔ ToSet(L);', null);
  Test({LINENUM}40889, 'CustomSort(S, CompareValue(left.age, right.age))', failure, 'An object of type "set" cannot be sorted');

  Test({LINENUM}40891, 'v ≔ ❨3, −5, 0, 7, 4, −9, 1, 2, −6, 8❩',
    [3, -5, 0, 7, 4, -9, 1, 2, -6, 8]);
  Test({LINENUM}40893, 'CustomSort(v, -1);', null);
  Test({LINENUM}40894, 'CustomSort(v, 0);', null);
  Test({LINENUM}40895, 'CustomSort(v, 1);', null);
  Test({LINENUM}40896, 'CustomSort(v, 100);', null);
  Test({LINENUM}40897, 'CustomSort(v, -100);', null);
  Test({LINENUM}40898, 'CustomSort(v, RandomInt(100) − 50);', null);

  Test({LINENUM}40900, 'v ≔ ❨3, −5, 0, 7, 4, −9, 1, 2, −6, 8, i❩',
    [3, -5, 0, 7, 4, -9, 1, 2, -6, 8, ImaginaryUnit]);
  Test({LINENUM}40902, 'CustomSort(v, -1);', null);
  Test({LINENUM}40903, 'CustomSort(v, 0);', null);
  Test({LINENUM}40904, 'CustomSort(v, 1);', null);
  Test({LINENUM}40905, 'CustomSort(v, 100);', null);
  Test({LINENUM}40906, 'CustomSort(v, -100);', null);
  Test({LINENUM}40907, 'CustomSort(v, RandomInt(100) − 50);', null);

  Test({LINENUM}40909, 'v ≔ ❨❨3, −5, 0, 7, 4, −9, 1, 2, −6, 8❩❩;',
    null);
  Test({LINENUM}40911, 'CustomSort(v, -1);', null);
  Test({LINENUM}40912, 'CustomSort(v, 0);', null);
  Test({LINENUM}40913, 'CustomSort(v, 1);', null);
  Test({LINENUM}40914, 'CustomSort(v, 100);', null);
  Test({LINENUM}40915, 'CustomSort(v, -100);', null);
  Test({LINENUM}40916, 'CustomSort(v, RandomInt(100) − 50);', null);

  Test({LINENUM}40918, 'v ≔ ❨❨3, −5, 0, 7, 4, −9, 1, 2, −6, 8, i❩❩;',
    null);
  Test({LINENUM}40920, 'CustomSort(v, -1);', null);
  Test({LINENUM}40921, 'CustomSort(v, 0);', null);
  Test({LINENUM}40922, 'CustomSort(v, 1);', null);
  Test({LINENUM}40923, 'CustomSort(v, 100);', null);
  Test({LINENUM}40924, 'CustomSort(v, -100);', null);
  Test({LINENUM}40925, 'CustomSort(v, RandomInt(100) − 50);', null);

  Test({LINENUM}40927, 'v ≔ ''(3, −5, 0, 7, 4, −9, 1, 2, −6, 8);',
    null);
  Test({LINENUM}40929, 'CustomSort(v, -1);', null);
  Test({LINENUM}40930, 'CustomSort(v, 0);', null);
  Test({LINENUM}40931, 'CustomSort(v, 1);', null);
  Test({LINENUM}40932, 'CustomSort(v, 100);', null);
  Test({LINENUM}40933, 'CustomSort(v, -100);', null);
  Test({LINENUM}40934, 'CustomSort(v, RandomInt(100) − 50);', null);

  Test({LINENUM}40936, 'L ≔ ''("owl", "hippogriff", "rabbit", "thestral", "snake", "bird", "acromantula", "short-tailed shrew tenrec")',
    strarr(
      [
        'owl',
        'hippogriff',
        'rabbit',
        'thestral',
        'snake',
        'bird',
        'acromantula',
        'short-tailed shrew tenrec'
      ]
    )
  );

  Test({LINENUM}40951, 'CustomSort(L, -1);', null);
  Test({LINENUM}40952, 'CustomSort(L, 0);', null);
  Test({LINENUM}40953, 'CustomSort(L, 1);', null);
  Test({LINENUM}40954, 'CustomSort(L, 100);', null);
  Test({LINENUM}40955, 'CustomSort(L, -100);', null);
  Test({LINENUM}40956, 'CustomSort(L, RandomInt(100) − 50);', null);
  Test({LINENUM}40957, 'CustomSort(L, RandomInt(#left) − #right);', null);
  Test({LINENUM}40958, 'CustomSort(L, RandomInt(#right) − #left);', null);
  Test({LINENUM}40959, 'CustomSort(L, RandomInt(#left) − RandomInt(#right));', null);
  Test({LINENUM}40960, 'CustomSort(L, RandomInt(#right) − RandomInt(#left));', null);

  // SortBy

  Test({LINENUM}40964, 'v ≔ ❨3, −5, 0, 7, 4, −9, 1, 2, −6, 8❩',
    [3, -5, 0, 7, 4, -9, 1, 2, -6, 8]);

  Test({LINENUM}40967, 'SortBy(v, identity)',
    [-9, -6, -5, 0, 1, 2, 3, 4, 7, 8]);

  Test({LINENUM}40970, 'SortBy(v, abs)',
    [0, 1, 2, 3, 4, -5, -6, 7, 8, -9]);

  Test({LINENUM}40973, 'w ≔ SortBy(v, odd);', null);
  Test({LINENUM}40974, 'sort(part(w, range(1, 5)))', [-6, 0, 2, 4, 8]);
  Test({LINENUM}40975, 'sort(part(w, range(6, 10)))', [-9, -5, 1, 3, 7]);

  Test({LINENUM}40977, 'SortBy(v, sin)',
    [4, -9, 0, 3, -6, 7, 1, 2, -5, 8]);

  Test({LINENUM}40980, 'v ≔ ❨6.2, 7.1, 8.8, 5.3, 1.9, 4.7, 9.5, 3.6, 2.4❩',
    [6.2, 7.1, 8.8, 5.3, 1.9, 4.7, 9.5, 3.6, 2.4]);

  Test({LINENUM}40983, 'SortBy(v, identity)',
    [1.9, 2.4, 3.6, 4.7, 5.3, 6.2, 7.1, 8.8, 9.5]);

  Test({LINENUM}40986, 'SortBy(v, trunc)',
    [1.9, 2.4, 3.6, 4.7, 5.3, 6.2, 7.1, 8.8, 9.5]);

  Test({LINENUM}40989, 'SortBy(v, frac)',
    [7.1, 6.2, 5.3, 2.4, 9.5, 3.6, 4.7, 8.8, 1.9]);

  Test({LINENUM}40992, 'v ≔ ❨2, 3 + i, −1 − i, 4 + 15⋅i, 7 − 2⋅i, −5 + 5⋅i, −6 − 3⋅i❩',
    [2, 3 + ImaginaryUnit, -1 - ImaginaryUnit, 4 + 15*ImaginaryUnit, 7 - 2*ImaginaryUnit, -5 + 5*ImaginaryUnit, -6 - 3*ImaginaryUnit]);

  Test({LINENUM}40995, 'SortBy(v, Re)',
    [-6 - 3*ImaginaryUnit, -5 + 5*ImaginaryUnit, -1 - ImaginaryUnit, 2, 3 + ImaginaryUnit, 4 + 15*ImaginaryUnit, 7 - 2*ImaginaryUnit]);

  Test({LINENUM}40998, 'SortBy(v, Im)',
    [-6 - 3*ImaginaryUnit, 7 - 2*ImaginaryUnit, -1 - ImaginaryUnit, 2, 3 + ImaginaryUnit, -5 + 5*ImaginaryUnit, 4 + 15*ImaginaryUnit]);

  Test({LINENUM}41001, 'SortBy(v, abs)',
    [-1 - ImaginaryUnit, 2, 3 + ImaginaryUnit, -6 - 3*ImaginaryUnit, -5 + 5*ImaginaryUnit, 7 - 2*ImaginaryUnit, 4 + 15*ImaginaryUnit]);

  Test({LINENUM}41004, 'SortBy(v, arg)',
    [-6 - 3*ImaginaryUnit, -1 - ImaginaryUnit, 7 - 2*ImaginaryUnit, 2, 3 + ImaginaryUnit, 4 + 15*ImaginaryUnit, -5 + 5*ImaginaryUnit]);

  Test({LINENUM}41007, 'SortBy(v, z ↦ Re(z) + Im(z))',
    [-6 - 3*ImaginaryUnit, -1 - ImaginaryUnit, -5 + 5*ImaginaryUnit, 2, 3 + ImaginaryUnit, 7 - 2*ImaginaryUnit, 4 + 15*ImaginaryUnit]);

  Test({LINENUM}41010, 'SortBy(v, z ↦ max(abs(Re(z)), abs(Im(z))))',
    [-1 - ImaginaryUnit, 2, 3 + ImaginaryUnit, -5 + 5*ImaginaryUnit, -6 - 3*ImaginaryUnit, 7 - 2*ImaginaryUnit, 4 + 15*ImaginaryUnit]);

  Test({LINENUM}41013, 'A ≔ ❨❨6.3, 5.2, 3.7, 9.9❩, ❨4.5, 1.1, 2.0, 8.8❩❩', 4,
    [6.3, 5.2, 3.7, 9.9, 4.5, 1.1, 2.0, 8.8]);

  Test({LINENUM}41016, 'SortBy(A, trunc)', 4,
    [1.1, 2.0, 3.7, 4.5, 5.2, 6.3, 8.8, 9.9]);

  Test({LINENUM}41019, 'SortBy(A, frac)', 4,
    [2.0, 1.1, 5.2, 6.3, 4.5, 3.7, 8.8, 9.9]);

  Test({LINENUM}41022, 'A ≔ ❨❨1 + i/100, −2, 1 + i, 3⋅i❩, ❨−5⋅i, 2 − 2⋅i, 0, −3 − 3⋅i❩❩', 4,
    [1 + ImaginaryUnit/100, -2, 1 + ImaginaryUnit, 3*ImaginaryUnit, -5*ImaginaryUnit, 2 - 2*ImaginaryUnit, 0, -3-3*ImaginaryUnit]);

  Test({LINENUM}41025, 'SortBy(A, abs)', 4,
    [0, 1 + ImaginaryUnit/100, 1 + ImaginaryUnit, -2, 2 - 2*ImaginaryUnit, 3*ImaginaryUnit, -3 - 3*ImaginaryUnit, -5*ImaginaryUnit]);

  Test({LINENUM}41028, 'SortBy(A, arg)', 4,
    [-3 - 3*ImaginaryUnit, -5*ImaginaryUnit, 2 - 2*ImaginaryUnit, 0, 1 + ImaginaryUnit/100, 1 + ImaginaryUnit, 3*ImaginaryUnit, -2]);

  Test({LINENUM}41031, 'L ≔ ''("owl", "hippogriff", "rabbit", "thestral", "snake", "bird", "acromantula", "short-tailed shrew tenrec")',
    strarr(
      [
        'owl',
        'hippogriff',
        'rabbit',
        'thestral',
        'snake',
        'bird',
        'acromantula',
        'short-tailed shrew tenrec'
      ]
    )
  );

  Test({LINENUM}41046, 'SortBy(L, length)',
    strarr(
      [
        'owl',
        'bird',
        'snake',
        'rabbit',
        'thestral',
        'hippogriff',
        'acromantula',
        'short-tailed shrew tenrec'
      ]
    )
  );

  Test({LINENUM}41061, 'SortBy(L, (s ↦ count(s, "a") + count(s, "e") + count(s, "i") + count(s, "r") + count(s, "b") + count(s, "d") + count(s, "o") + count(s, "g") + count(s, "p") + count(s, "n") + count(s, "k") + count(s, "i") + count(s, "m")))',
    strarr(
      [
        'owl',
        'thestral',
        'snake',
        'bird',
        'rabbit',
        'acromantula',
        'hippogriff',
        'short-tailed shrew tenrec'
      ]
    )
  );

  Test({LINENUM}41076, 'p ≔ (name, age) ↦ struct("name": name, "age": age);', null);
  Test({LINENUM}41077, 'L ≔ ''(p("Andrew", 32), p("Sarah", 28), p("John", 53), p("David", 45), p("Elizabeth", 80), p("Eric", 16), p("Sophie", 22), p("Bill", 75))',
    TAlgosimArray.CreateWithValue(
      [
        SPerson('Andrew', 32),
        SPerson('Sarah', 28),
        SPerson('John', 53),
        SPerson('David', 45),
        SPerson('Elizabeth', 80),
        SPerson('Eric', 16),
        SPerson('Sophie', 22),
        SPerson('Bill', 75)
      ]
    )
  );

  Test({LINENUM}41092, 'SortBy(L, member("name"))',
    TAlgosimArray.CreateWithValue(
      [
        SPerson('Andrew', 32),
        SPerson('Bill', 75),
        SPerson('David', 45),
        SPerson('Elizabeth', 80),
        SPerson('Eric', 16),
        SPerson('John', 53),
        SPerson('Sarah', 28),
        SPerson('Sophie', 22)
      ]
    )
  );

  Test({LINENUM}41107, 'SortBy(L, member("age"))',
    TAlgosimArray.CreateWithValue(
      [
        SPerson('Eric', 16),
        SPerson('Sophie', 22),
        SPerson('Sarah', 28),
        SPerson('Andrew', 32),
        SPerson('David', 45),
        SPerson('John', 53),
        SPerson('Bill', 75),
        SPerson('Elizabeth', 80)
      ]
    )
  );

  Test({LINENUM}41122, 'SortBy(L, member("sex"))', failure, 'There is no member named "sex".');

  Test({LINENUM}41124, 'S ≔ ToSet(L);', null);
  Test({LINENUM}41125, 'SortBy(S, member("age"))', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}41127, 'delete(v); delete(A); delete(L); delete(S); delete(w); delete(p)', success);


  //
  // Grouping
  //

  // GroupBy

  Test({LINENUM}41136, 'L ≔ ''(6, 0, −2, −7, 4, −1, 3, 8, −6, 2, −3, −4, −8, 1, −9, 7)',
    intarr([6, 0, -2, -7, 4, -1, 3, 8, -6, 2, -3, -4, -8, 1, -9, 7]));

  Test({LINENUM}41139, 'GroupBy(L, IsNegative) @ sort',
    asoarrex(
      [
        intarr([0, 1, 2, 3, 4, 6, 7, 8]),
        intarr([-9, -8, -7, -6, -4, -3, -2, -1])
      ]
    )
  );

  Test({LINENUM}41148, 'GroupBy(L, odd) @ sort',
    asoarrex(
      [
        intarr([-8, -6, -4, -2, 0, 2, 4, 6, 8]),
        intarr([-9, -7, -3, -1, 1, 3, 7])
      ]
    )
  );

  Test({LINENUM}41157, 'GroupBy(L, sgn) @ sort',
    asoarrex(
      [
        intarr([-9, -8, -7, -6, -4, -3, -2, -1]),
        intarr([0]),
        intarr([1, 2, 3, 4, 6, 7, 8])
      ]
    )
  );

  Test({LINENUM}41167, 'GroupBy(L, IsNegative, "neg") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['neg', 'members'],
          [ASO(False), intarr([0, 1, 2, 3, 4, 6, 7, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['neg', 'members'],
          [ASO(True), intarr([-9, -8, -7, -6, -4, -3, -2, -1])]
          )
      ]
    )
  );

  Test({LINENUM}41182, 'GroupBy(L, odd, "odd") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['odd', 'members'],
          [ASO(False), intarr([-8, -6, -4, -2, 0, 2, 4, 6, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['odd', 'members'],
          [ASO(True), intarr([-9, -7, -3, -1, 1, 3, 7])]
          )
      ]
    )
  );

  Test({LINENUM}41197, 'GroupBy(L, IsNegative, "neg", "ints") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['neg', 'ints'],
          [ASO(False), intarr([0, 1, 2, 3, 4, 6, 7, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['neg', 'ints'],
          [ASO(True), intarr([-9, -8, -7, -6, -4, -3, -2, -1])]
          )
      ]
    )
  );

  Test({LINENUM}41212, 'GroupBy(L, odd, "odd", "values") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['odd', 'values'],
          [ASO(False), intarr([-8, -6, -4, -2, 0, 2, 4, 6, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['odd', 'values'],
          [ASO(True), intarr([-9, -7, -3, -1, 1, 3, 7])]
          )
      ]
    )
  );

  Test({LINENUM}41227, 'S ≔ ToSet(L)',
    intset([6, 0, -2, -7, 4, -1, 3, 8, -6, 2, -3, -4, -8, 1, -9, 7]));

  Test({LINENUM}41230, 'GroupBy(S, IsNegative) @ sort',
    asoarrex(
      [
        intarr([0, 1, 2, 3, 4, 6, 7, 8]),
        intarr([-9, -8, -7, -6, -4, -3, -2, -1])
      ]
    )
  );

  Test({LINENUM}41239, 'GroupBy(S, odd) @ sort',
    asoarrex(
      [
        intarr([-8, -6, -4, -2, 0, 2, 4, 6, 8]),
        intarr([-9, -7, -3, -1, 1, 3, 7])
      ]
    )
  );

  Test({LINENUM}41248, 'GroupBy(S, sgn) @ sort',
    asoarrex(
      [
        intarr([-9, -8, -7, -6, -4, -3, -2, -1]),
        intarr([0]),
        intarr([1, 2, 3, 4, 6, 7, 8])
      ]
    )
  );

  Test({LINENUM}41258, 'GroupBy(S, IsNegative, "neg") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['neg', 'members'],
          [ASO(False), intarr([0, 1, 2, 3, 4, 6, 7, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['neg', 'members'],
          [ASO(True), intarr([-9, -8, -7, -6, -4, -3, -2, -1])]
          )
      ]
    )
  );

  Test({LINENUM}41273, 'GroupBy(S, odd, "odd") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['odd', 'members'],
          [ASO(False), intarr([-8, -6, -4, -2, 0, 2, 4, 6, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['odd', 'members'],
          [ASO(True), intarr([-9, -7, -3, -1, 1, 3, 7])]
          )
      ]
    )
  );

  Test({LINENUM}41288, 'GroupBy(S, IsNegative, "neg", "ints") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['neg', 'ints'],
          [ASO(False), intarr([0, 1, 2, 3, 4, 6, 7, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['neg', 'ints'],
          [ASO(True), intarr([-9, -8, -7, -6, -4, -3, -2, -1])]
          )
      ]
    )
  );

  Test({LINENUM}41303, 'GroupBy(S, odd, "odd", "values") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['odd', 'values'],
          [ASO(False), intarr([-8, -6, -4, -2, 0, 2, 4, 6, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['odd', 'values'],
          [ASO(True), intarr([-9, -7, -3, -1, 1, 3, 7])]
          )
      ]
    )
  );

  Test({LINENUM}41318, 'v ≔ ❨6, 0, −2, −7, 4, −1, 3, 8, −6, 2, −3, −4, −8, 1, −9, 7❩',
    [6, 0, -2, -7, 4, -1, 3, 8, -6, 2, -3, -4, -8, 1, -9, 7]);

  Test({LINENUM}41321, 'GroupBy(v, IsNegative) @ sort',
    asoarrex(
      [
        intarr([0, 1, 2, 3, 4, 6, 7, 8]),
        intarr([-9, -8, -7, -6, -4, -3, -2, -1])
      ]
    )
  );

  Test({LINENUM}41330, 'GroupBy(v, odd) @ sort',
    asoarrex(
      [
        intarr([-8, -6, -4, -2, 0, 2, 4, 6, 8]),
        intarr([-9, -7, -3, -1, 1, 3, 7])
      ]
    )
  );

  Test({LINENUM}41339, 'GroupBy(v, sgn) @ sort',
    asoarrex(
      [
        intarr([-9, -8, -7, -6, -4, -3, -2, -1]),
        intarr([0]),
        intarr([1, 2, 3, 4, 6, 7, 8])
      ]
    )
  );

  Test({LINENUM}41349, 'GroupBy(v, IsNegative, "neg") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['neg', 'members'],
          [ASO(False), intarr([0, 1, 2, 3, 4, 6, 7, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['neg', 'members'],
          [ASO(True), intarr([-9, -8, -7, -6, -4, -3, -2, -1])]
          )
      ]
    )
  );

  Test({LINENUM}41364, 'GroupBy(v, odd, "odd") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['odd', 'members'],
          [ASO(False), intarr([-8, -6, -4, -2, 0, 2, 4, 6, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['odd', 'members'],
          [ASO(True), intarr([-9, -7, -3, -1, 1, 3, 7])]
          )
      ]
    )
  );

  Test({LINENUM}41379, 'GroupBy(v, IsNegative, "neg", "ints") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['neg', 'ints'],
          [ASO(False), intarr([0, 1, 2, 3, 4, 6, 7, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['neg', 'ints'],
          [ASO(True), intarr([-9, -8, -7, -6, -4, -3, -2, -1])]
          )
      ]
    )
  );

  Test({LINENUM}41394, 'GroupBy(v, odd, "odd", "values") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['odd', 'values'],
          [ASO(False), intarr([-8, -6, -4, -2, 0, 2, 4, 6, 8])]
          ),
        TAlgosimStructure.CreateWithValue(
          ['odd', 'values'],
          [ASO(True), intarr([-9, -7, -3, -1, 1, 3, 7])]
          )
      ]
    )
  );

  Test({LINENUM}41409, 'p ≔ (name, age, sex) ↦ struct("name": name, "age": age, "sex": sex);', null);
  Test({LINENUM}41410, 'L ≔ ''(p("Ian", 89, "male"), p("Andrew", 32, "male"), p("Sarah", 28, "female"), p("John", 53, "male"), p("David", 45, "male"), p("Elizabeth", 80, "female"), p("Eric", 16, "male"), p("Sophie", 22, "female"), '+'p("Bill", 75, "male"), p("Michael", 79, "male"), p("Richard", 85, "male"))',
    asoarrex(
      [
        SPerson('Ian', 89, 'male'),
        SPerson('Andrew', 32, 'male'),
        SPerson('Sarah', 28, 'female'),
        SPerson('John', 53, 'male'),
        SPerson('David', 45, 'male'),
        SPerson('Elizabeth', 80, 'female'),
        SPerson('Eric', 16, 'male'),
        SPerson('Sophie', 22, 'female'),
        SPerson('Bill', 75, 'male'),
        SPerson('Michael', 79, 'male'),
        SPerson('Richard', 85, 'male')
      ]
    )
  );

  Test({LINENUM}41428, 'GroupBy(L, member("sex")) @ sort',
    asoarrex(
      [
        asoarrex(
          [
            SPerson('Elizabeth', 80, 'female'),
            SPerson('Sarah', 28, 'female'),
            SPerson('Sophie', 22, 'female')
          ]
        ),
        asoarrex(
          [
            SPerson('Andrew', 32, 'male'),
            SPerson('Bill', 75, 'male'),
            SPerson('David', 45, 'male'),
            SPerson('Eric', 16, 'male'),
            SPerson('Ian', 89, 'male'),
            SPerson('John', 53, 'male'),
            SPerson('Michael', 79, 'male'),
            SPerson('Richard', 85, 'male')
          ]
        )
      ]
    )
  );

  Test({LINENUM}41454, 'GroupBy(L, member("sex"), "gender") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['gender', 'members'],
          [
            ASO('female'),
            asoarrex(
              [
                SPerson('Elizabeth', 80, 'female'),
                SPerson('Sarah', 28, 'female'),
                SPerson('Sophie', 22, 'female')
              ]
            )
          ]
        ),
        TAlgosimStructure.CreateWithValue(
          ['gender', 'members'],
          [
            ASO('male'),
            asoarrex(
              [
                SPerson('Andrew', 32, 'male'),
                SPerson('Bill', 75, 'male'),
                SPerson('David', 45, 'male'),
                SPerson('Eric', 16, 'male'),
                SPerson('Ian', 89, 'male'),
                SPerson('John', 53, 'male'),
                SPerson('Michael', 79, 'male'),
                SPerson('Richard', 85, 'male')
              ]
            )
          ]
        )
      ]
    )
  );

  Test({LINENUM}41492, 'GroupBy(L, member("sex"), "gender", "students") @ (x↦ApplyIf(x, (y↦type(y)="array"), sort))',
    asoarrex(
      [
        TAlgosimStructure.CreateWithValue(
          ['gender', 'students'],
          [
            ASO('female'),
            asoarrex(
              [
                SPerson('Elizabeth', 80, 'female'),
                SPerson('Sarah', 28, 'female'),
                SPerson('Sophie', 22, 'female')
              ]
            )
          ]
        ),
        TAlgosimStructure.CreateWithValue(
          ['gender', 'students'],
          [
            ASO('male'),
            asoarrex(
              [
                SPerson('Andrew', 32, 'male'),
                SPerson('Bill', 75, 'male'),
                SPerson('David', 45, 'male'),
                SPerson('Eric', 16, 'male'),
                SPerson('Ian', 89, 'male'),
                SPerson('John', 53, 'male'),
                SPerson('Michael', 79, 'male'),
                SPerson('Richard', 85, 'male')
              ]
            )
          ]
        )
      ]
    )
  );

  Test({LINENUM}41530, 'GroupBy(L, (s ↦ ⌊s.age/10⌋)) @ sort',
    asoarrex(
      [
        asoarrex(
          [
            SPerson('Eric', 16, 'male')
          ]
        ),
        asoarrex(
          [
            SPerson('Sarah', 28, 'female'),
            SPerson('Sophie', 22, 'female')
          ]
        ),
        asoarrex(
          [
            SPerson('Andrew', 32, 'male')
          ]
        ),
        asoarrex(
          [
            SPerson('David', 45, 'male')
          ]
        ),
        asoarrex(
          [
            SPerson('John', 53, 'male')
          ]
        ),
        asoarrex(
          [
            SPerson('Bill', 75, 'male'),
            SPerson('Michael', 79, 'male')
          ]
        ),
        asoarrex(
          [
            SPerson('Elizabeth', 80, 'female'),
            SPerson('Ian', 89, 'male'),
            SPerson('Richard', 85, 'male')
          ]
        )
      ]
    )
  );

  Test({LINENUM}41576, 'delete(v); delete(L); delete(S); delete(p)', success);


  //
  // entrywise
  //

  Test({LINENUM}41583, 'L ≔ ''(❨❨6, 1❩, ❨2, 4❩❩, ❨❨5, 7❩, ❨6, 3❩❩, ❨❨4, 1❩, ❨5, 6❩❩);', null);

  Eps; Test({LINENUM}41585, 'entrywise(L, sum)', 2, [15, 9, 13, 13]);   // = ∑(L)
  Eps; Test({LINENUM}41586, 'entrywise(L, product)', 2, [120, 7, 60, 72]);  // ≠ ∏(L)
  Eps; Test({LINENUM}41587, 'entrywise(L, mean)', 2, [5, 3, 13/3, 13/3]); // = mean(L)
  Eps; Test({LINENUM}41588, 'entrywise(L, average)', 2, [5, 3, 13/3, 13/3]); // = average(L)
  Eps; Test({LINENUM}41589, 'entrywise(L, ArithmeticMean)', 2, [5, 3, 13/3, 13/3]); // = ArithmeticMean(L)
  Eps; Test({LINENUM}41590, 'entrywise(L, GeometricMean)', 2, [4.9324241486609402, 1.9129311827723891, 3.9148676411688636, 4.16016764610380823]); // GeometricMean(L) not defined
  Eps; Test({LINENUM}41591, 'entrywise(L, HarmonicMean)', 2, [4.86486486486486486, 1.4, 3.46153846153846154, 4]); // HarmonicMean(L) not defined

  Test({LINENUM}41593, 'entrywise(''(❨❨6, 1❩, ❨2, 4❩❩, ❨❨5, 7❩, ❨6, 3❩❩, ❨❨4, 1, 8❩, ❨5, 6, 4❩❩), sum)',
    failure, 'Cannot compute entrywise images in a list of vectors or matrices of different sizes.');

  Test({LINENUM}41596, 'L ≔ ''(❨6, 2, 1, 4❩, ❨7, 4, 2, 3❩, ❨1, 2, 1, 3❩);', null);

  Eps; Test({LINENUM}41598, 'entrywise(L, sum)', [14, 8, 4, 10]);   // = ∑(L)
  Eps; Test({LINENUM}41599, 'entrywise(L, product)', [42, 16, 2, 36]);  // ∏(L) not defined
  Eps; Test({LINENUM}41600, 'entrywise(L, mean)', [14/3, 8/3, 4/3, 10/3]); // = mean(L)
  Eps; Test({LINENUM}41601, 'entrywise(L, average)', [14/3, 8/3, 4/3, 10/3]); // = average(L)
  Eps; Test({LINENUM}41602, 'entrywise(L, ArithmeticMean)', [14/3, 8/3, 4/3, 10/3]); // = ArithmeticMean(L)
  Eps; Test({LINENUM}41603, 'entrywise(L, GeometricMean)', [3.47602664488644979, 2.51984209978974633, 1.25992104989487316, 3.30192724889462668]); // GeometricMean(L) not defined
  Eps; Test({LINENUM}41604, 'entrywise(L, HarmonicMean)', [2.29090909090909091, 2.4, 1.2, 3.27272727272727273]); // HarmonicMean(L) not defined

  Test({LINENUM}41606, 'entrywise(''(❨6, 2, 1, 4❩, ❨7, 4, 2, 3❩, ❨1, 2, 1, 3, 5❩), sum)',
    failure, 'Cannot compute entrywise images in a list of vectors or matrices of different sizes.');

  Test({LINENUM}41609, 'entrywise(''(❨1, 2, 3❩, ❨❨5, 2, 7❩❩*), sum)', 1, [6, 4, 10]);
  Test({LINENUM}41610, 'entrywise(''(❨1, 2, 3❩, ❨❨5, 2, 7❩❩), sum)',
    failure, 'Cannot compute entrywise images in a list of vectors or matrices of different sizes.');
  Test({LINENUM}41612, 'entrywise(''(❨1, 2, 3❩, ❨❨5, 2, 7, 4❩❩*), sum)',
    failure, 'Cannot compute entrywise images in a list of vectors or matrices of different sizes.');

  Test({LINENUM}41615, 'entrywise(''(❨1, 2, 3❩, ❨❨5, 2, 7❩❩*, 10), sum)',
    failure, 'The array must contain only objects of type numeric array, but it contains an object of type integer.');

  Test({LINENUM}41618, 'entrywise(''(❨1, 2, 3❩), sum)', [1, 2, 3]);
  Test({LINENUM}41619, 'entrywise(''(), sum)',
    failure, 'Cannot compute entrywise images in an empty list of vectors or matrices.'); // indeed a zero matrix or vector, but of what size/dimension?

  Test({LINENUM}41622, 'entrywise(''(❨1, 2, 3❩), sum, product)', failure, 'Too many arguments.');

  Test({LINENUM}41624, 'delete(L)', success);


  //
  // Accumulation
  //

  // accumulate

  Test({LINENUM}41633, 'v ≔ ❨5, 1, 3, −2, 7, 5❩', [5, 1, 3, -2, 7, 5]);

  Test({LINENUM}41635, 'accumulate(v, 0, add)', 19.0);
  Test({LINENUM}41636, 'accumulate(v, 1, multiply)', -1050.0);
  Test({LINENUM}41637, 'accumulate(v, 0, subtract)', -19.0);
  Test({LINENUM}41638, 'accumulate(v, 1, lcm)', 210);
  Test({LINENUM}41639, 'accumulate(v, -1000, max)', 7.0);
  Test({LINENUM}41640, 'accumulate(v, +1000, min)', -2.0);

  Test({LINENUM}41642, 'accumulate(v, "test", add)', 'test513−275');
  Test({LINENUM}41643, 'accumulate(v, true, add)', failure, 'Invalid function arguments.');

  Test({LINENUM}41645, 'accumulate(DebugObject("empty vector"), 0, add)', 0);
  Test({LINENUM}41646, 'accumulate(DebugObject("empty vector"), 7, add)', 7);
  Test({LINENUM}41647, 'accumulate(DebugObject("empty vector"), 7.0, add)', 7.0);

  Test({LINENUM}41649, 'v ≔ ❨3, i, 5, 1, 2, 2⋅i❩', [3, ImaginaryUnit, 5, 1, 2, 2*ImaginaryUnit]);

  Test({LINENUM}41651, 'accumulate(v, 0, add)', 11 + 3*ImaginaryUnit);
  Test({LINENUM}41652, 'accumulate(v, 1, multiply)', TASC(-60));
  Test({LINENUM}41653, 'accumulate(v, 0, subtract)', -11 - 3*ImaginaryUnit);
  Test({LINENUM}41654, 'accumulate(v, 1, lcm)', failure, 'An object of type integer was expected as argument 2, but an object of type complex number was given.');

  Test({LINENUM}41656, 'accumulate(ComplexVector(DebugObject("empty vector")), 0, add)', 0);
  Test({LINENUM}41657, 'accumulate(ComplexVector(DebugObject("empty vector")), 51, add)', 51);

  Test({LINENUM}41659, 'A ≔ ❨❨3, 1, 5, −2, 7❩, ❨3, 2, 2, 5, 1❩❩', 5, [3, 1, 5, -2, 7, 3, 2, 2, 5, 1]);

  Test({LINENUM}41661, 'accumulate(A, 0, add)', 27.0);
  Test({LINENUM}41662, 'accumulate(A, 1, multiply)', -12600.0);
  Test({LINENUM}41663, 'accumulate(A, 0, subtract)', -27.0);
  Test({LINENUM}41664, 'accumulate(A, 1, lcm)', 210);
  Test({LINENUM}41665, 'accumulate(A, -1000, max)', 7.0);
  Test({LINENUM}41666, 'accumulate(A, +1000, min)', -2.0);

  Test({LINENUM}41668, 'accumulate(DebugObject("empty matrix"), 0, add)', 0);
  Test({LINENUM}41669, 'accumulate(DebugObject("empty matrix"), 1.2, add)', 1.2);

  Test({LINENUM}41671, 'A ≔ ❨❨4, 3, 2, i, 1❩, ❨−2, 1, i, 5, 3❩❩', 5, [4, 3, 2, ImaginaryUnit, 1, -2, 1, ImaginaryUnit, 5, 3]);

                    {sic!}
  Test({LINENUM}41674, 'accumulate(A, 3, add)', 20 + 2*ImaginaryUnit);
  Test({LINENUM}41675, 'accumulate(A, 1, multiply)', TASC(720));
  Test({LINENUM}41676, 'accumulate(A, 0, subtract)', -17 - 2*ImaginaryUnit);
  Test({LINENUM}41677, 'accumulate(A, 1, lcm)', failure, 'An object of type integer was expected as argument 2, but an object of type complex number was given.');

  Test({LINENUM}41679, 'accumulate(ComplexMatrix(DebugObject("empty matrix")), 0, add)', 0);
  Test({LINENUM}41680, 'accumulate(ComplexMatrix(DebugObject("empty matrix")), i, add)', ImaginaryUnit);

  Test({LINENUM}41682, 'L ≔ ''(5, 3, 2, −11, 7, 5, 6)', intarr([5, 3, 2, -11, 7, 5, 6]));

  Test({LINENUM}41684, 'accumulate(L, 0, add)', 17);
  Test({LINENUM}41685, 'accumulate(L, 1, multiply)', -69300);
  Test({LINENUM}41686, 'accumulate(L, 0, subtract)', -17);
  Test({LINENUM}41687, 'accumulate(L, 1, lcm)', 2310);
  Test({LINENUM}41688, 'accumulate(L, -1000, max)', 7);
  Test({LINENUM}41689, 'accumulate(L, +1000, min)', -11);

  Test({LINENUM}41691, 'accumulate(L, 0.0, add)', 17.0);
  Test({LINENUM}41692, 'accumulate(L, 3.0, add)', 20.0);
  Test({LINENUM}41693, 'accumulate(L, 3, add)', 20);

  Test({LINENUM}41695, 'accumulate(L, 0, (a, b) ↦ (2⋅a + 3⋅b)/5 )', rat(15972, 3125));

  Test({LINENUM}41697, 'L[3] ≔ 2.0', 2.0);
  Test({LINENUM}41698, 'accumulate(L, 0, add)', 17.0);
  Test({LINENUM}41699, 'accumulate(L, 1, multiply)', -69300.0);
  Test({LINENUM}41700, 'accumulate(L, 0, subtract)', -17.0);
  Test({LINENUM}41701, 'accumulate(L, 1, lcm)', 2310);
  Test({LINENUM}41702, 'accumulate(L, -1000, max)', 7.0);
  Test({LINENUM}41703, 'accumulate(L, +1000, min)', -11.0);

  Test({LINENUM}41705, 'L ≔ ''("alpha", "beta", "gamma", "delta")', strarr(['alpha', 'beta', 'gamma', 'delta']));

  Test({LINENUM}41707, 'accumulate(L, "", add)', 'alphabetagammadelta');
  Test({LINENUM}41708, 'accumulate(L, "start", (s, t) ↦ s + ", " + t)', 'start, alpha, beta, gamma, delta');

  Test({LINENUM}41710, 'accumulate(''(), 0, add)', 0);
  Test({LINENUM}41711, 'accumulate(''(), 10, add)', 10);
  Test({LINENUM}41712, 'accumulate(''(), "cat", add)', 'cat');
  Test({LINENUM}41713, 'accumulate(''(), true, add)', True);

  Test({LINENUM}41715, 'accumulate("alpha", "x", (s, t) ↦ s + ", " + t)', 'x, a, l, p, h, a');

  Test({LINENUM}41717, 'accumulate({3, 20, 4, 5, −1, −5, 2}, 0, add)', 28);
  Test({LINENUM}41718, 'accumulate({3, 20, 4, 5, −1, −5, 2}, -100, max)', 20);
  Test({LINENUM}41719, 'accumulate({3, 20, 4, 5, −1, −5, 2}, +100, min)', -5);
  Test({LINENUM}41720, 'accumulate({}, 0, add)', 0);
  Test({LINENUM}41721, 'accumulate({6}, "cat", add)', 'cat6');

  // AccumulateSteps and AccumulateList

  Test({LINENUM}41725, 'v ≔ ❨5, 1, 3, −2, 7, 5❩', [5, 1, 3, -2, 7, 5]);
  Test({LINENUM}41726, 'AccumulateSteps(v, 0, add)', [5, 6, 9, 7, 14, 19]);
  Test({LINENUM}41727, 'AccumulateList(v, 0, add)', asoarr([5.0, 6.0, 9.0, 7.0, 14.0, 19.0]));
  Test({LINENUM}41728, 'AccumulateSteps(v, 1, multiply)', [5, 5, 15, -30, -210, -1050]);
  Test({LINENUM}41729, 'AccumulateList(v, 1, multiply)', asoarr([5.0, 5.0, 15.0, -30.0, -210.0, -1050.0]));
  Test({LINENUM}41730, 'AccumulateSteps(v, -100, max)', [5, 5, 5, 5, 7, 7]);
  Test({LINENUM}41731, 'AccumulateList(v, -100, max)', asoarr([5.0, 5.0, 5.0, 5.0, 7.0, 7.0]));
  Test({LINENUM}41732, 'AccumulateSteps(v, 100, min)', [5, 1, 1, -2, -2, -2]);
  Test({LINENUM}41733, 'AccumulateList(v, 100, min)', asoarr([5.0, 1.0, 1.0, -2.0, -2.0, -2.0]));

  Test({LINENUM}41735, 'v ≔ ❨8, i, 4, i, 3, −5, 2❩', [8, ImaginaryUnit, 4, ImaginaryUnit, 3, -5, 2]);
  Test({LINENUM}41736, 'AccumulateSteps(v, 0, add)', [8, 8 + ImaginaryUnit, 12 + ImaginaryUnit, 12 + 2*ImaginaryUnit, 15 + 2*ImaginaryUnit, 10 + 2*ImaginaryUnit, 12 + 2*ImaginaryUnit]);
  Test({LINENUM}41737, 'AccumulateList(v, 0, add)', asoarrex([ASO(8.0), ASO(8 + ImaginaryUnit), ASO(12 + ImaginaryUnit), ASO(12 + 2*ImaginaryUnit), ASO(15 + 2*ImaginaryUnit), ASO(10 + 2*ImaginaryUnit), ASO(12 + 2*ImaginaryUnit)]));
  Test({LINENUM}41738, 'AccumulateSteps(v, 1, multiply)', [8, 8*ImaginaryUnit, 32*ImaginaryUnit, -32, -96, 480, 960]);
  Test({LINENUM}41739, 'AccumulateList(v, 1, multiply)', asoarrex([ASO(8.0), ASO(8*ImaginaryUnit), ASO(32*ImaginaryUnit), ASO(-32.0), ASO(-96.0), ASO(480.0), ASO(960.0)]));

  Test({LINENUM}41741, 'A ≔ ❨❨6, −2, 3, 4❩, ❨1, 10, 2, 1❩❩', 4, [6, -2, 3, 4, 1, 10, 2, 1]);
  Test({LINENUM}41742, 'AccumulateSteps(A, 0, add)', 4, [6, 4, 7, 11, 12, 22, 24, 25]);
  Test({LINENUM}41743, 'AccumulateList(A, 0, add)', asoarr([6.0, 4.0, 7.0, 11.0, 12.0, 22.0, 24.0, 25.0]));
  Test({LINENUM}41744, 'AccumulateSteps(A, 1, multiply)', 4, [6, -12, -36, -144, -144, -1440, -2880, -2880]);
  Test({LINENUM}41745, 'AccumulateList(A, 1, multiply)', asoarr([6.0, -12.0, -36.0, -144.0, -144.0, -1440.0, -2880.0, -2880.0]));
  Test({LINENUM}41746, 'AccumulateSteps(A, -100, max)', 4, [6, 6, 6, 6, 6, 10, 10, 10]);
  Test({LINENUM}41747, 'AccumulateList(A, -100, max)', asoarr([6.0, 6.0, 6.0, 6.0, 6.0, 10.0, 10.0, 10.0]));
  Test({LINENUM}41748, 'AccumulateSteps(A, 100, min)', 4, [6, -2, -2, -2, -2, -2, -2, -2]);
  Test({LINENUM}41749, 'AccumulateList(A, 100, min)', asoarr([6.0, -2.0, -2.0, -2.0, -2.0, -2.0, -2.0, -2.0]));

  Test({LINENUM}41751, 'A ≔ ❨❨3, i, 4, 2❩, ❨−1, i, i, 2❩❩', 4, [3, ImaginaryUnit, 4, 2, -1, ImaginaryUnit, ImaginaryUnit, 2]);
  Test({LINENUM}41752, 'AccumulateSteps(A, 0, add)', 4, [3, 3 + ImaginaryUnit, 7 + ImaginaryUnit, 9 + ImaginaryUnit, 8 + ImaginaryUnit, 8 + 2*ImaginaryUnit, 8 + 3*ImaginaryUnit, 10 + 3*ImaginaryUnit]);
  Test({LINENUM}41753, 'AccumulateList(A, 0, add)', asoarrex([ASO(3.0), ASO(3 + ImaginaryUnit), ASO(7 + ImaginaryUnit), ASO(9 + ImaginaryUnit), ASO(8 + ImaginaryUnit), ASO(8 + 2*ImaginaryUnit), ASO(8 + 3*ImaginaryUnit), ASO(10 + 3*ImaginaryUnit)]));
  Test({LINENUM}41754, 'AccumulateSteps(A, 1, multiply)', 4, [3, 3*ImaginaryUnit, 12*ImaginaryUnit, 24*ImaginaryUnit, -24*ImaginaryUnit, 24, 24*ImaginaryUnit, 48*ImaginaryUnit]);
  Test({LINENUM}41755, 'AccumulateList(A, 1, multiply)', asoarrex([ASO(3.0), ASO(3*ImaginaryUnit), ASO(12*ImaginaryUnit), ASO(24*ImaginaryUnit), ASO(-24*ImaginaryUnit), ASO(24.0), ASO(24*ImaginaryUnit), ASO(48*ImaginaryUnit)]));

  Test({LINENUM}41757, 'L ≔ ''(5, 1/2, 0.1, i, 0)', asoarrex([ASOInt(5), ASO(rat(1, 2)), ASO(0.1), ASO(ImaginaryUnit), ASOInt(0)]));
  Test({LINENUM}41758, 'AccumulateSteps(L, 0, add)', asoarrex([ASOInt(5), ASO(rat(11, 2)), ASO(5.6), ASO(5.6 + ImaginaryUnit), ASO(5.6 + ImaginaryUnit)]));
  Test({LINENUM}41759, 'AccumulateList(L, 0, add)', asoarrex([ASOInt(5), ASO(rat(11, 2)), ASO(5.6), ASO(5.6 + ImaginaryUnit), ASO(5.6 + ImaginaryUnit)]));
  Test({LINENUM}41760, 'AccumulateSteps(L, 1, multiply)', asoarrex([ASOInt(5), ASO(rat(5, 2)), ASO(0.25), ASO(0.25*ImaginaryUnit), ASO(0.0*ImaginaryUnit)]));
  Test({LINENUM}41761, 'AccumulateList(L, 1, multiply)', asoarrex([ASOInt(5), ASO(rat(5, 2)), ASO(0.25), ASO(0.25*ImaginaryUnit), ASO(0.0*ImaginaryUnit)]));

  Test({LINENUM}41763, 'AccumulateSteps(DebugObject("empty vector"), 0, add)', TAlgosimRealVector.Create);
  Test({LINENUM}41764, 'AccumulateSteps(ComplexVector(DebugObject("empty vector")), 0, add)', TAlgosimComplexVector.Create);
  Test({LINENUM}41765, 'AccumulateSteps(DebugObject("empty matrix"), 0, add)', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}41766, 'AccumulateSteps(ComplexMatrix(DebugObject("empty matrix")), 0, add)', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}41767, 'AccumulateSteps(''(), 0, add)', TAlgosimArray.Create);

  Test({LINENUM}41769, 'AccumulateList(DebugObject("empty vector"), 0, add)', TAlgosimArray.Create);
  Test({LINENUM}41770, 'AccumulateList(ComplexVector(DebugObject("empty vector")), 0, add)', TAlgosimArray.Create);
  Test({LINENUM}41771, 'AccumulateList(DebugObject("empty matrix"), 0, add)', TAlgosimArray.Create);
  Test({LINENUM}41772, 'AccumulateList(ComplexMatrix(DebugObject("empty matrix")), 0, add)', TAlgosimArray.Create);
  Test({LINENUM}41773, 'AccumulateList(''(), 0, add)', TAlgosimArray.Create);

  Test({LINENUM}41775, 'AccumulateSteps(''("alpha", "beta"), 0, add)', failure, 'Invalid function arguments.');
  Test({LINENUM}41776, 'AccumulateList(''("alpha", "beta"), 0, add)', failure, 'Invalid function arguments.');

  Test({LINENUM}41778, 'AccumulateSteps({3, 20, 4, 5, −1, −5, 2}, 0, add)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}41779, '#AccumulateList({3, 20, 4, 5, −1, −5, 2}, 0, add)', 7); // few invariants to choose from...

  Test({LINENUM}41781, 'delete(v); delete(A); delete(L)', success);


  //
  // Inserting, appending, moving, and removing
  //

  // Appending a single element

  Test({LINENUM}41790, 'append(❨5, 3, 2, 6❩, 10)', [5, 3, 2, 6, 10]);
  Test({LINENUM}41791, 'append(❨5, 3, 2, 6❩, ❨7, 8, 9❩)', failure, 'Object isn''t a real number.');
  Test({LINENUM}41792, 'append(❨5, 3, 2, 6❩, 10 + i)', failure, 'Object isn''t a real number.');
  Test({LINENUM}41793, 'append(ComplexVector(❨5, 3, 2, 6❩), 10 + i)', [5, 3, 2, 6, 10 + ImaginaryUnit]);
  Test({LINENUM}41794, 'append(❨5, 3, 2, 6❩, "nargle")', failure, 'Object isn''t a real number.');
  Test({LINENUM}41795, 'append(DebugObject("empty vector"), 3.1415)', [3.1415]);

  Test({LINENUM}41797, 'append(❨3, i, 1 + i, 5❩, 10)', [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 10]);
  Test({LINENUM}41798, 'append(❨3, i, 1 + i, 5❩, 10 + i)', [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 10 + ImaginaryUnit]);
  Test({LINENUM}41799, 'append(❨3, i, 1 + i, 5❩, "nargle")', failure, 'Object isn''t a complex number.');
  Test({LINENUM}41800, 'append(ComplexVector(DebugObject("empty vector")), 3.1415)', [TASC(3.1415)]);

  Test({LINENUM}41802, 'append(❨❨4, 1❩, ❨0, 5❩❩, 5)', failure, 'Object type "real matrix" is not a suitable container.');
  Test({LINENUM}41803, 'append(❨❨4, i❩, ❨0, 5❩❩, 5)', failure, 'Object type "complex matrix" is not a suitable container.');

  Test({LINENUM}41805, 'append(''(3, 1, 4, "one", "five"), "Ⅸ")', asoarr([3, 1, 4, 'one', 'five', 'Ⅸ']));
  Test({LINENUM}41806, 'append(''(), "a start")', asoarr(['a start']));

  Test({LINENUM}41808, 'append({1, 2, 3}, 10)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}41810, 'append("test", 2)', failure, 'An object of type "integer" cannot be converted to a character.');
  Test({LINENUM}41811, 'append("test", "2")', 'test2');
  Test({LINENUM}41812, 'append("test", "ing")', failure, 'A string of length 3 cannot be converted to a character.');

  Test({LINENUM}41814, 'append(''(3, 1, 4, "one", "five"), ''(9, 2))', asoarrex([ASOInt(3), ASOInt(1), ASOInt(4), ASO('one'), ASO('five'), intarr([9, 2])]));

  // Extension

  Test({LINENUM}41818, 'ExtendWith(❨5, 3, 2, 6❩, 10)', [5, 3, 2, 6, 10]);
  Test({LINENUM}41819, 'ExtendWith(❨5, 3, 2, 6❩, ❨7, 8, 9❩)', [5, 3, 2, 6, 7, 8, 9]);
  Test({LINENUM}41820, 'ExtendWith(❨5, 3, 2, 6❩, 10 + i)', failure, 'Object isn''t a real number.');
  Test({LINENUM}41821, 'ExtendWith(ComplexVector(❨5, 3, 2, 6❩), 10 + i)', [5, 3, 2, 6, 10 + ImaginaryUnit]);
  Test({LINENUM}41822, 'ExtendWith(❨5, 3, 2, 6❩, "nargle")', failure, 'Cannot convert string "nargle" to a real number.');
  Test({LINENUM}41823, 'ExtendWith(DebugObject("empty vector"), 3.1415)', [3.1415]);

  Test({LINENUM}41825, 'ExtendWith(❨3, i, 1 + i, 5❩, 10)', [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 10]);
  Test({LINENUM}41826, 'ExtendWith(❨3, i, 1 + i, 5❩, 10 + i)', [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 10 + ImaginaryUnit]);
  Test({LINENUM}41827, 'ExtendWith(❨3, i, 1 + i, 5❩, "nargle")', failure, 'Cannot convert string "nargle" to a complex number.');
  Test({LINENUM}41828, 'ExtendWith(ComplexVector(DebugObject("empty vector")), 3.1415)', [TASC(3.1415)]);

  Test({LINENUM}41830, 'ExtendWith(❨❨4, 1❩, ❨0, 5❩❩, 5)', failure, 'Object type "real matrix" is not a suitable container.');
  Test({LINENUM}41831, 'ExtendWith(❨❨4, i❩, ❨0, 5❩❩, 5)', failure, 'Object type "complex matrix" is not a suitable container.');

  Test({LINENUM}41833, 'ExtendWith(''(3, 1, 4, "one", "five"), ''("Ⅸ"))', asoarr([3, 1, 4, 'one', 'five', 'Ⅸ']));
  Test({LINENUM}41834, 'ExtendWith(''(3, 1, 4, "one", "five"), "Ⅸ")', failure, 'Object type "string" is not a suitable container.');
  Test({LINENUM}41835, 'ExtendWith(''(), ''("a start"))', asoarr(['a start']));

  Test({LINENUM}41837, 'ExtendWith({1, 2, 3}, 10)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}41839, 'ExtendWith("test", 2)', 'test2');
  Test({LINENUM}41840, 'ExtendWith("test", "2")', 'test2');
  Test({LINENUM}41841, 'ExtendWith("test", "ing")', 'testing');

  Test({LINENUM}41843, 'ExtendWith(''(3, 1, 4, "one", "five"), ''(9, 2))', asoarrex([ASOInt(3), ASOInt(1), ASOInt(4), ASO('one'), ASO('five'), ASOInt(9), ASOInt(2)]));

  // Insertion

  Test({LINENUM}41847, 'insert(❨5, 3, 0, 1, 2❩, 1, 100)', [100, 5, 3, 0, 1, 2]);
  Test({LINENUM}41848, 'insert(❨5, 3, 0, 1, 2❩, 2, 100)', [5, 100, 3, 0, 1, 2]);
  Test({LINENUM}41849, 'insert(❨5, 3, 0, 1, 2❩, 3, 100)', [5, 3, 100, 0, 1, 2]);
  Test({LINENUM}41850, 'insert(❨5, 3, 0, 1, 2❩, 4, 100)', [5, 3, 0, 100, 1, 2]);
  Test({LINENUM}41851, 'insert(❨5, 3, 0, 1, 2❩, 5, 100)', [5, 3, 0, 1, 100, 2]);
  Test({LINENUM}41852, 'insert(❨5, 3, 0, 1, 2❩, 6, 100)', [5, 3, 0, 1, 2, 100]);
  Test({LINENUM}41853, 'insert(❨5, 3, 0, 1, 2❩, 7, 100)', failure, 'Index 7 out of bounds.');

  Test({LINENUM}41855, 'insert(❨5, 3, 0, 1, 2❩, 0, 100)', failure, 'Index 0 out of bounds.');

  Test({LINENUM}41857, 'insert(❨5, 3, 0, 1, 2❩, -7, 100)', failure, 'Index -7 out of bounds.');
  Test({LINENUM}41858, 'insert(❨5, 3, 0, 1, 2❩, -6, 100)', [100, 5, 3, 0, 1, 2]);
  Test({LINENUM}41859, 'insert(❨5, 3, 0, 1, 2❩, -5, 100)', [5, 100, 3, 0, 1, 2]);
  Test({LINENUM}41860, 'insert(❨5, 3, 0, 1, 2❩, -4, 100)', [5, 3, 100, 0, 1, 2]);
  Test({LINENUM}41861, 'insert(❨5, 3, 0, 1, 2❩, -3, 100)', [5, 3, 0, 100, 1, 2]);
  Test({LINENUM}41862, 'insert(❨5, 3, 0, 1, 2❩, -2, 100)', [5, 3, 0, 1, 100, 2]);
  Test({LINENUM}41863, 'insert(❨5, 3, 0, 1, 2❩, -1, 100)', [5, 3, 0, 1, 2, 100]);

  Test({LINENUM}41865, 'insert(❨5, 3, 0, 1, 2❩, 3, 1 + i)', failure, 'Object isn''t a real number.');
  Test({LINENUM}41866, 'insert(❨5, 3, 0, 1, 2❩, 3, "nargle")', failure, 'Object isn''t a real number.');

  Test({LINENUM}41868, 'insert(DebugObject("empty vector"), 1, 123)', [123]);
  Test({LINENUM}41869, 'insert(DebugObject("empty vector"), -1, 123)', [123]);
  Test({LINENUM}41870, 'insert(DebugObject("empty vector"), 0, 123)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}41871, 'insert(DebugObject("empty vector"), 2, 123)', failure, 'Index 2 out of bounds.');
  Test({LINENUM}41872, 'insert(DebugObject("empty vector"), -2, 123)', failure, 'Index -2 out of bounds.');

  Test({LINENUM}41874, 'insert(❨5, 3, 0, i, 2❩, 1, 100)', [100, 5, 3, 0, ImaginaryUnit, 2]);
  Test({LINENUM}41875, 'insert(❨5, 3, 0, i, 2❩, 2, 100)', [5, 100, 3, 0, ImaginaryUnit, 2]);
  Test({LINENUM}41876, 'insert(❨5, 3, 0, i, 2❩, 3, 100)', [5, 3, 100, 0, ImaginaryUnit, 2]);
  Test({LINENUM}41877, 'insert(❨5, 3, 0, i, 2❩, 4, 100)', [5, 3, 0, 100, ImaginaryUnit, 2]);
  Test({LINENUM}41878, 'insert(❨5, 3, 0, i, 2❩, 5, 100)', [5, 3, 0, ImaginaryUnit, 100, 2]);
  Test({LINENUM}41879, 'insert(❨5, 3, 0, i, 2❩, 6, 100)', [5, 3, 0, ImaginaryUnit, 2, 100]);
  Test({LINENUM}41880, 'insert(❨5, 3, 0, i, 2❩, 7, 100)', failure, 'Index 7 out of bounds.');

  Test({LINENUM}41882, 'insert(❨5, 3, 0, i, 2❩, 0, 100)', failure, 'Index 0 out of bounds.');

  Test({LINENUM}41884, 'insert(❨5, 3, 0, i, 2❩, -7, 100)', failure, 'Index -7 out of bounds.');
  Test({LINENUM}41885, 'insert(❨5, 3, 0, i, 2❩, -6, 100)', [100, 5, 3, 0, ImaginaryUnit, 2]);
  Test({LINENUM}41886, 'insert(❨5, 3, 0, i, 2❩, -5, 100)', [5, 100, 3, 0, ImaginaryUnit, 2]);
  Test({LINENUM}41887, 'insert(❨5, 3, 0, i, 2❩, -4, 100)', [5, 3, 100, 0, ImaginaryUnit, 2]);
  Test({LINENUM}41888, 'insert(❨5, 3, 0, i, 2❩, -3, 100)', [5, 3, 0, 100, ImaginaryUnit, 2]);
  Test({LINENUM}41889, 'insert(❨5, 3, 0, i, 2❩, -2, 100)', [5, 3, 0, ImaginaryUnit, 100, 2]);
  Test({LINENUM}41890, 'insert(❨5, 3, 0, i, 2❩, -1, 100)', [5, 3, 0, ImaginaryUnit, 2, 100]);

  Test({LINENUM}41892, 'insert(❨5, 3, 0, i, 2❩, 3, "nargle")', failure, 'Object isn''t a complex number.');

  Test({LINENUM}41894, 'insert(ComplexVector(DebugObject("empty vector")), 1, 123)', [TASC(123)]);
  Test({LINENUM}41895, 'insert(ComplexVector(DebugObject("empty vector")), -1, 123)', [TASC(123)]);
  Test({LINENUM}41896, 'insert(ComplexVector(DebugObject("empty vector")), 0, 123)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}41897, 'insert(ComplexVector(DebugObject("empty vector")), 2, 123)', failure, 'Index 2 out of bounds.');
  Test({LINENUM}41898, 'insert(ComplexVector(DebugObject("empty vector")), -2, 123)', failure, 'Index -2 out of bounds.');

  Test({LINENUM}41900, 'insert(❨❨5, 3❩, ❨4, −1.0000002E10❩❩, 2, 12.34)', failure, 'Object type "real matrix" is not a suitable container.');
  Test({LINENUM}41901, 'insert(❨❨5, 3/i❩, ❨4, −1.0000002E10❩❩, 2, 12.34)', failure, 'Object type "complex matrix" is not a suitable container.');

  Test({LINENUM}41903, 's ≔ "Hello World"', 'Hello World');
  Test({LINENUM}41904, 'insert(s, 6, ",")', 'Hello, World');
  Test({LINENUM}41905, 'insert(s, -1, "!")', 'Hello World!');
  Test({LINENUM}41906, 'insert(insert(s, 6, ","), -1, "!")', 'Hello, World!');
  Test({LINENUM}41907, 'insert(insert(s, 6, ","), #s + 2, "!")', 'Hello, World!');

  Test({LINENUM}41909, 'insert(s, 50, ",")', failure, 'Index 50 out of bounds.');

  Test({LINENUM}41911, 'insert(s, 6, "comma")', 'Hellocomma World');

  Test({LINENUM}41913, 'L ≔ insert(''(3, 1, 4, "one", "nine", "two"), 5, "five")', asoarr([3, 1, 4, 'one', 'five', 'nine', 'two']));
  Test({LINENUM}41914, 'L ≔ insert(L, -1, 6)', asoarr([3, 1, 4, 'one', 'five', 'nine', 'two', 6]));
  Test({LINENUM}41915, 'insert(L, -1, 5)', asoarr([3, 1, 4, 'one', 'five', 'nine', 'two', 6, 5]));
  Test({LINENUM}41916, 'insert(''(), 1, "a")', asoarr(['a']));
  Test({LINENUM}41917, 'insert(''("a", "b"), 2, ''(1, 2))', asoarrex([ASO('a'), intarr([1, 2]), ASO('b')]));

  // Deletion

  Test({LINENUM}41921, 'remove(❨3, 1, 0, 7, 4, 8❩, 1)', [1, 0, 7, 4, 8]);
  Test({LINENUM}41922, 'remove(❨3, 1, 0, 7, 4, 8❩, 2)', [3, 0, 7, 4, 8]);
  Test({LINENUM}41923, 'remove(❨3, 1, 0, 7, 4, 8❩, 3)', [3, 1, 7, 4, 8]);
  Test({LINENUM}41924, 'remove(❨3, 1, 0, 7, 4, 8❩, 4)', [3, 1, 0, 4, 8]);
  Test({LINENUM}41925, 'remove(❨3, 1, 0, 7, 4, 8❩, 5)', [3, 1, 0, 7, 8]);
  Test({LINENUM}41926, 'remove(❨3, 1, 0, 7, 4, 8❩, 6)', [3, 1, 0, 7, 4]);
  Test({LINENUM}41927, 'remove(❨3, 1, 0, 7, 4, 8❩, 7)', [3, 1, 0, 7, 4, 8]);

  Test({LINENUM}41929, 'remove(❨3, 1, 0, 7, 4, 8❩, 00)', [3, 1, 0, 7, 4, 8]);

  Test({LINENUM}41931, 'remove(❨3, 1, 0, 7, 4, 8❩, -1)', [3, 1, 0, 7, 4]);
  Test({LINENUM}41932, 'remove(❨3, 1, 0, 7, 4, 8❩, -2)', [3, 1, 0, 7, 8]);
  Test({LINENUM}41933, 'remove(❨3, 1, 0, 7, 4, 8❩, -3)', [3, 1, 0, 4, 8]);
  Test({LINENUM}41934, 'remove(❨3, 1, 0, 7, 4, 8❩, -4)', [3, 1, 7, 4, 8]);
  Test({LINENUM}41935, 'remove(❨3, 1, 0, 7, 4, 8❩, -5)', [3, 0, 7, 4, 8]);
  Test({LINENUM}41936, 'remove(❨3, 1, 0, 7, 4, 8❩, -6)', [1, 0, 7, 4, 8]);
  Test({LINENUM}41937, 'remove(❨3, 1, 0, 7, 4, 8❩, -7)', [3, 1, 0, 7, 4, 8]);

  Test({LINENUM}41939, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(1, 4))', [1, 0, 4, 8]);
  Test({LINENUM}41940, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(2, 3))', [3, 7, 4, 8]);
  Test({LINENUM}41941, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(4, 6))', [3, 1, 0, 4]);
  Test({LINENUM}41942, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(5, 6))', [3, 1, 0, 7]);
  Test({LINENUM}41943, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(5, -1))', [3, 1, 0, 7]);
  Test({LINENUM}41944, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(-2, -1))', [3, 1, 0, 7]);
  Test({LINENUM}41945, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(-2, -1, 7))', [3, 1, 0, 7]);

  Test({LINENUM}41947, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(1, 2, 3, 4, 6))', [4]);
  Test({LINENUM}41948, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(1, 2, 3, 4, 6, 5))', TAlgosimRealVector.Create);
  Test({LINENUM}41949, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(1, 2, 2, 5, 1, 10, -1, -2, -999, 3, 4, 6, 5))', TAlgosimRealVector.Create);
  Test({LINENUM}41950, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(1, 2, 2, 5, 1, 10, -1, -2, -999, 4, 6, 5))', [0]);

  Test({LINENUM}41952, 'remove(❨3, 1, 0, 7, 4, 8❩, range(1, 4))', [4, 8]);
  Test({LINENUM}41953, 'remove(❨3, 1, 0, 7, 4, 8❩, range(2, 100))', [3]);
  Test({LINENUM}41954, 'remove(❨3, 1, 0, 7, 4, 8❩, range(-100, 100))', TAlgosimRealVector.Create);
  Test({LINENUM}41955, 'remove(❨3, 1, 0, 7, 4, 8❩, range(5, 100))', [3, 1, 0, 7]);
  Test({LINENUM}41956, 'remove(❨3, 1, 0, 7, 4, 8❩, range(-3, -1))', [3, 1, 0]);

  Test({LINENUM}41958, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(range(1, 2), range(-2, -1)))', [0, 7]);
  Test({LINENUM}41959, 'remove(❨3, 1, 0, 7, 4, 8❩, ''(range(1, 2), -2))', [0, 7, 8]);

  Test({LINENUM}41961, 'remove(❨3, 1, 0, 7, 4, 8❩, range(4, 1))', [4, 8]);
  Test({LINENUM}41962, 'remove(❨3, 1, 0, 7, 4, 8❩, range(100, 2))', [3]);
  Test({LINENUM}41963, 'remove(❨3, 1, 0, 7, 4, 8❩, range(100, -100))', TAlgosimRealVector.Create);
  Test({LINENUM}41964, 'remove(❨3, 1, 0, 7, 4, 8❩, range(100, 5))', [3, 1, 0, 7]);
  Test({LINENUM}41965, 'remove(❨3, 1, 0, 7, 4, 8❩, range(-1, -3))', [3, 1, 0]);

  Test({LINENUM}41967, 'remove(❨3, 1, 0, 7, 4, 8❩, range(1, -1))', TAlgosimRealVector.Create);
  Test({LINENUM}41968, 'remove(❨3, 1, 0, 7, 4, 8❩, range(1, -1, 2))', [1, 7, 8]);
  Test({LINENUM}41969, 'remove(❨3, 1, 0, 7, 4, 8❩, range(1, -1, 3))', [1, 0, 4, 8]);
  Test({LINENUM}41970, 'remove(❨3, 1, 0, 7, 4, 8❩, range(1, -1, 4))', [1, 0, 7, 8]);
  Test({LINENUM}41971, 'remove(❨3, 1, 0, 7, 4, 8❩, range(1, -1, 5))', [1, 0, 7, 4]);

  Test({LINENUM}41973, 'remove(❨3, 1, 0, 7, 4, 8❩, range(-1, 1))', TAlgosimRealVector.Create);
  Test({LINENUM}41974, 'remove(❨3, 1, 0, 7, 4, 8❩, range(-1, 1, 2))', [3, 0, 4]);
  Test({LINENUM}41975, 'remove(❨3, 1, 0, 7, 4, 8❩, range(-1, 1, 3))', [3, 1, 7, 4]);
  Test({LINENUM}41976, 'remove(❨3, 1, 0, 7, 4, 8❩, range(-1, 1, 4))', [3, 0, 7, 4]);
  Test({LINENUM}41977, 'remove(❨3, 1, 0, 7, 4, 8❩, range(-1, 1, 5))', [1, 0, 7, 4]);

  Test({LINENUM}41979, 'remove(❨3, 1, i, 7, 4, 8❩, 1)', [1, ImaginaryUnit, 7, 4, 8]);
  Test({LINENUM}41980, 'remove(❨3, 1, i, 7, 4, 8❩, 2)', [3, ImaginaryUnit, 7, 4, 8]);
  Test({LINENUM}41981, 'remove(❨3, 1, i, 7, 4, 8❩, 3)', [3, TASC(1), 7, 4, 8]);
  Test({LINENUM}41982, 'remove(❨3, 1, i, 7, 4, 8❩, 4)', [3, 1, ImaginaryUnit, 4, 8]);
  Test({LINENUM}41983, 'remove(❨3, 1, i, 7, 4, 8❩, 5)', [3, 1, ImaginaryUnit, 7, 8]);
  Test({LINENUM}41984, 'remove(❨3, 1, i, 7, 4, 8❩, 6)', [3, 1, ImaginaryUnit, 7, 4]);
  Test({LINENUM}41985, 'remove(❨3, 1, i, 7, 4, 8❩, 7)', [3, 1, ImaginaryUnit, 7, 4, 8]);

  Test({LINENUM}41987, 'remove(❨3, 1, i, 7, 4, 8❩, 00)', [3, 1, ImaginaryUnit, 7, 4, 8]);

  Test({LINENUM}41989, 'remove(❨3, 1, i, 7, 4, 8❩, -1)', [3, 1, ImaginaryUnit, 7, 4]);
  Test({LINENUM}41990, 'remove(❨3, 1, i, 7, 4, 8❩, -2)', [3, 1, ImaginaryUnit, 7, 8]);
  Test({LINENUM}41991, 'remove(❨3, 1, i, 7, 4, 8❩, -3)', [3, 1, ImaginaryUnit, 4, 8]);
  Test({LINENUM}41992, 'remove(❨3, 1, i, 7, 4, 8❩, -4)', [3, TASC(1), 7, 4, 8]);
  Test({LINENUM}41993, 'remove(❨3, 1, i, 7, 4, 8❩, -5)', [3, ImaginaryUnit, 7, 4, 8]);
  Test({LINENUM}41994, 'remove(❨3, 1, i, 7, 4, 8❩, -6)', [1, ImaginaryUnit, 7, 4, 8]);
  Test({LINENUM}41995, 'remove(❨3, 1, i, 7, 4, 8❩, -7)', [3, 1, ImaginaryUnit, 7, 4, 8]);

  Test({LINENUM}41997, 'remove(❨3, 1, i, 7, 4, 8❩, ''(1, 4))', [1, ImaginaryUnit, 4, 8]);
  Test({LINENUM}41998, 'remove(❨3, 1, i, 7, 4, 8❩, ''(2, 3))', [3, TASC(7), 4, 8]);
  Test({LINENUM}41999, 'remove(❨3, 1, i, 7, 4, 8❩, ''(4, 6))', [3, 1, ImaginaryUnit, 4]);
  Test({LINENUM}42000, 'remove(❨3, 1, i, 7, 4, 8❩, ''(5, 6))', [3, 1, ImaginaryUnit, 7]);
  Test({LINENUM}42001, 'remove(❨3, 1, i, 7, 4, 8❩, ''(5, -1))', [3, 1, ImaginaryUnit, 7]);
  Test({LINENUM}42002, 'remove(❨3, 1, i, 7, 4, 8❩, ''(-2, -1))', [3, 1, ImaginaryUnit, 7]);
  Test({LINENUM}42003, 'remove(❨3, 1, i, 7, 4, 8❩, ''(-2, -1, 7))', [3, 1, ImaginaryUnit, 7]);

  Test({LINENUM}42005, 'remove(❨3, 1, i, 7, 4, 8❩, ''(1, 2, 3, 4, 6))', [TASC(4)]);
  Test({LINENUM}42006, 'remove(❨3, 1, i, 7, 4, 8❩, ''(1, 2, 3, 4, 6, 5))', TAlgosimComplexVector.Create);
  Test({LINENUM}42007, 'remove(❨3, 1, i, 7, 4, 8❩, ''(1, 2, 2, 5, 1, 10, -1, -2, -999, 3, 4, 6, 5))', TAlgosimComplexVector.Create);
  Test({LINENUM}42008, 'remove(❨3, 1, i, 7, 4, 8❩, ''(1, 2, 2, 5, 1, 10, -1, -2, -999, 4, 6, 5))', [ImaginaryUnit]);

  Test({LINENUM}42010, 'remove(❨3, 1, i, 7, 4, 8❩, range(1, 4))', [TASC(4), 8]);
  Test({LINENUM}42011, 'remove(❨3, 1, i, 7, 4, 8❩, range(2, 100))', [TASC(3)]);
  Test({LINENUM}42012, 'remove(❨3, 1, i, 7, 4, 8❩, range(-100, 100))', TAlgosimComplexVector.Create);
  Test({LINENUM}42013, 'remove(❨3, 1, i, 7, 4, 8❩, range(5, 100))', [3, 1, ImaginaryUnit, 7]);
  Test({LINENUM}42014, 'remove(❨3, 1, i, 7, 4, 8❩, range(-3, -1))', [3, 1, ImaginaryUnit]);

  Test({LINENUM}42016, 'remove(❨3, 1, i, 7, 4, 8❩, ''(range(1, 2), range(-2, -1)))', [ImaginaryUnit, 7]);
  Test({LINENUM}42017, 'remove(❨3, 1, i, 7, 4, 8❩, ''(range(1, 2), -2))', [ImaginaryUnit, 7, 8]);

  Test({LINENUM}42019, 'remove(❨3, 1, i, 7, 4, 8❩, range(4, 1))', [TASC(4), 8]);
  Test({LINENUM}42020, 'remove(❨3, 1, i, 7, 4, 8❩, range(100, 2))', [TASC(3)]);
  Test({LINENUM}42021, 'remove(❨3, 1, i, 7, 4, 8❩, range(100, -100))', TAlgosimComplexVector.Create);
  Test({LINENUM}42022, 'remove(❨3, 1, i, 7, 4, 8❩, range(100, 5))', [3, 1, ImaginaryUnit, 7]);
  Test({LINENUM}42023, 'remove(❨3, 1, i, 7, 4, 8❩, range(-1, -3))', [3, 1, ImaginaryUnit]);

  Test({LINENUM}42025, 'remove(❨3, 1, i, 7, 4, 8❩, range(1, -1))', TAlgosimComplexVector.Create);
  Test({LINENUM}42026, 'remove(❨3, 1, i, 7, 4, 8❩, range(1, -1, 2))', [TASC(1), 7, 8]);
  Test({LINENUM}42027, 'remove(❨3, 1, i, 7, 4, 8❩, range(1, -1, 3))', [1, ImaginaryUnit, 4, 8]);
  Test({LINENUM}42028, 'remove(❨3, 1, i, 7, 4, 8❩, range(1, -1, 4))', [1, ImaginaryUnit, 7, 8]);
  Test({LINENUM}42029, 'remove(❨3, 1, i, 7, 4, 8❩, range(1, -1, 5))', [1, ImaginaryUnit, 7, 4]);

  Test({LINENUM}42031, 'remove(❨3, 1, i, 7, 4, 8❩, range(-1, 1))', TAlgosimComplexVector.Create);
  Test({LINENUM}42032, 'remove(❨3, 1, i, 7, 4, 8❩, range(-1, 1, 2))', [3, ImaginaryUnit, 4]);
  Test({LINENUM}42033, 'remove(❨3, 1, i, 7, 4, 8❩, range(-1, 1, 3))', [TASC(3), 1, 7, 4]);
  Test({LINENUM}42034, 'remove(❨3, 1, i, 7, 4, 8❩, range(-1, 1, 4))', [3, ImaginaryUnit, 7, 4]);
  Test({LINENUM}42035, 'remove(❨3, 1, i, 7, 4, 8❩, range(-1, 1, 5))', [1, ImaginaryUnit, 7, 4]);

  Test({LINENUM}42037, 'remove(❨❨6, 3, 2, 5, 4❩, ❨7, 0, −2, 3, 5❩❩, 2)', failure, 'Object type "real matrix" is not a suitable container.');
  Test({LINENUM}42038, 'remove(❨❨6, 3, 2, 5, 4❩, ❨7, i, −2, 3, 5❩❩, 2)', failure, 'Object type "complex matrix" is not a suitable container.');

  Test({LINENUM}42040, 'remove("Technically, it’s a ferret.", 5)', 'Techically, it’s a ferret.');
  Test({LINENUM}42041, 'remove("Technically, it’s a ferret.", 1)', 'echnically, it’s a ferret.');
  Test({LINENUM}42042, 'remove("Technically, it’s a ferret.", -1)', 'Technically, it’s a ferret');
  Test({LINENUM}42043, 'remove("Technically, it’s a ferret.", ''(-1, -200))', 'Technically, it’s a ferret');
  Test({LINENUM}42044, 'remove("Technically, it’s a ferret.", ''(1, 10, -1))', 'echnicaly, it’s a ferret');
  Test({LINENUM}42045, 'remove("Technically, it’s a ferret.", ''(1, 10, -1, -1, 500))', 'echnicaly, it’s a ferret');
  Test({LINENUM}42046, 'remove("Technically, it’s a ferret.", range(1, 13))', 'it’s a ferret.');
  Test({LINENUM}42047, 'remove("Technically, it’s a ferret.", ''(range(1, 13), −1))', 'it’s a ferret');
  Test({LINENUM}42048, 'remove("Technically, it’s a ferret.", ''(range(1, 13), −1, 7))', 'it’s a ferret');
  Test({LINENUM}42049, 'remove("Technically, it’s a ferret.", ''(range(1, 13), −1, 7, 700))', 'it’s a ferret');
  Test({LINENUM}42050, 'remove("Technically, it’s a ferret.", ''(range(6, 1300), range(−3, −700)))', '');
  Test({LINENUM}42051, 'remove("Technically, it’s a ferret.", range(1000, 1000000000))', 'Technically, it’s a ferret.');

  Test({LINENUM}42053, 'remove(''(3, 1, 4, "one", "five", 9, 2), 1)', asoarr([1, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42054, 'remove(''(3, 1, 4, "one", "five", 9, 2), 2)', asoarr([3, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42055, 'remove(''(3, 1, 4, "one", "five", 9, 2), 3)', asoarr([3, 1, 'one', 'five', 9, 2]));
  Test({LINENUM}42056, 'remove(''(3, 1, 4, "one", "five", 9, 2), 4)', asoarr([3, 1, 4, 'five', 9, 2]));
  Test({LINENUM}42057, 'remove(''(3, 1, 4, "one", "five", 9, 2), 5)', asoarr([3, 1, 4, 'one', 9, 2]));
  Test({LINENUM}42058, 'remove(''(3, 1, 4, "one", "five", 9, 2), 6)', asoarr([3, 1, 4, 'one', 'five', 2]));
  Test({LINENUM}42059, 'remove(''(3, 1, 4, "one", "five", 9, 2), 7)', asoarr([3, 1, 4, 'one', 'five', 9]));
  Test({LINENUM}42060, 'remove(''(3, 1, 4, "one", "five", 9, 2), 8)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42061, 'remove(''(3, 1, 4, "one", "five", 9, 2), 9)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));

  Test({LINENUM}42063, 'remove(''(3, 1, 4, "one", "five", 9, 2), -1)', asoarr([3, 1, 4, 'one', 'five', 9]));
  Test({LINENUM}42064, 'remove(''(3, 1, 4, "one", "five", 9, 2), -2)', asoarr([3, 1, 4, 'one', 'five', 2]));
  Test({LINENUM}42065, 'remove(''(3, 1, 4, "one", "five", 9, 2), -3)', asoarr([3, 1, 4, 'one', 9, 2]));
  Test({LINENUM}42066, 'remove(''(3, 1, 4, "one", "five", 9, 2), -4)', asoarr([3, 1, 4, 'five', 9, 2]));
  Test({LINENUM}42067, 'remove(''(3, 1, 4, "one", "five", 9, 2), -5)', asoarr([3, 1, 'one', 'five', 9, 2]));
  Test({LINENUM}42068, 'remove(''(3, 1, 4, "one", "five", 9, 2), -6)', asoarr([3, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42069, 'remove(''(3, 1, 4, "one", "five", 9, 2), -7)', asoarr([1, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42070, 'remove(''(3, 1, 4, "one", "five", 9, 2), -8)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42071, 'remove(''(3, 1, 4, "one", "five", 9, 2), -9)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));

  Test({LINENUM}42073, 'remove(''(3, 1, 4, "one", "five", 9, 2), 0)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));

  Test({LINENUM}42075, 'remove(''(3, 1, 4, "one", "five", 9, 2), range(1, 3))', asoarr(['one', 'five', 9, 2]));
  Test({LINENUM}42076, 'remove(''(3, 1, 4, "one", "five", 9, 2), ''(range(1, 3), range(-1, -2)))', asoarr(['one', 'five']));

  Test({LINENUM}42078, 'remove(''(3, 1, 4, "one", "five", 9, 2), ''(range(1, 5), range(-1, -4)))', asoarr([]));

  Test({LINENUM}42080, 'remove({1, 2, 3}, 2)', failure, 'Object type "set" is not a suitable container.');

  // Truncation

  Test({LINENUM}42084, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 0)', TAlgosimRealVector.Create);
  Test({LINENUM}42085, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 1)', [0]);
  Test({LINENUM}42086, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 2)', [0, 1]);
  Test({LINENUM}42087, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 5)', [0, 1, 2, -1, 3]);
  Test({LINENUM}42088, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 8)', [0, 1, 2, -1, 3, -2, 0, 1]);
  Test({LINENUM}42089, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 10)', [0, 1, 2, -1, 3, -2, 0, 1, 2, 4]);
  Test({LINENUM}42090, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 11)', [0, 1, 2, -1, 3, -2, 0, 1, 2, 4, -1]);
  Test({LINENUM}42091, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 12)', [0, 1, 2, -1, 3, -2, 0, 1, 2, 4, -1]);
  Test({LINENUM}42092, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 20)', [0, 1, 2, -1, 3, -2, 0, 1, 2, 4, -1]);
  Test({LINENUM}42093, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 100000000)', [0, 1, 2, -1, 3, -2, 0, 1, 2, 4, -1]);

  Test({LINENUM}42095, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, -1)', failure, 'New length must be non-negative.');
  Test({LINENUM}42096, 'truncate(❨0, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, -10)', failure, 'New length must be non-negative.');

  Test({LINENUM}42098, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 0)', TAlgosimComplexVector.Create);
  Test({LINENUM}42099, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 1)', [ImaginaryUnit]);
  Test({LINENUM}42100, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 2)', [ImaginaryUnit, 1]);
  Test({LINENUM}42101, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 5)', [ImaginaryUnit, 1, 2, -1, 3]);
  Test({LINENUM}42102, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 8)', [ImaginaryUnit, 1, 2, -1, 3, -2, 0, 1]);
  Test({LINENUM}42103, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 10)', [ImaginaryUnit, 1, 2, -1, 3, -2, 0, 1, 2, 4]);
  Test({LINENUM}42104, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 11)', [ImaginaryUnit, 1, 2, -1, 3, -2, 0, 1, 2, 4, -1]);
  Test({LINENUM}42105, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 12)', [ImaginaryUnit, 1, 2, -1, 3, -2, 0, 1, 2, 4, -1]);
  Test({LINENUM}42106, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 20)', [ImaginaryUnit, 1, 2, -1, 3, -2, 0, 1, 2, 4, -1]);
  Test({LINENUM}42107, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, 100000000)', [ImaginaryUnit, 1, 2, -1, 3, -2, 0, 1, 2, 4, -1]);

  Test({LINENUM}42109, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, -1)', failure, 'New length must be non-negative.');
  Test({LINENUM}42110, 'truncate(❨i, 1, 2, −1, 3, −2, 0, 1, 2, 4, −1❩, -10)', failure, 'New length must be non-negative.');

  Test({LINENUM}42112, 'truncate(❨❨2, 3, 1❩, ❨0, 2, 1❩❩, 2)', failure, 'Object type "real matrix" is not a suitable container.');
  Test({LINENUM}42113, 'truncate(❨❨2, 3, i❩, ❨0, 2, 1❩❩, 2)', failure, 'Object type "complex matrix" is not a suitable container.');

  Test({LINENUM}42115, 'truncate("Hello, World!", 5)', 'Hello');
  Test({LINENUM}42116, 'truncate("Hello, World!", 12)', 'Hello, World');
  Test({LINENUM}42117, 'truncate("Hello, World!", 13)', 'Hello, World!');
  Test({LINENUM}42118, 'truncate("Hello, World!", 14)', 'Hello, World!');
  Test({LINENUM}42119, 'truncate("Hello, World!", 20)', 'Hello, World!');
  Test({LINENUM}42120, 'truncate("Hello, World!", 100000000)', 'Hello, World!');
  Test({LINENUM}42121, 'truncate("Hello, World!", 4)', 'Hell');
  Test({LINENUM}42122, 'truncate("Hello, World!", 3)', 'Hel');
  Test({LINENUM}42123, 'truncate("Hello, World!", 2)', 'He');
  Test({LINENUM}42124, 'truncate("Hello, World!", 1)', 'H');
  Test({LINENUM}42125, 'truncate("Hello, World!", 0)', '');

  Test({LINENUM}42127, 'truncate("Hello, World!", -1)', failure, 'New length must be non-negative.');
  Test({LINENUM}42128, 'truncate("Hello, World!", -10)', failure, 'New length must be non-negative.');

  Test({LINENUM}42130, 'truncate(''(3, 1, 4, "one", "five", 9, 2), 3)', asoarr([3, 1, 4]));
  Test({LINENUM}42131, 'truncate(''(3, 1, 4, "one", "five", 9, 2), 5)', asoarr([3, 1, 4, 'one', 'five']));
  Test({LINENUM}42132, 'truncate(''(3, 1, 4, "one", "five", 9, 2), 7)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42133, 'truncate(''(3, 1, 4, "one", "five", 9, 2), 8)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42134, 'truncate(''(3, 1, 4, "one", "five", 9, 2), 10)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42135, 'truncate(''(3, 1, 4, "one", "five", 9, 2), 100000000)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));

  Test({LINENUM}42137, 'truncate(''(3, 1, 4, "one", "five", 9, 2), 3)', asoarr([3, 1, 4]));
  Test({LINENUM}42138, 'truncate(''(3, 1, 4, "one", "five", 9, 2), 2)', asoarr([3, 1]));
  Test({LINENUM}42139, 'truncate(''(3, 1, 4, "one", "five", 9, 2), 1)', asoarr([3]));
  Test({LINENUM}42140, 'truncate(''(3, 1, 4, "one", "five", 9, 2), 0)', asoarr([]));

  Test({LINENUM}42142, 'truncate(''(3, 1, 4, "one", "five", 9, 2), -1)', failure, 'New length must be non-negative.');
  Test({LINENUM}42143, 'truncate(''(3, 1, 4, "one", "five", 9, 2), -123)', failure, 'New length must be non-negative.');

  Test({LINENUM}42145, 'truncate({1, 2, 3}, 2)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}42147, 'truncate(1024, 2)', failure, 'Object type "integer" is not a suitable container.');

  Test({LINENUM}42149, 'truncate("Hello, World!")', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}42150, 'truncate("Hello, World!", 2, 8)', failure, 'Too many arguments.');

  Test({LINENUM}42152, 'truncate(struct("a": 687, "b": 713, "c": 394, "d": 426), 10000)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('a', ASOInt(687)),
        sm('b', ASOInt(713)),
        sm('c', ASOInt(394)),
        sm('d', ASOInt(426))
      ]
    )
  );

  Test({LINENUM}42163, 'truncate(struct("a": 687, "b": 713, "c": 394, "d": 426), 5)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('a', ASOInt(687)),
        sm('b', ASOInt(713)),
        sm('c', ASOInt(394)),
        sm('d', ASOInt(426))
      ]
    )
  );

  Test({LINENUM}42174, 'truncate(struct("a": 687, "b": 713, "c": 394, "d": 426), 4)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('a', ASOInt(687)),
        sm('b', ASOInt(713)),
        sm('c', ASOInt(394)),
        sm('d', ASOInt(426))
      ]
    )
  );

  Test({LINENUM}42185, 'truncate(struct("a": 687, "b": 713, "c": 394, "d": 426), 3)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('a', ASOInt(687)),
        sm('b', ASOInt(713)),
        sm('c', ASOInt(394))
      ]
    )
  );

  Test({LINENUM}42195, 'truncate(struct("a": 687, "b": 713, "c": 394, "d": 426), 2)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('a', ASOInt(687)),
        sm('b', ASOInt(713))
      ]
    )
  );

  Test({LINENUM}42204, 'truncate(struct("a": 687, "b": 713, "c": 394, "d": 426), 1)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('a', ASOInt(687))
      ]
    )
  );

  Test({LINENUM}42212, 'truncate(struct("a": 687, "b": 713, "c": 394, "d": 426), 0)',
    TAlgosimStructure.CreateWithValue(
      []
    )
  );

  Test({LINENUM}42218, 'truncate(BinaryData("test"), 1000)', TAlgosimBinaryData.CreateWithValue([$74, 0, $65, 0, $73, 0, $74, 0]));
  Test({LINENUM}42219, 'truncate(BinaryData("test"), 10)', TAlgosimBinaryData.CreateWithValue([$74, 0, $65, 0, $73, 0, $74, 0]));
  Test({LINENUM}42220, 'truncate(BinaryData("test"), 9)', TAlgosimBinaryData.CreateWithValue([$74, 0, $65, 0, $73, 0, $74, 0]));
  Test({LINENUM}42221, 'truncate(BinaryData("test"), 8)', TAlgosimBinaryData.CreateWithValue([$74, 0, $65, 0, $73, 0, $74, 0]));
  Test({LINENUM}42222, 'truncate(BinaryData("test"), 7)', TAlgosimBinaryData.CreateWithValue([$74, 0, $65, 0, $73, 0, $74]));
  Test({LINENUM}42223, 'truncate(BinaryData("test"), 6)', TAlgosimBinaryData.CreateWithValue([$74, 0, $65, 0, $73, 0]));
  Test({LINENUM}42224, 'truncate(BinaryData("test"), 5)', TAlgosimBinaryData.CreateWithValue([$74, 0, $65, 0, $73]));
  Test({LINENUM}42225, 'truncate(BinaryData("test"), 4)', TAlgosimBinaryData.CreateWithValue([$74, 0, $65, 0]));
  Test({LINENUM}42226, 'truncate(BinaryData("test"), 3)', TAlgosimBinaryData.CreateWithValue([$74, 0, $65]));
  Test({LINENUM}42227, 'truncate(BinaryData("test"), 2)', TAlgosimBinaryData.CreateWithValue([$74, 0]));
  Test({LINENUM}42228, 'truncate(BinaryData("test"), 1)', TAlgosimBinaryData.CreateWithValue([$74]));
  Test({LINENUM}42229, 'truncate(BinaryData("test"), 0)', TAlgosimBinaryData.CreateWithValue([]));

  // Swapping

  Test({LINENUM}42233, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 2, 4)', [10, 3, -5, 0, 8, -7, 4]);
  Test({LINENUM}42234, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 1, 4)', [3, 0, -5, 10, 8, -7, 4]);
  Test({LINENUM}42235, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 3, 7)', [10, 0, 4, 3, 8, -7, -5]);
  Test({LINENUM}42236, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 1, 2)', [0, 10, -5, 3, 8, -7, 4]);
  Test({LINENUM}42237, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 1, 7)', [4, 0, -5, 3, 8, -7, 10]);
  Test({LINENUM}42238, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 7, 1)', [4, 0, -5, 3, 8, -7, 10]);
  Test({LINENUM}42239, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 2, 2)', [10, 0, -5, 3, 8, -7, 4]);
  Test({LINENUM}42240, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 1, 1)', [10, 0, -5, 3, 8, -7, 4]);
  Test({LINENUM}42241, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 7, 7)', [10, 0, -5, 3, 8, -7, 4]);
  Test({LINENUM}42242, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 6, 3)', [10, 0, -7, 3, 8, -5, 4]);
  Test({LINENUM}42243, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 4, -1)', [10, 0, -5, 4, 8, -7, 3]);
  Test({LINENUM}42244, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 2, -2)', [10, -7, -5, 3, 8, 0, 4]);
  Test({LINENUM}42245, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -2, -1)', [10, 0, -5, 3, 8, 4, -7]);
  Test({LINENUM}42246, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -1, -2)', [10, 0, -5, 3, 8, 4, -7]);
  Test({LINENUM}42247, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -1, -1)', [10, 0, -5, 3, 8, -7, 4]);
  Test({LINENUM}42248, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -1, 4)', [10, 0, -5, 4, 8, -7, 3]);
  Test({LINENUM}42249, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 4, -4)', [10, 0, -5, 3, 8, -7, 4]);
  Test({LINENUM}42250, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 4, -5)', [10, 0, 3, -5, 8, -7, 4]);
  Test({LINENUM}42251, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -5, 4)', [10, 0, 3, -5, 8, -7, 4]);
  Test({LINENUM}42252, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -7, 7)', [4, 0, -5, 3, 8, -7, 10]);

  Test({LINENUM}42254, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 4, 0)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}42255, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 4, 8)', failure, 'Index 8 out of bounds.');
  Test({LINENUM}42256, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 4, 10)', failure, 'Index 10 out of bounds.');
  Test({LINENUM}42257, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 4, 100)', failure, 'Index 100 out of bounds.');
  Test({LINENUM}42258, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 4, -8)', failure, 'Index -8 out of bounds.');

  Test({LINENUM}42260, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 0, 5)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}42261, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 8, 2)', failure, 'Index 8 out of bounds.');
  Test({LINENUM}42262, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 10, -4)', failure, 'Index 10 out of bounds.');
  Test({LINENUM}42263, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, 100, -7)', failure, 'Index 100 out of bounds.');
  Test({LINENUM}42264, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -8, 1)', failure, 'Index -8 out of bounds.');
  Test({LINENUM}42265, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -8, 100)', failure, 'Index -8 out of bounds.');

  Test({LINENUM}42267, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -3, 1, 5)', failure, 'Too many arguments');

  Test({LINENUM}42269, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -3)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}42270, 'swap(❨10, 0, −5, 3, 8, −7, 4❩)', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}42272, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -3.5, 2)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}42273, 'swap(❨10, 0, −5, 3, 8, −7, 4❩, -3, i)', failure, 'An object of type integer was expected as argument 3, but an object of type complex number was given.');

  Test({LINENUM}42275, 'swap(DebugObject("empty vector"), 1, 1)', failure, 'Index 1 out of bounds.');
  Test({LINENUM}42276, 'swap(DebugObject("empty vector"), -1, 1)', failure, 'Index -1 out of bounds.');
  Test({LINENUM}42277, 'swap(DebugObject("empty vector"), -1, -1)', failure, 'Index -1 out of bounds.');

  Test({LINENUM}42279, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 2, 4)', [ImaginaryUnit, 3, -5, 0, 8, -7, 4]);
  Test({LINENUM}42280, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 1, 4)', [3, 0, -5, ImaginaryUnit, 8, -7, 4]);
  Test({LINENUM}42281, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 3, 7)', [ImaginaryUnit, 0, 4, 3, 8, -7, -5]);
  Test({LINENUM}42282, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 1, 2)', [0, ImaginaryUnit, -5, 3, 8, -7, 4]);
  Test({LINENUM}42283, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 1, 7)', [4, 0, -5, 3, 8, -7, ImaginaryUnit]);
  Test({LINENUM}42284, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 7, 1)', [4, 0, -5, 3, 8, -7, ImaginaryUnit]);
  Test({LINENUM}42285, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 2, 2)', [ImaginaryUnit, 0, -5, 3, 8, -7, 4]);
  Test({LINENUM}42286, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 1, 1)', [ImaginaryUnit, 0, -5, 3, 8, -7, 4]);
  Test({LINENUM}42287, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 7, 7)', [ImaginaryUnit, 0, -5, 3, 8, -7, 4]);
  Test({LINENUM}42288, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 6, 3)', [ImaginaryUnit, 0, -7, 3, 8, -5, 4]);
  Test({LINENUM}42289, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 4, -1)', [ImaginaryUnit, 0, -5, 4, 8, -7, 3]);
  Test({LINENUM}42290, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 2, -2)', [ImaginaryUnit, -7, -5, 3, 8, 0, 4]);
  Test({LINENUM}42291, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -2, -1)', [ImaginaryUnit, 0, -5, 3, 8, 4, -7]);
  Test({LINENUM}42292, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -1, -2)', [ImaginaryUnit, 0, -5, 3, 8, 4, -7]);
  Test({LINENUM}42293, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -1, -1)', [ImaginaryUnit, 0, -5, 3, 8, -7, 4]);
  Test({LINENUM}42294, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -1, 4)', [ImaginaryUnit, 0, -5, 4, 8, -7, 3]);
  Test({LINENUM}42295, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 4, -4)', [ImaginaryUnit, 0, -5, 3, 8, -7, 4]);
  Test({LINENUM}42296, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 4, -5)', [ImaginaryUnit, 0, 3, -5, 8, -7, 4]);
  Test({LINENUM}42297, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -5, 4)', [ImaginaryUnit, 0, 3, -5, 8, -7, 4]);
  Test({LINENUM}42298, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -7, 7)', [4, 0, -5, 3, 8, -7, ImaginaryUnit]);

  Test({LINENUM}42300, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 4, 0)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}42301, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 4, 8)', failure, 'Index 8 out of bounds.');
  Test({LINENUM}42302, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 4, 10)', failure, 'Index 10 out of bounds.');
  Test({LINENUM}42303, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 4, 100)', failure, 'Index 100 out of bounds.');
  Test({LINENUM}42304, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 4, -8)', failure, 'Index -8 out of bounds.');

  Test({LINENUM}42306, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 0, 5)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}42307, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 8, 2)', failure, 'Index 8 out of bounds.');
  Test({LINENUM}42308, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 10, -4)', failure, 'Index 10 out of bounds.');
  Test({LINENUM}42309, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, 100, -7)', failure, 'Index 100 out of bounds.');
  Test({LINENUM}42310, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -8, 1)', failure, 'Index -8 out of bounds.');
  Test({LINENUM}42311, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -8, 100)', failure, 'Index -8 out of bounds.');

  Test({LINENUM}42313, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -3, 1, 5)', failure, 'Too many arguments');

  Test({LINENUM}42315, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -3)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}42316, 'swap(❨i, 0, −5, 3, 8, −7, 4❩)', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}42318, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -3.5, 2)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}42319, 'swap(❨i, 0, −5, 3, 8, −7, 4❩, -3, i)', failure, 'An object of type integer was expected as argument 3, but an object of type complex number was given.');

  Test({LINENUM}42321, 'swap(ComplexVector(DebugObject("empty vector")), 1, 1)', failure, 'Index 1 out of bounds.');
  Test({LINENUM}42322, 'swap(ComplexVector(DebugObject("empty vector")), -1, 1)', failure, 'Index -1 out of bounds.');
  Test({LINENUM}42323, 'swap(ComplexVector(DebugObject("empty vector")), -1, -1)', failure, 'Index -1 out of bounds.');

  Test({LINENUM}42325, 'swap(❨❨5, −2, 10, 21, −10❩, ❨0, 1, 20, 5, −2❩❩, 3, 4)', failure, 'Object type "real matrix" is not a suitable container.'); // But it would be possible. Would be even neater if the indices were 2D.
  Test({LINENUM}42326, 'swap(❨❨5, −2 + 5⋅i, 10, 21, −10❩, ❨0, 1, 20, 5, −2❩❩, 3, 4)', failure, 'Object type "complex matrix" is not a suitable container.'); // But it would be possible. Would be even neater if the indices were 2D.

  Test({LINENUM}42328, 'swap("Hello, World!", 1, 8)', 'Wello, Horld!');
  Test({LINENUM}42329, 'swap("Hello, World!", 1, -6)', 'Wello, Horld!');
  Test({LINENUM}42330, 'swap("Hello, World!", 8, 1)', 'Wello, Horld!');
  Test({LINENUM}42331, 'swap("Hello, World!", -6, 1)', 'Wello, Horld!');
  Test({LINENUM}42332, 'swap("Hello, World!", -13, 8)', 'Wello, Horld!');
  Test({LINENUM}42333, 'swap("Hello, World!", -13, -6)', 'Wello, Horld!');
  Test({LINENUM}42334, 'swap("Hello, World!", 8, -13)', 'Wello, Horld!');
  Test({LINENUM}42335, 'swap("Hello, World!", -6, -13)', 'Wello, Horld!');

  Test({LINENUM}42337, 'swap("Hello, World!", 6, -1)', 'Hello! World,');
  Test({LINENUM}42338, 'swap("Hello, World!", -1, 6)', 'Hello! World,');
  Test({LINENUM}42339, 'swap("Hello, World!", 6, 13)', 'Hello! World,');
  Test({LINENUM}42340, 'swap("Hello, World!", 13, 6)', 'Hello! World,');

  Test({LINENUM}42342, 'swap("Hello, World!", 0, -13)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}42343, 'swap("Hello, World!", 14, -13)', failure, 'Index 14 out of bounds.');
  Test({LINENUM}42344, 'swap("Hello, World!", -14, -13)', failure, 'Index -14 out of bounds.');

  Test({LINENUM}42346, 'swap("Hello, World!", 2, 0)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}42347, 'swap("Hello, World!", 3, 14)', failure, 'Index 14 out of bounds.');
  Test({LINENUM}42348, 'swap("Hello, World!", 4, -14)', failure, 'Index -14 out of bounds.');

  Test({LINENUM}42350, 'swap("Hello, World!", 1, 1)', 'Hello, World!');
  Test({LINENUM}42351, 'swap("Hello, World!", 2, 2)', 'Hello, World!');
  Test({LINENUM}42352, 'swap("Hello, World!", 13, 13)', 'Hello, World!');
  Test({LINENUM}42353, 'swap("Hello, World!", -1, -1)', 'Hello, World!');
  Test({LINENUM}42354, 'swap("Hello, World!", -1, 13)', 'Hello, World!');
  Test({LINENUM}42355, 'swap("Hello, World!", 13, -1)', 'Hello, World!');
  Test({LINENUM}42356, 'swap("Hello, World!", -13, 1)', 'Hello, World!');
  Test({LINENUM}42357, 'swap("Hello, World!", 1, -13)', 'Hello, World!');

  Test({LINENUM}42359, 'swap("Hello, World!", 2, 2, 5)', failure, 'Too many arguments');
  Test({LINENUM}42360, 'swap("Hello, World!", 5)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}42361, 'swap("Hello, World!")', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}42363, 'swap("!", 1, 1)', '!');
  Test({LINENUM}42364, 'swap("", 1, 1)', failure, 'Index 1 out of bounds.');
  Test({LINENUM}42365, 'swap("", -1, 1)', failure, 'Index -1 out of bounds.');
  Test({LINENUM}42366, 'swap("", -1, -1)', failure, 'Index -1 out of bounds.');

  Test({LINENUM}42368, 'swap()', failure, 'Too few arguments. A required argument of type object is missing.');

  Test({LINENUM}42370, 'swap(''(3, 1, 4, "one", "five", 9, 2), 2, 3)', asoarr([3, 4, 1, 'one', 'five', 9, 2]));
  Test({LINENUM}42371, 'swap(''(3, 1, 4, "one", "five", 9, 2), 2, 6)', asoarr([3, 9, 4, 'one', 'five', 1, 2]));
  Test({LINENUM}42372, 'swap(''(3, 1, 4, "one", "five", 9, 2), 2, 7)', asoarr([3, 2, 4, 'one', 'five', 9, 1]));
  Test({LINENUM}42373, 'swap(''(3, 1, 4, "one", "five", 9, 2), 7, 2)', asoarr([3, 2, 4, 'one', 'five', 9, 1]));
  Test({LINENUM}42374, 'swap(''(3, 1, 4, "one", "five", 9, 2), 2, -1)', asoarr([3, 2, 4, 'one', 'five', 9, 1]));
  Test({LINENUM}42375, 'swap(''(3, 1, 4, "one", "five", 9, 2), -1, 2)', asoarr([3, 2, 4, 'one', 'five', 9, 1]));
  Test({LINENUM}42376, 'swap(''(3, 1, 4, "one", "five", 9, 2), 1, 1)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42377, 'swap(''(3, 1, 4, "one", "five", 9, 2), -1, -1)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42378, 'swap(''(3, 1, 4, "one", "five", 9, 2), 1, 2)', asoarr([1, 3, 4, 'one', 'five', 9, 2]));
  Test({LINENUM}42379, 'swap(''(3, 1, 4, "one", "five", 9, 2), -1, -2)', asoarr([3, 1, 4, 'one', 'five', 2, 9]));
  Test({LINENUM}42380, 'swap(''(3, 1, 4, "one", "five", 9, 2), -2, -1)', asoarr([3, 1, 4, 'one', 'five', 2, 9]));
  Test({LINENUM}42381, 'swap(''(3, 1, 4, "one", "five", 9, 2), 3, -7)', asoarr([4, 1, 3, 'one', 'five', 9, 2]));
  Test({LINENUM}42382, 'swap(''(3, 1, 4, "one", "five", 9, 2), -7, 3)', asoarr([4, 1, 3, 'one', 'five', 9, 2]));
  Test({LINENUM}42383, 'swap(''(3, 1, 4, "one", "five", 9, 2), -7, -7)', asoarr([3, 1, 4, 'one', 'five', 9, 2]));

  Test({LINENUM}42385, 'swap(''(3, 1, 4, "one", "five", 9, 2), -7, 8)', failure, 'Index 8 out of bounds.');
  Test({LINENUM}42386, 'swap(''(3, 1, 4, "one", "five", 9, 2), -8, 5)', failure, 'Index -8 out of bounds.');

  Test({LINENUM}42388, 'swap({1, 2, 3, 4}, 2, 3)', failure, 'Object type "set" is not a suitable container.');


  //
  // Shuffling and reversing
  //

  // Reversing

  Test({LINENUM}42397, 'reverse(❨6, 0, 3, -4, 8, 2, -7, 1, 4, 10❩)', [10, 4, 1, -7, 2, 8, -4, 3, 0, 6]);
  Test({LINENUM}42398, 'reverse(❨21, 22, 23❩)', [23, 22, 21]);
  Test({LINENUM}42399, 'reverse(❨21, 22❩)', [22, 21]);
  Test({LINENUM}42400, 'reverse(❨21❩)', [21]);
  Test({LINENUM}42401, 'reverse(DebugObject("empty vector"))', TAlgosimRealVector.Create);

  Test({LINENUM}42403, 'reverse(❨3, i, 5, i, 0, 1, 10, 11❩)', [11, 10, 1, 0, ImaginaryUnit, 5, ImaginaryUnit, 3]);
  Test({LINENUM}42404, 'reverse(❨2, i, 3❩)', [3, ImaginaryUnit, 2]);
  Test({LINENUM}42405, 'reverse(❨2, i❩)', [ImaginaryUnit, 2]);
  Test({LINENUM}42406, 'reverse(❨i❩)', [ImaginaryUnit]);
  Test({LINENUM}42407, 'reverse(ComplexVector(DebugObject("empty vector")))', TAlgosimComplexVector.Create);

  Test({LINENUM}42409, 'reverse(❨❨5, 1, 2, 0❩, ❨7, 6, 5, 1❩❩)', 4, [1, 5, 6, 7, 0, 2, 1, 5]);
  Test({LINENUM}42410, 'reverse(❨❨1, 2❩, ❨0, 5❩❩)', 2, [5, 0, 2, 1]);
  Test({LINENUM}42411, 'reverse(❨❨1, 2, 3, 4, 5, 6, 7❩❩)', 7, [7, 6, 5, 4, 3, 2, 1]);
  Test({LINENUM}42412, 'reverse(❨❨1, 2, 3, 4, 5, 6❩❩)', 6, [6, 5, 4, 3, 2, 1]);
  Test({LINENUM}42413, 'reverse(❨❨1❩, ❨2❩, ❨3❩❩)', 1, [3, 2, 1]);
  Test({LINENUM}42414, 'reverse(❨❨394❩❩)', 1, [394]);
  Test({LINENUM}42415, 'reverse(DebugObject("empty matrix"))', TAlgosimRealMatrix.Create);

  Test({LINENUM}42417, 'reverse(❨❨5, i, 2, 0❩, ❨7, 6, 5, 1❩❩)', 4, [1, 5, 6, 7, 0, 2, ImaginaryUnit, 5]);
  Test({LINENUM}42418, 'reverse(❨❨i, 2❩, ❨0, 5❩❩)', 2, [5, 0, 2, ImaginaryUnit]);
  Test({LINENUM}42419, 'reverse(❨❨i, 2, 3, 4, 5, 6, 7❩❩)', 7, [7, 6, 5, 4, 3, 2, ImaginaryUnit]);
  Test({LINENUM}42420, 'reverse(❨❨i, 2, 3, 4, 5, 6❩❩)', 6, [6, 5, 4, 3, 2, ImaginaryUnit]);
  Test({LINENUM}42421, 'reverse(❨❨i❩, ❨2❩, ❨3❩❩)', 1, [3, 2, ImaginaryUnit]);
  Test({LINENUM}42422, 'reverse(❨❨394⋅i❩❩)', 1, [394*ImaginaryUnit]);
  Test({LINENUM}42423, 'reverse(ComplexMatrix(DebugObject("empty matrix")))', TAlgosimComplexMatrix.Create);

  Test({LINENUM}42425, 'reverse("Hello, World!")', '!dlroW ,olleH');
  Test({LINENUM}42426, 'reverse("Hello, World")', 'dlroW ,olleH');
  Test({LINENUM}42427, 'reverse("ABC")', 'CBA');
  Test({LINENUM}42428, 'reverse("AB")', 'BA');
  Test({LINENUM}42429, 'reverse("A")', 'A');
  Test({LINENUM}42430, 'reverse("")', '');
  Test({LINENUM}42431, 'reverse("∫⌬dx")', 'xd⌬∫');

  Test({LINENUM}42433, 'reverse(''(1, 2, 3, 4, 5))', intarr([5, 4, 3, 2, 1]));
  Test({LINENUM}42434, 'reverse(''(1, 2, 3, 4))', intarr([4, 3, 2, 1]));
  Test({LINENUM}42435, 'reverse(''(1, 2, 3))', intarr([3, 2, 1]));
  Test({LINENUM}42436, 'reverse(''(1, 2))', intarr([2, 1]));
  Test({LINENUM}42437, 'reverse(''(1))', intarr([1]));
  Test({LINENUM}42438, 'reverse(''())', intarr([]));

//  Test({LINENUM}42440, 'reverse(123456)', 654321); // would be cool; optional second argument specifies the base
//  Test({LINENUM}42441, 'reverse(-314159265)', -562951413);
//  Test({LINENUM}42442, 'reverse(123456789123456)', 654321987654321);
//  Test({LINENUM}42443, 'reverse(-123456789123456)', -654321987654321);

  Test({LINENUM}42445, 'reverse({1, 2, 3})', failure, 'An object of type "set" cannot be reversed.');
  Test({LINENUM}42446, 'reverse(3.1415)', failure, 'An object of type "real number" cannot be reversed.');

  // Shuffling

  Test({LINENUM}42450, 'u ≔ ❨3, −5, 12, −7, 2, 0, 52, 9, 11, 36❩;', null);
  Test({LINENUM}42451, 'v ≔ shuffle(u); sort(u) = sort(v)', True);

  Test({LINENUM}42453, 'u ≔ ❨3, −5, 12, −7, 2, 0, 52, 9, 11, 36, 123❩;', null);
  Test({LINENUM}42454, 'v ≔ shuffle(u); sort(u) = sort(v)', True);

  Test({LINENUM}42456, 'u ≔ ❨3, −5, 12, −7, 2, 0, 52, 9, 11, 36, 123, 0❩;', null);
  Test({LINENUM}42457, 'v ≔ shuffle(u); sort(u) = sort(v)', True);

  Test({LINENUM}42459, 'u ≔ ❨3, −5, 12, −7, 2, 0, 52, 9, 11, 36, 123, 0, 0, 0, 0❩;', null);
  Test({LINENUM}42460, 'v ≔ shuffle(u); sort(u) = sort(v)', True);

  Test({LINENUM}42462, 'u ≔ ❨3, −5❩;', null);
  Test({LINENUM}42463, 'v ≔ shuffle(u); sort(u) = sort(v)', True);

  Test({LINENUM}42465, 'u ≔ ❨3❩;', null);
  Test({LINENUM}42466, 'v ≔ shuffle(u); sort(u) = sort(v)', True);

  Test({LINENUM}42468, 'u ≔ DebugObject("empty vector");', null);
  Test({LINENUM}42469, 'v ≔ shuffle(u); sort(u) = sort(v)', True);

  Test({LINENUM}42471, 'u ≔ ❨6, 1 + i, 2 − 5⋅i, 4 + 3⋅i, −i, −i, 123, 0, 55⋅i❩;', null);
  Test({LINENUM}42472, 'v ≔ shuffle(u); sort(u, "real and imaginary parts") = sort(v, "real and imaginary parts")', True);

  Test({LINENUM}42474, 'u ≔ ❨6, 1 + i, 2 − 5⋅i, 4 + 3⋅i, −i, −i, 123, 0, 55⋅i, 3❩;', null);
  Test({LINENUM}42475, 'v ≔ shuffle(u); sort(u, "real and imaginary parts") = sort(v, "real and imaginary parts")', True);

  Test({LINENUM}42477, 'u ≔ ❨6, 1 + i, 2 − 5⋅i, 4 + 3⋅i, −i, −i, 123, 0, 55⋅i, 3, 3, 3, 3, 3❩;', null);
  Test({LINENUM}42478, 'v ≔ shuffle(u); sort(u, "real and imaginary parts") = sort(v, "real and imaginary parts")', True);

  Test({LINENUM}42480, 'u ≔ ❨6, 1 + i❩;', null);
  Test({LINENUM}42481, 'v ≔ shuffle(u); sort(u, "real and imaginary parts") = sort(v, "real and imaginary parts")', True);

  Test({LINENUM}42483, 'u ≔ ❨1 + i❩;', null);
  Test({LINENUM}42484, 'v ≔ shuffle(u); sort(u, "real and imaginary parts") = sort(v, "real and imaginary parts")', True);

  Test({LINENUM}42486, 'u ≔ ComplexVector(DebugObject("empty vector"));', null);
  Test({LINENUM}42487, 'v ≔ shuffle(u); sort(u, "real and imaginary parts") = sort(v, "real and imaginary parts")', True);

  Test({LINENUM}42489, 'A ≔ ❨❨5, 2, 3, 6, 7❩, ❨4, 0, −2, 4, 8❩, ❨4, 9, 5, 1, 2❩, ❨5, 0, 3, 9, 6❩, ❨−4, 1, 5, 7, 2❩❩;', null);
  Test({LINENUM}42490, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42492, 'A ≔ ❨❨5, 2, 3, 6, 7❩, ❨4, 0, −2, 4, 8❩, ❨4, 9, 5, 1, 2❩, ❨5, 0, 3, 9, 6❩❩;', null);
  Test({LINENUM}42493, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42495, 'A ≔ ❨❨5, 2, 3, 6, 7❩, ❨4, 0, −2, 4, 8❩, ❨4, 9, 5, 1, 2❩❩;', null);
  Test({LINENUM}42496, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42498, 'A ≔ ❨❨5, 2, 3, 6, 7❩, ❨4, 0, −2, 4, 8❩❩;', null);
  Test({LINENUM}42499, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42501, 'A ≔ ❨❨5, 2, 3, 6, 7❩❩;', null);
  Test({LINENUM}42502, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42504, 'A ≔ ❨❨5, 2, 3, 6, 7, 1❩❩;', null);
  Test({LINENUM}42505, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42507, 'A ≔ ❨❨5, 2❩❩;', null);
  Test({LINENUM}42508, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42510, 'A ≔ ❨❨5❩❩;', null);
  Test({LINENUM}42511, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42513, 'A ≔ ❨❨5, 2, 3, 6, 7❩, ❨4, 0, −2, 4, 8❩, ❨4, 9, 5, 1, 2❩, ❨5, 0, 3, 9, 6❩, ❨−4, 1, 5, 7, 2❩, ❨1, 1, 10, -5, -7❩❩;', null);
  Test({LINENUM}42514, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42516, 'A ≔ ❨❨5❩, ❨4❩, ❨4❩, ❨5❩, ❨−4❩, ❨1❩❩;', null);
  Test({LINENUM}42517, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42519, 'A ≔ ❨❨5❩, ❨4❩, ❨4❩, ❨5❩, ❨−4❩❩;', null);
  Test({LINENUM}42520, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42522, 'A ≔ DebugObject("empty matrix");', null);
  Test({LINENUM}42523, 'B ≔ shuffle(A); sort(A) = sort(B)', True);

  Test({LINENUM}42525, 'A ≔ ❨❨i, 2, 3, 6, 7❩, ❨4, 0, −2, 4, 8❩, ❨4, 9, 5, 1, 2❩, ❨5, 0, 3, 9, 6❩, ❨−4, 1, 5, 7, 2❩❩;', null);
  Test({LINENUM}42526, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42528, 'A ≔ ❨❨i, 2, 3, 6, 7❩, ❨4, 0, −2, 4, 8❩, ❨4, 9, 5, 1, 2❩, ❨5, 0, 3, 9, 6❩❩;', null);
  Test({LINENUM}42529, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42531, 'A ≔ ❨❨i, 2, 3, 6, 7❩, ❨4, 0, −2, 4, 8❩, ❨4, 9, 5, 1, 2❩❩;', null);
  Test({LINENUM}42532, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42534, 'A ≔ ❨❨i, 2, 3, 6, 7❩, ❨4, 0, −2, 4, 8❩❩;', null);
  Test({LINENUM}42535, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42537, 'A ≔ ❨❨i, 2, 3, 6, 7❩❩;', null);
  Test({LINENUM}42538, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42540, 'A ≔ ❨❨i, 2, 3, 6, 7, 1❩❩;', null);
  Test({LINENUM}42541, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42543, 'A ≔ ❨❨i, 2❩❩;', null);
  Test({LINENUM}42544, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42546, 'A ≔ ❨❨i❩❩;', null);
  Test({LINENUM}42547, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42549, 'A ≔ ❨❨i, 2, 3, 6, 7❩, ❨4, 0, −2, 4, 8❩, ❨4, 9, 5, 1, 2❩, ❨5, 0, 3, 9, 6❩, ❨−4, 1, 5, 7, 2❩, ❨1, 1, 10, -5, -7❩❩;', null);
  Test({LINENUM}42550, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42552, 'A ≔ ❨❨i❩, ❨4❩, ❨4❩, ❨5❩, ❨−4❩, ❨1❩❩;', null);
  Test({LINENUM}42553, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42555, 'A ≔ ❨❨i❩, ❨4❩, ❨4❩, ❨5❩, ❨−4❩❩;', null);
  Test({LINENUM}42556, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42558, 'A ≔ ComplexMatrix(DebugObject("empty matrix"));', null);
  Test({LINENUM}42559, 'B ≔ shuffle(A); sort(A, "real and imaginary parts") = sort(B, "real and imaginary parts")', True);

  Test({LINENUM}42561, 's ≔ "Hello, World!";', null);
  Test({LINENUM}42562, 't ≔ shuffle(s); sort(characters(s)) = sort(characters(t))', True);

  Test({LINENUM}42564, 's ≔ "Hello, Dogs!";', null);
  Test({LINENUM}42565, 't ≔ shuffle(s); sort(characters(s)) = sort(characters(t))', True);

  Test({LINENUM}42567, 's ≔ "It is the quality of one’s convictions that determines success, not the number of followers.";', null);
  Test({LINENUM}42568, 't ≔ shuffle(s); sort(characters(s)) = sort(characters(t))', True);

  Test({LINENUM}42570, 's ≔ "Hi!";', null);
  Test({LINENUM}42571, 't ≔ shuffle(s); sort(characters(s)) = sort(characters(t))', True);

  Test({LINENUM}42573, 's ≔ "Hi";', null);
  Test({LINENUM}42574, 't ≔ shuffle(s); sort(characters(s)) = sort(characters(t))', True);

  Test({LINENUM}42576, 's ≔ "H";', null);
  Test({LINENUM}42577, 't ≔ shuffle(s); sort(characters(s)) = sort(characters(t))', True);

  Test({LINENUM}42579, 's ≔ "";', null);
  Test({LINENUM}42580, 't ≔ shuffle(s); sort(characters(s)) = sort(characters(t))', True);

  Test({LINENUM}42582, 'L ≔ ''(50, true, "cat", π, e^2, i, ❨1, 2, 3❩, IdentityMatrix(10), now(), 4, color("red"));', null);
  Test({LINENUM}42583, 'M ≔ shuffle(L); sort(L) = sort(M)', True);

  Test({LINENUM}42585, 'L ≔ ''(50, true, "cat", π, e^2, i, ❨1, 2, 3❩, IdentityMatrix(10), now(), 4, color("red"), 1);', null);
  Test({LINENUM}42586, 'M ≔ shuffle(L); sort(L) = sort(M)', True);

  Test({LINENUM}42588, 'L ≔ ''(50, true, color("red"));', null);
  Test({LINENUM}42589, 'M ≔ shuffle(L); sort(L) = sort(M)', True);

  Test({LINENUM}42591, 'L ≔ ''(50, color("red"));', null);
  Test({LINENUM}42592, 'M ≔ shuffle(L); sort(L) = sort(M)', True);

  Test({LINENUM}42594, 'L ≔ ''(color("red"));', null);
  Test({LINENUM}42595, 'M ≔ shuffle(L); sort(L) = sort(M)', True);

  Test({LINENUM}42597, 'L ≔ ''();', null);
  Test({LINENUM}42598, 'M ≔ shuffle(L); sort(L) = sort(M)', True);

  Test({LINENUM}42600, 'shuffle({3, 4, 1})', failure, 'An object of type "set" cannot be shuffled.');
  Test({LINENUM}42601, 'shuffle(now())', failure, 'An object of type "typed structure" cannot be shuffled.');
  Test({LINENUM}42602, 'shuffle(123)', failure, 'An object of type "integer" cannot be shuffled.'); // see remarks about reverse above
  Test({LINENUM}42603, 'shuffle(123.456)', failure, 'An object of type "real number" cannot be shuffled.');
  Test({LINENUM}42604, 'shuffle(123.456 + i)', failure, 'An object of type "complex number" cannot be shuffled.');
  Test({LINENUM}42605, 'shuffle(true)', failure, 'An object of type "boolean" cannot be shuffled.');

  Test({LINENUM}42607, 'shuffle()', failure, 'Too few arguments. A required argument of type object is missing.');
  Test({LINENUM}42608, 'shuffle(L, 2)', failure, 'Too many arguments.');


  //
  // Duplicate removal
  //

  Test({LINENUM}42615, 'unique(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, 1, 4, 1, 8, 9, 1, −1, 7, 123❩)',
    [1, 5, 0, 3, 6, 4, 2, 8, 9, -1, 7, 123]);

  Test({LINENUM}42618, 'unique(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, 1, 4, 1, 8, 9, 1, −1, 7, 123, 1, 1, 0, 5, 6, 4, 1, 2, 0, 4, 8, 9, -1, 7, 123, 123, 1, 0, 123❩)',
    [1, 5, 0, 3, 6, 4, 2, 8, 9, -1, 7, 123]);

  Test({LINENUM}42621, 'unique(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, 1, 4, 1, 8, 9, 1, −1, 7, 123, 1, 1, 0, 5, 6, 4, 1, 2, 0, 4, 8, 9, -1, 7, 123, 123, 1, 0, 123, 21❩)',
    [1, 5, 0, 3, 6, 4, 2, 8, 9, -1, 7, 123, 21]);

  Test({LINENUM}42624, 'unique(❨1, 5, 0❩)',
    [1, 5, 0]);

  Test({LINENUM}42627, 'unique(❨1, 5, 5❩)',
    [1, 5]);

  Test({LINENUM}42630, 'unique(❨1, 5, 1❩)',
    [1, 5]);

  Test({LINENUM}42633, 'unique(❨1, 5❩)',
    [1, 5]);

  Test({LINENUM}42636, 'unique(❨1, 1❩)',
    [1]);

  Test({LINENUM}42639, 'unique(❨1❩)',
    [1]);

  Test({LINENUM}42642, 'unique(ZeroVector(10000))',
    [0]);

  Test({LINENUM}42645, 'unique(BasisVector(10000, 6681))',
    [0, 1]);

  Test({LINENUM}42648, 'unique(DebugObject("empty vector"))',
    TAlgosimRealVector.Create);

  Test({LINENUM}42651, 'unique(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, i, 4, i, 8, 9, 1, −1, 7, 123❩)',
    [1, 5, 0, 3, 6, 4, 2, ImaginaryUnit, 8, 9, -1, 7, 123]);

  Test({LINENUM}42654, 'unique(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, i, 4, i, 8, 9, 1, −1, 7, 123, 1, 1, 0, 5, 6, 4, 1, 2, 0, 4, 8, 9, -1, 7, 123, 123, 1, 0, 123❩)',
    [1, 5, 0, 3, 6, 4, 2, ImaginaryUnit, 8, 9, -1, 7, 123]);

  Test({LINENUM}42657, 'unique(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, i, 4, i, 8, 9, 1, −1, 7, 123, 1, 1, 0, 5, 6, 4, 1, 2, 0, 4, 8, 9, -1, 7, 123, 123, 1, 0, 123, 21❩)',
    [1, 5, 0, 3, 6, 4, 2, ImaginaryUnit, 8, 9, -1, 7, 123, 21]);

  Test({LINENUM}42660, 'unique(❨i, 5, 0❩)',
    [ImaginaryUnit, 5, 0]);

  Test({LINENUM}42663, 'unique(❨i, 5, 5❩)',
    [ImaginaryUnit, 5]);

  Test({LINENUM}42666, 'unique(❨i, 5, i❩)',
    [ImaginaryUnit, 5]);

  Test({LINENUM}42669, 'unique(❨i, 5❩)',
    [ImaginaryUnit, 5]);

  Test({LINENUM}42672, 'unique(❨i, i❩)',
    [ImaginaryUnit]);

  Test({LINENUM}42675, 'unique(❨i❩)',
    [ImaginaryUnit]);

  Test({LINENUM}42678, 'unique(ComplexZeroVector(10000))',
    [TASC(0)]);

  Test({LINENUM}42681, 'unique(ComplexVector(BasisVector(10000, 6681)))',
    [TASC(0), 1]);

  Test({LINENUM}42684, 'unique(ComplexVector(DebugObject("empty vector")))',
    TAlgosimComplexVector.Create);

  Test({LINENUM}42687, 'unique(❨❨6, 3, 2, 5❩, ❨7, 0, 1, 3❩❩)', failure, 'Cannot remove duplicates from an object of type "real matrix".');
  Test({LINENUM}42688, 'unique(❨❨6, 3, i, 5❩, ❨7, 0, 1, 3❩❩)', failure, 'Cannot remove duplicates from an object of type "complex matrix".');
  Test({LINENUM}42689, 'unique({5, 2, 3, 6, 5, 2, 3, 7, 4, 0, 1})', failure, 'Cannot remove duplicates from an object of type "set".');

  Test({LINENUM}42691, 'unique("Hello, World!")', 'Helo, Wrd!');
  Test({LINENUM}42692, 'unique("This is nothing but a test.")', 'This notgbuae.');
  Test({LINENUM}42693, 'unique("Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...")', 'Aa.');
  Test({LINENUM}42694, 'unique("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")', 'a');
  Test({LINENUM}42695, 'unique("Skräptyg AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB")', 'Skräptyg AB');
  Test({LINENUM}42696, 'unique("")', '');

  Test({LINENUM}42698, 'unique(''(21, 50, 32, 21, "cat", "dog", π, 50, 51, "rat", "dog", 21, true, color("red"), color("green"), color("blue"), 123, 100, e, π, π^2, color("red"), color("black"), 0))',
    asoarrex(
      [
        ASOInt(21),
        ASOInt(50),
        ASOInt(32),
        ASO('cat'),
        ASO('dog'),
        ASO(Pi),
        ASOInt(51),
        ASO('rat'),
        ASO(True),
        ASO(TRGB(clRed)),
        ASO(TRGB(clGreen)),
        ASO(TRGB(clBlue)),
        ASOInt(123),
        ASOInt(100),
        ASO(Exp(1)),
        ASO(Pi*Pi),
        ASO(TRGB(clBlack)),
        ASOInt(0)
      ]
    ));

  Test({LINENUM}42722, 'unique(''(21, 50, 32, 21, "cat", "dog", π, 50, 51, "rat", "dog", 21, true, color("red"), color("green"), color("blue"), '+'123, 100, e, π, π^2, color("red"), color("black"), 0, 21, "dog", 100, e, color("red"), 50, 0, 99, color("black"), 32, 32, 32, color("red"), true, true))',
    asoarrex(
      [
        ASOInt(21),
        ASOInt(50),
        ASOInt(32),
        ASO('cat'),
        ASO('dog'),
        ASO(Pi),
        ASOInt(51),
        ASO('rat'),
        ASO(True),
        ASO(TRGB(clRed)),
        ASO(TRGB(clGreen)),
        ASO(TRGB(clBlue)),
        ASOInt(123),
        ASOInt(100),
        ASO(Exp(1)),
        ASO(Pi*Pi),
        ASO(TRGB(clBlack)),
        ASOInt(0),
        ASOInt(99)
      ]
    ));

  Test({LINENUM}42747, 'unique(''(21, 50, 32, 21))',
    asoarrex(
      [
        ASOInt(21),
        ASOInt(50),
        ASOInt(32)
      ]
    ));

  Test({LINENUM}42756, 'unique(''(21, 50, 21))',
    asoarrex(
      [
        ASOInt(21),
        ASOInt(50)
      ]
    ));

  Test({LINENUM}42764, 'unique(''(21, 21))',
    asoarrex(
      [
        ASOInt(21)
      ]
    ));

  Test({LINENUM}42771, 'unique(''(21))',
    asoarrex(
      [
        ASOInt(21)
      ]
    ));

  Test({LINENUM}42778, 'unique(''())',
    asoarrex(
      [

      ]
    ));

  Test({LINENUM}42785, 'RemoveDuplicates(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, 1, 4, 1, 8, 9, 1, −1, 7, 123❩)',
    [1, 5, 0, 3, 6, 4, 2, 8, 9, -1, 7, 123]);

  Test({LINENUM}42788, 'RemoveDuplicates(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, 1, 4, 1, 8, 9, 1, −1, 7, 123, 1, 1, 0, 5, 6, 4, 1, 2, 0, 4, 8, 9, -1, 7, 123, 123, 1, 0, 123❩)',
    [1, 5, 0, 3, 6, 4, 2, 8, 9, -1, 7, 123]);

  Test({LINENUM}42791, 'RemoveDuplicates(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, 1, 4, 1, 8, 9, 1, −1, 7, 123, 1, 1, 0, 5, 6, 4, 1, 2, 0, 4, 8, 9, -1, 7, 123, 123, 1, 0, 123, 21❩)',
    [1, 5, 0, 3, 6, 4, 2, 8, 9, -1, 7, 123, 21]);

  Test({LINENUM}42794, 'RemoveDuplicates(❨1, 5, 0❩)',
    [1, 5, 0]);

  Test({LINENUM}42797, 'RemoveDuplicates(❨1, 5, 5❩)',
    [1, 5]);

  Test({LINENUM}42800, 'RemoveDuplicates(❨1, 5, 1❩)',
    [1, 5]);

  Test({LINENUM}42803, 'RemoveDuplicates(❨1, 5❩)',
    [1, 5]);

  Test({LINENUM}42806, 'RemoveDuplicates(❨1, 1❩)',
    [1]);

  Test({LINENUM}42809, 'RemoveDuplicates(❨1❩)',
    [1]);

  Test({LINENUM}42812, 'RemoveDuplicates(ZeroVector(10000))',
    [0]);

  Test({LINENUM}42815, 'RemoveDuplicates(BasisVector(10000, 6681))',
    [0, 1]);

  Test({LINENUM}42818, 'RemoveDuplicates(DebugObject("empty vector"))',
    TAlgosimRealVector.Create);

  Test({LINENUM}42821, 'RemoveDuplicates(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, i, 4, i, 8, 9, 1, −1, 7, 123❩)',
    [1, 5, 0, 3, 6, 4, 2, ImaginaryUnit, 8, 9, -1, 7, 123]);

  Test({LINENUM}42824, 'RemoveDuplicates(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, i, 4, i, 8, 9, 1, −1, 7, 123, 1, 1, 0, 5, 6, 4, 1, 2, 0, 4, 8, 9, -1, 7, 123, 123, 1, 0, 123❩)',
    [1, 5, 0, 3, 6, 4, 2, ImaginaryUnit, 8, 9, -1, 7, 123]);

  Test({LINENUM}42827, 'RemoveDuplicates(❨1, 5, 0, 1, 3, 6, 4, 1, 2, 0, i, 4, i, 8, 9, 1, −1, 7, 123, 1, 1, 0, 5, 6, 4, 1, 2, 0, 4, 8, 9, -1, 7, 123, 123, 1, 0, 123, 21❩)',
    [1, 5, 0, 3, 6, 4, 2, ImaginaryUnit, 8, 9, -1, 7, 123, 21]);

  Test({LINENUM}42830, 'RemoveDuplicates(❨i, 5, 0❩)',
    [ImaginaryUnit, 5, 0]);

  Test({LINENUM}42833, 'RemoveDuplicates(❨i, 5, 5❩)',
    [ImaginaryUnit, 5]);

  Test({LINENUM}42836, 'RemoveDuplicates(❨i, 5, i❩)',
    [ImaginaryUnit, 5]);

  Test({LINENUM}42839, 'RemoveDuplicates(❨i, 5❩)',
    [ImaginaryUnit, 5]);

  Test({LINENUM}42842, 'RemoveDuplicates(❨i, i❩)',
    [ImaginaryUnit]);

  Test({LINENUM}42845, 'RemoveDuplicates(❨i❩)',
    [ImaginaryUnit]);

  Test({LINENUM}42848, 'RemoveDuplicates(ComplexZeroVector(10000))',
    [TASC(0)]);

  Test({LINENUM}42851, 'RemoveDuplicates(ComplexVector(BasisVector(10000, 6681)))',
    [TASC(0), 1]);

  Test({LINENUM}42854, 'RemoveDuplicates(ComplexVector(DebugObject("empty vector")))',
    TAlgosimComplexVector.Create);

  Test({LINENUM}42857, 'RemoveDuplicates(❨❨6, 3, 2, 5❩, ❨7, 0, 1, 3❩❩)', failure, 'Cannot remove duplicates from an object of type "real matrix".');
  Test({LINENUM}42858, 'RemoveDuplicates(❨❨6, 3, i, 5❩, ❨7, 0, 1, 3❩❩)', failure, 'Cannot remove duplicates from an object of type "complex matrix".');
  Test({LINENUM}42859, 'RemoveDuplicates({5, 2, 3, 6, 5, 2, 3, 7, 4, 0, 1})', failure, 'Cannot remove duplicates from an object of type "set".');

  Test({LINENUM}42861, 'RemoveDuplicates("Hello, World!")', 'Helo, Wrd!');
  Test({LINENUM}42862, 'RemoveDuplicates("This is nothing but a test.")', 'This notgbuae.');
  Test({LINENUM}42863, 'RemoveDuplicates("Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...")', 'Aa.');
  Test({LINENUM}42864, 'RemoveDuplicates("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")', 'a');
  Test({LINENUM}42865, 'RemoveDuplicates("Skräptyg AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB")', 'Skräptyg AB');
  Test({LINENUM}42866, 'RemoveDuplicates("")', '');

  Test({LINENUM}42868, 'RemoveDuplicates(''(21, 50, 32, 21, "cat", "dog", π, 50, 51, "rat", "dog", 21, true, color("red"), color("green"), color("blue"), 123, 100, e, π, π^2, color("red"), color("black"), 0))',
    asoarrex(
      [
        ASOInt(21),
        ASOInt(50),
        ASOInt(32),
        ASO('cat'),
        ASO('dog'),
        ASO(Pi),
        ASOInt(51),
        ASO('rat'),
        ASO(True),
        ASO(TRGB(clRed)),
        ASO(TRGB(clGreen)),
        ASO(TRGB(clBlue)),
        ASOInt(123),
        ASOInt(100),
        ASO(Exp(1)),
        ASO(Pi*Pi),
        ASO(TRGB(clBlack)),
        ASOInt(0)
      ]
    ));

  Test({LINENUM}42892, 'RemoveDuplicates(''(21, 50, 32, 21, "cat", "dog", π, 50, 51, "rat", "dog", 21, true, color("red"), color("green"), color("blue"), '+'123, 100, e, π, π^2, color("red"), color("black"), 0, 21, "dog", 100, e, color("red"), 50, 0, 99, color("black"), 32, 32, 32, color("red"), true, true))',
    asoarrex(
      [
        ASOInt(21),
        ASOInt(50),
        ASOInt(32),
        ASO('cat'),
        ASO('dog'),
        ASO(Pi),
        ASOInt(51),
        ASO('rat'),
        ASO(True),
        ASO(TRGB(clRed)),
        ASO(TRGB(clGreen)),
        ASO(TRGB(clBlue)),
        ASOInt(123),
        ASOInt(100),
        ASO(Exp(1)),
        ASO(Pi*Pi),
        ASO(TRGB(clBlack)),
        ASOInt(0),
        ASOInt(99)
      ]
    ));

  Test({LINENUM}42917, 'RemoveDuplicates(''(21, 50, 32, 21))',
    asoarrex(
      [
        ASOInt(21),
        ASOInt(50),
        ASOInt(32)
      ]
    ));

  Test({LINENUM}42926, 'RemoveDuplicates(''(21, 50, 21))',
    asoarrex(
      [
        ASOInt(21),
        ASOInt(50)
      ]
    ));

  Test({LINENUM}42934, 'RemoveDuplicates(''(21, 21))',
    asoarrex(
      [
        ASOInt(21)
      ]
    ));

  Test({LINENUM}42941, 'RemoveDuplicates(''(21))',
    asoarrex(
      [
        ASOInt(21)
      ]
    ));

  Test({LINENUM}42948, 'RemoveDuplicates(''())',
    asoarrex(
      [

      ]
    ));

  // with epsilon

  Test({LINENUM}42957, 'v ≔ ❨5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 5, 3, 2.99, −5, 1, 7, 0, 1, 5.00000001❩',
    [5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 5, 3, 2.99, -5, 1, 7, 0, 1, 5.00000001]);

  Test({LINENUM}42960, 'unique(v)',
    [5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 2.99, -5, 1, 0, 5.00000001]);

  Test({LINENUM}42963, 'unique(v, 2E-9)',
    [5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 2.99, -5, 1, 0, 5.00000001]);

  Test({LINENUM}42966, 'unique(v, 2E-8)',
    [5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}42969, 'unique(v, 2E-7)',
    [5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}42972, 'unique(v, 2E-6)',
    [5, 3, 5.0001, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}42975, 'unique(v, 2E-5)',
    [5, 3, 5.0001, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}42978, 'unique(v, 2E-4)',
    [5, 3, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}42981, 'unique(v, 2E-3)',
    [5, 3, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}42984, 'unique(v, 2E-2)',
    [5, 3, 7, 21, 213, 8, -5, 1, 0]);

  Test({LINENUM}42987, 'unique(v, 2E-1)',
    [5, 3, 7, 21, 213, 8, -5, 1, 0]);

  Test({LINENUM}42990, 'unique(v, 2.5)',
    [5, 21, 213, 8, -5, 1]);

  Test({LINENUM}42993, 'unique(v, 3.5)',
    [5, 21, 213, -5, 1]);

  Test({LINENUM}42996, 'unique(v, 4.5)',
    [5, 21, 213, -5, 0]);

  Test({LINENUM}42999, 'unique(v, 10.5)',
    [5, 21, 213]);

  Test({LINENUM}43002, 'unique(v, 100)',
    [5, 213]);

  Test({LINENUM}43005, 'unique(v, 300)',
    [5]);

  Test({LINENUM}43008, 'unique(v, 300000000)',
    [5]);

  Test({LINENUM}43011, 'unique(DebugObject("empty vector"), 0.001)', TAlgosimRealVector.Create);

  Test({LINENUM}43013, 'v ≔ ❨3, i, 1 + i, 5, 2.99, 1.001 + i, 1 + 1.00001 ⋅ i, 7, 11, 5.001, 23, 123, 5 + 0.01⋅i, 50, 5, 0, 3❩',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 5, 0, 3]);

  Test({LINENUM}43016, 'unique(v)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43019, 'unique(v, 2E-9)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43022, 'unique(v, 2E-8)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43025, 'unique(v, 2E-7)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43028, 'unique(v, 2E-6)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43031, 'unique(v, 2E-5)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43034, 'unique(v, 2E-4)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43037, 'unique(v, 2E-3)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 7, 11, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43040, 'unique(v, 2E-2)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 7, 11, 23, 123, 50, 0]);

  Test({LINENUM}43043, 'unique(v, 2E-1)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 7, 11, 23, 123, 50, 0]);

  Test({LINENUM}43046, 'unique(v, 2.5)',
    [3, ImaginaryUnit, 7, 11, 23, 123, 50]);

  Test({LINENUM}43049, 'unique(v, 4.5)',
    [TASC(3), 11, 23, 123, 50]);

  Test({LINENUM}43052, 'unique(v, 10)',
    [TASC(3), 23, 123, 50]);

  Test({LINENUM}43055, 'unique(v, 25)',
    [TASC(3), 123, 50]);

  Test({LINENUM}43058, 'unique(v, 50)',
    [TASC(3), 123]);

  Test({LINENUM}43061, 'unique(v, 500)',
    [TASC(3)]);

  Test({LINENUM}43064, 'unique(v, 500000000)',
    [TASC(3)]);

  Test({LINENUM}43067, 'unique(ComplexVector(DebugObject("empty vector")), 0.001)', TAlgosimComplexVector.Create);

  Test({LINENUM}43069, 'unique(❨❨6, 3, 2, 5❩, ❨7, 0, 1, 3❩❩, 0.0001)', failure, 'Cannot remove duplicates from an object of type "real matrix".');
  Test({LINENUM}43070, 'unique(❨❨6, 3, i, 5❩, ❨7, 0, 1, 3❩❩, 0.0001)', failure, 'Cannot remove duplicates from an object of type "complex matrix".');

  Test({LINENUM}43072, 'unique("test", 0.001)', failure, 'Cannot remove duplicates from an object of type "string".');

  Test({LINENUM}43074, 'L ≔ ''(3, 2, 5, 6, 3.0001, 7, 12, 12.001, 5, 6.99, 5.00001, 123, 124, 124.5, 7.1, 2, 123 + 1E−10)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 5, 6.99, 5.00001, 123, 124, 124.5, 7.1, 2, 123 + 1E-10]));

  Test({LINENUM}43077, 'unique(L)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1, 123 + 1E-10]));

  Test({LINENUM}43080, 'unique(L, 2E-12)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1, 123 + 1E-10]));

  Test({LINENUM}43083, 'unique(L, 2E-11)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1, 123 + 1E-10]));

  Test({LINENUM}43086, 'unique(L, 2E-10)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43089, 'unique(L, 2E-9)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43092, 'unique(L, 2E-8)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43095, 'unique(L, 2E-7)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43098, 'unique(L, 2E-6)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43101, 'unique(L, 2E-5)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43104, 'unique(L, 2E-4)',
    asoarr([3, 2, 5, 6, 7, 12, 12.001, 6.99, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43107, 'unique(L, 2E-3)',
    asoarr([3, 2, 5, 6, 7, 12, 6.99, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43110, 'unique(L, 2E-2)',
    asoarr([3, 2, 5, 6, 7, 12, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43113, 'unique(L, 2E-1)',
    asoarr([3, 2, 5, 6, 7, 12, 123, 124, 124.5]));

  Test({LINENUM}43116, 'unique(L, 1.4)',
    asoarr([3, 5, 7, 12, 123, 124.5]));

  Test({LINENUM}43119, 'unique(L, 2.4)',
    asoarr([3, 6, 12, 123]));

  Test({LINENUM}43122, 'unique(L, 10)',
    asoarr([3, 123]));

  Test({LINENUM}43125, 'unique(L, 100)',
    asoarr([3, 123]));

  Test({LINENUM}43128, 'unique(L, 1000)',
    asoarr([3]));

  Test({LINENUM}43131, 'unique(L, 1E50)',
    asoarr([3]));

  Test({LINENUM}43134, 'L ≔ ''(3, 2, "cat", 5, 6, 3.0001, 7, 12, "cat", 12.001, 5, "dog", "rat", 6.99, 5.00001, 123, 124, 124.5, 7.1, 2, "rabbit", 123 + 1E−10, "thestral")',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 'cat', 12.001, 5, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 2, 'rabbit', 123 + 1E-10, 'thestral']));

  Test({LINENUM}43137, 'unique(L)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 123 + 1E-10, 'thestral']));

  Test({LINENUM}43140, 'unique(L, 2E-12)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 123 + 1E-10, 'thestral']));

  Test({LINENUM}43143, 'unique(L, 2E-11)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 123 + 1E-10, 'thestral']));

  Test({LINENUM}43146, 'unique(L, 2E-10)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43149, 'unique(L, 2E-9)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43152, 'unique(L, 2E-8)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43155, 'unique(L, 2E-7)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43158, 'unique(L, 2E-6)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43161, 'unique(L, 2E-5)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43164, 'unique(L, 2E-4)',
    asoarr([3, 2, 'cat', 5, 6, 7, 12, 12.001, 'dog', 'rat', 6.99, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43167, 'unique(L, 2E-3)',
    asoarr([3, 2, 'cat', 5, 6, 7, 12, 'dog', 'rat', 6.99, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43170, 'unique(L, 2E-2)',
    asoarr([3, 2, 'cat', 5, 6, 7, 12, 'dog', 'rat', 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43173, 'unique(L, 2E-1)',
    asoarr([3, 2, 'cat', 5, 6, 7, 12, 'dog', 'rat', 123, 124, 124.5, 'rabbit', 'thestral']));

  Test({LINENUM}43176, 'unique(L, 1.4)',
    asoarr([3, 'cat', 5, 7, 12, 'dog', 'rat', 123, 124.5, 'rabbit', 'thestral']));

  Test({LINENUM}43179, 'unique(L, 2.4)',
    asoarr([3, 'cat', 6, 12, 'dog', 'rat', 123, 'rabbit', 'thestral']));

  Test({LINENUM}43182, 'unique(L, 5)',
    asoarr([3, 'cat', 12, 'dog', 'rat', 123, 'rabbit', 'thestral']));

  Test({LINENUM}43185, 'unique(L, 10)',
    asoarr([3, 'cat', 'dog', 'rat', 123, 'rabbit', 'thestral']));

  Test({LINENUM}43188, 'unique(L, 100)',
    asoarr([3, 'cat', 'dog', 'rat', 123, 'rabbit', 'thestral']));

  Test({LINENUM}43191, 'unique(L, 1000)',
    asoarr([3, 'cat', 'dog', 'rat', 'rabbit', 'thestral']));

  Test({LINENUM}43194, 'unique(L, 1E20)',
    asoarr([3, 'cat', 'dog', 'rat', 'rabbit', 'thestral']));

  Test({LINENUM}43197, 'L ≔ ''(2 + 3⋅i, 5 − i, 2 + 3.001⋅i, 4.99 − i, 12, 2 + 3⋅i)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(2 + 3.001*ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12), ASO(2 + 3*ImaginaryUnit)]));

  Test({LINENUM}43200, 'unique(L)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(2 + 3.001*ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43203, 'unique(L, 2E-6)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(2 + 3.001*ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43206, 'unique(L, 2E-5)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(2 + 3.001*ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43209, 'unique(L, 2E-4)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(2 + 3.001*ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43212, 'unique(L, 2E-3)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43215, 'unique(L, 2E-2)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43218, 'unique(L, 2)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43221, 'unique(L, 3)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43224, 'unique(L, 4.2)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43227, 'unique(L, 9)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43230, 'unique(L, 10.1)',
    asoarrex([ASO(2 + 3*ImaginaryUnit)]));

  Test({LINENUM}43233, 'unique(L, 1E50)',
    asoarrex([ASO(2 + 3*ImaginaryUnit)]));

  Test({LINENUM}43236, 'v ≔ ❨5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 5, 3, 2.99, −5, 1, 7, 0, 1, 5.00000001❩',
    [5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 5, 3, 2.99, -5, 1, 7, 0, 1, 5.00000001]);

  Test({LINENUM}43239, 'RemoveDuplicates(v)',
    [5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 2.99, -5, 1, 0, 5.00000001]);

  Test({LINENUM}43242, 'RemoveDuplicates(v, 2E-9)',
    [5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 2.99, -5, 1, 0, 5.00000001]);

  Test({LINENUM}43245, 'RemoveDuplicates(v, 2E-8)',
    [5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}43248, 'RemoveDuplicates(v, 2E-7)',
    [5, 3, 5.0001, 3.000001, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}43251, 'RemoveDuplicates(v, 2E-6)',
    [5, 3, 5.0001, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}43254, 'RemoveDuplicates(v, 2E-5)',
    [5, 3, 5.0001, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}43257, 'RemoveDuplicates(v, 2E-4)',
    [5, 3, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}43260, 'RemoveDuplicates(v, 2E-3)',
    [5, 3, 7, 21, 213, 8, 2.99, -5, 1, 0]);

  Test({LINENUM}43263, 'RemoveDuplicates(v, 2E-2)',
    [5, 3, 7, 21, 213, 8, -5, 1, 0]);

  Test({LINENUM}43266, 'RemoveDuplicates(v, 2E-1)',
    [5, 3, 7, 21, 213, 8, -5, 1, 0]);

  Test({LINENUM}43269, 'RemoveDuplicates(v, 2.5)',
    [5, 21, 213, 8, -5, 1]);

  Test({LINENUM}43272, 'RemoveDuplicates(v, 3.5)',
    [5, 21, 213, -5, 1]);

  Test({LINENUM}43275, 'RemoveDuplicates(v, 4.5)',
    [5, 21, 213, -5, 0]);

  Test({LINENUM}43278, 'RemoveDuplicates(v, 10.5)',
    [5, 21, 213]);

  Test({LINENUM}43281, 'RemoveDuplicates(v, 100)',
    [5, 213]);

  Test({LINENUM}43284, 'RemoveDuplicates(v, 300)',
    [5]);

  Test({LINENUM}43287, 'RemoveDuplicates(v, 300000000)',
    [5]);

  Test({LINENUM}43290, 'RemoveDuplicates(DebugObject("empty vector"), 0.001)', TAlgosimRealVector.Create);

  Test({LINENUM}43292, 'v ≔ ❨3, i, 1 + i, 5, 2.99, 1.001 + i, 1 + 1.00001 ⋅ i, 7, 11, 5.001, 23, 123, 5 + 0.01⋅i, 50, 5, 0, 3❩',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 5, 0, 3]);

  Test({LINENUM}43295, 'RemoveDuplicates(v)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43298, 'RemoveDuplicates(v, 2E-9)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43301, 'RemoveDuplicates(v, 2E-8)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43304, 'RemoveDuplicates(v, 2E-7)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43307, 'RemoveDuplicates(v, 2E-6)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 1 + 1.00001 * ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43310, 'RemoveDuplicates(v, 2E-5)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43313, 'RemoveDuplicates(v, 2E-4)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 1.001 + ImaginaryUnit, 7, 11, 5.001, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43316, 'RemoveDuplicates(v, 2E-3)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 2.99, 7, 11, 23, 123, 5 + 0.01*ImaginaryUnit, 50, 0]);

  Test({LINENUM}43319, 'RemoveDuplicates(v, 2E-2)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 7, 11, 23, 123, 50, 0]);

  Test({LINENUM}43322, 'RemoveDuplicates(v, 2E-1)',
    [3, ImaginaryUnit, 1 + ImaginaryUnit, 5, 7, 11, 23, 123, 50, 0]);

  Test({LINENUM}43325, 'RemoveDuplicates(v, 2.5)',
    [3, ImaginaryUnit, 7, 11, 23, 123, 50]);

  Test({LINENUM}43328, 'RemoveDuplicates(v, 4.5)',
    [TASC(3), 11, 23, 123, 50]);

  Test({LINENUM}43331, 'RemoveDuplicates(v, 10)',
    [TASC(3), 23, 123, 50]);

  Test({LINENUM}43334, 'RemoveDuplicates(v, 25)',
    [TASC(3), 123, 50]);

  Test({LINENUM}43337, 'RemoveDuplicates(v, 50)',
    [TASC(3), 123]);

  Test({LINENUM}43340, 'RemoveDuplicates(v, 500)',
    [TASC(3)]);

  Test({LINENUM}43343, 'RemoveDuplicates(v, 500000000)',
    [TASC(3)]);

  Test({LINENUM}43346, 'RemoveDuplicates(ComplexVector(DebugObject("empty vector")), 0.001)', TAlgosimComplexVector.Create);

  Test({LINENUM}43348, 'RemoveDuplicates(❨❨6, 3, 2, 5❩, ❨7, 0, 1, 3❩❩, 0.0001)', failure, 'Cannot remove duplicates from an object of type "real matrix".');
  Test({LINENUM}43349, 'RemoveDuplicates(❨❨6, 3, i, 5❩, ❨7, 0, 1, 3❩❩, 0.0001)', failure, 'Cannot remove duplicates from an object of type "complex matrix".');

  Test({LINENUM}43351, 'RemoveDuplicates("test", 0.001)', failure, 'Cannot remove duplicates from an object of type "string".');

  Test({LINENUM}43353, 'L ≔ ''(3, 2, 5, 6, 3.0001, 7, 12, 12.001, 5, 6.99, 5.00001, 123, 124, 124.5, 7.1, 2, 123 + 1E−10)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 5, 6.99, 5.00001, 123, 124, 124.5, 7.1, 2, 123 + 1E-10]));

  Test({LINENUM}43356, 'RemoveDuplicates(L)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1, 123 + 1E-10]));

  Test({LINENUM}43359, 'RemoveDuplicates(L, 2E-12)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1, 123 + 1E-10]));

  Test({LINENUM}43362, 'RemoveDuplicates(L, 2E-11)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1, 123 + 1E-10]));

  Test({LINENUM}43365, 'RemoveDuplicates(L, 2E-10)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43368, 'RemoveDuplicates(L, 2E-9)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43371, 'RemoveDuplicates(L, 2E-8)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43374, 'RemoveDuplicates(L, 2E-7)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43377, 'RemoveDuplicates(L, 2E-6)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 5.00001, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43380, 'RemoveDuplicates(L, 2E-5)',
    asoarr([3, 2, 5, 6, 3.0001, 7, 12, 12.001, 6.99, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43383, 'RemoveDuplicates(L, 2E-4)',
    asoarr([3, 2, 5, 6, 7, 12, 12.001, 6.99, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43386, 'RemoveDuplicates(L, 2E-3)',
    asoarr([3, 2, 5, 6, 7, 12, 6.99, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43389, 'RemoveDuplicates(L, 2E-2)',
    asoarr([3, 2, 5, 6, 7, 12, 123, 124, 124.5, 7.1]));

  Test({LINENUM}43392, 'RemoveDuplicates(L, 2E-1)',
    asoarr([3, 2, 5, 6, 7, 12, 123, 124, 124.5]));

  Test({LINENUM}43395, 'RemoveDuplicates(L, 1.4)',
    asoarr([3, 5, 7, 12, 123, 124.5]));

  Test({LINENUM}43398, 'RemoveDuplicates(L, 2.4)',
    asoarr([3, 6, 12, 123]));

  Test({LINENUM}43401, 'RemoveDuplicates(L, 10)',
    asoarr([3, 123]));

  Test({LINENUM}43404, 'RemoveDuplicates(L, 100)',
    asoarr([3, 123]));

  Test({LINENUM}43407, 'RemoveDuplicates(L, 1000)',
    asoarr([3]));

  Test({LINENUM}43410, 'RemoveDuplicates(L, 1E50)',
    asoarr([3]));

  Test({LINENUM}43413, 'L ≔ ''(3, 2, "cat", 5, 6, 3.0001, 7, 12, "cat", 12.001, 5, "dog", "rat", 6.99, 5.00001, 123, 124, 124.5, 7.1, 2, "rabbit", 123 + 1E−10, "thestral")',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 'cat', 12.001, 5, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 2, 'rabbit', 123 + 1E-10, 'thestral']));

  Test({LINENUM}43416, 'RemoveDuplicates(L)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 123 + 1E-10, 'thestral']));

  Test({LINENUM}43419, 'RemoveDuplicates(L, 2E-12)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 123 + 1E-10, 'thestral']));

  Test({LINENUM}43422, 'RemoveDuplicates(L, 2E-11)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 123 + 1E-10, 'thestral']));

  Test({LINENUM}43425, 'RemoveDuplicates(L, 2E-10)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43428, 'RemoveDuplicates(L, 2E-9)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43431, 'RemoveDuplicates(L, 2E-8)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43434, 'RemoveDuplicates(L, 2E-7)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43437, 'RemoveDuplicates(L, 2E-6)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 5.00001, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43440, 'RemoveDuplicates(L, 2E-5)',
    asoarr([3, 2, 'cat', 5, 6, 3.0001, 7, 12, 12.001, 'dog', 'rat', 6.99, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43443, 'RemoveDuplicates(L, 2E-4)',
    asoarr([3, 2, 'cat', 5, 6, 7, 12, 12.001, 'dog', 'rat', 6.99, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43446, 'RemoveDuplicates(L, 2E-3)',
    asoarr([3, 2, 'cat', 5, 6, 7, 12, 'dog', 'rat', 6.99, 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43449, 'RemoveDuplicates(L, 2E-2)',
    asoarr([3, 2, 'cat', 5, 6, 7, 12, 'dog', 'rat', 123, 124, 124.5, 7.1, 'rabbit', 'thestral']));

  Test({LINENUM}43452, 'RemoveDuplicates(L, 2E-1)',
    asoarr([3, 2, 'cat', 5, 6, 7, 12, 'dog', 'rat', 123, 124, 124.5, 'rabbit', 'thestral']));

  Test({LINENUM}43455, 'RemoveDuplicates(L, 1.4)',
    asoarr([3, 'cat', 5, 7, 12, 'dog', 'rat', 123, 124.5, 'rabbit', 'thestral']));

  Test({LINENUM}43458, 'RemoveDuplicates(L, 2.4)',
    asoarr([3, 'cat', 6, 12, 'dog', 'rat', 123, 'rabbit', 'thestral']));

  Test({LINENUM}43461, 'RemoveDuplicates(L, 5)',
    asoarr([3, 'cat', 12, 'dog', 'rat', 123, 'rabbit', 'thestral']));

  Test({LINENUM}43464, 'RemoveDuplicates(L, 10)',
    asoarr([3, 'cat', 'dog', 'rat', 123, 'rabbit', 'thestral']));

  Test({LINENUM}43467, 'RemoveDuplicates(L, 100)',
    asoarr([3, 'cat', 'dog', 'rat', 123, 'rabbit', 'thestral']));

  Test({LINENUM}43470, 'RemoveDuplicates(L, 1000)',
    asoarr([3, 'cat', 'dog', 'rat', 'rabbit', 'thestral']));

  Test({LINENUM}43473, 'RemoveDuplicates(L, 1E20)',
    asoarr([3, 'cat', 'dog', 'rat', 'rabbit', 'thestral']));

  Test({LINENUM}43476, 'L ≔ ''(2 + 3⋅i, 5 − i, 2 + 3.001⋅i, 4.99 − i, 12, 2 + 3⋅i)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(2 + 3.001*ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12), ASO(2 + 3*ImaginaryUnit)]));

  Test({LINENUM}43479, 'RemoveDuplicates(L)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(2 + 3.001*ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43482, 'RemoveDuplicates(L, 2E-6)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(2 + 3.001*ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43485, 'RemoveDuplicates(L, 2E-5)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(2 + 3.001*ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43488, 'RemoveDuplicates(L, 2E-4)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(2 + 3.001*ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43491, 'RemoveDuplicates(L, 2E-3)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASO(4.99 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43494, 'RemoveDuplicates(L, 2E-2)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43497, 'RemoveDuplicates(L, 2)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43500, 'RemoveDuplicates(L, 3)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASO(5 - ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43503, 'RemoveDuplicates(L, 4.2)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43506, 'RemoveDuplicates(L, 9)',
    asoarrex([ASO(2 + 3*ImaginaryUnit), ASOInt(12)]));

  Test({LINENUM}43509, 'RemoveDuplicates(L, 10.1)',
    asoarrex([ASO(2 + 3*ImaginaryUnit)]));

  Test({LINENUM}43512, 'RemoveDuplicates(L, 1E50)',
    asoarrex([ASO(2 + 3*ImaginaryUnit)]));

  // adjacent duplicates

  Test({LINENUM}43517, 'RemoveAdjacentDuplicates(❨4, 2, 3, 3, 4, 1, 5, 8, 0, 0, 0, 4, 7, 8, 9, 5, 5, 5, 3, 2, 4, 5, 1, 9, 5, 2❩)',
    [4, 2, 3, 4, 1, 5, 8, 0, 4, 7, 8, 9, 5, 3, 2, 4, 5, 1, 9, 5, 2]);

  Test({LINENUM}43520, 'RemoveAdjacentDuplicates(❨4, 2, 3, 3, 4, 1, 5, 8, 0, 0, 0, 4, 7, 8, 9, 5, 5, 5, 3, 2, 4, 5, 1, 9, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2❩)',
    [4, 2, 3, 4, 1, 5, 8, 0, 4, 7, 8, 9, 5, 3, 2, 4, 5, 1, 9, 5, 2]);

  Test({LINENUM}43523, 'RemoveAdjacentDuplicates(❨1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 3, 3, 4, 1, 5, 8, 0, 0, 0, 4, 7, 8, 9, 5, 5, 5, 3, 2, 4, 5, 1, 9, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2❩)',
    [1, 4, 2, 3, 4, 1, 5, 8, 0, 4, 7, 8, 9, 5, 3, 2, 4, 5, 1, 9, 5, 2]);

  Test({LINENUM}43526, 'RemoveAdjacentDuplicates(❨3, 2, 0, 5, 8, 7, 4, 1, 0, 6, 3, 2, 5, 8, 6, 4, 7, 9, 1, 2, 3, 0, 5, 5, 8, 9❩)',
    [3, 2, 0, 5, 8, 7, 4, 1, 0, 6, 3, 2, 5, 8, 6, 4, 7, 9, 1, 2, 3, 0, 5, 8, 9]);

  Test({LINENUM}43529, 'RemoveAdjacentDuplicates(❨1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1❩)',
    [1, 2, 1, 2, 3, 4, 1]);

  Test({LINENUM}43532, 'RemoveAdjacentDuplicates(❨21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21❩)',
    [21]);

  Test({LINENUM}43535, 'RemoveAdjacentDuplicates(ZeroVector(1000000))',
    [0]);

  Test({LINENUM}43538, 'RemoveAdjacentDuplicates(BasisVector(1000000, 123456))',
    [0, 1, 0]);

  Test({LINENUM}43541, 'RemoveAdjacentDuplicates(❨3, 6, 9, 2, 5, i, 4, 1, 5, 5, 2, 1, 4, 0, i, i, −i, 7, 0, 0, 4, 8, 2, 2, 3, i❩)',
    [3, 6, 9, 2, 5, ImaginaryUnit, 4, 1, 5, 2, 1, 4, 0, ImaginaryUnit, -ImaginaryUnit, 7, 0, 4, 8, 2, 3, ImaginaryUnit]);

  Test({LINENUM}43544, 'RemoveAdjacentDuplicates(❨3, 6, 9, 2, 5, i, 4, 1, 5, 5, 2, 1, 4, 0, i, i, i, −i, 7, 0, 0, 4, 8, 2, 2, 3, i❩)',
    [3, 6, 9, 2, 5, ImaginaryUnit, 4, 1, 5, 2, 1, 4, 0, ImaginaryUnit, -ImaginaryUnit, 7, 0, 4, 8, 2, 3, ImaginaryUnit]);

  Test({LINENUM}43547, 'RemoveAdjacentDuplicates(❨3, 6, 9, 2, 5, i, 4, 1, 5, 5, 5, 5, 5, 5, 5, 2, 1, 4, 0, i, i, i, −i, 7, 0, 0, 4, 8, 2, 2, 2, 2, 2, 2, 2, 2, 3, i❩)',
    [3, 6, 9, 2, 5, ImaginaryUnit, 4, 1, 5, 2, 1, 4, 0, ImaginaryUnit, -ImaginaryUnit, 7, 0, 4, 8, 2, 3, ImaginaryUnit]);

  Test({LINENUM}43550, 'RemoveAdjacentDuplicates(❨3, 3, 3, 3, 3, 6, 9, 2, 5, i, 4, 1, 5, 5, 5, 5, 5, 5, 5, 2, 1, 4, 0, i, i, i, −i, 7, 0, 0, 4, 8, 2, 2, 2, 2, 2, 2, 2, 2, 3, i, i, i, i, i, i, i❩)',
    [3, 6, 9, 2, 5, ImaginaryUnit, 4, 1, 5, 2, 1, 4, 0, ImaginaryUnit, -ImaginaryUnit, 7, 0, 4, 8, 2, 3, ImaginaryUnit]);

  Test({LINENUM}43553, 'RemoveAdjacentDuplicates(❨5, 5, 5, 5, 5, i, i, i, i, i, i, 5, 5, 5, i, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5❩)',
    [5, ImaginaryUnit, 5, ImaginaryUnit, 5]);

  Test({LINENUM}43556, 'RemoveAdjacentDuplicates(❨5, 5, 5, 5, 5, i, i, i, i, i, i, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5❩)', // 16:55
    [5, ImaginaryUnit, 5]);

  Test({LINENUM}43559, 'RemoveAdjacentDuplicates(❨5, 5, 5, 5, 5, i, i, i, i, i, i, i, i❩)',
    [5, ImaginaryUnit]);

  Test({LINENUM}43562, 'RemoveAdjacentDuplicates(ComplexVector(❨5, 5, 5, 5, 5❩))',
    [TASC(5)]);

  Test({LINENUM}43565, 'RemoveAdjacentDuplicates(ComplexVector(❨5, 5❩))',
    [TASC(5)]);

  Test({LINENUM}43568, 'RemoveAdjacentDuplicates(ComplexVector(❨5❩))',
    [TASC(5)]);

  Test({LINENUM}43571, 'RemoveAdjacentDuplicates(ComplexZeroVector(1000000))',
    [TASC(0)]);

  Test({LINENUM}43574, 'RemoveAdjacentDuplicates(ComplexVector(BasisVector(1000000, 456123)))',
    [TASC(0), 1, 0]);

  Test({LINENUM}43577, 'RemoveAdjacentDuplicates(ZeroMatrix(10))', failure,
    'Cannot remove adjacent duplicates from an object of type "real matrix".');

  Test({LINENUM}43580, 'RemoveAdjacentDuplicates(ComplexZeroMatrix(10))', failure,
    'Cannot remove adjacent duplicates from an object of type "complex matrix".');

  Test({LINENUM}43583, 'RemoveAdjacentDuplicates("Hello, World!")', 'Helo, World!');
  Test({LINENUM}43584, 'RemoveAdjacentDuplicates("This is nothing but a test.")', 'This is nothing but a test.');
  Test({LINENUM}43585, 'RemoveAdjacentDuplicates("He fell off his broomstick.")', 'He fel of his bromstick.');
  Test({LINENUM}43586, 'RemoveAdjacentDuplicates("Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...")', 'Aa.');
  Test({LINENUM}43587, 'RemoveAdjacentDuplicates("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")', 'a');
  Test({LINENUM}43588, 'RemoveAdjacentDuplicates("Skräptyg AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB")', 'Skräptyg AB');
  Test({LINENUM}43589, 'RemoveAdjacentDuplicates("")', '');

  Test({LINENUM}43591, 'RemoveAdjacentDuplicates(''(4, 2, 1, 5, 5, 3, 3, 2, 6, 8, 9, 4, 1, 1, 1, 1, 0, 2, 5, 1, 10))',
    intarr([4, 2, 1, 5, 3, 2, 6, 8, 9, 4, 1, 0, 2, 5, 1, 10]));

  Test({LINENUM}43594, 'RemoveAdjacentDuplicates(''(4, 2, 1, 5, 5, 3, 3, 2, 6, 8, 9, 4, 1, 1, 1, 1, 0, 2, 5, 1, 10, 10, 10, 10, 10, 10, 10, 10))',
    intarr([4, 2, 1, 5, 3, 2, 6, 8, 9, 4, 1, 0, 2, 5, 1, 10]));

  Test({LINENUM}43597, 'RemoveAdjacentDuplicates(''(4, 4, 4, 4, 4, 4, 2, 1, 5, 5, 3, 3, 2, 6, 8, 9, 4, 1, 1, 1, 1, 0, 2, 5, 1, 10, 10, 10, 10, 10, 10, 10, 10))',
    intarr([4, 2, 1, 5, 3, 2, 6, 8, 9, 4, 1, 0, 2, 5, 1, 10]));

  Test({LINENUM}43600, 'RemoveAdjacentDuplicates(''(4, 4, 4, 4, 4, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 3, 3, 2, 6, 8, 9, 4, 1, 1, 1, 1, 0, 2, 5, 1, 10, 10, 10, 10, 10, 10, 10, 10))',
    intarr([4, 2, 1, 5, 3, 2, 6, 8, 9, 4, 1, 0, 2, 5, 1, 10]));

  Test({LINENUM}43603, 'RemoveAdjacentDuplicates(''(4, 4, 4, 4, 4, 4, 2))',
    intarr([4, 2]));

  Test({LINENUM}43606, 'RemoveAdjacentDuplicates(''(4, 4, 4, 4, 4, 4))',
    intarr([4]));

  Test({LINENUM}43609, 'RemoveAdjacentDuplicates(''(4, 4, 4, 4, 4))',
    intarr([4]));

  Test({LINENUM}43612, 'RemoveAdjacentDuplicates(''(4, 4, 4, 4))',
    intarr([4]));

  Test({LINENUM}43615, 'RemoveAdjacentDuplicates(''(4, 4, 4))',
    intarr([4]));

  Test({LINENUM}43618, 'RemoveAdjacentDuplicates(''(4, 4))',
    intarr([4]));

  Test({LINENUM}43621, 'RemoveAdjacentDuplicates(''(4))',
    intarr([4]));

  Test({LINENUM}43624, 'RemoveAdjacentDuplicates(''())',
    intarr([]));

  Test({LINENUM}43627, 'RemoveAdjacentDuplicates(''(1, 2, 2, 2, 3, 4, 5, 5/2 + 5/2, 5.0, 5 + i - i, 6, 7, 8, 9, 10, 10))',
    intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));

  Test({LINENUM}43630, 'RemoveAdjacentDuplicates({5, 3, 0, 4, 1, 2, 2, 5, 7, 8, 9})', failure,
    'Cannot remove adjacent duplicates from an object of type "set".');

  Test({LINENUM}43633, 'RemoveAdjacentDuplicates(3.14)', failure,
    'Cannot remove adjacent duplicates from an object of type "real number".');

  Test({LINENUM}43636, 'RemoveAdjacentDuplicates(1033)', failure,
    'Cannot remove adjacent duplicates from an object of type "integer".');

  Test({LINENUM}43639, 'RemoveAdjacentDuplicates(true)', failure,
    'Cannot remove adjacent duplicates from an object of type "boolean".');

  // adjacent duplicates with epsilon

  Test({LINENUM}43644, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩)',
    [5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E-8, 4, 3.99, 3.999, 5, 0, 2]);

  Test({LINENUM}43647, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 2E-10)',
    [5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E-8, 4, 3.99, 3.999, 5, 0, 2]);

  Test({LINENUM}43650, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 2E-9)',
    [5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E-8, 4, 3.99, 3.999, 5, 0, 2]);

  Test({LINENUM}43653, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 2E-8)',
    [5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E-8, 3.99, 3.999, 5, 0, 2]);

  Test({LINENUM}43656, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 2E-7)',
    [5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E-8, 3.99, 3.999, 5, 0, 2]);

  Test({LINENUM}43659, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 2E-6)',
    [5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E-8, 3.99, 3.999, 5, 0, 2]);

  Test({LINENUM}43662, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 2E-5)',
    [5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E-8, 3.99, 3.999, 5, 0, 2]);

  Test({LINENUM}43665, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 2E-4)',
    [5, 1, 2, 3, 2, 7, 4, 8, 7.999, 8.01, 4 + 1E-8, 3.99, 3.999, 5, 0, 2]);

  Test({LINENUM}43668, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 2E-3)',
    [5, 1, 2, 3, 2, 7, 4, 8, 8.01, 4 + 1E-8, 3.99, 3.999, 5, 0, 2]);

  Test({LINENUM}43671, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 2E-2)',
    [5, 1, 2, 3, 2, 7, 4, 8, 4 + 1E-8, 5, 0, 2]);

  Test({LINENUM}43674, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 0.5)',
    [5, 1, 2, 3, 2, 7, 4, 8, 4 + 1E-8, 5, 0, 2]);

  Test({LINENUM}43677, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 1.5)',
    [5, 1, 3, 7, 4, 8, 4 + 1E-8, 0, 2]);

  Test({LINENUM}43680, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 2.5)',
    [5, 1, 7, 4, 8, 4 + 1E-8, 0]);

  Test({LINENUM}43683, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 5.5)',
    [5]);

  Test({LINENUM}43686, 'RemoveAdjacentDuplicates(❨5, 1, 2, 3, 2, 2.0001, 7, 4, 8, 7.999, 8.01, 4 + 1E−8, 4, 3.99, 3.999, 5, 0, 0, 2❩, 10000000)',
    [5]);

  Test({LINENUM}43689, 'RemoveAdjacentDuplicates(❨1, 0.99, 1.001❩)',
    [1, 0.99, 1.001]);

  Test({LINENUM}43692, 'RemoveAdjacentDuplicates(❨1, 0.99, 1.001❩, 2E−4)',
    [1, 0.99, 1.001]);

  Test({LINENUM}43695, 'RemoveAdjacentDuplicates(❨1, 0.99, 1.001❩, 2E−3)',
    [1, 0.99, 1.001]);

  Test({LINENUM}43698, 'RemoveAdjacentDuplicates(❨1, 0.99, 1.001❩, 2E−2)',
    [1]);

  Test({LINENUM}43701, 'RemoveAdjacentDuplicates(❨1, 0.99, 1.001❩, 200)',
    [1]);

  Test({LINENUM}43704, 'RemoveAdjacentDuplicates(❨1❩, 200)',
    [1]);

  Test({LINENUM}43707, 'RemoveAdjacentDuplicates(DebugObject("empty vector"), 0.001)',
    TAlgosimRealVector.Create);

  Test({LINENUM}43710, 'RemoveAdjacentDuplicates(❨1, 2 + i, 1.99 + i, 1 + i/10000, 1, 5, 4.9, 4.9❩)',
    [1, 2 + ImaginaryUnit, 1.99 + ImaginaryUnit, 1 + 0.0001*ImaginaryUnit, 1, 5, 4.9]);

  Test({LINENUM}43713, 'RemoveAdjacentDuplicates(❨1, 2 + i, 1.99 + i, 1 + i/10000, 1, 5, 4.9, 4.9❩, 2E-6)',
    [1, 2 + ImaginaryUnit, 1.99 + ImaginaryUnit, 1 + 0.0001*ImaginaryUnit, 1, 5, 4.9]);

  Test({LINENUM}43716, 'RemoveAdjacentDuplicates(❨1, 2 + i, 1.99 + i, 1 + i/10000, 1, 5, 4.9, 4.9❩, 2E-5)',
    [1, 2 + ImaginaryUnit, 1.99 + ImaginaryUnit, 1 + 0.0001*ImaginaryUnit, 1, 5, 4.9]);

  Test({LINENUM}43719, 'RemoveAdjacentDuplicates(❨1, 2 + i, 1.99 + i, 1 + i/10000, 1, 5, 4.9, 4.9❩, 2E-4)',
    [1, 2 + ImaginaryUnit, 1.99 + ImaginaryUnit, 1 + 0.0001*ImaginaryUnit, 5, 4.9]);

  Test({LINENUM}43722, 'RemoveAdjacentDuplicates(❨1, 2 + i, 1.99 + i, 1 + i/10000, 1, 5, 4.9, 4.9❩, 2E-3)',
    [1, 2 + ImaginaryUnit, 1.99 + ImaginaryUnit, 1 + 0.0001*ImaginaryUnit, 5, 4.9]);

  Test({LINENUM}43725, 'RemoveAdjacentDuplicates(❨1, 2 + i, 1.99 + i, 1 + i/10000, 1, 5, 4.9, 4.9❩, 2E-2)',
    [1, 2 + ImaginaryUnit, 1 + 0.0001*ImaginaryUnit, 5, 4.9]);

  Test({LINENUM}43728, 'RemoveAdjacentDuplicates(❨1, 2 + i, 1.99 + i, 1 + i/10000, 1, 5, 4.9, 4.9❩, 2E-1)',
    [1, 2 + ImaginaryUnit, 1 + 0.0001*ImaginaryUnit, 5]);

  Test({LINENUM}43731, 'RemoveAdjacentDuplicates(❨1, 2 + i, 1.99 + i, 1 + i/10000, 1, 5, 4.9, 4.9❩, 1.5)',
    [TASC(1), 5]);

  Test({LINENUM}43734, 'RemoveAdjacentDuplicates(❨1, 2 + i, 1.99 + i, 1 + i/10000, 1, 5, 4.9, 4.9❩, 15)',
    [TASC(1)]);

  Test({LINENUM}43737, 'RemoveAdjacentDuplicates(ComplexVector(DebugObject("empty vector")), 0.001)',
    TAlgosimComplexVector.Create);

  Test({LINENUM}43740, 'RemoveAdjacentDuplicates(ZeroMatrix(10), 1E-6)', failure,
    'Cannot remove adjacent duplicates from an object of type "real matrix".');

  Test({LINENUM}43743, 'RemoveAdjacentDuplicates(ComplexZeroMatrix(10), 1E-6)', failure,
    'Cannot remove adjacent duplicates from an object of type "complex matrix".');

  Test({LINENUM}43746, 'RemoveAdjacentDuplicates(''(5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 6, 1, 0, 5, 5))',
    asoarr([5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 1, 0, 5]));

  Test({LINENUM}43749, 'RemoveAdjacentDuplicates(''(5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 6, 1, 0, 5, 5), 2E-6)',
    asoarr([5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 1, 0, 5]));

  Test({LINENUM}43752, 'RemoveAdjacentDuplicates(''(5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 6, 1, 0, 5, 5), 2E-5)',
    asoarr([5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 1, 0, 5]));

  Test({LINENUM}43755, 'RemoveAdjacentDuplicates(''(5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 6, 1, 0, 5, 5), 2E-4)',
    asoarr([5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 1, 0, 5]));

  Test({LINENUM}43758, 'RemoveAdjacentDuplicates(''(5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 6, 1, 0, 5, 5), 2E-3)',
    asoarr([5, 3, 2, 1, 7, 6, 10, 9.99, 6, 1, 0, 5]));

  Test({LINENUM}43761, 'RemoveAdjacentDuplicates(''(5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 6, 1, 0, 5, 5), 2E-2)',
    asoarr([5, 3, 2, 1, 7, 6, 10, 6, 1, 0, 5]));

  Test({LINENUM}43764, 'RemoveAdjacentDuplicates(''(5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 6, 1, 0, 5, 5), 1.5)',
    asoarr([5, 3, 1, 7, 10, 6, 1, 5]));

  Test({LINENUM}43767, 'RemoveAdjacentDuplicates(''(5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 6, 1, 0, 5, 5), 2.5)',
    asoarr([5, 2, 7, 10, 6, 1, 5]));

  Test({LINENUM}43770, 'RemoveAdjacentDuplicates(''(5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 6, 1, 0, 5, 5), 5.5)',
    asoarr([5]));

  Test({LINENUM}43773, 'RemoveAdjacentDuplicates(''(5, 3, 2, 1, 0.999, 0.9999, 7, 7.001, 6, 10, 9.99, 6, 6, 1, 0, 5, 5), 10!)',
    asoarr([5]));

  Test({LINENUM}43776, 'RemoveAdjacentDuplicates(''(3, 7, "cat", 7, 6.999, 3, "dog", "dog", 4, 4.0001, "rat", 4, 4, 1))',
    asoarr([3, 7, 'cat', 7, 6.999, 3, 'dog', 4, 4.0001, 'rat', 4, 1]));

  Test({LINENUM}43779, 'RemoveAdjacentDuplicates(''(3, 7, "cat", 7, 6.999, 3, "dog", "dog", 4, 4.0001, "rat", 4, 4, 1), 2E-6)',
    asoarr([3, 7, 'cat', 7, 6.999, 3, 'dog', 4, 4.0001, 'rat', 4, 1]));

  Test({LINENUM}43782, 'RemoveAdjacentDuplicates(''(3, 7, "cat", 7, 6.999, 3, "dog", "dog", 4, 4.0001, "rat", 4, 4, 1), 2E-5)',
    asoarr([3, 7, 'cat', 7, 6.999, 3, 'dog', 4, 4.0001, 'rat', 4, 1]));

  Test({LINENUM}43785, 'RemoveAdjacentDuplicates(''(3, 7, "cat", 7, 6.999, 3, "dog", "dog", 4, 4.0001, "rat", 4, 4, 1), 2E-4)',
    asoarr([3, 7, 'cat', 7, 6.999, 3, 'dog', 4, 'rat', 4, 1]));

  Test({LINENUM}43788, 'RemoveAdjacentDuplicates(''(3, 7, "cat", 7, 6.999, 3, "dog", "dog", 4, 4.0001, "rat", 4, 4, 1), 2E-3)',
    asoarr([3, 7, 'cat', 7, 3, 'dog', 4, 'rat', 4, 1]));

  Test({LINENUM}43791, 'RemoveAdjacentDuplicates(''(3, 7, "cat", 7, 6.999, 3, "dog", "dog", 4, 4.0001, "rat", 4, 4, 1), 100)',
    asoarr([3, 'cat', 7, 'dog', 4, 'rat', 4]));

  Test({LINENUM}43794, 'RemoveAdjacentDuplicates(''(2, 2, 2), 1E-3)', intarr([2]));

  Test({LINENUM}43796, 'RemoveAdjacentDuplicates(''(2, 2), 1E-3)', intarr([2]));

  Test({LINENUM}43798, 'RemoveAdjacentDuplicates(''(2), 1E-3)', intarr([2]));

  Test({LINENUM}43800, 'RemoveAdjacentDuplicates(''(), 1E-3)', intarr([]));

  Test({LINENUM}43802, 'RemoveAdjacentDuplicates({1, 2, 3, 3, 4, 5, 6}, 1E-6)', failure,
    'Cannot remove adjacent duplicates from an object of type "set".');

  // trick cases

  Test({LINENUM}43807, 'RemoveAdjacentDuplicates(❨8, 0, 5, 2, 6, −10❩, 3.5)', [8, 0, 5, -10]);
  Test({LINENUM}43808, 'RemoveAdjacentDuplicates(❨8, i, 5, 2, 6, −10❩, 3.5)', [8, ImaginaryUnit, 5, -10]);
  Test({LINENUM}43809, 'RemoveAdjacentDuplicates(''(8, 0, 5, 2, 6, −10), 3.5)', intarr([8, 0, 5, -10]));


  //
  // Frequencies
  //

  Test({LINENUM}43816, 'frequencies(❨5, 3, 0, 4, 1, 2, 7, 8, 5, 2, 3, 6, 9, 2, 0, 1, 4, 5, 2, 0, 10, 8, 2, 6, 0, 4, 1, 2, 3, 6, 9, 5, 3, 0, 2, 1, 7, 4, 5, 2, 0, 3❩)',
    asoarrex(
      [
        freq(5, 5),
        freq(3, 5),
        freq(0, 6),
        freq(4, 4),
        freq(1, 4),
        freq(2, 8),
        freq(7, 2),
        freq(8, 2),
        freq(6, 3),
        freq(9, 2),
        freq(10, 1)
      ]
    )
  );

  Test({LINENUM}43834, 'frequencies(❨1, 2, 3, 4, 5, 6, 7, 8, 9, 0❩)',
    asoarrex(
      [
        freq(1, 1),
        freq(2, 1),
        freq(3, 1),
        freq(4, 1),
        freq(5, 1),
        freq(6, 1),
        freq(7, 1),
        freq(8, 1),
        freq(9, 1),
        freq(0, 1)
      ]
    )
  );

  Test({LINENUM}43851, 'frequencies(❨1, 1, 1, 1, 1, 1, 1, 1, 1, 1❩)',
    asoarrex(
      [
        freq(1, 10)
      ]
    )
  );

  Test({LINENUM}43859, 'frequencies(❨1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1❩)',
    asoarrex(
      [
        freq(1, 10),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}43868, 'frequencies(ZeroVector(1000000))',
    asoarrex(
      [
        freq(0, 1000000)
      ]
    )
  );

  Test({LINENUM}43876, 'frequencies(BasisVector(1000000, 654321))',
    asoarrex(
      [
        freq(0, 999999),
        freq(1, 1)
      ]
    )
  );

  Test({LINENUM}43885, 'frequencies(DebugObject("empty vector"))',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}43892, 'frequencies(❨5, 3, 0, i, 1, 2, 7, 8, 5, 2, 3, 6, 9, 2, 0, 1, 4, 5, 2, 0, 10, 8, 2, 6, 0, 4, 1, 2, 3, 6, 9, 5, 3, 0, 2, 1, 7, 4, 5, 2, 0, 3❩)',
    asoarrex(
      [
        freq(5, 5),
        freq(3, 5),
        freq(0, 6),
        freq(ImaginaryUnit, 1),
        freq(1, 4),
        freq(2, 8),
        freq(7, 2),
        freq(8, 2),
        freq(6, 3),
        freq(9, 2),
        freq(4, 3),
        freq(10, 1)
      ]
    )
  );

  Test({LINENUM}43911, 'frequencies(❨1, 2, 3, 4, 5, 6, 7, 8, 9, i❩)',
    asoarrex(
      [
        freq(1, 1),
        freq(2, 1),
        freq(3, 1),
        freq(4, 1),
        freq(5, 1),
        freq(6, 1),
        freq(7, 1),
        freq(8, 1),
        freq(9, 1),
        freq(ImaginaryUnit, 1)
      ]
    )
  );

  Test({LINENUM}43928, 'frequencies(❨i, i, i, i, i, i, i, i, i, i❩)',
    asoarrex(
      [
        freq(ImaginaryUnit, 10)
      ]
    )
  );

  Test({LINENUM}43936, 'frequencies(❨i, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1❩)',
    asoarrex(
      [
        freq(ImaginaryUnit, 1),
        freq(1, 9),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}43946, 'frequencies(ComplexZeroVector(1000000))',
    asoarrex(
      [
        freq(TASC(0), 1000000)
      ]
    )
  );

  Test({LINENUM}43954, 'frequencies(ComplexVector(BasisVector(1000000, 654321)))',
    asoarrex(
      [
        freq(TASC(0), 999999),
        freq(TASC(1), 1)
      ]
    )
  );

  Test({LINENUM}43963, 'frequencies(ComplexVector(DebugObject("empty vector")))',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}43970, 'frequencies(❨❨6, 2, 5, 4, 1, 2, 0, 1❩, ❨4, 5, 2, 0, 1, 4, 2, 5❩, '+'❨9, 5, 3, 2, 0, 1, 4, 7❩, ❨5, 5, 6, 0, 1, 4, 2, 1❩, ❨6, 2, 0, 5, 4, 8, 1, 0❩, ❨8, 2, 1, 4, 5, 4, 2, 1❩, ❨4, 1, 2, 1, 0, 2, 1, 1❩, ❨3, 2, 8, 2, 4, 5, 1, 0❩❩)',
    asoarrex(
      [
        freq(6, 3),
        freq(2, 13),
        freq(5, 9),
        freq(4, 10),
        freq(1, 14),
        freq(0, 8),
        freq(9, 1),
        freq(3, 2),
        freq(7, 1),
        freq(8, 3)
      ]
    )
  );

  Test({LINENUM}43987, 'frequencies(❨❨6, 2, 5, 4, 1, 2, 0, 1❩❩)',
    asoarrex(
      [
        freq(6, 1),
        freq(2, 2),
        freq(5, 1),
        freq(4, 1),
        freq(1, 2),
        freq(0, 1)
      ]
    )
  );

  Test({LINENUM}44000, 'frequencies(ZeroMatrix(1000))',
    asoarrex(
      [
        freq(0, 1000000)
      ]
    )
  );

  Test({LINENUM}44008, 'frequencies(IdentityMatrix(1000))',
    asoarrex(
      [
        freq(1, 1000),
        freq(0, 1000000 - 1000)
      ]
    )
  );

  Test({LINENUM}44017, 'frequencies(CirculantMatrix(❨1, 2, 3, 4, 5, 6, 7, 8, 9❩))',
    asoarrex(
      [
        freq(1, 9),
        freq(2, 9),
        freq(3, 9),
        freq(4, 9),
        freq(5, 9),
        freq(6, 9),
        freq(7, 9),
        freq(8, 9),
        freq(9, 9)
      ]
    )
  );

  Test({LINENUM}44033, 'frequencies(ToeplitzMatrix(❨1, 2, 3, 4, 5, 6, 7, 8, 9❩, ❨1, 0, 0, 0, 0, 0, 0, 0, 0❩))',
    asoarrex(
      [
        freq(1, 9),
        freq(2, 8),
        freq(3, 7),
        freq(4, 6),
        freq(5, 5),
        freq(6, 4),
        freq(7, 3),
        freq(8, 2),
        freq(9, 1),
        freq(0, 8+7+6+5+4+3+2+1)
      ]
    )
  );

  Test({LINENUM}44050, 'frequencies(❨❨21❩❩)',
    asoarrex(
      [
        freq(21, 1)
      ]
    )
  );

  Test({LINENUM}44058, 'frequencies(DebugObject("empty matrix"))',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}44065, 'frequencies(❨❨3, 6, 5, 2, 1, i❩, ❨4, 2, 0, i, 1, 4❩, ❨5, 3, 2, 5, 9, i❩, ❨4, 1, 2, 0, 1, −i❩❩)',
    asoarrex(
      [
        freq(3, 2),
        freq(6, 1),
        freq(5, 3),
        freq(2, 4),
        freq(1, 4),
        freq(ImaginaryUnit, 3),
        freq(4, 3),
        freq(0, 2),
        freq(9, 1),
        freq(-ImaginaryUnit, 1)
      ]
    )
  );

  Test({LINENUM}44082, 'frequencies(❨❨i, i, i, i, i, i❩❩)',
    asoarrex(
      [
        freq(ImaginaryUnit, 6)
      ]
    )
  );

  Test({LINENUM}44090, 'frequencies(ComplexZeroMatrix(1000))',
    asoarrex(
      [
        freq(TASC(0), 1000000)
      ]
    )
  );

  Test({LINENUM}44098, 'frequencies(ComplexMatrix(IdentityMatrix(1000)))',
    asoarrex(
      [
        freq(TASC(1), 1000),
        freq(TASC(0), 1000000 - 1000)
      ]
    )
  );

  Test({LINENUM}44107, 'frequencies(CirculantMatrix(❨i, 2, 3, 4, 5, 6, 7, 8, 9❩))',
    asoarrex(
      [
        freq(ImaginaryUnit, 9),
        freq(2, 9),
        freq(3, 9),
        freq(4, 9),
        freq(5, 9),
        freq(6, 9),
        freq(7, 9),
        freq(8, 9),
        freq(9, 9)
      ]
    )
  );

  Test({LINENUM}44123, 'frequencies(ToeplitzMatrix(❨i, 2, 3, 4, 5, 6, 7, 8, 9❩, ❨i, 0, 0, 0, 0, 0, 0, 0, 0❩))',
    asoarrex(
      [
        freq(ImaginaryUnit, 9),
        freq(2, 8),
        freq(3, 7),
        freq(4, 6),
        freq(5, 5),
        freq(6, 4),
        freq(7, 3),
        freq(8, 2),
        freq(9, 1),
        freq(0, 8+7+6+5+4+3+2+1)
      ]
    )
  );

  Test({LINENUM}44140, 'frequencies(ComplexMatrix(❨❨21❩❩))',
    asoarrex(
      [
        freq(TASC(21), 1)
      ]
    )
  );

  Test({LINENUM}44148, 'frequencies(ComplexMatrix(DebugObject("empty matrix")))',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}44155, 'frequencies(''(5, 3, 2, 0, 1, 4, 5, 7, 8, 9, 6, 5, 2, 3, 2, 1, 4, 5, 2, 0, 7, 2, 5, 8, 9, 6, 2, 1, 4, 5, 3, 2, 4, i − i, 5, 2, 0.0, 1, 4, 1, 0, 1/2 − 1/2, 2, 1, 0, 1, 2, 0, 1, 0, 1, 0, 1))',
    asoarrex(
      [
        freq(5, 7),
        freq(3, 3),
        freq(2, 10),
        freq(0, 10),
        freq(1, 10),
        freq(4, 5),
        freq(7, 2),
        freq(8, 2),
        freq(9, 2),
        freq(6, 2)
      ]
    )
  );

  Test({LINENUM}44172, 'frequencies(''(1, 1, 1, 1, 1))',
    asoarrex(
      [
        freq(1, 5)
      ]
    )
  );

  Test({LINENUM}44180, 'frequencies(''(1))',
    asoarrex(
      [
        freq(1, 1)
      ]
    )
  );

  Test({LINENUM}44188, 'frequencies(''())',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}44195, 'frequencies(''(1, "cat", 5, 1, 3, 2, "dog", "rat", 1, 2, 3, 1, 2, "dog", 1, 2, 3, "rabbit", "cat", "rat", 1, 2, 3, "guinea pig", "dog", 1, 2, 3, "dog"))',
    asoarrex(
      [
        freq(1, 7),
        freq('cat', 2),
        freq(5, 1),
        freq(3, 5),
        freq(2, 6),
        freq('dog', 4),
        freq('rat', 2),
        freq('rabbit', 1),
        freq('guinea pig', 1)
      ]
    )
  );

  Test({LINENUM}44211, 'frequencies({1, "cat", 5, 1, 3, 2, "dog", "rat", 1, 2, 3, 1, 2, "dog", 1, 2, 3, "rabbit", "cat", "rat", 1, 2, 3, "guinea pig", "dog", 1, 2, 3, "dog"})',
    failure, 'Cannot compute member frequencies in an object of type "set".');

  Test({LINENUM}44214, 'frequencies("Hello, World!")', failure, 'Cannot compute member frequencies in an object of type "string".');

  Test({LINENUM}44216, 'frequencies(words("Hello, World!"))',
    asoarrex(
      [
        freq('Hello', 1),
        freq('World', 1)
      ]
    )
  );

  Test({LINENUM}44225, 'frequencies(characters("Hello, World!"))',
    asoarrex(
      [
        freq('H', 1),
        freq('e', 1),
        freq('l', 3),
        freq('o', 2),
        freq(',', 1),
        freq(' ', 1),
        freq('W', 1),
        freq('r', 1),
        freq('d', 1),
        freq('!', 1)
      ]
    )
  );

  Test({LINENUM}44242, 'frequencies(date())', failure, 'Cannot compute member frequencies in an object of type "typed structure".');
  Test({LINENUM}44243, 'frequencies(true)', failure, 'Cannot compute member frequencies in an object of type "boolean".');
  Test({LINENUM}44244, 'frequencies(123)', failure, 'Cannot compute member frequencies in an object of type "integer".');
  Test({LINENUM}44245, 'frequencies(3.1415)', failure, 'Cannot compute member frequencies in an object of type "real number".');

  Test({LINENUM}44247, 'frequencies()', failure, 'There is no version of this function that can take 0 argument(s).');

  // with epsilon

  Test({LINENUM}44251, 'frequencies(❨1, 5, 3, 2, 5.0001, 1, 4, 8, 4.999, 1.01, 1, 10, 2.1❩)',
    asoarrex(
      [
        freq(1, 3),
        freq(5, 1),
        freq(3, 1),
        freq(2, 1),
        freq(5.0001, 1),
        freq(4, 1),
        freq(8, 1),
        freq(4.999, 1),
        freq(1.01, 1),
        freq(10, 1),
        freq(2.1, 1)
      ]
    )
  );

  Test({LINENUM}44269, 'frequencies(❨1, 5, 3, 2, 5.0001, 1, 4, 8, 4.999, 1.01, 1, 10, 2.1❩, 2E-6)',
    asoarrex(
      [
        freq(1, 3),
        freq(5, 1),
        freq(3, 1),
        freq(2, 1),
        freq(5.0001, 1),
        freq(4, 1),
        freq(8, 1),
        freq(4.999, 1),
        freq(1.01, 1),
        freq(10, 1),
        freq(2.1, 1)
      ]
    )
  );

  Test({LINENUM}44287, 'frequencies(❨1, 5, 3, 2, 5.0001, 1, 4, 8, 4.999, 1.01, 1, 10, 2.1❩, 2E-5)',
    asoarrex(
      [
        freq(1, 3),
        freq(5, 1),
        freq(3, 1),
        freq(2, 1),
        freq(5.0001, 1),
        freq(4, 1),
        freq(8, 1),
        freq(4.999, 1),
        freq(1.01, 1),
        freq(10, 1),
        freq(2.1, 1)
      ]
    )
  );

  Test({LINENUM}44305, 'frequencies(❨1, 5, 3, 2, 5.0001, 1, 4, 8, 4.999, 1.01, 1, 10, 2.1❩, 2E-4)',
    asoarrex(
      [
        freq(1, 3),
        freq(5, 2),
        freq(3, 1),
        freq(2, 1),
        freq(4, 1),
        freq(8, 1),
        freq(4.999, 1),
        freq(1.01, 1),
        freq(10, 1),
        freq(2.1, 1)
      ]
    )
  );

  Test({LINENUM}44322, 'frequencies(❨1, 5, 3, 2, 5.0001, 1, 4, 8, 4.999, 1.01, 1, 10, 2.1❩, 2E-3)',
    asoarrex(
      [
        freq(1, 3),
        freq(5, 3),
        freq(3, 1),
        freq(2, 1),
        freq(4, 1),
        freq(8, 1),
        freq(1.01, 1),
        freq(10, 1),
        freq(2.1, 1)
      ]
    )
  );

  Test({LINENUM}44338, 'frequencies(❨1, 5, 3, 2, 5.0001, 1, 4, 8, 4.999, 1.01, 1, 10, 2.1❩, 2E-2)',
    asoarrex(
      [
        freq(1, 4),
        freq(5, 3),
        freq(3, 1),
        freq(2, 1),
        freq(4, 1),
        freq(8, 1),
        freq(10, 1),
        freq(2.1, 1)
      ]
    )
  );

  Test({LINENUM}44353, 'frequencies(❨1, 5, 3, 2, 5.0001, 1, 4, 8, 4.999, 1.01, 1, 10, 2.1❩, 2E-1)',
    asoarrex(
      [
        freq(1, 4),
        freq(5, 3),
        freq(3, 1),
        freq(2, 2),
        freq(4, 1),
        freq(8, 1),
        freq(10, 1)
      ]
    )
  );

  Test({LINENUM}44367, 'frequencies(❨1, 5, 3, 2, 5.0001, 1, 4, 8, 4.999, 1.01, 1, 10, 2.1❩, 1.5)',
    asoarrex(
      [
        freq(1, 6),
        freq(5, 4),
        freq(3, 1),
        freq(8, 1),
        freq(10, 1)
      ]
    )
  );

  Test({LINENUM}44379, 'frequencies(❨1, 5, 3, 2, 5.0001, 1, 4, 8, 4.999, 1.01, 1, 10, 2.1❩, 10)',
    asoarrex(
      [
        freq(1, 13)
      ]
    )
  );

  Test({LINENUM}44387, 'frequencies(❨1, 1, 1❩, 10)',
    asoarrex(
      [
        freq(1, 3)
      ]
    )
  );

  Test({LINENUM}44395, 'frequencies(ZeroVector(1000), 0.001)',
    asoarrex(
      [
        freq(0, 1000)
      ]
    )
  );

  Test({LINENUM}44403, 'frequencies(BasisVector(1000, 452), 0.001)',
    asoarrex(
      [
        freq(0, 1000 - 1),
        freq(1, 1)
      ]
    )
  );

  Test({LINENUM}44412, 'frequencies(DebugObject("empty vector"), 0.001)',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}44419, 'frequencies(❨5, 1, 1 + i, 3, 5.0001, 0.999, 1 + 0.99⋅i, 1, 5.1❩)',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 2),
        freq(1 + ImaginaryUnit, 1),
        freq(3, 1),
        freq(5.0001, 1),
        freq(0.999, 1),
        freq(1 + 0.99*ImaginaryUnit, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44434, 'frequencies(❨5, 1, 1 + i, 3, 5.0001, 0.999, 1 + 0.99⋅i, 1, 5.1❩, 2E-6)',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 2),
        freq(1 + ImaginaryUnit, 1),
        freq(3, 1),
        freq(5.0001, 1),
        freq(0.999, 1),
        freq(1 + 0.99*ImaginaryUnit, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44449, 'frequencies(❨5, 1, 1 + i, 3, 5.0001, 0.999, 1 + 0.99⋅i, 1, 5.1❩, 2E-5)',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 2),
        freq(1 + ImaginaryUnit, 1),
        freq(3, 1),
        freq(5.0001, 1),
        freq(0.999, 1),
        freq(1 + 0.99*ImaginaryUnit, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44464, 'frequencies(❨5, 1, 1 + i, 3, 5.0001, 0.999, 1 + 0.99⋅i, 1, 5.1❩, 2E-4)',
    asoarrex(
      [
        freq(5, 2),
        freq(1, 2),
        freq(1 + ImaginaryUnit, 1),
        freq(3, 1),
        freq(0.999, 1),
        freq(1 + 0.99*ImaginaryUnit, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44478, 'frequencies(❨5, 1, 1 + i, 3, 5.0001, 0.999, 1 + 0.99⋅i, 1, 5.1❩, 2E-3)',
    asoarrex(
      [
        freq(5, 2),
        freq(1, 3),
        freq(1 + ImaginaryUnit, 1),
        freq(3, 1),
        freq(1 + 0.99*ImaginaryUnit, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44491, 'frequencies(❨5, 1, 1 + i, 3, 5.0001, 0.999, 1 + 0.99⋅i, 1, 5.1❩, 2E-2)',
    asoarrex(
      [
        freq(5, 2),
        freq(1, 3),
        freq(1 + ImaginaryUnit, 2),
        freq(3, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44503, 'frequencies(❨5, 1, 1 + i, 3, 5.0001, 0.999, 1 + 0.99⋅i, 1, 5.1❩, 2E-1)',
    asoarrex(
      [
        freq(5, 3),
        freq(1, 3),
        freq(1 + ImaginaryUnit, 2),
        freq(3, 1)
      ]
    )
  );

  Test({LINENUM}44514, 'frequencies(❨5, 1, 1 + i, 3, 5.0001, 0.999, 1 + 0.99⋅i, 1, 5.1❩, 1.5)',
    asoarrex(
      [
        freq(5, 3),
        freq(1, 5),
        freq(3, 1)
      ]
    )
  );

  Test({LINENUM}44524, 'frequencies(❨5, 1, 1 + i, 3, 5.0001, 0.999, 1 + 0.99⋅i, 1, 5.1❩, 2.5)',
    asoarrex(
      [
        freq(5, 4),
        freq(1, 5)
      ]
    )
  );

  Test({LINENUM}44533, 'frequencies(❨5, 1, 1 + i, 3, 5.0001, 0.999, 1 + 0.99⋅i, 1, 5.1❩, 5)',
    asoarrex(
      [
        freq(5, 9)
      ]
    )
  );

  Test({LINENUM}44541, 'frequencies(❨i, i, i❩, 10)',
    asoarrex(
      [
        freq(ImaginaryUnit, 3)
      ]
    )
  );

  Test({LINENUM}44549, 'frequencies(ComplexZeroVector(1000), 0.001)',
    asoarrex(
      [
        freq(TASC(0), 1000)
      ]
    )
  );

  Test({LINENUM}44557, 'frequencies(ComplexVector(BasisVector(1000, 452)), 0.001)',
    asoarrex(
      [
        freq(TASC(0), 1000 - 1),
        freq(TASC(1), 1)
      ]
    )
  );

  Test({LINENUM}44566, 'frequencies(ComplexVector(DebugObject("empty vector")), 0.001)',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}44573, 'frequencies(❨❨2, 5, 2.001, 1.99❩, ❨5, 5.0001, 5.1, 2❩❩)',
    asoarrex(
      [
        freq(2, 2),
        freq(5, 2),
        freq(2.001, 1),
        freq(1.99, 1),
        freq(5.0001, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44586, 'frequencies(❨❨2, 5, 2.001, 1.99❩, ❨5, 5.0001, 5.1, 2❩❩, 2E-6)',
    asoarrex(
      [
        freq(2, 2),
        freq(5, 2),
        freq(2.001, 1),
        freq(1.99, 1),
        freq(5.0001, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44599, 'frequencies(❨❨2, 5, 2.001, 1.99❩, ❨5, 5.0001, 5.1, 2❩❩, 2E-5)',
    asoarrex(
      [
        freq(2, 2),
        freq(5, 2),
        freq(2.001, 1),
        freq(1.99, 1),
        freq(5.0001, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44612, 'frequencies(❨❨2, 5, 2.001, 1.99❩, ❨5, 5.0001, 5.1, 2❩❩, 2E-4)',
    asoarrex(
      [
        freq(2, 2),
        freq(5, 3),
        freq(2.001, 1),
        freq(1.99, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44624, 'frequencies(❨❨2, 5, 2.001, 1.99❩, ❨5, 5.0001, 5.1, 2❩❩, 2E-3)',
    asoarrex(
      [
        freq(2, 3),
        freq(5, 3),
        freq(1.99, 1),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44635, 'frequencies(❨❨2, 5, 2.001, 1.99❩, ❨5, 5.0001, 5.1, 2❩❩, 2E-2)',
    asoarrex(
      [
        freq(2, 4),
        freq(5, 3),
        freq(5.1, 1)
      ]
    )
  );

  Test({LINENUM}44645, 'frequencies(❨❨2, 5, 2.001, 1.99❩, ❨5, 5.0001, 5.1, 2❩❩, 2E-1)',
    asoarrex(
      [
        freq(2, 4),
        freq(5, 4)
      ]
    )
  );

  Test({LINENUM}44654, 'frequencies(❨❨2, 5, 2.001, 1.99❩, ❨5, 5.0001, 5.1, 2❩❩, 3.5)',
    asoarrex(
      [
        freq(2, 8)
      ]
    )
  );

  Test({LINENUM}44662, 'frequencies(ZeroMatrix(100), 0.001)',
    asoarrex(
      [
        freq(0, 10000)
      ]
    )
  );

  Test({LINENUM}44670, 'frequencies(IdentityMatrix(100), 0.001)',
    asoarrex(
      [
        freq(1, 100),
        freq(0, 10000 - 100)
      ]
    )
  );

  Test({LINENUM}44679, 'frequencies(CirculantMatrix(❨1, 2, 3, 4, 5, 6, 7, 8, 9❩), 0.5)',
    asoarrex(
      [
        freq(1, 9),
        freq(2, 9),
        freq(3, 9),
        freq(4, 9),
        freq(5, 9),
        freq(6, 9),
        freq(7, 9),
        freq(8, 9),
        freq(9, 9)
      ]
    )
  );

  Test({LINENUM}44695, 'frequencies(CirculantMatrix(❨1, 2, 3, 4, 5, 6, 7, 8, 9❩), 1.2)',
    asoarrex(
      [
        freq(1, 18),
        freq(3, 18),
        freq(5, 18),
        freq(7, 18),
        freq(9, 9)
      ]
    )
  );

  Test({LINENUM}44707, 'frequencies(ToeplitzMatrix(❨1, 2, 3, 4, 5, 6, 7, 8, 9❩, ❨1, 0, 0, 0, 0, 0, 0, 0, 0❩), 0.5)',
    asoarrex(
      [
        freq(1, 9),
        freq(2, 8),
        freq(3, 7),
        freq(4, 6),
        freq(5, 5),
        freq(6, 4),
        freq(7, 3),
        freq(8, 2),
        freq(9, 1),
        freq(0, 8+7+6+5+4+3+2+1)
      ]
    )
  );

  Test({LINENUM}44724, 'frequencies(ToeplitzMatrix(❨1, 2, 3, 4, 5, 6, 7, 8, 9❩, ❨1, 0, 0, 0, 0, 0, 0, 0, 0❩), 1.5)',
    asoarrex(
      [
        freq(1, 9 + 8 + 8+7+6+5+4+3+2+1),
        freq(3, 7 + 6),
        freq(5, 5 + 4),
        freq(7, 3 + 2),
        freq(9, 1)
      ]
    )
  );

  Test({LINENUM}44736, 'frequencies(DebugObject("empty matrix"), 0.001)',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}44743, 'frequencies(❨❨4, i, 1 + i, 5❩, ❨3.999, 1 + 0.99⋅i, 5.0001, 4❩❩)',
    asoarrex(
      [
        freq(4, 2),
        freq(ImaginaryUnit, 1),
        freq(1 + ImaginaryUnit, 1),
        freq(5, 1),
        freq(3.999, 1),
        freq(1 + 0.99*ImaginaryUnit, 1),
        freq(5.0001, 1)
      ]
    )
  );

  Test({LINENUM}44757, 'frequencies(❨❨4, i, 1 + i, 5❩, ❨3.999, 1 + 0.99⋅i, 5.0001, 4❩❩, 2E-6)',
    asoarrex(
      [
        freq(4, 2),
        freq(ImaginaryUnit, 1),
        freq(1 + ImaginaryUnit, 1),
        freq(5, 1),
        freq(3.999, 1),
        freq(1 + 0.99*ImaginaryUnit, 1),
        freq(5.0001, 1)
      ]
    )
  );

  Test({LINENUM}44771, 'frequencies(❨❨4, i, 1 + i, 5❩, ❨3.999, 1 + 0.99⋅i, 5.0001, 4❩❩, 2E-5)',
    asoarrex(
      [
        freq(4, 2),
        freq(ImaginaryUnit, 1),
        freq(1 + ImaginaryUnit, 1),
        freq(5, 1),
        freq(3.999, 1),
        freq(1 + 0.99*ImaginaryUnit, 1),
        freq(5.0001, 1)
      ]
    )
  );

  Test({LINENUM}44785, 'frequencies(❨❨4, i, 1 + i, 5❩, ❨3.999, 1 + 0.99⋅i, 5.0001, 4❩❩, 2E-4)',
    asoarrex(
      [
        freq(4, 2),
        freq(ImaginaryUnit, 1),
        freq(1 + ImaginaryUnit, 1),
        freq(5, 2),
        freq(3.999, 1),
        freq(1 + 0.99*ImaginaryUnit, 1)
      ]
    )
  );

  Test({LINENUM}44798, 'frequencies(❨❨4, i, 1 + i, 5❩, ❨3.999, 1 + 0.99⋅i, 5.0001, 4❩❩, 2E-3)',
    asoarrex(
      [
        freq(4, 3),
        freq(ImaginaryUnit, 1),
        freq(1 + ImaginaryUnit, 1),
        freq(5, 2),
        freq(1 + 0.99*ImaginaryUnit, 1)
      ]
    )
  );

  Test({LINENUM}44810, 'frequencies(❨❨4, i, 1 + i, 5❩, ❨3.999, 1 + 0.99⋅i, 5.0001, 4❩❩, 2E-2)',
    asoarrex(
      [
        freq(4, 3),
        freq(ImaginaryUnit, 1),
        freq(1 + ImaginaryUnit, 2),
        freq(5, 2)
      ]
    )
  );

  Test({LINENUM}44821, 'frequencies(❨❨4, i, 1 + i, 5❩, ❨3.999, 1 + 0.99⋅i, 5.0001, 4❩❩, 2E-1)',
    asoarrex(
      [
        freq(4, 3),
        freq(ImaginaryUnit, 1),
        freq(1 + ImaginaryUnit, 2),
        freq(5, 2)
      ]
    )
  );

  Test({LINENUM}44832, 'frequencies(❨❨4, i, 1 + i, 5❩, ❨3.999, 1 + 0.99⋅i, 5.0001, 4❩❩, 1.5)',
    asoarrex(
      [
        freq(4, 5),
        freq(ImaginaryUnit, 3)
      ]
    )
  );

  Test({LINENUM}44841, 'frequencies(❨❨4, i, 1 + i, 5❩, ❨3.999, 1 + 0.99⋅i, 5.0001, 4❩❩, 5.5)',
    asoarrex(
      [
        freq(4, 8)
      ]
    )
  );

  Test({LINENUM}44849, 'frequencies(ComplexZeroMatrix(100), 0.001)',
    asoarrex(
      [
        freq(0, 10000)
      ]
    )
  );

  Test({LINENUM}44857, 'frequencies(ComplexMatrix(IdentityMatrix(100)), 0.001)',
    asoarrex(
      [
        freq(1, 100),
        freq(0, 10000 - 100)
      ]
    )
  );

  Test({LINENUM}44866, 'frequencies(''(5, 2, "rat", 2, "dog", 1.9999, "cat", "dog", 2.001, "rat", "rabbit", 5.01, "rat", 5.1, 10, "rat", 4.7))',
    asoarrex(
      [
        freq(5, 1),
        freq(2, 2),
        freq('rat', 4),
        freq('dog', 2),
        freq(1.9999, 1),
        freq('cat', 1),
        freq(2.001, 1),
        freq('rabbit', 1),
        freq(5.01, 1),
        freq(5.1, 1),
        freq(10, 1),
        freq(4.7, 1)
      ]
    )
  );

  Test({LINENUM}44885, 'frequencies(''(5, 2, "rat", 2, "dog", 1.9999, "cat", "dog", 2.001, "rat", "rabbit", 5.01, "rat", 5.1, 10, "rat", 4.7), 2E-6)',
    asoarrex(
      [
        freq(5, 1),
        freq(2, 2),
        freq('rat', 4),
        freq('dog', 2),
        freq(1.9999, 1),
        freq('cat', 1),
        freq(2.001, 1),
        freq('rabbit', 1),
        freq(5.01, 1),
        freq(5.1, 1),
        freq(10, 1),
        freq(4.7, 1)
      ]
    )
  );

  Test({LINENUM}44904, 'frequencies(''(5, 2, "rat", 2, "dog", 1.9999, "cat", "dog", 2.001, "rat", "rabbit", 5.01, "rat", 5.1, 10, "rat", 4.7), 2E-5)',
    asoarrex(
      [
        freq(5, 1),
        freq(2, 2),
        freq('rat', 4),
        freq('dog', 2),
        freq(1.9999, 1),
        freq('cat', 1),
        freq(2.001, 1),
        freq('rabbit', 1),
        freq(5.01, 1),
        freq(5.1, 1),
        freq(10, 1),
        freq(4.7, 1)
      ]
    )
  );

  Test({LINENUM}44923, 'frequencies(''(5, 2, "rat", 2, "dog", 1.9999, "cat", "dog", 2.001, "rat", "rabbit", 5.01, "rat", 5.1, 10, "rat", 4.7), 2E-4)',
    asoarrex(
      [
        freq(5, 1),
        freq(2, 3),
        freq('rat', 4),
        freq('dog', 2),
        freq('cat', 1),
        freq(2.001, 1),
        freq('rabbit', 1),
        freq(5.01, 1),
        freq(5.1, 1),
        freq(10, 1),
        freq(4.7, 1)
      ]
    )
  );

  Test({LINENUM}44941, 'frequencies(''(5, 2, "rat", 2, "dog", 1.9999, "cat", "dog", 2.001, "rat", "rabbit", 5.01, "rat", 5.1, 10, "rat", 4.7), 2E-3)',
    asoarrex(
      [
        freq(5, 1),
        freq(2, 4),
        freq('rat', 4),
        freq('dog', 2),
        freq('cat', 1),
        freq('rabbit', 1),
        freq(5.01, 1),
        freq(5.1, 1),
        freq(10, 1),
        freq(4.7, 1)
      ]
    )
  );

  Test({LINENUM}44958, 'frequencies(''(5, 2, "rat", 2, "dog", 1.9999, "cat", "dog", 2.001, "rat", "rabbit", 5.01, "rat", 5.1, 10, "rat", 4.7), 2E-2)',
    asoarrex(
      [
        freq(5, 2),
        freq(2, 4),
        freq('rat', 4),
        freq('dog', 2),
        freq('cat', 1),
        freq('rabbit', 1),
        freq(5.1, 1),
        freq(10, 1),
        freq(4.7, 1)
      ]
    )
  );

  Test({LINENUM}44974, 'frequencies(''(5, 2, "rat", 2, "dog", 1.9999, "cat", "dog", 2.001, "rat", "rabbit", 5.01, "rat", 5.1, 10, "rat", 4.7), 2E-1)',
    asoarrex(
      [
        freq(5, 3),
        freq(2, 4),
        freq('rat', 4),
        freq('dog', 2),
        freq('cat', 1),
        freq('rabbit', 1),
        freq(10, 1),
        freq(4.7, 1)
      ]
    )
  );

  Test({LINENUM}44989, 'frequencies(''(5, 2, "rat", 2, "dog", 1.9999, "cat", "dog", 2.001, "rat", "rabbit", 5.01, "rat", 5.1, 10, "rat", 4.7), 4E-1)',
    asoarrex(
      [
        freq(5, 4),
        freq(2, 4),
        freq('rat', 4),
        freq('dog', 2),
        freq('cat', 1),
        freq('rabbit', 1),
        freq(10, 1)
      ]
    )
  );

  Test({LINENUM}45003, 'frequencies(''(5, 2, "rat", 2, "dog", 1.9999, "cat", "dog", 2.001, "rat", "rabbit", 5.01, "rat", 5.1, 10, "rat", 4.7), 10)',
    asoarrex(
      [
        freq(5, 9),
        freq('rat', 4),
        freq('dog', 2),
        freq('cat', 1),
        freq('rabbit', 1)
      ]
    )
  );

  Test({LINENUM}45015, 'frequencies(''(5, 2, "rat", 2, "dog", 1.9999, "cat", "dog", 2.001, "rat", "rabbit", 5.01, "rat", 5.1, 10, "rat", 4.7), 1E100)',
    asoarrex(
      [
        freq(5, 9),
        freq('rat', 4),
        freq('dog', 2),
        freq('cat', 1),
        freq('rabbit', 1)
      ]
    )
  );

  Test({LINENUM}45027, 'frequencies(''(5, 5, 5), 0.1)',
    asoarrex(
      [
        freq(5, 3)
      ]
    )
  );

  Test({LINENUM}45035, 'frequencies(''(), 0.1)',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}45042, 'frequencies({5, 1, 2}, 1E-6)', failure,
    'Cannot compute member frequencies in an object of type "set".');

  Test({LINENUM}45045, 'frequencies("nargle", 1E-6)', failure,
    'Cannot compute member frequencies in an object of type "string".');

  Test({LINENUM}45048, 'frequencies(394, 1E-6)', failure,
    'Cannot compute member frequencies in an object of type "integer".');

  // adjacent (collapse sequencies)

  Test({LINENUM}45053, 'collapse(❨5, 3, 2, 2, 1, 0, 2, 2, 2, 0, 4, 1, 2, 1, 1, 0, 3, 6❩)',
    asoarrex(
      [
        freq(5, 1),
        freq(3, 1),
        freq(2, 2),
        freq(1, 1),
        freq(0, 1),
        freq(2, 3),
        freq(0, 1),
        freq(4, 1),
        freq(1, 1),
        freq(2, 1),
        freq(1, 2),
        freq(0, 1),
        freq(3, 1),
        freq(6, 1)
      ]
    )
  );

  Test({LINENUM}45074, 'collapse(❨5, 5, 5, 5, 5, 5, 2, 2, 2, 0, 4, 1, 2, 1, 1, 0, 3, 3❩)',
    asoarrex(
      [
        freq(5, 6),
        freq(2, 3),
        freq(0, 1),
        freq(4, 1),
        freq(1, 1),
        freq(2, 1),
        freq(1, 2),
        freq(0, 1),
        freq(3, 2)
      ]
    )
  );

  Test({LINENUM}45090, 'collapse(❨5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2❩)',
    asoarrex(
      [
        freq(5, 12),
        freq(2, 6)
      ]
    )
  );

  Test({LINENUM}45099, 'collapse(❨5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5❩)',
    asoarrex(
      [
        freq(5, 12)
      ]
    )
  );

  Test({LINENUM}45107, 'collapse(❨5❩)',
    asoarrex(
      [
        freq(5, 1)
      ]
    )
  );

  Test({LINENUM}45115, 'collapse(ZeroVector(1000000))',
    asoarrex(
      [
        freq(0, 1000000)
      ]
    )
  );

  Test({LINENUM}45123, 'collapse(BasisVector(1000000, 654321))',
    asoarrex(
      [
        freq(0, 654320),
        freq(1, 1),
        freq(0, 1000000 - 654320 - 1)
      ]
    )
  );

  Test({LINENUM}45133, 'collapse(DebugObject("empty vector"))',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}45140, 'collapse(❨5, 3, i, i, 1, 0, 2, 2, 2, 0, 4, 1, 2, 1, 1, 0, 3, 6❩)',
    asoarrex(
      [
        freq(5, 1),
        freq(3, 1),
        freq(ImaginaryUnit, 2),
        freq(1, 1),
        freq(0, 1),
        freq(2, 3),
        freq(0, 1),
        freq(4, 1),
        freq(1, 1),
        freq(2, 1),
        freq(1, 2),
        freq(0, 1),
        freq(3, 1),
        freq(6, 1)
      ]
    )
  );

  Test({LINENUM}45161, 'collapse(❨5, 5, 5, 5, 5, 5, i, i, i, 0, 4, 1, 2, 1, 1, 0, 3, 3❩)',
    asoarrex(
      [
        freq(5, 6),
        freq(ImaginaryUnit, 3),
        freq(0, 1),
        freq(4, 1),
        freq(1, 1),
        freq(2, 1),
        freq(1, 2),
        freq(0, 1),
        freq(3, 2)
      ]
    )
  );

  Test({LINENUM}45177, 'collapse(❨5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, i, i, i, i, i, i❩)',
    asoarrex(
      [
        freq(5, 12),
        freq(ImaginaryUnit, 6)
      ]
    )
  );

  Test({LINENUM}45186, 'collapse(❨i, i, i, i, i, i, i, i, i, i, i, i❩)',
    asoarrex(
      [
        freq(ImaginaryUnit, 12)
      ]
    )
  );

  Test({LINENUM}45194, 'collapse(❨i❩)',
    asoarrex(
      [
        freq(ImaginaryUnit, 1)
      ]
    )
  );

  Test({LINENUM}45202, 'collapse(ComplexZeroVector(1000000))',
    asoarrex(
      [
        freq(TASC(0), 1000000)
      ]
    )
  );

  Test({LINENUM}45210, 'collapse(ComplexVector(BasisVector(1000000, 654321)))',
    asoarrex(
      [
        freq(0, 654320),
        freq(1, 1),
        freq(0, 1000000 - 654320 - 1)
      ]
    )
  );

  Test({LINENUM}45220, 'collapse(ComplexVector(DebugObject("empty vector")))',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}45227, 'collapse(❨❨3, 2, 2, 5❩, ❨5, 5, 5, 1❩❩)', failure,
    'Cannot compute adjacent member counts in an object of type "real matrix".');

  Test({LINENUM}45230, 'collapse(❨❨3, 2, 2, 5❩, ❨5, 5, 5, i❩❩)', failure,
    'Cannot compute adjacent member counts in an object of type "complex matrix".');

  Test({LINENUM}45233, 'collapse(''(3, 2, 2, 2, "rat", "cat", "dog", "dog", "cat", 6, 2, 1, true, true, false, true, true, true, true, 0, 1, 4, 4, 1, 1, 1))',
    asoarrex(
      [
        freq(3, 1),
        freq(2, 3),
        freq('rat', 1),
        freq('cat', 1),
        freq('dog', 2),
        freq('cat', 1),
        freq(6, 1),
        freq(2, 1),
        freq(1, 1),
        freq(True, 2),
        freq(False, 1),
        freq(True, 4),
        freq(0, 1),
        freq(1, 1),
        freq(4, 2),
        freq(1, 3)
      ]
    )
  );

  Test({LINENUM}45256, 'collapse(''(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, "rat", "cat", "dog", "dog", "cat", 6, 2, 1, true, true, false, true, true, true, true, 0, 1, 4, 4, 1, 1, 1))',
    asoarrex(
      [
        freq(3, 12),
        freq(2, 3),
        freq('rat', 1),
        freq('cat', 1),
        freq('dog', 2),
        freq('cat', 1),
        freq(6, 1),
        freq(2, 1),
        freq(1, 1),
        freq(True, 2),
        freq(False, 1),
        freq(True, 4),
        freq(0, 1),
        freq(1, 1),
        freq(4, 2),
        freq(1, 3)
      ]
    )
  );

  Test({LINENUM}45279, 'collapse(''(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2))',
    asoarrex(
      [
        freq(3, 12),
        freq(2, 3)
      ]
    )
  );

  Test({LINENUM}45288, 'collapse(''(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3))',
    asoarrex(
      [
        freq(3, 12)
      ]
    )
  );

  Test({LINENUM}45296, 'collapse(''(3, 3))',
    asoarrex(
      [
        freq(3, 2)
      ]
    )
  );

  Test({LINENUM}45304, 'collapse(''(3))',
    asoarrex(
      [
        freq(3, 1)
      ]
    )
  );

  Test({LINENUM}45312, 'collapse(''())',
    asoarrex(
      [
      ]
    )
  );

  // adjacent (collapse sequencies) with epsilon

  Test({LINENUM}45321, 'collapse(❨6, 5, 2, 4, 4, 4.001, 7, 6, 5, 4.9999, 5.01, 2❩)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(4, 2),
        freq(4.001, 1),
        freq(7, 1),
        freq(6, 1),
        freq(5, 1),
        freq(4.9999, 1),
        freq(5.01, 1),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45339, 'collapse(❨6, 5, 2, 4, 4, 4.001, 7, 6, 5, 4.9999, 5.01, 2❩, 2E-6)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(4, 2),
        freq(4.001, 1),
        freq(7, 1),
        freq(6, 1),
        freq(5, 1),
        freq(4.9999, 1),
        freq(5.01, 1),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45357, 'collapse(❨6, 5, 2, 4, 4, 4.001, 7, 6, 5, 4.9999, 5.01, 2❩, 2E-5)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(4, 2),
        freq(4.001, 1),
        freq(7, 1),
        freq(6, 1),
        freq(5, 1),
        freq(4.9999, 1),
        freq(5.01, 1),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45375, 'collapse(❨6, 5, 2, 4, 4, 4.001, 7, 6, 5, 4.9999, 5.01, 2❩, 2E-4)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(4, 2),
        freq(4.001, 1),
        freq(7, 1),
        freq(6, 1),
        freq(5, 2),
        freq(5.01, 1),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45392, 'collapse(❨6, 5, 2, 4, 4, 4.001, 7, 6, 5, 4.9999, 5.01, 2❩, 2E-3)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(4, 3),
        freq(7, 1),
        freq(6, 1),
        freq(5, 2),
        freq(5.01, 1),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45408, 'collapse(❨6, 5, 2, 4, 4, 4.001, 7, 6, 5, 4.9999, 5.01, 2❩, 2E-2)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(4, 3),
        freq(7, 1),
        freq(6, 1),
        freq(5, 3),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45423, 'collapse(❨6, 5, 2, 4, 4, 4.001, 7, 6, 5, 4.9999, 5.01, 2❩, 1.5)',
    asoarrex(
      [
        freq(6, 2),
        freq(2, 1),
        freq(4, 3),
        freq(7, 2),
        freq(5, 3),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45436, 'collapse(❨6, 5, 2, 4, 4, 4.001, 7, 6, 5, 4.9999, 5.01, 2❩, 5.5)',
    asoarrex(
      [
        freq(6, 12)
      ]
    )
  );

  Test({LINENUM}45444, 'collapse(ZeroVector(1000000), 0.01)',
    asoarrex(
      [
        freq(0, 1000000)
      ]
    )
  );

  Test({LINENUM}45452, 'collapse(BasisVector(1000000, 654321), 0.01)',
    asoarrex(
      [
        freq(0, 654320),
        freq(1, 1),
        freq(0, 1000000 - 654320 - 1)
      ]
    )
  );

  Test({LINENUM}45462, 'collapse(DebugObject("empty vector"), 0.01)',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}45469, 'collapse(❨6, 5, 2, i, i, 1.001⋅i, 7, 6, 5, 4.9999, 5.01, 2❩)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(ImaginaryUnit, 2),
        freq(Imaginaryunit * 1.001, 1),
        freq(7, 1),
        freq(6, 1),
        freq(5, 1),
        freq(4.9999, 1),
        freq(5.01, 1),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45487, 'collapse(❨6, 5, 2, i, i, 1.001⋅i, 7, 6, 5, 4.9999, 5.01, 2❩, 2E-6)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(ImaginaryUnit, 2),
        freq(Imaginaryunit * 1.001, 1),
        freq(7, 1),
        freq(6, 1),
        freq(5, 1),
        freq(4.9999, 1),
        freq(5.01, 1),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45505, 'collapse(❨6, 5, 2, i, i, 1.001⋅i, 7, 6, 5, 4.9999, 5.01, 2❩, 2E-5)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(ImaginaryUnit, 2),
        freq(Imaginaryunit * 1.001, 1),
        freq(7, 1),
        freq(6, 1),
        freq(5, 1),
        freq(4.9999, 1),
        freq(5.01, 1),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45523, 'collapse(❨6, 5, 2, i, i, 1.001⋅i, 7, 6, 5, 4.9999, 5.01, 2❩, 2E-4)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(ImaginaryUnit, 2),
        freq(Imaginaryunit * 1.001, 1),
        freq(7, 1),
        freq(6, 1),
        freq(5, 2),
        freq(5.01, 1),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45540, 'collapse(❨6, 5, 2, i, i, 1.001⋅i, 7, 6, 5, 4.9999, 5.01, 2❩, 2E-3)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(ImaginaryUnit, 3),
        freq(7, 1),
        freq(6, 1),
        freq(5, 2),
        freq(5.01, 1),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45556, 'collapse(❨6, 5, 2, i, i, 1.001⋅i, 7, 6, 5, 4.9999, 5.01, 2❩, 2E-2)',
    asoarrex(
      [
        freq(6, 1),
        freq(5, 1),
        freq(2, 1),
        freq(ImaginaryUnit, 3),
        freq(7, 1),
        freq(6, 1),
        freq(5, 3),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45571, 'collapse(❨6, 5, 2, i, i, 1.001⋅i, 7, 6, 5, 4.9999, 5.01, 2❩, 1.5)',
    asoarrex(
      [
        freq(6, 2),
        freq(2, 1),
        freq(ImaginaryUnit, 3),
        freq(7, 2),
        freq(5, 3),
        freq(2, 1)
      ]
    )
  );

  Test({LINENUM}45584, 'collapse(❨6, 5, 2, i, i, 1.001⋅i, 7, 6, 5, 4.9999, 5.01, 2❩, 5.5)',
    asoarrex(
      [
        freq(6, 3),
        freq(ImaginaryUnit, 3),
        freq(7, 6)
      ]
    )
  );

  Test({LINENUM}45594, 'collapse(❨6, 5, 2, i, i, 1.001⋅i, 7, 6, 5, 4.9999, 5.01, 2❩, 6.5)',
    asoarrex(
      [
        freq(6, 12)
      ]
    )
  );

  Test({LINENUM}45602, 'collapse(ComplexZeroVector(1000000), 0.01)',
    asoarrex(
      [
        freq(0, 1000000)
      ]
    )
  );

  Test({LINENUM}45610, 'collapse(ComplexVector(BasisVector(1000000, 654321)), 0.01)',
    asoarrex(
      [
        freq(0, 654320),
        freq(1, 1),
        freq(0, 1000000 - 654320 - 1)
      ]
    )
  );

  Test({LINENUM}45620, 'collapse(ComplexVector(DebugObject("empty vector")), 0.01)',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}45627, 'collapse(❨❨3, 2, 2, 5❩, ❨5, 5, 5, 1❩❩, 0.001)', failure,
    'Cannot compute adjacent member counts in an object of type "real matrix".');

  Test({LINENUM}45630, 'collapse(❨❨3, 2, 2, 5❩, ❨5, 5, 5, i❩❩, 0.001)', failure,
    'Cannot compute adjacent member counts in an object of type "complex matrix".');

  Test({LINENUM}45633, 'collapse(''(5, 1, 2, 2, 2.0001, "rat", "rat", "dog", 6, 7, 6.9))',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 1),
        freq(2, 2),
        freq(2.0001, 1),
        freq('rat', 2),
        freq('dog', 1),
        freq(6, 1),
        freq(7, 1),
        freq(6.9, 1)
      ]
    )
  );

  Test({LINENUM}45649, 'collapse(''(5, 1, 2, 2, 2.0001, "rat", "rat", "dog", 6, 7, 6.9), 2E-6)',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 1),
        freq(2, 2),
        freq(2.0001, 1),
        freq('rat', 2),
        freq('dog', 1),
        freq(6, 1),
        freq(7, 1),
        freq(6.9, 1)
      ]
    )
  );

  Test({LINENUM}45665, 'collapse(''(5, 1, 2, 2, 2.0001, "rat", "rat", "dog", 6, 7, 6.9), 2E-5)',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 1),
        freq(2, 2),
        freq(2.0001, 1),
        freq('rat', 2),
        freq('dog', 1),
        freq(6, 1),
        freq(7, 1),
        freq(6.9, 1)
      ]
    )
  );

  Test({LINENUM}45681, 'collapse(''(5, 1, 2, 2, 2.0001, "rat", "rat", "dog", 6, 7, 6.9), 2E-4)',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 1),
        freq(2, 3),
        freq('rat', 2),
        freq('dog', 1),
        freq(6, 1),
        freq(7, 1),
        freq(6.9, 1)
      ]
    )
  );

  Test({LINENUM}45696, 'collapse(''(5, 1, 2, 2, 2.0001, "rat", "rat", "dog", 6, 7, 6.9), 2E-3)',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 1),
        freq(2, 3),
        freq('rat', 2),
        freq('dog', 1),
        freq(6, 1),
        freq(7, 1),
        freq(6.9, 1)
      ]
    )
  );

  Test({LINENUM}45711, 'collapse(''(5, 1, 2, 2, 2.0001, "rat", "rat", "dog", 6, 7, 6.9), 2E-2)',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 1),
        freq(2, 3),
        freq('rat', 2),
        freq('dog', 1),
        freq(6, 1),
        freq(7, 1),
        freq(6.9, 1)
      ]
    )
  );

  Test({LINENUM}45726, 'collapse(''(5, 1, 2, 2, 2.0001, "rat", "rat", "dog", 6, 7, 6.9), 2E-1)',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 1),
        freq(2, 3),
        freq('rat', 2),
        freq('dog', 1),
        freq(6, 1),
        freq(7, 2)
      ]
    )
  );

  Test({LINENUM}45740, 'collapse(''(5, 1, 2, 2, 2.0001, "rat", "rat", "dog", 6, 7, 6.9), 2.5)',
    asoarrex(
      [
        freq(5, 1),
        freq(1, 4),
        freq('rat', 2),
        freq('dog', 1),
        freq(6, 3)
      ]
    )
  );

  Test({LINENUM}45752, 'collapse(''(5, 1, 2, 2, 2.0001, "rat", "rat", "dog", 6, 7, 6.9), 5.5)',
    asoarrex(
      [
        freq(5, 5),
        freq('rat', 2),
        freq('dog', 1),
        freq(6, 3)
      ]
    )
  );

  Test({LINENUM}45763, 'collapse(''(5, 1, 2, 2, 2.0001, "rat", "rat", "dog", 6, 7, 6.9), 1000000.001)',
    asoarrex(
      [
        freq(5, 5),
        freq('rat', 2),
        freq('dog', 1),
        freq(6, 3)
      ]
    )
  );

  Test({LINENUM}45774, 'collapse(''(5, 5, 5, 5.0001, 5.001, 5.01, 5.1, 5))',
    asoarrex(
      [
        freq(5, 3),
        freq(5.0001, 1),
        freq(5.001, 1),
        freq(5.01, 1),
        freq(5.1, 1),
        freq(5, 1)
      ]
    )
  );

  Test({LINENUM}45787, 'collapse(''(5, 5, 5, 5.0001, 5.001, 5.01, 5.1, 5), 2E-6)',
    asoarrex(
      [
        freq(5, 3),
        freq(5.0001, 1),
        freq(5.001, 1),
        freq(5.01, 1),
        freq(5.1, 1),
        freq(5, 1)
      ]
    )
  );

  Test({LINENUM}45800, 'collapse(''(5, 5, 5, 5.0001, 5.001, 5.01, 5.1, 5), 2E-5)',
    asoarrex(
      [
        freq(5, 3),
        freq(5.0001, 1),
        freq(5.001, 1),
        freq(5.01, 1),
        freq(5.1, 1),
        freq(5, 1)
      ]
    )
  );

  Test({LINENUM}45813, 'collapse(''(5, 5, 5, 5.0001, 5.001, 5.01, 5.1, 5), 2E-4)',
    asoarrex(
      [
        freq(5, 4),
        freq(5.001, 1),
        freq(5.01, 1),
        freq(5.1, 1),
        freq(5, 1)
      ]
    )
  );

  Test({LINENUM}45825, 'collapse(''(5, 5, 5, 5.0001, 5.001, 5.01, 5.1, 5), 2E-3)',
    asoarrex(
      [
        freq(5, 5),
        freq(5.01, 1),
        freq(5.1, 1),
        freq(5, 1)
      ]
    )
  );

  Test({LINENUM}45836, 'collapse(''(5, 5, 5, 5.0001, 5.001, 5.01, 5.1, 5), 2E-2)',
    asoarrex(
      [
        freq(5, 6),
        freq(5.1, 1),
        freq(5, 1)
      ]
    )
  );

  Test({LINENUM}45846, 'collapse(''(5, 5, 5, 5.0001, 5.001, 5.01, 5.1, 5), 2E-1)',
    asoarrex(
      [
        freq(5, 8)
      ]
    )
  );

  Test({LINENUM}45854, 'collapse(''(5, 5, 5, 5.0001, 5.001, 5.01, 5.1, 5), 123)',
    asoarrex(
      [
        freq(5, 8)
      ]
    )
  );

  Test({LINENUM}45862, 'collapse(''(5, 5, 5), 0.1)',
    asoarrex(
      [
        freq(5, 3)
      ]
    )
  );

  Test({LINENUM}45870, 'collapse(''(), 0.1)',
    asoarrex(
      [
      ]
    )
  );

  Test({LINENUM}45877, 'collapse({1, 2, 2, 3}, 0.1)', failure, 'Cannot compute adjacent member counts in an object of type "set".');

  // trick cases

  Test({LINENUM}45881, 'collapse(❨5, 8, 8.05, 7.92❩, 0.1)',
    asoarrex(
      [
        freq(5, 1),
        freq(8, 3)
      ]
    )
  );

  Test({LINENUM}45890, 'collapse(ComplexVector(❨5, 8, 8.05, 7.92❩), 0.1)',
    asoarrex(
      [
        freq(5, 1),
        freq(8, 3)
      ]
    )
  );

  Test({LINENUM}45899, 'collapse(''(5, 8, 8.05, 7.92), 0.1)',
    asoarrex(
      [
        freq(5, 1),
        freq(8, 3)
      ]
    )
  );


  //
  // SequenceList
  //

  Test({LINENUM}45913, 'SequenceList(-100000000)',
    failure, 'A positive integer was expected as argument 1, but "-100000000" was given.');

  Test({LINENUM}45916, 'SequenceList(-1)',
    failure, 'A positive integer was expected as argument 1, but "-1" was given.');

  Test({LINENUM}45919, 'SequenceList(0)',
    failure, 'A positive integer was expected as argument 1, but "0" was given.');

  Test({LINENUM}45922, 'SequenceList(1)',
    intarr([1]));

  Test({LINENUM}45925, 'SequenceList(2)',
    intarr([1, 2]));

  Test({LINENUM}45928, 'SequenceList(3)',
    intarr([1, 2, 3]));

  Test({LINENUM}45931, 'SequenceList(4)',
    intarr([1, 2, 3, 4]));

  Test({LINENUM}45934, 'SequenceList(5)',
    intarr([1, 2, 3, 4, 5]));

  Test({LINENUM}45937, 'SequenceList(5, 8)',
    intarr([5, 6, 7, 8]));

  Test({LINENUM}45940, 'SequenceList(10, 19)',
    intarr([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]));

  Test({LINENUM}45943, 'SequenceList(100, 110)',
    intarr([100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]));

  Test({LINENUM}45946, 'SequenceList(0, 10)',
    intarr([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));

  Test({LINENUM}45949, 'SequenceList(1, 10)',
    intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));

  Test({LINENUM}45952, 'SequenceList(-10, 10)',
    intarr([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));

  Test({LINENUM}45955, 'SequenceList(-99, -90)',
    intarr([-99, -98, -97, -96, -95, -94, -93, -92, -91, -90]));

  Test({LINENUM}45958, 'SequenceList(7, 7)',
    intarr([7]));

  Test({LINENUM}45961, 'SequenceList(0, 0)',
    intarr([0]));

  Test({LINENUM}45964, 'SequenceList(-1, 1)',
    intarr([-1, 0, 1]));

  Test({LINENUM}45967, 'SequenceList(1, 2)',
    intarr([1, 2]));

  Test({LINENUM}45970, 'SequenceList(1, 3)',
    intarr([1, 2, 3]));

  Test({LINENUM}45973, 'SequenceList(5, 2)',
    intarr([5, 4, 3, 2]));

  Test({LINENUM}45976, 'SequenceList(50, 40)',
    intarr([50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40]));

  Test({LINENUM}45979, 'SequenceList(10, 0)',
    intarr([10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]));

  Test({LINENUM}45982, 'SequenceList(10, 1)',
    intarr([10, 9, 8, 7, 6, 5, 4, 3, 2, 1]));

  Test({LINENUM}45985, 'SequenceList(10, -10)',
    intarr([10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]));

  Test({LINENUM}45988, 'SequenceList(0, -10)',
    intarr([0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]));

  Test({LINENUM}45991, 'SequenceList(-1, -10)',
    intarr([-1, -2, -3, -4, -5, -6, -7, -8, -9, -10]));

  Test({LINENUM}45994, 'SequenceList(-1, -2)',
    intarr([-1, -2]));

  Test({LINENUM}45997, 'SequenceList(0, 10, 2)',
    intarr([0, 2, 4, 6, 8, 10]));

  Test({LINENUM}46000, 'SequenceList(0, 10, 3)',
    intarr([0, 3, 6, 9]));

  Test({LINENUM}46003, 'SequenceList(0, 10, 4)',
    intarr([0, 4, 8]));

  Test({LINENUM}46006, 'SequenceList(0, 10, 5)',
    intarr([0, 5, 10]));

  Test({LINENUM}46009, 'SequenceList(0, 10, 6)',
    intarr([0, 6]));

  Test({LINENUM}46012, 'SequenceList(0, 10, 7)',
    intarr([0, 7]));

  Test({LINENUM}46015, 'SequenceList(0, 10, 8)',
    intarr([0, 8]));

  Test({LINENUM}46018, 'SequenceList(0, 10, 9)',
    intarr([0, 9]));

  Test({LINENUM}46021, 'SequenceList(0, 10, 10)',
    intarr([0, 10]));

  Test({LINENUM}46024, 'SequenceList(0, 10, 11)',
    intarr([0]));

  Test({LINENUM}46027, 'SequenceList(0, 10, 12)',
    intarr([0]));

  Test({LINENUM}46030, 'SequenceList(0, 100, 10)',
    intarr([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]));

  Test({LINENUM}46033, 'SequenceList(-20, 100, 10)',
    intarr([-20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]));

  Test({LINENUM}46036, 'SequenceList(-30, 100, 10)',
    intarr([-30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]));

  Test({LINENUM}46039, 'SequenceList(-30, 100, 100000000)',
    intarr([-30]));

  Test({LINENUM}46042, 'SequenceList(10, 0, 2)',
    intarr([10, 8, 6, 4, 2, 0]));

  Test({LINENUM}46045, 'SequenceList(10, -10, 2)',
    intarr([10, 8, 6, 4, 2, 0, -2, -4, -6, -8, -10]));

  Test({LINENUM}46048, 'SequenceList(10, 0, 3)',
    intarr([10, 7, 4, 1]));

  Test({LINENUM}46051, 'SequenceList(10, 0, 5)',
    intarr([10, 5, 0]));

  Test({LINENUM}46054, 'SequenceList(10, 0, 10)',
    intarr([10, 0]));

  Test({LINENUM}46057, 'SequenceList(10, 0, 11)',
    intarr([10]));

  Test({LINENUM}46060, 'SequenceList(123, 123, 123)',
    intarr([123]));

  Test({LINENUM}46063, 'SequenceList(0, 10, 0)',
    failure, 'A positive integer was expected as argument 3, but "0" was given.');

  Test({LINENUM}46066, 'SequenceList(0, 10, -1)',
    failure, 'A positive integer was expected as argument 3, but "-1" was given.');

  // SequenceVector should behave identically

  Test({LINENUM}46071, 'SequenceVector(-100000000)',
    failure, 'A positive integer was expected as argument 1, but "-100000000" was given.');

  Test({LINENUM}46074, 'SequenceVector(-1)',
    failure, 'A positive integer was expected as argument 1, but "-1" was given.');

  Test({LINENUM}46077, 'SequenceVector(0)',
    failure, 'A positive integer was expected as argument 1, but "0" was given.');

  Test({LINENUM}46080, 'SequenceVector(1)',
    [1]);

  Test({LINENUM}46083, 'SequenceVector(2)',
    [1, 2]);

  Test({LINENUM}46086, 'SequenceVector(3)',
    [1, 2, 3]);

  Test({LINENUM}46089, 'SequenceVector(4)',
    [1, 2, 3, 4]);

  Test({LINENUM}46092, 'SequenceVector(5)',
    [1, 2, 3, 4, 5]);

  Test({LINENUM}46095, 'SequenceVector(5, 8)',
    [5, 6, 7, 8]);

  Test({LINENUM}46098, 'SequenceVector(10, 19)',
    [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]);

  Test({LINENUM}46101, 'SequenceVector(100, 110)',
    [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]);

  Test({LINENUM}46104, 'SequenceVector(0, 10)',
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

  Test({LINENUM}46107, 'SequenceVector(1, 10)',
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

  Test({LINENUM}46110, 'SequenceVector(-10, 10)',
    [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

  Test({LINENUM}46113, 'SequenceVector(-99, -90)',
    [-99, -98, -97, -96, -95, -94, -93, -92, -91, -90]);

  Test({LINENUM}46116, 'SequenceVector(7, 7)',
    [7]);

  Test({LINENUM}46119, 'SequenceVector(0, 0)',
    [0]);

  Test({LINENUM}46122, 'SequenceVector(-1, 1)',
    [-1, 0, 1]);

  Test({LINENUM}46125, 'SequenceVector(1, 2)',
    [1, 2]);

  Test({LINENUM}46128, 'SequenceVector(1, 3)',
    [1, 2, 3]);

  Test({LINENUM}46131, 'SequenceVector(5, 2)',
    [5, 4, 3, 2]);

  Test({LINENUM}46134, 'SequenceVector(50, 40)',
    [50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40]);

  Test({LINENUM}46137, 'SequenceVector(10, 0)',
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]);

  Test({LINENUM}46140, 'SequenceVector(10, 1)',
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]);

  Test({LINENUM}46143, 'SequenceVector(10, -10)',
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]);

  Test({LINENUM}46146, 'SequenceVector(0, -10)',
    [0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]);

  Test({LINENUM}46149, 'SequenceVector(-1, -10)',
    [-1, -2, -3, -4, -5, -6, -7, -8, -9, -10]);

  Test({LINENUM}46152, 'SequenceVector(-1, -2)',
    [-1, -2]);

  Test({LINENUM}46155, 'SequenceVector(0, 10, 2)',
    [0, 2, 4, 6, 8, 10]);

  Test({LINENUM}46158, 'SequenceVector(0, 10, 3)',
    [0, 3, 6, 9]);

  Test({LINENUM}46161, 'SequenceVector(0, 10, 4)',
    [0, 4, 8]);

  Test({LINENUM}46164, 'SequenceVector(0, 10, 5)',
    [0, 5, 10]);

  Test({LINENUM}46167, 'SequenceVector(0, 10, 6)',
    [0, 6]);

  Test({LINENUM}46170, 'SequenceVector(0, 10, 7)',
    [0, 7]);

  Test({LINENUM}46173, 'SequenceVector(0, 10, 8)',
    [0, 8]);

  Test({LINENUM}46176, 'SequenceVector(0, 10, 9)',
    [0, 9]);

  Test({LINENUM}46179, 'SequenceVector(0, 10, 10)',
    [0, 10]);

  Test({LINENUM}46182, 'SequenceVector(0, 10, 11)',
    [0]);

  Test({LINENUM}46185, 'SequenceVector(0, 10, 12)',
    [0]);

  Test({LINENUM}46188, 'SequenceVector(0, 100, 10)',
    [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]);

  Test({LINENUM}46191, 'SequenceVector(-20, 100, 10)',
    [-20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]);

  Test({LINENUM}46194, 'SequenceVector(-30, 100, 10)',
    [-30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]);

  Test({LINENUM}46197, 'SequenceVector(-30, 100, 100000000)',
    [-30]);

  Test({LINENUM}46200, 'SequenceVector(10, 0, 2)',
    [10, 8, 6, 4, 2, 0]);

  Test({LINENUM}46203, 'SequenceVector(10, -10, 2)',
    [10, 8, 6, 4, 2, 0, -2, -4, -6, -8, -10]);

  Test({LINENUM}46206, 'SequenceVector(10, 0, 3)',
    [10, 7, 4, 1]);

  Test({LINENUM}46209, 'SequenceVector(10, 0, 5)',
    [10, 5, 0]);

  Test({LINENUM}46212, 'SequenceVector(10, 0, 10)',
    [10, 0]);

  Test({LINENUM}46215, 'SequenceVector(10, 0, 11)',
    [10]);

  Test({LINENUM}46218, 'SequenceVector(123, 123, 123)',
    [123]);

  Test({LINENUM}46221, 'SequenceVector(0, 10, 0)',
    failure, 'A positive integer was expected as argument 3, but "0" was given.');

  Test({LINENUM}46224, 'SequenceVector(0, 10, -1)',
    failure, 'A positive integer was expected as argument 3, but "-1" was given.');


  //
  // Random member
  //

  StartStopwatch;

  Test({LINENUM}46234, 'v ≔ ❨0, 10, 20, 30, 40, 50❩; S ≔ ToSet(v); N ≔ 100000; x ≔ 0', 0);
  Test({LINENUM}46235, 'for(i, 1, N, (r ≔ random(v); inc(x, r); assert(r ∈ S)))', null);
  Test({LINENUM}46236, 'abs(x/N − 25) ≤ 0.5', True);

  Test({LINENUM}46238, 'v ≔ i⋅❨0, 10, 20, 30, 40, 50❩; S ≔ ToSet(v); N ≔ 100000; x ≔ 0', 0);
  Test({LINENUM}46239, 'for(i, 1, N, (r ≔ random(v); x ≔ x + r; assert(r ∈ S)))', null);
  Test({LINENUM}46240, 'abs(x/(N⋅i) − 25) ≤ 0.5', True);

  Test({LINENUM}46242, 'v ≔ ❨❨0, 10, 20❩, ❨30, 40, 50❩❩; S ≔ ToSet(v); N ≔ 100000; x ≔ 0', 0);
  Test({LINENUM}46243, 'for(i, 1, N, (r ≔ random(v); inc(x, r); assert(r ∈ S)))', null);
  Test({LINENUM}46244, 'abs(x/N − 25) ≤ 0.5', True);

  Test({LINENUM}46246, 'v ≔ i⋅❨❨0, 10, 20❩, ❨30, 40, 50❩❩; S ≔ ToSet(v); N ≔ 100000; x ≔ 0', 0);
  Test({LINENUM}46247, 'for(i, 1, N, (r ≔ random(v); x ≔ x + r; assert(r ∈ S)))', null);
  Test({LINENUM}46248, 'abs(x/(N⋅i) − 25) ≤ 0.5', True);

  Test({LINENUM}46250, 'L ≔ ''(0, 10, 20, 30, 40, 50); S ≔ ToSet(L); N ≔ 100000; x ≔ 0', 0);
  Test({LINENUM}46251, 'for(i, 1, N, (r ≔ random(L); inc(x, r); assert(r ∈ S)))', null);
  Test({LINENUM}46252, 'abs(x/N − 25) ≤ 0.5', True);

  Test({LINENUM}46254, 'S ≔ {0, 10, 20, 30, 40, 50}; N ≔ 100000; x ≔ 0', 0);
  Test({LINENUM}46255, 'for(i, 1, N, (r ≔ random(S); inc(x, r); assert(r ∈ S)))', null);
  Test({LINENUM}46256, 'abs(x/N − 25) ≤ 0.5', True);

  StopStopwatch;
  TestDuration({LINENUM}46259, 12.5);

  Test({LINENUM}46261, 'v ≔ ❨0, 10, 20, 30, 40, 50❩; S ≔ ToSet(v); N ≔ 10000; x ≔ 0', 0);
  Test({LINENUM}46262, 'for(j, 1, N, (r ≔ random(❨0, 10, 20, 30, 40, 50❩); inc(x, r); assert(r ∈ S)))', null);
  Test({LINENUM}46263, 'abs(x/N − 25) ≤ 5', True);

  Test({LINENUM}46265, 'v ≔ i⋅❨0, 10, 20, 30, 40, 50❩; S ≔ ToSet(v); N ≔ 10000; x ≔ 0', 0);
  Test({LINENUM}46266, 'for(j, 1, N, (r ≔ random(i⋅❨0, 10, 20, 30, 40, 50❩); x ≔ x + r; assert(r ∈ S)))', null);
  Test({LINENUM}46267, 'abs(x/(N⋅i) − 25) ≤ 5', True);

  Test({LINENUM}46269, 'v ≔ ❨❨0, 10, 20❩, ❨30, 40, 50❩❩; S ≔ ToSet(v); N ≔ 10000; x ≔ 0', 0);
  Test({LINENUM}46270, 'for(j, 1, N, (r ≔ random(❨❨0, 10, 20❩, ❨30, 40, 50❩❩); inc(x, r); assert(r ∈ S)))', null);
  Test({LINENUM}46271, 'abs(x/N − 25) ≤ 5', True);

  Test({LINENUM}46273, 'v ≔ i⋅❨❨0, 10, 20❩, ❨30, 40, 50❩❩; S ≔ ToSet(v); N ≔ 10000; x ≔ 0', 0);
  Test({LINENUM}46274, 'for(j, 1, N, (r ≔ random(i⋅❨❨0, 10, 20❩, ❨30, 40, 50❩❩); x ≔ x + r; assert(r ∈ S)))', null);
  Test({LINENUM}46275, 'abs(x/(N⋅i) − 25) ≤ 5', True);

  Test({LINENUM}46277, 'L ≔ ''(0, 10, 20, 30, 40, 50); S ≔ ToSet(L); N ≔ 10000; x ≔ 0', 0);
  Test({LINENUM}46278, 'for(j, 1, N, (r ≔ random(''(0, 10, 20, 30, 40, 50)); inc(x, r); assert(r ∈ S)))', null);
  Test({LINENUM}46279, 'abs(x/N − 25) ≤ 5', True);

  Test({LINENUM}46281, 'S ≔ {0, 10, 20, 30, 40, 50}; N ≔ 10000; x ≔ 0', 0);
  Test({LINENUM}46282, 'for(j, 1, N, (r ≔ random({0, 10, 20, 30, 40, 50}); inc(x, r); assert(r ∈ S)))', null);
  Test({LINENUM}46283, 'abs(x/N − 25) ≤ 5', True);

  Test({LINENUM}46285, 'for(j, 1, 1000, (v ≔ ❨1, 2, 3, 4, 5❩; random(v) ≔ 1000; assert(count(v, (x ↦ x = 1000)) = 1)))', null);
  Test({LINENUM}46286, 'for(j, 1, 1000, (v ≔ ComplexVector(❨1, 2, 3, 4, 5❩); random(v) ≔ 1000; assert(count(v, (x ↦ x = 1000)) = 1)))', null);

  Test({LINENUM}46288, 'for(j, 1, 1000, (v ≔ ❨❨1, 2, 3❩, ❨4, 5, 6❩❩; random(v) ≔ 1000; assert(count(v, (x ↦ x = 1000)) = 1)))', null);
  Test({LINENUM}46289, 'for(j, 1, 1000, (v ≔ ComplexMatrix(❨❨1, 2, 3❩, ❨4, 5, 6❩❩); random(v) ≔ 1000; assert(count(v, (x ↦ x = 1000)) = 1)))', null);

  Test({LINENUM}46291, 'for(j, 1, 1000, (v ≔ ''(1, 2, 3, 4, 5); random(v) ≔ 1000; assert(count(v, (x ↦ x = 1000)) = 1)))', null);
//  Test({LINENUM}46292, 'for(j, 1, 1000, (v ≔ {1, 2, 3, 4, 5}; random(v) ≔ 1000; assert(count(v, (x ↦ x = 1000)) = 1)))', null); // not implemented

  Test({LINENUM}46294, 's ≔ "Hello, World!"', 'Hello, World!');
  Test({LINENUM}46295, 'for(i, 1, 1000, assert(random(s) ∈ ToSet(characters(s))))', null); // you get only the chars of s
  Test({LINENUM}46296, 'ForEach(characters(s), c, while(random(s) ≠ c, do()))', null); // you get all chars of s

  Test({LINENUM}46298, 'v ≔ ❨21❩', [21]);
  Test({LINENUM}46299, 'random(v)', 21.0);
  Test({LINENUM}46300, 'random(v) ≔ 394', 394);
  Test({LINENUM}46301, 'v', [394]);

  Test({LINENUM}46303, 'v ≔ ❨21⋅i❩', [21*ImaginaryUnit]);
  Test({LINENUM}46304, 'random(v)', 21*ImaginaryUnit);
  Test({LINENUM}46305, 'random(v) ≔ 394⋅i', 394*ImaginaryUnit);
  Test({LINENUM}46306, 'v', [394*ImaginaryUnit]);

  Test({LINENUM}46308, 'A ≔ ❨❨21❩❩', 1, [21]);
  Test({LINENUM}46309, 'random(A)', 21.0);
  Test({LINENUM}46310, 'random(A) ≔ 394', 394);
  Test({LINENUM}46311, 'A', 1, [394]);

  Test({LINENUM}46313, 'A ≔ ❨❨21⋅i❩❩', 1, [21*ImaginaryUnit]);
  Test({LINENUM}46314, 'random(A)', 21*ImaginaryUnit);
  Test({LINENUM}46315, 'random(A) ≔ 394⋅i', 394*ImaginaryUnit);
  Test({LINENUM}46316, 'A', 1, [394*ImaginaryUnit]);

  Test({LINENUM}46318, 'L ≔ ''(21)', intarr([21]));
  Test({LINENUM}46319, 'random(L)', 21);
  Test({LINENUM}46320, 'random(L) ≔ 394', 394);
  Test({LINENUM}46321, 'L', intarr([394]));

  Test({LINENUM}46323, 's ≔ "A"', 'A');
  Test({LINENUM}46324, 'random(s)', 'A');
  Test({LINENUM}46325, 'random(s) ≔ "B"', 'B');
  Test({LINENUM}46326, 's', 'B');

  Test({LINENUM}46328, 'v ≔ DebugObject("empty vector");', null);
  Test({LINENUM}46329, 'random(v)', failure, 'Index 1 out of bounds.');
  Test({LINENUM}46330, 'random(v) ≔ 123', failure, 'Index 1 out of bounds.');

  Test({LINENUM}46332, 'v ≔ ComplexVector(DebugObject("empty vector"));', null);
  Test({LINENUM}46333, 'random(v)', failure, 'Index 1 out of bounds.');
  Test({LINENUM}46334, 'random(v) ≔ 123', failure, 'Index 1 out of bounds.');

  Test({LINENUM}46336, 'A ≔ DebugObject("empty matrix");', null);
  Test({LINENUM}46337, 'random(A)', failure, 'Index 1 out of bounds.');
  Test({LINENUM}46338, 'random(A) ≔ 123', failure, 'Index 1 out of bounds.');

  Test({LINENUM}46340, 'A ≔ ComplexMatrix(DebugObject("empty matrix"));', null);
  Test({LINENUM}46341, 'random(A)', failure, 'Index 1 out of bounds.');
  Test({LINENUM}46342, 'random(A) ≔ 123', failure, 'Index 1 out of bounds.');

  Test({LINENUM}46344, 'L ≔ ''();', null);
  Test({LINENUM}46345, 'random(L)', failure, 'Index 1 out of bounds.');
  Test({LINENUM}46346, 'random(L) ≔ 123', failure, 'Index 1 out of bounds.');

  Test({LINENUM}46348, 's ≔ "";', null);
  Test({LINENUM}46349, 'random(s)', failure, 'Index 1 out of bounds.');
  Test({LINENUM}46350, 'random(s) ≔ "A"', failure, 'Index 1 out of bounds.');


  //
  // Object- and predicate-based queries
  //

  // count

  Test({LINENUM}46359, 'v ≔ ❨6, 0, −2, 7, 1, 4, 6, 5, 8, −7, 10, 123, −10, 3, 21, 7, 5, 2, 1024, 0❩',
    [6, 0, -2, 7, 1, 4, 6, 5, 8, -7, 10, 123, -10, 3, 21, 7, 5, 2, 1024, 0]);

  Test({LINENUM}46362, 'count(v, even)', 11);
  Test({LINENUM}46363, 'count(v, odd)', 9);
  Test({LINENUM}46364, 'count(v, IsPositive)', 15);
  Test({LINENUM}46365, 'count(v, IsNonNegative)', 17);
  Test({LINENUM}46366, 'count(v, IsZero)', 2);
  Test({LINENUM}46367, 'count(v, IsNonPositive)', 5);
  Test({LINENUM}46368, 'count(v, IsNegative)', 3);
  Test({LINENUM}46369, 'count(v, IsPrime)', 6);
  Test({LINENUM}46370, 'count(v, IsNumber)', 20);
  Test({LINENUM}46371, 'count(v, IsInteger)', 20);
  Test({LINENUM}46372, 'count(v, IsBoolean)', 0);
  Test({LINENUM}46373, 'count(v, x ↦ x ≥ 100)', 2);
  Test({LINENUM}46374, 'count(v, x ↦ x ≥ 1000)', 1);
  Test({LINENUM}46375, 'count(v, x ↦ x ≥ 10000)', 0);
  Test({LINENUM}46376, 'count(v, x ↦ mod(x, 5) = 0)', 6);

  Test({LINENUM}46378, 'count(❨6, 0, −2, 7, 1, 4, 6, 5, 8, −7, 10, 123, −10, 3, 21, 7, 5, 2, 1024, 0❩, odd)', 9);
  Test({LINENUM}46379, 'count(DebugObject("empty vector"), odd)', 0);

  Test({LINENUM}46381, 'v ≔ ❨2 + 3⋅i, 8, 5 − i, 4 + 2⋅i, −1 − i, 10 − 5⋅i, −4 + 6⋅i, 2⋅i, −4, 7 − 2⋅i, 0, −3⋅i, 1 + i, 21❩;', null);

  Test({LINENUM}46383, 'count(v, IsReal)', 4);
  Test({LINENUM}46384, 'count(v, IsComplex)', 10);
  Test({LINENUM}46385, 'count(v, IsNumber)', 14);
  Test({LINENUM}46386, 'count(v, IsSound)', 0);
  Test({LINENUM}46387, 'count(v, IsZero)', 1);
  Test({LINENUM}46388, 'count(v, z ↦ Re(z) = 0)', 3);
  Test({LINENUM}46389, 'count(v, z ↦ arg(z) ≈ π/4)', 1);
  Test({LINENUM}46390, 'count(v, z ↦ abs(z) > 10)', 2);
  Test({LINENUM}46391, 'count(v, z ↦ abs(z) > 5)', 6);

  Test({LINENUM}46393, 'count(❨2 + 3⋅i, 8, 5 − i, 4 + 2⋅i, −1 − i, 10 − 5⋅i, −4 + 6⋅i, 2⋅i, −4, 7 − 2⋅i, 0, −3⋅i, 1 + i, 21❩, z ↦ abs(z) > 5)', 6);
  Test({LINENUM}46394, 'count(ComplexVector(DebugObject("empty vector")), z ↦ abs(z) > 5)', 0);

  Test({LINENUM}46396, 'A ≔ ❨❨6, 0, −2, 7, 1, 4, 6, 5, 8, −7❩, ❨10, 123, −10, 3, 21, 7, 5, 2, 1024, 0❩❩', 10,
    [6, 0, -2, 7, 1, 4, 6, 5, 8, -7, 10, 123, -10, 3, 21, 7, 5, 2, 1024, 0]);

  Test({LINENUM}46399, 'count(A, even)', 11);
  Test({LINENUM}46400, 'count(A, odd)', 9);
  Test({LINENUM}46401, 'count(A, IsPositive)', 15);
  Test({LINENUM}46402, 'count(A, IsNonNegative)', 17);
  Test({LINENUM}46403, 'count(A, IsZero)', 2);
  Test({LINENUM}46404, 'count(A, IsNonPositive)', 5);
  Test({LINENUM}46405, 'count(A, IsNegative)', 3);
  Test({LINENUM}46406, 'count(A, IsPrime)', 6);
  Test({LINENUM}46407, 'count(A, IsNumber)', 20);
  Test({LINENUM}46408, 'count(A, IsInteger)', 20);
  Test({LINENUM}46409, 'count(A, IsBoolean)', 0);
  Test({LINENUM}46410, 'count(A, x ↦ x ≥ 100)', 2);
  Test({LINENUM}46411, 'count(A, x ↦ x ≥ 1000)', 1);
  Test({LINENUM}46412, 'count(A, x ↦ x ≥ 10000)', 0);
  Test({LINENUM}46413, 'count(A, x ↦ mod(x, 5) = 0)', 6);

  Test({LINENUM}46415, 'count(❨❨6, 0, −2, 7, 1, 4, 6, 5, 8, −7❩, ❨10, 123, −10, 3, 21, 7, 5, 2, 1024, 0❩❩, odd)', 9);
  Test({LINENUM}46416, 'count(DebugObject("empty matrix"), odd)', 0);

  Test({LINENUM}46418, 'A ≔ ❨❨2 + 3⋅i, 8, 5 − i, 4 + 2⋅i, −1 − i, 10 − 5⋅i, −4 + 6⋅i❩, ❨2⋅i, −4, 7 − 2⋅i, 0, −3⋅i, 1 + i, 21❩❩;', null);

  Test({LINENUM}46420, 'count(A, IsReal)', 4);
  Test({LINENUM}46421, 'count(A, IsComplex)', 10);
  Test({LINENUM}46422, 'count(A, IsNumber)', 14);
  Test({LINENUM}46423, 'count(A, IsSound)', 0);
  Test({LINENUM}46424, 'count(A, IsZero)', 1);
  Test({LINENUM}46425, 'count(A, z ↦ Re(z) = 0)', 3);
  Test({LINENUM}46426, 'count(A, z ↦ arg(z) ≈ π/4)', 1);
  Test({LINENUM}46427, 'count(A, z ↦ abs(z) > 10)', 2);
  Test({LINENUM}46428, 'count(A, z ↦ abs(z) > 5)', 6);

  Test({LINENUM}46430, 'count(❨❨2 + 3⋅i, 8, 5 − i, 4 + 2⋅i, −1 − i, 10 − 5⋅i, −4 + 6⋅i❩, ❨2⋅i, −4, 7 − 2⋅i, 0, −3⋅i, 1 + i, 21❩❩, z ↦ abs(z) > 5)', 6);
  Test({LINENUM}46431, 'count(ComplexMatrix(DebugObject("empty matrix")), z ↦ abs(z) > 5)', 0);

  Test({LINENUM}46433, 's ≔ "It is produced from 7-dehydrocholesterol."', 'It is produced from 7-dehydrocholesterol.');
  Test({LINENUM}46434, 'count(s, ChrIsLetter)', 34);
  Test({LINENUM}46435, 'count(s, ChrIsWhitespace)', 4);
  Test({LINENUM}46436, 'count(s, ChrIsPunctuation)', 2);
  Test({LINENUM}46437, 'count(s, ChrIsDigit)', 1);
  Test({LINENUM}46438, 'count(s, ChrIsControl)', 0);
  Test({LINENUM}46439, 'count(s, IsCharacter)', 41);

  Test({LINENUM}46441, 'count("It is produced from 7-dehydrocholesterol.", ChrIsWhitespace)', 4);
  Test({LINENUM}46442, 'count("", ChrIsWhitespace)', 0);

  Test({LINENUM}46444, 'L ≔ ''(21, "cat", "dog", π, i, 1+1=2, now(), 123, 1024, "rat");', null);
  Test({LINENUM}46445, 'count(L, IsNumber)', 5);
  Test({LINENUM}46446, 'count(L, IsText)', 3);
  Test({LINENUM}46447, 'count(L, IsBoolean)', 1);
  Test({LINENUM}46448, 'count(L, IsStructure)', 1);
  Test({LINENUM}46449, 'count(L, IsPixmap)', 0);

  Test({LINENUM}46451, 'count(''(21, "cat", "dog", π, i, 1+1=2, now(), 123, 1024, "rat"), IsNumber)', 5);
  Test({LINENUM}46452, 'count(''(), IsNumber)', 0);

  Test({LINENUM}46454, 'S ≔ {21, "cat", "dog", π, i, 1+1=2, now(), 123, 1024, "rat", "rat"};', null);
  Test({LINENUM}46455, 'count(S, IsNumber)', 5);
  Test({LINENUM}46456, 'count(S, IsText)', 3);
  Test({LINENUM}46457, 'count(S, IsBoolean)', 1);
  Test({LINENUM}46458, 'count(S, IsStructure)', 1);
  Test({LINENUM}46459, 'count(S, IsPixmap)', 0);

  Test({LINENUM}46461, 'count({21, "cat", "dog", π, i, 1+1=2, now(), 123, 1024, "rat", "rat"}, IsNumber)', 5);
  Test({LINENUM}46462, 'count({}, IsNumber)', 0);

  Test({LINENUM}46464, 'S ≔ struct("name": "Smith", "age": 58, "score": 100);', null);
  Test({LINENUM}46465, 'count(S, IsText)', 1);
  Test({LINENUM}46466, 'count(S, IsInteger)', 2);
  Test({LINENUM}46467, 'count(S, IsPixmap)', 0);
  Test({LINENUM}46468, 'count(now(), IsStructure)', 2);
  Test({LINENUM}46469, 'count(struct(), IsStructure)', 0);

  Test({LINENUM}46471, 'count(123, ChrIsDigit)', failure, 'Cannot count elements in an object of type "integer".');
  Test({LINENUM}46472, 'count(123.456, ChrIsDigit)', failure, 'Cannot count elements in an object of type "real number".');
  Test({LINENUM}46473, 'count(i, ChrIsDigit)', failure, 'Cannot count elements in an object of type "complex number".');
  Test({LINENUM}46474, 'count(true, ChrIsDigit)', failure, 'Cannot count elements in an object of type "boolean".');

  Test({LINENUM}46476, 'count(❨6, 0, −2, 7, 1, 4, 6, 5, 8, −7, 10.5, 123, −10, 3, 21, 7, 5, 2, 1024, 0❩, odd)',
    failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}46479, 'v ≔ ❨2, 1, 0, 5, 3, 6, 2, 0, 4, 1, 2, 1, 5, 3, 0, 1, 2, 4, 1, 8❩;', null);

  Test({LINENUM}46481, 'count(v, 0)', 3);
  Test({LINENUM}46482, 'count(v, 1)', 5);
  Test({LINENUM}46483, 'count(v, 2)', 4);
  Test({LINENUM}46484, 'count(v, 3)', 2);
  Test({LINENUM}46485, 'count(v, 5)', 2);
  Test({LINENUM}46486, 'count(v, 6)', 1);
  Test({LINENUM}46487, 'count(v, 7)', 0);
  Test({LINENUM}46488, 'count(v, 8)', 1);
  Test({LINENUM}46489, 'count(v, 9)', 0);

  Test({LINENUM}46491, 'count(❨2, 1, 0, 5, 3, 6, 2, 0, 4, 1, 2, 1, 5, 3, 0, 1, 2, 4, 1, 8❩, 0)', 3);
  Test({LINENUM}46492, 'count(DebugObject("empty vector"), 0)', 0);

  Test({LINENUM}46494, 'v ≔ ❨2, i, 0, 5, 3, 6, 2, 0, 4, i, 2, 1, 5, 3, 0, 1, 2, 4, 1, 8❩;', null);

  Test({LINENUM}46496, 'count(v, 0)', 3);
  Test({LINENUM}46497, 'count(v, 1)', 3);
  Test({LINENUM}46498, 'count(v, 2)', 4);
  Test({LINENUM}46499, 'count(v, 3)', 2);
  Test({LINENUM}46500, 'count(v, 5)', 2);
  Test({LINENUM}46501, 'count(v, 6)', 1);
  Test({LINENUM}46502, 'count(v, 7)', 0);
  Test({LINENUM}46503, 'count(v, 8)', 1);
  Test({LINENUM}46504, 'count(v, 9)', 0);
  Test({LINENUM}46505, 'count(v, i)', 2);

  Test({LINENUM}46507, 'count(❨2, i, 0, 5, 3, 6, 2, 0, 4, i, 2, 1, 5, 3, 0, 1, 2, 4, 1, 8❩, 0)', 3);
  Test({LINENUM}46508, 'count(ComplexVector(DebugObject("empty vector")), 0)', 0);

  Test({LINENUM}46510, 'v ≔ ❨❨2, 1, 0, 5, 3, 6, 2, 0, 4, 1❩, ❨2, 1, 5, 3, 0, 1, 2, 4, 1, 8❩❩;', null);

  Test({LINENUM}46512, 'count(v, 0)', 3);
  Test({LINENUM}46513, 'count(v, 1)', 5);
  Test({LINENUM}46514, 'count(v, 2)', 4);
  Test({LINENUM}46515, 'count(v, 3)', 2);
  Test({LINENUM}46516, 'count(v, 5)', 2);
  Test({LINENUM}46517, 'count(v, 6)', 1);
  Test({LINENUM}46518, 'count(v, 7)', 0);
  Test({LINENUM}46519, 'count(v, 8)', 1);
  Test({LINENUM}46520, 'count(v, 9)', 0);

  Test({LINENUM}46522, 'count(❨❨2, 1, 0, 5, 3, 6, 2, 0, 4, 1❩, ❨2, 1, 5, 3, 0, 1, 2, 4, 1, 8❩❩, 0)', 3);
  Test({LINENUM}46523, 'count(DebugObject("empty matrix"), 0)', 0);

  Test({LINENUM}46525, 'v ≔ ❨❨2, i, 0, 5, 3, 6, 2, 0, 4, i❩, ❨2, 1, 5, 3, 0, 1, 2, 4, 1, 8❩❩;', null);

  Test({LINENUM}46527, 'count(v, 0)', 3);
  Test({LINENUM}46528, 'count(v, 1)', 3);
  Test({LINENUM}46529, 'count(v, 2)', 4);
  Test({LINENUM}46530, 'count(v, 3)', 2);
  Test({LINENUM}46531, 'count(v, 5)', 2);
  Test({LINENUM}46532, 'count(v, 6)', 1);
  Test({LINENUM}46533, 'count(v, 7)', 0);
  Test({LINENUM}46534, 'count(v, 8)', 1);
  Test({LINENUM}46535, 'count(v, 9)', 0);
  Test({LINENUM}46536, 'count(v, i)', 2);

  Test({LINENUM}46538, 'count(❨❨2, i, 0, 5, 3, 6, 2, 0, 4, i❩, ❨2, 1, 5, 3, 0, 1, 2, 4, 1, 8❩❩, 0)', 3);
  Test({LINENUM}46539, 'count(ComplexMatrix(DebugObject("empty matrix")), 0)', 0);

  Test({LINENUM}46541, 's ≔ "the emotional range of a teaspoon";', null);
  Test({LINENUM}46542, 'count(s, "a")', 4);
  Test({LINENUM}46543, 'count(s, "e")', 4);
  Test({LINENUM}46544, 'count(s, "o")', 5);
  Test({LINENUM}46545, 'count(s, "t")', 3);
  Test({LINENUM}46546, 'count(s, "h")', 1);
  Test({LINENUM}46547, 'count(s, "i")', 1);
  Test({LINENUM}46548, 'count(s, "m")', 1);
  Test({LINENUM}46549, 'count(s, "n")', 3);
  Test({LINENUM}46550, 'count(s, "f")', 1);
  Test({LINENUM}46551, 'count(s, " ")', 5);
  Test({LINENUM}46552, 'count(s, "⼔")', 0);
  Test({LINENUM}46553, 'count(s, chr(0))', 0);

  Test({LINENUM}46555, 'count("the emotional range of a teaspoon", "o")', 5);
  Test({LINENUM}46556, 'count("", "o")', 0);

  Test({LINENUM}46558, 'L ≔ ''(21, "cat", "dog", "dog", 123, π, i, 1+1=2, now(), 123, 1024, "dog", "rat", 123, "rat", "rabbit");', null);

  Test({LINENUM}46560, 'count(L, 21)', 1);
  Test({LINENUM}46561, 'count(L, "cat")', 1);
  Test({LINENUM}46562, 'count(L, "dog")', 3);
  Test({LINENUM}46563, 'count(L, 123)', 3);
  Test({LINENUM}46564, 'count(L, π)', 1);
  Test({LINENUM}46565, 'count(L, i)', 1);
  Test({LINENUM}46566, 'count(L, true)', 1);
  Test({LINENUM}46567, 'count(L, false)', 0);
  Test({LINENUM}46568, 'count(L, 1024)', 1);
  Test({LINENUM}46569, 'count(L, "rat")', 2);
  Test({LINENUM}46570, 'count(L, "rabbit")', 1);
  Test({LINENUM}46571, 'count(L, "muggle")', 0);

  Test({LINENUM}46573, 'count(''(21, "cat", "dog", "dog", 123, π, i, 1+1=2, now(), 123, 1024, "dog", "rat", 123, "rat", "rabbit"), 123)', 3);
  Test({LINENUM}46574, 'count(''(), 123)', 0);

  Test({LINENUM}46576, 'S ≔ {21, "cat", "dog", "dog", 123, π, i, 1+1=2, now(), 123, 1024, "dog", "rat", 123, "rat", "rabbit"};', null);

  Test({LINENUM}46578, 'count(S, 21)', 1);
  Test({LINENUM}46579, 'count(S, "cat")', 1);
  Test({LINENUM}46580, 'count(S, "dog")', 1);
  Test({LINENUM}46581, 'count(S, 123)', 1);
  Test({LINENUM}46582, 'count(S, π)', 1);
  Test({LINENUM}46583, 'count(S, i)', 1);
  Test({LINENUM}46584, 'count(S, true)', 1);
  Test({LINENUM}46585, 'count(S, false)', 0);
  Test({LINENUM}46586, 'count(S, 1024)', 1);
  Test({LINENUM}46587, 'count(S, "rat")', 1);
  Test({LINENUM}46588, 'count(S, "rabbit")', 1);
  Test({LINENUM}46589, 'count(S, "muggle")', 0);

  Test({LINENUM}46591, 'count({21, "cat", "dog", "dog", 123, π, i, 1+1=2, now(), 123, 1024, "dog", "rat", 123, "rat", "rabbit"}, 123)', 1);
  Test({LINENUM}46592, 'count({}, 123)', 0);

  Test({LINENUM}46594, 'count(123, 1)', failure, 'Cannot count elements in an object of type "integer".');
  Test({LINENUM}46595, 'count(123.456, 1)', failure, 'Cannot count elements in an object of type "real number".');

  Test({LINENUM}46597, 'v ≔ ❨2, 3, 1.999, 5, 8, 4, 5.001, 4, 1, 0, 0.00001, 3.01, 2.0001❩;', null);

  Test({LINENUM}46599, 'count(v, 2)', 1);
  Test({LINENUM}46600, 'count(v, 2, 2E-6)', 1);
  Test({LINENUM}46601, 'count(v, 2, 2E-5)', 1);
  Test({LINENUM}46602, 'count(v, 2, 2E-4)', 2);
  Test({LINENUM}46603, 'count(v, 2, 2E-3)', 3);
  Test({LINENUM}46604, 'count(v, 2, 2E-2)', 3);
  Test({LINENUM}46605, 'count(v, 2, 2E-1)', 3);

  Test({LINENUM}46607, 'count(v, 0)', 1);
  Test({LINENUM}46608, 'count(v, 0, 2E-6)', 1);
  Test({LINENUM}46609, 'count(v, 0, 2E-5)', 2);
  Test({LINENUM}46610, 'count(v, 0, 2E-4)', 2);
  Test({LINENUM}46611, 'count(v, 0, 2E-3)', 2);
  Test({LINENUM}46612, 'count(v, 0, 2E-2)', 2);
  Test({LINENUM}46613, 'count(v, 0, 2E-1)', 2);

  Test({LINENUM}46615, 'count(v, 3)', 1);
  Test({LINENUM}46616, 'count(v, 3, 2E-6)', 1);
  Test({LINENUM}46617, 'count(v, 3, 2E-5)', 1);
  Test({LINENUM}46618, 'count(v, 3, 2E-4)', 1);
  Test({LINENUM}46619, 'count(v, 3, 2E-3)', 1);
  Test({LINENUM}46620, 'count(v, 3, 2E-2)', 2);
  Test({LINENUM}46621, 'count(v, 3, 2E-1)', 2);

  Test({LINENUM}46623, 'count(v, 9)', 0);
  Test({LINENUM}46624, 'count(v, 9, 2E-6)', 0);
  Test({LINENUM}46625, 'count(v, 9, 2E-5)', 0);
  Test({LINENUM}46626, 'count(v, 9, 2E-4)', 0);
  Test({LINENUM}46627, 'count(v, 9, 2E-3)', 0);
  Test({LINENUM}46628, 'count(v, 9, 2E-2)', 0);
  Test({LINENUM}46629, 'count(v, 9, 2E-1)', 0);

  Test({LINENUM}46631, 'count(❨2, 3, 1.999, 5, 8, 4, 5.001, 4, 1, 0, 0.00001, 3.01, 2.0001❩, 2, 2E-3)', 3);
  Test({LINENUM}46632, 'count(DebugObject("empty vector"), 2, 2E-3)', 0);

  Test({LINENUM}46634, 'v ≔ ❨5, 2, 1, 4.999, 5, 5.01, 5.1, 3 + i, 3.001 + i, 3.001 + 1.01⋅i, 0, 0.1❩;', null);

  Test({LINENUM}46636, 'count(v, 5)', 2);
  Test({LINENUM}46637, 'count(v, 5, 2E-6)', 2);
  Test({LINENUM}46638, 'count(v, 5, 2E-5)', 2);
  Test({LINENUM}46639, 'count(v, 5, 2E-4)', 2);
  Test({LINENUM}46640, 'count(v, 5, 2E-3)', 3);
  Test({LINENUM}46641, 'count(v, 5, 2E-2)', 4);
  Test({LINENUM}46642, 'count(v, 5, 2E-1)', 5);
  Test({LINENUM}46643, 'count(v, 5, 2.5)', 8);

  Test({LINENUM}46645, 'count(v, 3 + i)', 1);
  Test({LINENUM}46646, 'count(v, 3 + i, 2E-6)', 1);
  Test({LINENUM}46647, 'count(v, 3 + i, 2E-5)', 1);
  Test({LINENUM}46648, 'count(v, 3 + i, 2E-4)', 1);
  Test({LINENUM}46649, 'count(v, 3 + i, 2E-3)', 2);
  Test({LINENUM}46650, 'count(v, 3 + i, 2E-2)', 3);
  Test({LINENUM}46651, 'count(v, 3 + i, 2E-1)', 3);
  Test({LINENUM}46652, 'count(v, 3 + i, 2.5)', 10);

  Test({LINENUM}46654, 'count(❨5, 2, 1, 4.999, 5, 5.01, 5.1, 3 + i, 3.001 + i, 3.001 + 1.01⋅i, 0, 0.1❩, 3 + i, 2E-3)', 2);
  Test({LINENUM}46655, 'count(DebugObject("empty vector"), 3 + i, 2E-3)', 0);

  Test({LINENUM}46657, 'A ≔ ❨❨2, 3, 1.999, 5, 8, 4, 5.001❩, ❨4, 1, 0, 0.00001, 3.01, 2.0001, 100❩❩;', null);

  Test({LINENUM}46659, 'count(A, 2)', 1);
  Test({LINENUM}46660, 'count(A, 2, 2E-6)', 1);
  Test({LINENUM}46661, 'count(A, 2, 2E-5)', 1);
  Test({LINENUM}46662, 'count(A, 2, 2E-4)', 2);
  Test({LINENUM}46663, 'count(A, 2, 2E-3)', 3);
  Test({LINENUM}46664, 'count(A, 2, 2E-2)', 3);
  Test({LINENUM}46665, 'count(A, 2, 2E-1)', 3);

  Test({LINENUM}46667, 'count(A, 0)', 1);
  Test({LINENUM}46668, 'count(A, 0, 2E-6)', 1);
  Test({LINENUM}46669, 'count(A, 0, 2E-5)', 2);
  Test({LINENUM}46670, 'count(A, 0, 2E-4)', 2);
  Test({LINENUM}46671, 'count(A, 0, 2E-3)', 2);
  Test({LINENUM}46672, 'count(A, 0, 2E-2)', 2);
  Test({LINENUM}46673, 'count(A, 0, 2E-1)', 2);

  Test({LINENUM}46675, 'count(A, 3)', 1);
  Test({LINENUM}46676, 'count(A, 3, 2E-6)', 1);
  Test({LINENUM}46677, 'count(A, 3, 2E-5)', 1);
  Test({LINENUM}46678, 'count(A, 3, 2E-4)', 1);
  Test({LINENUM}46679, 'count(A, 3, 2E-3)', 1);
  Test({LINENUM}46680, 'count(A, 3, 2E-2)', 2);
  Test({LINENUM}46681, 'count(A, 3, 2E-1)', 2);

  Test({LINENUM}46683, 'count(A, 9)', 0);
  Test({LINENUM}46684, 'count(A, 9, 2E-6)', 0);
  Test({LINENUM}46685, 'count(A, 9, 2E-5)', 0);
  Test({LINENUM}46686, 'count(A, 9, 2E-4)', 0);
  Test({LINENUM}46687, 'count(A, 9, 2E-3)', 0);
  Test({LINENUM}46688, 'count(A, 9, 2E-2)', 0);
  Test({LINENUM}46689, 'count(A, 9, 2E-1)', 0);

  Test({LINENUM}46691, 'count(❨❨2, 3, 1.999, 5, 8, 4, 5.001❩, ❨4, 1, 0, 0.00001, 3.01, 2.0001, 100❩❩, 2, 2E-3)', 3);
  Test({LINENUM}46692, 'count(DebugObject("empty matrix"), 2, 2E-3)', 0);

  Test({LINENUM}46694, 'A ≔ ❨❨5, 2, 1, 4.999, 5, 5.01❩, ❨5.1, 3 + i, 3.001 + i, 3.001 + 1.01⋅i, 0, 0.1❩❩;', null);

  Test({LINENUM}46696, 'count(A, 5)', 2);
  Test({LINENUM}46697, 'count(A, 5, 2E-6)', 2);
  Test({LINENUM}46698, 'count(A, 5, 2E-5)', 2);
  Test({LINENUM}46699, 'count(A, 5, 2E-4)', 2);
  Test({LINENUM}46700, 'count(A, 5, 2E-3)', 3);
  Test({LINENUM}46701, 'count(A, 5, 2E-2)', 4);
  Test({LINENUM}46702, 'count(A, 5, 2E-1)', 5);
  Test({LINENUM}46703, 'count(A, 5, 2.5)', 8);

  Test({LINENUM}46705, 'count(A, 3 + i)', 1);
  Test({LINENUM}46706, 'count(A, 3 + i, 2E-6)', 1);
  Test({LINENUM}46707, 'count(A, 3 + i, 2E-5)', 1);
  Test({LINENUM}46708, 'count(A, 3 + i, 2E-4)', 1);
  Test({LINENUM}46709, 'count(A, 3 + i, 2E-3)', 2);
  Test({LINENUM}46710, 'count(A, 3 + i, 2E-2)', 3);
  Test({LINENUM}46711, 'count(A, 3 + i, 2E-1)', 3);
  Test({LINENUM}46712, 'count(A, 3 + i, 2.5)', 10);

  Test({LINENUM}46714, 'count(❨❨5, 2, 1, 4.999, 5, 5.01❩, ❨5.1, 3 + i, 3.001 + i, 3.001 + 1.01⋅i, 0, 0.1❩❩, 3 + i, 2E-3)', 2);
  Test({LINENUM}46715, 'count(ComplexMatrix(DebugObject("empty matrix")), 3 + i, 2E-3)', 0);

  Test({LINENUM}46717, 's ≔ "the emotional range of a teaspoon";', null);
  Test({LINENUM}46718, 'count(s, "a", 1E-5)', 4);
  Test({LINENUM}46719, 'count(s, "e", 1E-10)', 4);
  Test({LINENUM}46720, 'count(s, "o", 5)', 5);
  Test({LINENUM}46721, 'count(s, "t", 100)', 3);
  Test({LINENUM}46722, 'count(s, "h", 500)', 1);
  Test({LINENUM}46723, 'count(s, "i", 10E10)', 1);
  Test({LINENUM}46724, 'count(s, "m", 10E100)', 1);
  Test({LINENUM}46725, 'count(s, "n", 0)', 3);
  Test({LINENUM}46726, 'count(s, "f", 2)', 1);
  Test({LINENUM}46727, 'count(s, " ", 3)', 5);
  Test({LINENUM}46728, 'count(s, "⼔", 4)', 0);
  Test({LINENUM}46729, 'count(s, chr(0), 5)', 0);

  Test({LINENUM}46731, 'count("the emotional range of a teaspoon", "o", 6)', 5);
  Test({LINENUM}46732, 'count("", "o", 7)', 0);

  Test({LINENUM}46734, 'L ≔ ''("cat", "dog", 1, 2, 1, 0.99, 5, 4, 1.001, 1 + i/10^6, 5 < 6);', null);

  Test({LINENUM}46736, 'count(L, "cat")', 1);
  Test({LINENUM}46737, 'count(L, "cat", 0.01)', 1);

  Test({LINENUM}46739, 'count(L, 1)', 2);
  Test({LINENUM}46740, 'count(L, 1, 2E-7)', 2);
  Test({LINENUM}46741, 'count(L, 1, 2E-6)', 3);
  Test({LINENUM}46742, 'count(L, 1, 2E-5)', 3);
  Test({LINENUM}46743, 'count(L, 1, 2E-4)', 3);
  Test({LINENUM}46744, 'count(L, 1, 2E-3)', 4);
  Test({LINENUM}46745, 'count(L, 1, 2E-2)', 5);
  Test({LINENUM}46746, 'count(L, 1, 2E-1)', 5);
  Test({LINENUM}46747, 'count(L, 1, 1.5)', 6);

  Test({LINENUM}46749, 'count(''("cat", "dog", 1, 2, 1, 0.99, 5, 4, 1.001, 1 + i/10^6, 5 < 6), 1, 2E-3)', 4);
  Test({LINENUM}46750, 'count(''(), 1, 2E-3)', 0);

  Test({LINENUM}46752, 'S ≔ {"cat", "dog", 1, 2, 1, 0.99, 5, 4, 1.001, 1 + i/10^6, 5 < 6};', null);

  Test({LINENUM}46754, 'count(S, "cat")', 1);
  Test({LINENUM}46755, 'count(S, "cat", 0.01)', 1);

  Test({LINENUM}46757, 'count(S, 1)', 1);
  Test({LINENUM}46758, 'count(S, 1, 2E-7)', 1);
  Test({LINENUM}46759, 'count(S, 1, 2E-6)', 2);
  Test({LINENUM}46760, 'count(S, 1, 2E-5)', 2);
  Test({LINENUM}46761, 'count(S, 1, 2E-4)', 2);
  Test({LINENUM}46762, 'count(S, 1, 2E-3)', 3);
  Test({LINENUM}46763, 'count(S, 1, 2E-2)', 4);
  Test({LINENUM}46764, 'count(S, 1, 2E-1)', 4);
  Test({LINENUM}46765, 'count(S, 1, 1.5)', 5);

  Test({LINENUM}46767, 'count({"cat", "dog", 1, 2, 1, 0.99, 5, 4, 1.001, 1 + i/10^6, 5 < 6}, 1, 2E-3)', 3);
  Test({LINENUM}46768, 'count({}, 1, 2E-3)', 0);

  Test({LINENUM}46770, 'count(123, 1, 0.001)', failure, 'Cannot count elements in an object of type "integer".');
  Test({LINENUM}46771, 'count(123.456, 1, 0.001)', failure, 'Cannot count elements in an object of type "real number".');

  Test({LINENUM}46773, 'count(v)', failure, 'There is no version of this function that can take 1 argument(s).');
  Test({LINENUM}46774, 'count(A)', failure, 'There is no version of this function that can take 1 argument(s).');
  Test({LINENUM}46775, 'count(L)', failure, 'There is no version of this function that can take 1 argument(s).');
  Test({LINENUM}46776, 'count(S)', failure, 'There is no version of this function that can take 1 argument(s).');

  Test({LINENUM}46778, 'count(S, 1, 2E-3, 3E-4)', failure, 'There is no version of this function that can take 4 argument(s).');
  Test({LINENUM}46779, 'count(S, 1, -2E-4)', failure, 'A non-negative real number was expected as argument 3, but "-0.0002" was given.');

  Test({LINENUM}46781, 'count(v, 1, -0.001)', failure, 'A non-negative real number was expected as argument 3, but "-0.001" was given.');

  // contains

  Test({LINENUM}46785, 'v ≔ ❨6, 2, 0, −4, 1, 7, 3, 21, 123, 5, 6, 7, 6, 3, 0, 1024❩;', null);

  Test({LINENUM}46787, 'contains(v, 1)', True);
  Test({LINENUM}46788, 'contains(v, 2)', True);
  Test({LINENUM}46789, 'contains(v, 3)', True);
  Test({LINENUM}46790, 'contains(v, 4)', False);
  Test({LINENUM}46791, 'contains(v, 5)', True);
  Test({LINENUM}46792, 'contains(v, 6)', True);
  Test({LINENUM}46793, 'contains(v, 7)', True);
  Test({LINENUM}46794, 'contains(v, 8)', False);
  Test({LINENUM}46795, 'contains(v, 9)', False);
  Test({LINENUM}46796, 'contains(v, 10)', False);
  Test({LINENUM}46797, 'contains(v, i)', False);
  Test({LINENUM}46798, 'contains(v, -i)', False);
  Test({LINENUM}46799, 'contains(v, 1 + i)', False);
  Test({LINENUM}46800, 'contains(v, 2 + i)', False);
  Test({LINENUM}46801, 'contains(v, 1024)', True);
  Test({LINENUM}46802, 'contains(v, 123)', True);
  Test({LINENUM}46803, 'contains(v, 123.456)', False);
  Test({LINENUM}46804, 'contains(v, 0)', True);
  Test({LINENUM}46805, 'contains(v, "cat")', False);
  Test({LINENUM}46806, 'contains(v, true)', False);
  Test({LINENUM}46807, 'contains(v, IdentityMatrix(6))', False);
  Test({LINENUM}46808, 'contains(v, color("red"))', False);

  Test({LINENUM}46810, 'contains(❨6, 2, 0, −4, 1, 7, 3, 21, 123, 5, 6, 7, 6, 3, 0, 1024❩, 123.456)', False);
  Test({LINENUM}46811, 'contains(❨6, 2, 0, −4, 1, 7, 3, 21, 123, 5, 6, 7, 6, 3, 0, 1024❩, 0)', True);
  Test({LINENUM}46812, 'contains(DebugObject("empty vector"), 0)', False);

  Test({LINENUM}46814, 'v ≔ ❨3, i, 2, 5, 4, −i, 1 + i, 5, 10, 20, 123.456, 2048, 75, 10❩;', null);

  Test({LINENUM}46816, 'contains(v, 1)', False);
  Test({LINENUM}46817, 'contains(v, 2)', True);
  Test({LINENUM}46818, 'contains(v, 3)', True);
  Test({LINENUM}46819, 'contains(v, 4)', True);
  Test({LINENUM}46820, 'contains(v, 5)', True);
  Test({LINENUM}46821, 'contains(v, 6)', False);
  Test({LINENUM}46822, 'contains(v, 7)', False);
  Test({LINENUM}46823, 'contains(v, 8)', False);
  Test({LINENUM}46824, 'contains(v, 9)', False);
  Test({LINENUM}46825, 'contains(v, 10)', True);
  Test({LINENUM}46826, 'contains(v, i)', True);
  Test({LINENUM}46827, 'contains(v, -i)', True);
  Test({LINENUM}46828, 'contains(v, 1 + i)', True);
  Test({LINENUM}46829, 'contains(v, 2 + i)', False);
  Test({LINENUM}46830, 'contains(v, 1024)', False);
  Test({LINENUM}46831, 'contains(v, 123)', False);
  Test({LINENUM}46832, 'contains(v, 123.456)', True);
  Test({LINENUM}46833, 'contains(v, 0)', False);
  Test({LINENUM}46834, 'contains(v, "cat")', False);
  Test({LINENUM}46835, 'contains(v, true)', False);
  Test({LINENUM}46836, 'contains(v, IdentityMatrix(6))', False);
  Test({LINENUM}46837, 'contains(v, color("red"))', False);

  Test({LINENUM}46839, 'contains(❨3, i, 2, 5, 4, −i, 1 + i, 5, 10, 20, 123.456, 2048, 75, 10❩, 123.456)', True);
  Test({LINENUM}46840, 'contains(❨3, i, 2, 5, 4, −i, 1 + i, 5, 10, 20, 123.456, 2048, 75, 10❩, 0)', False);
  Test({LINENUM}46841, 'contains(ComplexVector(DebugObject("empty vector")), 0)', False);

  Test({LINENUM}46843, 'v ≔ ❨❨6, 2, 0, −4, 1, 7, 3, 21❩, ❨123, 5, 6, 7, 6, 3, 0, 1024❩❩;', null);

  Test({LINENUM}46845, 'contains(v, 1)', True);
  Test({LINENUM}46846, 'contains(v, 2)', True);
  Test({LINENUM}46847, 'contains(v, 3)', True);
  Test({LINENUM}46848, 'contains(v, 4)', False);
  Test({LINENUM}46849, 'contains(v, 5)', True);
  Test({LINENUM}46850, 'contains(v, 6)', True);
  Test({LINENUM}46851, 'contains(v, 7)', True);
  Test({LINENUM}46852, 'contains(v, 8)', False);
  Test({LINENUM}46853, 'contains(v, 9)', False);
  Test({LINENUM}46854, 'contains(v, 10)', False);
  Test({LINENUM}46855, 'contains(v, i)', False);
  Test({LINENUM}46856, 'contains(v, -i)', False);
  Test({LINENUM}46857, 'contains(v, 1 + i)', False);
  Test({LINENUM}46858, 'contains(v, 2 + i)', False);
  Test({LINENUM}46859, 'contains(v, 1024)', True);
  Test({LINENUM}46860, 'contains(v, 123)', True);
  Test({LINENUM}46861, 'contains(v, 123.456)', False);
  Test({LINENUM}46862, 'contains(v, 0)', True);
  Test({LINENUM}46863, 'contains(v, "cat")', False);
  Test({LINENUM}46864, 'contains(v, true)', False);
  Test({LINENUM}46865, 'contains(v, IdentityMatrix(6))', False);
  Test({LINENUM}46866, 'contains(v, color("red"))', False);

  Test({LINENUM}46868, 'contains(❨❨6, 2, 0, −4, 1, 7, 3, 21❩, ❨123, 5, 6, 7, 6, 3, 0, 1024❩❩, 123.456)', False);
  Test({LINENUM}46869, 'contains(❨❨6, 2, 0, −4, 1, 7, 3, 21❩, ❨123, 5, 6, 7, 6, 3, 0, 1024❩❩, 0)', True);
  Test({LINENUM}46870, 'contains(DebugObject("empty matrix"), 0)', False);

  Test({LINENUM}46872, 'v ≔ ❨❨3, i, 2, 5, 4, −i, 1 + i❩, ❨5, 10, 20, 123.456, 2048, 75, 10❩❩;', null);

  Test({LINENUM}46874, 'contains(v, 1)', False);
  Test({LINENUM}46875, 'contains(v, 2)', True);
  Test({LINENUM}46876, 'contains(v, 3)', True);
  Test({LINENUM}46877, 'contains(v, 4)', True);
  Test({LINENUM}46878, 'contains(v, 5)', True);
  Test({LINENUM}46879, 'contains(v, 6)', False);
  Test({LINENUM}46880, 'contains(v, 7)', False);
  Test({LINENUM}46881, 'contains(v, 8)', False);
  Test({LINENUM}46882, 'contains(v, 9)', False);
  Test({LINENUM}46883, 'contains(v, 10)', True);
  Test({LINENUM}46884, 'contains(v, i)', True);
  Test({LINENUM}46885, 'contains(v, -i)', True);
  Test({LINENUM}46886, 'contains(v, 1 + i)', True);
  Test({LINENUM}46887, 'contains(v, 2 + i)', False);
  Test({LINENUM}46888, 'contains(v, 1024)', False);
  Test({LINENUM}46889, 'contains(v, 123)', False);
  Test({LINENUM}46890, 'contains(v, 123.456)', True);
  Test({LINENUM}46891, 'contains(v, 0)', False);
  Test({LINENUM}46892, 'contains(v, "cat")', False);
  Test({LINENUM}46893, 'contains(v, true)', False);
  Test({LINENUM}46894, 'contains(v, IdentityMatrix(6))', False);
  Test({LINENUM}46895, 'contains(v, color("red"))', False);

  Test({LINENUM}46897, 'contains(❨❨3, i, 2, 5, 4, −i, 1 + i❩, ❨5, 10, 20, 123.456, 2048, 75, 10❩❩, 123.456)', True);
  Test({LINENUM}46898, 'contains(❨❨3, i, 2, 5, 4, −i, 1 + i❩, ❨5, 10, 20, 123.456, 2048, 75, 10❩❩, 0)', False);
  Test({LINENUM}46899, 'contains(ComplexMatrix(DebugObject("empty matrix")), 0)', False);

  Test({LINENUM}46901, 's ≔ "the emotional range of a teaspoon";', null);

  Test({LINENUM}46903, 'contains(s, "a")', True);
  Test({LINENUM}46904, 'contains(s, "e")', True);
  Test({LINENUM}46905, 'contains(s, "t")', True);
  Test({LINENUM}46906, 'contains(s, " ")', True);
  Test({LINENUM}46907, 'contains(s, "s")', True);
  Test({LINENUM}46908, 'contains(s, "r")', True);
  Test({LINENUM}46909, 'contains(s, "q")', False);
  Test({LINENUM}46910, 'contains(s, "w")', False);
  Test({LINENUM}46911, 'contains(s, "!")', False);
  Test({LINENUM}46912, 'contains(s, "?")', False);
  Test({LINENUM}46913, 'contains(s, "☃")', False);
  Test({LINENUM}46914, 'contains(s, "the")', True);
  Test({LINENUM}46915, 'contains(s, "emotional")', True);
  Test({LINENUM}46916, 'contains(s, "emotion")', True);
  Test({LINENUM}46917, 'contains(s, "intellectual")', False);
  Test({LINENUM}46918, 'contains(s, "intellect")', False);
  Test({LINENUM}46919, 'contains(s, "teaspoon")', True);
  Test({LINENUM}46920, 'contains(s, "coffee spoon")', False);
  Test({LINENUM}46921, 'contains(s, "unicorn")', False);
  Test({LINENUM}46922, 'contains(s, true)', False);
  Test({LINENUM}46923, 'contains(s, 123)', False);
  Test({LINENUM}46924, 'contains(s, i)', False);
  Test({LINENUM}46925, 'contains(s, color("silver"))', False);
  Test({LINENUM}46926, 'contains(s, 12.5)', False);
  Test({LINENUM}46927, 'contains(s, chr(0))', False);
  Test({LINENUM}46928, 'contains(s, """")', False);

  Test({LINENUM}46930, 'L ≔ ''(3, i, 2, 5, 4, −i, 1 + i, 5, 10, 20, 123.456, 2048, 75, 10, 2, 2);', null);

  Test({LINENUM}46932, 'contains(L, 1)', False);
  Test({LINENUM}46933, 'contains(L, 2)', True);
  Test({LINENUM}46934, 'contains(L, 3)', True);
  Test({LINENUM}46935, 'contains(L, 4)', True);
  Test({LINENUM}46936, 'contains(L, 5)', True);
  Test({LINENUM}46937, 'contains(L, 6)', False);
  Test({LINENUM}46938, 'contains(L, 7)', False);
  Test({LINENUM}46939, 'contains(L, 8)', False);
  Test({LINENUM}46940, 'contains(L, 9)', False);
  Test({LINENUM}46941, 'contains(L, 10)', True);
  Test({LINENUM}46942, 'contains(L, i)', True);
  Test({LINENUM}46943, 'contains(L, -i)', True);
  Test({LINENUM}46944, 'contains(L, 1 + i)', True);
  Test({LINENUM}46945, 'contains(L, 2 + i)', False);
  Test({LINENUM}46946, 'contains(L, 1024)', False);
  Test({LINENUM}46947, 'contains(L, 123)', False);
  Test({LINENUM}46948, 'contains(L, 123.456)', True);
  Test({LINENUM}46949, 'contains(L, 0)', False);
  Test({LINENUM}46950, 'contains(L, "cat")', False);
  Test({LINENUM}46951, 'contains(L, true)', False);
  Test({LINENUM}46952, 'contains(L, IdentityMatrix(6))', False);
  Test({LINENUM}46953, 'contains(L, color("red"))', False);

  Test({LINENUM}46955, 'contains(''(3, i, 2, 5, 4, −i, 1 + i, 5, 10, 20, 123.456, 2048, 75, 10, 2, 2), 123.456)', True);
  Test({LINENUM}46956, 'contains(''(3, i, 2, 5, 4, −i, 1 + i, 5, 10, 20, 123.456, 2048, 75, 10, 2, 2), 0)', False);
  Test({LINENUM}46957, 'contains(''(), 0)', False);

  Test({LINENUM}46959, 'S ≔ {3, i, 2, 5, 4, −i, 1 + i, 5, 10, 20, 123.456, 2048, 75, 10, 2, 2};', null);

  Test({LINENUM}46961, 'contains(S, 1)', False);
  Test({LINENUM}46962, 'contains(S, 2)', True);
  Test({LINENUM}46963, 'contains(S, 3)', True);
  Test({LINENUM}46964, 'contains(S, 4)', True);
  Test({LINENUM}46965, 'contains(S, 5)', True);
  Test({LINENUM}46966, 'contains(S, 6)', False);
  Test({LINENUM}46967, 'contains(S, 7)', False);
  Test({LINENUM}46968, 'contains(S, 8)', False);
  Test({LINENUM}46969, 'contains(S, 9)', False);
  Test({LINENUM}46970, 'contains(S, 10)', True);
  Test({LINENUM}46971, 'contains(S, i)', True);
  Test({LINENUM}46972, 'contains(S, -i)', True);
  Test({LINENUM}46973, 'contains(S, 1 + i)', True);
  Test({LINENUM}46974, 'contains(S, 2 + i)', False);
  Test({LINENUM}46975, 'contains(S, 1024)', False);
  Test({LINENUM}46976, 'contains(S, 123)', False);
  Test({LINENUM}46977, 'contains(S, 123.456)', True);
  Test({LINENUM}46978, 'contains(S, 0)', False);
  Test({LINENUM}46979, 'contains(S, "cat")', False);
  Test({LINENUM}46980, 'contains(S, true)', False);
  Test({LINENUM}46981, 'contains(S, IdentityMatrix(6))', False);
  Test({LINENUM}46982, 'contains(S, color("red"))', False);

  Test({LINENUM}46984, 'contains({3, i, 2, 5, 4, −i, 1 + i, 5, 10, 20, 123.456, 2048, 75, 10, 2, 2}, 123.456)', True);
  Test({LINENUM}46985, 'contains({3, i, 2, 5, 4, −i, 1 + i, 5, 10, 20, 123.456, 2048, 75, 10, 2, 2}, 0)', False);
  Test({LINENUM}46986, 'contains({}, 0)', False);

  Test({LINENUM}46988, 'S ≔ struct("name": "Sirius", "age": 43, "points": 152000);', null);

  Test({LINENUM}46990, 'contains(S, "Remus")', False);
  Test({LINENUM}46991, 'contains(S, "Arthur")', False);
  Test({LINENUM}46992, 'contains(S, "Horace")', False);
  Test({LINENUM}46993, 'contains(S, "Hagrid")', False);
  Test({LINENUM}46994, 'contains(S, "Sirius")', True);
  Test({LINENUM}46995, 'contains(S, "Minerva")', False);
  Test({LINENUM}46996, 'contains(S, "Albus")', False);
  Test({LINENUM}46997, 'contains(S, "Severus")', False);
  Test({LINENUM}46998, 'contains(S, "Molly")', False);

  Test({LINENUM}47000, 'contains(S, 100)', False);
  Test({LINENUM}47001, 'contains(S, 25)', False);
  Test({LINENUM}47002, 'contains(S, 50)', False);
  Test({LINENUM}47003, 'contains(S, 57)', False);
  Test({LINENUM}47004, 'contains(S, 53)', False);
  Test({LINENUM}47005, 'contains(S, 43)', True);
  Test({LINENUM}47006, 'contains(S, 80)', False);
  Test({LINENUM}47007, 'contains(S, 84)', False);
  Test({LINENUM}47008, 'contains(S, 121)', False);

  Test({LINENUM}47010, 'contains(S, 150000)', False);
  Test({LINENUM}47011, 'contains(S, 151000)', False);
  Test({LINENUM}47012, 'contains(S, 152000)', True);
  Test({LINENUM}47013, 'contains(S, 153000)', False);
  Test({LINENUM}47014, 'contains(S, 154000)', False);

  Test({LINENUM}47016, 'contains(struct("name": "Sirius", "age": 43, "points": 152000), "Hagrid")', False);
  Test({LINENUM}47017, 'contains(struct("name": "Sirius", "age": 43, "points": 152000), "Sirius")', True);
  Test({LINENUM}47018, 'contains(struct(), "Hagrid")', False);

  Test({LINENUM}47020, 'contains(123, 1)', failure, 'Object type "integer" is not a suitable container.');
  Test({LINENUM}47021, 'contains(123.456, 1)', failure, 'Object type "real number" is not a suitable container.');
  Test({LINENUM}47022, 'contains(i, 1)', failure, 'Object type "complex number" is not a suitable container.');

  Test({LINENUM}47024, 'v ≔ ❨5, 3, 2, 0.9999, 7.001, 10.01❩;', null);

  Test({LINENUM}47026, 'contains(v, 5)', True);
  Test({LINENUM}47027, 'contains(v, 5, 2E-8)', True);
  Test({LINENUM}47028, 'contains(v, 5, 2E-7)', True);
  Test({LINENUM}47029, 'contains(v, 5, 2E-6)', True);
  Test({LINENUM}47030, 'contains(v, 5, 2E-5)', True);
  Test({LINENUM}47031, 'contains(v, 5, 2E-4)', True);
  Test({LINENUM}47032, 'contains(v, 5, 2E-3)', True);
  Test({LINENUM}47033, 'contains(v, 5, 2E-2)', True);
  Test({LINENUM}47034, 'contains(v, 5, 2E-1)', True);

  Test({LINENUM}47036, 'contains(v, 1)', False);
  Test({LINENUM}47037, 'contains(v, 1, 2E-8)', False);
  Test({LINENUM}47038, 'contains(v, 1, 2E-7)', False);
  Test({LINENUM}47039, 'contains(v, 1, 2E-6)', False);
  Test({LINENUM}47040, 'contains(v, 1, 2E-5)', False);
  Test({LINENUM}47041, 'contains(v, 1, 2E-4)', True);
  Test({LINENUM}47042, 'contains(v, 1, 2E-3)', True);
  Test({LINENUM}47043, 'contains(v, 1, 2E-2)', True);
  Test({LINENUM}47044, 'contains(v, 1, 2E-1)', True);

  Test({LINENUM}47046, 'contains(v, 7)', False);
  Test({LINENUM}47047, 'contains(v, 7, 2E-8)', False);
  Test({LINENUM}47048, 'contains(v, 7, 2E-7)', False);
  Test({LINENUM}47049, 'contains(v, 7, 2E-6)', False);
  Test({LINENUM}47050, 'contains(v, 7, 2E-5)', False);
  Test({LINENUM}47051, 'contains(v, 7, 2E-4)', False);
  Test({LINENUM}47052, 'contains(v, 7, 2E-3)', True);
  Test({LINENUM}47053, 'contains(v, 7, 2E-2)', True);
  Test({LINENUM}47054, 'contains(v, 7, 2E-1)', True);

  Test({LINENUM}47056, 'contains(v, i, 2E-1)', False);
  Test({LINENUM}47057, 'contains(v, "cat", 2E-1)', False);
  Test({LINENUM}47058, 'contains(v, color("red"), 2E-1)', False);

  Test({LINENUM}47060, 'contains(❨5, 3, 2, 0.9999, 7.001, 10.01❩, 7, 2E-4)', False);
  Test({LINENUM}47061, 'contains(❨5, 3, 2, 0.9999, 7.001, 10.01❩, 7, 2E-3)', True);
  Test({LINENUM}47062, 'contains(DebugObject("empty vector"), 7, 2E-5)', False);

  Test({LINENUM}47064, 'v ≔ ❨5, 3, 2, 0.9999, 7.001⋅i, 10.01❩;', null);

  Test({LINENUM}47066, 'contains(v, 5)', True);
  Test({LINENUM}47067, 'contains(v, 5, 2E-8)', True);
  Test({LINENUM}47068, 'contains(v, 5, 2E-7)', True);
  Test({LINENUM}47069, 'contains(v, 5, 2E-6)', True);
  Test({LINENUM}47070, 'contains(v, 5, 2E-5)', True);
  Test({LINENUM}47071, 'contains(v, 5, 2E-4)', True);
  Test({LINENUM}47072, 'contains(v, 5, 2E-3)', True);
  Test({LINENUM}47073, 'contains(v, 5, 2E-2)', True);
  Test({LINENUM}47074, 'contains(v, 5, 2E-1)', True);

  Test({LINENUM}47076, 'contains(v, 1)', False);
  Test({LINENUM}47077, 'contains(v, 1, 2E-8)', False);
  Test({LINENUM}47078, 'contains(v, 1, 2E-7)', False);
  Test({LINENUM}47079, 'contains(v, 1, 2E-6)', False);
  Test({LINENUM}47080, 'contains(v, 1, 2E-5)', False);
  Test({LINENUM}47081, 'contains(v, 1, 2E-4)', True);
  Test({LINENUM}47082, 'contains(v, 1, 2E-3)', True);
  Test({LINENUM}47083, 'contains(v, 1, 2E-2)', True);
  Test({LINENUM}47084, 'contains(v, 1, 2E-1)', True);

  Test({LINENUM}47086, 'contains(v, 7⋅i)', False);
  Test({LINENUM}47087, 'contains(v, 7⋅i, 2E-8)', False);
  Test({LINENUM}47088, 'contains(v, 7⋅i, 2E-7)', False);
  Test({LINENUM}47089, 'contains(v, 7⋅i, 2E-6)', False);
  Test({LINENUM}47090, 'contains(v, 7⋅i, 2E-5)', False);
  Test({LINENUM}47091, 'contains(v, 7⋅i, 2E-4)', False);
  Test({LINENUM}47092, 'contains(v, 7⋅i, 2E-3)', True);
  Test({LINENUM}47093, 'contains(v, 7⋅i, 2E-2)', True);
  Test({LINENUM}47094, 'contains(v, 7⋅i, 2E-1)', True);

  Test({LINENUM}47096, 'contains(v, i, 2E-1)', False);
  Test({LINENUM}47097, 'contains(v, "cat", 2E-1)', False);
  Test({LINENUM}47098, 'contains(v, color("red"), 2E-1)', False);

  Test({LINENUM}47100, 'contains(❨5, 3, 2, 0.9999, 7.001⋅i, 10.01❩, 7⋅i, 2E-4)', False);
  Test({LINENUM}47101, 'contains(❨5, 3, 2, 0.9999, 7.001⋅i, 10.01❩, 7⋅i, 2E-3)', True);
  Test({LINENUM}47102, 'contains(ComplexVector(DebugObject("empty vector")), 7⋅i, 2E-5)', False);

  Test({LINENUM}47104, 'A ≔ ❨❨5, 3, 2❩, ❨0.9999, 7.001, 10.01❩❩;', null);

  Test({LINENUM}47106, 'contains(A, 5)', True);
  Test({LINENUM}47107, 'contains(A, 5, 2E-8)', True);
  Test({LINENUM}47108, 'contains(A, 5, 2E-7)', True);
  Test({LINENUM}47109, 'contains(A, 5, 2E-6)', True);
  Test({LINENUM}47110, 'contains(A, 5, 2E-5)', True);
  Test({LINENUM}47111, 'contains(A, 5, 2E-4)', True);
  Test({LINENUM}47112, 'contains(A, 5, 2E-3)', True);
  Test({LINENUM}47113, 'contains(A, 5, 2E-2)', True);
  Test({LINENUM}47114, 'contains(A, 5, 2E-1)', True);

  Test({LINENUM}47116, 'contains(A, 1)', False);
  Test({LINENUM}47117, 'contains(A, 1, 2E-8)', False);
  Test({LINENUM}47118, 'contains(A, 1, 2E-7)', False);
  Test({LINENUM}47119, 'contains(A, 1, 2E-6)', False);
  Test({LINENUM}47120, 'contains(A, 1, 2E-5)', False);
  Test({LINENUM}47121, 'contains(A, 1, 2E-4)', True);
  Test({LINENUM}47122, 'contains(A, 1, 2E-3)', True);
  Test({LINENUM}47123, 'contains(A, 1, 2E-2)', True);
  Test({LINENUM}47124, 'contains(A, 1, 2E-1)', True);

  Test({LINENUM}47126, 'contains(A, 7)', False);
  Test({LINENUM}47127, 'contains(A, 7, 2E-8)', False);
  Test({LINENUM}47128, 'contains(A, 7, 2E-7)', False);
  Test({LINENUM}47129, 'contains(A, 7, 2E-6)', False);
  Test({LINENUM}47130, 'contains(A, 7, 2E-5)', False);
  Test({LINENUM}47131, 'contains(A, 7, 2E-4)', False);
  Test({LINENUM}47132, 'contains(A, 7, 2E-3)', True);
  Test({LINENUM}47133, 'contains(A, 7, 2E-2)', True);
  Test({LINENUM}47134, 'contains(A, 7, 2E-1)', True);

  Test({LINENUM}47136, 'contains(A, i, 2E-1)', False);
  Test({LINENUM}47137, 'contains(A, "cat", 2E-1)', False);
  Test({LINENUM}47138, 'contains(A, color("red"), 2E-1)', False);

  Test({LINENUM}47140, 'contains(❨❨5, 3, 2❩, ❨0.9999, 7.001, 10.01❩❩, 7, 2E-4)', False);
  Test({LINENUM}47141, 'contains(❨❨5, 3, 2❩, ❨0.9999, 7.001, 10.01❩❩, 7, 2E-3)', True);
  Test({LINENUM}47142, 'contains(DebugObject("empty matrix"), 7, 2E-5)', False);

  Test({LINENUM}47144, 'A ≔ ❨❨5, 3, 2❩, ❨0.9999, 7.001⋅i, 10.01❩❩;', null);

  Test({LINENUM}47146, 'contains(A, 5)', True);
  Test({LINENUM}47147, 'contains(A, 5, 2E-8)', True);
  Test({LINENUM}47148, 'contains(A, 5, 2E-7)', True);
  Test({LINENUM}47149, 'contains(A, 5, 2E-6)', True);
  Test({LINENUM}47150, 'contains(A, 5, 2E-5)', True);
  Test({LINENUM}47151, 'contains(A, 5, 2E-4)', True);
  Test({LINENUM}47152, 'contains(A, 5, 2E-3)', True);
  Test({LINENUM}47153, 'contains(A, 5, 2E-2)', True);
  Test({LINENUM}47154, 'contains(A, 5, 2E-1)', True);

  Test({LINENUM}47156, 'contains(A, 1)', False);
  Test({LINENUM}47157, 'contains(A, 1, 2E-8)', False);
  Test({LINENUM}47158, 'contains(A, 1, 2E-7)', False);
  Test({LINENUM}47159, 'contains(A, 1, 2E-6)', False);
  Test({LINENUM}47160, 'contains(A, 1, 2E-5)', False);
  Test({LINENUM}47161, 'contains(A, 1, 2E-4)', True);
  Test({LINENUM}47162, 'contains(A, 1, 2E-3)', True);
  Test({LINENUM}47163, 'contains(A, 1, 2E-2)', True);
  Test({LINENUM}47164, 'contains(A, 1, 2E-1)', True);

  Test({LINENUM}47166, 'contains(A, 7⋅i)', False);
  Test({LINENUM}47167, 'contains(A, 7⋅i, 2E-8)', False);
  Test({LINENUM}47168, 'contains(A, 7⋅i, 2E-7)', False);
  Test({LINENUM}47169, 'contains(A, 7⋅i, 2E-6)', False);
  Test({LINENUM}47170, 'contains(A, 7⋅i, 2E-5)', False);
  Test({LINENUM}47171, 'contains(A, 7⋅i, 2E-4)', False);
  Test({LINENUM}47172, 'contains(A, 7⋅i, 2E-3)', True);
  Test({LINENUM}47173, 'contains(A, 7⋅i, 2E-2)', True);
  Test({LINENUM}47174, 'contains(A, 7⋅i, 2E-1)', True);

  Test({LINENUM}47176, 'contains(A, i, 2E-1)', False);
  Test({LINENUM}47177, 'contains(A, "cat", 2E-1)', False);
  Test({LINENUM}47178, 'contains(A, color("red"), 2E-1)', False);

  Test({LINENUM}47180, 'contains(❨❨5, 3, 2❩, ❨0.9999, 7.001⋅i, 10.01❩❩, 7⋅i, 2E-4)', False);
  Test({LINENUM}47181, 'contains(❨❨5, 3, 2❩, ❨0.9999, 7.001⋅i, 10.01❩❩, 7⋅i, 2E-3)', True);
  Test({LINENUM}47182, 'contains(ComplexMatrix(DebugObject("empty matrix")), 7⋅i, 2E-5)', False);

  Test({LINENUM}47184, 's ≔ "the emotional range of a teaspoon";', null);

  Test({LINENUM}47186, 'contains(s, "a", 0.001)', True);
  Test({LINENUM}47187, 'contains(s, "e", 0.001)', True);
  Test({LINENUM}47188, 'contains(s, "t", 0.001)', True);
  Test({LINENUM}47189, 'contains(s, " ", 0.001)', True);
  Test({LINENUM}47190, 'contains(s, "s", 0.001)', True);
  Test({LINENUM}47191, 'contains(s, "r", 0.001)', True);
  Test({LINENUM}47192, 'contains(s, "q", 0.001)', False);
  Test({LINENUM}47193, 'contains(s, "w", 0.001)', False);
  Test({LINENUM}47194, 'contains(s, "!", 0.001)', False);
  Test({LINENUM}47195, 'contains(s, "?", 0.001)', False);
  Test({LINENUM}47196, 'contains(s, "☃", 0.001)', False);
//  Test({LINENUM}47197, 'contains(s, "the", 0.001)', True); // meaningless feature not implemented
//  Test({LINENUM}47198, 'contains(s, "emotional", 0.001)', True);
//  Test({LINENUM}47199, 'contains(s, "emotion", 0.001)', True);
  Test({LINENUM}47200, 'contains(s, "intellectual", 0.001)', False);
  Test({LINENUM}47201, 'contains(s, "intellect", 0.001)', False);
//  Test({LINENUM}47202, 'contains(s, "teaspoon", 0.001)', True);
  Test({LINENUM}47203, 'contains(s, "coffee spoon", 0.001)', False);
  Test({LINENUM}47204, 'contains(s, "unicorn", 0.001)', False);
  Test({LINENUM}47205, 'contains(s, true, 0.001)', False);
  Test({LINENUM}47206, 'contains(s, 123, 0.001)', False);
  Test({LINENUM}47207, 'contains(s, i, 0.001)', False);
  Test({LINENUM}47208, 'contains(s, color("silver"), 0.001)', False);
  Test({LINENUM}47209, 'contains(s, 12.5, 0.001)', False);
  Test({LINENUM}47210, 'contains(s, chr(0), 0.001)', False);
  Test({LINENUM}47211, 'contains(s, """", 0.001)', False);

  Test({LINENUM}47213, 'L ≔ ''(5, 3, 2, 0.9999, 7.001, 10.01);', null);

  Test({LINENUM}47215, 'contains(L, 5)', True);
  Test({LINENUM}47216, 'contains(L, 5, 2E-8)', True);
  Test({LINENUM}47217, 'contains(L, 5, 2E-7)', True);
  Test({LINENUM}47218, 'contains(L, 5, 2E-6)', True);
  Test({LINENUM}47219, 'contains(L, 5, 2E-5)', True);
  Test({LINENUM}47220, 'contains(L, 5, 2E-4)', True);
  Test({LINENUM}47221, 'contains(L, 5, 2E-3)', True);
  Test({LINENUM}47222, 'contains(L, 5, 2E-2)', True);
  Test({LINENUM}47223, 'contains(L, 5, 2E-1)', True);

  Test({LINENUM}47225, 'contains(L, 1)', False);
  Test({LINENUM}47226, 'contains(L, 1, 2E-8)', False);
  Test({LINENUM}47227, 'contains(L, 1, 2E-7)', False);
  Test({LINENUM}47228, 'contains(L, 1, 2E-6)', False);
  Test({LINENUM}47229, 'contains(L, 1, 2E-5)', False);
  Test({LINENUM}47230, 'contains(L, 1, 2E-4)', True);
  Test({LINENUM}47231, 'contains(L, 1, 2E-3)', True);
  Test({LINENUM}47232, 'contains(L, 1, 2E-2)', True);
  Test({LINENUM}47233, 'contains(L, 1, 2E-1)', True);

  Test({LINENUM}47235, 'contains(L, 7)', False);
  Test({LINENUM}47236, 'contains(L, 7, 2E-8)', False);
  Test({LINENUM}47237, 'contains(L, 7, 2E-7)', False);
  Test({LINENUM}47238, 'contains(L, 7, 2E-6)', False);
  Test({LINENUM}47239, 'contains(L, 7, 2E-5)', False);
  Test({LINENUM}47240, 'contains(L, 7, 2E-4)', False);
  Test({LINENUM}47241, 'contains(L, 7, 2E-3)', True);
  Test({LINENUM}47242, 'contains(L, 7, 2E-2)', True);
  Test({LINENUM}47243, 'contains(L, 7, 2E-1)', True);

  Test({LINENUM}47245, 'contains(L, i, 2E-1)', False);
  Test({LINENUM}47246, 'contains(L, "cat", 2E-1)', False);
  Test({LINENUM}47247, 'contains(L, color("red"), 2E-1)', False);

  Test({LINENUM}47249, 'contains(''(5, 3, 2, 0.9999, 7.001, 10.01), 7, 2E-4)', False);
  Test({LINENUM}47250, 'contains(''(5, 3, 2, 0.9999, 7.001, 10.01), 7, 2E-3)', True);
  Test({LINENUM}47251, 'contains(''(), 7, 2E-5)', False);

  Test({LINENUM}47253, 'S ≔ {5, 3, 2, 0.9999, 7.001, 10.01};', null);

  Test({LINENUM}47255, 'contains(S, 5)', True);
  Test({LINENUM}47256, 'contains(S, 5, 2E-8)', True);
  Test({LINENUM}47257, 'contains(S, 5, 2E-7)', True);
  Test({LINENUM}47258, 'contains(S, 5, 2E-6)', True);
  Test({LINENUM}47259, 'contains(S, 5, 2E-5)', True);
  Test({LINENUM}47260, 'contains(S, 5, 2E-4)', True);
  Test({LINENUM}47261, 'contains(S, 5, 2E-3)', True);
  Test({LINENUM}47262, 'contains(S, 5, 2E-2)', True);
  Test({LINENUM}47263, 'contains(S, 5, 2E-1)', True);

  Test({LINENUM}47265, 'contains(S, 1)', False);
  Test({LINENUM}47266, 'contains(S, 1, 2E-8)', False);
  Test({LINENUM}47267, 'contains(S, 1, 2E-7)', False);
  Test({LINENUM}47268, 'contains(S, 1, 2E-6)', False);
  Test({LINENUM}47269, 'contains(S, 1, 2E-5)', False);
  Test({LINENUM}47270, 'contains(S, 1, 2E-4)', True);
  Test({LINENUM}47271, 'contains(S, 1, 2E-3)', True);
  Test({LINENUM}47272, 'contains(S, 1, 2E-2)', True);
  Test({LINENUM}47273, 'contains(S, 1, 2E-1)', True);

  Test({LINENUM}47275, 'contains(S, 7)', False);
  Test({LINENUM}47276, 'contains(S, 7, 2E-8)', False);
  Test({LINENUM}47277, 'contains(S, 7, 2E-7)', False);
  Test({LINENUM}47278, 'contains(S, 7, 2E-6)', False);
  Test({LINENUM}47279, 'contains(S, 7, 2E-5)', False);
  Test({LINENUM}47280, 'contains(S, 7, 2E-4)', False);
  Test({LINENUM}47281, 'contains(S, 7, 2E-3)', True);
  Test({LINENUM}47282, 'contains(S, 7, 2E-2)', True);
  Test({LINENUM}47283, 'contains(S, 7, 2E-1)', True);

  Test({LINENUM}47285, 'contains(S, i, 2E-1)', False);
  Test({LINENUM}47286, 'contains(S, "cat", 2E-1)', False);
  Test({LINENUM}47287, 'contains(S, color("red"), 2E-1)', False);

  Test({LINENUM}47289, 'contains({5, 3, 2, 0.9999, 7.001, 10.01}, 7, 2E-4)', False);
  Test({LINENUM}47290, 'contains({5, 3, 2, 0.9999, 7.001, 10.01}, 7, 2E-3)', True);
  Test({LINENUM}47291, 'contains({}, 7, 2E-5)', False);

  Test({LINENUM}47293, 'S ≔ struct("name": "Sirius", "age": 43, "points": 152000);', null);

  Test({LINENUM}47295, 'contains(S, "Remus", 0.001)', False);
  Test({LINENUM}47296, 'contains(S, "Arthur", 0.001)', False);
  Test({LINENUM}47297, 'contains(S, "Horace", 0.001)', False);
  Test({LINENUM}47298, 'contains(S, "Hagrid", 0.001)', False);
  Test({LINENUM}47299, 'contains(S, "Sirius", 0.001)', True);
  Test({LINENUM}47300, 'contains(S, "Minerva", 0.001)', False);
  Test({LINENUM}47301, 'contains(S, "Albus", 0.001)', False);
  Test({LINENUM}47302, 'contains(S, "Severus", 0.001)', False);
  Test({LINENUM}47303, 'contains(S, "Molly", 0.001)', False);

  Test({LINENUM}47305, 'contains(S, 100, 0.001)', False);
  Test({LINENUM}47306, 'contains(S, 25, 0.001)', False);
  Test({LINENUM}47307, 'contains(S, 50, 0.001)', False);
  Test({LINENUM}47308, 'contains(S, 57, 0.001)', False);
  Test({LINENUM}47309, 'contains(S, 53, 0.001)', False);
  Test({LINENUM}47310, 'contains(S, 43, 0.001)', True);
  Test({LINENUM}47311, 'contains(S, 80, 0.001)', False);
  Test({LINENUM}47312, 'contains(S, 84, 0.001)', False);
  Test({LINENUM}47313, 'contains(S, 121, 0.001)', False);

  Test({LINENUM}47315, 'contains(S, 150000, 0.001)', False);
  Test({LINENUM}47316, 'contains(S, 151000, 0.001)', False);
  Test({LINENUM}47317, 'contains(S, 152000, 0.001)', True);
  Test({LINENUM}47318, 'contains(S, 153000, 0.001)', False);
  Test({LINENUM}47319, 'contains(S, 154000, 0.001)', False);

  Test({LINENUM}47321, 'contains(S, 150000, 0.001)', False);
  Test({LINENUM}47322, 'contains(S, 150000, 1)', False);
  Test({LINENUM}47323, 'contains(S, 150000, 3)', False);
  Test({LINENUM}47324, 'contains(S, 150000, 30)', False);
  Test({LINENUM}47325, 'contains(S, 150000, 300)', False);
  Test({LINENUM}47326, 'contains(S, 150000, 3000)', True);

  Test({LINENUM}47328, 'contains(struct(), 150000, 0.001)', False);

  Test({LINENUM}47330, 'contains(123, 1, 0.1)', failure, 'Object type "integer" is not a suitable container.');

  Test({LINENUM}47332, 'contains(v, 1, -0.1)', failure, 'A non-negative real number was expected as argument 3, but "-0.1" was given.');

  Test({LINENUM}47334, 'contains(v)', failure, 'There is no version of this function that can take 1 argument(s).');

  // exists

  Test({LINENUM}47338, 'v ≔ ❨6, 3, 0, 1, 7, 5, 8, 9, 6, 10❩;', null);

  Test({LINENUM}47340, '∃(v, odd)', True);
  Test({LINENUM}47341, '∃(v, even)', True);
  Test({LINENUM}47342, '∃(v, IsPositive)', True);
  Test({LINENUM}47343, '∃(v, IsZero)', True);
  Test({LINENUM}47344, '∃(v, IsNegative)', False);
  Test({LINENUM}47345, '∃(v, IsPrime)', True);
  Test({LINENUM}47346, '∃(v, IsInteger)', True);
  Test({LINENUM}47347, '∃(v, x ↦ abs(x) ≥ 100)', False);

  Test({LINENUM}47349, 'v ≔ ❨6, 2, 8, 10, 42, 68, 40, 100❩;', null);

  Test({LINENUM}47351, '∃(v, odd)', False);
  Test({LINENUM}47352, '∃(v, even)', True);
  Test({LINENUM}47353, '∃(v, IsPositive)', True);
  Test({LINENUM}47354, '∃(v, IsZero)', False);
  Test({LINENUM}47355, '∃(v, IsNegative)', False);
  Test({LINENUM}47356, '∃(v, IsPrime)', True);
  Test({LINENUM}47357, '∃(v, IsInteger)', True);
  Test({LINENUM}47358, '∃(v, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47360, 'v ≔ ❨-7, -3, -51, 1, -91, -103❩;', null);

  Test({LINENUM}47362, '∃(v, odd)', True);
  Test({LINENUM}47363, '∃(v, even)', False);
  Test({LINENUM}47364, '∃(v, IsPositive)', True);
  Test({LINENUM}47365, '∃(v, IsZero)', False);
  Test({LINENUM}47366, '∃(v, IsNegative)', True);
  Test({LINENUM}47367, '∃(v, IsPrime)', False);
  Test({LINENUM}47368, '∃(v, IsInteger)', True);
  Test({LINENUM}47369, '∃(v, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47371, 'v ≔ ❨-40, 2, 80, 102❩;', null);

  Test({LINENUM}47373, '∃(v, odd)', False);
  Test({LINENUM}47374, '∃(v, even)', True);
  Test({LINENUM}47375, '∃(v, IsPositive)', True);
  Test({LINENUM}47376, '∃(v, IsZero)', False);
  Test({LINENUM}47377, '∃(v, IsNegative)', True);
  Test({LINENUM}47378, '∃(v, IsPrime)', True);
  Test({LINENUM}47379, '∃(v, IsInteger)', True);
  Test({LINENUM}47380, '∃(v, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47382, 'v ≔ DebugObject("empty vector");', null);

  Test({LINENUM}47384, '∃(v, odd)', False);
  Test({LINENUM}47385, '∃(v, even)', False);
  Test({LINENUM}47386, '∃(v, IsPositive)', False);
  Test({LINENUM}47387, '∃(v, IsZero)', False);
  Test({LINENUM}47388, '∃(v, IsNegative)', False);
  Test({LINENUM}47389, '∃(v, IsPrime)', False);
  Test({LINENUM}47390, '∃(v, IsInteger)', False);
  Test({LINENUM}47391, '∃(v, x ↦ abs(x) ≥ 100)', False);

  Test({LINENUM}47393, '∃(❨5.1, 2.3, 6.7, 1.2, 5.2, 4.3❩, x ↦ frac(x) > 0.5)', True);
  Test({LINENUM}47394, '∃(❨5.1, 2.3, 6.3, 1.2, 5.2, 4.3❩, x ↦ frac(x) > 0.5)', False);

  Test({LINENUM}47396, 'v ≔ ❨6.6, 3.2, 0.4, 1.7, 7.1, 5.5, 8.1, 9.4, 6.1, 10.7❩;', null);

  Test({LINENUM}47398, '∃(v, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}47400, 'A ≔ ❨❨6, 3, 0, 1, 7❩, ❨5, 8, 9, 6, 10❩❩;', null);

  Test({LINENUM}47402, '∃(A, odd)', True);
  Test({LINENUM}47403, '∃(A, even)', True);
  Test({LINENUM}47404, '∃(A, IsPositive)', True);
  Test({LINENUM}47405, '∃(A, IsZero)', True);
  Test({LINENUM}47406, '∃(A, IsNegative)', False);
  Test({LINENUM}47407, '∃(A, IsPrime)', True);
  Test({LINENUM}47408, '∃(A, IsInteger)', True);
  Test({LINENUM}47409, '∃(A, x ↦ abs(x) ≥ 100)', False);

  Test({LINENUM}47411, 'A ≔ ❨❨6, 2, 8, 10❩, ❨42, 68, 40, 100❩❩;', null);

  Test({LINENUM}47413, '∃(A, odd)', False);
  Test({LINENUM}47414, '∃(A, even)', True);
  Test({LINENUM}47415, '∃(A, IsPositive)', True);
  Test({LINENUM}47416, '∃(A, IsZero)', False);
  Test({LINENUM}47417, '∃(A, IsNegative)', False);
  Test({LINENUM}47418, '∃(A, IsPrime)', True);
  Test({LINENUM}47419, '∃(A, IsInteger)', True);
  Test({LINENUM}47420, '∃(A, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47422, 'A ≔ ❨❨-7, -3, -51❩, ❨1, -91, -103❩❩;', null);

  Test({LINENUM}47424, '∃(A, odd)', True);
  Test({LINENUM}47425, '∃(A, even)', False);
  Test({LINENUM}47426, '∃(A, IsPositive)', True);
  Test({LINENUM}47427, '∃(A, IsZero)', False);
  Test({LINENUM}47428, '∃(A, IsNegative)', True);
  Test({LINENUM}47429, '∃(A, IsPrime)', False);
  Test({LINENUM}47430, '∃(A, IsInteger)', True);
  Test({LINENUM}47431, '∃(A, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47433, 'A ≔ ❨❨-40, 2❩, ❨80, 102❩❩;', null);

  Test({LINENUM}47435, '∃(A, odd)', False);
  Test({LINENUM}47436, '∃(A, even)', True);
  Test({LINENUM}47437, '∃(A, IsPositive)', True);
  Test({LINENUM}47438, '∃(A, IsZero)', False);
  Test({LINENUM}47439, '∃(A, IsNegative)', True);
  Test({LINENUM}47440, '∃(A, IsPrime)', True);
  Test({LINENUM}47441, '∃(A, IsInteger)', True);
  Test({LINENUM}47442, '∃(A, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47444, 'A ≔ DebugObject("empty matrix");', null);

  Test({LINENUM}47446, '∃(A, odd)', False);
  Test({LINENUM}47447, '∃(A, even)', False);
  Test({LINENUM}47448, '∃(A, IsPositive)', False);
  Test({LINENUM}47449, '∃(A, IsZero)', False);
  Test({LINENUM}47450, '∃(A, IsNegative)', False);
  Test({LINENUM}47451, '∃(A, IsPrime)', False);
  Test({LINENUM}47452, '∃(A, IsInteger)', False);
  Test({LINENUM}47453, '∃(A, x ↦ abs(x) ≥ 100)', False);

  Test({LINENUM}47455, '∃(❨❨5.1, 2.3, 6.7❩, ❨1.2, 5.2, 4.3❩❩, x ↦ frac(x) > 0.5)', True);
  Test({LINENUM}47456, '∃(❨❨5.1, 2.3, 6.3❩, ❨1.2, 5.2, 4.3❩❩, x ↦ frac(x) > 0.5)', False);

  Test({LINENUM}47458, 'v ≔ ❨❨6.6, 3.2, 0.4, 1.7, 7.1❩, ❨5.5, 8.1, 9.4, 6.1, 10.7❩❩;', null);

  Test({LINENUM}47460, '∃(v, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}47462, 'v ≔ ❨3, 1 + i, 5 + 2⋅i, 2⋅i, −3 + 4⋅i, 5 + i❩;', null);

  Test({LINENUM}47464, '∃(v, IsReal)', True);
  Test({LINENUM}47465, '∃(v, IsInteger)', True);
  Test({LINENUM}47466, '∃(v, z ↦ Re(z) > 1)', True);
  Test({LINENUM}47467, '∃(v, z ↦ Re(z) > 5)', False);
  Test({LINENUM}47468, '∃(v, z ↦ Im(z) > 0)', True);
  Test({LINENUM}47469, '∃(v, z ↦ Im(z) < 0)', False);

  Test({LINENUM}47471, 'v ≔ ❨3.5, 1 + i, 5 + 2⋅i, 2⋅i, −3 + 4⋅i, 8 + i❩;', null);

  Test({LINENUM}47473, '∃(v, IsReal)', True);
  Test({LINENUM}47474, '∃(v, IsInteger)', False);
  Test({LINENUM}47475, '∃(v, z ↦ Re(z) > 1)', True);
  Test({LINENUM}47476, '∃(v, z ↦ Re(z) > 5)', True);
  Test({LINENUM}47477, '∃(v, z ↦ Im(z) > 0)', True);
  Test({LINENUM}47478, '∃(v, z ↦ Im(z) < 0)', False);

  Test({LINENUM}47480, 'v ≔ ❨3.5 − i, 1 + i, 5 + 2⋅i, 2⋅i, −3 + 4⋅i, 8 + i❩;', null);

  Test({LINENUM}47482, '∃(v, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}47483, '∃(v, IsReal)', False);
  Test({LINENUM}47484, '∃(v, IsInteger)', False);
  Test({LINENUM}47485, '∃(v, z ↦ Re(z) > 1)', True);
  Test({LINENUM}47486, '∃(v, z ↦ Re(z) > 5)', True);
  Test({LINENUM}47487, '∃(v, z ↦ Im(z) > 0)', True);
  Test({LINENUM}47488, '∃(v, z ↦ Im(z) < 0)', True);

  Test({LINENUM}47490, 'v ≔ ComplexVector(DebugObject("empty vector"));', null);

  Test({LINENUM}47492, '∃(v, IsReal)', False);
  Test({LINENUM}47493, '∃(v, IsInteger)', False);
  Test({LINENUM}47494, '∃(v, z ↦ Re(z) > 1)', False);
  Test({LINENUM}47495, '∃(v, z ↦ Re(z) > 5)', False);
  Test({LINENUM}47496, '∃(v, z ↦ Im(z) > 0)', False);
  Test({LINENUM}47497, '∃(v, z ↦ Im(z) < 0)', False);

  Test({LINENUM}47499, '∃(❨3.5, 1 + i, 5 + 2⋅i, 2⋅i, −3 + 4⋅i, 8 + i❩, z ↦ Im(z) > 0)', True);
  Test({LINENUM}47500, '∃(❨3.5, 1 + i, 5 + 2⋅i, 2⋅i, −3 + 4⋅i, 8 + i❩, z ↦ Im(z) < 0)', False);

  Test({LINENUM}47502, 'A ≔ ❨❨3, 1 + i, 5 + 2⋅i❩, ❨2⋅i, −3 + 4⋅i, 5 + i❩❩;', null);

  Test({LINENUM}47504, '∃(A, IsReal)', True);
  Test({LINENUM}47505, '∃(A, IsInteger)', True);
  Test({LINENUM}47506, '∃(A, z ↦ Re(z) > 1)', True);
  Test({LINENUM}47507, '∃(A, z ↦ Re(z) > 5)', False);
  Test({LINENUM}47508, '∃(A, z ↦ Im(z) > 0)', True);
  Test({LINENUM}47509, '∃(A, z ↦ Im(z) < 0)', False);

  Test({LINENUM}47511, 'A ≔ ❨❨3.5, 1 + i, 5 + 2⋅i❩, ❨2⋅i, −3 + 4⋅i, 8 + i❩❩;', null);

  Test({LINENUM}47513, '∃(A, IsReal)', True);
  Test({LINENUM}47514, '∃(A, IsInteger)', False);
  Test({LINENUM}47515, '∃(A, z ↦ Re(z) > 1)', True);
  Test({LINENUM}47516, '∃(A, z ↦ Re(z) > 5)', True);
  Test({LINENUM}47517, '∃(A, z ↦ Im(z) > 0)', True);
  Test({LINENUM}47518, '∃(A, z ↦ Im(z) < 0)', False);

  Test({LINENUM}47520, 'A ≔ ❨❨3.5 − i, 1 + i, 5 + 2⋅i❩, ❨2⋅i, −3 + 4⋅i, 8 + i❩❩;', null);

  Test({LINENUM}47522, '∃(A, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}47523, '∃(A, IsReal)', False);
  Test({LINENUM}47524, '∃(A, IsInteger)', False);
  Test({LINENUM}47525, '∃(A, z ↦ Re(z) > 1)', True);
  Test({LINENUM}47526, '∃(A, z ↦ Re(z) > 5)', True);
  Test({LINENUM}47527, '∃(A, z ↦ Im(z) > 0)', True);
  Test({LINENUM}47528, '∃(A, z ↦ Im(z) < 0)', True);

  Test({LINENUM}47530, 'A ≔ ComplexMatrix(DebugObject("empty matrix"));', null);

  Test({LINENUM}47532, '∃(A, IsReal)', False);
  Test({LINENUM}47533, '∃(A, IsInteger)', False);
  Test({LINENUM}47534, '∃(A, z ↦ Re(z) > 1)', False);
  Test({LINENUM}47535, '∃(A, z ↦ Re(z) > 5)', False);
  Test({LINENUM}47536, '∃(A, z ↦ Im(z) > 0)', False);
  Test({LINENUM}47537, '∃(A, z ↦ Im(z) < 0)', False);

  Test({LINENUM}47539, '∃(❨❨3.5, 1 + i, 5 + 2⋅i❩, ❨2⋅i, −3 + 4⋅i, 8 + i❩❩, z ↦ Im(z) > 0)', True);
  Test({LINENUM}47540, '∃(❨❨3.5, 1 + i, 5 + 2⋅i❩, ❨2⋅i, −3 + 4⋅i, 8 + i❩❩, z ↦ Im(z) < 0)', False);

  Test({LINENUM}47542, 'L ≔ ''(6, 3, 0, 1, 7, 5, 8, 9, 6, 10);', null);

  Test({LINENUM}47544, '∃(L, odd)', True);
  Test({LINENUM}47545, '∃(L, even)', True);
  Test({LINENUM}47546, '∃(L, IsPositive)', True);
  Test({LINENUM}47547, '∃(L, IsZero)', True);
  Test({LINENUM}47548, '∃(L, IsNegative)', False);
  Test({LINENUM}47549, '∃(L, IsPrime)', True);
  Test({LINENUM}47550, '∃(L, IsInteger)', True);
  Test({LINENUM}47551, '∃(L, x ↦ abs(x) ≥ 100)', False);

  Test({LINENUM}47553, 'L ≔ ''(6, 2, 8, 10, 42, 68, 40, 100);', null);

  Test({LINENUM}47555, '∃(L, odd)', False);
  Test({LINENUM}47556, '∃(L, even)', True);
  Test({LINENUM}47557, '∃(L, IsPositive)', True);
  Test({LINENUM}47558, '∃(L, IsZero)', False);
  Test({LINENUM}47559, '∃(L, IsNegative)', False);
  Test({LINENUM}47560, '∃(L, IsPrime)', True);
  Test({LINENUM}47561, '∃(L, IsInteger)', True);
  Test({LINENUM}47562, '∃(L, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47564, 'L ≔ ''(-7, -3, -51, 1, -91, -103);', null);

  Test({LINENUM}47566, '∃(L, odd)', True);
  Test({LINENUM}47567, '∃(L, even)', False);
  Test({LINENUM}47568, '∃(L, IsPositive)', True);
  Test({LINENUM}47569, '∃(L, IsZero)', False);
  Test({LINENUM}47570, '∃(L, IsNegative)', True);
  Test({LINENUM}47571, '∃(L, IsPrime)', False);
  Test({LINENUM}47572, '∃(L, IsInteger)', True);
  Test({LINENUM}47573, '∃(L, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47575, 'L ≔ ''(-40, 2, 80, 102);', null);

  Test({LINENUM}47577, '∃(L, odd)', False);
  Test({LINENUM}47578, '∃(L, even)', True);
  Test({LINENUM}47579, '∃(L, IsPositive)', True);
  Test({LINENUM}47580, '∃(L, IsZero)', False);
  Test({LINENUM}47581, '∃(L, IsNegative)', True);
  Test({LINENUM}47582, '∃(L, IsPrime)', True);
  Test({LINENUM}47583, '∃(L, IsInteger)', True);
  Test({LINENUM}47584, '∃(L, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47586, 'L ≔ ''();', null);

  Test({LINENUM}47588, '∃(L, odd)', False);
  Test({LINENUM}47589, '∃(L, even)', False);
  Test({LINENUM}47590, '∃(L, IsPositive)', False);
  Test({LINENUM}47591, '∃(L, IsZero)', False);
  Test({LINENUM}47592, '∃(L, IsNegative)', False);
  Test({LINENUM}47593, '∃(L, IsPrime)', False);
  Test({LINENUM}47594, '∃(L, IsInteger)', False);
  Test({LINENUM}47595, '∃(L, x ↦ abs(x) ≥ 100)', False);

  Test({LINENUM}47597, '∃(''(5.1, 2.3, 6.7, 1.2, 5.2, 4.3), x ↦ frac(x) > 0.5)', True);
  Test({LINENUM}47598, '∃(''(5.1, 2.3, 6.3, 1.2, 5.2, 4.3), x ↦ frac(x) > 0.5)', False);

  Test({LINENUM}47600, 'L ≔ ''(6.5, 3.1, 0.7, 1.4, 7.6, 5.2, 8.1, 9.8, 6.4, 10.2);', null);

  Test({LINENUM}47602, '∃(L, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}47604, 'S ≔ {6, 3, 0, 1, 7, 5, 8, 9, 6, 10};', null);

  Test({LINENUM}47606, '∃(S, odd)', True);
  Test({LINENUM}47607, '∃(S, even)', True);
  Test({LINENUM}47608, '∃(S, IsPositive)', True);
  Test({LINENUM}47609, '∃(S, IsZero)', True);
  Test({LINENUM}47610, '∃(S, IsNegative)', False);
  Test({LINENUM}47611, '∃(S, IsPrime)', True);
  Test({LINENUM}47612, '∃(S, IsInteger)', True);
  Test({LINENUM}47613, '∃(S, x ↦ abs(x) ≥ 100)', False);

  Test({LINENUM}47615, 'S ≔ {6, 2, 8, 10, 42, 68, 40, 100};', null);

  Test({LINENUM}47617, '∃(S, odd)', False);
  Test({LINENUM}47618, '∃(S, even)', True);
  Test({LINENUM}47619, '∃(S, IsPositive)', True);
  Test({LINENUM}47620, '∃(S, IsZero)', False);
  Test({LINENUM}47621, '∃(S, IsNegative)', False);
  Test({LINENUM}47622, '∃(S, IsPrime)', True);
  Test({LINENUM}47623, '∃(S, IsInteger)', True);
  Test({LINENUM}47624, '∃(S, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47626, 'S ≔ {-7, -3, -51, 1, -91, -103};', null);

  Test({LINENUM}47628, '∃(S, odd)', True);
  Test({LINENUM}47629, '∃(S, even)', False);
  Test({LINENUM}47630, '∃(S, IsPositive)', True);
  Test({LINENUM}47631, '∃(S, IsZero)', False);
  Test({LINENUM}47632, '∃(S, IsNegative)', True);
  Test({LINENUM}47633, '∃(S, IsPrime)', False);
  Test({LINENUM}47634, '∃(S, IsInteger)', True);
  Test({LINENUM}47635, '∃(S, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47637, 'S ≔ {-40, 2, 80, 102};', null);

  Test({LINENUM}47639, '∃(S, odd)', False);
  Test({LINENUM}47640, '∃(S, even)', True);
  Test({LINENUM}47641, '∃(S, IsPositive)', True);
  Test({LINENUM}47642, '∃(S, IsZero)', False);
  Test({LINENUM}47643, '∃(S, IsNegative)', True);
  Test({LINENUM}47644, '∃(S, IsPrime)', True);
  Test({LINENUM}47645, '∃(S, IsInteger)', True);
  Test({LINENUM}47646, '∃(S, x ↦ abs(x) ≥ 100)', True);

  Test({LINENUM}47648, 'S ≔ {};', null);

  Test({LINENUM}47650, '∃(S, odd)', False);
  Test({LINENUM}47651, '∃(S, even)', False);
  Test({LINENUM}47652, '∃(S, IsPositive)', False);
  Test({LINENUM}47653, '∃(S, IsZero)', False);
  Test({LINENUM}47654, '∃(S, IsNegative)', False);
  Test({LINENUM}47655, '∃(S, IsPrime)', False);
  Test({LINENUM}47656, '∃(S, IsInteger)', False);
  Test({LINENUM}47657, '∃(S, x ↦ abs(x) ≥ 100)', False);

  Test({LINENUM}47659, '∃({5.1, 2.3, 6.7, 1.2, 5.2, 4.3}, x ↦ frac(x) > 0.5)', True);
  Test({LINENUM}47660, '∃({5.1, 2.3, 6.3, 1.2, 5.2, 4.3}, x ↦ frac(x) > 0.5)', False);

  Test({LINENUM}47662, 'S ≔ {6.5, 3.1, 0.7, 1.4, 7.6, 5.2, 8.1, 9.8, 6.4, 10.2};', null);

  Test({LINENUM}47664, '∃(S, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}47666, 's ≔ "the emotional range of a teaspoon";', null);

  Test({LINENUM}47668, '∃(s, ChrIsLetter)', True);
  Test({LINENUM}47669, '∃(s, ChrIsUpperCase)', False);
  Test({LINENUM}47670, '∃(s, ChrIsLowerCase)', True);
  Test({LINENUM}47671, '∃(s, ChrIsDigit)', False);
  Test({LINENUM}47672, '∃(s, ChrIsPunctuation)', False);
  Test({LINENUM}47673, '∃(s, ChrIsWhitespace)', True);

  Test({LINENUM}47675, 's ≔ "Hello, World!";', null);

  Test({LINENUM}47677, '∃(s, ChrIsLetter)', True);
  Test({LINENUM}47678, '∃(s, ChrIsUpperCase)', True);
  Test({LINENUM}47679, '∃(s, ChrIsLowerCase)', True);
  Test({LINENUM}47680, '∃(s, ChrIsDigit)', False);
  Test({LINENUM}47681, '∃(s, ChrIsPunctuation)', True);
  Test({LINENUM}47682, '∃(s, ChrIsWhitespace)', True);

  Test({LINENUM}47684, '∃("7-dehydrocholesterol", ChrIsLetter)', True);
  Test({LINENUM}47685, '∃("7-dehydrocholesterol", ChrIsUpperCase)', False);
  Test({LINENUM}47686, '∃("7-dehydrocholesterol", ChrIsLowerCase)', True);
  Test({LINENUM}47687, '∃("7-dehydrocholesterol", ChrIsDigit)', True);
  Test({LINENUM}47688, '∃("7-dehydrocholesterol", ChrIsPunctuation)', True);
  Test({LINENUM}47689, '∃("7-dehydrocholesterol", ChrIsWhitespace)', False);

  Test({LINENUM}47691, '∃("", ChrIsLetter)', False);
  Test({LINENUM}47692, '∃("", ChrIsUpperCase)', False);
  Test({LINENUM}47693, '∃("", ChrIsLowerCase)', False);
  Test({LINENUM}47694, '∃("", ChrIsDigit)', False);
  Test({LINENUM}47695, '∃("", ChrIsPunctuation)', False);
  Test({LINENUM}47696, '∃("", ChrIsWhitespace)', False);

  Test({LINENUM}47698, '∃(1234, ChrIsDigit)', failure, 'Cannot count elements in an object of type "integer".');
  Test({LINENUM}47699, '∃(1234.56789, ChrIsDigit)', failure, 'Cannot count elements in an object of type "real number".');

  // ForAll

  Test({LINENUM}47703, 'v ≔ ❨5, 3, 0, 2, −1, 7, 5, 9, 10, 15, 85, −40❩;', null);

  Test({LINENUM}47705, '∀(v, IsNumber)', True);
  Test({LINENUM}47706, '∀(v, even)', False);
  Test({LINENUM}47707, '∀(v, odd)', False);
  Test({LINENUM}47708, '∀(v, IsPositive)', False);
  Test({LINENUM}47709, '∀(v, IsZero)', False);
  Test({LINENUM}47710, '∀(v, IsNegative)', False);
  Test({LINENUM}47711, '∀(v, IsPrime)', False);
  Test({LINENUM}47712, '∀(v, IsInteger)', True);
  Test({LINENUM}47713, '∀(v, x ↦ abs(x) ≤ 100)', True);

  Test({LINENUM}47715, 'v ≔ ❨4, 8, 0, −22, 120, 16, −32, 68, 4, 6, 8, 1024❩;', null);

  Test({LINENUM}47717, '∀(v, IsNumber)', True);
  Test({LINENUM}47718, '∀(v, even)', True);
  Test({LINENUM}47719, '∀(v, odd)', False);
  Test({LINENUM}47720, '∀(v, IsPositive)', False);
  Test({LINENUM}47721, '∀(v, IsZero)', False);
  Test({LINENUM}47722, '∀(v, IsNegative)', False);
  Test({LINENUM}47723, '∀(v, IsPrime)', False);
  Test({LINENUM}47724, '∀(v, IsInteger)', True);
  Test({LINENUM}47725, '∀(v, x ↦ abs(x) ≤ 100)', False);

  Test({LINENUM}47727, 'v ≔ ❨3, 9, 7, 13, 51, 53, 101, 55, 731, 1133, 191, 21❩;', null);

  Test({LINENUM}47729, '∀(v, IsNumber)', True);
  Test({LINENUM}47730, '∀(v, even)', False);
  Test({LINENUM}47731, '∀(v, odd)', True);
  Test({LINENUM}47732, '∀(v, IsPositive)', True);
  Test({LINENUM}47733, '∀(v, IsZero)', False);
  Test({LINENUM}47734, '∀(v, IsNegative)', False);
  Test({LINENUM}47735, '∀(v, IsPrime)', False);
  Test({LINENUM}47736, '∀(v, IsInteger)', True);
  Test({LINENUM}47737, '∀(v, x ↦ abs(x) ≤ 100)', False);

  Test({LINENUM}47739, 'v ≔ ❨2, 5, 151, 53, 11, 7, 13, 101, 97, 71❩;', null);

  Test({LINENUM}47741, '∀(v, IsNumber)', True);
  Test({LINENUM}47742, '∀(v, even)', False);
  Test({LINENUM}47743, '∀(v, odd)', False);
  Test({LINENUM}47744, '∀(v, IsPositive)', True);
  Test({LINENUM}47745, '∀(v, IsZero)', False);
  Test({LINENUM}47746, '∀(v, IsNegative)', False);
  Test({LINENUM}47747, '∀(v, IsPrime)', True);
  Test({LINENUM}47748, '∀(v, IsInteger)', True);
  Test({LINENUM}47749, '∀(v, x ↦ abs(x) ≤ 100)', False);

  Test({LINENUM}47751, '∀(❨2, 5, 151, 53, 11, 7, 13, 101, 97, 71❩, IsPrime)', True);
  Test({LINENUM}47752, '∀(❨1, 5, 151, 53, 11, 7, 13, 101, 97, 71❩, IsPrime)', False);
  Test({LINENUM}47753, '∀(❨2, 5, 151, 53, 11, 7, 13, 101, 97, 72❩, IsPrime)', False);

  Test({LINENUM}47755, '∀(❨2.7, 5, 151, 53, 11, 7, 13, 101, 97, 71❩, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}47757, '∀(DebugObject("empty vector"), IsPrime)', True);

  Test({LINENUM}47759, '∀(DebugObject("empty vector"), odd)', True);
  Test({LINENUM}47760, '∀(DebugObject("empty vector"), even)', True);

  Test({LINENUM}47762, '∀(DebugObject("empty vector"), IsPositive)', True);
  Test({LINENUM}47763, '∀(DebugObject("empty vector"), IsNegative)', True);

  Test({LINENUM}47765, 'A ≔ ❨❨5, 3, 0, 2, −1, 7❩, ❨5, 9, 10, 15, 85, −40❩❩;', null);

  Test({LINENUM}47767, '∀(A, IsNumber)', True);
  Test({LINENUM}47768, '∀(A, even)', False);
  Test({LINENUM}47769, '∀(A, odd)', False);
  Test({LINENUM}47770, '∀(A, IsPositive)', False);
  Test({LINENUM}47771, '∀(A, IsZero)', False);
  Test({LINENUM}47772, '∀(A, IsNegative)', False);
  Test({LINENUM}47773, '∀(A, IsPrime)', False);
  Test({LINENUM}47774, '∀(A, IsInteger)', True);
  Test({LINENUM}47775, '∀(A, x ↦ abs(x) ≤ 100)', True);

  Test({LINENUM}47777, 'A ≔ ❨❨4, 8, 0, −22, 120, 16❩, ❨−32, 68, 4, 6, 8, 1024❩❩;', null);

  Test({LINENUM}47779, '∀(A, IsNumber)', True);
  Test({LINENUM}47780, '∀(A, even)', True);
  Test({LINENUM}47781, '∀(A, odd)', False);
  Test({LINENUM}47782, '∀(A, IsPositive)', False);
  Test({LINENUM}47783, '∀(A, IsZero)', False);
  Test({LINENUM}47784, '∀(A, IsNegative)', False);
  Test({LINENUM}47785, '∀(A, IsPrime)', False);
  Test({LINENUM}47786, '∀(A, IsInteger)', True);
  Test({LINENUM}47787, '∀(A, x ↦ abs(x) ≤ 100)', False);

  Test({LINENUM}47789, 'A ≔ ❨❨3, 9, 7, 13, 51, 53❩, ❨101, 55, 731, 1133, 191, 21❩❩;', null);

  Test({LINENUM}47791, '∀(A, IsNumber)', True);
  Test({LINENUM}47792, '∀(A, even)', False);
  Test({LINENUM}47793, '∀(A, odd)', True);
  Test({LINENUM}47794, '∀(A, IsPositive)', True);
  Test({LINENUM}47795, '∀(A, IsZero)', False);
  Test({LINENUM}47796, '∀(A, IsNegative)', False);
  Test({LINENUM}47797, '∀(A, IsPrime)', False);
  Test({LINENUM}47798, '∀(A, IsInteger)', True);
  Test({LINENUM}47799, '∀(A, x ↦ abs(x) ≤ 100)', False);

  Test({LINENUM}47801, 'A ≔ ❨❨2, 5, 151, 53, 11❩, ❨7, 13, 101, 97, 71❩❩;', null);

  Test({LINENUM}47803, '∀(A, IsNumber)', True);
  Test({LINENUM}47804, '∀(A, even)', False);
  Test({LINENUM}47805, '∀(A, odd)', False);
  Test({LINENUM}47806, '∀(A, IsPositive)', True);
  Test({LINENUM}47807, '∀(A, IsZero)', False);
  Test({LINENUM}47808, '∀(A, IsNegative)', False);
  Test({LINENUM}47809, '∀(A, IsPrime)', True);
  Test({LINENUM}47810, '∀(A, IsInteger)', True);
  Test({LINENUM}47811, '∀(A, x ↦ abs(x) ≤ 100)', False);

  Test({LINENUM}47813, '∀(❨❨2, 5, 151, 53, 11❩, ❨7, 13, 101, 97, 71❩❩, IsPrime)', True);
  Test({LINENUM}47814, '∀(❨❨1, 5, 151, 53, 11❩, ❨7, 13, 101, 97, 71❩❩, IsPrime)', False);
  Test({LINENUM}47815, '∀(❨❨2, 5, 151, 53, 11❩, ❨7, 13, 101, 97, 72❩❩, IsPrime)', False);

  Test({LINENUM}47817, '∀(❨❨2.5, 5.1, 151, 53, 11❩, ❨7, 13, 101, 97, 71❩❩, even)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}47819, '∀(DebugObject("empty matrix"), IsPrime)', True);

  Test({LINENUM}47821, '∀(DebugObject("empty matrix"), odd)', True);
  Test({LINENUM}47822, '∀(DebugObject("empty matrix"), even)', True);

  Test({LINENUM}47824, '∀(DebugObject("empty matrix"), IsPositive)', True);
  Test({LINENUM}47825, '∀(DebugObject("empty matrix"), IsNegative)', True);

  Test({LINENUM}47827, 'v ≔ ❨10, i, 2, 5, 1 + i, 3 − i, 2 + i, 1 + 2⋅i❩;', null);

  Test({LINENUM}47829, '∀(v, IsNumber)', True);
  Test({LINENUM}47830, '∀(v, IsReal)', False);
  Test({LINENUM}47831, '∀(v, IsNonZero)', True);
  Test({LINENUM}47832, '∀(v, z ↦ Re(z) ≥ 0)', True);
  Test({LINENUM}47833, '∀(v, z ↦ Re(z) > 0)', False);
  Test({LINENUM}47834, '∀(v, z ↦ abs(z) ≤ 10)', True);

  Test({LINENUM}47836, 'v ≔ ❨11, 5 + i, 2, 5, 1 + i, 3 − i, 2 + i, 1 + 2⋅i❩;', null);

  Test({LINENUM}47838, '∀(v, IsNumber)', True);
  Test({LINENUM}47839, '∀(v, IsReal)', False);
  Test({LINENUM}47840, '∀(v, IsNonZero)', True);
  Test({LINENUM}47841, '∀(v, z ↦ Re(z) ≥ 0)', True);
  Test({LINENUM}47842, '∀(v, z ↦ Re(z) > 0)', True);
  Test({LINENUM}47843, '∀(v, z ↦ abs(z) ≤ 10)', False);

  Test({LINENUM}47845, 'v ≔ ❨11, 5 + i, 2, 5, 1 + i, 3 − i, 2 + i, 0❩;', null);

  Test({LINENUM}47847, '∀(v, IsNumber)', True);
  Test({LINENUM}47848, '∀(v, IsReal)', False);
  Test({LINENUM}47849, '∀(v, IsNonZero)', False);
  Test({LINENUM}47850, '∀(v, z ↦ Re(z) ≥ 0)', True);
  Test({LINENUM}47851, '∀(v, z ↦ Re(z) > 0)', False);
  Test({LINENUM}47852, '∀(v, z ↦ abs(z) ≤ 10)', False);

  Test({LINENUM}47854, '∀(❨10, i, 2, 5, 1 + i, 3 − i, 2 + i, 1 + 2⋅i❩, z ↦ abs(z) ≤ 10)', True);
  Test({LINENUM}47855, '∀(❨10, i, 2, 5, 1 + i, 3 − i, 2 + i, 1 + 20⋅i❩, z ↦ abs(z) ≤ 10)', False);

  Test({LINENUM}47857, '∀(❨10, i, 2, 5, 1 + i, 3 − i, 2 + i, 1 + 20⋅i❩, even)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}47859, '∀(ComplexVector(DebugObject("empty vector")), z ↦ Re(z) > 0)', True);
  Test({LINENUM}47860, '∀(ComplexVector(DebugObject("empty vector")), z ↦ Re(z) < 0)', True);

  Test({LINENUM}47862, 'A ≔ ❨❨10, i, 2, 5❩, ❨1 + i, 3 − i, 2 + i, 1 + 2⋅i❩❩;', null);

  Test({LINENUM}47864, '∀(A, IsNumber)', True);
  Test({LINENUM}47865, '∀(A, IsReal)', False);
  Test({LINENUM}47866, '∀(A, IsNonZero)', True);
  Test({LINENUM}47867, '∀(A, z ↦ Re(z) ≥ 0)', True);
  Test({LINENUM}47868, '∀(A, z ↦ Re(z) > 0)', False);
  Test({LINENUM}47869, '∀(A, z ↦ abs(z) ≤ 10)', True);

  Test({LINENUM}47871, 'A ≔ ❨❨11, 5 + i, 2, 5❩, ❨1 + i, 3 − i, 2 + i, 1 + 2⋅i❩❩;', null);

  Test({LINENUM}47873, '∀(A, IsNumber)', True);
  Test({LINENUM}47874, '∀(A, IsReal)', False);
  Test({LINENUM}47875, '∀(A, IsNonZero)', True);
  Test({LINENUM}47876, '∀(A, z ↦ Re(z) ≥ 0)', True);
  Test({LINENUM}47877, '∀(A, z ↦ Re(z) > 0)', True);
  Test({LINENUM}47878, '∀(A, z ↦ abs(z) ≤ 10)', False);

  Test({LINENUM}47880, 'A ≔ ❨❨11, 5 + i, 2, 5❩, ❨1 + i, 3 − i, 2 + i, 0❩❩;', null);

  Test({LINENUM}47882, '∀(A, IsNumber)', True);
  Test({LINENUM}47883, '∀(A, IsReal)', False);
  Test({LINENUM}47884, '∀(A, IsNonZero)', False);
  Test({LINENUM}47885, '∀(A, z ↦ Re(z) ≥ 0)', True);
  Test({LINENUM}47886, '∀(A, z ↦ Re(z) > 0)', False);
  Test({LINENUM}47887, '∀(A, z ↦ abs(z) ≤ 10)', False);

  Test({LINENUM}47889, '∀(❨❨10, i, 2, 5❩, ❨1 + i, 3 − i, 2 + i, 1 + 2⋅i❩❩, z ↦ abs(z) ≤ 10)', True);
  Test({LINENUM}47890, '∀(❨❨10, i, 2, 5❩, ❨1 + i, 3 − i, 2 + i, 1 + 20⋅i❩❩, z ↦ abs(z) ≤ 10)', False);

  Test({LINENUM}47892, '∀(❨❨10, i, 2, 5❩, ❨1 + i, 3 − i, 2 + i, 1 + 20⋅i❩❩, even)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}47894, '∀(ComplexMatrix(DebugObject("empty matrix")), z ↦ Re(z) > 0)', True);
  Test({LINENUM}47895, '∀(ComplexMatrix(DebugObject("empty matrix")), z ↦ Re(z) < 0)', True);

  Test({LINENUM}47897, 's ≔ "the emotional range of a teaspoon";', null);

  Test({LINENUM}47899, '∀(s, IsCharacter)', True);
  Test({LINENUM}47900, '∀(s, ChrIsASCII)', True);
  Test({LINENUM}47901, '∀(s, ChrIsLetter)', False);
  Test({LINENUM}47902, '∀(s, ChrIsWhitespace)', False);
  Test({LINENUM}47903, '∀(s, c ↦ ChrIsLetter(c) ∨ ChrIsWhitespace(c))', True);

  Test({LINENUM}47905, '∀("7-dehydrocholesterol", c ↦ ChrIsLetterOrDigit(c))', False);
  Test({LINENUM}47906, '∀("7-dehydrocholesterol", c ↦ ChrIsLetterOrDigit(c) ∨ ChrIsPunctuation(c))', True);

  Test({LINENUM}47908, '∀("7-dehydrocholesterol", odd)', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}47910, '∀("", ChrIsLetter)', True);
  Test({LINENUM}47911, '∀("", ChrIsWhitespace)', True);

  Test({LINENUM}47913, 'L ≔ ''(❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨0, 1, 0❩, ❨1, 0, 0❩, ❨0, 0, 1❩❩);', null);

  Test({LINENUM}47915, '∀(L, IsMatrix)', True);
  Test({LINENUM}47916, '∀(L, IsBinary)', True);
  Test({LINENUM}47917, '∀(L, IsPermutation)', True);
  Test({LINENUM}47918, '∀(L, IsOrthogonal)', True);
  Test({LINENUM}47919, '∀(L, IsNormal)', True);
  Test({LINENUM}47920, '∀(L, IsIdentity)', False);
  Test({LINENUM}47921, '∀(L, IsPositive)', False);
  Test({LINENUM}47922, '∀(L, IsNonZero)', True);

  Test({LINENUM}47924, 'L ≔ ''(❨❨1, 0, 1❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨0, 1, 0❩, ❨1, 0, 0❩, ❨0, 0, 1❩❩);', null);

  Test({LINENUM}47926, '∀(L, IsMatrix)', True);
  Test({LINENUM}47927, '∀(L, IsBinary)', True);
  Test({LINENUM}47928, '∀(L, IsPermutation)', False);
  Test({LINENUM}47929, '∀(L, IsOrthogonal)', False);
  Test({LINENUM}47930, '∀(L, IsNormal)', False);
  Test({LINENUM}47931, '∀(L, IsIdentity)', False);
  Test({LINENUM}47932, '∀(L, IsPositive)', False);
  Test({LINENUM}47933, '∀(L, IsNonZero)', True);

  Test({LINENUM}47935, 'L ≔ ''(❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨0, 1, 0❩, ❨1, 0, 0❩, ❨0, 0, 2❩❩);', null);

  Test({LINENUM}47937, '∀(L, IsMatrix)', True);
  Test({LINENUM}47938, '∀(L, IsBinary)', False);
  Test({LINENUM}47939, '∀(L, IsPermutation)', False);
  Test({LINENUM}47940, '∀(L, IsOrthogonal)', False);
  Test({LINENUM}47941, '∀(L, IsNormal)', True);
  Test({LINENUM}47942, '∀(L, IsIdentity)', False);
  Test({LINENUM}47943, '∀(L, IsPositive)', False);
  Test({LINENUM}47944, '∀(L, IsNonZero)', True);

  Test({LINENUM}47946, 'L ≔ ''(❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨0, 1, 0❩, ❨1, 0, 0❩, ❨0, 0, 2❩❩, "cat");', null);

  Test({LINENUM}47948, '∀(L, IsMatrix)', False);
  Test({LINENUM}47949, '∀(L, IsNormal)', failure, 'An object of type matrix was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}47951, '∀(''(❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨0, 1, 0❩, ❨1, 0, 0❩, ❨0, 0, 1❩❩), IsNormal)', True);
  Test({LINENUM}47952, '∀(''(❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨2, 1, 3❩, ❨1, 0, 0❩, ❨0, 0, 1❩❩), IsNormal)', False);

  Test({LINENUM}47954, '∀(''(), IsSound)', True);
  Test({LINENUM}47955, '∀(''(), IsPixmap)', True);

  Test({LINENUM}47957, 'S ≔ {❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨0, 1, 0❩, ❨1, 0, 0❩, ❨0, 0, 1❩❩};', null);

  Test({LINENUM}47959, '∀(S, IsMatrix)', True);
  Test({LINENUM}47960, '∀(S, IsBinary)', True);
  Test({LINENUM}47961, '∀(S, IsPermutation)', True);
  Test({LINENUM}47962, '∀(S, IsOrthogonal)', True);
  Test({LINENUM}47963, '∀(S, IsNormal)', True);
  Test({LINENUM}47964, '∀(S, IsIdentity)', False);
  Test({LINENUM}47965, '∀(S, IsPositive)', False);
  Test({LINENUM}47966, '∀(S, IsNonZero)', True);

  Test({LINENUM}47968, 'S ≔ {❨❨1, 0, 1❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨0, 1, 0❩, ❨1, 0, 0❩, ❨0, 0, 1❩❩};', null);

  Test({LINENUM}47970, '∀(S, IsMatrix)', True);
  Test({LINENUM}47971, '∀(S, IsBinary)', True);
  Test({LINENUM}47972, '∀(S, IsPermutation)', False);
  Test({LINENUM}47973, '∀(S, IsOrthogonal)', False);
  Test({LINENUM}47974, '∀(S, IsNormal)', False);
  Test({LINENUM}47975, '∀(S, IsIdentity)', False);
  Test({LINENUM}47976, '∀(S, IsPositive)', False);
  Test({LINENUM}47977, '∀(S, IsNonZero)', True);

  Test({LINENUM}47979, 'S ≔ {❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨0, 1, 0❩, ❨1, 0, 0❩, ❨0, 0, 2❩❩};', null);

  Test({LINENUM}47981, '∀(S, IsMatrix)', True);
  Test({LINENUM}47982, '∀(S, IsBinary)', False);
  Test({LINENUM}47983, '∀(S, IsPermutation)', False);
  Test({LINENUM}47984, '∀(S, IsOrthogonal)', False);
  Test({LINENUM}47985, '∀(S, IsNormal)', True);
  Test({LINENUM}47986, '∀(S, IsIdentity)', False);
  Test({LINENUM}47987, '∀(S, IsPositive)', False);
  Test({LINENUM}47988, '∀(S, IsNonZero)', True);

  Test({LINENUM}47990, 'S ≔ {❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨0, 1, 0❩, ❨1, 0, 0❩, ❨0, 0, 2❩❩, "cat"};', null);

  Test({LINENUM}47992, '∀(S, IsMatrix)', False);
  Test({LINENUM}47993, '∀(S, IsNormal)', failure, 'An object of type matrix was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}47995, '∀({❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨0, 1, 0❩, ❨1, 0, 0❩, ❨0, 0, 1❩❩}, IsNormal)', True);
  Test({LINENUM}47996, '∀({❨❨1, 0, 0❩, ❨0, 1, 0❩, ❨0, 0, 1❩❩, ❨❨0, 1❩, ❨1, 0❩❩, ❨❨2, 1, 3❩, ❨1, 0, 0❩, ❨0, 0, 1❩❩}, IsNormal)', False);

  Test({LINENUM}47998, '∀({}, IsSound)', True);
  Test({LINENUM}47999, '∀({}, IsPixmap)', True);

  // ExistsUnique

  Test({LINENUM}48003, 'v ≔ ❨5, 3, 2, 0, 1, 4, 7, −5, 6, 9, 2, 3❩;', null);

  Test({LINENUM}48005, 'ExistsUnique(v, IsPositive)', False);
  Test({LINENUM}48006, 'ExistsUnique(v, IsZero)', True);
  Test({LINENUM}48007, 'ExistsUnique(v, IsNegative)', True);
  Test({LINENUM}48008, 'ExistsUnique(v, odd)', False);
  Test({LINENUM}48009, 'ExistsUnique(v, even)', False);
  Test({LINENUM}48010, 'ExistsUnique(v, IsPrime)', False);

  Test({LINENUM}48012, 'v ≔ ❨0, 3, 2, 0, 1, 4, 7, −5, 6, 9, 2, −3❩;', null);

  Test({LINENUM}48014, 'ExistsUnique(v, IsPositive)', False);
  Test({LINENUM}48015, 'ExistsUnique(v, IsZero)', False);
  Test({LINENUM}48016, 'ExistsUnique(v, IsNegative)', False);
  Test({LINENUM}48017, 'ExistsUnique(v, odd)', False);
  Test({LINENUM}48018, 'ExistsUnique(v, even)', False);
  Test({LINENUM}48019, 'ExistsUnique(v, IsPrime)', False);

  Test({LINENUM}48021, 'v ≔ ❨0, 3, 2, 2, 2, 4, 4, −8, 6, 6, 2, −6❩;', null);

  Test({LINENUM}48023, 'ExistsUnique(v, IsPositive)', False);
  Test({LINENUM}48024, 'ExistsUnique(v, IsZero)', True);
  Test({LINENUM}48025, 'ExistsUnique(v, IsNegative)', False);
  Test({LINENUM}48026, 'ExistsUnique(v, odd)', True);
  Test({LINENUM}48027, 'ExistsUnique(v, even)', False);
  Test({LINENUM}48028, 'ExistsUnique(v, IsPrime)', False);

  Test({LINENUM}48030, 'v ≔ ❨0, −3, −2, −2, −2, −4, 4, −8, −6, −6, −2, −6❩;', null);

  Test({LINENUM}48032, 'ExistsUnique(v, IsPositive)', True);
  Test({LINENUM}48033, 'ExistsUnique(v, IsZero)', True);
  Test({LINENUM}48034, 'ExistsUnique(v, IsNegative)', False);
  Test({LINENUM}48035, 'ExistsUnique(v, odd)', True);
  Test({LINENUM}48036, 'ExistsUnique(v, even)', False);
  Test({LINENUM}48037, 'ExistsUnique(v, IsPrime)', False);

  Test({LINENUM}48039, 'v ≔ ❨0, −3, −2, −2, −2, −4, 2, −8, −6, −6, −2, −6❩;', null);

  Test({LINENUM}48041, 'ExistsUnique(v, IsPositive)', True);
  Test({LINENUM}48042, 'ExistsUnique(v, IsZero)', True);
  Test({LINENUM}48043, 'ExistsUnique(v, IsNegative)', False);
  Test({LINENUM}48044, 'ExistsUnique(v, odd)', True);
  Test({LINENUM}48045, 'ExistsUnique(v, even)', False);
  Test({LINENUM}48046, 'ExistsUnique(v, IsPrime)', True);

  Test({LINENUM}48048, 'ExistsUnique(❨5, 3, 2, 0, 1, 4, 7, −5, 6, 9, 2, 3❩, IsNegative)', True);
  Test({LINENUM}48049, 'ExistsUnique(❨5, 3, 2, 0, 1, 4, 7, 5, 6, 9, 2, 3❩, IsNegative)', False);
  Test({LINENUM}48050, 'ExistsUnique(❨5, 3, 2, 0, 1, −4, −7, 5, 6, 9, 2, 3❩, IsNegative)', False);

  Test({LINENUM}48052, 'ExistsUnique(DebugObject("empty vector"), IsNegative)', False);
  Test({LINENUM}48053, 'ExistsUnique(DebugObject("empty vector"), IsNumber)', False);
  Test({LINENUM}48054, 'ExistsUnique(DebugObject("empty vector"), IsPositive)', False);

  Test({LINENUM}48056, 'v ≔ ❨5.7, 3, 2, 0, 1, 4, 7, −5, 6, 9, 2, 3❩;', null);

  Test({LINENUM}48058, 'ExistsUnique(v, IsPositive)', False);
  Test({LINENUM}48059, 'ExistsUnique(v, IsZero)', True);
  Test({LINENUM}48060, 'ExistsUnique(v, IsNegative)', True);
  Test({LINENUM}48061, 'ExistsUnique(v, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}48063, 'A ≔ ❨❨5, 3, 2, 0, 1, 4❩, ❨7, −5, 6, 9, 2, 3❩❩;', null);

  Test({LINENUM}48065, 'ExistsUnique(A, IsPositive)', False);
  Test({LINENUM}48066, 'ExistsUnique(A, IsZero)', True);
  Test({LINENUM}48067, 'ExistsUnique(A, IsNegative)', True);
  Test({LINENUM}48068, 'ExistsUnique(A, odd)', False);
  Test({LINENUM}48069, 'ExistsUnique(A, even)', False);
  Test({LINENUM}48070, 'ExistsUnique(A, IsPrime)', False);

  Test({LINENUM}48072, 'A ≔ ❨❨0, 3, 2, 0, 1, 4❩, ❨7, −5, 6, 9, 2, −3❩❩;', null);

  Test({LINENUM}48074, 'ExistsUnique(A, IsPositive)', False);
  Test({LINENUM}48075, 'ExistsUnique(A, IsZero)', False);
  Test({LINENUM}48076, 'ExistsUnique(A, IsNegative)', False);
  Test({LINENUM}48077, 'ExistsUnique(A, odd)', False);
  Test({LINENUM}48078, 'ExistsUnique(A, even)', False);
  Test({LINENUM}48079, 'ExistsUnique(A, IsPrime)', False);

  Test({LINENUM}48081, 'A ≔ ❨❨0, 3, 2, 2, 2, 4❩, ❨4, −8, 6, 6, 2, −6❩❩;', null);

  Test({LINENUM}48083, 'ExistsUnique(A, IsPositive)', False);
  Test({LINENUM}48084, 'ExistsUnique(A, IsZero)', True);
  Test({LINENUM}48085, 'ExistsUnique(A, IsNegative)', False);
  Test({LINENUM}48086, 'ExistsUnique(A, odd)', True);
  Test({LINENUM}48087, 'ExistsUnique(A, even)', False);
  Test({LINENUM}48088, 'ExistsUnique(A, IsPrime)', False);

  Test({LINENUM}48090, 'A ≔ ❨❨0, −3, −2, −2, −2, −4❩, ❨4, −8, −6, −6, −2, −6❩❩;', null);

  Test({LINENUM}48092, 'ExistsUnique(A, IsPositive)', True);
  Test({LINENUM}48093, 'ExistsUnique(A, IsZero)', True);
  Test({LINENUM}48094, 'ExistsUnique(A, IsNegative)', False);
  Test({LINENUM}48095, 'ExistsUnique(A, odd)', True);
  Test({LINENUM}48096, 'ExistsUnique(A, even)', False);
  Test({LINENUM}48097, 'ExistsUnique(A, IsPrime)', False);

  Test({LINENUM}48099, 'A ≔ ❨❨0, −3, −2, −2, −2, −4❩, ❨2, −8, −6, −6, −2, −6❩❩;', null);

  Test({LINENUM}48101, 'ExistsUnique(A, IsPositive)', True);
  Test({LINENUM}48102, 'ExistsUnique(A, IsZero)', True);
  Test({LINENUM}48103, 'ExistsUnique(A, IsNegative)', False);
  Test({LINENUM}48104, 'ExistsUnique(A, odd)', True);
  Test({LINENUM}48105, 'ExistsUnique(A, even)', False);
  Test({LINENUM}48106, 'ExistsUnique(A, IsPrime)', True);

  Test({LINENUM}48108, 'ExistsUnique(❨❨5, 3, 2, 0, 1, 4❩, ❨7, −5, 6, 9, 2, 3❩❩, IsNegative)', True);
  Test({LINENUM}48109, 'ExistsUnique(❨❨5, 3, 2, 0, 1, 4❩, ❨7, 5, 6, 9, 2, 3❩❩, IsNegative)', False);
  Test({LINENUM}48110, 'ExistsUnique(❨❨5, 3, 2, 0, 1, −4❩, ❨−7, 5, 6, 9, 2, 3❩❩, IsNegative)', False);

  Test({LINENUM}48112, 'ExistsUnique(DebugObject("empty matrix"), IsNegative)', False);
  Test({LINENUM}48113, 'ExistsUnique(DebugObject("empty matrix"), IsNumber)', False);
  Test({LINENUM}48114, 'ExistsUnique(DebugObject("empty matrix"), IsPositive)', False);

  Test({LINENUM}48116, 'A ≔ ❨❨5.4, 3, 2, 0, 1, 4❩, ❨7, −5, 6, 9, 2, 3❩❩;', null);

  Test({LINENUM}48118, 'ExistsUnique(A, IsPositive)', False);
  Test({LINENUM}48119, 'ExistsUnique(A, IsZero)', True);
  Test({LINENUM}48120, 'ExistsUnique(A, IsNegative)', True);
  Test({LINENUM}48121, 'ExistsUnique(A, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}48123, 'v ≔ ❨1 + i, 2 − i, 5, 3.5, −7.5, 2 + 3⋅i❩;', null);

  Test({LINENUM}48125, 'ExistsUnique(v, IsNumber)', False);
  Test({LINENUM}48126, 'ExistsUnique(v, IsReal)', False);
  Test({LINENUM}48127, 'ExistsUnique(v, IsInteger)', True);
  Test({LINENUM}48128, 'ExistsUnique(v, z ↦ Re(z) < 0)', True);
  Test({LINENUM}48129, 'ExistsUnique(v, IsPrime)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}48131, 'v ≔ ❨1 + i, 2 − i, 5 + i, 3.5 + i, −7.5, −2 + 3⋅i❩;', null);

  Test({LINENUM}48133, 'ExistsUnique(v, IsNumber)', False);
  Test({LINENUM}48134, 'ExistsUnique(v, IsReal)', True);
  Test({LINENUM}48135, 'ExistsUnique(v, IsInteger)', False);
  Test({LINENUM}48136, 'ExistsUnique(v, z ↦ Re(z) < 0)', False);
  Test({LINENUM}48137, 'ExistsUnique(v, IsPrime)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}48139, 'v ≔ ❨1, 2 − i, 5 + i, 3.5 + i, −7.5, −2 + 3⋅i❩;', null);

  Test({LINENUM}48141, 'ExistsUnique(v, IsNumber)', False);
  Test({LINENUM}48142, 'ExistsUnique(v, IsReal)', False);
  Test({LINENUM}48143, 'ExistsUnique(v, IsInteger)', True);
  Test({LINENUM}48144, 'ExistsUnique(v, z ↦ Re(z) < 0)', False);
  Test({LINENUM}48145, 'ExistsUnique(v, IsPrime)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}48147, 'v ≔ ❨1, 2 − i, 5 + i, 3.5 + i, 7.5, −2❩;', null);

  Test({LINENUM}48149, 'ExistsUnique(v, IsNumber)', False);
  Test({LINENUM}48150, 'ExistsUnique(v, IsReal)', False);
  Test({LINENUM}48151, 'ExistsUnique(v, IsInteger)', False);
  Test({LINENUM}48152, 'ExistsUnique(v, z ↦ Re(z) < 0)', True);
  Test({LINENUM}48153, 'ExistsUnique(v, IsPrime)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}48155, 'ExistsUnique(❨1, 2 − i, 5 + i, 3.5 + i, 7.5, −2❩, z ↦ Re(z) < 0)', True);
  Test({LINENUM}48156, 'ExistsUnique(❨−1, 2 − i, 5 + i, 3.5 + i, 7.5, −2❩, z ↦ Re(z) < 0)', False);

  Test({LINENUM}48158, 'ExistsUnique(ComplexVector(DebugObject("empty vector")), IsInteger)', False);
  Test({LINENUM}48159, 'ExistsUnique(ComplexVector(DebugObject("empty vector")), IsNumber)', False);

  Test({LINENUM}48161, 'A ≔ ❨❨1 + i, 2 − i, 5❩, ❨3.5, −7.5, 2 + 3⋅i❩❩;', null);

  Test({LINENUM}48163, 'ExistsUnique(A, IsNumber)', False);
  Test({LINENUM}48164, 'ExistsUnique(A, IsReal)', False);
  Test({LINENUM}48165, 'ExistsUnique(A, IsInteger)', True);
  Test({LINENUM}48166, 'ExistsUnique(A, z ↦ Re(z) < 0)', True);
  Test({LINENUM}48167, 'ExistsUnique(A, IsPrime)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}48169, 'A ≔ ❨❨1 + i, 2 − i, 5 + i❩, ❨3.5 + i, −7.5, −2 + 3⋅i❩❩;', null);

  Test({LINENUM}48171, 'ExistsUnique(A, IsNumber)', False);
  Test({LINENUM}48172, 'ExistsUnique(A, IsReal)', True);
  Test({LINENUM}48173, 'ExistsUnique(A, IsInteger)', False);
  Test({LINENUM}48174, 'ExistsUnique(A, z ↦ Re(z) < 0)', False);
  Test({LINENUM}48175, 'ExistsUnique(A, IsPrime)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}48177, 'A ≔ ❨❨1, 2 − i, 5 + i❩, ❨3.5 + i, −7.5, −2 + 3⋅i❩❩;', null);

  Test({LINENUM}48179, 'ExistsUnique(A, IsNumber)', False);
  Test({LINENUM}48180, 'ExistsUnique(A, IsReal)', False);
  Test({LINENUM}48181, 'ExistsUnique(A, IsInteger)', True);
  Test({LINENUM}48182, 'ExistsUnique(A, z ↦ Re(z) < 0)', False);
  Test({LINENUM}48183, 'ExistsUnique(A, IsPrime)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}48185, 'A ≔ ❨❨1, 2 − i, 5 + i❩, ❨3.5 + i, 7.5, −2❩❩;', null);

  Test({LINENUM}48187, 'ExistsUnique(A, IsNumber)', False);
  Test({LINENUM}48188, 'ExistsUnique(A, IsReal)', False);
  Test({LINENUM}48189, 'ExistsUnique(A, IsInteger)', False);
  Test({LINENUM}48190, 'ExistsUnique(A, z ↦ Re(z) < 0)', True);
  Test({LINENUM}48191, 'ExistsUnique(A, IsPrime)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}48193, 'ExistsUnique(❨❨1, 2 − i, 5 + i❩, ❨3.5 + i, 7.5, −2❩❩, z ↦ Re(z) < 0)', True);
  Test({LINENUM}48194, 'ExistsUnique(❨❨−1, 2 − i, 5 + i❩, ❨3.5 + i, 7.5, −2❩❩, z ↦ Re(z) < 0)', False);

  Test({LINENUM}48196, 'ExistsUnique(ComplexMatrix(DebugObject("empty matrix")), IsInteger)', False);
  Test({LINENUM}48197, 'ExistsUnique(ComplexMatrix(DebugObject("empty matrix")), IsNumber)', False);

  Test({LINENUM}48199, 's ≔ "7-dehydrocholesterol";', null);

  Test({LINENUM}48201, 'ExistsUnique(s, IsCharacter)', False);
  Test({LINENUM}48202, 'ExistsUnique(s, IsPixmap)', False);
  Test({LINENUM}48203, 'ExistsUnique(s, IsSound)', False);
  Test({LINENUM}48204, 'ExistsUnique(s, ChrIsASCII)', False);
  Test({LINENUM}48205, 'ExistsUnique(s, ChrIsLetter)', False);
  Test({LINENUM}48206, 'ExistsUnique(s, ChrIsDigit)', True);
  Test({LINENUM}48207, 'ExistsUnique(s, ChrIsPunctuation)', True);
  Test({LINENUM}48208, 'ExistsUnique(s, ChrIsWhitespace)', False);

  Test({LINENUM}48210, 's ≔ "7-dehydrocholesterol!";', null);

  Test({LINENUM}48212, 'ExistsUnique(s, IsCharacter)', False);
  Test({LINENUM}48213, 'ExistsUnique(s, IsPixmap)', False);
  Test({LINENUM}48214, 'ExistsUnique(s, IsSound)', False);
  Test({LINENUM}48215, 'ExistsUnique(s, ChrIsASCII)', False);
  Test({LINENUM}48216, 'ExistsUnique(s, ChrIsLetter)', False);
  Test({LINENUM}48217, 'ExistsUnique(s, ChrIsDigit)', True);
  Test({LINENUM}48218, 'ExistsUnique(s, ChrIsPunctuation)', False);
  Test({LINENUM}48219, 'ExistsUnique(s, ChrIsWhitespace)', False);

  Test({LINENUM}48221, 'ExistsUnique("7-dehydrocholesterol", IsCharacter)', False);
  Test({LINENUM}48222, 'ExistsUnique("7-dehydrocholesterol", IsPixmap)', False);
  Test({LINENUM}48223, 'ExistsUnique("7-dehydrocholesterol", IsSound)', False);
  Test({LINENUM}48224, 'ExistsUnique("7-dehydrocholesterol", ChrIsASCII)', False);
  Test({LINENUM}48225, 'ExistsUnique("7-dehydrocholesterol", ChrIsLetter)', False);
  Test({LINENUM}48226, 'ExistsUnique("7-dehydrocholesterol", ChrIsDigit)', True);
  Test({LINENUM}48227, 'ExistsUnique("7-dehydrocholesterol", ChrIsPunctuation)', True);
  Test({LINENUM}48228, 'ExistsUnique("7-dehydrocholesterol", ChrIsWhitespace)', False);

  Test({LINENUM}48230, 'ExistsUnique("", IsCharacter)', False);
  Test({LINENUM}48231, 'ExistsUnique("", IsPixmap)', False);
  Test({LINENUM}48232, 'ExistsUnique("", IsSound)', False);
  Test({LINENUM}48233, 'ExistsUnique("", ChrIsASCII)', False);
  Test({LINENUM}48234, 'ExistsUnique("", ChrIsLetter)', False);
  Test({LINENUM}48235, 'ExistsUnique("", ChrIsDigit)', False);
  Test({LINENUM}48236, 'ExistsUnique("", ChrIsPunctuation)', False);
  Test({LINENUM}48237, 'ExistsUnique("", ChrIsWhitespace)', False);

  Test({LINENUM}48239, 'ExistsUnique("7-dehydrocholesterol", odd)', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}48241, 'L ≔ ''(10, 2, −7, π, 2⋅π, 1024);', null);

  Test({LINENUM}48243, 'ExistsUnique(L, x ↦ IsInteger(x) ∧ even(x))', False);
  Test({LINENUM}48244, 'ExistsUnique(L, x ↦ IsInteger(x) ∧ odd(x))', True);
  Test({LINENUM}48245, 'ExistsUnique(L, IsInteger)', False);
  Test({LINENUM}48246, 'ExistsUnique(L, IsNegative)', True);
  Test({LINENUM}48247, 'ExistsUnique(L, IsPositive)', False);
  Test({LINENUM}48248, 'ExistsUnique(L, IsZero)', False);
  Test({LINENUM}48249, 'ExistsUnique(L, x ↦ sin(x) ≈ 0)', False);
  Test({LINENUM}48250, 'ExistsUnique(L, x ↦ sin(x/2) ≈ 0)', True);
  Test({LINENUM}48251, 'ExistsUnique(L, x ↦ x ≥ 10000)', False);
  Test({LINENUM}48252, 'ExistsUnique(L, x ↦ x ≥ 1000)', True);
  Test({LINENUM}48253, 'ExistsUnique(L, x ↦ x ≥ 100)', True);
  Test({LINENUM}48254, 'ExistsUnique(L, x ↦ x ≥ 10)', False);
  Test({LINENUM}48255, 'ExistsUnique(L, x ↦ x ≥ 1)', False);
  Test({LINENUM}48256, 'ExistsUnique(L, x ↦ x ≥ -100)', False);
  Test({LINENUM}48257, 'ExistsUnique(L, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}48259, 'ExistsUnique(''(10, 2, −7, π, 2⋅π, 1024), x ↦ sin(x) ≈ 0)', False);
  Test({LINENUM}48260, 'ExistsUnique(''(10, 2, −7, π, 2⋅π, 1024), x ↦ sin(x/2) ≈ 0)', True);

  Test({LINENUM}48262, 'ExistsUnique(''(), x ↦ sin(x) ≈ 0)', False);
  Test({LINENUM}48263, 'ExistsUnique(''(), x ↦ true)', False);

  Test({LINENUM}48265, 'S ≔ {10, 2, −7, −7, π, 2⋅π, 1024};', null);

  Test({LINENUM}48267, 'ExistsUnique(S, x ↦ IsInteger(x) ∧ even(x))', False);
  Test({LINENUM}48268, 'ExistsUnique(S, x ↦ IsInteger(x) ∧ odd(x))', True);
  Test({LINENUM}48269, 'ExistsUnique(S, IsInteger)', False);
  Test({LINENUM}48270, 'ExistsUnique(S, IsNegative)', True);
  Test({LINENUM}48271, 'ExistsUnique(S, IsPositive)', False);
  Test({LINENUM}48272, 'ExistsUnique(S, IsZero)', False);
  Test({LINENUM}48273, 'ExistsUnique(S, x ↦ sin(x) ≈ 0)', False);
  Test({LINENUM}48274, 'ExistsUnique(S, x ↦ sin(x/2) ≈ 0)', True);
  Test({LINENUM}48275, 'ExistsUnique(S, x ↦ x ≥ 10000)', False);
  Test({LINENUM}48276, 'ExistsUnique(S, x ↦ x ≥ 1000)', True);
  Test({LINENUM}48277, 'ExistsUnique(S, x ↦ x ≥ 100)', True);
  Test({LINENUM}48278, 'ExistsUnique(S, x ↦ x ≥ 10)', False);
  Test({LINENUM}48279, 'ExistsUnique(S, x ↦ x ≥ 1)', False);
  Test({LINENUM}48280, 'ExistsUnique(S, x ↦ x ≥ -100)', False);
  Test({LINENUM}48281, 'ExistsUnique(S, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');

  Test({LINENUM}48283, 'ExistsUnique({10, 2, −7, π, 2⋅π, 1024}, x ↦ sin(x) ≈ 0)', False);
  Test({LINENUM}48284, 'ExistsUnique({10, 2, −7, π, 2⋅π, 1024}, x ↦ sin(x/2) ≈ 0)', True);

  Test({LINENUM}48286, 'ExistsUnique({}, x ↦ sin(x) ≈ 0)', False);
  Test({LINENUM}48287, 'ExistsUnique({}, x ↦ true)', False);

  // exists and ForAll performance

  // - best-case scenario

  Test({LINENUM}48293, 'L ≔ SequenceList(10); for(i, 1, #L, (L[i] ≔ ZeroMatrix(1000); L[i][1, 1] ≔ π));', null);
  StartStopwatch;
  Test({LINENUM}48295, 'for(i, 1, #L, assert(¬∀(L[i], IsZero)))', null);
  StopStopwatch;
  TestDuration({LINENUM}48297, 0.001);

  Test({LINENUM}48299, 'L ≔ SequenceList(10); for(i, 1, #L, (L[i] ≔ ZeroMatrix(1000); L[i][1, 1] ≔ π));', null);
  StartStopwatch;
  Test({LINENUM}48301, 'for(i, 1, #L, assert(∃(L[i], IsNonZero)))', null);
  StopStopwatch;
  TestDuration({LINENUM}48303, 0.001);

  Test({LINENUM}48305, 'L ≔ SequenceList(10); for(i, 1, #L, (L[i] ≔ ZeroMatrix(1000); L[i][1, 1] ≔ π; L[i][1, 2] ≔ π));', null);
  StartStopwatch;
  Test({LINENUM}48307, 'for(i, 1, #L, assert(¬ExistsUnique(L[i], IsNonZero)))', null);
  StopStopwatch;
  TestDuration({LINENUM}48309, 0.001);

  // - worst-case scenario

{$IFNDEF QuickTest}
  Test({LINENUM}48314, 'L ≔ SequenceList(10); for(i, 1, #L, (L[i] ≔ ZeroMatrix(1000)));', null);
  StartStopwatch;
  Test({LINENUM}48316, 'for(i, 1, #L, assert(∀(L[i], IsZero)))', null);
  Test({LINENUM}48317, 'for(i, 1, #L, assert(¬∃(L[i], IsNonZero)))', null);
  Test({LINENUM}48318, 'for(i, 1, #L, assert(¬ExistsUnique(L[i], IsNonZero)))', null);
  StopStopwatch;
  TestDuration({LINENUM}48320, 60.0);
{$ENDIF}

  // indices

  Test({LINENUM}48325, 'v ≔ ❨6, 2, 1, 0, −4, 3, 7, 8, −9, 1, 0, 10❩;', null);

  Test({LINENUM}48327, 'indices(v, IsNumber)', intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]));
  Test({LINENUM}48328, 'indices(v, IsInteger)', intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]));
  Test({LINENUM}48329, 'indices(v, odd)', intarr([3, 6, 7, 9, 10]));
  Test({LINENUM}48330, 'indices(v, even)', intarr([1, 2, 4, 5, 8, 11, 12]));
  Test({LINENUM}48331, 'indices(v, IsPositive)', intarr([1, 2, 3, 6, 7, 8, 10, 12]));
  Test({LINENUM}48332, 'indices(v, IsZero)', intarr([4, 11]));
  Test({LINENUM}48333, 'indices(v, IsNegative)', intarr([5, 9]));
  Test({LINENUM}48334, 'indices(v, IsPrime)', intarr([2, 6, 7]));
  Test({LINENUM}48335, 'indices(v, IsComplex)', intarr([]));
  Test({LINENUM}48336, 'indices(v, IsPixmap)', intarr([]));
  Test({LINENUM}48337, 'indices(v, n ↦ abs(n) > 5)', intarr([1, 7, 8, 9, 12]));
  Test({LINENUM}48338, 'indices(v, n ↦ abs(n) > 10)', intarr([]));
  Test({LINENUM}48339, 'indices(v, n ↦ n! > 5)', failure, 'A non-negative integer was expected as argument 1, but "-4" was given.');
  Test({LINENUM}48340, 'indices(DebugObject("empty vector"), IsNumber)', intarr([]));
  Test({LINENUM}48341, 'indices(❨6, 2, 1, 0, −4, 3, 7, 8, −9, 1, 0, 10❩, n ↦ abs(n) > 5)', intarr([1, 7, 8, 9, 12]));

  Test({LINENUM}48343, 'A ≔ ❨❨6, 2, 1, 0, −4, 3❩, ❨7, 8, −9, 1, 0, 10❩❩;', null);

  Test({LINENUM}48345, 'indices(A, IsNumber)', asoarrex([idx2(1, 1), idx2(1, 2), idx2(1, 3), idx2(1, 4), idx2(1, 5), idx2(1, 6), idx2(2, 1), idx2(2, 2), idx2(2, 3), idx2(2, 4), idx2(2, 5), idx2(2, 6)]));
  Test({LINENUM}48346, 'indices(A, IsInteger)', asoarrex([idx2(1, 1), idx2(1, 2), idx2(1, 3), idx2(1, 4), idx2(1, 5), idx2(1, 6), idx2(2, 1), idx2(2, 2), idx2(2, 3), idx2(2, 4), idx2(2, 5), idx2(2, 6)]));
  Test({LINENUM}48347, 'indices(A, odd)', asoarrex([idx2(1, 3), idx2(1, 6), idx2(2, 1), idx2(2, 3), idx2(2, 4)]));
  Test({LINENUM}48348, 'indices(A, even)', asoarrex([idx2(1, 1), idx2(1, 2), idx2(1, 4), idx2(1, 5), idx2(2, 2), idx2(2, 5), idx2(2, 6)]));
  Test({LINENUM}48349, 'indices(A, IsPositive)', asoarrex([idx2(1, 1), idx2(1, 2), idx2(1, 3), idx2(1, 6), idx2(2, 1), idx2(2, 2), idx2(2, 4), idx2(2, 6)]));
  Test({LINENUM}48350, 'indices(A, IsZero)', asoarrex([idx2(1, 4), idx2(2, 5)]));
  Test({LINENUM}48351, 'indices(A, IsNegative)', asoarrex([idx2(1, 5), idx2(2, 3)]));
  Test({LINENUM}48352, 'indices(A, IsPrime)', asoarrex([idx2(1, 2), idx2(1, 6), idx2(2, 1)]));
  Test({LINENUM}48353, 'indices(A, IsComplex)', asoarrex([]));
  Test({LINENUM}48354, 'indices(A, IsPixmap)', asoarrex([]));
  Test({LINENUM}48355, 'indices(A, n ↦ abs(n) > 5)', asoarrex([idx2(1, 1), idx2(2, 1), idx2(2, 2), idx2(2, 3), idx2(2, 6)]));
  Test({LINENUM}48356, 'indices(A, n ↦ abs(n) > 10)', asoarrex([]));
  Test({LINENUM}48357, 'indices(A, n ↦ n! > 5)', failure, 'A non-negative integer was expected as argument 1, but "-4" was given.');
  Test({LINENUM}48358, 'indices(DebugObject("empty matrix"), IsNumber)', asoarrex([]));
  Test({LINENUM}48359, 'indices(❨❨6, 2, 1, 0, −4, 3❩, ❨7, 8, −9, 1, 0, 10❩❩, IsPrime)', asoarrex([idx2(1, 2), idx2(1, 6), idx2(2, 1)]));

  Test({LINENUM}48361, 'v ≔ ❨6, 2.5, 1, i, 1 + i, −i, 0, 5❩;', null);

  Test({LINENUM}48363, 'indices(v, IsNumber)', intarr([1, 2, 3, 4, 5, 6, 7, 8]));
  Test({LINENUM}48364, 'indices(v, IsReal)', intarr([1, 2, 3, 7, 8]));
  Test({LINENUM}48365, 'indices(v, IsInteger)', intarr([1, 3, 7, 8]));
  Test({LINENUM}48366, 'indices(v, IsZero)', intarr([7]));
  Test({LINENUM}48367, 'indices(v, z ↦ abs(z) > 1)', intarr([1, 2, 5, 8]));
  Test({LINENUM}48368, 'indices(v, z ↦ abs(z) > 10)', intarr([]));
  Test({LINENUM}48369, 'indices(v, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}48370, 'indices(ComplexVector(DebugObject("empty vector")), IsNumber)', intarr([]));
  Test({LINENUM}48371, 'indices(❨6, 2.5, 1, i, 1 + i, −i, 0, 5❩, z ↦ abs(z) > 1)', intarr([1, 2, 5, 8]));

  Test({LINENUM}48373, 'A ≔ ❨❨6, 2.5, 1, i❩, ❨1 + i, −i, 0, 5❩❩;', null);

  Test({LINENUM}48375, 'indices(A, IsNumber)', asoarrex([idx2(1, 1), idx2(1, 2), idx2(1, 3), idx2(1, 4), idx2(2, 1), idx2(2, 2), idx2(2, 3), idx2(2, 4)]));
  Test({LINENUM}48376, 'indices(A, IsReal)', asoarrex([idx2(1, 1), idx2(1, 2), idx2(1, 3), idx2(2, 3), idx2(2, 4)]));
  Test({LINENUM}48377, 'indices(A, IsInteger)', asoarrex([idx2(1, 1), idx2(1, 3), idx2(2, 3), idx2(2, 4)]));
  Test({LINENUM}48378, 'indices(A, IsZero)', asoarrex([idx2(2, 3)]));
  Test({LINENUM}48379, 'indices(A, z ↦ abs(z) > 1)', asoarrex([idx2(1, 1), idx2(1, 2), idx2(2, 1), idx2(2, 4)]));
  Test({LINENUM}48380, 'indices(A, z ↦ abs(z) > 10)', asoarrex([]));
  Test({LINENUM}48381, 'indices(A, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}48382, 'indices(ComplexMatrix(DebugObject("empty matrix")), IsNumber)', asoarrex([]));
  Test({LINENUM}48383, 'indices(❨❨6, 2.5, 1, i❩, ❨1 + i, −i, 0, 5❩❩, z ↦ abs(z) > 1)', asoarrex([idx2(1, 1), idx2(1, 2), idx2(2, 1), idx2(2, 4)]));

  Test({LINENUM}48385, 's ≔ "Hello, World!";', null);

  Test({LINENUM}48387, 'indices(s, IsCharacter)', intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]));
  Test({LINENUM}48388, 'indices(s, ChrIsASCII)', intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]));
  Test({LINENUM}48389, 'indices(s, ChrIsLetter)', intarr([1, 2, 3, 4, 5, 8, 9, 10, 11, 12]));
  Test({LINENUM}48390, 'indices(s, ChrIsUpperCase)', intarr([1, 8]));
  Test({LINENUM}48391, 'indices(s, ChrIsPunctuation)', intarr([6, 13]));
  Test({LINENUM}48392, 'indices(s, ChrIsWhitespace)', intarr([7]));
  Test({LINENUM}48393, 'indices(s, ChrIsControl)', intarr([]));

  Test({LINENUM}48395, 'indices("Hello, World!", ChrIsPunctuation)', intarr([6, 13]));
  Test({LINENUM}48396, 'indices("", IsCharacter)', intarr([]));
  Test({LINENUM}48397, 'indices(s, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}48399, 'L ≔ ''(6, 2, 1, 0, −4, 3, 7, 8, −9, 1, 0, 10);', null);

  Test({LINENUM}48401, 'indices(L, IsNumber)', intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]));
  Test({LINENUM}48402, 'indices(L, IsInteger)', intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]));
  Test({LINENUM}48403, 'indices(L, odd)', intarr([3, 6, 7, 9, 10]));
  Test({LINENUM}48404, 'indices(L, even)', intarr([1, 2, 4, 5, 8, 11, 12]));
  Test({LINENUM}48405, 'indices(L, IsPositive)', intarr([1, 2, 3, 6, 7, 8, 10, 12]));
  Test({LINENUM}48406, 'indices(L, IsZero)', intarr([4, 11]));
  Test({LINENUM}48407, 'indices(L, IsNegative)', intarr([5, 9]));
  Test({LINENUM}48408, 'indices(L, IsPrime)', intarr([2, 6, 7]));
  Test({LINENUM}48409, 'indices(L, IsComplex)', intarr([]));
  Test({LINENUM}48410, 'indices(L, IsPixmap)', intarr([]));
  Test({LINENUM}48411, 'indices(L, n ↦ abs(n) > 5)', intarr([1, 7, 8, 9, 12]));
  Test({LINENUM}48412, 'indices(L, n ↦ abs(n) > 10)', intarr([]));
  Test({LINENUM}48413, 'indices(L, n ↦ n! > 5)', failure, 'A non-negative integer was expected as argument 1, but "-4" was given.');
  Test({LINENUM}48414, 'indices(''(), IsNumber)', intarr([]));
  Test({LINENUM}48415, 'indices(''(6, 2, 1, 0, −4, 3, 7, 8, −9, 1, 0, 10), n ↦ abs(n) > 5)', intarr([1, 7, 8, 9, 12]));

  Test({LINENUM}48417, 'S ≔ {6, 2, 1, 0, −4, 3, 7, 8, −9, 1, 0, 10};', null);

  Test({LINENUM}48419, 'indices(S, IsNumber)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48420, 'indices(S, IsInteger)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48421, 'indices(S, odd)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48422, 'indices(S, even)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48423, 'indices(S, IsPositive)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48424, 'indices(S, IsZero)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48425, 'indices(S, IsNegative)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48426, 'indices(S, IsPrime)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48427, 'indices(S, IsComplex)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48428, 'indices(S, IsPixmap)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48429, 'indices(S, n ↦ abs(n) > 5)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48430, 'indices(S, n ↦ abs(n) > 10)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48431, 'indices(S, n ↦ n! > 5)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48432, 'indices({}, IsNumber)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48433, 'indices({6, 2, 1, 0, −4, 3, 7, 8, −9, 1, 0, 10}, n ↦ abs(n) > 5)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}48435, 'S ≔ struct("name": "Albus Dumbledore", "age": 116, "role": "headmaster");', null);
  Test({LINENUM}48436, 'indices(S, m ↦ type(m) = "string")', intarr([1, 3]));
  Test({LINENUM}48437, 'indices(S, m ↦ type(m) = "integer")', intarr([2]));
  Test({LINENUM}48438, 'indices(S, m ↦ type(m) = "pixmap")', intarr([]));

  Test({LINENUM}48440, 'indices(struct("name": "Albus Dumbledore", "age": 116, "role": "headmaster"), m ↦ type(m) = "string")', intarr([1, 3]));

  Test({LINENUM}48442, 'S ≔ struct();', null);
  Test({LINENUM}48443, 'indices(S, m ↦ type(m) = "string")', intarr([]));
  Test({LINENUM}48444, 'indices(S, m ↦ type(m) = "integer")', intarr([]));
  Test({LINENUM}48445, 'indices(S, m ↦ type(m) = "pixmap")', intarr([]));

  Test({LINENUM}48447, 'indices(123, IsNumber)', failure, 'Object type "integer" is not a suitable container.');

  Test({LINENUM}48449, 'v ≔ ❨3, 0, 2, 5, −7, 4, 1, −9, 1, 0, 5, 2, 1, −3, 5, 4❩;', null);

  Test({LINENUM}48451, 'indices(v, 0)', intarr([2, 10]));
  Test({LINENUM}48452, 'indices(v, 1)', intarr([7, 9, 13]));
  Test({LINENUM}48453, 'indices(v, 2)', intarr([3, 12]));
  Test({LINENUM}48454, 'indices(v, 3)', intarr([1]));
  Test({LINENUM}48455, 'indices(v, 4)', intarr([6, 16]));
  Test({LINENUM}48456, 'indices(v, 5)', intarr([4, 11, 15]));
  Test({LINENUM}48457, 'indices(v, 6)', intarr([]));
  Test({LINENUM}48458, 'indices(v, 7)', intarr([]));
  Test({LINENUM}48459, 'indices(v, 8)', intarr([]));
  Test({LINENUM}48460, 'indices(v, 9)', intarr([]));
  Test({LINENUM}48461, 'indices(v, "nargle")', intarr([]));

  Test({LINENUM}48463, 'indices(❨3, 0, 2, 5, −7, 4, 1, −9, 1, 0, 5, 2, 1, −3, 5, 4❩, 5)', intarr([4, 11, 15]));
  Test({LINENUM}48464, 'indices(DebugObject("empty vector"), 5)', intarr([]));

  Test({LINENUM}48466, 'A ≔ ❨❨3, 0, 2, 5, −7, 4, 1, −9❩, ❨1, 0, 5, 2, 1, −3, 5, 4❩❩;', null);

  Test({LINENUM}48468, 'indices(A, 0)', asoarrex([idx2(1, 2), idx2(2, 2)]));
  Test({LINENUM}48469, 'indices(A, 1)', asoarrex([idx2(1, 7), idx2(2, 1), idx2(2, 5)]));
  Test({LINENUM}48470, 'indices(A, 2)', asoarrex([idx2(1, 3), idx2(2, 4)]));
  Test({LINENUM}48471, 'indices(A, 3)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48472, 'indices(A, 4)', asoarrex([idx2(1, 6), idx2(2, 8)]));
  Test({LINENUM}48473, 'indices(A, 5)', asoarrex([idx2(1, 4), idx2(2, 3), idx2(2, 7)]));
  Test({LINENUM}48474, 'indices(A, 6)', asoarrex([]));
  Test({LINENUM}48475, 'indices(A, 7)', asoarrex([]));
  Test({LINENUM}48476, 'indices(A, 8)', asoarrex([]));
  Test({LINENUM}48477, 'indices(A, 9)', asoarrex([]));
  Test({LINENUM}48478, 'indices(A, "nargle")', asoarrex([]));

  Test({LINENUM}48480, 'indices(❨❨3, 0, 2, 5, −7, 4, 1, −9❩, ❨1, 0, 5, 2, 1, −3, 5, 4❩❩, 5)', asoarrex([idx2(1, 4), idx2(2, 3), idx2(2, 7)]));
  Test({LINENUM}48481, 'indices(DebugObject("empty matrix"), 5)', asoarrex([]));

  Test({LINENUM}48483, 'v ≔ ❨1, 5, i, 2, −i, 3, −1, 1 + i, 2, 3, 1, 0, 5, 2, 5, 5❩;', null);

  Test({LINENUM}48485, 'indices(v, 0)', intarr([12]));
  Test({LINENUM}48486, 'indices(v, 1)', intarr([1, 11]));
  Test({LINENUM}48487, 'indices(v, 2)', intarr([4, 9, 14]));
  Test({LINENUM}48488, 'indices(v, 3)', intarr([6, 10]));
  Test({LINENUM}48489, 'indices(v, 4)', intarr([]));
  Test({LINENUM}48490, 'indices(v, 5)', intarr([2, 13, 15, 16]));
  Test({LINENUM}48491, 'indices(v, 6)', intarr([]));
  Test({LINENUM}48492, 'indices(v, 7)', intarr([]));
  Test({LINENUM}48493, 'indices(v, 8)', intarr([]));
  Test({LINENUM}48494, 'indices(v, 9)', intarr([]));
  Test({LINENUM}48495, 'indices(v, i)', intarr([3]));
  Test({LINENUM}48496, 'indices(v, "nargle")', intarr([]));

  Test({LINENUM}48498, 'indices(❨1, 5, i, 2, −i, 3, −1, 1 + i, 2, 3, 1, 0, 5, 2, 5, 5❩, 5)', intarr([2, 13, 15, 16]));
  Test({LINENUM}48499, 'indices(ComplexVector(DebugObject("empty vector")), 8)', intarr([]));

  Test({LINENUM}48501, 'v ≔ ❨❨1, 5, i, 2, −i, 3, −1, 1 + i❩, ❨2, 3, 1, 0, 5, 2, 5, 5❩❩;', null);

  Test({LINENUM}48503, 'indices(v, 0)', asoarrex([idx2(2, 4)]));
  Test({LINENUM}48504, 'indices(v, 1)', asoarrex([idx2(1, 1), idx2(2, 3)]));
  Test({LINENUM}48505, 'indices(v, 2)', asoarrex([idx2(1, 4), idx2(2, 1), idx2(2, 6)]));
  Test({LINENUM}48506, 'indices(v, 3)', asoarrex([idx2(1, 6), idx2(2, 2)]));
  Test({LINENUM}48507, 'indices(v, 4)', asoarrex([]));
  Test({LINENUM}48508, 'indices(v, 5)', asoarrex([idx2(1, 2), idx2(2, 5), idx2(2, 7), idx2(2, 8)]));
  Test({LINENUM}48509, 'indices(v, 6)', asoarrex([]));
  Test({LINENUM}48510, 'indices(v, 7)', asoarrex([]));
  Test({LINENUM}48511, 'indices(v, 8)', asoarrex([]));
  Test({LINENUM}48512, 'indices(v, 9)', asoarrex([]));
  Test({LINENUM}48513, 'indices(v, i)', asoarrex([idx2(1, 3)]));
  Test({LINENUM}48514, 'indices(v, "nargle")', asoarrex([]));

  Test({LINENUM}48516, 'indices(❨❨1, 5, i, 2, −i, 3, −1, 1 + i❩, ❨2, 3, 1, 0, 5, 2, 5, 5❩❩, 5)', asoarrex([idx2(1, 2), idx2(2, 5), idx2(2, 7), idx2(2, 8)]));
  Test({LINENUM}48517, 'indices(ComplexMatrix(DebugObject("empty matrix")), 8)', asoarrex([]));

  Test({LINENUM}48519, 's ≔ "the emotional range of a teaspoon";', null);

  Test({LINENUM}48521, 'indices(s, "a")', intarr([12, 16, 24, 28]));
  Test({LINENUM}48522, 'indices(s, "e")', intarr([3, 5, 19, 27]));
  Test({LINENUM}48523, 'indices(s, "t")', intarr([1, 8, 26]));
  Test({LINENUM}48524, 'indices(s, "y")', intarr([]));
  Test({LINENUM}48525, 'indices(s, "m")', intarr([6]));
  Test({LINENUM}48526, 'indices(s, "the")', intarr([]));
  Test({LINENUM}48527, 'indices(s, 1024)', intarr([]));

  Test({LINENUM}48529, 'indices("the emotional range of a teaspoon", "t")', intarr([1, 8, 26]));
  Test({LINENUM}48530, 'indices("", "t")', intarr([]));

  Test({LINENUM}48532, 'L ≔ ''(3, 0, 2, 5, −7, 4, 1, −9, 1, 0, 5, 2, 1, −3, 5, 4);', null);

  Test({LINENUM}48534, 'indices(L, 0)', intarr([2, 10]));
  Test({LINENUM}48535, 'indices(L, 1)', intarr([7, 9, 13]));
  Test({LINENUM}48536, 'indices(L, 2)', intarr([3, 12]));
  Test({LINENUM}48537, 'indices(L, 3)', intarr([1]));
  Test({LINENUM}48538, 'indices(L, 4)', intarr([6, 16]));
  Test({LINENUM}48539, 'indices(L, 5)', intarr([4, 11, 15]));
  Test({LINENUM}48540, 'indices(L, 6)', intarr([]));
  Test({LINENUM}48541, 'indices(L, 7)', intarr([]));
  Test({LINENUM}48542, 'indices(L, 8)', intarr([]));
  Test({LINENUM}48543, 'indices(L, 9)', intarr([]));
  Test({LINENUM}48544, 'indices(L, "nargle")', intarr([]));

  Test({LINENUM}48546, 'indices(''(3, 0, 2, 5, −7, 4, 1, −9, 1, 0, 5, 2, 1, −3, 5, 4), 5)', intarr([4, 11, 15]));
  Test({LINENUM}48547, 'indices(''(), 5)', intarr([]));

  Test({LINENUM}48549, 'S ≔ {3, 0, 2, 5, −7, 4, 1, −9, 1, 0, 5, 2, 1, −3, 5, 4};', null);

  Test({LINENUM}48551, 'indices(S, 0)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48552, 'indices(S, 1)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48553, 'indices(S, 2)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48554, 'indices(S, 3)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48555, 'indices(S, 4)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48556, 'indices(S, 5)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48557, 'indices(S, 6)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48558, 'indices(S, 7)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48559, 'indices(S, 8)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48560, 'indices(S, 9)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48561, 'indices(S, "nargle")', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}48563, 'indices({3, 0, 2, 5, −7, 4, 1, −9, 1, 0, 5, 2, 1, −3, 5, 4}, 5)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48564, 'indices({}, 5)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}48566, 'S ≔ struct("name": "Albus Dumbledore", "age": 116, "role": "headmaster");', null);
  Test({LINENUM}48567, 'indices(S, 116)', intarr([2]));

  Test({LINENUM}48569, 'indices(123, 1)', failure, 'Object type "integer" is not a suitable container.');

  Test({LINENUM}48571, 'v ≔ ❨3, 4, 5, 1, 0, 4.999, 1, 5.01, 1.1, 0.0001❩;', null);

  Test({LINENUM}48573, 'indices(v, 0)', intarr([5]));
  Test({LINENUM}48574, 'indices(v, 0, 2E-6)', intarr([5]));
  Test({LINENUM}48575, 'indices(v, 0, 2E-5)', intarr([5]));
  Test({LINENUM}48576, 'indices(v, 0, 2E-4)', intarr([5, 10]));
  Test({LINENUM}48577, 'indices(v, 0, 2E-3)', intarr([5, 10]));
  Test({LINENUM}48578, 'indices(v, 0, 2E-2)', intarr([5, 10]));
  Test({LINENUM}48579, 'indices(v, 0, 2E-1)', intarr([5, 10]));

  Test({LINENUM}48581, 'indices(v, 1)', intarr([4, 7]));
  Test({LINENUM}48582, 'indices(v, 1, 2E-6)', intarr([4, 7]));
  Test({LINENUM}48583, 'indices(v, 1, 2E-5)', intarr([4, 7]));
  Test({LINENUM}48584, 'indices(v, 1, 2E-4)', intarr([4, 7]));
  Test({LINENUM}48585, 'indices(v, 1, 2E-3)', intarr([4, 7]));
  Test({LINENUM}48586, 'indices(v, 1, 2E-2)', intarr([4, 7]));
  Test({LINENUM}48587, 'indices(v, 1, 2E-1)', intarr([4, 7, 9]));

  Test({LINENUM}48589, 'indices(v, 5)', intarr([3]));
  Test({LINENUM}48590, 'indices(v, 5, 2E-6)', intarr([3]));
  Test({LINENUM}48591, 'indices(v, 5, 2E-5)', intarr([3]));
  Test({LINENUM}48592, 'indices(v, 5, 2E-4)', intarr([3]));
  Test({LINENUM}48593, 'indices(v, 5, 2E-3)', intarr([3, 6]));
  Test({LINENUM}48594, 'indices(v, 5, 2E-2)', intarr([3, 6, 8]));
  Test({LINENUM}48595, 'indices(v, 5, 2E-1)', intarr([3, 6, 8]));

  Test({LINENUM}48597, 'indices(v, 3)', intarr([1]));
  Test({LINENUM}48598, 'indices(v, 3, 2E-6)', intarr([1]));
  Test({LINENUM}48599, 'indices(v, 3, 2E-5)', intarr([1]));
  Test({LINENUM}48600, 'indices(v, 3, 2E-4)', intarr([1]));
  Test({LINENUM}48601, 'indices(v, 3, 2E-3)', intarr([1]));
  Test({LINENUM}48602, 'indices(v, 3, 2E-2)', intarr([1]));
  Test({LINENUM}48603, 'indices(v, 3, 2E-1)', intarr([1]));

  Test({LINENUM}48605, 'indices(v, 8)', intarr([]));
  Test({LINENUM}48606, 'indices(v, 8, 2E-6)', intarr([]));
  Test({LINENUM}48607, 'indices(v, 8, 2E-5)', intarr([]));
  Test({LINENUM}48608, 'indices(v, 8, 2E-4)', intarr([]));
  Test({LINENUM}48609, 'indices(v, 8, 2E-3)', intarr([]));
  Test({LINENUM}48610, 'indices(v, 8, 2E-2)', intarr([]));
  Test({LINENUM}48611, 'indices(v, 8, 2E-1)', intarr([]));

  Test({LINENUM}48613, 'indices(❨3, 4, 5, 1, 0, 4.999, 1, 5.01, 1.1, 0.0001❩, 5, 2E-3)', intarr([3, 6]));
  Test({LINENUM}48614, 'indices(DebugObject("empty vector"), 5, 2E-3)', intarr([]));
  Test({LINENUM}48615, 'indices(v, "thestral", 2E-4)', intarr([]));
  Test({LINENUM}48616, 'indices(v, 1, -2E-4)', failure, 'A non-negative real number was expected as argument 3, but "-0.0002" was given.');

  Test({LINENUM}48618, 'A ≔ ❨❨3, 4, 5, 1, 0❩, ❨4.999, 1, 5.01, 1.1, 0.0001❩❩;', null);

  Test({LINENUM}48620, 'indices(A, 0)', asoarrex([idx2(1, 5)]));
  Test({LINENUM}48621, 'indices(A, 0, 2E-6)', asoarrex([idx2(1, 5)]));
  Test({LINENUM}48622, 'indices(A, 0, 2E-5)', asoarrex([idx2(1, 5)]));
  Test({LINENUM}48623, 'indices(A, 0, 2E-4)', asoarrex([idx2(1, 5), idx2(2, 5)]));
  Test({LINENUM}48624, 'indices(A, 0, 2E-3)', asoarrex([idx2(1, 5), idx2(2, 5)]));
  Test({LINENUM}48625, 'indices(A, 0, 2E-2)', asoarrex([idx2(1, 5), idx2(2, 5)]));
  Test({LINENUM}48626, 'indices(A, 0, 2E-1)', asoarrex([idx2(1, 5), idx2(2, 5)]));

  Test({LINENUM}48628, 'indices(A, 1)', asoarrex([idx2(1, 4), idx2(2, 2)]));
  Test({LINENUM}48629, 'indices(A, 1, 2E-6)', asoarrex([idx2(1, 4), idx2(2, 2)]));
  Test({LINENUM}48630, 'indices(A, 1, 2E-5)', asoarrex([idx2(1, 4), idx2(2, 2)]));
  Test({LINENUM}48631, 'indices(A, 1, 2E-4)', asoarrex([idx2(1, 4), idx2(2, 2)]));
  Test({LINENUM}48632, 'indices(A, 1, 2E-3)', asoarrex([idx2(1, 4), idx2(2, 2)]));
  Test({LINENUM}48633, 'indices(A, 1, 2E-2)', asoarrex([idx2(1, 4), idx2(2, 2)]));
  Test({LINENUM}48634, 'indices(A, 1, 2E-1)', asoarrex([idx2(1, 4), idx2(2, 2), idx2(2, 4)]));

  Test({LINENUM}48636, 'indices(A, 5)', asoarrex([idx2(1, 3)]));
  Test({LINENUM}48637, 'indices(A, 5, 2E-6)', asoarrex([idx2(1, 3)]));
  Test({LINENUM}48638, 'indices(A, 5, 2E-5)', asoarrex([idx2(1, 3)]));
  Test({LINENUM}48639, 'indices(A, 5, 2E-4)', asoarrex([idx2(1, 3)]));
  Test({LINENUM}48640, 'indices(A, 5, 2E-3)', asoarrex([idx2(1, 3), idx2(2, 1)]));
  Test({LINENUM}48641, 'indices(A, 5, 2E-2)', asoarrex([idx2(1, 3), idx2(2, 1), idx2(2, 3)]));
  Test({LINENUM}48642, 'indices(A, 5, 2E-1)', asoarrex([idx2(1, 3), idx2(2, 1), idx2(2, 3)]));

  Test({LINENUM}48644, 'indices(A, 3)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48645, 'indices(A, 3, 2E-6)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48646, 'indices(A, 3, 2E-5)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48647, 'indices(A, 3, 2E-4)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48648, 'indices(A, 3, 2E-3)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48649, 'indices(A, 3, 2E-2)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48650, 'indices(A, 3, 2E-1)', asoarrex([idx2(1, 1)]));

  Test({LINENUM}48652, 'indices(A, 8)', asoarrex([]));
  Test({LINENUM}48653, 'indices(A, 8, 2E-6)', asoarrex([]));
  Test({LINENUM}48654, 'indices(A, 8, 2E-5)', asoarrex([]));
  Test({LINENUM}48655, 'indices(A, 8, 2E-4)', asoarrex([]));
  Test({LINENUM}48656, 'indices(A, 8, 2E-3)', asoarrex([]));
  Test({LINENUM}48657, 'indices(A, 8, 2E-2)', asoarrex([]));
  Test({LINENUM}48658, 'indices(A, 8, 2E-1)', asoarrex([]));

  Test({LINENUM}48660, 'indices(❨❨3, 4, 5, 1, 0❩, ❨4.999, 1, 5.01, 1.1, 0.0001❩❩, 5, 2E-3)', asoarrex([idx2(1, 3), idx2(2, 1)]));
  Test({LINENUM}48661, 'indices(DebugObject("empty matrix"), 5, 2E-3)', asoarrex([]));
  Test({LINENUM}48662, 'indices(A, "thestral", 2E-4)', asoarrex([]));
  Test({LINENUM}48663, 'indices(A, 1, -2E-4)', failure, 'A non-negative real number was expected as argument 3, but "-0.0002" was given.');

  Test({LINENUM}48665, 'v ≔ ❨1, i, 0.99, 5, 1 + i, 1.0001 + i, 4.99, 5.001, 1 + 0.999⋅i, 5❩;', null);

  Test({LINENUM}48667, 'indices(v, 1)', intarr([1]));
  Test({LINENUM}48668, 'indices(v, 1, 2E-6)', intarr([1]));
  Test({LINENUM}48669, 'indices(v, 1, 2E-5)', intarr([1]));
  Test({LINENUM}48670, 'indices(v, 1, 2E-4)', intarr([1]));
  Test({LINENUM}48671, 'indices(v, 1, 2E-3)', intarr([1]));
  Test({LINENUM}48672, 'indices(v, 1, 2E-2)', intarr([1, 3]));
  Test({LINENUM}48673, 'indices(v, 1, 2E-1)', intarr([1, 3]));

  Test({LINENUM}48675, 'indices(v, 5)', intarr([4, 10]));
  Test({LINENUM}48676, 'indices(v, 5, 2E-6)', intarr([4, 10]));
  Test({LINENUM}48677, 'indices(v, 5, 2E-5)', intarr([4, 10]));
  Test({LINENUM}48678, 'indices(v, 5, 2E-4)', intarr([4, 10]));
  Test({LINENUM}48679, 'indices(v, 5, 2E-3)', intarr([4, 8, 10]));
  Test({LINENUM}48680, 'indices(v, 5, 2E-2)', intarr([4, 7, 8, 10]));
  Test({LINENUM}48681, 'indices(v, 5, 2E-1)', intarr([4, 7, 8, 10]));

  Test({LINENUM}48683, 'indices(v, 1 + i)', intarr([5]));
  Test({LINENUM}48684, 'indices(v, 1 + i, 2E-6)', intarr([5]));
  Test({LINENUM}48685, 'indices(v, 1 + i, 2E-5)', intarr([5]));
  Test({LINENUM}48686, 'indices(v, 1 + i, 2E-4)', intarr([5, 6]));
  Test({LINENUM}48687, 'indices(v, 1 + i, 2E-3)', intarr([5, 6, 9]));
  Test({LINENUM}48688, 'indices(v, 1 + i, 2E-2)', intarr([5, 6, 9]));
  Test({LINENUM}48689, 'indices(v, 1 + i, 2E-1)', intarr([5, 6, 9]));

  Test({LINENUM}48691, 'indices(v, -i, 2E-4)', intarr([]));
  Test({LINENUM}48692, 'indices(v, "cat", 2E-4)', intarr([]));

  Test({LINENUM}48694, 'indices(❨1, i, 0.99, 5, 1 + i, 1.0001 + i, 4.99, 5.001, 1 + 0.999⋅i, 5❩, 1 + i, 2E-3)', intarr([5, 6, 9]));
  Test({LINENUM}48695, 'indices(ComplexVector(DebugObject("empty vector")), 1 + i, 2E-3)', intarr([]));

  Test({LINENUM}48697, 'A ≔ ❨❨1, i, 0.99, 5, 1 + i❩, ❨1.0001 + i, 4.99, 5.001, 1 + 0.999⋅i, 5❩❩;', null);

  Test({LINENUM}48699, 'indices(A, 1)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48700, 'indices(A, 1, 2E-6)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48701, 'indices(A, 1, 2E-5)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48702, 'indices(A, 1, 2E-4)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48703, 'indices(A, 1, 2E-3)', asoarrex([idx2(1, 1)]));
  Test({LINENUM}48704, 'indices(A, 1, 2E-2)', asoarrex([idx2(1, 1), idx2(1, 3)]));
  Test({LINENUM}48705, 'indices(A, 1, 2E-1)', asoarrex([idx2(1, 1), idx2(1, 3)]));

  Test({LINENUM}48707, 'indices(A, 5)', asoarrex([idx2(1, 4), idx2(2, 5)]));
  Test({LINENUM}48708, 'indices(A, 5, 2E-6)', asoarrex([idx2(1, 4), idx2(2, 5)]));
  Test({LINENUM}48709, 'indices(A, 5, 2E-5)', asoarrex([idx2(1, 4), idx2(2, 5)]));
  Test({LINENUM}48710, 'indices(A, 5, 2E-4)', asoarrex([idx2(1, 4), idx2(2, 5)]));
  Test({LINENUM}48711, 'indices(A, 5, 2E-3)', asoarrex([idx2(1, 4), idx2(2, 3), idx2(2, 5)]));
  Test({LINENUM}48712, 'indices(A, 5, 2E-2)', asoarrex([idx2(1, 4), idx2(2, 2), idx2(2, 3), idx2(2, 5)]));
  Test({LINENUM}48713, 'indices(A, 5, 2E-1)', asoarrex([idx2(1, 4), idx2(2, 2), idx2(2, 3), idx2(2, 5)]));

  Test({LINENUM}48715, 'indices(A, 1 + i)', asoarrex([idx2(1, 5)]));
  Test({LINENUM}48716, 'indices(A, 1 + i, 2E-6)', asoarrex([idx2(1, 5)]));
  Test({LINENUM}48717, 'indices(A, 1 + i, 2E-5)', asoarrex([idx2(1, 5)]));
  Test({LINENUM}48718, 'indices(A, 1 + i, 2E-4)', asoarrex([idx2(1, 5), idx2(2, 1)]));
  Test({LINENUM}48719, 'indices(A, 1 + i, 2E-3)', asoarrex([idx2(1, 5), idx2(2, 1), idx2(2, 4)]));
  Test({LINENUM}48720, 'indices(A, 1 + i, 2E-2)', asoarrex([idx2(1, 5), idx2(2, 1), idx2(2, 4)]));
  Test({LINENUM}48721, 'indices(A, 1 + i, 2E-1)', asoarrex([idx2(1, 5), idx2(2, 1), idx2(2, 4)]));

  Test({LINENUM}48723, 'indices(A, -i, 2E-4)', asoarrex([]));
  Test({LINENUM}48724, 'indices(A, "cat", 2E-4)', asoarrex([]));

  Test({LINENUM}48726, 'indices(❨❨1, i, 0.99, 5, 1 + i❩, ❨1.0001 + i, 4.99, 5.001, 1 + 0.999⋅i, 5❩❩, 1 + i, 2E-3)', asoarrex([idx2(1, 5), idx2(2, 1), idx2(2, 4)]));
  Test({LINENUM}48727, 'indices(ComplexMatrix(DebugObject("empty matrix")), 1 + i, 2E-3)', asoarrex([]));

  Test({LINENUM}48729, 's ≔ "the emotional range of a teaspoon";', null);

  Test({LINENUM}48731, 'indices(s, "a", 0.001)', intarr([12, 16, 24, 28]));
  Test({LINENUM}48732, 'indices(s, "e", 0.001)', intarr([3, 5, 19, 27]));
  Test({LINENUM}48733, 'indices(s, "t", 0.001)', intarr([1, 8, 26]));
  Test({LINENUM}48734, 'indices(s, "y", 0.001)', intarr([]));
  Test({LINENUM}48735, 'indices(s, "m", 0.001)', intarr([6]));
  Test({LINENUM}48736, 'indices(s, "the", 0.001)', intarr([]));
  Test({LINENUM}48737, 'indices(s, 1024, 0.001)', intarr([]));

  Test({LINENUM}48739, 'indices("the emotional range of a teaspoon", "t", 0.001)', intarr([1, 8, 26]));
  Test({LINENUM}48740, 'indices("", "t", 0.001)', intarr([]));

  Test({LINENUM}48742, 'L ≔ ''(3, 4, 5, 1, 0, 4.999, 1, 5.01, 1.1, 0.0001);', null);

  Test({LINENUM}48744, 'indices(L, 0)', intarr([5]));
  Test({LINENUM}48745, 'indices(L, 0, 2E-6)', intarr([5]));
  Test({LINENUM}48746, 'indices(L, 0, 2E-5)', intarr([5]));
  Test({LINENUM}48747, 'indices(L, 0, 2E-4)', intarr([5, 10]));
  Test({LINENUM}48748, 'indices(L, 0, 2E-3)', intarr([5, 10]));
  Test({LINENUM}48749, 'indices(L, 0, 2E-2)', intarr([5, 10]));
  Test({LINENUM}48750, 'indices(L, 0, 2E-1)', intarr([5, 10]));

  Test({LINENUM}48752, 'indices(L, 1)', intarr([4, 7]));
  Test({LINENUM}48753, 'indices(L, 1, 2E-6)', intarr([4, 7]));
  Test({LINENUM}48754, 'indices(L, 1, 2E-5)', intarr([4, 7]));
  Test({LINENUM}48755, 'indices(L, 1, 2E-4)', intarr([4, 7]));
  Test({LINENUM}48756, 'indices(L, 1, 2E-3)', intarr([4, 7]));
  Test({LINENUM}48757, 'indices(L, 1, 2E-2)', intarr([4, 7]));
  Test({LINENUM}48758, 'indices(L, 1, 2E-1)', intarr([4, 7, 9]));

  Test({LINENUM}48760, 'indices(L, 5)', intarr([3]));
  Test({LINENUM}48761, 'indices(L, 5, 2E-6)', intarr([3]));
  Test({LINENUM}48762, 'indices(L, 5, 2E-5)', intarr([3]));
  Test({LINENUM}48763, 'indices(L, 5, 2E-4)', intarr([3]));
  Test({LINENUM}48764, 'indices(L, 5, 2E-3)', intarr([3, 6]));
  Test({LINENUM}48765, 'indices(L, 5, 2E-2)', intarr([3, 6, 8]));
  Test({LINENUM}48766, 'indices(L, 5, 2E-1)', intarr([3, 6, 8]));

  Test({LINENUM}48768, 'indices(L, 3)', intarr([1]));
  Test({LINENUM}48769, 'indices(L, 3, 2E-6)', intarr([1]));
  Test({LINENUM}48770, 'indices(L, 3, 2E-5)', intarr([1]));
  Test({LINENUM}48771, 'indices(L, 3, 2E-4)', intarr([1]));
  Test({LINENUM}48772, 'indices(L, 3, 2E-3)', intarr([1]));
  Test({LINENUM}48773, 'indices(L, 3, 2E-2)', intarr([1]));
  Test({LINENUM}48774, 'indices(L, 3, 2E-1)', intarr([1]));

  Test({LINENUM}48776, 'indices(L, 8)', intarr([]));
  Test({LINENUM}48777, 'indices(L, 8, 2E-6)', intarr([]));
  Test({LINENUM}48778, 'indices(L, 8, 2E-5)', intarr([]));
  Test({LINENUM}48779, 'indices(L, 8, 2E-4)', intarr([]));
  Test({LINENUM}48780, 'indices(L, 8, 2E-3)', intarr([]));
  Test({LINENUM}48781, 'indices(L, 8, 2E-2)', intarr([]));
  Test({LINENUM}48782, 'indices(L, 8, 2E-1)', intarr([]));

  Test({LINENUM}48784, 'indices(''(3, 4, 5, 1, 0, 4.999, 1, 5.01, 1.1, 0.0001), 5, 2E-3)', intarr([3, 6]));
  Test({LINENUM}48785, 'indices(''(), 5, 2E-3)', intarr([]));
  Test({LINENUM}48786, 'indices(L, "thestral", 2E-4)', intarr([]));
  Test({LINENUM}48787, 'indices(L, 1, -2E-4)', failure, 'A non-negative real number was expected as argument 3, but "-0.0002" was given.');

  Test({LINENUM}48789, 'S ≔ {3, 4, 5, 1, 0, 4.999, 1, 5.01, 1.1, 0.0001};', null);

  Test({LINENUM}48791, 'indices(S, 0)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48792, 'indices(S, 0, 2E-6)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48793, 'indices(S, 0, 2E-5)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48794, 'indices(S, 0, 2E-4)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48795, 'indices(S, 0, 2E-3)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48796, 'indices(S, 0, 2E-2)', failure, 'Object type "set" is not a suitable container.');
  Test({LINENUM}48797, 'indices(S, 0, 2E-1)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}48799, 'S ≔ struct("name": "Albus Dumbledore", "age": 116, "role": "headmaster", "points": 100);', null);
  Test({LINENUM}48800, 'indices(S, 116, 0.001)', intarr([2]));
  Test({LINENUM}48801, 'indices(S, 116, 15)', intarr([2]));
  Test({LINENUM}48802, 'indices(S, 116, 20)', intarr([2, 4]));

  Test({LINENUM}48804, 'indices(1024, 1, 0.01)', failure, 'Object type "integer" is not a suitable container.');

  Test({LINENUM}48806, 'indices()', failure, 'There is no version of this function that can take 0 argument(s).');
  Test({LINENUM}48807, 'indices(L)', failure, 'There is no version of this function that can take 1 argument(s).');

  Test({LINENUM}48809, 'delete(v); delete(A); delete(s); delete(S); delete(L)', success);


  //
  // Filtering and picking
  //

  // Filtering

  Test({LINENUM}48818, 'v ≔ ❨4, 2, −1, 3, 5, 8, 0, 4, −7, 9, 8, 12, 2, 11, −4, 7❩;', null);

  Test({LINENUM}48820, 'filter(v, IsNumber)', [4, 2, -1, 3, 5, 8, 0, 4, -7, 9, 8, 12, 2, 11, -4, 7]);
  Test({LINENUM}48821, 'filter(v, odd)', [-1, 3, 5, -7, 9, 11, 7]);
  Test({LINENUM}48822, 'filter(v, even)', [4, 2, 8, 0, 4, 8, 12, 2, -4]);
  Test({LINENUM}48823, 'filter(v, IsPositive)', [4, 2, 3, 5, 8, 4, 9, 8, 12, 2, 11, 7]);
  Test({LINENUM}48824, 'filter(v, IsNegative)', [-1, -7, -4]);
  Test({LINENUM}48825, 'filter(v, IsZero)', [0]);
  Test({LINENUM}48826, 'filter(v, IsPrime)', [2, 3, 5, 2, 11, 7]);
  Test({LINENUM}48827, 'filter(v, x ↦ x > 10)', [12, 11]);
  Test({LINENUM}48828, 'filter(v, x ↦ x > 100)', TAlgosimRealVector.Create);

  Test({LINENUM}48830, 'filter(❨4, 2, −1, 3, 5, 8, 0, 4, −7, 9, 8, 12, 2, 11, −4, 7❩, IsPrime)', [2, 3, 5, 2, 11, 7]);
  Test({LINENUM}48831, 'filter(DebugObject("empty vector"), IsPrime)', TAlgosimRealVector.Create);
  Test({LINENUM}48832, 'filter(v, x ↦ x! < 100)', failure, 'A non-negative integer was expected as argument 1, but "-1" was given.');

  Test({LINENUM}48834, 'filter(❨❨5, 3, 2, 1❩, ❨5, 7, 8, 9❩❩, odd)', failure, 'Cannot filter elements in an object of type "real matrix".');

  Test({LINENUM}48836, 'v ≔ ❨6, 5.2, i, 1 + i, 3 − i, 0, 1024❩;', null);

  Test({LINENUM}48838, 'filter(v, IsNumber)', [6, 5.2, ImaginaryUnit, 1 + ImaginaryUnit, 3 - ImaginaryUnit, 0, 1024]);
  Test({LINENUM}48839, 'filter(v, IsReal)', [TASC(6), 5.2, 0, 1024]);
  Test({LINENUM}48840, 'filter(v, IsInteger)', [TASC(6), 0, 1024]);
  Test({LINENUM}48841, 'filter(v, IsZero)', [TASC(0)]);
  Test({LINENUM}48842, 'filter(v, z ↦ abs(z) > 1000)', [TASC(1024)]);
  Test({LINENUM}48843, 'filter(v, z ↦ abs(z) > 2000)', TAlgosimComplexVector.Create);

  Test({LINENUM}48845, 'filter(❨6, 5.2, i, 1 + i, 3 − i, 0, 1024❩, IsReal)', [TASC(6), 5.2, 0, 1024]);
  Test({LINENUM}48846, 'filter(ComplexVector(DebugObject("empty vector")), IsReal)', TAlgosimComplexVector.Create);
  Test({LINENUM}48847, 'filter(v, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');

  Test({LINENUM}48849, 'filter(❨❨5, 3, 2, i❩, ❨5, 7, 8, 9❩❩, IsReal)', failure, 'Cannot filter elements in an object of type "complex matrix".');

  Test({LINENUM}48851, 's ≔ "the emotional range of a teaspoon";', null);

  Test({LINENUM}48853, 'filter(s, IsCharacter)', 'the emotional range of a teaspoon');
  Test({LINENUM}48854, 'filter(s, ChrIsASCII)', 'the emotional range of a teaspoon');
  Test({LINENUM}48855, 'filter(s, ChrIsLetter)', 'theemotionalrangeofateaspoon');
  Test({LINENUM}48856, 'filter(s, ChrIsWhitespace)', '     ');

  Test({LINENUM}48858, 'filter("the emotional range of a teaspoon", ChrIsLetter)', 'theemotionalrangeofateaspoon');
  Test({LINENUM}48859, 'filter("", ChrIsLetter)', '');

  Test({LINENUM}48861, 'L ≔ ''(4, 2, −1, 3, 5, 8, 0, 4, −7, 9, 8, 12, 2, 11, −4, 7);', null);

  Test({LINENUM}48863, 'filter(L, IsNumber)', intarr([4, 2, -1, 3, 5, 8, 0, 4, -7, 9, 8, 12, 2, 11, -4, 7]));
  Test({LINENUM}48864, 'filter(L, odd)', intarr([-1, 3, 5, -7, 9, 11, 7]));
  Test({LINENUM}48865, 'filter(L, even)', intarr([4, 2, 8, 0, 4, 8, 12, 2, -4]));
  Test({LINENUM}48866, 'filter(L, IsPositive)', intarr([4, 2, 3, 5, 8, 4, 9, 8, 12, 2, 11, 7]));
  Test({LINENUM}48867, 'filter(L, IsNegative)', intarr([-1, -7, -4]));
  Test({LINENUM}48868, 'filter(L, IsZero)', intarr([0]));
  Test({LINENUM}48869, 'filter(L, IsPrime)', intarr([2, 3, 5, 2, 11, 7]));
  Test({LINENUM}48870, 'filter(L, x ↦ x > 10)', intarr([12, 11]));
  Test({LINENUM}48871, 'filter(L, x ↦ x > 100)', intarr([]));

  Test({LINENUM}48873, 'filter(''(4, 2, −1, 3, 5, 8, 0, 4, −7, 9, 8, 12, 2, 11, −4, 7), IsPrime)', intarr([2, 3, 5, 2, 11, 7]));
  Test({LINENUM}48874, 'filter(''(), IsPrime)', intarr([]));
  Test({LINENUM}48875, 'filter(L, x ↦ x! < 100)', failure, 'A non-negative integer was expected as argument 1, but "-1" was given.');

  Test({LINENUM}48877, 'S ≔ {4, 2, −1, 3, 5, 8, 0, 4, −7, 9, 8, 12, 2, 11, −4, 7};', null);

  Test({LINENUM}48879, 'filter(S, IsNumber)', intset([4, 2, -1, 3, 5, 8, 0, 4, -7, 9, 8, 12, 2, 11, -4, 7]));
  Test({LINENUM}48880, 'filter(S, odd)', intset([-1, 3, 5, -7, 9, 11, 7]));
  Test({LINENUM}48881, 'filter(S, even)', intset([4, 2, 8, 0, 4, 8, 12, 2, -4]));
  Test({LINENUM}48882, 'filter(S, IsPositive)', intset([4, 2, 3, 5, 8, 4, 9, 8, 12, 2, 11, 7]));
  Test({LINENUM}48883, 'filter(S, IsNegative)', intset([-1, -7, -4]));
  Test({LINENUM}48884, 'filter(S, IsZero)', intset([0]));
  Test({LINENUM}48885, 'filter(S, IsPrime)', intset([2, 3, 5, 2, 11, 7]));
  Test({LINENUM}48886, 'filter(S, x ↦ x > 10)', intset([12, 11]));
  Test({LINENUM}48887, 'filter(S, x ↦ x > 100)', intset([]));

  Test({LINENUM}48889, 'filter({4, 2, −1, 3, 5, 8, 0, 4, −7, 9, 8, 12, 2, 11, −4, 7}, IsPrime)', intset([2, 3, 5, 2, 11, 7]));
  Test({LINENUM}48890, 'filter({}, IsPrime)', intset([]));
  Test({LINENUM}48891, 'filter(S, x ↦ x! < 100)', failure, 'A non-negative integer was expected as argument 1, but'); // you don't know in what order the elements are tried

  Test({LINENUM}48893, 'S ≔ struct("name": "Albus Dumbledore", "age": 116, "role": "headmaster")', TAlgosimStructure.CreateWithValue(
    ['name', 'age', 'role'],
    [ASO('Albus Dumbledore'), ASOInt(116), ASO('headmaster')]
  ));

  Test({LINENUM}48898, 'filter(S, IsText)', TAlgosimStructure.CreateWithValue(
    ['name', 'role'],
    [ASO('Albus Dumbledore'), ASO('headmaster')]
  ));

  Test({LINENUM}48903, 'filter(S, IsNumber)', TAlgosimStructure.CreateWithValue(
    ['age'],
    [ASOInt(116)]
  ));

  Test({LINENUM}48908, 'filter(S, IsPixmap)', TAlgosimStructure.CreateWithValue(
    [],
    []
  ));

  Test({LINENUM}48913, 'filter(S, IsPositive)', failure, 'An object of type numeric entity was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}48915, 'filter(struct("name": "Albus Dumbledore", "age": 116, "role": "headmaster"), IsText)', TAlgosimStructure.CreateWithValue(
    ['name', 'role'],
    [ASO('Albus Dumbledore'), ASO('headmaster')]
  ));

  Test({LINENUM}48920, 'filter(struct(), IsPixmap)', TAlgosimStructure.CreateWithValue(
    [],
    []
  ));

  Test({LINENUM}48925, 'filter()', failure, '2 argument(s) expected, but 0 given.');
  Test({LINENUM}48926, 'filter(S)', failure, '2 argument(s) expected, but 1 given.');

  Test({LINENUM}48928, 'S', TAlgosimStructure.CreateWithValue(
    ['name', 'age', 'role'],
    [ASO('Albus Dumbledore'), ASOInt(116), ASO('headmaster')]
  ));

  // Picking

  Test({LINENUM}48935, 'v ≔ ❨6, 3, 0, 2, 1, −7, 8, 10, 5, 4, −2, 5, 1, 9, 8, 11❩;', null);

  Test({LINENUM}48937, 'pick(v, IsNumber)', intarr([6, 3, 0, 2, 1, -7, 8, 10, 5, 4, -2, 5, 1, 9, 8, 11]));
  Test({LINENUM}48938, 'pick(v, IsPositive)', intarr([6, 3, 2, 1, 8, 10, 5, 4, 5, 1, 9, 8, 11]));
  Test({LINENUM}48939, 'pick(v, IsZero)', intarr([0]));
  Test({LINENUM}48940, 'pick(v, IsNegative)', intarr([-7, -2]));
  Test({LINENUM}48941, 'pick(v, odd)', intarr([3, 1, -7, 5, 5, 1, 9, 11]));
  Test({LINENUM}48942, 'pick(v, even)', intarr([6, 0, 2, 8, 10, 4, -2, 8]));
  Test({LINENUM}48943, 'pick(v, IsPrime)', intarr([3, 2, 5, 5, 11]));
  Test({LINENUM}48944, 'pick(v, IsSound)', intarr([]));
  Test({LINENUM}48945, 'pick(v, x ↦ x ≥ 10)', intarr([10, 11]));

  Test({LINENUM}48947, 'pick(❨6, 3, 0, 2, 1, −7, 8, 10, 5, 4, −2, 5, 1, 9, 8, 11❩, odd)', intarr([3, 1, -7, 5, 5, 1, 9, 11]));
  Test({LINENUM}48948, 'pick(DebugObject("empty vector"), odd)', intarr([]));
  Test({LINENUM}48949, 'pick(v, x ↦ x! ≥ 10)', failure, 'A non-negative integer was expected as argument 1, but "-7" was given.');
  Test({LINENUM}48950, 'pick(v, sin)', failure, 'The predicate was expected to return a boolean, but an object of type real number was returned.');

  Test({LINENUM}48952, 'A ≔ ❨❨6, 3, 0, 2, 1, −7, 8, 10❩, ❨5, 4, −2, 5, 1, 9, 8, 11❩❩;', null);

  Test({LINENUM}48954, 'pick(A, IsNumber)', intarr([6, 3, 0, 2, 1, -7, 8, 10, 5, 4, -2, 5, 1, 9, 8, 11]));
  Test({LINENUM}48955, 'pick(A, IsPositive)', intarr([6, 3, 2, 1, 8, 10, 5, 4, 5, 1, 9, 8, 11]));
  Test({LINENUM}48956, 'pick(A, IsZero)', intarr([0]));
  Test({LINENUM}48957, 'pick(A, IsNegative)', intarr([-7, -2]));
  Test({LINENUM}48958, 'pick(A, odd)', intarr([3, 1, -7, 5, 5, 1, 9, 11]));
  Test({LINENUM}48959, 'pick(A, even)', intarr([6, 0, 2, 8, 10, 4, -2, 8]));
  Test({LINENUM}48960, 'pick(A, IsPrime)', intarr([3, 2, 5, 5, 11]));
  Test({LINENUM}48961, 'pick(A, IsSound)', intarr([]));
  Test({LINENUM}48962, 'pick(A, x ↦ x ≥ 10)', intarr([10, 11]));

  Test({LINENUM}48964, 'pick(❨❨6, 3, 0, 2, 1, −7, 8, 10❩, ❨5, 4, −2, 5, 1, 9, 8, 11❩❩, odd)', intarr([3, 1, -7, 5, 5, 1, 9, 11]));
  Test({LINENUM}48965, 'pick(DebugObject("empty matrix"), odd)', intarr([]));
  Test({LINENUM}48966, 'pick(A, x ↦ x! ≥ 10)', failure, 'A non-negative integer was expected as argument 1, but "-7" was given.');
  Test({LINENUM}48967, 'pick(A, sin)', failure, 'The predicate was expected to return a boolean, but an object of type real number was returned.');

  Test({LINENUM}48969, 'v ≔ ❨6, −2, 5.2, i, −i, 1024, 100⋅i, 0❩;', null);

  Test({LINENUM}48971, 'pick(v, IsNumber)', asoarrex([ASOInt(6), ASOInt(-2), ASO(5.2), ASO(ImaginaryUnit), ASO(-ImaginaryUnit), ASOInt(1024), ASO(100*ImaginaryUnit), ASOInt(0)]));
  Test({LINENUM}48972, 'pick(v, IsReal)', asoarrex([ASOInt(6), ASOInt(-2), ASO(5.2), ASOInt(1024), ASOInt(0)]));
  Test({LINENUM}48973, 'pick(v, IsInteger)', asoarrex([ASOInt(6), ASOInt(-2), ASOInt(1024), ASOInt(0)]));
  Test({LINENUM}48974, 'pick(v, IsZero)', asoarrex([ASOInt(0)]));
  Test({LINENUM}48975, 'pick(v, IsPixmap)', asoarrex([]));
  Test({LINENUM}48976, 'pick(v, z ↦ abs(z) ≥ 100)', asoarrex([ASOInt(1024), ASO(100*ImaginaryUnit)]));
  Test({LINENUM}48977, 'pick(v, z ↦ abs(z) ≥ 10000)', asoarrex([]));
  Test({LINENUM}48978, 'pick(v, sin)', failure, 'The predicate was expected to return a boolean, but an object of type complex number was returned.');

  Test({LINENUM}48980, 'pick(❨6, −2, 5.2, i, −i, 1024, 100⋅i, 0❩, IsInteger)', asoarrex([ASOInt(6), ASOInt(-2), ASOInt(1024), ASOInt(0)]));
  Test({LINENUM}48981, 'pick(ComplexVector(DebugObject("empty vector")), IsInteger)', asoarrex([]));
  Test({LINENUM}48982, 'pick(v, IsPositive)', failure, 'Cannot determine the sign of an object of type "complex number".');

  Test({LINENUM}48984, 'A ≔ ❨❨6, −2, 5.2, i❩, ❨−i, 1024, 100⋅i, 0❩❩;', null);

  Test({LINENUM}48986, 'pick(A, IsNumber)', asoarrex([ASOInt(6), ASOInt(-2), ASO(5.2), ASO(ImaginaryUnit), ASO(-ImaginaryUnit), ASOInt(1024), ASO(100*ImaginaryUnit), ASOInt(0)]));
  Test({LINENUM}48987, 'pick(A, IsReal)', asoarrex([ASOInt(6), ASOInt(-2), ASO(5.2), ASOInt(1024), ASOInt(0)]));
  Test({LINENUM}48988, 'pick(A, IsInteger)', asoarrex([ASOInt(6), ASOInt(-2), ASOInt(1024), ASOInt(0)]));
  Test({LINENUM}48989, 'pick(A, IsZero)', asoarrex([ASOInt(0)]));
  Test({LINENUM}48990, 'pick(A, IsPixmap)', asoarrex([]));
  Test({LINENUM}48991, 'pick(A, z ↦ abs(z) ≥ 100)', asoarrex([ASOInt(1024), ASO(100*ImaginaryUnit)]));
  Test({LINENUM}48992, 'pick(A, z ↦ abs(z) ≥ 10000)', asoarrex([]));

  Test({LINENUM}48994, 'pick(❨❨6, −2, 5.2, i❩, ❨−i, 1024, 100⋅i, 0❩❩, IsInteger)', asoarrex([ASOInt(6), ASOInt(-2), ASOInt(1024), ASOInt(0)]));
  Test({LINENUM}48995, 'pick(ComplexMatrix(DebugObject("empty matrix")), IsInteger)', asoarrex([]));
  Test({LINENUM}48996, 'pick(A, IsPositive)', failure, 'Cannot determine the sign of an object of type "complex number".');
  Test({LINENUM}48997, 'pick(A, sin)', failure, 'The predicate was expected to return a boolean, but an object of type complex number was returned.');

  Test({LINENUM}48999, 's ≔ "Turn to page 394.";', null);

  Test({LINENUM}49001, 'pick(s, ChrIsASCII)', strarr(['T', 'u', 'r', 'n', ' ', 't', 'o', ' ', 'p', 'a', 'g', 'e', ' ', '3', '9', '4', '.']));
  Test({LINENUM}49002, 'pick(s, ChrIsLetter)', strarr(['T', 'u', 'r', 'n', 't', 'o', 'p', 'a', 'g', 'e']));
  Test({LINENUM}49003, 'pick(s, ChrIsDigit)', strarr(['3', '9', '4']));
  Test({LINENUM}49004, 'pick(s, ChrIsPunctuation)', strarr(['.']));
  Test({LINENUM}49005, 'pick(s, ChrIsControl)', strarr([]));

  Test({LINENUM}49007, 'pick("Turn to page 394.", ChrIsDigit)', strarr(['3', '9', '4']));
  Test({LINENUM}49008, 'pick("", ChrIsDigit)', strarr([]));
  Test({LINENUM}49009, 'pick(s, odd)', failure, 'An object of type integer was expected as argument 1, but an object of type string was given.');
  Test({LINENUM}49010, 'pick(s, length)', failure, 'The predicate was expected to return a boolean, but an object of type integer was returned.');

  Test({LINENUM}49012, 'L ≔ ''(6, 3, 0, 2, 1, −7, 8, 10, 5, 4, −2, 5, 1, 9, 8, 11);', null);

  Test({LINENUM}49014, 'pick(L, IsNumber)', intarr([6, 3, 0, 2, 1, -7, 8, 10, 5, 4, -2, 5, 1, 9, 8, 11]));
  Test({LINENUM}49015, 'pick(L, IsPositive)', intarr([6, 3, 2, 1, 8, 10, 5, 4, 5, 1, 9, 8, 11]));
  Test({LINENUM}49016, 'pick(L, IsZero)', intarr([0]));
  Test({LINENUM}49017, 'pick(L, IsNegative)', intarr([-7, -2]));
  Test({LINENUM}49018, 'pick(L, odd)', intarr([3, 1, -7, 5, 5, 1, 9, 11]));
  Test({LINENUM}49019, 'pick(L, even)', intarr([6, 0, 2, 8, 10, 4, -2, 8]));
  Test({LINENUM}49020, 'pick(L, IsPrime)', intarr([3, 2, 5, 5, 11]));
  Test({LINENUM}49021, 'pick(L, IsSound)', intarr([]));
  Test({LINENUM}49022, 'pick(L, x ↦ x ≥ 10)', intarr([10, 11]));

  Test({LINENUM}49024, 'pick(''(6, 3, 0, 2, 1, −7, 8, 10, 5, 4, −2, 5, 1, 9, 8, 11), odd)', intarr([3, 1, -7, 5, 5, 1, 9, 11]));
  Test({LINENUM}49025, 'pick(''(), odd)', intarr([]));
  Test({LINENUM}49026, 'pick(L, x ↦ x! ≥ 10)', failure, 'A non-negative integer was expected as argument 1, but "-7" was given.');
  Test({LINENUM}49027, 'pick(L, sin)', failure, 'The predicate was expected to return a boolean, but an object of type real number was returned.');

  Test({LINENUM}49029, 'S ≔ {6, 3, 0, 2, 1, −7, 8, 10, 5, 4, −2, 5, 1, 9, 8, 11};', null);

  Test({LINENUM}49031, 'ToSet(pick(S, IsNumber))', intset([6, 3, 0, 2, 1, -7, 8, 10, 5, 4, -2, 5, 1, 9, 8, 11]));
  Test({LINENUM}49032, 'ToSet(pick(S, IsPositive))', intset([6, 3, 2, 1, 8, 10, 5, 4, 5, 1, 9, 8, 11]));
  Test({LINENUM}49033, 'ToSet(pick(S, IsZero))', intset([0]));
  Test({LINENUM}49034, 'ToSet(pick(S, IsNegative))', intset([-7, -2]));
  Test({LINENUM}49035, 'ToSet(pick(S, odd))', intset([3, 1, -7, 5, 5, 1, 9, 11]));
  Test({LINENUM}49036, 'ToSet(pick(S, even))', intset([6, 0, 2, 8, 10, 4, -2, 8]));
  Test({LINENUM}49037, 'ToSet(pick(S, IsPrime))', intset([3, 2, 5, 5, 11]));
  Test({LINENUM}49038, 'ToSet(pick(S, IsSound))', intset([]));
  Test({LINENUM}49039, 'ToSet(pick(S, x ↦ x ≥ 10))', intset([10, 11]));

  Test({LINENUM}49041, 'ToSet(pick({6, 3, 0, 2, 1, −7, 8, 10, 5, 4, −2, 5, 1, 9, 8, 11}, odd))', intset([3, 1, -7, 5, 5, 1, 9, 11]));
  Test({LINENUM}49042, 'ToSet(pick({}, odd))', intset([]));
  Test({LINENUM}49043, 'ToSet(pick(S, x ↦ x! ≥ 10))', failure, 'A non-negative integer was expected as argument 1, but "-7" was given.');

  Test({LINENUM}49045, 'S ≔ struct("name": "Albus Dumbledore", "age": 116, "role": "headmaster")', TAlgosimStructure.CreateWithValue(
    ['name', 'age', 'role'],
    [ASO('Albus Dumbledore'), ASOInt(116), ASO('headmaster')]
  ));

  Test({LINENUM}49050, 'pick(S, IsText)', strarr(['Albus Dumbledore', 'headmaster']));
  Test({LINENUM}49051, 'pick(S, IsNumber)', intarr([116]));

  // - picking with level specification

  Test({LINENUM}49055, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}49056, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
  Test({LINENUM}49057, 'Mary ≔ struct("mother": Jane, "father": Mike);', null);

  Test({LINENUM}49059, 'pick(Mary, IsStructure)',
    asoarrex([Jane, Mike]));

  Test({LINENUM}49062, 'pick(Mary, IsStructure, 1)',
    asoarrex([Jane, Mike]));

  Test({LINENUM}49065, 'pick(Mary, IsStructure, 2)',
    asoarrex([Name('Jane', 'Smith'), Name('Mike', 'Doe')]));

  Test({LINENUM}49068, 'pick(Mary, IsStructure, 2) @ member("first")',
    strarr(['Jane', 'Mike']));

  Test({LINENUM}49071, 'pick(Mary, IsStructure, 3)',
    asoarrex([]));

  Test({LINENUM}49074, 'pick(Mary, IsStructure, 0)',
    failure, 'A positive integer was expected as argument 3, but "0" was given.');

  Test({LINENUM}49077, 'pick(Mary, sin, 1)',
    failure, 'An object of type number was expected as argument 1, but an object of type structure was given.');

  Test({LINENUM}49080, 'pick(Mary, length, 1)',
    failure, 'The predicate was expected to return a boolean, but an object of type integer was returned.');

  Test({LINENUM}49083, 'Mary ≔ ''(Jane, Mike);', null);

  Test({LINENUM}49085, 'pick(Mary, IsStructure)',
    asoarrex([Jane, Mike]));

  Test({LINENUM}49088, 'pick(Mary, IsStructure, 1)',
    asoarrex([Jane, Mike]));

  Test({LINENUM}49091, 'pick(Mary, IsStructure, 2)',
    asoarrex([Name('Jane', 'Smith'), Name('Mike', 'Doe')]));

  Test({LINENUM}49094, 'pick(Mary, IsStructure, 2) @ member("first")',
    strarr(['Jane', 'Mike']));

  Test({LINENUM}49097, 'pick(Mary, IsStructure, 3)',
    asoarrex([]));

  Test({LINENUM}49100, 'L ≔ ''(123, ''(10, ''(1024, 256)), ''(20, ''(512, 2048)));', null);

  Test({LINENUM}49102, 'pick(L, IsInteger, 1)', intarr([123]));
  Test({LINENUM}49103, 'pick(L, IsInteger, 2)', intarr([10, 20]));
  Test({LINENUM}49104, 'pick(L, IsInteger, 3)', intarr([1024, 256, 512, 2048]));
  Test({LINENUM}49105, 'pick(L, IsInteger, 4)', intarr([]));

  // - recursive picking

  Test({LINENUM}49109, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}49110, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
  Test({LINENUM}49111, 'Mary ≔ struct("mother": Jane, "father": Mike);', null);

  Test({LINENUM}49113, 'PickRecursive(Mary, IsInteger)', intarr([40, 45]));
  Test({LINENUM}49114, 'PickRecursive(Mary, IsText)', strarr(['Jane', 'Smith', 'female', 'Mike', 'Doe', 'male']));

  Test({LINENUM}49116, 'PickRecursive(Mary, sin)', failure, 'An object of type number was expected as argument 1, but an object of type structure was given.');
  Test({LINENUM}49117, 'PickRecursive(Mary, type)', failure, 'The predicate was expected to return a boolean, but an object of type string was returned.');

  Test({LINENUM}49119, 'L ≔ ''(123, ''(10, ''(1024, 256)), ''(20, ''(512, 2048)));', null);

  Test({LINENUM}49121, 'PickRecursive(L, IsInteger)', intarr([123, 10, 1024, 256, 20, 512, 2048]));


  //
  // Application
  //

  Test({LINENUM}49128, 'v ≔ SequenceVector(10)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

  Test({LINENUM}49130, 'apply(v, sqr)', [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]);
  Test({LINENUM}49131, 'apply(v, inv)', [1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10]);

  Test({LINENUM}49133, 'apply(SequenceVector(10), sqr)', [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]);
  Test({LINENUM}49134, 'apply(DebugObject("empty vector"), sqr)', TAlgosimRealVector.Create);

  Test({LINENUM}49136, 'v @ sqr', [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]);
  Test({LINENUM}49137, 'v @ inv', [1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10]);

  Test({LINENUM}49139, 'v @ type', failure, 'Real number application function must return a real number.');
  {But:} Test({LINENUM}49140, 'ToList(v) @ type', strarr(['real number', 'real number', 'real number', 'real number', 'real number', 'real number', 'real number', 'real number', 'real number', 'real number']));

  Test({LINENUM}49142, 'A ≔ ❨❨1, 2, 3, 4, 5❩, ❨6, 7, 8, 9, 10❩❩', 5, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

  Test({LINENUM}49144, 'apply(A, sqr)', 5, [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]);
  Test({LINENUM}49145, 'apply(A, inv)', 5, [1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10]);

  Test({LINENUM}49147, 'apply(❨❨1, 2, 3, 4, 5❩, ❨6, 7, 8, 9, 10❩❩, sqr)', 5, [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]);
  Test({LINENUM}49148, 'apply(DebugObject("empty matrix"), sqr)', TAlgosimRealMatrix.Create);

  Test({LINENUM}49150, 'A @ sqr', 5, [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]);
  Test({LINENUM}49151, 'A @ inv', 5, [1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10]);

  Test({LINENUM}49153, 'A @ type', failure, 'Real number application function must return a real number.');

  Test({LINENUM}49155, 'v ≔ ❨1, −1, i, 1, 2, 3❩', [1, -1, ImaginaryUnit, 1, 2, 3]);

  Test({LINENUM}49157, 'apply(v, sqr)', [TASC(1), 1, -1, 1, 4, 9]);
  Test({LINENUM}49158, 'apply(v, inv)', [1, -1, -ImaginaryUnit, 1, 1/2, 1/3]);

  Test({LINENUM}49160, 'apply(❨1, −1, i, 1, 2, 3❩, sqr)', [TASC(1), 1, -1, 1, 4, 9]);
  Test({LINENUM}49161, 'apply(ComplexVector(DebugObject("empty vector")), sqr)', TAlgosimComplexVector.Create);

  Test({LINENUM}49163, 'v @ sqr', [TASC(1), 1, -1, 1, 4, 9]);
  Test({LINENUM}49164, 'v @ inv', [1, -1, -ImaginaryUnit, 1, 1/2, 1/3]);

  Test({LINENUM}49166, 'v @ type', failure, 'Complex number application function must return a complex number.');

  Test({LINENUM}49168, 'A ≔ ❨❨1, −1, i❩, ❨1, 2, 3❩❩', 3, [1, -1, ImaginaryUnit, 1, 2, 3]);

  Test({LINENUM}49170, 'apply(A, sqr)', 3, [TASC(1), 1, -1, 1, 4, 9]);
  Test({LINENUM}49171, 'apply(A, inv)', 3, [1, -1, -ImaginaryUnit, 1, 1/2, 1/3]);

  Test({LINENUM}49173, 'apply(❨❨1, −1, i❩, ❨1, 2, 3❩❩, sqr)', 3, [TASC(1), 1, -1, 1, 4, 9]);
  Test({LINENUM}49174, 'apply(ComplexMatrix(DebugObject("empty matrix")), sqr)', TAlgosimComplexMatrix.Create);

  Test({LINENUM}49176, 'A @ sqr', 3, [TASC(1), 1, -1, 1, 4, 9]);
  Test({LINENUM}49177, 'A @ inv', 3, [1, -1, -ImaginaryUnit, 1, 1/2, 1/3]);

  Test({LINENUM}49179, 'A @ type', failure, 'Complex number application function must return a complex number.');

  Test({LINENUM}49181, 's ≔ "Swimming across a voltage-gated ion channel"', 'Swimming across a voltage-gated ion channel');

  Test({LINENUM}49183, 'apply(s, UpperCase)', 'SWIMMING ACROSS A VOLTAGE-GATED ION CHANNEL');
  Test({LINENUM}49184, 's @ UpperCase', 'SWIMMING ACROSS A VOLTAGE-GATED ION CHANNEL');

  Test({LINENUM}49186, 'apply("Swimming across a voltage-gated ion channel", UpperCase)', 'SWIMMING ACROSS A VOLTAGE-GATED ION CHANNEL');
  Test({LINENUM}49187, '"Swimming across a voltage-gated ion channel" @ UpperCase', 'SWIMMING ACROSS A VOLTAGE-GATED ION CHANNEL');

  Test({LINENUM}49189, 'apply("", UpperCase)', '');
  Test({LINENUM}49190, '"" @ UpperCase', '');

  Test({LINENUM}49192, 's @ length', failure, 'Character application function must return a single character.');
  Test({LINENUM}49193, 's @ (s ↦ 2⋅s)', failure, 'Character application function must return a single character.');

  Test({LINENUM}49195, 'L ≔ SequenceList(10)', intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));

  Test({LINENUM}49197, 'apply(L, sqr)', intarr([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]));
  Test({LINENUM}49198, 'apply(L, inv)', asoarr([1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10]));

  Test({LINENUM}49200, 'apply(SequenceList(10), sqr)', intarr([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]));
  Test({LINENUM}49201, 'apply(''(), sqr)', intarr([]));

  Test({LINENUM}49203, 'L @ sqr', intarr([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]));
  Test({LINENUM}49204, 'L @ inv', asoarr([1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10]));

  Test({LINENUM}49206, 'S ≔ ToSet(SequenceList(10))', intset([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));

  Test({LINENUM}49208, 'apply(S, sqr)', intset([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]));
  Test({LINENUM}49209, 'apply(S, inv)', asoset([1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10]));

  Test({LINENUM}49211, 'apply(ToSet(SequenceList(10)), sqr)', intset([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]));
  Test({LINENUM}49212, 'apply({}, sqr)', intset([]));

  Test({LINENUM}49214, 'S @ sqr', intset([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]));
  Test({LINENUM}49215, 'S @ inv', asoset([1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10]));

  // With level specification

  Test({LINENUM}49219, 'L ≔ ''(''(1, 2, 3), ''(4, 5, 6));', null);

  Test({LINENUM}49221, 'apply(L, sqr, 2)', asoarrex([intarr([1, 4, 9]), intarr([16, 25, 36])]));

  Test({LINENUM}49223, 'apply(L, sqr, 1)', failure, 'An object of type numeric entity was expected as argument 1, but an object of type array was given.');
  Test({LINENUM}49224, 'apply(L, sqr, 3)', failure, 'Cannot apply function to elements in an object of type "integer".');

  // Conditional application

  Test({LINENUM}49228, 'v ≔ ❨3, 5, 4, −2, 1, 7, −2, 0, 5, 8, 1, 10, 11, 2❩;', null);

  Test({LINENUM}49230, 'ApplyIf(v, IsNonNegative, factorial)', [6, 120, 24, -2, 1, 5040, -2, 1, 120, 40320, 1, 3628800, 39916800, 2]);
  Test({LINENUM}49231, 'ApplyIf(v, IsZero, factorial)', [3, 5, 4, -2, 1, 7, -2, 1, 5, 8, 1, 10, 11, 2]);
  Test({LINENUM}49232, 'ApplyIf(v, odd, x ↦ 2⋅x)', [6, 10, 4, -2, 2, 14, -2, 0, 10, 8, 2, 10, 22, 2]);
  Test({LINENUM}49233, 'ApplyIf(v, IsPrime, NextPrime)', [5, 7, 4, -2, 1, 11, -2, 0, 7, 8, 1, 10, 13, 3]);

  Test({LINENUM}49235, 'ApplyIf(v, IsPrime, type)', failure, 'Real number application function must return a real number.');
  Test({LINENUM}49236, 'ApplyIf(v, IsNumber, factorial)', failure, 'A non-negative integer was expected as argument 1, but "-2" was given.');

  Test({LINENUM}49238, 'ApplyIf(❨3, 5, 4, −2, 1, 7, −2, 0, 5, 8, 1, 10, 11, 2❩, IsPrime, NextPrime)', [5, 7, 4, -2, 1, 11, -2, 0, 7, 8, 1, 10, 13, 3]);
  Test({LINENUM}49239, 'ApplyIf(DebugObject("empty vector"), IsPrime, NextPrime)', TAlgosimRealVector.Create);

  Test({LINENUM}49241, 'A ≔ ❨❨3, 5, 4, −2, 1, 7, −2❩, ❨0, 5, 8, 1, 10, 11, 2❩❩;', null);

  Test({LINENUM}49243, 'ApplyIf(A, IsNonNegative, factorial)', 7, [6, 120, 24, -2, 1, 5040, -2, 1, 120, 40320, 1, 3628800, 39916800, 2]);
  Test({LINENUM}49244, 'ApplyIf(A, IsZero, factorial)', 7, [3, 5, 4, -2, 1, 7, -2, 1, 5, 8, 1, 10, 11, 2]);
  Test({LINENUM}49245, 'ApplyIf(A, odd, x ↦ 2⋅x)', 7, [6, 10, 4, -2, 2, 14, -2, 0, 10, 8, 2, 10, 22, 2]);
  Test({LINENUM}49246, 'ApplyIf(A, IsPrime, NextPrime)', 7, [5, 7, 4, -2, 1, 11, -2, 0, 7, 8, 1, 10, 13, 3]);

  Test({LINENUM}49248, 'ApplyIf(A, IsPrime, type)', failure, 'Real number application function must return a real number.');
  Test({LINENUM}49249, 'ApplyIf(A, IsNumber, factorial)', failure, 'A non-negative integer was expected as argument 1, but "-2" was given.');

  Test({LINENUM}49251, 'ApplyIf(❨❨3, 5, 4, −2, 1, 7, −2❩, ❨0, 5, 8, 1, 10, 11, 2❩❩, IsPrime, NextPrime)', 7, [5, 7, 4, -2, 1, 11, -2, 0, 7, 8, 1, 10, 13, 3]);
  Test({LINENUM}49252, 'ApplyIf(DebugObject("empty matrix"), IsPrime, NextPrime)', TAlgosimRealMatrix.Create);

  Test({LINENUM}49254, 'v ≔ ❨5, 1.5, 0, −4, i, −i, 10, 1❩;', null);

  Test({LINENUM}49256, 'ApplyIf(v, IsNumber, sqr)', [25, 2.25, 0, 16, -1, -1, 100, TASC(1)]);
  Test({LINENUM}49257, 'ApplyIf(v, IsReal, sqr)', [25, 2.25, 0, 16, ImaginaryUnit, -ImaginaryUnit, 100, 1]);
  Test({LINENUM}49258, 'ApplyIf(v, IsComplex, sqr)', [5, 1.5, 0, -4, -1, -1, 10, TASC(1)]);
  Test({LINENUM}49259, 'ApplyIf(v, IsSound, sqr)', [5, 1.5, 0, -4, ImaginaryUnit, -ImaginaryUnit, 10, 1]);

  Test({LINENUM}49261, 'ApplyIf(❨5, 1.5, 0, −4, i, −i, 10, 1❩, IsReal, sqr)', [25, 2.25, 0, 16, ImaginaryUnit, -ImaginaryUnit, 100, 1]);
  Test({LINENUM}49262, 'ApplyIf(ComplexVector(DebugObject("empty vector")), IsReal, sqr)', TAlgosimComplexVector.Create);

  Test({LINENUM}49264, 'ApplyIf(v, IsComplex, type)', failure, 'Complex number application function must return a complex number.');
  Test({LINENUM}49265, 'ApplyIf(v, IsComplex, IsPositive)', failure, 'Cannot determine the sign of an object of type "complex number".');

  Test({LINENUM}49267, 'A ≔ ❨❨5, 1.5, 0, −4❩, ❨i, −i, 10, 1❩❩;', null);

  Test({LINENUM}49269, 'ApplyIf(A, IsNumber, sqr)', 4, [25, 2.25, 0, 16, -1, -1, 100, TASC(1)]);
  Test({LINENUM}49270, 'ApplyIf(A, IsReal, sqr)', 4, [25, 2.25, 0, 16, ImaginaryUnit, -ImaginaryUnit, 100, 1]);
  Test({LINENUM}49271, 'ApplyIf(A, IsComplex, sqr)', 4, [5, 1.5, 0, -4, -1, -1, 10, TASC(1)]);
  Test({LINENUM}49272, 'ApplyIf(A, IsSound, sqr)', 4, [5, 1.5, 0, -4, ImaginaryUnit, -ImaginaryUnit, 10, 1]);

  Test({LINENUM}49274, 'ApplyIf(❨❨5, 1.5, 0, −4❩, ❨i, −i, 10, 1❩❩, IsReal, sqr)', 4, [25, 2.25, 0, 16, ImaginaryUnit, -ImaginaryUnit, 100, 1]);
  Test({LINENUM}49275, 'ApplyIf(ComplexMatrix(DebugObject("empty matrix")), IsReal, sqr)', TAlgosimComplexMatrix.Create);

  Test({LINENUM}49277, 'ApplyIf(A, IsComplex, type)', failure, 'Complex number application function must return a complex number.');
  Test({LINENUM}49278, 'ApplyIf(A, IsComplex, IsPositive)', failure, 'Cannot determine the sign of an object of type "complex number".');

  Test({LINENUM}49280, 'ApplyIf("Hello, World!", ChrIsUpperCase, c ↦ chr(succ(ord(c))))', 'Iello, Xorld!');
  Test({LINENUM}49281, 'ApplyIf("", ChrIsUpperCase, c ↦ chr(succ(ord(c))))', '');
  Test({LINENUM}49282, 'ApplyIf("Hello, World!", ChrIsLetter, c ↦ chr(succ(ord(c))))', 'Ifmmp, Xpsme!');

  Test({LINENUM}49284, 'L ≔ ''(3, 5, 4, −2, 1, 7, −2, 0, 5, 8, 1, 10, 11, 2);', null);

  Test({LINENUM}49286, 'ApplyIf(L, IsNonNegative, factorial)', intarr([6, 120, 24, -2, 1, 5040, -2, 1, 120, 40320, 1, 3628800, 39916800, 2]));
  Test({LINENUM}49287, 'ApplyIf(L, IsZero, factorial)', intarr([3, 5, 4, -2, 1, 7, -2, 1, 5, 8, 1, 10, 11, 2]));
  Test({LINENUM}49288, 'ApplyIf(L, odd, x ↦ 2⋅x)', intarr([6, 10, 4, -2, 2, 14, -2, 0, 10, 8, 2, 10, 22, 2]));
  Test({LINENUM}49289, 'ApplyIf(L, IsPrime, NextPrime)', intarr([5, 7, 4, -2, 1, 11, -2, 0, 7, 8, 1, 10, 13, 3]));

  Test({LINENUM}49291, 'ApplyIf(L, IsPrime, type)', asoarr(['integer', 'integer', 4, -2, 1, 'integer', -2, 0, 'integer', 8, 1, 10, 'integer', 'integer']));
  Test({LINENUM}49292, 'ApplyIf(L, IsNumber, factorial)', failure, 'A non-negative integer was expected as argument 1, but "-2" was given.');

  Test({LINENUM}49294, 'ApplyIf(''(3, 5, 4, −2, 1, 7, −2, 0, 5, 8, 1, 10, 11, 2), IsPrime, NextPrime)', intarr([5, 7, 4, -2, 1, 11, -2, 0, 7, 8, 1, 10, 13, 3]));
  Test({LINENUM}49295, 'ApplyIf(''(), IsPrime, NextPrime)', intarr([]));

  Test({LINENUM}49297, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}49298, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
  Test({LINENUM}49299, 'Mary ≔ struct("mother": Jane, "father": Mike);', null);

  Test({LINENUM}49301, 'ApplyIf(Jane, IsInteger, succ)',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Jane', 'Smith'), ASO('female'), ASOInt(41)]
    )
  );

  // Conditional application with level specification

  Test({LINENUM}49310, 'L ≔ ''(''(1, 2, 3), ''(4, 5, 6));', null);

  Test({LINENUM}49312, 'ApplyIf(L, odd, x ↦ 2⋅x, 2)',
    asoarrex(
      [
        intarr([2, 2, 6]),
        intarr([4, 10, 6])
      ]
    )
  );

  Test({LINENUM}49321, 'ApplyIf(L, even, x ↦ x/2, 2)',
    asoarrex(
      [
        intarr([1, 1, 3]),
        intarr([2, 5, 3])
      ]
    )
  );


  //
  // Replacement
  //

  // Object-based replacement

  Test({LINENUM}49337, 'v ≔ ❨4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6❩;', null);

  Test({LINENUM}49339, 'ReplaceAll(v, 0, 10)', [4, 10, 2, 3, 5, 6, 8, 1, 2, 10, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49340, 'ReplaceAll(v, 2, 64)', [4, 0, 64, 3, 5, 6, 8, 1, 64, 0, 1, 64, 4, 3, 5, 6]);
  Test({LINENUM}49341, 'ReplaceAll(v, 100, 64)', [4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49342, 'ReplaceAll(v, "cat", 64)', [4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49343, 'ReplaceAll(v, "", 64)', [4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6]);

  Test({LINENUM}49345, 'ReplaceAll(v, 2, "cat")', failure, 'Object isn''t a real number.');

  Test({LINENUM}49347, 'ReplaceAll(❨4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6❩, 2, 64)', [4, 0, 64, 3, 5, 6, 8, 1, 64, 0, 1, 64, 4, 3, 5, 6]);
  Test({LINENUM}49348, 'ReplaceAll(DebugObject("empty vector"), 2, 64)', TAlgosimRealVector.Create);

  Test({LINENUM}49350, 'A ≔ ❨❨4, 0, 2, 3, 5, 6, 8, 1❩, ❨2, 0, 1, 2, 4, 3, 5, 6❩❩;', null);

  Test({LINENUM}49352, 'ReplaceAll(A, 0, 10)', 8, [4, 10, 2, 3, 5, 6, 8, 1, 2, 10, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49353, 'ReplaceAll(A, 2, 64)', 8, [4, 0, 64, 3, 5, 6, 8, 1, 64, 0, 1, 64, 4, 3, 5, 6]);
  Test({LINENUM}49354, 'ReplaceAll(A, 100, 64)', 8, [4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49355, 'ReplaceAll(A, "cat", 64)', 8, [4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49356, 'ReplaceAll(A, "", 64)', 8, [4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6]);

  Test({LINENUM}49358, 'ReplaceAll(A, 2, "cat")', failure, 'Object isn''t a real number.');

  Test({LINENUM}49360, 'ReplaceAll(❨❨4, 0, 2, 3, 5, 6, 8, 1❩, ❨2, 0, 1, 2, 4, 3, 5, 6❩❩, 2, 64)', 8, [4, 0, 64, 3, 5, 6, 8, 1, 64, 0, 1, 64, 4, 3, 5, 6]);
  Test({LINENUM}49361, 'ReplaceAll(DebugObject("empty matrix"), 2, 64)', TAlgosimRealMatrix.Create);

  Test({LINENUM}49363, 'v ≔ ❨4, 0, 2, 3, 5, 6, i, 1, 2, 0, 1, 2, 4, 3, 5, 6❩;', null);

  Test({LINENUM}49365, 'ReplaceAll(v, 0, 10)', [4, 10, 2, 3, 5, 6, ImaginaryUnit, 1, 2, 10, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49366, 'ReplaceAll(v, 2, 64)', [4, 0, 64, 3, 5, 6, ImaginaryUnit, 1, 64, 0, 1, 64, 4, 3, 5, 6]);
  Test({LINENUM}49367, 'ReplaceAll(v, 2, i)', [4, 0, ImaginaryUnit, 3, 5, 6, ImaginaryUnit, 1, ImaginaryUnit, 0, 1, ImaginaryUnit, 4, 3, 5, 6]);
  Test({LINENUM}49368, 'ReplaceAll(v, i, 5⋅i)', [4, 0, 2, 3, 5, 6, 5*ImaginaryUnit, 1, 2, 0, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49369, 'ReplaceAll(v, 100, 64)', [4, 0, 2, 3, 5, 6, ImaginaryUnit, 1, 2, 0, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49370, 'ReplaceAll(v, "cat", 64)', [4, 0, 2, 3, 5, 6, ImaginaryUnit, 1, 2, 0, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49371, 'ReplaceAll(v, "", 64)', [4, 0, 2, 3, 5, 6, ImaginaryUnit, 1, 2, 0, 1, 2, 4, 3, 5, 6]);

  Test({LINENUM}49373, 'ReplaceAll(v, 2, "cat")', failure, 'Object isn''t a complex number.');

  Test({LINENUM}49375, 'ReplaceAll(❨4, 0, 2, 3, 5, 6, i, 1, 2, 0, 1, 2, 4, 3, 5, 6❩, 2, 64)', [4, 0, 64, 3, 5, 6, ImaginaryUnit, 1, 64, 0, 1, 64, 4, 3, 5, 6]);
  Test({LINENUM}49376, 'ReplaceAll(ComplexVector(DebugObject("empty vector")), 2, 64)', TAlgosimComplexVector.Create);

  Test({LINENUM}49378, 'A ≔ ❨❨4, 0, 2, 3, 5, 6, i, 1❩, ❨2, 0, 1, 2, 4, 3, 5, 6❩❩;', null);

  Test({LINENUM}49380, 'ReplaceAll(A, 0, 10)', 8, [4, 10, 2, 3, 5, 6, ImaginaryUnit, 1, 2, 10, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49381, 'ReplaceAll(A, 2, 64)', 8, [4, 0, 64, 3, 5, 6, ImaginaryUnit, 1, 64, 0, 1, 64, 4, 3, 5, 6]);
  Test({LINENUM}49382, 'ReplaceAll(A, 2, i)', 8, [4, 0, ImaginaryUnit, 3, 5, 6, ImaginaryUnit, 1, ImaginaryUnit, 0, 1, ImaginaryUnit, 4, 3, 5, 6]);
  Test({LINENUM}49383, 'ReplaceAll(A, i, 5⋅i)', 8, [4, 0, 2, 3, 5, 6, 5*ImaginaryUnit, 1, 2, 0, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49384, 'ReplaceAll(A, 100, 64)', 8, [4, 0, 2, 3, 5, 6, ImaginaryUnit, 1, 2, 0, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49385, 'ReplaceAll(A, "cat", 64)', 8, [4, 0, 2, 3, 5, 6, ImaginaryUnit, 1, 2, 0, 1, 2, 4, 3, 5, 6]);
  Test({LINENUM}49386, 'ReplaceAll(A, "", 64)', 8, [4, 0, 2, 3, 5, 6, ImaginaryUnit, 1, 2, 0, 1, 2, 4, 3, 5, 6]);

  Test({LINENUM}49388, 'ReplaceAll(A, 2, "cat")', failure, 'Object isn''t a complex number.');

  Test({LINENUM}49390, 'ReplaceAll(❨❨4, 0, 2, 3, 5, 6, i, 1❩, ❨2, 0, 1, 2, 4, 3, 5, 6❩❩, 2, 64)', 8, [4, 0, 64, 3, 5, 6, ImaginaryUnit, 1, 64, 0, 1, 64, 4, 3, 5, 6]);
  Test({LINENUM}49391, 'ReplaceAll(ComplexMatrix(DebugObject("empty matrix")), 2, 64)', TAlgosimComplexMatrix.Create);

  Test({LINENUM}49393, 'ReplaceAll("a, b, c, d, e", ",", ";")', 'a; b; c; d; e');
  Test({LINENUM}49394, 'ReplaceAll("a, b, c, d, e", ";", "!")', 'a, b, c, d, e');
  Test({LINENUM}49395, 'ReplaceAll("a, b, c, d, e", IdentityMatrix(100), "!")', 'a, b, c, d, e');
  Test({LINENUM}49396, 'ReplaceAll("a, b, c, d, e", ",", IdentityMatrix(100))', failure, 'An object of type "real matrix" cannot be converted to a character.');
  Test({LINENUM}49397, 'ReplaceAll("a, b, c, d, e", ",", "<>")', failure, 'A string of length 2 cannot be converted to a character.');
  Test({LINENUM}49398, 'ReplaceAll("", ",", ";")', '');
  Test({LINENUM}49399, 'ReplaceAll("a, b, c, d, e", "a, b", "@")', 'a, b, c, d, e'); {cf. StringReplace}

  Test({LINENUM}49401, 'L ≔ ''(4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6);', null);

  Test({LINENUM}49403, 'ReplaceAll(L, 0, 10)', intarr([4, 10, 2, 3, 5, 6, 8, 1, 2, 10, 1, 2, 4, 3, 5, 6]));
  Test({LINENUM}49404, 'ReplaceAll(L, 2, 64)', intarr([4, 0, 64, 3, 5, 6, 8, 1, 64, 0, 1, 64, 4, 3, 5, 6]));
  Test({LINENUM}49405, 'ReplaceAll(L, 100, 64)', intarr([4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6]));
  Test({LINENUM}49406, 'ReplaceAll(L, "cat", 64)', intarr([4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6]));
  Test({LINENUM}49407, 'ReplaceAll(L, "", 64)', intarr([4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6]));

  Test({LINENUM}49409, 'ReplaceAll(L, 2, "cat")', asoarr([4, 0, 'cat', 3, 5, 6, 8, 1, 'cat', 0, 1, 'cat', 4, 3, 5, 6]));

  Test({LINENUM}49411, 'ReplaceAll(''(4, 0, 2, 3, 5, 6, 8, 1, 2, 0, 1, 2, 4, 3, 5, 6), 2, 64)', intarr([4, 0, 64, 3, 5, 6, 8, 1, 64, 0, 1, 64, 4, 3, 5, 6]));
  Test({LINENUM}49412, 'ReplaceAll(''(), 2, 64)', intarr([]));

  Test({LINENUM}49414, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}49415, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
  Test({LINENUM}49416, 'Mary ≔ struct("mother": Jane, "father": Mike);', null);

  Test({LINENUM}49418, 'ReplaceAll(Jane, 40, 5)',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Jane', 'Smith'), ASO('female'), ASOInt(5)]
    )
  );

  Test({LINENUM}49425, 'ReplaceAll(ToSet(v), 1, 22)', failure, 'Object type "set" is not a suitable container.');

  // - with level specification

  Test({LINENUM}49429, 'L ≔ ''(''(1, 2, 3), ''(4, 5, 6));', null);

  Test({LINENUM}49431, 'ReplaceAll(L, 1, 10)',
    asoarrex(
      [
        intarr([1, 2, 3]),
        intarr([4, 5, 6])
      ]
    )
  );

  Test({LINENUM}49440, 'ReplaceAll(L, 1, 10, 2)',
    asoarrex(
      [
        intarr([10, 2, 3]),
        intarr([4, 5, 6])
      ]
    )
  );

  // Predicate-based replacement

  Test({LINENUM}49451, 'v ≔ ❨6, 0, 3, −2, 1, −4, 2, 0, 7, 10, −4, 5, 3, 2, 2, 11❩;', null);

  Test({LINENUM}49453, 'ReplaceIf(v, IsNumber, 10)', [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]);
  Test({LINENUM}49454, 'ReplaceIf(v, IsPositive, 64)', [64, 0, 64, -2, 64, -4, 64, 0, 64, 64, -4, 64, 64, 64, 64, 64]);
  Test({LINENUM}49455, 'ReplaceIf(v, IsZero, 1.2)', [6, 1.2, 3, -2, 1, -4, 2, 1.2, 7, 10, -4, 5, 3, 2, 2, 11]);
  Test({LINENUM}49456, 'ReplaceIf(v, IsNegative, 1024)', [6, 0, 3, 1024, 1, 1024, 2, 0, 7, 10, 1024, 5, 3, 2, 2, 11]);
  Test({LINENUM}49457, 'ReplaceIf(v, odd, 3)', [6, 0, 3, -2, 3, -4, 2, 0, 3, 10, -4, 3, 3, 2, 2, 3]);
  Test({LINENUM}49458, 'ReplaceIf(v, even, 1)', [1, 1, 3, 1, 1, 1, 1, 1, 7, 1, 1, 5, 3, 1, 1, 11]);
  Test({LINENUM}49459, 'ReplaceIf(v, IsPrime, 1000)', [6, 0, 1000, -2, 1, -4, 1000, 0, 1000, 10, -4, 1000, 1000, 1000, 1000, 1000]);
  Test({LINENUM}49460, 'ReplaceIf(v, IsSound, 1000)', [6, 0, 3, -2, 1, -4, 2, 0, 7, 10, -4, 5, 3, 2, 2, 11]);
  Test({LINENUM}49461, 'ReplaceIf(v, x ↦ x ≥ 5, 5)', [5, 0, 3, -2, 1, -4, 2, 0, 5, 5, -4, 5, 3, 2, 2, 5]);
  Test({LINENUM}49462, 'ReplaceIf(v, x ↦ x ≥ 5, "cat")', failure, 'Object isn''t a real number.');
  Test({LINENUM}49463, 'ReplaceIf(v, x ↦ x! ≥ 5, 5)', failure, 'A non-negative integer was expected as argument 1, but "-2" was given.');

  Test({LINENUM}49465, 'ReplaceIf(❨6, 0, 3, −2, 1, −4, 2, 0, 7, 10, −4, 5, 3, 2, 2, 11❩, x ↦ x ≥ 5, 5)', [5, 0, 3, -2, 1, -4, 2, 0, 5, 5, -4, 5, 3, 2, 2, 5]);
  Test({LINENUM}49466, 'ReplaceIf(DebugObject("empty vector"), x ↦ x ≥ 5, 5)', TAlgosimRealVector.Create);

  Test({LINENUM}49468, 'A ≔ ❨❨6, 0, 3, −2, 1, −4, 2, 0❩, ❨7, 10, −4, 5, 3, 2, 2, 11❩❩;', null);

  Test({LINENUM}49470, 'ReplaceIf(A, IsNumber, 10)', 8, [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]);
  Test({LINENUM}49471, 'ReplaceIf(A, IsPositive, 64)', 8, [64, 0, 64, -2, 64, -4, 64, 0, 64, 64, -4, 64, 64, 64, 64, 64]);
  Test({LINENUM}49472, 'ReplaceIf(A, IsZero, 1.2)', 8, [6, 1.2, 3, -2, 1, -4, 2, 1.2, 7, 10, -4, 5, 3, 2, 2, 11]);
  Test({LINENUM}49473, 'ReplaceIf(A, IsNegative, 1024)', 8, [6, 0, 3, 1024, 1, 1024, 2, 0, 7, 10, 1024, 5, 3, 2, 2, 11]);
  Test({LINENUM}49474, 'ReplaceIf(A, odd, 3)', 8, [6, 0, 3, -2, 3, -4, 2, 0, 3, 10, -4, 3, 3, 2, 2, 3]);
  Test({LINENUM}49475, 'ReplaceIf(A, even, 1)', 8, [1, 1, 3, 1, 1, 1, 1, 1, 7, 1, 1, 5, 3, 1, 1, 11]);
  Test({LINENUM}49476, 'ReplaceIf(A, IsPrime, 1000)', 8, [6, 0, 1000, -2, 1, -4, 1000, 0, 1000, 10, -4, 1000, 1000, 1000, 1000, 1000]);
  Test({LINENUM}49477, 'ReplaceIf(A, IsSound, 1000)', 8, [6, 0, 3, -2, 1, -4, 2, 0, 7, 10, -4, 5, 3, 2, 2, 11]);
  Test({LINENUM}49478, 'ReplaceIf(A, x ↦ x ≥ 5, 5)', 8, [5, 0, 3, -2, 1, -4, 2, 0, 5, 5, -4, 5, 3, 2, 2, 5]);
  Test({LINENUM}49479, 'ReplaceIf(A, x ↦ x ≥ 5, "cat")', failure, 'Object isn''t a real number.');
  Test({LINENUM}49480, 'ReplaceIf(A, x ↦ x! ≥ 5, 5)', failure, 'A non-negative integer was expected as argument 1, but "-2" was given.');

  Test({LINENUM}49482, 'ReplaceIf(❨❨6, 0, 3, −2, 1, −4, 2, 0❩, ❨7, 10, −4, 5, 3, 2, 2, 11❩❩, x ↦ x ≥ 5, 5)', 8, [5, 0, 3, -2, 1, -4, 2, 0, 5, 5, -4, 5, 3, 2, 2, 5]);
  Test({LINENUM}49483, 'ReplaceIf(DebugObject("empty matrix"), x ↦ x ≥ 5, 5)', TAlgosimRealMatrix.Create);

  Test({LINENUM}49485, 'v ≔ ❨1, 0, i, −i, −1, 2, 1, 0.5❩;', null);

  Test({LINENUM}49487, 'ReplaceIf(v, IsNumber, 0)', [TASC(0), 0, 0, 0, 0, 0, 0, 0]);
  Test({LINENUM}49488, 'ReplaceIf(v, IsReal, 1)', [1, 1, ImaginaryUnit, -ImaginaryUnit, 1, 1, 1, 1]);
  Test({LINENUM}49489, 'ReplaceIf(v, IsInteger, 10)', [10, 10, ImaginaryUnit, -ImaginaryUnit, 10, 10, 10, 0.5]);
  Test({LINENUM}49490, 'ReplaceIf(v, x ↦ IsInteger(x) ∧ IsPrime(x), 1024)', [1, 0, ImaginaryUnit, -ImaginaryUnit, -1, 1024, 1, 0.5]);
  Test({LINENUM}49491, 'ReplaceIf(v, x ↦ IsInteger(x) ∧ odd(x), 12)', [12, 0, ImaginaryUnit, -ImaginaryUnit, 12, 2, 12, 0.5]);
  Test({LINENUM}49492, 'ReplaceIf(v, x ↦ IsInteger(x) ∧ even(x), 99)', [1, 99, ImaginaryUnit, -ImaginaryUnit, -1, 99, 1, 0.5]);
  Test({LINENUM}49493, 'ReplaceIf(v, IsSound, 12)', [1, 0, ImaginaryUnit, -ImaginaryUnit, -1, 2, 1, 0.5]);
  Test({LINENUM}49494, 'ReplaceIf(v, even, 99)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}49495, 'ReplaceIf(v, x ↦ IsInteger(x) ∧ IsPrime(x), "nargle")', failure, 'Object isn''t a complex number.');

  Test({LINENUM}49497, 'ReplaceIf(❨1, 0, i, −i, −1, 2, 1, 0.5❩, x ↦ IsInteger(x) ∧ IsPrime(x), 1024)', [1, 0, ImaginaryUnit, -ImaginaryUnit, -1, 1024, 1, 0.5]);
  Test({LINENUM}49498, 'ReplaceIf(ComplexVector(DebugObject("empty vector")), x ↦ IsInteger(x) ∧ IsPrime(x), 1024)', TAlgosimComplexVector.Create);

  Test({LINENUM}49500, 'A ≔ ❨❨1, 0, i, −i❩, ❨−1, 2, 1, 0.5❩❩;', null);

  Test({LINENUM}49502, 'ReplaceIf(A, IsNumber, 0)', 4, [TASC(0), 0, 0, 0, 0, 0, 0, 0]);
  Test({LINENUM}49503, 'ReplaceIf(A, IsReal, 1)', 4, [1, 1, ImaginaryUnit, -ImaginaryUnit, 1, 1, 1, 1]);
  Test({LINENUM}49504, 'ReplaceIf(A, IsInteger, 10)', 4, [10, 10, ImaginaryUnit, -ImaginaryUnit, 10, 10, 10, 0.5]);
  Test({LINENUM}49505, 'ReplaceIf(A, x ↦ IsInteger(x) ∧ IsPrime(x), 1024)', 4, [1, 0, ImaginaryUnit, -ImaginaryUnit, -1, 1024, 1, 0.5]);
  Test({LINENUM}49506, 'ReplaceIf(A, x ↦ IsInteger(x) ∧ odd(x), 12)', 4, [12, 0, ImaginaryUnit, -ImaginaryUnit, 12, 2, 12, 0.5]);
  Test({LINENUM}49507, 'ReplaceIf(A, x ↦ IsInteger(x) ∧ even(x), 99)', 4, [1, 99, ImaginaryUnit, -ImaginaryUnit, -1, 99, 1, 0.5]);
  Test({LINENUM}49508, 'ReplaceIf(A, IsSound, 12)', 4, [1, 0, ImaginaryUnit, -ImaginaryUnit, -1, 2, 1, 0.5]);
  Test({LINENUM}49509, 'ReplaceIf(A, even, 99)', failure, 'An object of type integer was expected as argument 1, but an object of type complex number was given.');
  Test({LINENUM}49510, 'ReplaceIf(A, x ↦ IsInteger(x) ∧ IsPrime(x), "nargle")', failure, 'Object isn''t a complex number.');

  Test({LINENUM}49512, 'ReplaceIf(❨❨1, 0, i, −i❩, ❨−1, 2, 1, 0.5❩❩, x ↦ IsInteger(x) ∧ IsPrime(x), 1024)', 4, [1, 0, ImaginaryUnit, -ImaginaryUnit, -1, 1024, 1, 0.5]);
  Test({LINENUM}49513, 'ReplaceIf(ComplexMatrix(DebugObject("empty matrix")), x ↦ IsInteger(x) ∧ IsPrime(x), 1024)', TAlgosimComplexMatrix.Create);

  Test({LINENUM}49515, 'ReplaceIf("Hello, World!", ChrIsUpperCase, "T")', 'Tello, Torld!');
  Test({LINENUM}49516, 'ReplaceIf("Hello, World!", ChrIsPunctuation, ".")', 'Hello. World.');
  Test({LINENUM}49517, 'ReplaceIf("Hello, World!", IsCharacter, "-")', '-------------');
  Test({LINENUM}49518, 'ReplaceIf("Hello, World!", IsPixmap, ".")', 'Hello, World!');
  Test({LINENUM}49519, 'ReplaceIf("", IsCharacter, "-")', '');
  Test({LINENUM}49520, 'ReplaceIf("Hello, World!", ChrIsUpperCase, IdentityMatrix(10))', failure, 'An object of type "real matrix" cannot be converted to a character.');
  Test({LINENUM}49521, 'ReplaceIf("Hello, World!", ChrIsUpperCase, "ABC")', failure, 'A string of length 3 cannot be converted to a character.');

  Test({LINENUM}49523, 'L ≔ ''(6, 0, 3, −2, 1, −4, 2, 0, 7, 10, −4, 5, 3, 2, 2, 11);', null);

  Test({LINENUM}49525, 'ReplaceIf(L, IsNumber, 10)', intarr([10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]));
  Test({LINENUM}49526, 'ReplaceIf(L, IsPositive, 64)', intarr([64, 0, 64, -2, 64, -4, 64, 0, 64, 64, -4, 64, 64, 64, 64, 64]));
  Test({LINENUM}49527, 'ReplaceIf(L, IsZero, 1.2)', asoarr([6, 1.2, 3, -2, 1, -4, 2, 1.2, 7, 10, -4, 5, 3, 2, 2, 11]));
  Test({LINENUM}49528, 'ReplaceIf(L, IsNegative, 1024)', intarr([6, 0, 3, 1024, 1, 1024, 2, 0, 7, 10, 1024, 5, 3, 2, 2, 11]));
  Test({LINENUM}49529, 'ReplaceIf(L, odd, 3)', intarr([6, 0, 3, -2, 3, -4, 2, 0, 3, 10, -4, 3, 3, 2, 2, 3]));
  Test({LINENUM}49530, 'ReplaceIf(L, even, 1)', intarr([1, 1, 3, 1, 1, 1, 1, 1, 7, 1, 1, 5, 3, 1, 1, 11]));
  Test({LINENUM}49531, 'ReplaceIf(L, IsPrime, 1000)', intarr([6, 0, 1000, -2, 1, -4, 1000, 0, 1000, 10, -4, 1000, 1000, 1000, 1000, 1000]));
  Test({LINENUM}49532, 'ReplaceIf(L, IsSound, 1000)', intarr([6, 0, 3, -2, 1, -4, 2, 0, 7, 10, -4, 5, 3, 2, 2, 11]));
  Test({LINENUM}49533, 'ReplaceIf(L, x ↦ x ≥ 5, 5)', intarr([5, 0, 3, -2, 1, -4, 2, 0, 5, 5, -4, 5, 3, 2, 2, 5]));
  Test({LINENUM}49534, 'ReplaceIf(L, x ↦ x ≥ 5, "cat")', asoarr(['cat', 0, 3, -2, 1, -4, 2, 0, 'cat', 'cat', -4, 'cat', 3, 2, 2, 'cat']));
  Test({LINENUM}49535, 'ReplaceIf(L, x ↦ x! ≥ 5, 5)', failure, 'A non-negative integer was expected as argument 1, but "-2" was given.');

  Test({LINENUM}49537, 'ReplaceIf(''(6, 0, 3, −2, 1, −4, 2, 0, 7, 10, −4, 5, 3, 2, 2, 11), x ↦ x ≥ 5, 5)', intarr([5, 0, 3, -2, 1, -4, 2, 0, 5, 5, -4, 5, 3, 2, 2, 5]));
  Test({LINENUM}49538, 'ReplaceIf(''(), x ↦ x ≥ 5, 5)', asoarr([]));

  Test({LINENUM}49540, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}49541, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
  Test({LINENUM}49542, 'Mary ≔ struct("mother": Jane, "father": Mike);', null);

  Test({LINENUM}49544, 'ReplaceIf(Jane, IsInteger, 50)',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [Name('Jane', 'Smith'), ASO('female'), ASOInt(50)]
    )
  );

  Test({LINENUM}49551, 'ReplaceIf(ToSet(v), IsReal, 22)', failure, 'Object type "set" is not a suitable container.');

  // - with level specification

  Test({LINENUM}49555, 'L ≔ ''(''(1, 2, 3), ''(4, 5, 6));', null);

  Test({LINENUM}49557, 'ReplaceIf(L, x ↦ IsInteger(x) ∧ odd(x), 1024)',
    asoarrex(
      [
        intarr([1, 2, 3]),
        intarr([4, 5, 6])
      ]
    )
  );

  Test({LINENUM}49566, 'ReplaceIf(L, x ↦ IsInteger(x) ∧ odd(x), 1024, 2)',
    asoarrex(
      [
        intarr([1024, 2, 1024]),
        intarr([4, 1024, 6])
      ]
    )
  );

  // Unconditional replacement

  Test({LINENUM}49577, 'v ≔ ❨3, 0, 2, −4, 7, 5, −1, 2, 1, 4, 5, 2, 6, 3, 4, 0❩;', null);
  Test({LINENUM}49578, 'ReplaceEvery(v, 5)', [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
  Test({LINENUM}49579, 'ReplaceEvery(❨3, 0, 2, −4, 7, 5, −1, 2, 1, 4, 5, 2, 6, 3, 4, 0❩, 5)', [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
  Test({LINENUM}49580, 'ReplaceEvery(DebugObject("empty vector"), 5)', TAlgosimRealVector.Create);
  Test({LINENUM}49581, 'ReplaceEvery(v, "cat")', failure, 'Object isn''t a real number.');

  Test({LINENUM}49583, 'A ≔ ❨❨3, 0, 2, −4, 7, 5, −1, 2❩, ❨1, 4, 5, 2, 6, 3, 4, 0❩❩;', null);
  Test({LINENUM}49584, 'ReplaceEvery(A, 5)', 8, [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
  Test({LINENUM}49585, 'ReplaceEvery(❨❨3, 0, 2, −4, 7, 5, −1, 2❩, ❨1, 4, 5, 2, 6, 3, 4, 0❩❩, 5)', 8, [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
  Test({LINENUM}49586, 'ReplaceEvery(DebugObject("empty matrix"), 5)', TAlgosimRealMatrix.Create);
  Test({LINENUM}49587, 'ReplaceEvery(A, "cat")', failure, 'Object isn''t a real number.');

  Test({LINENUM}49589, 'v ≔ ❨i, 0, 2, −4, 7, 5, −1, 2, 1, 4, 5, 2, 6, 3, 4, 0❩;', null);
  Test({LINENUM}49590, 'ReplaceEvery(v, 5)', [TASC(5), 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
  Test({LINENUM}49591, 'ReplaceEvery(❨i, 0, 2, −4, 7, 5, −1, 2, 1, 4, 5, 2, 6, 3, 4, 0❩, 5)', [TASC(5), 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
  Test({LINENUM}49592, 'ReplaceEvery(ComplexVector(DebugObject("empty vector")), 5)', TAlgosimComplexVector.Create);
  Test({LINENUM}49593, 'ReplaceEvery(v, "cat")', failure, 'Object isn''t a complex number.');

  Test({LINENUM}49595, 'A ≔ ❨❨i, 0, 2, −4, 7, 5, −1, 2❩, ❨1, 4, 5, 2, 6, 3, 4, 0❩❩;', null);
  Test({LINENUM}49596, 'ReplaceEvery(A, 5)', 8, [TASC(5), 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
  Test({LINENUM}49597, 'ReplaceEvery(❨❨i, 0, 2, −4, 7, 5, −1, 2❩, ❨1, 4, 5, 2, 6, 3, 4, 0❩❩, 5)', 8, [TASC(5), 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
  Test({LINENUM}49598, 'ReplaceEvery(ComplexMatrix(DebugObject("empty matrix")), 5)', TAlgosimComplexMatrix.Create);
  Test({LINENUM}49599, 'ReplaceEvery(A, "cat")', failure, 'Object isn''t a complex number.');

  Test({LINENUM}49601, 'ReplaceEvery("Hello, World!", "-")', '-------------');
  Test({LINENUM}49602, 'ReplaceEvery("", "-")', '');
  Test({LINENUM}49603, 'ReplaceEvery("Hello, World!", "--")', failure, 'A string of length 2 cannot be converted to a character.');
  Test({LINENUM}49604, 'ReplaceEvery("Hello, World!", 1024)', failure, 'An object of type "integer" cannot be converted to a character.');

  Test({LINENUM}49606, 'L ≔ ''(3, 0, 2, −4, 7, 5, −1, 2, 1, 4, 5, 2, 6, 3, 4, 0);', null);
  Test({LINENUM}49607, 'ReplaceEvery(L, 5)', intarr([5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}49608, 'ReplaceEvery(''(3, 0, 2, −4, 7, 5, −1, 2, 1, 4, 5, 2, 6, 3, 4, 0), 5)', intarr([5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]));
  Test({LINENUM}49609, 'ReplaceEvery(''(), 5)', intarr([]));
  Test({LINENUM}49610, 'ReplaceEvery(L, "cat")', strarr(['cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat']));

  Test({LINENUM}49612, 'ReplaceEvery(ToSet(L), "cat")', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}49614, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}49615, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
  Test({LINENUM}49616, 'Mary ≔ struct("mother": Jane, "father": Mike);', null);

  Test({LINENUM}49618, 'ReplaceEvery(Jane, 123)',
    TAlgosimStructure.CreateWithValue(
      ['name', 'sex', 'age'],
      [ASOInt(123), ASOInt(123), ASOInt(123)]
    )
  );

  // - with level specification

  Test({LINENUM}49627, 'L ≔ ''(''(1, 2, 3), ''(4, 5, 6));', null);

  Test({LINENUM}49629, 'ReplaceEvery(L, 5)',
    asoarrex(
      [
        ASOInt(5),
        ASOInt(5)
      ]
    )
  );

  Test({LINENUM}49638, 'ReplaceEvery(L, 5, 2)',
    asoarrex(
      [
        intarr([5, 5, 5]),
        intarr([5, 5, 5])
      ]
    )
  );


  //
  // Removal
  //

  // Object-based removal

  Test({LINENUM}49654, 'v ≔ ❨6, 2, 0, 4, 1, −2, 3, 6, 2, 1, 0, 2, 1, 4, 1, 0❩;', null);

  Test({LINENUM}49656, 'RemoveAll(v, 0)', [6, 2, 4, 1, -2, 3, 6, 2, 1, 2, 1, 4, 1]);
  Test({LINENUM}49657, 'RemoveAll(v, 1)', [6, 2, 0, 4, -2, 3, 6, 2, 0, 2, 4, 0]);
  Test({LINENUM}49658, 'RemoveAll(v, 2)', [6, 0, 4, 1, -2, 3, 6, 1, 0, 1, 4, 1, 0]);
  Test({LINENUM}49659, 'RemoveAll(v, 3)', [6, 2, 0, 4, 1, -2, 6, 2, 1, 0, 2, 1, 4, 1, 0]);
  Test({LINENUM}49660, 'RemoveAll(v, 4)', [6, 2, 0, 1, -2, 3, 6, 2, 1, 0, 2, 1, 1, 0]);
  Test({LINENUM}49661, 'RemoveAll(v, 5)', [6, 2, 0, 4, 1, -2, 3, 6, 2, 1, 0, 2, 1, 4, 1, 0]);
  Test({LINENUM}49662, 'RemoveAll(v, "cat")', [6, 2, 0, 4, 1, -2, 3, 6, 2, 1, 0, 2, 1, 4, 1, 0]);

  Test({LINENUM}49664, 'RemoveAll(❨6, 2, 0, 4, 1, −2, 3, 6, 2, 1, 0, 2, 1, 4, 1, 0❩, 2)', [6, 0, 4, 1, -2, 3, 6, 1, 0, 1, 4, 1, 0]);
  Test({LINENUM}49665, 'RemoveAll(DebugObject("empty vector"), 2)', TAlgosimRealVector.Create);

  Test({LINENUM}49667, 'A ≔ ❨❨6, 2, 0, 4, 1, −2, 3, 6❩, ❨2, 1, 0, 2, 1, 4, 1, 0❩❩;', null);
  Test({LINENUM}49668, 'RemoveAll(A, 0)', failure, 'Object type "real matrix" is not a suitable container.');

  Test({LINENUM}49670, 'v ≔ ❨3, 2, i, 1, 2, i, 0, −1, 1, −i, i, 2, 1, 3, 0, 1❩;', null);

  Test({LINENUM}49672, 'RemoveAll(v, 0)', [3, 2, ImaginaryUnit, 1, 2, ImaginaryUnit, -1, 1, -ImaginaryUnit, ImaginaryUnit, 2, 1, 3, 1]);
  Test({LINENUM}49673, 'RemoveAll(v, 1)', [3, 2, ImaginaryUnit, 2, ImaginaryUnit, 0, -1, -ImaginaryUnit, ImaginaryUnit, 2, 3, 0]);
  Test({LINENUM}49674, 'RemoveAll(v, 2)', [3, ImaginaryUnit, 1, ImaginaryUnit, 0, -1, 1, -ImaginaryUnit, ImaginaryUnit, 1, 3, 0, 1]);
  Test({LINENUM}49675, 'RemoveAll(v, 3)', [2, ImaginaryUnit, 1, 2, ImaginaryUnit, 0, -1, 1, -ImaginaryUnit, ImaginaryUnit, 2, 1, 0, 1]);
  Test({LINENUM}49676, 'RemoveAll(v, 4)', [3, 2, ImaginaryUnit, 1, 2, ImaginaryUnit, 0, -1, 1, -ImaginaryUnit, ImaginaryUnit, 2, 1, 3, 0, 1]);
  Test({LINENUM}49677, 'RemoveAll(v, i)', [3, 2, 1, 2, 0, -1, 1, -ImaginaryUnit, 2, 1, 3, 0, 1]);
  Test({LINENUM}49678, 'RemoveAll(v, "cat")', [3, 2, ImaginaryUnit, 1, 2, ImaginaryUnit, 0, -1, 1, -ImaginaryUnit, ImaginaryUnit, 2, 1, 3, 0, 1]);

  Test({LINENUM}49680, 'RemoveAll(❨3, 2, i, 1, 2, i, 0, −1, 1, −i, i, 2, 1, 3, 0, 1❩, i)', [3, 2, 1, 2, 0, -1, 1, -ImaginaryUnit, 2, 1, 3, 0, 1]);
  Test({LINENUM}49681, 'RemoveAll(ComplexVector(DebugObject("empty vector")), i)', TAlgosimComplexVector.Create);

  Test({LINENUM}49683, 'A ≔ ❨❨3, 2, i, 1, 2, i, 0, −1❩, ❨1, −i, i, 2, 1, 3, 0, 1❩❩;', null);
  Test({LINENUM}49684, 'RemoveAll(A, 0)', failure, 'Object type "complex matrix" is not a suitable container.');

  Test({LINENUM}49686, 'RemoveAll("Hello, World!", "l")', 'Heo, Word!');
  Test({LINENUM}49687, 'RemoveAll("Hello, World!", "Hello")', 'Hello, World!');
  Test({LINENUM}49688, 'RemoveAll("Hello, World!", IdentityMatrix(100))', 'Hello, World!');
  Test({LINENUM}49689, 'RemoveAll("", "l")', '');

  Test({LINENUM}49691, 'L ≔ ''(6, 2, 0, 4, 1, −2, 3, 6, 2, 1, 0, 2, 1, 4, 1, 0);', null);

  Test({LINENUM}49693, 'RemoveAll(L, 0)', intarr([6, 2, 4, 1, -2, 3, 6, 2, 1, 2, 1, 4, 1]));
  Test({LINENUM}49694, 'RemoveAll(L, 1)', intarr([6, 2, 0, 4, -2, 3, 6, 2, 0, 2, 4, 0]));
  Test({LINENUM}49695, 'RemoveAll(L, 2)', intarr([6, 0, 4, 1, -2, 3, 6, 1, 0, 1, 4, 1, 0]));
  Test({LINENUM}49696, 'RemoveAll(L, 3)', intarr([6, 2, 0, 4, 1, -2, 6, 2, 1, 0, 2, 1, 4, 1, 0]));
  Test({LINENUM}49697, 'RemoveAll(L, 4)', intarr([6, 2, 0, 1, -2, 3, 6, 2, 1, 0, 2, 1, 1, 0]));
  Test({LINENUM}49698, 'RemoveAll(L, 5)', intarr([6, 2, 0, 4, 1, -2, 3, 6, 2, 1, 0, 2, 1, 4, 1, 0]));
  Test({LINENUM}49699, 'RemoveAll(L, "cat")', intarr([6, 2, 0, 4, 1, -2, 3, 6, 2, 1, 0, 2, 1, 4, 1, 0]));

  Test({LINENUM}49701, 'RemoveAll(''(6, 2, 0, 4, 1, −2, 3, 6, 2, 1, 0, 2, 1, 4, 1, 0), 2)', intarr([6, 0, 4, 1, -2, 3, 6, 1, 0, 1, 4, 1, 0]));
  Test({LINENUM}49702, 'RemoveAll(''(), 2)', intarr([]));

  Test({LINENUM}49704, 'RemoveAll(ToSet(L), 0)', failure, 'Object type "set" is not a suitable container.'); // use the set minus operator instead

//  Test({LINENUM}49706, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
//  Test({LINENUM}49707, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
//  Test({LINENUM}49708, 'Mary ≔ struct("mother": Jane, "father": Mike);', null);

//  Test({LINENUM}49710, 'RemoveAll(Jane, 40)',
//    TAlgosimStructure.CreateWithValue(
//      ['name', 'sex'],
//      [Name('Jane', 'Smith'), ASO('female')]
//    )
//  ); // not implemented // TODO: Implement? If so, implement `remove(struct)` and this will come for free

  // - with level specification

  Test({LINENUM}49719, 'L ≔ ''(''(1, 2, 3), ''(4, 5, 6));', null);

  Test({LINENUM}49721, 'RemoveAll(L, 5)',
    asoarrex(
      [
        intarr([1, 2, 3]),
        intarr([4, 5, 6])
      ]
    )
  );

  Test({LINENUM}49730, 'RemoveAll(L, 5, 2)',
    asoarrex(
      [
        intarr([1, 2, 3]),
        intarr([4, 6])
      ]
    )
  );

  // Predicate-based removal

  Test({LINENUM}49741, 'v ≔ ❨2, −3, 1, 0, 4, 5, −6, 8, 9, 10, 11, −4, 7, 2, 1, 6❩;', null);

  Test({LINENUM}49743, 'RemoveIf(v, IsNumber)', TAlgosimRealVector.Create);
  Test({LINENUM}49744, 'RemoveIf(v, IsPositive)', [-3, 0, -6, -4]);
  Test({LINENUM}49745, 'RemoveIf(v, IsZero)', [2, -3, 1, 4, 5, -6, 8, 9, 10, 11, -4, 7, 2, 1, 6]);
  Test({LINENUM}49746, 'RemoveIf(v, IsNegative)', [2, 1, 0, 4, 5, 8, 9, 10, 11, 7, 2, 1, 6]);
  Test({LINENUM}49747, 'RemoveIf(v, odd)', [2, 0, 4, -6, 8, 10, -4, 2, 6]);
  Test({LINENUM}49748, 'RemoveIf(v, even)', [-3, 1, 5, 9, 11, 7, 1]);
  Test({LINENUM}49749, 'RemoveIf(v, IsPrime)', [-3, 1, 0, 4, -6, 8, 9, 10, -4, 1, 6]);
  Test({LINENUM}49750, 'RemoveIf(v, x ↦ x > 10)', [2, -3, 1, 0, 4, 5, -6, 8, 9, 10, -4, 7, 2, 1, 6]);
  Test({LINENUM}49751, 'RemoveIf(v, x ↦ x > 100)', [2, -3, 1, 0, 4, 5, -6, 8, 9, 10, 11, -4, 7, 2, 1, 6]);
  Test({LINENUM}49752, 'RemoveIf(v, x ↦ x! > 100)', failure, 'A non-negative integer was expected as argument 1, but "-3" was given.');
  Test({LINENUM}49753, 'RemoveIf(v, sin)', failure, 'The predicate was expected to return a boolean, but an object of type real number was returned.');

  Test({LINENUM}49755, 'RemoveIf(❨2, −3, 1, 0, 4, 5, −6, 8, 9, 10, 11, −4, 7, 2, 1, 6❩, IsNegative)', [2, 1, 0, 4, 5, 8, 9, 10, 11, 7, 2, 1, 6]);
  Test({LINENUM}49756, 'RemoveIf(DebugObject("empty vector"), IsNegative)', TAlgosimRealVector.Create);

  Test({LINENUM}49758, 'A ≔ ❨❨2, −3, 1, 0, 4, 5, −6, 8❩, ❨9, 10, 11, −4, 7, 2, 1, 6❩❩;', null);
  Test({LINENUM}49759, 'RemoveIf(A, IsNegative)', failure, 'Object type "real matrix" is not a suitable container.');

  Test({LINENUM}49761, 'v ≔ ❨5, 2.1, −4, 3, i, −i, 0, 3, 1, 5❩;', null);

  Test({LINENUM}49763, 'RemoveIf(v, IsNumber)', TAlgosimComplexVector.Create);
  Test({LINENUM}49764, 'RemoveIf(v, IsReal)', [ImaginaryUnit, -ImaginaryUnit]);
  Test({LINENUM}49765, 'RemoveIf(v, IsInteger)', [2.1, ImaginaryUnit, -ImaginaryUnit]);
  Test({LINENUM}49766, 'RemoveIf(v, IsSound)', [5, 2.1, -4, 3, ImaginaryUnit, -ImaginaryUnit, 0, 3, 1, 5]);
  Test({LINENUM}49767, 'RemoveIf(v, sin)', failure, 'The predicate was expected to return a boolean, but an object of type complex number was returned.');

  Test({LINENUM}49769, 'RemoveIf(❨5, 2.1, −4, 3, i, −i, 0, 3, 1, 5❩, IsInteger)', [2.1, ImaginaryUnit, -ImaginaryUnit]);
  Test({LINENUM}49770, 'RemoveIf(ComplexVector(DebugObject("empty vector")), IsInteger)', TAlgosimComplexVector.Create);

  Test({LINENUM}49772, 'A ≔ ❨❨5, 2.1, −4, 3, i❩, ❨−i, 0, 3, 1, 5❩❩;', null);
  Test({LINENUM}49773, 'RemoveIf(A, IsInteger)', failure, 'Object type "complex matrix" is not a suitable container.');

  Test({LINENUM}49775, 'RemoveIf("Hello, World!", ChrIsPunctuation)', 'Hello World');
  Test({LINENUM}49776, 'RemoveIf("Hello, World!", ChrIsControl)', 'Hello, World!');
  Test({LINENUM}49777, 'RemoveIf("Hello, World!", ChrIsASCII)', '');
  Test({LINENUM}49778, 'RemoveIf("", IsCharacter)', '');
  Test({LINENUM}49779, 'RemoveIf("Hello, World!", length)', failure, 'The predicate was expected to return a boolean, but an object of type integer was returned.');

  Test({LINENUM}49781, 'L ≔ ''(2, −3, 1, 0, 4, 5, −6, 8, 9, 10, 11, −4, 7, 2, 1, 6);', null);

  Test({LINENUM}49783, 'RemoveIf(L, IsNumber)', intarr([]));
  Test({LINENUM}49784, 'RemoveIf(L, IsPositive)', intarr([-3, 0, -6, -4]));
  Test({LINENUM}49785, 'RemoveIf(L, IsZero)', intarr([2, -3, 1, 4, 5, -6, 8, 9, 10, 11, -4, 7, 2, 1, 6]));
  Test({LINENUM}49786, 'RemoveIf(L, IsNegative)', intarr([2, 1, 0, 4, 5, 8, 9, 10, 11, 7, 2, 1, 6]));
  Test({LINENUM}49787, 'RemoveIf(L, odd)', intarr([2, 0, 4, -6, 8, 10, -4, 2, 6]));
  Test({LINENUM}49788, 'RemoveIf(L, even)', intarr([-3, 1, 5, 9, 11, 7, 1]));
  Test({LINENUM}49789, 'RemoveIf(L, IsPrime)', intarr([-3, 1, 0, 4, -6, 8, 9, 10, -4, 1, 6]));
  Test({LINENUM}49790, 'RemoveIf(L, x ↦ x > 10)', intarr([2, -3, 1, 0, 4, 5, -6, 8, 9, 10, -4, 7, 2, 1, 6]));
  Test({LINENUM}49791, 'RemoveIf(L, x ↦ x > 100)', intarr([2, -3, 1, 0, 4, 5, -6, 8, 9, 10, 11, -4, 7, 2, 1, 6]));
  Test({LINENUM}49792, 'RemoveIf(L, x ↦ x! > 100)', failure, 'A non-negative integer was expected as argument 1, but "-3" was given.');
  Test({LINENUM}49793, 'RemoveIf(L, sin)', failure, 'The predicate was expected to return a boolean, but an object of type real number was returned.');

  Test({LINENUM}49795, 'RemoveIf(''(2, −3, 1, 0, 4, 5, −6, 8, 9, 10, 11, −4, 7, 2, 1, 6), IsNegative)', intarr([2, 1, 0, 4, 5, 8, 9, 10, 11, 7, 2, 1, 6]));
  Test({LINENUM}49796, 'RemoveIf(''(), IsNegative)', intarr([]));

  Test({LINENUM}49798, 'S ≔ {2, −3, 1, 0, 4, 5, −6, 8, 9, 10, 11, −4, 7, 2, 1, 6};', null);

  Test({LINENUM}49800, 'RemoveIf(S, IsNumber)', intset([]));
  Test({LINENUM}49801, 'RemoveIf(S, IsPositive)', intset([-3, 0, -6, -4]));
  Test({LINENUM}49802, 'RemoveIf(S, IsZero)', intset([2, -3, 1, 4, 5, -6, 8, 9, 10, 11, -4, 7, 2, 1, 6]));
  Test({LINENUM}49803, 'RemoveIf(S, IsNegative)', intset([2, 1, 0, 4, 5, 8, 9, 10, 11, 7, 2, 1, 6]));
  Test({LINENUM}49804, 'RemoveIf(S, odd)', intset([2, 0, 4, -6, 8, 10, -4, 2, 6]));
  Test({LINENUM}49805, 'RemoveIf(S, even)', intset([-3, 1, 5, 9, 11, 7, 1]));
  Test({LINENUM}49806, 'RemoveIf(S, IsPrime)', intset([-3, 1, 0, 4, -6, 8, 9, 10, -4, 1, 6]));
  Test({LINENUM}49807, 'RemoveIf(S, x ↦ x > 10)', intset([2, -3, 1, 0, 4, 5, -6, 8, 9, 10, -4, 7, 2, 1, 6]));
  Test({LINENUM}49808, 'RemoveIf(S, x ↦ x > 100)', intset([2, -3, 1, 0, 4, 5, -6, 8, 9, 10, 11, -4, 7, 2, 1, 6]));
  Test({LINENUM}49809, 'RemoveIf(S, x ↦ x! > 100)', failure, 'A non-negative integer was expected as argument 1, but '); // don't know the order
  Test({LINENUM}49810, 'RemoveIf(S, sin)', failure, 'The predicate was expected to return a boolean, but an object of type real number was returned.');

  Test({LINENUM}49812, 'RemoveIf({2, −3, 1, 0, 4, 5, −6, 8, 9, 10, 11, −4, 7, 2, 1, 6}, IsNegative)', intset([2, 1, 0, 4, 5, 8, 9, 10, 11, 7, 2, 1, 6]));
  Test({LINENUM}49813, 'RemoveIf({}, IsNegative)', intset([]));

//  Test({LINENUM}49815, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
//  Test({LINENUM}49816, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
//  Test({LINENUM}49817, 'Mary ≔ struct("mother": Jane, "father": Mike);', null);

//  Test({LINENUM}49819, 'RemoveIf(Jane, IsInteger)',
//    TAlgosimStructure.CreateWithValue(
//      ['name', 'sex'],
//      [Name('Jane', 'Smith'), ASO('female')]
//    )
//  ); // not implemented // TODO: Implement? If so, implement `remove(struct)` and this will come for free

  // - with level specification

  Test({LINENUM}49828, 'L ≔ ''(''(1, 2, 3), ''(4, 5, 6));', null);

  Test({LINENUM}49830, 'RemoveIf(L, x ↦ IsInteger(x) ∧ odd(x))',
    asoarrex(
      [
        intarr([1, 2, 3]),
        intarr([4, 5, 6])
      ]
    )
  );

  Test({LINENUM}49839, 'RemoveIf(L, x ↦ IsInteger(x) ∧ odd(x), 2)',
    asoarrex(
      [
        intarr([2]),
        intarr([4, 6])
      ]
    )
  );


  //
  // Grouping and flattening
  //

  Test({LINENUM}49853, 'L ≔ ''(1, 2, 3, 4, 5, 6, 7, 8, 9);', null);

  Test({LINENUM}49855, 'group(L, 3)',
    asoarrex(
      [
        intarr([1, 2, 3]),
        intarr([4, 5, 6]),
        intarr([7, 8, 9])
      ]
    )
  );

  Test({LINENUM}49865, 'L ≔ ''(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);', null);

  Test({LINENUM}49867, 'group(L, 1)',
    asoarrex(
      [
        intarr([1]),
        intarr([2]),
        intarr([3]),
        intarr([4]),
        intarr([5]),
        intarr([6]),
        intarr([7]),
        intarr([8]),
        intarr([9]),
        intarr([10]),
        intarr([11]),
        intarr([12])
      ]
    )
  );

  Test({LINENUM}49886, 'group(L, 2)',
    asoarrex(
      [
        intarr([1, 2]),
        intarr([3, 4]),
        intarr([5, 6]),
        intarr([7, 8]),
        intarr([9, 10]),
        intarr([11, 12])
      ]
    )
  );

  Test({LINENUM}49899, 'group(L, 3)',
    asoarrex(
      [
        intarr([1, 2, 3]),
        intarr([4, 5, 6]),
        intarr([7, 8, 9]),
        intarr([10, 11, 12])
      ]
    )
  );

  Test({LINENUM}49910, 'group(L, 4)',
    asoarrex(
      [
        intarr([1, 2, 3, 4]),
        intarr([5, 6, 7, 8]),
        intarr([9, 10, 11, 12])
      ]
    )
  );

  Test({LINENUM}49920, 'group(L, 6)',
    asoarrex(
      [
        intarr([1, 2, 3, 4, 5, 6]),
        intarr([7, 8, 9, 10, 11, 12])
      ]
    )
  );

  Test({LINENUM}49929, 'group(L, 12)',
    asoarrex(
      [
        intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
      ]
    )
  );

  Test({LINENUM}49937, 'group(L, 5)',
    asoarrex(
      [
        intarr([1, 2, 3, 4, 5]),
        intarr([6, 7, 8, 9, 10]),
        intarrN([11, 12, -1, -1, -1])
      ]
    )
  );

  Test({LINENUM}49947, 'group(L, 7)',
    asoarrex(
      [
        intarr([1, 2, 3, 4, 5, 6, 7]),
        intarrN([8, 9, 10, 11, 12, -1, -1])
      ]
    )
  );

  Test({LINENUM}49956, 'group(L, 11)',
    asoarrex(
      [
        intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
        intarrN([12, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1])
      ]
    )
  );

  Test({LINENUM}49965, 'group(L, 13)',
    asoarrex(
      [
        intarrN([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1])
      ]
    )
  );

  Test({LINENUM}49973, 'group(L, 24)',
    asoarrex(
      [
        intarrN([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1])
      ]
    )
  );

  Test({LINENUM}49981, 'group(L, 0)', failure, 'A positive integer was expected as argument 2, but "0" was given.');
  Test({LINENUM}49982, 'group(L, -1)', failure, 'A positive integer was expected as argument 2, but "-1" was given.');

  Test({LINENUM}49984, 'L ≔ ''("alfa", 2, "beta", 3, "gamma", 4);', null);

  Test({LINENUM}49986, 'group(L, 2)',
    asoarrex(
      [
        asoarr(['alfa', 2]),
        asoarr(['beta', 3]),
        asoarr(['gamma', 4])
      ]
    )
  );

  Test({LINENUM}49996, 'flatten(''(''("alfa", 1), ''("beta", 2), ''("gamma", 3)))',
    asoarr(['alfa', 1, 'beta', 2, 'gamma', 3])
  );

  Test({LINENUM}50000, 'flatten(''(''(1, 2, 3), ''(4, 5, 6), ''(7, 8, 9), ''(10, 11, 12)))',
    asoarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
  );

  Test({LINENUM}50004, 'flatten(''(''("alfa", 1), ''("beta", 2), ''("gamma", 3, 4)))',
    asoarr(['alfa', 1, 'beta', 2, 'gamma', 3, 4])
  );

  Test({LINENUM}50008, 'flatten(''(''(1, 2, 3, 3.5), ''(4, 5, 6), ''(7, 8), ''(10, 11, 12)))',
    asoarr([1, 2, 3, 3.5, 4, 5, 6, 7, 8, 10, 11, 12])
  );

  Test({LINENUM}50012, 'flatten(''(1, ''(2, 3, ''(4, 5, ''(6, ''(7, ''(''(8))))))))',
    asoarr([1, 2, 3, 4, 5, 6, 7, 8])
  );

  Test({LINENUM}50016, 'flatten(''(''(1, 2), 3, ''(''(4)), 5, ''(''(6), 7)))',
    asoarr([1, 2, 3, 4, 5, 6, 7])
  );


  //
  // Labelling
  //

  Test({LINENUM}50025, 'label(''(1, 2, 3), ''("a", "b", "c"))',
    TAlgosimStructure.CreateWithValue(
      [
        sm('a', ASOInt(1)),
        sm('b', ASOInt(2)),
        sm('c', ASOInt(3))
      ]
    )
  );

  Test({LINENUM}50035, 'label(''(1, 2, 3), ''("a", "b", true))',
    failure,
    'The array must contain only objects of type string, but it contains an object of type boolean.'
  );

  Test({LINENUM}50040, 'label(''(1, 2, 3), ''("a", "b"))',
    failure,
    'The number of member names must equal the number of member values.'
  );

  Test({LINENUM}50045, 'label(''(1, 2, 3), ''("a", "b", "c", "d"))',
    failure,
    'The number of member names must equal the number of member values.'
  );

  Test({LINENUM}50050, 'label(''("Albus Dumbledore", 115, "headmaster"), ''("name", "age", "role"))',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('age', ASOInt(115)),
        sm('role', ASO('headmaster'))
      ]
    )
  );

  Test({LINENUM}50060, 'label(''("Albus Dumbledore"), ''("name"))',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore'))
      ]
    )
  );

  Test({LINENUM}50068, 'label(''(), ''())',
    TAlgosimStructure.CreateWithValue(
      [
      ]
    )
  );

  Test({LINENUM}50075, 'label(''(1, 2, 3), ''("a", "b", ""))',
    failure,
    'Invalid member name: ""'
  );

  Test({LINENUM}50080, 'label(''(1, 2, 3), ''("a", "b", "+"))',
    failure,
    'Invalid member name: "+"'
  );

  Test({LINENUM}50085, 'label(''(1, 2, 3), ''("a", "b", "+c"))',
    failure,
    'Invalid member name: "+c"'
  );

  Test({LINENUM}50090, 'label(''(1, 2, 3), ''("a", "b", " c"))',
    failure,
    'Invalid member name: " c"'
  );

  Test({LINENUM}50095, 'label(''(1, 2, 3), ''("a", "b", "1"))',
    failure,
    'Invalid member name: "1"'
  );

  Test({LINENUM}50100, 'label(''(1, 2, 3), ''("a", "b", "1c"))',
    failure,
    'Invalid member name: "1c"'
  );

  Test({LINENUM}50105, 'label(''(1, 2, 3), ''("a", "b", "c1"))',
    TAlgosimStructure.CreateWithValue(
      [
        sm('a', ASOInt(1)),
        sm('b', ASOInt(2)),
        sm('c1', ASOInt(3))
      ]
    )
  );

  Test({LINENUM}50115, 'delete(u); delete(v); delete(A); delete(B); delete(M); delete(s); delete(t); delete(L); delete(S); delete(name); delete(person); delete(Jane); delete(Mike); delete(Mary); delete(x); delete(N); delete(r)', success);


  //
  // Rotation
  //

  // Left

  Test({LINENUM}50124, 'RotLeft(❨1, 2, 3, 4, 5❩)', [2, 3, 4, 5, 1]);
  Test({LINENUM}50125, 'RotLeft(❨1, 2, 3❩)', [2, 3, 1]);
  Test({LINENUM}50126, 'RotLeft(❨1, 2❩)', [2, 1]);
  Test({LINENUM}50127, 'RotLeft(❨5❩)', [5]);
  Test({LINENUM}50128, 'RotLeft(DebugObject("empty vector"))', TAlgosimRealVector.Create);

  Test({LINENUM}50130, 'RotLeft(❨1, 2, 3, 4, 5❩, 1)', [2, 3, 4, 5, 1]);
  Test({LINENUM}50131, 'RotLeft(❨1, 2, 3❩, 1)', [2, 3, 1]);
  Test({LINENUM}50132, 'RotLeft(❨1, 2❩, 1)', [2, 1]);
  Test({LINENUM}50133, 'RotLeft(❨5❩, 1)', [5]);
  Test({LINENUM}50134, 'RotLeft(DebugObject("empty vector"), 1)', TAlgosimRealVector.Create);

  Test({LINENUM}50136, 'RotLeft(❨1, 2, 3, 4, 5❩, 2)', [3, 4, 5, 1, 2]);
  Test({LINENUM}50137, 'RotLeft(❨1, 2, 3❩, 2)', [3, 1, 2]);
  Test({LINENUM}50138, 'RotLeft(❨1, 2❩, 2)', [1, 2]);
  Test({LINENUM}50139, 'RotLeft(❨5❩, 2)', [5]);
  Test({LINENUM}50140, 'RotLeft(DebugObject("empty vector"), 2)', TAlgosimRealVector.Create);

  Test({LINENUM}50142, 'RotLeft(❨1, 2, 3, 4, 5❩, 3)', [4, 5, 1, 2, 3]);
  Test({LINENUM}50143, 'RotLeft(❨1, 2, 3❩, 3)', [1, 2, 3]);
  Test({LINENUM}50144, 'RotLeft(❨1, 2❩, 3)', [2, 1]);
  Test({LINENUM}50145, 'RotLeft(❨5❩, 3)', [5]);
  Test({LINENUM}50146, 'RotLeft(DebugObject("empty vector"), 3)', TAlgosimRealVector.Create);

  Test({LINENUM}50148, 'RotLeft(❨1, 2, 3, 4, 5❩, 4)', [5, 1, 2, 3, 4]);
  Test({LINENUM}50149, 'RotLeft(❨1, 2, 3❩, 4)', [2, 3, 1]);
  Test({LINENUM}50150, 'RotLeft(❨1, 2❩, 4)', [1, 2]);
  Test({LINENUM}50151, 'RotLeft(❨5❩, 4)', [5]);
  Test({LINENUM}50152, 'RotLeft(DebugObject("empty vector"), 4)', TAlgosimRealVector.Create);

  Test({LINENUM}50154, 'RotLeft(❨1, 2, 3, 4, 5❩, 5)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50155, 'RotLeft(❨1, 2, 3❩, 5)', [3, 1, 2]);
  Test({LINENUM}50156, 'RotLeft(❨1, 2❩, 5)', [2, 1]);
  Test({LINENUM}50157, 'RotLeft(❨5❩, 5)', [5]);
  Test({LINENUM}50158, 'RotLeft(DebugObject("empty vector"), 5)', TAlgosimRealVector.Create);

  Test({LINENUM}50160, 'RotLeft(❨1, 2, 3, 4, 5❩, 10)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50161, 'RotLeft(❨1, 2, 3, 4, 5❩, 11)', [2, 3, 4, 5, 1]);
  Test({LINENUM}50162, 'RotLeft(❨1, 2, 3, 4, 5❩, 12)', [3, 4, 5, 1, 2]);
  Test({LINENUM}50163, 'RotLeft(❨1, 2, 3, 4, 5❩, 100)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50164, 'RotLeft(❨1, 2, 3, 4, 5❩, 101)', [2, 3, 4, 5, 1]);
  Test({LINENUM}50165, 'RotLeft(❨1, 2, 3, 4, 5❩, 102)', [3, 4, 5, 1, 2]);

  Test({LINENUM}50167, 'RotLeft(❨1, 2, 3, 4, 5❩, 0)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50168, 'RotLeft(❨1, 2, 3❩, 0)', [1, 2, 3]);
  Test({LINENUM}50169, 'RotLeft(❨1, 2❩, 0)', [1, 2]);
  Test({LINENUM}50170, 'RotLeft(❨5❩, 0)', [5]);
  Test({LINENUM}50171, 'RotLeft(DebugObject("empty vector"), 0)', TAlgosimRealVector.Create);

  Test({LINENUM}50173, 'RotLeft(❨1, 2, 3, 4, 5❩, -1)', [5, 1, 2, 3, 4]);
  Test({LINENUM}50174, 'RotLeft(❨1, 2, 3❩, -1)', [3, 1, 2]);
  Test({LINENUM}50175, 'RotLeft(❨1, 2❩, -1)', [2, 1]);
  Test({LINENUM}50176, 'RotLeft(❨5❩, -1)', [5]);
  Test({LINENUM}50177, 'RotLeft(DebugObject("empty vector"), -1)', TAlgosimRealVector.Create);

  Test({LINENUM}50179, 'RotLeft(❨1, 2, 3, 4, 5❩, -2)', [4, 5, 1, 2, 3]);
  Test({LINENUM}50180, 'RotLeft(❨1, 2, 3❩, -2)', [2, 3, 1]);
  Test({LINENUM}50181, 'RotLeft(❨1, 2❩, -2)', [1, 2]);
  Test({LINENUM}50182, 'RotLeft(❨5❩, -2)', [5]);
  Test({LINENUM}50183, 'RotLeft(DebugObject("empty vector"), -2)', TAlgosimRealVector.Create);

  Test({LINENUM}50185, 'RotLeft(❨1, 2, 3, 4, 5❩, -3)', [3, 4, 5, 1, 2]);
  Test({LINENUM}50186, 'RotLeft(❨1, 2, 3❩, -3)', [1, 2, 3]);
  Test({LINENUM}50187, 'RotLeft(❨1, 2❩, -3)', [2, 1]);
  Test({LINENUM}50188, 'RotLeft(❨5❩, -3)', [5]);
  Test({LINENUM}50189, 'RotLeft(DebugObject("empty vector"), -3)', TAlgosimRealVector.Create);

  Test({LINENUM}50191, 'RotLeft(❨1, 2, 3, 4, 5❩, -4)', [2, 3, 4, 5, 1]);
  Test({LINENUM}50192, 'RotLeft(❨1, 2, 3❩, -4)', [3, 1, 2]);
  Test({LINENUM}50193, 'RotLeft(❨1, 2❩, -4)', [1, 2]);
  Test({LINENUM}50194, 'RotLeft(❨5❩, -4)', [5]);
  Test({LINENUM}50195, 'RotLeft(DebugObject("empty vector"), -4)', TAlgosimRealVector.Create);

  Test({LINENUM}50197, 'RotLeft(❨1, 2, 3, 4, 5❩, -5)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50198, 'RotLeft(❨1, 2, 3❩, -5)', [2, 3, 1]);
  Test({LINENUM}50199, 'RotLeft(❨1, 2❩, -5)', [2, 1]);
  Test({LINENUM}50200, 'RotLeft(❨5❩, -5)', [5]);
  Test({LINENUM}50201, 'RotLeft(DebugObject("empty vector"), -5)', TAlgosimRealVector.Create);

  Test({LINENUM}50203, 'RotLeft(❨1, 2, 3, 4, 5❩, -10)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50204, 'RotLeft(❨1, 2, 3, 4, 5❩, -11)', [5, 1, 2, 3, 4]);
  Test({LINENUM}50205, 'RotLeft(❨1, 2, 3, 4, 5❩, -12)', [4, 5, 1, 2, 3]);

  Test({LINENUM}50207, 'RotLeft(❨1, 2, 3, 4, 5❩, -100)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50208, 'RotLeft(❨1, 2, 3, 4, 5❩, -101)', [5, 1, 2, 3, 4]);
  Test({LINENUM}50209, 'RotLeft(❨1, 2, 3, 4, 5❩, -102)', [4, 5, 1, 2, 3]);

  Test({LINENUM}50211, 'RotLeft(❨i, 2, 3, 4, 5❩)', [2, 3, 4, 5, ImaginaryUnit]);
  Test({LINENUM}50212, 'RotLeft(❨i, 2, 3❩)', [2, 3, ImaginaryUnit]);
  Test({LINENUM}50213, 'RotLeft(❨i, 2❩)', [2, ImaginaryUnit]);
  Test({LINENUM}50214, 'RotLeft(❨i❩)', [ImaginaryUnit]);
  Test({LINENUM}50215, 'RotLeft(ComplexVector(DebugObject("empty vector")))', TAlgosimComplexVector.Create);

  Test({LINENUM}50217, 'RotLeft(❨i, 2, 3, 4, 5❩, 1)', [2, 3, 4, 5, ImaginaryUnit]);
  Test({LINENUM}50218, 'RotLeft(❨i, 2, 3❩, 1)', [2, 3, ImaginaryUnit]);
  Test({LINENUM}50219, 'RotLeft(❨i, 2❩, 1)', [2, ImaginaryUnit]);
  Test({LINENUM}50220, 'RotLeft(❨i❩, 1)', [ImaginaryUnit]);
  Test({LINENUM}50221, 'RotLeft(ComplexVector(DebugObject("empty vector")), 1)', TAlgosimComplexVector.Create);

  Test({LINENUM}50223, 'RotLeft(❨i, 2, 3, 4, 5❩, 2)', [3, 4, 5, ImaginaryUnit, 2]);
  Test({LINENUM}50224, 'RotLeft(❨i, 2, 3❩, 2)', [3, ImaginaryUnit, 2]);
  Test({LINENUM}50225, 'RotLeft(❨i, 2❩, 2)', [ImaginaryUnit, 2]);
  Test({LINENUM}50226, 'RotLeft(❨i❩, 2)', [ImaginaryUnit]);
  Test({LINENUM}50227, 'RotLeft(ComplexVector(DebugObject("empty vector")), 2)', TAlgosimComplexVector.Create);

  Test({LINENUM}50229, 'RotLeft(❨i, 2, 3, 4, 5❩, 3)', [4, 5, ImaginaryUnit, 2, 3]);
  Test({LINENUM}50230, 'RotLeft(❨i, 2, 3❩, 3)', [ImaginaryUnit, 2, 3]);
  Test({LINENUM}50231, 'RotLeft(❨i, 2❩, 3)', [2, ImaginaryUnit]);
  Test({LINENUM}50232, 'RotLeft(❨i❩, 3)', [ImaginaryUnit]);
  Test({LINENUM}50233, 'RotLeft(ComplexVector(DebugObject("empty vector")), 3)', TAlgosimComplexVector.Create);

  Test({LINENUM}50235, 'RotLeft(❨i, 2, 3, 4, 5❩, 4)', [5, ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}50236, 'RotLeft(❨i, 2, 3❩, 4)', [2, 3, ImaginaryUnit]);
  Test({LINENUM}50237, 'RotLeft(❨i, 2❩, 4)', [ImaginaryUnit, 2]);
  Test({LINENUM}50238, 'RotLeft(❨i❩, 4)', [ImaginaryUnit]);
  Test({LINENUM}50239, 'RotLeft(ComplexVector(DebugObject("empty vector")), 4)', TAlgosimComplexVector.Create);

  Test({LINENUM}50241, 'RotLeft(❨i, 2, 3, 4, 5❩, 5)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50242, 'RotLeft(❨i, 2, 3❩, 5)', [3, ImaginaryUnit, 2]);
  Test({LINENUM}50243, 'RotLeft(❨i, 2❩, 5)', [2, ImaginaryUnit]);
  Test({LINENUM}50244, 'RotLeft(❨i❩, 5)', [ImaginaryUnit]);
  Test({LINENUM}50245, 'RotLeft(ComplexVector(DebugObject("empty vector")), 5)', TAlgosimComplexVector.Create);

  Test({LINENUM}50247, 'RotLeft(❨i, 2, 3, 4, 5❩, 10)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50248, 'RotLeft(❨i, 2, 3, 4, 5❩, 11)', [2, 3, 4, 5, ImaginaryUnit]);
  Test({LINENUM}50249, 'RotLeft(❨i, 2, 3, 4, 5❩, 12)', [3, 4, 5, ImaginaryUnit, 2]);
  Test({LINENUM}50250, 'RotLeft(❨i, 2, 3, 4, 5❩, 100)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50251, 'RotLeft(❨i, 2, 3, 4, 5❩, 101)', [2, 3, 4, 5, ImaginaryUnit]);
  Test({LINENUM}50252, 'RotLeft(❨i, 2, 3, 4, 5❩, 102)', [3, 4, 5, ImaginaryUnit, 2]);

  Test({LINENUM}50254, 'RotLeft(❨i, 2, 3, 4, 5❩, 0)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50255, 'RotLeft(❨i, 2, 3❩, 0)', [ImaginaryUnit, 2, 3]);
  Test({LINENUM}50256, 'RotLeft(❨i, 2❩, 0)', [ImaginaryUnit, 2]);
  Test({LINENUM}50257, 'RotLeft(❨i❩, 0)', [ImaginaryUnit]);
  Test({LINENUM}50258, 'RotLeft(ComplexVector(DebugObject("empty vector")), 0)', TAlgosimComplexVector.Create);

  Test({LINENUM}50260, 'RotLeft(❨i, 2, 3, 4, 5❩, -1)', [5, ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}50261, 'RotLeft(❨i, 2, 3❩, -1)', [3, ImaginaryUnit, 2]);
  Test({LINENUM}50262, 'RotLeft(❨i, 2❩, -1)', [2, ImaginaryUnit]);
  Test({LINENUM}50263, 'RotLeft(❨i❩, -1)', [ImaginaryUnit]);
  Test({LINENUM}50264, 'RotLeft(ComplexVector(DebugObject("empty vector")), -1)', TAlgosimComplexVector.Create);

  Test({LINENUM}50266, 'RotLeft(❨i, 2, 3, 4, 5❩, -2)', [4, 5, ImaginaryUnit, 2, 3]);
  Test({LINENUM}50267, 'RotLeft(❨i, 2, 3❩, -2)', [2, 3, ImaginaryUnit]);
  Test({LINENUM}50268, 'RotLeft(❨i, 2❩, -2)', [ImaginaryUnit, 2]);
  Test({LINENUM}50269, 'RotLeft(❨i❩, -2)', [ImaginaryUnit]);
  Test({LINENUM}50270, 'RotLeft(ComplexVector(DebugObject("empty vector")), -2)', TAlgosimComplexVector.Create);

  Test({LINENUM}50272, 'RotLeft(❨i, 2, 3, 4, 5❩, -3)', [3, 4, 5, ImaginaryUnit, 2]);
  Test({LINENUM}50273, 'RotLeft(❨i, 2, 3❩, -3)', [ImaginaryUnit, 2, 3]);
  Test({LINENUM}50274, 'RotLeft(❨i, 2❩, -3)', [2, ImaginaryUnit]);
  Test({LINENUM}50275, 'RotLeft(❨i❩, -3)', [ImaginaryUnit]);
  Test({LINENUM}50276, 'RotLeft(ComplexVector(DebugObject("empty vector")), -3)', TAlgosimComplexVector.Create);

  Test({LINENUM}50278, 'RotLeft(❨i, 2, 3, 4, 5❩, -4)', [2, 3, 4, 5, ImaginaryUnit]);
  Test({LINENUM}50279, 'RotLeft(❨i, 2, 3❩, -4)', [3, ImaginaryUnit, 2]);
  Test({LINENUM}50280, 'RotLeft(❨i, 2❩, -4)', [ImaginaryUnit, 2]);
  Test({LINENUM}50281, 'RotLeft(❨i❩, -4)', [ImaginaryUnit]);
  Test({LINENUM}50282, 'RotLeft(ComplexVector(DebugObject("empty vector")), -4)', TAlgosimComplexVector.Create);

  Test({LINENUM}50284, 'RotLeft(❨i, 2, 3, 4, 5❩, -5)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50285, 'RotLeft(❨i, 2, 3❩, -5)', [2, 3, ImaginaryUnit]);
  Test({LINENUM}50286, 'RotLeft(❨i, 2❩, -5)', [2, ImaginaryUnit]);
  Test({LINENUM}50287, 'RotLeft(❨i❩, -5)', [ImaginaryUnit]);
  Test({LINENUM}50288, 'RotLeft(ComplexVector(DebugObject("empty vector")), -5)', TAlgosimComplexVector.Create);

  Test({LINENUM}50290, 'RotLeft(❨i, 2, 3, 4, 5❩, -10)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50291, 'RotLeft(❨i, 2, 3, 4, 5❩, -11)', [5, ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}50292, 'RotLeft(❨i, 2, 3, 4, 5❩, -12)', [4, 5, ImaginaryUnit, 2, 3]);

  Test({LINENUM}50294, 'RotLeft(❨i, 2, 3, 4, 5❩, -100)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50295, 'RotLeft(❨i, 2, 3, 4, 5❩, -101)', [5, ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}50296, 'RotLeft(❨i, 2, 3, 4, 5❩, -102)', [4, 5, ImaginaryUnit, 2, 3]);

  Test({LINENUM}50298, 'RotLeft("nargle")', 'arglen');
  Test({LINENUM}50299, 'RotLeft("nargle", 1)', 'arglen');
  Test({LINENUM}50300, 'RotLeft("nargle", 2)', 'rglena');
  Test({LINENUM}50301, 'RotLeft("nargle", 3)', 'glenar');
  Test({LINENUM}50302, 'RotLeft("nargle", 4)', 'lenarg');
  Test({LINENUM}50303, 'RotLeft("nargle", 5)', 'enargl');
  Test({LINENUM}50304, 'RotLeft("nargle", 6)', 'nargle');
  Test({LINENUM}50305, 'RotLeft("nargle", 7)', 'arglen');
  Test({LINENUM}50306, 'RotLeft("nargle", 8)', 'rglena');
  Test({LINENUM}50307, 'RotLeft("nargle", 9)', 'glenar');
  Test({LINENUM}50308, 'RotLeft("nargle", 10)', 'lenarg');
  Test({LINENUM}50309, 'RotLeft("nargle", 11)', 'enargl');
  Test({LINENUM}50310, 'RotLeft("nargle", 12)', 'nargle');

  Test({LINENUM}50312, 'RotLeft("nargle", 60)', 'nargle');
  Test({LINENUM}50313, 'RotLeft("nargle", 61)', 'arglen');
  Test({LINENUM}50314, 'RotLeft("nargle", 62)', 'rglena');
  Test({LINENUM}50315, 'RotLeft("nargle", 63)', 'glenar');
  Test({LINENUM}50316, 'RotLeft("nargle", 64)', 'lenarg');
  Test({LINENUM}50317, 'RotLeft("nargle", 65)', 'enargl');
  Test({LINENUM}50318, 'RotLeft("nargle", 66)', 'nargle');

  Test({LINENUM}50320, 'RotLeft("nargle", 0)', 'nargle');
  Test({LINENUM}50321, 'RotLeft("nargle", -1)', 'enargl');
  Test({LINENUM}50322, 'RotLeft("nargle", -2)', 'lenarg');
  Test({LINENUM}50323, 'RotLeft("nargle", -3)', 'glenar');
  Test({LINENUM}50324, 'RotLeft("nargle", -4)', 'rglena');
  Test({LINENUM}50325, 'RotLeft("nargle", -5)', 'arglen');
  Test({LINENUM}50326, 'RotLeft("nargle", -6)', 'nargle');
  Test({LINENUM}50327, 'RotLeft("nargle", -7)', 'enargl');
  Test({LINENUM}50328, 'RotLeft("nargle", -8)', 'lenarg');
  Test({LINENUM}50329, 'RotLeft("nargle", -9)', 'glenar');
  Test({LINENUM}50330, 'RotLeft("nargle", -10)', 'rglena');
  Test({LINENUM}50331, 'RotLeft("nargle", -11)', 'arglen');
  Test({LINENUM}50332, 'RotLeft("nargle", -12)', 'nargle');

  Test({LINENUM}50334, 'RotLeft("nargle", -60)', 'nargle');
  Test({LINENUM}50335, 'RotLeft("nargle", -61)', 'enargl');
  Test({LINENUM}50336, 'RotLeft("nargle", -62)', 'lenarg');
  Test({LINENUM}50337, 'RotLeft("nargle", -63)', 'glenar');
  Test({LINENUM}50338, 'RotLeft("nargle", -64)', 'rglena');
  Test({LINENUM}50339, 'RotLeft("nargle", -65)', 'arglen');
  Test({LINENUM}50340, 'RotLeft("nargle", -66)', 'nargle');

  Test({LINENUM}50342, 'RotLeft(''(1, 2, 3, 4, 5))', intarr([2, 3, 4, 5, 1]));
  Test({LINENUM}50343, 'RotLeft(''(1, 2, 3))', intarr([2, 3, 1]));
  Test({LINENUM}50344, 'RotLeft(''(1, 2))', intarr([2, 1]));
  Test({LINENUM}50345, 'RotLeft(''(5))', intarr([5]));
  Test({LINENUM}50346, 'RotLeft(''())', intarr([]));

  Test({LINENUM}50348, 'RotLeft(''(1, 2, 3, 4, 5), 1)', intarr([2, 3, 4, 5, 1]));
  Test({LINENUM}50349, 'RotLeft(''(1, 2, 3), 1)', intarr([2, 3, 1]));
  Test({LINENUM}50350, 'RotLeft(''(1, 2), 1)', intarr([2, 1]));
  Test({LINENUM}50351, 'RotLeft(''(5), 1)', intarr([5]));
  Test({LINENUM}50352, 'RotLeft(''(), 1)', intarr([]));

  Test({LINENUM}50354, 'RotLeft(''(1, 2, 3, 4, 5), 2)', intarr([3, 4, 5, 1, 2]));
  Test({LINENUM}50355, 'RotLeft(''(1, 2, 3), 2)', intarr([3, 1, 2]));
  Test({LINENUM}50356, 'RotLeft(''(1, 2), 2)', intarr([1, 2]));
  Test({LINENUM}50357, 'RotLeft(''(5), 2)', intarr([5]));
  Test({LINENUM}50358, 'RotLeft(''(), 2)', intarr([]));

  Test({LINENUM}50360, 'RotLeft(''(1, 2, 3, 4, 5), 3)', intarr([4, 5, 1, 2, 3]));
  Test({LINENUM}50361, 'RotLeft(''(1, 2, 3), 3)', intarr([1, 2, 3]));
  Test({LINENUM}50362, 'RotLeft(''(1, 2), 3)', intarr([2, 1]));
  Test({LINENUM}50363, 'RotLeft(''(5), 3)', intarr([5]));
  Test({LINENUM}50364, 'RotLeft(''(), 3)', intarr([]));

  Test({LINENUM}50366, 'RotLeft(''(1, 2, 3, 4, 5), 4)', intarr([5, 1, 2, 3, 4]));
  Test({LINENUM}50367, 'RotLeft(''(1, 2, 3), 4)', intarr([2, 3, 1]));
  Test({LINENUM}50368, 'RotLeft(''(1, 2), 4)', intarr([1, 2]));
  Test({LINENUM}50369, 'RotLeft(''(5), 4)', intarr([5]));
  Test({LINENUM}50370, 'RotLeft(''(), 4)', intarr([]));

  Test({LINENUM}50372, 'RotLeft(''(1, 2, 3, 4, 5), 5)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50373, 'RotLeft(''(1, 2, 3), 5)', intarr([3, 1, 2]));
  Test({LINENUM}50374, 'RotLeft(''(1, 2), 5)', intarr([2, 1]));
  Test({LINENUM}50375, 'RotLeft(''(5), 5)', intarr([5]));
  Test({LINENUM}50376, 'RotLeft(''(), 5)', intarr([]));

  Test({LINENUM}50378, 'RotLeft(''(1, 2, 3, 4, 5), 10)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50379, 'RotLeft(''(1, 2, 3, 4, 5), 11)', intarr([2, 3, 4, 5, 1]));
  Test({LINENUM}50380, 'RotLeft(''(1, 2, 3, 4, 5), 12)', intarr([3, 4, 5, 1, 2]));
  Test({LINENUM}50381, 'RotLeft(''(1, 2, 3, 4, 5), 100)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50382, 'RotLeft(''(1, 2, 3, 4, 5), 101)', intarr([2, 3, 4, 5, 1]));
  Test({LINENUM}50383, 'RotLeft(''(1, 2, 3, 4, 5), 102)', intarr([3, 4, 5, 1, 2]));

  Test({LINENUM}50385, 'RotLeft(''(1, 2, 3, 4, 5), 0)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50386, 'RotLeft(''(1, 2, 3), 0)', intarr([1, 2, 3]));
  Test({LINENUM}50387, 'RotLeft(''(1, 2), 0)', intarr([1, 2]));
  Test({LINENUM}50388, 'RotLeft(''(5), 0)', intarr([5]));
  Test({LINENUM}50389, 'RotLeft(''(), 0)', intarr([]));

  Test({LINENUM}50391, 'RotLeft(''(1, 2, 3, 4, 5), -1)', intarr([5, 1, 2, 3, 4]));
  Test({LINENUM}50392, 'RotLeft(''(1, 2, 3), -1)', intarr([3, 1, 2]));
  Test({LINENUM}50393, 'RotLeft(''(1, 2), -1)', intarr([2, 1]));
  Test({LINENUM}50394, 'RotLeft(''(5), -1)', intarr([5]));
  Test({LINENUM}50395, 'RotLeft(''(), -1)', intarr([]));

  Test({LINENUM}50397, 'RotLeft(''(1, 2, 3, 4, 5), -2)', intarr([4, 5, 1, 2, 3]));
  Test({LINENUM}50398, 'RotLeft(''(1, 2, 3), -2)', intarr([2, 3, 1]));
  Test({LINENUM}50399, 'RotLeft(''(1, 2), -2)', intarr([1, 2]));
  Test({LINENUM}50400, 'RotLeft(''(5), -2)', intarr([5]));
  Test({LINENUM}50401, 'RotLeft(''(), -2)', intarr([]));

  Test({LINENUM}50403, 'RotLeft(''(1, 2, 3, 4, 5), -3)', intarr([3, 4, 5, 1, 2]));
  Test({LINENUM}50404, 'RotLeft(''(1, 2, 3), -3)', intarr([1, 2, 3]));
  Test({LINENUM}50405, 'RotLeft(''(1, 2), -3)', intarr([2, 1]));
  Test({LINENUM}50406, 'RotLeft(''(5), -3)', intarr([5]));
  Test({LINENUM}50407, 'RotLeft(''(), -3)', intarr([]));

  Test({LINENUM}50409, 'RotLeft(''(1, 2, 3, 4, 5), -4)', intarr([2, 3, 4, 5, 1]));
  Test({LINENUM}50410, 'RotLeft(''(1, 2, 3), -4)', intarr([3, 1, 2]));
  Test({LINENUM}50411, 'RotLeft(''(1, 2), -4)', intarr([1, 2]));
  Test({LINENUM}50412, 'RotLeft(''(5), -4)', intarr([5]));
  Test({LINENUM}50413, 'RotLeft(''(), -4)', intarr([]));

  Test({LINENUM}50415, 'RotLeft(''(1, 2, 3, 4, 5), -5)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50416, 'RotLeft(''(1, 2, 3), -5)', intarr([2, 3, 1]));
  Test({LINENUM}50417, 'RotLeft(''(1, 2), -5)', intarr([2, 1]));
  Test({LINENUM}50418, 'RotLeft(''(5), -5)', intarr([5]));
  Test({LINENUM}50419, 'RotLeft(''(), -5)', intarr([]));

  Test({LINENUM}50421, 'RotLeft(''(1, 2, 3, 4, 5), -10)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50422, 'RotLeft(''(1, 2, 3, 4, 5), -11)', intarr([5, 1, 2, 3, 4]));
  Test({LINENUM}50423, 'RotLeft(''(1, 2, 3, 4, 5), -12)', intarr([4, 5, 1, 2, 3]));

  Test({LINENUM}50425, 'RotLeft(''(1, 2, 3, 4, 5), -100)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50426, 'RotLeft(''(1, 2, 3, 4, 5), -101)', intarr([5, 1, 2, 3, 4]));
  Test({LINENUM}50427, 'RotLeft(''(1, 2, 3, 4, 5), -102)', intarr([4, 5, 1, 2, 3]));

  // Right

  Test({LINENUM}50431, 'RotRight(❨1, 2, 3, 4, 5❩)', [5, 1, 2, 3, 4]);
  Test({LINENUM}50432, 'RotRight(❨1, 2, 3❩)', [3, 1, 2]);
  Test({LINENUM}50433, 'RotRight(❨1, 2❩)', [2, 1]);
  Test({LINENUM}50434, 'RotRight(❨5❩)', [5]);
  Test({LINENUM}50435, 'RotRight(DebugObject("empty vector"))', TAlgosimRealVector.Create);

  Test({LINENUM}50437, 'RotRight(❨1, 2, 3, 4, 5❩, -01)', [2, 3, 4, 5, 1]);
  Test({LINENUM}50438, 'RotRight(❨1, 2, 3❩, -01)', [2, 3, 1]);
  Test({LINENUM}50439, 'RotRight(❨1, 2❩, -01)', [2, 1]);
  Test({LINENUM}50440, 'RotRight(❨5❩, -01)', [5]);
  Test({LINENUM}50441, 'RotRight(DebugObject("empty vector"), -01)', TAlgosimRealVector.Create);

  Test({LINENUM}50443, 'RotRight(❨1, 2, 3, 4, 5❩, -02)', [3, 4, 5, 1, 2]);
  Test({LINENUM}50444, 'RotRight(❨1, 2, 3❩, -02)', [3, 1, 2]);
  Test({LINENUM}50445, 'RotRight(❨1, 2❩, -02)', [1, 2]);
  Test({LINENUM}50446, 'RotRight(❨5❩, -02)', [5]);
  Test({LINENUM}50447, 'RotRight(DebugObject("empty vector"), -02)', TAlgosimRealVector.Create);

  Test({LINENUM}50449, 'RotRight(❨1, 2, 3, 4, 5❩, -03)', [4, 5, 1, 2, 3]);
  Test({LINENUM}50450, 'RotRight(❨1, 2, 3❩, -03)', [1, 2, 3]);
  Test({LINENUM}50451, 'RotRight(❨1, 2❩, -03)', [2, 1]);
  Test({LINENUM}50452, 'RotRight(❨5❩, -03)', [5]);
  Test({LINENUM}50453, 'RotRight(DebugObject("empty vector"), -03)', TAlgosimRealVector.Create);

  Test({LINENUM}50455, 'RotRight(❨1, 2, 3, 4, 5❩, -04)', [5, 1, 2, 3, 4]);
  Test({LINENUM}50456, 'RotRight(❨1, 2, 3❩, -04)', [2, 3, 1]);
  Test({LINENUM}50457, 'RotRight(❨1, 2❩, -04)', [1, 2]);
  Test({LINENUM}50458, 'RotRight(❨5❩, -04)', [5]);
  Test({LINENUM}50459, 'RotRight(DebugObject("empty vector"), -04)', TAlgosimRealVector.Create);

  Test({LINENUM}50461, 'RotRight(❨1, 2, 3, 4, 5❩, -05)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50462, 'RotRight(❨1, 2, 3❩, -05)', [3, 1, 2]);
  Test({LINENUM}50463, 'RotRight(❨1, 2❩, -05)', [2, 1]);
  Test({LINENUM}50464, 'RotRight(❨5❩, -05)', [5]);
  Test({LINENUM}50465, 'RotRight(DebugObject("empty vector"), -05)', TAlgosimRealVector.Create);

  Test({LINENUM}50467, 'RotRight(❨1, 2, 3, 4, 5❩, -010)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50468, 'RotRight(❨1, 2, 3, 4, 5❩, -011)', [2, 3, 4, 5, 1]);
  Test({LINENUM}50469, 'RotRight(❨1, 2, 3, 4, 5❩, -012)', [3, 4, 5, 1, 2]);
  Test({LINENUM}50470, 'RotRight(❨1, 2, 3, 4, 5❩, -0100)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50471, 'RotRight(❨1, 2, 3, 4, 5❩, -0101)', [2, 3, 4, 5, 1]);
  Test({LINENUM}50472, 'RotRight(❨1, 2, 3, 4, 5❩, -0102)', [3, 4, 5, 1, 2]);

  Test({LINENUM}50474, 'RotRight(❨1, 2, 3, 4, 5❩, 0)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50475, 'RotRight(❨1, 2, 3❩, 0)', [1, 2, 3]);
  Test({LINENUM}50476, 'RotRight(❨1, 2❩, 0)', [1, 2]);
  Test({LINENUM}50477, 'RotRight(❨5❩, 0)', [5]);
  Test({LINENUM}50478, 'RotRight(DebugObject("empty vector"), 0)', TAlgosimRealVector.Create);

  Test({LINENUM}50480, 'RotRight(❨1, 2, 3, 4, 5❩, 01)', [5, 1, 2, 3, 4]);
  Test({LINENUM}50481, 'RotRight(❨1, 2, 3❩, 01)', [3, 1, 2]);
  Test({LINENUM}50482, 'RotRight(❨1, 2❩, 01)', [2, 1]);
  Test({LINENUM}50483, 'RotRight(❨5❩, 01)', [5]);
  Test({LINENUM}50484, 'RotRight(DebugObject("empty vector"), 01)', TAlgosimRealVector.Create);

  Test({LINENUM}50486, 'RotRight(❨1, 2, 3, 4, 5❩, 02)', [4, 5, 1, 2, 3]);
  Test({LINENUM}50487, 'RotRight(❨1, 2, 3❩, 02)', [2, 3, 1]);
  Test({LINENUM}50488, 'RotRight(❨1, 2❩, 02)', [1, 2]);
  Test({LINENUM}50489, 'RotRight(❨5❩, 02)', [5]);
  Test({LINENUM}50490, 'RotRight(DebugObject("empty vector"), 02)', TAlgosimRealVector.Create);

  Test({LINENUM}50492, 'RotRight(❨1, 2, 3, 4, 5❩, 03)', [3, 4, 5, 1, 2]);
  Test({LINENUM}50493, 'RotRight(❨1, 2, 3❩, 03)', [1, 2, 3]);
  Test({LINENUM}50494, 'RotRight(❨1, 2❩, 03)', [2, 1]);
  Test({LINENUM}50495, 'RotRight(❨5❩, 03)', [5]);
  Test({LINENUM}50496, 'RotRight(DebugObject("empty vector"), 03)', TAlgosimRealVector.Create);

  Test({LINENUM}50498, 'RotRight(❨1, 2, 3, 4, 5❩, 04)', [2, 3, 4, 5, 1]);
  Test({LINENUM}50499, 'RotRight(❨1, 2, 3❩, 04)', [3, 1, 2]);
  Test({LINENUM}50500, 'RotRight(❨1, 2❩, 04)', [1, 2]);
  Test({LINENUM}50501, 'RotRight(❨5❩, 04)', [5]);
  Test({LINENUM}50502, 'RotRight(DebugObject("empty vector"), 04)', TAlgosimRealVector.Create);

  Test({LINENUM}50504, 'RotRight(❨1, 2, 3, 4, 5❩, 05)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50505, 'RotRight(❨1, 2, 3❩, 05)', [2, 3, 1]);
  Test({LINENUM}50506, 'RotRight(❨1, 2❩, 05)', [2, 1]);
  Test({LINENUM}50507, 'RotRight(❨5❩, 05)', [5]);
  Test({LINENUM}50508, 'RotRight(DebugObject("empty vector"), 05)', TAlgosimRealVector.Create);

  Test({LINENUM}50510, 'RotRight(❨1, 2, 3, 4, 5❩, 010)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50511, 'RotRight(❨1, 2, 3, 4, 5❩, 011)', [5, 1, 2, 3, 4]);
  Test({LINENUM}50512, 'RotRight(❨1, 2, 3, 4, 5❩, 012)', [4, 5, 1, 2, 3]);

  Test({LINENUM}50514, 'RotRight(❨1, 2, 3, 4, 5❩, 0100)', [1, 2, 3, 4, 5]);
  Test({LINENUM}50515, 'RotRight(❨1, 2, 3, 4, 5❩, 0101)', [5, 1, 2, 3, 4]);
  Test({LINENUM}50516, 'RotRight(❨1, 2, 3, 4, 5❩, 0102)', [4, 5, 1, 2, 3]);

  Test({LINENUM}50518, 'RotRight(❨i, 2, 3, 4, 5❩)', [5, ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}50519, 'RotRight(❨i, 2, 3❩)', [3, ImaginaryUnit, 2]);
  Test({LINENUM}50520, 'RotRight(❨i, 2❩)', [2, ImaginaryUnit]);
  Test({LINENUM}50521, 'RotRight(❨i❩)', [ImaginaryUnit]);
  Test({LINENUM}50522, 'RotRight(ComplexVector(DebugObject("empty vector")))', TAlgosimComplexVector.Create);

  Test({LINENUM}50524, 'RotRight(❨i, 2, 3, 4, 5❩, -01)', [2, 3, 4, 5, ImaginaryUnit]);
  Test({LINENUM}50525, 'RotRight(❨i, 2, 3❩, -01)', [2, 3, ImaginaryUnit]);
  Test({LINENUM}50526, 'RotRight(❨i, 2❩, -01)', [2, ImaginaryUnit]);
  Test({LINENUM}50527, 'RotRight(❨i❩, -01)', [ImaginaryUnit]);
  Test({LINENUM}50528, 'RotRight(ComplexVector(DebugObject("empty vector")), 1)', TAlgosimComplexVector.Create);

  Test({LINENUM}50530, 'RotRight(❨i, 2, 3, 4, 5❩, -02)', [3, 4, 5, ImaginaryUnit, 2]);
  Test({LINENUM}50531, 'RotRight(❨i, 2, 3❩, -02)', [3, ImaginaryUnit, 2]);
  Test({LINENUM}50532, 'RotRight(❨i, 2❩, -02)', [ImaginaryUnit, 2]);
  Test({LINENUM}50533, 'RotRight(❨i❩, -02)', [ImaginaryUnit]);
  Test({LINENUM}50534, 'RotRight(ComplexVector(DebugObject("empty vector")), 2)', TAlgosimComplexVector.Create);

  Test({LINENUM}50536, 'RotRight(❨i, 2, 3, 4, 5❩, -03)', [4, 5, ImaginaryUnit, 2, 3]);
  Test({LINENUM}50537, 'RotRight(❨i, 2, 3❩, -03)', [ImaginaryUnit, 2, 3]);
  Test({LINENUM}50538, 'RotRight(❨i, 2❩, -03)', [2, ImaginaryUnit]);
  Test({LINENUM}50539, 'RotRight(❨i❩, -03)', [ImaginaryUnit]);
  Test({LINENUM}50540, 'RotRight(ComplexVector(DebugObject("empty vector")), 3)', TAlgosimComplexVector.Create);

  Test({LINENUM}50542, 'RotRight(❨i, 2, 3, 4, 5❩, -04)', [5, ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}50543, 'RotRight(❨i, 2, 3❩, -04)', [2, 3, ImaginaryUnit]);
  Test({LINENUM}50544, 'RotRight(❨i, 2❩, -04)', [ImaginaryUnit, 2]);
  Test({LINENUM}50545, 'RotRight(❨i❩, -04)', [ImaginaryUnit]);
  Test({LINENUM}50546, 'RotRight(ComplexVector(DebugObject("empty vector")), 4)', TAlgosimComplexVector.Create);

  Test({LINENUM}50548, 'RotRight(❨i, 2, 3, 4, 5❩, -05)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50549, 'RotRight(❨i, 2, 3❩, -05)', [3, ImaginaryUnit, 2]);
  Test({LINENUM}50550, 'RotRight(❨i, 2❩, -05)', [2, ImaginaryUnit]);
  Test({LINENUM}50551, 'RotRight(❨i❩, -05)', [ImaginaryUnit]);
  Test({LINENUM}50552, 'RotRight(ComplexVector(DebugObject("empty vector")), 5)', TAlgosimComplexVector.Create);

  Test({LINENUM}50554, 'RotRight(❨i, 2, 3, 4, 5❩, -010)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50555, 'RotRight(❨i, 2, 3, 4, 5❩, -011)', [2, 3, 4, 5, ImaginaryUnit]);
  Test({LINENUM}50556, 'RotRight(❨i, 2, 3, 4, 5❩, -012)', [3, 4, 5, ImaginaryUnit, 2]);
  Test({LINENUM}50557, 'RotRight(❨i, 2, 3, 4, 5❩, -0100)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50558, 'RotRight(❨i, 2, 3, 4, 5❩, -0101)', [2, 3, 4, 5, ImaginaryUnit]);
  Test({LINENUM}50559, 'RotRight(❨i, 2, 3, 4, 5❩, -0102)', [3, 4, 5, ImaginaryUnit, 2]);

  Test({LINENUM}50561, 'RotRight(❨i, 2, 3, 4, 5❩, 0)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50562, 'RotRight(❨i, 2, 3❩, 0)', [ImaginaryUnit, 2, 3]);
  Test({LINENUM}50563, 'RotRight(❨i, 2❩, 0)', [ImaginaryUnit, 2]);
  Test({LINENUM}50564, 'RotRight(❨i❩, 0)', [ImaginaryUnit]);
  Test({LINENUM}50565, 'RotRight(ComplexVector(DebugObject("empty vector")), 0)', TAlgosimComplexVector.Create);

  Test({LINENUM}50567, 'RotRight(❨i, 2, 3, 4, 5❩, 01)', [5, ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}50568, 'RotRight(❨i, 2, 3❩, 01)', [3, ImaginaryUnit, 2]);
  Test({LINENUM}50569, 'RotRight(❨i, 2❩, 01)', [2, ImaginaryUnit]);
  Test({LINENUM}50570, 'RotRight(❨i❩, 01)', [ImaginaryUnit]);
  Test({LINENUM}50571, 'RotRight(ComplexVector(DebugObject("empty vector")), -1)', TAlgosimComplexVector.Create);

  Test({LINENUM}50573, 'RotRight(❨i, 2, 3, 4, 5❩, 02)', [4, 5, ImaginaryUnit, 2, 3]);
  Test({LINENUM}50574, 'RotRight(❨i, 2, 3❩, 02)', [2, 3, ImaginaryUnit]);
  Test({LINENUM}50575, 'RotRight(❨i, 2❩, 02)', [ImaginaryUnit, 2]);
  Test({LINENUM}50576, 'RotRight(❨i❩, 02)', [ImaginaryUnit]);
  Test({LINENUM}50577, 'RotRight(ComplexVector(DebugObject("empty vector")), -2)', TAlgosimComplexVector.Create);

  Test({LINENUM}50579, 'RotRight(❨i, 2, 3, 4, 5❩, 03)', [3, 4, 5, ImaginaryUnit, 2]);
  Test({LINENUM}50580, 'RotRight(❨i, 2, 3❩, 03)', [ImaginaryUnit, 2, 3]);
  Test({LINENUM}50581, 'RotRight(❨i, 2❩, 03)', [2, ImaginaryUnit]);
  Test({LINENUM}50582, 'RotRight(❨i❩, 03)', [ImaginaryUnit]);
  Test({LINENUM}50583, 'RotRight(ComplexVector(DebugObject("empty vector")), -3)', TAlgosimComplexVector.Create);

  Test({LINENUM}50585, 'RotRight(❨i, 2, 3, 4, 5❩, 04)', [2, 3, 4, 5, ImaginaryUnit]);
  Test({LINENUM}50586, 'RotRight(❨i, 2, 3❩, 04)', [3, ImaginaryUnit, 2]);
  Test({LINENUM}50587, 'RotRight(❨i, 2❩, 04)', [ImaginaryUnit, 2]);
  Test({LINENUM}50588, 'RotRight(❨i❩, 04)', [ImaginaryUnit]);
  Test({LINENUM}50589, 'RotRight(ComplexVector(DebugObject("empty vector")), -4)', TAlgosimComplexVector.Create);

  Test({LINENUM}50591, 'RotRight(❨i, 2, 3, 4, 5❩, 05)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50592, 'RotRight(❨i, 2, 3❩, 05)', [2, 3, ImaginaryUnit]);
  Test({LINENUM}50593, 'RotRight(❨i, 2❩, 05)', [2, ImaginaryUnit]);
  Test({LINENUM}50594, 'RotRight(❨i❩, 05)', [ImaginaryUnit]);
  Test({LINENUM}50595, 'RotRight(ComplexVector(DebugObject("empty vector")), -5)', TAlgosimComplexVector.Create);

  Test({LINENUM}50597, 'RotRight(❨i, 2, 3, 4, 5❩, 010)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50598, 'RotRight(❨i, 2, 3, 4, 5❩, 011)', [5, ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}50599, 'RotRight(❨i, 2, 3, 4, 5❩, 012)', [4, 5, ImaginaryUnit, 2, 3]);

  Test({LINENUM}50601, 'RotRight(❨i, 2, 3, 4, 5❩, 0100)', [ImaginaryUnit, 2, 3, 4, 5]);
  Test({LINENUM}50602, 'RotRight(❨i, 2, 3, 4, 5❩, 0101)', [5, ImaginaryUnit, 2, 3, 4]);
  Test({LINENUM}50603, 'RotRight(❨i, 2, 3, 4, 5❩, 0102)', [4, 5, ImaginaryUnit, 2, 3]);

  Test({LINENUM}50605, 'RotRight("nargle")', 'enargl');
  Test({LINENUM}50606, 'RotRight("nargle", -1)', 'arglen');
  Test({LINENUM}50607, 'RotRight("nargle", -2)', 'rglena');
  Test({LINENUM}50608, 'RotRight("nargle", -3)', 'glenar');
  Test({LINENUM}50609, 'RotRight("nargle", -4)', 'lenarg');
  Test({LINENUM}50610, 'RotRight("nargle", -5)', 'enargl');
  Test({LINENUM}50611, 'RotRight("nargle", -6)', 'nargle');
  Test({LINENUM}50612, 'RotRight("nargle", -7)', 'arglen');
  Test({LINENUM}50613, 'RotRight("nargle", -8)', 'rglena');
  Test({LINENUM}50614, 'RotRight("nargle", -9)', 'glenar');
  Test({LINENUM}50615, 'RotRight("nargle", -10)', 'lenarg');
  Test({LINENUM}50616, 'RotRight("nargle", -11)', 'enargl');
  Test({LINENUM}50617, 'RotRight("nargle", -12)', 'nargle');

  Test({LINENUM}50619, 'RotRight("nargle", -60)', 'nargle');
  Test({LINENUM}50620, 'RotRight("nargle", -61)', 'arglen');
  Test({LINENUM}50621, 'RotRight("nargle", -62)', 'rglena');
  Test({LINENUM}50622, 'RotRight("nargle", -63)', 'glenar');
  Test({LINENUM}50623, 'RotRight("nargle", -64)', 'lenarg');
  Test({LINENUM}50624, 'RotRight("nargle", -65)', 'enargl');
  Test({LINENUM}50625, 'RotRight("nargle", -66)', 'nargle');

  Test({LINENUM}50627, 'RotRight("nargle", 0)', 'nargle');
  Test({LINENUM}50628, 'RotRight("nargle", 1)', 'enargl');
  Test({LINENUM}50629, 'RotRight("nargle", 2)', 'lenarg');
  Test({LINENUM}50630, 'RotRight("nargle", 3)', 'glenar');
  Test({LINENUM}50631, 'RotRight("nargle", 4)', 'rglena');
  Test({LINENUM}50632, 'RotRight("nargle", 5)', 'arglen');
  Test({LINENUM}50633, 'RotRight("nargle", 6)', 'nargle');
  Test({LINENUM}50634, 'RotRight("nargle", 7)', 'enargl');
  Test({LINENUM}50635, 'RotRight("nargle", 8)', 'lenarg');
  Test({LINENUM}50636, 'RotRight("nargle", 9)', 'glenar');
  Test({LINENUM}50637, 'RotRight("nargle", 10)', 'rglena');
  Test({LINENUM}50638, 'RotRight("nargle", 11)', 'arglen');
  Test({LINENUM}50639, 'RotRight("nargle", 12)', 'nargle');

  Test({LINENUM}50641, 'RotRight("nargle", 60)', 'nargle');
  Test({LINENUM}50642, 'RotRight("nargle", 61)', 'enargl');
  Test({LINENUM}50643, 'RotRight("nargle", 62)', 'lenarg');
  Test({LINENUM}50644, 'RotRight("nargle", 63)', 'glenar');
  Test({LINENUM}50645, 'RotRight("nargle", 64)', 'rglena');
  Test({LINENUM}50646, 'RotRight("nargle", 65)', 'arglen');
  Test({LINENUM}50647, 'RotRight("nargle", 66)', 'nargle');

  Test({LINENUM}50649, 'RotRight(''(1, 2, 3, 4, 5))', intarr([5, 1, 2, 3, 4]));
  Test({LINENUM}50650, 'RotRight(''(1, 2, 3))', intarr([3, 1, 2]));
  Test({LINENUM}50651, 'RotRight(''(1, 2))', intarr([2, 1]));
  Test({LINENUM}50652, 'RotRight(''(5))', intarr([5]));
  Test({LINENUM}50653, 'RotRight(''())', intarr([]));

  Test({LINENUM}50655, 'RotRight(''(1, 2, 3, 4, 5), -01)', intarr([2, 3, 4, 5, 1]));
  Test({LINENUM}50656, 'RotRight(''(1, 2, 3), -01)', intarr([2, 3, 1]));
  Test({LINENUM}50657, 'RotRight(''(1, 2), -01)', intarr([2, 1]));
  Test({LINENUM}50658, 'RotRight(''(5), -01)', intarr([5]));
  Test({LINENUM}50659, 'RotRight(''(), -01)', intarr([]));

  Test({LINENUM}50661, 'RotRight(''(1, 2, 3, 4, 5), -02)', intarr([3, 4, 5, 1, 2]));
  Test({LINENUM}50662, 'RotRight(''(1, 2, 3), -02)', intarr([3, 1, 2]));
  Test({LINENUM}50663, 'RotRight(''(1, 2), -02)', intarr([1, 2]));
  Test({LINENUM}50664, 'RotRight(''(5), -02)', intarr([5]));
  Test({LINENUM}50665, 'RotRight(''(), -02)', intarr([]));

  Test({LINENUM}50667, 'RotRight(''(1, 2, 3, 4, 5), -03)', intarr([4, 5, 1, 2, 3]));
  Test({LINENUM}50668, 'RotRight(''(1, 2, 3), -03)', intarr([1, 2, 3]));
  Test({LINENUM}50669, 'RotRight(''(1, 2), -03)', intarr([2, 1]));
  Test({LINENUM}50670, 'RotRight(''(5), -03)', intarr([5]));
  Test({LINENUM}50671, 'RotRight(''(), -03)', intarr([]));

  Test({LINENUM}50673, 'RotRight(''(1, 2, 3, 4, 5), -04)', intarr([5, 1, 2, 3, 4]));
  Test({LINENUM}50674, 'RotRight(''(1, 2, 3), -04)', intarr([2, 3, 1]));
  Test({LINENUM}50675, 'RotRight(''(1, 2), -04)', intarr([1, 2]));
  Test({LINENUM}50676, 'RotRight(''(5), -04)', intarr([5]));
  Test({LINENUM}50677, 'RotRight(''(), -04)', intarr([]));

  Test({LINENUM}50679, 'RotRight(''(1, 2, 3, 4, 5), -05)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50680, 'RotRight(''(1, 2, 3), -05)', intarr([3, 1, 2]));
  Test({LINENUM}50681, 'RotRight(''(1, 2), -05)', intarr([2, 1]));
  Test({LINENUM}50682, 'RotRight(''(5), -05)', intarr([5]));
  Test({LINENUM}50683, 'RotRight(''(), -05)', intarr([]));

  Test({LINENUM}50685, 'RotRight(''(1, 2, 3, 4, 5), -010)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50686, 'RotRight(''(1, 2, 3, 4, 5), -011)', intarr([2, 3, 4, 5, 1]));
  Test({LINENUM}50687, 'RotRight(''(1, 2, 3, 4, 5), -012)', intarr([3, 4, 5, 1, 2]));
  Test({LINENUM}50688, 'RotRight(''(1, 2, 3, 4, 5), -0100)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50689, 'RotRight(''(1, 2, 3, 4, 5), -0101)', intarr([2, 3, 4, 5, 1]));
  Test({LINENUM}50690, 'RotRight(''(1, 2, 3, 4, 5), -0102)', intarr([3, 4, 5, 1, 2]));

  Test({LINENUM}50692, 'RotRight(''(1, 2, 3, 4, 5), 0)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50693, 'RotRight(''(1, 2, 3), 0)', intarr([1, 2, 3]));
  Test({LINENUM}50694, 'RotRight(''(1, 2), 0)', intarr([1, 2]));
  Test({LINENUM}50695, 'RotRight(''(5), 0)', intarr([5]));
  Test({LINENUM}50696, 'RotRight(''(), 0)', intarr([]));

  Test({LINENUM}50698, 'RotRight(''(1, 2, 3, 4, 5), 01)', intarr([5, 1, 2, 3, 4]));
  Test({LINENUM}50699, 'RotRight(''(1, 2, 3), 01)', intarr([3, 1, 2]));
  Test({LINENUM}50700, 'RotRight(''(1, 2), 01)', intarr([2, 1]));
  Test({LINENUM}50701, 'RotRight(''(5), 01)', intarr([5]));
  Test({LINENUM}50702, 'RotRight(''(), 01)', intarr([]));

  Test({LINENUM}50704, 'RotRight(''(1, 2, 3, 4, 5), 02)', intarr([4, 5, 1, 2, 3]));
  Test({LINENUM}50705, 'RotRight(''(1, 2, 3), 02)', intarr([2, 3, 1]));
  Test({LINENUM}50706, 'RotRight(''(1, 2), 02)', intarr([1, 2]));
  Test({LINENUM}50707, 'RotRight(''(5), 02)', intarr([5]));
  Test({LINENUM}50708, 'RotRight(''(), 02)', intarr([]));

  Test({LINENUM}50710, 'RotRight(''(1, 2, 3, 4, 5), 03)', intarr([3, 4, 5, 1, 2]));
  Test({LINENUM}50711, 'RotRight(''(1, 2, 3), 03)', intarr([1, 2, 3]));
  Test({LINENUM}50712, 'RotRight(''(1, 2), 03)', intarr([2, 1]));
  Test({LINENUM}50713, 'RotRight(''(5), 03)', intarr([5]));
  Test({LINENUM}50714, 'RotRight(''(), 03)', intarr([]));

  Test({LINENUM}50716, 'RotRight(''(1, 2, 3, 4, 5), 04)', intarr([2, 3, 4, 5, 1]));
  Test({LINENUM}50717, 'RotRight(''(1, 2, 3), 04)', intarr([3, 1, 2]));
  Test({LINENUM}50718, 'RotRight(''(1, 2), 04)', intarr([1, 2]));
  Test({LINENUM}50719, 'RotRight(''(5), 04)', intarr([5]));
  Test({LINENUM}50720, 'RotRight(''(), 04)', intarr([]));

  Test({LINENUM}50722, 'RotRight(''(1, 2, 3, 4, 5), 05)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50723, 'RotRight(''(1, 2, 3), 05)', intarr([2, 3, 1]));
  Test({LINENUM}50724, 'RotRight(''(1, 2), 05)', intarr([2, 1]));
  Test({LINENUM}50725, 'RotRight(''(5), 05)', intarr([5]));
  Test({LINENUM}50726, 'RotRight(''(), 05)', intarr([]));

  Test({LINENUM}50728, 'RotRight(''(1, 2, 3, 4, 5), 010)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50729, 'RotRight(''(1, 2, 3, 4, 5), 011)', intarr([5, 1, 2, 3, 4]));
  Test({LINENUM}50730, 'RotRight(''(1, 2, 3, 4, 5), 012)', intarr([4, 5, 1, 2, 3]));

  Test({LINENUM}50732, 'RotRight(''(1, 2, 3, 4, 5), 0100)', intarr([1, 2, 3, 4, 5]));
  Test({LINENUM}50733, 'RotRight(''(1, 2, 3, 4, 5), 0101)', intarr([5, 1, 2, 3, 4]));
  Test({LINENUM}50734, 'RotRight(''(1, 2, 3, 4, 5), 0102)', intarr([4, 5, 1, 2, 3]));

  Test({LINENUM}50736, 'A ≔ ❨❨6, 0, 2❩, ❨1, 4, 3❩, ❨8, 2, 3❩❩', 3, [6, 0, 2, 1, 4, 3, 8, 2, 3]);
  Test({LINENUM}50737, 'MatFromCols(RotRight(cols(A)))', 3, [2, 6, 0, 3, 1, 4, 3, 8, 2]);





  //
  //
  //  CHAPTER 10
  //  Typecasts.
  //
  //

  Chapter('Typecasts');

  //
  // From integer
  //

  Test({LINENUM}50756, 'number(0)', 0);
  Test({LINENUM}50757, 'number(123)', 123);
  Test({LINENUM}50758, 'number(-123)', -123);
  Test({LINENUM}50759, 'number(123456789)', 123456789);
  Test({LINENUM}50760, 'number(123456789123456)', 123456789123456);
  Test({LINENUM}50761, 'number(-123456789)', -123456789);
  Test({LINENUM}50762, 'number(-123456789123456)', -123456789123456);

  Test({LINENUM}50764, 'integer(0)', 0);
  Test({LINENUM}50765, 'integer(123)', 123);
  Test({LINENUM}50766, 'integer(-123)', -123);
  Test({LINENUM}50767, 'integer(123456789)', 123456789);
  Test({LINENUM}50768, 'integer(123456789123456)', 123456789123456);
  Test({LINENUM}50769, 'integer(-123456789)', -123456789);
  Test({LINENUM}50770, 'integer(-123456789123456)', -123456789123456);

  Test({LINENUM}50772, 'RealNumber(0)', 0.0);
  Test({LINENUM}50773, 'RealNumber(123)', 123.0);
  Test({LINENUM}50774, 'RealNumber(-123)', -123.0);
  Test({LINENUM}50775, 'RealNumber(123456789)', 123456789.0);
  Test({LINENUM}50776, 'RealNumber(123456789123456)', 123456789123456.0);
  Test({LINENUM}50777, 'RealNumber(-123456789)', -123456789.0);
  Test({LINENUM}50778, 'RealNumber(-123456789123456)', -123456789123456.0);

  Test({LINENUM}50780, 'ComplexNumber(0)', TASC(0.0));
  Test({LINENUM}50781, 'ComplexNumber(123)', TASC(123.0));
  Test({LINENUM}50782, 'ComplexNumber(-123)', TASC(-123.0));
  Test({LINENUM}50783, 'ComplexNumber(123456789)', TASC(123456789.0));
  Test({LINENUM}50784, 'ComplexNumber(123456789123456)', TASC(123456789123456.0));
  Test({LINENUM}50785, 'ComplexNumber(-123456789)', TASC(-123456789.0));
  Test({LINENUM}50786, 'ComplexNumber(-123456789123456)', TASC(-123456789123456.0));

  Test({LINENUM}50788, 'boolean(0)', False);
  Test({LINENUM}50789, 'boolean(123)', True);
  Test({LINENUM}50790, 'boolean(-123)', True);
  Test({LINENUM}50791, 'boolean(123456789)', True);
  Test({LINENUM}50792, 'boolean(123456789123456)', True);
  Test({LINENUM}50793, 'boolean(-123456789)', True);
  Test({LINENUM}50794, 'boolean(-123456789123456)', True);

  Test({LINENUM}50796, 'string(0)', '0');
  Test({LINENUM}50797, 'string(123)', '123');
  Test({LINENUM}50798, 'string(-123)', '-123');
  Test({LINENUM}50799, 'string(123456789)', '123456789');
  Test({LINENUM}50800, 'string(123456789123456)', '123456789123456');
  Test({LINENUM}50801, 'string(-123456789)', '-123456789');
  Test({LINENUM}50802, 'string(-123456789123456)', '-123456789123456');

  Test({LINENUM}50804, 'vector(0)', [0]);
  Test({LINENUM}50805, 'vector(123)', [123]);
  Test({LINENUM}50806, 'vector(-123)', [-123]);
  Test({LINENUM}50807, 'vector(123456789)', [123456789]);
  Test({LINENUM}50808, 'vector(123456789123456)', [123456789123456]);
  Test({LINENUM}50809, 'vector(-123456789)', [-123456789]);
  Test({LINENUM}50810, 'vector(-123456789123456)', [-123456789123456]);

  Test({LINENUM}50812, 'RealVector(0)', [0]);
  Test({LINENUM}50813, 'RealVector(123)', [123]);
  Test({LINENUM}50814, 'RealVector(-123)', [-123]);
  Test({LINENUM}50815, 'RealVector(123456789)', [123456789]);
  Test({LINENUM}50816, 'RealVector(123456789123456)', [123456789123456]);
  Test({LINENUM}50817, 'RealVector(-123456789)', [-123456789]);
  Test({LINENUM}50818, 'RealVector(-123456789123456)', [-123456789123456]);

  Test({LINENUM}50820, 'ComplexVector(0)', [TASC(0)]);
  Test({LINENUM}50821, 'ComplexVector(123)', [TASC(123)]);
  Test({LINENUM}50822, 'ComplexVector(-123)', [TASC(-123)]);
  Test({LINENUM}50823, 'ComplexVector(123456789)', [TASC(123456789)]);
  Test({LINENUM}50824, 'ComplexVector(123456789123456)', [TASC(123456789123456)]);
  Test({LINENUM}50825, 'ComplexVector(-123456789)', [TASC(-123456789)]);
  Test({LINENUM}50826, 'ComplexVector(-123456789123456)', [TASC(-123456789123456)]);

  Test({LINENUM}50828, 'matrix(0)', 1, [0]);
  Test({LINENUM}50829, 'matrix(123)', 1, [123]);
  Test({LINENUM}50830, 'matrix(-123)', 1, [-123]);
  Test({LINENUM}50831, 'matrix(123456789)', 1, [123456789]);
  Test({LINENUM}50832, 'matrix(123456789123456)', 1, [123456789123456]);
  Test({LINENUM}50833, 'matrix(-123456789)', 1, [-123456789]);
  Test({LINENUM}50834, 'matrix(-123456789123456)', 1, [-123456789123456]);

  Test({LINENUM}50836, 'RealMatrix(0)', 1, [0]);
  Test({LINENUM}50837, 'RealMatrix(123)', 1, [123]);
  Test({LINENUM}50838, 'RealMatrix(-123)', 1, [-123]);
  Test({LINENUM}50839, 'RealMatrix(123456789)', 1, [123456789]);
  Test({LINENUM}50840, 'RealMatrix(123456789123456)', 1, [123456789123456]);
  Test({LINENUM}50841, 'RealMatrix(-123456789)', 1, [-123456789]);
  Test({LINENUM}50842, 'RealMatrix(-123456789123456)', 1, [-123456789123456]);

  Test({LINENUM}50844, 'ComplexMatrix(0)', 1, [TASC(0)]);
  Test({LINENUM}50845, 'ComplexMatrix(123)', 1, [TASC(123)]);
  Test({LINENUM}50846, 'ComplexMatrix(-123)', 1, [TASC(-123)]);
  Test({LINENUM}50847, 'ComplexMatrix(123456789)', 1, [TASC(123456789)]);
  Test({LINENUM}50848, 'ComplexMatrix(123456789123456)', 1, [TASC(123456789123456)]);
  Test({LINENUM}50849, 'ComplexMatrix(-123456789)', 1, [TASC(-123456789)]);
  Test({LINENUM}50850, 'ComplexMatrix(-123456789123456)', 1, [TASC(-123456789123456)]);

  Test({LINENUM}50852, 'ToList(0)', intarr([0]));
  Test({LINENUM}50853, 'ToList(123)', intarr([123]));
  Test({LINENUM}50854, 'ToList(-123)', intarr([-123]));
  Test({LINENUM}50855, 'ToList(123456789)', intarr([123456789]));
  Test({LINENUM}50856, 'ToList(123456789123456)', intarr([123456789123456]));
  Test({LINENUM}50857, 'ToList(-123456789)', intarr([-123456789]));
  Test({LINENUM}50858, 'ToList(-123456789123456)', intarr([-123456789123456]));

  Test({LINENUM}50860, 'ToSet(0)', intset([0]));
  Test({LINENUM}50861, 'ToSet(123)', intset([123]));
  Test({LINENUM}50862, 'ToSet(-123)', intset([-123]));
  Test({LINENUM}50863, 'ToSet(123456789)', intset([123456789]));
  Test({LINENUM}50864, 'ToSet(123456789123456)', intset([123456789123456]));
  Test({LINENUM}50865, 'ToSet(-123456789)', intset([-123456789]));
  Test({LINENUM}50866, 'ToSet(-123456789123456)', intset([-123456789123456]));

  Test({LINENUM}50868, 'color(16#000000)', ASO(TRGB.Create(0, 0, 0)));
  Test({LINENUM}50869, 'color(16#FF0000)', ASO(TRGB.Create(1, 0, 0)));
  Test({LINENUM}50870, 'color(16#00FF00)', ASO(TRGB.Create(0, 1, 0)));
  Test({LINENUM}50871, 'color(16#0000FF)', ASO(TRGB.Create(0, 0, 1)));
  Test({LINENUM}50872, 'color(16#FFFF00)', ASO(TRGB.Create(1, 1, 0)));
  Test({LINENUM}50873, 'color(16#FF00FF)', ASO(TRGB.Create(1, 0, 1)));
  Test({LINENUM}50874, 'color(16#00FFFF)', ASO(TRGB.Create(0, 1, 1)));
  Test({LINENUM}50875, 'color(16#FFFFFF)', ASO(TRGB.Create(1, 1, 1)));
  Test({LINENUM}50876, 'color(16#808080)', ASO(TRGB.Create($80/$FF, $80/$FF, $80/$FF)));


  //
  // From rational number
  //

  Test({LINENUM}50883, 'number(1/2 - 1/2)', rat(0, 1));
  Test({LINENUM}50884, 'number(1/4)', rat(1, 4));
  Test({LINENUM}50885, 'number(1/7)', rat(1, 7));
  Test({LINENUM}50886, 'number(17/7 + 4/7)', rat(3, 1));
  Test({LINENUM}50887, 'number(59/331)', rat(59, 331));
  Test({LINENUM}50888, 'number(123456/123457)', rat(123456, 123457));
  Test({LINENUM}50889, 'number(-1/4)', rat(-1, 4));
  Test({LINENUM}50890, 'number(-1/7)', rat(-1, 7));
  Test({LINENUM}50891, 'number(-17/7 - 4/7)', rat(-3, 1));
  Test({LINENUM}50892, 'number(-59/331)', rat(-59, 331));
  Test({LINENUM}50893, 'number(-123456/123457)', rat(-123456, 123457));

  Test({LINENUM}50895, 'integer(1/2 - 1/2)', 0);
  Test({LINENUM}50896, 'integer(1/4)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}50897, 'integer(1/7)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}50898, 'integer(17/7 + 4/7)', 3);
  Test({LINENUM}50899, 'integer(59/331)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}50900, 'integer(123456/123457)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}50901, 'integer(-1/4)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}50902, 'integer(-1/7)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}50903, 'integer(-17/7 - 4/7)', -3);
  Test({LINENUM}50904, 'integer(-59/331)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}50905, 'integer(-123456/123457)', failure, 'Object cannot be represented as a 64-bit integer.');

  Test({LINENUM}50907, 'RealNumber(1/2 - 1/2)', 0.0);
  Test({LINENUM}50908, 'RealNumber(1/4)', 0.25);
  Test({LINENUM}50909, 'RealNumber(1/7)', 1/7);
  Test({LINENUM}50910, 'RealNumber(17/7 + 4/7)', 3.0);
  Test({LINENUM}50911, 'RealNumber(59/331)', 59/331);
  Test({LINENUM}50912, 'RealNumber(123456/123457)', 123456/123457);
  Test({LINENUM}50913, 'RealNumber(-1/4)', -0.25);
  Test({LINENUM}50914, 'RealNumber(-1/7)', -1/7);
  Test({LINENUM}50915, 'RealNumber(-17/7 - 4/7)', -3.0);
  Test({LINENUM}50916, 'RealNumber(-59/331)', -59/331);
  Test({LINENUM}50917, 'RealNumber(-123456/123457)', -123456/123457);

  Test({LINENUM}50919, 'ComplexNumber(1/2 - 1/2)', TASC(0.0));
  Test({LINENUM}50920, 'ComplexNumber(1/4)', TASC(0.25));
  Test({LINENUM}50921, 'ComplexNumber(1/7)', TASC(1/7));
  Test({LINENUM}50922, 'ComplexNumber(17/7 + 4/7)', TASC(3.0));
  Test({LINENUM}50923, 'ComplexNumber(59/331)', TASC(59/331));
  Test({LINENUM}50924, 'ComplexNumber(123456/123457)', TASC(123456/123457));
  Test({LINENUM}50925, 'ComplexNumber(-1/4)', TASC(-0.25));
  Test({LINENUM}50926, 'ComplexNumber(-1/7)', TASC(-1/7));
  Test({LINENUM}50927, 'ComplexNumber(-17/7 - 4/7)', TASC(-3.0));
  Test({LINENUM}50928, 'ComplexNumber(-59/331)', TASC(-59/331));
  Test({LINENUM}50929, 'ComplexNumber(-123456/123457)', TASC(-123456/123457));

  Test({LINENUM}50931, 'boolean(1/2 - 1/2)', False);
  Test({LINENUM}50932, 'boolean(1/4)', True);
  Test({LINENUM}50933, 'boolean(1/7)', True);
  Test({LINENUM}50934, 'boolean(17/7 + 4/7)', True);
  Test({LINENUM}50935, 'boolean(59/331)', True);
  Test({LINENUM}50936, 'boolean(123456/123457)', True);
  Test({LINENUM}50937, 'boolean(-1/4)', True);
  Test({LINENUM}50938, 'boolean(-1/7)', True);
  Test({LINENUM}50939, 'boolean(-17/7 - 4/7)', True);
  Test({LINENUM}50940, 'boolean(-59/331)', True);
  Test({LINENUM}50941, 'boolean(-123456/123457)', True);

  Test({LINENUM}50943, 'string(1/2 - 1/2)', '0');
  Test({LINENUM}50944, 'string(1/4)', '1/4');
  Test({LINENUM}50945, 'string(1/7)', '1/7');
  Test({LINENUM}50946, 'string(17/7 + 4/7)', '3');
  Test({LINENUM}50947, 'string(59/331)', '59/331');
  Test({LINENUM}50948, 'string(123456/123457)', '123456/123457');
  Test({LINENUM}50949, 'string(-1/4)', '-1/4');
  Test({LINENUM}50950, 'string(-1/7)', '-1/7');
  Test({LINENUM}50951, 'string(-17/7 - 4/7)', '-3');
  Test({LINENUM}50952, 'string(-59/331)', '-59/331');
  Test({LINENUM}50953, 'string(-123456/123457)', '-123456/123457');

  Test({LINENUM}50955, 'vector(1/2 - 1/2)', [0]);
  Test({LINENUM}50956, 'vector(1/4)', [1/4]);
  Test({LINENUM}50957, 'vector(1/7)', [1/7]);
  Test({LINENUM}50958, 'vector(17/7 + 4/7)', [3]);
  Test({LINENUM}50959, 'vector(59/331)', [59/331]);
  Test({LINENUM}50960, 'vector(123456/123457)', [123456/123457]);
  Test({LINENUM}50961, 'vector(-1/4)', [-1/4]);
  Test({LINENUM}50962, 'vector(-1/7)', [-1/7]);
  Test({LINENUM}50963, 'vector(-17/7 - 4/7)', [-3]);
  Test({LINENUM}50964, 'vector(-59/331)', [-59/331]);
  Test({LINENUM}50965, 'vector(-123456/123457)', [-123456/123457]);

  Test({LINENUM}50967, 'RealVector(1/2 - 1/2)', [0]);
  Test({LINENUM}50968, 'RealVector(1/4)', [1/4]);
  Test({LINENUM}50969, 'RealVector(1/7)', [1/7]);
  Test({LINENUM}50970, 'RealVector(17/7 + 4/7)', [3]);
  Test({LINENUM}50971, 'RealVector(59/331)', [59/331]);
  Test({LINENUM}50972, 'RealVector(123456/123457)', [123456/123457]);
  Test({LINENUM}50973, 'RealVector(-1/4)', [-1/4]);
  Test({LINENUM}50974, 'RealVector(-1/7)', [-1/7]);
  Test({LINENUM}50975, 'RealVector(-17/7 - 4/7)', [-3]);
  Test({LINENUM}50976, 'RealVector(-59/331)', [-59/331]);
  Test({LINENUM}50977, 'RealVector(-123456/123457)', [-123456/123457]);

  Test({LINENUM}50979, 'ComplexVector(1/2 - 1/2)', [TASC(0)]);
  Test({LINENUM}50980, 'ComplexVector(1/4)', [TASC(1/4)]);
  Test({LINENUM}50981, 'ComplexVector(1/7)', [TASC(1/7)]);
  Test({LINENUM}50982, 'ComplexVector(17/7 + 4/7)', [TASC(3)]);
  Test({LINENUM}50983, 'ComplexVector(59/331)', [TASC(59/331)]);
  Test({LINENUM}50984, 'ComplexVector(123456/123457)', [TASC(123456/123457)]);
  Test({LINENUM}50985, 'ComplexVector(-1/4)', [TASC(-1/4)]);
  Test({LINENUM}50986, 'ComplexVector(-1/7)', [TASC(-1/7)]);
  Test({LINENUM}50987, 'ComplexVector(-17/7 - 4/7)', [TASC(-3)]);
  Test({LINENUM}50988, 'ComplexVector(-59/331)', [TASC(-59/331)]);
  Test({LINENUM}50989, 'ComplexVector(-123456/123457)', [TASC(-123456/123457)]);

  Test({LINENUM}50991, 'matrix(1/2 - 1/2)', 1, [0]);
  Test({LINENUM}50992, 'matrix(1/4)', 1, [1/4]);
  Test({LINENUM}50993, 'matrix(1/7)', 1, [1/7]);
  Test({LINENUM}50994, 'matrix(17/7 + 4/7)', 1, [3]);
  Test({LINENUM}50995, 'matrix(59/331)', 1, [59/331]);
  Test({LINENUM}50996, 'matrix(123456/123457)', 1, [123456/123457]);
  Test({LINENUM}50997, 'matrix(-1/4)', 1, [-1/4]);
  Test({LINENUM}50998, 'matrix(-1/7)', 1, [-1/7]);
  Test({LINENUM}50999, 'matrix(-17/7 - 4/7)', 1, [-3]);
  Test({LINENUM}51000, 'matrix(-59/331)', 1, [-59/331]);
  Test({LINENUM}51001, 'matrix(-123456/123457)', 1, [-123456/123457]);

  Test({LINENUM}51003, 'RealMatrix(1/2 - 1/2)', 1, [0]);
  Test({LINENUM}51004, 'RealMatrix(1/4)', 1, [1/4]);
  Test({LINENUM}51005, 'RealMatrix(1/7)', 1, [1/7]);
  Test({LINENUM}51006, 'RealMatrix(17/7 + 4/7)', 1, [3]);
  Test({LINENUM}51007, 'RealMatrix(59/331)', 1, [59/331]);
  Test({LINENUM}51008, 'RealMatrix(123456/123457)', 1, [123456/123457]);
  Test({LINENUM}51009, 'RealMatrix(-1/4)', 1, [-1/4]);
  Test({LINENUM}51010, 'RealMatrix(-1/7)', 1, [-1/7]);
  Test({LINENUM}51011, 'RealMatrix(-17/7 - 4/7)', 1, [-3]);
  Test({LINENUM}51012, 'RealMatrix(-59/331)', 1, [-59/331]);
  Test({LINENUM}51013, 'RealMatrix(-123456/123457)', 1, [-123456/123457]);

  Test({LINENUM}51015, 'ComplexMatrix(1/2 - 1/2)', 1, [TASC(0)]);
  Test({LINENUM}51016, 'ComplexMatrix(1/4)', 1, [TASC(1/4)]);
  Test({LINENUM}51017, 'ComplexMatrix(1/7)', 1, [TASC(1/7)]);
  Test({LINENUM}51018, 'ComplexMatrix(17/7 + 4/7)', 1, [TASC(3)]);
  Test({LINENUM}51019, 'ComplexMatrix(59/331)', 1, [TASC(59/331)]);
  Test({LINENUM}51020, 'ComplexMatrix(123456/123457)', 1, [TASC(123456/123457)]);
  Test({LINENUM}51021, 'ComplexMatrix(-1/4)', 1, [TASC(-1/4)]);
  Test({LINENUM}51022, 'ComplexMatrix(-1/7)', 1, [TASC(-1/7)]);
  Test({LINENUM}51023, 'ComplexMatrix(-17/7 - 4/7)', 1, [TASC(-3)]);
  Test({LINENUM}51024, 'ComplexMatrix(-59/331)', 1, [TASC(-59/331)]);
  Test({LINENUM}51025, 'ComplexMatrix(-123456/123457)', 1, [TASC(-123456/123457)]);

  Test({LINENUM}51027, 'ToList(1/2 - 1/2)', asoarr([0]));
  Test({LINENUM}51028, 'ToList(1/4)', asoarr([1/4]));
  Test({LINENUM}51029, 'ToList(1/7)', asoarr([1/7]));
  Test({LINENUM}51030, 'ToList(17/7 + 4/7)', asoarr([3]));
  Test({LINENUM}51031, 'ToList(59/331)', asoarr([59/331]));
  Test({LINENUM}51032, 'ToList(123456/123457)', asoarr([123456/123457]));
  Test({LINENUM}51033, 'ToList(-1/4)', asoarr([-1/4]));
  Test({LINENUM}51034, 'ToList(-1/7)', asoarr([-1/7]));
  Test({LINENUM}51035, 'ToList(-17/7 - 4/7)', asoarr([-3]));
  Test({LINENUM}51036, 'ToList(-59/331)', asoarr([-59/331]));
  Test({LINENUM}51037, 'ToList(-123456/123457)', asoarr([-123456/123457]));

  Test({LINENUM}51039, 'ToSet(1/2 - 1/2)', asoset([0]));
  Test({LINENUM}51040, 'ToSet(1/4)', asoset([1/4]));
  Test({LINENUM}51041, 'ToSet(1/7)', asoset([1/7]));
  Test({LINENUM}51042, 'ToSet(17/7 + 4/7)', asoset([3]));
  Test({LINENUM}51043, 'ToSet(59/331)', asoset([59/331]));
  Test({LINENUM}51044, 'ToSet(123456/123457)', asoset([123456/123457]));
  Test({LINENUM}51045, 'ToSet(-1/4)', asoset([-1/4]));
  Test({LINENUM}51046, 'ToSet(-1/7)', asoset([-1/7]));
  Test({LINENUM}51047, 'ToSet(-17/7 - 4/7)', asoset([-3]));
  Test({LINENUM}51048, 'ToSet(-59/331)', asoset([-59/331]));
  Test({LINENUM}51049, 'ToSet(-123456/123457)', asoset([-123456/123457]));

  Test({LINENUM}51051, 'color(1/2 - 1/2)', ASO(TRGB.Create(0, 0, 0)));
  Test({LINENUM}51052, 'color(1/2 - 1/2 + 255/1)', ASO(TRGB.Create(0, 0, 1)));
  Test({LINENUM}51053, 'color(1/2)', failure, 'A number which isn''t a 32-bit integer cannot be converted to a colour.');


  //
  // From real number
  //

  Test({LINENUM}51060, 'number(0.0)', 0.0);
  Test({LINENUM}51061, 'number(21.0)', 21.0);
  Test({LINENUM}51062, 'number(0.25)', 0.25);
  Test({LINENUM}51063, 'number(123.456)', 123.456);
  Test({LINENUM}51064, 'number(5.2E10)', 5.2E10);
  Test({LINENUM}51065, 'number(5.2E100)', 5.2E100);
  Test({LINENUM}51066, 'number(5.2E-10)', 5.2E-10);
  Test({LINENUM}51067, 'number(5.2E-100)', 5.2E-100);
  Test({LINENUM}51068, 'number(-21.0)', -21.0);
  Test({LINENUM}51069, 'number(-0.25)', -0.25);
  Test({LINENUM}51070, 'number(-123.456)', -123.456);
  Test({LINENUM}51071, 'number(-5.2E10)', -5.2E10);
  Test({LINENUM}51072, 'number(-5.2E100)', -5.2E100);
  Test({LINENUM}51073, 'number(-5.2E-10)', -5.2E-10);
  Test({LINENUM}51074, 'number(-5.2E-100)', -5.2E-100);

  Test({LINENUM}51076, 'integer(0.0)', 0);
  Test({LINENUM}51077, 'integer(21.0)', 21);
  Test({LINENUM}51078, 'integer(0.25)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51079, 'integer(123.456)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51080, 'integer(5.2E10)', 52000000000);
  Test({LINENUM}51081, 'integer(5.2E100)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51082, 'integer(5.2E-10)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51083, 'integer(5.2E-100)', 0);
  Test({LINENUM}51084, 'integer(-21.0)', -21);
  Test({LINENUM}51085, 'integer(-0.25)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51086, 'integer(-123.456)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51087, 'integer(-5.2E10)', -52000000000);
  Test({LINENUM}51088, 'integer(-5.2E100)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51089, 'integer(-5.2E-10)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51090, 'integer(-5.2E-100)', 0);

  Test({LINENUM}51092, 'RealNumber(0.0)', 0.0);
  Test({LINENUM}51093, 'RealNumber(21.0)', 21.0);
  Test({LINENUM}51094, 'RealNumber(0.25)', 0.25);
  Test({LINENUM}51095, 'RealNumber(123.456)', 123.456);
  Test({LINENUM}51096, 'RealNumber(5.2E10)', 5.2E10);
  Test({LINENUM}51097, 'RealNumber(5.2E100)', 5.2E100);
  Test({LINENUM}51098, 'RealNumber(5.2E-10)', 5.2E-10);
  Test({LINENUM}51099, 'RealNumber(5.2E-100)', 5.2E-100);
  Test({LINENUM}51100, 'RealNumber(-21.0)', -21.0);
  Test({LINENUM}51101, 'RealNumber(-0.25)', -0.25);
  Test({LINENUM}51102, 'RealNumber(-123.456)', -123.456);
  Test({LINENUM}51103, 'RealNumber(-5.2E10)', -5.2E10);
  Test({LINENUM}51104, 'RealNumber(-5.2E100)', -5.2E100);
  Test({LINENUM}51105, 'RealNumber(-5.2E-10)', -5.2E-10);
  Test({LINENUM}51106, 'RealNumber(-5.2E-100)', -5.2E-100);

  Test({LINENUM}51108, 'ComplexNumber(0.0)', TASC(0.0));
  Test({LINENUM}51109, 'ComplexNumber(21.0)', TASC(21.0));
  Test({LINENUM}51110, 'ComplexNumber(0.25)', TASC(0.25));
  Test({LINENUM}51111, 'ComplexNumber(123.456)', TASC(123.456));
  Test({LINENUM}51112, 'ComplexNumber(5.2E10)', TASC(5.2E10));
  Test({LINENUM}51113, 'ComplexNumber(5.2E100)', TASC(5.2E100));
  Test({LINENUM}51114, 'ComplexNumber(5.2E-10)', TASC(5.2E-10));
  Test({LINENUM}51115, 'ComplexNumber(5.2E-100)', TASC(5.2E-100));
  Test({LINENUM}51116, 'ComplexNumber(-21.0)', TASC(-21.0));
  Test({LINENUM}51117, 'ComplexNumber(-0.25)', TASC(-0.25));
  Test({LINENUM}51118, 'ComplexNumber(-123.456)', TASC(-123.456));
  Test({LINENUM}51119, 'ComplexNumber(-5.2E10)', TASC(-5.2E10));
  Test({LINENUM}51120, 'ComplexNumber(-5.2E100)', TASC(-5.2E100));
  Test({LINENUM}51121, 'ComplexNumber(-5.2E-10)', TASC(-5.2E-10));
  Test({LINENUM}51122, 'ComplexNumber(-5.2E-100)', TASC(-5.2E-100));

  Test({LINENUM}51124, 'boolean(0.0)', False);
  Test({LINENUM}51125, 'boolean(21.0)', True);
  Test({LINENUM}51126, 'boolean(0.25)', True);
  Test({LINENUM}51127, 'boolean(123.456)', True);
  Test({LINENUM}51128, 'boolean(5.2E10)', True);
  Test({LINENUM}51129, 'boolean(5.2E100)', True);
  Test({LINENUM}51130, 'boolean(5.2E-10)', True);
  Test({LINENUM}51131, 'boolean(5.2E-100)', True);
  Test({LINENUM}51132, 'boolean(-21.0)', True);
  Test({LINENUM}51133, 'boolean(-0.25)', True);
  Test({LINENUM}51134, 'boolean(-123.456)', True);
  Test({LINENUM}51135, 'boolean(-5.2E10)', True);
  Test({LINENUM}51136, 'boolean(-5.2E100)', True);
  Test({LINENUM}51137, 'boolean(-5.2E-10)', True);
  Test({LINENUM}51138, 'boolean(-5.2E-100)', True);

  Test({LINENUM}51140, 'string(0.0)', '0');
  Test({LINENUM}51141, 'string(21.0)', '21');
  Test({LINENUM}51142, 'string(0.25)', '0.25');
  Test({LINENUM}51143, 'string(123.456)', '123.456');
  Test({LINENUM}51144, 'string(5.2E10)', '52000000000');
  Test({LINENUM}51145, 'string(5.2E100)', '5.2E100');
  Test({LINENUM}51146, 'string(5.2E-10)', '5.2E-10');
  Test({LINENUM}51147, 'string(5.2E-100)', '5.2E-100');
  Test({LINENUM}51148, 'string(-21.0)', '-21');
  Test({LINENUM}51149, 'string(-0.25)', '-0.25');
  Test({LINENUM}51150, 'string(-123.456)', '-123.456');
  Test({LINENUM}51151, 'string(-5.2E10)', '-52000000000');
  Test({LINENUM}51152, 'string(-5.2E100)', '-5.2E100');
  Test({LINENUM}51153, 'string(-5.2E-10)', '-5.2E-10');
  Test({LINENUM}51154, 'string(-5.2E-100)', '-5.2E-100');

  Test({LINENUM}51156, 'vector(0.0)', [0]);
  Test({LINENUM}51157, 'vector(21.0)', [21]);
  Test({LINENUM}51158, 'vector(0.25)', [0.25]);
  Test({LINENUM}51159, 'vector(123.456)', [123.456]);
  Test({LINENUM}51160, 'vector(5.2E10)', [52000000000]);
  Test({LINENUM}51161, 'vector(5.2E100)', [5.2E100]);
  Test({LINENUM}51162, 'vector(5.2E-10)', [5.2E-10]);
  Test({LINENUM}51163, 'vector(5.2E-100)', [5.2E-100]);
  Test({LINENUM}51164, 'vector(-21.0)', [-21]);
  Test({LINENUM}51165, 'vector(-0.25)', [-0.25]);
  Test({LINENUM}51166, 'vector(-123.456)', [-123.456]);
  Test({LINENUM}51167, 'vector(-5.2E10)', [-52000000000]);
  Test({LINENUM}51168, 'vector(-5.2E100)', [-5.2E100]);
  Test({LINENUM}51169, 'vector(-5.2E-10)', [-5.2E-10]);
  Test({LINENUM}51170, 'vector(-5.2E-100)', [-5.2E-100]);

  Test({LINENUM}51172, 'RealVector(0.0)', [0]);
  Test({LINENUM}51173, 'RealVector(21.0)', [21]);
  Test({LINENUM}51174, 'RealVector(0.25)', [0.25]);
  Test({LINENUM}51175, 'RealVector(123.456)', [123.456]);
  Test({LINENUM}51176, 'RealVector(5.2E10)', [52000000000]);
  Test({LINENUM}51177, 'RealVector(5.2E100)', [5.2E100]);
  Test({LINENUM}51178, 'RealVector(5.2E-10)', [5.2E-10]);
  Test({LINENUM}51179, 'RealVector(5.2E-100)', [5.2E-100]);
  Test({LINENUM}51180, 'RealVector(-21.0)', [-21]);
  Test({LINENUM}51181, 'RealVector(-0.25)', [-0.25]);
  Test({LINENUM}51182, 'RealVector(-123.456)', [-123.456]);
  Test({LINENUM}51183, 'RealVector(-5.2E10)', [-52000000000]);
  Test({LINENUM}51184, 'RealVector(-5.2E100)', [-5.2E100]);
  Test({LINENUM}51185, 'RealVector(-5.2E-10)', [-5.2E-10]);
  Test({LINENUM}51186, 'RealVector(-5.2E-100)', [-5.2E-100]);

  Test({LINENUM}51188, 'ComplexVector(0.0)', [TASC(0)]);
  Test({LINENUM}51189, 'ComplexVector(21.0)', [TASC(21)]);
  Test({LINENUM}51190, 'ComplexVector(0.25)', [TASC(0.25)]);
  Test({LINENUM}51191, 'ComplexVector(123.456)', [TASC(123.456)]);
  Test({LINENUM}51192, 'ComplexVector(5.2E10)', [TASC(52000000000)]);
  Test({LINENUM}51193, 'ComplexVector(5.2E100)', [TASC(5.2E100)]);
  Test({LINENUM}51194, 'ComplexVector(5.2E-10)', [TASC(5.2E-10)]);
  Test({LINENUM}51195, 'ComplexVector(5.2E-100)', [TASC(5.2E-100)]);
  Test({LINENUM}51196, 'ComplexVector(-21.0)', [TASC(-21)]);
  Test({LINENUM}51197, 'ComplexVector(-0.25)', [TASC(-0.25)]);
  Test({LINENUM}51198, 'ComplexVector(-123.456)', [TASC(-123.456)]);
  Test({LINENUM}51199, 'ComplexVector(-5.2E10)', [TASC(-52000000000)]);
  Test({LINENUM}51200, 'ComplexVector(-5.2E100)', [TASC(-5.2E100)]);
  Test({LINENUM}51201, 'ComplexVector(-5.2E-10)', [TASC(-5.2E-10)]);
  Test({LINENUM}51202, 'ComplexVector(-5.2E-100)', [TASC(-5.2E-100)]);

  Test({LINENUM}51204, 'matrix(0.0)', 1, [0]);
  Test({LINENUM}51205, 'matrix(21.0)', 1, [21]);
  Test({LINENUM}51206, 'matrix(0.25)', 1, [0.25]);
  Test({LINENUM}51207, 'matrix(123.456)', 1, [123.456]);
  Test({LINENUM}51208, 'matrix(5.2E10)', 1, [52000000000]);
  Test({LINENUM}51209, 'matrix(5.2E100)', 1, [5.2E100]);
  Test({LINENUM}51210, 'matrix(5.2E-10)', 1, [5.2E-10]);
  Test({LINENUM}51211, 'matrix(5.2E-100)', 1, [5.2E-100]);
  Test({LINENUM}51212, 'matrix(-21.0)', 1, [-21]);
  Test({LINENUM}51213, 'matrix(-0.25)', 1, [-0.25]);
  Test({LINENUM}51214, 'matrix(-123.456)', 1, [-123.456]);
  Test({LINENUM}51215, 'matrix(-5.2E10)', 1, [-52000000000]);
  Test({LINENUM}51216, 'matrix(-5.2E100)', 1, [-5.2E100]);
  Test({LINENUM}51217, 'matrix(-5.2E-10)', 1, [-5.2E-10]);
  Test({LINENUM}51218, 'matrix(-5.2E-100)', 1, [-5.2E-100]);

  Test({LINENUM}51220, 'RealMatrix(0.0)', 1, [0]);
  Test({LINENUM}51221, 'RealMatrix(21.0)', 1, [21]);
  Test({LINENUM}51222, 'RealMatrix(0.25)', 1, [0.25]);
  Test({LINENUM}51223, 'RealMatrix(123.456)', 1, [123.456]);
  Test({LINENUM}51224, 'RealMatrix(5.2E10)', 1, [52000000000]);
  Test({LINENUM}51225, 'RealMatrix(5.2E100)', 1, [5.2E100]);
  Test({LINENUM}51226, 'RealMatrix(5.2E-10)', 1, [5.2E-10]);
  Test({LINENUM}51227, 'RealMatrix(5.2E-100)', 1, [5.2E-100]);
  Test({LINENUM}51228, 'RealMatrix(-21.0)', 1, [-21]);
  Test({LINENUM}51229, 'RealMatrix(-0.25)', 1, [-0.25]);
  Test({LINENUM}51230, 'RealMatrix(-123.456)', 1, [-123.456]);
  Test({LINENUM}51231, 'RealMatrix(-5.2E10)', 1, [-52000000000]);
  Test({LINENUM}51232, 'RealMatrix(-5.2E100)', 1, [-5.2E100]);
  Test({LINENUM}51233, 'RealMatrix(-5.2E-10)', 1, [-5.2E-10]);
  Test({LINENUM}51234, 'RealMatrix(-5.2E-100)', 1, [-5.2E-100]);

  Test({LINENUM}51236, 'ComplexMatrix(0.0)', 1, [TASC(0)]);
  Test({LINENUM}51237, 'ComplexMatrix(21.0)', 1, [TASC(21)]);
  Test({LINENUM}51238, 'ComplexMatrix(0.25)', 1, [TASC(0.25)]);
  Test({LINENUM}51239, 'ComplexMatrix(123.456)', 1, [TASC(123.456)]);
  Test({LINENUM}51240, 'ComplexMatrix(5.2E10)', 1, [TASC(52000000000)]);
  Test({LINENUM}51241, 'ComplexMatrix(5.2E100)', 1, [TASC(5.2E100)]);
  Test({LINENUM}51242, 'ComplexMatrix(5.2E-10)', 1, [TASC(5.2E-10)]);
  Test({LINENUM}51243, 'ComplexMatrix(5.2E-100)', 1, [TASC(5.2E-100)]);
  Test({LINENUM}51244, 'ComplexMatrix(-21.0)', 1, [TASC(-21)]);
  Test({LINENUM}51245, 'ComplexMatrix(-0.25)', 1, [TASC(-0.25)]);
  Test({LINENUM}51246, 'ComplexMatrix(-123.456)', 1, [TASC(-123.456)]);
  Test({LINENUM}51247, 'ComplexMatrix(-5.2E10)', 1, [TASC(-52000000000)]);
  Test({LINENUM}51248, 'ComplexMatrix(-5.2E100)', 1, [TASC(-5.2E100)]);
  Test({LINENUM}51249, 'ComplexMatrix(-5.2E-10)', 1, [TASC(-5.2E-10)]);
  Test({LINENUM}51250, 'ComplexMatrix(-5.2E-100)', 1, [TASC(-5.2E-100)]);

  Test({LINENUM}51252, 'ToList(0.0)', asoarr([0]));
  Test({LINENUM}51253, 'ToList(21.0)', asoarr([21]));
  Test({LINENUM}51254, 'ToList(0.25)', asoarr([0.25]));
  Test({LINENUM}51255, 'ToList(123.456)', asoarr([123.456]));
  Test({LINENUM}51256, 'ToList(5.2E10)', asoarr([52000000000]));
  Test({LINENUM}51257, 'ToList(5.2E100)', asoarr([5.2E100]));
  Test({LINENUM}51258, 'ToList(5.2E-10)', asoarr([5.2E-10]));
  Test({LINENUM}51259, 'ToList(5.2E-100)', asoarr([5.2E-100]));
  Test({LINENUM}51260, 'ToList(-21.0)', asoarr([-21]));
  Test({LINENUM}51261, 'ToList(-0.25)', asoarr([-0.25]));
  Test({LINENUM}51262, 'ToList(-123.456)', asoarr([-123.456]));
  Test({LINENUM}51263, 'ToList(-5.2E10)', asoarr([-52000000000]));
  Test({LINENUM}51264, 'ToList(-5.2E100)', asoarr([-5.2E100]));
  Test({LINENUM}51265, 'ToList(-5.2E-10)', asoarr([-5.2E-10]));
  Test({LINENUM}51266, 'ToList(-5.2E-100)', asoarr([-5.2E-100]));

  Test({LINENUM}51268, 'ToSet(0.0)', asoset([0]));
  Test({LINENUM}51269, 'ToSet(21.0)', asoset([21]));
  Test({LINENUM}51270, 'ToSet(0.25)', asoset([0.25]));
  Test({LINENUM}51271, 'ToSet(123.456)', asoset([123.456]));
  Test({LINENUM}51272, 'ToSet(5.2E10)', asoset([52000000000]));
  Test({LINENUM}51273, 'ToSet(5.2E100)', asoset([5.2E100]));
  Test({LINENUM}51274, 'ToSet(5.2E-10)', asoset([5.2E-10]));
  Test({LINENUM}51275, 'ToSet(5.2E-100)', asoset([5.2E-100]));
  Test({LINENUM}51276, 'ToSet(-21.0)', asoset([-21]));
  Test({LINENUM}51277, 'ToSet(-0.25)', asoset([-0.25]));
  Test({LINENUM}51278, 'ToSet(-123.456)', asoset([-123.456]));
  Test({LINENUM}51279, 'ToSet(-5.2E10)', asoset([-52000000000]));
  Test({LINENUM}51280, 'ToSet(-5.2E100)', asoset([-5.2E100]));
  Test({LINENUM}51281, 'ToSet(-5.2E-10)', asoset([-5.2E-10]));
  Test({LINENUM}51282, 'ToSet(-5.2E-100)', asoset([-5.2E-100]));

  Test({LINENUM}51284, 'color(0.0 + 16#000000)', ASO(TRGB.Create(0, 0, 0)));
  Test({LINENUM}51285, 'color(0.0 + 16#FF0000)', ASO(TRGB.Create(1, 0, 0)));
  Test({LINENUM}51286, 'color(0.0 + 16#00FF00)', ASO(TRGB.Create(0, 1, 0)));
  Test({LINENUM}51287, 'color(0.0 + 16#0000FF)', ASO(TRGB.Create(0, 0, 1)));
  Test({LINENUM}51288, 'color(0.0 + 16#FFFF00)', ASO(TRGB.Create(1, 1, 0)));
  Test({LINENUM}51289, 'color(0.0 + 16#FF00FF)', ASO(TRGB.Create(1, 0, 1)));
  Test({LINENUM}51290, 'color(0.0 + 16#00FFFF)', ASO(TRGB.Create(0, 1, 1)));
  Test({LINENUM}51291, 'color(0.0 + 16#FFFFFF)', ASO(TRGB.Create(1, 1, 1)));
  Test({LINENUM}51292, 'color(0.0 + 16#808080)', ASO(TRGB.Create($80/$FF, $80/$FF, $80/$FF)));
  Test({LINENUM}51293, 'color(3.1415)', failure, 'A number which isn''t a 32-bit integer cannot be converted to a colour.');


  //
  // From complex number
  //

  Test({LINENUM}51300, 'number(i - i)', TASC(0));
  Test({LINENUM}51301, 'number(i - i + 5)', TASC(5));
  Test({LINENUM}51302, 'number(i - i + 0.25)', TASC(0.25));
  Test({LINENUM}51303, 'number(i - i + 123.456)', TASC(123.456));
  Test({LINENUM}51304, 'number(i - i + 123.456E10)', TASC(123.456E10));
  Test({LINENUM}51305, 'number(i)', ImaginaryUnit);
  Test({LINENUM}51306, 'number(1 + i)', 1 + ImaginaryUnit);
  Test({LINENUM}51307, 'number(5 - 2⋅i)', 5 - 2*ImaginaryUnit);

  Test({LINENUM}51309, 'integer(i - i)', 0);
  Test({LINENUM}51310, 'integer(i - i + 5)', 5);
  Test({LINENUM}51311, 'integer(i - i + 0.25)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51312, 'integer(i - i + 123.456)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51313, 'integer(i - i + 123.456E10)', 1234560000000);
  Test({LINENUM}51314, 'integer(i)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51315, 'integer(1 + i)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51316, 'integer(5 - 2⋅i)', failure, 'Object cannot be represented as a 64-bit integer.');

  Test({LINENUM}51318, 'RealNumber(i - i)', 0.0);
  Test({LINENUM}51319, 'RealNumber(i - i + 5)', 5.0);
  Test({LINENUM}51320, 'RealNumber(i - i + 0.25)', 0.25);
  Test({LINENUM}51321, 'RealNumber(i - i + 123.456)', 123.456);
  Test({LINENUM}51322, 'RealNumber(i - i + 123.456E10)', 123.456E10);
  Test({LINENUM}51323, 'RealNumber(i)', failure, 'Complex number i cannot be converted to a real number.');
  Test({LINENUM}51324, 'RealNumber(1 + i)', failure, 'Complex number 1 + i cannot be converted to a real number.');
  Test({LINENUM}51325, 'RealNumber(5 - 2⋅i)', failure, 'Complex number 5 − 2⋅i cannot be converted to a real number.');

  Test({LINENUM}51327, 'ComplexNumber(i - i)', TASC(0));
  Test({LINENUM}51328, 'ComplexNumber(i - i + 5)', TASC(5));
  Test({LINENUM}51329, 'ComplexNumber(i - i + 0.25)', TASC(0.25));
  Test({LINENUM}51330, 'ComplexNumber(i - i + 123.456)', TASC(123.456));
  Test({LINENUM}51331, 'ComplexNumber(i - i + 123.456E10)', TASC(123.456E10));
  Test({LINENUM}51332, 'ComplexNumber(i)', ImaginaryUnit);
  Test({LINENUM}51333, 'ComplexNumber(1 + i)', 1 + ImaginaryUnit);
  Test({LINENUM}51334, 'ComplexNumber(5 - 2⋅i)', 5 - 2*ImaginaryUnit);

  Test({LINENUM}51336, 'boolean(i - i)', False);
  Test({LINENUM}51337, 'boolean(i - i + 5)', True);
  Test({LINENUM}51338, 'boolean(i - i + 0.25)', True);
  Test({LINENUM}51339, 'boolean(i - i + 123.456)', True);
  Test({LINENUM}51340, 'boolean(i - i + 123.456E10)', True);
  Test({LINENUM}51341, 'boolean(i)', True);
  Test({LINENUM}51342, 'boolean(1 + i)', True);
  Test({LINENUM}51343, 'boolean(5 - 2⋅i)', True);
  Test({LINENUM}51344, 'boolean(i/1E100)', True);
  Test({LINENUM}51345, 'boolean(i - i + 1E-100)', True);

  Test({LINENUM}51347, 'string(i - i)', '0');
  Test({LINENUM}51348, 'string(i - i + 5)', '5');
  Test({LINENUM}51349, 'string(i - i − 5)', '-5');
  Test({LINENUM}51350, 'string(i - i + 0.25)', '0.25');
  Test({LINENUM}51351, 'string(i - i + 123.456)', '123.456');
  Test({LINENUM}51352, 'string(i - i + 123.456E10)', '1234560000000');
  Test({LINENUM}51353, 'string(i)', 'i');
  Test({LINENUM}51354, 'string(−i)', '-i');
  Test({LINENUM}51355, 'string(1 + i)', '1 + i');
  Test({LINENUM}51356, 'string(5 − 2⋅i)', '5 - 2⋅i');
  Test({LINENUM}51357, 'string(−1 + i)', '-1 + i');
  Test({LINENUM}51358, 'string(−5 − 2⋅i)', '-5 - 2⋅i');

  Test({LINENUM}51360, 'vector(i - i)', [TASC(0)]);
  Test({LINENUM}51361, 'vector(i - i + 5)', [TASC(5)]);
  Test({LINENUM}51362, 'vector(i - i + 0.25)', [TASC(0.25)]);
  Test({LINENUM}51363, 'vector(i - i + 123.456)', [TASC(123.456)]);
  Test({LINENUM}51364, 'vector(i - i + 123.456E10)', [TASC(123.456E10)]);
  Test({LINENUM}51365, 'vector(i)', [ImaginaryUnit]);
  Test({LINENUM}51366, 'vector(1 + i)', [1 + ImaginaryUnit]);
  Test({LINENUM}51367, 'vector(5 - 2⋅i)', [5 - 2*ImaginaryUnit]);

  Test({LINENUM}51369, 'RealVector(i - i)', [0, 0]);
  Test({LINENUM}51370, 'RealVector(i - i + 5)', [5, 0]);
  Test({LINENUM}51371, 'RealVector(i - i + 0.25)', [0.25, 0]);
  Test({LINENUM}51372, 'RealVector(i - i + 123.456)', [123.456, 0]);
  Test({LINENUM}51373, 'RealVector(i - i + 123.456E10)', [123.456E10, 0]);
  Test({LINENUM}51374, 'RealVector(i)', [0, 1]);
  Test({LINENUM}51375, 'RealVector(1 + i)', [1, 1]);
  Test({LINENUM}51376, 'RealVector(5 - 2⋅i)', [5, -2]);

  Test({LINENUM}51378, 'RealVector(RealNumber(i - i))', [0]);
  Test({LINENUM}51379, 'RealVector(RealNumber(i - i + 5))', [5]);
  Test({LINENUM}51380, 'RealVector(RealNumber(i - i + 0.25))', [0.25]);
  Test({LINENUM}51381, 'RealVector(RealNumber(i - i + 123.456))', [123.456]);
  Test({LINENUM}51382, 'RealVector(RealNumber(i - i + 123.456E10))', [123.456E10]);
  Test({LINENUM}51383, 'RealVector(RealNumber(i))', failure, 'Complex number i cannot be converted to a real number.');
  Test({LINENUM}51384, 'RealVector(RealNumber(1 + i))', failure, 'Complex number 1 + i cannot be converted to a real number.');
  Test({LINENUM}51385, 'RealVector(RealNumber(5 - 2⋅i))', failure, 'Complex number 5 − 2⋅i cannot be converted to a real number.');

  Test({LINENUM}51387, 'ComplexVector(i - i)', [TASC(0)]);
  Test({LINENUM}51388, 'ComplexVector(i - i + 5)', [TASC(5)]);
  Test({LINENUM}51389, 'ComplexVector(i - i + 0.25)', [TASC(0.25)]);
  Test({LINENUM}51390, 'ComplexVector(i - i + 123.456)', [TASC(123.456)]);
  Test({LINENUM}51391, 'ComplexVector(i - i + 123.456E10)', [TASC(123.456E10)]);
  Test({LINENUM}51392, 'ComplexVector(i)', [ImaginaryUnit]);
  Test({LINENUM}51393, 'ComplexVector(1 + i)', [1 + ImaginaryUnit]);
  Test({LINENUM}51394, 'ComplexVector(5 - 2⋅i)', [5 - 2*ImaginaryUnit]);

  Test({LINENUM}51396, 'matrix(i - i)', 1, [TASC(0)]);
  Test({LINENUM}51397, 'matrix(i - i + 5)', 1, [TASC(5)]);
  Test({LINENUM}51398, 'matrix(i - i + 0.25)', 1, [TASC(0.25)]);
  Test({LINENUM}51399, 'matrix(i - i + 123.456)', 1, [TASC(123.456)]);
  Test({LINENUM}51400, 'matrix(i - i + 123.456E10)', 1, [TASC(123.456E10)]);
  Test({LINENUM}51401, 'matrix(i)', 1, [ImaginaryUnit]);
  Test({LINENUM}51402, 'matrix(1 + i)', 1, [1 + ImaginaryUnit]);
  Test({LINENUM}51403, 'matrix(5 - 2⋅i)', 1, [5 - 2*ImaginaryUnit]);

  Test({LINENUM}51405, 'RealMatrix(i - i)', 1, [0]);
  Test({LINENUM}51406, 'RealMatrix(i - i + 5)', 1, [5]);
  Test({LINENUM}51407, 'RealMatrix(i - i + 0.25)', 1, [0.25]);
  Test({LINENUM}51408, 'RealMatrix(i - i + 123.456)', 1, [123.456]);
  Test({LINENUM}51409, 'RealMatrix(i - i + 123.456E10)', 1, [123.456E10]);
  Test({LINENUM}51410, 'RealMatrix(i)', failure, 'Complex number i cannot be converted to a real number.');
  Test({LINENUM}51411, 'RealMatrix(1 + i)', failure, 'Complex number 1 + i cannot be converted to a real number.');
  Test({LINENUM}51412, 'RealMatrix(5 - 2⋅i)', failure, 'Complex number 5 − 2⋅i cannot be converted to a real number.');

  Test({LINENUM}51414, 'ComplexMatrix(i - i)', 1, [TASC(0)]);
  Test({LINENUM}51415, 'ComplexMatrix(i - i + 5)', 1, [TASC(5)]);
  Test({LINENUM}51416, 'ComplexMatrix(i - i + 0.25)', 1, [TASC(0.25)]);
  Test({LINENUM}51417, 'ComplexMatrix(i - i + 123.456)', 1, [TASC(123.456)]);
  Test({LINENUM}51418, 'ComplexMatrix(i - i + 123.456E10)', 1, [TASC(123.456E10)]);
  Test({LINENUM}51419, 'ComplexMatrix(i)', 1, [ImaginaryUnit]);
  Test({LINENUM}51420, 'ComplexMatrix(1 + i)', 1, [1 + ImaginaryUnit]);
  Test({LINENUM}51421, 'ComplexMatrix(5 - 2⋅i)', 1, [5 - 2*ImaginaryUnit]);

  Test({LINENUM}51423, 'ToList(i - i)', asoarrex([ASO(TASC(0))]));
  Test({LINENUM}51424, 'ToList(i - i + 5)', asoarrex([ASO(TASC(5))]));
  Test({LINENUM}51425, 'ToList(i - i + 0.25)', asoarrex([ASO(TASC(0.25))]));
  Test({LINENUM}51426, 'ToList(i - i + 123.456)', asoarrex([ASO(TASC(123.456))]));
  Test({LINENUM}51427, 'ToList(i - i + 123.456E10)', asoarrex([ASO(TASC(123.456E10))]));
  Test({LINENUM}51428, 'ToList(i)', asoarrex([ASO(ImaginaryUnit)]));
  Test({LINENUM}51429, 'ToList(1 + i)', asoarrex([ASO(1 + ImaginaryUnit)]));
  Test({LINENUM}51430, 'ToList(5 - 2⋅i)', asoarrex([ASO(5 - 2*ImaginaryUnit)]));

  Test({LINENUM}51432, 'ToSet(i - i)', asosetex([ASO(TASC(0))]));
  Test({LINENUM}51433, 'ToSet(i - i + 5)', asosetex([ASO(TASC(5))]));
  Test({LINENUM}51434, 'ToSet(i - i + 0.25)', asosetex([ASO(TASC(0.25))]));
  Test({LINENUM}51435, 'ToSet(i - i + 123.456)', asosetex([ASO(TASC(123.456))]));
  Test({LINENUM}51436, 'ToSet(i - i + 123.456E10)', asosetex([ASO(TASC(123.456E10))]));
  Test({LINENUM}51437, 'ToSet(i)', asosetex([ASO(ImaginaryUnit)]));
  Test({LINENUM}51438, 'ToSet(1 + i)', asosetex([ASO(1 + ImaginaryUnit)]));
  Test({LINENUM}51439, 'ToSet(5 - 2⋅i)', asosetex([ASO(5 - 2*ImaginaryUnit)]));

  Test({LINENUM}51441, 'color(i - i + 16#000000)', ASO(TRGB.Create(0, 0, 0)));
  Test({LINENUM}51442, 'color(i - i + 16#FF0000)', ASO(TRGB.Create(1, 0, 0)));
  Test({LINENUM}51443, 'color(i - i + 16#00FF00)', ASO(TRGB.Create(0, 1, 0)));
  Test({LINENUM}51444, 'color(i - i + 16#0000FF)', ASO(TRGB.Create(0, 0, 1)));
  Test({LINENUM}51445, 'color(i - i + 16#FFFF00)', ASO(TRGB.Create(1, 1, 0)));
  Test({LINENUM}51446, 'color(i - i + 16#FF00FF)', ASO(TRGB.Create(1, 0, 1)));
  Test({LINENUM}51447, 'color(i - i + 16#00FFFF)', ASO(TRGB.Create(0, 1, 1)));
  Test({LINENUM}51448, 'color(i - i + 16#FFFFFF)', ASO(TRGB.Create(1, 1, 1)));
  Test({LINENUM}51449, 'color(i - i + 16#808080)', ASO(TRGB.Create($80/$FF, $80/$FF, $80/$FF)));
  Test({LINENUM}51450, 'color(i - i + 3.1415)', failure, 'A number which isn''t a 32-bit integer cannot be converted to a colour.');
  Test({LINENUM}51451, 'color(i + 3.1415)', failure, 'A number which isn''t a 32-bit integer cannot be converted to a colour.');


  //
  // From boolean
  //

  Test({LINENUM}51458, 'number(false)', 0);
  Test({LINENUM}51459, 'number(true)', 1);

  Test({LINENUM}51461, 'integer(false)', 0);
  Test({LINENUM}51462, 'integer(true)', 1);

  Test({LINENUM}51464, 'RealNumber(false)', 0.0);
  Test({LINENUM}51465, 'RealNumber(true)', 1.0);

  Test({LINENUM}51467, 'ComplexNumber(false)', TASC(0));
  Test({LINENUM}51468, 'ComplexNumber(true)', TASC(1));

  Test({LINENUM}51470, 'boolean(false)', False);
  Test({LINENUM}51471, 'boolean(true)', True);

  Test({LINENUM}51473, 'string(false)', 'false');
  Test({LINENUM}51474, 'string(true)', 'true');

  Test({LINENUM}51476, 'string(number(false))', '0');
  Test({LINENUM}51477, 'string(number(true))', '1');

  Test({LINENUM}51479, 'vector(false)', failure, 'An object of type "boolean" cannot be converted to a real vector.');
  Test({LINENUM}51480, 'vector(true)', failure, 'An object of type "boolean" cannot be converted to a real vector.');
  Test({LINENUM}51481, 'RealVector(false)', failure, 'An object of type "boolean" cannot be converted to a real vector.');
  Test({LINENUM}51482, 'RealVector(true)', failure, 'An object of type "boolean" cannot be converted to a real vector.');
  Test({LINENUM}51483, 'ComplexVector(false)', failure, 'An object of type "boolean" cannot be converted to a complex vector.');
  Test({LINENUM}51484, 'ComplexVector(true)', failure, 'An object of type "boolean" cannot be converted to a complex vector.');

  Test({LINENUM}51486, 'matrix(false)', failure, 'An object of type "boolean" cannot be converted to a real matrix.');
  Test({LINENUM}51487, 'matrix(true)', failure, 'An object of type "boolean" cannot be converted to a real matrix.');
  Test({LINENUM}51488, 'RealMatrix(false)', failure, 'An object of type "boolean" cannot be converted to a real matrix.');
  Test({LINENUM}51489, 'RealMatrix(true)', failure, 'An object of type "boolean" cannot be converted to a real matrix.');
  Test({LINENUM}51490, 'ComplexMatrix(false)', failure, 'An object of type "boolean" cannot be converted to a complex matrix.');
  Test({LINENUM}51491, 'ComplexMatrix(true)', failure, 'An object of type "boolean" cannot be converted to a complex matrix.');

  Test({LINENUM}51493, 'ToList(false)', asoarr([False]));
  Test({LINENUM}51494, 'ToList(true)', asoarr([True]));

  Test({LINENUM}51496, 'ToSet(false)', asoset([False]));
  Test({LINENUM}51497, 'ToSet(true)', asoset([True]));

  Test({LINENUM}51499, 'color(false)', failure, 'An object of type "boolean" cannot be converted to a colour.');
  Test({LINENUM}51500, 'color(true)', failure, 'An object of type "boolean" cannot be converted to a colour.');


  //
  // From string
  //

  Test({LINENUM}51507, 'number("0")', 0);
  Test({LINENUM}51508, 'number("123")', 123);
  Test({LINENUM}51509, 'number(" 123  ")', 123);
  Test({LINENUM}51510, 'number("123456789")', 123456789);
  Test({LINENUM}51511, 'number("123456789123456")', 123456789123456);
  Test({LINENUM}51512, 'number("-123")', -123);
  Test({LINENUM}51513, 'number(" - 123  ")', -123);
  Test({LINENUM}51514, 'number("-123456789")', -123456789);
  Test({LINENUM}51515, 'number("-123456789123456")', -123456789123456);

  Test({LINENUM}51517, 'number("123 456 789")', 123456789);
  Test({LINENUM}51518, 'number("123 456 789 123 456")', 123456789123456);
  Test({LINENUM}51519, 'number("-123 456 789")', -123456789);
  Test({LINENUM}51520, 'number("-123 456 789 123 456")', -123456789123456);

  Test({LINENUM}51522, 'number("1/4")', Rat(1, 4));
  Test({LINENUM}51523, 'number("123456/123457")', Rat(123456, 123457));
  Test({LINENUM}51524, 'number("123 456/123 457")', Rat(123456, 123457));
  Test({LINENUM}51525, 'number("-1/4")', Rat(-1, 4));
  Test({LINENUM}51526, 'number("-123456/123457")', Rat(-123456, 123457));
  Test({LINENUM}51527, 'number("-123 456/123 457")', Rat(-123456, 123457));

  Test({LINENUM}51529, 'number("0.0")', 0.0);
  Test({LINENUM}51530, 'number("0.000000")', 0.0);
  Test({LINENUM}51531, 'number("0.123")', 0.123);
  Test({LINENUM}51532, 'number("0.123456")', 0.123456);
  Test({LINENUM}51533, 'number("0.123 456")', 0.123456);
  Test({LINENUM}51534, 'number("58.223")', 58.223);
  Test({LINENUM}51535, 'number("6.3E5")', 6.3E5);
  Test({LINENUM}51536, 'number("6.3E10")', 6.3E10);
  Test({LINENUM}51537, 'number("6.3E100")', 6.3E100);
  Test({LINENUM}51538, 'number("6.3E+100")', 6.3E+100);
  Test({LINENUM}51539, 'number("6.3E-5")', 6.3E-5);
  Test({LINENUM}51540, 'number("6.3E-10")', 6.3E-10);
  Test({LINENUM}51541, 'number("6.3E-100")', 6.3E-100);
  Test({LINENUM}51542, 'number("-0.123")', -0.123);
  Test({LINENUM}51543, 'number("-58.223")', -58.223);
  Test({LINENUM}51544, 'number("-6.3E5")', -6.3E5);
  Test({LINENUM}51545, 'number("-6.3E10")', -6.3E10);
  Test({LINENUM}51546, 'number("-6.3E100")', -6.3E100);
  Test({LINENUM}51547, 'number("-6.3E+100")', -6.3E+100);
  Test({LINENUM}51548, 'number("-6.3E-5")', -6.3E-5);
  Test({LINENUM}51549, 'number("-6.3E-10")', -6.3E-10);
  Test({LINENUM}51550, 'number("-6.3E-100")', -6.3E-100);

  Test({LINENUM}51552, 'number("5 + 2i")', ASC(5, 2));
  Test({LINENUM}51553, 'number("5 + 2 i")', ASC(5, 2));
  Test({LINENUM}51554, 'number("5 + 2*i")', ASC(5, 2));
  Test({LINENUM}51555, 'number("5 + 2⋅i")', ASC(5, 2));
  Test({LINENUM}51556, 'number("5 + 2j")', ASC(5, 2));
  Test({LINENUM}51557, 'number("5 + 2 j")', ASC(5, 2));
  Test({LINENUM}51558, 'number("5 + 2*j")', ASC(5, 2));
  Test({LINENUM}51559, 'number("5 + 2⋅j")', ASC(5, 2));
  Test({LINENUM}51560, 'number("5 + 2I")', ASC(5, 2));
  Test({LINENUM}51561, 'number("5 + 2 I")', ASC(5, 2));
  Test({LINENUM}51562, 'number("5 + 2*I")', ASC(5, 2));
  Test({LINENUM}51563, 'number("5 + 2⋅I")', ASC(5, 2));
  Test({LINENUM}51564, 'number("5 + 2J")', ASC(5, 2));
  Test({LINENUM}51565, 'number("5 + 2 J")', ASC(5, 2));
  Test({LINENUM}51566, 'number("5 + 2*J")', ASC(5, 2));
  Test({LINENUM}51567, 'number("5 + 2⋅J")', ASC(5, 2));
  Test({LINENUM}51568, 'number("5 - 2i")', ASC(5, -2));
  Test({LINENUM}51569, 'number("5 - 2 i")', ASC(5, -2));
  Test({LINENUM}51570, 'number("5 - 2*i")', ASC(5, -2));
  Test({LINENUM}51571, 'number("5 - 2⋅i")', ASC(5, -2));
  Test({LINENUM}51572, 'number("5 - 2j")', ASC(5, -2));
  Test({LINENUM}51573, 'number("5 - 2 j")', ASC(5, -2));
  Test({LINENUM}51574, 'number("5 - 2*j")', ASC(5, -2));
  Test({LINENUM}51575, 'number("5 - 2⋅j")', ASC(5, -2));
  Test({LINENUM}51576, 'number("5 - 2I")', ASC(5, -2));
  Test({LINENUM}51577, 'number("5 - 2 I")', ASC(5, -2));
  Test({LINENUM}51578, 'number("5 - 2*I")', ASC(5, -2));
  Test({LINENUM}51579, 'number("5 - 2⋅I")', ASC(5, -2));
  Test({LINENUM}51580, 'number("5 - 2J")', ASC(5, -2));
  Test({LINENUM}51581, 'number("5 - 2 J")', ASC(5, -2));
  Test({LINENUM}51582, 'number("5 - 2*J")', ASC(5, -2));
  Test({LINENUM}51583, 'number("5 - 2⋅J")', ASC(5, -2));
  Test({LINENUM}51584, 'number("2.41E-7 + 3.2 j")', ASC(2.41E-7, 3.2));

  Test({LINENUM}51586, 'number("−123")', -123);
  Test({LINENUM}51587, 'number(" − 123  ")', -123);
  Test({LINENUM}51588, 'number("−123456789")', -123456789);
  Test({LINENUM}51589, 'number("−123 456 789")', -123456789);
  Test({LINENUM}51590, 'number("−123456789123456")', -123456789123456);
  Test({LINENUM}51591, 'number("−123 456 789 123 456")', -123456789123456);
  Test({LINENUM}51592, 'number("−1/4")', Rat(-1, 4));
  Test({LINENUM}51593, 'number("−123456/123457")', Rat(-123456, 123457));
  Test({LINENUM}51594, 'number("−123 456/123 457")', Rat(-123456, 123457));
  Test({LINENUM}51595, 'number("6.3E−5")', 6.3E-5);
  Test({LINENUM}51596, 'number("6.3E−10")', 6.3E-10);
  Test({LINENUM}51597, 'number("6.3E−100")', 6.3E-100);
  Test({LINENUM}51598, 'number("−0.123")', -0.123);
  Test({LINENUM}51599, 'number("−0.123456")', -0.123456);
  Test({LINENUM}51600, 'number("−0.123 456")', -0.123456);
  Test({LINENUM}51601, 'number("−58.223")', -58.223);
  Test({LINENUM}51602, 'number("−6.3E5")', -6.3E5);
  Test({LINENUM}51603, 'number("−6.3E10")', -6.3E10);
  Test({LINENUM}51604, 'number("−6.3E100")', -6.3E100);
  Test({LINENUM}51605, 'number("−6.3E+100")', -6.3E+100);
  Test({LINENUM}51606, 'number("−6.3E−5")', -6.3E-5);
  Test({LINENUM}51607, 'number("−6.3E−10")', -6.3E-10);
  Test({LINENUM}51608, 'number("−6.3E−100")', -6.3E-100);
  Test({LINENUM}51609, 'number("5 − 2i")', ASC(5, -2));
  Test({LINENUM}51610, 'number("5 − 2 i")', ASC(5, -2));
  Test({LINENUM}51611, 'number("5 − 2*i")', ASC(5, -2));
  Test({LINENUM}51612, 'number("5 − 2⋅i")', ASC(5, -2));
  Test({LINENUM}51613, 'number("5 − 2j")', ASC(5, -2));
  Test({LINENUM}51614, 'number("5 − 2 j")', ASC(5, -2));
  Test({LINENUM}51615, 'number("5 − 2*j")', ASC(5, -2));
  Test({LINENUM}51616, 'number("5 − 2⋅j")', ASC(5, -2));
  Test({LINENUM}51617, 'number("5 − 2I")', ASC(5, -2));
  Test({LINENUM}51618, 'number("5 − 2 I")', ASC(5, -2));
  Test({LINENUM}51619, 'number("5 − 2*I")', ASC(5, -2));
  Test({LINENUM}51620, 'number("5 − 2⋅I")', ASC(5, -2));
  Test({LINENUM}51621, 'number("5 − 2J")', ASC(5, -2));
  Test({LINENUM}51622, 'number("5 − 2 J")', ASC(5, -2));
  Test({LINENUM}51623, 'number("5 − 2*J")', ASC(5, -2));
  Test({LINENUM}51624, 'number("5 − 2⋅J")', ASC(5, -2));
  Test({LINENUM}51625, 'number("−2.41E−7 − 3.2 j")', ASC(-2.41E-7, -3.2));

  Test({LINENUM}51627, 'number("123g")', failure, 'Cannot convert string "123g" to a complex number.');
  Test({LINENUM}51628, 'number("123..")', failure, 'Cannot convert string "123.." to a complex number.');
  Test({LINENUM}51629, 'number("3.14E5.1")', failure, 'Cannot convert string "3.14E5.1" to a complex number.');
  Test({LINENUM}51630, 'number("6.5 + 3⋅i + 5⋅k")', failure, 'Cannot convert string "6.5 + 3⋅i + 5⋅k" to a complex number.');

  Test({LINENUM}51632, 'integer("0")', 0);
  Test({LINENUM}51633, 'integer("123")', 123);
  Test({LINENUM}51634, 'integer(" 123  ")', 123);
  Test({LINENUM}51635, 'integer("123456789")', 123456789);
  Test({LINENUM}51636, 'integer("123456789123456")', 123456789123456);
  Test({LINENUM}51637, 'integer("123 456 789")', 123456789);
  Test({LINENUM}51638, 'integer("123 456 789 123 456")', 123456789123456);
  Test({LINENUM}51639, 'integer("-123")', -123);
  Test({LINENUM}51640, 'integer(" - 123  ")', -123);
  Test({LINENUM}51641, 'integer("-123 456 789")', -123456789);
  Test({LINENUM}51642, 'integer("-123 456 789 123 456")', -123456789123456);
  Test({LINENUM}51643, 'integer("5.0")', 5);
  Test({LINENUM}51644, 'integer("-5.0")', -5);
  Test({LINENUM}51645, 'integer("123g")', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51646, 'integer("5.3")', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51647, 'integer("5.3E100")', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}51648, 'integer("")', failure, 'Object cannot be represented as a 64-bit integer.');

  Test({LINENUM}51650, 'integer("−123")', -123);
  Test({LINENUM}51651, 'integer(" − 123  ")', -123);
  Test({LINENUM}51652, 'integer("−123 456 789")', -123456789);
  Test({LINENUM}51653, 'integer("−123 456 789 123 456")', -123456789123456);
  Test({LINENUM}51654, 'integer("−5.0")', -5);

  Test({LINENUM}51656, 'RealNumber("0")', 0.0);
  Test({LINENUM}51657, 'RealNumber("123")', 123.0);
  Test({LINENUM}51658, 'RealNumber("123456789")', 123456789.0);
  Test({LINENUM}51659, 'RealNumber("123456789123456")', 123456789123456.0);
  Test({LINENUM}51660, 'RealNumber("-123")', -123.0);
  Test({LINENUM}51661, 'RealNumber("-123456789")', -123456789.0);
  Test({LINENUM}51662, 'RealNumber("-123456789123456")', -123456789123456.0);
  Test({LINENUM}51663, 'RealNumber("0.123456789")', 0.123456789);
  Test({LINENUM}51664, 'RealNumber("1.5")', 1.5);
  Test({LINENUM}51665, 'RealNumber("123.456")', 123.456);
  Test({LINENUM}51666, 'RealNumber("5.1E10")', 5.1E10);
  Test({LINENUM}51667, 'RealNumber("5.1E100")', 5.1E100);
  Test({LINENUM}51668, 'RealNumber("5.1E-10")', 5.1E-10);
  Test({LINENUM}51669, 'RealNumber("5.1E-100")', 5.1E-100);
  Test({LINENUM}51670, 'RealNumber("-0.123456789")', -0.123456789);
  Test({LINENUM}51671, 'RealNumber("-1.5")', -1.5);
  Test({LINENUM}51672, 'RealNumber("-123.456")', -123.456);
  Test({LINENUM}51673, 'RealNumber("-5.1E10")', -5.1E10);
  Test({LINENUM}51674, 'RealNumber("-5.1E100")', -5.1E100);
  Test({LINENUM}51675, 'RealNumber("-5.1E-10")', -5.1E-10);
  Test({LINENUM}51676, 'RealNumber("-5.1E-100")', -5.1E-100);
  Test({LINENUM}51677, 'RealNumber("5.3g")', failure, 'Cannot convert string "5.3g" to a real number.');
  Test({LINENUM}51678, 'RealNumber("5.3.2")', failure, 'Cannot convert string "5.3.2" to a real number.');
  Test({LINENUM}51679, 'RealNumber("5.3E2.2")', failure, 'Cannot convert string "5.3E2.2" to a real number.');
  Test({LINENUM}51680, 'RealNumber("")', failure, 'Cannot convert string "" to a real number.');

  Test({LINENUM}51682, 'RealNumber("−123")', -123.0);
  Test({LINENUM}51683, 'RealNumber("−123456789")', -123456789.0);
  Test({LINENUM}51684, 'RealNumber("−123456789123456")', -123456789123456.0);
  Test({LINENUM}51685, 'RealNumber("−0.123456789")', -0.123456789);
  Test({LINENUM}51686, 'RealNumber("−1.5")', -1.5);
  Test({LINENUM}51687, 'RealNumber("−123.456")', -123.456);
  Test({LINENUM}51688, 'RealNumber("−5.1E10")', -5.1E10);
  Test({LINENUM}51689, 'RealNumber("−5.1E100")', -5.1E100);
  Test({LINENUM}51690, 'RealNumber("−5.1E−10")', -5.1E-10);
  Test({LINENUM}51691, 'RealNumber("−5.1E−100")', -5.1E-100);

  Test({LINENUM}51693, 'ComplexNumber("' +  '7 + 5 i'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51694, 'ComplexNumber("' +  '7 + 5*i'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51695, 'ComplexNumber("' +  '7 + 5⋅i'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51696, 'ComplexNumber("' +  '7 + 5 j'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51697, 'ComplexNumber("' +  '7 + 5*j'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51698, 'ComplexNumber("' +  '7 + 5⋅j'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51699, 'ComplexNumber("' +  '7 + 5 I'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51700, 'ComplexNumber("' +  '7 + 5*I'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51701, 'ComplexNumber("' +  '7 + 5⋅I'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51702, 'ComplexNumber("' +  '7 + 5 J'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51703, 'ComplexNumber("' +  '7 + 5*J'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51704, 'ComplexNumber("' +  '7 + 5⋅J'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}51705, 'ComplexNumber("' +  '7 - 5 i'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51706, 'ComplexNumber("' +  '7 - 5*i'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51707, 'ComplexNumber("' +  '7 - 5⋅i'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51708, 'ComplexNumber("' +  '7 - 5 j'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51709, 'ComplexNumber("' +  '7 - 5*j'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51710, 'ComplexNumber("' +  '7 - 5⋅j'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51711, 'ComplexNumber("' +  '7 - 5 I'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51712, 'ComplexNumber("' +  '7 - 5*I'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51713, 'ComplexNumber("' +  '7 - 5⋅I'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51714, 'ComplexNumber("' +  '7 - 5 J'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51715, 'ComplexNumber("' +  '7 - 5*J'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51716, 'ComplexNumber("' +  '7 - 5⋅J'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}51717, 'ComplexNumber("' +  '-7 + 5 i'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51718, 'ComplexNumber("' +  '-7 + 5*i'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51719, 'ComplexNumber("' +  '-7 + 5⋅i'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51720, 'ComplexNumber("' +  '-7 + 5 j'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51721, 'ComplexNumber("' +  '-7 + 5*j'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51722, 'ComplexNumber("' +  '-7 + 5⋅j'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51723, 'ComplexNumber("' +  '-7 + 5 I'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51724, 'ComplexNumber("' +  '-7 + 5*I'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51725, 'ComplexNumber("' +  '-7 + 5⋅I'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51726, 'ComplexNumber("' +  '-7 + 5 J'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51727, 'ComplexNumber("' +  '-7 + 5*J'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51728, 'ComplexNumber("' +  '-7 + 5⋅J'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}51729, 'ComplexNumber("' +  '-7 - 5 i'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51730, 'ComplexNumber("' +  '-7 - 5*i'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51731, 'ComplexNumber("' +  '-7 - 5⋅i'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51732, 'ComplexNumber("' +  '-7 - 5 j'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51733, 'ComplexNumber("' +  '-7 - 5*j'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51734, 'ComplexNumber("' +  '-7 - 5⋅j'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51735, 'ComplexNumber("' +  '-7 - 5 I'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51736, 'ComplexNumber("' +  '-7 - 5*I'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51737, 'ComplexNumber("' +  '-7 - 5⋅I'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51738, 'ComplexNumber("' +  '-7 - 5 J'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51739, 'ComplexNumber("' +  '-7 - 5*J'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51740, 'ComplexNumber("' +  '-7 - 5⋅J'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}51741, 'ComplexNumber("' +  '53.24 + 4.27 i'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51742, 'ComplexNumber("' +  '53.24 + 4.27*i'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51743, 'ComplexNumber("' +  '53.24 + 4.27⋅i'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51744, 'ComplexNumber("' +  '53.24 - 4.27 i'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51745, 'ComplexNumber("' +  '53.24 - 4.27*i'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51746, 'ComplexNumber("' +  '53.24 - 4.27⋅i'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51747, 'ComplexNumber("' +  '-53.24 + 4.27 i'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51748, 'ComplexNumber("' +  '-53.24 + 4.27*i'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51749, 'ComplexNumber("' +  '-53.24 + 4.27⋅i'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51750, 'ComplexNumber("' +  '-53.24 - 4.27 i'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51751, 'ComplexNumber("' +  '-53.24 - 4.27*i'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51752, 'ComplexNumber("' +  '-53.24 - 4.27⋅i'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51753, 'ComplexNumber("' +  '53.24 + 4.27 j'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51754, 'ComplexNumber("' +  '53.24 + 4.27*j'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51755, 'ComplexNumber("' +  '53.24 + 4.27⋅j'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51756, 'ComplexNumber("' +  '53.24 - 4.27 j'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51757, 'ComplexNumber("' +  '53.24 - 4.27*j'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51758, 'ComplexNumber("' +  '53.24 - 4.27⋅j'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51759, 'ComplexNumber("' +  '-53.24 + 4.27 j'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51760, 'ComplexNumber("' +  '-53.24 + 4.27*j'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51761, 'ComplexNumber("' +  '-53.24 + 4.27⋅j'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51762, 'ComplexNumber("' +  '-53.24 - 4.27 j'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51763, 'ComplexNumber("' +  '-53.24 - 4.27*j'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51764, 'ComplexNumber("' +  '-53.24 - 4.27⋅j'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51765, 'ComplexNumber("' +  '53.24 + 4.27 I'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51766, 'ComplexNumber("' +  '53.24 + 4.27*I'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51767, 'ComplexNumber("' +  '53.24 + 4.27⋅I'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51768, 'ComplexNumber("' +  '53.24 - 4.27 I'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51769, 'ComplexNumber("' +  '53.24 - 4.27*I'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51770, 'ComplexNumber("' +  '53.24 - 4.27⋅I'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51771, 'ComplexNumber("' +  '-53.24 + 4.27 I'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51772, 'ComplexNumber("' +  '-53.24 + 4.27*I'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51773, 'ComplexNumber("' +  '-53.24 + 4.27⋅I'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51774, 'ComplexNumber("' +  '-53.24 - 4.27 I'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51775, 'ComplexNumber("' +  '-53.24 - 4.27*I'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51776, 'ComplexNumber("' +  '-53.24 - 4.27⋅I'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51777, 'ComplexNumber("' +  '53.24 + 4.27 J'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51778, 'ComplexNumber("' +  '53.24 + 4.27*J'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51779, 'ComplexNumber("' +  '53.24 + 4.27⋅J'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}51780, 'ComplexNumber("' +  '53.24 - 4.27 J'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51781, 'ComplexNumber("' +  '53.24 - 4.27*J'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51782, 'ComplexNumber("' +  '53.24 - 4.27⋅J'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}51783, 'ComplexNumber("' +  '-53.24 + 4.27 J'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51784, 'ComplexNumber("' +  '-53.24 + 4.27*J'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51785, 'ComplexNumber("' +  '-53.24 + 4.27⋅J'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}51786, 'ComplexNumber("' +  '-53.24 - 4.27 J'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51787, 'ComplexNumber("' +  '-53.24 - 4.27*J'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51788, 'ComplexNumber("' +  '-53.24 - 4.27⋅J'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}51789, 'ComplexNumber("' +  '1 + 2 + 3 + 4 + 5 + 6 + i + j'                       + '")',  ASC(21, 2)                 );
  Test({LINENUM}51790, 'ComplexNumber("' +  '1 + 2 + 3 + 4 + 5 + 6 + i + 10j'                     + '")',  ASC(21, 11)                 );
  Test({LINENUM}51791, 'ComplexNumber("' +  '1.0 + 2. + 3e0 + 4.0e+0 + 5.e-0 + 6e00 + i + 10e0j'  + '")',  ASC(21, 11)                 );
  Eps; Test({LINENUM}51792, 'ComplexNumber("' +  '1.001 + 5.321⋅i - 0.2 + i - 55*J'                    + '")',  ASC(0.801, -48.679)        );
  Test({LINENUM}51793, 'ComplexNumber("' +  '0'                                                   + '")',  ASC(0, 0)                  );
  Test({LINENUM}51794, 'ComplexNumber("' +  '0.0'                                                 + '")',  ASC(0, 0)                  );
  Test({LINENUM}51795, 'ComplexNumber("' +  '-0'                                                  + '")',  ASC(0, 0)                  );
  Test({LINENUM}51796, 'ComplexNumber("' +  '-0.0'                                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}51797, 'ComplexNumber("' +  '.0e0'                                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}51798, 'ComplexNumber("' +  '.0e-0'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51799, 'ComplexNumber("' +  '.0e-10'                                              + '")',  ASC(0, 0)                  );
  Test({LINENUM}51800, 'ComplexNumber("' +  '.0e+10'                                              + '")',  ASC(0, 0)                  );
  Test({LINENUM}51801, 'ComplexNumber("' +  '.0e+10j'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}51802, 'ComplexNumber("' +  '-.0e0'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51803, 'ComplexNumber("' +  '-.0e-0'                                              + '")',  ASC(0, 0)                  );
  Test({LINENUM}51804, 'ComplexNumber("' +  '-.0e-10'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}51805, 'ComplexNumber("' +  '-.0e+10'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}51806, 'ComplexNumber("' +  '-.0e+10j'                                            + '")',  ASC(0, 0)                  );
  Test({LINENUM}51807, 'ComplexNumber("' +  '+.0e+10'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}51808, 'ComplexNumber("' +  '+.0e+10j'                                            + '")',  ASC(0, 0)                  );
  Test({LINENUM}51809, 'ComplexNumber("' +  '1'                                                   + '")',  ASC(1, 0)                  );
  Test({LINENUM}51810, 'ComplexNumber("' +  '1.0'                                                 + '")',  ASC(1, 0)                  );
  Test({LINENUM}51811, 'ComplexNumber("' +  '1.0E0'                                               + '")',  ASC(1, 0)                  );
  Test({LINENUM}51812, 'ComplexNumber("' +  '1.0e0'                                               + '")',  ASC(1, 0)                  );
  Test({LINENUM}51813, 'ComplexNumber("' +  '1.0E+0'                                              + '")',  ASC(1, 0)                  );
  Test({LINENUM}51814, 'ComplexNumber("' +  '1.0e+0'                                              + '")',  ASC(1, 0)                  );
  Test({LINENUM}51815, 'ComplexNumber("' +  '1.0E-0'                                              + '")',  ASC(1, 0)                  );
  Test({LINENUM}51816, 'ComplexNumber("' +  '1.0e-0'                                              + '")',  ASC(1, 0)                  );
  Test({LINENUM}51817, 'ComplexNumber("' +  '-1'                                                  + '")',  ASC(-1, 0)                 );
  Test({LINENUM}51818, 'ComplexNumber("' +  '-1.0'                                                + '")',  ASC(-1, 0)                 );
  Test({LINENUM}51819, 'ComplexNumber("' +  '-1.0E0'                                              + '")',  ASC(-1, 0)                 );
  Test({LINENUM}51820, 'ComplexNumber("' +  '-1.0e0'                                              + '")',  ASC(-1, 0)                 );
  Test({LINENUM}51821, 'ComplexNumber("' +  '-1.0E+0'                                             + '")',  ASC(-1, 0)                 );
  Test({LINENUM}51822, 'ComplexNumber("' +  '-1.0e+0'                                             + '")',  ASC(-1, 0)                 );
  Test({LINENUM}51823, 'ComplexNumber("' +  '-1.0E-0'                                             + '")',  ASC(-1, 0)                 );
  Test({LINENUM}51824, 'ComplexNumber("' +  '-1.0e-0'                                             + '")',  ASC(-1, 0)                 );
  Test({LINENUM}51825, 'ComplexNumber("' +  '26'                                                  + '")',  ASC(26, 0)                 );
  Test({LINENUM}51826, 'ComplexNumber("' +  '-2'                                                  + '")',  ASC(-2, 0)                 );
  Test({LINENUM}51827, 'ComplexNumber("' +  '3.9'                                                 + '")',  ASC(3.9, 0)                );
  Test({LINENUM}51828, 'ComplexNumber("' +  '-5.10'                                               + '")',  ASC(-5.1, 0)               );
  Test({LINENUM}51829, 'ComplexNumber("' +  '.8'                                                  + '")',  ASC(0.8, 0)                );
  Test({LINENUM}51830, 'ComplexNumber("' +  '-.7'                                                 + '")',  ASC(-0.7, 0)               );
  Test({LINENUM}51831, 'ComplexNumber("' +  '5.'                                                  + '")',  ASC(5, 0)                  );
  Test({LINENUM}51832, 'ComplexNumber("' +  '-99.'                                                + '")',  ASC(-99, 0)                );
  Test({LINENUM}51833, 'ComplexNumber("' +  '5.3E3'                                               + '")',  ASC(5300, 0)               );
  Test({LINENUM}51834, 'ComplexNumber("' +  '-10e-1'                                              + '")',  ASC(-1, 0)                 );
  Test({LINENUM}51835, 'ComplexNumber("' +  '1E6'                                                 + '")',  ASC(1000000, 0)            );
  Test({LINENUM}51836, 'ComplexNumber("' +  '-1.2E-6'                                             + '")',  ASC(-0.0000012, 0)         );
  Test({LINENUM}51837, 'ComplexNumber("' +  '0i'                                                  + '")',  ASC(0, 0)                  );
  Test({LINENUM}51838, 'ComplexNumber("' +  '0+0i'                                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}51839, 'ComplexNumber("' +  ' 0.0000E0 + 0.000 i '                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}51840, 'ComplexNumber("' +  '-0-0.0i'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}51841, 'ComplexNumber("' +  '0-.0i'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51842, 'ComplexNumber("' +  '0+0.i'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51843, 'ComplexNumber("' +  'i'                                                   + '")',  ASC(0, 1)                  );
  Test({LINENUM}51844, 'ComplexNumber("' +  '-i'                                                  + '")',  ASC(0, -1)                 );
  Test({LINENUM}51845, 'ComplexNumber("' +  '7i'                                                  + '")',  ASC(0, 7)                  );
  Test({LINENUM}51846, 'ComplexNumber("' +  '-55i'                                                + '")',  ASC(0, -55)                );
  Test({LINENUM}51847, 'ComplexNumber("' +  '4.3i'                                                + '")',  ASC(0, 4.3)                );
  Test({LINENUM}51848, 'ComplexNumber("' +  '-99.2i'                                              + '")',  ASC(0, -99.2)              );
  Test({LINENUM}51849, 'ComplexNumber("' +  '0.5i'                                                + '")',  ASC(0, 0.5)                );
  Test({LINENUM}51850, 'ComplexNumber("' +  '.5i'                                                 + '")',  ASC(0, 0.5)                );
  Test({LINENUM}51851, 'ComplexNumber("' +  '-.9i'                                                + '")',  ASC(0, -0.9)               );
  Test({LINENUM}51852, 'ComplexNumber("' +  '1+i'                                                 + '")',  ASC(1, 1)                  );
  Test({LINENUM}51853, 'ComplexNumber("' +  '1-i'                                                 + '")',  ASC(1, -1)                 );
  Test({LINENUM}51854, 'ComplexNumber("' +  '-7-8i'                                               + '")',  ASC(-7, -8)                );
  Test({LINENUM}51855, 'ComplexNumber("' +  '1+2i'                                                + '")',  ASC(1, 2)                  );
  Test({LINENUM}51856, 'ComplexNumber("' +  '2-9.2i'                                              + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51857, 'ComplexNumber("' +  '0+.92i'                                              + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51858, 'ComplexNumber("' +  '0-55.i'                                              + '")',  ASC(0, -55)                );
  Test({LINENUM}51859, 'ComplexNumber("' +  '0.2-55.2i'                                           + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51860, 'ComplexNumber("' +  '100+800i'                                            + '")',  ASC(100, 800)              );
  Test({LINENUM}51861, 'ComplexNumber("' +  '2E4-0.2E2 i'                                         + '")',  ASC(20000, -20)            );
  Test({LINENUM}51862, 'ComplexNumber("' +  '1 + i'                                               + '")',  ASC(1, 1)                  );
  Test({LINENUM}51863, 'ComplexNumber("' +  '1 - i'                                               + '")',  ASC(1, -1)                 );
  Test({LINENUM}51864, 'ComplexNumber("' +  '-7 - 8i'                                             + '")',  ASC(-7, -8)                );
  Test({LINENUM}51865, 'ComplexNumber("' +  '2 - 9.2 i'                                           + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51866, 'ComplexNumber("' +  '0 + .92 i'                                           + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51867, 'ComplexNumber("' +  '0 - 55. i'                                           + '")',  ASC(0, -55)                );
  Test({LINENUM}51868, 'ComplexNumber("' +  '0.2 - 55.2 i'                                        + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51869, 'ComplexNumber("' +  '100 + 800i'                                          + '")',  ASC(100, 800)              );
  Test({LINENUM}51870, 'ComplexNumber("' +  '2E4 - 0.2E2i'                                        + '")',  ASC(20000, -20)            );
  Test({LINENUM}51871, 'ComplexNumber("' +  '  1  +  i'                                           + '")',  ASC(1, 1)                  );
  Test({LINENUM}51872, 'ComplexNumber("' +  ' 1 - i  '                                            + '")',  ASC(1, -1)                 );
  Test({LINENUM}51873, 'ComplexNumber("' +  '-7   - 8i '                                          + '")',  ASC(-7, -8)                );
  Test({LINENUM}51874, 'ComplexNumber("' +  '2  -  9.2 i'                                         + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51875, 'ComplexNumber("' +  '   0   +.92  i'                                      + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51876, 'ComplexNumber("' +  '0-  55.i'                                            + '")',  ASC(0, -55)                );
  Test({LINENUM}51877, 'ComplexNumber("' +  ' 0.2  -  55.2i'                                      + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51878, 'ComplexNumber("' +  '    100   +   800   i   '                            + '")',  ASC(100, 800)              );
  Test({LINENUM}51879, 'ComplexNumber("' +  '2E4  -    0.2E2 i'                                   + '")',  ASC(20000, -20)            );
  Test({LINENUM}51880, 'ComplexNumber("' +  '0*i'                                                 + '")',  ASC(0, 0)                  );
  Test({LINENUM}51881, 'ComplexNumber("' +  '0+0*i'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51882, 'ComplexNumber("' +  ' 0.0000E0 + 0.000 *i '                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51883, 'ComplexNumber("' +  '-0-0.0*i'                                            + '")',  ASC(0, 0)                  );
  Test({LINENUM}51884, 'ComplexNumber("' +  '0-.0*i'                                              + '")',  ASC(0, 0)                  );
  Test({LINENUM}51885, 'ComplexNumber("' +  '0+0.*i'                                              + '")',  ASC(0, 0)                  );
  Test({LINENUM}51886, 'ComplexNumber("' +  '7*i'                                                 + '")',  ASC(0, 7)                  );
  Test({LINENUM}51887, 'ComplexNumber("' +  '-55*i'                                               + '")',  ASC(0, -55)                );
  Test({LINENUM}51888, 'ComplexNumber("' +  '4.3*i'                                               + '")',  ASC(0, 4.3)                );
  Test({LINENUM}51889, 'ComplexNumber("' +  '-99.2*i'                                             + '")',  ASC(0, -99.2)              );
  Test({LINENUM}51890, 'ComplexNumber("' +  '0.5*i'                                               + '")',  ASC(0, 0.5)                );
  Test({LINENUM}51891, 'ComplexNumber("' +  '-.9*i'                                               + '")',  ASC(0, -0.9)               );
  Test({LINENUM}51892, 'ComplexNumber("' +  '-7-8*i'                                              + '")',  ASC(-7, -8)                );
  Test({LINENUM}51893, 'ComplexNumber("' +  '2-9.2*i'                                             + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51894, 'ComplexNumber("' +  '0+.92*i'                                             + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51895, 'ComplexNumber("' +  '0-55.*i'                                             + '")',  ASC(0, -55)                );
  Test({LINENUM}51896, 'ComplexNumber("' +  '0.2-55.2*i'                                          + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51897, 'ComplexNumber("' +  '100+800*i'                                           + '")',  ASC(100, 800)              );
  Test({LINENUM}51898, 'ComplexNumber("' +  '2E4-0.2E2 *i'                                        + '")',  ASC(20000, -20)            );
  Test({LINENUM}51899, 'ComplexNumber("' +  '-7 - 8*i'                                            + '")',  ASC(-7, -8)                );
  Test({LINENUM}51900, 'ComplexNumber("' +  '2 - 9.2 *i'                                          + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51901, 'ComplexNumber("' +  '0 + .92 *i'                                          + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51902, 'ComplexNumber("' +  '0 - 55. *i'                                          + '")',  ASC(0, -55)                );
  Test({LINENUM}51903, 'ComplexNumber("' +  '0.2 - 55.2 *i'                                       + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51904, 'ComplexNumber("' +  '100 + 800*i'                                         + '")',  ASC(100, 800)              );
  Test({LINENUM}51905, 'ComplexNumber("' +  '2E4 - 0.2E2*i'                                       + '")',  ASC(20000, -20)            );
  Test({LINENUM}51906, 'ComplexNumber("' +  '-7   - 8*i '                                         + '")',  ASC(-7, -8)                );
  Test({LINENUM}51907, 'ComplexNumber("' +  '2  -  9.2 *i'                                        + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51908, 'ComplexNumber("' +  '   0   +.92  *i'                                     + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51909, 'ComplexNumber("' +  '0-  55.*i'                                           + '")',  ASC(0, -55)                );
  Test({LINENUM}51910, 'ComplexNumber("' +  ' 0.2  -  55.2*i'                                     + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51911, 'ComplexNumber("' +  '    100   +   800   *i   '                           + '")',  ASC(100, 800)              );
  Test({LINENUM}51912, 'ComplexNumber("' +  '2E4  -    0.2E2 *i'                                  + '")',  ASC(20000, -20)            );
  Test({LINENUM}51913, 'ComplexNumber("' +  '0I'                                                  + '")',  ASC(0, 0)                  );
  Test({LINENUM}51914, 'ComplexNumber("' +  '0+0I'                                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}51915, 'ComplexNumber("' +  ' 0.0000E0 + 0.000 I '                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}51916, 'ComplexNumber("' +  '-0-0.0I'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}51917, 'ComplexNumber("' +  '0-.0I'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51918, 'ComplexNumber("' +  '0+0.I'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51919, 'ComplexNumber("' +  'I'                                                   + '")',  ASC(0, 1)                  );
  Test({LINENUM}51920, 'ComplexNumber("' +  '-I'                                                  + '")',  ASC(0, -1)                 );
  Test({LINENUM}51921, 'ComplexNumber("' +  '7I'                                                  + '")',  ASC(0, 7)                  );
  Test({LINENUM}51922, 'ComplexNumber("' +  '-55I'                                                + '")',  ASC(0, -55)                );
  Test({LINENUM}51923, 'ComplexNumber("' +  '4.3I'                                                + '")',  ASC(0, 4.3)                );
  Test({LINENUM}51924, 'ComplexNumber("' +  '-99.2I'                                              + '")',  ASC(0, -99.2)              );
  Test({LINENUM}51925, 'ComplexNumber("' +  '0.5I'                                                + '")',  ASC(0, 0.5)                );
  Test({LINENUM}51926, 'ComplexNumber("' +  '-.9I'                                                + '")',  ASC(0, -0.9)               );
  Test({LINENUM}51927, 'ComplexNumber("' +  '1+I'                                                 + '")',  ASC(1, 1)                  );
  Test({LINENUM}51928, 'ComplexNumber("' +  '1-I'                                                 + '")',  ASC(1, -1)                 );
  Test({LINENUM}51929, 'ComplexNumber("' +  '-7-8I'                                               + '")',  ASC(-7, -8)                );
  Test({LINENUM}51930, 'ComplexNumber("' +  '2-9.2I'                                              + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51931, 'ComplexNumber("' +  '0+.92I'                                              + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51932, 'ComplexNumber("' +  '0-55.I'                                              + '")',  ASC(0, -55)                );
  Test({LINENUM}51933, 'ComplexNumber("' +  '0.2-55.2I'                                           + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51934, 'ComplexNumber("' +  '100+800I'                                            + '")',  ASC(100, 800)              );
  Test({LINENUM}51935, 'ComplexNumber("' +  '2E4-0.2E2 I'                                         + '")',  ASC(20000, -20)            );
  Test({LINENUM}51936, 'ComplexNumber("' +  '1 + I'                                               + '")',  ASC(1, 1)                  );
  Test({LINENUM}51937, 'ComplexNumber("' +  '1 - I'                                               + '")',  ASC(1, -1)                 );
  Test({LINENUM}51938, 'ComplexNumber("' +  '-7 - 8I'                                             + '")',  ASC(-7, -8)                );
  Test({LINENUM}51939, 'ComplexNumber("' +  '2 - 9.2 I'                                           + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51940, 'ComplexNumber("' +  '0 + .92 I'                                           + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51941, 'ComplexNumber("' +  '0 - 55. I'                                           + '")',  ASC(0, -55)                );
  Test({LINENUM}51942, 'ComplexNumber("' +  '0.2 - 55.2 I'                                        + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51943, 'ComplexNumber("' +  '100 + 800I'                                          + '")',  ASC(100, 800)              );
  Test({LINENUM}51944, 'ComplexNumber("' +  '2E4 - 0.2E2I'                                        + '")',  ASC(20000, -20)            );
  Test({LINENUM}51945, 'ComplexNumber("' +  '  1  +  I'                                           + '")',  ASC(1, 1)                  );
  Test({LINENUM}51946, 'ComplexNumber("' +  ' 1 - I  '                                            + '")',  ASC(1, -1)                 );
  Test({LINENUM}51947, 'ComplexNumber("' +  '-7   - 8I '                                          + '")',  ASC(-7, -8)                );
  Test({LINENUM}51948, 'ComplexNumber("' +  '2  -  9.2 I'                                         + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51949, 'ComplexNumber("' +  '   0   +.92  I'                                      + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51950, 'ComplexNumber("' +  '0-  55.I'                                            + '")',  ASC(0, -55)                );
  Test({LINENUM}51951, 'ComplexNumber("' +  ' 0.2  -  55.2I'                                      + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51952, 'ComplexNumber("' +  '    100   +   800   I   '                            + '")',  ASC(100, 800)              );
  Test({LINENUM}51953, 'ComplexNumber("' +  '2E4  -    0.2E2 I'                                   + '")',  ASC(20000, -20)            );
  Test({LINENUM}51954, 'ComplexNumber("' +  '0 ⋅ I'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51955, 'ComplexNumber("' +  '0+0 ⋅ I'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}51956, 'ComplexNumber("' +  ' 0.0000E0 + 0.000  ⋅ I '                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}51957, 'ComplexNumber("' +  '-0-0.0 ⋅ I'                                          + '")',  ASC(0, 0)                  );
  Test({LINENUM}51958, 'ComplexNumber("' +  '0-.0 ⋅ I'                                            + '")',  ASC(0, 0)                  );
  Test({LINENUM}51959, 'ComplexNumber("' +  '0+0. ⋅ I'                                            + '")',  ASC(0, 0)                  );
  Test({LINENUM}51960, 'ComplexNumber("' +  '7 ⋅ I'                                               + '")',  ASC(0, 7)                  );
  Test({LINENUM}51961, 'ComplexNumber("' +  '-55 ⋅ I'                                             + '")',  ASC(0, -55)                );
  Test({LINENUM}51962, 'ComplexNumber("' +  '4.3 ⋅ I'                                             + '")',  ASC(0, 4.3)                );
  Test({LINENUM}51963, 'ComplexNumber("' +  '-99.2 ⋅ I'                                           + '")',  ASC(0, -99.2)              );
  Test({LINENUM}51964, 'ComplexNumber("' +  '0.5 ⋅ I'                                             + '")',  ASC(0, 0.5)                );
  Test({LINENUM}51965, 'ComplexNumber("' +  '-.9 ⋅ I'                                             + '")',  ASC(0, -0.9)               );
  Test({LINENUM}51966, 'ComplexNumber("' +  '-7-8 ⋅ I'                                            + '")',  ASC(-7, -8)                );
  Test({LINENUM}51967, 'ComplexNumber("' +  '2-9.2 ⋅ I'                                           + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51968, 'ComplexNumber("' +  '0+.92 ⋅ I'                                           + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51969, 'ComplexNumber("' +  '0-55. ⋅ I'                                           + '")',  ASC(0, -55)                );
  Test({LINENUM}51970, 'ComplexNumber("' +  '0.2-55.2 ⋅ I'                                        + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51971, 'ComplexNumber("' +  '100+800 ⋅ I'                                         + '")',  ASC(100, 800)              );
  Test({LINENUM}51972, 'ComplexNumber("' +  '2E4-0.2E2  ⋅ I'                                      + '")',  ASC(20000, -20)            );
  Test({LINENUM}51973, 'ComplexNumber("' +  '-7 - 8 ⋅ I'                                          + '")',  ASC(-7, -8)                );
  Test({LINENUM}51974, 'ComplexNumber("' +  '2 - 9.2  ⋅ I'                                        + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51975, 'ComplexNumber("' +  '0 + .92  ⋅ I'                                        + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51976, 'ComplexNumber("' +  '0 - 55.  ⋅ I'                                        + '")',  ASC(0, -55)                );
  Test({LINENUM}51977, 'ComplexNumber("' +  '0.2 - 55.2  ⋅ I'                                     + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51978, 'ComplexNumber("' +  '100 + 800 ⋅ I'                                       + '")',  ASC(100, 800)              );
  Test({LINENUM}51979, 'ComplexNumber("' +  '2E4 - 0.2E2 ⋅ I'                                     + '")',  ASC(20000, -20)            );
  Test({LINENUM}51980, 'ComplexNumber("' +  '-7   - 8 ⋅ I '                                       + '")',  ASC(-7, -8)                );
  Test({LINENUM}51981, 'ComplexNumber("' +  '2  -  9.2  ⋅ I'                                      + '")',  ASC(2, -9.2)               );
  Test({LINENUM}51982, 'ComplexNumber("' +  '   0   +.92   ⋅ I'                                   + '")',  ASC(0, 0.92)               );
  Test({LINENUM}51983, 'ComplexNumber("' +  '0-  55. ⋅ I'                                         + '")',  ASC(0, -55)                );
  Test({LINENUM}51984, 'ComplexNumber("' +  ' 0.2  -  55.2 ⋅ I'                                   + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}51985, 'ComplexNumber("' +  '    100   +   800    ⋅ I   '                         + '")',  ASC(100, 800)              );
  Test({LINENUM}51986, 'ComplexNumber("' +  '2E4  -    0.2E2  ⋅ I'                                + '")',  ASC(20000, -20)            );
  Test({LINENUM}51987, 'ComplexNumber("' +  '0j'                                                  + '")',  ASC(0, 0)                  );
  Test({LINENUM}51988, 'ComplexNumber("' +  '0+0j'                                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}51989, 'ComplexNumber("' +  ' 0.0000E0 + 0.000 j '                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}51990, 'ComplexNumber("' +  '-0-0.0j'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}51991, 'ComplexNumber("' +  '0-.0j'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51992, 'ComplexNumber("' +  '0+0.j'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}51993, 'ComplexNumber("' +  'j'                                                   + '")',  ASC(0, 1)                  );
  Test({LINENUM}51994, 'ComplexNumber("' +  '-j'                                                  + '")',  ASC(0, -1)                 );
  Test({LINENUM}51995, 'ComplexNumber("' +  '7j'                                                  + '")',  ASC(0, 7)                  );
  Test({LINENUM}51996, 'ComplexNumber("' +  '-55j'                                                + '")',  ASC(0, -55)                );
  Test({LINENUM}51997, 'ComplexNumber("' +  '4.3j'                                                + '")',  ASC(0, 4.3)                );
  Test({LINENUM}51998, 'ComplexNumber("' +  '-99.2j'                                              + '")',  ASC(0, -99.2)              );
  Test({LINENUM}51999, 'ComplexNumber("' +  '0.5j'                                                + '")',  ASC(0, 0.5)                );
  Test({LINENUM}52000, 'ComplexNumber("' +  '-.9j'                                                + '")',  ASC(0, -0.9)               );
  Test({LINENUM}52001, 'ComplexNumber("' +  '1+j'                                                 + '")',  ASC(1, 1)                  );
  Test({LINENUM}52002, 'ComplexNumber("' +  '1-j'                                                 + '")',  ASC(1, -1)                 );
  Test({LINENUM}52003, 'ComplexNumber("' +  '-7-8j'                                               + '")',  ASC(-7, -8)                );
  Test({LINENUM}52004, 'ComplexNumber("' +  '2-9.2j'                                              + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52005, 'ComplexNumber("' +  '0+.92j'                                              + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52006, 'ComplexNumber("' +  '0-55.j'                                              + '")',  ASC(0, -55)                );
  Test({LINENUM}52007, 'ComplexNumber("' +  '0.2-55.2j'                                           + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52008, 'ComplexNumber("' +  '100+800j'                                            + '")',  ASC(100, 800)              );
  Test({LINENUM}52009, 'ComplexNumber("' +  '2E4-0.2E2 j'                                         + '")',  ASC(20000, -20)            );
  Test({LINENUM}52010, 'ComplexNumber("' +  '1 + j'                                               + '")',  ASC(1, 1)                  );
  Test({LINENUM}52011, 'ComplexNumber("' +  '1 - j'                                               + '")',  ASC(1, -1)                 );
  Test({LINENUM}52012, 'ComplexNumber("' +  '-7 - 8j'                                             + '")',  ASC(-7, -8)                );
  Test({LINENUM}52013, 'ComplexNumber("' +  '2 - 9.2 j'                                           + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52014, 'ComplexNumber("' +  '0 + .92 j'                                           + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52015, 'ComplexNumber("' +  '0 - 55. j'                                           + '")',  ASC(0, -55)                );
  Test({LINENUM}52016, 'ComplexNumber("' +  '0.2 - 55.2 j'                                        + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52017, 'ComplexNumber("' +  '100 + 800j'                                          + '")',  ASC(100, 800)              );
  Test({LINENUM}52018, 'ComplexNumber("' +  '2E4 - 0.2E2j'                                        + '")',  ASC(20000, -20)            );
  Test({LINENUM}52019, 'ComplexNumber("' +  '  1  +  j'                                           + '")',  ASC(1, 1)                  );
  Test({LINENUM}52020, 'ComplexNumber("' +  ' 1 - j  '                                            + '")',  ASC(1, -1)                 );
  Test({LINENUM}52021, 'ComplexNumber("' +  '-7   - 8j '                                          + '")',  ASC(-7, -8)                );
  Test({LINENUM}52022, 'ComplexNumber("' +  '2  -  9.2 j'                                         + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52023, 'ComplexNumber("' +  '   0   +.92  j'                                      + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52024, 'ComplexNumber("' +  '0-  55.j'                                            + '")',  ASC(0, -55)                );
  Test({LINENUM}52025, 'ComplexNumber("' +  ' 0.2  -  55.2j'                                      + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52026, 'ComplexNumber("' +  '    100   +   800   j   '                            + '")',  ASC(100, 800)              );
  Test({LINENUM}52027, 'ComplexNumber("' +  '2E4  -    0.2E2 j'                                   + '")',  ASC(20000, -20)            );
  Test({LINENUM}52028, 'ComplexNumber("' +  '1+1'                                                 + '")',  ASC(2, 0)                  );
  Eps; Test({LINENUM}52029, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10 - 2 - 2 - 1'       + '")',  ASC(1, 0)                  );
  Test({LINENUM}52030, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10i - 2 - 2 - 1'      + '")',  ASC(11, -10)               );
  Test({LINENUM}52031, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10j - 2 - 2 - 1'      + '")',  ASC(11, -10)               );
  Test({LINENUM}52032, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10I - 2 - 2 - 1'      + '")',  ASC(11, -10)               );
  Test({LINENUM}52033, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10J - 2 - 2 - 1'      + '")',  ASC(11, -10)               );
  Test({LINENUM}52034, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10⋅i - 2 - 2 - 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52035, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10⋅j - 2 - 2 - 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52036, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10⋅I - 2 - 2 - 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52037, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10⋅J - 2 - 2 - 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52038, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10*i - 2 - 2 - 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52039, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10*j - 2 - 2 - 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52040, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10*I - 2 - 2 - 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52041, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10*J - 2 - 2 - 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52042, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10 ⋅ i - 2 - 2 - 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52043, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10 ⋅ j - 2 - 2 - 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52044, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10 ⋅ I - 2 - 2 - 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52045, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10 ⋅ J - 2 - 2 - 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52046, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10 * i - 2 - 2 - 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52047, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10 * j - 2 - 2 - 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52048, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10 * I - 2 - 2 - 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52049, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 - 0.4 - 0.4 - 10 * J - 2 - 2 - 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52050, 'ComplexNumber("' +  '1+i-2-2i'                                            + '")',  ASC(-1, -1)                );
  Test({LINENUM}52051, 'ComplexNumber("' +  '4.2+i-0.2i'                                          + '")',  ASC(4.2, 0.8)              );
  Test({LINENUM}52052, 'ComplexNumber("' +  '5 - 3*i'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52053, 'ComplexNumber("' +  '-3*i + 5'                                            + '")',  ASC(5, -3)                 );
  Test({LINENUM}52054, 'ComplexNumber("' +  '+ 5 - 3*i'                                           + '")',  ASC(5, -3)                 );
  Test({LINENUM}52055, 'ComplexNumber("' +  '- 3*i+5'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52056, 'ComplexNumber("' +  '- 3 * i   +    5 '                                   + '")',  ASC(5, -3)                 );
  Test({LINENUM}52057, 'ComplexNumber("' +  '- .3e+1*i+5.0E-0'                                    + '")',  ASC(5, -3)                 );
  Test({LINENUM}52058, 'ComplexNumber("' +  '5 - 3⋅i'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52059, 'ComplexNumber("' +  '-3⋅i + 5'                                            + '")',  ASC(5, -3)                 );
  Test({LINENUM}52060, 'ComplexNumber("' +  '+ 5 - 3⋅i'                                           + '")',  ASC(5, -3)                 );
  Test({LINENUM}52061, 'ComplexNumber("' +  '- 3⋅i+5'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52062, 'ComplexNumber("' +  '- 3 ⋅ i   +    5 '                                   + '")',  ASC(5, -3)                 );
  Test({LINENUM}52063, 'ComplexNumber("' +  '- .3e+1⋅i+5.0E-0'                                    + '")',  ASC(5, -3)                 );
  Test({LINENUM}52064, 'ComplexNumber("' +  '5 - 3⋅j'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52065, 'ComplexNumber("' +  '-3⋅j + 5'                                            + '")',  ASC(5, -3)                 );
  Test({LINENUM}52066, 'ComplexNumber("' +  '+ 5 - 3⋅j'                                           + '")',  ASC(5, -3)                 );
  Test({LINENUM}52067, 'ComplexNumber("' +  '- 3⋅j+5'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52068, 'ComplexNumber("' +  '- 3 ⋅ j   +    5 '                                   + '")',  ASC(5, -3)                 );
  Test({LINENUM}52069, 'ComplexNumber("' +  '- .3e+1⋅j+5.0E-0'                                    + '")',  ASC(5, -3)                 );
  Test({LINENUM}52070, 'ComplexNumber("' +  '5 - 3*i'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52071, 'ComplexNumber("' +  '-3*i + 5'                                            + '")',  ASC(5, -3)                 );
  Test({LINENUM}52072, 'ComplexNumber("' +  '+ 5 - 3*i'                                           + '")',  ASC(5, -3)                 );
  Test({LINENUM}52073, 'ComplexNumber("' +  '- 3*i+5'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52074, 'ComplexNumber("' +  '- 3 * i   +    5 '                                   + '")',  ASC(5, -3)                 );
  Test({LINENUM}52075, 'ComplexNumber("' +  '- .3e+1*i+5.0E-0'                                    + '")',  ASC(5, -3)                 );
  Test({LINENUM}52076, 'ComplexNumber("' +  '5 - 3*I'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52077, 'ComplexNumber("' +  '-3*J + 5'                                            + '")',  ASC(5, -3)                 );
  Test({LINENUM}52078, 'ComplexNumber("' +  '+ 5 - 3⋅i'                                           + '")',  ASC(5, -3)                 );
  Test({LINENUM}52079, 'ComplexNumber("' +  '- 3⋅J+5'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52080, 'ComplexNumber("' +  '- 3 J   +    5 '                                     + '")',  ASC(5, -3)                 );
  Test({LINENUM}52081, 'ComplexNumber("' +  '- .3e+1⋅I+5.E+0'                                     + '")',  ASC(5, -3)                 );
  Test({LINENUM}52082, 'ComplexNumber("' +  'i - 1'                                               + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52083, 'ComplexNumber("' +  'i - 1.0'                                             + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52084, 'ComplexNumber("' +  '+1i - 1e0'                                           + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52085, 'ComplexNumber("' +  '1.0 * i - 1'                                         + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52086, 'ComplexNumber("' +  '1.0 ⋅ i - 1'                                         + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52087, 'ComplexNumber("' +  '1.0 ⋅ j - 1'                                         + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52088, 'ComplexNumber("' +  '1.0 ⋅ I - 1'                                         + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52089, 'ComplexNumber("' +  '1.0 ⋅ J - 1'                                         + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52090, 'ComplexNumber("' +  '1.0 i - 1'                                           + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52091, 'ComplexNumber("' +  '1.0 I - 1'                                           + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52092, 'ComplexNumber("' +  '1.0 j - 1'                                           + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52093, 'ComplexNumber("' +  '1. J - 1'                                            + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52094, 'ComplexNumber("' +  '7+3.22i'                                             + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52095, 'ComplexNumber("' +  '7 + 3.22i'                                           + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52096, 'ComplexNumber("' +  '7 + 3.22*i'                                          + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52097, 'ComplexNumber("' +  '7 + 3.22 * i'                                        + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52098, 'ComplexNumber("' +  '7 + 3.22i'                                           + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52099, 'ComplexNumber("' +  '7 + 3.22⋅i'                                          + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52100, 'ComplexNumber("' +  '7 + 3.22 ⋅ i'                                        + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52101, 'ComplexNumber("' +  '7+3.22j'                                             + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52102, 'ComplexNumber("' +  '7 + 3.22j'                                           + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52103, 'ComplexNumber("' +  '7 + 3.22*j'                                          + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52104, 'ComplexNumber("' +  '7 + 3.22 * j'                                        + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52105, 'ComplexNumber("' +  '7 + 3.22j'                                           + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52106, 'ComplexNumber("' +  '7 + 3.22⋅j'                                          + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52107, 'ComplexNumber("' +  '7 + 3.22 ⋅ j'                                        + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52108, 'ComplexNumber("' +  '7+3.22I'                                             + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52109, 'ComplexNumber("' +  '+7+3.22I'                                            + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52110, 'ComplexNumber("' +  '7.e0 + 3.22E0j'                                      + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52111, 'ComplexNumber("' +  '1e1i'                                                + '")',  ASC(0, 10)                 );
  Test({LINENUM}52112, 'ComplexNumber("' +  '+1.0e+1*i'                                           + '")',  ASC(0, 10)                 );
  Test({LINENUM}52113, 'ComplexNumber("' +  '+1.0e+1*i-0.0e0'                                     + '")',  ASC(0, 10)                 );
  Test({LINENUM}52114, 'ComplexNumber("' +  '+1.0e+1⋅J-0.0E+0'                                    + '")',  ASC(0, 10)                 );
  Test({LINENUM}52115, 'ComplexNumber("' +  '+1.0000000000e+1*i-0.00000000000e00000'              + '")',  ASC(0, 10)                 );
  Test({LINENUM}52116, 'ComplexNumber("' +  '5.325632e22 + .25587i'                               + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52117, 'ComplexNumber("' +  '5.325632e22 - .25587i'                               + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52118, 'ComplexNumber("' +  '.25587i + 5.325632e22'                               + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52119, 'ComplexNumber("' +  '-.25587i + 5.325632e22'                              + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52120, 'ComplexNumber("' +  '.25587i+5.325632e22'                                 + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52121, 'ComplexNumber("' +  '0.25587i+5.325632e22'                                + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52122, 'ComplexNumber("' +  '+.25587i+5.325632e22'                                + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52123, 'ComplexNumber("' +  '-.25587i+5.325632e22'                                + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52124, 'ComplexNumber("' +  '+0.25587i+5.325632e22'                               + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52125, 'ComplexNumber("' +  '-0.25587i+5.325632e22'                               + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52126, 'ComplexNumber("' +  '5.325632e22 + .25587*I'                              + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52127, 'ComplexNumber("' +  '5.325632e22 - .25587*I'                              + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52128, 'ComplexNumber("' +  '5.325632e22 - .25587*I'                              + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52129, 'ComplexNumber("' +  '5.325632e22 - .25587*I'                              + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52130, 'ComplexNumber("' +  '.25587*I + 5.325632e22'                              + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52131, 'ComplexNumber("' +  #9'-.25587*I + 5.325632e22'                           + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52132, 'ComplexNumber("' +  '.25587*I+5.325632e22'                                + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52133, 'ComplexNumber("' +  '0.25587*I+5.325632e22'                               + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52134, 'ComplexNumber("' +  '+.25587*I+5.325632e22'                               + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52135, 'ComplexNumber("' +  '-.25587*I+5.325632e22'                               + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52136, 'ComplexNumber("' +  '+0.25587*I+5.325632e22'                              + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52137, 'ComplexNumber("' +  '-0.25587*I+5.325632e22'                              + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52138, 'ComplexNumber("' +  '-0.25587*I+5.325632e22 - 2i'                         + '")',  ASC(5.325632e22, -2.25587) );
  Test({LINENUM}52139, 'ComplexNumber("' +  '-0.25587*I+5.325632e22 - 2i + 0.1e-100'              + '")',  ASC(5.325632e22, -2.25587) );
  Test({LINENUM}52140, 'ComplexNumber("' +  '-0.25587*I+5.325632e22 - 2i + 0.1e-100'              + '")',  ASC(5.325632e22, -2.25587) );
  Test({LINENUM}52141, 'ComplexNumber("' +  #13#10#9'-0.25587*I+5.325632e22 -2i'                  + '")',  ASC(5.325632e22, -2.25587) );
  Test({LINENUM}52142, 'ComplexNumber("' +  '10'                                                  + '")',  ASC(10, 0)                 );
  Test({LINENUM}52143, 'ComplexNumber("' +  ' 10 '                                                + '")',  ASC(10, 0)                 );
  Test({LINENUM}52144, 'ComplexNumber("' +  '  10  '                                              + '")',  ASC(10, 0)                 );
  Test({LINENUM}52145, 'ComplexNumber("' +  '  10  '                                              + '")',  ASC(10, 0)                 );
  Test({LINENUM}52146, 'ComplexNumber("' +  '10'                                                  + '")',  ASC(10, 0)                 );
  Test({LINENUM}52147, 'ComplexNumber("' +  #9'10'                                                + '")',  ASC(10, 0)                 );
  Test({LINENUM}52148, 'ComplexNumber("' +  #13#10'10'                                            + '")',  ASC(10, 0)                 );
  Test({LINENUM}52149, 'ComplexNumber("' +  #13#10'i '                                            + '")',  ASC(0, 1)                  );
  Test({LINENUM}52150, 'ComplexNumber("' +  #9'10'                                                + '")',  ASC(10, 0)                 );
  Test({LINENUM}52151, 'ComplexNumber("' +  '10+i'                                                + '")',  ASC(10, 1)                 );
  Test({LINENUM}52152, 'ComplexNumber("' +  '11+i'                                                + '")',  ASC(11, 1)                 );
  Test({LINENUM}52153, 'ComplexNumber("' +  '11i'                                                 + '")',  ASC(0, 11)                 );
  Test({LINENUM}52154, 'ComplexNumber("' +  '-5i + 3.1415'                                        + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52155, 'ComplexNumber("' +  '-5⋅i + 3.1415'                                       + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52156, 'ComplexNumber("' +  '-5⋅j + 3.1415'                                       + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52157, 'ComplexNumber("' +  '-5⋅I + 3.1415'                                       + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52158, 'ComplexNumber("' +  '-5⋅J + 3.1415'                                       + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52159, 'ComplexNumber("' +  '-5.0e0*I + 0.31415E1'                                + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52160, 'ComplexNumber("' +  '1e6 * i'                                             + '")',  ASC(0, 1E6)                );
  Test({LINENUM}52161, 'ComplexNumber("' +  '-1e6 * i'                                            + '")',  ASC(0, -1E6)               );
  Test({LINENUM}52162, 'ComplexNumber("' +  '1e-6 * i'                                            + '")',  ASC(0, 1E-6)               );
  Test({LINENUM}52163, 'ComplexNumber("' +  '-1e-6 * i'                                           + '")',  ASC(0, -1E-6)              );
  Test({LINENUM}52164, 'ComplexNumber("' +  '-1.0e6 * i'                                          + '")',  ASC(0, -1E6)               );
  Test({LINENUM}52165, 'ComplexNumber("' +  '-1.0e6 * i + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52166, 'ComplexNumber("' +  '1e6 ⋅ i'                                             + '")',  ASC(0, 1E6)                );
  Test({LINENUM}52167, 'ComplexNumber("' +  '-1e6 ⋅ i'                                            + '")',  ASC(0, -1E6)               );
  Test({LINENUM}52168, 'ComplexNumber("' +  '1e-6 ⋅ i'                                            + '")',  ASC(0, 1E-6)               );
  Test({LINENUM}52169, 'ComplexNumber("' +  '-1e-6 ⋅ i'                                           + '")',  ASC(0, -1E-6)              );
  Test({LINENUM}52170, 'ComplexNumber("' +  '-1.0e6 ⋅ i'                                          + '")',  ASC(0, -1E6)               );
  Test({LINENUM}52171, 'ComplexNumber("' +  '-1.0e6 ⋅ i + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52172, 'ComplexNumber("' +  '-1.0e6 ⋅ I + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52173, 'ComplexNumber("' +  '-1.0e6 ⋅ j + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52174, 'ComplexNumber("' +  '-1.0e6 ⋅ J + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52175, 'ComplexNumber("' +  '-1.0e6 ⋅ i'                                          + '")',  ASC(0, -1E6)               );
  Test({LINENUM}52176, 'ComplexNumber("' +  '-1.0e6   i + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52177, 'ComplexNumber("' +  '-1.0e6   I + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52178, 'ComplexNumber("' +  '-1.0e6   j + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Eps; Test({LINENUM}52179, 'ComplexNumber("' +  '-1.0e6   J + 78.90000000000000000000000000000000'    + '")',  ASC(78.9, -1E6)            );

  Test({LINENUM}52181, 'ComplexNumber("' +  '7 + 5 i'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52182, 'ComplexNumber("' +  '7 + 5*i'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52183, 'ComplexNumber("' +  '7 + 5⋅i'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52184, 'ComplexNumber("' +  '7 + 5 j'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52185, 'ComplexNumber("' +  '7 + 5*j'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52186, 'ComplexNumber("' +  '7 + 5⋅j'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52187, 'ComplexNumber("' +  '7 + 5 I'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52188, 'ComplexNumber("' +  '7 + 5*I'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52189, 'ComplexNumber("' +  '7 + 5⋅I'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52190, 'ComplexNumber("' +  '7 + 5 J'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52191, 'ComplexNumber("' +  '7 + 5*J'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52192, 'ComplexNumber("' +  '7 + 5⋅J'                                             + '")',  ASC(7, 5)                  );
  Test({LINENUM}52193, 'ComplexNumber("' +  '7 − 5 i'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52194, 'ComplexNumber("' +  '7 − 5*i'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52195, 'ComplexNumber("' +  '7 − 5⋅i'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52196, 'ComplexNumber("' +  '7 − 5 j'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52197, 'ComplexNumber("' +  '7 − 5*j'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52198, 'ComplexNumber("' +  '7 − 5⋅j'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52199, 'ComplexNumber("' +  '7 − 5 I'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52200, 'ComplexNumber("' +  '7 − 5*I'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52201, 'ComplexNumber("' +  '7 − 5⋅I'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52202, 'ComplexNumber("' +  '7 − 5 J'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52203, 'ComplexNumber("' +  '7 − 5*J'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52204, 'ComplexNumber("' +  '7 − 5⋅J'                                             + '")',  ASC(7, -5)                 );
  Test({LINENUM}52205, 'ComplexNumber("' +  '−7 + 5 i'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52206, 'ComplexNumber("' +  '−7 + 5*i'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52207, 'ComplexNumber("' +  '−7 + 5⋅i'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52208, 'ComplexNumber("' +  '−7 + 5 j'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52209, 'ComplexNumber("' +  '−7 + 5*j'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52210, 'ComplexNumber("' +  '−7 + 5⋅j'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52211, 'ComplexNumber("' +  '−7 + 5 I'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52212, 'ComplexNumber("' +  '−7 + 5*I'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52213, 'ComplexNumber("' +  '−7 + 5⋅I'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52214, 'ComplexNumber("' +  '−7 + 5 J'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52215, 'ComplexNumber("' +  '−7 + 5*J'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52216, 'ComplexNumber("' +  '−7 + 5⋅J'                                            + '")',  ASC(-7, 5)                 );
  Test({LINENUM}52217, 'ComplexNumber("' +  '−7 − 5 i'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52218, 'ComplexNumber("' +  '−7 − 5*i'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52219, 'ComplexNumber("' +  '−7 − 5⋅i'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52220, 'ComplexNumber("' +  '−7 − 5 j'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52221, 'ComplexNumber("' +  '−7 − 5*j'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52222, 'ComplexNumber("' +  '−7 − 5⋅j'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52223, 'ComplexNumber("' +  '−7 − 5 I'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52224, 'ComplexNumber("' +  '−7 − 5*I'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52225, 'ComplexNumber("' +  '−7 − 5⋅I'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52226, 'ComplexNumber("' +  '−7 − 5 J'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52227, 'ComplexNumber("' +  '−7 − 5*J'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52228, 'ComplexNumber("' +  '−7 − 5⋅J'                                            + '")',  ASC(-7, -5)                );
  Test({LINENUM}52229, 'ComplexNumber("' +  '53.24 + 4.27 i'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52230, 'ComplexNumber("' +  '53.24 + 4.27*i'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52231, 'ComplexNumber("' +  '53.24 + 4.27⋅i'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52232, 'ComplexNumber("' +  '53.24 − 4.27 i'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52233, 'ComplexNumber("' +  '53.24 − 4.27*i'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52234, 'ComplexNumber("' +  '53.24 − 4.27⋅i'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52235, 'ComplexNumber("' +  '−53.24 + 4.27 i'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52236, 'ComplexNumber("' +  '−53.24 + 4.27*i'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52237, 'ComplexNumber("' +  '−53.24 + 4.27⋅i'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52238, 'ComplexNumber("' +  '−53.24 − 4.27 i'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52239, 'ComplexNumber("' +  '−53.24 − 4.27*i'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52240, 'ComplexNumber("' +  '−53.24 − 4.27⋅i'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52241, 'ComplexNumber("' +  '53.24 + 4.27 j'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52242, 'ComplexNumber("' +  '53.24 + 4.27*j'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52243, 'ComplexNumber("' +  '53.24 + 4.27⋅j'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52244, 'ComplexNumber("' +  '53.24 − 4.27 j'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52245, 'ComplexNumber("' +  '53.24 − 4.27*j'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52246, 'ComplexNumber("' +  '53.24 − 4.27⋅j'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52247, 'ComplexNumber("' +  '−53.24 + 4.27 j'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52248, 'ComplexNumber("' +  '−53.24 + 4.27*j'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52249, 'ComplexNumber("' +  '−53.24 + 4.27⋅j'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52250, 'ComplexNumber("' +  '−53.24 − 4.27 j'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52251, 'ComplexNumber("' +  '−53.24 − 4.27*j'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52252, 'ComplexNumber("' +  '−53.24 − 4.27⋅j'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52253, 'ComplexNumber("' +  '53.24 + 4.27 I'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52254, 'ComplexNumber("' +  '53.24 + 4.27*I'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52255, 'ComplexNumber("' +  '53.24 + 4.27⋅I'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52256, 'ComplexNumber("' +  '53.24 − 4.27 I'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52257, 'ComplexNumber("' +  '53.24 − 4.27*I'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52258, 'ComplexNumber("' +  '53.24 − 4.27⋅I'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52259, 'ComplexNumber("' +  '−53.24 + 4.27 I'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52260, 'ComplexNumber("' +  '−53.24 + 4.27*I'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52261, 'ComplexNumber("' +  '−53.24 + 4.27⋅I'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52262, 'ComplexNumber("' +  '−53.24 − 4.27 I'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52263, 'ComplexNumber("' +  '−53.24 − 4.27*I'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52264, 'ComplexNumber("' +  '−53.24 − 4.27⋅I'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52265, 'ComplexNumber("' +  '53.24 + 4.27 J'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52266, 'ComplexNumber("' +  '53.24 + 4.27*J'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52267, 'ComplexNumber("' +  '53.24 + 4.27⋅J'                                      + '")',  ASC(53.24, 4.27)           );
  Test({LINENUM}52268, 'ComplexNumber("' +  '53.24 − 4.27 J'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52269, 'ComplexNumber("' +  '53.24 − 4.27*J'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52270, 'ComplexNumber("' +  '53.24 − 4.27⋅J'                                      + '")',  ASC(53.24, -4.27)          );
  Test({LINENUM}52271, 'ComplexNumber("' +  '−53.24 + 4.27 J'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52272, 'ComplexNumber("' +  '−53.24 + 4.27*J'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52273, 'ComplexNumber("' +  '−53.24 + 4.27⋅J'                                     + '")',  ASC(-53.24, 4.27)          );
  Test({LINENUM}52274, 'ComplexNumber("' +  '−53.24 − 4.27 J'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52275, 'ComplexNumber("' +  '−53.24 − 4.27*J'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52276, 'ComplexNumber("' +  '−53.24 − 4.27⋅J'                                     + '")',  ASC(-53.24, -4.27)         );
  Test({LINENUM}52277, 'ComplexNumber("' +  '1 + 2 + 3 + 4 + 5 + 6 + i + j'                       + '")',  ASC(21, 2)                 );
  Test({LINENUM}52278, 'ComplexNumber("' +  '1 + 2 + 3 + 4 + 5 + 6 + i + 10j'                     + '")',  ASC(21, 11)                 );
  Test({LINENUM}52279, 'ComplexNumber("' +  '1.0 + 2. + 3e0 + 4.0e+0 + 5.e−0 + 6e00 + i + 10e0j'  + '")',  ASC(21, 11)                 );
  Eps; Test({LINENUM}52280, 'ComplexNumber("' +  '1.001 + 5.321⋅i − 0.2 + i − 55*J'                    + '")',  ASC(0.801, -48.679)        );
  Test({LINENUM}52281, 'ComplexNumber("' +  '0'                                                   + '")',  ASC(0, 0)                  );
  Test({LINENUM}52282, 'ComplexNumber("' +  '0.0'                                                 + '")',  ASC(0, 0)                  );
  Test({LINENUM}52283, 'ComplexNumber("' +  '−0'                                                  + '")',  ASC(0, 0)                  );
  Test({LINENUM}52284, 'ComplexNumber("' +  '−0.0'                                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}52285, 'ComplexNumber("' +  '.0e0'                                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}52286, 'ComplexNumber("' +  '.0e−0'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52287, 'ComplexNumber("' +  '.0e−10'                                              + '")',  ASC(0, 0)                  );
  Test({LINENUM}52288, 'ComplexNumber("' +  '.0e+10'                                              + '")',  ASC(0, 0)                  );
  Test({LINENUM}52289, 'ComplexNumber("' +  '.0e+10j'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}52290, 'ComplexNumber("' +  '−.0e0'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52291, 'ComplexNumber("' +  '−.0e−0'                                              + '")',  ASC(0, 0)                  );
  Test({LINENUM}52292, 'ComplexNumber("' +  '−.0e−10'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}52293, 'ComplexNumber("' +  '−.0e+10'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}52294, 'ComplexNumber("' +  '−.0e+10j'                                            + '")',  ASC(0, 0)                  );
  Test({LINENUM}52295, 'ComplexNumber("' +  '+.0e+10'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}52296, 'ComplexNumber("' +  '+.0e+10j'                                            + '")',  ASC(0, 0)                  );
  Test({LINENUM}52297, 'ComplexNumber("' +  '1'                                                   + '")',  ASC(1, 0)                  );
  Test({LINENUM}52298, 'ComplexNumber("' +  '1.0'                                                 + '")',  ASC(1, 0)                  );
  Test({LINENUM}52299, 'ComplexNumber("' +  '1.0E0'                                               + '")',  ASC(1, 0)                  );
  Test({LINENUM}52300, 'ComplexNumber("' +  '1.0e0'                                               + '")',  ASC(1, 0)                  );
  Test({LINENUM}52301, 'ComplexNumber("' +  '1.0E+0'                                              + '")',  ASC(1, 0)                  );
  Test({LINENUM}52302, 'ComplexNumber("' +  '1.0e+0'                                              + '")',  ASC(1, 0)                  );
  Test({LINENUM}52303, 'ComplexNumber("' +  '1.0E−0'                                              + '")',  ASC(1, 0)                  );
  Test({LINENUM}52304, 'ComplexNumber("' +  '1.0e−0'                                              + '")',  ASC(1, 0)                  );
  Test({LINENUM}52305, 'ComplexNumber("' +  '−1'                                                  + '")',  ASC(-1, 0)                 );
  Test({LINENUM}52306, 'ComplexNumber("' +  '−1.0'                                                + '")',  ASC(-1, 0)                 );
  Test({LINENUM}52307, 'ComplexNumber("' +  '−1.0E0'                                              + '")',  ASC(-1, 0)                 );
  Test({LINENUM}52308, 'ComplexNumber("' +  '−1.0e0'                                              + '")',  ASC(-1, 0)                 );
  Test({LINENUM}52309, 'ComplexNumber("' +  '−1.0E+0'                                             + '")',  ASC(-1, 0)                 );
  Test({LINENUM}52310, 'ComplexNumber("' +  '−1.0e+0'                                             + '")',  ASC(-1, 0)                 );
  Test({LINENUM}52311, 'ComplexNumber("' +  '−1.0E−0'                                             + '")',  ASC(-1, 0)                 );
  Test({LINENUM}52312, 'ComplexNumber("' +  '−1.0e−0'                                             + '")',  ASC(-1, 0)                 );
  Test({LINENUM}52313, 'ComplexNumber("' +  '26'                                                  + '")',  ASC(26, 0)                 );
  Test({LINENUM}52314, 'ComplexNumber("' +  '−2'                                                  + '")',  ASC(-2, 0)                 );
  Test({LINENUM}52315, 'ComplexNumber("' +  '3.9'                                                 + '")',  ASC(3.9, 0)                );
  Test({LINENUM}52316, 'ComplexNumber("' +  '−5.10'                                               + '")',  ASC(-5.1, 0)               );
  Test({LINENUM}52317, 'ComplexNumber("' +  '.8'                                                  + '")',  ASC(0.8, 0)                );
  Test({LINENUM}52318, 'ComplexNumber("' +  '−.7'                                                 + '")',  ASC(-0.7, 0)               );
  Test({LINENUM}52319, 'ComplexNumber("' +  '5.'                                                  + '")',  ASC(5, 0)                  );
  Test({LINENUM}52320, 'ComplexNumber("' +  '−99.'                                                + '")',  ASC(-99, 0)                );
  Test({LINENUM}52321, 'ComplexNumber("' +  '5.3E3'                                               + '")',  ASC(5300, 0)               );
  Test({LINENUM}52322, 'ComplexNumber("' +  '−10e−1'                                              + '")',  ASC(-1, 0)                 );
  Test({LINENUM}52323, 'ComplexNumber("' +  '1E6'                                                 + '")',  ASC(1000000, 0)            );
  Test({LINENUM}52324, 'ComplexNumber("' +  '−1.2E−6'                                             + '")',  ASC(-0.0000012, 0)         );
  Test({LINENUM}52325, 'ComplexNumber("' +  '0i'                                                  + '")',  ASC(0, 0)                  );
  Test({LINENUM}52326, 'ComplexNumber("' +  '0+0i'                                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}52327, 'ComplexNumber("' +  ' 0.0000E0 + 0.000 i '                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}52328, 'ComplexNumber("' +  '−0−0.0i'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}52329, 'ComplexNumber("' +  '0−.0i'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52330, 'ComplexNumber("' +  '0+0.i'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52331, 'ComplexNumber("' +  'i'                                                   + '")',  ASC(0, 1)                  );
  Test({LINENUM}52332, 'ComplexNumber("' +  '−i'                                                  + '")',  ASC(0, -1)                 );
  Test({LINENUM}52333, 'ComplexNumber("' +  '7i'                                                  + '")',  ASC(0, 7)                  );
  Test({LINENUM}52334, 'ComplexNumber("' +  '−55i'                                                + '")',  ASC(0, -55)                );
  Test({LINENUM}52335, 'ComplexNumber("' +  '4.3i'                                                + '")',  ASC(0, 4.3)                );
  Test({LINENUM}52336, 'ComplexNumber("' +  '−99.2i'                                              + '")',  ASC(0, -99.2)              );
  Test({LINENUM}52337, 'ComplexNumber("' +  '0.5i'                                                + '")',  ASC(0, 0.5)                );
  Test({LINENUM}52338, 'ComplexNumber("' +  '.5i'                                                 + '")',  ASC(0, 0.5)                );
  Test({LINENUM}52339, 'ComplexNumber("' +  '−.9i'                                                + '")',  ASC(0, -0.9)               );
  Test({LINENUM}52340, 'ComplexNumber("' +  '1+i'                                                 + '")',  ASC(1, 1)                  );
  Test({LINENUM}52341, 'ComplexNumber("' +  '1−i'                                                 + '")',  ASC(1, -1)                 );
  Test({LINENUM}52342, 'ComplexNumber("' +  '−7−8i'                                               + '")',  ASC(-7, -8)                );
  Test({LINENUM}52343, 'ComplexNumber("' +  '1+2i'                                                + '")',  ASC(1, 2)                  );
  Test({LINENUM}52344, 'ComplexNumber("' +  '2−9.2i'                                              + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52345, 'ComplexNumber("' +  '0+.92i'                                              + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52346, 'ComplexNumber("' +  '0−55.i'                                              + '")',  ASC(0, -55)                );
  Test({LINENUM}52347, 'ComplexNumber("' +  '0.2−55.2i'                                           + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52348, 'ComplexNumber("' +  '100+800i'                                            + '")',  ASC(100, 800)              );
  Test({LINENUM}52349, 'ComplexNumber("' +  '2E4−0.2E2 i'                                         + '")',  ASC(20000, -20)            );
  Test({LINENUM}52350, 'ComplexNumber("' +  '1 + i'                                               + '")',  ASC(1, 1)                  );
  Test({LINENUM}52351, 'ComplexNumber("' +  '1 − i'                                               + '")',  ASC(1, -1)                 );
  Test({LINENUM}52352, 'ComplexNumber("' +  '−7 − 8i'                                             + '")',  ASC(-7, -8)                );
  Test({LINENUM}52353, 'ComplexNumber("' +  '2 − 9.2 i'                                           + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52354, 'ComplexNumber("' +  '0 + .92 i'                                           + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52355, 'ComplexNumber("' +  '0 − 55. i'                                           + '")',  ASC(0, -55)                );
  Test({LINENUM}52356, 'ComplexNumber("' +  '0.2 − 55.2 i'                                        + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52357, 'ComplexNumber("' +  '100 + 800i'                                          + '")',  ASC(100, 800)              );
  Test({LINENUM}52358, 'ComplexNumber("' +  '2E4 − 0.2E2i'                                        + '")',  ASC(20000, -20)            );
  Test({LINENUM}52359, 'ComplexNumber("' +  '  1  +  i'                                           + '")',  ASC(1, 1)                  );
  Test({LINENUM}52360, 'ComplexNumber("' +  ' 1 − i  '                                            + '")',  ASC(1, -1)                 );
  Test({LINENUM}52361, 'ComplexNumber("' +  '−7   − 8i '                                          + '")',  ASC(-7, -8)                );
  Test({LINENUM}52362, 'ComplexNumber("' +  '2  −  9.2 i'                                         + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52363, 'ComplexNumber("' +  '   0   +.92  i'                                      + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52364, 'ComplexNumber("' +  '0−  55.i'                                            + '")',  ASC(0, -55)                );
  Test({LINENUM}52365, 'ComplexNumber("' +  ' 0.2  −  55.2i'                                      + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52366, 'ComplexNumber("' +  '    100   +   800   i   '                            + '")',  ASC(100, 800)              );
  Test({LINENUM}52367, 'ComplexNumber("' +  '2E4  −    0.2E2 i'                                   + '")',  ASC(20000, -20)            );
  Test({LINENUM}52368, 'ComplexNumber("' +  '0*i'                                                 + '")',  ASC(0, 0)                  );
  Test({LINENUM}52369, 'ComplexNumber("' +  '0+0*i'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52370, 'ComplexNumber("' +  ' 0.0000E0 + 0.000 *i '                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52371, 'ComplexNumber("' +  '−0−0.0*i'                                            + '")',  ASC(0, 0)                  );
  Test({LINENUM}52372, 'ComplexNumber("' +  '0−.0*i'                                              + '")',  ASC(0, 0)                  );
  Test({LINENUM}52373, 'ComplexNumber("' +  '0+0.*i'                                              + '")',  ASC(0, 0)                  );
  Test({LINENUM}52374, 'ComplexNumber("' +  '7*i'                                                 + '")',  ASC(0, 7)                  );
  Test({LINENUM}52375, 'ComplexNumber("' +  '−55*i'                                               + '")',  ASC(0, -55)                );
  Test({LINENUM}52376, 'ComplexNumber("' +  '4.3*i'                                               + '")',  ASC(0, 4.3)                );
  Test({LINENUM}52377, 'ComplexNumber("' +  '−99.2*i'                                             + '")',  ASC(0, -99.2)              );
  Test({LINENUM}52378, 'ComplexNumber("' +  '0.5*i'                                               + '")',  ASC(0, 0.5)                );
  Test({LINENUM}52379, 'ComplexNumber("' +  '−.9*i'                                               + '")',  ASC(0, -0.9)               );
  Test({LINENUM}52380, 'ComplexNumber("' +  '−7−8*i'                                              + '")',  ASC(-7, -8)                );
  Test({LINENUM}52381, 'ComplexNumber("' +  '2−9.2*i'                                             + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52382, 'ComplexNumber("' +  '0+.92*i'                                             + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52383, 'ComplexNumber("' +  '0−55.*i'                                             + '")',  ASC(0, -55)                );
  Test({LINENUM}52384, 'ComplexNumber("' +  '0.2−55.2*i'                                          + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52385, 'ComplexNumber("' +  '100+800*i'                                           + '")',  ASC(100, 800)              );
  Test({LINENUM}52386, 'ComplexNumber("' +  '2E4−0.2E2 *i'                                        + '")',  ASC(20000, -20)            );
  Test({LINENUM}52387, 'ComplexNumber("' +  '−7 − 8*i'                                            + '")',  ASC(-7, -8)                );
  Test({LINENUM}52388, 'ComplexNumber("' +  '2 − 9.2 *i'                                          + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52389, 'ComplexNumber("' +  '0 + .92 *i'                                          + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52390, 'ComplexNumber("' +  '0 − 55. *i'                                          + '")',  ASC(0, -55)                );
  Test({LINENUM}52391, 'ComplexNumber("' +  '0.2 − 55.2 *i'                                       + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52392, 'ComplexNumber("' +  '100 + 800*i'                                         + '")',  ASC(100, 800)              );
  Test({LINENUM}52393, 'ComplexNumber("' +  '2E4 − 0.2E2*i'                                       + '")',  ASC(20000, -20)            );
  Test({LINENUM}52394, 'ComplexNumber("' +  '−7   − 8*i '                                         + '")',  ASC(-7, -8)                );
  Test({LINENUM}52395, 'ComplexNumber("' +  '2  −  9.2 *i'                                        + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52396, 'ComplexNumber("' +  '   0   +.92  *i'                                     + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52397, 'ComplexNumber("' +  '0−  55.*i'                                           + '")',  ASC(0, -55)                );
  Test({LINENUM}52398, 'ComplexNumber("' +  ' 0.2  −  55.2*i'                                     + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52399, 'ComplexNumber("' +  '    100   +   800   *i   '                           + '")',  ASC(100, 800)              );
  Test({LINENUM}52400, 'ComplexNumber("' +  '2E4  −    0.2E2 *i'                                  + '")',  ASC(20000, -20)            );
  Test({LINENUM}52401, 'ComplexNumber("' +  '0I'                                                  + '")',  ASC(0, 0)                  );
  Test({LINENUM}52402, 'ComplexNumber("' +  '0+0I'                                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}52403, 'ComplexNumber("' +  ' 0.0000E0 + 0.000 I '                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}52404, 'ComplexNumber("' +  '−0−0.0I'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}52405, 'ComplexNumber("' +  '0−.0I'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52406, 'ComplexNumber("' +  '0+0.I'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52407, 'ComplexNumber("' +  'I'                                                   + '")',  ASC(0, 1)                  );
  Test({LINENUM}52408, 'ComplexNumber("' +  '−I'                                                  + '")',  ASC(0, -1)                 );
  Test({LINENUM}52409, 'ComplexNumber("' +  '7I'                                                  + '")',  ASC(0, 7)                  );
  Test({LINENUM}52410, 'ComplexNumber("' +  '−55I'                                                + '")',  ASC(0, -55)                );
  Test({LINENUM}52411, 'ComplexNumber("' +  '4.3I'                                                + '")',  ASC(0, 4.3)                );
  Test({LINENUM}52412, 'ComplexNumber("' +  '−99.2I'                                              + '")',  ASC(0, -99.2)              );
  Test({LINENUM}52413, 'ComplexNumber("' +  '0.5I'                                                + '")',  ASC(0, 0.5)                );
  Test({LINENUM}52414, 'ComplexNumber("' +  '−.9I'                                                + '")',  ASC(0, -0.9)               );
  Test({LINENUM}52415, 'ComplexNumber("' +  '1+I'                                                 + '")',  ASC(1, 1)                  );
  Test({LINENUM}52416, 'ComplexNumber("' +  '1−I'                                                 + '")',  ASC(1, -1)                 );
  Test({LINENUM}52417, 'ComplexNumber("' +  '−7−8I'                                               + '")',  ASC(-7, -8)                );
  Test({LINENUM}52418, 'ComplexNumber("' +  '2−9.2I'                                              + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52419, 'ComplexNumber("' +  '0+.92I'                                              + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52420, 'ComplexNumber("' +  '0−55.I'                                              + '")',  ASC(0, -55)                );
  Test({LINENUM}52421, 'ComplexNumber("' +  '0.2−55.2I'                                           + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52422, 'ComplexNumber("' +  '100+800I'                                            + '")',  ASC(100, 800)              );
  Test({LINENUM}52423, 'ComplexNumber("' +  '2E4−0.2E2 I'                                         + '")',  ASC(20000, -20)            );
  Test({LINENUM}52424, 'ComplexNumber("' +  '1 + I'                                               + '")',  ASC(1, 1)                  );
  Test({LINENUM}52425, 'ComplexNumber("' +  '1 − I'                                               + '")',  ASC(1, -1)                 );
  Test({LINENUM}52426, 'ComplexNumber("' +  '−7 − 8I'                                             + '")',  ASC(-7, -8)                );
  Test({LINENUM}52427, 'ComplexNumber("' +  '2 − 9.2 I'                                           + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52428, 'ComplexNumber("' +  '0 + .92 I'                                           + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52429, 'ComplexNumber("' +  '0 − 55. I'                                           + '")',  ASC(0, -55)                );
  Test({LINENUM}52430, 'ComplexNumber("' +  '0.2 − 55.2 I'                                        + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52431, 'ComplexNumber("' +  '100 + 800I'                                          + '")',  ASC(100, 800)              );
  Test({LINENUM}52432, 'ComplexNumber("' +  '2E4 − 0.2E2I'                                        + '")',  ASC(20000, -20)            );
  Test({LINENUM}52433, 'ComplexNumber("' +  '  1  +  I'                                           + '")',  ASC(1, 1)                  );
  Test({LINENUM}52434, 'ComplexNumber("' +  ' 1 − I  '                                            + '")',  ASC(1, -1)                 );
  Test({LINENUM}52435, 'ComplexNumber("' +  '−7   − 8I '                                          + '")',  ASC(-7, -8)                );
  Test({LINENUM}52436, 'ComplexNumber("' +  '2  −  9.2 I'                                         + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52437, 'ComplexNumber("' +  '   0   +.92  I'                                      + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52438, 'ComplexNumber("' +  '0−  55.I'                                            + '")',  ASC(0, -55)                );
  Test({LINENUM}52439, 'ComplexNumber("' +  ' 0.2  −  55.2I'                                      + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52440, 'ComplexNumber("' +  '    100   +   800   I   '                            + '")',  ASC(100, 800)              );
  Test({LINENUM}52441, 'ComplexNumber("' +  '2E4  −    0.2E2 I'                                   + '")',  ASC(20000, -20)            );
  Test({LINENUM}52442, 'ComplexNumber("' +  '0 ⋅ I'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52443, 'ComplexNumber("' +  '0+0 ⋅ I'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}52444, 'ComplexNumber("' +  ' 0.0000E0 + 0.000  ⋅ I '                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}52445, 'ComplexNumber("' +  '−0−0.0 ⋅ I'                                          + '")',  ASC(0, 0)                  );
  Test({LINENUM}52446, 'ComplexNumber("' +  '0−.0 ⋅ I'                                            + '")',  ASC(0, 0)                  );
  Test({LINENUM}52447, 'ComplexNumber("' +  '0+0. ⋅ I'                                            + '")',  ASC(0, 0)                  );
  Test({LINENUM}52448, 'ComplexNumber("' +  '7 ⋅ I'                                               + '")',  ASC(0, 7)                  );
  Test({LINENUM}52449, 'ComplexNumber("' +  '−55 ⋅ I'                                             + '")',  ASC(0, -55)                );
  Test({LINENUM}52450, 'ComplexNumber("' +  '4.3 ⋅ I'                                             + '")',  ASC(0, 4.3)                );
  Test({LINENUM}52451, 'ComplexNumber("' +  '−99.2 ⋅ I'                                           + '")',  ASC(0, -99.2)              );
  Test({LINENUM}52452, 'ComplexNumber("' +  '0.5 ⋅ I'                                             + '")',  ASC(0, 0.5)                );
  Test({LINENUM}52453, 'ComplexNumber("' +  '−.9 ⋅ I'                                             + '")',  ASC(0, -0.9)               );
  Test({LINENUM}52454, 'ComplexNumber("' +  '−7−8 ⋅ I'                                            + '")',  ASC(-7, -8)                );
  Test({LINENUM}52455, 'ComplexNumber("' +  '2−9.2 ⋅ I'                                           + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52456, 'ComplexNumber("' +  '0+.92 ⋅ I'                                           + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52457, 'ComplexNumber("' +  '0−55. ⋅ I'                                           + '")',  ASC(0, -55)                );
  Test({LINENUM}52458, 'ComplexNumber("' +  '0.2−55.2 ⋅ I'                                        + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52459, 'ComplexNumber("' +  '100+800 ⋅ I'                                         + '")',  ASC(100, 800)              );
  Test({LINENUM}52460, 'ComplexNumber("' +  '2E4−0.2E2  ⋅ I'                                      + '")',  ASC(20000, -20)            );
  Test({LINENUM}52461, 'ComplexNumber("' +  '−7 − 8 ⋅ I'                                          + '")',  ASC(-7, -8)                );
  Test({LINENUM}52462, 'ComplexNumber("' +  '2 − 9.2  ⋅ I'                                        + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52463, 'ComplexNumber("' +  '0 + .92  ⋅ I'                                        + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52464, 'ComplexNumber("' +  '0 − 55.  ⋅ I'                                        + '")',  ASC(0, -55)                );
  Test({LINENUM}52465, 'ComplexNumber("' +  '0.2 − 55.2  ⋅ I'                                     + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52466, 'ComplexNumber("' +  '100 + 800 ⋅ I'                                       + '")',  ASC(100, 800)              );
  Test({LINENUM}52467, 'ComplexNumber("' +  '2E4 − 0.2E2 ⋅ I'                                     + '")',  ASC(20000, -20)            );
  Test({LINENUM}52468, 'ComplexNumber("' +  '−7   − 8 ⋅ I '                                       + '")',  ASC(-7, -8)                );
  Test({LINENUM}52469, 'ComplexNumber("' +  '2  −  9.2  ⋅ I'                                      + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52470, 'ComplexNumber("' +  '   0   +.92   ⋅ I'                                   + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52471, 'ComplexNumber("' +  '0−  55. ⋅ I'                                         + '")',  ASC(0, -55)                );
  Test({LINENUM}52472, 'ComplexNumber("' +  ' 0.2  −  55.2 ⋅ I'                                   + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52473, 'ComplexNumber("' +  '    100   +   800    ⋅ I   '                         + '")',  ASC(100, 800)              );
  Test({LINENUM}52474, 'ComplexNumber("' +  '2E4  −    0.2E2  ⋅ I'                                + '")',  ASC(20000, -20)            );
  Test({LINENUM}52475, 'ComplexNumber("' +  '0j'                                                  + '")',  ASC(0, 0)                  );
  Test({LINENUM}52476, 'ComplexNumber("' +  '0+0j'                                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}52477, 'ComplexNumber("' +  ' 0.0000E0 + 0.000 j '                                + '")',  ASC(0, 0)                  );
  Test({LINENUM}52478, 'ComplexNumber("' +  '−0−0.0j'                                             + '")',  ASC(0, 0)                  );
  Test({LINENUM}52479, 'ComplexNumber("' +  '0−.0j'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52480, 'ComplexNumber("' +  '0+0.j'                                               + '")',  ASC(0, 0)                  );
  Test({LINENUM}52481, 'ComplexNumber("' +  'j'                                                   + '")',  ASC(0, 1)                  );
  Test({LINENUM}52482, 'ComplexNumber("' +  '−j'                                                  + '")',  ASC(0, -1)                 );
  Test({LINENUM}52483, 'ComplexNumber("' +  '7j'                                                  + '")',  ASC(0, 7)                  );
  Test({LINENUM}52484, 'ComplexNumber("' +  '−55j'                                                + '")',  ASC(0, -55)                );
  Test({LINENUM}52485, 'ComplexNumber("' +  '4.3j'                                                + '")',  ASC(0, 4.3)                );
  Test({LINENUM}52486, 'ComplexNumber("' +  '−99.2j'                                              + '")',  ASC(0, -99.2)              );
  Test({LINENUM}52487, 'ComplexNumber("' +  '0.5j'                                                + '")',  ASC(0, 0.5)                );
  Test({LINENUM}52488, 'ComplexNumber("' +  '−.9j'                                                + '")',  ASC(0, -0.9)               );
  Test({LINENUM}52489, 'ComplexNumber("' +  '1+j'                                                 + '")',  ASC(1, 1)                  );
  Test({LINENUM}52490, 'ComplexNumber("' +  '1−j'                                                 + '")',  ASC(1, -1)                 );
  Test({LINENUM}52491, 'ComplexNumber("' +  '−7−8j'                                               + '")',  ASC(-7, -8)                );
  Test({LINENUM}52492, 'ComplexNumber("' +  '2−9.2j'                                              + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52493, 'ComplexNumber("' +  '0+.92j'                                              + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52494, 'ComplexNumber("' +  '0−55.j'                                              + '")',  ASC(0, -55)                );
  Test({LINENUM}52495, 'ComplexNumber("' +  '0.2−55.2j'                                           + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52496, 'ComplexNumber("' +  '100+800j'                                            + '")',  ASC(100, 800)              );
  Test({LINENUM}52497, 'ComplexNumber("' +  '2E4−0.2E2 j'                                         + '")',  ASC(20000, -20)            );
  Test({LINENUM}52498, 'ComplexNumber("' +  '1 + j'                                               + '")',  ASC(1, 1)                  );
  Test({LINENUM}52499, 'ComplexNumber("' +  '1 − j'                                               + '")',  ASC(1, -1)                 );
  Test({LINENUM}52500, 'ComplexNumber("' +  '−7 − 8j'                                             + '")',  ASC(-7, -8)                );
  Test({LINENUM}52501, 'ComplexNumber("' +  '2 − 9.2 j'                                           + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52502, 'ComplexNumber("' +  '0 + .92 j'                                           + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52503, 'ComplexNumber("' +  '0 − 55. j'                                           + '")',  ASC(0, -55)                );
  Test({LINENUM}52504, 'ComplexNumber("' +  '0.2 − 55.2 j'                                        + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52505, 'ComplexNumber("' +  '100 + 800j'                                          + '")',  ASC(100, 800)              );
  Test({LINENUM}52506, 'ComplexNumber("' +  '2E4 − 0.2E2j'                                        + '")',  ASC(20000, -20)            );
  Test({LINENUM}52507, 'ComplexNumber("' +  '  1  +  j'                                           + '")',  ASC(1, 1)                  );
  Test({LINENUM}52508, 'ComplexNumber("' +  ' 1 − j  '                                            + '")',  ASC(1, -1)                 );
  Test({LINENUM}52509, 'ComplexNumber("' +  '−7   − 8j '                                          + '")',  ASC(-7, -8)                );
  Test({LINENUM}52510, 'ComplexNumber("' +  '2  −  9.2 j'                                         + '")',  ASC(2, -9.2)               );
  Test({LINENUM}52511, 'ComplexNumber("' +  '   0   +.92  j'                                      + '")',  ASC(0, 0.92)               );
  Test({LINENUM}52512, 'ComplexNumber("' +  '0−  55.j'                                            + '")',  ASC(0, -55)                );
  Test({LINENUM}52513, 'ComplexNumber("' +  ' 0.2  −  55.2j'                                      + '")',  ASC(0.2, -55.2)            );
  Test({LINENUM}52514, 'ComplexNumber("' +  '    100   +   800   j   '                            + '")',  ASC(100, 800)              );
  Test({LINENUM}52515, 'ComplexNumber("' +  '2E4  −    0.2E2 j'                                   + '")',  ASC(20000, -20)            );
  Test({LINENUM}52516, 'ComplexNumber("' +  '1+1'                                                 + '")',  ASC(2, 0)                  );
  Eps; Test({LINENUM}52517, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10 − 2 − 2 − 1'       + '")',  ASC(1, 0)                  );
  Test({LINENUM}52518, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10i − 2 − 2 − 1'      + '")',  ASC(11, -10)               );
  Test({LINENUM}52519, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10j − 2 − 2 − 1'      + '")',  ASC(11, -10)               );
  Test({LINENUM}52520, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10I − 2 − 2 − 1'      + '")',  ASC(11, -10)               );
  Test({LINENUM}52521, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10J − 2 − 2 − 1'      + '")',  ASC(11, -10)               );
  Test({LINENUM}52522, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10⋅i − 2 − 2 − 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52523, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10⋅j − 2 − 2 − 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52524, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10⋅I − 2 − 2 − 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52525, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10⋅J − 2 − 2 − 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52526, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10*i − 2 − 2 − 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52527, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10*j − 2 − 2 − 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52528, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10*I − 2 − 2 − 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52529, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10*J − 2 − 2 − 1'     + '")',  ASC(11, -10)               );
  Test({LINENUM}52530, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10 ⋅ i − 2 − 2 − 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52531, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10 ⋅ j − 2 − 2 − 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52532, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10 ⋅ I − 2 − 2 − 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52533, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10 ⋅ J − 2 − 2 − 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52534, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10 * i − 2 − 2 − 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52535, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10 * j − 2 − 2 − 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52536, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10 * I − 2 − 2 − 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52537, 'ComplexNumber("' +  '1 + 5 + 0.8 + 10 − 0.4 − 0.4 − 10 * J − 2 − 2 − 1'   + '")',  ASC(11, -10)               );
  Test({LINENUM}52538, 'ComplexNumber("' +  '1+i−2−2i'                                            + '")',  ASC(-1, -1)                );
  Test({LINENUM}52539, 'ComplexNumber("' +  '4.2+i−0.2i'                                          + '")',  ASC(4.2, 0.8)              );
  Test({LINENUM}52540, 'ComplexNumber("' +  '5 − 3*i'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52541, 'ComplexNumber("' +  '−3*i + 5'                                            + '")',  ASC(5, -3)                 );
  Test({LINENUM}52542, 'ComplexNumber("' +  '+ 5 − 3*i'                                           + '")',  ASC(5, -3)                 );
  Test({LINENUM}52543, 'ComplexNumber("' +  '− 3*i+5'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52544, 'ComplexNumber("' +  '− 3 * i   +    5 '                                   + '")',  ASC(5, -3)                 );
  Test({LINENUM}52545, 'ComplexNumber("' +  '− .3e+1*i+5.0E−0'                                    + '")',  ASC(5, -3)                 );
  Test({LINENUM}52546, 'ComplexNumber("' +  '5 − 3⋅i'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52547, 'ComplexNumber("' +  '−3⋅i + 5'                                            + '")',  ASC(5, -3)                 );
  Test({LINENUM}52548, 'ComplexNumber("' +  '+ 5 − 3⋅i'                                           + '")',  ASC(5, -3)                 );
  Test({LINENUM}52549, 'ComplexNumber("' +  '− 3⋅i+5'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52550, 'ComplexNumber("' +  '− 3 ⋅ i   +    5 '                                   + '")',  ASC(5, -3)                 );
  Test({LINENUM}52551, 'ComplexNumber("' +  '− .3e+1⋅i+5.0E−0'                                    + '")',  ASC(5, -3)                 );
  Test({LINENUM}52552, 'ComplexNumber("' +  '5 − 3⋅j'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52553, 'ComplexNumber("' +  '−3⋅j + 5'                                            + '")',  ASC(5, -3)                 );
  Test({LINENUM}52554, 'ComplexNumber("' +  '+ 5 − 3⋅j'                                           + '")',  ASC(5, -3)                 );
  Test({LINENUM}52555, 'ComplexNumber("' +  '− 3⋅j+5'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52556, 'ComplexNumber("' +  '− 3 ⋅ j   +    5 '                                   + '")',  ASC(5, -3)                 );
  Test({LINENUM}52557, 'ComplexNumber("' +  '− .3e+1⋅j+5.0E−0'                                    + '")',  ASC(5, -3)                 );
  Test({LINENUM}52558, 'ComplexNumber("' +  '5 − 3*i'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52559, 'ComplexNumber("' +  '−3*i + 5'                                            + '")',  ASC(5, -3)                 );
  Test({LINENUM}52560, 'ComplexNumber("' +  '+ 5 − 3*i'                                           + '")',  ASC(5, -3)                 );
  Test({LINENUM}52561, 'ComplexNumber("' +  '− 3*i+5'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52562, 'ComplexNumber("' +  '− 3 * i   +    5 '                                   + '")',  ASC(5, -3)                 );
  Test({LINENUM}52563, 'ComplexNumber("' +  '− .3e+1*i+5.0E−0'                                    + '")',  ASC(5, -3)                 );
  Test({LINENUM}52564, 'ComplexNumber("' +  '5 − 3*I'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52565, 'ComplexNumber("' +  '−3*J + 5'                                            + '")',  ASC(5, -3)                 );
  Test({LINENUM}52566, 'ComplexNumber("' +  '+ 5 − 3⋅i'                                           + '")',  ASC(5, -3)                 );
  Test({LINENUM}52567, 'ComplexNumber("' +  '− 3⋅J+5'                                             + '")',  ASC(5, -3)                 );
  Test({LINENUM}52568, 'ComplexNumber("' +  '− 3 J   +    5 '                                     + '")',  ASC(5, -3)                 );
  Test({LINENUM}52569, 'ComplexNumber("' +  '− .3e+1⋅I+5.E+0'                                     + '")',  ASC(5, -3)                 );
  Test({LINENUM}52570, 'ComplexNumber("' +  'i − 1'                                               + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52571, 'ComplexNumber("' +  'i − 1.0'                                             + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52572, 'ComplexNumber("' +  '+1i − 1e0'                                           + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52573, 'ComplexNumber("' +  '1.0 * i − 1'                                         + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52574, 'ComplexNumber("' +  '1.0 ⋅ i − 1'                                         + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52575, 'ComplexNumber("' +  '1.0 ⋅ j − 1'                                         + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52576, 'ComplexNumber("' +  '1.0 ⋅ I − 1'                                         + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52577, 'ComplexNumber("' +  '1.0 ⋅ J − 1'                                         + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52578, 'ComplexNumber("' +  '1.0 i − 1'                                           + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52579, 'ComplexNumber("' +  '1.0 I − 1'                                           + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52580, 'ComplexNumber("' +  '1.0 j − 1'                                           + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52581, 'ComplexNumber("' +  '1. J − 1'                                            + '")',  ASC(-1, 1)                 );
  Test({LINENUM}52582, 'ComplexNumber("' +  '7+3.22i'                                             + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52583, 'ComplexNumber("' +  '7 + 3.22i'                                           + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52584, 'ComplexNumber("' +  '7 + 3.22*i'                                          + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52585, 'ComplexNumber("' +  '7 + 3.22 * i'                                        + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52586, 'ComplexNumber("' +  '7 + 3.22i'                                           + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52587, 'ComplexNumber("' +  '7 + 3.22⋅i'                                          + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52588, 'ComplexNumber("' +  '7 + 3.22 ⋅ i'                                        + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52589, 'ComplexNumber("' +  '7+3.22j'                                             + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52590, 'ComplexNumber("' +  '7 + 3.22j'                                           + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52591, 'ComplexNumber("' +  '7 + 3.22*j'                                          + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52592, 'ComplexNumber("' +  '7 + 3.22 * j'                                        + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52593, 'ComplexNumber("' +  '7 + 3.22j'                                           + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52594, 'ComplexNumber("' +  '7 + 3.22⋅j'                                          + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52595, 'ComplexNumber("' +  '7 + 3.22 ⋅ j'                                        + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52596, 'ComplexNumber("' +  '7+3.22I'                                             + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52597, 'ComplexNumber("' +  '+7+3.22I'                                            + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52598, 'ComplexNumber("' +  '7.e0 + 3.22E0j'                                      + '")',  ASC(7, 3.22)               );
  Test({LINENUM}52599, 'ComplexNumber("' +  '1e1i'                                                + '")',  ASC(0, 10)                 );
  Test({LINENUM}52600, 'ComplexNumber("' +  '+1.0e+1*i'                                           + '")',  ASC(0, 10)                 );
  Test({LINENUM}52601, 'ComplexNumber("' +  '+1.0e+1*i−0.0e0'                                     + '")',  ASC(0, 10)                 );
  Test({LINENUM}52602, 'ComplexNumber("' +  '+1.0e+1⋅J−0.0E+0'                                    + '")',  ASC(0, 10)                 );
  Test({LINENUM}52603, 'ComplexNumber("' +  '+1.0000000000e+1*i−0.00000000000e00000'              + '")',  ASC(0, 10)                 );
  Test({LINENUM}52604, 'ComplexNumber("' +  '5.325632e22 + .25587i'                               + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52605, 'ComplexNumber("' +  '5.325632e22 − .25587i'                               + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52606, 'ComplexNumber("' +  '.25587i + 5.325632e22'                               + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52607, 'ComplexNumber("' +  '−.25587i + 5.325632e22'                              + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52608, 'ComplexNumber("' +  '.25587i+5.325632e22'                                 + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52609, 'ComplexNumber("' +  '0.25587i+5.325632e22'                                + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52610, 'ComplexNumber("' +  '+.25587i+5.325632e22'                                + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52611, 'ComplexNumber("' +  '−.25587i+5.325632e22'                                + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52612, 'ComplexNumber("' +  '+0.25587i+5.325632e22'                               + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52613, 'ComplexNumber("' +  '−0.25587i+5.325632e22'                               + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52614, 'ComplexNumber("' +  '5.325632e22 + .25587*I'                              + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52615, 'ComplexNumber("' +  '5.325632e22 − .25587*I'                              + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52616, 'ComplexNumber("' +  '5.325632e22 − .25587*I'                              + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52617, 'ComplexNumber("' +  '5.325632e22 − .25587*I'                              + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52618, 'ComplexNumber("' +  '.25587*I + 5.325632e22'                              + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52619, 'ComplexNumber("' +  #9'−.25587*I + 5.325632e22'                           + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52620, 'ComplexNumber("' +  '.25587*I+5.325632e22'                                + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52621, 'ComplexNumber("' +  '0.25587*I+5.325632e22'                               + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52622, 'ComplexNumber("' +  '+.25587*I+5.325632e22'                               + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52623, 'ComplexNumber("' +  '−.25587*I+5.325632e22'                               + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52624, 'ComplexNumber("' +  '+0.25587*I+5.325632e22'                              + '")',  ASC(5.325632e22, 0.25587)  );
  Test({LINENUM}52625, 'ComplexNumber("' +  '−0.25587*I+5.325632e22'                              + '")',  ASC(5.325632e22, -0.25587) );
  Test({LINENUM}52626, 'ComplexNumber("' +  '−0.25587*I+5.325632e22 − 2i'                         + '")',  ASC(5.325632e22, -2.25587) );
  Test({LINENUM}52627, 'ComplexNumber("' +  '−0.25587*I+5.325632e22 − 2i + 0.1e−100'              + '")',  ASC(5.325632e22, -2.25587) );
  Test({LINENUM}52628, 'ComplexNumber("' +  '−0.25587*I+5.325632e22 − 2i + 0.1e−100'              + '")',  ASC(5.325632e22, -2.25587) );
  Test({LINENUM}52629, 'ComplexNumber("' +  #13#10#9'−0.25587*I+5.325632e22 −2i'                  + '")',  ASC(5.325632e22, -2.25587) );
  Test({LINENUM}52630, 'ComplexNumber("' +  '10'                                                  + '")',  ASC(10, 0)                 );
  Test({LINENUM}52631, 'ComplexNumber("' +  ' 10 '                                                + '")',  ASC(10, 0)                 );
  Test({LINENUM}52632, 'ComplexNumber("' +  '  10  '                                              + '")',  ASC(10, 0)                 );
  Test({LINENUM}52633, 'ComplexNumber("' +  '  10  '                                              + '")',  ASC(10, 0)                 );
  Test({LINENUM}52634, 'ComplexNumber("' +  '10'                                                  + '")',  ASC(10, 0)                 );
  Test({LINENUM}52635, 'ComplexNumber("' +  #9'10'                                                + '")',  ASC(10, 0)                 );
  Test({LINENUM}52636, 'ComplexNumber("' +  #13#10'10'                                            + '")',  ASC(10, 0)                 );
  Test({LINENUM}52637, 'ComplexNumber("' +  #13#10'i '                                            + '")',  ASC(0, 1)                  );
  Test({LINENUM}52638, 'ComplexNumber("' +  #9'10'                                                + '")',  ASC(10, 0)                 );
  Test({LINENUM}52639, 'ComplexNumber("' +  '10+i'                                                + '")',  ASC(10, 1)                 );
  Test({LINENUM}52640, 'ComplexNumber("' +  '11+i'                                                + '")',  ASC(11, 1)                 );
  Test({LINENUM}52641, 'ComplexNumber("' +  '11i'                                                 + '")',  ASC(0, 11)                 );
  Test({LINENUM}52642, 'ComplexNumber("' +  '−5i + 3.1415'                                        + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52643, 'ComplexNumber("' +  '−5⋅i + 3.1415'                                       + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52644, 'ComplexNumber("' +  '−5⋅j + 3.1415'                                       + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52645, 'ComplexNumber("' +  '−5⋅I + 3.1415'                                       + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52646, 'ComplexNumber("' +  '−5⋅J + 3.1415'                                       + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52647, 'ComplexNumber("' +  '−5.0e0*I + 0.31415E1'                                + '")',  ASC(3.1415, -5)            );
  Test({LINENUM}52648, 'ComplexNumber("' +  '1e6 * i'                                             + '")',  ASC(0, 1E6)                );
  Test({LINENUM}52649, 'ComplexNumber("' +  '−1e6 * i'                                            + '")',  ASC(0, -1E6)               );
  Test({LINENUM}52650, 'ComplexNumber("' +  '1e−6 * i'                                            + '")',  ASC(0, 1E-6)               );
  Test({LINENUM}52651, 'ComplexNumber("' +  '−1e−6 * i'                                           + '")',  ASC(0, -1E-6)              );
  Test({LINENUM}52652, 'ComplexNumber("' +  '−1.0e6 * i'                                          + '")',  ASC(0, -1E6)               );
  Test({LINENUM}52653, 'ComplexNumber("' +  '−1.0e6 * i + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52654, 'ComplexNumber("' +  '1e6 ⋅ i'                                             + '")',  ASC(0, 1E6)                );
  Test({LINENUM}52655, 'ComplexNumber("' +  '−1e6 ⋅ i'                                            + '")',  ASC(0, -1E6)               );
  Test({LINENUM}52656, 'ComplexNumber("' +  '1e−6 ⋅ i'                                            + '")',  ASC(0, 1E-6)               );
  Test({LINENUM}52657, 'ComplexNumber("' +  '−1e−6 ⋅ i'                                           + '")',  ASC(0, -1E-6)              );
  Test({LINENUM}52658, 'ComplexNumber("' +  '−1.0e6 ⋅ i'                                          + '")',  ASC(0, -1E6)               );
  Test({LINENUM}52659, 'ComplexNumber("' +  '−1.0e6 ⋅ i + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52660, 'ComplexNumber("' +  '−1.0e6 ⋅ I + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52661, 'ComplexNumber("' +  '−1.0e6 ⋅ j + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52662, 'ComplexNumber("' +  '−1.0e6 ⋅ J + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52663, 'ComplexNumber("' +  '−1.0e6 ⋅ i'                                          + '")',  ASC(0, -1E6)               );
  Test({LINENUM}52664, 'ComplexNumber("' +  '−1.0e6   i + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52665, 'ComplexNumber("' +  '−1.0e6   I + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Test({LINENUM}52666, 'ComplexNumber("' +  '−1.0e6   j + 78.90'                                  + '")',  ASC(78.9, -1E6)            );
  Eps; Test({LINENUM}52667, 'ComplexNumber("' +  '−1.0e6   J + 78.90000000000000000000000000000000'    + '")',  ASC(78.9, -1E6)            );

  Test({LINENUM}52669, 'ComplexNumber("' + #0                                                                + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52670, 'ComplexNumber("' + ''                                                                + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52671, 'ComplexNumber("' + ' '                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52672, 'ComplexNumber("' + '  '                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52673, 'ComplexNumber("' + '   '                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52674, 'ComplexNumber("' + '     +     '                                                     + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52675, 'ComplexNumber("' + ' -- '                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52676, 'ComplexNumber("' + '5+'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52677, 'ComplexNumber("' + '5 +'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52678, 'ComplexNumber("' + '5+ '                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52679, 'ComplexNumber("' + '5 + '                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52680, 'ComplexNumber("' + ' 5 + '                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52681, 'ComplexNumber("' + '5+  '                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52682, 'ComplexNumber("' + '5 +  '                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52683, 'ComplexNumber("' + '5-'                                                              + '")', failure, 'Cannot convert string "5-" to a complex number.');
  Test({LINENUM}52684, 'ComplexNumber("' + '5 -'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52685, 'ComplexNumber("' + '5- '                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52686, 'ComplexNumber("' + '5 - '                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52687, 'ComplexNumber("' + ' 5 - '                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52688, 'ComplexNumber("' + '5-  '                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52689, 'ComplexNumber("' + '5 -  '                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52690, 'ComplexNumber("' + ' 10 - '                                                          + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52691, 'ComplexNumber("' + '5+3*'                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52692, 'ComplexNumber("' + '5 + 3 * '                                                        + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52693, 'ComplexNumber("' + '5 + 3 *'                                                         + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52694, 'ComplexNumber("' + '5+3* '                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52695, 'ComplexNumber("' + '5 - 3 * '                                                        + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52696, 'ComplexNumber("' + '-10-2⋅'                                                          + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52697, 'ComplexNumber("' + '-10 - 2⋅'                                                        + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52698, 'ComplexNumber("' + '-10 - 2 ⋅ '                                                      + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52699, 'ComplexNumber("' + '*2'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52700, 'ComplexNumber("' + '*'                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52701, 'ComplexNumber("' + '+'                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52702, 'ComplexNumber("' + '-'                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52703, 'ComplexNumber("' + '3+2i-'                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52704, 'ComplexNumber("' + '-2-2i+'                                                          + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52705, 'ComplexNumber("' + '2E'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52706, 'ComplexNumber("' + '-.9e'                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52707, 'ComplexNumber("' + '1+e'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52708, 'ComplexNumber("' + '1+6E'                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52709, 'ComplexNumber("' + '2Ei'                                                             + '")', failure, 'Cannot convert string "2Ei" to a complex number.');
  Test({LINENUM}52710, 'ComplexNumber("' + '-.3ei'                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52711, 'ComplexNumber("' + '-2.4-.4E*i'                                                      + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52712, 'ComplexNumber("' + '/'                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52713, 'ComplexNumber("' + '('                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52714, 'ComplexNumber("' + '?'                                                               + '")', failure, 'Cannot convert string "?" to a complex number.');
  Test({LINENUM}52715, 'ComplexNumber("' + ','                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52716, 'ComplexNumber("' + '☃'                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52717, 'ComplexNumber("' + '⌬'                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52718, 'ComplexNumber("' + '∯'                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52719, 'ComplexNumber("' + '('                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52720, 'ComplexNumber("' + ')'                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52721, 'ComplexNumber("' + '()'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52722, 'ComplexNumber("' + 'E'                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52723, 'ComplexNumber("' + 'e'                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52724, 'ComplexNumber("' + '.E'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52725, 'ComplexNumber("' + '.e'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52726, 'ComplexNumber("' + '+E'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52727, 'ComplexNumber("' + '+e'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52728, 'ComplexNumber("' + '+.E'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52729, 'ComplexNumber("' + '+.e'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52730, 'ComplexNumber("' + '-e'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52731, 'ComplexNumber("' + '-E'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52732, 'ComplexNumber("' + '-.e'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52733, 'ComplexNumber("' + '-.E'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52734, 'ComplexNumber("' + 'E+'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52735, 'ComplexNumber("' + 'e+'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52736, 'ComplexNumber("' + 'E-'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52737, 'ComplexNumber("' + 'e-'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52738, 'ComplexNumber("' + 'E+i'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52739, 'ComplexNumber("' + 'E+I'                                                             + '")', failure, 'Cannot convert string "E+I" to a complex number.');
  Test({LINENUM}52740, 'ComplexNumber("' + 'e-i'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52741, 'ComplexNumber("' + 'e*i'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52742, 'ComplexNumber("' + 'I*e'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52743, 'ComplexNumber("' + '+i*e'                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52744, 'ComplexNumber("' + '+i*e+'                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52745, 'ComplexNumber("' + 'e+i'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52746, 'ComplexNumber("' + '.e+i'                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52747, 'ComplexNumber("' + '.e.+i'                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52748, 'ComplexNumber("' + '+1.0000000000e+1.000000000*i-0.00000000000e00000'                + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52749, 'ComplexNumber("' + '-0.25587*I+5.325632e22 - 2i + 0.1f-100'                          + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52750, 'ComplexNumber("' + 'A'                                                               + '")', failure, 'Cannot convert string "A" to a complex number.');
  Test({LINENUM}52751, 'ComplexNumber("' + 'A*I'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52752, 'ComplexNumber("' + '1a'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52753, 'ComplexNumber("' + '1+2*a'                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52754, 'ComplexNumber("' + '3..14'                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52755, 'ComplexNumber("' + '3..'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52756, 'ComplexNumber("' + '..3'                                                             + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52757, 'ComplexNumber("' + '3.1.4'                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52758, 'ComplexNumber("' + '+3.1.4'                                                          + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52759, 'ComplexNumber("' + '-3.1.4'                                                          + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52760, 'ComplexNumber("' + '3ee4'                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52761, 'ComplexNumber("' + '3ee+4'                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52762, 'ComplexNumber("' + '3e--4'                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52763, 'ComplexNumber("' + '3e--4i'                                                          + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52764, 'ComplexNumber("' + '4-3ei'                                                           + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52765, 'ComplexNumber("' + 'ie'                                                              + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52766, 'ComplexNumber("' + 'Microsoft Internet Explorer'                                     + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52767, 'ComplexNumber("' + #$222b                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52768, 'ComplexNumber("' + #8                                                                + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52769, 'ComplexNumber("' + #9                                                                + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52770, 'ComplexNumber("' + #27                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52771, 'ComplexNumber("' + #13#10                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52772, 'ComplexNumber("' + #13                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52773, 'ComplexNumber("' + #10                                                               + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52774, 'ComplexNumber("' + '2+'#8                                                            + '")', failure, 'Cannot convert string "');
  Test({LINENUM}52775, 'ComplexNumber("' + '10'#0                                                            + '")', failure, 'Cannot convert string "');

  Test({LINENUM}52777, 'boolean("false")', False);
  Test({LINENUM}52778, 'boolean("False")', False);
  Test({LINENUM}52779, 'boolean(" False   ")', False);
  Test({LINENUM}52780, 'boolean("FALSE")', False);
  Test({LINENUM}52781, 'boolean(" FALSE ")', False);
  Test({LINENUM}52782, 'boolean("true")', True);
  Test({LINENUM}52783, 'boolean("True")', True);
  Test({LINENUM}52784, 'boolean("TRUE")', True);
  Test({LINENUM}52785, 'boolean("true ")', True);
  Test({LINENUM}52786, 'boolean("  TRUE ")', True);
  Test({LINENUM}52787, 'boolean("  TrUE")', True);
  Test({LINENUM}52788, 'boolean("cat")', failure, 'String "cat" cannot be converted to a boolean.');
  Test({LINENUM}52789, 'boolean("dog")', failure, 'String "dog" cannot be converted to a boolean.');
  Test({LINENUM}52790, 'boolean("yes")', failure, 'String "yes" cannot be converted to a boolean.');
  Test({LINENUM}52791, 'boolean("")', failure, 'String "" cannot be converted to a boolean.');
  Test({LINENUM}52792, 'boolean("y")', failure, 'String "y" cannot be converted to a boolean.');
  Test({LINENUM}52793, 'boolean("1")', failure, 'String "1" cannot be converted to a boolean.');
  Test({LINENUM}52794, 'boolean("0")', failure, 'String "0" cannot be converted to a boolean.');

  Test({LINENUM}52796, 'string("Sällan ses solen så storslaget skina, som stjärnan så småningom sken.")',
    'Sällan ses solen så storslaget skina, som stjärnan så småningom sken.');

  Test({LINENUM}52799, 'string("")', '');

  Test({LINENUM}52801, 'vector("1, 2, 3")', [1, 2, 3]);
  Test({LINENUM}52802, 'vector("3.1415, 2.7182")', [3.1415, 2.7182]);
  Test({LINENUM}52803, 'vector("  10,   20,   30, 40,50")', [10, 20, 30, 40, 50]);
  Test({LINENUM}52804, 'vector("1; 2; 3")', [1, 2, 3]);
  Test({LINENUM}52805, 'vector("3.1415; 2.7182")', [3.1415, 2.7182]);
  Test({LINENUM}52806, 'vector("  10;   20;   30; 40;50")', [10, 20, 30, 40, 50]);
  Test({LINENUM}52807, 'vector("1'#9'2'#9'3")', [1, 2, 3]);
  Test({LINENUM}52808, 'vector("1'#13#10'2'#13#10'3")', [1, 2, 3]);
  Test({LINENUM}52809, 'vector("1'#13#10'2'#13#10'3'#13#10'")', [1, 2, 3]);
  Test({LINENUM}52810, 'vector("3.1415'#9'2.7182")', [3.1415, 2.7182]);
  Test({LINENUM}52811, 'vector("  10'#9'   20'#9'   30'#9' 40'#9'50")', [10, 20, 30, 40, 50]);
  Test({LINENUM}52812, 'vector("5, -3.8, 1.2E-10,0")', [5, -3.8, 1.2E-10, 0]);
  Test({LINENUM}52813, 'vector("-1, -2, -3E-50, -4.0")', [-1, -2, -3E-50, -4]);
  Test({LINENUM}52814, 'vector("5, -3.8, 1.2E−10,0")', [5, -3.8, 1.2E-10, 0]);
  Test({LINENUM}52815, 'vector("−1, −2, −3E−50, −4.0")', [-1, -2, -3E-50, -4]);
  Test({LINENUM}52816, 'vector("1, 2, 3, Vera Verto")', failure, 'Cannot convert string "Vera Verto" to a real number.');
  Test({LINENUM}52817, 'vector("21")', [21]);
  Test({LINENUM}52818, 'vector("")', TAlgosimRealVector.Create);
  Test({LINENUM}52819, 'vector("1, 2, , 3")', failure, 'Cannot convert string "" to a real number.');

  Test({LINENUM}52821, 'RealVector("1, 2, 3")', [1, 2, 3]);
  Test({LINENUM}52822, 'RealVector("3.1415, 2.7182")', [3.1415, 2.7182]);
  Test({LINENUM}52823, 'RealVector("  10,   20,   30, 40,50")', [10, 20, 30, 40, 50]);
  Test({LINENUM}52824, 'RealVector("1; 2; 3")', [1, 2, 3]);
  Test({LINENUM}52825, 'RealVector("3.1415; 2.7182")', [3.1415, 2.7182]);
  Test({LINENUM}52826, 'RealVector("  10;   20;   30; 40;50")', [10, 20, 30, 40, 50]);
  Test({LINENUM}52827, 'RealVector("1'#9'2'#9'3")', [1, 2, 3]);
  Test({LINENUM}52828, 'RealVector("1'#13#10'2'#13#10'3")', [1, 2, 3]);
  Test({LINENUM}52829, 'RealVector("1'#13#10'2'#13#10'3"'#13#10')', [1, 2, 3]);
  Test({LINENUM}52830, 'RealVector("3.1415'#9'2.7182")', [3.1415, 2.7182]);
  Test({LINENUM}52831, 'RealVector("  10'#9'   20'#9'   30'#9' 40'#9'50")', [10, 20, 30, 40, 50]);
  Test({LINENUM}52832, 'RealVector("5, -3.8, 1.2E-10,0")', [5, -3.8, 1.2E-10, 0]);
  Test({LINENUM}52833, 'RealVector("-1, -2, -3E-50, -4.0")', [-1, -2, -3E-50, -4]);
  Test({LINENUM}52834, 'RealVector("5, -3.8, 1.2E−10,0")', [5, -3.8, 1.2E-10, 0]);
  Test({LINENUM}52835, 'RealVector("−1, −2, −3E−50, −4.0")', [-1, -2, -3E-50, -4]);
  Test({LINENUM}52836, 'RealVector("1, 2, 3, Vera Verto")', failure, 'Cannot convert string "Vera Verto" to a real number.');
  Test({LINENUM}52837, 'RealVector("21")', [21]);
  Test({LINENUM}52838, 'RealVector("")', TAlgosimRealVector.Create);
  Test({LINENUM}52839, 'RealVector("1, 2, , 3")', failure, 'Cannot convert string "" to a real number.');

  Test({LINENUM}52841, 'ComplexVector("1, 2, 3")', [TASC(1), 2, 3]);
  Test({LINENUM}52842, 'ComplexVector("3.1415, 2.7182")', [TASC(3.1415), 2.7182]);
  Test({LINENUM}52843, 'ComplexVector("  10,   20,   30, 40,50")', [TASC(10), 20, 30, 40, 50]);
  Test({LINENUM}52844, 'ComplexVector("1; 2; 3")', [TASC(1), 2, 3]);
  Test({LINENUM}52845, 'ComplexVector("3.1415; 2.7182")', [TASC(3.1415), 2.7182]);
  Test({LINENUM}52846, 'ComplexVector("  10;   20;   30; 40;50")', [TASC(10), 20, 30, 40, 50]);
  Test({LINENUM}52847, 'ComplexVector("1'#9'2'#9'3")', [TASC(1), 2, 3]);
  Test({LINENUM}52848, 'ComplexVector("1'#13#10'2'#13#10'3")', [TASC(1), 2, 3]);
  Test({LINENUM}52849, 'ComplexVector("1'#13#10'2'#13#10'3'#13#10'")', [TASC(1), 2, 3]);
  Test({LINENUM}52850, 'ComplexVector("3.1415'#9'2.7182")', [TASC(3.1415), 2.7182]);
  Test({LINENUM}52851, 'ComplexVector("  10'#9'   20'#9'   30'#9' 40'#9'50")', [TASC(10), 20, 30, 40, 50]);
  Test({LINENUM}52852, 'ComplexVector("5, -3.8, 1.2E-10,0")', [TASC(5), -3.8, 1.2E-10, 0]);
  Test({LINENUM}52853, 'ComplexVector("-1, -2, -3E-50, -4.0")', [TASC(-1), -2, -3E-50, -4]);
  Test({LINENUM}52854, 'ComplexVector("5, -3.8, 1.2E−10,0")', [TASC(5), -3.8, 1.2E-10, 0]);
  Test({LINENUM}52855, 'ComplexVector("−1, −2, −3E−50, −4.0")', [TASC(-1), -2, -3E-50, -4]);
  Test({LINENUM}52856, 'ComplexVector("1, 2, 3, Vera Verto")', failure, 'Cannot convert string "Vera Verto" to a complex number.');
  Test({LINENUM}52857, 'ComplexVector("21")', [TASC(21)]);
  Test({LINENUM}52858, 'ComplexVector("")', TAlgosimComplexVector.Create);
  Test({LINENUM}52859, 'ComplexVector("1, 2, , 3")', failure, 'Cannot convert string "" to a complex number.');

  Test({LINENUM}52861, 'ComplexVector("1, 2, i, 3 + 4⋅i, -7, 5 − i, 2 + i + .5, .5 + j, 1.2E20 + 2.2E30 I")',
    [1, 2, ImaginaryUnit, 3 + 4*ImaginaryUnit, -7, 5 - ImaginaryUnit, 2.5 + ImaginaryUnit, 0.5 + ImaginaryUnit, 1.2E20 + 2.2E30*ImaginaryUnit]);

  _s :=
    '1, 2, -3, 4, 5'#13#10 +
    '3.1415, −10, 1.2E3, 5E−6, 6.'#13#10 +
    '.5, -.3, −.8E20, 3e3, .0'#13#10 +
    '7, 6; 5'#9'   4,    3.0e+0';

  Test({LINENUM}52870, 'matrix("' + _s + '")', 5, [1, 2, -3, 4, 5, 3.1415, -10, 1200, 5E-6, 6, 0.5, -0.3, -0.8E20, 3000, 0, 7, 6, 5, 4, 3]);
  Test({LINENUM}52871, 'RealMatrix("' + _s + '")', 5, [1, 2, -3, 4, 5, 3.1415, -10, 1200, 5E-6, 6, 0.5, -0.3, -0.8E20, 3000, 0, 7, 6, 5, 4, 3]);
  Test({LINENUM}52872, 'ComplexMatrix("' + _s + '")', 5, [TASC(1), 2, -3, 4, 5, 3.1415, -10, 1200, 5E-6, 6, 0.5, -0.3, -0.8E20, 3000, 0, 7, 6, 5, 4, 3]);

  _s :=
    '1, 2, 3'#13#10 +
    '4, 5, 6';

  Test({LINENUM}52878, 'matrix("' + _s + '")', 3, [1, 2, 3, 4, 5, 6]);
  Test({LINENUM}52879, 'RealMatrix("' + _s + '")', 3, [1, 2, 3, 4, 5, 6]);
  Test({LINENUM}52880, 'ComplexMatrix("' + _s + '")', 3, [TASC(1), 2, 3, 4, 5, 6]);

  _s :=
    '1, 2, 3'#13#10 +
    '4, 5';

  Test({LINENUM}52886, 'matrix("' + _s + '")', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}52887, 'RealMatrix("' + _s + '")', failure, 'Attempt to create a non-rectangular matrix.');
  Test({LINENUM}52888, 'ComplexMatrix("' + _s + '")', failure, 'Attempt to create a non-rectangular matrix.');

  _s :=
    '1, 2, 3'#13#10 +
    '4, 5, 6'#13#10 +
    '7, 8, 9'#13#10 +
    '1, 0, 1';

  Test({LINENUM}52896, 'matrix("' + _s + '")', 3, [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1]);
  Test({LINENUM}52897, 'RealMatrix("' + _s + '")', 3, [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1]);
  Test({LINENUM}52898, 'ComplexMatrix("' + _s + '")', 3, [TASC(1), 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1]);

  _s :=
    '1, 2, 3';

  Test({LINENUM}52903, 'matrix("' + _s + '")', 3, [1, 2, 3]);
  Test({LINENUM}52904, 'RealMatrix("' + _s + '")', 3, [1, 2, 3]);
  Test({LINENUM}52905, 'ComplexMatrix("' + _s + '")', 3, [TASC(1), 2, 3]);

  _s :=
    '1, 2, 3'#13#10 +
    '4, 5, 6'#13#10 +
    '7, nargle, 9'#13#10 +
    '1, 0, 1';

  Test({LINENUM}52913, 'matrix("' + _s + '")', failure, 'Cannot convert string "nargle" to a real number.');
  Test({LINENUM}52914, 'RealMatrix("' + _s + '")', failure, 'Cannot convert string "nargle" to a real number.');
  Test({LINENUM}52915, 'ComplexMatrix("' + _s + '")', failure, 'Cannot convert string "nargle" to a complex number.');

  _s :=
    '1, 2, 3'#13#10 +
    '4, 5, 6'#13#10 +
    '7, , 9'#13#10 +
    '1, 0, 1';

  Test({LINENUM}52923, 'matrix("' + _s + '")', failure, 'Cannot convert string "" to a real number.');
  Test({LINENUM}52924, 'RealMatrix("' + _s + '")', failure, 'Cannot convert string "" to a real number.');
  Test({LINENUM}52925, 'ComplexMatrix("' + _s + '")', failure, 'Cannot convert string "" to a complex number.');

  _s :=
    '1, 2, 3'#13#10 +
    '4, 5, 6'#13#10 +
    '7, 8,  '#13#10 +
    '1, 0, 1';

  Test({LINENUM}52933, 'matrix("' + _s + '")', failure, 'Cannot convert string "" to a real number.');
  Test({LINENUM}52934, 'RealMatrix("' + _s + '")', failure, 'Cannot convert string "" to a real number.');
  Test({LINENUM}52935, 'ComplexMatrix("' + _s + '")', failure, 'Cannot convert string "" to a complex number.');

  _s :=
    'i, 2, 3'#13#10 +
    '4, 5, 6'#13#10 +
    '7, 8 + 3i, 9.5 - 2.1 i'#13#10 +
    '7−2⋅i, 5 - 3*i, 1 + 2 + i';

  Test({LINENUM}52943, 'matrix("' + _s + '")', failure, 'Cannot convert string "i" to a real number.');
  Test({LINENUM}52944, 'RealMatrix("' + _s + '")', failure, 'Cannot convert string "i" to a real number.');
  Test({LINENUM}52945, 'ComplexMatrix("' + _s + '")', 3, [ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8 + 3*ImaginaryUnit, 9.5 - 2.1*ImaginaryUnit, 7 - 2*ImaginaryUnit, 5 - 3*ImaginaryUnit, 3 + ImaginaryUnit]);

  Test({LINENUM}52947, 'ToList("the emotional range of a teaspoon")',
    TAlgosimArray.CreateWithValue('the emotional range of a teaspoon'.ToCharArray));

  Test({LINENUM}52950, 'ToList("")', strarr([]));

  Test({LINENUM}52952, 'ToSet("the emotional range of a teaspoon")', asoset(['t', 'h', 'e', ' ', 'e', 'm', 'o', 't', 'i', 'o', 'n', 'a', 'l', ' ', 'r', 'a', 'n', 'g', 'e', ' ', 'o', 'f', ' ', 'a', ' ', 't', 'e', 'a', 's', 'p', 'o', 'o', 'n']));

  Test({LINENUM}52954, 'ToSet("")', asoset([]));

  Test({LINENUM}52956, 'color("black")', ASO(TRGB.Create(0, 0, 0)));
  Test({LINENUM}52957, 'color("red")', ASO(TRGB.Create(1, 0, 0)));
  Test({LINENUM}52958, 'color("lime")', ASO(TRGB.Create(0, 1, 0)));
  Test({LINENUM}52959, 'color("blue")', ASO(TRGB.Create(0, 0, 1)));
  Test({LINENUM}52960, 'color("yellow")', ASO(TRGB.Create(1, 1, 0)));
  Test({LINENUM}52961, 'color("white")', ASO(TRGB.Create(1, 1, 1)));
  Test({LINENUM}52962, 'color("navy")', ASO(TRGB.Create(0, 0, $80/$FF)));
  Test({LINENUM}52963, 'color("green")', ASO(TRGB.Create(0, $80/$FF, 0)));
  Test({LINENUM}52964, 'color("gold")', ASO(TRGB.Create(1, $D7/$FF, 0)));

  Test({LINENUM}52966, 'color("#000000")', ASO(TRGB.Create(0, 0, 0)));
  Test({LINENUM}52967, 'color("#FF0000")', ASO(TRGB.Create(1, 0, 0)));
  Test({LINENUM}52968, 'color("#00FF00")', ASO(TRGB.Create(0, 1, 0)));
  Test({LINENUM}52969, 'color("#0000FF")', ASO(TRGB.Create(0, 0, 1)));
  Test({LINENUM}52970, 'color("#FFFF00")', ASO(TRGB.Create(1, 1, 0)));
  Test({LINENUM}52971, 'color("#FF00FF")', ASO(TRGB.Create(1, 0, 1)));
  Test({LINENUM}52972, 'color("#00FFFF")', ASO(TRGB.Create(0, 1, 1)));
  Test({LINENUM}52973, 'color("#FFFFFF")', ASO(TRGB.Create(1, 1, 1)));
  Test({LINENUM}52974, 'color("#808080")', ASO(TRGB.Create($80/$FF, $80/$FF, $80/$FF)));


  //
  // From real vector
  //

  Test({LINENUM}52981, 'number(DebugObject("empty vector"))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}52982, 'number(❨1, 2, 3❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}52983, 'number(❨21❩)', 21.0);
  Test({LINENUM}52984, 'number(❨1/4❩)', 0.25);
  Test({LINENUM}52985, 'number(❨123.456❩)', 123.456);
  Test({LINENUM}52986, 'number(❨123.456E20❩)', 123.456E20);
  Test({LINENUM}52987, 'number(❨123.456E-20❩)', 123.456E-20);

  Test({LINENUM}52989, 'integer(DebugObject("empty vector"))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}52990, 'integer(❨1, 2, 3❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}52991, 'integer(❨21❩)', 21);
  Test({LINENUM}52992, 'integer(❨1/4❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}52993, 'integer(❨123.456❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}52994, 'integer(❨123.456E20❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}52995, 'integer(❨123.456E-20❩)', 0);

  Test({LINENUM}52997, 'RealNumber(DebugObject("empty vector"))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}52998, 'RealNumber(❨1, 2, 3❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}52999, 'RealNumber(❨21❩)', 21.0);
  Test({LINENUM}53000, 'RealNumber(❨1/4❩)', 0.25);
  Test({LINENUM}53001, 'RealNumber(❨123.456❩)', 123.456);
  Test({LINENUM}53002, 'RealNumber(❨123.456E20❩)', 123.456E20);
  Test({LINENUM}53003, 'RealNumber(❨123.456E-20❩)', 123.456E-20);

  Test({LINENUM}53005, 'ComplexNumber(DebugObject("empty vector"))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53006, 'ComplexNumber(❨1, 2, 3❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53007, 'ComplexNumber(❨21❩)', TASC(21.0));
  Test({LINENUM}53008, 'ComplexNumber(❨1/4❩)', TASC(0.25));
  Test({LINENUM}53009, 'ComplexNumber(❨123.456❩)', TASC(123.456));
  Test({LINENUM}53010, 'ComplexNumber(❨123.456E20❩)', TASC(123.456E20));
  Test({LINENUM}53011, 'ComplexNumber(❨123.456E-20❩)', TASC(123.456E-20));

  Test({LINENUM}53013, 'boolean(❨0❩)', True);
  Test({LINENUM}53014, 'boolean(❨1❩)', True);
  Test({LINENUM}53015, 'boolean(❨1, 2❩)', True);
  Test({LINENUM}53016, 'boolean(❨1, 2, 3❩)', True);
  Test({LINENUM}53017, 'boolean(❨1, 2, 3, 4❩)', True);
  Test({LINENUM}53018, 'boolean(❨0, 0, 0, 0, 0, 0❩)', True);
  Test({LINENUM}53019, 'boolean(DebugObject("empty vector"))', False);

  Test({LINENUM}53021, 'string(❨1, 2, 3❩)', '1'#13#10'2'#13#10'3');
  Test({LINENUM}53022, 'string(❨-1, 2, -3❩)', '-1'#13#10'2'#13#10'-3');
  Test({LINENUM}53023, 'string(DebugObject("empty vector"))', '');

  Test({LINENUM}53025, 'RealVector(❨1, 2, 3❩)', [1, 2, 3]);
  Test({LINENUM}53026, 'RealVector(❨5, -2, 0, 9❩)', [5, -2, 0, 9]);
  Test({LINENUM}53027, 'RealVector(❨21❩)', [21]);
  Test({LINENUM}53028, 'RealVector(DebugObject("empty vector"))', TAlgosimRealVector.Create);

  Test({LINENUM}53030, 'ComplexVector(❨1, 2, 3❩)', [TASC(1), 2, 3]);
  Test({LINENUM}53031, 'ComplexVector(❨5, -2, 0, 9❩)', [TASC(5), -2, 0, 9]);
  Test({LINENUM}53032, 'ComplexVector(❨21❩)', [TASC(21)]);
  Test({LINENUM}53033, 'ComplexVector(DebugObject("empty vector"))', TAlgosimComplexVector.Create);

  Test({LINENUM}53035, 'matrix(❨1, 2, 3❩)', 1, [1, 2, 3]);
  Test({LINENUM}53036, 'matrix(❨5, -2, 0, 9❩)', 1, [5, -2, 0, 9]);
  Test({LINENUM}53037, 'matrix(❨21❩)', 1, [21]);
  Test({LINENUM}53038, 'matrix(DebugObject("empty vector"))', TAlgosimRealMatrix.Create);

  Test({LINENUM}53040, 'RealMatrix(❨1, 2, 3❩)', 1, [1, 2, 3]);
  Test({LINENUM}53041, 'RealMatrix(❨5, -2, 0, 9❩)', 1, [5, -2, 0, 9]);
  Test({LINENUM}53042, 'RealMatrix(❨21❩)', 1, [21]);
  Test({LINENUM}53043, 'RealMatrix(DebugObject("empty vector"))', TAlgosimRealMatrix.Create);

  Test({LINENUM}53045, 'ComplexMatrix(❨1, 2, 3❩)', 1, [TASC(1), 2, 3]);
  Test({LINENUM}53046, 'ComplexMatrix(❨5, -2, 0, 9❩)', 1, [TASC(5), -2, 0, 9]);
  Test({LINENUM}53047, 'ComplexMatrix(❨21❩)', 1, [TASC(21)]);
  Test({LINENUM}53048, 'ComplexMatrix(DebugObject("empty vector"))', TAlgosimComplexMatrix.Create);

  Test({LINENUM}53050, 'ToList(❨1, 2, 3❩)', intarr([1, 2, 3]));
  Test({LINENUM}53051, 'ToList(❨5, -2, 0, 9❩)', intarr([5, -2, 0, 9]));
  Test({LINENUM}53052, 'ToList(❨5, -2, 0, 9, 0❩)', intarr([5, -2, 0, 9, 0]));
  Test({LINENUM}53053, 'ToList(❨21❩)', intarr([21]));
  Test({LINENUM}53054, 'ToList(DebugObject("empty vector"))', intarr([]));

  Test({LINENUM}53056, 'ToSet(❨1, 2, 3❩)', intset([1, 2, 3]));
  Test({LINENUM}53057, 'ToSet(❨5, -2, 0, 9❩)', intset([5, -2, 0, 9]));
  Test({LINENUM}53058, 'ToSet(❨5, -2, 0, 9, 0❩)', intset([5, -2, 0, 9]));
  Test({LINENUM}53059, 'ToSet(❨21❩)', intset([21]));
  Test({LINENUM}53060, 'ToSet(DebugObject("empty vector"))', intset([]));

  Test({LINENUM}53062, 'color(❨0.1, 0.2, 0.3❩)', failure, 'An object of type "real vector" cannot be converted to a colour.');


  //
  // From complex vector
  //

  Test({LINENUM}53069, 'number(ComplexVector(DebugObject("empty vector")))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53070, 'number(❨5, i, 0, 1❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53071, 'number(❨5, i❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53072, 'number(❨5 + i - i❩)', TASC(5));
  Test({LINENUM}53073, 'number(❨i❩)', ImaginaryUnit);
  Test({LINENUM}53074, 'number(❨1 + i❩)', 1 + ImaginaryUnit);

  Test({LINENUM}53076, 'integer(ComplexVector(DebugObject("empty vector")))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53077, 'integer(❨5, i, 0, 1❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53078, 'integer(❨5, i❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53079, 'integer(❨5 + i - i❩)', 5);
  Test({LINENUM}53080, 'integer(❨i❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53081, 'integer(❨1 + i❩)', failure, 'Object cannot be represented as a 64-bit integer.');

  Test({LINENUM}53083, 'RealNumber(ComplexVector(DebugObject("empty vector")))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53084, 'RealNumber(❨5, i, 0, 1❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53085, 'RealNumber(❨5, i❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53086, 'RealNumber(❨5 + i - i❩)', 5.0);
  Test({LINENUM}53087, 'RealNumber(❨i❩)', failure, 'Complex number i cannot be converted to a real number.');
  Test({LINENUM}53088, 'RealNumber(❨1 + i❩)', failure, 'Complex number 1 + i cannot be converted to a real number.');

  Test({LINENUM}53090, 'ComplexNumber(ComplexVector(DebugObject("empty vector")))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53091, 'ComplexNumber(❨5, i, 0, 1❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53092, 'ComplexNumber(❨5, i❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53093, 'ComplexNumber(❨5 + i - i❩)', TASC(5));
  Test({LINENUM}53094, 'ComplexNumber(❨i❩)', ImaginaryUnit);
  Test({LINENUM}53095, 'ComplexNumber(❨1 + i❩)', 1 + ImaginaryUnit);

  Test({LINENUM}53097, 'boolean(ComplexVector(DebugObject("empty vector")))', False);
  Test({LINENUM}53098, 'boolean(❨5, i, 0, 1❩)', True);
  Test({LINENUM}53099, 'boolean(❨5, i❩)', True);
  Test({LINENUM}53100, 'boolean(❨5 + i - i❩)', True);
  Test({LINENUM}53101, 'boolean(❨i❩)', True);
  Test({LINENUM}53102, 'boolean(❨1 + i❩)', True);
  Test({LINENUM}53103, 'boolean(❨0 + i - i❩)', True);

  Test({LINENUM}53105, 'string(❨1, 2, i❩)', '1'#13#10'2'#13#10'i');
  Test({LINENUM}53106, 'string(❨-1, 2, -i❩)', '-1'#13#10'2'#13#10'-i');
  Test({LINENUM}53107, 'string(ComplexVector(DebugObject("empty vector")))', '');

  Test({LINENUM}53109, 'RealVector(❨1, 2, i, 0❩)', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component i.');
  Test({LINENUM}53110, 'RealVector(❨1, -2, -i, 0❩)', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component −i.');
  Test({LINENUM}53111, 'RealVector(❨1 + i❩)', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component 1 + i.');
  Test({LINENUM}53112, 'RealVector(❨1 + i - i, 2, 3, 4❩)', [1, 2, 3, 4]);
  Test({LINENUM}53113, 'RealVector(❨21 + i - i❩)', [21]);

  Test({LINENUM}53115, 'ComplexVector(❨1, 2, i, 0❩)', [1, 2, ImaginaryUnit, 0]);
  Test({LINENUM}53116, 'ComplexVector(❨1, -2, -i, 0❩)', [1, -2, -ImaginaryUnit, 0]);
  Test({LINENUM}53117, 'ComplexVector(❨1 + i❩)', [1 + ImaginaryUnit]);
  Test({LINENUM}53118, 'ComplexVector(❨1 + i - i, 2, 3, 4❩)', [TASC(1), 2, 3, 4]);
  Test({LINENUM}53119, 'ComplexVector(❨21 + i - i❩)', [TASC(21)]);

  Test({LINENUM}53121, 'matrix(❨1, 2, i, 0❩)', 1, [1, 2, ImaginaryUnit, 0]);
  Test({LINENUM}53122, 'matrix(❨1, -2, -i, 0❩)', 1, [1, -2, -ImaginaryUnit, 0]);
  Test({LINENUM}53123, 'matrix(❨1 + i❩)', 1, [1 + ImaginaryUnit]);
  Test({LINENUM}53124, 'matrix(❨1 + i - i, 2, 3, 4❩)', 1, [TASC(1), 2, 3, 4]);
  Test({LINENUM}53125, 'matrix(❨21 + i - i❩)', 1, [TASC(21)]);

  Test({LINENUM}53127, 'RealMatrix(❨1, 2, i, 0❩)', failure, 'Complex vector cannot be converted to real matrix because it contains a non-real component i.');
  Test({LINENUM}53128, 'RealMatrix(❨1, -2, -i, 0❩)', failure, 'Complex vector cannot be converted to real matrix because it contains a non-real component −i.');
  Test({LINENUM}53129, 'RealMatrix(❨1 + i❩)', failure, 'Complex vector cannot be converted to real matrix because it contains a non-real component 1 + i.');
  Test({LINENUM}53130, 'RealMatrix(❨1 + i - i, 2, 3, 4❩)', 1, [1, 2, 3, 4]);
  Test({LINENUM}53131, 'RealMatrix(❨21 + i - i❩)', 1, [21]);

  Test({LINENUM}53133, 'ComplexMatrix(❨1, 2, i, 0❩)', 1, [1, 2, ImaginaryUnit, 0]);
  Test({LINENUM}53134, 'ComplexMatrix(❨1, -2, -i, 0❩)', 1, [1, -2, -ImaginaryUnit, 0]);
  Test({LINENUM}53135, 'ComplexMatrix(❨1 + i❩)', 1, [1 + ImaginaryUnit]);
  Test({LINENUM}53136, 'ComplexMatrix(❨1 + i - i, 2, 3, 4❩)', 1, [TASC(1), 2, 3, 4]);
  Test({LINENUM}53137, 'ComplexMatrix(❨21 + i - i❩)', 1, [TASC(21)]);

  Test({LINENUM}53139, 'ToList(❨1, 2, i, 0, 0❩)', asoarrex([ASO(1), ASO(2), ASO(ImaginaryUnit), ASO(0), ASO(0)]));
  Test({LINENUM}53140, 'ToList(❨1, -2, -i, 0❩)', asoarrex([ASO(1), ASO(-2), ASO(-ImaginaryUnit), ASO(0)]));
  Test({LINENUM}53141, 'ToList(❨1 + i❩)', asoarrex([ASO(1 + ImaginaryUnit)]));
  Test({LINENUM}53142, 'ToList(❨1 + i - i, 2, 3, 4❩)', asoarrex([ASO(1), ASO(2), ASO(3), ASO(4)]));
  Test({LINENUM}53143, 'ToList(❨21 + i - i❩)', asoarrex([ASO(21)]));

  Test({LINENUM}53145, 'ToSet(❨1, 2, i, 0, 0❩)', asosetex([ASO(1), ASO(2), ASO(ImaginaryUnit), ASO(0)]));
  Test({LINENUM}53146, 'ToSet(❨1, -2, -i, 0❩)', asosetex([ASO(1), ASO(-2), ASO(-ImaginaryUnit), ASO(0)]));
  Test({LINENUM}53147, 'ToSet(❨1 + i❩)', asosetex([ASO(1 + ImaginaryUnit)]));
  Test({LINENUM}53148, 'ToSet(❨1 + i - i, 2, 3, 4❩)', asosetex([ASO(1), ASO(2), ASO(3), ASO(4)]));
  Test({LINENUM}53149, 'ToSet(❨21 + i - i❩)', asosetex([ASO(21)]));

  Test({LINENUM}53151, 'color(❨0.1 + i - i, 0.2, 0.3❩)', failure, 'An object of type "complex vector" cannot be converted to a colour.');


  //
  // From real matrix
  //

  Test({LINENUM}53158, 'number(DebugObject("empty matrix"))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53159, 'number(❨❨5, 3❩, ❨1, 2❩❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53160, 'number(❨❨21❩❩)', 21.0);
  Test({LINENUM}53161, 'number(❨❨21.5❩❩)', 21.5);

  Test({LINENUM}53163, 'integer(DebugObject("empty matrix"))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53164, 'integer(❨❨5, 3❩, ❨1, 2❩❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53165, 'integer(❨❨21❩❩)', 21);
  Test({LINENUM}53166, 'integer(❨❨21.5❩❩)', failure, 'Object cannot be represented as a 64-bit integer.');

  Test({LINENUM}53168, 'RealNumber(DebugObject("empty matrix"))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53169, 'RealNumber(❨❨5, 3❩, ❨1, 2❩❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53170, 'RealNumber(❨❨21❩❩)', 21.0);
  Test({LINENUM}53171, 'RealNumber(❨❨21.5❩❩)', 21.5);

  Test({LINENUM}53173, 'ComplexNumber(DebugObject("empty matrix"))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53174, 'ComplexNumber(❨❨5, 3❩, ❨1, 2❩❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53175, 'ComplexNumber(❨❨21❩❩)', TASC(21.0));
  Test({LINENUM}53176, 'ComplexNumber(❨❨21.5❩❩)', TASC(21.5));

  Test({LINENUM}53178, 'boolean(DebugObject("empty matrix"))', False);
  Test({LINENUM}53179, 'boolean(❨❨5, 3❩, ❨1, 2❩❩)', True);
  Test({LINENUM}53180, 'boolean(❨❨21❩❩)', True);
  Test({LINENUM}53181, 'boolean(❨❨21.5❩❩)', True);
  Test({LINENUM}53182, 'boolean(❨❨0❩❩)', True);

  Test({LINENUM}53184, 'string(DebugObject("empty matrix"))', '');
  Test({LINENUM}53185, 'string(❨❨5, 3❩, ❨1, -2❩❩)', '5'#9'3'#13#10'1'#9'-2');
  Test({LINENUM}53186, 'string(❨❨5, 3❩, ❨1, 2❩, ❨0, 4❩❩)', '5'#9'3'#13#10'1'#9'2'#13#10'0'#9'4');
  Test({LINENUM}53187, 'string(❨❨21❩❩)', '21');
  Test({LINENUM}53188, 'string(❨❨21.5❩❩)', '21.5');

  Test({LINENUM}53190, 'vector(DebugObject("empty matrix"))', TAlgosimRealVector.Create);
  Test({LINENUM}53191, 'vector(❨❨5, 3❩, ❨1, 2❩❩)', [5, 3, 1, 2]);
  Test({LINENUM}53192, 'vector(❨❨5, 3❩, ❨1, 2❩, ❨0, 4❩❩)', [5, 3, 1, 2, 0, 4]);
  Test({LINENUM}53193, 'vector(❨❨21❩❩)', [21]);
  Test({LINENUM}53194, 'vector(❨❨21.5❩❩)', [21.5]);

  Test({LINENUM}53196, 'RealVector(DebugObject("empty matrix"))', TAlgosimRealVector.Create);
  Test({LINENUM}53197, 'RealVector(❨❨5, 3❩, ❨1, 2❩❩)', [5, 3, 1, 2]);
  Test({LINENUM}53198, 'RealVector(❨❨5, 3❩, ❨1, 2❩, ❨0, 4❩❩)', [5, 3, 1, 2, 0, 4]);
  Test({LINENUM}53199, 'RealVector(❨❨21❩❩)', [21]);
  Test({LINENUM}53200, 'RealVector(❨❨21.5❩❩)', [21.5]);

  Test({LINENUM}53202, 'ComplexVector(DebugObject("empty matrix"))', TAlgosimComplexVector.Create);
  Test({LINENUM}53203, 'ComplexVector(❨❨5, 3❩, ❨1, 2❩❩)', [TASC(5), 3, 1, 2]);
  Test({LINENUM}53204, 'ComplexVector(❨❨5, 3❩, ❨1, 2❩, ❨0, 4❩❩)', [TASC(5), 3, 1, 2, 0, 4]);
  Test({LINENUM}53205, 'ComplexVector(❨❨21❩❩)', [TASC(21)]);
  Test({LINENUM}53206, 'ComplexVector(❨❨21.5❩❩)', [TASC(21.5)]);

  Test({LINENUM}53208, 'matrix(DebugObject("empty matrix"))', TAlgosimRealMatrix.Create);
  Test({LINENUM}53209, 'matrix(❨❨5, 3❩, ❨1, 2❩❩)', 2, [5, 3, 1, 2]);
  Test({LINENUM}53210, 'matrix(❨❨5, 3❩, ❨1, 2❩, ❨0, 4❩❩)', 2, [5, 3, 1, 2, 0, 4]);
  Test({LINENUM}53211, 'matrix(❨❨21❩❩)', 1, [21]);
  Test({LINENUM}53212, 'matrix(❨❨21.5❩❩)', 1, [21.5]);

  Test({LINENUM}53214, 'RealMatrix(DebugObject("empty matrix"))', TAlgosimRealMatrix.Create);
  Test({LINENUM}53215, 'RealMatrix(❨❨5, 3❩, ❨1, 2❩❩)', 2, [5, 3, 1, 2]);
  Test({LINENUM}53216, 'RealMatrix(❨❨5, 3❩, ❨1, 2❩, ❨0, 4❩❩)', 2, [5, 3, 1, 2, 0, 4]);
  Test({LINENUM}53217, 'RealMatrix(❨❨21❩❩)', 1, [21]);
  Test({LINENUM}53218, 'RealMatrix(❨❨21.5❩❩)', 1, [21.5]);

  Test({LINENUM}53220, 'ComplexMatrix(DebugObject("empty matrix"))', TAlgosimComplexMatrix.Create);
  Test({LINENUM}53221, 'ComplexMatrix(❨❨5, 3❩, ❨1, 2❩❩)', 2, [TASC(5), 3, 1, 2]);
  Test({LINENUM}53222, 'ComplexMatrix(❨❨5, 3❩, ❨1, 2❩, ❨0, 4❩❩)', 2, [TASC(5), 3, 1, 2, 0, 4]);
  Test({LINENUM}53223, 'ComplexMatrix(❨❨21❩❩)', 1, [TASC(21)]);
  Test({LINENUM}53224, 'ComplexMatrix(❨❨21.5❩❩)', 1, [TASC(21.5)]);

  Test({LINENUM}53226, 'ToList(DebugObject("empty matrix"))', asoarr([]));
  Test({LINENUM}53227, 'ToList(❨❨5, 3❩, ❨1, 2❩❩)', asoarr([5, 3, 1, 2]));
  Test({LINENUM}53228, 'ToList(❨❨5, 3❩, ❨1, 2❩, ❨0, 5❩❩)', asoarr([5, 3, 1, 2, 0, 5]));
  Test({LINENUM}53229, 'ToList(❨❨21❩❩)', asoarr([21]));
  Test({LINENUM}53230, 'ToList(❨❨21.5❩❩)', asoarr([21.5]));

  Test({LINENUM}53232, 'ToSet(DebugObject("empty matrix"))', asoset([]));
  Test({LINENUM}53233, 'ToSet(❨❨5, 3❩, ❨1, 2❩❩)', asoset([5, 3, 1, 2]));
  Test({LINENUM}53234, 'ToSet(❨❨5, 3❩, ❨1, 2❩, ❨0, 5❩❩)', asoset([5, 3, 1, 2, 0]));
  Test({LINENUM}53235, 'ToSet(❨❨21❩❩)', asoset([21]));
  Test({LINENUM}53236, 'ToSet(❨❨21.5❩❩)', asoset([21.5]));

  Test({LINENUM}53238, 'color(❨❨0.1, 0.2, 0.3❩❩)', failure, 'An object of type "real matrix" cannot be converted to a colour.');


  //
  // From complex matrix
  //

  Test({LINENUM}53245, 'number(ComplexMatrix(DebugObject("empty matrix")))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53246, 'number(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53247, 'number(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53248, 'number(❨❨21 + i - i❩❩)', TASC(21));
  Test({LINENUM}53249, 'number(❨❨21.5 + i - i❩❩)', TASC(21.5));
  Test({LINENUM}53250, 'number(❨❨21 + i❩❩)', 21 + ImaginaryUnit);

  Test({LINENUM}53252, 'integer(ComplexMatrix(DebugObject("empty matrix")))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53253, 'integer(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53254, 'integer(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53255, 'integer(❨❨21 + i - i❩❩)', 21);
  Test({LINENUM}53256, 'integer(❨❨21.5 + i - i❩❩)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53257, 'integer(❨❨21 + i❩❩)', failure, 'Object cannot be represented as a 64-bit integer.');

  Test({LINENUM}53259, 'RealNumber(ComplexMatrix(DebugObject("empty matrix")))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53260, 'RealNumber(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53261, 'RealNumber(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53262, 'RealNumber(❨❨21 + i - i❩❩)', 21.0);
  Test({LINENUM}53263, 'RealNumber(❨❨21.5 + i - i❩❩)', 21.5);
  Test({LINENUM}53264, 'RealNumber(❨❨21 + i❩❩)', failure, 'Complex number 21 + i cannot be converted to a real number.');

  Test({LINENUM}53266, 'ComplexNumber(ComplexMatrix(DebugObject("empty matrix")))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53267, 'ComplexNumber(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53268, 'ComplexNumber(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53269, 'ComplexNumber(❨❨21 + i - i❩❩)', TASC(21));
  Test({LINENUM}53270, 'ComplexNumber(❨❨21.5 + i - i❩❩)', TASC(21.5));
  Test({LINENUM}53271, 'ComplexNumber(❨❨21 + i❩❩)', 21 + ImaginaryUnit);

  Test({LINENUM}53273, 'boolean(ComplexMatrix(DebugObject("empty matrix")))', False);
  Test({LINENUM}53274, 'boolean(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', True);
  Test({LINENUM}53275, 'boolean(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', True);
  Test({LINENUM}53276, 'boolean(❨❨21 + i - i❩❩)', True);
  Test({LINENUM}53277, 'boolean(❨❨21.5 + i - i❩❩)', True);
  Test({LINENUM}53278, 'boolean(❨❨21 + i❩❩)', True);
  Test({LINENUM}53279, 'boolean(❨❨0 + i - i❩❩)', True);

  Test({LINENUM}53281, 'string(ComplexMatrix(DebugObject("empty matrix")))', '');
  Test({LINENUM}53282, 'string(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', '5'#9'3'#9'i'#13#10'0'#9'1'#9'2');
  Test({LINENUM}53283, 'string(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨-i, 7, -1❩❩)', '5'#9'3'#9'i'#13#10'0'#9'1'#9'2'#13#10'-i'#9'7'#9'-1');
  Test({LINENUM}53284, 'string(❨❨21 + i - i❩❩)', '21');
  Test({LINENUM}53285, 'string(❨❨-21 + i - i❩❩)', '-21');
  Test({LINENUM}53286, 'string(❨❨21.5 + i - i❩❩)', '21.5');
  Test({LINENUM}53287, 'string(❨❨21 + i❩❩)', '21 + i');
  Test({LINENUM}53288, 'string(❨❨21 - i❩❩)', '21 - i');
  Test({LINENUM}53289, 'string(❨❨21 + 5⋅i❩❩)', '21 + 5⋅i');
  Test({LINENUM}53290, 'string(❨❨21 - 5⋅i❩❩)', '21 - 5⋅i');
  Test({LINENUM}53291, 'string(❨❨-21 - 5⋅i❩❩)', '-21 - 5⋅i');
  Test({LINENUM}53292, 'string(❨❨-5⋅i❩❩)', '-5⋅i');
  Test({LINENUM}53293, 'string(❨❨0 + i - i❩❩)', '0');

  Test({LINENUM}53295, 'vector(ComplexMatrix(DebugObject("empty matrix")))', TAlgosimComplexVector.Create);
  Test({LINENUM}53296, 'vector(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', [5, 3, ImaginaryUnit, 0, 1, 2]);
  Test({LINENUM}53297, 'vector(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', [5, 3, ImaginaryUnit, 0, 1, 2, ImaginaryUnit, 7, 1]);
  Test({LINENUM}53298, 'vector(❨❨21 + i - i❩❩)', [TASC(21)]);
  Test({LINENUM}53299, 'vector(❨❨21.5 + i - i❩❩)', [TASC(21.5)]);
  Test({LINENUM}53300, 'vector(❨❨21 + i❩❩)', [21 + ImaginaryUnit]);
  Test({LINENUM}53301, 'vector(❨❨0 + i - i❩❩)', [TASC(0)]);

  Test({LINENUM}53303, 'RealVector(ComplexMatrix(DebugObject("empty matrix")))', TAlgosimRealVector.Create);
  Test({LINENUM}53304, 'RealVector(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', failure, 'Complex matrix cannot be converted to real vector because it contains a non-real component i.');
  Test({LINENUM}53305, 'RealVector(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', failure, 'Complex matrix cannot be converted to real vector because it contains a non-real component i.');
  Test({LINENUM}53306, 'RealVector(❨❨21 + i - i❩❩)', [21]);
  Test({LINENUM}53307, 'RealVector(❨❨21.5 + i - i❩❩)', [21.5]);
  Test({LINENUM}53308, 'RealVector(❨❨21 + i❩❩)', failure, 'Complex matrix cannot be converted to real vector because it contains a non-real component 21 + i.');
  Test({LINENUM}53309, 'RealVector(❨❨0 + i - i❩❩)', [0]);

  Test({LINENUM}53311, 'ComplexVector(ComplexMatrix(DebugObject("empty matrix")))', TAlgosimComplexVector.Create);
  Test({LINENUM}53312, 'ComplexVector(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', [5, 3, ImaginaryUnit, 0, 1, 2]);
  Test({LINENUM}53313, 'ComplexVector(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', [5, 3, ImaginaryUnit, 0, 1, 2, ImaginaryUnit, 7, 1]);
  Test({LINENUM}53314, 'ComplexVector(❨❨21 + i - i❩❩)', [TASC(21)]);
  Test({LINENUM}53315, 'ComplexVector(❨❨21.5 + i - i❩❩)', [TASC(21.5)]);
  Test({LINENUM}53316, 'ComplexVector(❨❨21 + i❩❩)', [21 + ImaginaryUnit]);
  Test({LINENUM}53317, 'ComplexVector(❨❨0 + i - i❩❩)', [TASC(0)]);

  Test({LINENUM}53319, 'matrix(ComplexMatrix(DebugObject("empty matrix")))', TAlgosimComplexMatrix.Create);
  Test({LINENUM}53320, 'matrix(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', 3, [5, 3, ImaginaryUnit, 0, 1, 2]);
  Test({LINENUM}53321, 'matrix(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', 3, [5, 3, ImaginaryUnit, 0, 1, 2, ImaginaryUnit, 7, 1]);
  Test({LINENUM}53322, 'matrix(❨❨21 + i - i❩❩)', 1, [TASC(21)]);
  Test({LINENUM}53323, 'matrix(❨❨21.5 + i - i❩❩)', 1, [TASC(21.5)]);
  Test({LINENUM}53324, 'matrix(❨❨21 + i❩❩)', 1, [21 + ImaginaryUnit]);
  Test({LINENUM}53325, 'matrix(❨❨0 + i - i❩❩)', 1, [TASC(0)]);

  Test({LINENUM}53327, 'RealMatrix(ComplexMatrix(DebugObject("empty matrix")))', TAlgosimRealMatrix.Create);
  Test({LINENUM}53328, 'RealMatrix(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', failure, 'Complex matrix cannot be converted to real matrix because it contains a non-real component i.');
  Test({LINENUM}53329, 'RealMatrix(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', failure, 'Complex matrix cannot be converted to real matrix because it contains a non-real component i.');
  Test({LINENUM}53330, 'RealMatrix(❨❨21 + i - i❩❩)', 1, [21]);
  Test({LINENUM}53331, 'RealMatrix(❨❨21.5 + i - i❩❩)', 1, [21.5]);
  Test({LINENUM}53332, 'RealMatrix(❨❨21 + i❩❩)', failure, 'Complex matrix cannot be converted to real matrix because it contains a non-real component 21 + i.');
  Test({LINENUM}53333, 'RealMatrix(❨❨0 + i - i❩❩)', 1, [0]);
  
  Test({LINENUM}53335, 'ComplexMatrix(ComplexMatrix(DebugObject("empty matrix")))', TAlgosimComplexMatrix.Create);
  Test({LINENUM}53336, 'ComplexMatrix(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', 3, [5, 3, ImaginaryUnit, 0, 1, 2]);
  Test({LINENUM}53337, 'ComplexMatrix(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', 3, [5, 3, ImaginaryUnit, 0, 1, 2, ImaginaryUnit, 7, 1]);
  Test({LINENUM}53338, 'ComplexMatrix(❨❨21 + i - i❩❩)', 1, [TASC(21)]);
  Test({LINENUM}53339, 'ComplexMatrix(❨❨21.5 + i - i❩❩)', 1, [TASC(21.5)]);
  Test({LINENUM}53340, 'ComplexMatrix(❨❨21 + i❩❩)', 1, [21 + ImaginaryUnit]);
  Test({LINENUM}53341, 'ComplexMatrix(❨❨0 + i - i❩❩)', 1, [TASC(0)]);

  Test({LINENUM}53343, 'ToList(ComplexMatrix(DebugObject("empty matrix")))', asoarrex([]));
  Test({LINENUM}53344, 'ToList(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', asoarrex([ASO(5), ASO(3), ASO(ImaginaryUnit), ASO(0), ASO(1), ASO(2)]));
  Test({LINENUM}53345, 'ToList(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', asoarrex([ASO(5), ASO(3), ASO(ImaginaryUnit), ASO(0), ASO(1), ASO(2), ASO(ImaginaryUnit), ASO(7), ASO(1)]));
  Test({LINENUM}53346, 'ToList(❨❨21 + i - i❩❩)', asoarrex([ASO(21)]));
  Test({LINENUM}53347, 'ToList(❨❨21.5 + i - i❩❩)', asoarrex([ASO(21.5)]));
  Test({LINENUM}53348, 'ToList(❨❨21 + i❩❩)', asoarrex([ASO(21 + ImaginaryUnit)]));
  Test({LINENUM}53349, 'ToList(❨❨0 + i - i❩❩)', asoarrex([ASO(0)]));

  Test({LINENUM}53351, 'ToSet(ComplexMatrix(DebugObject("empty matrix")))', asosetex([]));
  Test({LINENUM}53352, 'ToSet(❨❨5, 3, i❩, ❨0, 1, 2❩❩)', asosetex([ASO(5), ASO(3), ASO(ImaginaryUnit), ASO(0), ASO(1), ASO(2)]));
  Test({LINENUM}53353, 'ToSet(❨❨5, 3, i❩, ❨0, 1, 2❩, ❨i, 7, 1❩❩)', asosetex([ASO(5), ASO(3), ASO(ImaginaryUnit), ASO(0), ASO(1), ASO(2), ASO(7)]));
  Test({LINENUM}53354, 'ToSet(❨❨21 + i - i❩❩)', asosetex([ASO(21)]));
  Test({LINENUM}53355, 'ToSet(❨❨21.5 + i - i❩❩)', asosetex([ASO(21.5)]));
  Test({LINENUM}53356, 'ToSet(❨❨21 + i❩❩)', asosetex([ASO(21 + ImaginaryUnit)]));
  Test({LINENUM}53357, 'ToSet(❨❨0 + i - i❩❩)', asosetex([ASO(0)]));

  Test({LINENUM}53359, 'color(❨❨0.1 + i - i, 0.2, 0.3❩❩)', failure, 'An object of type "complex matrix" cannot be converted to a colour.');


  //
  // From list
  //

  Test({LINENUM}53366, 'number(''())', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53367, 'number(''(3, 1, 4, 1, 5))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53368, 'number(''(3, 1, 4, 1, 5, 9, 2, 6, 5))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53369, 'number(''(3, i, 1, 0, -i, -1))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53370, 'number(''(3, i, 1, 0, -i, -1, "cat", "dog", "dog"))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53371, 'number(''(0))', 0);
  Test({LINENUM}53372, 'number(''(123))', 123);
  Test({LINENUM}53373, 'number(''(-123))', -123);
  Test({LINENUM}53374, 'number(''(1/7))', rat(1, 7));
  Test({LINENUM}53375, 'number(''(-1/7))', rat(-1, 7));
  Test({LINENUM}53376, 'number(''(123.456))', 123.456);
  Test({LINENUM}53377, 'number(''(-123.456))', -123.456);
  Test({LINENUM}53378, 'number(''(2 + i))', 2 + ImaginaryUnit);
  Test({LINENUM}53379, 'number(''(2 - i))', 2 - ImaginaryUnit);
  Test({LINENUM}53380, 'number(''(2 + 3⋅i))', 2 + 3*ImaginaryUnit);
  Test({LINENUM}53381, 'number(''(2 - 3⋅i))', 2 - 3*ImaginaryUnit);
  Test({LINENUM}53382, 'number(''("cat"))', failure, 'Cannot convert string "cat" to a complex number.');
  Test({LINENUM}53383, 'number(''(false))', 0);
  Test({LINENUM}53384, 'number(''(true))', 1);
  Test({LINENUM}53385, 'number(''(IdentityMatrix(4)))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53386, 'number(''(IdentityMatrix(1)))', 1.0);
  Test({LINENUM}53387, 'number(''(ZeroVector(4)))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53388, 'number(''(ZeroVector(1)))', 0.0);
  Test({LINENUM}53389, 'number(''(''(''(''(21)))))', 21);
  Test({LINENUM}53390, 'number(''(''(''(''(21, 22)))))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53391, 'number(''(''(''(''()))))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53392, 'number(''(''(''(''(IdentityMatrix(1)/2)))))', 0.5);

  Test({LINENUM}53394, 'integer(''())', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53395, 'integer(''(3, 1, 4, 1, 5))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53396, 'integer(''(3, 1, 4, 1, 5, 9, 2, 6, 5))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53397, 'integer(''(3, i, 1, 0, -i, -1))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53398, 'integer(''(3, i, 1, 0, -i, -1, "cat", "dog", "dog"))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53399, 'integer(''(0))', 0);
  Test({LINENUM}53400, 'integer(''(123))', 123);
  Test({LINENUM}53401, 'integer(''(-123))', -123);
  Test({LINENUM}53402, 'integer(''(1/7))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53403, 'integer(''(-1/7))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53404, 'integer(''(123.456))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53405, 'integer(''(-123.456))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53406, 'integer(''(2 + i))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53407, 'integer(''(2 - i))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53408, 'integer(''(2 + 3⋅i))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53409, 'integer(''(2 - 3⋅i))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53410, 'integer(''("cat"))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53411, 'integer(''(false))', 0);
  Test({LINENUM}53412, 'integer(''(true))', 1);
  Test({LINENUM}53413, 'integer(''(IdentityMatrix(4)))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53414, 'integer(''(IdentityMatrix(1)))', 1);
  Test({LINENUM}53415, 'integer(''(ZeroVector(4)))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53416, 'integer(''(ZeroVector(1)))', 0);
  Test({LINENUM}53417, 'integer(''(''(''(''(21)))))', 21);
  Test({LINENUM}53418, 'integer(''(''(''(''(21, 22)))))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53419, 'integer(''(''(''(''()))))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53420, 'integer(''(''(''(''(IdentityMatrix(1)/2)))))', failure, 'Object cannot be represented as a 64-bit integer.');

  Test({LINENUM}53422, 'RealNumber(''())', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53423, 'RealNumber(''(3, 1, 4, 1, 5))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53424, 'RealNumber(''(3, 1, 4, 1, 5, 9, 2, 6, 5))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53425, 'RealNumber(''(3, i, 1, 0, -i, -1))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53426, 'RealNumber(''(3, i, 1, 0, -i, -1, "cat", "dog", "dog"))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53427, 'RealNumber(''(0))', 0.0);
  Test({LINENUM}53428, 'RealNumber(''(123))', 123.0);
  Test({LINENUM}53429, 'RealNumber(''(-123))', -123.0);
  Test({LINENUM}53430, 'RealNumber(''(1/7))', 1/7);
  Test({LINENUM}53431, 'RealNumber(''(-1/7))', -1/7);
  Test({LINENUM}53432, 'RealNumber(''(123.456))', 123.456);
  Test({LINENUM}53433, 'RealNumber(''(-123.456))', -123.456);
  Test({LINENUM}53434, 'RealNumber(''(2 + i))', failure, 'Complex number 2 + i cannot be converted to a real number.');
  Test({LINENUM}53435, 'RealNumber(''(2 - i))', failure, 'Complex number 2 − i cannot be converted to a real number.');
  Test({LINENUM}53436, 'RealNumber(''(2 + 3⋅i))', failure, 'Complex number 2 + 3⋅i cannot be converted to a real number.');
  Test({LINENUM}53437, 'RealNumber(''(2 - 3⋅i))', failure, 'Complex number 2 − 3⋅i cannot be converted to a real number.');
  Test({LINENUM}53438, 'RealNumber(''("cat"))', failure, 'Cannot convert string "cat" to a real number.');
  Test({LINENUM}53439, 'RealNumber(''(false))', 0.0);
  Test({LINENUM}53440, 'RealNumber(''(true))', 1.0);
  Test({LINENUM}53441, 'RealNumber(''(IdentityMatrix(4)))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53442, 'RealNumber(''(IdentityMatrix(1)))', 1.0);
  Test({LINENUM}53443, 'RealNumber(''(ZeroVector(4)))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53444, 'RealNumber(''(ZeroVector(1)))', 0.0);
  Test({LINENUM}53445, 'RealNumber(''(''(''(''(21)))))', 21.0);
  Test({LINENUM}53446, 'RealNumber(''(''(''(''(21, 22)))))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53447, 'RealNumber(''(''(''(''()))))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53448, 'RealNumber(''(''(''(''(IdentityMatrix(1)/2)))))', 0.5);

  Test({LINENUM}53450, 'ComplexNumber(''())', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53451, 'ComplexNumber(''(3, 1, 4, 1, 5))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53452, 'ComplexNumber(''(3, 1, 4, 1, 5, 9, 2, 6, 5))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53453, 'ComplexNumber(''(3, i, 1, 0, -i, -1))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53454, 'ComplexNumber(''(3, i, 1, 0, -i, -1, "cat", "dog", "dog"))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53455, 'ComplexNumber(''(0))', TASC(0.0));
  Test({LINENUM}53456, 'ComplexNumber(''(123))', TASC(123.0));
  Test({LINENUM}53457, 'ComplexNumber(''(-123))', TASC(-123.0));
  Test({LINENUM}53458, 'ComplexNumber(''(1/7))', TASC(1/7));
  Test({LINENUM}53459, 'ComplexNumber(''(-1/7))', TASC(-1/7));
  Test({LINENUM}53460, 'ComplexNumber(''(123.456))', TASC(123.456));
  Test({LINENUM}53461, 'ComplexNumber(''(-123.456))', TASC(-123.456));
  Test({LINENUM}53462, 'ComplexNumber(''(2 + i))', 2 + ImaginaryUnit);
  Test({LINENUM}53463, 'ComplexNumber(''(2 - i))', 2 - ImaginaryUnit);
  Test({LINENUM}53464, 'ComplexNumber(''(2 + 3⋅i))', 2 + 3*ImaginaryUnit);
  Test({LINENUM}53465, 'ComplexNumber(''(2 - 3⋅i))', 2 - 3*ImaginaryUnit);
  Test({LINENUM}53466, 'ComplexNumber(''("cat"))', failure, 'Cannot convert string "cat" to a complex number.');
  Test({LINENUM}53467, 'ComplexNumber(''(false))', TASC(0.0));
  Test({LINENUM}53468, 'ComplexNumber(''(true))', TASC(1.0));
  Test({LINENUM}53469, 'ComplexNumber(''(IdentityMatrix(4)))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53470, 'ComplexNumber(''(IdentityMatrix(1)))', TASC(1.0));
  Test({LINENUM}53471, 'ComplexNumber(''(ZeroVector(4)))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53472, 'ComplexNumber(''(ZeroVector(1)))', TASC(0.0));
  Test({LINENUM}53473, 'ComplexNumber(''(''(''(''(21)))))', TASC(21.0));
  Test({LINENUM}53474, 'ComplexNumber(''(''(''(''(21, 22)))))', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53475, 'ComplexNumber(''(''(''(''()))))', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53476, 'ComplexNumber(''(''(''(''(IdentityMatrix(1)/2)))))', TASC(0.5));

  Test({LINENUM}53478, 'boolean(''())', False);
  Test({LINENUM}53479, 'boolean(''(3, 1, 4, 1, 5))', True);
  Test({LINENUM}53480, 'boolean(''(3, 1, 4, 1, 5, 9, 2, 6, 5))', True);
  Test({LINENUM}53481, 'boolean(''(3, i, 1, 0, -i, -1))', True);
  Test({LINENUM}53482, 'boolean(''(3, i, 1, 0, -i, -1, "cat", "dog", "dog"))', True);
  Test({LINENUM}53483, 'boolean(''(0))', True);
  Test({LINENUM}53484, 'boolean(''(123))', True);
  Test({LINENUM}53485, 'boolean(''(-123))', True);
  Test({LINENUM}53486, 'boolean(''(1/7))', True);
  Test({LINENUM}53487, 'boolean(''(-1/7))', True);
  Test({LINENUM}53488, 'boolean(''(123.456))', True);
  Test({LINENUM}53489, 'boolean(''(-123.456))', True);
  Test({LINENUM}53490, 'boolean(''(2 + i))', True);
  Test({LINENUM}53491, 'boolean(''(2 - i))', True);
  Test({LINENUM}53492, 'boolean(''(2 + 3⋅i))', True);
  Test({LINENUM}53493, 'boolean(''(2 - 3⋅i))', True);
  Test({LINENUM}53494, 'boolean(''("cat"))', True);
  Test({LINENUM}53495, 'boolean(''(false))', True);
  Test({LINENUM}53496, 'boolean(''(true))', True);
  Test({LINENUM}53497, 'boolean(''(IdentityMatrix(4)))', True);
  Test({LINENUM}53498, 'boolean(''(IdentityMatrix(1)))', True);
  Test({LINENUM}53499, 'boolean(''(ZeroVector(4)))', True);
  Test({LINENUM}53500, 'boolean(''(ZeroVector(1)))', True);
  Test({LINENUM}53501, 'boolean(''(''(''(''(21)))))', True);
  Test({LINENUM}53502, 'boolean(''(''(''(''(21, 22)))))', True);
  Test({LINENUM}53503, 'boolean(''(''(''(''()))))', True);
  Test({LINENUM}53504, 'boolean(''(''(''(''(IdentityMatrix(1)/2)))))', True);

  Test({LINENUM}53506, 'string(''())', '');
  Test({LINENUM}53507, 'string(''(3, 1, 4, 1, 5))', '3'#13#10'1'#13#10'4'#13#10'1'#13#10'5');
  Test({LINENUM}53508, 'string(''(3, 1, 4, 1, 5, 9, 2, 6, 5))', '3'#13#10'1'#13#10'4'#13#10'1'#13#10'5'#13#10'9'#13#10'2'#13#10'6'#13#10'5');
  Test({LINENUM}53509, 'string(''(3, i, 1, 0, -i, -1))', '3'#13#10'i'#13#10'1'#13#10'0'#13#10'-i'#13#10'-1');
  Test({LINENUM}53510, 'string(''(3, i, 1, 0, -i, -1, "cat", "dog", "dog"))', '3'#13#10'i'#13#10'1'#13#10'0'#13#10'-i'#13#10'-1'#13#10'"cat"'#13#10'"dog"'#13#10'"dog"');
  Test({LINENUM}53511, 'string(''(0))', '0');
  Test({LINENUM}53512, 'string(''(123))', '123');
  Test({LINENUM}53513, 'string(''(-123))', '-123');
  Test({LINENUM}53514, 'string(''(1/7))', '1/7');
  Test({LINENUM}53515, 'string(''(-1/7))', '-1/7');
  Test({LINENUM}53516, 'string(''(123.456))', '123.456');
  Test({LINENUM}53517, 'string(''(-123.456))', '-123.456');
  Test({LINENUM}53518, 'string(''(2 + i))', '2 + i');
  Test({LINENUM}53519, 'string(''(2 - i))', '2 - i');
  Test({LINENUM}53520, 'string(''(2 + 3⋅i))', '2 + 3⋅i');
  Test({LINENUM}53521, 'string(''(2 - 3⋅i))', '2 - 3⋅i');
  Test({LINENUM}53522, 'string(''("cat"))', '"cat"');
  Test({LINENUM}53523, 'string(''(false))', 'false');
  Test({LINENUM}53524, 'string(''(true))', 'true');
  Test({LINENUM}53525, 'string(''(IdentityMatrix(4)))', '((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1))');
  Test({LINENUM}53526, 'string(''(IdentityMatrix(1)))', '((1))');
  Test({LINENUM}53527, 'string(''(ZeroVector(4)))', '(0, 0, 0, 0)');
  Test({LINENUM}53528, 'string(''(ZeroVector(1)))', '(0)');
  Test({LINENUM}53529, 'string(''(''(''(''(21)))))', '''(''(''(21)))');
  Test({LINENUM}53530, 'string(''(''(''(''(21, 22)))))', '''(''(''(21, 22)))');
  Test({LINENUM}53531, 'string(''(''(''(''()))))', '''(''(''()))');
  Test({LINENUM}53532, 'string(''(''(''(''(IdentityMatrix(1)/2)))))', '''(''(''(((0.5)))))');

  Test({LINENUM}53534, 'vector(''(1, 2, 3))', [1, 2, 3]);
  Test({LINENUM}53535, 'vector(''(1, 2, 3, i))', [1, 2, 3, ImaginaryUnit]);
  Test({LINENUM}53536, 'vector(''(21))', [21]);
  Test({LINENUM}53537, 'vector(''(i))', [ImaginaryUnit]);
  Test({LINENUM}53538, 'vector(''())', TAlgosimRealVector.Create);
  Test({LINENUM}53539, 'vector(''(1, 2, 3, "dog", true, 4))', [1, 2, 3, 4]);
  Test({LINENUM}53540, 'vector(''(1, 2, 3, "dog", true, 4, i))', [1, 2, 3, 4, ImaginaryUnit]);

  Test({LINENUM}53542, 'RealVector(''(1, 2, 3))', [1, 2, 3]);
  Test({LINENUM}53543, 'RealVector(''(1, 2, 3, i))', failure, 'Complex number i cannot be converted to a real number.');
  Test({LINENUM}53544, 'RealVector(''(21))', [21]);
  Test({LINENUM}53545, 'RealVector(''(i))', failure, 'Complex number i cannot be converted to a real number.');
  Test({LINENUM}53546, 'RealVector(''())', TAlgosimRealVector.Create);
  Test({LINENUM}53547, 'RealVector(''(1, 2, 3, "dog", true, 4))', [1, 2, 3, 4]);
  Test({LINENUM}53548, 'RealVector(''(1, 2, 3, "dog", true, 4, i))', failure, 'Complex number i cannot be converted to a real number.');

  Test({LINENUM}53550, 'ComplexVector(''(1, 2, 3))', [TASC(1), 2, 3]);
  Test({LINENUM}53551, 'ComplexVector(''(1, 2, 3, i))', [1, 2, 3, ImaginaryUnit]);
  Test({LINENUM}53552, 'ComplexVector(''(21))', [TASC(21)]);
  Test({LINENUM}53553, 'ComplexVector(''(i))', [ImaginaryUnit]);
  Test({LINENUM}53554, 'ComplexVector(''())', TAlgosimComplexVector.Create);
  Test({LINENUM}53555, 'ComplexVector(''(1, 2, 3, "dog", true, 4))', [TASC(1), 2, 3, 4]);
  Test({LINENUM}53556, 'ComplexVector(''(1, 2, 3, "dog", true, 4, i))', [1, 2, 3, 4, ImaginaryUnit]);

  Test({LINENUM}53558, 'matrix(''(1, 2, 3))', failure, 'Cannot convert a list which is not 2D to a matrix.');
  Test({LINENUM}53559, 'matrix(''(''(1, 2, 3), ''(4, 5, 6), ''(7, 8, 9)))', 3, [1, 2, 3, 4, 5, 6, 7, 8, 9]);
  Test({LINENUM}53560, 'matrix(''(''(1, 2, 3), ''(4, 5), ''(7, 8, 9)))', failure, 'Cannot convert a list which is not 2D to a matrix.');
  Test({LINENUM}53561, 'matrix(''(''(1, 2, 3), ''(4, 5, 6), ''(7, 8)))', failure, 'Cannot convert a list which is not 2D to a matrix.');
  Test({LINENUM}53562, 'matrix(''(''(1, 2, 3), ''(4, 5, 6), ''(7, i, 9)))', 3, [1, 2, 3, 4, 5, 6, 7, ImaginaryUnit, 9]);
  Test({LINENUM}53563, 'matrix(''(''(10), ''(20), ''(30)))', 1, [10, 20, 30]);
  Test({LINENUM}53564, 'matrix(''(''(21)))', 1, [21]);
  Test({LINENUM}53565, 'matrix(''(''()))', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}53566, 'matrix(''())', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}53567, 'matrix(''(''(1, 2, 3), ''(4, 5, 6), ''("cat", 8, 9)))', failure, 'Object isn''t a real number.');
  Test({LINENUM}53568, 'matrix(''(''(1, 2, 3), ''(4, 5, 6), ''("cat", 8, i)))', failure, 'Object isn''t a complex number.');

  Test({LINENUM}53570, 'RealMatrix(''(1, 2, 3))', failure, 'Cannot convert a list which is not 2D to a matrix.');
  Test({LINENUM}53571, 'RealMatrix(''(''(1, 2, 3), ''(4, 5, 6), ''(7, 8, 9)))', 3, [1, 2, 3, 4, 5, 6, 7, 8, 9]);
  Test({LINENUM}53572, 'RealMatrix(''(''(1, 2, 3), ''(4, 5), ''(7, 8, 9)))', failure, 'Cannot convert a list which is not 2D to a matrix.');
  Test({LINENUM}53573, 'RealMatrix(''(''(1, 2, 3), ''(4, 5, 6), ''(7, 8)))', failure, 'Cannot convert a list which is not 2D to a matrix.');
  Test({LINENUM}53574, 'RealMatrix(''(''(1, 2, 3), ''(4, 5, 6), ''(7, i, 9)))', failure, 'Object isn''t a real number.');
  Test({LINENUM}53575, 'RealMatrix(''(''(10), ''(20), ''(30)))', 1, [10, 20, 30]);
  Test({LINENUM}53576, 'RealMatrix(''(''(21)))', 1, [21]);
  Test({LINENUM}53577, 'RealMatrix(''(''()))', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}53578, 'RealMatrix(''())', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}53579, 'RealMatrix(''(''(1, 2, 3), ''(4, 5, 6), ''("cat", 8, 9)))', failure, 'Object isn''t a real number.');
  Test({LINENUM}53580, 'RealMatrix(''(''(1, 2, 3), ''(4, 5, 6), ''("cat", 8, i)))', failure, 'Object isn''t a real number.');

  Test({LINENUM}53582, 'ComplexMatrix(''(1, 2, 3))', failure, 'Cannot convert a list which is not 2D to a matrix.');
  Test({LINENUM}53583, 'ComplexMatrix(''(''(1, 2, 3), ''(4, 5, 6), ''(7, 8, 9)))', 3, [TASC(1), 2, 3, 4, 5, 6, 7, 8, 9]);
  Test({LINENUM}53584, 'ComplexMatrix(''(''(1, 2, 3), ''(4, 5), ''(7, 8, 9)))', failure, 'Cannot convert a list which is not 2D to a matrix.');
  Test({LINENUM}53585, 'ComplexMatrix(''(''(1, 2, 3), ''(4, 5, 6), ''(7, 8)))', failure, 'Cannot convert a list which is not 2D to a matrix.');
  Test({LINENUM}53586, 'ComplexMatrix(''(''(1, 2, 3), ''(4, 5, 6), ''(7, i, 9)))', 3, [1, 2, 3, 4, 5, 6, 7, ImaginaryUnit, 9]);
  Test({LINENUM}53587, 'ComplexMatrix(''(''(10), ''(20), ''(30)))', 1, [TASC(10), 20, 30]);
  Test({LINENUM}53588, 'ComplexMatrix(''(''(21)))', 1, [TASC(21)]);
  Test({LINENUM}53589, 'ComplexMatrix(''(''()))', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}53590, 'ComplexMatrix(''())', failure, 'A matrix must have size at least 1×1.');
  Test({LINENUM}53591, 'ComplexMatrix(''(''(1, 2, 3), ''(4, 5, 6), ''("cat", 8, 9)))', failure, 'Object isn''t a complex number.');
  Test({LINENUM}53592, 'ComplexMatrix(''(''(1, 2, 3), ''(4, 5, 6), ''("cat", 8, i)))', failure, 'Object isn''t a complex number.');

  Test({LINENUM}53594, 'ToList(''())', asoarr([]));
  Test({LINENUM}53595, 'ToList(''(3, 1, 4, 1, 5))', asoarr([3, 1, 4, 1, 5]));
  Test({LINENUM}53596, 'ToList(''(3, 1, 4, 1, 5, 9, 2, 6, 5))', asoarr([3, 1, 4, 1, 5, 9, 2, 6, 5]));
  Test({LINENUM}53597, 'ToList(''(3, i, 1, 0, -i, -1))', asoarrex([ASOInt(3), ASO(ImaginaryUnit), ASOInt(1), ASOInt(0), ASO(-ImaginaryUnit), ASOInt(-1)]));
  Test({LINENUM}53598, 'ToList(''(3, i, 1, 0, -i, -1, "cat", "dog", "dog"))', asoarrex([ASOInt(3), ASO(ImaginaryUnit), ASOInt(1), ASOInt(0), ASO(-ImaginaryUnit), ASOInt(-1), ASO('cat'), ASO('dog'), ASO('dog')]));
  Test({LINENUM}53599, 'ToList(''(0))', asoarr([0]));
  Test({LINENUM}53600, 'ToList(''(123))', asoarr([123]));
  Test({LINENUM}53601, 'ToList(''(-123))', asoarr([-123]));
  Test({LINENUM}53602, 'ToList(''(1/7))', asoarrex([ASORat(rat(1, 7))]));
  Test({LINENUM}53603, 'ToList(''(-1/7))', asoarrex([ASORat(rat(-1, 7))]));
  Test({LINENUM}53604, 'ToList(''(123.456))', asoarr([123.456]));
  Test({LINENUM}53605, 'ToList(''(-123.456))', asoarr([-123.456]));
  Test({LINENUM}53606, 'ToList(''(2 + i))', asoarrex([ASO(2 + ImaginaryUnit)]));
  Test({LINENUM}53607, 'ToList(''(2 - i))', asoarrex([ASO(2 - ImaginaryUnit)]));
  Test({LINENUM}53608, 'ToList(''(2 + 3⋅i))', asoarrex([ASO(2 + 3*ImaginaryUnit)]));
  Test({LINENUM}53609, 'ToList(''(2 - 3⋅i))', asoarrex([ASO(2 - 3*ImaginaryUnit)]));
  Test({LINENUM}53610, 'ToList(''("cat"))', asoarr(['cat']));
  Test({LINENUM}53611, 'ToList(''(false))', asoarr([False]));
  Test({LINENUM}53612, 'ToList(''(true))', asoarr([True]));
  Test({LINENUM}53613, 'ToList(''(IdentityMatrix(4)))', asoarrex([ASO(IdentityMatrix(4))]));
  Test({LINENUM}53614, 'ToList(''(IdentityMatrix(1)))', asoarrex([ASO(IdentityMatrix(1))]));
  Test({LINENUM}53615, 'ToList(''(ZeroVector(4)))', asoarrex([ASO(ZeroVector(4))]));
  Test({LINENUM}53616, 'ToList(''(ZeroVector(1)))', asoarrex([ASO(ZeroVector(1))]));
  Test({LINENUM}53617, 'ToList(''(''(''(''(21)))))', asoarrex([asoarrex([asoarrex([asoarr([21])])])]));
  Test({LINENUM}53618, 'ToList(''(''(''(''(21, 22)))))', asoarrex([asoarrex([asoarrex([asoarr([21, 22])])])]));
  Test({LINENUM}53619, 'ToList(''(''(''(''()))))', asoarrex([asoarrex([asoarrex([asoarr([])])])]));
  Test({LINENUM}53620, 'ToList(''(''(''(''(IdentityMatrix(1)/2)))))', asoarrex([asoarrex([asoarrex([asoarrex([ASO(IdentityMatrix(1)/2)])])])]));

  Test({LINENUM}53622, 'ToSet(''())', asoset([]));
  Test({LINENUM}53623, 'ToSet(''(3, 1, 4, 1, 5))', asoset([3, 1, 4, 5]));
  Test({LINENUM}53624, 'ToSet(''(3, 1, 4, 1, 5, 9, 2, 6, 5))', asoset([3, 1, 4, 5, 9, 2, 6]));
  Test({LINENUM}53625, 'ToSet(''(3, i, 1, 0, -i, -1))', asosetex([ASOInt(3), ASO(ImaginaryUnit), ASOInt(1), ASOInt(0), ASO(-ImaginaryUnit), ASOInt(-1)]));
  Test({LINENUM}53626, 'ToSet(''(3, i, 1, 0, -i, -1, "cat", "dog", "dog"))', asosetex([ASOInt(3), ASO(ImaginaryUnit), ASOInt(1), ASOInt(0), ASO(-ImaginaryUnit), ASOInt(-1), ASO('cat'), ASO('dog')]));
  Test({LINENUM}53627, 'ToSet(''(0))', asoset([0]));
  Test({LINENUM}53628, 'ToSet(''(123))', asoset([123]));
  Test({LINENUM}53629, 'ToSet(''(-123))', asoset([-123]));
  Test({LINENUM}53630, 'ToSet(''(1/7))', asosetex([ASORat(rat(1, 7))]));
  Test({LINENUM}53631, 'ToSet(''(-1/7))', asosetex([ASORat(rat(-1, 7))]));
  Test({LINENUM}53632, 'ToSet(''(123.456))', asoset([123.456]));
  Test({LINENUM}53633, 'ToSet(''(-123.456))', asoset([-123.456]));
  Test({LINENUM}53634, 'ToSet(''(2 + i))', asosetex([ASO(2 + ImaginaryUnit)]));
  Test({LINENUM}53635, 'ToSet(''(2 - i))', asosetex([ASO(2 - ImaginaryUnit)]));
  Test({LINENUM}53636, 'ToSet(''(2 + 3⋅i))', asosetex([ASO(2 + 3*ImaginaryUnit)]));
  Test({LINENUM}53637, 'ToSet(''(2 - 3⋅i))', asosetex([ASO(2 - 3*ImaginaryUnit)]));
  Test({LINENUM}53638, 'ToSet(''("cat"))', asoset(['cat']));
  Test({LINENUM}53639, 'ToSet(''(false))', asoset([False]));
  Test({LINENUM}53640, 'ToSet(''(true))', asoset([True]));
  Test({LINENUM}53641, 'ToSet(''(IdentityMatrix(4)))', asosetex([ASO(IdentityMatrix(4))]));
  Test({LINENUM}53642, 'ToSet(''(IdentityMatrix(1)))', asosetex([ASO(IdentityMatrix(1))]));
  Test({LINENUM}53643, 'ToSet(''(ZeroVector(4)))', asosetex([ASO(ZeroVector(4))]));
  Test({LINENUM}53644, 'ToSet(''(ZeroVector(1)))', asosetex([ASO(ZeroVector(1))]));
  Test({LINENUM}53645, 'ToSet(''(''(''(''(21)))))', asosetex([asoarrex([asoarrex([asoarr([21])])])]));
  Test({LINENUM}53646, 'ToSet(''(''(''(''(21, 22)))))', asosetex([asoarrex([asoarrex([asoarr([21, 22])])])]));
  Test({LINENUM}53647, 'ToSet(''(''(''(''()))))', asosetex([asoarrex([asoarrex([asoarr([])])])]));
  Test({LINENUM}53648, 'ToSet(''(''(''(''(IdentityMatrix(1)/2)))))', asosetex([asoarrex([asoarrex([asoarrex([ASO(IdentityMatrix(1)/2)])])])]));

  Test({LINENUM}53650, 'color(''(0.1, 0.2, 0.3))', failure, 'An object of type "array" cannot be converted to a colour.');


  //
  // From set
  //

  Test({LINENUM}53657, 'number({})', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53658, 'number({1, 2, 3})', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53659, 'number({21})', 21);
  Test({LINENUM}53660, 'number({1/7})', rat(1, 7));
  Test({LINENUM}53661, 'number({21.5})', 21.5);
  Test({LINENUM}53662, 'number({21 + i})', 21 + ImaginaryUnit);
  Test({LINENUM}53663, 'number({false})', 0);
  Test({LINENUM}53664, 'number({true})', 1);
  Test({LINENUM}53665, 'number({"cat"})', failure, 'Cannot convert string "cat" to a complex number.');
  Test({LINENUM}53666, 'number({''(21)})', 21);
  Test({LINENUM}53667, 'number({❨1, 2, 3❩})', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53668, 'number({❨394❩})', 394.0);

  Test({LINENUM}53670, 'integer({})', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53671, 'integer({1, 2, 3})', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53672, 'integer({21})', 21);
  Test({LINENUM}53673, 'integer({1/7})', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53674, 'integer({21.5})', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53675, 'integer({21 + i})', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53676, 'integer({false})', 0);
  Test({LINENUM}53677, 'integer({true})', 1);
  Test({LINENUM}53678, 'integer({"cat"})', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53679, 'integer({''(21)})', 21);
  Test({LINENUM}53680, 'integer({❨1, 2, 3❩})', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53681, 'integer({❨394❩})', 394);

  Test({LINENUM}53683, 'RealNumber({})', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53684, 'RealNumber({1, 2, 3})', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53685, 'RealNumber({21})', 21.0);
  Test({LINENUM}53686, 'RealNumber({1/7})', 1/7);
  Test({LINENUM}53687, 'RealNumber({21.5})', 21.5);
  Test({LINENUM}53688, 'RealNumber({21 + i})', failure, 'Complex number 21 + i cannot be converted to a real number.');
  Test({LINENUM}53689, 'RealNumber({false})', 0.0);
  Test({LINENUM}53690, 'RealNumber({true})', 1.0);
  Test({LINENUM}53691, 'RealNumber({"cat"})', failure, 'Cannot convert string "cat" to a real number.');
  Test({LINENUM}53692, 'RealNumber({''(21)})', 21.0);
  Test({LINENUM}53693, 'RealNumber({❨1, 2, 3❩})', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53694, 'RealNumber({❨394❩})', 394.0);

  Test({LINENUM}53696, 'ComplexNumber({})', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53697, 'ComplexNumber({1, 2, 3})', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53698, 'ComplexNumber({21})', TASC(21));
  Test({LINENUM}53699, 'ComplexNumber({1/7})', TASC(1/7));
  Test({LINENUM}53700, 'ComplexNumber({21.5})', TASC(21.5));
  Test({LINENUM}53701, 'ComplexNumber({21 + i})', 21 + ImaginaryUnit);
  Test({LINENUM}53702, 'ComplexNumber({false})', TASC(0));
  Test({LINENUM}53703, 'ComplexNumber({true})', TASC(1));
  Test({LINENUM}53704, 'ComplexNumber({"cat"})', failure, 'Cannot convert string "cat" to a complex number.');
  Test({LINENUM}53705, 'ComplexNumber({''(21)})', TASC(21));
  Test({LINENUM}53706, 'ComplexNumber({❨1, 2, 3❩})', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53707, 'ComplexNumber({❨394❩})', TASC(394.0));

  Test({LINENUM}53709, 'boolean({})', False);
  Test({LINENUM}53710, 'boolean({1, 2, 3})', True);
  Test({LINENUM}53711, 'boolean({21})', True);
  Test({LINENUM}53712, 'boolean({1/7})', True);
  Test({LINENUM}53713, 'boolean({21.5})', True);
  Test({LINENUM}53714, 'boolean({21 + i})', True);
  Test({LINENUM}53715, 'boolean({false})', True);
  Test({LINENUM}53716, 'boolean({0})', True);
  Test({LINENUM}53717, 'boolean({true})', True);
  Test({LINENUM}53718, 'boolean({"cat"})', True);
  Test({LINENUM}53719, 'boolean({''(21)})', True);
  Test({LINENUM}53720, 'boolean({❨1, 2, 3❩})', True);
  Test({LINENUM}53721, 'boolean({❨394❩})', True);

  Test({LINENUM}53723, 'string({})', '∅');
  Test({LINENUM}53724, 'string({1, 2, 3})', '{1, 2, 3}');
  Test({LINENUM}53725, 'string({21})', '{21}');
  Test({LINENUM}53726, 'string({1/7})', '{1/7}');
  Test({LINENUM}53727, 'string({21.5})', '{21.5}');
  Test({LINENUM}53728, 'string({21 + i})', '{21 + i}');
  Test({LINENUM}53729, 'string({false})', '{false}');
  Test({LINENUM}53730, 'string({0})', '{0}');
  Test({LINENUM}53731, 'string({true})', '{true}');
  Test({LINENUM}53732, 'string({"cat"})', '{"cat"}');
  Test({LINENUM}53733, 'string({''(21)})', '{''(21)}');
  Test({LINENUM}53734, 'string({❨1, 2, 3❩})', '{(1, 2, 3)}');
  Test({LINENUM}53735, 'string({❨394❩})', '{(394)}');

  Test({LINENUM}53737, 's ≔ {1, 2, 3, 4, 5, 6}; type(vector(s)) = "real vector" ∧ ToSet(vector(s)) = s', True);
  Test({LINENUM}53738, 's ≔ {}; type(vector(s)) = "real vector" ∧ ToSet(vector(s)) = s', True);
  Test({LINENUM}53739, 's ≔ {1, 2, 3, 4, 5, 6, i}; type(vector(s)) = "complex vector" ∧ ToSet(vector(s)) = s', True);

  Test({LINENUM}53741, 's ≔ {1, 2, 3, 4, 5, 6}; type(RealVector(s)) = "real vector" ∧ ToSet(RealVector(s)) = s', True);
  Test({LINENUM}53742, 's ≔ {}; type(RealVector(s)) = "real vector" ∧ ToSet(RealVector(s)) = s', True);
  Test({LINENUM}53743, 's ≔ {1, 2, 3, 4, 5, 6, i}; RealVector(s)', failure, 'Complex number i cannot be converted to a real number.');

  Test({LINENUM}53745, 's ≔ {1, 2, 3, 4, 5, 6}; type(ComplexVector(s)) = "complex vector" ∧ ToSet(ComplexVector(s)) = s', True);
  Test({LINENUM}53746, 's ≔ {}; type(ComplexVector(s)) = "complex vector" ∧ ToSet(ComplexVector(s)) = s', True);
  Test({LINENUM}53747, 's ≔ {1, 2, 3, 4, 5, 6, i}; type(ComplexVector(s)) = "complex vector" ∧ ToSet(ComplexVector(s)) = s', True);

  Test({LINENUM}53749, 'matrix({1, 2, 3})', failure, 'An object of type "set" cannot be converted to a real matrix.');
  Test({LINENUM}53750, 'matrix({1, 2, i})', failure, 'An object of type "set" cannot be converted to a complex matrix.');

  Test({LINENUM}53752, 'RealMatrix({1, 2, 3})', failure, 'An object of type "set" cannot be converted to a real matrix.');
  Test({LINENUM}53753, 'ComplexMatrix({1, 2, 3})', failure, 'An object of type "set" cannot be converted to a complex matrix.');

  Test({LINENUM}53755, 's ≔ {1, 2, 3, 4, 5, 6}; type(ToList(s)) = "array" ∧ ToSet(ToList(s)) = s', True);
  Test({LINENUM}53756, 's ≔ {}; type(ToList(s)) = "array" ∧ ToSet(ToList(s)) = s', True);
  Test({LINENUM}53757, 's ≔ {1, 2, 3, 4, 5, 6, i}; type(ToList(s)) = "array" ∧ ToSet(ToList(s)) = s', True);
  Test({LINENUM}53758, 's ≔ {1, 2, 3, 4, 5, 6, i, "cat", "dog", 10, 1.23}; type(ToList(s)) = "array" ∧ ToSet(ToList(s)) = s', True);

  Test({LINENUM}53760, 's ≔ {1, 2, 3, 4, 5, 6}; ToSet(s) = s', True);
  Test({LINENUM}53761, 's ≔ {}; ToSet(s) = s', True);
  Test({LINENUM}53762, 's ≔ {1, 2, 3, 4, 5, 6, i}; ToSet(s) = s', True);
  Test({LINENUM}53763, 's ≔ {1, 2, 3, 4, 5, 6, i, "cat", "dog", 10, 1.23}; ToSet(s) = s', True);

  Test({LINENUM}53765, 'delete(s)', success);

  Test({LINENUM}53767, 'color({0.1, 0.2, 0.3})', failure, 'An object of type "set" cannot be converted to a colour.');


  //
  // From structure
  //

  Test({LINENUM}53774, 'name ≔ (fn, ln) ↦ struct("first": fn, "last": ln); person ≔ (fn, ln, sex, age) ↦ struct("name": name(fn, ln), "sex": sex, "age": age);', null);
  Test({LINENUM}53775, 'Jane ≔ person("Jane", "Smith", "female", 40); Mike ≔ person("Mike", "Doe", "male", 45);', null);
  Test({LINENUM}53776, 'Mary ≔ struct("mother": Jane, "father": Mike);', null);

  Test({LINENUM}53778, 'number(struct())', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53779, 'number(Jane)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53780, 'number(struct("value": 42))', 42);
  Test({LINENUM}53781, 'number(struct("value": 42/43))', rat(42, 43));
  Test({LINENUM}53782, 'number(struct("value": 42.5))', 42.5);
  Test({LINENUM}53783, 'number(struct("value": 42.5 + i))', 42.5 + ImaginaryUnit);
  Test({LINENUM}53784, 'number(struct("value": "cat"))', failure, 'Cannot convert string "cat" to a complex number.');

  Test({LINENUM}53786, 'integer(struct())', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53787, 'integer(Jane)', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53788, 'integer(struct("value": 42))', 42);
  Test({LINENUM}53789, 'integer(struct("value": 42/43))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53790, 'integer(struct("value": 42.5))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53791, 'integer(struct("value": 42.5 + i))', failure, 'Object cannot be represented as a 64-bit integer.');
  Test({LINENUM}53792, 'integer(struct("value": "cat"))', failure, 'Object cannot be represented as a 64-bit integer.');

  Test({LINENUM}53794, 'RealNumber(struct())', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53795, 'RealNumber(Jane)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53796, 'RealNumber(struct("value": 42))', 42.0);
  Test({LINENUM}53797, 'RealNumber(struct("value": 42/43))', 42/43);
  Test({LINENUM}53798, 'RealNumber(struct("value": 42.5))', 42.5);
  Test({LINENUM}53799, 'RealNumber(struct("value": 42.5 + i))', failure, 'Complex number 42.5 + i cannot be converted to a real number.');
  Test({LINENUM}53800, 'RealNumber(struct("value": "cat"))', failure, 'Cannot convert string "cat" to a real number.');

  Test({LINENUM}53802, 'ComplexNumber(struct())', failure, 'An empty container cannot be converted to a number.');
  Test({LINENUM}53803, 'ComplexNumber(Jane)', failure, 'A container with more than a single value cannot be converted to a number.');
  Test({LINENUM}53804, 'ComplexNumber(struct("value": 42))', TASC(42.0));
  Test({LINENUM}53805, 'ComplexNumber(struct("value": 42/43))', TASC(42/43));
  Test({LINENUM}53806, 'ComplexNumber(struct("value": 42.5))', TASC(42.5));
  Test({LINENUM}53807, 'ComplexNumber(struct("value": 42.5 + i))', 42.5 + ImaginaryUnit);
  Test({LINENUM}53808, 'ComplexNumber(struct("value": "cat"))', failure, 'Cannot convert string "cat" to a complex number.');

  Test({LINENUM}53810, 'boolean(struct())', False);
  Test({LINENUM}53811, 'boolean(Jane)', True);
  Test({LINENUM}53812, 'boolean(Mary)', True);
  Test({LINENUM}53813, 'boolean(struct("value": 42))', True);

  Test({LINENUM}53815, 'string(struct())', '');
  Test({LINENUM}53816, 'string(Jane)', 'name.first: "Jane"'#13#10'name.last: "Smith"'#13#10'sex: "female"'#13#10'age: 40');

  Test({LINENUM}53818, 'vector(struct())', TAlgosimRealVector.Create);
  Test({LINENUM}53819, 'vector(Jane)', [40]);
  Test({LINENUM}53820, 'vector(Mary)', TAlgosimRealVector.Create);
  Test({LINENUM}53821, 'vector(struct("value": 42))', [42]);
  Test({LINENUM}53822, 'vector(struct("alpha": 42, "beta": 10.3, "gamma": 1/2))', [42, 10.3, 0.5]);
  Test({LINENUM}53823, 'vector(struct("alpha": 42, "beta": 10.3, "gamma": 1/2, "delta": 1 + i))', [42, 10.3, 0.5, 1 + ImaginaryUnit]);

  Test({LINENUM}53825, 'RealVector(struct())', TAlgosimRealVector.Create);
  Test({LINENUM}53826, 'RealVector(Jane)', [40]);
  Test({LINENUM}53827, 'RealVector(Mary)', TAlgosimRealVector.Create);
  Test({LINENUM}53828, 'RealVector(struct("value": 42))', [42]);
  Test({LINENUM}53829, 'RealVector(struct("alpha": 42, "beta": 10.3, "gamma": 1/2))', [42, 10.3, 0.5]);
  Test({LINENUM}53830, 'RealVector(struct("alpha": 42, "beta": 10.3, "gamma": 1/2; "delta": 1 + i))', failure, 'Complex number 1 + i cannot be converted to a real number.');

  Test({LINENUM}53832, 'ComplexVector(struct())', TAlgosimComplexVector.Create);
  Test({LINENUM}53833, 'ComplexVector(Jane)', [TASC(40)]);
  Test({LINENUM}53834, 'ComplexVector(Mary)', TAlgosimComplexVector.Create);
  Test({LINENUM}53835, 'ComplexVector(struct("value": 42))', [TASC(42)]);
  Test({LINENUM}53836, 'ComplexVector(struct("alpha": 42, "beta": 10.3, "gamma": 1/2))', [TASC(42), 10.3, 0.5]);
  Test({LINENUM}53837, 'ComplexVector(struct("alpha": 42, "beta": 10.3, "gamma": 1/2, "delta": 1 + i))', [42, 10.3, 0.5, 1 + ImaginaryUnit]);

  Test({LINENUM}53839, 'matrix(Mary)', failure, 'An object of type "structure" cannot be converted to a real matrix.');
  Test({LINENUM}53840, 'RealMatrix(Mary)', failure, 'An object of type "structure" cannot be converted to a real matrix.');
  Test({LINENUM}53841, 'ComplexMatrix(Mary)', failure, 'An object of type "structure" cannot be converted to a complex matrix.');

  Test({LINENUM}53843, 'ToList(struct("alpha": 42, "beta": 10.3, "gamma": "dog"))', asoarr([42, 10.3, 'dog']));
  Test({LINENUM}53844, 'ToList(struct("alpha": 42))', asoarr([42]));
  Test({LINENUM}53845, 'ToList(struct())', asoarr([]));
  Test({LINENUM}53846, 'ToList(Jane)', asoarrex([Name('Jane', 'Smith'), ASO('female'), ASO(40)]));

  Test({LINENUM}53848, 'ToSet(struct("alpha": 42, "beta": 10.3, "gamma": "dog"))', asoset([42, 10.3, 'dog']));
  Test({LINENUM}53849, 'ToSet(struct("alpha": 42))', asoset([42]));
  Test({LINENUM}53850, 'ToSet(struct())', asoset([]));
  Test({LINENUM}53851, 'ToSet(Jane)', asosetex([Name('Jane', 'Smith'), ASO('female'), ASO(40)]));

  Test({LINENUM}53853, 'delete(name); delete(person); delete(Jane); delete(Mike); delete(Mary)', success);

  Test({LINENUM}53855, 'color(GetRGB(rgb(1, 0, 0)))', ASO(TRGB.Create(1, 0, 0)));
  Test({LINENUM}53856, 'color(GetRGB(rgb(0, 1, 0)))', ASO(TRGB.Create(0, 1, 0)));
  Test({LINENUM}53857, 'color(GetRGB(rgb(0, 0, 1)))', ASO(TRGB.Create(0, 0, 1)));
  Test({LINENUM}53858, 'color(GetRGB(rgb(1, 1, 0)))', ASO(TRGB.Create(1, 1, 0)));
  Test({LINENUM}53859, 'color(GetRGB(rgb(1, 1, 1)))', ASO(TRGB.Create(1, 1, 1)));

  Test({LINENUM}53861, 'color(GetHSV(rgb(1, 0, 0)))', ASO(TRGB.Create(1, 0, 0)));
  Test({LINENUM}53862, 'color(GetHSV(rgb(0, 1, 0)))', ASO(TRGB.Create(0, 1, 0)));
  Test({LINENUM}53863, 'color(GetHSV(rgb(0, 0, 1)))', ASO(TRGB.Create(0, 0, 1)));
  Test({LINENUM}53864, 'color(GetHSV(rgb(1, 1, 0)))', ASO(TRGB.Create(1, 1, 0)));
  Test({LINENUM}53865, 'color(GetHSV(rgb(1, 1, 1)))', ASO(TRGB.Create(1, 1, 1)));

  Test({LINENUM}53867, 'color(GetHSL(rgb(1, 0, 0)))', ASO(TRGB.Create(1, 0, 0)));
  Test({LINENUM}53868, 'color(GetHSL(rgb(0, 1, 0)))', ASO(TRGB.Create(0, 1, 0)));
  Test({LINENUM}53869, 'color(GetHSL(rgb(0, 0, 1)))', ASO(TRGB.Create(0, 0, 1)));
  Test({LINENUM}53870, 'color(GetHSL(rgb(1, 1, 0)))', ASO(TRGB.Create(1, 1, 0)));
  Test({LINENUM}53871, 'color(GetHSL(rgb(1, 1, 1)))', ASO(TRGB.Create(1, 1, 1)));

  Test({LINENUM}53873, 'color(now())', failure, 'Invalid colour coordinates structure.');


  //
  // From colour
  //

  Test({LINENUM}53880, 'c ≔ color("red")', ASOColor(clRed));
  Test({LINENUM}53881, 'number(c)', failure, 'An object of type color cannot be converted to a real number.');
  Test({LINENUM}53882, 'integer(c)', $FF0000);
  Test({LINENUM}53883, 'RealNumber(c)', failure, 'An object of type color cannot be converted to a real number.');
  Test({LINENUM}53884, 'ComplexNumber(c)', failure, 'An object of type color cannot be converted to a complex number.');
  Test({LINENUM}53885, 'boolean(c)', True);
  Test({LINENUM}53886, 'string(c)', 'rgba(1, 0, 0, 1)');
  Test({LINENUM}53887, 'vector(c)', failure, 'An object of type "color" cannot be converted to a real vector.');
  Test({LINENUM}53888, 'RealVector(c)', failure, 'An object of type "color" cannot be converted to a real vector.');
  Test({LINENUM}53889, 'ComplexVector(c)', failure, 'An object of type "color" cannot be converted to a complex vector.');
  Test({LINENUM}53890, 'matrix(c)', failure, 'An object of type "color" cannot be converted to a real matrix.');
  Test({LINENUM}53891, 'RealMatrix(c)', failure, 'An object of type "color" cannot be converted to a real matrix.');
  Test({LINENUM}53892, 'ComplexMatrix(c)', failure, 'An object of type "color" cannot be converted to a complex matrix.');
  Test({LINENUM}53893, 'ToList(c)', asoarrex([ASOColor(clRed)]));
  Test({LINENUM}53894, 'ToSet(c)', asosetex([ASOColor(clRed)]));
  Test({LINENUM}53895, 'color(c)', ASOColor(clRed));





  //
  //
  //  CHAPTER 11
  //  System functions and miscellaneous functions.
  //
  //

  Chapter('System functions');

  //
  // Identity function
  //

  Test({LINENUM}53914, 'identity(0)', 0);
  Test({LINENUM}53915, 'identity(1/2-1/2)', rat(0, 1));
  Test({LINENUM}53916, 'identity(0.0)', 0.0);
  Test({LINENUM}53917, 'identity(i-i)', TASC(0));
  Test({LINENUM}53918, 'identity(123)', 123);
  Test({LINENUM}53919, 'identity(-123)', -123);
  Test({LINENUM}53920, 'identity(123.456)', 123.456);
  Test({LINENUM}53921, 'identity(1E50)', 1E50);
  Test({LINENUM}53922, 'identity(true)', True);
  Test({LINENUM}53923, 'identity(false)', False);
  Test({LINENUM}53924, 'identity("cat")', 'cat');
  Test({LINENUM}53925, 'identity("")', '');
  Test({LINENUM}53926, 'identity(DebugObject("empty vector"))', TAlgosimRealVector.Create);
  Test({LINENUM}53927, 'identity(ComplexVector(DebugObject("empty vector")))', TAlgosimComplexVector.Create);
  Test({LINENUM}53928, 'identity(❨1, 2, 7, 5❩)', [1, 2, 7, 5]);
  Test({LINENUM}53929, 'identity(❨21❩)', [21]);
  Test({LINENUM}53930, 'identity(❨0❩)', [0]);
  Test({LINENUM}53931, 'identity(❨0, 0, 0❩)', [0, 0, 0]);
  Test({LINENUM}53932, 'identity(❨5, 0, i, 1❩)', [5, 0, ImaginaryUnit, 1]);
  Test({LINENUM}53933, 'identity(❨❨4, 1❩, ❨2, 0❩❩)', 2, [4, 1, 2, 0]);
  Test({LINENUM}53934, 'identity(❨❨4, 1, 7❩, ❨4, 2, 0❩❩)', 3, [4, 1, 7, 4, 2, 0]);
  Test({LINENUM}53935, 'identity(❨❨4, 1, 7❩, ❨1 + i, 2, 0❩❩)', 3, [4, 1, 7, 1 + ImaginaryUnit, 2, 0]);
  Test({LINENUM}53936, 'identity(❨❨394❩❩)', 1, [394]);
  Test({LINENUM}53937, 'identity(DebugObject("empty matrix"))', TAlgosimRealMatrix.Create);
  Test({LINENUM}53938, 'identity(ComplexMatrix(DebugObject("empty matrix")))', TAlgosimComplexMatrix.Create);
  Test({LINENUM}53939, 'identity(''(5, "cat", true, 3.1415, 2, 5, 3))', asoarr([5, 'cat', true, 3.1415, 2, 5, 3]));
  Test({LINENUM}53940, 'identity(''())', asoarr([]));
  Test({LINENUM}53941, 'identity({5, "cat", true, 3.1415, 2, 5, 3})', asoset([5, 'cat', true, 3.1415, 2, 3]));
  Test({LINENUM}53942, 'identity({})', asoset([]));
  Test({LINENUM}53943, 'identity(0;)', null);
  Test({LINENUM}53944, 'identity(''(''(''(''(''(1, 2), "cat"))), 4))',
    asoarrex([asoarrex([asoarrex([asoarrex([asoarrex([ASOInt(1), ASOInt(2)]), ASO('cat')])])]), ASOInt(4)]));


  //
  // The compute function
  //

  Test({LINENUM}53952, 'compute(n, n, 1, 10)', intarr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));
  Test({LINENUM}53953, 'compute(n^2, n, 1, 10)', intarr([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]));
  Test({LINENUM}53954, 'compute(prime(n), n, 1, 10)', intarr([2, 3, 5, 7, 11, 13, 17, 19, 23, 29]));
  Test({LINENUM}53955, 'compute(2^n, n, 0, 10)', intarr([1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]));

  Test({LINENUM}53957, 'matrix(compute(a⋅b, a, 1, 10, b, 1, 10))', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]
  );

  Test({LINENUM}53972, 'compute(a⋅b⋅c, a, 1, 2, b, 1, 3, c, 1, 4)',
    asoarrex(
      [

        // a = 1
        asoarrex(
          [
            // b = 1
            intarr([1, 2, 3, 4]),
            // b = 2
            intarr([2, 4, 6, 8]),
            // b = 3
            intarr([3, 6, 9, 12])
          ]
        ),

        // a = 2
        asoarrex(
          [
            // b = 1
            intarr([2, 4, 6, 8]),
            // b = 2
            intarr([4, 8, 12, 16]),
            // b = 3
            intarr([6, 12, 18, 24])
          ]
        )

      ]
    )
  );

  Test({LINENUM}54004, 'compute(n, n, 1, 1)', intarr([1]));
  Test({LINENUM}54005, 'compute(n, n, 21, 21)', intarr([21]));
  Test({LINENUM}54006, 'compute(n, n, 1, 0)', intarr([]));
  Test({LINENUM}54007, 'compute(n, n, 21, 0)', intarr([]));
  Test({LINENUM}54008, 'compute(n, n, 21, 10)', intarr([]));

  Test({LINENUM}54010, 'compute(a + b, a, 5, 5, b, 9, 9)', asoarrex([intarr([14])]));
  Test({LINENUM}54011, 'compute(a + b, a, 5, 5, b, 9, 10)', asoarrex([intarr([14, 15])]));
  Test({LINENUM}54012, 'compute(a + b, a, 5, 5, b, 9, 8)', asoarrex([]));
  Test({LINENUM}54013, 'compute(a + b, a, 5, 4, b, 9, 9)', asoarrex([]));
  Test({LINENUM}54014, 'compute(a + b, a, 5, -4, b, 9, 1)', asoarrex([]));
  Test({LINENUM}54015, 'compute(a + b, a, 5, -4, b, 9, 1, c, 10, 20, d, 40, 67, e, 11, 3)', asoarrex([]));

  Test({LINENUM}54017, 'compute(1, a, 1, 1, b, 1, 1, c, 1, 1, d, 1, 1)', asoarrex([asoarrex([asoarrex([asoarr([1])])])]));
  Test({LINENUM}54018, 'compute(1, a, 1, 1, b, 1, 1, c, 1, 1, d, 1, 3)', asoarrex([asoarrex([asoarrex([asoarr([1, 1, 1])])])]));
  Test({LINENUM}54019, 'compute(1 + d, a, 1, 1, b, 1, 1, c, 1, 1, d, 1, 3)', asoarrex([asoarrex([asoarrex([asoarr([2, 3, 4])])])]));
  Test({LINENUM}54020, 'compute(1 + d, a, 1, 1, b, 1, 1, c, 1, 2, d, 1, 3)', asoarrex([asoarrex([asoarrex([asoarr([2, 3, 4]), asoarr([2, 3, 4])])])]));
  Test({LINENUM}54021, 'compute(1 + c + d, a, 1, 1, b, 1, 1, c, 1, 2, d, 1, 3)', asoarrex([asoarrex([asoarrex([asoarr([3, 4, 5]), asoarr([4, 5, 6])])])]));
  Test({LINENUM}54022, 'compute(1 + c + d, a, 1, 0, b, 1, 1, c, 1, 2, d, 1, 3)', asoarrex([]));
  Test({LINENUM}54023, 'compute(1 + c + d, a, 1, 1, b, 10, 1, c, 1, 2, d, 1, 3)', asoarrex([]));

  Test({LINENUM}54025, 'compute(1 + c + d, a, 0.5, 1, b, 1, 1, c, 1, 2, d, 1, 3)', failure,
    'An object of type integer was expected as argument 3, but an object of type real number was given.');

  Test({LINENUM}54028, 'compute(1 + c + d, a, 1, 1, b, 1, 1, c, 1, 2, d, 1, 3.1415)', failure,
    'An object of type integer was expected as argument 13, but an object of type real number was given.');

  Test({LINENUM}54031, 'compute(c! + d!, a, 1, 1, b, 1, 1, c, 1, 2, d, 1, 3)', asoarrex([asoarrex([asoarrex([asoarr([2, 3, 7]), asoarr([3, 4, 8])])])]));
  Test({LINENUM}54032, 'compute(c! + d!, a, 1, 1, b, 1, 1, c, -1, 0, d, 1, 3)', failure,
    'A non-negative integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}54034, 'ErrorInfo(LastError()).stack', strarr(['factorial', 'add', 'compute', 'LastError']));


  //
  // Errors and error handling
  //

  Test({LINENUM}54041, 'error("A nargle took your variable.")', failure, 'A nargle took your variable.');
  Test({LINENUM}54042, 'error("")', failure);
  Test({LINENUM}54043, 'error()', failure);
  Test({LINENUM}54044, 'error(0)', failure, '0');

  Test({LINENUM}54046, 'fail("A nargle took your variable.")', failure, 'A nargle took your variable.');
  Test({LINENUM}54047, 'fail("")', failure);
  Test({LINENUM}54048, 'fail()', failure);
  Test({LINENUM}54049, 'fail(0)', failure, '0');

  Test({LINENUM}54051, 'assert(1 + 1 = 2, "Addition issue detected.")', null);
  Test({LINENUM}54052, 'assert(1 + 1 = 3, "Synergy deficiency detected.")', failure, 'Synergy deficiency detected.');

  Test({LINENUM}54054, 'assert(123, "Integral thing.")', failure, 'An object of type boolean was expected as argument 1, but an object of type integer was given.');

  Test({LINENUM}54056, 'N ≔ 2; assert(N ≥ 2, "N must be at least 2.")', null);
  Test({LINENUM}54057, 'N ≔ 1; assert(N ≥ 2, "N must be at least 2.")', failure, 'N must be at least 2.');

  Test({LINENUM}54059, 'p ≔ 3; assert(IsPrime(p), "p must be prime.")', null);
  Test({LINENUM}54060, 'p ≔ 4; assert(IsPrime(p), "p must be prime.")', failure, 'p must be prime.');

  Test({LINENUM}54062, 'L ≔ ''(1, 4, 2); assert(#L > 0, "L must be non-empty.")', null);
  Test({LINENUM}54063, 'L ≔ ''(); assert(#L > 0, "L must be non-empty.")', failure, 'L must be non-empty.');

  Test({LINENUM}54065, 'succeeded(5 / 3)', True);
  Test({LINENUM}54066, 'succeeded(5 / 2)', True);
  Test({LINENUM}54067, 'succeeded(5 / 1)', True);
  Test({LINENUM}54068, 'succeeded(5 / 0)', False);

  Test({LINENUM}54070, 'succeeded(fail("miserably"))', False);

  Test({LINENUM}54072, 'try(5 / 3)', rat(5, 3));
  Test({LINENUM}54073, 'try(5 / 2)', rat(5, 2));
  Test({LINENUM}54074, 'try(5 / 1)', 5);
  Test({LINENUM}54075, 'try(5 / 0)', null);

  Test({LINENUM}54077, 'try(5 / 3, 21)', rat(5, 3));
  Test({LINENUM}54078, 'try(5 / 2, 21)', rat(5, 2));
  Test({LINENUM}54079, 'try(5 / 1, 21)', 5);
  Test({LINENUM}54080, 'try(5 / 0, 21)', 21);

  Test({LINENUM}54082, 'try(5 / 3, 21 / 0)', rat(5, 3));
  Test({LINENUM}54083, 'try(5 / 2, 21 / 0)', rat(5, 2));
  Test({LINENUM}54084, 'try(5 / 1, 21 / 0)', 5);
  Test({LINENUM}54085, 'try(5 / 0, 21 / 0)', failure, 'Division by zero');

  Test({LINENUM}54087, 'ErrorInfo(5 / 0)',
    ASOErrorInfo('Division by zero', [FCN_Divide]));

  Test({LINENUM}54090, 'ErrorInfo(5 / 0)',
    stErrorInfo.New(
      [
        sm('reason', ASO('Division by zero')),
        sm('source', ASO('divide')),
        sm('stack', strarr(['divide']))
      ]
    )
  );

  Test({LINENUM}54100, 'ErrorInfo(2 + 5 / 0)',
    ASOErrorInfo('Division by zero', [FCN_Divide, FCN_Add]));

  Test({LINENUM}54103, 'ErrorInfo(2 + 5 / 0)',
    stErrorInfo.New(
      [
        sm('reason', ASO('Division by zero')),
        sm('source', ASO('divide')),
        sm('stack', strarr(['divide', 'add']))
      ]
    )
  );

  Test({LINENUM}54113, 'ErrorInfo(3 + sin(7 + (3 + (-5)!)/2))',
    ASOErrorInfo('A non-negative integer was expected as argument 1, but "-5" was given.', [FCN_Factorial, FCN_Add, FCN_Divide, FCN_Add, FCN_Sin, FCN_Add]));

  Test({LINENUM}54116, 'ErrorInfo(3 + sin(7 + (3 + (-5)!)/2))',
    stErrorInfo.New(
      [
        sm('reason', ASO('A non-negative integer was expected as argument 1, but "-5" was given.')),
        sm('source', ASO('factorial')),
        sm('stack', strarr(['factorial', 'add', 'divide', 'add', 'sin', 'add']))
      ]
    )
  );

  Test({LINENUM}54126, 's ≔ "the emotional range of a teaspoon"', 'the emotional range of a teaspoon');

  Test({LINENUM}54128, 'ErrorInfo(succ(count(s, c ↦ ord(c))) / 2)',
    ASOErrorInfo('The predicate was expected to return a boolean, but an object of type integer was returned.', [FCN_Count, FCN_Succ, FCN_Divide]));

  Test({LINENUM}54131, 'ErrorInfo(succ(count(s, c ↦ ord(c))) / 2)',
    stErrorInfo.New(
      [
        sm('reason', ASO('The predicate was expected to return a boolean, but an object of type integer was returned.')),
        sm('source', ASO('count')),
        sm('stack', strarr(['count', 'succ', 'divide']))
      ]
    )
  );

  Test({LINENUM}54141, 'ErrorInfo(succ(count(s, c ↦ chr(ord(c + 5)))) / 2)',
    ASOErrorInfo('A character was expected as argument 1, but "t5" was given.', [FCN_ChrCode, FCN_Character, FCN_Count, FCN_Succ, FCN_Divide]));

  Test({LINENUM}54144, 'ErrorInfo(succ(count(s, c ↦ chr(ord(c + 5)))) / 2)',
    stErrorInfo.New(
      [
        sm('reason', ASO('A character was expected as argument 1, but "t5" was given.')),
        sm('source', ASO('ord')),
        sm('stack', strarr(['ord', 'chr', 'count', 'succ', 'divide']))
      ]
    )
  );

  Test({LINENUM}54154, 'ErrorInfo(π + (1/2)⋅∫(sin(x)^2/x + 1, x, 0, π))',
    ASOErrorInfo('Invalid floating point operation', [FCN_Divide, FCN_Add, FCN_Integrate, FCN_Multiply, FCN_Add]));

  Test({LINENUM}54157, 'ErrorInfo(π + (1/2)⋅∫(sin(x)^2/x + 1, x, 0, π))',
    stErrorInfo.New(
      [
        sm('reason', ASO('Invalid floating point operation')),
        sm('source', ASO('divide')),
        sm('stack', strarr(['divide', 'add', 'integrate', 'multiply', 'add']))
      ]
    )
  );

  Test({LINENUM}54167, '5 / 0', failure);
  Test({LINENUM}54168, 'ErrorInfo(LastError())',
    stErrorInfo.New(
      [
        sm('reason', ASO('Division by zero')),
        sm('source', ASO('divide')),
        sm('stack', strarr(['divide', 'LastError']))
      ]
    )
  );

  Test({LINENUM}54178, '2 + 5 / 0', failure);
  Test({LINENUM}54179, 'ErrorInfo(LastError())',
    stErrorInfo.New(
      [
        sm('reason', ASO('Division by zero')),
        sm('source', ASO('divide')),
        sm('stack', strarr(['divide', 'add', 'LastError']))
      ]
    )
  );

  Test({LINENUM}54189, '3 + sin(7 + (3 + (-5)!)/2)', failure);
  Test({LINENUM}54190, 'ErrorInfo(LastError())',
    stErrorInfo.New(
      [
        sm('reason', ASO('A non-negative integer was expected as argument 1, but "-5" was given.')),
        sm('source', ASO('factorial')),
        sm('stack', strarr(['factorial', 'add', 'divide', 'add', 'sin', 'add', 'LastError']))
      ]
    )
  );

  Test({LINENUM}54200, 'succ(count(s, c ↦ ord(c))) / 2', failure);
  Test({LINENUM}54201, 'ErrorInfo(LastError())',
    stErrorInfo.New(
      [
        sm('reason', ASO('The predicate was expected to return a boolean, but an object of type integer was returned.')),
        sm('source', ASO('count')),
        sm('stack', strarr(['count', 'succ', 'divide', 'LastError']))
      ]
    )
  );

  Test({LINENUM}54211, 'succ(count(s, c ↦ chr(ord(c + 5)))) / 2', failure);
  Test({LINENUM}54212, 'ErrorInfo(LastError())',
    stErrorInfo.New(
      [
        sm('reason', ASO('A character was expected as argument 1, but "t5" was given.')),
        sm('source', ASO('ord')),
        sm('stack', strarr(['ord', 'chr', 'count', 'succ', 'divide', 'LastError']))
      ]
    )
  );

  Test({LINENUM}54222, 'π + (1/2)⋅∫(sin(x)^2/x + 1, x, 0, π)', failure);
  Test({LINENUM}54223, 'ErrorInfo(LastError())',
    stErrorInfo.New(
      [
        sm('reason', ASO('Invalid floating point operation')),
        sm('source', ASO('divide')),
        sm('stack', strarr(['divide', 'add', 'integrate', 'multiply', 'add', 'LastError']))
      ]
    )
  );

  Test({LINENUM}54233, 'delete(N); delete(p); delete(L); delete(s)', success);


  //
  // Object store and function manager access
  //

  // Object store

  Test({LINENUM}54242, 'VarBase ≔ ToSet(variables()) ∪ { "VarBase" };', null);
  Test({LINENUM}54243, '{ "π", "true", "false", "i", "e", "ℎ", "ℏ", "∅", "ans" } ⊂ VarBase', True);
  Test({LINENUM}54244, 'description(π)', 'The ratio of a circle''s circumference to its diameter.');
  Test({LINENUM}54245, 'description(e)', 'The base of the natural logarithm.');
  Test({LINENUM}54246, 'description(ans)', 'This is the result of the last computation.');
  Test({LINENUM}54247, 'description(i)', 'The imaginary unit, a square root of negative one.');
  Test({LINENUM}54248, 'description(∅)', 'The empty set.');
  Test({LINENUM}54249, 'description(ℎ)', 'The Planck constant.');
  Test({LINENUM}54250, 'description(ℏ)', 'The Planck constant divided by 2π.');

  Test({LINENUM}54252, '"InnerDiameter" ∈ VarBase', False);

  Test({LINENUM}54254, 'InnerDiameter ≔ 1.7', 1.7);
  Test({LINENUM}54255, 'VarBase ∪ { "InnerDiameter" } = ToSet(variables())', True);

  Test({LINENUM}54257, 'var ≔ variable(InnerDiameter);', null);
  Test({LINENUM}54258, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54259, '#var', 5);
  Test({LINENUM}54260, 'var.name', 'InnerDiameter');
  Test({LINENUM}54261, 'var.description', '');
  Test({LINENUM}54262, 'var.value', 1.7);
  Test({LINENUM}54263, 'var.protected', False);

  Test({LINENUM}54265, 'var ≔ variable("InnerDiameter");', null);
  Test({LINENUM}54266, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54267, 'var.name', 'InnerDiameter');
  Test({LINENUM}54268, 'var.description', '');
  Test({LINENUM}54269, 'var.value', 1.7);
  Test({LINENUM}54270, 'var.protected', False);

  Test({LINENUM}54272, 'VarBase ∪ { "InnerDiameter", "var" } = ToSet(variables())', True);

  Test({LINENUM}54274, 'InnerDiameter ≔ 1.8', 1.8);

  Test({LINENUM}54276, 'var ≔ variable(InnerDiameter);', null);
  Test({LINENUM}54277, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54278, 'var.name', 'InnerDiameter');
  Test({LINENUM}54279, 'var.description', '');
  Test({LINENUM}54280, 'var.value', 1.8);
  Test({LINENUM}54281, 'var.protected', False);

  Test({LINENUM}54283, 'var ≔ variable("InnerDiameter");', null);
  Test({LINENUM}54284, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54285, 'var.name', 'InnerDiameter');
  Test({LINENUM}54286, 'var.description', '');
  Test({LINENUM}54287, 'var.value', 1.8);
  Test({LINENUM}54288, 'var.protected', False);

  Test({LINENUM}54290, 'object(InnerDiameter)', 1.8);
  Test({LINENUM}54291, 'object("InnerDiameter")', 1.8);

  Test({LINENUM}54293, 'protect(InnerDiameter)', success);

  Test({LINENUM}54295, 'var ≔ variable(InnerDiameter);', null);
  Test({LINENUM}54296, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54297, 'var.name', 'InnerDiameter');
  Test({LINENUM}54298, 'var.description', '');
  Test({LINENUM}54299, 'var.value', 1.8);
  Test({LINENUM}54300, 'var.protected', True);

  Test({LINENUM}54302, 'var ≔ variable("InnerDiameter");', null);
  Test({LINENUM}54303, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54304, 'var.name', 'InnerDiameter');
  Test({LINENUM}54305, 'var.description', '');
  Test({LINENUM}54306, 'var.value', 1.8);
  Test({LINENUM}54307, 'var.protected', True);

  Test({LINENUM}54309, 'object(InnerDiameter)', 1.8);
  Test({LINENUM}54310, 'object("InnerDiameter")', 1.8);

  Test({LINENUM}54312, 'InnerDiameter ≔ 1.9', failure, 'Cannot modify or delete protected variable "InnerDiameter".');

  Test({LINENUM}54314, 'var ≔ variable(InnerDiameter);', null);
  Test({LINENUM}54315, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54316, 'var.name', 'InnerDiameter');
  Test({LINENUM}54317, 'var.description', '');
  Test({LINENUM}54318, 'var.value', 1.8);
  Test({LINENUM}54319, 'var.protected', True);

  Test({LINENUM}54321, 'var ≔ variable("InnerDiameter");', null);
  Test({LINENUM}54322, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54323, 'var.name', 'InnerDiameter');
  Test({LINENUM}54324, 'var.description', '');
  Test({LINENUM}54325, 'var.value', 1.8);
  Test({LINENUM}54326, 'var.protected', True);

  Test({LINENUM}54328, 'object(InnerDiameter)', 1.8);
  Test({LINENUM}54329, 'object("InnerDiameter")', 1.8);

  Test({LINENUM}54331, 'InnerDiameter', 1.8);

  Test({LINENUM}54333, 'unprotect(InnerDiameter)', success);

  Test({LINENUM}54335, 'var ≔ variable(InnerDiameter);', null);
  Test({LINENUM}54336, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54337, 'var.name', 'InnerDiameter');
  Test({LINENUM}54338, 'var.description', '');
  Test({LINENUM}54339, 'var.value', 1.8);
  Test({LINENUM}54340, 'var.protected', False);

  Test({LINENUM}54342, 'var ≔ variable("InnerDiameter");', null);
  Test({LINENUM}54343, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54344, 'var.name', 'InnerDiameter');
  Test({LINENUM}54345, 'var.description', '');
  Test({LINENUM}54346, 'var.value', 1.8);
  Test({LINENUM}54347, 'var.protected', False);

  Test({LINENUM}54349, 'object(InnerDiameter)', 1.8);
  Test({LINENUM}54350, 'object("InnerDiameter")', 1.8);

  Test({LINENUM}54352, 'InnerDiameter ≔ 1.9', 1.9);

  Test({LINENUM}54354, 'var ≔ variable(InnerDiameter);', null);
  Test({LINENUM}54355, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54356, 'var.name', 'InnerDiameter');
  Test({LINENUM}54357, 'var.description', '');
  Test({LINENUM}54358, 'var.value', 1.9);
  Test({LINENUM}54359, 'var.protected', False);

  Test({LINENUM}54361, 'var ≔ variable("InnerDiameter");', null);
  Test({LINENUM}54362, 'type(var)', 'structure of type "Variable"');
  Test({LINENUM}54363, 'var.name', 'InnerDiameter');
  Test({LINENUM}54364, 'var.description', '');
  Test({LINENUM}54365, 'var.value', 1.9);
  Test({LINENUM}54366, 'var.protected', False);

  Test({LINENUM}54368, 'object(InnerDiameter)', 1.9);
  Test({LINENUM}54369, 'object("InnerDiameter")', 1.9);

  Test({LINENUM}54371, 'InnerDiameter ≔ 1.7', 1.7);

  Test({LINENUM}54373, 'var ≔ metadata(InnerDiameter);', null);
  Test({LINENUM}54374, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54375, '#var', 4);
  Test({LINENUM}54376, 'var.name', 'InnerDiameter');
  Test({LINENUM}54377, 'var.description', '');
  Test({LINENUM}54378, 'var.value', failure, 'There is no member named "value".');
  Test({LINENUM}54379, 'var.protected', False);

  Test({LINENUM}54381, 'var ≔ metadata("InnerDiameter");', null);
  Test({LINENUM}54382, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54383, 'var.name', 'InnerDiameter');
  Test({LINENUM}54384, 'var.description', '');
  Test({LINENUM}54385, 'var.value', failure, 'There is no member named "value".');
  Test({LINENUM}54386, 'var.protected', False);

  Test({LINENUM}54388, 'object(InnerDiameter)', 1.7);
  Test({LINENUM}54389, 'object("InnerDiameter")', 1.7);

  Test({LINENUM}54391, 'InnerDiameter ≔ 1.8', 1.8);

  Test({LINENUM}54393, 'var ≔ metadata(InnerDiameter);', null);
  Test({LINENUM}54394, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54395, '#var', 4);
  Test({LINENUM}54396, 'var.name', 'InnerDiameter');
  Test({LINENUM}54397, 'var.description', '');
  Test({LINENUM}54398, 'var.protected', False);

  Test({LINENUM}54400, 'var ≔ metadata("InnerDiameter");', null);
  Test({LINENUM}54401, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54402, 'var.name', 'InnerDiameter');
  Test({LINENUM}54403, 'var.description', '');
  Test({LINENUM}54404, 'var.protected', False);

  Test({LINENUM}54406, 'object(InnerDiameter)', 1.8);
  Test({LINENUM}54407, 'object("InnerDiameter")', 1.8);

  Test({LINENUM}54409, 'protect(InnerDiameter)', success);

  Test({LINENUM}54411, 'var ≔ metadata(InnerDiameter);', null);
  Test({LINENUM}54412, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54413, '#var', 4);
  Test({LINENUM}54414, 'var.name', 'InnerDiameter');
  Test({LINENUM}54415, 'var.description', '');
  Test({LINENUM}54416, 'var.protected', True);

  Test({LINENUM}54418, 'var ≔ metadata("InnerDiameter");', null);
  Test({LINENUM}54419, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54420, 'var.name', 'InnerDiameter');
  Test({LINENUM}54421, 'var.description', '');
  Test({LINENUM}54422, 'var.protected', True);

  Test({LINENUM}54424, 'object(InnerDiameter)', 1.8);
  Test({LINENUM}54425, 'object("InnerDiameter")', 1.8);

  Test({LINENUM}54427, 'InnerDiameter ≔ 1.9', failure, 'Cannot modify or delete protected variable "InnerDiameter".');

  Test({LINENUM}54429, 'var ≔ metadata(InnerDiameter);', null);
  Test({LINENUM}54430, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54431, '#var', 4);
  Test({LINENUM}54432, 'var.name', 'InnerDiameter');
  Test({LINENUM}54433, 'var.description', '');
  Test({LINENUM}54434, 'var.protected', True);

  Test({LINENUM}54436, 'var ≔ metadata("InnerDiameter");', null);
  Test({LINENUM}54437, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54438, 'var.name', 'InnerDiameter');
  Test({LINENUM}54439, 'var.description', '');
  Test({LINENUM}54440, 'var.protected', True);

  Test({LINENUM}54442, 'object(InnerDiameter)', 1.8);
  Test({LINENUM}54443, 'object("InnerDiameter")', 1.8);
  Test({LINENUM}54444, 'InnerDiameter', 1.8);

  Test({LINENUM}54446, 'unprotect(InnerDiameter)', success);

  Test({LINENUM}54448, 'var ≔ metadata(InnerDiameter);', null);
  Test({LINENUM}54449, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54450, '#var', 4);
  Test({LINENUM}54451, 'var.name', 'InnerDiameter');
  Test({LINENUM}54452, 'var.description', '');
  Test({LINENUM}54453, 'var.protected', False);

  Test({LINENUM}54455, 'var ≔ metadata("InnerDiameter");', null);
  Test({LINENUM}54456, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54457, 'var.name', 'InnerDiameter');
  Test({LINENUM}54458, 'var.description', '');
  Test({LINENUM}54459, 'var.protected', False);

  Test({LINENUM}54461, 'object(InnerDiameter)', 1.8);
  Test({LINENUM}54462, 'object("InnerDiameter")', 1.8);

  Test({LINENUM}54464, 'InnerDiameter ≔ 1.9', 1.9);

  Test({LINENUM}54466, 'var ≔ metadata(InnerDiameter);', null);
  Test({LINENUM}54467, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54468, '#var', 4);
  Test({LINENUM}54469, 'var.name', 'InnerDiameter');
  Test({LINENUM}54470, 'var.description', '');
  Test({LINENUM}54471, 'var.protected', False);

  Test({LINENUM}54473, 'var ≔ metadata("InnerDiameter");', null);
  Test({LINENUM}54474, 'type(var)', 'structure of type "VariableMetadata"');
  Test({LINENUM}54475, 'var.name', 'InnerDiameter');
  Test({LINENUM}54476, 'var.description', '');
  Test({LINENUM}54477, 'var.protected', False);

  Test({LINENUM}54479, 'object(InnerDiameter)', 1.9);
  Test({LINENUM}54480, 'object("InnerDiameter")', 1.9);

  Test({LINENUM}54482, 'variable(nargle)', failure, 'Unknown identifier "nargle".');
  Test({LINENUM}54483, 'variable("nargle")', failure, 'Unknown identifier "nargle".');
  Test({LINENUM}54484, 'metadata(nargle)', failure, 'Unknown identifier "nargle".');
  Test({LINENUM}54485, 'metadata("nargle")', failure, 'Unknown identifier "nargle".');
  Test({LINENUM}54486, 'object(nargle)', failure, 'Unknown identifier "nargle".');
  Test({LINENUM}54487, 'object("nargle")', failure, 'Unknown identifier "nargle".');
  Test({LINENUM}54488, 'description(nargle)', failure, 'Unknown identifier "nargle".');
  Test({LINENUM}54489, 'description("nargle")', failure, 'Unknown identifier "nargle".');

  Test({LINENUM}54491, 'variable()', failure, '1 argument(s) expected, but 0 given.');
  Test({LINENUM}54492, 'variable("")', failure, 'Unknown identifier "".');
  Test({LINENUM}54493, 'metadata()', failure, '1 argument(s) expected, but 0 given.');
  Test({LINENUM}54494, 'metadata("")', failure, 'Unknown identifier "".');
  Test({LINENUM}54495, 'object()', failure, '1 argument(s) expected, but 0 given.');
  Test({LINENUM}54496, 'object("")', failure, 'Unknown identifier "".');
  Test({LINENUM}54497, 'description()', failure, '1 argument(s) expected, but 0 given.');
  Test({LINENUM}54498, 'description("")', failure, 'Unknown identifier "".');

  Test({LINENUM}54500, 'ForEach(variables(), v, assert(object(+v) = variable(+v).value))', null);
  Test({LINENUM}54501, 'ForEach(variables(), v, assert(description(+v) = variable(+v).description))', null);

  Test({LINENUM}54503, 'VarBase ∪ { "InnerDiameter", "var" } = ToSet(variables())', True);
  Test({LINENUM}54504, 'delete(var)', success);
  Test({LINENUM}54505, 'VarBase ∪ { "InnerDiameter" } = ToSet(variables())', True);
  Test({LINENUM}54506, 'delete(InnerDiameter)', success);
  Test({LINENUM}54507, 'VarBase = ToSet(variables())', True);
  Test({LINENUM}54508, 'delete(VarBase)', success);

  Test({LINENUM}54510, 'ForEach(variables(), v, assert(object(+v) = variable(+v).value))', null);
  Test({LINENUM}54511, 'ForEach(variables(), v, assert(description(+v) = variable(+v).description))', null);

  TestDefVars;
  Test({LINENUM}54514, 'LoadDefVars()', success);
  Test({LINENUM}54515, 'ForEach(variables(), v, (unprotect(+v); delete(+v)))', null);
  Test({LINENUM}54516, 'e', failure, 'Unknown identifier "e".');
  Test({LINENUM}54517, 'π', failure, 'Unknown identifier "π".');
  Test({LINENUM}54518, 'i', failure, 'Unknown identifier "i".');
  Test({LINENUM}54519, 'true', failure, 'Unknown identifier "true".');
  Test({LINENUM}54520, 'LoadDefVars()', success);
  TestDefVars;
  Test({LINENUM}54522, 'LoadDefVars()', success);
  TestDefVars;


  // Function manager

  Test({LINENUM}54528, 'F ≔ functions(); S ≔ ToSet(F) @ function;', null);
  Test({LINENUM}54529, 'type(F)', 'array');
  Test({LINENUM}54530, '∀(F, f ↦ type(f) = "string")', True);
  Test({LINENUM}54531, 'F = sort(F)', True);
  Test({LINENUM}54532, '∀(S, f ↦ type(f) = "kernel function")', True);
  Test({LINENUM}54533, '#S ≤ #F', True);
  Test({LINENUM}54534, '{ sin, cos, tan, cot, sec, csc } ⊂ S', True);
  Test({LINENUM}54535, '{ sinh, cosh, tanh, coth, sech, csch } ⊂ S', True);
  Test({LINENUM}54536, '{ arcsin, arccos, arctan, arccot, arcsec, arccsc } ⊂ S', True);
  Test({LINENUM}54537, '{ arcsinh, arccosh, arctanh, arccoth, arcsech, arccsch } ⊂ S', True);
  Test({LINENUM}54538, '∀(F, f ↦ #categories(f) > 0)', True);
  Test({LINENUM}54539, '∀(S, f ↦ #categories(f) > 0)', True);
  Test({LINENUM}54540, 'categories(sin)', strarr(['math', 'trigonometry']));
  Test({LINENUM}54541, 'categories("sin")', strarr(['math', 'trigonometry']));
  Test({LINENUM}54542, 'categories(sind)', failure, 'Unknown identifier "sind".');
  Test({LINENUM}54543, 'categories("sind")', failure, 'Unknown identifier "sind".');
  Test({LINENUM}54544, 'FcnName(sin)', 'sin');
  Test({LINENUM}54545, 'FcnName("sin")', 'sin');
  Test({LINENUM}54546, 'FcnNames(sin)', strarr(['sin']));
  Test({LINENUM}54547, 'FcnNames("sin")', strarr(['sin']));
  Test({LINENUM}54548, 'FcnName(length)', 'length');
  Test({LINENUM}54549, 'FcnName("length")', 'length');
  Test({LINENUM}54550, 'FcnName(cardinality)', 'length');
  Test({LINENUM}54551, 'FcnName("cardinality")', 'length');
  Test({LINENUM}54552, 'FcnName(card)', 'length');
  Test({LINENUM}54553, 'FcnName("card")', 'length');
  Test({LINENUM}54554, 'FcnNames(length)', strarr(['length', 'cardinality', 'card']));
  Test({LINENUM}54555, 'FcnNames("length")', strarr(['length', 'cardinality', 'card']));
  Test({LINENUM}54556, 'FcnNames(cardinality)', strarr(['length', 'cardinality', 'card']));
  Test({LINENUM}54557, 'FcnNames("cardinality")', strarr(['length', 'cardinality', 'card']));
  Test({LINENUM}54558, 'FcnNames(card)', strarr(['length', 'cardinality', 'card']));
  Test({LINENUM}54559, 'FcnNames("card")', strarr(['length', 'cardinality', 'card']));
  Test({LINENUM}54560, 'ForEach(F, f, assert(first(FcnNames(f)) = FcnName(f), FcnName(f) ~ " failed"))', null);
  Test({LINENUM}54561, 'function(square)(5)', 25);
  Test({LINENUM}54562, 'function("square")(5)', 25);
  Test({LINENUM}54563, 'function(factorial)(5)', 120);
  Test({LINENUM}54564, 'function("factorial")(5)', 120);
  Test({LINENUM}54565, 'function(NargleShoeSize)("Betty")', failure, 'Unknown identifier "NargleShoeSize".');
  Test({LINENUM}54566, 'function("NargleShoeSize")("Betty")', failure, 'Unknown identifier "NargleShoeSize".');
  Test({LINENUM}54567, 'sin = sin', True);
  Test({LINENUM}54568, 'sin = cos', False);
  Test({LINENUM}54569, 'sin = tan', False);
  Test({LINENUM}54570, 'cos = sin', False);
  Test({LINENUM}54571, 'cos = cos', True);
  Test({LINENUM}54572, 'cos = tan', False);
  Test({LINENUM}54573, 'tan = sin', False);
  Test({LINENUM}54574, 'tan = cos', False);
  Test({LINENUM}54575, 'tan = tan', True);
  Test({LINENUM}54576, 'length = length', True);
  Test({LINENUM}54577, 'length = cardinality', True);
  Test({LINENUM}54578, 'length = card', True);
  Test({LINENUM}54579, 'cardinality = length', True);
  Test({LINENUM}54580, 'cardinality = cardinality', True);
  Test({LINENUM}54581, 'cardinality = card', True);
  Test({LINENUM}54582, 'card = length', True);
  Test({LINENUM}54583, 'card = cardinality', True);
  Test({LINENUM}54584, 'card = card', True);
  Test({LINENUM}54585, 'delete(F); delete(S)', success);

  Test({LINENUM}54587, '#operators()', 71);


  //
  // The beep function
  //

  Test({LINENUM}54594, 'beep()', null);
  Test({LINENUM}54595, 'beep("default")', null);
  Test({LINENUM}54596, 'beep("information")', null);
  Test({LINENUM}54597, 'beep("warning")', null);
  Test({LINENUM}54598, 'beep("error")', null);
  Test({LINENUM}54599, 'beep("question")', null);
  Test({LINENUM}54600, 'beep("nargle noise")', failure, 'Unsupported beep sound type: "nargle noise"');

  StartStopwatch;
  Test({LINENUM}54603, 'beep(200, 200)', null);
  StopStopwatch;
  TestDuration({LINENUM}54605, 0.19, 0.22);

  StartStopwatch;
  Test({LINENUM}54608, 'beep(300, 200)', null);
  StopStopwatch;
  TestDuration({LINENUM}54610, 0.19, 0.22);

  StartStopwatch;
  Test({LINENUM}54613, 'beep(400, 100)', null);
  StopStopwatch;
  TestDuration({LINENUM}54615, 0.09, 0.12);

  StartStopwatch;
  Test({LINENUM}54618, 'beep(500, 100)', null);
  StopStopwatch;
  TestDuration({LINENUM}54620, 0.09, 0.12);

  StartStopwatch;
  Test({LINENUM}54623, 'beep(600, 50)', null);
  StopStopwatch;
  TestDuration({LINENUM}54625, 0.04, 0.07);

  StartStopwatch;
  Test({LINENUM}54628, 'beep(800, 50)', null);
  StopStopwatch;
  TestDuration({LINENUM}54630, 0.04, 0.07);

  StartStopwatch;
  Test({LINENUM}54633, 'beep(1000, 50)', null);
  StopStopwatch;
  TestDuration({LINENUM}54635, 0.04, 0.07);

  StartStopwatch;
  Test({LINENUM}54638, 'beep(2000, 50)', null);
  StopStopwatch;
  TestDuration({LINENUM}54640, 0.04, 0.07);

  StartStopwatch;
  Test({LINENUM}54643, 'beep(4000, 50)', null);
  StopStopwatch;
  TestDuration({LINENUM}54645, 0.04, 0.07);

  StartStopwatch;
  Test({LINENUM}54648, 'beep(100, 1000)', null);
  StopStopwatch;
  TestDuration({LINENUM}54650, 0.9, 1.2);

  StartStopwatch;
  Test({LINENUM}54653, 'beep(4000, 0)', null);
  StopStopwatch;
  TestDuration({LINENUM}54655, 0.02);

  Test({LINENUM}54657, 'beep(4000, -100)', failure, 'A non-negative integer was expected as argument 2, but "-100" was given.');

  Test({LINENUM}54659, 'beep(10, 1000)', failure, 'Unsupported tone frequency: 10 Hz');
  Test({LINENUM}54660, 'beep(50000, 1000)', failure, 'Unsupported tone frequency: 50000 Hz');


  //
  // The wait function
  //

  StartStopwatch;
  Test({LINENUM}54668, 'wait(0.5)', null);
  StopStopwatch;
  TestDuration({LINENUM}54670, 0.4, 0.6);

  StartStopwatch;
  Test({LINENUM}54673, 'wait(0.2)', null);
  StopStopwatch;
  TestDuration({LINENUM}54675, 0.1, 0.3);

  StartStopwatch;
  Test({LINENUM}54678, 'wait(1)', null);
  StopStopwatch;
  TestDuration({LINENUM}54680, 0.9, 1.1);


  //
  // The TickCount function
  //

  Test({LINENUM}54687, 'c ≔ TickCount();', null);
  Sleep(200);
  Test({LINENUM}54689, 'abs(TickCount() - c - 200) < 100', True);

  Test({LINENUM}54691, 'c ≔ TickCount();', null);
  Sleep(400);
  Test({LINENUM}54693, 'abs(TickCount() - c - 400) < 100', True);

  Test({LINENUM}54695, 'c ≔ TickCount();', null);
  Sleep(1000);
  Test({LINENUM}54697, 'abs(TickCount() - c - 1000) < 100', True);

  Test({LINENUM}54699, 'delete(c)', success);


  //
  // Colour functions
  //

  Test({LINENUM}54706, 'type(rgb(1, 0, 0))', 'color');

  Test({LINENUM}54708, 'rgb(1, 0, 0)', TRGB.Create(1, 0, 0));
  Test({LINENUM}54709, 'rgb(0, 1, 0)', TRGB.Create(0, 1, 0));
  Test({LINENUM}54710, 'rgb(0, 0, 1)', TRGB.Create(0, 0, 1));
  Test({LINENUM}54711, 'rgb(0, 0, 0)', TRGB.Create(0, 0, 0));
  Test({LINENUM}54712, 'rgb(1, 1, 1)', TRGB.Create(1, 1, 1));
  Test({LINENUM}54713, 'rgb(0.5, 0.7, 0.1)', TRGB.Create(0.5, 0.7, 0.1));

  Test({LINENUM}54715, 'type(hsv(240, 1, 1))', 'color');

  Test({LINENUM}54717, 'hsv(240, 1, 1)', THSV.Create(240, 1, 1));
  Test({LINENUM}54718, 'hsv(180, 1, 1)', THSV.Create(180, 1, 1));
  Test({LINENUM}54719, 'hsv(10, 0.5, 1)', THSV.Create(10, 0.5, 1));
  Test({LINENUM}54720, 'hsv(10, 1, 0.4)', THSV.Create(10, 1, 0.4));

  Test({LINENUM}54722, 'type(hsl(240, 1, 0.5))', 'color');

  Test({LINENUM}54724, 'hsl(240, 1, 0.5)', Thsl.Create(240, 1, 0.5));
  Test({LINENUM}54725, 'hsl(180, 1, 0.5)', Thsl.Create(180, 1, 0.5));
  Test({LINENUM}54726, 'hsl(10, 0.5, 0.6)', Thsl.Create(10, 0.5, 0.6));
  Test({LINENUM}54727, 'hsl(10, 1, 0.4)', Thsl.Create(10, 1, 0.4));

  Test({LINENUM}54729, 'black ≔ rgb(0, 0, 0); w ≔ rgb(1, 1, 1); r ≔ rgb(1, 0, 0); g ≔ rgb(0, 1, 0); b ≔ rgb(0, 0, 1); y ≔ rgb(1, 1, 0); x ≔ rgb(0.2, 0.4, 0.6);', null);

  Test({LINENUM}54731, 'GetRGB(black)', ASORGB(TRGB.Create(0, 0, 0)));
  Test({LINENUM}54732, 'GetRGB("black")', ASORGB(TRGB.Create(0, 0, 0)));
  Test({LINENUM}54733, 'GetRGB(w)', ASORGB(TRGB.Create(1, 1, 1)));
  Test({LINENUM}54734, 'GetRGB("white")', ASORGB(TRGB.Create(1, 1, 1)));
  Test({LINENUM}54735, 'GetRGB("red")', ASORGB(TRGB.Create(1, 0, 0)));
  Test({LINENUM}54736, 'GetRGB(r)', ASORGB(TRGB.Create(1, 0, 0)));
  Test({LINENUM}54737, 'GetRGB(g)', ASORGB(TRGB.Create(0, 1, 0)));
  Test({LINENUM}54738, 'GetRGB(b)', ASORGB(TRGB.Create(0, 0, 1)));
  Test({LINENUM}54739, 'GetRGB(y)', ASORGB(TRGB.Create(1, 1, 0)));
  Test({LINENUM}54740, 'GetRGB(x)', ASORGB(TRGB.Create(0.2, 0.4, 0.6)));

  Test({LINENUM}54742, 'type(GetRGB(r))', 'structure of type "RGB"');

  Test({LINENUM}54744, 'GetHSV(black)', ASOHSV(THSV.Create(0, 0, 0)));
  Test({LINENUM}54745, 'GetHSV("black")', ASOHSV(THSV.Create(0, 0, 0)));
  Test({LINENUM}54746, 'GetHSV(w)', ASOHSV(THSV.Create(0, 0, 1)));
  Test({LINENUM}54747, 'GetHSV("white")', ASOHSV(THSV.Create(0, 0, 1)));
  Test({LINENUM}54748, 'GetHSV(r)', ASOHSV(THSV.Create(0, 1, 1)));
  Test({LINENUM}54749, 'GetHSV("red")', ASOHSV(THSV.Create(0, 1, 1)));
  Test({LINENUM}54750, 'GetHSV(g)', ASOHSV(THSV.Create(120, 1, 1)));
  Test({LINENUM}54751, 'GetHSV(b)', ASOHSV(THSV.Create(240, 1, 1)));
  Test({LINENUM}54752, 'GetHSV(y)', ASOHSV(THSV.Create(60, 1, 1)));
  Test({LINENUM}54753, 'GetHSV(x)', ASOHSV(THSV.Create(210, 2/3, 0.6)));

  Test({LINENUM}54755, 'type(GetHSV(r))', 'structure of type "HSV"');

  Test({LINENUM}54757, 'GetHSL(black)', ASOHSL(THSL.Create(0, 0, 0)));
  Test({LINENUM}54758, 'GetHSL("black")', ASOHSL(THSL.Create(0, 0, 0)));
  Test({LINENUM}54759, 'GetHSL(w)', ASOHSL(THSL.Create(0, 0, 1)));
  Test({LINENUM}54760, 'GetHSL("white")', ASOHSL(THSL.Create(0, 0, 1)));
  Test({LINENUM}54761, 'GetHSL(r)', ASOHSL(THSL.Create(0, 1, 0.5)));
  Test({LINENUM}54762, 'GetHSL("red")', ASOHSL(THSL.Create(0, 1, 0.5)));
  Test({LINENUM}54763, 'GetHSL(g)', ASOHSL(THSL.Create(120, 1, 0.5)));
  Test({LINENUM}54764, 'GetHSL(b)', ASOHSL(THSL.Create(240, 1, 0.5)));
  Test({LINENUM}54765, 'GetHSL(y)', ASOHSL(THSL.Create(60, 1, 0.5)));
  Eps; Test({LINENUM}54766, 'GetHSL(x)', ASOHSL(THSL.Create(210, 0.50, 0.4)));

  Test({LINENUM}54768, 'type(GetHSL(r))', 'structure of type "HSL"');

  Test({LINENUM}54770, 'black ≔ hsv(0, 0, 0); w ≔ hsv(0, 0, 1); r ≔ hsv(0, 1, 1); g ≔ hsv(120, 1, 1); b ≔ hsv(240, 1, 1); y ≔ hsv(60, 1, 1); x ≔ hsv(210, 2/3, 0.6);', null);

  Test({LINENUM}54772, 'GetRGB(black)', ASORGB(TRGB.Create(0, 0, 0)));
  Test({LINENUM}54773, 'GetRGB(w)', ASORGB(TRGB.Create(1, 1, 1)));
  Test({LINENUM}54774, 'GetRGB(r)', ASORGB(TRGB.Create(1, 0, 0)));
  Test({LINENUM}54775, 'GetRGB(g)', ASORGB(TRGB.Create(0, 1, 0)));
  Test({LINENUM}54776, 'GetRGB(b)', ASORGB(TRGB.Create(0, 0, 1)));
  Test({LINENUM}54777, 'GetRGB(y)', ASORGB(TRGB.Create(1, 1, 0)));
  Test({LINENUM}54778, 'GetRGB(x)', ASORGB(TRGB.Create(0.2, 0.4, 0.6)));

  Test({LINENUM}54780, 'GetHSV(black)', ASOHSV(THSV.Create(0, 0, 0)));
  Test({LINENUM}54781, 'GetHSV(w)', ASOHSV(THSV.Create(0, 0, 1)));
  Test({LINENUM}54782, 'GetHSV(r)', ASOHSV(THSV.Create(0, 1, 1)));
  Test({LINENUM}54783, 'GetHSV(g)', ASOHSV(THSV.Create(120, 1, 1)));
  Test({LINENUM}54784, 'GetHSV(b)', ASOHSV(THSV.Create(240, 1, 1)));
  Test({LINENUM}54785, 'GetHSV(y)', ASOHSV(THSV.Create(60, 1, 1)));
  Test({LINENUM}54786, 'GetHSV(x)', ASOHSV(THSV.Create(210, 2/3, 0.6)));

  Test({LINENUM}54788, 'GetHSL(black)', ASOHSL(THSL.Create(0, 0, 0)));
  Test({LINENUM}54789, 'GetHSL(w)', ASOHSL(THSL.Create(0, 0, 1)));
  Test({LINENUM}54790, 'GetHSL(r)', ASOHSL(THSL.Create(0, 1, 0.5)));
  Test({LINENUM}54791, 'GetHSL(g)', ASOHSL(THSL.Create(120, 1, 0.5)));
  Test({LINENUM}54792, 'GetHSL(b)', ASOHSL(THSL.Create(240, 1, 0.5)));
  Test({LINENUM}54793, 'GetHSL(y)', ASOHSL(THSL.Create(60, 1, 0.5)));
  Eps; Test({LINENUM}54794, 'GetHSL(x)', ASOHSL(THSL.Create(210, 0.50, 0.4)));

  Test({LINENUM}54796, 'black ≔ hsl(0, 0, 0); w ≔ hsl(0, 0, 1); r ≔ hsl(0, 1, 0.5); g ≔ hsl(120, 1, 0.5); b ≔ hsl(240, 1, 0.5); y ≔ hsl(60, 1, 0.5); x ≔ hsl(210, 0.5, 0.4);', null);

  Eps(1E-13); Test({LINENUM}54798, 'GetRGB(black)', ASORGB(TRGB.Create(0, 0, 0)));
  Eps(1E-13); Test({LINENUM}54799, 'GetRGB(w)', ASORGB(TRGB.Create(1, 1, 1)));
  Eps(1E-13); Test({LINENUM}54800, 'GetRGB(r)', ASORGB(TRGB.Create(1, 0, 0)));
  Eps(1E-13); Test({LINENUM}54801, 'GetRGB(g)', ASORGB(TRGB.Create(0, 1, 0)));
  Eps(1E-13); Test({LINENUM}54802, 'GetRGB(b)', ASORGB(TRGB.Create(0, 0, 1)));
  Eps(1E-13); Test({LINENUM}54803, 'GetRGB(y)', ASORGB(TRGB.Create(1, 1, 0)));
  Eps(1E-13); Test({LINENUM}54804, 'GetRGB(x)', ASORGB(TRGB.Create(0.2, 0.4, 0.6)));

  Eps(1E-13); Test({LINENUM}54806, 'GetHSV(black)', ASOHSV(THSV.Create(0, 0, 0)));
  Eps(1E-13); Test({LINENUM}54807, 'GetHSV(w)', ASOHSV(THSV.Create(0, 0, 1)));
  Eps(1E-13); Test({LINENUM}54808, 'GetHSV(r)', ASOHSV(THSV.Create(0, 1, 1)));
  Eps(1E-13); Test({LINENUM}54809, 'GetHSV(g)', ASOHSV(THSV.Create(120, 1, 1)));
  Eps(1E-13); Test({LINENUM}54810, 'GetHSV(b)', ASOHSV(THSV.Create(240, 1, 1)));
  Eps(1E-13); Test({LINENUM}54811, 'GetHSV(y)', ASOHSV(THSV.Create(60, 1, 1)));
  Eps(1E-13); Test({LINENUM}54812, 'GetHSV(x)', ASOHSV(THSV.Create(210, 2/3, 0.6)));

  Eps(1E-13); Test({LINENUM}54814, 'GetHSL(black)', ASOHSL(THSL.Create(0, 0, 0)));
  Eps(1E-13); Test({LINENUM}54815, 'GetHSL(w)', ASOHSL(THSL.Create(0, 0, 1)));
  Eps(1E-13); Test({LINENUM}54816, 'GetHSL(r)', ASOHSL(THSL.Create(0, 1, 0.5)));
  Eps(1E-13); Test({LINENUM}54817, 'GetHSL(g)', ASOHSL(THSL.Create(120, 1, 0.5)));
  Eps(1E-13); Test({LINENUM}54818, 'GetHSL(b)', ASOHSL(THSL.Create(240, 1, 0.5)));
  Eps(1E-13); Test({LINENUM}54819, 'GetHSL(y)', ASOHSL(THSL.Create(60, 1, 0.5)));
  Eps(1E-13); Test({LINENUM}54820, 'GetHSL(x)', ASOHSL(THSL.Create(210, 0.50, 0.4)));

  Test({LINENUM}54822, 'color(GetRGB(rgb(0, 0, 0)))', TRGB.Create(0, 0, 0));
  Test({LINENUM}54823, 'color(GetHSV(rgb(0, 0, 0)))', TRGB.Create(0, 0, 0));
  Test({LINENUM}54824, 'color(GetHSL(rgb(0, 0, 0)))', TRGB.Create(0, 0, 0));
  Test({LINENUM}54825, 'color(16#000000)', TRGB.Create(0, 0, 0));
  Test({LINENUM}54826, 'color("black")', TRGB.Create(0, 0, 0));
  Test({LINENUM}54827, 'color(color("black"))', TRGB.Create(0, 0, 0));
  Test({LINENUM}54828, 'HexColorCode(color("black"))', '#000000');

  Test({LINENUM}54830, 'color(GetRGB(rgb(1, 0, 0)))', TRGB.Create(1, 0, 0));
  Test({LINENUM}54831, 'color(GetHSV(rgb(1, 0, 0)))', TRGB.Create(1, 0, 0));
  Test({LINENUM}54832, 'color(GetHSL(rgb(1, 0, 0)))', TRGB.Create(1, 0, 0));
  Test({LINENUM}54833, 'color(16#0000FF)', TRGB.Create(0, 0, 1));
  Test({LINENUM}54834, 'color("red")', TRGB.Create(1, 0, 0));
  Test({LINENUM}54835, 'color(color("red"))', TRGB.Create(1, 0, 0));
  Test({LINENUM}54836, 'HexColorCode(color("red"))', '#FF0000');

  Test({LINENUM}54838, 'color(GetRGB(rgb(1, 1, 0)))', TRGB.Create(1, 1, 0));
  Test({LINENUM}54839, 'color(GetHSV(rgb(1, 1, 0)))', TRGB.Create(1, 1, 0));
  Test({LINENUM}54840, 'color(GetHSL(rgb(1, 1, 0)))', TRGB.Create(1, 1, 0));
  Test({LINENUM}54841, 'color(16#00FFFF)', TRGB.Create(0, 1, 1));
  Test({LINENUM}54842, 'color("yellow")', TRGB.Create(1, 1, 0));
  Test({LINENUM}54843, 'color(color("yellow"))', TRGB.Create(1, 1, 0));
  Test({LINENUM}54844, 'HexColorCode(color("yellow"))', '#FFFF00');

  Test({LINENUM}54846, 'color(GetRGB(rgb(1, 1, 1)))', TRGB.Create(1, 1, 1));
  Test({LINENUM}54847, 'color(GetHSV(rgb(1, 1, 1)))', TRGB.Create(1, 1, 1));
  Test({LINENUM}54848, 'color(GetHSL(rgb(1, 1, 1)))', TRGB.Create(1, 1, 1));
  Test({LINENUM}54849, 'color(16#FFFFFF)', TRGB.Create(1, 1, 1));
  Test({LINENUM}54850, 'color("white")', TRGB.Create(1, 1, 1));
  Test({LINENUM}54851, 'color(color("white"))', TRGB.Create(1, 1, 1));
  Test({LINENUM}54852, 'HexColorCode(color("white"))', '#FFFFFF');

  Test({LINENUM}54854, 'color("white")', TRGB.Create(1, 1, 1));
  Test({LINENUM}54855, 'color("#FFFFFF")', TRGB.Create(1, 1, 1));
  Test({LINENUM}54856, 'color("black")', TRGB.Create(0, 0, 0));
  Test({LINENUM}54857, 'color("#000000")', TRGB.Create(0, 0, 0));
  Test({LINENUM}54858, 'color("red")', TRGB.Create(1, 0, 0));
  Test({LINENUM}54859, 'color("#FF0000")', TRGB.Create(1, 0, 0));
  Test({LINENUM}54860, 'color("lime")', TRGB.Create(0, 1, 0));
  Test({LINENUM}54861, 'color("#00FF00")', TRGB.Create(0, 1, 0));
  Test({LINENUM}54862, 'color("green")', TRGB.Create(0, 128/255, 0));
  Test({LINENUM}54863, 'color("#008000")', TRGB.Create(0, 128/255, 0));
  Test({LINENUM}54864, 'color("blue")', TRGB.Create(0, 0, 1));
  Test({LINENUM}54865, 'color("#0000FF")', TRGB.Create(0, 0, 1));
  Test({LINENUM}54866, 'color("navy")', TRGB.Create(0, 0, 128/255));
  Test({LINENUM}54867, 'color("#000080")', TRGB.Create(0, 0, 128/255));
  Test({LINENUM}54868, 'color("yellow")', TRGB.Create(1, 1, 0));
  Test({LINENUM}54869, 'color("#FFFF00")', TRGB.Create(1, 1, 0));
  Test({LINENUM}54870, 'color("teal")', TRGB.Create(0, 128/255, 128/255));
  Test({LINENUM}54871, 'color("#008080")', TRGB.Create(0, 128/255, 128/255));
  Test({LINENUM}54872, 'color("grey")', TRGB.Create(128/255, 128/255, 128/255));
  Test({LINENUM}54873, 'color("#808080")', TRGB.Create(128/255, 128/255, 128/255));

  Test({LINENUM}54875, 'InvertColor(rgb(0, 0, 0))', TRGB.Create(1, 1, 1));
  Test({LINENUM}54876, 'InvertColor("black")', TRGB.Create(1, 1, 1));
  Test({LINENUM}54877, 'InvertColor(rgb(1, 1, 1))', TRGB.Create(0, 0, 0));
  Test({LINENUM}54878, 'InvertColor("white")', TRGB.Create(0, 0, 0));
  Test({LINENUM}54879, 'InvertColor(rgb(1, 0, 0))', TRGB.Create(0, 1, 1));
  Test({LINENUM}54880, 'InvertColor("red")', TRGB.Create(0, 1, 1));
  Test({LINENUM}54881, 'InvertColor(rgb(0, 1, 0))', TRGB.Create(1, 0, 1));
  Test({LINENUM}54882, 'InvertColor(rgb(0, 1, 1))', TRGB.Create(1, 0, 0));
  Test({LINENUM}54883, 'InvertColor(rgb(0.5, 0.5, 0.5))', TRGB.Create(0.5, 0.5, 0.5));
  Test({LINENUM}54884, 'InvertColor(rgb(0.4, 0.123, 0.72))', TRGB.Create(0.6, 0.877, 0.28));
  Test({LINENUM}54885, 'InvertColor(rgb(0.3421, 0.7123, 0.1272))', TRGB.Create(0.6579, 0.2877, 0.8728));

  Test({LINENUM}54887, 'InvertValue(hsv(0, 1, 1))', THSV.Create(0, 1, 0));
  Test({LINENUM}54888, 'InvertValue("red")', THSV.Create(0, 1, 0));
  Test({LINENUM}54889, 'InvertValue(hsv(0, 1, 0))', THSV.Create(0, 0, 1));
  Test({LINENUM}54890, 'InvertValue(hsv(0, 1, 0.5))', THSV.Create(0, 1, 0.5));
  Test({LINENUM}54891, 'InvertValue(hsv(0, 1, 0.8))', THSV.Create(0, 1, 0.2));
  Test({LINENUM}54892, 'InvertValue(hsv(120, 0.7, 0.3))', THSV.Create(120, 0.7, 0.7));
  Test({LINENUM}54893, 'InvertValue(hsv(120, 0.7, 0.4321))', THSV.Create(120, 0.7, 0.5679));
  Test({LINENUM}54894, 'InvertValue(hsv(240, 0.5, 0.1))', THSV.Create(240, 0.5, 0.9));
  Test({LINENUM}54895, 'InvertValue(hsv(60, 0.2, 0.99))', THSV.Create(60, 0.2, 0.01));
  Test({LINENUM}54896, 'InvertValue(hsv(0, 0, 0.2))', THSV.Create(0, 0, 0.8));
  Test({LINENUM}54897, 'InvertValue(hsv(0, 0, 0))', THSV.Create(0, 0, 1));
  Test({LINENUM}54898, 'InvertValue(hsv(0, 0, 1))', THSV.Create(0, 0, 0));

  Test({LINENUM}54900, 'InvertLightness(hsl(0, 0, 0))', THSL.Create(0, 0, 1));
  Test({LINENUM}54901, 'InvertLightness("black")', THSL.Create(0, 0, 1));
  Test({LINENUM}54902, 'InvertLightness(hsl(0, 0, 1))', THSL.Create(0, 0, 0));
  Test({LINENUM}54903, 'InvertLightness("white")', THSL.Create(0, 0, 0));
  Test({LINENUM}54904, 'InvertLightness(hsl(0, 1, 0.5))', THSL.Create(0, 1, 0.5));
  Test({LINENUM}54905, 'InvertLightness("red")', THSL.Create(0, 1, 0.5));
  Test({LINENUM}54906, 'InvertLightness(hsl(0, 1, 0.2))', THSL.Create(0, 1, 0.8));
  Test({LINENUM}54907, 'InvertLightness(hsl(123, 1, 0.685))', THSL.Create(123, 1, 0.315));
  Test({LINENUM}54908, 'InvertLightness(hsl(200, 0.7, 0.352))', THSL.Create(200, 0.7, 0.648));

  Test({LINENUM}54910, 'darken(rgb(0.8, 0.4, 1))', TRGB.Create(0.4, 0.2, 0.5));
  Test({LINENUM}54911, 'darken(rgb(0.5, 0.7, 0))', TRGB.Create(0.25, 0.35, 0.0));
  Test({LINENUM}54912, 'darken(rgb(1, 1, 1))', TRGB.Create(0.5, 0.5, 0.5));
  Test({LINENUM}54913, 'darken("white")', TRGB.Create(0.5, 0.5, 0.5));
  Test({LINENUM}54914, 'darken(rgb(0, 0, 0))', TRGB.Create(0.0, 0.0, 0.0));
  Test({LINENUM}54915, 'darken("black")', TRGB.Create(0.0, 0.0, 0.0));

  Test({LINENUM}54917, 'whiten(rgb(0.5, 0.8, 0.2))', TRGB.Create(0.75, 0.9, 0.6));
  Test({LINENUM}54918, 'whiten(rgb(0.1, 0.9, 0.4))', TRGB.Create(0.55, 0.95, 0.7));
  Test({LINENUM}54919, 'whiten(rgb(0.0, 0.0, 1.0))', TRGB.Create(0.5, 0.5, 1.0));
  Test({LINENUM}54920, 'whiten(rgb(1.0, 1.0, 1.0))', TRGB.Create(1.0, 1.0, 1.0));
  Test({LINENUM}54921, 'whiten("white")', TRGB.Create(1.0, 1.0, 1.0));
  Test({LINENUM}54922, 'whiten(rgb(0.0, 0.0, 0.0))', TRGB.Create(0.5, 0.5, 0.5));
  Test({LINENUM}54923, 'whiten("black")', TRGB.Create(0.5, 0.5, 0.5));

  Test({LINENUM}54925, 'FadeToColor(rgb(0.3, 0.5, 0.1), rgb(0.6, 0.2, 0.1), 0.0)', TRGB.Create(0.3, 0.5, 0.1));
  Test({LINENUM}54926, 'FadeToColor(rgb(0.3, 0.5, 0.1), rgb(0.6, 0.2, 0.1), 0.5)', TRGB.Create(0.45, 0.35, 0.1));
  Test({LINENUM}54927, 'FadeToColor(rgb(0.3, 0.5, 0.1), rgb(0.6, 0.2, 0.1), 1.0)', TRGB.Create(0.6, 0.2, 0.1));

  Test({LINENUM}54929, 'FixHue(hsv(120, 0.3, 0.7), 200)', THSV.Create(200, 0.3, 0.7));
  Test({LINENUM}54930, 'FixHue(hsv(240, 0.5, 0.1), 60)', THSV.Create(60, 0.5, 0.1));
  Test({LINENUM}54931, 'FixHue(hsv(0, 0.72, 0.66), 300)', THSV.Create(300, 0.72, 0.66));

  Test({LINENUM}54933, 'ToMonochromatic(hsv(120, 0.3, 0.7), 200)', THSV.Create(200, 1, 0.7));
  Test({LINENUM}54934, 'ToMonochromatic(hsv(240, 0.5, 0.1), 60)', THSV.Create(60, 1, 0.1));
  Test({LINENUM}54935, 'ToMonochromatic(hsv(0, 0.72, 0.66), 300)', THSV.Create(300, 1, 0.66));

  Test({LINENUM}54937, 'ShiftHue(hsv(120, 0.3, 0.7), 200)', THSV.Create(320, 0.3, 0.7));
  Test({LINENUM}54938, 'ShiftHue(hsv(240, 0.5, 0.1), 60)', THSV.Create(300, 0.5, 0.1));
  Test({LINENUM}54939, 'ShiftHue(hsv(240, 0.5, 0.1), 120)', THSV.Create(0, 0.5, 0.1));
  Test({LINENUM}54940, 'ShiftHue(hsv(240, 0.5, 0.1), 180)', THSV.Create(60, 0.5, 0.1));
  Test({LINENUM}54941, 'ShiftHue(hsv(0, 0.72, 0.66), 300)', THSV.Create(300, 0.72, 0.66));

  Test({LINENUM}54943, 'ToGreyscale(hsv(120, 0.3, 0.7))', THSV.Create(120, 0.0, 0.7));
  Test({LINENUM}54944, 'ToGreyscale(hsv(240, 0.5, 0.1))', THSV.Create(240, 0.0, 0.1));
  Test({LINENUM}54945, 'ToGreyscale(hsv(0, 0.72, 0.66))', THSV.Create(0, 0.0, 0.66));
  Test({LINENUM}54946, 'ToGreyscale(hsv(0, 0.0, 0.66))', THSV.Create(0, 0.0, 0.66));
  Test({LINENUM}54947, 'ToGreyscale(hsv(0, 0.0, 0.0))', THSV.Create(0, 0.0, 0.0));
  Test({LINENUM}54948, 'ToGreyscale("black")', THSV.Create(0, 0.0, 0.0));
  Test({LINENUM}54949, 'ToGreyscale(hsv(0, 0.0, 1.0))', THSV.Create(0, 0.0, 1.0));

  Test({LINENUM}54951, 'IsDark(rgb(0, 0, 0))', True);
  Test({LINENUM}54952, 'IsDark("black")', True);
  Test({LINENUM}54953, 'IsDark(rgb(0.2, 0.1, 0.4))', True);
  Test({LINENUM}54954, 'IsDark(rgb(0, 0.3, 0.5))', True);
  Test({LINENUM}54955, 'IsDark(rgb(0.3, 0.4, 0.2))', True);

  Test({LINENUM}54957, 'IsDark(rgb(1, 1, 1))', False);
  Test({LINENUM}54958, 'IsDark("white")', False);
  Test({LINENUM}54959, 'IsDark(rgb(0.8, 1, 1))', False);
  Test({LINENUM}54960, 'IsDark(rgb(0.8, 0.7, 0.7))', False);
  Test({LINENUM}54961, 'IsDark(rgb(0.6, 0.8, 0.7))', False);
  Test({LINENUM}54962, 'IsDark(rgb(0, 1, 1))', False);
  Test({LINENUM}54963, 'IsDark(rgb(1, 1, 0))', False);
  Test({LINENUM}54964, 'IsDark(rgb(1, 1, 0.8))', False);
  Test({LINENUM}54965, 'IsDark(rgb(0.7, 0.5, 1))', False);

  Test({LINENUM}54967, '∀(NamedColors(), c ↦ type(c) = "structure of type ""NamedColor""")', True);
  Test({LINENUM}54968, '∀(NamedColors(), c ↦ color(c.name) = c.color)', True);
  Test({LINENUM}54969, '#NamedColors() ≥ 140', True);

  Test({LINENUM}54971, 'N, c ≔ 10000, ZeroVector(3); for(i, 1, N, (c ≔ c + vector(GetRGB(RandomColor())))); ∀(c/N, x ↦ 0.48 < x ∧ x < 0.52)', True);
  Test({LINENUM}54972, 'delete(N); delete(c)', success);


  //
  // Structure functions
  //

  Test({LINENUM}54979, 'S ≔ struct("name": "Albus Dumbledore", "age": 116)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('age', ASOInt(116))
      ]
    )
  );

  Test({LINENUM}54988, 'AddMember(S, "role", "headmaster")',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('age', ASOInt(116)),
        sm('role', ASO('headmaster'))
      ]
    )
  );

  Test({LINENUM}54998, 'AddMember(S, "FavouriteColour", color("darkgoldenrod"))',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('age', ASOInt(116)),
        sm('FavouriteColour', ASOColor(NamedColorsDict['darkgoldenrod']))
      ]
    )
  );

  Test({LINENUM}55008, 'AddMember(S, "FavouriteColour2", color("goldenrod"))',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('age', ASOInt(116)),
        sm('FavouriteColour2', ASOColor(NamedColorsDict['goldenrod']))
      ]
    )
  );

  Test({LINENUM}55018, 'AddMember(S, 1024, color("darkgoldenrod"))',
    failure,
    'An object of type string was expected as argument 2, but an object of type integer was given.'
  );

  Test({LINENUM}55023, 'AddMember(S, "FavouriteColour", color("darkgoldenrod"), color("goldenrod"))',
    failure,
    'Too many arguments.'
  );

  Test({LINENUM}55028, 'AddMember(S)',
    failure,
    'Too few arguments. A required argument of type string is missing.'
  );

  Test({LINENUM}55033, 'AddMember(S, "favourite colour", color("darkgoldenrod"))',
    failure,
    'Invalid member name: "favourite colour".'
  );

  Test({LINENUM}55038, 'AddMember(S, "", color("darkgoldenrod"))',
    failure,
    'Invalid member name: "".'
  );

  Test({LINENUM}55043, 'AddMember(S, " ", color("darkgoldenrod"))',
    failure,
    'Invalid member name: " ".'
  );

  Test({LINENUM}55048, 'AddMember(S, " FavouriteColour", color("darkgoldenrod"))',
    failure,
    'Invalid member name: " FavouriteColour".'
  );

  Test({LINENUM}55053, 'AddMember(S, """FavouriteColour""", color("darkgoldenrod"))',
    failure,
    'Invalid member name: ""FavouriteColour"".'
  );

  Test({LINENUM}55058, 'AddMember(S, "+", color("darkgoldenrod"))',
    failure,
    'Invalid member name: "+".'
  );

  Test({LINENUM}55063, 'AddMember(S, "+1024", color("darkgoldenrod"))',
    failure,
    'Invalid member name: "+1024".'
  );

  Test({LINENUM}55068, 'AddMember(S, "1024", color("darkgoldenrod"))',
    failure,
    'Invalid member name: "1024".'
  );

  Test({LINENUM}55073, 'AddMember(S, "age", 117)',
    failure,
    'Structure already contains a member named "age".'
  );

  Test({LINENUM}55078, 'AddMember("S", "age", 117)',
    failure,
    'An object of type structure was expected as argument 1, but an object of type string was given.'
  );

  Test({LINENUM}55083, 'RemoveMember(S, "age")',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore'))
      ]
    )
  );

  Test({LINENUM}55091, 'RemoveMember(S, "name")',
    TAlgosimStructure.CreateWithValue(
      [
        sm('age', ASOInt(116))
      ]
    )
  );

  Test({LINENUM}55099, 'RemoveMember(S, 2)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore'))
      ]
    )
  );

  Test({LINENUM}55107, 'RemoveMember(S, 1)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('age', ASOInt(116))
      ]
    )
  );

  Test({LINENUM}55115, 'RemoveMember(S, -1)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore'))
      ]
    )
  );

  Test({LINENUM}55123, 'RemoveMember(S, -2)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('age', ASOInt(116))
      ]
    )
  );

  Test({LINENUM}55131, 'RemoveMember(RemoveMember(S, 1), 1)',
    TAlgosimStructure.CreateWithValue(
      [
      ]
    )
  );

  Test({LINENUM}55138, 'RemoveMember(S, "FavouriteColour")',
    failure,
    'There is no member named "FavouriteColour".'
  );

  Test({LINENUM}55143, 'RemoveMember(S, 3)',
    failure,
    'Index 3 out of bounds.'
  );

  Test({LINENUM}55148, 'RemoveMember(S, -3)',
    failure,
    'Index -3 out of bounds.'
  );

  Test({LINENUM}55153, 'RemoveMember(S, 0)',
    failure,
    'Index 0 out of bounds.'
  );

  Test({LINENUM}55158, 'RemoveMember(S, true)',
    failure,
    'Invalid function arguments.'
  );

  Test({LINENUM}55163, 'RemoveMember(S)',
    failure,
    'Too few arguments.'
  );

  Test({LINENUM}55168, 'SetValue(S, "name", "Albus Percival Wulfric Brian Dumbledore")',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Percival Wulfric Brian Dumbledore')),
        sm('age', ASOInt(116))
      ]
    )
  );

  Test({LINENUM}55177, 'SetValue(S, "age", 117)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('age', ASOInt(117))
      ]
    )
  );

  Test({LINENUM}55186, 'SetValue(S, 1, "Albus Percival Wulfric Brian Dumbledore")',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Percival Wulfric Brian Dumbledore')),
        sm('age', ASOInt(116))
      ]
    )
  );

  Test({LINENUM}55195, 'SetValue(S, 2, 117)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('age', ASOInt(117))
      ]
    )
  );

  Test({LINENUM}55204, 'SetValue(S, -2, "Albus Percival Wulfric Brian Dumbledore")',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Percival Wulfric Brian Dumbledore')),
        sm('age', ASOInt(116))
      ]
    )
  );

  Test({LINENUM}55213, 'SetValue(S, -1, 117)',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('age', ASOInt(117))
      ]
    )
  );

  Test({LINENUM}55222, 'SetValue(S, "FavouriteColour", color("darkgoldenrod"))',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('age', ASOInt(116)),
        sm('FavouriteColour', ASOColor(NamedColorsDict['darkgoldenrod']))
      ]
    )
  );

  Test({LINENUM}55232, 'SetValue(S, "", color("gold"))',
    failure,
    'Invalid member name: "".'
  );

  Test({LINENUM}55237, 'SetValue(S, 3, color("gold"))',
    failure,
    'Index 3 out of bounds.'
  );

  Test({LINENUM}55242, 'SetValue(S, -3, color("gold"))',
    failure,
    'Index -3 out of bounds.'
  );

  Test({LINENUM}55247, 'SetValue(S, 0, color("gold"))',
    failure,
    'Index 0 out of bounds.'
  );

  Test({LINENUM}55252, 'SetValue(S, true, color("gold"))',
    failure,
    'Invalid function arguments.'
  );

  Test({LINENUM}55257, 'SetValue(S, "name")',
    failure,
    'Too few arguments.'
  );

  Test({LINENUM}55262, 'SetValue(S)',
    failure,
    'Too few arguments.'
  );

  Test({LINENUM}55267, 'SetValue()',
    failure,
    'Too few arguments. A required argument of type structure is missing.'
  );

  Test({LINENUM}55272, 'RenameMember(S, "name", "FullName")',
    TAlgosimStructure.CreateWithValue(
      [
        sm('FullName', ASO('Albus Dumbledore')),
        sm('age', ASOInt(116))
      ]
    )
  );

  Test({LINENUM}55281, 'RenameMember(S, "age", "Age")',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('Age', ASOInt(116))
      ]
    )
  );

  Test({LINENUM}55290, 'RenameMember(S, "name", "name")',
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('Albus Dumbledore')),
        sm('age', ASOInt(116))
      ]
    )
  );

  Test({LINENUM}55299, 'RenameMember(S, "name", "full name")',
    failure,
    'Invalid member name: "full name".'
  );

  Test({LINENUM}55304, 'RenameMember(S, "name", "")',
    failure,
    'Invalid member name: "".'
  );

  Test({LINENUM}55309, 'RenameMember(S, "name", "+")',
    failure,
    'Invalid member name: "+".'
  );

  Test({LINENUM}55314, 'RenameMember(S, "name", " FullName")',
    failure,
    'Invalid member name: " FullName".'
  );

  Test({LINENUM}55319, 'RenameMember(S, "name", "+name")',
    failure,
    'Invalid member name: "+name".'
  );

  Test({LINENUM}55324, 'RenameMember(S, "name", """name""")',
    failure,
    'Invalid member name: ""name"".'
  );

  Test({LINENUM}55329, 'RenameMember(S, "FirstName", "FullName")',
    failure,
    'There is no member named "FirstName".'
  );

  Test({LINENUM}55334, 'RenameMember(S, "", "FullName")',
    failure,
    'There is no member named "".'
  );

  Test({LINENUM}55339, 'RenameMember(S, "name", 123)',
    failure,
    'An object of type string was expected as argument 3, but an object of type integer was given.'
  );

  Test({LINENUM}55344, 'RenameMember(S, "name")',
    failure,
    'Too few arguments. A required argument of type string is missing.'
  );

  Test({LINENUM}55349, 'RenameMember(S)',
    failure,
    'Too few arguments. A required argument of type string is missing.'
  );

  Test({LINENUM}55354, 'RenameMember()',
    failure,
    'Too few arguments. A required argument of type structure is missing.'
  );

  Test({LINENUM}55359, 'RenameMember(123)',
    failure,
    'An object of type structure was expected as argument 1, but an object of type integer was given.'
  );

  Test({LINENUM}55364, 'HasMember(S, "name")', True);
  Test({LINENUM}55365, 'HasMember(S, "age")', True);
  Test({LINENUM}55366, 'HasMember(S, "sex")', False);
  Test({LINENUM}55367, 'HasMember(S, "role")', False);
  Test({LINENUM}55368, 'HasMember(S, "")', False);
  Test({LINENUM}55369, 'HasMember(S, " name")', False);
  Test({LINENUM}55370, 'HasMember(S, "FullName")', False);

  Test({LINENUM}55372, 'HasMember(struct("name": "Albus Dumbledore", "age": 116), "name")', True);
  Test({LINENUM}55373, 'HasMember(struct("name": "Albus Dumbledore", "age": 116), "age")', True);
  Test({LINENUM}55374, 'HasMember(struct("name": "Albus Dumbledore", "age": 116), "sex")', False);
  Test({LINENUM}55375, 'HasMember(struct("name": "Albus Dumbledore", "age": 116), "role")', False);
  Test({LINENUM}55376, 'HasMember(struct("name": "Albus Dumbledore", "age": 116), "")', False);
  Test({LINENUM}55377, 'HasMember(struct("name": "Albus Dumbledore", "age": 116), " name")', False);
  Test({LINENUM}55378, 'HasMember(struct("name": "Albus Dumbledore", "age": 116), "FullName")', False);

  Test({LINENUM}55380, 'HasMember(S, 2)', failure, 'An object of type string was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}55381, 'HasMember(true, "name")', failure, 'An object of type structure was expected as argument 1, but an object of type boolean was given.');
  Test({LINENUM}55382, 'HasMember(S)', failure, '2 argument(s) expected, but 1 given.');
  Test({LINENUM}55383, 'HasMember()', failure, '2 argument(s) expected, but 0 given.');

  Test({LINENUM}55385, 'IndexOfName(S, "name")', 1);
  Test({LINENUM}55386, 'IndexOfName(S, "age")', 2);
  Test({LINENUM}55387, 'IndexOfName(S, "sex")', 0);
  Test({LINENUM}55388, 'IndexOfName(S, "role")', 0);
  Test({LINENUM}55389, 'IndexOfName(S, "")', 0);
  Test({LINENUM}55390, 'IndexOfName(S, " name")', 0);
  Test({LINENUM}55391, 'IndexOfName(S, "FullName")', 0);

  Test({LINENUM}55393, 'IndexOfName(struct("name": "Albus Dumbledore", "age": 116), "name")', 1);
  Test({LINENUM}55394, 'IndexOfName(struct("name": "Albus Dumbledore", "age": 116), "age")', 2);
  Test({LINENUM}55395, 'IndexOfName(struct("name": "Albus Dumbledore", "age": 116), "sex")', 0);
  Test({LINENUM}55396, 'IndexOfName(struct("name": "Albus Dumbledore", "age": 116), "role")', 0);
  Test({LINENUM}55397, 'IndexOfName(struct("name": "Albus Dumbledore", "age": 116), "")', 0);
  Test({LINENUM}55398, 'IndexOfName(struct("name": "Albus Dumbledore", "age": 116), " name")', 0);
  Test({LINENUM}55399, 'IndexOfName(struct("name": "Albus Dumbledore", "age": 116), "FullName")', 0);

  Test({LINENUM}55401, 'IndexOfName(S, 2)', failure, 'An object of type string was expected as argument 2, but an object of type integer was given.');
  Test({LINENUM}55402, 'IndexOfName(true, "name")', failure, 'An object of type structure was expected as argument 1, but an object of type boolean was given.');
  Test({LINENUM}55403, 'IndexOfName(S)', failure, '2 argument(s) expected, but 1 given.');
  Test({LINENUM}55404, 'IndexOfName()', failure, '2 argument(s) expected, but 0 given.');

  for _st := Low(TStructType) to High(TStructType) do
  begin
    Test({LINENUM}55408, Format('type(GetStructType("%s"))', [_st.Name]), 'structure type');
    Test({LINENUM}55409, Format('GetStructType("%s")', [_st.Name]), _st.CreateTypeObject);
  end;

  Test({LINENUM}55412, 'GetStructType("NargleData")', failure, 'Unknown structure type "NargleData".');

  with
    TAlgosimStructure.CreateWithValue(
        [
          sm('red', ASO(1)),
          sm('green', ASO(0)),
          sm('blue', ASO(0))
        ]
      )
  do
    try
      Test({LINENUM}55424, 'GetStructType("RGB")',
        ToStructType('RGB')
      )
    finally
      Free;
    end;

  Test({LINENUM}55431, 'rgbst ≔ GetStructType("RGB"); hsvst ≔ GetStructType("HSV");', null);
  Test({LINENUM}55432, 'type(rgbst)', 'structure type');
  Test({LINENUM}55433, 'type(hsvst)', 'structure type');
  Test({LINENUM}55434, 'rgbst = rgbst', True);
  Test({LINENUM}55435, 'hsvst = hsvst', True);
  Test({LINENUM}55436, 'rgbst = hsvst', False);
  Test({LINENUM}55437, 'rgbst = GetRGB(rgb(1, 0, 0))', True);
  Test({LINENUM}55438, 'type(GetRGB(rgb(1, 0, 0)))', 'structure of type "RGB"');

  Test({LINENUM}55440, 'person ≔ struct("name": "unnamed", "age": 0)',
    TAlgosimStructure.CreateWithValue(
        [
          sm('name', ASO('unnamed')),
          sm('age', ASOInt(0))
        ]
      )
    );

  Test({LINENUM}55449, 'type(person)', 'structure');

  with
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('unnamed')),
        sm('age', ASOInt(0))
      ]
    )
  do
    try
      Test({LINENUM}55460, 'pst ≔ ToStructType(person, "person")',
        ToStructType('person')
      );
    finally
      Free;
    end;

  Test({LINENUM}55467, 'new(pst)',
    TAlgosimTypedStructure.CreateWithValue(
      [
        sm('name', ASO('unnamed')),
        sm('age', ASOInt(0))
      ]
    )
  );

  Test({LINENUM}55476, 'type(new(pst))', 'structure of type "person"');

  Test({LINENUM}55478, 'new(pst, "name": "Severus Snape")',
    TAlgosimTypedStructure.CreateWithValue(
      [
        sm('name', ASO('Severus Snape')),
        sm('age', ASOInt(0))
      ]
    )
  );

  Test({LINENUM}55487, 'new(pst, "age": 50)',
    TAlgosimTypedStructure.CreateWithValue(
      [
        sm('name', ASO('unnamed')),
        sm('age', ASOInt(50))
      ]
    )
  );

  Test({LINENUM}55496, 'new(pst, "name": "Severus Snape", "age": 50)',
    TAlgosimTypedStructure.CreateWithValue(
      [
        sm('name', ASO('Severus Snape')),
        sm('age', ASOInt(50))
      ]
    )
  );

  Test({LINENUM}55505, 'new(pst, "name": "Severus Snape", "age": 50, "sex": "male")',
    failure,
    'Structure type "person" does not contain a member named "sex".'
  );

  Test({LINENUM}55510, 'new(person, "name": "Severus Snape", "age": 50)',
    failure,
    'An object of type structure type was expected as argument 1, but an object of type structure was given.'
  );

  Test({LINENUM}55515, 'new(rgbst, "red": 0.4, "green": 0.3, "blue": 0.7)',
    TAlgosimTypedStructure.CreateWithValue(
      [
        sm('red', ASO(0.4)),
        sm('green', ASO(0.3)),
        sm('blue', ASO(0.7))
      ]
    )
  );

  Test({LINENUM}55525, 'new(rgbst, "green": 0.3, "red": 0.4, "blue": 0.7)',
    TAlgosimTypedStructure.CreateWithValue(
      [
        sm('red', ASO(0.4)),
        sm('green', ASO(0.3)),
        sm('blue', ASO(0.7))
      ]
    )
  );

  Test({LINENUM}55535, 'type(new(rgbst, "red": 0.4, "green": 0.3, "blue": 0.7))',
    'structure of type "RGB"'
  );

  Test({LINENUM}55539, 'new(rgbst, "red": 0.4, "green": 0.3, "blau": 0.7)',
    failure,
    'Structure type "RGB" does not contain a member named "blau".'
  );

  Test({LINENUM}55544, 'pst2 ≔ GetStructType("person")',
    failure, 'Unknown structure type "person".');

  Test({LINENUM}55547, 'RegisterStructType(pst)', success);

  with
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('unnamed')),
        sm('age', ASOInt(0))
      ]
    )
  do
    try
      Test({LINENUM}55558, 'pst2 ≔ GetStructType("person")',
        ToStructType('person')
      );
    finally
      Free;
    end;

  Test({LINENUM}55565, 'new(pst2)',
    TAlgosimTypedStructure.CreateWithValue(
      [
        sm('name', ASO('unnamed')),
        sm('age', ASOInt(0))
      ]
    )
  );

  Test({LINENUM}55574, 'type(new(pst2))', 'structure of type "person"');

  Test({LINENUM}55576, 'new(pst2, "name": "Severus Snape")',
    TAlgosimTypedStructure.CreateWithValue(
      [
        sm('name', ASO('Severus Snape')),
        sm('age', ASOInt(0))
      ]
    )
  );

  Test({LINENUM}55585, 'new(pst2, "age": 50)',
    TAlgosimTypedStructure.CreateWithValue(
      [
        sm('name', ASO('unnamed')),
        sm('age', ASOInt(50))
      ]
    )
  );

  Test({LINENUM}55594, 'new(pst2, "name": "Severus Snape", "age": 50)',
    TAlgosimTypedStructure.CreateWithValue(
      [
        sm('name', ASO('Severus Snape')),
        sm('age', ASOInt(50))
      ]
    )
  );

  Test({LINENUM}55603, 'new(pst2, "name": "Severus Snape", "age": 50, "sex": "male")',
    failure,
    'Structure type "person" does not contain a member named "sex".'
  );

  Test({LINENUM}55608, 'UnregisterStructType("person")', success);

  Test({LINENUM}55610, 'pst2 ≔ GetStructType("person")',
    failure, 'Unknown structure type "person".');

  Test({LINENUM}55613, 'UnregisterStructType("RGB")', failure, 'Cannot unregister kernel structure type "RGB".');
  Test({LINENUM}55614, 'UnregisterStructType("Date")', failure, 'Cannot unregister kernel structure type "Date".');
  Test({LINENUM}55615, 'UnregisterStructType("Time")', failure, 'Cannot unregister kernel structure type "Time".');
  Test({LINENUM}55616, 'UnregisterStructType("DateTime")', failure, 'Cannot unregister kernel structure type "DateTime".');
  Test({LINENUM}55617, 'UnregisterStructType("Variable")', failure, 'Cannot unregister kernel structure type "Variable".');

  Test({LINENUM}55619, 'UnregisterStructType("NargleData")', failure, 'Unknown structure type "NargleData"');


  //
  // Object types
  //

  Test({LINENUM}55626, 'type(123)', 'integer');
  Test({LINENUM}55627, 'type(1/2)', 'rational number');
  Test({LINENUM}55628, 'type(5.2)', 'real number');
  Test({LINENUM}55629, 'type(i)', 'complex number');
  Test({LINENUM}55630, 'type(❨1, 0❩)', 'real vector');
  Test({LINENUM}55631, 'type(❨i, 0❩)', 'complex vector');
  Test({LINENUM}55632, 'type(❨❨1, 0❩, ❨0, 1❩❩)', 'real matrix');
  Test({LINENUM}55633, 'type(❨❨i, 0❩, ❨0, i❩❩)', 'complex matrix');
  Test({LINENUM}55634, 'type("niffler")', 'string');
  Test({LINENUM}55635, 'type(true)', 'boolean');
  Test({LINENUM}55636, 'type(''(1, 0))', 'array');
  Test({LINENUM}55637, 'type({1, 0})', 'set');
  Test({LINENUM}55638, 'type(struct("name": "Albus"))', 'structure');
  Test({LINENUM}55639, 'type(date())', 'structure of type "Date"');
  Test({LINENUM}55640, 'type(GetStructType("Date"))', 'structure type');
  Test({LINENUM}55641, 'type(rgb(1, 0, 0))', 'color');
  Test({LINENUM}55642, 'type(CreatePixmap(512, 512))', 'pixmap');
  Test({LINENUM}55643, 'type(SineTone(400))', 'sound');
  Test({LINENUM}55644, 'type(BinaryData(π))', 'binary data');
  Test({LINENUM}55645, 'type(+sin)', 'kernel function');
  Test({LINENUM}55646, 'type(n ↦ n! / n^n)', 'custom function');
  Test({LINENUM}55647, 'type(0;)', 'null');
  Test({LINENUM}55648, 'type(unprotect(ans))', 'success indication');

  // Integers

  Test({LINENUM}55652, 'x ≔ 123;', null);
  Test({LINENUM}55653, 'type(x)', 'integer');
  Test({LINENUM}55654, 'ClassData(x).name', 'integer');
  Test({LINENUM}55655, 'class(x)', 'integer');
  Test({LINENUM}55656, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}55657, 'IsObjectContainer(x)', False);
  Test({LINENUM}55658, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55659, 'IsValueContainer(x)', False);
  Test({LINENUM}55660, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55661, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55662, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}55663, 'IsOrderedContainer(x)', False);
  Test({LINENUM}55664, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55665, 'IsComplexType(x)', False);
  Test({LINENUM}55666, 'IsRealType(x)', True);
  Test({LINENUM}55667, 'HasComplexType(x)', False);

  // Rational numbers

  Test({LINENUM}55671, 'x ≔ 1/2;', null);
  Test({LINENUM}55672, 'type(x)', 'rational number');
  Test({LINENUM}55673, 'ClassData(x).name', 'rational number');
  Test({LINENUM}55674, 'class(x)', 'rational number');
  Test({LINENUM}55675, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}55676, 'IsObjectContainer(x)', False);
  Test({LINENUM}55677, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55678, 'IsValueContainer(x)', False);
  Test({LINENUM}55679, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55680, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55681, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}55682, 'IsOrderedContainer(x)', False);
  Test({LINENUM}55683, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55684, 'IsComplexType(x)', False);
  Test({LINENUM}55685, 'IsRealType(x)', True);
  Test({LINENUM}55686, 'HasComplexType(x)', False);

  // Real numbers

  Test({LINENUM}55690, 'x ≔ 5.3;', null);
  Test({LINENUM}55691, 'type(x)', 'real number');
  Test({LINENUM}55692, 'ClassData(x).name', 'real number');
  Test({LINENUM}55693, 'class(x)', 'real number');
  Test({LINENUM}55694, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}55695, 'IsObjectContainer(x)', False);
  Test({LINENUM}55696, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55697, 'IsValueContainer(x)', False);
  Test({LINENUM}55698, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55699, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55700, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}55701, 'IsOrderedContainer(x)', False);
  Test({LINENUM}55702, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55703, 'IsComplexType(x)', False);
  Test({LINENUM}55704, 'IsRealType(x)', True);
  Test({LINENUM}55705, 'HasComplexType(x)', False);

  // Complex number

  Test({LINENUM}55709, 'x ≔ 5 + i;', null);
  Test({LINENUM}55710, 'type(x)', 'complex number');
  Test({LINENUM}55711, 'ClassData(x).name', 'complex number');
  Test({LINENUM}55712, 'class(x)', 'complex number');
  Test({LINENUM}55713, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}55714, 'IsObjectContainer(x)', False);
  Test({LINENUM}55715, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55716, 'IsValueContainer(x)', False);
  Test({LINENUM}55717, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55718, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55719, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}55720, 'IsOrderedContainer(x)', False);
  Test({LINENUM}55721, 'ClassData(x).IsComplexType', True);
  Test({LINENUM}55722, 'IsComplexType(x)', True);
  Test({LINENUM}55723, 'IsRealType(x)', False);
  Test({LINENUM}55724, 'HasComplexType(x)', True);

  // Real vectors

  Test({LINENUM}55728, 'x ≔ ❨1, 0, 0❩;', null);
  Test({LINENUM}55729, 'type(x)', 'real vector');
  Test({LINENUM}55730, 'ClassData(x).name', 'real vector');
  Test({LINENUM}55731, 'class(x)', 'real vector');
  Test({LINENUM}55732, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}55733, 'IsObjectContainer(x)', False);
  Test({LINENUM}55734, 'ClassData(x).IsValueContainer', True);
  Test({LINENUM}55735, 'IsValueContainer(x)', True);
  Test({LINENUM}55736, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55737, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55738, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55739, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55740, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55741, 'IsComplexType(x)', False);
  Test({LINENUM}55742, 'IsRealType(x)', True);
  Test({LINENUM}55743, 'HasComplexType(x)', False);

  // Complex vectors

  Test({LINENUM}55747, 'x ≔ ❨i, 0, 0❩;', null);
  Test({LINENUM}55748, 'type(x)', 'complex vector');
  Test({LINENUM}55749, 'ClassData(x).name', 'complex vector');
  Test({LINENUM}55750, 'class(x)', 'complex vector');
  Test({LINENUM}55751, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}55752, 'IsObjectContainer(x)', False);
  Test({LINENUM}55753, 'ClassData(x).IsValueContainer', True);
  Test({LINENUM}55754, 'IsValueContainer(x)', True);
  Test({LINENUM}55755, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55756, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55757, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55758, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55759, 'ClassData(x).IsComplexType', True);
  Test({LINENUM}55760, 'IsComplexType(x)', True);
  Test({LINENUM}55761, 'IsRealType(x)', False);
  Test({LINENUM}55762, 'HasComplexType(x)', True);

  // Real matrices

  Test({LINENUM}55766, 'x ≔ ❨❨3, 2❩, ❨1, 5❩❩;', null);
  Test({LINENUM}55767, 'type(x)', 'real matrix');
  Test({LINENUM}55768, 'ClassData(x).name', 'real matrix');
  Test({LINENUM}55769, 'class(x)', 'real matrix');
  Test({LINENUM}55770, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}55771, 'IsObjectContainer(x)', False);
  Test({LINENUM}55772, 'ClassData(x).IsValueContainer', True);
  Test({LINENUM}55773, 'IsValueContainer(x)', True);
  Test({LINENUM}55774, 'ClassData(x).IsPlanarContainer', True);
  Test({LINENUM}55775, 'IsPlanarContainer(x)', True);
  Test({LINENUM}55776, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55777, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55778, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55779, 'IsComplexType(x)', False);
  Test({LINENUM}55780, 'IsRealType(x)', True);
  Test({LINENUM}55781, 'HasComplexType(x)', False);

  // Complex matrices

  Test({LINENUM}55785, 'x ≔ ❨❨3, 2❩, ❨i, 5❩❩;', null);
  Test({LINENUM}55786, 'type(x)', 'complex matrix');
  Test({LINENUM}55787, 'ClassData(x).name', 'complex matrix');
  Test({LINENUM}55788, 'class(x)', 'complex matrix');
  Test({LINENUM}55789, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}55790, 'IsObjectContainer(x)', False);
  Test({LINENUM}55791, 'ClassData(x).IsValueContainer', True);
  Test({LINENUM}55792, 'IsValueContainer(x)', True);
  Test({LINENUM}55793, 'ClassData(x).IsPlanarContainer', True);
  Test({LINENUM}55794, 'IsPlanarContainer(x)', True);
  Test({LINENUM}55795, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55796, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55797, 'ClassData(x).IsComplexType', True);
  Test({LINENUM}55798, 'IsComplexType(x)', True);
  Test({LINENUM}55799, 'IsRealType(x)', False);
  Test({LINENUM}55800, 'HasComplexType(x)', True);

  // Strings

  Test({LINENUM}55804, 'x ≔ "Hello, World!";', null);
  Test({LINENUM}55805, 'type(x)', 'string');
  Test({LINENUM}55806, 'ClassData(x).name', 'string');
  Test({LINENUM}55807, 'class(x)', 'string');
  Test({LINENUM}55808, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}55809, 'IsObjectContainer(x)', False);
  Test({LINENUM}55810, 'ClassData(x).IsValueContainer', True);
  Test({LINENUM}55811, 'IsValueContainer(x)', True);
  Test({LINENUM}55812, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55813, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55814, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55815, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55816, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55817, 'IsComplexType(x)', False);
  Test({LINENUM}55818, 'IsRealType(x)', True);
  Test({LINENUM}55819, 'HasComplexType(x)', False);

  // Booleans

  Test({LINENUM}55823, 'x ≔ 1+1=2;', null);
  Test({LINENUM}55824, 'type(x)', 'boolean');
  Test({LINENUM}55825, 'ClassData(x).name', 'boolean');
  Test({LINENUM}55826, 'class(x)', 'boolean');
  Test({LINENUM}55827, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}55828, 'IsObjectContainer(x)', False);
  Test({LINENUM}55829, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55830, 'IsValueContainer(x)', False);
  Test({LINENUM}55831, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55832, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55833, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}55834, 'IsOrderedContainer(x)', False);
  Test({LINENUM}55835, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55836, 'IsComplexType(x)', False);
  Test({LINENUM}55837, 'IsRealType(x)', True);
  Test({LINENUM}55838, 'HasComplexType(x)', False);

  // Lists

  Test({LINENUM}55842, 'x ≔ ''(1, 2, 3, "Vera Verto");', null);
  Test({LINENUM}55843, 'type(x)', 'array');
  Test({LINENUM}55844, 'ClassData(x).name', 'array');
  Test({LINENUM}55845, 'class(x)', 'array');
  Test({LINENUM}55846, 'ClassData(x).IsObjectContainer', True);
  Test({LINENUM}55847, 'IsObjectContainer(x)', True);
  Test({LINENUM}55848, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55849, 'IsValueContainer(x)', False);
  Test({LINENUM}55850, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55851, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55852, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55853, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55854, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55855, 'IsComplexType(x)', False);
  Test({LINENUM}55856, 'IsRealType(x)', True);
  Test({LINENUM}55857, 'HasComplexType(x)', False);

  Test({LINENUM}55859, 'x ≔ ''(i, "solemnly", "swear");', null);
  Test({LINENUM}55860, 'type(x)', 'array');
  Test({LINENUM}55861, 'ClassData(x).name', 'array');
  Test({LINENUM}55862, 'class(x)', 'array');
  Test({LINENUM}55863, 'ClassData(x).IsObjectContainer', True);
  Test({LINENUM}55864, 'IsObjectContainer(x)', True);
  Test({LINENUM}55865, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55866, 'IsValueContainer(x)', False);
  Test({LINENUM}55867, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55868, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55869, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55870, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55871, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55872, 'IsComplexType(x)', False);
  Test({LINENUM}55873, 'IsRealType(x)', True);
  Test({LINENUM}55874, 'HasComplexType(x)', True);

  // Sets

  Test({LINENUM}55878, 'x ≔ {1, 2, 3, "Vera Verto"};', null);
  Test({LINENUM}55879, 'type(x)', 'set');
  Test({LINENUM}55880, 'ClassData(x).name', 'set');
  Test({LINENUM}55881, 'class(x)', 'set');
  Test({LINENUM}55882, 'ClassData(x).IsObjectContainer', True);
  Test({LINENUM}55883, 'IsObjectContainer(x)', True);
  Test({LINENUM}55884, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55885, 'IsValueContainer(x)', False);
  Test({LINENUM}55886, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55887, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55888, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}55889, 'IsOrderedContainer(x)', False);
  Test({LINENUM}55890, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55891, 'IsComplexType(x)', False);
  Test({LINENUM}55892, 'IsRealType(x)', True);
  Test({LINENUM}55893, 'HasComplexType(x)', False);

  Test({LINENUM}55895, 'x ≔ {i, "solemnly", "swear"};', null);
  Test({LINENUM}55896, 'type(x)', 'set');
  Test({LINENUM}55897, 'ClassData(x).name', 'set');
  Test({LINENUM}55898, 'class(x)', 'set');
  Test({LINENUM}55899, 'ClassData(x).IsObjectContainer', True);
  Test({LINENUM}55900, 'IsObjectContainer(x)', True);
  Test({LINENUM}55901, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55902, 'IsValueContainer(x)', False);
  Test({LINENUM}55903, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55904, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55905, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}55906, 'IsOrderedContainer(x)', False);
  Test({LINENUM}55907, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55908, 'IsComplexType(x)', False);
  Test({LINENUM}55909, 'IsRealType(x)', True);
  Test({LINENUM}55910, 'HasComplexType(x)', True);

  // Structures

  Test({LINENUM}55914, 'x ≔ struct("name": "Albus Dumbledore", "age": 115);', null);
  Test({LINENUM}55915, 'type(x)', 'structure');
  Test({LINENUM}55916, 'ClassData(x).name', 'structure');
  Test({LINENUM}55917, 'class(x)', 'structure');
  Test({LINENUM}55918, 'ClassData(x).IsObjectContainer', True);
  Test({LINENUM}55919, 'IsObjectContainer(x)', True);
  Test({LINENUM}55920, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55921, 'IsValueContainer(x)', False);
  Test({LINENUM}55922, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55923, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55924, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55925, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55926, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55927, 'IsComplexType(x)', False);
  Test({LINENUM}55928, 'IsRealType(x)', True);
  Test({LINENUM}55929, 'HasComplexType(x)', False);

  Test({LINENUM}55931, 'x ≔ struct("name": "Albus Dumbledore", "age": i);', null);
  Test({LINENUM}55932, 'type(x)', 'structure');
  Test({LINENUM}55933, 'ClassData(x).name', 'structure');
  Test({LINENUM}55934, 'class(x)', 'structure');
  Test({LINENUM}55935, 'ClassData(x).IsObjectContainer', True);
  Test({LINENUM}55936, 'IsObjectContainer(x)', True);
  Test({LINENUM}55937, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55938, 'IsValueContainer(x)', False);
  Test({LINENUM}55939, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55940, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55941, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55942, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55943, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55944, 'IsComplexType(x)', False);
  Test({LINENUM}55945, 'IsRealType(x)', True);
  Test({LINENUM}55946, 'HasComplexType(x)', True);

  with
    TAlgosimStructure.CreateWithValue(
      [
        sm('name', ASO('unnamed')),
        sm('age', ASOInt(0))
      ]
    )
  do
    try
      Test({LINENUM}55957, 'pst ≔ ToStructType(person, "person")',
        ToStructType('person')
      );
    finally
      Free;
    end;

  Test({LINENUM}55964, 'x ≔ new(pst, "name": "Albus Dumbledore", "age": 115);', null);
  Test({LINENUM}55965, 'type(x)', 'structure of type "person"');
  Test({LINENUM}55966, 'ClassData(x).name', 'typed structure');
  Test({LINENUM}55967, 'class(x)', 'typed structure');
  Test({LINENUM}55968, 'ClassData(x).IsObjectContainer', True);
  Test({LINENUM}55969, 'IsObjectContainer(x)', True);
  Test({LINENUM}55970, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55971, 'IsValueContainer(x)', False);
  Test({LINENUM}55972, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55973, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55974, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55975, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55976, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55977, 'IsComplexType(x)', False);
  Test({LINENUM}55978, 'IsRealType(x)', True);
  Test({LINENUM}55979, 'HasComplexType(x)', False);

  Test({LINENUM}55981, 'x ≔ new(pst, "name": "Albus Dumbledore", "age": i);', null);
  Test({LINENUM}55982, 'type(x)', 'structure of type "person"');
  Test({LINENUM}55983, 'ClassData(x).name', 'typed structure');
  Test({LINENUM}55984, 'class(x)', 'typed structure');
  Test({LINENUM}55985, 'ClassData(x).IsObjectContainer', True);
  Test({LINENUM}55986, 'IsObjectContainer(x)', True);
  Test({LINENUM}55987, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}55988, 'IsValueContainer(x)', False);
  Test({LINENUM}55989, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}55990, 'IsPlanarContainer(x)', False);
  Test({LINENUM}55991, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}55992, 'IsOrderedContainer(x)', True);
  Test({LINENUM}55993, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}55994, 'IsComplexType(x)', False);
  Test({LINENUM}55995, 'IsRealType(x)', True);
  Test({LINENUM}55996, 'HasComplexType(x)', True);

  Test({LINENUM}55998, 'x ≔ pst;', null);
  Test({LINENUM}55999, 'type(x)', 'structure type');
  Test({LINENUM}56000, 'ClassData(x).name', 'structure type');
  Test({LINENUM}56001, 'class(x)', 'structure type');
  Test({LINENUM}56002, 'ClassData(x).IsObjectContainer', True);
  Test({LINENUM}56003, 'IsObjectContainer(x)', True);
  Test({LINENUM}56004, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}56005, 'IsValueContainer(x)', False);
  Test({LINENUM}56006, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}56007, 'IsPlanarContainer(x)', False);
  Test({LINENUM}56008, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}56009, 'IsOrderedContainer(x)', True);
  Test({LINENUM}56010, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}56011, 'IsComplexType(x)', False);
  Test({LINENUM}56012, 'IsRealType(x)', True);
  Test({LINENUM}56013, 'HasComplexType(x)', False);

  // Colours

  Test({LINENUM}56017, 'x ≔ color("gold");', null);
  Test({LINENUM}56018, 'type(x)', 'color');
  Test({LINENUM}56019, 'ClassData(x).name', 'color');
  Test({LINENUM}56020, 'class(x)', 'color');
  Test({LINENUM}56021, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}56022, 'IsObjectContainer(x)', False);
  Test({LINENUM}56023, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}56024, 'IsValueContainer(x)', False);
  Test({LINENUM}56025, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}56026, 'IsPlanarContainer(x)', False);
  Test({LINENUM}56027, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}56028, 'IsOrderedContainer(x)', False);
  Test({LINENUM}56029, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}56030, 'HasComplexType(x)', False);

  // Pixmaps

  Test({LINENUM}56034, 'x ≔ CreatePixmap(512, 512);', null);
  Test({LINENUM}56035, 'type(x)', 'pixmap');
  Test({LINENUM}56036, 'ClassData(x).name', 'pixmap');
  Test({LINENUM}56037, 'class(x)', 'pixmap');
  Test({LINENUM}56038, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}56039, 'IsObjectContainer(x)', False);
  Test({LINENUM}56040, 'ClassData(x).IsValueContainer', True);
  Test({LINENUM}56041, 'IsValueContainer(x)', True);
  Test({LINENUM}56042, 'ClassData(x).IsPlanarContainer', True);
  Test({LINENUM}56043, 'IsPlanarContainer(x)', True);
  Test({LINENUM}56044, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}56045, 'IsOrderedContainer(x)', True);
  Test({LINENUM}56046, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}56047, 'IsComplexType(x)', False);
  Test({LINENUM}56048, 'IsRealType(x)', True);
  Test({LINENUM}56049, 'HasComplexType(x)', False);

  // Sounds

  Test({LINENUM}56053, 'x ≔ SineTone(400);', null);
  Test({LINENUM}56054, 'type(x)', 'sound');
  Test({LINENUM}56055, 'ClassData(x).name', 'sound');
  Test({LINENUM}56056, 'class(x)', 'sound');
  Test({LINENUM}56057, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}56058, 'IsObjectContainer(x)', False);
  Test({LINENUM}56059, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}56060, 'IsValueContainer(x)', False);
  Test({LINENUM}56061, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}56062, 'IsPlanarContainer(x)', False);
  Test({LINENUM}56063, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}56064, 'IsOrderedContainer(x)', False);
  Test({LINENUM}56065, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}56066, 'IsComplexType(x)', False);
  Test({LINENUM}56067, 'IsRealType(x)', True);
  Test({LINENUM}56068, 'HasComplexType(x)', False);

  // Binary data

  Test({LINENUM}56072, 'x ≔ BinaryData("nargle");', null);
  Test({LINENUM}56073, 'type(x)', 'binary data');
  Test({LINENUM}56074, 'ClassData(x).name', 'binary data');
  Test({LINENUM}56075, 'class(x)', 'binary data');
  Test({LINENUM}56076, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}56077, 'IsObjectContainer(x)', False);
  Test({LINENUM}56078, 'ClassData(x).IsValueContainer', True);
  Test({LINENUM}56079, 'IsValueContainer(x)', True);
  Test({LINENUM}56080, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}56081, 'IsPlanarContainer(x)', False);
  Test({LINENUM}56082, 'ClassData(x).IsOrderedContainer', True);
  Test({LINENUM}56083, 'IsOrderedContainer(x)', True);
  Test({LINENUM}56084, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}56085, 'IsComplexType(x)', False);
  Test({LINENUM}56086, 'IsRealType(x)', True);
  Test({LINENUM}56087, 'HasComplexType(x)', False);

  // Success indications

  Test({LINENUM}56091, 'x ≔ unprotect("ans");', null);
  Test({LINENUM}56092, 'type(x)', 'success indication');
  Test({LINENUM}56093, 'ClassData(x).name', 'success indication');
  Test({LINENUM}56094, 'class(x)', 'success indication');
  Test({LINENUM}56095, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}56096, 'IsObjectContainer(x)', False);
  Test({LINENUM}56097, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}56098, 'IsValueContainer(x)', False);
  Test({LINENUM}56099, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}56100, 'IsPlanarContainer(x)', False);
  Test({LINENUM}56101, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}56102, 'IsOrderedContainer(x)', False);
  Test({LINENUM}56103, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}56104, 'IsComplexType(x)', False);
  Test({LINENUM}56105, 'IsRealType(x)', True);
  Test({LINENUM}56106, 'HasComplexType(x)', False);

  // Null objects

  Test({LINENUM}56110, 'x ≔ (0;)', null);
  Test({LINENUM}56111, 'type(x)', 'null');
  Test({LINENUM}56112, 'ClassData(x).name', 'null');
  Test({LINENUM}56113, 'class(x)', 'null');
  Test({LINENUM}56114, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}56115, 'IsObjectContainer(x)', False);
  Test({LINENUM}56116, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}56117, 'IsValueContainer(x)', False);
  Test({LINENUM}56118, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}56119, 'IsPlanarContainer(x)', False);
  Test({LINENUM}56120, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}56121, 'IsOrderedContainer(x)', False);
  Test({LINENUM}56122, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}56123, 'IsComplexType(x)', False);
  Test({LINENUM}56124, 'IsRealType(x)', True);
  Test({LINENUM}56125, 'HasComplexType(x)', False);

  // Custom functions

  Test({LINENUM}56129, 'x ≔ n ↦ n!/n^n;', null);
  Test({LINENUM}56130, 'type(x)', 'custom function');
  Test({LINENUM}56131, 'ClassData(x).name', 'custom function');
  Test({LINENUM}56132, 'class(x)', 'custom function');
  Test({LINENUM}56133, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}56134, 'IsObjectContainer(x)', False);
  Test({LINENUM}56135, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}56136, 'IsValueContainer(x)', False);
  Test({LINENUM}56137, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}56138, 'IsPlanarContainer(x)', False);
  Test({LINENUM}56139, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}56140, 'IsOrderedContainer(x)', False);
  Test({LINENUM}56141, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}56142, 'IsComplexType(x)', False);
  Test({LINENUM}56143, 'IsRealType(x)', True);
  Test({LINENUM}56144, 'HasComplexType(x)', False);

  // Kernel functions

  Test({LINENUM}56148, 'x ≔ sin;', null);
  Test({LINENUM}56149, 'type(x)', 'kernel function');
  Test({LINENUM}56150, 'ClassData(x).name', 'kernel function');
  Test({LINENUM}56151, 'class(x)', 'kernel function');
  Test({LINENUM}56152, 'ClassData(x).IsObjectContainer', False);
  Test({LINENUM}56153, 'IsObjectContainer(x)', False);
  Test({LINENUM}56154, 'ClassData(x).IsValueContainer', False);
  Test({LINENUM}56155, 'IsValueContainer(x)', False);
  Test({LINENUM}56156, 'ClassData(x).IsPlanarContainer', False);
  Test({LINENUM}56157, 'IsPlanarContainer(x)', False);
  Test({LINENUM}56158, 'ClassData(x).IsOrderedContainer', False);
  Test({LINENUM}56159, 'IsOrderedContainer(x)', False);
  Test({LINENUM}56160, 'ClassData(x).IsComplexType', False);
  Test({LINENUM}56161, 'IsComplexType(x)', False);
  Test({LINENUM}56162, 'IsRealType(x)', True);
  Test({LINENUM}56163, 'HasComplexType(x)', False);


  //
  // Format options
  //

  Test({LINENUM}56170, 'NumDigits(π)', 0); // 0 = default
  Test({LINENUM}56171, 'NumDigits(SetNumDigits(π, 3))', 3);
  Test({LINENUM}56172, 'NumDigits(SetNumDigits(π, 5))', 5);
  Test({LINENUM}56173, 'NumDigits(SetNumDigits(π, 10))', 10);
  Test({LINENUM}56174, 'NumDigits(SetNumDigits(π, 12))', 12);
  Test({LINENUM}56175, 'NumDigits(SetNumDigits(π, 0))', 0);

  Test({LINENUM}56177, 'MinLength(123)', 0); // 0 = default
  Test({LINENUM}56178, 'MinLength(SetMinLength(123, 2))', 2);
  Test({LINENUM}56179, 'MinLength(SetMinLength(123, 5))', 5);
  Test({LINENUM}56180, 'MinLength(SetMinLength(123, 7))', 7);
  Test({LINENUM}56181, 'MinLength(SetMinLength(123, 10))', 10);

  Test({LINENUM}56183, 'NumberFormat(123456.789)', 'inherited');
  Test({LINENUM}56184, 'NumberFormat(SetNumberFormat(123456.789, "default"))', 'default');
  Test({LINENUM}56185, 'NumberFormat(SetNumberFormat(123456.789, "fixed"))', 'fixed');
  Test({LINENUM}56186, 'NumberFormat(SetNumberFormat(123456.789, "scientific"))', 'scientific');
  Test({LINENUM}56187, 'NumberFormat(SetNumberFormat(123456.789, "inherited"))', 'inherited');

  Test({LINENUM}56189, 'NumberBase(123)', 0); // 0 = default
  Test({LINENUM}56190, 'NumberBase(SetNumberBase(123, 2))', 2);
  Test({LINENUM}56191, 'NumberBase(SetNumberBase(123, 10))', 10);
  Test({LINENUM}56192, 'NumberBase(SetNumberBase(123, 16))', 16);
  Test({LINENUM}56193, 'NumberBase(SetNumberBase(123, 0))', 0);

  Test({LINENUM}56195, 'FormatStyle(2)', 'default');
  Test({LINENUM}56196, 'FormatStyle(SetFormatStyle(2, "day of week"))', 'day of week');
  Test({LINENUM}56197, 'FormatStyle(SetFormatStyle(2, "MIDI instrument"))', 'MIDI instrument');
  Test({LINENUM}56198, 'FormatStyle(SetFormatStyle(2, "default"))', 'default');

  Test({LINENUM}56200, 'DigitGrouping(123456)', -1);
  Test({LINENUM}56201, 'DigitGrouping(SetDigitGrouping(123456, 3))', 3);
  Test({LINENUM}56202, 'DigitGrouping(SetDigitGrouping(123456, 6))', 6);
  Test({LINENUM}56203, 'DigitGrouping(SetDigitGrouping(123456, 2))', 2);
  Test({LINENUM}56204, 'DigitGrouping(SetDigitGrouping(123456, 1))', 1);
  Test({LINENUM}56205, 'DigitGrouping(SetDigitGrouping(123456, 0))', 0);
  Test({LINENUM}56206, 'DigitGrouping(SetDigitGrouping(123456, -1))', -1);

  Test({LINENUM}56208, 'PrettyExp(1E20)', 'inherited');
  Test({LINENUM}56209, 'PrettyExp(SetPrettyExp(1E20, true))', True);
  Test({LINENUM}56210, 'PrettyExp(SetPrettyExp(1E20, false))', False);
  Test({LINENUM}56211, 'PrettyExp(SetPrettyExp(1E20, "inherited"))', 'inherited');

  Test({LINENUM}56213, 'MaxLen("Hello, World!")', 0);
  Test({LINENUM}56214, 'MaxLen("Hello, World!" \ 5)', 5);
  Test({LINENUM}56215, 'MaxLen("Hello, World!" \ 12)', 12);
  Test({LINENUM}56216, 'MaxLen("Hello, World!" \ 0)', 0);


  //
  // Defuzzing
  //

  Test({LINENUM}56223, 'defuzz(21)', 21);
  Test({LINENUM}56224, 'defuzz(394)', 394);
  Test({LINENUM}56225, 'defuzz(-19)', -19);
  Test({LINENUM}56226, 'defuzz(0)', 0);

  Test({LINENUM}56228, 'defuzz(21/22)', rat(21, 22));
  Test({LINENUM}56229, 'defuzz(-1/4)', rat(-1, 4));
  Test({LINENUM}56230, 'defuzz(1/4-1/4)', rat(0, 1));

  Test({LINENUM}56232, 'defuzz(5.000000000785)', 5.0);
  Test({LINENUM}56233, 'defuzz(5.00000785)', 5.00000785);
  Test({LINENUM}56234, 'defuzz(5.00000785, 1E-8)', 5.00000785);
  Test({LINENUM}56235, 'defuzz(5.00000785, 1E-7)', 5.00000785);
  Test({LINENUM}56236, 'defuzz(5.00000785, 1E-6)', 5.00000785);
  Test({LINENUM}56237, 'defuzz(5.00000785, 1E-5)', 5.0);
  Test({LINENUM}56238, 'defuzz(5.00000785, 1E-4)', 5.0);
  Test({LINENUM}56239, 'defuzz(5.00000785, 1E-3)', 5.0);
  Test({LINENUM}56240, 'defuzz(5.00000785, 1E-2)', 5.0);
  Test({LINENUM}56241, 'defuzz(5.00000785, 1E-1)', 5.0);
  Test({LINENUM}56242, 'defuzz(5.00000785, 1)', 5.0);

  Test({LINENUM}56244, 'defuzz(6.0000000036 − 5.99999999453 ⋅ i)', 6 - 6*ImaginaryUnit);
  Test({LINENUM}56245, 'defuzz(5.0000256 − 1.999999985 ⋅ i)', 5.0000256 - 1.999999985 * ImaginaryUnit);
  Test({LINENUM}56246, 'defuzz(5.0000256 − 1.999999985 ⋅ i, 1E-8)', 5.0000256 - 1.999999985 * ImaginaryUnit);
  Test({LINENUM}56247, 'defuzz(5.0000256 − 1.999999985 ⋅ i, 1E-7)', 5.0000256 - 2 * ImaginaryUnit);
  Test({LINENUM}56248, 'defuzz(5.0000256 − 1.999999985 ⋅ i, 1E-6)', 5.0000256 - 2 * ImaginaryUnit);
  Test({LINENUM}56249, 'defuzz(5.0000256 − 1.999999985 ⋅ i, 1E-5)', 5.0000256 - 2 * ImaginaryUnit);
  Test({LINENUM}56250, 'defuzz(5.0000256 − 1.999999985 ⋅ i, 1E-4)', 5 - 2 * ImaginaryUnit);
  Test({LINENUM}56251, 'defuzz(5.0000256 − 1.999999985 ⋅ i, 1E-3)', 5 - 2 * ImaginaryUnit);
  Test({LINENUM}56252, 'defuzz(5.0000256 − 1.999999985 ⋅ i, 1E-2)', 5 - 2 * ImaginaryUnit);
  Test({LINENUM}56253, 'defuzz(5.0000256 − 1.999999985 ⋅ i, 1E-1)', 5 - 2 * ImaginaryUnit);

  Test({LINENUM}56255, 'v ≔ ❨6.00000000031, 4.0000000071, −2.99999999563, 7.00000000952❩;', null);
  Test({LINENUM}56256, 'defuzz(v)', [6, 4, -3, 7]);

  Test({LINENUM}56258, 'v ≔ ❨6.0000145, 0.99999999214, 4.0000000317, 5.0000000012❩;', null);
  Test({LINENUM}56259, 'defuzz(v)', [6.0000145, 1, 4.0000000317, 5]);
  Test({LINENUM}56260, 'defuzz(v, 1E-9)', [6.0000145, 0.99999999214, 4.0000000317, 5.0000000012]);
  Test({LINENUM}56261, 'defuzz(v, 1E-8)', [6.0000145, 1, 4.0000000317, 5]);
  Test({LINENUM}56262, 'defuzz(v, 1E-7)', [6.0000145, 1, 4, 5]);
  Test({LINENUM}56263, 'defuzz(v, 1E-6)', [6.0000145, 1, 4, 5]);
  Test({LINENUM}56264, 'defuzz(v, 1E-5)', [6.0000145, 1, 4, 5]);
  Test({LINENUM}56265, 'defuzz(v, 1E-4)', [6, 1, 4, 5]);
  Test({LINENUM}56266, 'defuzz(v, 1E-3)', [6, 1, 4, 5]);
  Test({LINENUM}56267, 'defuzz(v, 1E-2)', [6, 1, 4, 5]);
  Test({LINENUM}56268, 'defuzz(v, 1E-1)', [6, 1, 4, 5]);

  Test({LINENUM}56270, 'v ≔ ❨3.00000000152 + 0.99999999523 ⋅ i, 5.9999999912 − i, i❩;', null);
  Test({LINENUM}56271, 'defuzz(v)', [3 + ImaginaryUnit, 6 - ImaginaryUnit, ImaginaryUnit]);

  Test({LINENUM}56273, 'v ≔ ❨6.000035 − 0.000000007 ⋅ i, 2 + 4.99999921⋅i❩;', null);
  Test({LINENUM}56274, 'defuzz(v)', [6.000035, 2 + 4.99999921*ImaginaryUnit]);
  Test({LINENUM}56275, 'defuzz(v, 1E-8)', [6.000035, 2 + 4.99999921*ImaginaryUnit]);
  Test({LINENUM}56276, 'defuzz(v, 1E-7)', [6.000035, 2 + 4.99999921*ImaginaryUnit]);
  Test({LINENUM}56277, 'defuzz(v, 1E-6)', [6.000035, 2 + 5*ImaginaryUnit]);
  Test({LINENUM}56278, 'defuzz(v, 1E-5)', [6.000035, 2 + 5*ImaginaryUnit]);
  Test({LINENUM}56279, 'defuzz(v, 1E-4)', [6, 2 + 5*ImaginaryUnit]);
  Test({LINENUM}56280, 'defuzz(v, 1E-3)', [6, 2 + 5*ImaginaryUnit]);
  Test({LINENUM}56281, 'defuzz(v, 1E-2)', [6, 2 + 5*ImaginaryUnit]);
  Test({LINENUM}56282, 'defuzz(v, 1E-1)', [6, 2 + 5*ImaginaryUnit]);

  Test({LINENUM}56284, 'A ≔ ❨❨3.00000000012, 1.999999999997, 5❩, ❨−2.00000000053, 0, 0❩, ❨4.99999999987, 6.00000000021, 0.00000000000001❩❩;', null);
  Test({LINENUM}56285, 'defuzz(A)', 3, [3, 2, 5, -2, 0, 0, 5, 6, 0]);

  Test({LINENUM}56287, 'A ≔ ❨❨6.0000031, 4.000000017❩, ❨3.99999958, 0.00000025❩❩;', null);
  Test({LINENUM}56288, 'defuzz(A)', 2, [6.0000031, 4.000000017, 3.99999958, 0.00000025]);
  Test({LINENUM}56289, 'defuzz(A, 1E-8)', 2, [6.0000031, 4.000000017, 3.99999958, 0.00000025]);
  Test({LINENUM}56290, 'defuzz(A, 1E-7)', 2, [6.0000031, 4, 3.99999958, 0.00000025]);
  Test({LINENUM}56291, 'defuzz(A, 1E-6)', 2, [6.0000031, 4, 4, 0]);
  Test({LINENUM}56292, 'defuzz(A, 1E-5)', 2, [6, 4, 4, 0]);
  Test({LINENUM}56293, 'defuzz(A, 1E-4)', 2, [6, 4, 4, 0]);
  Test({LINENUM}56294, 'defuzz(A, 1E-3)', 2, [6, 4, 4, 0]);
  Test({LINENUM}56295, 'defuzz(A, 1E-2)', 2, [6, 4, 4, 0]);
  Test({LINENUM}56296, 'defuzz(A, 1E-1)', 2, [6, 4, 4, 0]);

  Test({LINENUM}56298, 'A ≔ ❨❨3.000000004 + 5.000000031⋅i, 0.99999924 − i❩, ❨5.0000000085⋅i, 3❩❩;', null);
  Test({LINENUM}56299, 'defuzz(A)', 2, [3 + 5.000000031*ImaginaryUnit, 0.99999924 - ImaginaryUnit, 5*ImaginaryUnit, 3]);
  Test({LINENUM}56300, 'defuzz(A, 1E-8)', 2, [3 + 5.000000031*ImaginaryUnit, 0.99999924 - ImaginaryUnit, 5*ImaginaryUnit, 3]);
  Test({LINENUM}56301, 'defuzz(A, 1E-7)', 2, [3 + 5*ImaginaryUnit, 0.99999924 - ImaginaryUnit, 5*ImaginaryUnit, 3]);
  Test({LINENUM}56302, 'defuzz(A, 1E-6)', 2, [3 + 5*ImaginaryUnit, 1 - ImaginaryUnit, 5*ImaginaryUnit, 3]);
  Test({LINENUM}56303, 'defuzz(A, 1E-5)', 2, [3 + 5*ImaginaryUnit, 1 - ImaginaryUnit, 5*ImaginaryUnit, 3]);
  Test({LINENUM}56304, 'defuzz(A, 1E-4)', 2, [3 + 5*ImaginaryUnit, 1 - ImaginaryUnit, 5*ImaginaryUnit, 3]);
  Test({LINENUM}56305, 'defuzz(A, 1E-3)', 2, [3 + 5*ImaginaryUnit, 1 - ImaginaryUnit, 5*ImaginaryUnit, 3]);
  Test({LINENUM}56306, 'defuzz(A, 1E-2)', 2, [3 + 5*ImaginaryUnit, 1 - ImaginaryUnit, 5*ImaginaryUnit, 3]);
  Test({LINENUM}56307, 'defuzz(A, 1E-1)', 2, [3 + 5*ImaginaryUnit, 1 - ImaginaryUnit, 5*ImaginaryUnit, 3]);


  //
  // SameValue and CompareValue
  //

  Test({LINENUM}56314, 'SameValue(5, 5)', True);
  Test({LINENUM}56315, 'SameValue(127/128, 127/128)', True);
  Test({LINENUM}56316, 'SameValue(3.1415, 3.1415)', True);
  Test({LINENUM}56317, 'SameValue(-5.1, -5.1)', True);
  Test({LINENUM}56318, 'SameValue(7E8, 7E8)', True);
  Test({LINENUM}56319, 'SameValue(2.5E-20, 2.5E-20)', True);
  Test({LINENUM}56320, 'SameValue(-5.1E10, -5.1E10)', True);
  Test({LINENUM}56321, 'SameValue("cat", "cat")', True);
  Test({LINENUM}56322, 'SameValue("hippogriff", "hippogriff")', True);
  Test({LINENUM}56323, 'SameValue(true, true)', True);
  Test({LINENUM}56324, 'SameValue(false, false)', True);
  Test({LINENUM}56325, 'SameValue(❨1, 2, 3❩, ❨1, 2, 3❩)', True);
  Test({LINENUM}56326, 'SameValue(❨❨5, 2❩, ❨0, 1❩❩, ❨❨5, 2❩, ❨0, 1❩❩)', True);
  Test({LINENUM}56327, 'SameValue(❨i, 2, 3❩, ❨i, 2, 3❩)', True);
  Test({LINENUM}56328, 'SameValue(❨❨i, 2❩, ❨0, 1❩❩, ❨❨i, 2❩, ❨0, 1❩❩)', True);
  Test({LINENUM}56329, 'SameValue(''(1, 2, 3), ''(1, 2, 3))', True);
  Test({LINENUM}56330, 'SameValue(''(1, 2, 3, "Vera Verto"), ''(1, 2, 3, "Vera Verto"))', True);
  Test({LINENUM}56331, 'SameValue({1, 2, 3}, {1, 2, 3})', failure, 'Sets cannot be compared with epsilons.');
  Test({LINENUM}56332, 'SameValue(color("red"), color("red"))', True);
  AvoidDateChange; Test({LINENUM}56333, 'SameValue(date(), date())', True);
  Test({LINENUM}56334, 'SameValue((0;), (0;))', True);
  Test({LINENUM}56335, 'SameValue(ColorGradient(256, 256, color("red"), color("green")), ColorGradient(256, 256, color("red"), color("green")))', True);
  Test({LINENUM}56336, 'SameValue(SineTone(400), SineTone(400))', True);
  Test({LINENUM}56337, 'SameValue(unprotect(ans), unprotect(ans))', True);

  Test({LINENUM}56339, 'SameValue(1/2 - 1/2, 0)', True);
  Test({LINENUM}56340, 'SameValue(1.5 - 1.5, 0)', True);
  Test({LINENUM}56341, 'SameValue(i - i, 0)', True);
  Test({LINENUM}56342, 'SameValue("deathly" ~ " " ~ "hallows", "deathly hallows")', True);
  Test({LINENUM}56343, 'SameValue(¬false, true)', True);
  Test({LINENUM}56344, 'SameValue(❨1, 0, 0❩ + ❨0, 1, 0❩, ❨1, 1, 0❩)', True);
  Test({LINENUM}56345, 'SameValue(color("red"), rgb(1, 0, 0))', True);
  Test({LINENUM}56346, 'SameValue(color("red"), hsv(0, 1, 1))', True);
  Test({LINENUM}56347, 'SameValue(color("red"), hsl(0, 1, 0.5))', True);

  Test({LINENUM}56349, 'SameValue(7, 7.00000000000000027)', True);
  Test({LINENUM}56350, 'SameValue(❨5, 1E−20❩, ❨5, 7E−21❩)', True);
  Test({LINENUM}56351, 'SameValue(color("red"), rgb(0.999999999953, 0, 0))', True);

  Test({LINENUM}56353, 'SameValue(❨5, 3, 6❩, ❨5, 3 + i − i, 6❩)', True);
  Test({LINENUM}56354, 'SameValue(❨5, 3, 6 + i - i❩, ❨5, 3, 6❩)', True);
  Test({LINENUM}56355, 'SameValue(❨❨5, 3, 6❩❩, ❨❨5, 3 + i − i, 6❩❩)', True);
  Test({LINENUM}56356, 'SameValue(❨❨5, 3, 6 + i - i❩❩, ❨❨5, 3, 6❩❩)', True);

  Test({LINENUM}56358, 'SameValue(❨5, 3, 6❩, ❨5, 3.0001 + i − i, 6❩)', False);
  Test({LINENUM}56359, 'SameValue(❨5, 3, 6 + i - i❩, ❨5, 3.0001, 6❩)', False);
  Test({LINENUM}56360, 'SameValue(❨❨5, 3, 6❩❩, ❨❨5, 3.0001 + i − i, 6❩❩)', False);
  Test({LINENUM}56361, 'SameValue(❨❨5, 3, 6 + i - i❩❩, ❨❨5, 3.0001, 6❩❩)', False);

  Test({LINENUM}56363, 'SameValue(❨5, 3, 6❩, ❨5, 3.0001 + i − i, 6❩, 2E-6)', False);
  Test({LINENUM}56364, 'SameValue(❨5, 3, 6 + i - i❩, ❨5, 3.0001, 6❩, 2E-6)', False);
  Test({LINENUM}56365, 'SameValue(❨❨5, 3, 6❩❩, ❨❨5, 3.0001 + i − i, 6❩❩, 2E-6)', False);
  Test({LINENUM}56366, 'SameValue(❨❨5, 3, 6 + i - i❩❩, ❨❨5, 3.0001, 6❩❩, 2E-6)', False);

  Test({LINENUM}56368, 'SameValue(❨5, 3, 6❩, ❨5, 3.0001 + i − i, 6❩, 2E-5)', False);
  Test({LINENUM}56369, 'SameValue(❨5, 3, 6 + i - i❩, ❨5, 3.0001, 6❩, 2E-5)', False);
  Test({LINENUM}56370, 'SameValue(❨❨5, 3, 6❩❩, ❨❨5, 3.0001 + i − i, 6❩❩, 2E-5)', False);
  Test({LINENUM}56371, 'SameValue(❨❨5, 3, 6 + i - i❩❩, ❨❨5, 3.0001, 6❩❩, 2E-5)', False);

  Test({LINENUM}56373, 'SameValue(❨5, 3, 6❩, ❨5, 3.0001 + i − i, 6❩, 2E-4)', True);
  Test({LINENUM}56374, 'SameValue(❨5, 3, 6 + i - i❩, ❨5, 3.0001, 6❩, 2E-4)', True);
  Test({LINENUM}56375, 'SameValue(❨❨5, 3, 6❩❩, ❨❨5, 3.0001 + i − i, 6❩❩, 2E-4)', True);
  Test({LINENUM}56376, 'SameValue(❨❨5, 3, 6 + i - i❩❩, ❨❨5, 3.0001, 6❩❩, 2E-4)', True);

  Test({LINENUM}56378, 'SameValue(5, 6)', False);
  Test({LINENUM}56379, 'SameValue(127/128, 129/128)', False);
  Test({LINENUM}56380, 'SameValue(127/128, -127/128)', False);
  Test({LINENUM}56381, 'SameValue(3.1415, 3.141592653589793238)', False);
  Test({LINENUM}56382, 'SameValue(-5.1, 5.1)', False);
  Test({LINENUM}56383, 'SameValue(7E8, 7.00002E8)', False);
  Test({LINENUM}56384, 'SameValue(2.5E20, 2.5E-20)', False);
  Test({LINENUM}56385, 'SameValue(-5.1E10, -5.1000023E10)', False);
  Test({LINENUM}56386, 'SameValue("cat", "dog")', False);
  Test({LINENUM}56387, 'SameValue("hippogriff", "hippogriffs")', False);
  Test({LINENUM}56388, 'SameValue(true, false)', False);
  Test({LINENUM}56389, 'SameValue(false, true)', False);
  Test({LINENUM}56390, 'SameValue(❨1, 2, 3❩, ❨-1, 2, 3❩)', False);
  Test({LINENUM}56391, 'SameValue(❨❨5, 2❩, ❨1, 1❩❩, ❨❨5, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}56392, 'SameValue(❨i, 2, 3❩, ❨0, 2, 3❩)', False);
  Test({LINENUM}56393, 'SameValue(❨❨i, 2❩, ❨i, 1❩❩, ❨❨i, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}56394, 'SameValue(''(1, 2.1, 3), ''(1, 2, 3))', False);
  Test({LINENUM}56395, 'SameValue(''(1, 2, 3, "Vera Verto"), ''(i))', False);
  Test({LINENUM}56396, 'SameValue({1, 2, 3}, {1, 2, 4})', failure, 'Sets cannot be compared with epsilons.');
  Test({LINENUM}56397, 'SameValue(color("red"), color("green"))', False);
  Test({LINENUM}56398, 'SameValue(date(), time())', False);
  Test({LINENUM}56399, 'SameValue(0, (0;))', False);
  Test({LINENUM}56400, 'SameValue(ColorGradient(256, 256, color("red"), color("green")), ColorGradient(256, 257, color("red"), color("green")))', False);
  Test({LINENUM}56401, 'SameValue(ColorGradient(256, 256, color("red"), color("green")), ColorGradient(256, 256, color("red"), color("yellow")))', False);
  Test({LINENUM}56402, 'SameValue(SineTone(400), SineTone(401))', False);
  Test({LINENUM}56403, 'SameValue(unprotect(ans), 0)', False);

  Test({LINENUM}56405, 'SameValue(1/2 - 1/3, 0)', False);
  Test({LINENUM}56406, 'SameValue(1.5 - 1.6, 0)', False);
  Test({LINENUM}56407, 'SameValue(i - 1, 0)', False);
  Test({LINENUM}56408, 'SameValue("deathly" ~ " " ~ "hallows", "deadly hallows")', False);
  Test({LINENUM}56409, 'SameValue(¬false, ¬¬¬true)', False);
  Test({LINENUM}56410, 'SameValue(❨1, 0, 0❩ + ❨0, 0, 1❩, ❨1, 1, 0❩)', False);
  Test({LINENUM}56411, 'SameValue(color("red"), rgb(0.8, 0, 0))', False);
  Test({LINENUM}56412, 'SameValue(color("red"), hsv(0, 0.8, 1))', False);
  Test({LINENUM}56413, 'SameValue(color("red"), hsl(0, 1, 0.6))', False);

  Test({LINENUM}56415, 'SameValue(7, 7.0000000027)', False);
  Test({LINENUM}56416, 'SameValue(❨5, 1E20❩, ❨5, 7E−21❩)', False);
  Test({LINENUM}56417, 'SameValue(color("red"), rgb(0.99, 0, 0))', False);

  Test({LINENUM}56419, 'SameValue(5, "rat")', False);
  Test({LINENUM}56420, 'SameValue(127/128, "cat")', False);
  Test({LINENUM}56421, 'SameValue(3.1415, "dog")', False);
  Test({LINENUM}56422, 'SameValue(-5.1, "hippogriff")', False);
  Test({LINENUM}56423, 'SameValue(7E8, 5)', False);
  Test({LINENUM}56424, 'SameValue(2.5E-20, 1/2)', False);
  Test({LINENUM}56425, 'SameValue(-5.1E10, true)', False);
  Test({LINENUM}56426, 'SameValue("cat", ❨3, 5❩)', False);
  Test({LINENUM}56427, 'SameValue("hippogriff", time())', False);
  Test({LINENUM}56428, 'SameValue(true, "true")', False);
  Test({LINENUM}56429, 'SameValue(false, 0)', False);
  Test({LINENUM}56430, 'SameValue(❨1, 2, 3❩, ❨❨1, 2, 3❩, ❨1, 2, 3❩, ❨1, 2, 3❩❩)', False);
  Test({LINENUM}56431, 'SameValue(❨❨5, 2❩, ❨0, 1❩❩, color("red"))', False);
  Test({LINENUM}56432, 'SameValue(❨i, 2, 3❩, date())', False);
  Test({LINENUM}56433, 'SameValue(❨❨i, 2❩, ❨0, 1❩❩, SineTone(400))', False);
  Test({LINENUM}56434, 'SameValue(''(1, 2, 3), (0;))', False);
  Test({LINENUM}56435, 'SameValue(''(1, 2, 3, "Vera Verto"), ''())', False);
  Test({LINENUM}56436, 'SameValue(color("red"), 123)', False);
  Test({LINENUM}56437, 'SameValue(date(), "date")', False);
  Test({LINENUM}56438, 'SameValue((0;), false)', False);
  Test({LINENUM}56439, 'SameValue(ColorGradient(256, 256, color("red"), color("green")), IdentityMatrix(100))', False);
  Test({LINENUM}56440, 'SameValue(SineTone(400), exp(1))', False);
  Test({LINENUM}56441, 'SameValue(unprotect(ans), 1)', False);

  Test({LINENUM}56443, 'SameValue(7.6492341, 7.6495123)', False);
  Test({LINENUM}56444, 'SameValue(7.6492341, 7.6495123, 1E-6)', False);
  Test({LINENUM}56445, 'SameValue(7.6492341, 7.6495123, 1E-5)', False);
  Test({LINENUM}56446, 'SameValue(7.6492341, 7.6495123, 1E-4)', False);
  Test({LINENUM}56447, 'SameValue(7.6492341, 7.6495123, 1E-3)', True);
  Test({LINENUM}56448, 'SameValue(7.6492341, 7.6495123, 1E-2)', True);
  Test({LINENUM}56449, 'SameValue(7.6492341, 7.6495123, 1E-1)', True);

  Test({LINENUM}56451, 'SameValue(3.1415, 3.1415926535897932384626)', False);
  Test({LINENUM}56452, 'SameValue(3.1415, 3.1415926535897932384626, 1E-6)', False);
  Test({LINENUM}56453, 'SameValue(3.1415, 3.1415926535897932384626, 1E-5)', False);
  Test({LINENUM}56454, 'SameValue(3.1415, 3.1415926535897932384626, 1E-4)', True);
  Test({LINENUM}56455, 'SameValue(3.1415, 3.1415926535897932384626, 1E-3)', True);
  Test({LINENUM}56456, 'SameValue(3.1415, 3.1415926535897932384626, 1E-2)', True);
  Test({LINENUM}56457, 'SameValue(3.1415, 3.1415926535897932384626, 1E-1)', True);
  Test({LINENUM}56458, 'SameValue(3.1415, 3.1415926535897932384626, 1)', True);

  Test({LINENUM}56460, 'SameValue(5 + i, 5.0000023 + i)', False);
  Test({LINENUM}56461, 'SameValue(5 + i, 5.0000023 + i, 1E-6)', False);
  Test({LINENUM}56462, 'SameValue(5 + i, 5.0000023 + i, 1E-5)', True);
  Test({LINENUM}56463, 'SameValue(5 + i, 5.0000023 + i, 1E-4)', True);
  Test({LINENUM}56464, 'SameValue(5 + i, 5.0000023 + i, 1E-3)', True);
  Test({LINENUM}56465, 'SameValue(5 + i, 5.0000023 + i, 1E-2)', True);
  Test({LINENUM}56466, 'SameValue(5 + i, 5.0000023 + i, 1E-1)', True);

  Test({LINENUM}56468, 'SameValue(5 + i, 5 + 0.9999523⋅i)', False);
  Test({LINENUM}56469, 'SameValue(5 + i, 5 + 0.9999523⋅i, 1E-6)', False);
  Test({LINENUM}56470, 'SameValue(5 + i, 5 + 0.9999523⋅i, 1E-5)', False);
  Test({LINENUM}56471, 'SameValue(5 + i, 5 + 0.9999523⋅i, 1E-4)', True);
  Test({LINENUM}56472, 'SameValue(5 + i, 5 + 0.9999523⋅i, 1E-3)', True);
  Test({LINENUM}56473, 'SameValue(5 + i, 5 + 0.9999523⋅i, 1E-2)', True);
  Test({LINENUM}56474, 'SameValue(5 + i, 5 + 0.9999523⋅i, 1E-1)', True);

  Test({LINENUM}56476, 'SameValue(❨0.515093362425, 0.691668689949, 0.0145804323256❩, ❨0.515057811471, 0.691663156165, 0.0145881118847❩)', False);
  Test({LINENUM}56477, 'SameValue(❨0.515093362425, 0.691668689949, 0.0145804323256❩, ❨0.515057811471, 0.691663156165, 0.0145881118847❩, 1E-6)', False);
  Test({LINENUM}56478, 'SameValue(❨0.515093362425, 0.691668689949, 0.0145804323256❩, ❨0.515057811471, 0.691663156165, 0.0145881118847❩, 1E-5)', False);
  Test({LINENUM}56479, 'SameValue(❨0.515093362425, 0.691668689949, 0.0145804323256❩, ❨0.515057811471, 0.691663156165, 0.0145881118847❩, 1E-4)', True);
  Test({LINENUM}56480, 'SameValue(❨0.515093362425, 0.691668689949, 0.0145804323256❩, ❨0.515057811471, 0.691663156165, 0.0145881118847❩, 1E-3)', True);
  Test({LINENUM}56481, 'SameValue(❨0.515093362425, 0.691668689949, 0.0145804323256❩, ❨0.515057811471, 0.691663156165, 0.0145881118847❩, 1E-2)', True);
  Test({LINENUM}56482, 'SameValue(❨0.515093362425, 0.691668689949, 0.0145804323256❩, ❨0.515057811471, 0.691663156165, 0.0145881118847❩, 1E-1)', True);

  Test({LINENUM}56484, 'SameValue(❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩, ❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩)', False);
  Test({LINENUM}56485, 'SameValue(❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩, ❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩, 1E-6)', False);
  Test({LINENUM}56486, 'SameValue(❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩, ❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩, 1E-5)', False);
  Test({LINENUM}56487, 'SameValue(❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩, ❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩, 1E-4)', True);
  Test({LINENUM}56488, 'SameValue(❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩, ❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩, 1E-3)', True);
  Test({LINENUM}56489, 'SameValue(❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩, ❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩, 1E-2)', True);
  Test({LINENUM}56490, 'SameValue(❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩, ❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩, 1E-1)', True);

  Test({LINENUM}56492, 'SameValue(❨❨0.515093362425, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471, 0.691663156165, 0.0145881118847❩❩)', False);
  Test({LINENUM}56493, 'SameValue(❨❨0.515093362425, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471, 0.691663156165, 0.0145881118847❩❩, 1E-6)', False);
  Test({LINENUM}56494, 'SameValue(❨❨0.515093362425, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471, 0.691663156165, 0.0145881118847❩❩, 1E-5)', False);
  Test({LINENUM}56495, 'SameValue(❨❨0.515093362425, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471, 0.691663156165, 0.0145881118847❩❩, 1E-4)', True);
  Test({LINENUM}56496, 'SameValue(❨❨0.515093362425, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471, 0.691663156165, 0.0145881118847❩❩, 1E-3)', True);
  Test({LINENUM}56497, 'SameValue(❨❨0.515093362425, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471, 0.691663156165, 0.0145881118847❩❩, 1E-2)', True);
  Test({LINENUM}56498, 'SameValue(❨❨0.515093362425, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471, 0.691663156165, 0.0145881118847❩❩, 1E-1)', True);

  Test({LINENUM}56500, 'SameValue(❨❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩❩)', False);
  Test({LINENUM}56501, 'SameValue(❨❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩❩, 1E-6)', False);
  Test({LINENUM}56502, 'SameValue(❨❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩❩, 1E-5)', False);
  Test({LINENUM}56503, 'SameValue(❨❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩❩, 1E-4)', True);
  Test({LINENUM}56504, 'SameValue(❨❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩❩, 1E-3)', True);
  Test({LINENUM}56505, 'SameValue(❨❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩❩, 1E-2)', True);
  Test({LINENUM}56506, 'SameValue(❨❨0.515093362425⋅i, 0.691668689949, 0.0145804323256❩❩, ❨❨0.515057811471⋅i, 0.691663156165, 0.0145881118847❩❩, 1E-1)', True);

  Test({LINENUM}56508, 'SameValue(''(3.141592, true, "Technically, it’s a ferret."), ''(3.1415926535897932384626, true, "Technically, it’s a ferret."))', False);
  Test({LINENUM}56509, 'SameValue(''(3.141592, true, "Technically, it’s a ferret."), ''(3.1415926535897932384626, true, "Technically, it’s a ferret."), 1E-8)', False);
  Test({LINENUM}56510, 'SameValue(''(3.141592, true, "Technically, it’s a ferret."), ''(3.1415926535897932384626, true, "Technically, it’s a ferret."), 1E-7)', False);
  Test({LINENUM}56511, 'SameValue(''(3.141592, true, "Technically, it’s a ferret."), ''(3.1415926535897932384626, true, "Technically, it’s a ferret."), 1E-6)', True);
  Test({LINENUM}56512, 'SameValue(''(3.141592, true, "Technically, it’s a ferret."), ''(3.1415926535897932384626, true, "Technically, it’s a ferret."), 1E-5)', True);
  Test({LINENUM}56513, 'SameValue(''(3.141592, true, "Technically, it’s a ferret."), ''(3.1415926535897932384626, true, "Technically, it’s a ferret."), 1E-4)', True);
  Test({LINENUM}56514, 'SameValue(''(3.141592, true, "Technically, it’s a ferret."), ''(3.1415926535897932384626, true, "Technically, it’s a ferret."), 1E-3)', True);
  Test({LINENUM}56515, 'SameValue(''(3.141592, true, "Technically, it’s a ferret."), ''(3.1415926535897932384626, true, "Technically, it’s a ferret."), 1E-2)', True);
  Test({LINENUM}56516, 'SameValue(''(3.141592, true, "Technically, it’s a ferret."), ''(3.1415926535897932384626, true, "Technically, it’s a ferret."), 1E-1)', True);
  Test({LINENUM}56517, 'SameValue(''(3.141592, true, "Technically, it’s a ferret."), ''(3.1415926535897932384626, true, "Is that a student?!"), 1E-1)', False);

  Test({LINENUM}56519, 'CompareValue(5, 5)', 0);
  Test({LINENUM}56520, 'CompareValue(127/128, 127/128)', 0);
  Test({LINENUM}56521, 'CompareValue(3.1415, 3.1415)', 0);
  Test({LINENUM}56522, 'CompareValue(-5.1, -5.1)', 0);
  Test({LINENUM}56523, 'CompareValue(7E8, 7E8)', 0);
  Test({LINENUM}56524, 'CompareValue(2.5E-20, 2.5E-20)', 0);
  Test({LINENUM}56525, 'CompareValue(-5.1E10, -5.1E10)', 0);
  Test({LINENUM}56526, 'CompareValue("cat", "cat")', 0);
  Test({LINENUM}56527, 'CompareValue("hippogriff", "hippogriff")', 0);
  Test({LINENUM}56528, 'CompareValue(true, true)', 0);
  Test({LINENUM}56529, 'CompareValue(false, false)', 0);
  Test({LINENUM}56530, 'CompareValue(❨1, 2, 3❩, ❨1, 2, 3❩)', 0);
  Test({LINENUM}56531, 'CompareValue(❨❨5, 2❩, ❨0, 1❩❩, ❨❨5, 2❩, ❨0, 1❩❩)', 0);
  Test({LINENUM}56532, 'CompareValue(❨i, 2, 3❩, ❨i, 2, 3❩)', 0);
  Test({LINENUM}56533, 'CompareValue(❨❨i, 2❩, ❨0, 1❩❩, ❨❨i, 2❩, ❨0, 1❩❩)', 0);
  Test({LINENUM}56534, 'CompareValue(''(1, 2, 3), ''(1, 2, 3))', 0);
  Test({LINENUM}56535, 'CompareValue(''(1, 2, 3, "Vera Verto"), ''(1, 2, 3, "Vera Verto"))', 0);
  Test({LINENUM}56536, 'CompareValue({1, 2, 3}, {1, 2, 3})', failure, 'Sets have no default order.');
  Test({LINENUM}56537, 'CompareValue(color("red"), color("red"))', 0);
  AvoidDateChange; Test({LINENUM}56538, 'CompareValue(date(), date())', 0);
  Test({LINENUM}56539, 'CompareValue((0;), (0;))', 0);
  Test({LINENUM}56540, 'CompareValue(ColorGradient(256, 256, color("red"), color("green")), ColorGradient(256, 256, color("red"), color("green")))', 0);
  Test({LINENUM}56541, 'CompareValue(SineTone(400), SineTone(400))', 0);
  Test({LINENUM}56542, 'CompareValue(unprotect(ans), unprotect(ans))', 0);

  Test({LINENUM}56544, 'CompareValue(1/2 - 1/2, 0)', 0);
  Test({LINENUM}56545, 'CompareValue(1.5 - 1.5, 0)', 0);
  Test({LINENUM}56546, 'CompareValue(i - i, 0)', 0);
  Test({LINENUM}56547, 'CompareValue("deathly" ~ " " ~ "hallows", "deathly hallows")', 0);
  Test({LINENUM}56548, 'CompareValue(¬false, true)', 0);
  Test({LINENUM}56549, 'CompareValue(❨1, 0, 0❩ + ❨0, 1, 0❩, ❨1, 1, 0❩)', 0);
  Test({LINENUM}56550, 'CompareValue(color("red"), rgb(1, 0, 0))', 0);
  Test({LINENUM}56551, 'CompareValue(color("red"), hsv(0, 1, 1))', 0);
  Test({LINENUM}56552, 'CompareValue(color("red"), hsl(0, 1, 0.5))', 0);

  Test({LINENUM}56554, 'CompareValue(7, 7.00000000000000027)', 0);
  Test({LINENUM}56555, 'CompareValue(❨5, 1E−20❩, ❨5, 7E−21❩)', 0);

  Test({LINENUM}56557, 'CompareValue(❨5, 3, 6❩, ❨5, 3 + i − i, 6❩)', 0);
  Test({LINENUM}56558, 'CompareValue(❨5, 3, 6 + i - i❩, ❨5, 3, 6❩)', 0);
  Test({LINENUM}56559, 'CompareValue(❨❨5, 3, 6❩❩, ❨❨5, 3 + i − i, 6❩❩)', 0);
  Test({LINENUM}56560, 'CompareValue(❨❨5, 3, 6 + i - i❩❩, ❨❨5, 3, 6❩❩)', 0);

  Test({LINENUM}56562, 'CompareValue(5, 6)', -1);
  Test({LINENUM}56563, 'CompareValue(5, 5.0)', 0);
  Test({LINENUM}56564, 'CompareValue(5, 4.0)', 1);
  Test({LINENUM}56565, 'CompareValue(5.0, 6)', -1);
  Test({LINENUM}56566, 'CompareValue(5.0, 5)', 0);
  Test({LINENUM}56567, 'CompareValue(5.0, 4)', 1);

  Test({LINENUM}56569, 'CompareValue(5, "cat")', -1);
  Test({LINENUM}56570, 'CompareValue("dog", 7)', 1);
  Test({LINENUM}56571, 'CompareValue("nargle", 0)', 1);

  Test({LINENUM}56573, 'CompareValue("cat", "dog")', -1);
  Test({LINENUM}56574, 'CompareValue("dog", "nargle")', -1);
  Test({LINENUM}56575, 'CompareValue("nargle", "owl")', -1);
  Test({LINENUM}56576, 'CompareValue("nargle", "dog")', 1);
  Test({LINENUM}56577, 'CompareValue("nargle", "cat")', 1);
  Test({LINENUM}56578, 'CompareValue("cat", "cat")', 0);

  Test({LINENUM}56580, 'CompareValue(date(2020, 05, 09), date(2020, 05, 10))', -1);
  Test({LINENUM}56581, 'CompareValue(date(2020, 05, 09), date(2020, 05, 09))', 0);
  Test({LINENUM}56582, 'CompareValue(date(2020, 05, 10), date(2020, 05, 09))', 1);
  Test({LINENUM}56583, 'CompareValue(date(2020, 04, 10), date(2020, 05, 09))', -1);
  Test({LINENUM}56584, 'CompareValue(date(2019, 05, 10), date(2020, 05, 09))', -1);


  //
  // Additional L-value-modifying functions
  //

  // inc and dec

  Test({LINENUM}56593, 'n ≔ 0', 0);
  Test({LINENUM}56594, 'inc(n)', 1);
  Test({LINENUM}56595, 'n', 1);
  Test({LINENUM}56596, 'inc(n)', 2);
  Test({LINENUM}56597, 'n', 2);
  Test({LINENUM}56598, 'inc(n)', 3);
  Test({LINENUM}56599, 'n', 3);
  Test({LINENUM}56600, 'inc(n, 5)', 8);
  Test({LINENUM}56601, 'n', 8);
  Test({LINENUM}56602, 'inc(n, 2)', 10);
  Test({LINENUM}56603, 'n', 10);
  Test({LINENUM}56604, 'inc(n, -5)', 5);
  Test({LINENUM}56605, 'n', 5);
  Test({LINENUM}56606, 'inc(n)', 6);
  Test({LINENUM}56607, 'n', 6);
  Test({LINENUM}56608, 'inc(n, 10)', 16);
  Test({LINENUM}56609, 'n', 16);
  Test({LINENUM}56610, 'inc(n, -6)', 10);
  Test({LINENUM}56611, 'n', 10);
  Test({LINENUM}56612, 'inc(n, -10)', 0);
  Test({LINENUM}56613, 'n', 0);
  Test({LINENUM}56614, 'inc(n, -10)', -10);
  Test({LINENUM}56615, 'n', -10);
  Test({LINENUM}56616, 'inc(n, 3)', -7);
  Test({LINENUM}56617, 'n', -7);
  Test({LINENUM}56618, 'dec(n)', -8);
  Test({LINENUM}56619, 'n', -8);
  Test({LINENUM}56620, 'dec(n)', -9);
  Test({LINENUM}56621, 'n', -9);
  Test({LINENUM}56622, 'dec(n)', -10);
  Test({LINENUM}56623, 'n', -10);
  Test({LINENUM}56624, 'dec(n, 5)', -15);
  Test({LINENUM}56625, 'n', -15);
  Test({LINENUM}56626, 'dec(n, 5)', -20);
  Test({LINENUM}56627, 'n', -20);
  Test({LINENUM}56628, 'dec(n, -10)', -10);
  Test({LINENUM}56629, 'n', -10);
  Test({LINENUM}56630, 'dec(n, -5)', -5);
  Test({LINENUM}56631, 'n', -5);
  Test({LINENUM}56632, 'dec(n, -2)', -3);
  Test({LINENUM}56633, 'n', -3);
  Test({LINENUM}56634, 'dec(n, -3)', 0);
  Test({LINENUM}56635, 'n', 0);
  Test({LINENUM}56636, 'dec(n, -7)', 7);
  Test({LINENUM}56637, 'n', 7);
  Test({LINENUM}56638, 'dec(n)', 6);
  Test({LINENUM}56639, 'n', 6);
  Test({LINENUM}56640, 'dec(n)', 5);
  Test({LINENUM}56641, 'n', 5);
  Test({LINENUM}56642, 'dec(n, 3)', 2);
  Test({LINENUM}56643, 'n', 2);
  Test({LINENUM}56644, 'dec(n, 2)', 0);
  Test({LINENUM}56645, 'n', 0);
  Test({LINENUM}56646, 'dec(n, 1)', -1);
  Test({LINENUM}56647, 'n', -1);
  Test({LINENUM}56648, 'dec(n, -11)', 10);
  Test({LINENUM}56649, 'n', 10);
  Test({LINENUM}56650, 'dec(n)', 9);
  Test({LINENUM}56651, 'n', 9);
  Test({LINENUM}56652, 'inc(n, 1)', 10);
  Test({LINENUM}56653, 'n', 10);
  Test({LINENUM}56654, 'inc(n)', 11);
  Test({LINENUM}56655, 'n', 11);
  Test({LINENUM}56656, 'inc(n, 100)', 111);
  Test({LINENUM}56657, 'n', 111);
  Test({LINENUM}56658, 'dec(n, 11)', 100);
  Test({LINENUM}56659, 'n', 100);

  Test({LINENUM}56661, 'inc(n, 0.5)', failure, 'An object of type integer was expected as argument 2, but an object of type real number was given.');
  Test({LINENUM}56662, 'n', 100);
  Test({LINENUM}56663, 'inc(n, 1/0)', failure, 'Division by zero');
  Test({LINENUM}56664, 'n', 100);

  Test({LINENUM}56666, 'delete(n)', success);
  Test({LINENUM}56667, 'inc(n)', failure, 'Unknown identifier "n".');
  Test({LINENUM}56668, 'inc(n, 2)', failure, 'Unknown identifier "n".');
  Test({LINENUM}56669, 'dec(n)', failure, 'Unknown identifier "n".');
  Test({LINENUM}56670, 'dec(n, 2)', failure, 'Unknown identifier "n".');

  Test({LINENUM}56672, 'n ≔ 5', 5);
  Test({LINENUM}56673, 'inc(n)', 6);
  Test({LINENUM}56674, 'dec(n, 4)', 2);
  Test({LINENUM}56675, 'inc(n, 8)', 10);
  Test({LINENUM}56676, 'dec(n)', 9);
  Test({LINENUM}56677, 'n', 9);
  Test({LINENUM}56678, 'protect(n)', success);
  Test({LINENUM}56679, 'inc(n)', failure, 'Left side cannot be assigned to.'); // Would prefer "Cannot modify or delete protected variable "n"."
  Test({LINENUM}56680, 'n', 9);
  Test({LINENUM}56681, 'unprotect(n)', success);
  Test({LINENUM}56682, 'inc(n)', 10);
  Test({LINENUM}56683, 'n', 10);
  Test({LINENUM}56684, 'protect(n)', success);
  Test({LINENUM}56685, 'dec(n, 2)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}56686, 'n', 10);
  Test({LINENUM}56687, 'unprotect(n)', success);
  Test({LINENUM}56688, 'dec(n, 2)', 8);
  Test({LINENUM}56689, 'n', 8);

  Test({LINENUM}56691, 'x ≔ 5.1', 5.1);
  Test({LINENUM}56692, 'inc(x)', 6.1);
  Test({LINENUM}56693, 'x', 6.1);
  Test({LINENUM}56694, 'inc(x)', 7.1);
  Test({LINENUM}56695, 'inc(x, 3)', 10.1);
  Test({LINENUM}56696, 'dec(x)', 9.1);
  Test({LINENUM}56697, 'dec(x)', 8.1);
  Eps; Test({LINENUM}56698, 'dec(x, 6)', 2.1);
  Eps; Test({LINENUM}56699, 'x', 2.1);

  Test({LINENUM}56701, 'q ≔ 1/2', rat(1, 2));
  Test({LINENUM}56702, 'inc(q)', rat(3, 2));
  Test({LINENUM}56703, 'inc(q)', rat(5, 2));
  Test({LINENUM}56704, 'inc(q)', rat(7, 2));
  Test({LINENUM}56705, 'q', rat(7, 2));
  Test({LINENUM}56706, 'inc(q, 2)', rat(11, 2));
  Test({LINENUM}56707, 'inc(q, -1)', rat(9, 2));
  Test({LINENUM}56708, 'dec(q)', rat(7, 2));
  Test({LINENUM}56709, 'dec(q)', rat(5, 2));
  Test({LINENUM}56710, 'q', rat(5, 2));
  Test({LINENUM}56711, 'dec(q, 2)', rat(1, 2));
  Test({LINENUM}56712, 'dec(q)', rat(-1, 2));
  Test({LINENUM}56713, 'q', rat(-1, 2));

  Test({LINENUM}56715, 'z ≔ 1 + i', 1 + ImaginaryUnit);
  Test({LINENUM}56716, 'inc(z)', 2 + ImaginaryUnit);
  Test({LINENUM}56717, 'z', 2 + ImaginaryUnit);
  Test({LINENUM}56718, 'inc(z, 8)', 10 + ImaginaryUnit);
  Test({LINENUM}56719, 'z', 10 + ImaginaryUnit);
  Test({LINENUM}56720, 'dec(z)', 9 + ImaginaryUnit);
  Test({LINENUM}56721, 'dec(z, 5)', 4 + ImaginaryUnit);
  Test({LINENUM}56722, 'z', 4 + ImaginaryUnit);
  Test({LINENUM}56723, 'inc(z, -4)', ImaginaryUnit);
  Test({LINENUM}56724, 'z', ImaginaryUnit);

  Test({LINENUM}56726, 's ≔ "nargle"', 'nargle');
  Test({LINENUM}56727, 'inc(s)', failure, 'An object of type number was expected as argument 1, but an object of type string was given.');

  Test({LINENUM}56729, 'delete(n); delete(x); delete(q); delete(z); delete(s)', success);

  Test({LINENUM}56731, 'inc(5)', failure, 'Left side cannot be assigned to.');

  // VarAppend

  Test({LINENUM}56735, 'v ≔ ❨5, 3❩', [5, 3]);
  Test({LINENUM}56736, 'VarAppend(v, 2)', success);
  Test({LINENUM}56737, 'v', [5, 3, 2]);
  Test({LINENUM}56738, 'VarAppend(v, -10)', success);
  Test({LINENUM}56739, 'v', [5, 3, 2, -10]);
  Test({LINENUM}56740, 'VarAppend(v, 1024)', success);
  Test({LINENUM}56741, 'v', [5, 3, 2, -10, 1024]);
  Test({LINENUM}56742, 'VarAppend(v, 5.2)', success);
  Test({LINENUM}56743, 'v', [5, 3, 2, -10, 1024, 5.2]);
  Test({LINENUM}56744, 'VarAppend(v, "cat")', failure, 'Object isn''t a real number.');
  Test({LINENUM}56745, 'VarAppend(v, 1 + i)', failure, 'Object isn''t a real number.');
  Test({LINENUM}56746, 'v', [5, 3, 2, -10, 1024, 5.2]);
  Test({LINENUM}56747, 'protect(v)', success);
  Test({LINENUM}56748, 'VarAppend(v, 3.14)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}56749, 'v', [5, 3, 2, -10, 1024, 5.2]);
  Test({LINENUM}56750, 'unprotect(v)', success);
  Test({LINENUM}56751, 'VarAppend(v, 3.14)', success);
  Test({LINENUM}56752, 'v', [5, 3, 2, -10, 1024, 5.2, 3.14]);
  Test({LINENUM}56753, 'delete(v)', success);
  Test({LINENUM}56754, 'VarAppend(v, 394)', failure, 'Unknown identifier "v".');

  Test({LINENUM}56756, 'v ≔ ❨i, 3❩', [ImaginaryUnit, 3]);
  Test({LINENUM}56757, 'VarAppend(v, 2)', success);
  Test({LINENUM}56758, 'v', [ImaginaryUnit, 3, 2]);
  Test({LINENUM}56759, 'VarAppend(v, -10)', success);
  Test({LINENUM}56760, 'v', [ImaginaryUnit, 3, 2, -10]);
  Test({LINENUM}56761, 'VarAppend(v, 1024)', success);
  Test({LINENUM}56762, 'v', [ImaginaryUnit, 3, 2, -10, 1024]);
  Test({LINENUM}56763, 'VarAppend(v, 5.2)', success);
  Test({LINENUM}56764, 'v', [ImaginaryUnit, 3, 2, -10, 1024, 5.2]);
  Test({LINENUM}56765, 'VarAppend(v, "cat")', failure, 'Object isn''t a complex number.');
  Test({LINENUM}56766, 'VarAppend(v, 1 + i)', success);
  Test({LINENUM}56767, 'v', [ImaginaryUnit, 3, 2, -10, 1024, 5.2, 1 + ImaginaryUnit]);
  Test({LINENUM}56768, 'protect(v)', success);
  Test({LINENUM}56769, 'VarAppend(v, 3.14)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}56770, 'v', [ImaginaryUnit, 3, 2, -10, 1024, 5.2, 1 + ImaginaryUnit]);
  Test({LINENUM}56771, 'unprotect(v)', success);
  Test({LINENUM}56772, 'VarAppend(v, 3.14)', success);
  Test({LINENUM}56773, 'v', [ImaginaryUnit, 3, 2, -10, 1024, 5.2, 1 + ImaginaryUnit, 3.14]);
  Test({LINENUM}56774, 'delete(v)', success);
  Test({LINENUM}56775, 'VarAppend(v, 394)', failure, 'Unknown identifier "v".');

  Test({LINENUM}56777, 'A ≔ ❨❨5, 3❩, ❨4, 1❩❩', 2, [5, 3, 4, 1]);
  Test({LINENUM}56778, 'VarAppend(A, 6)', failure, 'Object type "real matrix" is not a suitable container.');

  Test({LINENUM}56780, 'A ≔ ❨❨5, 3❩, ❨4, i❩❩', 2, [5, 3, 4, ImaginaryUnit]);
  Test({LINENUM}56781, 'VarAppend(A, 6)', failure, 'Object type "complex matrix" is not a suitable container.');

  Test({LINENUM}56783, 'L ≔ ''(1, 2, 3)', asoarr([1, 2, 3]));
  Test({LINENUM}56784, 'VarAppend(L, 5)', success);
  Test({LINENUM}56785, 'L', asoarr([1, 2, 3, 5]));
  Test({LINENUM}56786, 'VarAppend(L, "cat")', success);
  Test({LINENUM}56787, 'L', asoarr([1, 2, 3, 5, 'cat']));
  Test({LINENUM}56788, 'VarAppend(L, true)', success);
  Test({LINENUM}56789, 'L', asoarr([1, 2, 3, 5, 'cat', True]));
  Test({LINENUM}56790, 'protect(L)', success);
  Test({LINENUM}56791, 'VarAppend(L, "dog")', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}56792, 'L', asoarr([1, 2, 3, 5, 'cat', True]));
  Test({LINENUM}56793, 'unprotect(L)', success);
  Test({LINENUM}56794, 'VarAppend(L, "dog")', success);
  Test({LINENUM}56795, 'L', asoarr([1, 2, 3, 5, 'cat', True, 'dog']));
  Test({LINENUM}56796, 'VarAppend(L, ''(3, 1, 4, 1, 5))', success);
  Test({LINENUM}56797, 'L', asoarrex([ASOInt(1), ASOInt(2), ASOInt(3), ASOInt(5), ASO('cat'), ASO(True), ASO('dog'), intarr([3, 1, 4, 1, 5])]));

  Test({LINENUM}56799, 'S ≔ {1, 2, 3}', asoset([1, 2, 3]));
  Test({LINENUM}56800, 'VarAppend(S, 4)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}56802, 's ≔ "Hello, World"', 'Hello, World');
  Test({LINENUM}56803, 'VarAppend(s, "!")', success);
  Test({LINENUM}56804, 's', 'Hello, World!');
  Test({LINENUM}56805, 'VarAppend(s, "!!!")', failure, 'A string of length 3 cannot be converted to a character.');
  Test({LINENUM}56806, 'VarAppend(s, true)', failure, 'An object of type "boolean" cannot be converted to a character.');

  Test({LINENUM}56808, 'delete(A); delete(L); delete(S); delete(s)', success);

  // VarExtendWith

  Test({LINENUM}56812, 'v ≔ ❨3, 1, 4❩', [3, 1, 4]);
  Test({LINENUM}56813, 'VarExtendWith(v, ❨1, 5❩)', success);
  Test({LINENUM}56814, 'v', [3, 1, 4, 1, 5]);
  Test({LINENUM}56815, 'VarExtendWith(v, 9)', success);
  Test({LINENUM}56816, 'v', [3, 1, 4, 1, 5, 9]);
  Test({LINENUM}56817, 'VarExtendWith(v, 2)', success);
  Test({LINENUM}56818, 'v', [3, 1, 4, 1, 5, 9, 2]);
  Test({LINENUM}56819, 'VarExtendWith(v, ❨6, 5, 3, 5❩)', success);
  Test({LINENUM}56820, 'v', [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]);
  Test({LINENUM}56821, 'protect(v)', success);
  Test({LINENUM}56822, 'VarExtendWith(v, ❨8, 9, 7, 9❩)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}56823, 'v', [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]);
  Test({LINENUM}56824, 'unprotect(v)', success);
  Test({LINENUM}56825, 'VarExtendWith(v, ❨8, 9, 7, 9❩)', success);
  Test({LINENUM}56826, 'v', [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]);
  Test({LINENUM}56827, 'VarExtendWith(v, i)', failure, 'Object isn''t a real number.');
  Test({LINENUM}56828, 'VarExtendWith(v, ❨8, 9, 7, i❩)', failure, 'Complex vector cannot be converted to real vector because it contains a non-real component i.');
  Test({LINENUM}56829, 'VarExtendWith(v, "nargle")', failure, 'Cannot convert string "nargle" to a real number.');
  Test({LINENUM}56830, 'VarExtendWith(v, true)', failure, 'An object of type "boolean" cannot be converted to a real vector.');
  Test({LINENUM}56831, 'v', [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]);

  Test({LINENUM}56833, 'v ≔ ❨i, 1, 4❩', [ImaginaryUnit, 1, 4]);
  Test({LINENUM}56834, 'VarExtendWith(v, ❨1, 5❩)', success);
  Test({LINENUM}56835, 'v', [ImaginaryUnit, 1, 4, 1, 5]);
  Test({LINENUM}56836, 'VarExtendWith(v, 9)', success);
  Test({LINENUM}56837, 'v', [ImaginaryUnit, 1, 4, 1, 5, 9]);
  Test({LINENUM}56838, 'VarExtendWith(v, 2)', success);
  Test({LINENUM}56839, 'v', [ImaginaryUnit, 1, 4, 1, 5, 9, 2]);
  Test({LINENUM}56840, 'VarExtendWith(v, ❨6, 5, 3, 5❩)', success);
  Test({LINENUM}56841, 'v', [ImaginaryUnit, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]);
  Test({LINENUM}56842, 'protect(v)', success);
  Test({LINENUM}56843, 'VarExtendWith(v, ❨8, 9, 7, 9❩)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}56844, 'v', [ImaginaryUnit, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]);
  Test({LINENUM}56845, 'unprotect(v)', success);
  Test({LINENUM}56846, 'VarExtendWith(v, ❨8, 9, 7, 9❩)', success);
  Test({LINENUM}56847, 'v', [ImaginaryUnit, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]);
  Test({LINENUM}56848, 'VarExtendWith(v, i)', success);
  Test({LINENUM}56849, 'v', [ImaginaryUnit, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, ImaginaryUnit]);
  Test({LINENUM}56850, 'VarExtendWith(v, ❨8, 9, 7, i❩)', success);
  Test({LINENUM}56851, 'v', [ImaginaryUnit, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, ImaginaryUnit, 8, 9, 7, ImaginaryUnit]);
  Test({LINENUM}56852, 'VarExtendWith(v, "nargle")', failure, 'Cannot convert string "nargle" to a complex number.');
  Test({LINENUM}56853, 'VarExtendWith(v, true)', failure, 'An object of type "boolean" cannot be converted to a complex vector.');
  Test({LINENUM}56854, 'v', [ImaginaryUnit, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, ImaginaryUnit, 8, 9, 7, ImaginaryUnit]);

  Test({LINENUM}56856, 'A ≔ ❨❨3, 5❩, ❨1, 4❩❩;', null);
  Test({LINENUM}56857, 'VarExtendWith(A, 6)', failure, 'Object type "real matrix" is not a suitable container.');
  Test({LINENUM}56858, 'A ≔ ❨❨3, 5❩, ❨i, 4❩❩;', null);
  Test({LINENUM}56859, 'VarExtendWith(A, 6)', failure, 'Object type "complex matrix" is not a suitable container.');

  Test({LINENUM}56861, 's ≔ "Hello, World"', 'Hello, World');
  Test({LINENUM}56862, 'VarExtendWith(s, "!")', success);
  Test({LINENUM}56863, 's', 'Hello, World!');
  Test({LINENUM}56864, 'VarExtendWith(s, " How are you?")', success);
  Test({LINENUM}56865, 's', 'Hello, World! How are you?');
  Test({LINENUM}56866, 'VarExtendWith(s, " I''m fine!")', success);
  Test({LINENUM}56867, 's', 'Hello, World! How are you? I''m fine!');

  Test({LINENUM}56869, 'L ≔ ''(1, 2)', intarr([1, 2]));
  Test({LINENUM}56870, 'VarExtendWith(L, ''(3, "Vera Verto"))', success);
  Test({LINENUM}56871, 'L', asoarr([1, 2, 3, 'Vera Verto']));
  Test({LINENUM}56872, 'protect(L)', success);
  Test({LINENUM}56873, 'VarExtendWith(L, ''("!"))', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}56874, 'L', asoarr([1, 2, 3, 'Vera Verto']));
  Test({LINENUM}56875, 'unprotect(L)', success);
  Test({LINENUM}56876, 'VarExtendWith(L, ''("!"))', success);
  Test({LINENUM}56877, 'L', asoarr([1, 2, 3, 'Vera Verto', '!']));

  Test({LINENUM}56879, 'S ≔ {1, 2, 3}', asoset([1, 2, 3]));
  Test({LINENUM}56880, 'VarExtendWith(S, ''(4, 5, 6))', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}56882, 'VarExtendWith(❨1, 2, 3❩, ❨4, 5❩)', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}56884, 'delete(v); delete(A); delete(L); delete(S); delete(s)', success);

  // VarInsert

  Test({LINENUM}56888, 'v ≔ ❨1, 2, 3, 4, 5, 6, 7, 8, 9, 10❩', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  Test({LINENUM}56889, 'VarInsert(v, 1, 0)', success);
  Test({LINENUM}56890, 'v', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  Test({LINENUM}56891, 'VarInsert(v, 12, 11)', success);
  Test({LINENUM}56892, 'v', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);
  Test({LINENUM}56893, 'VarInsert(v, 7, 5.5)', success);
  Test({LINENUM}56894, 'v', [0, 1, 2, 3, 4, 5, 5.5, 6, 7, 8, 9, 10, 11]);
  Test({LINENUM}56895, 'VarInsert(v, −1, 12)', success);
  Test({LINENUM}56896, 'v', [0, 1, 2, 3, 4, 5, 5.5, 6, 7, 8, 9, 10, 11, 12]);
  Test({LINENUM}56897, 'VarInsert(v, 16, 13)', failure, 'Index 16 out of bounds.');
  Test({LINENUM}56898, 'VarInsert(v, -16, 13)', failure, 'Index -16 out of bounds.');
  Test({LINENUM}56899, 'VarInsert(v, 0, 13)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}56900, 'VarInsert(v, 394, 13)', failure, 'Index 394 out of bounds.');
  Test({LINENUM}56901, 'protect(v)', success);
  Test({LINENUM}56902, 'VarInsert(v, 15, 13)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}56903, 'v', [0, 1, 2, 3, 4, 5, 5.5, 6, 7, 8, 9, 10, 11, 12]);
  Test({LINENUM}56904, 'unprotect(v)', success);
  Test({LINENUM}56905, 'VarInsert(v, 15, 13)', success);
  Test({LINENUM}56906, 'v', [0, 1, 2, 3, 4, 5, 5.5, 6, 7, 8, 9, 10, 11, 12, 13]);
  Test({LINENUM}56907, 'VarInsert(v, −1, i)', failure, 'Object isn''t a real number.');
  Test({LINENUM}56908, 'VarInsert(v, −1, "test")', failure, 'Object isn''t a real number.');
  Test({LINENUM}56909, 'v', [0, 1, 2, 3, 4, 5, 5.5, 6, 7, 8, 9, 10, 11, 12, 13]);
  Test({LINENUM}56910, 'VarInsert(❨1, 2, 3❩, 2, 10)', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}56912, 'v ≔ ❨i, 2, 3, 4, 5, 6, 7, 8, 9, 10❩', [ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  Test({LINENUM}56913, 'VarInsert(v, 1, 0)', success);
  Test({LINENUM}56914, 'v', [0, ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  Test({LINENUM}56915, 'VarInsert(v, 12, 11)', success);
  Test({LINENUM}56916, 'v', [0, ImaginaryUnit, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);
  Test({LINENUM}56917, 'VarInsert(v, 7, 5.5)', success);
  Test({LINENUM}56918, 'v', [0, ImaginaryUnit, 2, 3, 4, 5, 5.5, 6, 7, 8, 9, 10, 11]);
  Test({LINENUM}56919, 'VarInsert(v, −1, 12)', success);
  Test({LINENUM}56920, 'v', [0, ImaginaryUnit, 2, 3, 4, 5, 5.5, 6, 7, 8, 9, 10, 11, 12]);
  Test({LINENUM}56921, 'VarInsert(v, 16, 13)', failure, 'Index 16 out of bounds.');
  Test({LINENUM}56922, 'VarInsert(v, -16, 13)', failure, 'Index -16 out of bounds.');
  Test({LINENUM}56923, 'VarInsert(v, 0, 13)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}56924, 'VarInsert(v, 394, 13)', failure, 'Index 394 out of bounds.');
  Test({LINENUM}56925, 'protect(v)', success);
  Test({LINENUM}56926, 'VarInsert(v, 15, 13)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}56927, 'v', [0, ImaginaryUnit, 2, 3, 4, 5, 5.5, 6, 7, 8, 9, 10, 11, 12]);
  Test({LINENUM}56928, 'unprotect(v)', success);
  Test({LINENUM}56929, 'VarInsert(v, 15, 13)', success);
  Test({LINENUM}56930, 'v', [0, ImaginaryUnit, 2, 3, 4, 5, 5.5, 6, 7, 8, 9, 10, 11, 12, 13]);
  Test({LINENUM}56931, 'VarInsert(v, −1, i)', success);
  Test({LINENUM}56932, 'VarInsert(v, −1, "test")', failure, 'Object isn''t a complex number.');
  Test({LINENUM}56933, 'v', [0, ImaginaryUnit, 2, 3, 4, 5, 5.5, 6, 7, 8, 9, 10, 11, 12, 13, ImaginaryUnit]);
  Test({LINENUM}56934, 'VarInsert(❨1, 2, 3❩, 2, 10)', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}56936, 'A ≔ ❨❨3, 5❩, ❨1, 4❩❩', 2, [3, 5, 1, 4]);
  Test({LINENUM}56937, 'VarInsert(A, 2, 10)', failure, 'Object type "real matrix" is not a suitable container.');
  Test({LINENUM}56938, 'A ≔ ❨❨3, 5❩, ❨i, 4❩❩', 2, [3, 5, ImaginaryUnit, 4]);
  Test({LINENUM}56939, 'VarInsert(A, 2, 10)', failure, 'Object type "complex matrix" is not a suitable container.');

  Test({LINENUM}56941, 's ≔ "Turn to 394"', 'Turn to 394');
  Test({LINENUM}56942, 'VarInsert(s, 9, "page ")', success);
  Test({LINENUM}56943, 's', 'Turn to page 394');
  Test({LINENUM}56944, 'VarInsert(s, −1, ".")', success);
  Test({LINENUM}56945, 's', 'Turn to page 394.');

  Test({LINENUM}56947, 's ≔ "Turn to page ."', 'Turn to page .');
  Test({LINENUM}56948, 'VarInsert(s, −2, 394)', success);
  Test({LINENUM}56949, 's', 'Turn to page 394.');

  Test({LINENUM}56951, 'L ≔ ''(10, 20, 30, 50, 60, 70)', intarr([10, 20, 30, 50, 60, 70]));
  Test({LINENUM}56952, 'VarInsert(L, 4, "fourty")', success);
  Test({LINENUM}56953, 'L', asoarr([10, 20, 30, 'fourty', 50, 60, 70]));
  Test({LINENUM}56954, 'VarInsert(L, -1, 80)', success);
  Test({LINENUM}56955, 'L', asoarr([10, 20, 30, 'fourty', 50, 60, 70, 80]));
  Test({LINENUM}56956, 'VarInsert(L, -9, 0)', success);
  Test({LINENUM}56957, 'L', asoarr([0, 10, 20, 30, 'fourty', 50, 60, 70, 80]));
  Test({LINENUM}56958, 'VarInsert(L, -11, 0)', failure, 'Index -11 out of bounds.');
  Test({LINENUM}56959, 'L', asoarr([0, 10, 20, 30, 'fourty', 50, 60, 70, 80]));

  Test({LINENUM}56961, 'S ≔ {1, 2, 3}', asoset([1, 2, 3]));
  Test({LINENUM}56962, 'VarInsert(S, 2, 4)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}56964, 'VarInsert(❨1, 2, 3❩, 2, 1)', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}56966, 'delete(v); delete(A); delete(L); delete(S); delete(s)', success);

  // VarRemove

  Test({LINENUM}56970, 'v ≔ ❨3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8❩',
    [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8]);

  Test({LINENUM}56973, 'VarRemove(v, 1)', success);
  Test({LINENUM}56974, 'v', [1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8]);

  Test({LINENUM}56976, 'VarRemove(v, -1)', success);
  Test({LINENUM}56977, 'v', [1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3]);

  Test({LINENUM}56979, 'VarRemove(v, range(5, 6))', success);
  Test({LINENUM}56980, 'v', [1, 4, 1, 5, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3]);

  Test({LINENUM}56982, 'VarRemove(v, ''(2, 4, 6))', success);
  Test({LINENUM}56983, 'v', [1, 1, 6, 3, 5, 8, 9, 7, 9, 3, 2, 3]);

  Test({LINENUM}56985, 'VarRemove(v, ''(1, 3, range(-1, -3)))', success);
  Test({LINENUM}56986, 'v', [1, 3, 5, 8, 9, 7, 9]);

  Test({LINENUM}56988, 'protect(v)', success);
  Test({LINENUM}56989, 'VarRemove(v, ''(1, -1, range(3, 5)))', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}56990, 'v', [1, 3, 5, 8, 9, 7, 9]);

  Test({LINENUM}56992, 'unprotect(v)', success);
  Test({LINENUM}56993, 'VarRemove(v, ''(1, -1, range(3, 5)))', success);
  Test({LINENUM}56994, 'v', [3, 7]);

  Test({LINENUM}56996, 'VarRemove(v, ''(1, -1, range(3, 5)))', success);
  Test({LINENUM}56997, 'v', TAlgosimRealVector.Create);

  Test({LINENUM}56999, 'v ≔ ❨3, i, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8❩',
    [3, ImaginaryUnit, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8]);

  Test({LINENUM}57002, 'VarRemove(v, 1)', success);
  Test({LINENUM}57003, 'v', [ImaginaryUnit, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8]);

  Test({LINENUM}57005, 'VarRemove(v, -1)', success);
  Test({LINENUM}57006, 'v', [ImaginaryUnit, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3]);

  Test({LINENUM}57008, 'VarRemove(v, range(5, 6))', success);
  Test({LINENUM}57009, 'v', [ImaginaryUnit, 4, 1, 5, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3]);

  Test({LINENUM}57011, 'VarRemove(v, ''(2, 4, 6))', success);
  Test({LINENUM}57012, 'v', [ImaginaryUnit, 1, 6, 3, 5, 8, 9, 7, 9, 3, 2, 3]);

  Test({LINENUM}57014, 'VarRemove(v, ''(1, 3, range(-1, -3)))', success);
  Test({LINENUM}57015, 'v', [TASC(1), 3, 5, 8, 9, 7, 9]);

  Test({LINENUM}57017, 'VarRemove(v, ''(1, -1, range(3, 5)))', success);
  Test({LINENUM}57018, 'v', [TASC(3), 7]);

  Test({LINENUM}57020, 'VarRemove(v, ''(1, -1, range(3, 5)))', success);
  Test({LINENUM}57021, 'v', TAlgosimComplexVector.Create);

  Test({LINENUM}57023, 'L ≔ ''(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8)',
    intarr([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8]));

  Test({LINENUM}57026, 'VarRemove(L, 1)', success);
  Test({LINENUM}57027, 'L', intarr([1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8]));

  Test({LINENUM}57029, 'VarRemove(L, -1)', success);
  Test({LINENUM}57030, 'L', intarr([1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3]));

  Test({LINENUM}57032, 'VarRemove(L, range(5, 6))', success);
  Test({LINENUM}57033, 'L', intarr([1, 4, 1, 5, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3]));

  Test({LINENUM}57035, 'VarRemove(L, ''(2, 4, 6))', success);
  Test({LINENUM}57036, 'L', intarr([1, 1, 6, 3, 5, 8, 9, 7, 9, 3, 2, 3]));

  Test({LINENUM}57038, 'VarRemove(L, ''(1, 3, range(-1, -3)))', success);
  Test({LINENUM}57039, 'L', intarr([1, 3, 5, 8, 9, 7, 9]));

  Test({LINENUM}57041, 'VarRemove(L, ''(1, -1, range(3, 5)))', success);
  Test({LINENUM}57042, 'L', intarr([3, 7]));

  Test({LINENUM}57044, 'VarRemove(L, ''(1, -1, range(3, 5)))', success);
  Test({LINENUM}57045, 'L', intarr([]));

  Test({LINENUM}57047, 's ≔ "Turn to pages 394–350, now."', 'Turn to pages 394–350, now.');
  Test({LINENUM}57048, 'VarRemove(s, ''(13, range(18, 21), range(−2, −6)))', success);
  Test({LINENUM}57049, 's', 'Turn to page 394.');

  Test({LINENUM}57051, 'S ≔ {1, 2, 3}', asoset([1, 2, 3]));
  Test({LINENUM}57052, 'VarRemove(S, 2)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}57054, 'VarRemove("Turn to pages 394–350, now.", ''(13, range(18, 21), range(−2, −6)))', failure, 'Left side cannot be assigned to.');

  Test({LINENUM}57056, 'delete(v); delete(L); delete(S); delete(s)', success);

  // VarTruncate

  Test({LINENUM}57060, 'v ≔ ❨3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8❩',
    [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8]);

  Test({LINENUM}57063, 'VarTruncate(v, 5)', success);
  Test({LINENUM}57064, 'v', [3, 1, 4, 1, 5]);

  Test({LINENUM}57066, 'VarTruncate(v, 5)', success);
  Test({LINENUM}57067, 'v', [3, 1, 4, 1, 5]);

  Test({LINENUM}57069, 'VarTruncate(v, -2)', failure, 'New length must be non-negative.');
  Test({LINENUM}57070, 'v', [3, 1, 4, 1, 5]);

  Test({LINENUM}57072, 'VarTruncate(v, 10)', success);
  Test({LINENUM}57073, 'v', [3, 1, 4, 1, 5]);

  Test({LINENUM}57075, 'protect(v)', success);
  Test({LINENUM}57076, 'VarTruncate(v, 1)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}57077, 'v', [3, 1, 4, 1, 5]);

  Test({LINENUM}57079, 'unprotect(v)', success);
  Test({LINENUM}57080, 'VarTruncate(v, 1)', success);
  Test({LINENUM}57081, 'v', [3]);

  Test({LINENUM}57083, 'VarTruncate(v, 0)', success);
  Test({LINENUM}57084, 'v', TAlgosimRealVector.Create);

  Test({LINENUM}57086, 'v ≔ ❨3, i, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8❩',
    [3, ImaginaryUnit, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8]);

  Test({LINENUM}57089, 'VarTruncate(v, 5)', success);
  Test({LINENUM}57090, 'v', [3, ImaginaryUnit, 4, 1, 5]);

  Test({LINENUM}57092, 'VarTruncate(v, 5)', success);
  Test({LINENUM}57093, 'v', [3, ImaginaryUnit, 4, 1, 5]);

  Test({LINENUM}57095, 'VarTruncate(v, 10)', success);
  Test({LINENUM}57096, 'v', [3, ImaginaryUnit, 4, 1, 5]);

  Test({LINENUM}57098, 'protect(v)', success);
  Test({LINENUM}57099, 'VarTruncate(v, 1)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}57100, 'v', [3, ImaginaryUnit, 4, 1, 5]);
  Test({LINENUM}57101, 'unprotect(v)', success);
  Test({LINENUM}57102, 'VarTruncate(v, 1)', success);
  Test({LINENUM}57103, 'v', [TASC(3)]);

  Test({LINENUM}57105, 'VarTruncate(v, 0)', success);
  Test({LINENUM}57106, 'v', TAlgosimComplexVector.Create);

  Test({LINENUM}57108, 's ≔ "Turn to page 394. Now."', 'Turn to page 394. Now.');
  Test({LINENUM}57109, 'VarTruncate(s, 17)', success);
  Test({LINENUM}57110, 's', 'Turn to page 394.');

  Test({LINENUM}57112, 'L ≔ ''(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8)',
    intarr([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8]));

  Test({LINENUM}57115, 'VarTruncate(L, 5)', success);
  Test({LINENUM}57116, 'L', intarr([3, 1, 4, 1, 5]));

  Test({LINENUM}57118, 'VarTruncate(L, 5)', success);
  Test({LINENUM}57119, 'L', intarr([3, 1, 4, 1, 5]));

  Test({LINENUM}57121, 'VarTruncate(L, -2)', failure, 'New length must be non-negative.');
  Test({LINENUM}57122, 'L', intarr([3, 1, 4, 1, 5]));

  Test({LINENUM}57124, 'VarTruncate(L, 10)', success);
  Test({LINENUM}57125, 'L', intarr([3, 1, 4, 1, 5]));

  Test({LINENUM}57127, 'protect(L)', success);
  Test({LINENUM}57128, 'VarTruncate(L, 1)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}57129, 'L', intarr([3, 1, 4, 1, 5]));

  Test({LINENUM}57131, 'unprotect(L)', success);
  Test({LINENUM}57132, 'VarTruncate(L, 1)', success);
  Test({LINENUM}57133, 'L', intarr([3]));

  Test({LINENUM}57135, 'VarTruncate(L, 0)', success);
  Test({LINENUM}57136, 'L', intarr([]));

  Test({LINENUM}57138, 'S ≔ {1, 2, 3}', asoset([1, 2, 3]));
  Test({LINENUM}57139, 'VarTruncate(S, 2)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}57141, 'delete(v); delete(L); delete(S); delete(s)', success);

  // VarSwap

  Test({LINENUM}57145, 'v ≔ ❨5, 3, 4, 2, 1, 8, 7, 5, 0, 4❩',
    [5, 3, 4, 2, 1, 8, 7, 5, 0, 4]);

  Test({LINENUM}57148, 'VarSwap(v, 3, 6)', success);
  Test({LINENUM}57149, 'v', [5, 3, 8, 2, 1, 4, 7, 5, 0, 4]);

  Test({LINENUM}57151, 'VarSwap(v, 1, -1)', success);
  Test({LINENUM}57152, 'v', [4, 3, 8, 2, 1, 4, 7, 5, 0, 5]);

  Test({LINENUM}57154, 'VarSwap(v, 6, 2)', success);
  Test({LINENUM}57155, 'v', [4, 4, 8, 2, 1, 3, 7, 5, 0, 5]);

  Test({LINENUM}57157, 'VarSwap(v, 3, 8)', success);
  Test({LINENUM}57158, 'v', [4, 4, 5, 2, 1, 3, 7, 8, 0, 5]);

  Test({LINENUM}57160, 'VarSwap(v, -1, -2)', success);
  Test({LINENUM}57161, 'v', [4, 4, 5, 2, 1, 3, 7, 8, 5, 0]);

  Test({LINENUM}57163, 'VarSwap(v, 5, 11)', failure, 'Index 11 out of bounds.');
  Test({LINENUM}57164, 'v', [4, 4, 5, 2, 1, 3, 7, 8, 5, 0]);

  Test({LINENUM}57166, 'VarSwap(v, -12, 5)', failure, 'Index -12 out of bounds.');
  Test({LINENUM}57167, 'v', [4, 4, 5, 2, 1, 3, 7, 8, 5, 0]);

  Test({LINENUM}57169, 'VarSwap(v, 5, 0)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}57170, 'v', [4, 4, 5, 2, 1, 3, 7, 8, 5, 0]);

  Test({LINENUM}57172, 'protect(v)', success);
  Test({LINENUM}57173, 'VarSwap(v, 3, -1)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}57174, 'v', [4, 4, 5, 2, 1, 3, 7, 8, 5, 0]);

  Test({LINENUM}57176, 'unprotect(v)', success);
  Test({LINENUM}57177, 'VarSwap(v, 3, -1)', success);
  Test({LINENUM}57178, 'v', [4, 4, 0, 2, 1, 3, 7, 8, 5, 5]);

  Test({LINENUM}57180, 'v ≔ ❨5, 3, 4, 2, 1, i, 7, 5, 0, 4❩',
    [5, 3, 4, 2, 1, ImaginaryUnit, 7, 5, 0, 4]);

  Test({LINENUM}57183, 'VarSwap(v, 3, 6)', success);
  Test({LINENUM}57184, 'v', [5, 3, ImaginaryUnit, 2, 1, 4, 7, 5, 0, 4]);

  Test({LINENUM}57186, 'VarSwap(v, 1, -1)', success);
  Test({LINENUM}57187, 'v', [4, 3, ImaginaryUnit, 2, 1, 4, 7, 5, 0, 5]);

  Test({LINENUM}57189, 'VarSwap(v, 6, 2)', success);
  Test({LINENUM}57190, 'v', [4, 4, ImaginaryUnit, 2, 1, 3, 7, 5, 0, 5]);

  Test({LINENUM}57192, 'VarSwap(v, 3, 8)', success);
  Test({LINENUM}57193, 'v', [4, 4, 5, 2, 1, 3, 7, ImaginaryUnit, 0, 5]);

  Test({LINENUM}57195, 'VarSwap(v, -1, -2)', success);
  Test({LINENUM}57196, 'v', [4, 4, 5, 2, 1, 3, 7, ImaginaryUnit, 5, 0]);

  Test({LINENUM}57198, 'VarSwap(v, 5, 11)', failure, 'Index 11 out of bounds.');
  Test({LINENUM}57199, 'v', [4, 4, 5, 2, 1, 3, 7, ImaginaryUnit, 5, 0]);

  Test({LINENUM}57201, 'VarSwap(v, -12, 5)', failure, 'Index -12 out of bounds.');
  Test({LINENUM}57202, 'v', [4, 4, 5, 2, 1, 3, 7, ImaginaryUnit, 5, 0]);

  Test({LINENUM}57204, 'VarSwap(v, 5, 0)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}57205, 'v', [4, 4, 5, 2, 1, 3, 7, ImaginaryUnit, 5, 0]);

  Test({LINENUM}57207, 'protect(v)', success);
  Test({LINENUM}57208, 'VarSwap(v, 3, -1)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}57209, 'v', [4, 4, 5, 2, 1, 3, 7, ImaginaryUnit, 5, 0]);

  Test({LINENUM}57211, 'unprotect(v)', success);
  Test({LINENUM}57212, 'VarSwap(v, 3, -1)', success);
  Test({LINENUM}57213, 'v', [4, 4, 0, 2, 1, 3, 7, ImaginaryUnit, 5, 5]);

  Test({LINENUM}57215, 'L ≔ ''(5, 3, 4, 2, 1, 8, 7, 5, 0, 4)',
    intarr([5, 3, 4, 2, 1, 8, 7, 5, 0, 4]));

  Test({LINENUM}57218, 'VarSwap(L, 3, 6)', success);
  Test({LINENUM}57219, 'L', intarr([5, 3, 8, 2, 1, 4, 7, 5, 0, 4]));

  Test({LINENUM}57221, 'VarSwap(L, 1, -1)', success);
  Test({LINENUM}57222, 'L', intarr([4, 3, 8, 2, 1, 4, 7, 5, 0, 5]));

  Test({LINENUM}57224, 'VarSwap(L, 6, 2)', success);
  Test({LINENUM}57225, 'L', intarr([4, 4, 8, 2, 1, 3, 7, 5, 0, 5]));

  Test({LINENUM}57227, 'VarSwap(L, 3, 8)', success);
  Test({LINENUM}57228, 'L', intarr([4, 4, 5, 2, 1, 3, 7, 8, 0, 5]));

  Test({LINENUM}57230, 'VarSwap(L, -1, -2)', success);
  Test({LINENUM}57231, 'L', intarr([4, 4, 5, 2, 1, 3, 7, 8, 5, 0]));

  Test({LINENUM}57233, 'VarSwap(L, 5, 11)', failure, 'Index 11 out of bounds.');
  Test({LINENUM}57234, 'L', intarr([4, 4, 5, 2, 1, 3, 7, 8, 5, 0]));

  Test({LINENUM}57236, 'VarSwap(L, -12, 5)', failure, 'Index -12 out of bounds.');
  Test({LINENUM}57237, 'L', intarr([4, 4, 5, 2, 1, 3, 7, 8, 5, 0]));

  Test({LINENUM}57239, 'VarSwap(L, 5, 0)', failure, 'Index 0 out of bounds.');
  Test({LINENUM}57240, 'L', intarr([4, 4, 5, 2, 1, 3, 7, 8, 5, 0]));

  Test({LINENUM}57242, 'protect(L)', success);
  Test({LINENUM}57243, 'VarSwap(L, 3, -1)', failure, 'Left side cannot be assigned to.');
  Test({LINENUM}57244, 'L', intarr([4, 4, 5, 2, 1, 3, 7, 8, 5, 0]));

  Test({LINENUM}57246, 'unprotect(L)', success);
  Test({LINENUM}57247, 'VarSwap(L, 3, -1)', success);
  Test({LINENUM}57248, 'L', intarr([4, 4, 0, 2, 1, 3, 7, 8, 5, 5]));

  Test({LINENUM}57250, 's ≔ "Turn to page 493."', 'Turn to page 493.');
  Test({LINENUM}57251, 'VarSwap(s, -4, -2)', success);
  Test({LINENUM}57252, 's', 'Turn to page 394.');

  Test({LINENUM}57254, 'S ≔ {1, 2, 3}', asoset([1, 2, 3]));
  Test({LINENUM}57255, 'VarSwap(S, 2, 3)', failure, 'Object type "set" is not a suitable container.');

  Test({LINENUM}57257, 'delete(v); delete(L); delete(S); delete(s)', success);


  //
  // Number extraction
  //

  Test({LINENUM}57264, 'v ≔ ❨3, 1, 4, 1, 5, 9, 2, 6, 5❩;', null);
  Test({LINENUM}57265, 'numbers(v)', asoarr([3, 1, 4, 1, 5, 9, 2, 6, 5]));
  Test({LINENUM}57266, 'numbers(DebugObject("empty vector"))', asoarr([]));

  Test({LINENUM}57268, 'v ≔ ❨i, 1, 4, 1, 5, 9, 2, 6, 5❩;', null);
  Test({LINENUM}57269, 'numbers(v)', asoarrex([ASO(ImaginaryUnit), ASO(1), ASO(4), ASO(1), ASO(5), ASO(9), ASO(2), ASO(6), ASO(5)]));
  Test({LINENUM}57270, 'numbers(ComplexVector(DebugObject("empty vector")))', asoarr([]));

  Test({LINENUM}57272, 'A ≔ ❨❨5, 0, 1, 3❩, ❨−2, 1, 4, 8❩, ❨0, 1, 3, 9❩, ❨2, 1, 0, 7❩❩;', null);
  Test({LINENUM}57273, 'numbers(A)', asoarr([5, 0, 1, 3, -2, 1, 4, 8, 0, 1, 3, 9, 2, 1, 0, 7]));
  Test({LINENUM}57274, 'numbers(DebugObject("empty matrix"))', asoarr([]));

  Test({LINENUM}57276, 'A ≔ ❨❨5, i, 1, 3❩, ❨−2, 1, 4, 8❩, ❨0, 1, 3, 9❩, ❨2, 1, 0, 7❩❩;', null);
  Test({LINENUM}57277, 'numbers(A)', asoarrex([ASO(5), ASO(ImaginaryUnit), ASO(1), ASO(3), ASO(-2), ASO(1), ASO(4), ASO(8), ASO(0), ASO(1), ASO(3), ASO(9), ASO(2), ASO(1), ASO(0), ASO(7)]));
  Test({LINENUM}57278, 'numbers(ComplexMatrix(DebugObject("empty matrix")))', asoarr([]));

  Test({LINENUM}57280, 'L ≔ ''(3, 1, 4, 1, 5, 9, 2, 6, 5);', null);
  Test({LINENUM}57281, 'numbers(L)', asoarr([3, 1, 4, 1, 5, 9, 2, 6, 5]));

  Test({LINENUM}57283, 'L ≔ ''();', null);
  Test({LINENUM}57284, 'numbers(L)', asoarr([]));

  Test({LINENUM}57286, 'S ≔ {3, 1, 4, 1, 5, 9, 2, 6, 5};', null);
  Test({LINENUM}57287, 'ToSet(numbers(S))', asoset([3, 1, 4, 5, 9, 2, 6]));

  Test({LINENUM}57289, 'S ≔ {};', null);
  Test({LINENUM}57290, 'numbers(S)', asoarr([]));

  Test({LINENUM}57292, 'S ≔ struct("name": "Albus Dumbledore", "age": 116, "role": "headmaster");', null);
  Test({LINENUM}57293, 'numbers(S)', intarr([116]));

  Test({LINENUM}57295, 'S ≔ struct("name": "Albus Dumbledore", "role": "headmaster");', null);
  Test({LINENUM}57296, 'numbers(S)', asoarr([]));

  Test({LINENUM}57298, 'L ≔ ''(6, 2, 1, ❨❨5, 6, 3❩, ❨1, 4, 2❩❩, 6.5, ❨21, 5, 22❩, {1024, 2048}, ''(555, 666, ❨−10, −52, −40❩, ''(123456, 321654, {5040})), −999);', null);
  Test({LINENUM}57299, 'numbers(L)', asoarr([6, 2, 1, 5, 6, 3, 1, 4, 2, 6.5, 21, 5, 22, 1024, 2048, 555, 666, -10, -52, -40, 123456, 321654, 5040, -999]));

  Test({LINENUM}57301, 'numbers(''(3, 1, ❨7, 2, 1❩))', asoarr([3, 1, 7, 2, 1]));
  Test({LINENUM}57302, 'numbers(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(394))))))))))))))))))))))))))', intarr([394]));
  Test({LINENUM}57303, 'numbers(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''(''())))))))))))))))))))))))))', intarr([]));

  Test({LINENUM}57305, 'delete(v); delete(A); delete(L); delete(S)', success);


  //
  // Images
  //

  Test({LINENUM}57312, 'image(identity, 5)', 5);
  Test({LINENUM}57313, 'image(factorial, 5)', 120);
  Test({LINENUM}57314, 'image(square, 5)', 25);
  Test({LINENUM}57315, 'image(inv, 5)', rat(1, 5));
  Test({LINENUM}57316, 'image(gcd, 5265, 2550)', 15);
  Test({LINENUM}57317, 'image(add, 100, 25)', 125);

  Test({LINENUM}57319, 'image(divide, 5, 0)', failure, 'Division by zero');
  Test({LINENUM}57320, 'image(divide, 5)', failure, 'Too few arguments. A required argument of type object is missing.');
  Test({LINENUM}57321, 'image(list)', asoarr([]));
  Test({LINENUM}57322, 'image(vector, 1, 2, 3, 4, 5)', [1, 2, 3, 4, 5]);

  Test({LINENUM}57324, 'IteratedImage(n ↦ 2⋅n, 1, 0)', 1);
  Test({LINENUM}57325, 'IteratedImage(n ↦ 2⋅n, 1, 1)', 2);
  Test({LINENUM}57326, 'IteratedImage(n ↦ 2⋅n, 1, 2)', 4);
  Test({LINENUM}57327, 'IteratedImage(n ↦ 2⋅n, 1, 3)', 8);
  Test({LINENUM}57328, 'IteratedImage(n ↦ 2⋅n, 1, 4)', 16);
  Test({LINENUM}57329, 'IteratedImage(n ↦ 2⋅n, 1, 5)', 32);
  Test({LINENUM}57330, 'IteratedImage(n ↦ 2⋅n, 1, 6)', 64);
  Test({LINENUM}57331, 'IteratedImage(n ↦ 2⋅n, 1, 7)', 128);
  Test({LINENUM}57332, 'IteratedImage(n ↦ 2⋅n, 1, 8)', 256);
  Test({LINENUM}57333, 'IteratedImage(n ↦ 2⋅n, 1, 9)', 512);
  Test({LINENUM}57334, 'IteratedImage(n ↦ 2⋅n, 1, 10)', 1024);

  Test({LINENUM}57336, 'IteratedImage(n ↦ 2⋅n, 1, -1)', failure, 'A non-negative integer was expected as argument 3, but "-1" was given.');

  Test({LINENUM}57338, 'IteratedImage(sin, 1, 0)', 1);
  Eps; Test({LINENUM}57339, 'IteratedImage(sin, 1, 1)', 0.841470984807896507);
  Eps; Test({LINENUM}57340, 'IteratedImage(sin, 1, 2)', 0.745624141665557889);
  Eps; Test({LINENUM}57341, 'IteratedImage(sin, 1, 3)', 0.678430477360740229);
  Eps; Test({LINENUM}57342, 'IteratedImage(sin, 1, 4)', 0.627571832049159139);
  Eps; Test({LINENUM}57343, 'IteratedImage(sin, 1, 5)', 0.587180996573430989);
  Eps; Test({LINENUM}57344, 'IteratedImage(sin, 1, 6)', 0.55401639075562963);
  Eps; Test({LINENUM}57345, 'IteratedImage(sin, 1, 7)', 0.526107075502841702);
  Eps; Test({LINENUM}57346, 'IteratedImage(sin, 1, 8)', 0.502170676268555349);
  Eps; Test({LINENUM}57347, 'IteratedImage(sin, 1, 9)', 0.481329355262346345);
  Eps; Test({LINENUM}57348, 'IteratedImage(sin, 1, 10)', 0.462957898537811869);

  Test({LINENUM}57350, 'IteratedImages(n ↦ 2⋅n, 1, 0)', intarr([1]));
  Test({LINENUM}57351, 'IteratedImages(n ↦ 2⋅n, 1, 1)', intarr([1, 2]));
  Test({LINENUM}57352, 'IteratedImages(n ↦ 2⋅n, 1, 10)', intarr([1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]));

  Test({LINENUM}57354, 'IteratedImages(n ↦ 2⋅n, 1, -1)', failure, 'A non-negative integer was expected as argument 3, but "-1" was given.');

  Test({LINENUM}57356, 'orbit(n ↦ 2⋅n, 1, 0)', intset([1]));
  Test({LINENUM}57357, 'orbit(n ↦ 2⋅n, 1, 1)', intset([1, 2]));
  Test({LINENUM}57358, 'orbit(n ↦ 2⋅n, 1, 10)', intset([1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]));

  Test({LINENUM}57360, 'orbit(n ↦ 2⋅n, 1, -1)', failure, 'A non-negative integer was expected as argument 3, but "-1" was given.');

  Test({LINENUM}57362, 'f ≔ n ↦ if(even(n), n/2, 3⋅n + 1);', null);

  Test({LINENUM}57364, 'IteratedImages(f, 12, 9)', intarr([12, 6, 3, 10, 5, 16, 8, 4, 2, 1]));
  Test({LINENUM}57365, 'IteratedImages(f, 19, 20)', intarr([19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]));
  Test({LINENUM}57366, 'IteratedImages(f, 27, 111)', intarr([27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]));

  Test({LINENUM}57368, 'orbit(f, 12, 9)', intset([12, 6, 3, 10, 5, 16, 8, 4, 2, 1]));
  Test({LINENUM}57369, 'orbit(f, 19, 20)', intset([19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]));
  Test({LINENUM}57370, 'orbit(f, 27, 111)', intset([27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]));

  Test({LINENUM}57372, 'orbit(f, 12, 10000)', intset([12, 6, 3, 10, 5, 16, 8, 4, 2, 1]));
  Test({LINENUM}57373, 'orbit(f, 19, 10000)', intset([19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]));
  Test({LINENUM}57374, 'orbit(f, 27, 10000)', intset([27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]));

  Test({LINENUM}57376, 'orbit(f, 12)', intset([12, 6, 3, 10, 5, 16, 8, 4, 2, 1]));
  Test({LINENUM}57377, 'orbit(f, 19)', intset([19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]));
  Test({LINENUM}57378, 'orbit(f, 27)', intset([27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]));


  //
  // IsX functions
  //

  Test({LINENUM}57385, 'IsNumber(123)', True);
  Test({LINENUM}57386, 'IsNumber(123.0)', True);
  Test({LINENUM}57387, 'IsNumber(25.36)', True);
  Test({LINENUM}57388, 'IsNumber(1/2)', True);
  Test({LINENUM}57389, 'IsNumber(1 + i)', True);
  Test({LINENUM}57390, 'IsNumber(❨1, 0❩)', False);
  Test({LINENUM}57391, 'IsNumber(❨i, 0❩)', False);
  Test({LINENUM}57392, 'IsNumber(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57393, 'IsNumber(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57394, 'IsNumber(''(1, 2, 3))', False);
  Test({LINENUM}57395, 'IsNumber({1, 2, 3})', False);
  Test({LINENUM}57396, 'IsNumber(true)', False);
  Test({LINENUM}57397, 'IsNumber("nargle")', False);
  Test({LINENUM}57398, 'IsNumber(CreatePixmap(512, 512))', False);
  Test({LINENUM}57399, 'IsNumber(SineTone(400))', False);
  Test({LINENUM}57400, 'IsNumber(color("red"))', False);
  Test({LINENUM}57401, 'IsNumber("name": "Albus")', False);
  Test({LINENUM}57402, 'IsNumber(BinaryData("nargle"))', False);

  Test({LINENUM}57404, 'IsVector(123)', False);
  Test({LINENUM}57405, 'IsVector(123.0)', False);
  Test({LINENUM}57406, 'IsVector(25.36)', False);
  Test({LINENUM}57407, 'IsVector(1/2)', False);
  Test({LINENUM}57408, 'IsVector(1 + i)', False);
  Test({LINENUM}57409, 'IsVector(❨1, 0❩)', True);
  Test({LINENUM}57410, 'IsVector(❨i, 0❩)', True);
  Test({LINENUM}57411, 'IsVector(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57412, 'IsVector(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57413, 'IsVector(''(1, 2, 3))', False);
  Test({LINENUM}57414, 'IsVector({1, 2, 3})', False);
  Test({LINENUM}57415, 'IsVector(true)', False);
  Test({LINENUM}57416, 'IsVector("nargle")', False);
  Test({LINENUM}57417, 'IsVector(CreatePixmap(512, 512))', False);
  Test({LINENUM}57418, 'IsVector(SineTone(400))', False);
  Test({LINENUM}57419, 'IsVector(color("red"))', False);
  Test({LINENUM}57420, 'IsVector("name": "Albus")', False);
  Test({LINENUM}57421, 'IsVector(BinaryData("nargle"))', False);

  Test({LINENUM}57423, 'IsMatrix(123)', False);
  Test({LINENUM}57424, 'IsMatrix(123.0)', False);
  Test({LINENUM}57425, 'IsMatrix(25.36)', False);
  Test({LINENUM}57426, 'IsMatrix(1/2)', False);
  Test({LINENUM}57427, 'IsMatrix(1 + i)', False);
  Test({LINENUM}57428, 'IsMatrix(❨1, 0❩)', False);
  Test({LINENUM}57429, 'IsMatrix(❨i, 0❩)', False);
  Test({LINENUM}57430, 'IsMatrix(❨❨3, 2❩, ❨0, 1❩❩)', True);
  Test({LINENUM}57431, 'IsMatrix(❨❨3, i❩, ❨0, 1❩❩)', True);
  Test({LINENUM}57432, 'IsMatrix(''(1, 2, 3))', False);
  Test({LINENUM}57433, 'IsMatrix({1, 2, 3})', False);
  Test({LINENUM}57434, 'IsMatrix(true)', False);
  Test({LINENUM}57435, 'IsMatrix("nargle")', False);
  Test({LINENUM}57436, 'IsMatrix(CreatePixmap(512, 512))', False);
  Test({LINENUM}57437, 'IsMatrix(SineTone(400))', False);
  Test({LINENUM}57438, 'IsMatrix(color("red"))', False);
  Test({LINENUM}57439, 'IsMatrix("name": "Albus")', False);
  Test({LINENUM}57440, 'IsMatrix(BinaryData("nargle"))', False);

  Test({LINENUM}57442, 'IsText(123)', False);
  Test({LINENUM}57443, 'IsText(123.0)', False);
  Test({LINENUM}57444, 'IsText(25.36)', False);
  Test({LINENUM}57445, 'IsText(1/2)', False);
  Test({LINENUM}57446, 'IsText(1 + i)', False);
  Test({LINENUM}57447, 'IsText(❨1, 0❩)', False);
  Test({LINENUM}57448, 'IsText(❨i, 0❩)', False);
  Test({LINENUM}57449, 'IsText(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57450, 'IsText(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57451, 'IsText(''(1, 2, 3))', False);
  Test({LINENUM}57452, 'IsText({1, 2, 3})', False);
  Test({LINENUM}57453, 'IsText(true)', False);
  Test({LINENUM}57454, 'IsText("nargle")', True);
  Test({LINENUM}57455, 'IsText(CreatePixmap(512, 512))', False);
  Test({LINENUM}57456, 'IsText(SineTone(400))', False);
  Test({LINENUM}57457, 'IsText(color("red"))', False);
  Test({LINENUM}57458, 'IsText("name": "Albus")', False);
  Test({LINENUM}57459, 'IsText(BinaryData("nargle"))', False);

  Test({LINENUM}57461, 'IsCharacter(123)', False);
  Test({LINENUM}57462, 'IsCharacter(123.0)', False);
  Test({LINENUM}57463, 'IsCharacter(25.36)', False);
  Test({LINENUM}57464, 'IsCharacter(1/2)', False);
  Test({LINENUM}57465, 'IsCharacter(1 + i)', False);
  Test({LINENUM}57466, 'IsCharacter(❨1, 0❩)', False);
  Test({LINENUM}57467, 'IsCharacter(❨i, 0❩)', False);
  Test({LINENUM}57468, 'IsCharacter(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57469, 'IsCharacter(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57470, 'IsCharacter(''(1, 2, 3))', False);
  Test({LINENUM}57471, 'IsCharacter({1, 2, 3})', False);
  Test({LINENUM}57472, 'IsCharacter(true)', False);
  Test({LINENUM}57473, 'IsCharacter("nargle")', False);
  Test({LINENUM}57474, 'IsCharacter("n")', True);
  Test({LINENUM}57475, 'IsCharacter(" ")', True);
  Test({LINENUM}57476, 'IsCharacter("!")', True);
  Test({LINENUM}57477, 'IsCharacter("∮")', True);
  Test({LINENUM}57478, 'IsCharacter("""")', True);
  Test({LINENUM}57479, 'IsCharacter(chr(9))', True);
  Test({LINENUM}57480, 'IsCharacter(CreatePixmap(512, 512))', False);
  Test({LINENUM}57481, 'IsCharacter(SineTone(400))', False);
  Test({LINENUM}57482, 'IsCharacter(color("red"))', False);
  Test({LINENUM}57483, 'IsCharacter("name": "Albus")', False);
  Test({LINENUM}57484, 'IsCharacter(BinaryData("nargle"))', False);

  Test({LINENUM}57486, 'IsBoolean(123)', False);
  Test({LINENUM}57487, 'IsBoolean(123.0)', False);
  Test({LINENUM}57488, 'IsBoolean(25.36)', False);
  Test({LINENUM}57489, 'IsBoolean(1/2)', False);
  Test({LINENUM}57490, 'IsBoolean(1 + i)', False);
  Test({LINENUM}57491, 'IsBoolean(❨1, 0❩)', False);
  Test({LINENUM}57492, 'IsBoolean(❨i, 0❩)', False);
  Test({LINENUM}57493, 'IsBoolean(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57494, 'IsBoolean(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57495, 'IsBoolean(''(1, 2, 3))', False);
  Test({LINENUM}57496, 'IsBoolean({1, 2, 3})', False);
  Test({LINENUM}57497, 'IsBoolean(true)', True);
  Test({LINENUM}57498, 'IsBoolean("nargle")', False);
  Test({LINENUM}57499, 'IsBoolean(CreatePixmap(512, 512))', False);
  Test({LINENUM}57500, 'IsBoolean(SineTone(400))', False);
  Test({LINENUM}57501, 'IsBoolean(color("red"))', False);
  Test({LINENUM}57502, 'IsBoolean("name": "Albus")', False);
  Test({LINENUM}57503, 'IsBoolean(BinaryData("nargle"))', False);

  Test({LINENUM}57505, 'IsPixmap(123)', False);
  Test({LINENUM}57506, 'IsPixmap(123.0)', False);
  Test({LINENUM}57507, 'IsPixmap(25.36)', False);
  Test({LINENUM}57508, 'IsPixmap(1/2)', False);
  Test({LINENUM}57509, 'IsPixmap(1 + i)', False);
  Test({LINENUM}57510, 'IsPixmap(❨1, 0❩)', False);
  Test({LINENUM}57511, 'IsPixmap(❨i, 0❩)', False);
  Test({LINENUM}57512, 'IsPixmap(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57513, 'IsPixmap(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57514, 'IsPixmap(''(1, 2, 3))', False);
  Test({LINENUM}57515, 'IsPixmap({1, 2, 3})', False);
  Test({LINENUM}57516, 'IsPixmap(true)', False);
  Test({LINENUM}57517, 'IsPixmap("nargle")', False);
  Test({LINENUM}57518, 'IsPixmap(CreatePixmap(512, 512))', True);
  Test({LINENUM}57519, 'IsPixmap(SineTone(400))', False);
  Test({LINENUM}57520, 'IsPixmap(color("red"))', False);
  Test({LINENUM}57521, 'IsPixmap("name": "Albus")', False);
  Test({LINENUM}57522, 'IsPixmap(BinaryData("nargle"))', False);

  Test({LINENUM}57524, 'IsSound(123)', False);
  Test({LINENUM}57525, 'IsSound(123.0)', False);
  Test({LINENUM}57526, 'IsSound(25.36)', False);
  Test({LINENUM}57527, 'IsSound(1/2)', False);
  Test({LINENUM}57528, 'IsSound(1 + i)', False);
  Test({LINENUM}57529, 'IsSound(❨1, 0❩)', False);
  Test({LINENUM}57530, 'IsSound(❨i, 0❩)', False);
  Test({LINENUM}57531, 'IsSound(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57532, 'IsSound(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57533, 'IsSound(''(1, 2, 3))', False);
  Test({LINENUM}57534, 'IsSound({1, 2, 3})', False);
  Test({LINENUM}57535, 'IsSound(true)', False);
  Test({LINENUM}57536, 'IsSound("nargle")', False);
  Test({LINENUM}57537, 'IsSound(CreatePixmap(512, 512))', False);
  Test({LINENUM}57538, 'IsSound(SineTone(400))', True);
  Test({LINENUM}57539, 'IsSound(color("red"))', False);
  Test({LINENUM}57540, 'IsSound("name": "Albus")', False);
  Test({LINENUM}57541, 'IsSound(BinaryData("nargle"))', False);

  Test({LINENUM}57543, 'IsTable(123)', False);
  Test({LINENUM}57544, 'IsTable(123.0)', False);
  Test({LINENUM}57545, 'IsTable(25.36)', False);
  Test({LINENUM}57546, 'IsTable(1/2)', False);
  Test({LINENUM}57547, 'IsTable(1 + i)', False);
  Test({LINENUM}57548, 'IsTable(❨1, 0❩)', False);
  Test({LINENUM}57549, 'IsTable(❨i, 0❩)', False);
  Test({LINENUM}57550, 'IsTable(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57551, 'IsTable(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57552, 'IsTable(''(1, 2, 3))', False);
  Test({LINENUM}57553, 'IsTable({1, 2, 3})', False);
  Test({LINENUM}57554, 'IsTable(true)', False);
  Test({LINENUM}57555, 'IsTable("nargle")', False);
  Test({LINENUM}57556, 'IsTable(CreatePixmap(512, 512))', False);
  Test({LINENUM}57557, 'IsTable(SineTone(400))', False);
  Test({LINENUM}57558, 'IsTable(color("red"))', False);
  Test({LINENUM}57559, 'IsTable("name": "Albus")', False);
  Test({LINENUM}57560, 'IsTable(BinaryData("nargle"))', False);

  Test({LINENUM}57562, 'IsColor(123)', False);
  Test({LINENUM}57563, 'IsColor(123.0)', False);
  Test({LINENUM}57564, 'IsColor(25.36)', False);
  Test({LINENUM}57565, 'IsColor(1/2)', False);
  Test({LINENUM}57566, 'IsColor(1 + i)', False);
  Test({LINENUM}57567, 'IsColor(❨1, 0❩)', False);
  Test({LINENUM}57568, 'IsColor(❨i, 0❩)', False);
  Test({LINENUM}57569, 'IsColor(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57570, 'IsColor(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57571, 'IsColor(''(1, 2, 3))', False);
  Test({LINENUM}57572, 'IsColor({1, 2, 3})', False);
  Test({LINENUM}57573, 'IsColor(true)', False);
  Test({LINENUM}57574, 'IsColor("nargle")', False);
  Test({LINENUM}57575, 'IsColor(CreatePixmap(512, 512))', False);
  Test({LINENUM}57576, 'IsColor(SineTone(400))', False);
  Test({LINENUM}57577, 'IsColor(color("red"))', True);
  Test({LINENUM}57578, 'IsColor("name": "Albus")', False);
  Test({LINENUM}57579, 'IsColor(BinaryData("nargle"))', False);

  Test({LINENUM}57581, 'IsSet(123)', False);
  Test({LINENUM}57582, 'IsSet(123.0)', False);
  Test({LINENUM}57583, 'IsSet(25.36)', False);
  Test({LINENUM}57584, 'IsSet(1/2)', False);
  Test({LINENUM}57585, 'IsSet(1 + i)', False);
  Test({LINENUM}57586, 'IsSet(❨1, 0❩)', False);
  Test({LINENUM}57587, 'IsSet(❨i, 0❩)', False);
  Test({LINENUM}57588, 'IsSet(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57589, 'IsSet(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57590, 'IsSet(''(1, 2, 3))', False);
  Test({LINENUM}57591, 'IsSet({1, 2, 3})', True);
  Test({LINENUM}57592, 'IsSet(true)', False);
  Test({LINENUM}57593, 'IsSet("nargle")', False);
  Test({LINENUM}57594, 'IsSet(CreatePixmap(512, 512))', False);
  Test({LINENUM}57595, 'IsSet(SineTone(400))', False);
  Test({LINENUM}57596, 'IsSet(color("red"))', False);
  Test({LINENUM}57597, 'IsSet("name": "Albus")', False);
  Test({LINENUM}57598, 'IsSet(BinaryData("nargle"))', False);

  Test({LINENUM}57600, 'IsList(123)', False);
  Test({LINENUM}57601, 'IsList(123.0)', False);
  Test({LINENUM}57602, 'IsList(25.36)', False);
  Test({LINENUM}57603, 'IsList(1/2)', False);
  Test({LINENUM}57604, 'IsList(1 + i)', False);
  Test({LINENUM}57605, 'IsList(❨1, 0❩)', False);
  Test({LINENUM}57606, 'IsList(❨i, 0❩)', False);
  Test({LINENUM}57607, 'IsList(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57608, 'IsList(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57609, 'IsList(''(1, 2, 3))', True);
  Test({LINENUM}57610, 'IsList({1, 2, 3})', False);
  Test({LINENUM}57611, 'IsList(true)', False);
  Test({LINENUM}57612, 'IsList("nargle")', False);
  Test({LINENUM}57613, 'IsList(CreatePixmap(512, 512))', False);
  Test({LINENUM}57614, 'IsList(SineTone(400))', False);
  Test({LINENUM}57615, 'IsList(color("red"))', False);
  Test({LINENUM}57616, 'IsList("name": "Albus")', False);
  Test({LINENUM}57617, 'IsList(BinaryData("nargle"))', False);

  Test({LINENUM}57619, 'IsStructure(123)', False);
  Test({LINENUM}57620, 'IsStructure(123.0)', False);
  Test({LINENUM}57621, 'IsStructure(25.36)', False);
  Test({LINENUM}57622, 'IsStructure(1/2)', False);
  Test({LINENUM}57623, 'IsStructure(1 + i)', False);
  Test({LINENUM}57624, 'IsStructure(❨1, 0❩)', False);
  Test({LINENUM}57625, 'IsStructure(❨i, 0❩)', False);
  Test({LINENUM}57626, 'IsStructure(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57627, 'IsStructure(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57628, 'IsStructure(''(1, 2, 3))', False);
  Test({LINENUM}57629, 'IsStructure({1, 2, 3})', False);
  Test({LINENUM}57630, 'IsStructure(true)', False);
  Test({LINENUM}57631, 'IsStructure("nargle")', False);
  Test({LINENUM}57632, 'IsStructure(CreatePixmap(512, 512))', False);
  Test({LINENUM}57633, 'IsStructure(SineTone(400))', False);
  Test({LINENUM}57634, 'IsStructure(color("red"))', False);
  Test({LINENUM}57635, 'IsStructure("name": "Albus")', True);
  Test({LINENUM}57636, 'IsStructure(BinaryData("nargle"))', False);

  Test({LINENUM}57638, 'IsReal(123)', True);
  Test({LINENUM}57639, 'IsReal(123.0)', True);
  Test({LINENUM}57640, 'IsReal(123 + i - i)', True);
  Test({LINENUM}57641, 'IsReal(25.36)', True);
  Test({LINENUM}57642, 'IsReal(1/2)', True);
  Test({LINENUM}57643, 'IsReal(1 + i)', False);
  Test({LINENUM}57644, 'IsReal(❨1, 0❩)', True);
  Test({LINENUM}57645, 'IsReal(❨1 + i - i, 0❩)', True);
  Test({LINENUM}57646, 'IsReal(❨i, 0❩)', False);
  Test({LINENUM}57647, 'IsReal(❨❨3, 2❩, ❨0, 1❩❩)', True);
  Test({LINENUM}57648, 'IsReal(❨❨3, 2 + i - i❩, ❨0, 1❩❩)', True);
  Test({LINENUM}57649, 'IsReal(❨❨3, i❩, ❨0, 1❩❩)', False);

  Test({LINENUM}57651, 'IsComplex(123)', False);
  Test({LINENUM}57652, 'IsComplex(123.0)', False);
  Test({LINENUM}57653, 'IsComplex(123 + i - i)', False);
  Test({LINENUM}57654, 'IsComplex(25.36)', False);
  Test({LINENUM}57655, 'IsComplex(1/2)', False);
  Test({LINENUM}57656, 'IsComplex(1 + i)', True);
  Test({LINENUM}57657, 'IsComplex(❨1, 0❩)', False);
  Test({LINENUM}57658, 'IsComplex(❨1 + i - i, 0❩)', False);
  Test({LINENUM}57659, 'IsComplex(❨i, 0❩)', True);
  Test({LINENUM}57660, 'IsComplex(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57661, 'IsComplex(❨❨3, 2 + i - i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57662, 'IsComplex(❨❨3, i❩, ❨0, 1❩❩)', True);

  Test({LINENUM}57664, 'IsInteger(123)', True);
  Test({LINENUM}57665, 'IsInteger(123.0)', True);
  Test({LINENUM}57666, 'IsInteger(25.36)', False);
  Test({LINENUM}57667, 'IsInteger(1/2)', False);
  Test({LINENUM}57668, 'IsInteger(1 + i)', False);
  Test({LINENUM}57669, 'IsInteger(❨1, 0❩)', False);
  Test({LINENUM}57670, 'IsInteger(❨i, 0❩)', False);
  Test({LINENUM}57671, 'IsInteger(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57672, 'IsInteger(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57673, 'IsInteger(''(1, 2, 3))', False);
  Test({LINENUM}57674, 'IsInteger({1, 2, 3})', False);
  Test({LINENUM}57675, 'IsInteger(true)', False);
  Test({LINENUM}57676, 'IsInteger("nargle")', False);
  Test({LINENUM}57677, 'IsInteger(CreatePixmap(512, 512))', False);
  Test({LINENUM}57678, 'IsInteger(SineTone(400))', False);
  Test({LINENUM}57679, 'IsInteger(color("red"))', False);
  Test({LINENUM}57680, 'IsInteger("name": "Albus")', False);
  Test({LINENUM}57681, 'IsInteger(BinaryData("nargle"))', False);

  Test({LINENUM}57683, 'IsNumericEntity(123)', True);
  Test({LINENUM}57684, 'IsNumericEntity(123.0)', True);
  Test({LINENUM}57685, 'IsNumericEntity(25.36)', True);
  Test({LINENUM}57686, 'IsNumericEntity(1/2)', True);
  Test({LINENUM}57687, 'IsNumericEntity(1 + i)', True);
  Test({LINENUM}57688, 'IsNumericEntity(❨1, 0❩)', True);
  Test({LINENUM}57689, 'IsNumericEntity(❨i, 0❩)', True);
  Test({LINENUM}57690, 'IsNumericEntity(❨❨3, 2❩, ❨0, 1❩❩)', True);
  Test({LINENUM}57691, 'IsNumericEntity(❨❨3, i❩, ❨0, 1❩❩)', True);
  Test({LINENUM}57692, 'IsNumericEntity(''(1, 2, 3))', False);
  Test({LINENUM}57693, 'IsNumericEntity({1, 2, 3})', False);
  Test({LINENUM}57694, 'IsNumericEntity(true)', False);
  Test({LINENUM}57695, 'IsNumericEntity("nargle")', False);
  Test({LINENUM}57696, 'IsNumericEntity(CreatePixmap(512, 512))', False);
  Test({LINENUM}57697, 'IsNumericEntity(SineTone(400))', False);
  Test({LINENUM}57698, 'IsNumericEntity(color("red"))', False);
  Test({LINENUM}57699, 'IsNumericEntity("name": "Albus")', False);
  Test({LINENUM}57700, 'IsNumericEntity(BinaryData("nargle"))', False);

  Test({LINENUM}57702, 'IsNumericArray(123)', False);
  Test({LINENUM}57703, 'IsNumericArray(123.0)', False);
  Test({LINENUM}57704, 'IsNumericArray(25.36)', False);
  Test({LINENUM}57705, 'IsNumericArray(1/2)', False);
  Test({LINENUM}57706, 'IsNumericArray(1 + i)', False);
  Test({LINENUM}57707, 'IsNumericArray(❨1, 0❩)', True);
  Test({LINENUM}57708, 'IsNumericArray(❨i, 0❩)', True);
  Test({LINENUM}57709, 'IsNumericArray(❨❨3, 2❩, ❨0, 1❩❩)', True);
  Test({LINENUM}57710, 'IsNumericArray(❨❨3, i❩, ❨0, 1❩❩)', True);
  Test({LINENUM}57711, 'IsNumericArray(''(1, 2, 3))', False);
  Test({LINENUM}57712, 'IsNumericArray({1, 2, 3})', False);
  Test({LINENUM}57713, 'IsNumericArray(true)', False);
  Test({LINENUM}57714, 'IsNumericArray("nargle")', False);
  Test({LINENUM}57715, 'IsNumericArray(CreatePixmap(512, 512))', False);
  Test({LINENUM}57716, 'IsNumericArray(SineTone(400))', False);
  Test({LINENUM}57717, 'IsNumericArray(color("red"))', False);
  Test({LINENUM}57718, 'IsNumericArray("name": "Albus")', False);
  Test({LINENUM}57719, 'IsNumericArray(BinaryData("nargle"))', False);

  Test({LINENUM}57721, 'IsBinaryData(123)', False);
  Test({LINENUM}57722, 'IsBinaryData(123.0)', False);
  Test({LINENUM}57723, 'IsBinaryData(25.36)', False);
  Test({LINENUM}57724, 'IsBinaryData(1/2)', False);
  Test({LINENUM}57725, 'IsBinaryData(1 + i)', False);
  Test({LINENUM}57726, 'IsBinaryData(❨1, 0❩)', False);
  Test({LINENUM}57727, 'IsBinaryData(❨i, 0❩)', False);
  Test({LINENUM}57728, 'IsBinaryData(❨❨3, 2❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57729, 'IsBinaryData(❨❨3, i❩, ❨0, 1❩❩)', False);
  Test({LINENUM}57730, 'IsBinaryData(''(1, 2, 3))', False);
  Test({LINENUM}57731, 'IsBinaryData({1, 2, 3})', False);
  Test({LINENUM}57732, 'IsBinaryData(true)', False);
  Test({LINENUM}57733, 'IsBinaryData("nargle")', False);
  Test({LINENUM}57734, 'IsBinaryData(CreatePixmap(512, 512))', False);
  Test({LINENUM}57735, 'IsBinaryData(SineTone(400))', False);
  Test({LINENUM}57736, 'IsBinaryData(color("red"))', False);
  Test({LINENUM}57737, 'IsBinaryData("name": "Albus")', False);
  Test({LINENUM}57738, 'IsBinaryData(BinaryData("nargle"))', True);


  //
  // Tokenizer and parser functions. Custom function expressions.
  //

  Test({LINENUM}57745, 'tokenize("(2.1 + 3)⋅4! − sin(1 + 1/2^−n)")',
    strarr(
      [
        'Bracket ( – partner at idx 4',
        'Float literal 2.1',
        'Infix operator +',
        'Integer literal 3',
        'Bracket ) – partner at idx 0',
        'Infix operator ⋅',
        'Integer literal 4',
        'Postfix operator !',
        'Infix operator −',
        'Identifier "sin"',
        'Bracket ( applying on left value – partner at idx 19',
        'Integer literal 1',
        'Infix operator +',
        'Integer literal 1',
        'Infix operator /',
        'Integer literal 2',
        'Infix operator ^',
        'Prefix operator −',
        'Identifier "n"',
        'Bracket ) – partner at idx 10'
      ]
    )
  );

  Test({LINENUM}57772, 'parse("(2.1 + 3)⋅4! − sin(1 + 1/2^−n)")',
    'FCN_Subtract'#13#10 +
    '    FCN_Multiply'#13#10 +
    '        FCN_Add'#13#10 +
    '            2.1'#13#10 +
    '            3'#13#10 +
    '        FCN_Factorial'#13#10 +
    '            4'#13#10 +
    '    FCN_sin'#13#10 +
    '        FCN_Add'#13#10 +
    '            1'#13#10 +
    '            FCN_Divide'#13#10 +
    '                1'#13#10 +
    '                FCN_Power'#13#10 +
    '                    2'#13#10 +
    '                    FCN_UnaryMinus'#13#10 +
    '                        n'
  );

  Test({LINENUM}57791, 'f ≔ n ↦ n^2 + 1;', null);
  Test({LINENUM}57792, 'FcnExpr(f)',
    'Arguments: n'#13#10 +
    'FCN_Add'#13#10 +
    '    FCN_Power'#13#10 +
    '        n'#13#10 +
    '        2'#13#10 +
    '    1'
  );
  Test({LINENUM}57800, 'delete(f)', success);


  //
  // Buffer functions
  //

  Test({LINENUM}57807, 'buffers()', strarr([]));

  Test({LINENUM}57809, 'print("testbuf", "alpha")', null);

  Test({LINENUM}57811, 'buffers()', strarr(['testbuf']));
  Test({LINENUM}57812, 'BufferText("testbuf")', 'alpha'#13#10);

  Test({LINENUM}57814, 'print("testbuf", "beta")', null);

  Test({LINENUM}57816, 'buffers()', strarr(['testbuf']));
  Test({LINENUM}57817, 'BufferText("testbuf")', 'alpha'#13#10'beta'#13#10);

  Test({LINENUM}57819, 'print("testbuf", "gamma")', null);

  Test({LINENUM}57821, 'buffers()', strarr(['testbuf']));
  Test({LINENUM}57822, 'BufferText("testbuf")', 'alpha'#13#10'beta'#13#10'gamma'#13#10);

  Test({LINENUM}57824, 'print("testbuf2", "delta")', null);

  Test({LINENUM}57826, 'buffers()', strarr(['testbuf', 'testbuf2']));
  Test({LINENUM}57827, 'BufferText("testbuf")', 'alpha'#13#10'beta'#13#10'gamma'#13#10);
  Test({LINENUM}57828, 'BufferText("testbuf2")', 'delta'#13#10);

  Test({LINENUM}57830, 'print("testbuf", "epsilon")', null);

  Test({LINENUM}57832, 'buffers()', strarr(['testbuf', 'testbuf2']));
  Test({LINENUM}57833, 'BufferText("testbuf")', 'alpha'#13#10'beta'#13#10'gamma'#13#10'epsilon'#13#10);
  Test({LINENUM}57834, 'BufferText("testbuf2")', 'delta'#13#10);

  Test({LINENUM}57836, 'RemoveBuffer("testbuf2")', null);

  Test({LINENUM}57838, 'buffers()', strarr(['testbuf']));
  Test({LINENUM}57839, 'BufferText("testbuf")', 'alpha'#13#10'beta'#13#10'gamma'#13#10'epsilon'#13#10);

  Test({LINENUM}57841, 'RemoveBuffer("testbuf")', null);
  Test({LINENUM}57842, 'buffers()', strarr([]));

  Test({LINENUM}57844, 'RemoveBuffer("testbuf")', failure, 'There is no output buffer named "testbuf".');

  Test({LINENUM}57846, 'print("!", "test")', failure, 'Invalid buffer name "!".');
  Test({LINENUM}57847, 'print(" ", "test")', failure, 'Invalid buffer name " ".');
  Test({LINENUM}57848, 'print("+buf", "test")', failure, 'Invalid buffer name "+buf".');
  Test({LINENUM}57849, 'print(" buf", "test")', failure, 'Invalid buffer name " buf".');


  //
  // History functions
  //

  Test({LINENUM}57856, 'SaveHistory(false)', null);
  Test({LINENUM}57857, 'ClearHistory()', success);
  Test({LINENUM}57858, '1 + 1', 2);
  Test({LINENUM}57859, '5!', 120);
  Test({LINENUM}57860, 'input(1)', 'ClearHistory()');
  Test({LINENUM}57861, 'input(2)', '1 + 1');
  Test({LINENUM}57862, 'input(3)', '5!');
  Test({LINENUM}57863, 'output(1)', null);
  Test({LINENUM}57864, 'output(2)', null);
  Test({LINENUM}57865, 'output(3)', null);

  Test({LINENUM}57867, 'HistoryLength()', 9);

  Test({LINENUM}57869, 'SaveHistory(true)', null);
  Test({LINENUM}57870, 'ClearHistory()', success);
  Test({LINENUM}57871, '1 + 1', 2);
  Test({LINENUM}57872, '5!', 120);
  Test({LINENUM}57873, 'input(1)', 'ClearHistory()');
  Test({LINENUM}57874, 'input(2)', '1 + 1');
  Test({LINENUM}57875, 'input(3)', '5!');
  Test({LINENUM}57876, 'output(1)', success);
  Test({LINENUM}57877, 'output(2)', 2);
  Test({LINENUM}57878, 'output(3)', 120);

  Test({LINENUM}57880, 'SaveHistory(false)', null);
  Test({LINENUM}57881, 'HistoryLength()', 10);


  //
  // Number base setting
  //

  Test({LINENUM}57888, 'bases(10, 12)', null);
  Test({LINENUM}57889, 'bases()', null);
  Test({LINENUM}57890, 'bases(10)', null);


  //
  // Debug objects
  //

  Test({LINENUM}57897, 'DebugObject("empty vector")', TAlgosimRealVector.Create);
  Test({LINENUM}57898, 'DebugObject("empty matrix")', TAlgosimRealMatrix.Create);


  //
  // Property stores
  //

  Test({LINENUM}57905, 'property("nargle")', failure, 'There is no property named "nargle" in store "global".');
  Test({LINENUM}57906, 'property("")', failure, 'There is no property named "" in store "global".');
  Test({LINENUM}57907, 'property("os")', failure, 'There is no property named "os" in store "global".');

  Test({LINENUM}57909, 'type(property("os.UserName"))', 'string');
  Test({LINENUM}57910, 'type(property("os.ComputerName"))', 'string');
  Test({LINENUM}57911, 'type(property("os.WindowsVersion"))', 'structure');
  Test({LINENUM}57912, 'type(property("os.MemoryStatus"))', 'structure');
  Test({LINENUM}57913, 'type(property("os.CPUCount"))', 'integer');
  Test({LINENUM}57914, 'type(property("os.DesktopWindow"))', 'integer');
  Test({LINENUM}57915, 'type(property("os.LastError"))', 'integer');
  Test({LINENUM}57916, 'type(property("os.focus"))', 'integer');
  Test({LINENUM}57917, 'type(property("os.ForegroundWindow"))', 'integer');
  Test({LINENUM}57918, 'type(property("os.ActiveWindow"))', 'integer');
  Test({LINENUM}57919, 'type(property("os.CursorPos"))', 'structure');
  Test({LINENUM}57920, 'type(property("os.CursorPos").x)', 'integer');
  Test({LINENUM}57921, 'type(property("os.CursorPos").y)', 'integer');
  Test({LINENUM}57922, 'type(property("os.MonitorCount"))', 'integer');
  Test({LINENUM}57923, 'type(property("os.fonts"))', 'array');
  Test({LINENUM}57924, '∀(property("os.fonts"), x ↦ type(x) = "string")', True);
  Test({LINENUM}57925, 'type(property("os.clipboard"))', 'string');
  Test({LINENUM}57926, 'type(property("os.NargleCount"))', failure, 'There is no property named "NargleCount" in store "os".');

  Test({LINENUM}57928, 'type(property("os.colors.WINDOW"))', 'color');
  Test({LINENUM}57929, 'type(property("os.colors.WINDOWTEXT"))', 'color');
  Test({LINENUM}57930, 'type(property("os.colors.BTNFACE"))', 'color');
  Test({LINENUM}57931, 'type(property("os.colors.DESKTOP"))', 'color');
  Test({LINENUM}57932, 'type(property("os.colors.HIGHLIGHT"))', 'color');
  Test({LINENUM}57933, 'type(property("os.colors.HIGHLIGHTTEXT"))', 'color');
  Test({LINENUM}57934, 'type(property("os.colors.NARGLEFACE"))', failure, 'There is no property named "NARGLEFACE" in store "colors".');

  Test({LINENUM}57936, 'type(property("os.metrics.SM_CYICON"))', 'integer');
  Test({LINENUM}57937, 'type(property("os.metrics.SM_MEDIACENTER"))', 'integer');
  Test({LINENUM}57938, 'type(property("os.metrics.SM_REMOTESESSION"))', 'integer');
  Test({LINENUM}57939, 'type(property("os.metrics.SM_MOUSEPRESENT"))', 'integer');
  Test({LINENUM}57940, 'type(property("os.metrics.SM_SWAPBUTTON"))', 'integer');
  Test({LINENUM}57941, 'type(property("os.metrics.SM_NARGLEWEIGHT"))', failure, 'There is no property named "SM_NARGLEWEIGHT" in store "metrics".');

  Test({LINENUM}57943, 'type(property("os.keys.VK_F1"))', 'integer');
  Test({LINENUM}57944, 'type(property("os.keys.VK_RETURN"))', 'integer');
  Test({LINENUM}57945, 'type(property("os.keys.VK_BACK"))', 'integer');
  Test({LINENUM}57946, 'type(property("os.keys.VK_HOME"))', 'integer');
  Test({LINENUM}57947, 'type(property("os.keys.VK_DENARGLE"))', failure, 'There is no property named "VK_DENARGLE" in store "keys".');

  with TRegistry.Create do
    try
      RootKey := HKEY_CURRENT_USER;
      if OpenKey('\Software\Rejbrand\Algosim\SelfTest', True) then
      begin
        try
          _i := Random(10000000);
          WriteInteger('TestValue', _i);
          try
            Test({LINENUM}57958, 'property("os.registry.HKEY_CURRENT_USER\Software\Rejbrand\Algosim\SelfTest\TestValue")', _i);
          finally
            DeleteValue('TestValue');
          end;
          WriteString('TestValue', 'nargles');
          try
            Test({LINENUM}57964, 'property("os.registry.HKEY_CURRENT_USER\Software\Rejbrand\Algosim\SelfTest\TestValue")', 'nargles');
          finally
            DeleteValue('TestValue');
          end;
        finally
          DeleteKey('\Software\Rejbrand\Algosim\SelfTest');
        end;
      end;
    finally
      Free;
    end;

  if SetEnvironmentVariable('AlgosimSelfTest', 'nargle') then
    try
      Test({LINENUM}57978, 'property("os.environment.AlgosimSelfTest")', 'nargle');
    finally
      SetEnvironmentVariable('AlgosimSelfTest', nil)
    end;





  //
  //
  //  CHAPTER 12
  //  Control flow.
  //
  //

  Chapter('Control flow');

  //
  // do
  //

  Test({LINENUM}58000, 'do(123, true, 5.5, IdentityMatrix(10), color("red"), "page 394")', 'page 394');
  Test({LINENUM}58001, 'do(123, "page 394")', 'page 394');
  Test({LINENUM}58002, 'do("page 394")', 'page 394');
  Test({LINENUM}58003, 'do()', null);


  //
  // if
  //

  Test({LINENUM}58010, 'if(true, "cat")', 'cat');
  Test({LINENUM}58011, 'if(false, "cat")', null);
  Test({LINENUM}58012, 'if(true, "cat", "dog")', 'cat');
  Test({LINENUM}58013, 'if(false, "cat", "dog")', 'dog');

  Test({LINENUM}58015, 'if(true, "good", 1/0)', 'good');
  Test({LINENUM}58016, 'if(false, 1/0, "good again")', 'good again');

  Test({LINENUM}58018, 'if(true, 1/0, "dummy")', failure, 'Division by zero');
  Test({LINENUM}58019, 'if(false, "dummy", 1/0)', failure, 'Division by zero');

  Test({LINENUM}58021, 'if(1/0 > 5, "Interesting.", "You don''t say?")', failure, 'Division by zero');

  Test({LINENUM}58023, 'f ≔ x ↦ if(x ≠ 0, 1/x, 0);', null);
  Test({LINENUM}58024, 'f(5)', rat(1, 5));
  Test({LINENUM}58025, 'f(-2)', rat(-1, 2));
  Test({LINENUM}58026, 'f(0)', 0);

  Test({LINENUM}58028, 'f ≔ z ↦ if(IsNumber(z), if(z ≈ 0, "zero", if(IsReal(z), "real", if(Re(z) ≈ 0, "purely imaginary", "mixed"))), "NaN");', null);
  Test({LINENUM}58029, 'f(0)', 'zero');
  Test({LINENUM}58030, 'f(4)', 'real');
  Test({LINENUM}58031, 'f(−2)', 'real');
  Test({LINENUM}58032, 'f(4⋅i)', 'purely imaginary');
  Test({LINENUM}58033, 'f(−i)', 'purely imaginary');
  Test({LINENUM}58034, 'f(i)', 'purely imaginary');
  Test({LINENUM}58035, 'f(1 + i)', 'mixed');
  Test({LINENUM}58036, 'f(5 − 3⋅i)', 'mixed');
  Test({LINENUM}58037, 'f("rat")', 'NaN');

  Test({LINENUM}58039, 'N ≔ 5; N ≔ N^2; if(N ≠ 0, (N ≔ 1/N)); N', rat(1, 25));
  Test({LINENUM}58040, 'N ≔ 7; N ≔ N^2; if(N ≠ 0, (N ≔ 1/N)); N', rat(1, 49));
  Test({LINENUM}58041, 'N ≔ 10; N ≔ N^2; if(N ≠ 0, (N ≔ 1/N)); N', rat(1, 100));
  Test({LINENUM}58042, 'N ≔ 0; N ≔ N^2; if(N ≠ 0, (N ≔ 1/N)); N', 0);


  //
  // while
  //

  Test({LINENUM}58049, 'n ≔ 0; while(n < 100, inc(n)); n', 100);
  Test({LINENUM}58050, 'n ≔ 0; while(n! > 0, dec(n)); n', failure, 'A non-negative integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}58051, 'ErrorInfo(LastError()).stack', strarr(['factorial', 'GreaterThan', 'while', 'do', 'LastError']));
  Test({LINENUM}58052, 'while(5 > "cat", inc(n))', failure, 'Invalid function arguments.');
  Test({LINENUM}58053, 'n ≔ 100; while(IsNumber(n), (n!; dec(n))); n', failure, 'A non-negative integer was expected as argument 1, but "-1" was given.');
  Test({LINENUM}58054, 'ErrorInfo(LastError()).stack', strarr(['factorial', 'do', 'while', 'do', 'LastError']));

  Test({LINENUM}58056, 'n ≔ 10; while(¬IsPrime(n), (n ≔ RandomInt(1000))); IsPrime(n)', True);

  Test({LINENUM}58058, 'N ≔ 10; n, k ≔ 1; while(k ≤ N, (n ≔ n⋅k; inc(k))); n', 3628800);
  Test({LINENUM}58059, 'N ≔ 5; n, k ≔ 1; while(k ≤ N, (n ≔ n⋅k; inc(k))); n', 120);
  Test({LINENUM}58060, 'N ≔ 0; n, k ≔ 1; while(k ≤ N, (n ≔ n⋅k; inc(k))); n', 1);

  Test({LINENUM}58062, 'N ≔ 50; k ≔ 2; f, fp ≔ 1; fpp ≔ 0; while(k ≤ N, (f ≔ fp + fpp; (fp, fpp) ≔ (f, fp); inc(k))); f', 12586269025);

  Test({LINENUM}58064, 'fib ≔ N ↦ (k ≔ 2; f, fp ≔ 1; fpp ≔ 0; while(k ≤ N, (f ≔ fp + fpp; (fp, fpp) ≔ (f, fp); inc(k))); f);', null);
  Test({LINENUM}58065, 'fib(10)', 55);
  Test({LINENUM}58066, 'fib(20)', 6765);
  Test({LINENUM}58067, 'fib(30)', 832040);
  Test({LINENUM}58068, 'fib(40)', 102334155);
  Test({LINENUM}58069, 'fib(50)', 12586269025);
  Test({LINENUM}58070, 'fib(60)', 1548008755920);
  Test({LINENUM}58071, 'fib(70)', 190392490709135);
  Test({LINENUM}58072, 'fib(80)', 23416728348467685);
  Test({LINENUM}58073, 'fib(90)', 2880067194370816120);

  Test({LINENUM}58075, 'f ≔ n ↦ mod(71327⋅n + 32117, 95063);', null);
  Test({LINENUM}58076, 'n ≔ 0; while(f(n) ≠ 10000, inc(n)); n', 12837);

  Test({LINENUM}58078, 's ≔ ""; y ≔ 0; while(y ≤ 9, (x ≔ 0; while(x ≤ 9, (VarExtendWith(s, string(y) ~ string(x)); inc(x))); VarExtendWith(s, ¶); inc(y))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '50515253545556575859'#13#10 +
    '60616263646566676869'#13#10 +
    '70717273747576777879'#13#10 +
    '80818283848586878889'#13#10 +
    '90919293949596979899'#13#10
  );

  Test({LINENUM}58091, 's ≔ 0; n ≔ 1; while(n ≤ 1000, (inc(s, n); inc(n))); s', 500500);
  Test({LINENUM}58092, 's ≔ 0; n ≔ 1; while(true, (inc(s, n); inc(n); if(n > 1000, break()))); s', 500500);
  Test({LINENUM}58093, 's ≔ 0; n ≔ 1; while(n ≤ 1000, (if(n = 500, (inc(n); continue())); inc(s, n); inc(n))); s', 500000);

  Test({LINENUM}58095, 's ≔ ""; y ≔ 0; while(y ≤ 9, (x ≔ 0; while(true, (VarExtendWith(s, string(y) ~ string(x)); inc(x); if(x = 10, break()))); VarExtendWith(s, ¶); inc(y))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '50515253545556575859'#13#10 +
    '60616263646566676869'#13#10 +
    '70717273747576777879'#13#10 +
    '80818283848586878889'#13#10 +
    '90919293949596979899'#13#10
  );

  Test({LINENUM}58108, 's ≔ ""; y ≔ 0; while(true, (x ≔ 0; while(x ≤ 9, (VarExtendWith(s, string(y) ~ string(x)); inc(x))); VarExtendWith(s, ¶); inc(y); if(y = 10, break()))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '50515253545556575859'#13#10 +
    '60616263646566676869'#13#10 +
    '70717273747576777879'#13#10 +
    '80818283848586878889'#13#10 +
    '90919293949596979899'#13#10
  );

  Test({LINENUM}58121, 's ≔ ""; y ≔ 0; while(y ≤ 9, (if(y = 5, (inc(y); continue())); x ≔ 0; while(x ≤ 9, (VarExtendWith(s, string(y) ~ string(x)); inc(x))); VarExtendWith(s, ¶); inc(y))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '60616263646566676869'#13#10 +
    '70717273747576777879'#13#10 +
    '80818283848586878889'#13#10 +
    '90919293949596979899'#13#10
  );

  Test({LINENUM}58133, 's ≔ ""; y ≔ 0; while(y ≤ 9, (x ≔ 0; while(x ≤ 9, (if(x = 3, (inc(x); continue())); VarExtendWith(s, string(y) ~ string(x)); inc(x))); VarExtendWith(s, ¶); inc(y))); s',
    '000102040506070809'#13#10 +
    '101112141516171819'#13#10 +
    '202122242526272829'#13#10 +
    '303132343536373839'#13#10 +
    '404142444546474849'#13#10 +
    '505152545556575859'#13#10 +
    '606162646566676869'#13#10 +
    '707172747576777879'#13#10 +
    '808182848586878889'#13#10 +
    '909192949596979899'#13#10
  );

  Test({LINENUM}58146, 's ≔ ""; y ≔ 0; while(y ≤ 9, (if(y = 5, (inc(y); continue())); if(y = 8, break()); x ≔ 0; while(x ≤ 9, (VarExtendWith(s, string(y) ~ string(x)); inc(x))); VarExtendWith(s, ¶); inc(y))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '60616263646566676869'#13#10 +
    '70717273747576777879'#13#10
  );

  Test({LINENUM}58156, 'A ≔ VandermondeMatrix(SequenceVector(6));', null);
  Test({LINENUM}58157, 'c ≔ 0; HasThreeDigit ≔ false; y ≔ 1; while(y ≤ height(A), (x ≔ 1; while(x ≤ width(A), (inc(c); if(A[y, x] ≥ 100, (HasThreeDigit ≔ true)); inc(x))); inc(y))); ''(HasThreeDigit, c)',
    asoarr([True, 36]));
  Test({LINENUM}58159, 'c ≔ 0; HasThreeDigit ≔ false; y ≔ 1; while(y ≤ height(A), (x ≔ 1; while(x ≤ width(A), (inc(c); if(A[y, x] ≥ 100, (HasThreeDigit ≔ true; break(2))); inc(x))); inc(y))); ''(HasThreeDigit, c)',
    asoarr([True, 18]));

  Test({LINENUM}58162, 'A ≔ VandermondeMatrix(❨2, 1, 0, 6, 2, 4❩);', null);
  Test({LINENUM}58163, 'c ≔ 0; HasThreeDigit ≔ false; y ≔ 1; while(y ≤ height(A), (x ≔ 1; while(x ≤ width(A), (inc(c); if(A[y, x] ≥ 100, (HasThreeDigit ≔ true; break(2))); inc(x))); inc(y))); ''(HasThreeDigit, c)',
    asoarr([True, 22]));

  Test({LINENUM}58166, 'A ≔ VandermondeMatrix(❨2, 1, 2, 2, 3❩);', null);
  Test({LINENUM}58167, 'c ≔ 0; HasThreeDigit ≔ false; y ≔ 1; while(y ≤ height(A), (x ≔ 1; while(x ≤ width(A), (inc(c); if(A[y, x] ≥ 100, (HasThreeDigit ≔ true; break(2))); inc(x))); inc(y))); ''(HasThreeDigit, c)',
    asoarr([False, 25]));

  Test({LINENUM}58170, 'A ≔ VandermondeMatrix(❨2, 1, 2, 2, 3, 7, 2❩);', null);
  Test({LINENUM}58171, 'c ≔ 0; HasThreeDigit ≔ false; y ≔ 1; while(y ≤ height(A), (x ≔ 1; while(x ≤ width(A), (inc(c); if(A[y, x] ≥ 100, (HasThreeDigit ≔ true; break(2))); inc(x))); inc(y))); ''(HasThreeDigit, c)',
    asoarr([True, 34]));

  Test({LINENUM}58174, 'n, s ≔ 0; while(n ≤ 10, (inc(s, n); inc(n); if(n = 11, continue()))); s', 55);


  //
  // until
  //

  Test({LINENUM}58181, 'n ≔ 0; until(inc(n), n = 10); n', 10);
  Test({LINENUM}58182, 's, n ≔ 0; until((inc(n); inc(s, n)), n = 100); s', 5050);
  Test({LINENUM}58183, 'until((n ≔ RandomInt(1000)), IsPrime(n)); IsPrime(n)', True);

  Test({LINENUM}58185, 'until((n ≔ RandomInt(1000 / 0)), IsPrime(n)); IsPrime(n)', failure, 'Division by zero');
  Test({LINENUM}58186, 'ErrorInfo(LastError()).stack', strarr(['divide', 'RandomInt', 'list node', 'assign', 'until', 'do', 'LastError']));

  Test({LINENUM}58188, 'until((n ≔ RandomInt(1000)), IsPrime(n/π)); IsPrime(n)', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}58189, 'ErrorInfo(LastError()).stack', strarr(['IsPrime', 'until', 'do', 'LastError']));

  Test({LINENUM}58191, 's, n ≔ 0; until((inc(n); inc(s, n); if(n = 100, break())), n = 1000); s', 5050);
  Test({LINENUM}58192, 's, n ≔ 0; until((inc(n); if(n = 50, continue()); inc(s, n)), n = 100); s', 5000);

  Test({LINENUM}58194, 'A ≔ ZeroMatrix(10); y ≔ 0; until((inc(y); x ≔ 0; until((inc(x); A[y, x] ≔ x⋅y), x = 10)), y = 10); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58208, 'A ≔ ZeroMatrix(10); y ≔ 0; until((inc(y); x ≔ 0; until((inc(x); if(x = 5, continue()); A[y, x] ≔ x⋅y), x = 10)), y = 10); A', 10,
    [
      1, 2, 3, 4, 0, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 0, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 0, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 0, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 0, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 0, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 0, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 0, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 0, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 0, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58222, 'A ≔ ZeroMatrix(10); y ≔ 0; until((inc(y); x ≔ 0; until((inc(x); if(x = 8, break()); A[y, x] ≔ x⋅y), x = 10)), y = 10); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 0, 0, 0,
      2, 4, 6, 8, 10, 12, 14, 0, 0, 0,
      3, 6, 9, 12, 15, 18, 21, 0, 0, 0,
      4, 8, 12, 16, 20, 24, 28, 0, 0, 0,
      5, 10, 15, 20, 25, 30, 35, 0, 0, 0,
      6, 12, 18, 24, 30, 36, 42, 0, 0, 0,
      7, 14, 21, 28, 35, 42, 49, 0, 0, 0,
      8, 16, 24, 32, 40, 48, 56, 0, 0, 0,
      9, 18, 27, 36, 45, 54, 63, 0, 0, 0,
      10, 20, 30, 40, 50, 60, 70, 0, 0, 0
    ]);

  Test({LINENUM}58236, 'A ≔ ZeroMatrix(10); y ≔ 0; until((inc(y); if(y = 3, continue()); x ≔ 0; until((inc(x); A[y, x] ≔ x⋅y), x = 10)), y = 10); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58250, 'A ≔ ZeroMatrix(10); y ≔ 0; until((inc(y); if(y = 9, break()); x ≔ 0; until((inc(x); A[y, x] ≔ x⋅y), x = 10)), y = 10); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    ]);

  Test({LINENUM}58264, 'A ≔ ZeroMatrix(10); y ≔ 0; until((inc(y); x ≔ 0; until((inc(x); if(y = 7 ∧ x = 4, continue()); A[y, x] ≔ x⋅y), x = 10)), y = 10); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 0, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58278, 'A ≔ ZeroMatrix(10); y ≔ 0; until((inc(y); x ≔ 0; until((inc(x); if(y = 7 ∧ x = 4, break()); A[y, x] ≔ x⋅y), x = 10)), y = 10); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 0, 0, 0, 0, 0, 0, 0,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58292, 'A ≔ ZeroMatrix(10); y ≔ 0; until((inc(y); x ≔ 0; until((inc(x); if(y = 7 ∧ x = 4, break(2)); A[y, x] ≔ x⋅y), x = 10)), y = 10); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    ]);

  Test({LINENUM}58306, 'A ≔ ZeroMatrix(10); y ≔ 0; until((inc(y); if(y = 3, continue()); if(y = 9, break()); x ≔ 0; until((inc(x); A[y, x] ≔ x⋅y), x = 10)), y = 10); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    ]);

  Test({LINENUM}58320, 'n, s ≔ 0; until((inc(n); inc(s, n); if(n = 10, continue())), n = 10); s', 55);


  //
  // repeat
  //

  Test({LINENUM}58327, 'n, s ≔ 0; repeat(inc(n); inc(s, n); if(n = 10, break())); s', 55);
  Test({LINENUM}58328, 'n, s ≔ 0; repeat(inc(n); inc(s, n); if(n = 100, break())); s', 5050);
  Test({LINENUM}58329, 'n, s ≔ 0; repeat(inc(n); inc(s, n); if(n = 1000, break())); s', 500500);

  Test({LINENUM}58331, 'n, s ≔ 0; repeat(inc(n); if(n = 5, continue()); inc(s, n); if(n = 10, break())); s', 50);
  Test({LINENUM}58332, 'n, s ≔ 0; repeat(inc(n); if(n = 50, continue()); inc(s, n); if(n = 100, break())); s', 5000);
  Test({LINENUM}58333, 'n, s ≔ 0; repeat(inc(n); if(n = 500, continue()); inc(s, n); if(n = 1000, break())); s', 500000);

  Test({LINENUM}58335, 'A ≔ ZeroMatrix(10); y ≔ 0; repeat(inc(y); x ≔ 0; repeat(inc(x); A[y, x] ≔ y⋅x; if(x = 10, break())); if(y = 10, break())); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58349, 'A ≔ ZeroMatrix(10); y ≔ 0; repeat(inc(y); x ≔ 0; repeat(inc(x); if(x = 6, continue()); A[y, x] ≔ y⋅x; if(x = 10, break())); if(y = 10, break())); A', 10,
    [
      1, 2, 3, 4, 5, 0, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 0, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 0, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 0, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 0, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 0, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 0, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 0, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 0, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 0, 70, 80, 90, 100
    ]);

  Test({LINENUM}58363, 'A ≔ ZeroMatrix(10); y ≔ 0; repeat(inc(y); if(y = 3, continue()); x ≔ 0; repeat(inc(x); A[y, x] ≔ y⋅x; if(x = 10, break())); if(y = 10, break())); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58377, 'A ≔ ZeroMatrix(10); y ≔ 0; repeat(inc(y); x ≔ 0; repeat(inc(x); if(x = 7 ∧ y = 8, continue()); A[y, x] ≔ y⋅x; if(x = 10, break())); if(y = 10, break())); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 0, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58391, 'A ≔ ZeroMatrix(10); y ≔ 0; repeat(inc(y); x ≔ 0; repeat(inc(x); if(x = 7 ∧ y = 8, break()); A[y, x] ≔ y⋅x; if(x = 10, break())); if(y = 10, break())); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 0, 0, 0, 0,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58405, 'A ≔ ZeroMatrix(10); y ≔ 0; repeat(inc(y); x ≔ 0; repeat(inc(x); if(x = 7 ∧ y = 8, break(1)); A[y, x] ≔ y⋅x; if(x = 10, break())); if(y = 10, break())); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 0, 0, 0, 0,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58419, 'A ≔ ZeroMatrix(10); y ≔ 0; repeat(inc(y); x ≔ 0; repeat(inc(x); if(x = 7 ∧ y = 8, break(2)); A[y, x] ≔ y⋅x; if(x = 10, break())); if(y = 10, break())); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    ]);


  //
  // for
  //

  Test({LINENUM}58438, 's ≔ 0; for(i, 1, 1000, inc(s, i)); s', 500500);
  Test({LINENUM}58439, 's ≔ 0; for(i, 1, 1000000000000000, (inc(s, i); if(i = 1000, break()))); s', 500500);
  Test({LINENUM}58440, 's ≔ 0; for(i, 1, 1000, (if(i = 500, continue()); inc(s, i))); s', 500000);

  Test({LINENUM}58442, 'N ≔ 10; n ≔ 1; for(k, 1, N, (n ≔ n ⋅ k)); n', 3628800);
  Test({LINENUM}58443, 'N ≔ 5; n ≔ 1; for(k, 1, N, (n ≔ n ⋅ k)); n', 120);
  Test({LINENUM}58444, 'N ≔ 0; n ≔ 1; for(k, 1, N, (n ≔ n ⋅ k)); n', 1);

  Test({LINENUM}58446, 'for(i, 1, 10, 1 + i/0)', failure, 'Division by zero');
  Test({LINENUM}58447, 'ErrorInfo(LastError()).stack', strarr(['divide', 'add', 'for', 'LastError']));

  Test({LINENUM}58449, 'for(i, 1, 10/0, 1 + i)', failure, 'Division by zero');
  Test({LINENUM}58450, 'ErrorInfo(LastError()).stack', strarr(['divide', 'for', 'LastError']));

  Test({LINENUM}58452, 'for(i, 1/0, 10, 1 + i)', failure, 'Division by zero');
  Test({LINENUM}58453, 'ErrorInfo(LastError()).stack', strarr(['divide', 'for', 'LastError']));

  Test({LINENUM}58455, 'for(i/0, 1, 10, 1 + i)', failure, 'A symbol was expected as argument 1.');
  Test({LINENUM}58456, 'for(i, "a", 10, i)', failure, 'An object of type integer was expected as argument 2, but an object of type string was given.');
  Test({LINENUM}58457, 'for(i, 1, true, i)', failure, 'An object of type integer was expected as argument 3, but an object of type boolean was given.');

  Test({LINENUM}58459, 's ≔ ""; for(y, 0, 9, (for(x, 0, 9, VarExtendWith(s, string(y) ~ string(x))); VarExtendWith(s, ¶))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '50515253545556575859'#13#10 +
    '60616263646566676869'#13#10 +
    '70717273747576777879'#13#10 +
    '80818283848586878889'#13#10 +
    '90919293949596979899'#13#10
  );

  Test({LINENUM}58472, 's ≔ ""; for(y, 0, 9, (for(x, 0, 100000, (VarExtendWith(s, string(y) ~ string(x)); if(x = 9, break()))); VarExtendWith(s, ¶))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '50515253545556575859'#13#10 +
    '60616263646566676869'#13#10 +
    '70717273747576777879'#13#10 +
    '80818283848586878889'#13#10 +
    '90919293949596979899'#13#10
  );

  Test({LINENUM}58485, 's ≔ ""; for(y, 0, 100000, (for(x, 0, 9, VarExtendWith(s, string(y) ~ string(x))); VarExtendWith(s, ¶); if(y = 9, break()))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '50515253545556575859'#13#10 +
    '60616263646566676869'#13#10 +
    '70717273747576777879'#13#10 +
    '80818283848586878889'#13#10 +
    '90919293949596979899'#13#10
  );

  Test({LINENUM}58498, 's ≔ ""; for(y, 0, 9, (if(y = 5, continue()); for(x, 0, 9, VarExtendWith(s, string(y) ~ string(x))); VarExtendWith(s, ¶))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '60616263646566676869'#13#10 +
    '70717273747576777879'#13#10 +
    '80818283848586878889'#13#10 +
    '90919293949596979899'#13#10
  );

  Test({LINENUM}58510, 's ≔ ""; for(y, 0, 9, (for(x, 0, 9, (if(x = 2, continue()); VarExtendWith(s, string(y) ~ string(x)))); VarExtendWith(s, ¶))); s',
    '000103040506070809'#13#10 +
    '101113141516171819'#13#10 +
    '202123242526272829'#13#10 +
    '303133343536373839'#13#10 +
    '404143444546474849'#13#10 +
    '505153545556575859'#13#10 +
    '606163646566676869'#13#10 +
    '707173747576777879'#13#10 +
    '808183848586878889'#13#10 +
    '909193949596979899'#13#10
  );

  Test({LINENUM}58523, 'A ≔ VandermondeMatrix(SequenceVector(6));', null);
  Test({LINENUM}58524, 'c ≔ 0; HasThreeDigit ≔ false; for(y, 1, height(A), (for(x, 1, width(A), (inc(c); if(A[y, x] ≥ 100, (HasThreeDigit ≔ true)))))); ''(HasThreeDigit, c)',
    asoarr([True, 36]));
  Test({LINENUM}58526, 'c ≔ 0; HasThreeDigit ≔ false; for(y, 1, height(A), (for(x, 1, width(A), (inc(c); if(A[y, x] ≥ 100, (HasThreeDigit ≔ true; break(2))))))); ''(HasThreeDigit, c)',
    asoarr([True, 18]));

  Test({LINENUM}58529, 'A ≔ VandermondeMatrix(❨2, 1, 0, 6, 2, 4❩);', null);
  Test({LINENUM}58530, 'c ≔ 0; HasThreeDigit ≔ false; for(y, 1, height(A), (for(x, 1, width(A), (inc(c); if(A[y, x] ≥ 100, (HasThreeDigit ≔ true; break(2))))))); ''(HasThreeDigit, c)',
    asoarr([True, 22]));

  Test({LINENUM}58533, 'A ≔ VandermondeMatrix(❨2, 1, 2, 2, 3❩);', null);
  Test({LINENUM}58534, 'c ≔ 0; HasThreeDigit ≔ false; for(y, 1, height(A), (for(x, 1, width(A), (inc(c); if(A[y, x] ≥ 100, (HasThreeDigit ≔ true; break(2))))))); ''(HasThreeDigit, c)',
    asoarr([False, 25]));

  Test({LINENUM}58537, 'A ≔ VandermondeMatrix(❨2, 1, 2, 2, 3, 7, 2❩);', null);
  Test({LINENUM}58538, 'c ≔ 0; HasThreeDigit ≔ false; for(y, 1, height(A), (for(x, 1, width(A), (inc(c); if(A[y, x] ≥ 100, (HasThreeDigit ≔ true; break(2))))))); ''(HasThreeDigit, c)',
    asoarr([True, 34]));

  Test({LINENUM}58541, 'A ≔ ZeroMatrix(10); for(i, 1, 10, for(j, 1, 10, (A[i, j] ≔ i⋅j))); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58555, 'A ≔ ZeroMatrix(10); for(i, 1, 10, for(j, 1, 10, (if(i = 7 ∧ j = 5, continue()); A[i, j] ≔ i⋅j))); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 0, 42, 49, 56, 63, 70,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58569, 'A ≔ ZeroMatrix(10); for(i, 1, 10, for(j, 1, 10, (if(i = 7 ∧ j = 5, break()); A[i, j] ≔ i⋅j))); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 0, 0, 0, 0, 0, 0,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58583, 'A ≔ ZeroMatrix(10); for(i, 1, 10, for(j, 1, 10, (if(i = 7 ∧ j = 5, break(1)); A[i, j] ≔ i⋅j))); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 0, 0, 0, 0, 0, 0,
      8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
      9, 18, 27, 36, 45, 54, 63, 72, 81, 90,
      10, 20, 30, 40, 50, 60, 70, 80, 90, 100
    ]);

  Test({LINENUM}58597, 'A ≔ ZeroMatrix(10); for(i, 1, 10, for(j, 1, 10, (if(i = 7 ∧ j = 5, break(2)); A[i, j] ≔ i⋅j))); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    ]);

  Test({LINENUM}58611, 'A ≔ ZeroMatrix(10); for(i, 1, 10, (if(i = 2, continue()); if(i = 8, break()); for(j, 1, 10, (A[i, j] ≔ i⋅j)))); A', 10,
    [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      3, 6, 9, 12, 15, 18, 21, 24, 27, 30,
      4, 8, 12, 16, 20, 24, 28, 32, 36, 40,
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50,
      6, 12, 18, 24, 30, 36, 42, 48, 54, 60,
      7, 14, 21, 28, 35, 42, 49, 56, 63, 70,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    ]);

  Test({LINENUM}58625, 'A ≔ ZeroMatrix(10); for(y, 1, 10, for(x, 1, 10, (x ≔ 4; A[y, x] ≔ y⋅x))); A', failure,
   'Left side cannot be assigned to.');

  Test({LINENUM}58628, 'A ≔ ZeroMatrix(10); for(y, 1, 10, for(x, 1, 10, (dec(x); A[y, x] ≔ y⋅x))); A', failure,
   'Left side cannot be assigned to.');

  Test({LINENUM}58631, 'A ≔ ZeroMatrix(10); for(y, 1, 10, for(x, 1, 10, (y ≔ 4; A[y, x] ≔ y⋅x))); A', failure,
   'Left side cannot be assigned to.');

  Test({LINENUM}58634, 'A ≔ ZeroMatrix(10); for(y, 1, 10, for(x, 1, 10, (dec(y); A[y, x] ≔ y⋅x))); A', failure,
   'Left side cannot be assigned to.');


  //
  // ForEach
  //

  Test({LINENUM}58642, 'L ≔ SequenceList(100); v ≔ SequenceVector(100); cv ≔ ComplexVector(v); S ≔ ToSet(L);', null);
  Test({LINENUM}58643, 'A ≔ matrix(10, ToList(v)); CA ≔ ComplexMatrix(A);', null);

  Test({LINENUM}58645, 's ≔ 0; ForEach(L, x, inc(s, x)); s', 5050);
  Test({LINENUM}58646, 's ≔ 0; ForEach(v, x, inc(s, x)); s', 5050);
  Test({LINENUM}58647, 's ≔ 0; ForEach(cv, x, inc(s, x)); s', 5050);
  Test({LINENUM}58648, 's ≔ 0; ForEach(S, x, inc(s, x)); s', 5050);
  Test({LINENUM}58649, 's ≔ 0; ForEach(A, x, inc(s, x)); s', 5050);
  Test({LINENUM}58650, 's ≔ 0; ForEach(CA, x, inc(s, x)); s', 5050);

  Test({LINENUM}58652, 's ≔ 0; ForEach(L, x, (if(x = 50, continue()); inc(s, x))); s', 5000);
  Test({LINENUM}58653, 's ≔ 0; ForEach(v, x, (if(x = 50, continue()); inc(s, x))); s', 5000);
  Test({LINENUM}58654, 's ≔ 0; ForEach(cv, x, (if(x = 50, continue()); inc(s, x))); s', 5000);
  Test({LINENUM}58655, 's ≔ 0; ForEach(S, x, (if(x = 50, continue()); inc(s, x))); s', 5000);
  Test({LINENUM}58656, 's ≔ 0; ForEach(A, x, (if(x = 50, continue()); inc(s, x))); s', 5000);
  Test({LINENUM}58657, 's ≔ 0; ForEach(CA, x, (if(x = 50, continue()); inc(s, x))); s', 5000);

  Test({LINENUM}58659, 's ≔ 0; ForEach(L, x, (if(x = 50, break()); inc(s, x))); s', 1225);
  Test({LINENUM}58660, 's ≔ 0; ForEach(v, x, (if(x = 50, break()); inc(s, x))); s', 1225);
  Test({LINENUM}58661, 's ≔ 0; ForEach(cv, x, (if(x = 50, break()); inc(s, x))); s', 1225);
  Test({LINENUM}58662, 's ≔ 0; ForEach(A, x, (if(x = 50, break()); inc(s, x))); s', 1225);
  Test({LINENUM}58663, 's ≔ 0; ForEach(CA, x, (if(x = 50, break()); inc(s, x))); s', 1225);

  Test({LINENUM}58665, 'S ≔ S ∪ {50.5};', null);
  Test({LINENUM}58666, 'ForEach(S, x, odd(x))', failure, 'An object of type integer was expected as argument 1, but an object of type real number was given.');
  Test({LINENUM}58667, 'ErrorInfo(LastError()).stack', strarr(['odd', 'ForEach', 'LastError']));

  Test({LINENUM}58669, 's ≔ 0; ForEach(L/0, x, inc(s, x)); s', failure, 'Invalid function arguments.');
  Test({LINENUM}58670, 's ≔ 0; ForEach(L, x/0, inc(s, x)); s', failure, 'A symbol was expected as argument 2.');

  Test({LINENUM}58672, 'L ≔ SequenceList(0, 9); s ≔ ""; ForEach(L, y, (ForEach(L, x, VarExtendWith(s, string(y) ~ string(x))); VarExtendWith(s, ¶))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '50515253545556575859'#13#10 +
    '60616263646566676869'#13#10 +
    '70717273747576777879'#13#10 +
    '80818283848586878889'#13#10 +
    '90919293949596979899'#13#10
  );

  Test({LINENUM}58685, 'L ≔ SequenceList(0, 9); s ≔ ""; ForEach(L, y, (if(y = 7, continue()); ForEach(L, x, VarExtendWith(s, string(y) ~ string(x))); VarExtendWith(s, ¶))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '50515253545556575859'#13#10 +
    '60616263646566676869'#13#10 +
    '80818283848586878889'#13#10 +
    '90919293949596979899'#13#10
  );

  Test({LINENUM}58697, 'L ≔ SequenceList(0, 9); s ≔ ""; ForEach(L, y, (if(y = 7, break()); ForEach(L, x, VarExtendWith(s, string(y) ~ string(x))); VarExtendWith(s, ¶))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '40414243444546474849'#13#10 +
    '50515253545556575859'#13#10 +
    '60616263646566676869'#13#10
  );

  Test({LINENUM}58707, 'L ≔ SequenceList(0, 9); s ≔ ""; ForEach(L, y, (ForEach(L, x, (if(x = 6, continue()); VarExtendWith(s, string(y) ~ string(x)))); VarExtendWith(s, ¶))); s',
    '000102030405070809'#13#10 +
    '101112131415171819'#13#10 +
    '202122232425272829'#13#10 +
    '303132333435373839'#13#10 +
    '404142434445474849'#13#10 +
    '505152535455575859'#13#10 +
    '606162636465676869'#13#10 +
    '707172737475777879'#13#10 +
    '808182838485878889'#13#10 +
    '909192939495979899'#13#10
  );

  Test({LINENUM}58720, 'L ≔ SequenceList(0, 9); s ≔ ""; ForEach(L, y, (ForEach(L, x, (if(x = 6, break()); VarExtendWith(s, string(y) ~ string(x)))); VarExtendWith(s, ¶))); s',
    '000102030405'#13#10 +
    '101112131415'#13#10 +
    '202122232425'#13#10 +
    '303132333435'#13#10 +
    '404142434445'#13#10 +
    '505152535455'#13#10 +
    '606162636465'#13#10 +
    '707172737475'#13#10 +
    '808182838485'#13#10 +
    '909192939495'#13#10
  );

  Test({LINENUM}58733, 'L ≔ SequenceList(0, 9); s ≔ ""; ForEach(L, y, (ForEach(L, x, (if(y = 4 ∧ x = 6, break(2)); VarExtendWith(s, string(y) ~ string(x)))); VarExtendWith(s, ¶))); s',
    '00010203040506070809'#13#10 +
    '10111213141516171819'#13#10 +
    '20212223242526272829'#13#10 +
    '30313233343536373839'#13#10 +
    '404142434445'
  );

  Test({LINENUM}58741, 's ≔ "It does not do to dwell on dreams and forget to live.";', null);
  Test({LINENUM}58742, 'counts ≔ ''(0, 0, 0); ForEach(s, c, (if(ChrIsLetter(c), inc(counts[1])); if(ChrIsWhitespace(c), inc(counts[2])); if(ChrIsPunctuation(c), inc(counts[3])))); counts', intarr([41, 11, 1]));





  //
  //
  //  CHAPTER 13
  //  Sounds
  //
  //

  Chapter('Sounds');

  Test({LINENUM}58757, 'a ≔ SineTone(400, 0.1, 5); b ≔ SineTone(800, 0.1, 5);', null);
  Test({LINENUM}58758, 'type(a)', 'sound');
  Test({LINENUM}58759, 'type(b)', 'sound');
  Test({LINENUM}58760, 'AsSingleLine(a)', 'A 5.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58761, 'AsSingleLine(b)', 'A 5.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58762, 'AudioMetadata(a)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(5.0), ASOInt(48000), ASOInt(240000), ASOInt(960000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );
  Test({LINENUM}58768, 'AudioMetadata(b)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(5.0), ASOInt(48000), ASOInt(240000), ASOInt(960000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );
  Test({LINENUM}58774, 'a = b', False);

  Test({LINENUM}58776, 'c ≔ a + b;', null);
  Test({LINENUM}58777, 'type(c)', 'sound');
  Test({LINENUM}58778, 'AsSingleLine(c)', 'A 5.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58779, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(5.0), ASOInt(48000), ASOInt(240000), ASOInt(960000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58786, 'c ≔ a − b;', null);
  Test({LINENUM}58787, 'type(c)', 'sound');
  Test({LINENUM}58788, 'AsSingleLine(c)', 'A 5.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58789, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(5.0), ASOInt(48000), ASOInt(240000), ASOInt(960000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58796, 'c ≔ a ⋅ b;', null);
  Test({LINENUM}58797, 'type(c)', 'sound');
  Test({LINENUM}58798, 'AsSingleLine(c)', 'A 5.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58799, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(5.0), ASOInt(48000), ASOInt(240000), ASOInt(960000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58806, 'a ≔ SineTone(200, 0.1, 2); b ≔ SineTone(400, 0.1, 3);', null);
  Test({LINENUM}58807, 'type(a)', 'sound');
  Test({LINENUM}58808, 'type(b)', 'sound');
  Test({LINENUM}58809, 'AsSingleLine(a)', 'A 2.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58810, 'AsSingleLine(b)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58811, 'AudioMetadata(a)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(2.0), ASOInt(48000), ASOInt(96000), ASOInt(384000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );
  Test({LINENUM}58817, 'AudioMetadata(b)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58824, 'c ≔ a + b;', null);
  Test({LINENUM}58825, 'type(c)', 'sound');
  Test({LINENUM}58826, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58827, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58834, 'c ≔ a − b;', null);
  Test({LINENUM}58835, 'type(c)', 'sound');
  Test({LINENUM}58836, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58837, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58844, 'c ≔ a ⋅ b;', null);
  Test({LINENUM}58845, 'type(c)', 'sound');
  Test({LINENUM}58846, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58847, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58854, 'c ≔ b + a;', null);
  Test({LINENUM}58855, 'type(c)', 'sound');
  Test({LINENUM}58856, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58857, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58864, 'c ≔ b − a;', null);
  Test({LINENUM}58865, 'type(c)', 'sound');
  Test({LINENUM}58866, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58867, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58874, 'c ≔ b ⋅ a;', null);
  Test({LINENUM}58875, 'type(c)', 'sound');
  Test({LINENUM}58876, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58877, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58884, 'a ≔ SineTone(200, 0.1, 3); b ≔ DebugObject("empty sound");', null);

  Test({LINENUM}58886, 'type(b)', 'sound');
  Test({LINENUM}58887, 'AsSingleLine(b)', 'A 0.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58888, 'AudioMetadata(b)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(0.0), ASOInt(48000), ASOInt(0), ASOInt(0), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58895, 'c ≔ a + b;', null);
  Test({LINENUM}58896, 'type(c)', 'sound');
  Test({LINENUM}58897, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58898, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58905, 'c ≔ a − b;', null);
  Test({LINENUM}58906, 'type(c)', 'sound');
  Test({LINENUM}58907, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58908, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58915, 'c ≔ a ⋅ b;', null);
  Test({LINENUM}58916, 'type(c)', 'sound');
  Test({LINENUM}58917, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58918, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58925, 'c ≔ b + a;', null);
  Test({LINENUM}58926, 'type(c)', 'sound');
  Test({LINENUM}58927, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58928, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58935, 'c ≔ b − a;', null);
  Test({LINENUM}58936, 'type(c)', 'sound');
  Test({LINENUM}58937, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58938, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58945, 'c ≔ b ⋅ a;', null);
  Test({LINENUM}58946, 'type(c)', 'sound');
  Test({LINENUM}58947, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58948, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58955, 'a ≔ SineTone(100, 0.1, 2); b ≔ SineTone(400, 0.1, 1);', null);
  Test({LINENUM}58956, 'c ≔ AppendSound(a, b);', null);
  Test({LINENUM}58957, 'type(c)', 'sound');
  Test({LINENUM}58958, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58959, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}58966, 'a ≔ SineTone(100, 0.1, 2); b ≔ DebugObject("empty sound");', null);
  Test({LINENUM}58967, 'c ≔ AppendSound(a, b);', null);
  Test({LINENUM}58968, 'type(c)', 'sound');
  Test({LINENUM}58969, 'AsSingleLine(c)', 'A 2.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58970, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(2.0), ASOInt(48000), ASOInt(96000), ASOInt(384000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );
  Test({LINENUM}58976, 'a = c', True);

  Test({LINENUM}58978, 'c ≔ AppendSound(b, a);', null);
  Test({LINENUM}58979, 'type(c)', 'sound');
  Test({LINENUM}58980, 'AsSingleLine(c)', 'A 2.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58981, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(2.0), ASOInt(48000), ASOInt(96000), ASOInt(384000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );
  Test({LINENUM}58987, 'a = c', True);

  Test({LINENUM}58989, 'a ≔ SineTone(100, 0.1, 2); b ≔ 0.5⋅a;', null);
  Test({LINENUM}58990, 'type(b)', 'sound');
  Test({LINENUM}58991, 'AsSingleLine(b)', 'A 2.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}58992, 'AudioMetadata(b)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(2.0), ASOInt(48000), ASOInt(96000), ASOInt(384000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );
  Test({LINENUM}58998, 'a = b', False);

  Test({LINENUM}59000, 'a ≔ SineTone(100, 0.1, 2); b ≔ 1⋅a;', null);
  Test({LINENUM}59001, 'type(b)', 'sound');
  Test({LINENUM}59002, 'AsSingleLine(b)', 'A 2.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59003, 'AudioMetadata(b)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(2.0), ASOInt(48000), ASOInt(96000), ASOInt(384000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );
  Test({LINENUM}59009, 'a = b', True);

  Test({LINENUM}59011, 'a ≔ SineTone(100, 0.1, 5); b ≔ SineTone(500, 0.1, 5);', null);
  Test({LINENUM}59012, 'c ≔ a + b;', null);
  Test({LINENUM}59013, 'type(c)', 'sound');
  Test({LINENUM}59014, 'AsSingleLine(c)', 'A 5.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59015, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(5.0), ASOInt(48000), ASOInt(240000), ASOInt(960000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59022, 'c ≔ a − b;', null);
  Test({LINENUM}59023, 'type(c)', 'sound');
  Test({LINENUM}59024, 'AsSingleLine(c)', 'A 5.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59025, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(5.0), ASOInt(48000), ASOInt(240000), ASOInt(960000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59032, 'c ≔ a ⋅ b;', null);
  Test({LINENUM}59033, 'type(c)', 'sound');
  Test({LINENUM}59034, 'AsSingleLine(c)', 'A 5.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59035, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(5.0), ASOInt(48000), ASOInt(240000), ASOInt(960000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59042, 'a + b = superpose(a, b, 0, 1, 1)', True);
  Test({LINENUM}59043, 'a − b = superpose(a, b, 0, 1, −1)', True);
  Test({LINENUM}59044, 'a ⋅ b = superpose(a, b, 0, 1/2, 1/2)', True);

  Test({LINENUM}59046, 'a + b = superpose(a, b, 0, 1, 0.8)', False);
  Test({LINENUM}59047, 'a − b = superpose(a, b, 0, 1, 1)', False);
  Test({LINENUM}59048, 'a ⋅ b = superpose(a, b, 0, 1/2, 1)', False);

  Test({LINENUM}59050, 'c ≔ AppendSound(a, b);', null);
  Test({LINENUM}59051, 'type(c)', 'sound');
  Test({LINENUM}59052, 'AsSingleLine(c)', 'A 10.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59053, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(10.0), ASOInt(48000), ASOInt(480000), ASOInt(1920000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59060, 'c ≔ superpose(a, b, 2.5, 1, 1);', null);
  Test({LINENUM}59061, 'type(c)', 'sound');
  Test({LINENUM}59062, 'AsSingleLine(c)', 'A 7.50-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59063, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(7.5), ASOInt(48000), ASOInt(360000), ASOInt(1440000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59070, 'c ≔ superpose(a, b, 10, 1, 1);', null);
  Test({LINENUM}59071, 'type(c)', 'sound');
  Test({LINENUM}59072, 'AsSingleLine(c)', 'A 15.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59073, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(15), ASOInt(48000), ASOInt(720000), ASOInt(2880000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59080, 'AppendSound(a, b) = superpose(a, b, 5, 1, 1)', True);

  Test({LINENUM}59082, 'c ≔ FadeSounds(a, b);', null);
  Test({LINENUM}59083, 'type(c)', 'sound');
  Test({LINENUM}59084, 'AsSingleLine(c)', 'A 9.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59085, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(9), ASOInt(48000), ASOInt(432000), ASOInt(1728000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59092, 'FadeSounds(a, b) = FadeSounds(a, b, 1)', True);

  Test({LINENUM}59094, 'c ≔ FadeSounds(a, b, 2);', null);
  Test({LINENUM}59095, 'type(c)', 'sound');
  Test({LINENUM}59096, 'AsSingleLine(c)', 'A 8.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59097, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(8), ASOInt(48000), ASOInt(384000), ASOInt(1536000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59104, 'c ≔ FadeSounds(a, b, 5);', null);
  Test({LINENUM}59105, 'type(c)', 'sound');
  Test({LINENUM}59106, 'AsSingleLine(c)', 'A 5.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59107, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(5), ASOInt(48000), ASOInt(240000), ASOInt(960000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59114, 'c ≔ FadeSounds(a, b, 10);', failure, 'The duration of the overlap exceeds the duration of the first sound.');

  Test({LINENUM}59116, 'a ≔ SineTone(100, 0.1, 5); b ≔ SineTone(500, 0.1, 2);', null);
  Test({LINENUM}59117, 'FadeSounds(a, b);', null);
  Test({LINENUM}59118, 'FadeSounds(a, b, 2);', null);
  Test({LINENUM}59119, 'FadeSounds(a, b, 2.1);', failure, 'The duration of the overlap exceeds the duration of the second sound.');

  Test({LINENUM}59121, 'FadeSounds(a, b, 0)', failure, 'A positive real number was expected as argument 3, but "0" was given.');

  Test({LINENUM}59123, 'a ≔ SineTone(200, 0.1, 3); b ≔ DebugObject("empty sound");', null);

  Test({LINENUM}59125, 'c ≔ reverse(a);', null);
  Test({LINENUM}59126, 'type(c)', 'sound');
  Test({LINENUM}59127, 'AsSingleLine(c)', 'A 3.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59128, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.0), ASOInt(48000), ASOInt(144000), ASOInt(576000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59135, 'c ≔ reverse(b);', null);
  Test({LINENUM}59136, 'type(b)', 'sound');
  Test({LINENUM}59137, 'AsSingleLine(b)', 'A 0.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59138, 'AudioMetadata(b)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(0.0), ASOInt(48000), ASOInt(0), ASOInt(0), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59145, 'c ≔ reverse(a, b);', failure, 'Too many arguments.');

  Test({LINENUM}59147, 'a ≔ SineTone(100, 0.1, 5); b ≔ SineTone(100, 0.2, 5);', null);
  Eps(1E-8); Test({LINENUM}59148, 'SoundMax(a)', 0.1);
  Eps(1E-8); Test({LINENUM}59149, 'SoundMax(b)', 0.2);
  Eps(1E-8); Test({LINENUM}59150, 'SoundMax(0.4 ⋅ a)', 0.04);
  Eps(1E-8); Test({LINENUM}59151, 'SoundMax(a + b)', 0.3);
  Eps(1E-8); Test({LINENUM}59152, 'SoundMax(a ⋅ b)', 0.15);
  Eps(1E-8); Test({LINENUM}59153, 'SoundMax(a − b)', 0.1);
  Eps(1E-8); Test({LINENUM}59154, 'SoundMax(a + a)', 0.2);
  Eps(1E-8); Test({LINENUM}59155, 'SoundMax(a ⋅ a)', 0.1);
  Eps(1E-8); Test({LINENUM}59156, 'SoundMax(a − a)', 0.0);

  Test({LINENUM}59158, 'a ⋅ a = a', True);
  Test({LINENUM}59159, '0.5 ⋅ (a + a) = a', True);

  Test({LINENUM}59161, 'echo(a);', null);
  Test({LINENUM}59162, 'echo(a, 0.1);', null);
  Test({LINENUM}59163, 'echo(a, 0.1, 0.4);', null);
  Test({LINENUM}59164, 'echo(a, 0.5, 0.2);', null);
  Test({LINENUM}59165, 'echo(a, 0.0, 0.0) = a', True);
  Test({LINENUM}59166, 'echo(a, −0.1, 0.4);', failure, 'The delay cannot be negative.');
  Test({LINENUM}59167, 'echo(a, 0.5, 1.2);', failure, 'The intensity of the echo must lie within [0, 1].');

  Test({LINENUM}59169, 'reverse(a) = a', False);
  Test({LINENUM}59170, 'reverse(reverse(a)) = a', True);

  Test({LINENUM}59172, 'a ≔ SineTone(400, 0.1, 1);', null);
  Test({LINENUM}59173, 'b ≔ ConvertAudio(a, 16);', null);
  Test({LINENUM}59174, 'c ≔ ConvertAudio(a, 8);', null);
  Test({LINENUM}59175, 'd ≔ ConvertAudio(a, 32);', null);

  Test({LINENUM}59177, 'type(a)', 'sound');
  Test({LINENUM}59178, 'AsSingleLine(a)', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59179, 'AudioMetadata(a)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(1.0), ASOInt(48000), ASOInt(48000), ASOInt(192000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59186, 'type(b)', 'sound');
  Test({LINENUM}59187, 'AsSingleLine(b)', 'A 1.00-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59188, 'AudioMetadata(b)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(1.0), ASOInt(48000), ASOInt(48000), ASOInt(96000), ASOInt(16), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59195, 'type(c)', 'sound');
  Test({LINENUM}59196, 'AsSingleLine(c)', 'A 1.00-second 8-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59197, 'AudioMetadata(c)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(1.0), ASOInt(48000), ASOInt(48000), ASOInt(48000), ASOInt(8), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59204, 'type(d)', 'sound');
  Test({LINENUM}59205, 'AsSingleLine(d)', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59206, 'AudioMetadata(d)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(1.0), ASOInt(48000), ASOInt(48000), ASOInt(192000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59213, 'a = b', False);
  Test({LINENUM}59214, 'a = c', False);
  Test({LINENUM}59215, 'a = d', True);

  Test({LINENUM}59217, 'a ≔ SineTone(100, 0.1, 2); b ≔ SineTone(500, 0.1, 2);', null);
  Test({LINENUM}59218, 'C ≔ MultichannelAudio(a, b);', null);

  Test({LINENUM}59220, 'type(C)', 'sound');
  Test({LINENUM}59221, 'AsSingleLine(C)', 'A 2.00-second 32-bit 48000 Hz 2-channel sound.');
  Test({LINENUM}59222, 'AudioMetadata(C)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(2.0), ASOInt(48000), ASOInt(96000), ASOInt(768000), ASOInt(32), ASOInt(2), ASOInt(3)]
    )
  );

  Test({LINENUM}59229, 'D ≔ MultichannelAudio(b, a);', null);

  Test({LINENUM}59231, 'type(D)', 'sound');
  Test({LINENUM}59232, 'AsSingleLine(D)', 'A 2.00-second 32-bit 48000 Hz 2-channel sound.');
  Test({LINENUM}59233, 'AudioMetadata(D)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(2.0), ASOInt(48000), ASOInt(96000), ASOInt(768000), ASOInt(32), ASOInt(2), ASOInt(3)]
    )
  );

  Test({LINENUM}59240, 'E ≔ AppendSound(C, D);', null);

  Test({LINENUM}59242, 'type(E)', 'sound');
  Test({LINENUM}59243, 'AsSingleLine(E)', 'A 4.00-second 32-bit 48000 Hz 2-channel sound.');
  Test({LINENUM}59244, 'AudioMetadata(E)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(4.0), ASOInt(48000), ASOInt(192000), ASOInt(1536000), ASOInt(32), ASOInt(2), ASOInt(3)]
    )
  );

  Test({LINENUM}59251, 'a ≔ SineTone(100, 0.1, 2, 16, 22050);', null);

  Test({LINENUM}59253, 'type(a)', 'sound');
  Test({LINENUM}59254, 'AsSingleLine(a)', 'A 2.00-second 16-bit 22050 Hz 1-channel sound.');
  Test({LINENUM}59255, 'AudioMetadata(a)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(2.0), ASOInt(22050), ASOInt(44100), ASOInt(88200), ASOInt(16), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59262, 'a ≔ WhiteNoise(0.5, 1);', null);

  Test({LINENUM}59264, 'type(a)', 'sound');
  Test({LINENUM}59265, 'AsSingleLine(a)', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59266, 'AudioMetadata(a)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(1.0), ASOInt(48000), ASOInt(48000), ASOInt(192000), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59273, 'a ≔ WhiteNoise(0.7, 3.5, 800);', null);

  Test({LINENUM}59275, 'type(a)', 'sound');
  Test({LINENUM}59276, 'AsSingleLine(a)', 'A 3.50-second 32-bit 800 Hz 1-channel sound.');
  Test({LINENUM}59277, 'AudioMetadata(a)',
    TAlgosimStructure.CreateWithValue(
      ['duration', 'SampleFreq', 'SampleLen', 'ByteLen', 'bitdepth', 'channels', 'ChannelMask'],
      [ASO(3.5), ASOInt(800), ASOInt(2800), ASOInt(11200), ASOInt(32), ASOInt(1), ASOInt(4)]
    )
  );

  Test({LINENUM}59284, 'SineTone(100, 0.1, 1) = SineTone(100, 0.1, 1, 32)', True);
  Test({LINENUM}59285, 'SineTone(100, 0.1, 1) = SineTone(100, 0.1, 1, 32, 48000)', True);

  Test({LINENUM}59287, 'a ≔ SineTone(100, 0.1, 1); b ≔ SineTone(500, 0.1, 1);', null);
  Test({LINENUM}59288, 'AsSingleLine(a + b)', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59289, 'AsSingleLine(a − b)', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59290, 'AsSingleLine(a ⋅ b)', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59291, 'AsSingleLine(AppendSound(a, b))', 'A 2.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59292, 'AsSingleLine(reverse(a))', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59293, 'AsSingleLine(echo(a))', 'A 1.40-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59294, 'AsSingleLine(MultichannelAudio(a, b))', 'A 1.00-second 32-bit 48000 Hz 2-channel sound.');
  Test({LINENUM}59295, 'AsSingleLine(FadeSounds(a, b))', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59296, 'AsSingleLine(ConvertAudio(a, 32))', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59297, 'AsSingleLine(ConvertAudio(a, 16))', 'A 1.00-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59298, 'AsSingleLine(ConvertAudio(a, 8))', 'A 1.00-second 8-bit 48000 Hz 1-channel sound.');
  Eps(1E-8); Test({LINENUM}59299, 'SoundMax(a)', 0.1);

  Test({LINENUM}59301, 'a ≔ SineTone(100, 0.1, 1, 16); b ≔ SineTone(500, 0.1, 1, 16);', null);
  Test({LINENUM}59302, 'AsSingleLine(a + b)', 'A 1.00-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59303, 'AsSingleLine(a − b)', 'A 1.00-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59304, 'AsSingleLine(a ⋅ b)', 'A 1.00-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59305, 'AsSingleLine(AppendSound(a, b))', 'A 2.00-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59306, 'AsSingleLine(reverse(a))', 'A 1.00-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59307, 'AsSingleLine(echo(a))', 'A 1.40-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59308, 'AsSingleLine(MultichannelAudio(a, b))', 'A 1.00-second 16-bit 48000 Hz 2-channel sound.');
  Test({LINENUM}59309, 'AsSingleLine(FadeSounds(a, b))', 'A 1.00-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59310, 'AsSingleLine(ConvertAudio(a, 32))', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59311, 'AsSingleLine(ConvertAudio(a, 16))', 'A 1.00-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59312, 'AsSingleLine(ConvertAudio(a, 8))', 'A 1.00-second 8-bit 48000 Hz 1-channel sound.');
  Eps(1E-4); Test({LINENUM}59313, 'SoundMax(a)', 0.1);

  Test({LINENUM}59315, 'a ≔ SineTone(100, 0.1, 1, 8); b ≔ SineTone(500, 0.1, 1, 8);', null);
  Test({LINENUM}59316, 'AsSingleLine(a + b)', 'A 1.00-second 8-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59317, 'AsSingleLine(a − b)', 'A 1.00-second 8-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59318, 'AsSingleLine(a ⋅ b)', 'A 1.00-second 8-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59319, 'AsSingleLine(AppendSound(a, b))', 'A 2.00-second 8-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59320, 'AsSingleLine(reverse(a))', 'A 1.00-second 8-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59321, 'AsSingleLine(MultichannelAudio(a, b))', 'A 1.00-second 8-bit 48000 Hz 2-channel sound.');
  Test({LINENUM}59322, 'AsSingleLine(FadeSounds(a, b))', 'A 1.00-second 8-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59323, 'AsSingleLine(ConvertAudio(a, 32))', 'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59324, 'AsSingleLine(ConvertAudio(a, 16))', 'A 1.00-second 16-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59325, 'AsSingleLine(ConvertAudio(a, 8))', 'A 1.00-second 8-bit 48000 Hz 1-channel sound.');
  Eps(1E-2); Test({LINENUM}59326, 'SoundMax(a)', 0.1);

  Test({LINENUM}59328, 'a ≔ SineTone(100, 0.1, 1, 32, 24000); b ≔ SineTone(500, 0.1, 1, 32, 24000);', null);
  Test({LINENUM}59329, 'AsSingleLine(a + b)', 'A 1.00-second 32-bit 24000 Hz 1-channel sound.');
  Test({LINENUM}59330, 'AsSingleLine(a − b)', 'A 1.00-second 32-bit 24000 Hz 1-channel sound.');
  Test({LINENUM}59331, 'AsSingleLine(a ⋅ b)', 'A 1.00-second 32-bit 24000 Hz 1-channel sound.');
  Test({LINENUM}59332, 'AsSingleLine(AppendSound(a, b))', 'A 2.00-second 32-bit 24000 Hz 1-channel sound.');
  Test({LINENUM}59333, 'AsSingleLine(reverse(a))', 'A 1.00-second 32-bit 24000 Hz 1-channel sound.');
  Test({LINENUM}59334, 'AsSingleLine(echo(a))', 'A 1.40-second 32-bit 24000 Hz 1-channel sound.');
  Test({LINENUM}59335, 'AsSingleLine(MultichannelAudio(a, b))', 'A 1.00-second 32-bit 24000 Hz 2-channel sound.');
  Test({LINENUM}59336, 'AsSingleLine(FadeSounds(a, b))', 'A 1.00-second 32-bit 24000 Hz 1-channel sound.');
  Test({LINENUM}59337, 'AsSingleLine(ConvertAudio(a, 32))', 'A 1.00-second 32-bit 24000 Hz 1-channel sound.');
  Test({LINENUM}59338, 'AsSingleLine(ConvertAudio(a, 16))', 'A 1.00-second 16-bit 24000 Hz 1-channel sound.');
  Test({LINENUM}59339, 'AsSingleLine(ConvertAudio(a, 8))', 'A 1.00-second 8-bit 24000 Hz 1-channel sound.');
  Eps(1E-8); Test({LINENUM}59340, 'SoundMax(a)', 0.1);

  Test({LINENUM}59342, 'a ≔ SineTone(100, 0.1, 1); b ≔ SineTone(500, 0.1, 1); C ≔ MultichannelAudio(a, b);', null);
  Test({LINENUM}59343, 'a = ExtractChannel(C, 0) ∧ b = ExtractChannel(C, 1)', True);

  Test({LINENUM}59345, 'ν ≔ 400; ω ≔ 2⋅π⋅ν; AsSingleLine(ComputeSound(sin(ω⋅t), t, 0, 1))',
    'A 1.00-second 32-bit 48000 Hz 1-channel sound.');
  Test({LINENUM}59347, 'ν ≔ 400; ω ≔ 2⋅π⋅ν; ComputeSound(sin(ω⋅t, 4), t, 0, 1)', failure,
    'Too many arguments.');
  Test({LINENUM}59349, 'ν ≔ 400; ω ≔ 2⋅π⋅ν; ComputeSound("piano", t, 0, 1)', failure,
    'Wave displacement must be a real number.');

  Test({LINENUM}59352, 'delete(a); delete(b); delete(c); delete(d); delete(C); delete(D); delete(E)', success);





  //
  //
  //  CHAPTER 14
  //  Import and export
  //
  //

  Chapter('Import and export');

  //
  // Saving
  //

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59372, 'FileName ≔ "' + fn + '"', fn);
  try

    Test({LINENUM}59375, 'SaveToFile(0, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59377, 'SaveToFile.1', _s = '0');

    Test({LINENUM}59379, 'SaveToFile(1024, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59381, 'SaveToFile.2', _s = '1024');

    Test({LINENUM}59383, 'SaveToFile(−1024, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59385, 'SaveToFile.3', _s = '-1024');

    Test({LINENUM}59387, 'SaveToFile(1/2-1/2, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59389, 'SaveToFile.4', _s = '0');

    Test({LINENUM}59391, 'SaveToFile(1/4, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59393, 'SaveToFile.5', _s = '1/4');

    Test({LINENUM}59395, 'SaveToFile(−1/4, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59397, 'SaveToFile.6', _s = '-1/4');

    Test({LINENUM}59399, 'SaveToFile(0.0, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59401, 'SaveToFile.7', _s = '0');

    Test({LINENUM}59403, 'SaveToFile(5.8, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59405, 'SaveToFile.8', _s = '5.8');

    Test({LINENUM}59407, 'SaveToFile(−5.8, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59409, 'SaveToFile.9', _s = '-5.8');

    Test({LINENUM}59411, 'SaveToFile(2 + 3⋅i, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59413, 'SaveToFile.10', _s = '2 + 3⋅i');

    Test({LINENUM}59415, 'SaveToFile(−2 − 3⋅i, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59417, 'SaveToFile.11', _s = '-2 - 3⋅i');

    Test({LINENUM}59419, 'SaveToFile(2 + 3⋅i − 3⋅i, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59421, 'SaveToFile.12', _s = '2');

    Test({LINENUM}59423, 'SaveToFile(−2 + 3⋅i − 3⋅i, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59425, 'SaveToFile.13', _s = '-2');

    Test({LINENUM}59427, 'SaveToFile(3⋅i, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59429, 'SaveToFile.14', _s = '3⋅i');

    Test({LINENUM}59431, 'SaveToFile(−3⋅i, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59433, 'SaveToFile.15', _s = '-3⋅i');

    Test({LINENUM}59435, 'SaveToFile(i, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59437, 'SaveToFile.16', _s = 'i');

    Test({LINENUM}59439, 'SaveToFile(−i, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59441, 'SaveToFile.17', _s = '-i');

    Test({LINENUM}59443, 'SaveToFile(3⋅i − 3⋅i, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59445, 'SaveToFile.18', _s = '0');

    Test({LINENUM}59447, 'SaveToFile(true, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59449, 'SaveToFile.19', _s = 'true');

    Test({LINENUM}59451, 'SaveToFile(false, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59453, 'SaveToFile.20', _s = 'false');

    Test({LINENUM}59455, 'SaveToFile("I don''t believe it was a particularly long conversation.", FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59457, 'SaveToFile.21', _s = 'I don''t believe it was a particularly long conversation.');

    Test({LINENUM}59459, 'SaveToFile("alpha"+¶+"beta"+¶+"gamma", FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59461, 'SaveToFile.22', _s = 'alpha'#13#10'beta'#13#10'gamma');

    Test({LINENUM}59463, 'SaveToFile("", FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59465, 'SaveToFile.23', _s = '');

    Test({LINENUM}59467, 'SaveToFile("What ""thing""?", FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59469, 'SaveToFile.24', _s = 'What "thing"?');

    Test({LINENUM}59471, 'SaveToFile(❨5, −2, 7.5, 0❩, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59473, 'SaveToFile.25', _s = '5'#13#10'-2'#13#10'7.5'#13#10'0');

    Test({LINENUM}59475, 'SaveToFile(❨5, −2, 7.5 + i, 0❩, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59477, 'SaveToFile.26', _s = '5'#13#10'-2'#13#10'7.5 + i'#13#10'0');

    Test({LINENUM}59479, 'SaveToFile(❨5, −2, 7.5 − i, 0❩, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59481, 'SaveToFile.27', _s = '5'#13#10'-2'#13#10'7.5 - i'#13#10'0');

    Test({LINENUM}59483, 'SaveToFile(❨❨2, 7, 5, 0❩, ❨6.3, −5, −1.2, 4❩❩, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59485, 'SaveToFile.28', _s = '2'#9'7'#9'5'#9'0'#13#10'6.3'#9'-5'#9'-1.2'#9'4');

    Test({LINENUM}59487, 'SaveToFile(❨❨2, 7, 5, −3⋅i❩, ❨6.3, −5 − 3⋅i, −1.2, i❩❩, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59489, 'SaveToFile.29', _s = '2'#9'7'#9'5'#9'-3⋅i'#13#10'6.3'#9'-5 - 3⋅i'#9'-1.2'#9'i');

    Test({LINENUM}59491, 'SaveToFile(''(123, −5, −6.7, 2 − 3⋅i, "teaspoon", true), FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59493, 'SaveToFile.30', _s = '123'#13#10'-5'#13#10'-6.7'#13#10'2 - 3⋅i'#13#10'"teaspoon"'#13#10'true');

    Test({LINENUM}59495, 'SaveToFile(''(123, −5, −6.7, 2 − 3⋅i, "what ""teaspoon""?", true), FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59497, 'SaveToFile.31', _s = '123'#13#10'-5'#13#10'-6.7'#13#10'2 - 3⋅i'#13#10'"what ""teaspoon""?"'#13#10'true');

    Test({LINENUM}59499, 'SaveToFile(''("nargle", "hippogriff", "boggart"), FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59501, 'SaveToFile.32', _s = '"nargle"'#13#10'"hippogriff"'#13#10'"boggart"');

    Test({LINENUM}59503, 'SaveToFile(''("alfa", "beta", ''(1, 2, 3, ''(1, 3, "gamma"), 5)), FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59505, 'SaveToFile.33', _s = '"alfa"'#13#10'"beta"'#13#10'''(1, 2, 3, ''(1, 3, "gamma"), 5)');

    Test({LINENUM}59507, 'SaveToFile(struct("name": "Albus Dumbledore", "role": "headmaster", "age": 115), FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59509, 'SaveToFile.34', _s = 'name: "Albus Dumbledore"'#13#10'role: "headmaster"'#13#10'age: 115');

    Test({LINENUM}59511, 'SaveToFile({-123}, FileName)', success);
    _s := TFile.ReadAllText(fn, TEncoding.UTF8);
    TestExternal({LINENUM}59513, 'SaveToFile.35', _s = '{-123}');

  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.bmp';
  Test({LINENUM}59521, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59523, 'SaveToFile(ColorGradient(100, 100, "black", "yellow"), FileName)', success);
    _bin := TFile.ReadAllBytes(fn);
    TestExternal({LINENUM}59525, 'saved bitmap: check size and magic word',
      (Length(_bin) > 40000) and (_bin[0] = Ord('B')) and (_bin[1] = Ord('M')));
    _bm := TBitmap.Create;
    try
      _bm.LoadFromFile(fn);
      TestExternal({LINENUM}59530, 'saved bitmap: pixel-perfect match',
        TASPixmap.Create(_bm) = TASPixmap.CreateGradient(100, 100, clBlack, clYellow));
    finally
      _bm.Free;
    end;
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.png';
  Test({LINENUM}59541, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59543, 'SaveToFile(ColorGradient(100, 100, "black", "yellow"), FileName)', success);
    _bin := TFile.ReadAllBytes(fn);
    TestExternal({LINENUM}59545, 'saved png: check size and magic word',
      (Length(_bin) > 500) and (Length(_bin) < 1000) and (PCardinal(_bin)^ = $474E5089));
    _png := TPngImage.Create;
    try
      _png.LoadFromFile(fn);
      _bm := TBitmap.Create;
      try
        _bm.Assign(_png);
        _bm.PixelFormat := pf32bit;
        TestExternal({LINENUM}59554, 'saved png: pixel-perfect match',
          TASPixmap.Create(_bm) = TASPixmap.CreateGradient(100, 100, clBlack, clYellow));
      finally
        _bm.Free;
      end;
    finally
      _png.Free;
    end;
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.jpg';
  Test({LINENUM}59568, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59570, 'SaveToFile(ColorGradient(100, 100, "black", "yellow"), FileName)', success);
    _bin := TFile.ReadAllBytes(fn);
    TestExternal({LINENUM}59572, 'saved jpg: check size and magic word',
      (Length(_bin) > 1000) and (Length(_bin) < 2000) and (PCardinal(PByte(_bin) + 6)^ = $4649464A));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.wav';
  Test({LINENUM}59580, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59582, 'SaveToFile(SineTone(400, 0.1, 5), FileName)', success);
    _bin := TFile.ReadAllBytes(fn);
    TestExternal({LINENUM}59584, 'saved wav: check size and magic word',
      (Length(_bin) > 960000) and (Length(_bin) < 961000) and
      (PCardinal(_bin)^ = $46464952) and (PCardinal(PByte(_bin) + 8)^ = $45564157));
    TestExternal({LINENUM}59587, 'saved wav: sample-perfect match',
      LoadSoundFromFile(fn) = SineTone(400, 0.1, 5));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.dat';
  Test({LINENUM}59595, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59597, 'SaveToFile(BinaryData("wand"), FileName)', success);
    _bin := TFile.ReadAllBytes(fn);
    TestExternal({LINENUM}59599, 'saved binary data',
      (Length(_bin) = 8) and (PUInt64(_bin)^ = $0064006E00610077));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;


  //
  // Saving + Loading
  //

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59612, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59614, 'a ≔ 394; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "integer"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59621, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59623, 'a ≔ −394; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "integer"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59630, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59632, 'a ≔ 0; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "integer"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59639, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59641, 'a ≔ 123456789123456; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "integer"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59648, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59650, 'a ≔ −123456789123456; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "integer"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59657, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59659, 'a ≔ −394; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "rational number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59666, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59668, 'a ≔ −394; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59675, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59677, 'a ≔ −394; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59684, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59686, 'a ≔ 1/2; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "rational number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59693, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59695, 'a ≔ −1/2; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "rational number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59702, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59704, 'a ≔ 1/2 − 1/2; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "rational number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59711, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59713, 'a ≔ 12345678/12345679; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "rational number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59720, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59722, 'a ≔ −12345678/12345679; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "rational number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59729, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59731, 'a ≔ 5.3; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59738, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59740, 'a ≔ −5.3; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59747, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59749, 'a ≔ 5.3E85; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59756, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59758, 'a ≔ 5.3E-85; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59765, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59767, 'a ≔ -5.3E85; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59774, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59776, 'a ≔ -5.3E-85; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59783, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59785, 'a ≔ 0.0; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59792, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59794, 'a ≔ 5.3; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59801, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59803, 'a ≔ −5.3; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59810, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59812, 'a ≔ 5.3E85; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59819, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59821, 'a ≔ 5.3E-85; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59828, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59830, 'a ≔ -5.3E85; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59837, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59839, 'a ≔ -5.3E-85; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59846, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59848, 'a ≔ 0.0; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59855, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59857, 'a ≔ 5 + i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59864, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59866, 'a ≔ 5 + 4⋅i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59873, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59875, 'a ≔ -5 + 4⋅i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59882, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59884, 'a ≔ 5 - 4⋅i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59891, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59893, 'a ≔ -5 - 4⋅i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59900, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59902, 'a ≔ 5.5 + 4.1⋅i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59909, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59911, 'a ≔ 5 + i - i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59918, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59920, 'a ≔ 4⋅i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59927, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59929, 'a ≔ -4⋅i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59936, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59938, 'a ≔ i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59945, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59947, 'a ≔ -i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59954, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59956, 'a ≔ i - i; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex number"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59963, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59965, 'a ≔ ❨5, 3, 2, −1, 0, 2.5❩; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real vector"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59972, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59974, 'a ≔ ❨3, −2, 4, π❩; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real vector"); a ≈ b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59981, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59983, 'a ≔ ❨5, 3, 2, −1, 0, 2.5❩; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex vector"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59990, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}59992, 'a ≔ ❨3, −2, 4, π❩; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex vector"); a ≈ b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}59999, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60001, 'a ≔ ❨❨1, 5, 2❩, ❨1, 0, −2❩❩; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60008, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60010, 'a ≔ IdentityMatrix(1000); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60017, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60019, 'a ≔ IdentityMatrix(1); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60026, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60028, 'a ≔ ❨❨1, 5, 2❩, ❨1, 0, −2❩❩; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60035, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60037, 'a ≔ IdentityMatrix(1000); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60044, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60046, 'a ≔ IdentityMatrix(1); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60053, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60055, 'a ≔ ❨2 + i, 4 + 5⋅i, −2 + i, 4 − 3⋅i, 1.5⋅i, −3⋅i, −7 − 2.5⋅i, 4, −2, 7 − i, 4.009 + i❩; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex vector"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60062, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60064, 'a ≔ ❨2 + i❩; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex vector"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60071, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60073, 'a ≔ ❨❨2 + i, −i, 5 − 2⋅i❩, ❨−3, 0.5, −5 − 7⋅i❩, ❨−2 + i, −3 − i, −2⋅i❩❩; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60080, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60082, 'a ≔ ❨❨2.5 + i, −i, 5 − 2.991⋅i❩, ❨−3, 0.155, −5.153E2 − 7E-20⋅i❩, ❨−22.1E33 + i, −3 − i, −2⋅i❩❩; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60089, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60091, 'a ≔ i⋅IdentityMatrix(1000); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60098, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60100, 'a ≔ DebugObject("empty vector"); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real vector"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60107, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60109, 'a ≔ ComplexVector(DebugObject("empty vector")); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex vector"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60116, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60118, 'a ≔ DebugObject("empty matrix"); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real matrix"); a = b', failure, 'A matrix must have size at least 1×1.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60125, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60127, 'a ≔ ComplexMatrix(DebugObject("empty matrix")); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex matrix"); a = b', failure, 'A matrix must have size at least 1×1.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60134, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60136, 'a ≔ "a teaspoon," ~ chr(13) ~ chr(10) ~ "    the emotional range of"; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "string"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60143, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60145, 'a ≔ "No dawdling!"; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "string"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60152, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60154, 'a ≔ ""; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "string"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60161, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60163, 'a ≔ ''("alpha", 123, 1 + i); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "array"); ''(string(a)) = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.bmp';
  Test({LINENUM}60170, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60172, 'a ≔ ColorGradient(100, 100, "red", "black"); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "pixmap"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.png';
  Test({LINENUM}60179, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60181, 'a ≔ ColorGradient(100, 100, "red", "black"); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "pixmap"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.jpg';
  Test({LINENUM}60188, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60190, 'a ≔ ColorGradient(100, 100, "red", "black"); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "pixmap"); IsZero(RealVector(GetRGB(AverageColor(a))) − RealVector(GetRGB(AverageColor(b))), 1E-2)', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.wav';
  Test({LINENUM}60197, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}60199, 'a ≔ SineTone(400, 0.1, 5); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "sound"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;


  //
  // Loading
  //

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60211, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '0');
  try
    Test({LINENUM}60214, 'LoadFromFile(FileName, "integer")', 0);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60221, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-0');
  try
    Test({LINENUM}60224, 'LoadFromFile(FileName, "integer")', 0);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60231, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '0000000 0000000');
  try
    Test({LINENUM}60234, 'LoadFromFile(FileName, "integer")', 0);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60241, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '123');
  try
    Test({LINENUM}60244, 'LoadFromFile(FileName, "integer")', 123);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60251, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-123');
  try
    Test({LINENUM}60254, 'LoadFromFile(FileName, "integer")', -123);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60261, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−123');
  try
    Test({LINENUM}60264, 'LoadFromFile(FileName, "integer")', -123);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60271, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '123 456 789');
  try
    Test({LINENUM}60274, 'LoadFromFile(FileName, "integer")', 123456789);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60281, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '123 456 789'#13#10);
  try
    Test({LINENUM}60284, 'LoadFromFile(FileName, "integer")', 123456789);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60291, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-123 456 789');
  try
    Test({LINENUM}60294, 'LoadFromFile(FileName, "integer")', -123456789);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60301, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−123 456 789');
  try
    Test({LINENUM}60304, 'LoadFromFile(FileName, "integer")', -123456789);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60311, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '123 456 789');
  try
    Test({LINENUM}60314, 'LoadFromFile(FileName, "integer")', 123456789);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60321, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-123 456 789');
  try
    Test({LINENUM}60324, 'LoadFromFile(FileName, "integer")', -123456789);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60331, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−123 456 789');
  try
    Test({LINENUM}60334, 'LoadFromFile(FileName, "integer")', -123456789);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60341, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '123 456 789');
  try
    Test({LINENUM}60344, 'LoadFromFile(FileName, "integer")', 123456789);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60351, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-123 456 789');
  try
    Test({LINENUM}60354, 'LoadFromFile(FileName, "integer")', -123456789);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60361, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−123 456 789');
  try
    Test({LINENUM}60364, 'LoadFromFile(FileName, "integer")', -123456789);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60371, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5.3');
  try
    Test({LINENUM}60374, 'LoadFromFile(FileName, "integer")', failure, 'Object cannot be represented as a 64-bit integer.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60381, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '.3');
  try
    Test({LINENUM}60384, 'LoadFromFile(FileName, "integer")', failure, 'Object cannot be represented as a 64-bit integer.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60391, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '');
  try
    Test({LINENUM}60394, 'LoadFromFile(FileName, "integer")', failure, 'Object cannot be represented as a 64-bit integer.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60401, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, 'unicorn');
  try
    Test({LINENUM}60404, 'LoadFromFile(FileName, "integer")', failure, 'Object cannot be represented as a 64-bit integer.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60411, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '536254175021596305541505125117456540');
  try
    Test({LINENUM}60414, 'LoadFromFile(FileName, "integer")', failure, 'Object cannot be represented as a 64-bit integer.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60421, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '16#33CCFF');
  try
    Test({LINENUM}60424, 'LoadFromFile(FileName, "integer")', failure, 'Object cannot be represented as a 64-bit integer.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60431, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, #0#0#0);
  try
    Test({LINENUM}60434, 'LoadFromFile(FileName, "integer")', failure, 'Object cannot be represented as a 64-bit integer.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60441, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '394');
  try
    Test({LINENUM}60444, 'LoadFromFile(FileName, "rational number")', rat(394, 1));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60451, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-394');
  try
    Test({LINENUM}60454, 'LoadFromFile(FileName, "rational number")', rat(-394, 1));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60461, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−394');
  try
    Test({LINENUM}60464, 'LoadFromFile(FileName, "rational number")', rat(-394, 1));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60471, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '0');
  try
    Test({LINENUM}60474, 'LoadFromFile(FileName, "rational number")', rat(0, 1));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60481, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-0');
  try
    Test({LINENUM}60484, 'LoadFromFile(FileName, "rational number")', rat(0, 1));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60491, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−0');
  try
    Test({LINENUM}60494, 'LoadFromFile(FileName, "rational number")', rat(-0, 1));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60501, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '1/2');
  try
    Test({LINENUM}60504, 'LoadFromFile(FileName, "rational number")', rat(1, 2));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60511, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-1/2');
  try
    Test({LINENUM}60514, 'LoadFromFile(FileName, "rational number")', rat(-1, 2));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60521, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−1/2');
  try
    Test({LINENUM}60524, 'LoadFromFile(FileName, "rational number")', rat(-1, 2));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60531, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3/4');
  try
    Test({LINENUM}60534, 'LoadFromFile(FileName, "rational number")', rat(3, 4));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60541, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '32/64');
  try
    Test({LINENUM}60544, 'LoadFromFile(FileName, "rational number")', rat(1, 2));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60551, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '53628178/53628179');
  try
    Test({LINENUM}60554, 'LoadFromFile(FileName, "rational number")', rat(53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60561, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-53628178/53628179');
  try
    Test({LINENUM}60564, 'LoadFromFile(FileName, "rational number")', rat(-53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60571, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '53 628 178/53 628 179');
  try
    Test({LINENUM}60574, 'LoadFromFile(FileName, "rational number")', rat(53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60581, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '53 628 178/53 628 179');
  try
    Test({LINENUM}60584, 'LoadFromFile(FileName, "rational number")', rat(53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60591, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '53 628 178/53 628 179');
  try
    Test({LINENUM}60594, 'LoadFromFile(FileName, "rational number")', rat(53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60601, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-53 628 178/53 628 179');
  try
    Test({LINENUM}60604, 'LoadFromFile(FileName, "rational number")', rat(-53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60611, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-53 628 178/53 628 179');
  try
    Test({LINENUM}60614, 'LoadFromFile(FileName, "rational number")', rat(-53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60621, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '- 53 628 178/53 628 179');
  try
    Test({LINENUM}60624, 'LoadFromFile(FileName, "rational number")', rat(-53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60631, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '− 53 628 178/53 628 179');
  try
    Test({LINENUM}60634, 'LoadFromFile(FileName, "rational number")', rat(-53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60641, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−53 628 178/53 628 179');
  try
    Test({LINENUM}60644, 'LoadFromFile(FileName, "rational number")', rat(-53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60651, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−53 628 178/53 628 179');
  try
    Test({LINENUM}60654, 'LoadFromFile(FileName, "rational number")', rat(-53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60661, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−53 628 178/53 628 179'#13#10);
  try
    Test({LINENUM}60664, 'LoadFromFile(FileName, "rational number")', rat(-53628178, 53628179));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60671, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '123');
  try
    Test({LINENUM}60674, 'LoadFromFile(FileName, "real number")', 123.0);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60681, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '123.5');
  try
    Test({LINENUM}60684, 'LoadFromFile(FileName, "real number")', 123.5);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60691, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-123');
  try
    Test({LINENUM}60694, 'LoadFromFile(FileName, "real number")', -123.0);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60701, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-123.5');
  try
    Test({LINENUM}60704, 'LoadFromFile(FileName, "real number")', -123.5);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60711, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−123');
  try
    Test({LINENUM}60714, 'LoadFromFile(FileName, "real number")', -123.0);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60721, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−123.5');
  try
    Test({LINENUM}60724, 'LoadFromFile(FileName, "real number")', -123.5);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60731, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−123.5'#13#10);
  try
    Test({LINENUM}60734, 'LoadFromFile(FileName, "real number")', -123.5);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60741, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.14159265');
  try
    Test({LINENUM}60744, 'LoadFromFile(FileName, "real number")', 3.14159265);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60751, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.1415926535897932384626');
  try
    Test({LINENUM}60754, 'LoadFromFile(FileName, "real number")', 3.1415926535897932384626);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60761, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '1E6');
  try
    Test({LINENUM}60764, 'LoadFromFile(FileName, "real number")', 1E6);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60771, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '7.532E25');
  try
    Test({LINENUM}60774, 'LoadFromFile(FileName, "real number")', 7.532E25);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60781, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-7.532E25');
  try
    Test({LINENUM}60784, 'LoadFromFile(FileName, "real number")', -7.532E25);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60791, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '7.532E-25');
  try
    Test({LINENUM}60794, 'LoadFromFile(FileName, "real number")', 7.532E-25);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60801, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-7.532E-25');
  try
    Test({LINENUM}60804, 'LoadFromFile(FileName, "real number")', -7.532E-25);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60811, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '+7.532E25');
  try
    Test({LINENUM}60814, 'LoadFromFile(FileName, "real number")', 7.532E25);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60821, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '+7.532E+25');
  try
    Test({LINENUM}60824, 'LoadFromFile(FileName, "real number")', 7.532E25);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60831, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '7.532E+25');
  try
    Test({LINENUM}60834, 'LoadFromFile(FileName, "real number")', 7.532E25);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60841, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '56 352 471');
  try
    Test({LINENUM}60844, 'LoadFromFile(FileName, "real number")', 56352471.0);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60851, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '56 352 471.5236');
  try
    Test({LINENUM}60854, 'LoadFromFile(FileName, "real number")', 56352471.5236);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60861, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '56 352 471.526 412 475');
  try
    Test({LINENUM}60864, 'LoadFromFile(FileName, "real number")', 56352471.526412475);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60871, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '- 56 352 471.526 412 475');
  try
    Test({LINENUM}60874, 'LoadFromFile(FileName, "real number")', -56352471.526412475);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60881, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '- 56 352 471.526 412 475E-20');
  try
    Test({LINENUM}60884, 'LoadFromFile(FileName, "real number")', -56352471.526412475E-20);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60891, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '.5');
  try
    Test({LINENUM}60894, 'LoadFromFile(FileName, "real number")', 0.5);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60901, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-.5');
  try
    Test({LINENUM}60904, 'LoadFromFile(FileName, "real number")', -0.5);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60911, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5269611515646514375253451651507449097105743634518465194104899911');
  try
    Test({LINENUM}60914, 'LoadFromFile(FileName, "real number")', 5269611515646514375253451651507449097105743634518465194104899911.0);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60921, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '7.');
  try
    Test({LINENUM}60924, 'LoadFromFile(FileName, "real number")', 7.0);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60931, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5.6.1');
  try
    Test({LINENUM}60934, 'LoadFromFile(FileName, "real number")', failure, 'Cannot convert string "5.6.1" to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60941, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '');
  try
    Test({LINENUM}60944, 'LoadFromFile(FileName, "real number")', failure, 'Cannot convert string "" to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60951, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5F20');
  try
    Test({LINENUM}60954, 'LoadFromFile(FileName, "real number")', failure, 'Cannot convert string "5F20" to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60961, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '7.3+');
  try
    Test({LINENUM}60964, 'LoadFromFile(FileName, "real number")', failure, 'Cannot convert string "7.3+" to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60971, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, 'I suspect nargles are behind it.');
  try
    Test({LINENUM}60974, 'LoadFromFile(FileName, "real number")', failure, 'Cannot convert string "I suspect nargles are behind it." to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60981, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, 'abc');
  try
    Test({LINENUM}60984, 'LoadFromFile(FileName, "real number")', failure, 'Cannot convert string "abc" to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}60991, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '53E20E10');
  try
    Test({LINENUM}60994, 'LoadFromFile(FileName, "real number")', failure, 'Cannot convert string "53E20E10" to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61001, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-');
  try
    Test({LINENUM}61004, 'LoadFromFile(FileName, "real number")', failure, 'Cannot convert string "-" to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61011, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5');
  try
    Test({LINENUM}61014, 'LoadFromFile(FileName, "complex number")', TASC(5));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61021, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-5');
  try
    Test({LINENUM}61024, 'LoadFromFile(FileName, "complex number")', TASC(-5));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61031, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−5');
  try
    Test({LINENUM}61034, 'LoadFromFile(FileName, "complex number")', TASC(-5));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61041, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '0');
  try
    Test({LINENUM}61044, 'LoadFromFile(FileName, "complex number")', TASC(0));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61051, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-0');
  try
    Test({LINENUM}61054, 'LoadFromFile(FileName, "complex number")', TASC(0));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61061, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '123 456 789');
  try
    Test({LINENUM}61064, 'LoadFromFile(FileName, "complex number")', TASC(123456789));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61071, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-52 000');
  try
    Test({LINENUM}61074, 'LoadFromFile(FileName, "complex number")', TASC(-52000));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61081, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.1415');
  try
    Test({LINENUM}61084, 'LoadFromFile(FileName, "complex number")', TASC(3.1415));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61091, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-5.2');
  try
    Test({LINENUM}61094, 'LoadFromFile(FileName, "complex number")', TASC(-5.2));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61101, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.14 15 92 65 35 89 79 32 38');
  try
    Test({LINENUM}61104, 'LoadFromFile(FileName, "complex number")', TASC(3.141592653589793238));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61111, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '7.2E20');
  try
    Test({LINENUM}61114, 'LoadFromFile(FileName, "complex number")', TASC(7.2E20));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61121, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-7.2E20');
  try
    Test({LINENUM}61124, 'LoadFromFile(FileName, "complex number")', TASC(-7.2E20));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61131, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '7.2E-20');
  try
    Test({LINENUM}61134, 'LoadFromFile(FileName, "complex number")', TASC(7.2E-20));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61141, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-7.2E-20');
  try
    Test({LINENUM}61144, 'LoadFromFile(FileName, "complex number")', TASC(-7.2E-20));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61151, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '.5');
  try
    Test({LINENUM}61154, 'LoadFromFile(FileName, "complex number")', TASC(0.5));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61161, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '1 + i');
  try
    Test({LINENUM}61164, 'LoadFromFile(FileName, "complex number")', TASC(1 + ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61171, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5 + 3⋅i');
  try
    Test({LINENUM}61174, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61181, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5+3⋅i');
  try
    Test({LINENUM}61184, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61191, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5+3i');
  try
    Test({LINENUM}61194, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61201, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, ' 5+3*i');
  try
    Test({LINENUM}61204, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61211, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, ' 5+3*i'#13#10);
  try
    Test({LINENUM}61214, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61221, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5 - 3⋅i');
  try
    Test({LINENUM}61224, 'LoadFromFile(FileName, "complex number")', TASC(5 - 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61231, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5 − 3⋅i');
  try
    Test({LINENUM}61234, 'LoadFromFile(FileName, "complex number")', TASC(5 - 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61241, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−5 − 3⋅i');
  try
    Test({LINENUM}61244, 'LoadFromFile(FileName, "complex number")', TASC(-5 - 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61251, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−5 + 3⋅i');
  try
    Test({LINENUM}61254, 'LoadFromFile(FileName, "complex number")', TASC(-5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61261, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '−3⋅i');
  try
    Test({LINENUM}61264, 'LoadFromFile(FileName, "complex number")', TASC(-3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61271, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3⋅i');
  try
    Test({LINENUM}61274, 'LoadFromFile(FileName, "complex number")', TASC(3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61281, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, 'i');
  try
    Test({LINENUM}61284, 'LoadFromFile(FileName, "complex number")', TASC(ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61291, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '-i');
  try
    Test({LINENUM}61294, 'LoadFromFile(FileName, "complex number")', TASC(-ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61301, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.22⋅i');
  try
    Test({LINENUM}61304, 'LoadFromFile(FileName, "complex number")', TASC(3.22*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61311, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.22E20⋅i');
  try
    Test({LINENUM}61314, 'LoadFromFile(FileName, "complex number")', TASC(3.22E20*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61321, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.22E-20⋅i');
  try
    Test({LINENUM}61324, 'LoadFromFile(FileName, "complex number")', TASC(3.22E-20*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61331, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5E-10 + 3⋅i');
  try
    Test({LINENUM}61334, 'LoadFromFile(FileName, "complex number")', TASC(5E-10 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61341, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5 + 3*i');
  try
    Test({LINENUM}61344, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61351, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5 + 3i');
  try
    Test({LINENUM}61354, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61361, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5 + 3 i');
  try
    Test({LINENUM}61364, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61371, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5 + 3⋅j');
  try
    Test({LINENUM}61374, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61381, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5 + 3*j');
  try
    Test({LINENUM}61384, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61391, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5 + 3j');
  try
    Test({LINENUM}61394, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61401, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5 + 3 j');
  try
    Test({LINENUM}61404, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61411, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3i + 5');
  try
    Test({LINENUM}61414, 'LoadFromFile(FileName, "complex number")', TASC(5 + 3*ImaginaryUnit));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61421, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '');
  try
    Test({LINENUM}61424, 'LoadFromFile(FileName, "complex number")', failure, 'Cannot convert string "" to a complex number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61431, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, 'g');
  try
    Test({LINENUM}61434, 'LoadFromFile(FileName, "complex number")', failure, 'Cannot convert string "g" to a complex number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61441, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5.36.2 + i');
  try
    Test({LINENUM}61444, 'LoadFromFile(FileName, "complex number")', failure, 'Cannot convert string "5.36.2 + i" to a complex number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61451, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '1 + k');
  try
    Test({LINENUM}61454, 'LoadFromFile(FileName, "complex number")', failure, 'Cannot convert string "1 + k" to a complex number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61461, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5/i');
  try
    Test({LINENUM}61464, 'LoadFromFile(FileName, "complex number")', failure, 'Cannot convert string "5/i" to a complex number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61471, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5E2E2 + 3 i');
  try
    Test({LINENUM}61474, 'LoadFromFile(FileName, "complex number")', failure, 'Cannot convert string "5E2E2 + 3 i" to a complex number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61481, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5'#13#10'6.1'#13#10'2.15E20'#13#10'-3.1415'#13#10'−7'#13#10'0');
  try
    Test({LINENUM}61484, 'LoadFromFile(FileName, "real vector")', [5, 6.1, 2.15E20, -3.1415, -7, 0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61491, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5'#13#10'6.1'#13#10'2.15E20'#13#10'-3.1415'#13#10'−7'#13#10'0'#13#10);
  try
    Test({LINENUM}61494, 'LoadFromFile(FileName, "real vector")', [5, 6.1, 2.15E20, -3.1415, -7, 0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61501, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5'#9'6.1'#9'2.15E20'#9'-3.1415'#9'−7'#9'0'#9);
  try
    Test({LINENUM}61504, 'LoadFromFile(FileName, "real vector")', [5, 6.1, 2.15E20, -3.1415, -7, 0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61511, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5;6.1;2.15E20;-3.1415;−7;0');
  try
    Test({LINENUM}61514, 'LoadFromFile(FileName, "real vector")', [5, 6.1, 2.15E20, -3.1415, -7, 0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61521, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5; 6.1; 2.15E20; -3.1415; −7; 0');
  try
    Test({LINENUM}61524, 'LoadFromFile(FileName, "real vector")', [5, 6.1, 2.15E20, -3.1415, -7, 0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61531, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5,6.1,2.15E20,-3.1415,−7,0');
  try
    Test({LINENUM}61534, 'LoadFromFile(FileName, "real vector")', [5, 6.1, 2.15E20, -3.1415, -7, 0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61541, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5'#13#10'6.1'#13#10'2.15E20'#13#10'-3.1415'#13#10'−7'#13#10'0');
  try
    Test({LINENUM}61544, 'LoadFromFile(FileName, "complex vector")', [TASC(5), 6.1, 2.15E20, -3.1415, -7, 0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61551, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '5'#13#10'6.1'#13#10'2.15E20'#13#10'-3.1415'#13#10'−7'#13#10'0'#13#10#13#10);
  try
    Test({LINENUM}61554, 'LoadFromFile(FileName, "complex vector")', [TASC(5), 6.1, 2.15E20, -3.1415, -7, 0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61561, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '10');
  try
    Test({LINENUM}61564, 'LoadFromFile(FileName, "real vector")', [10]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61571, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '');
  try
    Test({LINENUM}61574, 'LoadFromFile(FileName, "real vector")', TAlgosimRealVector.Create);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61581, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '10'#13#10);
  try
    Test({LINENUM}61584, 'LoadFromFile(FileName, "real vector")', [10]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61591, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '10'#13#10#13#10);
  try
    Test({LINENUM}61594, 'LoadFromFile(FileName, "real vector")', [10]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61601, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, #13#10);
  try
    Test({LINENUM}61604, 'LoadFromFile(FileName, "real vector")', TAlgosimRealVector.Create);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61611, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.51'#13#10'3 + i'#13#10'7-4⋅i'#13#10'-4.2 + 5.12⋅i'#13#10'-i'#13#10'5+6i');
  try
    Test({LINENUM}61614, 'LoadFromFile(FileName, "complex vector")', [3.51, 3 + ImaginaryUnit, 7 - 4*ImaginaryUnit, -4.2 + 5.12*ImaginaryUnit, -ImaginaryUnit, 5 + 6*ImaginaryUnit]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61621, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.51'#9'3 + i'#9'7-4⋅i'#9'-4.2 + 5.12⋅i'#9'-i'#9'5+6i');
  try
    Test({LINENUM}61624, 'LoadFromFile(FileName, "complex vector")', [3.51, 3 + ImaginaryUnit, 7 - 4*ImaginaryUnit, -4.2 + 5.12*ImaginaryUnit, -ImaginaryUnit, 5 + 6*ImaginaryUnit]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61631, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.51; 3 + i; 7-4⋅i; -4.2 + 5.12⋅i; -i; 5+6i');
  try
    Test({LINENUM}61634, 'LoadFromFile(FileName, "complex vector")', [3.51, 3 + ImaginaryUnit, 7 - 4*ImaginaryUnit, -4.2 + 5.12*ImaginaryUnit, -ImaginaryUnit, 5 + 6*ImaginaryUnit]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61641, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.51, 3 + i, 7-4⋅i, -4.2 + 5.12⋅i, -i, 5+6i');
  try
    Test({LINENUM}61644, 'LoadFromFile(FileName, "complex vector")', [3.51, 3 + ImaginaryUnit, 7 - 4*ImaginaryUnit, -4.2 + 5.12*ImaginaryUnit, -ImaginaryUnit, 5 + 6*ImaginaryUnit]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61651, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.51,3 + i,7-4⋅i,-4.2 + 5.12⋅i,-i,5+6i');
  try
    Test({LINENUM}61654, 'LoadFromFile(FileName, "complex vector")', [3.51, 3 + ImaginaryUnit, 7 - 4*ImaginaryUnit, -4.2 + 5.12*ImaginaryUnit, -ImaginaryUnit, 5 + 6*ImaginaryUnit]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61661, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.51, 3 + i, 7-4⋅i, -4.2 + 5.12⋅i, -i,5+6i'#13#10);
  try
    Test({LINENUM}61664, 'LoadFromFile(FileName, "complex vector")', [3.51, 3 + ImaginaryUnit, 7 - 4*ImaginaryUnit, -4.2 + 5.12*ImaginaryUnit, -ImaginaryUnit, 5 + 6*ImaginaryUnit]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61671, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '3.51,3 + i, 7-4⋅i, -4.2 + 5.12⋅i;-i;5+6i'#13#10);
  try
    Test({LINENUM}61674, 'LoadFromFile(FileName, "complex vector")', [3.51, 3 + ImaginaryUnit, 7 - 4*ImaginaryUnit, -4.2 + 5.12*ImaginaryUnit, -ImaginaryUnit, 5 + 6*ImaginaryUnit]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61681, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '0'#13#10'−5.2E10 − 3.1415E-10⋅i'#13#10'7i'#13#10'5-j'#13#10);
  try
    Test({LINENUM}61684, 'LoadFromFile(FileName, "complex vector")', [0, -5.2E10 - 3.1415E-10 * ImaginaryUnit, 7 * ImaginaryUnit, 5 - ImaginaryUnit]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61691, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn, '0'#13#10'−5.2E10 − 3.1415E-10⋅i'#13#10'7i'#13#10'5-j');
  try
    Test({LINENUM}61694, 'LoadFromFile(FileName, "real vector")', failure, 'Cannot convert string "−5.2E10 − 3.1415E-10⋅i" to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61701, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '0'
  );
  try
    Test({LINENUM}61706, 'LoadFromFile(FileName, "real matrix")', 1, [0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61713, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '0'#9'123'#9'394'
  );
  try
    Test({LINENUM}61718, 'LoadFromFile(FileName, "real matrix")', 3, [0, 123, 394]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61725, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '0, 123, 394'
  );
  try
    Test({LINENUM}61730, 'LoadFromFile(FileName, "real matrix")', 3, [0, 123, 394]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61737, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '0,123,394'
  );
  try
    Test({LINENUM}61742, 'LoadFromFile(FileName, "real matrix")', 3, [0, 123, 394]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61749, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '0; 123; 394'
  );
  try
    Test({LINENUM}61754, 'LoadFromFile(FileName, "real matrix")', 3, [0, 123, 394]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61761, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '0;123;394'
  );
  try
    Test({LINENUM}61766, 'LoadFromFile(FileName, "real matrix")', 3, [0, 123, 394]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61773, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '0, 123, 394'#13#10 +
    '5.2, 3.14159265, -5'
  );
  try
    Test({LINENUM}61779, 'LoadFromFile(FileName, "real matrix")', 3, [0, 123, 394, 5.2, 3.14159265, -5]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61786, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '0, 123, 394'#13#10 +
    '5.2, 3.14159265, -5'#13#10 +
    '.58, -.59, −.60'#13#10 +
    '−9.99, 5., .5'
  );
  try
    Test({LINENUM}61794, 'LoadFromFile(FileName, "real matrix")', 3, [0, 123, 394, 5.2, 3.14159265, -5, 0.58, -0.59, -0.60, -9.99, 5, 0.5]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61801, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '1;0;0;0;0'#13#10 +
    '0;1;0;0;0'#13#10 +
    '0;0;1;0;0'#13#10 +
    '0;0;0;1;0'#13#10 +
    '0;0;0;0;1'#13#10 +
    '0;0;0;1;0'#13#10 +
    '0;0;1;0;0'#13#10
  );
  try
    Test({LINENUM}61812, 'LoadFromFile(FileName, "real matrix")', 5, [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61819, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '1'#13#10 +
    '2'#13#10 +
    '3'#13#10 +
    '4'#13#10 +
    '5'#13#10 +
    '6'#13#10 +
    '7'#13#10
  );
  try
    Test({LINENUM}61830, 'LoadFromFile(FileName, "real matrix")', 1, [1, 2, 3, 4, 5, 6, 7]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61837, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '1;0;0;0;0'#13#10 +
    '0;1;0;0;0'#13#10 +
    '0;0;1;0;0'#13#10 +
    '0;0;0;1;0'#13#10 +
    '0;0;0;0;1'#13#10 +
    '0;0;0;1'#13#10 +
    '0;0;1;0;0'#13#10
  );
  try
    Test({LINENUM}61848, 'LoadFromFile(FileName, "real matrix")', failure, 'Attempt to create a non-rectangular matrix.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61855, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    '5 + i'#9'i'#9'3.1415'#13#10 +
    '-i'#9'7 − 6⋅i'#9'10i'
  );
  try
    Test({LINENUM}61861, 'LoadFromFile(FileName, "complex matrix")', 3, [5 + ImaginaryUnit, ImaginaryUnit, 3.1415, -ImaginaryUnit, 7 - 6*ImaginaryUnit, 10*ImaginaryUnit]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61868, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'i;0;0;0;0'#13#10 +
    '0;i;0;0;0'#13#10 +
    '0;0;i;0;0'#13#10 +
    '0;0;0;i;0'#13#10 +
    '0;0;0;0;i'#13#10 +
    '0;0;0;i;0'#13#10 +
    '0;0;i;0;0'#13#10
  );
  try
    Test({LINENUM}61879, 'LoadFromFile(FileName, "complex matrix")', 5, [ImaginaryUnit, 0, 0, 0, 0, 0, ImaginaryUnit, 0, 0, 0, 0, 0, ImaginaryUnit, 0, 0, 0, 0, 0, ImaginaryUnit, 0, 0, 0, 0, 0, ImaginaryUnit, 0, 0, 0, ImaginaryUnit, 0, 0, 0, ImaginaryUnit, 0, 0]);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61886, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'i;0;0;0;0'#13#10 +
    '0;i;0;0;0'#13#10 +
    '0;0;i;0;0'#13#10 +
    '0;0;0;i;0'#13#10 +
    '0;0;0;0;i'#13#10 +
    '0;0;0;i;0'#13#10 +
    '0;0;i;0'#13#10
  );
  try
    Test({LINENUM}61897, 'LoadFromFile(FileName, "complex matrix")', failure, 'Attempt to create a non-rectangular matrix.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;


  //
  // Large files
  //

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61909, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}61911, 'a ≔ BasisVector(1000000, 1); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real vector"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61918, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}61920, 'a ≔ ComplexVector(BasisVector(1000000, 1)); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex vector"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61927, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}61929, 'a ≔ IdentityMatrix(1000); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61936, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}61938, 'a ≔ ComplexMatrix(IdentityMatrix(1000)); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61945, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}61947, 'a ≔ RealMatrix(BasisVector(1000000, 1)); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61954, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}61956, 'a ≔ ComplexMatrix(BasisVector(1000000, 1)); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61963, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}61965, 'a ≔ RealMatrix(BasisVector(1000000, 1))*; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "real matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}61972, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}61974, 'a ≔ ComplexMatrix(BasisVector(1000000, 1))*; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "complex matrix"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.bmp';
  Test({LINENUM}61981, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}61983, 'a ≔ ColorGradient(4000, 4000, "red", "gold"); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "pixmap"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.png';
  Test({LINENUM}61990, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}61992, 'a ≔ ColorGradient(4000, 4000, "red", "gold"); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "pixmap"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.jpg';
  Test({LINENUM}61999, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}62001, 'a ≔ ColorGradient(4000, 4000, "red", "gold"); SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "pixmap"); norm(RealVector(GetRGB(AverageColor(a))) − RealVector(GetRGB(AverageColor(b)))) < 0.01', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}62008, 'FileName ≔ "' + fn + '"', fn);
  try
    Test({LINENUM}62010, 'a ≔ 10000000⋅"Lorem ipsum. "; SaveToFile(a, FileName); b ≔ LoadFromFile(FileName, "string"); a = b', True);
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;


  //
  // Loading with type inference
  //

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}62022, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62027, 'LoadFromFile(FileName)', 'I suspect nargles are behind it.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.bmp';
  Test({LINENUM}62034, 'FileName ≔ "' + fn + '"', fn);
  TASPixmap.CreateGradient(100, 100, clRed, clGreen).SaveToFile(fn, ifBitmap);
  try
    Test({LINENUM}62037, 'LoadFromFile(FileName)', ASO(TASPixmap.CreateGradient(100, 100, clRed, clGreen)));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.png';
  Test({LINENUM}62044, 'FileName ≔ "' + fn + '"', fn);
  TASPixmap.CreateGradient(100, 100, clRed, clGreen).SaveToFile(fn, ifPng);
  try
    Test({LINENUM}62047, 'LoadFromFile(FileName)', ASO(TASPixmap.CreateGradient(100, 100, clRed, clGreen)));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.jpg';
  Test({LINENUM}62054, 'FileName ≔ "' + fn + '"', fn);
  TASPixmap.CreateGradient(100, 100, clRed, clGreen).SaveToFile(fn, ifJpg);
  try
    Test({LINENUM}62057, 'string(LoadFromFile(FileName))', 'A pixmap of size 100×100.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.wav';
  Test({LINENUM}62064, 'FileName ≔ "' + fn + '"', fn);
  SaveSoundToFile(SineTone(400, 0.1, 5), fn);
  try
    Test({LINENUM}62067, 'LoadFromFile(FileName)', ASO(SineTone(400, 0.1, 5)));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;


  //
  // Invalid arguments or file format
  //

  fn := TPath.GetTempPath + 'algosim_selftest.txt';
  Test({LINENUM}62079, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62084, 'LoadFromFile(FileName, "nargle")', failure, 'Unknown class type: "nargle".');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62091, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62096, 'LoadFromFile(FileName)', failure, 'Unknown file extension: "nargle".');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62103, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62108, 'LoadFromFile(FileName, "integer")', failure, 'Object cannot be represented as a 64-bit integer.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62115, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62120, 'LoadFromFile(FileName, "rational number")', failure, 'Object isn''t a rational number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62127, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62132, 'LoadFromFile(FileName, "real number")', failure, 'Cannot convert string "I suspect nargles are behind it." to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62139, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62144, 'LoadFromFile(FileName, "complex number")', failure, 'Cannot convert string "I suspect nargles are behind it." to a complex number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62151, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62156, 'LoadFromFile(FileName, "real vector")', failure, 'Cannot convert string "I suspect nargles are behind it." to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62163, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62168, 'LoadFromFile(FileName, "complex vector")', failure, 'Cannot convert string "I suspect nargles are behind it." to a complex number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62175, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62180, 'LoadFromFile(FileName, "real matrix")', failure, 'Cannot convert string "I suspect nargles are behind it." to a real number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62187, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62192, 'LoadFromFile(FileName, "complex matrix")', failure, 'Cannot convert string "I suspect nargles are behind it." to a complex number.');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62199, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62204, 'LoadFromFile(FileName, "pixmap")', failure, 'Invalid');
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;

  fn := TPath.GetTempPath + 'algosim_selftest.nargle';
  Test({LINENUM}62211, 'FileName ≔ "' + fn + '"', fn);
  TFile.WriteAllText(fn,
    'I suspect nargles are behind it.'
  );
  try
    Test({LINENUM}62216, 'LoadFromFile(FileName, "sound")', failure, Format('The specified file "%s" appears not to be a RIFF file.', [fn]));
  finally
    if TFile.Exists(fn) then
      TFile.Delete(fn);
  end;





  //
  //
  //  CHAPTER 15
  //  Pixmaps
  //
  //

  Chapter('Pixmaps');

  //
  // width, height, size, IsSquare, IsRow, IsCol
  //

  Test({LINENUM}62239, 'width(CreatePixmap(50, 20, "red"))', 50);
  Test({LINENUM}62240, 'height(CreatePixmap(50, 20, "red"))', 20);
  Test({LINENUM}62241, 'size(CreatePixmap(50, 20, "red"))', ASOSize(20, 50));

  Test({LINENUM}62243, 'width(CreatePixmap(150, 120, "red"))', 150);
  Test({LINENUM}62244, 'height(CreatePixmap(150, 120, "red"))', 120);
  Test({LINENUM}62245, 'size(CreatePixmap(150, 120, "red"))', ASOSize(120, 150));

  Test({LINENUM}62247, 'IsSquare(CreatePixmap(50, 20, "red"))', False);
  Test({LINENUM}62248, 'IsSquare(CreatePixmap(50, 25, "red"))', False);
  Test({LINENUM}62249, 'IsSquare(CreatePixmap(50, 49, "red"))', False);
  Test({LINENUM}62250, 'IsSquare(CreatePixmap(50, 50, "red"))', True);
  Test({LINENUM}62251, 'IsSquare(CreatePixmap(50, 51, "red"))', False);
  Test({LINENUM}62252, 'IsSquare(CreatePixmap(50, 55, "red"))', False);
  Test({LINENUM}62253, 'IsSquare(CreatePixmap(50, 75, "red"))', False);
  Test({LINENUM}62254, 'IsSquare(CreatePixmap(50, 100, "red"))', False);
  Test({LINENUM}62255, 'IsSquare(CreatePixmap(50, 150, "red"))', False);

  Test({LINENUM}62257, 'IsRow(CreatePixmap(50, 20, "red"))', False);
  Test({LINENUM}62258, 'IsRow(CreatePixmap(50, 10, "red"))', False);
  Test({LINENUM}62259, 'IsRow(CreatePixmap(50, 2, "red"))', False);
  Test({LINENUM}62260, 'IsRow(CreatePixmap(50, 100, "red"))', False);
  Test({LINENUM}62261, 'IsRow(CreatePixmap(50, 1, "red"))', True);
  Test({LINENUM}62262, 'IsRow(CreatePixmap(50, 200, "red"))', False);

  Test({LINENUM}62264, 'IsCol(CreatePixmap(500, 20, "red"))', False);
  Test({LINENUM}62265, 'IsCol(CreatePixmap(10, 20, "red"))', False);
  Test({LINENUM}62266, 'IsCol(CreatePixmap(5, 20, "red"))', False);
  Test({LINENUM}62267, 'IsCol(CreatePixmap(2, 20, "red"))', False);
  Test({LINENUM}62268, 'IsCol(CreatePixmap(1, 20, "red"))', True);
  Test({LINENUM}62269, 'IsCol(CreatePixmap(100, 20, "red"))', False);
  Test({LINENUM}62270, 'IsCol(CreatePixmap(20, 20, "red"))', False);


  //
  // AddBorder
  //

  Test({LINENUM}62277, 'AddBorder(DebugObject("Sally"))', failure, 'Too few arguments. A required argument of type color is missing.');
  Test({LINENUM}62278, 'AddBorder(DebugObject("Sally"), "black")', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}62279, 'AddBorder(DebugObject("Sally"), "black", −4)', failure, 'A non-negative integer was expected as argument 3, but "-4" was given.');
  Test({LINENUM}62280, 'AddBorder(DebugObject("Sally"), "black", 10)[0, 0]', ASOColor(clBlack));
  Test({LINENUM}62281, 'AddBorder(DebugObject("Sally"), "red", 10)[0, 0]', ASOColor(clRed));

  Test({LINENUM}62283, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[0, 0]', ASOColor(clBlack));

  Test({LINENUM}62285, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, -1]', failure, 'Index (50, -1) out of bounds.');
  Test({LINENUM}62286, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 0]', ASOColor(clBlack));
  Test({LINENUM}62287, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 1]', ASOColor(clBlack));
  Test({LINENUM}62288, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 2]', ASOColor(clBlack));
  Test({LINENUM}62289, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 3]', ASOColor(clBlack));
  Test({LINENUM}62290, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 4]', ASOColor(clBlack));
  Test({LINENUM}62291, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 5]', ASOColor(clWhite));
  Test({LINENUM}62292, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 6]', ASOColor(clWhite));
  Test({LINENUM}62293, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 7]', ASOColor(clWhite));
  Test({LINENUM}62294, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 8]', ASOColor(clWhite));

  Test({LINENUM}62296, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 110]', failure, 'Index (50, 110) out of bounds.');
  Test({LINENUM}62297, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 109]', ASOColor(clBlack));
  Test({LINENUM}62298, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 108]', ASOColor(clBlack));
  Test({LINENUM}62299, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 107]', ASOColor(clBlack));
  Test({LINENUM}62300, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 106]', ASOColor(clBlack));
  Test({LINENUM}62301, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 105]', ASOColor(clBlack));
  Test({LINENUM}62302, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 104]', ASOColor(clWhite));
  Test({LINENUM}62303, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 103]', ASOColor(clWhite));
  Test({LINENUM}62304, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 102]', ASOColor(clWhite));
  Test({LINENUM}62305, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 101]', ASOColor(clWhite));
  Test({LINENUM}62306, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 100]', ASOColor(clWhite));
  Test({LINENUM}62307, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[50, 99]', ASOColor(clWhite));

  Test({LINENUM}62309, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[-1, 50]', failure, 'Index (-1, 50) out of bounds.');
  Test({LINENUM}62310, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[0, 50]', ASOColor(clBlack));
  Test({LINENUM}62311, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[1, 50]', ASOColor(clBlack));
  Test({LINENUM}62312, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[2, 50]', ASOColor(clBlack));
  Test({LINENUM}62313, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[3, 50]', ASOColor(clBlack));
  Test({LINENUM}62314, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[4, 50]', ASOColor(clBlack));
  Test({LINENUM}62315, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[5, 50]', ASOColor(clBlack));
  Test({LINENUM}62316, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[6, 50]', ASOColor(clBlack));
  Test({LINENUM}62317, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[7, 50]', ASOColor(clBlack));
  Test({LINENUM}62318, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[8, 50]', ASOColor(clWhite));
  Test({LINENUM}62319, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[9, 50]', ASOColor(clWhite));

  Test({LINENUM}62321, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[116, 50]', failure, 'Index (116, 50) out of bounds.');
  Test({LINENUM}62322, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[115, 50]', ASOColor(clBlack));
  Test({LINENUM}62323, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[114, 50]', ASOColor(clBlack));
  Test({LINENUM}62324, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[113, 50]', ASOColor(clBlack));
  Test({LINENUM}62325, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[112, 50]', ASOColor(clBlack));
  Test({LINENUM}62326, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[111, 50]', ASOColor(clBlack));
  Test({LINENUM}62327, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[110, 50]', ASOColor(clBlack));
  Test({LINENUM}62328, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[109, 50]', ASOColor(clBlack));
  Test({LINENUM}62329, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[108, 50]', ASOColor(clBlack));
  Test({LINENUM}62330, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[107, 50]', ASOColor(clWhite));
  Test({LINENUM}62331, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[106, 50]', ASOColor(clWhite));
  Test({LINENUM}62332, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[105, 50]', ASOColor(clWhite));
  Test({LINENUM}62333, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8)[104, 50]', ASOColor(clWhite));

  Test({LINENUM}62335, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8) = AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 7) ', False);
  Test({LINENUM}62336, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8) = AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8) ', True);
  Test({LINENUM}62337, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 8) = AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 9) ', False);
  Test({LINENUM}62338, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5) = AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 4) ', False);
  Test({LINENUM}62339, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5) = AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 5) ', True);
  Test({LINENUM}62340, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5) = AddBorder(CreatePixmap(100, 100, "white"), "black", 5, 6) ', False);

  Test({LINENUM}62342, 'AddBorder(CreatePixmap(100, 100, "white"), "black", 5, -8)', failure, 'A non-negative integer was expected as argument 4, but "-8" was given.');

  Test({LINENUM}62344, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[0, 0]', ASOColor(clYellow));

  Test({LINENUM}62346, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, -1]', failure, 'Index (50, -1) out of bounds.');
  Test({LINENUM}62347, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 0]', ASOColor(clYellow));
  Test({LINENUM}62348, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 1]', ASOColor(clYellow));
  Test({LINENUM}62349, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 2]', ASOColor(clYellow));
  Test({LINENUM}62350, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 3]', ASOColor(clYellow));
  Test({LINENUM}62351, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 4]', ASOColor(clYellow));
  Test({LINENUM}62352, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 5]', ASOColor(clGreen));
  Test({LINENUM}62353, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 6]', ASOColor(clGreen));
  Test({LINENUM}62354, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 7]', ASOColor(clGreen));
  Test({LINENUM}62355, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 8]', ASOColor(clGreen));

  Test({LINENUM}62357, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 110]', failure, 'Index (50, 110) out of bounds.');
  Test({LINENUM}62358, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 109]', ASOColor(clYellow));
  Test({LINENUM}62359, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 108]', ASOColor(clYellow));
  Test({LINENUM}62360, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 107]', ASOColor(clYellow));
  Test({LINENUM}62361, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 106]', ASOColor(clYellow));
  Test({LINENUM}62362, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 105]', ASOColor(clYellow));
  Test({LINENUM}62363, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 104]', ASOColor(clGreen));
  Test({LINENUM}62364, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 103]', ASOColor(clGreen));
  Test({LINENUM}62365, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 102]', ASOColor(clGreen));
  Test({LINENUM}62366, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 101]', ASOColor(clGreen));
  Test({LINENUM}62367, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 100]', ASOColor(clGreen));
  Test({LINENUM}62368, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[50, 99]', ASOColor(clGreen));

  Test({LINENUM}62370, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[-1, 50]', failure, 'Index (-1, 50) out of bounds.');
  Test({LINENUM}62371, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[0, 50]', ASOColor(clYellow));
  Test({LINENUM}62372, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[1, 50]', ASOColor(clYellow));
  Test({LINENUM}62373, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[2, 50]', ASOColor(clYellow));
  Test({LINENUM}62374, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[3, 50]', ASOColor(clYellow));
  Test({LINENUM}62375, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[4, 50]', ASOColor(clYellow));
  Test({LINENUM}62376, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[5, 50]', ASOColor(clYellow));
  Test({LINENUM}62377, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[6, 50]', ASOColor(clYellow));
  Test({LINENUM}62378, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[7, 50]', ASOColor(clYellow));
  Test({LINENUM}62379, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[8, 50]', ASOColor(clGreen));
  Test({LINENUM}62380, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[9, 50]', ASOColor(clGreen));

  Test({LINENUM}62382, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[116, 50]', failure, 'Index (116, 50) out of bounds.');
  Test({LINENUM}62383, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[115, 50]', ASOColor(clYellow));
  Test({LINENUM}62384, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[114, 50]', ASOColor(clYellow));
  Test({LINENUM}62385, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[113, 50]', ASOColor(clYellow));
  Test({LINENUM}62386, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[112, 50]', ASOColor(clYellow));
  Test({LINENUM}62387, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[111, 50]', ASOColor(clYellow));
  Test({LINENUM}62388, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[110, 50]', ASOColor(clYellow));
  Test({LINENUM}62389, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[109, 50]', ASOColor(clYellow));
  Test({LINENUM}62390, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[108, 50]', ASOColor(clYellow));
  Test({LINENUM}62391, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[107, 50]', ASOColor(clGreen));
  Test({LINENUM}62392, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[106, 50]', ASOColor(clGreen));
  Test({LINENUM}62393, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[105, 50]', ASOColor(clGreen));
  Test({LINENUM}62394, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8)[104, 50]', ASOColor(clGreen));

  Test({LINENUM}62396, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8) = AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 7) ', False);
  Test({LINENUM}62397, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8) = AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8) ', True);
  Test({LINENUM}62398, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 8) = AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 9) ', False);
  Test({LINENUM}62399, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5) = AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 4) ', False);
  Test({LINENUM}62400, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5) = AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 5) ', True);
  Test({LINENUM}62401, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5) = AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, 6) ', False);

  Test({LINENUM}62403, 'AddBorder(CreatePixmap(100, 100, "green"), "yellow", 5, -8)', failure, 'A non-negative integer was expected as argument 4, but "-8" was given.');

  Test({LINENUM}62405, 'AddBorder(CreatePixmap(200, 100, "red"), "red", 10, 20) = CreatePixmap(220, 140, "red")', True);


  //
  // ExtendBorder
  //

  Test({LINENUM}62412, 'ExtendBorder(ColorGradient(100, 100, "red", "blue"))', failure, 'A required argument of type integer is missing.');
  Test({LINENUM}62413, 'ExtendBorder(ColorGradient(100, 100, "red", "blue"), −2)', failure, 'A non-negative integer was expected as argument 2, but "-2" was given.');
  Test({LINENUM}62414, 'string(ExtendBorder(ColorGradient(100, 100, "red", "blue"), 10))', 'A pixmap of size 120×120.');
  Test({LINENUM}62415, 'string(ExtendBorder(ColorGradient(100, 100, "red", "blue"), 10, 50))', 'A pixmap of size 120×200.');
  Test({LINENUM}62416, 'string(ExtendBorder(ColorGradient(100, 100, "red", "blue"), 10, 50, 713))', failure, 'Too many arguments.');

  Test({LINENUM}62418, 'ExtendBorder(CreatePixmap(200, 100, "red"), 10, 20) = CreatePixmap(220, 140, "red")', True);
  Test({LINENUM}62419, 'ExtendBorder(ColorGradient(500, 100, "red", "blue"), 125, 0) = ColorGradient(750, 100, "red", "blue")', True);


  //
  // CreatePixmap, IsOnlyBackground, ExpandCanvas, auto cropping
  //

  Test({LINENUM}62426, 'CreatePixmap(100)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}62427, 'CreatePixmap(100, 100)', ASO(TASPixmap.Create(100, 100, clWhite)));
  Test({LINENUM}62428, 'CreatePixmap(100, 100, "red")', ASO(TASPixmap.Create(100, 100, clRed)));
  Test({LINENUM}62429, 'CreatePixmap(100, 100, "red", "blue")', ASO(TASPixmap.Create(100, 100, clRed)));

  Test({LINENUM}62431, 'ExpandCanvas(CreatePixmap(100, 100, "red"), 10) = AddBorder(CreatePixmap(100, 100, "red"), "white", 10)', True);
  Test({LINENUM}62432, 'ExpandCanvas(CreatePixmap(100, 100, "red"), 10, 2) = AddBorder(CreatePixmap(100, 100, "red"), "white", 10, 2)', True);

  Test({LINENUM}62434, 'ExpandCanvas(CreatePixmap(100, 100, "red", "yellow"), 10) = AddBorder(CreatePixmap(100, 100, "red"), "yellow", 10)', True);
  Test({LINENUM}62435, 'ExpandCanvas(CreatePixmap(100, 100, "red", "yellow"), 10, 2) = AddBorder(CreatePixmap(100, 100, "red"), "yellow", 10, 2)', True);

  Test({LINENUM}62437, 'IsOnlyBackground(CreatePixmap(100, 100))', True);
  Test({LINENUM}62438, 'IsOnlyBackground(CreatePixmap(100, 100, "red"))', False);
  Test({LINENUM}62439, 'IsOnlyBackground(CreatePixmap(100, 100, "red", "red"))', True);

  Test({LINENUM}62441, 'a ≔ FillRect(CreatePixmap(100, 100, "yellow"), 40, 40, 20, 20, "black"); AutoCrop(a) = a', True);
  Test({LINENUM}62442, 'AutoCropRect(a)', ASOIntRect(0, 0, 100, 100));

  Test({LINENUM}62444, 'a ≔ FillRect(CreatePixmap(100, 100, "yellow", "yellow"), 40, 40, 20, 20, "black");', null);
  Test({LINENUM}62445, 'AutoCrop(a) = CreatePixmap(20, 20, "black")', True);
  Test({LINENUM}62446, 'AutoCropRect(a)', ASOIntRect(40, 40, 20, 20));

  Test({LINENUM}62448, 'a ≔ DrawLine(FillRect(CreatePixmap(100, 100), 10, 20, 5, 5, "black"), 60, 70, 70, 80, "black");', null);
  Test({LINENUM}62449, 'AutoCropRect(a)', ASOIntRect(10, 20, 61, 61));


  //
  // FillRect
  //

  Test({LINENUM}62456, 'FillRect(CreatePixmap(100, 100, "yellow"), 25, 25, 50, 50) = AddBorder(CreatePixmap(50, 50, "black"), "yellow", 25, 25)', True);
  Test({LINENUM}62457, 'FillRect(CreatePixmap(100, 100, "yellow"), 25, 25, 50, 50, "blue") = AddBorder(CreatePixmap(50, 50, "blue"), "yellow", 25, 25)', True);

  Test({LINENUM}62459, 'FillRect(CreatePixmap(200, 100, "blue"), 100, 0, 100, 100, "yellow") = FillRect(FillRect(CreatePixmap(200, 100), 0, 0, 100, 100, "blue"), 100, 0, 100, 100, "yellow")', True);
  Test({LINENUM}62460, 'FillRect(CreatePixmap(200, 100, "blue"), 100, 0, 100, 100, "yellow") = FillRect(FillRect(FillRect(CreatePixmap(200, 100), 0, 0, 100, 100, "blue"), 100, 0, 100, 100, "yellow"), 200, 0, 100, 100, "red")', True);
  Test({LINENUM}62461, 'FillRect(CreatePixmap(200, 100, "blue"), 100, 0, 100, 100, "yellow") = FillRect(FillRect(FillRect(CreatePixmap(200, 100), 0, 0, 100, 100, "blue"), 100, 0, 100, 100, "yellow"), 2000, 500000, 100, 100, "red")', True);
  Test({LINENUM}62462, 'FillRect(CreatePixmap(200, 100, "blue"), 100, 0, 100, 100, "yellow") = FillRect(FillRect(FillRect(CreatePixmap(200, 100), 0, 0, 100, 100, "blue"), 100, 0, 100, 100, "yellow"), 2000, 500000, 100000, 100000, "red")', True);

  Test({LINENUM}62464, 'FillRect(CreatePixmap(100, 200, "blue"), 50, 20, 200, 254, "blue") = CreatePixmap(100, 200, "blue")', True);
  Test({LINENUM}62465, 'FillRect(CreatePixmap(100, 200, "blue"), 50, 20, 2000, 2540, "blue") = CreatePixmap(100, 200, "blue")', True);
  Test({LINENUM}62466, 'FillRect(CreatePixmap(100, 200, "blue"), 50, 20, 1, 1, "blue") = CreatePixmap(100, 200, "blue")', True);
  Test({LINENUM}62467, 'FillRect(CreatePixmap(100, 200, "blue"), 50, 20, 200, 0, "blue") = CreatePixmap(100, 200, "blue")', True);
  Test({LINENUM}62468, 'FillRect(CreatePixmap(100, 200, "blue"), 50, 20, 200, 0, "red") = CreatePixmap(100, 200, "blue")', True);
  Test({LINENUM}62469, 'FillRect(CreatePixmap(100, 200, "blue"), 50, 20, 0, 100, "red") = CreatePixmap(100, 200, "blue")', True);
  Test({LINENUM}62470, 'FillRect(CreatePixmap(100, 200, "blue"), 50, 20, 0, 0, "red") = CreatePixmap(100, 200, "blue")', True);
  Test({LINENUM}62471, 'FillRect(CreatePixmap(100, 200, "blue"), 50, 20, 1, 100, "red") = CreatePixmap(100, 200, "blue")', False);
  Test({LINENUM}62472, 'FillRect(CreatePixmap(100, 200, "blue"), 20050, 10020, 15, 13, "blue") = CreatePixmap(100, 200, "blue")', True);


  //
  // DrawSquare, DrawSquares
  //

  Test({LINENUM}62479, 'DrawSquare(CreatePixmap(10, 10, "black"))', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}62480, 'DrawSquare(CreatePixmap(10, 10, "black"), 5)', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}62482, 'AverageColor(DrawSquare(CreatePixmap(10, 10, "black"), 5, 5, "white", 1))', ASO(TRGB.Create(0.01, 0.01, 0.01)));
  Test({LINENUM}62483, 'AverageColor(DrawSquare(CreatePixmap(10, 10, "black"), 5, 5, "white", 2))', ASO(TRGB.Create(0.04, 0.04, 0.04)));
  Test({LINENUM}62484, 'AverageColor(DrawSquare(CreatePixmap(10, 10, "black"), 5, 5, "white", 3))', ASO(TRGB.Create(0.09, 0.09, 0.09)));
  Test({LINENUM}62485, 'AverageColor(DrawSquare(CreatePixmap(10, 10, "black"), 5, 5, "white", 4))', ASO(TRGB.Create(0.16, 0.16, 0.16)));
  Test({LINENUM}62486, 'AverageColor(DrawSquare(CreatePixmap(10, 10, "black"), 5, 5, "white", 5))', ASO(TRGB.Create(0.25, 0.25, 0.25)));
  Test({LINENUM}62487, 'AverageColor(DrawSquare(CreatePixmap(10, 10, "black"), 5, 5, "black", 5))', ASOColor(clBlack));

  Test({LINENUM}62489, 'AverageColor(DrawSquares(CreatePixmap(10, 10, "black"), 10, "red", 1))', failure, 'A list or set of integer points was expected as argument 2.');
  Test({LINENUM}62490, 'AverageColor(DrawSquares(CreatePixmap(10, 10, "black"), ''(❨0, 0❩, ❨4, 4❩, ❨5, 5❩, ❨9, 9❩, ❨0, 9❩, ❨9, 0❩), "red", 1))', ASO(TRGB.Create(0.06, 0, 0)));
  Test({LINENUM}62491, 'AverageColor(DrawSquares(CreatePixmap(10, 10, "black"), ''(❨0, 0❩, ❨4, 4❩, ❨5, 5❩, ❨9, 9❩, ❨0, 9❩, ❨9, 0❩, ❨10, 10❩, ❨10, 2❩, ❨5, 10❩, ❨156155612, 02156156❩), "red", 1))', ASO(TRGB.Create(0.06, 0, 0)));
  Test({LINENUM}62492, 'AverageColor(DrawSquares(CreatePixmap(10, 10, "black"), ''(❨0, 0❩, ❨4, 4❩, ❨5, 5❩, ❨9, 9❩, ❨0, 9❩, ❨9, 0❩, ❨-10, 10❩, ❨-10, 2❩, ❨-5, 10❩, ❨-156155612, -02156156❩), "red", 1))', ASO(TRGB.Create(0.06, 0, 0)));


  //
  // DrawDisk, DrawDisks
  //

  Test({LINENUM}62499, 'DrawDisk(CreatePixmap(10, 10, "black"))', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}62500, 'DrawDisk(CreatePixmap(10, 10, "black"), 5)', failure, 'Too few arguments. A required argument of type integer is missing.');

  Test({LINENUM}62502, 'max(abs(RealVector(GetRGB(AverageColor(DrawDisk(CreatePixmap(1000, 1000, "black"), 500, 500, "white", 250)))) − π⋅❨1, 1, 1❩/16)) < 0.0001', True);
  Test({LINENUM}62503, 'max(abs(RealVector(GetRGB(AverageColor(DrawDisk(CreatePixmap(1000, 1000, "black"), 500, 500, "white", 500)))) − π⋅❨1, 1, 1❩/4)) < 0.0001', True);

  Test({LINENUM}62505, 'max(abs(RealVector(GetRGB(AverageColor(DrawDisks(CreatePixmap(1000, 1000, "black"), ''(❨250, 250❩, ❨750, 250❩, ❨250, 750❩, ❨750, 750❩), "red", 250)))) − π⋅❨1, 0, 0❩/4)) < 0.0002', True);

  Test({LINENUM}62507, 'max(abs(RealVector(GetRGB(AverageColor(DrawDisks(CreatePixmap(1000, 1000, "black"), ''(❨250, 250❩, ❨750, 250❩, ❨250, 750❩, ❨750, 750❩, ❨7500, 7500❩, ❨750, -750❩, ❨-750, 750❩), "red", 250)))) − π⋅❨1, 0, 0❩/4)) < 0.0002', True);


  //
  // DrawLine, DrawLines, DrawPolygon
  //

  Test({LINENUM}62514, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), 0, 0, 99, 99, "white");', null);
  Test({LINENUM}62515, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(x = y, color("white"), color("black")))));', null);
  Test({LINENUM}62516, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.01, 0.01)));

  Test({LINENUM}62518, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), 99, 99, 0, 0, "white");', null);
  Test({LINENUM}62519, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(x = y, color("white"), color("black")))));', null);
  Test({LINENUM}62520, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.01, 0.01)));

  Test({LINENUM}62522, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), 99, 0, 0, 99, "white");', null);
  Test({LINENUM}62523, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(x = 99 - y, color("white"), color("black")))));', null);
  Test({LINENUM}62524, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.01, 0.01)));

  Test({LINENUM}62526, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), 0, 99, 99, 0, "white");', null);
  Test({LINENUM}62527, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(x = 99 - y, color("white"), color("black")))));', null);
  Test({LINENUM}62528, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.01, 0.01)));

  Test({LINENUM}62530, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), 0, 50, 99, 50, "red");', null);
  Test({LINENUM}62531, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(y = 50, color("red"), color("black")))));', null);
  Test({LINENUM}62532, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.00, 0.00)));

  Test({LINENUM}62534, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), 2, 0, 2, 99, "blue");', null);
  Test({LINENUM}62535, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(x = 2, color("blue"), color("black")))));', null);
  Test({LINENUM}62536, 'AverageColor(A)', ASO(TRGB.Create(0.00, 0.00, 0.01)));

  Test({LINENUM}62538, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), 5, 10, 10, 10, "white");', null);
  Test({LINENUM}62539, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(y = 10 ∧ x ≥ 5 ∧ x ≤ 10, color("white"), color("black")))));', null);
  Test({LINENUM}62540, 'AverageColor(A)', ASO(TRGB.Create(0.0006, 0.0006, 0.0006)));

  Test({LINENUM}62542, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), 5, 10, 5, 10, "white");', null);
  Test({LINENUM}62543, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(y = 10 ∧ x = 5, color("white"), color("black")))));', null);
  Test({LINENUM}62544, 'AverageColor(A)', ASO(TRGB.Create(0.0001, 0.0001, 0.0001)));

  Test({LINENUM}62546, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), 0, 0, 150, 150, "white");', null);
  Test({LINENUM}62547, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(x = y, color("white"), color("black")))));', null);
  Test({LINENUM}62548, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.01, 0.01)));

  Test({LINENUM}62550, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), -200, -200, 99, 99, "white");', null);
  Test({LINENUM}62551, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(x = y, color("white"), color("black")))));', null);
  Test({LINENUM}62552, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.01, 0.01)));

  Test({LINENUM}62554, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), -100, -100, 300, 300, "white");', null);
  Test({LINENUM}62555, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(x = y, color("white"), color("black")))));', null);
  Test({LINENUM}62556, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.01, 0.01)));

  Test({LINENUM}62558, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), 0, 50, 500, 50, "red");', null);
  Test({LINENUM}62559, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(y = 50, color("red"), color("black")))));', null);
  Test({LINENUM}62560, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.00, 0.00)));

  Test({LINENUM}62562, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), -20, 50, 99, 50, "red");', null);
  Test({LINENUM}62563, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(y = 50, color("red"), color("black")))));', null);
  Test({LINENUM}62564, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.00, 0.00)));

  Test({LINENUM}62566, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), -500, 50, 200, 50, "red");', null);
  Test({LINENUM}62567, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(y = 50, color("red"), color("black")))));', null);
  Test({LINENUM}62568, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.00, 0.00)));

  Test({LINENUM}62570, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), -50000000, 50, 20000000, 50, "red");', null);
  Test({LINENUM}62571, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(y = 50, color("red"), color("black")))));', null);
  Test({LINENUM}62572, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.00, 0.00)));

  Test({LINENUM}62574, 'A ≔ DrawLine(CreatePixmap(100, 100, "black"), -50000000, 50, 1000000000, 50, "red");', null);
  Test({LINENUM}62575, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(y = 50, color("red"), color("black")))));', null);
  Test({LINENUM}62576, 'AverageColor(A)', ASO(TRGB.Create(0.01, 0.00, 0.00)));

  Test({LINENUM}62578, 'DrawLines( CreatePixmap(100, 100, "red"), ''(❨0, 0❩, ❨99, 0❩, ❨99, 99❩, ❨0, 99❩, ❨0, 0❩), "white") = AddBorder(CreatePixmap(98, 98, "red"), "white", 1, 1)', True);
  Test({LINENUM}62579, 'DrawPolygon( CreatePixmap(100, 100, "red"), ''(❨0, 0❩, ❨99, 0❩, ❨99, 99❩, ❨0, 99❩), "white") = AddBorder(CreatePixmap(98, 98, "red"), "white", 1, 1)', True);

  Test({LINENUM}62581, 'DrawLines( CreatePixmap(100, 100, "red"), ''(❨50, 50❩, ❨60, 50❩, ❨60, 60❩, ❨50, 60❩, ❨50, 50❩), "white") = DrawPolygon( CreatePixmap(100, 100, "red"), ''(❨50, 50❩, ❨60, 50❩, ❨60, 60❩, ❨50, 60❩), "white")', True);


  //
  // Primitive rotations and reflections
  //

  Test({LINENUM}62588, 'rot90p( FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red") ) = FillRect(CreatePixmap(100, 200, "black"), 0, 100, 100, 100, "red")', True);
  Test({LINENUM}62589, 'rot90p(rot90p( FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red") )) = FillRect(CreatePixmap(200, 100, "black"), 100, 0, 100, 100, "red")', True);
  Test({LINENUM}62590, 'rot90p(rot90p(rot90p( FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red") ))) = FillRect(CreatePixmap(100, 200, "black"), 0, 0, 100, 100, "red")', True);
  Test({LINENUM}62591, 'rot90p(rot90p(rot90p(rot90p( FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red") )))) = FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red")', True);

  Test({LINENUM}62593, 'rot90n( FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red") ) = FillRect(CreatePixmap(100, 200, "black"), 0, 0, 100, 100, "red")', True);
  Test({LINENUM}62594, 'rot90n(rot90n( FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red") )) = FillRect(CreatePixmap(200, 100, "black"), 100, 0, 100, 100, "red")', True);
  Test({LINENUM}62595, 'rot90n(rot90n(rot90n( FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red") ))) = FillRect(CreatePixmap(100, 200, "black"), 0, 100, 100, 100, "red")', True);
  Test({LINENUM}62596, 'rot90n(rot90n(rot90n(rot90n( FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red") )))) = FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red")', True);

  Test({LINENUM}62598, 'rot180( FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red") ) = FillRect(CreatePixmap(200, 100, "black"), 100, 0, 100, 100, "red")', True);
  Test({LINENUM}62599, 'rot180(rot180( FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red") )) = FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red")', True);

  Test({LINENUM}62601, 'flip(FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red")) = FillRect(CreatePixmap(200, 100, "black"), 100, 0, 100, 100, "red")', True);
  Test({LINENUM}62602, 'flip(FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red"), "h") = FillRect(CreatePixmap(200, 100, "black"), 100, 0, 100, 100, "red")', True);
  Test({LINENUM}62603, 'flip(FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red"), "v") = FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red")', True);

  Test({LINENUM}62605, 'flip(FillRect(CreatePixmap(100, 200, "black"), 0, 0, 100, 100, "red")) = FillRect(CreatePixmap(100, 200, "black"), 0, 0, 100, 100, "red")', True);
  Test({LINENUM}62606, 'flip(FillRect(CreatePixmap(100, 200, "black"), 0, 0, 100, 100, "red"), "h") = FillRect(CreatePixmap(100, 200, "black"), 0, 0, 100, 100, "red")', True);
  Test({LINENUM}62607, 'flip(FillRect(CreatePixmap(100, 200, "black"), 0, 0, 100, 100, "red"), "v") = FillRect(CreatePixmap(100, 200, "black"), 0, 100, 100, 100, "red")', True);

  Test({LINENUM}62609, 'flip(FillRect(CreatePixmap(100, 200, "black"), 0, 0, 100, 100, "red"), "s")', failure, 'Character "s" not allowed as argument. Expected one of "hv".');

  Test({LINENUM}62611, 'a ≔ DebugObject("Sally"); b ≔ rot90p(a); a ≠ b ∧ AverageColor(a) = AverageColor(b)', True);
  Test({LINENUM}62612, 'a ≔ DebugObject("Sally"); b ≔ rot90n(a); a ≠ b ∧ AverageColor(a) = AverageColor(b)', True);
  Test({LINENUM}62613, 'a ≔ DebugObject("Sally"); b ≔ flip(a, "h"); a ≠ b ∧ AverageColor(a) = AverageColor(b)', True);
  Test({LINENUM}62614, 'a ≔ DebugObject("Sally"); b ≔ flip(a, "v"); a ≠ b ∧ AverageColor(a) = AverageColor(b)', True);


  //
  // FloodFill and component fill
  //

  Test({LINENUM}62621, 'A ≔ FloodFill(DrawLine(CreatePixmap(100, 100, "black"), 0, 0, 99, 99, "white"), 10, 50, "white");', null);
  Test({LINENUM}62622, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(y ≥ x, color("white"), color("black")))));', null);

  Test({LINENUM}62624, 'A ≔ FloodFill(DrawLine(CreatePixmap(200, 100, "black"), 99, 0, 99, 99, "white"), 50, 50, "white");', null);
  Test({LINENUM}62625, 'for(y, 0, 99, for(x, 0, 99, assert(A[y, x] = if(x ≤ 99, color("white"), color("black")))));', null);

  Test({LINENUM}62627, 'FloodFill( DrawPolygon( CreatePixmap(100, 100, "black"), ''(❨10, 10❩, ❨10, 20❩, ❨20, 20❩, ❨20, 10❩), "red") , 15, 15, "red") = FillRect(CreatePixmap(100, 100, "black"), 10, 10, 11, 11, "red")', True);

  Test({LINENUM}62629, 'a ≔ DrawLines(CreatePixmap(1000, 1000), ''(❨200, 0❩, ❨200, 700❩, ❨800, 700❩, ❨800, 200❩, ❨100, 200❩, ❨100, 500❩, ❨600, 500❩, ❨600, 1000❩), "black");', null);

  Test({LINENUM}62631, 'b ≔ ComponentHighlight(a, n ↦ ''("#13031D", "#049CC8", "#89AFCE", "#8AC7A6", "#52E303")[n]);', null);
  Test({LINENUM}62632, 'b = FloodFill(FloodFill(FloodFill(FloodFill(FloodFill(a, 10, 10, "#13031D"), 500, 10, "#049CC8"), 120, 300, "#89AFCE"), 220, 300, "#8AC7A6"), 220, 600, "#52E303")', True);

  Test({LINENUM}62634, 'b ≔ ComponentHighlight(a, n ↦ ''("#9C7E76", "#F990A7", "#7417EB", "#EA8AF4", "#453AFF")[n]);', null);
  Test({LINENUM}62635, 'b = FloodFill(FloodFill(FloodFill(FloodFill(FloodFill(a, 10, 10, "#9C7E76"), 500, 10, "#F990A7"), 120, 300, "#7417EB"), 220, 300, "#EA8AF4"), 220, 600, "#453AFF")', True);

  Test({LINENUM}62637, 'b ≔ ComponentHighlight(a, n ↦ ''("#9C7E76", "#F990A7", "#7417EB", "#EA8AF4")[n]);', failure, 'Index 5 out of bounds.');
  Test({LINENUM}62638, 'b ≔ ComponentHighlight(a, n ↦ ''("#9C7E76", "#F990A7", "#7417EB", "#EA8AF4", now())[n]);', failure, 'Invalid colour coordinates structure.');
  Test({LINENUM}62639, 'b ≔ ComponentHighlight(a, n ↦ ''("#9C7E76", "#F990A7", "#7417EB", "#EA8AF4", true)[n]);', failure, 'An object of type "boolean" cannot be converted to a colour.');
  Test({LINENUM}62640, 'b ≔ ComponentHighlight(a, n ↦ ''("#9C7E76", "#F990A7", "#7417EB", "#EA8AF4", 5.2)[n]);', failure, 'A number which isn''t a 32-bit integer cannot be converted to a colour.');

  Test({LINENUM}62642, 'ColorCount(a)', 2);
  Test({LINENUM}62643, 'ComponentHighlight(a) = ComponentHighlight(a)', False);
  Test({LINENUM}62644, 'ComponentHighlight(a) = ComponentHighlight(a)', False);
  Test({LINENUM}62645, 'ComponentHighlight(a) = ComponentHighlight(a)', False);
  Test({LINENUM}62646, 'ColorCount(ComponentHighlight(a))', 6);
  Test({LINENUM}62647, 'ColorCount(ComponentHighlight(a))', 6);
  Test({LINENUM}62648, 'ColorCount(ComponentHighlight(a))', 6);


  //
  // shuffle and tiles
  //

  Test({LINENUM}62655, 'a ≔ DebugObject("Sally"); b ≔ shuffle(a); a ≠ b ∧ AverageColor(a) = AverageColor(b)', True);

  Test({LINENUM}62657, 'a ≔ ColorGradient(1000, 1000, "red", "black"); b ≔ tiles(a, 10, 10, 0); a ≠ b ∧ AverageColor(a) = AverageColor(b)', True);
  Test({LINENUM}62658, 'a ≔ ColorGradient(1000, 1000, "red", "black"); b ≔ tiles(a, 10, 10, 0, false); a = b', True);
  Test({LINENUM}62659, 'size(tiles(a, 10, 10, 20))', ASOSize(1220, 1220));


  //
  // IsGreyscale, ToGreyscale
  //

  Test({LINENUM}62666, 'IsGreyscale(ColorGradient(1000, 1000, "white", "black"))', True);
  Test({LINENUM}62667, 'IsGreyscale(ColorGradient(1000, 1000, "white", "silver"))', True);
  Test({LINENUM}62668, 'IsGreyscale(ColorGradient(1000, 1000, "lightgrey", "darkgrey"))', True);
  Test({LINENUM}62669, 'IsGreyscale(ColorGradient(1000, 1000, "gold", "silver"))', False);

  Test({LINENUM}62671, 'a ≔ shuffle(ColorGradient(1000, 1000, "black", "white"));', null);
  Test({LINENUM}62672, 'IsGreyscale(a)', True);
  Test({LINENUM}62673, 'a[713, 394] ≔ rgb(0.22, 0.22, 0.23);', null);
  Test({LINENUM}62674, 'IsGreyscale(a)', False);
  Test({LINENUM}62675, 'a[713, 394] ≔ rgb(0.22, 0.22, 0.22);', null);
  Test({LINENUM}62676, 'IsGreyscale(a)', True);

  Test({LINENUM}62678, 'IsGreyscale(DebugObject("Sally"))', False);
  Test({LINENUM}62679, 'IsGreyscale(DebugObject("harvestman"))', False);
  Test({LINENUM}62680, 'IsGreyscale(DebugObject("rabbit"))', False);

  Test({LINENUM}62682, 'a ≔ shuffle(ColorGradient(1000, 1000, "black", "white"));', null);
  Test({LINENUM}62683, 'IsGreyscale(a)', True);
  Test({LINENUM}62684, 'a[713, 394] ≔ rgb(0.22, 0.22, 0.23);', null);
  Test({LINENUM}62685, 'IsGreyscale(a)', False);
  Test({LINENUM}62686, 'a ≔ ToGreyscale(a);', null);
  Test({LINENUM}62687, 'IsGreyscale(a)', True);

  Test({LINENUM}62689, 'IsGreyscale(ToGreyscale(DebugObject("Sally")))', True);
  Test({LINENUM}62690, 'IsGreyscale(ToGreyscale(DebugObject("harvestman")))', True);
  Test({LINENUM}62691, 'IsGreyscale(ToGreyscale(DebugObject("rabbit")))', True);


  //
  // AverageColor, ColorCount, ColorFreqs
  //

  Test({LINENUM}62698, 'a ≔ ColorGradient(1000, 1000, "black", "white");', null);
  Test({LINENUM}62699, 'AverageColor(a)', ASO(TRGB.Create(0.5, 0.5, 0.5)));
  Test({LINENUM}62700, 'ColorCount(a)', 256);
  Test({LINENUM}62701, '∀(ColorFreqs(a) @ (x ↦ x[2]), (n ↦ 1000 ∣ n))', True);

  Test({LINENUM}62703, 'a ≔ ColorGradient(1000, 256, "black", "white");', null);
  Test({LINENUM}62704, 'AverageColor(a)', ASO(TRGB.Create(0.5, 0.5, 0.5)));
  Test({LINENUM}62705, 'ColorCount(a)', 256);
  Test({LINENUM}62706, '∀(ColorFreqs(a) @ (x ↦ x[2]), (n ↦ n = 1000))', True);

  Test({LINENUM}62708, 'a ≔ FillRect(CreatePixmap(200, 100, "black"), 0, 0, 100, 100, "red");', null);
  Test({LINENUM}62709, 'AverageColor(a)', ASO(TRGB.Create(0.5, 0.0, 0.0)));
  Test({LINENUM}62710, 'ColorCount(a)', 2);
  Test({LINENUM}62711, 'ColorFreqs(a)', asoarrex([
    asoarrex([ASO(TRGB.Create(0, 0, 0)), ASOInt(10000)]),
    asoarrex([ASO(TRGB.Create(1, 0, 0)), ASOInt(10000)])
  ]));

  Test({LINENUM}62716, 'pm ≔ FillRect(FillRect(CreatePixmap(300, 100, "red"), 100, 0, 100, 100, "lime"), 200, 0, 100, 100, "blue");', null);
  Test({LINENUM}62717, 'ColorCount(pm)', 3);
  Test({LINENUM}62718, 'ColorFreqs(pm)', asoarrex([
    asoarrex([ASO(TRGB.Create(1, 0, 0)), ASOInt(10000)]),
    asoarrex([ASO(TRGB.Create(0, 1, 0)), ASOInt(10000)]),
    asoarrex([ASO(TRGB.Create(0, 0, 1)), ASOInt(10000)])
  ]));
  Test({LINENUM}62723, 'AverageColor(pm)', ASO(TRGB.Create(1/3, 1/3, 1/3)));
  Test({LINENUM}62724, 'AverageColor(pm, 0, 0, 100, 100)', ASO(TRGB.Create(1, 0, 0)));
  Test({LINENUM}62725, 'AverageColor(pm, 100, 0, 100, 100)', ASO(TRGB.Create(0, 1, 0)));
  Test({LINENUM}62726, 'AverageColor(pm, 200, 0, 100, 100)', ASO(TRGB.Create(0, 0, 1)));


  //
  // Image effects
  //

  Test({LINENUM}62733, 'a ≔ DebugObject("Sally");', null);

  Test({LINENUM}62735, 'b ≔ noise(a); a ≠ b', True);
  Test({LINENUM}62736, 'b ≔ noise(a, 0.1); a ≠ b', True);
  Test({LINENUM}62737, 'b ≔ noise(a, 0.9); a ≠ b', True);
  Test({LINENUM}62738, 'b ≔ noise(a, 1); b = CreatePixmap(width(a), height(a), "white")', True);
  Test({LINENUM}62739, 'b ≔ noise(a, 1, "red"); b = CreatePixmap(width(a), height(a), "red")', True);
  Test({LINENUM}62740, 'b ≔ noise(a, 1, "red", "green")', failure, 'Too many arguments.');

  Test({LINENUM}62742, 'b ≔ pixelate(a)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}62743, 'b ≔ pixelate(a, 10); a ≠ b', True);
  Test({LINENUM}62744, 'pixelate(a, 10) = pixelate(a, 10, 10)', True);
  Test({LINENUM}62745, 'pixelate(a, 10) ≠ pixelate(a, 10, 20)', True);
  Test({LINENUM}62746, 'b ≔ pixelate(a, ⌈width(a) / 5⌉, ⌈height(a) / 5⌉); ColorCount(b)', 25);
  Test({LINENUM}62747, 'b ≔ pixelate(a, width(a), height(a)); ColorCount(b)', 1);
  Test({LINENUM}62748, 'pixelate(CreatePixmap(1000, 1000, "red"), 10, 10) = CreatePixmap(1000, 1000, "red")', True);

  Test({LINENUM}62750, 'b ≔ wind(a, 0, 10, 1); a = b', True);
  Test({LINENUM}62751, 'b ≔ wind(a, 0.1, 0, 1); a = b', True);
  Test({LINENUM}62752, 'b ≔ wind(a, 0.1, 10, 1); a = b', False);
  Test({LINENUM}62753, 'b ≔ wind(a, -1, 10, 1); a = b', failure, 'Invalid probability.');
  Test({LINENUM}62754, 'b ≔ wind(a, 2, 10, 1); a = b', failure, 'Invalid probability.');
  Test({LINENUM}62755, 'b ≔ wind(a, 0.1, -5, 1); a = b', failure, 'Invalid distance.');
  Test({LINENUM}62756, 'b ≔ wind(a, 0.1, 10, -1); a = b', failure, 'Invalid fading.');
  Test({LINENUM}62757, 'b ≔ wind(a, 0.1, 10, 2); a = b', failure, 'Invalid fading.');

  Test({LINENUM}62759, 'b ≔ ripple(a, 0, 200); a = b', True);
  Test({LINENUM}62760, 'b ≔ ripple(a, 10, 200); a ≠ b', True);
  Test({LINENUM}62761, 'b ≔ ripple(a, -10, 200); a ≠ b', True);

  Test({LINENUM}62763, 'b ≔ ripple(a, 10, 0)', failure, 'The wavelength must be positive.');
  Test({LINENUM}62764, 'b ≔ ripple(a, 10, -10)', failure, 'The wavelength must be positive.');

  Test({LINENUM}62766, 'ripple(a, 10, 200) = ripple(a, 10, 200, "h")', True);
  Test({LINENUM}62767, 'ripple(a, 10, 200, "v") = ripple(a, 10, 200, "h")', False);
  Test({LINENUM}62768, 'ripple(a, 10, 200, "s")', failure, 'Character "s" not allowed as argument. Expected one of "hv".');

  Test({LINENUM}62770, 'b ≔ emboss(a); a ≠ b ∧ IsGreyscale(b)', True);
  Test({LINENUM}62771, 'emboss(a) = emboss(a, "hv")', True);
  Test({LINENUM}62772, 'emboss(a) = emboss(a, "h")', False);
  Test({LINENUM}62773, 'emboss(a) = emboss(a, "v")', False);

  Test({LINENUM}62775, 'b ≔ EdgeDetect(a); a ≠ b ∧ IsGreyscale(b)', True);
  Test({LINENUM}62776, 'EdgeDetect(a) = EdgeDetect(a, "hv")', True);
  Test({LINENUM}62777, 'EdgeDetect(a) = EdgeDetect(a, "h")', False);
  Test({LINENUM}62778, 'EdgeDetect(a) = EdgeDetect(a, "v")', False);

  Test({LINENUM}62780, 'b ≔ GaussianBlur(a); a ≠ b', True);
  Test({LINENUM}62781, 'GaussianBlur(a) = GaussianBlur(a, 2)', True);
  Test({LINENUM}62782, 'GaussianBlur(a) = GaussianBlur(a, 2, 6)', True);
  Test({LINENUM}62783, 'norm(RealVector(GetRGB(AverageColor(EdgeDetect(a))))) / norm(RealVector(GetRGB(AverageColor(EdgeDetect(GaussianBlur(a, 6)))))) > 10', True);

  Test({LINENUM}62785, 'b ≔ BoxBlur(a); a ≠ b', True);
  Test({LINENUM}62786, 'BoxBlur(a) = BoxBlur(a, 2)', True);
  Test({LINENUM}62787, 'norm(RealVector(GetRGB(AverageColor(EdgeDetect(a))))) / norm(RealVector(GetRGB(AverageColor(EdgeDetect(BoxBlur(a, 6)))))) > 5', True);

  Test({LINENUM}62789, 'b ≔ MotionBlur(a); a ≠ b', True);
  Test({LINENUM}62790, 'MotionBlur(a, 0) = a', True);
  Test({LINENUM}62791, 'MotionBlur(a, 0, "h") = a', True);
  Test({LINENUM}62792, 'MotionBlur(a, 0, "v") = a', True);
  Test({LINENUM}62793, 'MotionBlur(a) = MotionBlur(a, 32)', True);
  Test({LINENUM}62794, 'MotionBlur(a) = MotionBlur(a, 32, "h")', True);
  Test({LINENUM}62795, 'MotionBlur(a) = MotionBlur(a, 32, "v")', False);
  Test({LINENUM}62796, 'MotionBlur(a, 32, "q")', failure, 'Character "q" not allowed as argument. Expected one of "hv".');
  Test({LINENUM}62797, 'MotionBlur(a, -10)', failure, 'A non-negative integer was expected as argument 2, but "-10" was given.');

  Test({LINENUM}62799, 'b ≔ DistortMetric(a)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}62800, 'b ≔ DistortMetric(a, 10); a ≠ b', True);
  Test({LINENUM}62801, 'b ≔ DistortMetric(a, 10, 20); a ≠ b', True);

  Test({LINENUM}62803, 'b ≔ DistortColor(a)', failure, 'Too few arguments. A required argument of type integer is missing.');
  Test({LINENUM}62804, 'b ≔ DistortColor(a, 10); a ≠ b', True);
  Test({LINENUM}62805, 'b ≔ DistortColor(a, 10, 20); a ≠ b', True);
  Test({LINENUM}62806, 'b ≔ DistortColor(a, 10, 20, 30); a ≠ b', True);
  Test({LINENUM}62807, 'a = DistortColor(a, 0)', True);

  Test({LINENUM}62809, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", 1))', ASO(TRGB.Create(1/1, 0, 0)));
  Test({LINENUM}62810, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", 2))', ASO(TRGB.Create(1/4, 0, 0)));
  Test({LINENUM}62811, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", 4))', ASO(TRGB.Create(1/16, 0, 0)));
  Test({LINENUM}62812, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", 5))', ASO(TRGB.Create(1/25, 0, 0)));
  Test({LINENUM}62813, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", 10))', ASO(TRGB.Create(1/100, 0, 0)));
  Test({LINENUM}62814, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", 100))', ASO(TRGB.Create(1/10000, 0, 0)));
  Test({LINENUM}62815, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", 1000))', ASO(TRGB.Create(1/1000000, 0, 0)));

  Test({LINENUM}62817, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", -1))', ASO(TRGB.Create(0/1, 0, 0)));
  Test({LINENUM}62818, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", -2))', ASO(TRGB.Create(3/4, 0, 0)));
  Test({LINENUM}62819, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", -4))', ASO(TRGB.Create(15/16, 0, 0)));
  Test({LINENUM}62820, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", -5))', ASO(TRGB.Create(24/25, 0, 0)));
  Test({LINENUM}62821, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", -10))', ASO(TRGB.Create(99/100, 0, 0)));
  Test({LINENUM}62822, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", -100))', ASO(TRGB.Create(9999/10000, 0, 0)));
  Test({LINENUM}62823, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", -1000))', ASO(TRGB.Create(999999/1000000, 0, 0)));

  Test({LINENUM}62825, 'AverageColor(DissolveToColorRegularly(CreatePixmap(1000, 1000, "black"), "red", 0))', failure, 'Denominator cannot be zero.');

  Test({LINENUM}62827, 'AverageColor(DissolveToColorRegularly(CreatePixmap(100, 100, "black"), ((x, y) ↦ rgb(x/99, 0, 0)), 1))', ASO(TRGB.Create(0.5, 0, 0)));
  Test({LINENUM}62828, 'norm(RealVector(GetRGB(AverageColor(DissolveToColorRegularly(CreatePixmap(100, 100, "black"), ((x, y) ↦ rgb(x/99, 0, 0)), 2)))) − ❨1/8, 0, 0❩) < 0.002', True);
  Test({LINENUM}62829, 'norm(RealVector(GetRGB(AverageColor(DissolveToColorRegularly(CreatePixmap(100, 100, "black"), ((x, y) ↦ rgb(x/99, 0, 0)), 4)))) − ❨1/32, 0, 0❩) < 0.002', True);
  Test({LINENUM}62830, 'norm(RealVector(GetRGB(AverageColor(DissolveToColorRegularly(CreatePixmap(100, 100, "black"), ((x, y) ↦ rgb(x/99, 0, 0)), −2)))) − ❨3/8, 0, 0❩) < 0.002', True);

  Test({LINENUM}62832, 'p ≔ 0.0; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) = 0.000', True);
  Test({LINENUM}62833, 'p ≔ 0.1; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) < 0.001', True);
  Test({LINENUM}62834, 'p ≔ 0.2; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) < 0.001', True);
  Test({LINENUM}62835, 'p ≔ 0.3; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) < 0.001', True);
  Test({LINENUM}62836, 'p ≔ 0.4; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) < 0.001', True);
  Test({LINENUM}62837, 'p ≔ 0.5; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) < 0.001', True);
  Test({LINENUM}62838, 'p ≔ 0.6; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) < 0.001', True);
  Test({LINENUM}62839, 'p ≔ 0.7; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) < 0.001', True);
  Test({LINENUM}62840, 'p ≔ 0.8; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) < 0.001', True);
  Test({LINENUM}62841, 'p ≔ 0.9; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) < 0.001', True);
  Test({LINENUM}62842, 'p ≔ 1.0; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), "red", p)))) − ❨p, 0, 0❩) = 0.000', True);

  Test({LINENUM}62844, 'p ≔ 0.0; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) = 0.000', True);
  Test({LINENUM}62845, 'p ≔ 0.1; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) < 0.001', True);
  Test({LINENUM}62846, 'p ≔ 0.2; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) < 0.001', True);
  Test({LINENUM}62847, 'p ≔ 0.3; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) < 0.001', True);
  Test({LINENUM}62848, 'p ≔ 0.4; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) < 0.001', True);
  Test({LINENUM}62849, 'p ≔ 0.5; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) < 0.001', True);
  Test({LINENUM}62850, 'p ≔ 0.6; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) < 0.001', True);
  Test({LINENUM}62851, 'p ≔ 0.7; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) < 0.001', True);
  Test({LINENUM}62852, 'p ≔ 0.8; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) < 0.001', True);
  Test({LINENUM}62853, 'p ≔ 0.9; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) < 0.001', True);
  Test({LINENUM}62854, 'p ≔ 1.0; norm(RealVector(GetRGB(AverageColor(DissolveToColorStochastically(CreatePixmap(1000, 1000, "black"), ((x, y) ↦ rgb(x/999, 0, 0)), p)))) − ❨p/2, 0, 0❩) = 0.000', True);

  Test({LINENUM}62856, 'ColorCount(binarize(DebugObject("Sally")))', 2);
  Test({LINENUM}62857, 'ColorCount(binarize(DebugObject("rabbit")))', 2);
  Test({LINENUM}62858, 'ColorCount(binarize(DebugObject("harvestman")))', 2);
  Test({LINENUM}62859, 'a ≔ FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"); binarize(a) = a', True);

  Test({LINENUM}62861, 'transformation(a, x, ❨x[1] + 4⋅sin(x[2]/2), x[2] + 4⋅sin(x[1]/2)❩);', null);
  Test({LINENUM}62862, 'transformation(a, x, ❨x[1] + 4⋅sin(x[2]/2), x[2] + 4⋅sin(x[1]/0)❩);', failure, 'Division by zero');
  Test({LINENUM}62863, 'transformation(a, x, true);', failure, 'Pixmap transformation function must return a two-dimensional real vector.');
  Test({LINENUM}62864, 'transformation(a, x, ❨x[1] + 4⋅sin(x[2]/2), x[2] + 4⋅sin(x[1]/2), 5❩);', failure, 'Pixmap transformation function must return a two-dimensional real vector.');
  Test({LINENUM}62865, 'transformation(a, x, ❨x[1] + 4⋅sin(x[2]/2)❩);', failure, 'Pixmap transformation function must return a two-dimensional real vector.');

  for _s in PredefinedKernelNames do
  begin
    Test({LINENUM}62869, 'type(ConvolutionKernel("' + _s + '"))', 'real matrix');
    Test({LINENUM}62870, 'convolve(DebugObject("Sally"), ConvolutionKernel("' + _s + '"));', null);
  end;

  Test({LINENUM}62873, 'ConvolutionKernel("3×3 Nargle Naughtiness")', failure, 'Unknown convolution kernel "3×3 Nargle Naughtiness".');

  Test({LINENUM}62875, 'a ≔ DebugObject("Sally"); convolve(a, ZeroMatrix(5)) = CreatePixmap(width(a), height(a), "black")', True);
  Test({LINENUM}62876, 'a ≔ DebugObject("Sally"); convolve(a, ZeroMatrix(4))', failure, 'Convolution kernel must be square with an odd number of rows.');
  Test({LINENUM}62877, 'a ≔ DebugObject("Sally"); convolve(a, ZeroMatrix(3, 5))', failure, 'Convolution kernel must be square with an odd number of rows.');


  //
  // Image generation
  //

  Test({LINENUM}62884, 'a ≔ ColorGradient(1000, 1000, "white", "black");', null);
  Test({LINENUM}62885, 'size(a)', ASOSize(1000, 1000));
  Test({LINENUM}62886, 'a[0, 0]', ASOColor(clWhite));
  Test({LINENUM}62887, 'a[999, 0]', ASOColor(clBlack));
  Test({LINENUM}62888, 'AverageColor(a)', ASO(TRGB.Create(0.5, 0.5, 0.5)));

  Test({LINENUM}62890, 'a ≔ voronoi(1000, 1001, ''(❨200, 300❩, ❨0, 400❩, ❨700, 600❩, ❨600, 300❩), ''("red", "green", "blue", "yellow"));', null);
  Test({LINENUM}62891, 'size(a)', ASOSize(1001, 1000));
  Test({LINENUM}62892, 'ColorCount(a)', 4);

  Test({LINENUM}62894, 'a ≔ voronoi(1000, 1001, ''(❨200, 300❩, ❨0, 400❩, ❨700, 600❩), ''("red", "green", "blue"));', null);
  Test({LINENUM}62895, 'size(a)', ASOSize(1001, 1000));
  Test({LINENUM}62896, 'ColorCount(a)', 3);

  Test({LINENUM}62898, 'a ≔ voronoi(1000, 1001, ''(❨200, 300❩, ❨0, 400❩), ''("red", "green"));', null);
  Test({LINENUM}62899, 'size(a)', ASOSize(1001, 1000));
  Test({LINENUM}62900, 'ColorCount(a)', 2);

  Test({LINENUM}62902, 'a ≔ voronoi(1000, 1001, ''(❨200, 300❩), ''("red"));', null);
  Test({LINENUM}62903, 'size(a)', ASOSize(1001, 1000));
  Test({LINENUM}62904, 'ColorCount(a)', 1);

  Test({LINENUM}62906, 'a ≔ voronoi(1000, 1001, ''(), ''());', null);
  Test({LINENUM}62907, 'size(a)', ASOSize(1001, 1000));
  Test({LINENUM}62908, 'a = CreatePixmap(1000, 1001)', True);

  Test({LINENUM}62910, 'a ≔ voronoi(1, 1, ''(❨200, 300❩, ❨0, 400❩, ❨700, 600❩, ❨600, 300❩), ''("red", "green", "blue", "yellow"));', null);
  Test({LINENUM}62911, 'size(a)', ASOSize(1, 1));
  Test({LINENUM}62912, 'a = CreatePixmap(1, 1, "red")', True);


  //
  // Linear transformations
  //

  Test({LINENUM}62919, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/1000)', failure, 'Cannot create empty pixmap.');
  Test({LINENUM}62920, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/100) = FillRect(CreatePixmap(2, 1, "white"), 0, 0, 1, 1, "black")', True);
  Test({LINENUM}62921, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/10) = FillRect(CreatePixmap(20, 10, "white"), 0, 0, 10, 10, "black")', True);
  Test({LINENUM}62922, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/4) = FillRect(CreatePixmap(50, 25, "white"), 0, 0, 25, 25, "black")', True);
  Test({LINENUM}62923, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/2) = FillRect(CreatePixmap(100, 50, "white"), 0, 0, 50, 50, "black")', True);
  Test({LINENUM}62924, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1) = FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black")', True);
  Test({LINENUM}62925, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 2) = FillRect(CreatePixmap(400, 200, "white"), 0, 0, 200, 200, "black")', True);
  Test({LINENUM}62926, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 3) = FillRect(CreatePixmap(600, 300, "white"), 0, 0, 300, 300, "black")', True);
  Test({LINENUM}62927, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 4) = FillRect(CreatePixmap(800, 400, "white"), 0, 0, 400, 400, "black")', True);
  Test({LINENUM}62928, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 10) = FillRect(CreatePixmap(2000, 1000, "white"), 0, 0, 1000, 1000, "black")', True);
  Test({LINENUM}62929, 'scale(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 50) = FillRect(CreatePixmap(10000, 5000, "white"), 0, 0, 5000, 5000, "black")', True);

  Test({LINENUM}62931, 'ColorCount(DebugObject("Sally")) = ColorCount(scale(DebugObject("Sally"), 2))', True);
  Test({LINENUM}62932, 'ColorCount(DebugObject("Sally")) = ColorCount(scale(DebugObject("Sally"), 10))', True);

  Test({LINENUM}62934, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/1000)', failure, 'Cannot create empty pixmap.');
  Test({LINENUM}62935, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/100) = FillRect(CreatePixmap(2, 1, "white"), 0, 0, 1, 1, "black")', True);
  Test({LINENUM}62936, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/10) = FillRect(CreatePixmap(20, 10, "white"), 0, 0, 10, 10, "black")', True);
  Test({LINENUM}62937, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/4) = FillRect(CreatePixmap(50, 25, "white"), 0, 0, 25, 25, "black")', True);
  Test({LINENUM}62938, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/2) = FillRect(CreatePixmap(100, 50, "white"), 0, 0, 50, 50, "black")', True);
  Test({LINENUM}62939, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1) = FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black")', True);
  Test({LINENUM}62940, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 2) = FillRect(CreatePixmap(400, 200, "white"), 0, 0, 200, 200, "black")', True);
  Test({LINENUM}62941, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 3) = FillRect(CreatePixmap(600, 300, "white"), 0, 0, 300, 300, "black")', True);
  Test({LINENUM}62942, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 4) = FillRect(CreatePixmap(800, 400, "white"), 0, 0, 400, 400, "black")', True);
  Test({LINENUM}62943, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 10) = FillRect(CreatePixmap(2000, 1000, "white"), 0, 0, 1000, 1000, "black")', True);
  Test({LINENUM}62944, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 50) = FillRect(CreatePixmap(10000, 5000, "white"), 0, 0, 5000, 5000, "black")', True);

  Test({LINENUM}62946, 'ColorCount(DebugObject("Sally")) = ColorCount(stretch(DebugObject("Sally"), 2))', True);
  Test({LINENUM}62947, 'ColorCount(DebugObject("Sally")) = ColorCount(stretch(DebugObject("Sally"), 10))', True);

  Test({LINENUM}62949, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1, 2) = FillRect(CreatePixmap(200, 200, "white"), 0, 0, 100, 200, "black")', True);
  Test({LINENUM}62950, 'stretch(FillRect(CreatePixmap(200, 100, "white"), 0, 0, 100, 100, "black"), 1/2, 1) = FillRect(CreatePixmap(100, 100, "white"), 0, 0, 50, 100, "black")', True);

  Test({LINENUM}62952, 'ColorCount(DebugObject("Sally")) = ColorCount(stretch(DebugObject("Sally"), 1, 2))', True);
  Test({LINENUM}62953, 'ColorCount(DebugObject("Sally")) = ColorCount(stretch(DebugObject("Sally"), 5, 10))', True);

  Test({LINENUM}62955, 'a ≔ DebugObject("Sally");', null);
  Test({LINENUM}62956, 'rotate(a, 0) = a', True);
  Test({LINENUM}62957, 'rotate(a, 2⋅π) = a', True);
  Test({LINENUM}62958, 'rotate(a, −2⋅π) = a', True);
  Test({LINENUM}62959, 'rotate(a, 4⋅π) = a', True);
  Test({LINENUM}62960, 'rotate(a, −4⋅π) = a', True);
  Test({LINENUM}62961, 'rotate(a, π/2) = rot90p(a)', True);
  Test({LINENUM}62962, 'rotate(a, π) = rot180(a)', True);
  Test({LINENUM}62963, 'rotate(a, −π/2) = rot90n(a)', True);

  Test({LINENUM}62965, 'rotate(a, 0, 1)', failure, 'Too many arguments.');

  Test({LINENUM}62967, 'sq ≔ CreatePixmap(1000, 1000, "black");', null);
  Test({LINENUM}62968, 'size(rotate(sq, π/4))', ASOSize(1414, 1414));
  Test({LINENUM}62969, 'norm(RealVector(GetRGB(AverageColor(rotate(sq, π/4)))) − ❨0.5, 0.5, 0.5❩) < 0.001', True);
  Test({LINENUM}62970, 'size(AutoCrop(rotate(rotate(sq, π/4), π/4)))', ASOSize(1000, 1000));
  Test({LINENUM}62971, 'norm(RealVector(GetRGB(AverageColor(AutoCrop(rotate(rotate(sq, π/4), π/4)))))) < 0.001', True);

  Test({LINENUM}62973, 'norm(RealVector(GetRGB(AverageColor(rotate(CreatePixmap(1000, 1000, "black"), π/4)))) − ❨0.5, 0.5, 0.5❩) < 0.001', True);
  Test({LINENUM}62974, 'norm(RealVector(GetRGB(AverageColor(rotate(CreatePixmap(1000, 1000, "black", "red"), π/4)))) − ❨0.5, 0, 0❩) < 0.001', True);

//  Nice-to-have properties:
//  Test({LINENUM}62977, 'a ≔ rotate(CreatePixmap(100, 100, "black"), π/4); b ≔ FloodFill(DrawPolygon(CreatePixmap(141, 141, "white"), ''(❨140/2, 0❩, ❨0, 140/2❩, ❨140/2, 140❩, ❨140, 140/2❩), "black"), 70, 70, "black");', null);
//  Test({LINENUM}62978, 'a = b', True);
//  Test({LINENUM}62979, 'sq ≔ CreatePixmap(100, 100, "black"); AutoCrop(rotate(rotate(sq, π/4), π/4)) = sq', True);

  Test({LINENUM}62981, 'shear(a, 0) = a', True);
  Test({LINENUM}62982, 'shear(sq, 0) = sq', True);
  Test({LINENUM}62983, 'b ≔ shear(sq, π/4);', null);
  Test({LINENUM}62984, 'size(b)', ASOSize(1000, 2000));
  Test({LINENUM}62985, 'AverageColor(b)', ASO(TRGB.Create(0.5, 0.5, 0.5)));
  Test({LINENUM}62986, 'AutoCrop(shear(b, −π/4)) = sq', True);

  Test({LINENUM}62988, 'norm(RealVector(GetRGB(AverageColor(shear(CreatePixmap(1000, 1000, "black"), π/4)))) − ❨0.5, 0.5, 0.5❩) < 0.001', True);
  Test({LINENUM}62989, 'norm(RealVector(GetRGB(AverageColor(shear(CreatePixmap(1000, 1000, "black", "red"), π/4)))) − ❨0.5, 0, 0❩) < 0.001', True);

  Test({LINENUM}62991, 'shear(sq, π/2)', failure, 'Skew angle must be between −π/2 and π/2.');

  Test({LINENUM}62993, 'LinearTransformation(a, IdentityMatrix(2)) = a', True);
  Test({LINENUM}62994, 'LinearTransformation(a, IdentityMatrix(3))', failure, 'Transformation matrix must be 2×2.');
  Test({LINENUM}62995, 'LinearTransformation(a, ZeroMatrix(2))', failure, 'Transformation matrix must be invertible.');

  Test({LINENUM}62997, 'norm(RealVector(GetRGB(AverageColor(LinearTransformation(a, ❨❨−1, 0❩, ❨0, 1❩❩)))) − RealVector(GetRGB(AverageColor(a)))) < 0.01', True);
  Test({LINENUM}62998, 'norm(RealVector(GetRGB(AverageColor(LinearTransformation(a, ❨❨1, 0❩, ❨0, −1❩❩)))) − RealVector(GetRGB(AverageColor(a)))) < 0.01', True);
  Test({LINENUM}62999, 'norm(RealVector(GetRGB(AverageColor(LinearTransformation(a, ❨❨−1, 0❩, ❨0, −1❩❩)))) − RealVector(GetRGB(AverageColor(a)))) < 0.01', True);

//  Nice-to-have properties:
//  Test({LINENUM}63002, 'LinearTransformation(a, ❨❨−1, 0❩, ❨0, 1❩❩) = flip(a, "h")', True);
//  Test({LINENUM}63003, 'LinearTransformation(a, ❨❨1, 0❩, ❨0, −1❩❩) = flip(a, "v")', True);
//  Test({LINENUM}63004, 'LinearTransformation(a, ❨❨−1, 0❩, ❨0, −1❩❩) = rot180(a)', True);

  //
  // Scanline effects
  //

  Test({LINENUM}63010, 'a ≔ DebugObject("Sally");', null);

  Test({LINENUM}63012, 'ScanlineRotation(a, 0) = a', True);
  Test({LINENUM}63013, 'ScanlineRotation(a, width(a)) = a', True);
  Test({LINENUM}63014, 'ScanlineRotation(a, 2⋅width(a)) = a', True);
  Test({LINENUM}63015, 'ScanlineRotation(a, 3⋅width(a)) = a', True);
  Test({LINENUM}63016, 'ScanlineRotation(a, 1000⋅width(a)) = a', True);
  Test({LINENUM}63017, 'ScanlineRotation(a, −width(a)) = a', True);
  Test({LINENUM}63018, 'ScanlineRotation(a, −2⋅width(a)) = a', True);
  Test({LINENUM}63019, 'ScanlineRotation(a, −3⋅width(a)) = a', True);
  Test({LINENUM}63020, 'ScanlineRotation(a, −1000⋅width(a)) = a', True);

  Test({LINENUM}63022, 'ScanlineRotation(a, 100) ≠ a', True);
  Test({LINENUM}63023, 'AverageColor(ScanlineRotation(a, 100)) = AverageColor(a)', True);
  Test({LINENUM}63024, 'ScanlineRotation(ScanlineRotation(a, 1), −1) = a', True);
  Test({LINENUM}63025, 'ScanlineRotation(ScanlineRotation(a, 394), −394) = a', True);
  Test({LINENUM}63026, 'ScanlineRotation(ScanlineRotation(a, 394000), −394000) = a', True);

  Test({LINENUM}63028, 'ScanlineRotation(a, 100) = ScanlineRotation(a, 100, "h")', True);

  Test({LINENUM}63030, 'ScanlineRotation(a, 0, "v") = a', True);
  Test({LINENUM}63031, 'ScanlineRotation(a, height(a), "v") = a', True);
  Test({LINENUM}63032, 'ScanlineRotation(a, 2⋅height(a), "v") = a', True);
  Test({LINENUM}63033, 'ScanlineRotation(a, 3⋅height(a), "v") = a', True);
  Test({LINENUM}63034, 'ScanlineRotation(a, 1000⋅height(a), "v") = a', True);
  Test({LINENUM}63035, 'ScanlineRotation(a, −height(a), "v") = a', True);
  Test({LINENUM}63036, 'ScanlineRotation(a, −2⋅height(a), "v") = a', True);
  Test({LINENUM}63037, 'ScanlineRotation(a, −3⋅height(a), "v") = a', True);
  Test({LINENUM}63038, 'ScanlineRotation(a, −1000⋅height(a), "v") = a', True);

  Test({LINENUM}63040, 'ScanlineRotation(a, 100, "v") ≠ a', True);
  Test({LINENUM}63041, 'AverageColor(ScanlineRotation(a, 100, "v")) = AverageColor(a)', True);
  Test({LINENUM}63042, 'ScanlineRotation(ScanlineRotation(a, 1, "v"), −1, "v") = a', True);
  Test({LINENUM}63043, 'ScanlineRotation(ScanlineRotation(a, 394, "v"), −394, "v") = a', True);
  Test({LINENUM}63044, 'ScanlineRotation(ScanlineRotation(a, 394000, "v"), −394000, "v") = a', True);

  Test({LINENUM}63046, 'ScanlineRotation(a, 100, "s")', failure, 'Character "s" not allowed as argument. Expected one of "hv".');
  Test({LINENUM}63047, 'ScanlineRotation(a, 100, "v", 0)', failure, 'Too many arguments.');

  Test({LINENUM}63049, 'RandomScanlineRotation(a, 0) = a', True);
  Test({LINENUM}63050, 'RandomScanlineRotation(a, 0, "h") = a', True);
  Test({LINENUM}63051, 'RandomScanlineRotation(a, 0, "v") = a', True);

  Test({LINENUM}63053, 'AverageColor(RandomScanlineRotation(a)) = AverageColor(a)', True);
  Test({LINENUM}63054, 'AverageColor(RandomScanlineRotation(a, 394)) = AverageColor(a)', True);
  Test({LINENUM}63055, 'AverageColor(RandomScanlineRotation(a, 394, "h")) = AverageColor(a)', True);
  Test({LINENUM}63056, 'AverageColor(RandomScanlineRotation(a, 394, "v")) = AverageColor(a)', True);
  Test({LINENUM}63057, 'RandomScanlineRotation(a, -394)', failure, 'A non-negative integer was expected as argument 2, but "-394" was given.');

  Test({LINENUM}63059, 'RandomScanlineRotation(a, 100, "s")', failure, 'Character "s" not allowed as argument. Expected one of "hv".');
  Test({LINENUM}63060, 'RandomScanlineRotation(a, 100, "v", 0)', failure, 'Too many arguments.');

  Test({LINENUM}63062, 'CustomScanlineRotation(a, y, 0) = a', True);
  Test({LINENUM}63063, 'CustomScanlineRotation(a, y, 10) = ScanlineRotation(a, 10)', True);

  Test({LINENUM}63065, 'AverageColor(CustomScanlineRotation(a, y, round(−√(height(a)^2 − y^2)))) = AverageColor(a)', True);
  Test({LINENUM}63066, 'AverageColor(CustomScanlineRotation(a, y, round(−√(height(a)^2 − y^2/0)))) = AverageColor(a)', failure, 'Division by zero');
  Test({LINENUM}63067, 'AverageColor(CustomScanlineRotation(a, y, −√(height(a)^2 − y^2))) = AverageColor(a)', failure, 'Expression must evaluate to an integer.');

  Test({LINENUM}63069, 'SkewRotation(a, 0) = a', True);
  Test({LINENUM}63070, 'SkewRotation(a, 100) = CustomScanlineRotation(a, y, y)', True);
  Test({LINENUM}63071, 'SkewRotation(a, 200) = CustomScanlineRotation(a, y, 2⋅y)', True);
  Test({LINENUM}63072, 'SkewRotation(a, 100) = SkewRotation(a, 100, 100)', True);
  Test({LINENUM}63073, 'SkewRotation(a, 100, 100) = SkewRotation(a, 394, 394)', True);
  Test({LINENUM}63074, 'SkewRotation(a, 100, 100) = SkewRotation(a, 713, 713, "h")', True);
  Test({LINENUM}63075, 'SkewRotation(a, 22, 50) = CustomScanlineRotation(a, y, ⌊22⋅y/50⌋)', True);

  Test({LINENUM}63077, 'SkewRotation(a, 0, 1, "v") = a', True);
  Test({LINENUM}63078, 'AverageColor(SkewRotation(a, 1, 1, "v")) = AverageColor(a)', True);

  Test({LINENUM}63080, 'SkewRotation(a, 0, 22) = a', True);
  Test({LINENUM}63081, 'SkewRotation(a, 22, 0)', failure, 'Division by zero');


  //
  // Colour-related functions
  //

  Test({LINENUM}63088, 'map ≔ (c1, c2, c3) ↦ FillRect(FillRect(CreatePixmap(100, 100, c1), 25, 0, 25, 100, c2), 50, 0, 50, 500, c3);', null);
  Test({LINENUM}63089, 'a ≔ map("white", "black", "red");', null);

  Test({LINENUM}63091, 'InvertColor(a) = map("black", "white", "aqua")', True);
  Test({LINENUM}63092, 'InvertLightness(a) = map("black", "white", "red")', True);
  Test({LINENUM}63093, 'InvertValue(a) = map("black", "white", "black")', True);

  Test({LINENUM}63095, 'InvertColor(InvertColor(DebugObject("Sally"))) = DebugObject("Sally")', True);
  Test({LINENUM}63096, 'InvertLightness(InvertLightness(DebugObject("Sally"))) = DebugObject("Sally")', True);
  Test({LINENUM}63097, 'InvertValue(InvertValue(DebugObject("Sally"))) = DebugObject("Sally")', False); // because some parts have full value

  Test({LINENUM}63099, 'FixHue(a)', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}63100, 'FixHue(a, 0) = a', True);
  Test({LINENUM}63101, 'FixHue(a, 60) = map("white", "black", "yellow")', True);
  Test({LINENUM}63102, 'FixHue(a, 120) = map("white", "black", "lime")', True);
  Test({LINENUM}63103, 'FixHue(a, 180) = map("white", "black", "aqua")', True);
  Test({LINENUM}63104, 'FixHue(a, 240) = map("white", "black", "blue")', True);
  Test({LINENUM}63105, 'FixHue(a, 300) = map("white", "black", "fuchsia")', True);
  Test({LINENUM}63106, 'FixHue(a, 360) = a', True);

  Test({LINENUM}63108, 'FixHue(a, 360 + 60) = map("white", "black", "yellow")', True);
  Test({LINENUM}63109, 'FixHue(a, 360 + 120) = map("white", "black", "lime")', True);
  Test({LINENUM}63110, 'FixHue(a, 360 + 180) = map("white", "black", "aqua")', True);
  Test({LINENUM}63111, 'FixHue(a, 360 + 240) = map("white", "black", "blue")', True);
  Test({LINENUM}63112, 'FixHue(a, 360 + 300) = map("white", "black", "fuchsia")', True);
  Test({LINENUM}63113, 'FixHue(a, 360 + 360) = a', True);

  Test({LINENUM}63115, '∀(FixHue(DebugObject("Sally"), 120), c ↦ (hsv ≔ GetHSV(c); hsv.hue = 120 ∨ hsv.saturation = 0 ∨ hsv.value = 0))', True);

  Test({LINENUM}63117, 'ToMonochromatic(a)', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}63118, 'ToMonochromatic(a, 0) = map("red", "black", "red")', True);
  Test({LINENUM}63119, 'ToMonochromatic(a, 60) = map("yellow", "black", "yellow")', True);
  Test({LINENUM}63120, 'ToMonochromatic(a, 120) = map("lime", "black", "lime")', True);
  Test({LINENUM}63121, 'ToMonochromatic(a, 180) = map("aqua", "black", "aqua")', True);
  Test({LINENUM}63122, 'ToMonochromatic(a, 240) = map("blue", "black", "blue")', True);
  Test({LINENUM}63123, 'ToMonochromatic(a, 300) = map("fuchsia", "black", "fuchsia")', True);
  Test({LINENUM}63124, 'ToMonochromatic(a, 360) = map("red", "black", "red")', True);

  Test({LINENUM}63126, 'ToMonochromatic(a, 360 + 60) = map("yellow", "black", "yellow")', True);
  Test({LINENUM}63127, 'ToMonochromatic(a, 360 + 120) = map("lime", "black", "lime")', True);
  Test({LINENUM}63128, 'ToMonochromatic(a, 360 + 180) = map("aqua", "black", "aqua")', True);
  Test({LINENUM}63129, 'ToMonochromatic(a, 360 + 240) = map("blue", "black", "blue")', True);
  Test({LINENUM}63130, 'ToMonochromatic(a, 360 + 300) = map("fuchsia", "black", "fuchsia")', True);
  Test({LINENUM}63131, 'ToMonochromatic(a, 360 + 360) = map("red", "black", "red")', True);

  Test({LINENUM}63133, '∀(ToMonochromatic(DebugObject("Sally"), 120), c ↦ (hsv ≔ GetHSV(c); hsv.hue = 120 ∧ hsv.saturation = 1 ∨ hsv.value = 0))', True);

  Test({LINENUM}63135, 'ShiftHue(a)', failure, 'Too few arguments. A required argument of type real number is missing.');
  Test({LINENUM}63136, 'ShiftHue(a, 0) = a', True);
  Test({LINENUM}63137, 'ShiftHue(a, 60) = map("white", "black", "yellow")', True);
  Test({LINENUM}63138, 'ShiftHue(a, 120) = map("white", "black", "lime")', True);
  Test({LINENUM}63139, 'ShiftHue(a, 180) = map("white", "black", "aqua")', True);
  Test({LINENUM}63140, 'ShiftHue(a, 240) = map("white", "black", "blue")', True);
  Test({LINENUM}63141, 'ShiftHue(a, 300) = map("white", "black", "fuchsia")', True);
  Test({LINENUM}63142, 'ShiftHue(a, 360) = a', True);

  Test({LINENUM}63144, 'ShiftHue(a, 360 + 60) = map("white", "black", "yellow")', True);
  Test({LINENUM}63145, 'ShiftHue(a, 360 + 120) = map("white", "black", "lime")', True);
  Test({LINENUM}63146, 'ShiftHue(a, 360 + 180) = map("white", "black", "aqua")', True);
  Test({LINENUM}63147, 'ShiftHue(a, 360 + 240) = map("white", "black", "blue")', True);
  Test({LINENUM}63148, 'ShiftHue(a, 360 + 300) = map("white", "black", "fuchsia")', True);
  Test({LINENUM}63149, 'ShiftHue(a, 360 + 360) = a', True);

  Test({LINENUM}63151, 'a ≔ map("white", "black", "yellow");', null);

  Test({LINENUM}63153, 'ShiftHue(a, 0) = a', True);
  Test({LINENUM}63154, 'ShiftHue(a, 60) = map("white", "black", "lime")', True);
  Test({LINENUM}63155, 'ShiftHue(a, 120) = map("white", "black", "aqua")', True);
  Test({LINENUM}63156, 'ShiftHue(a, 180) = map("white", "black", "blue")', True);
  Test({LINENUM}63157, 'ShiftHue(a, 240) = map("white", "black", "fuchsia")', True);
  Test({LINENUM}63158, 'ShiftHue(a, 300) = map("white", "black", "red")', True);
  Test({LINENUM}63159, 'ShiftHue(a, 360) = a', True);

  Test({LINENUM}63161, 'ShiftHue(a, 360 + 60) = map("white", "black", "lime")', True);
  Test({LINENUM}63162, 'ShiftHue(a, 360 + 120) = map("white", "black", "aqua")', True);
  Test({LINENUM}63163, 'ShiftHue(a, 360 + 180) = map("white", "black", "blue")', True);
  Test({LINENUM}63164, 'ShiftHue(a, 360 + 240) = map("white", "black", "fuchsia")', True);
  Test({LINENUM}63165, 'ShiftHue(a, 360 + 300) = map("white", "black", "red")', True);
  Test({LINENUM}63166, 'ShiftHue(a, 360 + 360) = a', True);

  Test({LINENUM}63168, 'a ≔ map("white", "black", "red");', null);

  Test({LINENUM}63170, 'whiten(a) = map("white", "#7F7F7F", "#FF7F7F")', True);
  Test({LINENUM}63171, 'darken(a) = map("#7F7F7F", "#000000", "#7F0000")', True);

  Test({LINENUM}63173, 'FadeToColor(a)', failure, 'Too few arguments. A required argument of type color is missing.');

  Test({LINENUM}63175, 'FadeToColor(a, "black") = map("grey", "black", "maroon")', True);
  Test({LINENUM}63176, 'FadeToColor(a, "white") = map("white", "grey", "#FF8080")', True);
  Test({LINENUM}63177, 'FadeToColor(a, "red") = map("#FF8080", "maroon", "red")', True);

  Test({LINENUM}63179, 'AdjustRGB(a, ❨❨0, 0, 0, 0, 0❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 0, 0, 0❩❩) = map("black", "black", "black")', True);
  Test({LINENUM}63180, 'AdjustRGB(a, ❨❨1, 0, 0, 0, 0❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 0, 0, 0❩❩) = map("red", "red", "red")', True);
  Test({LINENUM}63181, 'AdjustRGB(a, ❨❨0, 0, 0, 0, 0❩, ❨1, 0, 0, 0, 0❩, ❨0, 0, 0, 0, 0❩❩) = map("lime", "lime", "lime")', True);
  Test({LINENUM}63182, 'AdjustRGB(a, ❨❨0, 0, 0, 0, 0❩, ❨0, 0, 0, 0, 0❩, ❨1, 0, 0, 0, 0❩❩) = map("blue", "blue", "blue")', True);
  Test({LINENUM}63183, 'AdjustRGB(a, ❨❨0, 1, 0, 0, 0❩, ❨0, 0, 1, 0, 0❩, ❨0, 0, 0, 1, 0❩❩) = a', True);
  Test({LINENUM}63184, 'AdjustRGB(a, ❨❨0, 0, 0, 1, 0❩, ❨0, 0, 1, 0, 0❩, ❨0, 1, 0, 0, 0❩❩) = map("white", "black", "blue")', True);
  Test({LINENUM}63185, 'AdjustRGB(a, ❨❨0, 1, 0, 0, 0❩, ❨0, 0, 1, 0, 0❩, ❨0, 1, 0, 1, 0❩❩) = map("white", "black", "fuchsia")', True);

  Test({LINENUM}63187, 'AdjustHSV(DebugObject("Sally"), ❨❨0, 0, 0, 0, 0❩, ❨0, 0, 1, 0, 0❩, ❨0, 0, 0, 1, 0❩❩) = FixHue(DebugObject("Sally"), 0)', True);
  Test({LINENUM}63188, 'AdjustHSV(DebugObject("Sally"), ❨❨60, 0, 0, 0, 0❩, ❨0, 0, 1, 0, 0❩, ❨0, 0, 0, 1, 0❩❩) = FixHue(DebugObject("Sally"), 60)', True);
  Test({LINENUM}63189, 'AdjustHSV(DebugObject("Sally"), ❨❨0, 0, 0, 0, 0❩, ❨1, 0, 0, 0, 0❩, ❨0, 0, 0, 1, 0❩❩) = ToMonochromatic(DebugObject("Sally"), 0)', True);
  Test({LINENUM}63190, 'AdjustHSV(DebugObject("Sally"), ❨❨120, 0, 0, 0, 0❩, ❨1, 0, 0, 0, 0❩, ❨0, 0, 0, 1, 0❩❩) = ToMonochromatic(DebugObject("Sally"), 120)', True);
  Test({LINENUM}63191, 'AdjustHSV(DebugObject("Sally"), ❨❨0, 1, 0, 0, 0❩, ❨0, 0, 0, 0, 0❩, ❨0, 0, 0, 1, 0❩❩) = ToGreyscale(DebugObject("Sally"))', True);
  Test({LINENUM}63192, 'AdjustHSV(DebugObject("Sally"), ❨❨120, 1, 0, 0, 1❩, ❨0, 0, 1, 0, 0❩, ❨0, 0, 0, 1, 0❩❩) = ShiftHue(DebugObject("Sally"), 120)', True);
  Test({LINENUM}63193, 'AdjustHSV(DebugObject("Sally"), ❨❨360, 1, 0, 0, 1❩, ❨0, 0, 1, 0, 0❩, ❨0, 0, 0, 1, 0❩❩) = DebugObject("Sally")', True);
  Test({LINENUM}63194, 'AdjustHSV(DebugObject("Sally"), ❨❨360, 1, 0, 0, 0❩, ❨0, 0, 1, 0, 0❩, ❨0, 0, 0, 1, 0❩❩) = FixHue(DebugObject("Sally"), 0)', True);

  Test({LINENUM}63196, 'map ≔ (a, b, c, d, e, f) ↦ FillRect(FillRect(FillRect(FillRect(FillRect(CreatePixmap(600, 100, a), 100, 0, 100, 100, b), 200, 0, 100, 100, c), 300, 0, 100, 100, d), 400, 0, 100, 100, e), 500, 0, 100, 100, f);', null);
  Test({LINENUM}63197, 'g ≔ v ↦ rgb(v, v, v);', null);
  Test({LINENUM}63198, 'baseimg ≔ map("red", "green", "blue", "yellow", "white", "black");', null);

  Test({LINENUM}63200, 'ExtractChannel(baseimg, "rgb", "r") = map("white", "black", "black", "white", "white", "black")', True);
  Test({LINENUM}63201, 'ExtractChannel(baseimg, "rgb", "g") = map("black", "#808080", "black", "white", "white", "black")', True);
  Test({LINENUM}63202, 'ExtractChannel(baseimg, "rgb", "b") = map("black", "black", "white", "black", "white", "black")', True);
  Test({LINENUM}63203, 'ExtractChannel(baseimg, "rgb", "y")', failure, 'Character "y" not allowed as argument. Expected one of "rgb".');

  Test({LINENUM}63205, 'ExtractChannel(baseimg, "hsv", "h") = map(g(0), g(120/360), g(240/360), g(60/360), g(0), g(0))', True);
  Test({LINENUM}63206, 'ExtractChannel(baseimg, "hsv", "s") = map(g(1), g(1), g(1), g(1), g(0), g(0))', True);
  Test({LINENUM}63207, 'ExtractChannel(baseimg, "hsv", "v") = map(g(1), g(0.5), g(1), g(1), g(1), g(0))', True);
  Test({LINENUM}63208, 'ExtractChannel(baseimg, "hsv", "l")', failure, 'Character "l" not allowed as argument. Expected one of "hsv".');

  Test({LINENUM}63210, 'ExtractChannel(baseimg, "hsl", "h") = map(g(0), g(120/360), g(240/360), g(60/360), g(0), g(0))', True);
  Test({LINENUM}63211, 'ExtractChannel(baseimg, "hsl", "s") = map(g(1), g(1), g(1), g(1), g(0), g(0))', True);
  Test({LINENUM}63212, 'ExtractChannel(baseimg, "hsl", "l") = map(g(0.5), g(0.25), g(0.5), g(0.5), g(1), g(0))', True);
  Test({LINENUM}63213, 'ExtractChannel(baseimg, "hsl", "v")', failure, 'Character "v" not allowed as argument. Expected one of "hsl".');

  Test({LINENUM}63215, 'ExtractChannel(baseimg, "hrg", "h")', failure, 'String "hrg" not allowed as argument. Expected one of "rgb", "hsv", "hsl".');

  Test({LINENUM}63217, 'a ≔ DebugObject("Sally"); r ≔ ExtractChannel(a, "rgb", "r"); g ≔ ExtractChannel(a, "rgb", "g"); b ≔ ExtractChannel(a, "rgb", "b");', null);
  Test({LINENUM}63218, 'CombineChannels("rgb", r, g, b) = a', True);

  Test({LINENUM}63220, 'CombineChannels("rgb", r, g, DebugObject("harvestman"))', failure, 'Pixmaps are not of the same size.');
  Test({LINENUM}63221, 'CombineChannels("rgb", DebugObject("harvestman"), g, DebugObject("harvestman"))', failure, 'Pixmaps are not of the same size.');

  Test({LINENUM}63223, 'CombineChannels("rgb", b, g, r) = AdjustRGB(a, ❨❨0, 0, 0, 1, 0❩, ❨0, 0, 1, 0, 0❩, ❨0, 1, 0, 0, 0❩❩)', True);

  Test({LINENUM}63225, 'a ≔ DebugObject("Sally"); h ≔ ExtractChannel(a, "hsv", "h"); s ≔ ExtractChannel(a, "hsv", "s"); v ≔ ExtractChannel(a, "hsv", "v");', null);
  Test({LINENUM}63226, 'b ≔ CombineChannels("hsv", h, s, v);', null);
  Test({LINENUM}63227, 'norm(RealVector(GetRGB(AverageColor(a))) − RealVector(GetRGB(AverageColor(b)))) < 0.00001', True);

  Test({LINENUM}63229, 'CombineChannels("hsg", h, s, g)', failure, 'String "hsg" not allowed as argument. Expected one of "rgb", "hsv".');


  //
  // Blending
  //

  Test({LINENUM}63236, 'a ≔ FillRect(FillRect(CreatePixmap(10, 10, "black"), 0, 0, 5, 5, "red"), 5, 5, 5, 5, "gold");', null);
  Test({LINENUM}63237, 'GetRect(a, 0, 0, 5, 5) = CreatePixmap(5, 5, "red")', True);
  Test({LINENUM}63238, 'GetRect(a, 5, 0, 5, 5) = CreatePixmap(5, 5, "black")', True);
  Test({LINENUM}63239, 'GetRect(a, 0, 5, 5, 5) = CreatePixmap(5, 5, "black")', True);
  Test({LINENUM}63240, 'GetRect(a, 5, 5, 5, 5) = CreatePixmap(5, 5, "gold")', True);
  Test({LINENUM}63241, 'GetRect(a, 4, 4, 2, 2) = FillRect(FillRect(CreatePixmap(2, 2, "black"), 0, 0, 1, 1, "red"), 1, 1, 1, 1, "gold")', True);
  Test({LINENUM}63242, 'scale(GetRect(a, 4, 4, 2, 2), 5) = a', True);
  Test({LINENUM}63243, 'GetRect(a, 4, 4, 6, 6) = FillRect(FillRect(CreatePixmap(6, 6, "black"), 0, 0, 1, 1, "red"), 1, 1, 5, 5, "gold")', True);
  Test({LINENUM}63244, 'GetRect(a, 4, 4, 60, 6) = FillRect(FillRect(CreatePixmap(6, 6, "black"), 0, 0, 1, 1, "red"), 1, 1, 5, 5, "gold")', True);
  Test({LINENUM}63245, 'GetRect(a, 4, 4, 6, 60) = FillRect(FillRect(CreatePixmap(6, 6, "black"), 0, 0, 1, 1, "red"), 1, 1, 5, 5, "gold")', True);
  Test({LINENUM}63246, 'GetRect(a, 4, 4, 60, 60) = FillRect(FillRect(CreatePixmap(6, 6, "black"), 0, 0, 1, 1, "red"), 1, 1, 5, 5, "gold")', True);
  Test({LINENUM}63247, 'GetRect(a, 4, 4, 6000000, 600000000) = FillRect(FillRect(CreatePixmap(6, 6, "black"), 0, 0, 1, 1, "red"), 1, 1, 5, 5, "gold")', True);
  Test({LINENUM}63248, 'GetRect(a, 10, 0, 3, 3)', failure, 'Rectangle is empty.');
  Test({LINENUM}63249, 'GetRect(a, 0, 10, 3, 3)', failure, 'Rectangle is empty.');
  Test({LINENUM}63250, 'GetRect(a, 10, 10, 3, 3)', failure, 'Rectangle is empty.');
  Test({LINENUM}63251, 'GetRect(a, 10000, 10000, 3, 3)', failure, 'Rectangle is empty.');
  Test({LINENUM}63252, 'GetRect(a, 9, 9, 3, 3) = CreatePixmap(1, 1, "gold")', True);
  Test({LINENUM}63253, 'GetRect(a, 9, 9, 0, 3)', failure, 'Rectangle is empty.');
  Test({LINENUM}63254, 'GetRect(a, 9, 9, 3, 0)', failure, 'Rectangle is empty.');
  Test({LINENUM}63255, 'GetRect(a, 9, 9, 0, 0)', failure, 'Rectangle is empty.');

  Test({LINENUM}63257, 'GetRect(a, -1, 0, 5, 5)', failure, 'A non-negative integer was expected as argument 2, but "-1" was given.');
  Test({LINENUM}63258, 'GetRect(a, 0, -1, 5, 5)', failure, 'A non-negative integer was expected as argument 3, but "-1" was given.');
  Test({LINENUM}63259, 'GetRect(a, 0, 0, -2, 5)', failure, 'A non-negative integer was expected as argument 4, but "-2" was given.');
  Test({LINENUM}63260, 'GetRect(a, 0, 0, 5, -1000)', failure, 'A non-negative integer was expected as argument 5, but "-1000" was given.');

  Test({LINENUM}63262, 'a ≔ CreatePixmap(100, 100, "gold"); b ≔ CreatePixmap(10, 15, "red");', null);
  Test({LINENUM}63263, 'DrawRect(a, b, 0, 0) = FillRect(a, 0, 0, 10, 15, "red")', True);
  Test({LINENUM}63264, 'DrawRect(a, b, 20, 40) = FillRect(a, 20, 40, 10, 15, "red")', True);
  Test({LINENUM}63265, 'DrawRect(a, b, 90, 90) = FillRect(a, 90, 90, 123, 456, "red")', True);
  Test({LINENUM}63266, 'DrawRect(a, b, 20, 40, 1) = FillRect(a, 20, 40, 10, 15, "red")', True);
  Test({LINENUM}63267, 'DrawRect(a, b, 20, 40, 0) = a', True);
  Test({LINENUM}63268, 'DrawRect(a, b, 20, 40, 0.5) = FillRect(a, 20, 40, 10, 15, "#FF6C00")', True);
  Test({LINENUM}63269, '(#BlendModes() > 40) ∧ ∀(BlendModes(), x ↦ type(x) = "string")', True);
  Test({LINENUM}63270, 'ForEach(BlendModes(), bm, DrawRect(DebugObject("harvestman"), DebugObject("rabbit"), 0, 0, 1, bm))', null);
  Test({LINENUM}63271, 'ForEach(BlendModes(), bm, assert(DrawRect(DebugObject("harvestman"), DebugObject("rabbit"), 10000, 100000, 1, bm) = DebugObject("harvestman")))', null);

  Test({LINENUM}63273, 'a ≔ CreatePixmap(100, 100, "gold"); b ≔ CreatePixmap(10, 15, "red");', null);
  Test({LINENUM}63274, 'AlphaDrawRect(a, b, 0, 0) = FillRect(a, 0, 0, 10, 15, "red")', True);
  Test({LINENUM}63275, 'AlphaDrawRect(a, b, 20, 40) = FillRect(a, 20, 40, 10, 15, "red")', True);
  Test({LINENUM}63276, 'AlphaDrawRect(a, b, 90, 90) = FillRect(a, 90, 90, 123, 456, "red")', True);
  Test({LINENUM}63277, 'AlphaDrawRect(a, b, 20, 40, 1) = FillRect(a, 20, 40, 10, 15, "red")', True);
  Test({LINENUM}63278, 'AlphaDrawRect(a, b, 20, 40, 0) = a', True);
  Test({LINENUM}63279, 'AlphaDrawRect(a, b, 20, 40, 0.5) = FillRect(a, 20, 40, 10, 15, "#FF6C00")', True);
  Test({LINENUM}63280, '(#BlendModes() > 40) ∧ ∀(BlendModes(), x ↦ type(x) = "string")', True);
  Test({LINENUM}63281, 'ForEach(BlendModes(), bm, AlphaDrawRect(DebugObject("harvestman"), DebugObject("rabbit"), 0, 0, 1, bm))', null);
  Test({LINENUM}63282, 'ForEach(BlendModes(), bm, assert(AlphaDrawRect(DebugObject("harvestman"), DebugObject("rabbit"), 10000, 100000, 1, bm) = DebugObject("harvestman")))', null);

  Test({LINENUM}63284, 'n ≔ 4; pm ≔ ComputePixmap(n, n, x, y, hsv(x⋅360/n, 1, succ(y)/n));', null);
  Test({LINENUM}63285, 'size(pm)', ASOSize(4, 4));

  Test({LINENUM}63287, 'pm[0, 0]', ASOColor(THSV.Create(360*0/4, 1, 1/4)));
  Test({LINENUM}63288, 'pm[0, 1]', ASOColor(THSV.Create(360*1/4, 1, 1/4)));
  Test({LINENUM}63289, 'pm[0, 2]', ASOColor(THSV.Create(360*2/4, 1, 1/4)));
  Test({LINENUM}63290, 'pm[0, 3]', ASOColor(THSV.Create(360*3/4, 1, 1/4)));

  Test({LINENUM}63292, 'pm[1, 0]', ASOColor(THSV.Create(360*0/4, 1, 2/4)));
  Test({LINENUM}63293, 'pm[1, 1]', ASOColor(THSV.Create(360*1/4, 1, 2/4)));
  Test({LINENUM}63294, 'pm[1, 2]', ASOColor(THSV.Create(360*2/4, 1, 2/4)));
  Test({LINENUM}63295, 'pm[1, 3]', ASOColor(THSV.Create(360*3/4, 1, 2/4)));

  Test({LINENUM}63297, 'pm[2, 0]', ASOColor(THSV.Create(360*0/4, 1, 3/4)));
  Test({LINENUM}63298, 'pm[2, 1]', ASOColor(THSV.Create(360*1/4, 1, 3/4)));
  Test({LINENUM}63299, 'pm[2, 2]', ASOColor(THSV.Create(360*2/4, 1, 3/4)));
  Test({LINENUM}63300, 'pm[2, 3]', ASOColor(THSV.Create(360*3/4, 1, 3/4)));

  Test({LINENUM}63302, 'pm[3, 0]', ASOColor(THSV.Create(360*0/4, 1, 4/4)));
  Test({LINENUM}63303, 'pm[3, 1]', ASOColor(THSV.Create(360*1/4, 1, 4/4)));
  Test({LINENUM}63304, 'pm[3, 2]', ASOColor(THSV.Create(360*2/4, 1, 4/4)));
  Test({LINENUM}63305, 'pm[3, 3]', ASOColor(THSV.Create(360*3/4, 1, 4/4)));

  Test({LINENUM}63307, 'l ≔ NamedColors(); pm ≔ ComputePixmap(#l, 1, x, y, l[succ(x)].color);', null);
  Test({LINENUM}63308, 'size(pm)', ASOSize(1, Length(NamedColors)));
  Test({LINENUM}63309, 'for(x, 0, pred(#l), assert(pm[0, x] = l[succ(x)].color))', null);

  StartStopwatch;
  Test({LINENUM}63312, 'n ≔ 1000; ComputePixmap(n, n, x, y, hsv(x⋅360/pred(n), 1, y/pred(n)));', null);
  StopStopwatch;
  TestDuration({LINENUM}63314, 5.0);

  Test({LINENUM}63316, 'n ≔ 1000; ComputePixmap(n, n, x, y, hsv(x⋅360/pred(n), y/pred(n)));', failure,
    'Too few arguments. A required argument of type real number is missing.');

  Test({LINENUM}63319, 'delete(a); delete(b); delete(pm); delete(l); delete(n)', success);

  Test({LINENUM}63321, 'MatrixPlot(❨❨0, 10, 5, 10❩, ❨1, 5, 10, 5❩❩) = FillRect(FillRect(FillRect(FillRect(FillRect(FillRect(FillRect('+'CreatePixmap(200, 100, "black"), 50, 0, 50, 50, "red"), 100, 0, 50, 50, rgb(0.5, 0, 0)), 150, 0, 50, 50, "red"), 0, 50, 50, 50, rgb(1/10, 0, 0)), 50, 50, 50, 50, rgb(0.5, 0, 0)), 100, 50, 50, 50, "red"), 150, 50, 50, 50, rgb(0.5, 0, 0))', True);
  Test({LINENUM}63322, 'MatrixPlot(❨❨0, 10, 5, 10❩, ❨1, 5, 10, 5❩❩, "lime") = FillRect(FillRect(FillRect(FillRect(FillRect(FillRect('+'FillRect(CreatePixmap(200, 100, "black"), 50, 0, 50, 50, "lime"), 100, 0, 50, 50, rgb(0, 0.5, 0)), 150, 0, 50, 50, "lime"), 0, 50, 50, 50, rgb(0, 1/10, 0)), 50, 50, 50, 50, rgb(0, 0.5, 0)), 100, 50, 50, 50, "lime"), 150, 50, 50, 50, rgb(0, 0.5, 0))', True);
  Test({LINENUM}63323, 'MatrixPlot(❨❨0, 10, 5, 10❩, ❨1, 5, 10, 5❩❩, "lime", false) = FillRect(FillRect(FillRect(FillRect(FillRect(FillRect('+'FillRect(CreatePixmap(200, 100, "black"), 50, 0, 50, 50, "lime"), 100, 0, 50, 50, rgb(0, 0.5, 0)), 150, 0, 50, 50, "lime"), 0, 50, 50, 50, rgb(0, 1/10, 0)), 50, 50, 50, 50, rgb(0, 0.5, 0)), 100, 50, 50, 50, "lime"), 150, 50, 50, 50, rgb(0, 0.5, 0))', True);
  Test({LINENUM}63324, 'MatrixPlot(❨❨0, 10, 5, 10❩, ❨1, 5, 10, 5❩❩, "lime", false, 200) = FillRect(FillRect(FillRect(FillRect(FillRect(FillRect('+'FillRect(CreatePixmap(200, 100, "black"), 50, 0, 50, 50, "lime"), 100, 0, 50, 50, rgb(0, 0.5, 0)), 150, 0, 50, 50, "lime"), 0, 50, 50, 50, rgb(0, 1/10, 0)), 50, 50, 50, 50, rgb(0, 0.5, 0)), 100, 50, 50, 50, "lime"), 150, 50, 50, 50, rgb(0, 0.5, 0))', True);
  Test({LINENUM}63325, 'MatrixPlot(❨❨0, 10, 5, 10❩, ❨1, 5, 10, 5❩❩, "lime", false, 200, 100) = FillRect(FillRect(FillRect(FillRect(FillRect(FillRect('+'FillRect(CreatePixmap(200, 100, "black"), 50, 0, 50, 50, "lime"), 100, 0, 50, 50, rgb(0, 0.5, 0)), 150, 0, 50, 50, "lime"), 0, 50, 50, 50, rgb(0, 1/10, 0)), 50, 50, 50, 50, rgb(0, 0.5, 0)), 100, 50, 50, 50, "lime"), 150, 50, 50, 50, rgb(0, 0.5, 0))', True);
  Test({LINENUM}63326, 'MatrixPlot(❨❨0, 10, 5, 10❩, ❨1, 5, 10, 5❩❩, "lime", true, 200, 100) = FillRect(FillRect(FillRect(FillRect(FillRect('+'FillRect(FillRect('+'CreatePixmap(200, 100, rgb(0, 0.5, 0)), 50, 0, 50, 50, "lime"), 100, 0, 50, 50, rgb(0, 0.75, 0)), 150, 0, 50, 50, "lime"), 0, 50, 50, 50, rgb(0, 0.5 + 1/20, 0)), 50, 50, 50, 50, rgb(0, 0.75, 0)), 100, 50, 50, 50, "lime"), 150, 50, 50, 50, rgb(0, 0.75, 0))', True);
  Test({LINENUM}63327, 'MatrixPlot(❨❨0, 10, 5, 10❩, ❨1, 5, 10, 5❩❩, "lime", true, 20) = FillRect(FillRect(FillRect(FillRect(FillRect('+'FillRect(FillRect(CreatePixmap(20, 10, rgb(0, 0.5, 0)), 5, 0, 5, 5, "lime"), 10, 0, 5, 5, rgb(0, 0.75, 0)), 15, 0, 5, 5, "lime"), 0, 5, 5, 5, rgb(0, 0.5 + 1/20, 0)), 5, 5, 5, 5, rgb(0, 0.75, 0)), 10, 5, 5, 5, "lime"), 15, 5, 5, 5, rgb(0, 0.75, 0))', True);
  Test({LINENUM}63328, 'MatrixPlot(❨❨0, 10, 5, 10❩, ❨1, 5, 10, 5❩❩, "lime", true, 20, 20) = FillRect(FillRect(FillRect(FillRect(FillRect(FillRect(FillRect('+'CreatePixmap(20, 20, rgb(0, 0.5, 0)), 5, 0, 5, 10, "lime"), 10, 0, 5, 10, rgb(0, 0.75, 0)), 15, 0, 5, 10, "lime"), 0, 10, 5, 10, rgb(0, 0.5 + 1/20, 0)), 5, 10, 5, 10, rgb(0, 0.75, 0)), 10, 10, 5, 10, "lime"), 15, 10, 5, 10, rgb(0, 0.75, 0))', True);

  Test({LINENUM}63330, 'block ≔ (a, b, c, d) ↦ (img ≔ CreatePixmap(2, 2); img[0, 0] ≔ color(a); img[0, 1] ≔ color(b); img[1, 0] ≔ color(c); img[1, 1] ≔ color(d); img);', null);
  Test({LINENUM}63331, 'MatrixPlot(❨❨0, 1❩, ❨2, −1❩❩, "red", false, 2) = block(rgb(1/3, 0, 0), rgb(2/3, 0, 0), rgb(1, 0, 0), rgb(0, 0, 0))', True);
  Test({LINENUM}63332, 'MatrixPlot(❨❨0, 1❩, ❨2, −1❩❩, "red", true, 2) = block(rgb(1/2, 0, 0), rgb(3/4, 0, 0), rgb(1, 0, 0), rgb(1/4, 0, 0))', True);
  Test({LINENUM}63333, 'MatrixPlot(❨❨0, 1❩, ❨2, −1❩❩, ''("blue", "white", "red"), true, 2) = block("white", rgb(1, .5, .5), "red", rgb(.5, .5, 1))', True);
  Test({LINENUM}63334, 'MatrixPlot(❨❨0, 1❩, ❨2, −2❩❩, ''("blue", "white", "red"), true, 2) = block("white", rgb(1, .5, .5), "red", "blue")', True);
  Test({LINENUM}63335, 'MatrixPlot(❨❨0, 1❩, ❨2, −2❩❩, ''("blue", "white", "red"), false, 2) = block("white", rgb(1, .5, .5), "red", "blue")', True);
  Test({LINENUM}63336, 'MatrixPlot(❨❨0, 1❩, ❨2, −1❩❩, ''("blue", "red"), false, 2) = block(rgb(1/3, 0, 2/3), rgb(2/3, 0, 1/3), "red", "blue")', True);
  Test({LINENUM}63337, 'MatrixPlot(❨❨0, 1❩, ❨2, −1❩❩, ''("blue", "red"), true, 2) = block(rgb(.5, 0, .5), rgb(.75, 0, .25), "red", rgb(.25, 0, .75))', True);

  Test({LINENUM}63339, 'MatrixPlot(❨❨0, 1❩, ❨2, −1❩❩, (t ↦ hsv(360⋅t, 1, 1)), true, 2) = block(hsv(180, 1, 1), hsv(270, 1, 1), hsv(0, 1, 1), hsv(90, 1, 1))', True);

  Test({LINENUM}63341, 'MatrixPlot(❨❨0, 1❩, ❨2, −1❩❩, (t ↦ "cat"), true, 2)', failure, 'Unsupported colour descriptor "cat".');
  Test({LINENUM}63342, 'MatrixPlot(❨❨0, 1❩, ❨2, −1❩❩, (t ↦ false), true, 2)', failure, 'An object of type "boolean" cannot be converted to a colour.');

  Test({LINENUM}63344, 'delete(block)', success);





  //
  //
  //  CHAPTER 16
  //  MIDI functions.
  //
  //

  Chapter('MIDI functions');

  for _i := Ord(Low(TMidiInstrument)) to Ord(High(TMidiInstrument)) do
  begin
    Test({LINENUM}63361, 'k ≔ ' + _i.ToString, _i);
    with GetMIDIInstrumentData(TMidiInstrument(_i)) do
    begin
      Test({LINENUM}63364, 'InstrumentInfo(k)',
        TAlgosimStructure.CreateWithValue(
          [
            sm('InstrumentFamily', ASO(InstrumentFamily)),
            sm('InstrumentName', ASO(InstrumentName)),
            sm('IsPercussionChannel', ASO(IsPercussionChannel)),
            sm('ProgramNumber', ASOInt(ProgramNumber))
          ]
        )
      );
      Test({LINENUM}63374, 'InstrumentInfo(InstrumentInfo(k).InstrumentName)',
        TAlgosimStructure.CreateWithValue(
          [
            sm('InstrumentFamily', ASO(InstrumentFamily)),
            sm('InstrumentName', ASO(InstrumentName)),
            sm('IsPercussionChannel', ASO(IsPercussionChannel)),
            sm('ProgramNumber', ASOInt(ProgramNumber))
          ]
        )
      );
      Test({LINENUM}63384, 'InstrumentInfo(LowerCase(InstrumentInfo(k).InstrumentName))',
        TAlgosimStructure.CreateWithValue(
          [
            sm('InstrumentFamily', ASO(InstrumentFamily)),
            sm('InstrumentName', ASO(InstrumentName)),
            sm('IsPercussionChannel', ASO(False{!})),
            sm('ProgramNumber', ASOInt(_i{!}))
          ]
        )
      );
      if Odd(_i) then
        Test({LINENUM}63395, 'SetInstrument(k)', success)
      else
        Test({LINENUM}63397, 'SetInstrument(InstrumentInfo(k).InstrumentName)', success);
      Test({LINENUM}63398, 'NoteOn(70, 100)', success);
      Sleep(100);
      Test({LINENUM}63400, 'NoteOff(70, 100)', success);
      Test({LINENUM}63401, 'GetInstrument()', _i);
      Test({LINENUM}63402, 'AsSingleLine(GetInstrument())', InstrumentName);
    end;
  end;

  for _i := Ord(Low(TMidiInstrument)) to Ord(High(TMidiInstrument)) do
  begin
    Test({LINENUM}63408, 'k ≔ ' + _i.ToString, _i);
    with GetMIDIInstrumentData(TMidiInstrument(_i)) do
    begin
      if not Odd(_i) then
        Test({LINENUM}63412, 'SetInstrument(k)', success)
      else
        Test({LINENUM}63414, 'SetInstrument(InstrumentInfo(k).InstrumentName)', success);
      Test({LINENUM}63415, 'NoteOn(50, 100)', success);
      Sleep(100);
      Test({LINENUM}63417, 'NoteOff(50, 100)', success);
    end;
  end;

  for _i := Ord(Low(TMidiInstrument)) to Ord(High(TMidiInstrument)) do
  begin
    Test({LINENUM}63423, 'k ≔ ' + _i.ToString, _i);
    with GetMIDIInstrumentData(TMidiInstrument(_i)) do
    begin
      if not Odd(_i) then
        Test({LINENUM}63427, 'SetInstrument(k)', success)
      else
        Test({LINENUM}63429, 'SetInstrument(InstrumentInfo(k).InstrumentName)', success);
      Test({LINENUM}63430, 'NoteOn(90, 100)', success);
      Sleep(100);
      Test({LINENUM}63432, 'NoteOff(90, 100)', success);
    end;
  end;

  Test({LINENUM}63436, 'InstrumentInfo("Nargle Chorus")', failure, 'Unknown instrument "Nargle Chorus".');
  Test({LINENUM}63437, 'InstrumentInfo(' + Pred(Ord(Low(TMidiInstrument))).ToString + ')', failure, 'Invalid function arguments.');
  Test({LINENUM}63438, 'InstrumentInfo(' + Succ(Ord(High(TMidiInstrument))).ToString + ')', failure, 'Invalid function arguments.');

  Test({LINENUM}63440, 'SetInstrument("Nargle Chorus")', failure, 'Unknown instrument "Nargle Chorus".');
  Test({LINENUM}63441, 'SetInstrument(' + Pred(Ord(Low(TMidiInstrument))).ToString + ')', failure, 'Invalid function arguments.');
  Test({LINENUM}63442, 'SetInstrument(' + Succ(Ord(High(TMidiInstrument))).ToString + ')', failure, 'Invalid function arguments.');

  for _i := Ord(Low(TMidiPercussionKey)) to Ord(High(TMidiPercussionKey)) do
  begin
    Test({LINENUM}63446, 'k ≔ ' + _i.ToString, _i);
    with GetMIDIPercussionInstrumentData(TMidiPercussionKey(_i)) do
    begin
      Test({LINENUM}63449, 'PercussionInstrumentInfo(k)',
        TAlgosimStructure.CreateWithValue(
          [
            sm('InstrumentFamily', ASO(InstrumentFamily)),
            sm('InstrumentName', ASO(InstrumentName)),
            sm('IsPercussionChannel', ASO(IsPercussionChannel)),
            sm('NoteNumber', ASOInt(NoteNumber))
          ]
        )
      );
      Test({LINENUM}63459, 'PercussionInstrumentInfo(PercussionInstrumentInfo(k).InstrumentName)',
        TAlgosimStructure.CreateWithValue(
          [
            sm('InstrumentFamily', ASO(InstrumentFamily)),
            sm('InstrumentName', ASO(InstrumentName)),
            sm('IsPercussionChannel', ASO(IsPercussionChannel)),
            sm('NoteNumber', ASOInt(NoteNumber))
          ]
        )
      );
      Test({LINENUM}63469, 'PercussionInstrumentInfo(LowerCase(PercussionInstrumentInfo(k).InstrumentName))',
        TAlgosimStructure.CreateWithValue(
          [
            sm('InstrumentFamily', ASO('Percussion channel instrument')),
            sm('InstrumentName', ASO(InstrumentName)),
            sm('IsPercussionChannel', ASO(True{!})),
            sm('NoteNumber', ASOInt(_i{!}))
          ]
        )
      );
      if Odd(_i) then
        Test({LINENUM}63480, 'PercussionNoteOn(k, 100)', success)
      else
        Test({LINENUM}63482, 'PercussionNoteOn(PercussionInstrumentInfo(k).InstrumentName, 100)', success);
      Sleep(100);
    end;
  end;

  Test({LINENUM}63487, 'PercussionInstrumentInfo("Niffler Drum")', failure, 'Unknown percussion instrument "Niffler Drum".');
  Test({LINENUM}63488, 'PercussionInstrumentInfo(' + Pred(Ord(Low(TMidiPercussionKey))).ToString + ')', failure, 'Invalid function arguments.');
  Test({LINENUM}63489, 'PercussionInstrumentInfo(' + Succ(Ord(High(TMidiPercussionKey))).ToString + ')', failure, 'Invalid function arguments.');

  Test({LINENUM}63491, 'PercussionNoteOn("Niffler Drum", 100)', failure, 'Unknown percussion instrument "Niffler Drum".');
  Test({LINENUM}63492, 'PercussionNoteOn(123456, 100)', failure, 'Invalid function arguments.');

  Test({LINENUM}63494, 'SetInstrument(0)', success);
  for _i := 0 to 127 do
  begin
    Test({LINENUM}63497, 'k ≔ ' + (512*_i).ToString, 512*_i);
    Test({LINENUM}63498, 'SetVolume(k)', success);
    Test({LINENUM}63499, 'NoteOn(40, 100)', success);
    Test({LINENUM}63500, 'GetVolume()', 512*_i);
    Sleep(100);
  end;

  Test({LINENUM}63504, 'SetInstrument(0)', success);
  for _i := 0 to 127 do
  begin
    Test({LINENUM}63507, 'k ≔ ' + _i.ToString, _i);
    Test({LINENUM}63508, 'NoteOn(60, k)', success);
    Sleep(100);
  end;





  //
  //
  //  CHAPTER 17
  //  Digits. Number formatting. Annotated output.
  //
  //

  Chapter('Digits and number formatting');

  //
  // Number formatting
  //

  TestNumFmt({LINENUM}63529, '0', nfDefault, ['0']);
  TestNumFmt({LINENUM}63530, '0', nfDefault, 10, ['0']);
  TestNumFmt({LINENUM}63531, '0', nfDefault, 20, ['0']);
  TestNumFmt({LINENUM}63532, '0', nfDefault, 100, ['0']);
  TestNumFmt({LINENUM}63533, '0', nfDefault, 1000, ['0']);

  TestNumFmt({LINENUM}63535, '0', nfFraction, ['0']);
  TestNumFmt({LINENUM}63536, '0', nfFraction, 10, ['0']);
  TestNumFmt({LINENUM}63537, '0', nfFraction, 20, ['0']);
  TestNumFmt({LINENUM}63538, '0', nfFraction, 100, ['0']);
  TestNumFmt({LINENUM}63539, '0', nfFraction, 1000, ['0']);

  TestNumFmt({LINENUM}63541, '0', nfFixed,     ['0', '0.000000000000']);
  TestNumFmt({LINENUM}63542, '0', nfFixed, 5, ['0', '0.00000']);
  TestNumFmt({LINENUM}63543, '0', nfFixed, 10, ['0', '0.0000000000']);
  TestNumFmt({LINENUM}63544, '0', nfFixed, 12, ['0', '0.000000000000']);
  TestNumFmt({LINENUM}63545, '0', nfFixed, 15, ['0', '0.000000000000000']);
  TestNumFmt({LINENUM}63546, '0', nfFixed, 50, ['0', '0.00000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63547, '0', nfFixed, 100, ['0', '0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63549, '0', nfExponent,     ['0', '0.00000000000E0']);
  TestNumFmt({LINENUM}63550, '0', nfExponent, 5, ['0', '0.0000E0']);
  TestNumFmt({LINENUM}63551, '0', nfExponent, 10, ['0', '0.000000000E0']);
  TestNumFmt({LINENUM}63552, '0', nfExponent, 12, ['0', '0.00000000000E0']);
  TestNumFmt({LINENUM}63553, '0', nfExponent, 15, ['0', '0.00000000000000E0']);
  TestNumFmt({LINENUM}63554, '0', nfExponent, 50, ['0', '0.0000000000000000000000000000000000000000000000000E0', '*']);
  TestNumFmt({LINENUM}63555, '0', nfExponent, 100, ['0', '0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E0', '*']);

  // --

  TestNumFmt({LINENUM}63559, '5', nfDefault, ['5']);
  TestNumFmt({LINENUM}63560, '5', nfDefault, 1, ['5']);
  TestNumFmt({LINENUM}63561, '5', nfDefault, 2, ['5']);
  TestNumFmt({LINENUM}63562, '5', nfDefault, 10, ['5']);
  TestNumFmt({LINENUM}63563, '5', nfDefault, 20, ['5']);
  TestNumFmt({LINENUM}63564, '5', nfDefault, 100, ['5']);
  TestNumFmt({LINENUM}63565, '5', nfDefault, 1000, ['5']);

  TestNumFmt({LINENUM}63567, '5', nfFraction, ['5']);
  TestNumFmt({LINENUM}63568, '5', nfFraction, 1, ['5']);
  TestNumFmt({LINENUM}63569, '5', nfFraction, 2, ['5']);
  TestNumFmt({LINENUM}63570, '5', nfFraction, 10, ['5']);
  TestNumFmt({LINENUM}63571, '5', nfFraction, 20, ['5']);
  TestNumFmt({LINENUM}63572, '5', nfFraction, 100, ['5']);
  TestNumFmt({LINENUM}63573, '5', nfFraction, 1000, ['5']);

  TestNumFmt({LINENUM}63575, '5', nfFixed,     ['5', '5.000000000000']);
  TestNumFmt({LINENUM}63576, '5', nfFixed, 0, ['5', '5']);
  TestNumFmt({LINENUM}63577, '5', nfFixed, 1, ['5', '5.0']);
  TestNumFmt({LINENUM}63578, '5', nfFixed, 2, ['5', '5.00']);
  TestNumFmt({LINENUM}63579, '5', nfFixed, 5, ['5', '5.00000']);
  TestNumFmt({LINENUM}63580, '5', nfFixed, 10, ['5', '5.0000000000']);
  TestNumFmt({LINENUM}63581, '5', nfFixed, 12, ['5', '5.000000000000']);
  TestNumFmt({LINENUM}63582, '5', nfFixed, 15, ['5', '5.000000000000000']);
  TestNumFmt({LINENUM}63583, '5', nfFixed, 50, ['5', '5.00000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63584, '5', nfFixed, 100, ['5', '5.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63586, '5', nfExponent,     ['5', '5.00000000000E0']);
  TestNumFmt({LINENUM}63587, '5', nfExponent, 2, ['5', '5.0E0']);
  TestNumFmt({LINENUM}63588, '5', nfExponent, 5, ['5', '5.0000E0']);
  TestNumFmt({LINENUM}63589, '5', nfExponent, 10, ['5', '5.000000000E0']);
  TestNumFmt({LINENUM}63590, '5', nfExponent, 12, ['5', '5.00000000000E0']);
  TestNumFmt({LINENUM}63591, '5', nfExponent, 15, ['5', '5.00000000000000E0']);
  TestNumFmt({LINENUM}63592, '5', nfExponent, 50, ['5', '5.0000000000000000000000000000000000000000000000000E0', '*']);
  TestNumFmt({LINENUM}63593, '5', nfExponent, 100, ['5', '5.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E0', '*']);

  // --

  TestNumFmt({LINENUM}63597, '9', nfDefault, ['9']);
  TestNumFmt({LINENUM}63598, '9', nfDefault, 1, ['9']);
  TestNumFmt({LINENUM}63599, '9', nfDefault, 2, ['9']);
  TestNumFmt({LINENUM}63600, '9', nfDefault, 10, ['9']);
  TestNumFmt({LINENUM}63601, '9', nfDefault, 20, ['9']);
  TestNumFmt({LINENUM}63602, '9', nfDefault, 100, ['9']);
  TestNumFmt({LINENUM}63603, '9', nfDefault, 1000, ['9']);

  TestNumFmt({LINENUM}63605, '9', nfFraction, ['9']);
  TestNumFmt({LINENUM}63606, '9', nfFraction, 1, ['9']);
  TestNumFmt({LINENUM}63607, '9', nfFraction, 2, ['9']);
  TestNumFmt({LINENUM}63608, '9', nfFraction, 10, ['9']);
  TestNumFmt({LINENUM}63609, '9', nfFraction, 20, ['9']);
  TestNumFmt({LINENUM}63610, '9', nfFraction, 100, ['9']);
  TestNumFmt({LINENUM}63611, '9', nfFraction, 1000, ['9']);

  TestNumFmt({LINENUM}63613, '9', nfFixed,     ['9', '9.000000000000']);
  TestNumFmt({LINENUM}63614, '9', nfFixed, 0, ['9', '9']);
  TestNumFmt({LINENUM}63615, '9', nfFixed, 1, ['9', '9.0']);
  TestNumFmt({LINENUM}63616, '9', nfFixed, 2, ['9', '9.00']);
  TestNumFmt({LINENUM}63617, '9', nfFixed, 5, ['9', '9.00000']);
  TestNumFmt({LINENUM}63618, '9', nfFixed, 10, ['9', '9.0000000000']);
  TestNumFmt({LINENUM}63619, '9', nfFixed, 12, ['9', '9.000000000000']);
  TestNumFmt({LINENUM}63620, '9', nfFixed, 15, ['9', '9.000000000000000']);
  TestNumFmt({LINENUM}63621, '9', nfFixed, 50, ['9', '9.00000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63622, '9', nfFixed, 100, ['9', '9.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63624, '9', nfExponent,     ['9', '9.00000000000E0']);
  TestNumFmt({LINENUM}63625, '9', nfExponent, 2, ['9', '9.0E0']);
  TestNumFmt({LINENUM}63626, '9', nfExponent, 5, ['9', '9.0000E0']);
  TestNumFmt({LINENUM}63627, '9', nfExponent, 10, ['9', '9.000000000E0']);
  TestNumFmt({LINENUM}63628, '9', nfExponent, 12, ['9', '9.00000000000E0']);
  TestNumFmt({LINENUM}63629, '9', nfExponent, 15, ['9', '9.00000000000000E0']);
  TestNumFmt({LINENUM}63630, '9', nfExponent, 50, ['9', '9.0000000000000000000000000000000000000000000000000E0', '*']);
  TestNumFmt({LINENUM}63631, '9', nfExponent, 100, ['9', '9.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E0', '*']);

  // --

  TestNumFmt({LINENUM}63635, '10', nfDefault, ['10']);
  TestNumFmt({LINENUM}63636, '10', nfDefault, 2, ['10']);
  TestNumFmt({LINENUM}63637, '10', nfDefault, 10, ['10']);
  TestNumFmt({LINENUM}63638, '10', nfDefault, 20, ['10']);
  TestNumFmt({LINENUM}63639, '10', nfDefault, 100, ['10']);
  TestNumFmt({LINENUM}63640, '10', nfDefault, 1000, ['10']);

  TestNumFmt({LINENUM}63642, '10', nfFraction, ['10']);
  TestNumFmt({LINENUM}63643, '10', nfFraction, 2, ['10']);
  TestNumFmt({LINENUM}63644, '10', nfFraction, 10, ['10']);
  TestNumFmt({LINENUM}63645, '10', nfFraction, 20, ['10']);
  TestNumFmt({LINENUM}63646, '10', nfFraction, 100, ['10']);
  TestNumFmt({LINENUM}63647, '10', nfFraction, 1000, ['10']);

  TestNumFmt({LINENUM}63649, '10', nfFixed,     ['10', '10.000000000000']);
  TestNumFmt({LINENUM}63650, '10', nfFixed, 0, ['10', '10']);
  TestNumFmt({LINENUM}63651, '10', nfFixed, 1, ['10', '10.0']);
  TestNumFmt({LINENUM}63652, '10', nfFixed, 2, ['10', '10.00']);
  TestNumFmt({LINENUM}63653, '10', nfFixed, 5, ['10', '10.00000']);
  TestNumFmt({LINENUM}63654, '10', nfFixed, 10, ['10', '10.0000000000']);
  TestNumFmt({LINENUM}63655, '10', nfFixed, 12, ['10', '10.000000000000']);
  TestNumFmt({LINENUM}63656, '10', nfFixed, 15, ['10', '10.000000000000000']);
  TestNumFmt({LINENUM}63657, '10', nfFixed, 50, ['10', '10.00000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63658, '10', nfFixed, 100, ['10', '10.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63660, '10', nfExponent,     ['10', '1.00000000000E1']);
  TestNumFmt({LINENUM}63661, '10', nfExponent, 1, ['10', '1E1', '1.0E1']);
  TestNumFmt({LINENUM}63662, '10', nfExponent, 2, ['10', '1.0E1']);
  TestNumFmt({LINENUM}63663, '10', nfExponent, 5, ['10', '1.0000E1']);
  TestNumFmt({LINENUM}63664, '10', nfExponent, 10, ['10', '1.000000000E1']);
  TestNumFmt({LINENUM}63665, '10', nfExponent, 12, ['10', '1.00000000000E1']);
  TestNumFmt({LINENUM}63666, '10', nfExponent, 15, ['10', '1.00000000000000E1']);
  TestNumFmt({LINENUM}63667, '10', nfExponent, 50, ['10', '1.0000000000000000000000000000000000000000000000000E1', '*']);
  TestNumFmt({LINENUM}63668, '10', nfExponent, 100, ['10', '1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E1', '*']);

  // --

  TestNumFmt({LINENUM}63672, '12', nfDefault, ['12']);
  TestNumFmt({LINENUM}63673, '12', nfDefault, 2, ['12']);
  TestNumFmt({LINENUM}63674, '12', nfDefault, 10, ['12']);
  TestNumFmt({LINENUM}63675, '12', nfDefault, 20, ['12']);
  TestNumFmt({LINENUM}63676, '12', nfDefault, 100, ['12']);
  TestNumFmt({LINENUM}63677, '12', nfDefault, 1000, ['12']);

  TestNumFmt({LINENUM}63679, '12', nfFraction, ['12']);
  TestNumFmt({LINENUM}63680, '12', nfFraction, 2, ['12']);
  TestNumFmt({LINENUM}63681, '12', nfFraction, 10, ['12']);
  TestNumFmt({LINENUM}63682, '12', nfFraction, 20, ['12']);
  TestNumFmt({LINENUM}63683, '12', nfFraction, 100, ['12']);
  TestNumFmt({LINENUM}63684, '12', nfFraction, 1000, ['12']);

  TestNumFmt({LINENUM}63686, '12', nfFixed,     ['12', '12.000000000000']);
  TestNumFmt({LINENUM}63687, '12', nfFixed, 0, ['12', '12']);
  TestNumFmt({LINENUM}63688, '12', nfFixed, 1, ['12', '12.0']);
  TestNumFmt({LINENUM}63689, '12', nfFixed, 2, ['12', '12.00']);
  TestNumFmt({LINENUM}63690, '12', nfFixed, 5, ['12', '12.00000']);
  TestNumFmt({LINENUM}63691, '12', nfFixed, 10, ['12', '12.0000000000']);
  TestNumFmt({LINENUM}63692, '12', nfFixed, 12, ['12', '12.000000000000']);
  TestNumFmt({LINENUM}63693, '12', nfFixed, 15, ['12', '12.000000000000000']);
  TestNumFmt({LINENUM}63694, '12', nfFixed, 50, ['12', '12.00000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63695, '12', nfFixed, 100, ['12', '12.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63697, '12', nfExponent,     ['12', '1.20000000000E1']);
  TestNumFmt({LINENUM}63698, '12', nfExponent, 1, ['12', '1E1', '1.2E1']);
  TestNumFmt({LINENUM}63699, '12', nfExponent, 2, ['12', '1.2E1']);
  TestNumFmt({LINENUM}63700, '12', nfExponent, 5, ['12', '1.2000E1']);
  TestNumFmt({LINENUM}63701, '12', nfExponent, 10, ['12', '1.200000000E1']);
  TestNumFmt({LINENUM}63702, '12', nfExponent, 12, ['12', '1.20000000000E1']);
  TestNumFmt({LINENUM}63703, '12', nfExponent, 15, ['12', '1.20000000000000E1']);
  TestNumFmt({LINENUM}63704, '12', nfExponent, 50, ['12', '1.2000000000000000000000000000000000000000000000000E1', '*']);
  TestNumFmt({LINENUM}63705, '12', nfExponent, 100, ['12', '1.200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E1', '*']);

  // --

  TestNumFmt({LINENUM}63709, '18', nfDefault, ['18']);
  TestNumFmt({LINENUM}63710, '18', nfDefault, 2, ['18']);
  TestNumFmt({LINENUM}63711, '18', nfDefault, 10, ['18']);
  TestNumFmt({LINENUM}63712, '18', nfDefault, 20, ['18']);
  TestNumFmt({LINENUM}63713, '18', nfDefault, 100, ['18']);
  TestNumFmt({LINENUM}63714, '18', nfDefault, 1000, ['18']);

  TestNumFmt({LINENUM}63716, '18', nfFraction, ['18']);
  TestNumFmt({LINENUM}63717, '18', nfFraction, 2, ['18']);
  TestNumFmt({LINENUM}63718, '18', nfFraction, 10, ['18']);
  TestNumFmt({LINENUM}63719, '18', nfFraction, 20, ['18']);
  TestNumFmt({LINENUM}63720, '18', nfFraction, 100, ['18']);
  TestNumFmt({LINENUM}63721, '18', nfFraction, 1000, ['18']);

  TestNumFmt({LINENUM}63723, '18', nfFixed,     ['18', '18.000000000000']);
  TestNumFmt({LINENUM}63724, '18', nfFixed, 0, ['18', '18']);
  TestNumFmt({LINENUM}63725, '18', nfFixed, 1, ['18', '18.0']);
  TestNumFmt({LINENUM}63726, '18', nfFixed, 2, ['18', '18.00']);
  TestNumFmt({LINENUM}63727, '18', nfFixed, 5, ['18', '18.00000']);
  TestNumFmt({LINENUM}63728, '18', nfFixed, 10, ['18', '18.0000000000']);
  TestNumFmt({LINENUM}63729, '18', nfFixed, 12, ['18', '18.000000000000']);
  TestNumFmt({LINENUM}63730, '18', nfFixed, 15, ['18', '18.000000000000000']);
  TestNumFmt({LINENUM}63731, '18', nfFixed, 50, ['18', '18.00000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63732, '18', nfFixed, 100, ['18', '18.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63734, '18', nfExponent,     ['18', '1.80000000000E1']);
  TestNumFmt({LINENUM}63735, '18', nfExponent, 1, ['18', '2E1', '1.8E1']);
  TestNumFmt({LINENUM}63736, '18', nfExponent, 2, ['18', '1.8E1']);
  TestNumFmt({LINENUM}63737, '18', nfExponent, 5, ['18', '1.8000E1']);
  TestNumFmt({LINENUM}63738, '18', nfExponent, 10, ['18', '1.800000000E1']);
  TestNumFmt({LINENUM}63739, '18', nfExponent, 12, ['18', '1.80000000000E1']);
  TestNumFmt({LINENUM}63740, '18', nfExponent, 15, ['18', '1.80000000000000E1']);
  TestNumFmt({LINENUM}63741, '18', nfExponent, 50, ['18', '1.8000000000000000000000000000000000000000000000000E1', '*']);
  TestNumFmt({LINENUM}63742, '18', nfExponent, 100, ['18', '1.800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E1', '*']);

  // --

  TestNumFmt({LINENUM}63746, '18.7', nfDefault, ['!', '18.7']);
  TestNumFmt({LINENUM}63747, '18.7', nfDefault, 2, ['!', '19']);
  TestNumFmt({LINENUM}63748, '18.7', nfDefault, 10, ['!', '18.7']);
  TestNumFmt({LINENUM}63749, '18.7', nfDefault, 20, ['!', '18.7']);
  TestNumFmt({LINENUM}63750, '18.7', nfDefault, 100, ['!', '18.7']);
  TestNumFmt({LINENUM}63751, '18.7', nfDefault, 1000, ['!', '18.7']);

  TestNumFmt({LINENUM}63753, '18.7', nfFraction, ['!', '187/10', '18.7']);
  TestNumFmt({LINENUM}63754, '18.7', nfFraction, 2, ['!', '187/10', '19']);
  TestNumFmt({LINENUM}63755, '18.7', nfFraction, 10, ['!', '187/10', '18.7']);
  TestNumFmt({LINENUM}63756, '18.7', nfFraction, 20, ['!', '187/10', '18.7']);
  TestNumFmt({LINENUM}63757, '18.7', nfFraction, 100, ['!', '187/10', '18.7']);
  TestNumFmt({LINENUM}63758, '18.7', nfFraction, 1000, ['!', '187/10', '18.7']);

  TestNumFmt({LINENUM}63760, '18.7', nfFixed,     ['!', '18.700000000000']);
  TestNumFmt({LINENUM}63761, '18.7', nfFixed, 0, ['!', '19']);
  TestNumFmt({LINENUM}63762, '18.7', nfFixed, 1, ['!', '18.7']);
  TestNumFmt({LINENUM}63763, '18.7', nfFixed, 2, ['!', '18.70']);
  TestNumFmt({LINENUM}63764, '18.7', nfFixed, 5, ['!', '18.70000']);
  TestNumFmt({LINENUM}63765, '18.7', nfFixed, 10, ['!', '18.7000000000']);
  TestNumFmt({LINENUM}63766, '18.7', nfFixed, 12, ['!', '18.700000000000']);
  TestNumFmt({LINENUM}63767, '18.7', nfFixed, 15, ['!', '18.700000000000000']);
  TestNumFmt({LINENUM}63768, '18.7', nfFixed, 50, ['!', '18.70000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63769, '18.7', nfFixed, 100, ['!', '18.7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63771, '18.7', nfExponent,     ['!', '1.87000000000E1']);
  TestNumFmt({LINENUM}63772, '18.7', nfExponent, 1, ['!', '2E1', '1.9E1']);
  TestNumFmt({LINENUM}63773, '18.7', nfExponent, 2, ['!', '1.9E1']);
  TestNumFmt({LINENUM}63774, '18.7', nfExponent, 3, ['!', '1.87E1']);
  TestNumFmt({LINENUM}63775, '18.7', nfExponent, 5, ['!', '1.8700E1']);
  TestNumFmt({LINENUM}63776, '18.7', nfExponent, 10, ['!', '1.870000000E1']);
  TestNumFmt({LINENUM}63777, '18.7', nfExponent, 12, ['!', '1.87000000000E1']);
  TestNumFmt({LINENUM}63778, '18.7', nfExponent, 15, ['!', '1.87000000000000E1']);
  TestNumFmt({LINENUM}63779, '18.7', nfExponent, 50, ['!', '1.8700000000000000000000000000000000000000000000000E1', '*']);
  TestNumFmt({LINENUM}63780, '18.7', nfExponent, 100, ['!', '1.870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E1', '*']);

  // --

  TestNumFmt({LINENUM}63784, '18.4', nfDefault, ['!', '18.4']);
  TestNumFmt({LINENUM}63785, '18.4', nfDefault, 2, ['!', '18']);
  TestNumFmt({LINENUM}63786, '18.4', nfDefault, 10, ['!', '18.4']);
  TestNumFmt({LINENUM}63787, '18.4', nfDefault, 20, ['!', '18.4']);
  TestNumFmt({LINENUM}63788, '18.4', nfDefault, 100, ['!', '18.4']);
  TestNumFmt({LINENUM}63789, '18.4', nfDefault, 1000, ['!', '18.4']);

  TestNumFmt({LINENUM}63791, '18.4', nfFraction, ['!', '92/5', '18.4']);
  TestNumFmt({LINENUM}63792, '18.4', nfFraction, 2, ['!', '92/5', '18']);
  TestNumFmt({LINENUM}63793, '18.4', nfFraction, 10, ['!', '92/5', '18.4']);
  TestNumFmt({LINENUM}63794, '18.4', nfFraction, 20, ['!', '92/5', '18.4']);
  TestNumFmt({LINENUM}63795, '18.4', nfFraction, 100, ['!', '92/5', '18.4']);
  TestNumFmt({LINENUM}63796, '18.4', nfFraction, 1000, ['!', '92/5', '18.4']);

  TestNumFmt({LINENUM}63798, '18.4', nfFixed,     ['!', '18.400000000000']);
  TestNumFmt({LINENUM}63799, '18.4', nfFixed, 0, ['!', '18']);
  TestNumFmt({LINENUM}63800, '18.4', nfFixed, 1, ['!', '18.4']);
  TestNumFmt({LINENUM}63801, '18.4', nfFixed, 2, ['!', '18.40']);
  TestNumFmt({LINENUM}63802, '18.4', nfFixed, 5, ['!', '18.40000']);
  TestNumFmt({LINENUM}63803, '18.4', nfFixed, 10, ['!', '18.4000000000']);
  TestNumFmt({LINENUM}63804, '18.4', nfFixed, 12, ['!', '18.400000000000']);
  TestNumFmt({LINENUM}63805, '18.4', nfFixed, 15, ['!', '18.400000000000000']);
  TestNumFmt({LINENUM}63806, '18.4', nfFixed, 50, ['!', '18.40000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63807, '18.4', nfFixed, 100, ['!', '18.4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63809, '18.4', nfExponent,     ['!', '1.84000000000E1']);
  TestNumFmt({LINENUM}63810, '18.4', nfExponent, 1, ['!', '2E1', '1.8E1']);
  TestNumFmt({LINENUM}63811, '18.4', nfExponent, 2, ['!', '1.8E1']);
  TestNumFmt({LINENUM}63812, '18.4', nfExponent, 3, ['!', '1.84E1']);
  TestNumFmt({LINENUM}63813, '18.4', nfExponent, 5, ['!', '1.8400E1']);
  TestNumFmt({LINENUM}63814, '18.4', nfExponent, 10, ['!', '1.840000000E1']);
  TestNumFmt({LINENUM}63815, '18.4', nfExponent, 12, ['!', '1.84000000000E1']);
  TestNumFmt({LINENUM}63816, '18.4', nfExponent, 15, ['!', '1.84000000000000E1']);
  TestNumFmt({LINENUM}63817, '18.4', nfExponent, 50, ['!', '1.8400000000000000000000000000000000000000000000000E1', '*']);
  TestNumFmt({LINENUM}63818, '18.4', nfExponent, 100, ['!', '1.840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E1', '*']);

  // --

  TestNumFmt({LINENUM}63822, '0.5', nfDefault, ['!', '0.5']);
  TestNumFmt({LINENUM}63823, '0.5', nfDefault, 10, ['!', '0.5']);
  TestNumFmt({LINENUM}63824, '0.5', nfDefault, 20, ['!', '0.5']);
  TestNumFmt({LINENUM}63825, '0.5', nfDefault, 100, ['!', '0.5']);
  TestNumFmt({LINENUM}63826, '0.5', nfDefault, 1000, ['!', '0.5']);

  TestNumFmt({LINENUM}63828, '0.5', nfFraction, ['!', '1/2', '0.5']);
  TestNumFmt({LINENUM}63829, '0.5', nfFraction, 10, ['!', '1/2', '0.5']);
  TestNumFmt({LINENUM}63830, '0.5', nfFraction, 20, ['!', '1/2', '0.5']);
  TestNumFmt({LINENUM}63831, '0.5', nfFraction, 100, ['!', '1/2', '0.5']);
  TestNumFmt({LINENUM}63832, '0.5', nfFraction, 1000, ['!', '1/2', '0.5']);

  TestNumFmt({LINENUM}63834, '0.5', nfFixed,     ['!', '0.500000000000']);
  TestNumFmt({LINENUM}63835, '0.5', nfFixed, 5, ['!', '0.50000']);
  TestNumFmt({LINENUM}63836, '0.5', nfFixed, 10, ['!', '0.5000000000']);
  TestNumFmt({LINENUM}63837, '0.5', nfFixed, 12, ['!', '0.500000000000']);
  TestNumFmt({LINENUM}63838, '0.5', nfFixed, 15, ['!', '0.500000000000000']);
  TestNumFmt({LINENUM}63839, '0.5', nfFixed, 50, ['!', '0.50000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63840, '0.5', nfFixed, 100, ['!', '0.5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63842, '0.5', nfExponent,     ['!', '5.00000000000E-1']);
  TestNumFmt({LINENUM}63843, '0.5', nfExponent, 5, ['!', '5.0000E-1']);
  TestNumFmt({LINENUM}63844, '0.5', nfExponent, 10, ['!', '5.000000000E-1']);
  TestNumFmt({LINENUM}63845, '0.5', nfExponent, 12, ['!', '5.00000000000E-1']);
  TestNumFmt({LINENUM}63846, '0.5', nfExponent, 15, ['!', '5.00000000000000E-1']);
  TestNumFmt({LINENUM}63847, '0.5', nfExponent, 50, ['!', '5.0000000000000000000000000000000000000000000000000E-1', '*']);
  TestNumFmt({LINENUM}63848, '0.5', nfExponent, 100, ['!', '5.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-1', '*']);

  // --

  TestNumFmt({LINENUM}63852, '0.1', nfDefault, ['!', '0.1']);
  TestNumFmt({LINENUM}63853, '0.1', nfDefault, 10, ['!', '0.1']);
  TestNumFmt({LINENUM}63854, '0.1', nfDefault, 20, ['!', '0.1']);
  TestNumFmt({LINENUM}63855, '0.1', nfDefault, 100, ['!', '0.1']);
  TestNumFmt({LINENUM}63856, '0.1', nfDefault, 1000, ['!', '0.1']);

  TestNumFmt({LINENUM}63858, '0.1', nfFraction, ['!', '1/10', '0.1']);
  TestNumFmt({LINENUM}63859, '0.1', nfFraction, 10, ['!', '1/10', '0.1']);
  TestNumFmt({LINENUM}63860, '0.1', nfFraction, 20, ['!', '1/10', '0.1']);
  TestNumFmt({LINENUM}63861, '0.1', nfFraction, 100, ['!', '1/10', '0.1']);
  TestNumFmt({LINENUM}63862, '0.1', nfFraction, 1000, ['!', '1/10', '0.1']);

  TestNumFmt({LINENUM}63864, '0.1', nfFixed,     ['!', '0.100000000000']);
  TestNumFmt({LINENUM}63865, '0.1', nfFixed, 5, ['!', '0.10000']);
  TestNumFmt({LINENUM}63866, '0.1', nfFixed, 10, ['!', '0.1000000000']);
  TestNumFmt({LINENUM}63867, '0.1', nfFixed, 12, ['!', '0.100000000000']);
  TestNumFmt({LINENUM}63868, '0.1', nfFixed, 15, ['!', '0.100000000000000']);
  TestNumFmt({LINENUM}63869, '0.1', nfFixed, 50, ['!', '0.10000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63870, '0.1', nfFixed, 100, ['!', '0.1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63872, '0.1', nfExponent,     ['!', '1.00000000000E-1']);
  TestNumFmt({LINENUM}63873, '0.1', nfExponent, 5, ['!', '1.0000E-1']);
  TestNumFmt({LINENUM}63874, '0.1', nfExponent, 10, ['!', '1.000000000E-1']);
  TestNumFmt({LINENUM}63875, '0.1', nfExponent, 12, ['!', '1.00000000000E-1']);
  TestNumFmt({LINENUM}63876, '0.1', nfExponent, 15, ['!', '1.00000000000000E-1']);
  TestNumFmt({LINENUM}63877, '0.1', nfExponent, 50, ['!', '1.0000000000000000000000000000000000000000000000000E-1', '*']);
  TestNumFmt({LINENUM}63878, '0.1', nfExponent, 100, ['!', '1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-1', '*']);

  // --

  TestNumFmt({LINENUM}63882, '0.2', nfDefault, ['!', '0.2']);
  TestNumFmt({LINENUM}63883, '0.2', nfDefault, 10, ['!', '0.2']);
  TestNumFmt({LINENUM}63884, '0.2', nfDefault, 20, ['!', '0.2']);
  TestNumFmt({LINENUM}63885, '0.2', nfDefault, 100, ['!', '0.2']);
  TestNumFmt({LINENUM}63886, '0.2', nfDefault, 1000, ['!', '0.2']);

  TestNumFmt({LINENUM}63888, '0.2', nfFraction, ['!', '1/5', '0.2']);
  TestNumFmt({LINENUM}63889, '0.2', nfFraction, 10, ['!', '1/5', '0.2']);
  TestNumFmt({LINENUM}63890, '0.2', nfFraction, 20, ['!', '1/5', '0.2']);
  TestNumFmt({LINENUM}63891, '0.2', nfFraction, 100, ['!', '1/5', '0.2']);
  TestNumFmt({LINENUM}63892, '0.2', nfFraction, 1000, ['!', '1/5', '0.2']);

  TestNumFmt({LINENUM}63894, '0.2', nfFixed,     ['!', '0.200000000000']);
  TestNumFmt({LINENUM}63895, '0.2', nfFixed, 5, ['!', '0.20000']);
  TestNumFmt({LINENUM}63896, '0.2', nfFixed, 10, ['!', '0.2000000000']);
  TestNumFmt({LINENUM}63897, '0.2', nfFixed, 12, ['!', '0.200000000000']);
  TestNumFmt({LINENUM}63898, '0.2', nfFixed, 15, ['!', '0.200000000000000']);
  TestNumFmt({LINENUM}63899, '0.2', nfFixed, 50, ['!', '0.20000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63900, '0.2', nfFixed, 100, ['!', '0.2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63902, '0.2', nfExponent,     ['!', '2.00000000000E-1']);
  TestNumFmt({LINENUM}63903, '0.2', nfExponent, 5, ['!', '2.0000E-1']);
  TestNumFmt({LINENUM}63904, '0.2', nfExponent, 10, ['!', '2.000000000E-1']);
  TestNumFmt({LINENUM}63905, '0.2', nfExponent, 12, ['!', '2.00000000000E-1']);
  TestNumFmt({LINENUM}63906, '0.2', nfExponent, 15, ['!', '2.00000000000000E-1']);
  TestNumFmt({LINENUM}63907, '0.2', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-1', '*']);
  TestNumFmt({LINENUM}63908, '0.2', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-1', '*']);

  // --

  TestNumFmt({LINENUM}63912, '0.25', nfDefault, ['!', '0.25']);
  TestNumFmt({LINENUM}63913, '0.25', nfDefault, 10, ['!', '0.25']);
  TestNumFmt({LINENUM}63914, '0.25', nfDefault, 20, ['!', '0.25']);
  TestNumFmt({LINENUM}63915, '0.25', nfDefault, 100, ['!', '0.25']);
  TestNumFmt({LINENUM}63916, '0.25', nfDefault, 1000, ['!', '0.25']);

  TestNumFmt({LINENUM}63918, '0.25', nfFraction, ['!', '1/4', '0.25']);
  TestNumFmt({LINENUM}63919, '0.25', nfFraction, 10, ['!', '1/4', '0.25']);
  TestNumFmt({LINENUM}63920, '0.25', nfFraction, 20, ['!', '1/4', '0.25']);
  TestNumFmt({LINENUM}63921, '0.25', nfFraction, 100, ['!', '1/4', '0.25']);
  TestNumFmt({LINENUM}63922, '0.25', nfFraction, 1000, ['!', '1/4', '0.25']);

  TestNumFmt({LINENUM}63924, '0.25', nfFixed,     ['!', '0.250000000000']);
  TestNumFmt({LINENUM}63925, '0.25', nfFixed, 5, ['!', '0.25000']);
  TestNumFmt({LINENUM}63926, '0.25', nfFixed, 10, ['!', '0.2500000000']);
  TestNumFmt({LINENUM}63927, '0.25', nfFixed, 12, ['!', '0.250000000000']);
  TestNumFmt({LINENUM}63928, '0.25', nfFixed, 15, ['!', '0.250000000000000']);
  TestNumFmt({LINENUM}63929, '0.25', nfFixed, 50, ['!', '0.25000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63930, '0.25', nfFixed, 100, ['!', '0.2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63932, '0.25', nfExponent,     ['!', '2.50000000000E-1']);
  TestNumFmt({LINENUM}63933, '0.25', nfExponent, 5, ['!', '2.5000E-1']);
  TestNumFmt({LINENUM}63934, '0.25', nfExponent, 10, ['!', '2.500000000E-1']);
  TestNumFmt({LINENUM}63935, '0.25', nfExponent, 12, ['!', '2.50000000000E-1']);
  TestNumFmt({LINENUM}63936, '0.25', nfExponent, 15, ['!', '2.50000000000000E-1']);
  TestNumFmt({LINENUM}63937, '0.25', nfExponent, 50, ['!', '2.5000000000000000000000000000000000000000000000000E-1', '*']);
  TestNumFmt({LINENUM}63938, '0.25', nfExponent, 100, ['!', '2.500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-1', '*']);

  // --

  TestNumFmt({LINENUM}63942, '0.02', nfDefault, ['!', '0.02']);
  TestNumFmt({LINENUM}63943, '0.02', nfDefault, 10, ['!', '0.02']);
  TestNumFmt({LINENUM}63944, '0.02', nfDefault, 20, ['!', '0.02']);
  TestNumFmt({LINENUM}63945, '0.02', nfDefault, 100, ['!', '0.02']);
  TestNumFmt({LINENUM}63946, '0.02', nfDefault, 1000, ['!', '0.02']);

  TestNumFmt({LINENUM}63948, '0.02', nfFraction, ['!', '1/50', '0.02']);
  TestNumFmt({LINENUM}63949, '0.02', nfFraction, 10, ['!', '1/50', '0.02']);
  TestNumFmt({LINENUM}63950, '0.02', nfFraction, 20, ['!', '1/50', '0.02']);
  TestNumFmt({LINENUM}63951, '0.02', nfFraction, 100, ['!', '1/50', '0.02']);
  TestNumFmt({LINENUM}63952, '0.02', nfFraction, 1000, ['!', '1/50', '0.02']);

  TestNumFmt({LINENUM}63954, '0.02', nfFixed,     ['!', '0.020000000000']);
  TestNumFmt({LINENUM}63955, '0.02', nfFixed, 5, ['!', '0.02000']);
  TestNumFmt({LINENUM}63956, '0.02', nfFixed, 10, ['!', '0.0200000000']);
  TestNumFmt({LINENUM}63957, '0.02', nfFixed, 12, ['!', '0.020000000000']);
  TestNumFmt({LINENUM}63958, '0.02', nfFixed, 15, ['!', '0.020000000000000']);
  TestNumFmt({LINENUM}63959, '0.02', nfFixed, 50, ['!', '0.02000000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63960, '0.02', nfFixed, 100, ['!', '0.0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63962, '0.02', nfExponent,     ['!', '2.00000000000E-2']);
  TestNumFmt({LINENUM}63963, '0.02', nfExponent, 5, ['!', '2.0000E-2']);
  TestNumFmt({LINENUM}63964, '0.02', nfExponent, 10, ['!', '2.000000000E-2']);
  TestNumFmt({LINENUM}63965, '0.02', nfExponent, 12, ['!', '2.00000000000E-2']);
  TestNumFmt({LINENUM}63966, '0.02', nfExponent, 15, ['!', '2.00000000000000E-2']);
  TestNumFmt({LINENUM}63967, '0.02', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-2', '*']);
  TestNumFmt({LINENUM}63968, '0.02', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-2', '*']);

  // --

  TestNumFmt({LINENUM}63972, '0.002', nfDefault, ['!', '0.002']);
  TestNumFmt({LINENUM}63973, '0.002', nfDefault, 10, ['!', '0.002']);
  TestNumFmt({LINENUM}63974, '0.002', nfDefault, 20, ['!', '0.002']);
  TestNumFmt({LINENUM}63975, '0.002', nfDefault, 100, ['!', '0.002']);
  TestNumFmt({LINENUM}63976, '0.002', nfDefault, 1000, ['!', '0.002']);

  TestNumFmt({LINENUM}63978, '0.002', nfFraction, ['!', '1/500', '0.002']);
  TestNumFmt({LINENUM}63979, '0.002', nfFraction, 10, ['!', '1/500', '0.002']);
  TestNumFmt({LINENUM}63980, '0.002', nfFraction, 20, ['!', '1/500', '0.002']);
  TestNumFmt({LINENUM}63981, '0.002', nfFraction, 100, ['!', '1/500', '0.002']);
  TestNumFmt({LINENUM}63982, '0.002', nfFraction, 1000, ['!', '1/500', '0.002']);

  TestNumFmt({LINENUM}63984, '0.002', nfFixed,     ['!', '0.002000000000']);
  TestNumFmt({LINENUM}63985, '0.002', nfFixed, 5, ['!', '0.00200']);
  TestNumFmt({LINENUM}63986, '0.002', nfFixed, 10, ['!', '0.0020000000']);
  TestNumFmt({LINENUM}63987, '0.002', nfFixed, 12, ['!', '0.002000000000']);
  TestNumFmt({LINENUM}63988, '0.002', nfFixed, 15, ['!', '0.002000000000000']);
  TestNumFmt({LINENUM}63989, '0.002', nfFixed, 50, ['!', '0.00200000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}63990, '0.002', nfFixed, 100, ['!', '0.0020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}63992, '0.002', nfExponent,     ['!', '2.00000000000E-3']);
  TestNumFmt({LINENUM}63993, '0.002', nfExponent, 5, ['!', '2.0000E-3']);
  TestNumFmt({LINENUM}63994, '0.002', nfExponent, 10, ['!', '2.000000000E-3']);
  TestNumFmt({LINENUM}63995, '0.002', nfExponent, 12, ['!', '2.00000000000E-3']);
  TestNumFmt({LINENUM}63996, '0.002', nfExponent, 15, ['!', '2.00000000000000E-3']);
  TestNumFmt({LINENUM}63997, '0.002', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-3', '*']);
  TestNumFmt({LINENUM}63998, '0.002', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-3', '*']);

  // --

  TestNumFmt({LINENUM}64002, '0.0002', nfDefault, ['!', '0.0002']);
  TestNumFmt({LINENUM}64003, '0.0002', nfDefault, 10, ['!', '0.0002']);
  TestNumFmt({LINENUM}64004, '0.0002', nfDefault, 20, ['!', '0.0002']);
  TestNumFmt({LINENUM}64005, '0.0002', nfDefault, 100, ['!', '0.0002']);
  TestNumFmt({LINENUM}64006, '0.0002', nfDefault, 1000, ['!', '0.0002']);

  TestNumFmt({LINENUM}64008, '0.0002', nfFraction, ['!', '1/5000', '0.0002']);
  TestNumFmt({LINENUM}64009, '0.0002', nfFraction, 10, ['!', '1/5000', '0.0002']);
  TestNumFmt({LINENUM}64010, '0.0002', nfFraction, 20, ['!', '1/5000', '0.0002']);
  TestNumFmt({LINENUM}64011, '0.0002', nfFraction, 100, ['!', '1/5000', '0.0002']);
  TestNumFmt({LINENUM}64012, '0.0002', nfFraction, 1000, ['!', '1/5000', '0.0002']);

  TestNumFmt({LINENUM}64014, '0.0002', nfFixed,     ['!', '0.000200000000']);
  TestNumFmt({LINENUM}64015, '0.0002', nfFixed, 5, ['!', '0.00020']);
  TestNumFmt({LINENUM}64016, '0.0002', nfFixed, 10, ['!', '0.0002000000']);
  TestNumFmt({LINENUM}64017, '0.0002', nfFixed, 12, ['!', '0.000200000000']);
  TestNumFmt({LINENUM}64018, '0.0002', nfFixed, 15, ['!', '0.000200000000000']);
  TestNumFmt({LINENUM}64019, '0.0002', nfFixed, 50, ['!', '0.00020000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64020, '0.0002', nfFixed, 100, ['!', '0.0002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64022, '0.0002', nfExponent,     ['!', '2.00000000000E-4']);
  TestNumFmt({LINENUM}64023, '0.0002', nfExponent, 5, ['!', '2.0000E-4']);
  TestNumFmt({LINENUM}64024, '0.0002', nfExponent, 10, ['!', '2.000000000E-4']);
  TestNumFmt({LINENUM}64025, '0.0002', nfExponent, 12, ['!', '2.00000000000E-4']);
  TestNumFmt({LINENUM}64026, '0.0002', nfExponent, 15, ['!', '2.00000000000000E-4']);
  TestNumFmt({LINENUM}64027, '0.0002', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-4', '*']);
  TestNumFmt({LINENUM}64028, '0.0002', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-4', '*']);

  // --

  TestNumFmt({LINENUM}64032, '0.00002', nfDefault, ['!', '2E-5']);
  TestNumFmt({LINENUM}64033, '0.00002', nfDefault, 10, ['!', '2E-5']);
  TestNumFmt({LINENUM}64034, '0.00002', nfDefault, 20, ['!', '2E-5']);
  TestNumFmt({LINENUM}64035, '0.00002', nfDefault, 100, ['!', '2E-5']);
  TestNumFmt({LINENUM}64036, '0.00002', nfDefault, 1000, ['!', '2E-5']);

  TestNumFmt({LINENUM}64038, '0.00002', nfFraction, ['!', '1/50000', '2E-5']);
  TestNumFmt({LINENUM}64039, '0.00002', nfFraction, 10, ['!', '1/50000', '2E-5']);
  TestNumFmt({LINENUM}64040, '0.00002', nfFraction, 20, ['!', '1/50000', '2E-5']);
  TestNumFmt({LINENUM}64041, '0.00002', nfFraction, 100, ['!', '1/50000', '2E-5']);
  TestNumFmt({LINENUM}64042, '0.00002', nfFraction, 1000, ['!', '1/50000', '2E-5']);

  TestNumFmt({LINENUM}64044, '0.00002', nfFixed,     ['!', '0.000020000000']);
  TestNumFmt({LINENUM}64045, '0.00002', nfFixed, 5, ['!', '0.00002']);
  TestNumFmt({LINENUM}64046, '0.00002', nfFixed, 10, ['!', '0.0000200000']);
  TestNumFmt({LINENUM}64047, '0.00002', nfFixed, 12, ['!', '0.000020000000']);
  TestNumFmt({LINENUM}64048, '0.00002', nfFixed, 15, ['!', '0.000020000000000']);
  TestNumFmt({LINENUM}64049, '0.00002', nfFixed, 50, ['!', '0.00002000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64050, '0.00002', nfFixed, 100, ['!', '0.0000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64052, '0.00002', nfExponent,     ['!', '2.00000000000E-5']);
  TestNumFmt({LINENUM}64053, '0.00002', nfExponent, 5, ['!', '2.0000E-5']);
  TestNumFmt({LINENUM}64054, '0.00002', nfExponent, 10, ['!', '2.000000000E-5']);
  TestNumFmt({LINENUM}64055, '0.00002', nfExponent, 12, ['!', '2.00000000000E-5']);
  TestNumFmt({LINENUM}64056, '0.00002', nfExponent, 15, ['!', '2.00000000000000E-5']);
  TestNumFmt({LINENUM}64057, '0.00002', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-5', '*']);
  TestNumFmt({LINENUM}64058, '0.00002', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-5', '*']);

  // --

  TestNumFmt({LINENUM}64062, '0.000002', nfDefault, ['!', '2E-6']);
  TestNumFmt({LINENUM}64063, '0.000002', nfDefault, 10, ['!', '2E-6']);
  TestNumFmt({LINENUM}64064, '0.000002', nfDefault, 20, ['!', '2E-6']);
  TestNumFmt({LINENUM}64065, '0.000002', nfDefault, 100, ['!', '2E-6']);
  TestNumFmt({LINENUM}64066, '0.000002', nfDefault, 1000, ['!', '2E-6']);

  TestNumFmt({LINENUM}64068, '0.000002', nfFraction, ['!', '1/500000', '2E-6']);
  TestNumFmt({LINENUM}64069, '0.000002', nfFraction, 10, ['!', '1/500000', '2E-6']);
  TestNumFmt({LINENUM}64070, '0.000002', nfFraction, 20, ['!', '1/500000', '2E-6']);
  TestNumFmt({LINENUM}64071, '0.000002', nfFraction, 100, ['!', '1/500000', '2E-6']);
  TestNumFmt({LINENUM}64072, '0.000002', nfFraction, 1000, ['!', '1/500000', '2E-6']);

  TestNumFmt({LINENUM}64074, '0.000002', nfFixed,     ['!', '0.000002000000']);
  TestNumFmt({LINENUM}64075, '0.000002', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64076, '0.000002', nfFixed, 10, ['!', '0.0000020000']);
  TestNumFmt({LINENUM}64077, '0.000002', nfFixed, 12, ['!', '0.000002000000']);
  TestNumFmt({LINENUM}64078, '0.000002', nfFixed, 15, ['!', '0.000002000000000']);
  TestNumFmt({LINENUM}64079, '0.000002', nfFixed, 50, ['!', '0.00000200000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64080, '0.000002', nfFixed, 100, ['!', '0.0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64082, '0.000002', nfExponent,     ['!', '2.00000000000E-6']);
  TestNumFmt({LINENUM}64083, '0.000002', nfExponent, 5, ['!', '2.0000E-6']);
  TestNumFmt({LINENUM}64084, '0.000002', nfExponent, 10, ['!', '2.000000000E-6']);
  TestNumFmt({LINENUM}64085, '0.000002', nfExponent, 12, ['!', '2.00000000000E-6']);
  TestNumFmt({LINENUM}64086, '0.000002', nfExponent, 15, ['!', '2.00000000000000E-6']);
  TestNumFmt({LINENUM}64087, '0.000002', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-6', '*']);
  TestNumFmt({LINENUM}64088, '0.000002', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-6', '*']);

  // --

  TestNumFmt({LINENUM}64092, '2/10000000', nfDefault, ['!', '2E-7']);
  TestNumFmt({LINENUM}64093, '2/10000000', nfDefault, 10, ['!', '2E-7']);
  TestNumFmt({LINENUM}64094, '2/10000000', nfDefault, 20, ['!', '2E-7']);
  TestNumFmt({LINENUM}64095, '2/10000000', nfDefault, 100, ['!', '2E-7']);
  TestNumFmt({LINENUM}64096, '2/10000000', nfDefault, 1000, ['!', '2E-7']);

  TestNumFmt({LINENUM}64098, '2/10000000', nfFraction, ['!', '1/5000000', '2E-7']);
  TestNumFmt({LINENUM}64099, '2/10000000', nfFraction, 10, ['!', '1/5000000', '2E-7']);
  TestNumFmt({LINENUM}64100, '2/10000000', nfFraction, 20, ['!', '1/5000000', '2E-7']);
  TestNumFmt({LINENUM}64101, '2/10000000', nfFraction, 100, ['!', '1/5000000', '2E-7']);
  TestNumFmt({LINENUM}64102, '2/10000000', nfFraction, 1000, ['!', '1/5000000', '2E-7']);

  TestNumFmt({LINENUM}64104, '2/10000000', nfFixed,     ['!', '0.000000200000']);
  TestNumFmt({LINENUM}64105, '2/10000000', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64106, '2/10000000', nfFixed, 10, ['!', '0.0000002000']);
  TestNumFmt({LINENUM}64107, '2/10000000', nfFixed, 12, ['!', '0.000000200000']);
  TestNumFmt({LINENUM}64108, '2/10000000', nfFixed, 15, ['!', '0.000000200000000']);
  TestNumFmt({LINENUM}64109, '2/10000000', nfFixed, 50, ['!', '0.00000020000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64110, '2/10000000', nfFixed, 100, ['!', '0.0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64112, '2/10000000', nfExponent,     ['!', '2.00000000000E-7']);
  TestNumFmt({LINENUM}64113, '2/10000000', nfExponent, 5, ['!', '2.0000E-7']);
  TestNumFmt({LINENUM}64114, '2/10000000', nfExponent, 10, ['!', '2.000000000E-7']);
  TestNumFmt({LINENUM}64115, '2/10000000', nfExponent, 12, ['!', '2.00000000000E-7']);
  TestNumFmt({LINENUM}64116, '2/10000000', nfExponent, 15, ['!', '2.00000000000000E-7']);
  TestNumFmt({LINENUM}64117, '2/10000000', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-7', '*']);
  TestNumFmt({LINENUM}64118, '2/10000000', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-7', '*']);

  // --

  TestNumFmt({LINENUM}64122, '2/100000000', nfDefault, ['!', '2E-8']);
  TestNumFmt({LINENUM}64123, '2/100000000', nfDefault, 10, ['!', '2E-8']);
  TestNumFmt({LINENUM}64124, '2/100000000', nfDefault, 20, ['!', '2E-8']);
  TestNumFmt({LINENUM}64125, '2/100000000', nfDefault, 100, ['!', '2E-8']);
  TestNumFmt({LINENUM}64126, '2/100000000', nfDefault, 1000, ['!', '2E-8']);

  TestNumFmt({LINENUM}64128, '2/100000000', nfFraction, ['!', '1/50000000', '2E-8']);
  TestNumFmt({LINENUM}64129, '2/100000000', nfFraction, 10, ['!', '1/50000000', '2E-8']);
  TestNumFmt({LINENUM}64130, '2/100000000', nfFraction, 20, ['!', '1/50000000', '2E-8']);
  TestNumFmt({LINENUM}64131, '2/100000000', nfFraction, 100, ['!', '1/50000000', '2E-8']);
  TestNumFmt({LINENUM}64132, '2/100000000', nfFraction, 1000, ['!', '1/50000000', '2E-8']);

  TestNumFmt({LINENUM}64134, '2/100000000', nfFixed,     ['!', '0.000000020000']);
  TestNumFmt({LINENUM}64135, '2/100000000', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64136, '2/100000000', nfFixed, 10, ['!', '0.0000000200']);
  TestNumFmt({LINENUM}64137, '2/100000000', nfFixed, 12, ['!', '0.000000020000']);
  TestNumFmt({LINENUM}64138, '2/100000000', nfFixed, 15, ['!', '0.000000020000000']);
  TestNumFmt({LINENUM}64139, '2/100000000', nfFixed, 50, ['!', '0.00000002000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64140, '2/100000000', nfFixed, 100, ['!', '0.0000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64142, '2/100000000', nfExponent,     ['!', '2.00000000000E-8']);
  TestNumFmt({LINENUM}64143, '2/100000000', nfExponent, 5, ['!', '2.0000E-8']);
  TestNumFmt({LINENUM}64144, '2/100000000', nfExponent, 10, ['!', '2.000000000E-8']);
  TestNumFmt({LINENUM}64145, '2/100000000', nfExponent, 12, ['!', '2.00000000000E-8']);
  TestNumFmt({LINENUM}64146, '2/100000000', nfExponent, 15, ['!', '2.00000000000000E-8']);
  TestNumFmt({LINENUM}64147, '2/100000000', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-8', '*']);
  TestNumFmt({LINENUM}64148, '2/100000000', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-8', '*']);

  // --

  TestNumFmt({LINENUM}64152, '2/1000000000', nfDefault, ['!', '2E-9']);
  TestNumFmt({LINENUM}64153, '2/1000000000', nfDefault, 10, ['!', '2E-9']);
  TestNumFmt({LINENUM}64154, '2/1000000000', nfDefault, 20, ['!', '2E-9']);
  TestNumFmt({LINENUM}64155, '2/1000000000', nfDefault, 100, ['!', '2E-9']);
  TestNumFmt({LINENUM}64156, '2/1000000000', nfDefault, 1000, ['!', '2E-9']);

  TestNumFmt({LINENUM}64158, '2/1000000000', nfFraction, ['!', '1/500000000', '2E-9']);
  TestNumFmt({LINENUM}64159, '2/1000000000', nfFraction, 10, ['!', '1/500000000', '2E-9']);
  TestNumFmt({LINENUM}64160, '2/1000000000', nfFraction, 20, ['!', '1/500000000', '2E-9']);
  TestNumFmt({LINENUM}64161, '2/1000000000', nfFraction, 100, ['!', '1/500000000', '2E-9']);
  TestNumFmt({LINENUM}64162, '2/1000000000', nfFraction, 1000, ['!', '1/500000000', '2E-9']);

  TestNumFmt({LINENUM}64164, '2/1000000000', nfFixed,     ['!', '0.000000002000']);
  TestNumFmt({LINENUM}64165, '2/1000000000', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64166, '2/1000000000', nfFixed, 10, ['!', '0.0000000020']);
  TestNumFmt({LINENUM}64167, '2/1000000000', nfFixed, 12, ['!', '0.000000002000']);
  TestNumFmt({LINENUM}64168, '2/1000000000', nfFixed, 15, ['!', '0.000000002000000']);
  TestNumFmt({LINENUM}64169, '2/1000000000', nfFixed, 50, ['!', '0.00000000200000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64170, '2/1000000000', nfFixed, 100, ['!', '0.0000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64172, '2/1000000000', nfExponent,     ['!', '2.00000000000E-9']);
  TestNumFmt({LINENUM}64173, '2/1000000000', nfExponent, 5, ['!', '2.0000E-9']);
  TestNumFmt({LINENUM}64174, '2/1000000000', nfExponent, 10, ['!', '2.000000000E-9']);
  TestNumFmt({LINENUM}64175, '2/1000000000', nfExponent, 12, ['!', '2.00000000000E-9']);
  TestNumFmt({LINENUM}64176, '2/1000000000', nfExponent, 15, ['!', '2.00000000000000E-9']);
  TestNumFmt({LINENUM}64177, '2/1000000000', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-9', '*']);
  TestNumFmt({LINENUM}64178, '2/1000000000', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-9', '*']);

  // --

  TestNumFmt({LINENUM}64182, '2/10000000000', nfDefault, ['!', '2E-10']);
  TestNumFmt({LINENUM}64183, '2/10000000000', nfDefault, 10, ['!', '2E-10']);
  TestNumFmt({LINENUM}64184, '2/10000000000', nfDefault, 20, ['!', '2E-10']);
  TestNumFmt({LINENUM}64185, '2/10000000000', nfDefault, 100, ['!', '2E-10']);
  TestNumFmt({LINENUM}64186, '2/10000000000', nfDefault, 1000, ['!', '2E-10']);

  TestNumFmt({LINENUM}64188, '2/10000000000', nfFraction, ['!', '1/5000000000', '2E-10']);
  TestNumFmt({LINENUM}64189, '2/10000000000', nfFraction, 10, ['!', '1/5000000000', '2E-10']);
  TestNumFmt({LINENUM}64190, '2/10000000000', nfFraction, 20, ['!', '1/5000000000', '2E-10']);
  TestNumFmt({LINENUM}64191, '2/10000000000', nfFraction, 100, ['!', '1/5000000000', '2E-10']);
  TestNumFmt({LINENUM}64192, '2/10000000000', nfFraction, 1000, ['!', '1/5000000000', '2E-10']);

  TestNumFmt({LINENUM}64194, '2/10000000000', nfFixed,     ['!', '0.000000000200']);
  TestNumFmt({LINENUM}64195, '2/10000000000', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64196, '2/10000000000', nfFixed, 10, ['!', '0.0000000002']);
  TestNumFmt({LINENUM}64197, '2/10000000000', nfFixed, 12, ['!', '0.000000000200']);
  TestNumFmt({LINENUM}64198, '2/10000000000', nfFixed, 15, ['!', '0.000000000200000']);
  TestNumFmt({LINENUM}64199, '2/10000000000', nfFixed, 50, ['!', '0.00000000020000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64200, '2/10000000000', nfFixed, 100, ['!', '0.0000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64202, '2/10000000000', nfExponent,     ['!', '2.00000000000E-10']);
  TestNumFmt({LINENUM}64203, '2/10000000000', nfExponent, 5, ['!', '2.0000E-10']);
  TestNumFmt({LINENUM}64204, '2/10000000000', nfExponent, 10, ['!', '2.000000000E-10']);
  TestNumFmt({LINENUM}64205, '2/10000000000', nfExponent, 12, ['!', '2.00000000000E-10']);
  TestNumFmt({LINENUM}64206, '2/10000000000', nfExponent, 15, ['!', '2.00000000000000E-10']);
  TestNumFmt({LINENUM}64207, '2/10000000000', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-10', '*']);
  TestNumFmt({LINENUM}64208, '2/10000000000', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-10', '*']);

  // --

  TestNumFmt({LINENUM}64212, '2/100000000000', nfDefault, ['!', '2E-11']);
  TestNumFmt({LINENUM}64213, '2/100000000000', nfDefault, 10, ['!', '2E-11']);
  TestNumFmt({LINENUM}64214, '2/100000000000', nfDefault, 20, ['!', '2E-11']);
  TestNumFmt({LINENUM}64215, '2/100000000000', nfDefault, 100, ['!', '2E-11']);
  TestNumFmt({LINENUM}64216, '2/100000000000', nfDefault, 1000, ['!', '2E-11']);

  TestNumFmt({LINENUM}64218, '2/100000000000', nfFraction, ['!', '1/50000000000', '2E-11']);
  TestNumFmt({LINENUM}64219, '2/100000000000', nfFraction, 10, ['!', '1/50000000000', '2E-11']);
  TestNumFmt({LINENUM}64220, '2/100000000000', nfFraction, 20, ['!', '1/50000000000', '2E-11']);
  TestNumFmt({LINENUM}64221, '2/100000000000', nfFraction, 100, ['!', '1/50000000000', '2E-11']);
  TestNumFmt({LINENUM}64222, '2/100000000000', nfFraction, 1000, ['!', '1/50000000000', '2E-11']);

  TestNumFmt({LINENUM}64224, '2/100000000000', nfFixed,     ['!', '0.000000000020']);
  TestNumFmt({LINENUM}64225, '2/100000000000', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64226, '2/100000000000', nfFixed, 10, ['!', '0.0000000000']);
  TestNumFmt({LINENUM}64227, '2/100000000000', nfFixed, 12, ['!', '0.000000000020']);
  TestNumFmt({LINENUM}64228, '2/100000000000', nfFixed, 15, ['!', '0.000000000020000']);
  TestNumFmt({LINENUM}64229, '2/100000000000', nfFixed, 50, ['!', '0.00000000002000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64230, '2/100000000000', nfFixed, 100, ['!', '0.0000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64232, '2/100000000000', nfExponent,     ['!', '2.00000000000E-11']);
  TestNumFmt({LINENUM}64233, '2/100000000000', nfExponent, 5, ['!', '2.0000E-11']);
  TestNumFmt({LINENUM}64234, '2/100000000000', nfExponent, 10, ['!', '2.000000000E-11']);
  TestNumFmt({LINENUM}64235, '2/100000000000', nfExponent, 12, ['!', '2.00000000000E-11']);
  TestNumFmt({LINENUM}64236, '2/100000000000', nfExponent, 15, ['!', '2.00000000000000E-11']);
  TestNumFmt({LINENUM}64237, '2/100000000000', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-11', '*']);
  TestNumFmt({LINENUM}64238, '2/100000000000', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-11', '*']);

  // --

  TestNumFmt({LINENUM}64242, '2/1000000000000', nfDefault, ['!', '2E-12']);
  TestNumFmt({LINENUM}64243, '2/1000000000000', nfDefault, 10, ['!', '2E-12']);
  TestNumFmt({LINENUM}64244, '2/1000000000000', nfDefault, 20, ['!', '2E-12']);
  TestNumFmt({LINENUM}64245, '2/1000000000000', nfDefault, 100, ['!', '2E-12']);
  TestNumFmt({LINENUM}64246, '2/1000000000000', nfDefault, 1000, ['!', '2E-12']);

  TestNumFmt({LINENUM}64248, '2/1000000000000', nfFraction, ['!', '1/500000000000', '2E-12']);
  TestNumFmt({LINENUM}64249, '2/1000000000000', nfFraction, 10, ['!', '1/500000000000', '2E-12']);
  TestNumFmt({LINENUM}64250, '2/1000000000000', nfFraction, 20, ['!', '1/500000000000', '2E-12']);
  TestNumFmt({LINENUM}64251, '2/1000000000000', nfFraction, 100, ['!', '1/500000000000', '2E-12']);
  TestNumFmt({LINENUM}64252, '2/1000000000000', nfFraction, 1000, ['!', '1/500000000000', '2E-12']);

  TestNumFmt({LINENUM}64254, '2/1000000000000', nfFixed,     ['!', '0.000000000002']);
  TestNumFmt({LINENUM}64255, '2/1000000000000', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64256, '2/1000000000000', nfFixed, 10, ['!', '0.0000000000']);
  TestNumFmt({LINENUM}64257, '2/1000000000000', nfFixed, 12, ['!', '0.000000000002']);
  TestNumFmt({LINENUM}64258, '2/1000000000000', nfFixed, 15, ['!', '0.000000000002000']);
  TestNumFmt({LINENUM}64259, '2/1000000000000', nfFixed, 50, ['!', '0.00000000000200000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64260, '2/1000000000000', nfFixed, 100, ['!', '0.0000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64262, '2/1000000000000', nfExponent,     ['!', '2.00000000000E-12']);
  TestNumFmt({LINENUM}64263, '2/1000000000000', nfExponent, 5, ['!', '2.0000E-12']);
  TestNumFmt({LINENUM}64264, '2/1000000000000', nfExponent, 10, ['!', '2.000000000E-12']);
  TestNumFmt({LINENUM}64265, '2/1000000000000', nfExponent, 12, ['!', '2.00000000000E-12']);
  TestNumFmt({LINENUM}64266, '2/1000000000000', nfExponent, 15, ['!', '2.00000000000000E-12']);
  TestNumFmt({LINENUM}64267, '2/1000000000000', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-12', '*']);
  TestNumFmt({LINENUM}64268, '2/1000000000000', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-12', '*']);

  // --

  TestNumFmt({LINENUM}64272, '2/10000000000000', nfDefault, ['!', '2E-13']);
  TestNumFmt({LINENUM}64273, '2/10000000000000', nfDefault, 10, ['!', '2E-13']);
  TestNumFmt({LINENUM}64274, '2/10000000000000', nfDefault, 20, ['!', '2E-13']);
  TestNumFmt({LINENUM}64275, '2/10000000000000', nfDefault, 100, ['!', '2E-13']);
  TestNumFmt({LINENUM}64276, '2/10000000000000', nfDefault, 1000, ['!', '2E-13']);

  TestNumFmt({LINENUM}64278, '2/10000000000000', nfFraction, ['!', '1/5000000000000', '2E-13']);
  TestNumFmt({LINENUM}64279, '2/10000000000000', nfFraction, 10, ['!', '1/5000000000000', '2E-13']);
  TestNumFmt({LINENUM}64280, '2/10000000000000', nfFraction, 20, ['!', '1/5000000000000', '2E-13']);
  TestNumFmt({LINENUM}64281, '2/10000000000000', nfFraction, 100, ['!', '1/5000000000000', '2E-13']);
  TestNumFmt({LINENUM}64282, '2/10000000000000', nfFraction, 1000, ['!', '1/5000000000000', '2E-13']);

  TestNumFmt({LINENUM}64284, '2/10000000000000', nfFixed,     ['!', '0.000000000000']);
  TestNumFmt({LINENUM}64285, '2/10000000000000', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64286, '2/10000000000000', nfFixed, 10, ['!', '0.0000000000']);
  TestNumFmt({LINENUM}64287, '2/10000000000000', nfFixed, 12, ['!', '0.000000000000']);
  TestNumFmt({LINENUM}64288, '2/10000000000000', nfFixed, 15, ['!', '0.000000000000200']);
  TestNumFmt({LINENUM}64289, '2/10000000000000', nfFixed, 50, ['!', '0.00000000000020000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64290, '2/10000000000000', nfFixed, 100, ['!', '0.0000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64292, '2/10000000000000', nfExponent,     ['!', '2.00000000000E-13']);
  TestNumFmt({LINENUM}64293, '2/10000000000000', nfExponent, 5, ['!', '2.0000E-13']);
  TestNumFmt({LINENUM}64294, '2/10000000000000', nfExponent, 10, ['!', '2.000000000E-13']);
  TestNumFmt({LINENUM}64295, '2/10000000000000', nfExponent, 12, ['!', '2.00000000000E-13']);
  TestNumFmt({LINENUM}64296, '2/10000000000000', nfExponent, 15, ['!', '2.00000000000000E-13']);
  TestNumFmt({LINENUM}64297, '2/10000000000000', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-13', '*']);
  TestNumFmt({LINENUM}64298, '2/10000000000000', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-13', '*']);

  // --

  TestNumFmt({LINENUM}64302, '2/100000000000000', nfDefault, ['!', '2E-14']);
  TestNumFmt({LINENUM}64303, '2/100000000000000', nfDefault, 10, ['!', '2E-14']);
  TestNumFmt({LINENUM}64304, '2/100000000000000', nfDefault, 20, ['!', '2E-14']);
  TestNumFmt({LINENUM}64305, '2/100000000000000', nfDefault, 100, ['!', '2E-14']);
  TestNumFmt({LINENUM}64306, '2/100000000000000', nfDefault, 1000, ['!', '2E-14']);

  TestNumFmt({LINENUM}64308, '2/100000000000000', nfFraction, ['!', '1/50000000000000', '2E-14']);
  TestNumFmt({LINENUM}64309, '2/100000000000000', nfFraction, 10, ['!', '1/50000000000000', '2E-14']);
  TestNumFmt({LINENUM}64310, '2/100000000000000', nfFraction, 20, ['!', '1/50000000000000', '2E-14']);
  TestNumFmt({LINENUM}64311, '2/100000000000000', nfFraction, 100, ['!', '1/50000000000000', '2E-14']);
  TestNumFmt({LINENUM}64312, '2/100000000000000', nfFraction, 1000, ['!', '1/50000000000000', '2E-14']);

  TestNumFmt({LINENUM}64314, '2/100000000000000', nfFixed,     ['!', '0.000000000000']);
  TestNumFmt({LINENUM}64315, '2/100000000000000', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64316, '2/100000000000000', nfFixed, 10, ['!', '0.0000000000']);
  TestNumFmt({LINENUM}64317, '2/100000000000000', nfFixed, 12, ['!', '0.000000000000']);
  TestNumFmt({LINENUM}64318, '2/100000000000000', nfFixed, 15, ['!', '0.000000000000020']);
  TestNumFmt({LINENUM}64319, '2/100000000000000', nfFixed, 50, ['!', '0.00000000000002000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64320, '2/100000000000000', nfFixed, 100, ['!', '0.0000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64322, '2/100000000000000', nfExponent,     ['!', '2.00000000000E-14']);
  TestNumFmt({LINENUM}64323, '2/100000000000000', nfExponent, 5, ['!', '2.0000E-14']);
  TestNumFmt({LINENUM}64324, '2/100000000000000', nfExponent, 10, ['!', '2.000000000E-14']);
  TestNumFmt({LINENUM}64325, '2/100000000000000', nfExponent, 12, ['!', '2.00000000000E-14']);
  TestNumFmt({LINENUM}64326, '2/100000000000000', nfExponent, 15, ['!', '2.00000000000000E-14']);
  TestNumFmt({LINENUM}64327, '2/100000000000000', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-14', '*']);
  TestNumFmt({LINENUM}64328, '2/100000000000000', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-14', '*']);

  // --

  TestNumFmt({LINENUM}64332, '2/1000000000000000', nfDefault, ['!', '2E-15']);
  TestNumFmt({LINENUM}64333, '2/1000000000000000', nfDefault, 10, ['!', '2E-15']);
  TestNumFmt({LINENUM}64334, '2/1000000000000000', nfDefault, 20, ['!', '2E-15']);
  TestNumFmt({LINENUM}64335, '2/1000000000000000', nfDefault, 100, ['!', '2E-15']);
  TestNumFmt({LINENUM}64336, '2/1000000000000000', nfDefault, 1000, ['!', '2E-15']);

  TestNumFmt({LINENUM}64338, '2/1000000000000000', nfFraction, ['!', '1/500000000000000', '2E-15']);
  TestNumFmt({LINENUM}64339, '2/1000000000000000', nfFraction, 10, ['!', '1/500000000000000', '2E-15']);
  TestNumFmt({LINENUM}64340, '2/1000000000000000', nfFraction, 20, ['!', '1/500000000000000', '2E-15']);
  TestNumFmt({LINENUM}64341, '2/1000000000000000', nfFraction, 100, ['!', '1/500000000000000', '2E-15']);
  TestNumFmt({LINENUM}64342, '2/1000000000000000', nfFraction, 1000, ['!', '1/500000000000000', '2E-15']);

  TestNumFmt({LINENUM}64344, '2/1000000000000000', nfFixed,     ['!', '0.000000000000']);
  TestNumFmt({LINENUM}64345, '2/1000000000000000', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64346, '2/1000000000000000', nfFixed, 10, ['!', '0.0000000000']);
  TestNumFmt({LINENUM}64347, '2/1000000000000000', nfFixed, 12, ['!', '0.000000000000']);
  TestNumFmt({LINENUM}64348, '2/1000000000000000', nfFixed, 15, ['!', '0.000000000000002']);
  TestNumFmt({LINENUM}64349, '2/1000000000000000', nfFixed, 50, ['!', '0.00000000000000200000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64350, '2/1000000000000000', nfFixed, 100, ['!', '0.0000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64352, '2/1000000000000000', nfExponent,     ['!', '2.00000000000E-15']);
  TestNumFmt({LINENUM}64353, '2/1000000000000000', nfExponent, 5, ['!', '2.0000E-15']);
  TestNumFmt({LINENUM}64354, '2/1000000000000000', nfExponent, 10, ['!', '2.000000000E-15']);
  TestNumFmt({LINENUM}64355, '2/1000000000000000', nfExponent, 12, ['!', '2.00000000000E-15']);
  TestNumFmt({LINENUM}64356, '2/1000000000000000', nfExponent, 15, ['!', '2.00000000000000E-15']);
  TestNumFmt({LINENUM}64357, '2/1000000000000000', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-15', '*']);
  TestNumFmt({LINENUM}64358, '2/1000000000000000', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-15', '*']);

  // --

  TestNumFmt({LINENUM}64362, '2/10000000000000000', nfDefault, ['!', '2E-16']);
  TestNumFmt({LINENUM}64363, '2/10000000000000000', nfDefault, 10, ['!', '2E-16']);
  TestNumFmt({LINENUM}64364, '2/10000000000000000', nfDefault, 20, ['!', '2E-16']);
  TestNumFmt({LINENUM}64365, '2/10000000000000000', nfDefault, 100, ['!', '2E-16']);
  TestNumFmt({LINENUM}64366, '2/10000000000000000', nfDefault, 1000, ['!', '2E-16']);

  TestNumFmt({LINENUM}64368, '2/10000000000000000', nfFraction, ['!', '1/5000000000000000', '2E-16']);
  TestNumFmt({LINENUM}64369, '2/10000000000000000', nfFraction, 10, ['!', '1/5000000000000000', '2E-16']);
  TestNumFmt({LINENUM}64370, '2/10000000000000000', nfFraction, 20, ['!', '1/5000000000000000', '2E-16']);
  TestNumFmt({LINENUM}64371, '2/10000000000000000', nfFraction, 100, ['!', '1/5000000000000000', '2E-16']);
  TestNumFmt({LINENUM}64372, '2/10000000000000000', nfFraction, 1000, ['!', '1/5000000000000000', '2E-16']);

  TestNumFmt({LINENUM}64374, '2/10000000000000000', nfFixed,     ['!', '0.000000000000']);
  TestNumFmt({LINENUM}64375, '2/10000000000000000', nfFixed, 5, ['!', '0.00000']);
  TestNumFmt({LINENUM}64376, '2/10000000000000000', nfFixed, 10, ['!', '0.0000000000']);
  TestNumFmt({LINENUM}64377, '2/10000000000000000', nfFixed, 12, ['!', '0.000000000000']);
  TestNumFmt({LINENUM}64378, '2/10000000000000000', nfFixed, 15, ['!', '0.000000000000000']);
  TestNumFmt({LINENUM}64379, '2/10000000000000000', nfFixed, 50, ['!', '0.00000000000000020000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64380, '2/10000000000000000', nfFixed, 100, ['!', '0.0000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64382, '2/10000000000000000', nfExponent,     ['!', '2.00000000000E-16']);
  TestNumFmt({LINENUM}64383, '2/10000000000000000', nfExponent, 5, ['!', '2.0000E-16']);
  TestNumFmt({LINENUM}64384, '2/10000000000000000', nfExponent, 10, ['!', '2.000000000E-16']);
  TestNumFmt({LINENUM}64385, '2/10000000000000000', nfExponent, 12, ['!', '2.00000000000E-16']);
  TestNumFmt({LINENUM}64386, '2/10000000000000000', nfExponent, 15, ['!', '2.00000000000000E-16']);
  TestNumFmt({LINENUM}64387, '2/10000000000000000', nfExponent, 50, ['!', '2.0000000000000000000000000000000000000000000000000E-16', '*']);
  TestNumFmt({LINENUM}64388, '2/10000000000000000', nfExponent, 100, ['!', '2.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-16', '*']);

  // --

  TestNumFmt({LINENUM}64392, '0.025', nfDefault, ['!', '0.025']);
  TestNumFmt({LINENUM}64393, '0.025', nfDefault, 10, ['!', '0.025']);
  TestNumFmt({LINENUM}64394, '0.025', nfDefault, 20, ['!', '0.025']);
  TestNumFmt({LINENUM}64395, '0.025', nfDefault, 100, ['!', '0.025']);
  TestNumFmt({LINENUM}64396, '0.025', nfDefault, 1000, ['!', '0.025']);

  TestNumFmt({LINENUM}64398, '0.025', nfFraction, ['!', '1/40', '0.025']);
  TestNumFmt({LINENUM}64399, '0.025', nfFraction, 10, ['!', '1/40', '0.025']);
  TestNumFmt({LINENUM}64400, '0.025', nfFraction, 20, ['!', '1/40', '0.025']);
  TestNumFmt({LINENUM}64401, '0.025', nfFraction, 100, ['!', '1/40', '0.025']);
  TestNumFmt({LINENUM}64402, '0.025', nfFraction, 1000, ['!', '1/40', '0.025']);

  TestNumFmt({LINENUM}64404, '0.025', nfFixed,     ['!', '0.025000000000']);
  TestNumFmt({LINENUM}64405, '0.025', nfFixed, 5, ['!', '0.02500']);
  TestNumFmt({LINENUM}64406, '0.025', nfFixed, 10, ['!', '0.0250000000']);
  TestNumFmt({LINENUM}64407, '0.025', nfFixed, 12, ['!', '0.025000000000']);
  TestNumFmt({LINENUM}64408, '0.025', nfFixed, 15, ['!', '0.025000000000000']);
  TestNumFmt({LINENUM}64409, '0.025', nfFixed, 50, ['!', '0.02500000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64410, '0.025', nfFixed, 100, ['!', '0.0250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}64412, '0.025', nfExponent,     ['!', '2.50000000000E-2']);
  TestNumFmt({LINENUM}64413, '0.025', nfExponent, 5, ['!', '2.5000E-2']);
  TestNumFmt({LINENUM}64414, '0.025', nfExponent, 10, ['!', '2.500000000E-2']);
  TestNumFmt({LINENUM}64415, '0.025', nfExponent, 12, ['!', '2.50000000000E-2']);
  TestNumFmt({LINENUM}64416, '0.025', nfExponent, 15, ['!', '2.50000000000000E-2']);
  TestNumFmt({LINENUM}64417, '0.025', nfExponent, 50, ['!', '2.5000000000000000000000000000000000000000000000000E-2', '*']);
  TestNumFmt({LINENUM}64418, '0.025', nfExponent, 100, ['!', '2.500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-2', '*']);

  // --

  TestNumFmt({LINENUM}64422, '1/3', nfDefault, ['!', '0.333333333333']);
  TestNumFmt({LINENUM}64423, '1/3', nfDefault, 5, ['!', '0.33333']);
  TestNumFmt({LINENUM}64424, '1/3', nfDefault, 10, ['!', '0.3333333333']);
  TestNumFmt({LINENUM}64425, '1/3', nfDefault, 20, ['!', '0.33333333333333333333', '*']);
  TestNumFmt({LINENUM}64426, '1/3', nfDefault, 100, ['!', '0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333', '*']);
  TestNumFmt({LINENUM}64427, '1/3', nfDefault, 1000, ['!', '0.' + StringOfChar('3', 1000), '*']);

  TestNumFmt({LINENUM}64429, '1/3', nfFraction, ['!', '1/3', '0.333333333333']);
  TestNumFmt({LINENUM}64430, '1/3', nfFraction, 5, ['!', '1/3', '0.33333']);
  TestNumFmt({LINENUM}64431, '1/3', nfFraction, 10, ['!', '1/3', '0.3333333333']);
  TestNumFmt({LINENUM}64432, '1/3', nfFraction, 20, ['!', '1/3', '*']);
  TestNumFmt({LINENUM}64433, '1/3', nfFraction, 100, ['!', '1/3', '*']);
  TestNumFmt({LINENUM}64434, '1/3', nfFraction, 1000, ['!', '1/3', '*']);

  TestNumFmt({LINENUM}64436, '1/3', nfFixed,     ['!', '0.333333333333']);
  TestNumFmt({LINENUM}64437, '1/3', nfFixed, 5, ['!', '0.33333']);
  TestNumFmt({LINENUM}64438, '1/3', nfFixed, 10, ['!', '0.3333333333']);
  TestNumFmt({LINENUM}64439, '1/3', nfFixed, 12, ['!', '0.333333333333']);
  TestNumFmt({LINENUM}64440, '1/3', nfFixed, 15, ['!', '0.333333333333333']);
  TestNumFmt({LINENUM}64441, '1/3', nfFixed, 50, ['!', '0.33333333333333333333333333333333333333333333333333', '*']);
  TestNumFmt({LINENUM}64442, '1/3', nfFixed, 100, ['!', '0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333', '*']);

  TestNumFmt({LINENUM}64444, '1/3', nfExponent,     ['!', '3.33333333333E-1']);
  TestNumFmt({LINENUM}64445, '1/3', nfExponent, 5, ['!', '3.3333E-1']);
  TestNumFmt({LINENUM}64446, '1/3', nfExponent, 10, ['!', '3.333333333E-1']);
  TestNumFmt({LINENUM}64447, '1/3', nfExponent, 12, ['!', '3.33333333333E-1']);
  TestNumFmt({LINENUM}64448, '1/3', nfExponent, 15, ['!', '3.33333333333333E-1']);
  TestNumFmt({LINENUM}64449, '1/3', nfExponent, 50, ['!', '3.3333333333333333333333333333333333333333333333333E-1', '*']);
  TestNumFmt({LINENUM}64450, '1/3', nfExponent, 100, ['!', '3.333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333E-1', '*']);

  // --

  TestNumFmt({LINENUM}64454, '2/3', nfDefault, ['!', '0.666666666667']);
  TestNumFmt({LINENUM}64455, '2/3', nfDefault, 5, ['!', '0.66667']);
  TestNumFmt({LINENUM}64456, '2/3', nfDefault, 10, ['!', '0.6666666667']);
  TestNumFmt({LINENUM}64457, '2/3', nfDefault, 20, ['!', '0.66666666666666666667', '*']);
  TestNumFmt({LINENUM}64458, '2/3', nfDefault, 100, ['!', '0.6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667', '*']);
  TestNumFmt({LINENUM}64459, '2/3', nfDefault, 1000, ['!', '0.' + StringOfChar('6', 999) + '7', '*']);

  TestNumFmt({LINENUM}64461, '2/3', nfFraction, ['!', '2/3', '0.666666666667']);
  TestNumFmt({LINENUM}64462, '2/3', nfFraction, 5, ['!', '2/3', '0.66667']);
  TestNumFmt({LINENUM}64463, '2/3', nfFraction, 10, ['!', '2/3', '0.6666666667']);
  TestNumFmt({LINENUM}64464, '2/3', nfFraction, 20, ['!', '2/3', '*']);
  TestNumFmt({LINENUM}64465, '2/3', nfFraction, 100, ['!', '2/3', '*']);
  TestNumFmt({LINENUM}64466, '2/3', nfFraction, 1000, ['!', '2/3', '*']);

  TestNumFmt({LINENUM}64468, '2/3', nfFixed,     ['!', '0.666666666667']);
  TestNumFmt({LINENUM}64469, '2/3', nfFixed, 5, ['!', '0.66667']);
  TestNumFmt({LINENUM}64470, '2/3', nfFixed, 10, ['!', '0.6666666667']);
  TestNumFmt({LINENUM}64471, '2/3', nfFixed, 12, ['!', '0.666666666667']);
  TestNumFmt({LINENUM}64472, '2/3', nfFixed, 15, ['!', '0.666666666666667']);
  TestNumFmt({LINENUM}64473, '2/3', nfFixed, 50, ['!', '0.66666666666666666666666666666666666666666666666667', '*']);
  TestNumFmt({LINENUM}64474, '2/3', nfFixed, 100, ['!', '0.6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667', '*']);

  TestNumFmt({LINENUM}64476, '2/3', nfExponent,     ['!', '6.66666666667E-1']);
  TestNumFmt({LINENUM}64477, '2/3', nfExponent, 5, ['!', '6.6667E-1']);
  TestNumFmt({LINENUM}64478, '2/3', nfExponent, 10, ['!', '6.666666667E-1']);
  TestNumFmt({LINENUM}64479, '2/3', nfExponent, 12, ['!', '6.66666666667E-1']);
  TestNumFmt({LINENUM}64480, '2/3', nfExponent, 15, ['!', '6.66666666666667E-1']);
  TestNumFmt({LINENUM}64481, '2/3', nfExponent, 50, ['!', '6.6666666666666666666666666666666666666666666666667E-1', '*']);
  TestNumFmt({LINENUM}64482, '2/3', nfExponent, 100, ['!', '6.666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667E-1', '*']);

  // --

  TestNumFmt({LINENUM}64486, '100/3', nfDefault, ['!', '33.3333333333']);
  TestNumFmt({LINENUM}64487, '100/3', nfDefault, 1, ['!', '3E1', '33']);
  TestNumFmt({LINENUM}64488, '100/3', nfDefault, 2, ['!', '33']);
  TestNumFmt({LINENUM}64489, '100/3', nfDefault, 3, ['!', '33.3']);
  TestNumFmt({LINENUM}64490, '100/3', nfDefault, 4, ['!', '33.33']);
  TestNumFmt({LINENUM}64491, '100/3', nfDefault, 5, ['!', '33.333']);
  TestNumFmt({LINENUM}64492, '100/3', nfDefault, 10, ['!', '33.33333333']);
  TestNumFmt({LINENUM}64493, '100/3', nfDefault, 20, ['!', '33.333333333333333333', '*']);
  TestNumFmt({LINENUM}64494, '100/3', nfDefault, 100, ['!', '33.33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333', '*']);
  TestNumFmt({LINENUM}64495, '100/3', nfDefault, 1000, ['!', '33.' + StringOfChar('3', 1000 - 2), '*']);

  TestNumFmt({LINENUM}64497, '100/3', nfFraction, ['!', '100/3', '33.3333333333']);
  TestNumFmt({LINENUM}64498, '100/3', nfFraction, 1, ['!', '100/3', '33']);
  TestNumFmt({LINENUM}64499, '100/3', nfFraction, 2, ['!', '100/3', '33']);
  TestNumFmt({LINENUM}64500, '100/3', nfFraction, 3, ['!', '100/3', '33.3']);
  TestNumFmt({LINENUM}64501, '100/3', nfFraction, 4, ['!', '100/3', '33.33']);
  TestNumFmt({LINENUM}64502, '100/3', nfFraction, 5, ['!', '100/3', '33.333']);
  TestNumFmt({LINENUM}64503, '100/3', nfFraction, 10, ['!', '100/3', '33.33333333']);
  TestNumFmt({LINENUM}64504, '100/3', nfFraction, 20, ['!', '100/3', '*']);
  TestNumFmt({LINENUM}64505, '100/3', nfFraction, 100, ['!', '100/3', '*']);
  TestNumFmt({LINENUM}64506, '100/3', nfFraction, 1000, ['!', '100/3', '*']);

  TestNumFmt({LINENUM}64508, '100/3', nfFixed,     ['!', '33.333333333333']);
  TestNumFmt({LINENUM}64509, '100/3', nfFixed, 0, ['!', '33']);
  TestNumFmt({LINENUM}64510, '100/3', nfFixed, 1, ['!', '33.3']);
  TestNumFmt({LINENUM}64511, '100/3', nfFixed, 2, ['!', '33.33']);
  TestNumFmt({LINENUM}64512, '100/3', nfFixed, 3, ['!', '33.333']);
  TestNumFmt({LINENUM}64513, '100/3', nfFixed, 4, ['!', '33.3333']);
  TestNumFmt({LINENUM}64514, '100/3', nfFixed, 5, ['!', '33.33333']);
  TestNumFmt({LINENUM}64515, '100/3', nfFixed, 10, ['!', '33.3333333333']);
  TestNumFmt({LINENUM}64516, '100/3', nfFixed, 12, ['!', '33.333333333333']);
  TestNumFmt({LINENUM}64517, '100/3', nfFixed, 15, ['!', '33.333333333333333']);
  TestNumFmt({LINENUM}64518, '100/3', nfFixed, 50, ['!', '33.33333333333333333333333333333333333333333333333333', '*']);
  TestNumFmt({LINENUM}64519, '100/3', nfFixed, 100, ['!', '33.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333', '*']);

  TestNumFmt({LINENUM}64521, '100/3', nfExponent,     ['!', '3.33333333333E1']);
  TestNumFmt({LINENUM}64522, '100/3', nfExponent, 1, ['!', '3E1', '3.3E1']);
  TestNumFmt({LINENUM}64523, '100/3', nfExponent, 2, ['!', '3.3E1']);
  TestNumFmt({LINENUM}64524, '100/3', nfExponent, 3, ['!', '3.33E1']);
  TestNumFmt({LINENUM}64525, '100/3', nfExponent, 4, ['!', '3.333E1']);
  TestNumFmt({LINENUM}64526, '100/3', nfExponent, 5, ['!', '3.3333E1']);
  TestNumFmt({LINENUM}64527, '100/3', nfExponent, 10, ['!', '3.333333333E1']);
  TestNumFmt({LINENUM}64528, '100/3', nfExponent, 12, ['!', '3.33333333333E1']);
  TestNumFmt({LINENUM}64529, '100/3', nfExponent, 15, ['!', '3.33333333333333E1']);
  TestNumFmt({LINENUM}64530, '100/3', nfExponent, 50, ['!', '3.3333333333333333333333333333333333333333333333333E1', '*']);
  TestNumFmt({LINENUM}64531, '100/3', nfExponent, 100, ['!', '3.333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333E1', '*']);

  // --

  TestNumFmt({LINENUM}64535, '200/3', nfDefault, ['!', '66.6666666667']);
  TestNumFmt({LINENUM}64536, '200/3', nfDefault, 1, ['!', '7E1', '67']);
  TestNumFmt({LINENUM}64537, '200/3', nfDefault, 2, ['!', '67']);
  TestNumFmt({LINENUM}64538, '200/3', nfDefault, 3, ['!', '66.7']);
  TestNumFmt({LINENUM}64539, '200/3', nfDefault, 4, ['!', '66.67']);
  TestNumFmt({LINENUM}64540, '200/3', nfDefault, 5, ['!', '66.667']);
  TestNumFmt({LINENUM}64541, '200/3', nfDefault, 10, ['!', '66.66666667']);
  TestNumFmt({LINENUM}64542, '200/3', nfDefault, 20, ['!', '66.666666666666666667', '*']);
  TestNumFmt({LINENUM}64543, '200/3', nfDefault, 100, ['!', '66.66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667', '*']);
  TestNumFmt({LINENUM}64544, '200/3', nfDefault, 1000, ['!', '66.' + StringOfChar('6', 1000 - 2 - 1) + '7', '*']);

  TestNumFmt({LINENUM}64546, '200/3', nfFraction, ['!', '200/3', '66.6666666667']);
  TestNumFmt({LINENUM}64547, '200/3', nfFraction, 1, ['!', '200/3', '67']);
  TestNumFmt({LINENUM}64548, '200/3', nfFraction, 2, ['!', '200/3', '67']);
  TestNumFmt({LINENUM}64549, '200/3', nfFraction, 3, ['!', '200/3', '66.7']);
  TestNumFmt({LINENUM}64550, '200/3', nfFraction, 4, ['!', '200/3', '66.67']);
  TestNumFmt({LINENUM}64551, '200/3', nfFraction, 5, ['!', '200/3', '66.667']);
  TestNumFmt({LINENUM}64552, '200/3', nfFraction, 10, ['!', '200/3', '66.66666667']);
  TestNumFmt({LINENUM}64553, '200/3', nfFraction, 20, ['!', '200/3', '*']);
  TestNumFmt({LINENUM}64554, '200/3', nfFraction, 100, ['!', '200/3', '*']);
  TestNumFmt({LINENUM}64555, '200/3', nfFraction, 1000, ['!', '200/3', '*']);

  TestNumFmt({LINENUM}64557, '200/3', nfFixed,     ['!', '66.666666666667']);
  TestNumFmt({LINENUM}64558, '200/3', nfFixed, 0, ['!', '67']);
  TestNumFmt({LINENUM}64559, '200/3', nfFixed, 1, ['!', '66.7']);
  TestNumFmt({LINENUM}64560, '200/3', nfFixed, 2, ['!', '66.67']);
  TestNumFmt({LINENUM}64561, '200/3', nfFixed, 3, ['!', '66.667']);
  TestNumFmt({LINENUM}64562, '200/3', nfFixed, 4, ['!', '66.6667']);
  TestNumFmt({LINENUM}64563, '200/3', nfFixed, 5, ['!', '66.66667']);
  TestNumFmt({LINENUM}64564, '200/3', nfFixed, 10, ['!', '66.6666666667']);
  TestNumFmt({LINENUM}64565, '200/3', nfFixed, 12, ['!', '66.666666666667']);
  TestNumFmt({LINENUM}64566, '200/3', nfFixed, 15, ['!', '66.666666666666667']);
  TestNumFmt({LINENUM}64567, '200/3', nfFixed, 50, ['!', '66.66666666666666666666666666666666666666666666666667', '*']);
  TestNumFmt({LINENUM}64568, '200/3', nfFixed, 100, ['!', '66.6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667', '*']);

  TestNumFmt({LINENUM}64570, '200/3', nfExponent,     ['!', '6.66666666667E1']);
  TestNumFmt({LINENUM}64571, '200/3', nfExponent, 1, ['!', '7E1', '6.7E1']);
  TestNumFmt({LINENUM}64572, '200/3', nfExponent, 2, ['!', '6.7E1']);
  TestNumFmt({LINENUM}64573, '200/3', nfExponent, 3, ['!', '6.67E1']);
  TestNumFmt({LINENUM}64574, '200/3', nfExponent, 4, ['!', '6.667E1']);
  TestNumFmt({LINENUM}64575, '200/3', nfExponent, 5, ['!', '6.6667E1']);
  TestNumFmt({LINENUM}64576, '200/3', nfExponent, 10, ['!', '6.666666667E1']);
  TestNumFmt({LINENUM}64577, '200/3', nfExponent, 12, ['!', '6.66666666667E1']);
  TestNumFmt({LINENUM}64578, '200/3', nfExponent, 15, ['!', '6.66666666666667E1']);
  TestNumFmt({LINENUM}64579, '200/3', nfExponent, 50, ['!', '6.6666666666666666666666666666666666666666666666667E1', '*']);
  TestNumFmt({LINENUM}64580, '200/3', nfExponent, 100, ['!', '6.666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667E1', '*']);

  // --

  TestNumFmt({LINENUM}64584, '5.42832', nfDefault, ['!', '5.42832']);
  TestNumFmt({LINENUM}64585, '5.42832', nfDefault, 1, ['!', '5', '5.4']);
  TestNumFmt({LINENUM}64586, '5.42832', nfDefault, 2, ['!', '5.4']);
  TestNumFmt({LINENUM}64587, '5.42832', nfDefault, 3, ['!', '5.43']);
  TestNumFmt({LINENUM}64588, '5.42832', nfDefault, 4, ['!', '5.428']);
  TestNumFmt({LINENUM}64589, '5.42832', nfDefault, 5, ['!', '5.4283']);
  TestNumFmt({LINENUM}64590, '5.42832', nfDefault, 6, ['!', '5.42832']);
  TestNumFmt({LINENUM}64591, '5.42832', nfDefault, 10, ['!', '5.42832']);
  TestNumFmt({LINENUM}64592, '5.42832', nfDefault, 12, ['!', '5.42832']);
  TestNumFmt({LINENUM}64593, '5.42832', nfDefault, 50, ['!', '5.42832']);
  TestNumFmt({LINENUM}64594, '5.42832', nfDefault, 100, ['!', '5.42832']);
  TestNumFmt({LINENUM}64595, '5.42832', nfDefault, 1000, ['!', '5.42832']);

  TestNumFmt({LINENUM}64597, '5.42832', nfFraction, ['!', '33927/6250', '5.42832']);
  TestNumFmt({LINENUM}64598, '5.42832', nfFraction, 1, ['!', '33927/6250', '5.4']);
  TestNumFmt({LINENUM}64599, '5.42832', nfFraction, 2, ['!', '33927/6250', '5.4']);
  TestNumFmt({LINENUM}64600, '5.42832', nfFraction, 3, ['!', '33927/6250', '5.43']);
  TestNumFmt({LINENUM}64601, '5.42832', nfFraction, 4, ['!', '33927/6250', '5.428']);
  TestNumFmt({LINENUM}64602, '5.42832', nfFraction, 5, ['!', '33927/6250', '5.4283']);
  TestNumFmt({LINENUM}64603, '5.42832', nfFraction, 6, ['!', '33927/6250', '5.42832']);
  TestNumFmt({LINENUM}64604, '5.42832', nfFraction, 10, ['!', '33927/6250', '5.42832']);
  TestNumFmt({LINENUM}64605, '5.42832', nfFraction, 12, ['!', '33927/6250', '5.42832']);
  TestNumFmt({LINENUM}64606, '5.42832', nfFraction, 50, ['!', '33927/6250', '5.42832']);
  TestNumFmt({LINENUM}64607, '5.42832', nfFraction, 100, ['!', '33927/6250', '5.42832']);
  TestNumFmt({LINENUM}64608, '5.42832', nfFraction, 1000, ['!', '33927/6250', '5.42832']);

  TestNumFmt({LINENUM}64610, '5.42832', nfFixed, ['!', '5.428320000000']);
  TestNumFmt({LINENUM}64611, '5.42832', nfFixed, 0, ['!', '5']);
  TestNumFmt({LINENUM}64612, '5.42832', nfFixed, 1, ['!', '5.4']);
  TestNumFmt({LINENUM}64613, '5.42832', nfFixed, 2, ['!', '5.43']);
  TestNumFmt({LINENUM}64614, '5.42832', nfFixed, 3, ['!', '5.428']);
  TestNumFmt({LINENUM}64615, '5.42832', nfFixed, 4, ['!', '5.4283']);
  TestNumFmt({LINENUM}64616, '5.42832', nfFixed, 5, ['!', '5.42832']);
  TestNumFmt({LINENUM}64617, '5.42832', nfFixed, 6, ['!', '5.428320']);
  TestNumFmt({LINENUM}64618, '5.42832', nfFixed, 10, ['!', '5.4283200000']);
  TestNumFmt({LINENUM}64619, '5.42832', nfFixed, 12, ['!', '5.428320000000']);
  TestNumFmt({LINENUM}64620, '5.42832', nfFixed, 50, ['!', '5.42832000000000000000000000000000000000000000000000', '*']);
  TestNumFmt({LINENUM}64621, '5.42832', nfFixed, 100, ['!', '5.42832' + StringOfChar('0', 95), '*']);
  TestNumFmt({LINENUM}64622, '5.42832', nfFixed, 1000, ['!', '5.42832' + StringOfChar('0', 995), '*']);

  TestNumFmt({LINENUM}64624, '5.42832', nfExponent, ['!', '5.42832000000E0']);
  TestNumFmt({LINENUM}64625, '5.42832', nfExponent, 1, ['!', '5E0', '5.4E0']);
  TestNumFmt({LINENUM}64626, '5.42832', nfExponent, 2, ['!', '5.4E0']);
  TestNumFmt({LINENUM}64627, '5.42832', nfExponent, 3, ['!', '5.43E0']);
  TestNumFmt({LINENUM}64628, '5.42832', nfExponent, 4, ['!', '5.428E0']);
  TestNumFmt({LINENUM}64629, '5.42832', nfExponent, 5, ['!', '5.4283E0']);
  TestNumFmt({LINENUM}64630, '5.42832', nfExponent, 6, ['!', '5.42832E0']);
  TestNumFmt({LINENUM}64631, '5.42832', nfExponent, 10, ['!', '5.428320000E0']);
  TestNumFmt({LINENUM}64632, '5.42832', nfExponent, 12, ['!', '5.42832000000E0']);
  TestNumFmt({LINENUM}64633, '5.42832', nfExponent, 50, ['!', '5.4283200000000000000000000000000000000000000000000E0', '*']);
  TestNumFmt({LINENUM}64634, '5.42832', nfExponent, 100, ['!', '5.42832' + StringOfChar('0', 94) + 'E0', '*']);
  TestNumFmt({LINENUM}64635, '5.42832', nfExponent, 1000, ['!', '5.42832' + StringOfChar('0', 994) + 'E0', '*']);

  // --

  TestNumFmt({LINENUM}64639, '61.2187621', nfDefault, ['!', '61.2187621']);
  TestNumFmt({LINENUM}64640, '61.2187621', nfDefault, 1, ['!', '6E1', '61']);
  TestNumFmt({LINENUM}64641, '61.2187621', nfDefault, 2, ['!', '61']);
  TestNumFmt({LINENUM}64642, '61.2187621', nfDefault, 3, ['!', '61.2']);
  TestNumFmt({LINENUM}64643, '61.2187621', nfDefault, 4, ['!', '61.22']);
  TestNumFmt({LINENUM}64644, '61.2187621', nfDefault, 5, ['!', '61.219']);
  TestNumFmt({LINENUM}64645, '61.2187621', nfDefault, 6, ['!', '61.2188']);
  TestNumFmt({LINENUM}64646, '61.2187621', nfDefault, 7, ['!', '61.21876']);
  TestNumFmt({LINENUM}64647, '61.2187621', nfDefault, 8, ['!', '61.218762']);
  TestNumFmt({LINENUM}64648, '61.2187621', nfDefault, 9, ['!', '61.2187621']);
  TestNumFmt({LINENUM}64649, '61.2187621', nfDefault, 10, ['!', '61.2187621']);

  TestNumFmt({LINENUM}64651, '61.2187621', nfFraction, ['!', '612187621/10000000', '61.2187621']);
  TestNumFmt({LINENUM}64652, '61.2187621', nfFraction, 1, ['!', '612187621/10000000', '61']);
  TestNumFmt({LINENUM}64653, '61.2187621', nfFraction, 2, ['!', '612187621/10000000', '61']);
  TestNumFmt({LINENUM}64654, '61.2187621', nfFraction, 3, ['!', '612187621/10000000', '61.2']);
  TestNumFmt({LINENUM}64655, '61.2187621', nfFraction, 4, ['!', '612187621/10000000', '61.22']);
  TestNumFmt({LINENUM}64656, '61.2187621', nfFraction, 5, ['!', '612187621/10000000', '61.219']);
  TestNumFmt({LINENUM}64657, '61.2187621', nfFraction, 6, ['!', '612187621/10000000', '61.2188']);
  TestNumFmt({LINENUM}64658, '61.2187621', nfFraction, 7, ['!', '612187621/10000000', '61.21876']);
  TestNumFmt({LINENUM}64659, '61.2187621', nfFraction, 8, ['!', '612187621/10000000', '61.218762']);
  TestNumFmt({LINENUM}64660, '61.2187621', nfFraction, 9, ['!', '612187621/10000000', '61.2187621']);
  TestNumFmt({LINENUM}64661, '61.2187621', nfFraction, 10, ['!', '612187621/10000000', '61.2187621']);

  TestNumFmt({LINENUM}64663, '61.2187621', nfFixed, ['!', '61.218762100000']);
  TestNumFmt({LINENUM}64664, '61.2187621', nfFixed, 0, ['!', '61']);
  TestNumFmt({LINENUM}64665, '61.2187621', nfFixed, 1, ['!', '61.2']);
  TestNumFmt({LINENUM}64666, '61.2187621', nfFixed, 2, ['!', '61.22']);
  TestNumFmt({LINENUM}64667, '61.2187621', nfFixed, 3, ['!', '61.219']);
  TestNumFmt({LINENUM}64668, '61.2187621', nfFixed, 4, ['!', '61.2188']);
  TestNumFmt({LINENUM}64669, '61.2187621', nfFixed, 5, ['!', '61.21876']);
  TestNumFmt({LINENUM}64670, '61.2187621', nfFixed, 6, ['!', '61.218762']);
  TestNumFmt({LINENUM}64671, '61.2187621', nfFixed, 7, ['!', '61.2187621']);
  TestNumFmt({LINENUM}64672, '61.2187621', nfFixed, 8, ['!', '61.21876210']);
  TestNumFmt({LINENUM}64673, '61.2187621', nfFixed, 9, ['!', '61.218762100']);
  TestNumFmt({LINENUM}64674, '61.2187621', nfFixed, 10, ['!', '61.2187621000']);
  TestNumFmt({LINENUM}64675, '61.2187621', nfFixed, 12, ['!', '61.218762100000']);
  TestNumFmt({LINENUM}64676, '61.2187621', nfFixed, 20, ['!', '61.21876210000000000000', '*']);
  TestNumFmt({LINENUM}64677, '61.2187621', nfFixed, 30, ['!', '61.218762100000000000000000000000', '*']);

  TestNumFmt({LINENUM}64679, '61.2187621', nfExponent, ['!', '6.12187621000E1']);
  TestNumFmt({LINENUM}64680, '61.2187621', nfExponent, 1, ['!', '6E1', '6.1E1']);
  TestNumFmt({LINENUM}64681, '61.2187621', nfExponent, 2, ['!', '6.1E1']);
  TestNumFmt({LINENUM}64682, '61.2187621', nfExponent, 3, ['!', '6.12E1']);
  TestNumFmt({LINENUM}64683, '61.2187621', nfExponent, 4, ['!', '6.122E1']);
  TestNumFmt({LINENUM}64684, '61.2187621', nfExponent, 5, ['!', '6.1219E1']);
  TestNumFmt({LINENUM}64685, '61.2187621', nfExponent, 6, ['!', '6.12188E1']);
  TestNumFmt({LINENUM}64686, '61.2187621', nfExponent, 7, ['!', '6.121876E1']);
  TestNumFmt({LINENUM}64687, '61.2187621', nfExponent, 8, ['!', '6.1218762E1']);
  TestNumFmt({LINENUM}64688, '61.2187621', nfExponent, 9, ['!', '6.12187621E1']);
  TestNumFmt({LINENUM}64689, '61.2187621', nfExponent, 10, ['!', '6.121876210E1']);
  TestNumFmt({LINENUM}64690, '61.2187621', nfExponent, 12, ['!', '6.12187621000E1']);
  TestNumFmt({LINENUM}64691, '61.2187621', nfExponent, 20, ['!', '6.1218762100000000000E1', '*']);
  TestNumFmt({LINENUM}64692, '61.2187621', nfExponent, 30, ['!', '6.12187621000000000000000000000E1', '*']);

  // --

  TestNumFmt({LINENUM}64696, '512.69992', nfDefault, ['!', '512.69992']);
  TestNumFmt({LINENUM}64697, '512.69992', nfDefault, 1, ['!', '5E2', '5.1E2']);
  TestNumFmt({LINENUM}64698, '512.69992', nfDefault, 2, ['!', '5.1E2']);
  TestNumFmt({LINENUM}64699, '512.69992', nfDefault, 3, ['!', '513']);
  TestNumFmt({LINENUM}64700, '512.69992', nfDefault, 4, ['!', '512.7']);
  TestNumFmt({LINENUM}64701, '512.69992', nfDefault, 5, ['!', '512.7']);
  TestNumFmt({LINENUM}64702, '512.69992', nfDefault, 6, ['!', '512.7']);
  TestNumFmt({LINENUM}64703, '512.69992', nfDefault, 7, ['!', '512.6999']);
  TestNumFmt({LINENUM}64704, '512.69992', nfDefault, 8, ['!', '512.69992']);
  TestNumFmt({LINENUM}64705, '512.69992', nfDefault, 9, ['!', '512.69992']);
  TestNumFmt({LINENUM}64706, '512.69992', nfDefault, 10, ['!', '512.69992']);
  TestNumFmt({LINENUM}64707, '512.69992', nfDefault, 12, ['!', '512.69992']);
  TestNumFmt({LINENUM}64708, '512.69992', nfDefault, 20, ['!', '512.69992']);
  TestNumFmt({LINENUM}64709, '512.69992', nfDefault, 1000, ['!', '512.69992']);

  TestNumFmt({LINENUM}64711, '512.69992', nfFraction, ['!', '6408749/12500', '512.69992']);
  TestNumFmt({LINENUM}64712, '512.69992', nfFraction, 1, ['!', '6408749/12500', '5.1E2']);
  TestNumFmt({LINENUM}64713, '512.69992', nfFraction, 2, ['!', '6408749/12500', '5.1E2']);
  TestNumFmt({LINENUM}64714, '512.69992', nfFraction, 3, ['!', '6408749/12500', '513']);
  TestNumFmt({LINENUM}64715, '512.69992', nfFraction, 4, ['!', '6408749/12500', '512.7']);
  TestNumFmt({LINENUM}64716, '512.69992', nfFraction, 5, ['!', '6408749/12500', '512.7']);
  TestNumFmt({LINENUM}64717, '512.69992', nfFraction, 6, ['!', '6408749/12500', '512.7']);
  TestNumFmt({LINENUM}64718, '512.69992', nfFraction, 7, ['!', '6408749/12500', '512.6999']);
  TestNumFmt({LINENUM}64719, '512.69992', nfFraction, 8, ['!', '6408749/12500', '512.69992']);
  TestNumFmt({LINENUM}64720, '512.69992', nfFraction, 9, ['!', '6408749/12500', '512.69992']);
  TestNumFmt({LINENUM}64721, '512.69992', nfFraction, 10, ['!', '6408749/12500', '512.69992']);
  TestNumFmt({LINENUM}64722, '512.69992', nfFraction, 12, ['!', '6408749/12500', '512.69992']);
  TestNumFmt({LINENUM}64723, '512.69992', nfFraction, 20, ['!', '6408749/12500', '512.69992']);
  TestNumFmt({LINENUM}64724, '512.69992', nfFraction, 1000, ['!', '6408749/12500', '512.69992']);

  TestNumFmt({LINENUM}64726, '512.69992', nfFixed, ['!', '512.699920000000']);
  TestNumFmt({LINENUM}64727, '512.69992', nfFixed, 0, ['!', '513']);
  TestNumFmt({LINENUM}64728, '512.69992', nfFixed, 1, ['!', '512.7']);
  TestNumFmt({LINENUM}64729, '512.69992', nfFixed, 2, ['!', '512.70']);
  TestNumFmt({LINENUM}64730, '512.69992', nfFixed, 3, ['!', '512.700']);
  TestNumFmt({LINENUM}64731, '512.69992', nfFixed, 4, ['!', '512.6999']);
  TestNumFmt({LINENUM}64732, '512.69992', nfFixed, 5, ['!', '512.69992']);
  TestNumFmt({LINENUM}64733, '512.69992', nfFixed, 6, ['!', '512.699920']);
  TestNumFmt({LINENUM}64734, '512.69992', nfFixed, 7, ['!', '512.6999200']);
  TestNumFmt({LINENUM}64735, '512.69992', nfFixed, 8, ['!', '512.69992000']);
  TestNumFmt({LINENUM}64736, '512.69992', nfFixed, 9, ['!', '512.699920000']);
  TestNumFmt({LINENUM}64737, '512.69992', nfFixed, 10, ['!', '512.6999200000']);
  TestNumFmt({LINENUM}64738, '512.69992', nfFixed, 12, ['!', '512.699920000000']);
  TestNumFmt({LINENUM}64739, '512.69992', nfFixed, 20, ['!', '512.69992000000000000000', '*']);

  TestNumFmt({LINENUM}64741, '512.69992', nfExponent, ['!', '5.12699920000E2']);
  TestNumFmt({LINENUM}64742, '512.69992', nfExponent, 1, ['!', '5E2', '5.1E2']);
  TestNumFmt({LINENUM}64743, '512.69992', nfExponent, 2, ['!', '5.1E2']);
  TestNumFmt({LINENUM}64744, '512.69992', nfExponent, 3, ['!', '5.13E2']);
  TestNumFmt({LINENUM}64745, '512.69992', nfExponent, 4, ['!', '5.127E2']);
  TestNumFmt({LINENUM}64746, '512.69992', nfExponent, 5, ['!', '5.1270E2']);
  TestNumFmt({LINENUM}64747, '512.69992', nfExponent, 6, ['!', '5.12700E2']);
  TestNumFmt({LINENUM}64748, '512.69992', nfExponent, 7, ['!', '5.126999E2']);
  TestNumFmt({LINENUM}64749, '512.69992', nfExponent, 8, ['!', '5.1269992E2']);
  TestNumFmt({LINENUM}64750, '512.69992', nfExponent, 9, ['!', '5.12699920E2']);
  TestNumFmt({LINENUM}64751, '512.69992', nfExponent, 10, ['!', '5.126999200E2']);
  TestNumFmt({LINENUM}64752, '512.69992', nfExponent, 12, ['!', '5.12699920000E2']);
  TestNumFmt({LINENUM}64753, '512.69992', nfExponent, 20, ['!', '5.1269992000000000000E2', '*']);

  // --

  TestNumFmt({LINENUM}64757, '9999.9999', nfDefault, ['!', '9999.9999']);
  TestNumFmt({LINENUM}64758, '9999.9999', nfDefault, 1, ['!', '1E4']);
  TestNumFmt({LINENUM}64759, '9999.9999', nfDefault, 2, ['!', '1E4']);
  TestNumFmt({LINENUM}64760, '9999.9999', nfDefault, 3, ['!', '1E4']);
  TestNumFmt({LINENUM}64761, '9999.9999', nfDefault, 4, ['!', '1E4']);
  TestNumFmt({LINENUM}64762, '9999.9999', nfDefault, 5, ['!', '10000']);
  TestNumFmt({LINENUM}64763, '9999.9999', nfDefault, 6, ['!', '10000']);
  TestNumFmt({LINENUM}64764, '9999.9999', nfDefault, 7, ['!', '10000']);
  TestNumFmt({LINENUM}64765, '9999.9999', nfDefault, 8, ['!', '9999.9999']);
  TestNumFmt({LINENUM}64766, '9999.9999', nfDefault, 9, ['!', '9999.9999']);
  TestNumFmt({LINENUM}64767, '9999.9999', nfDefault, 10, ['!', '9999.9999']);
  TestNumFmt({LINENUM}64768, '9999.9999', nfDefault, 12, ['!', '9999.9999']);
  TestNumFmt({LINENUM}64769, '9999.9999', nfDefault, 20, ['!', '9999.9999']);
  TestNumFmt({LINENUM}64770, '9999.9999', nfDefault, 100, ['!', '9999.9999']);
  TestNumFmt({LINENUM}64771, '9999.9999', nfDefault, 1000, ['!', '9999.9999']);

  TestNumFmt({LINENUM}64773, '9999.9999', nfFraction, ['!', '99999999/10000', '9999.9999']);
  TestNumFmt({LINENUM}64774, '9999.9999', nfFraction, 1, ['!', '99999999/10000', '1E4']);
  TestNumFmt({LINENUM}64775, '9999.9999', nfFraction, 2, ['!', '99999999/10000', '1E4']);
  TestNumFmt({LINENUM}64776, '9999.9999', nfFraction, 3, ['!', '99999999/10000', '1E4']);
  TestNumFmt({LINENUM}64777, '9999.9999', nfFraction, 4, ['!', '99999999/10000', '1E4']);
  TestNumFmt({LINENUM}64778, '9999.9999', nfFraction, 5, ['!', '99999999/10000', '10000']);
  TestNumFmt({LINENUM}64779, '9999.9999', nfFraction, 6, ['!', '99999999/10000', '10000']);
  TestNumFmt({LINENUM}64780, '9999.9999', nfFraction, 7, ['!', '99999999/10000', '10000']);
  TestNumFmt({LINENUM}64781, '9999.9999', nfFraction, 8, ['!', '99999999/10000', '9999.9999']);
  TestNumFmt({LINENUM}64782, '9999.9999', nfFraction, 9, ['!', '99999999/10000', '9999.9999']);
  TestNumFmt({LINENUM}64783, '9999.9999', nfFraction, 10, ['!', '99999999/10000', '9999.9999']);
  TestNumFmt({LINENUM}64784, '9999.9999', nfFraction, 12, ['!', '99999999/10000', '9999.9999']);
  TestNumFmt({LINENUM}64785, '9999.9999', nfFraction, 20, ['!', '99999999/10000', '9999.9999']);
  TestNumFmt({LINENUM}64786, '9999.9999', nfFraction, 100, ['!', '99999999/10000', '9999.9999']);
  TestNumFmt({LINENUM}64787, '9999.9999', nfFraction, 1000, ['!', '99999999/10000', '9999.9999']);

  TestNumFmt({LINENUM}64789, '9999.9999', nfFixed, ['!', '9999.999900000000']);
  TestNumFmt({LINENUM}64790, '9999.9999', nfFixed, 0, ['!', '10000']);
  TestNumFmt({LINENUM}64791, '9999.9999', nfFixed, 1, ['!', '10000.0']);
  TestNumFmt({LINENUM}64792, '9999.9999', nfFixed, 2, ['!', '10000.00']);
  TestNumFmt({LINENUM}64793, '9999.9999', nfFixed, 3, ['!', '10000.000']);
  TestNumFmt({LINENUM}64794, '9999.9999', nfFixed, 4, ['!', '9999.9999']);
  TestNumFmt({LINENUM}64795, '9999.9999', nfFixed, 5, ['!', '9999.99990']);
  TestNumFmt({LINENUM}64796, '9999.9999', nfFixed, 6, ['!', '9999.999900']);
  TestNumFmt({LINENUM}64797, '9999.9999', nfFixed, 7, ['!', '9999.9999000']);
  TestNumFmt({LINENUM}64798, '9999.9999', nfFixed, 8, ['!', '9999.99990000']);
  TestNumFmt({LINENUM}64799, '9999.9999', nfFixed, 9, ['!', '9999.999900000']);
  TestNumFmt({LINENUM}64800, '9999.9999', nfFixed, 10, ['!', '9999.9999000000']);
  TestNumFmt({LINENUM}64801, '9999.9999', nfFixed, 12, ['!', '9999.999900000000']);
  TestNumFmt({LINENUM}64802, '9999.9999', nfFixed, 20, ['!', '9999.99990000000000000000', '*']);

  TestNumFmt({LINENUM}64804, '9999.9999', nfExponent, ['!', '9.99999990000E3']);
  TestNumFmt({LINENUM}64805, '9999.9999', nfExponent, 1, ['!', '1E4', '1.0E4']);
  TestNumFmt({LINENUM}64806, '9999.9999', nfExponent, 2, ['!', '1.0E4']);
  TestNumFmt({LINENUM}64807, '9999.9999', nfExponent, 3, ['!', '1.00E4']);
  TestNumFmt({LINENUM}64808, '9999.9999', nfExponent, 4, ['!', '1.000E4']);
  TestNumFmt({LINENUM}64809, '9999.9999', nfExponent, 5, ['!', '1.0000E4']);
  TestNumFmt({LINENUM}64810, '9999.9999', nfExponent, 6, ['!', '1.00000E4']);
  TestNumFmt({LINENUM}64811, '9999.9999', nfExponent, 7, ['!', '1.000000E4']);
  TestNumFmt({LINENUM}64812, '9999.9999', nfExponent, 8, ['!', '9.9999999E3']);
  TestNumFmt({LINENUM}64813, '9999.9999', nfExponent, 9, ['!', '9.99999990E3']);
  TestNumFmt({LINENUM}64814, '9999.9999', nfExponent, 10, ['!', '9.999999900E3']);
  TestNumFmt({LINENUM}64815, '9999.9999', nfExponent, 12, ['!', '9.99999990000E3']);
  TestNumFmt({LINENUM}64816, '9999.9999', nfExponent, 20, ['!', '9.9999999000000000000E3', '*']);

  // --

  TestNumFmt({LINENUM}64820, '9999', nfDefault, ['9999']);
  TestNumFmt({LINENUM}64821, '9999', nfDefault, 1, ['9999', '9999', '1E4']);
  TestNumFmt({LINENUM}64822, '9999', nfDefault, 2, ['9999', '9999', '1E4']);
  TestNumFmt({LINENUM}64823, '9999', nfDefault, 3, ['9999', '9999', '1E4']);
  TestNumFmt({LINENUM}64824, '9999', nfDefault, 4, ['9999']);
  TestNumFmt({LINENUM}64825, '9999', nfDefault, 6, ['9999']);
  TestNumFmt({LINENUM}64826, '9999', nfDefault, 10, ['9999']);
  TestNumFmt({LINENUM}64827, '9999', nfDefault, 12, ['9999']);
  TestNumFmt({LINENUM}64828, '9999', nfDefault, 20, ['9999']);

  TestNumFmt({LINENUM}64830, '9999', nfFraction, ['9999']);
  TestNumFmt({LINENUM}64831, '9999', nfFraction, 1, ['9999', '9999', '1E4']);
  TestNumFmt({LINENUM}64832, '9999', nfFraction, 2, ['9999', '9999', '1E4']);
  TestNumFmt({LINENUM}64833, '9999', nfFraction, 3, ['9999', '9999', '1E4']);
  TestNumFmt({LINENUM}64834, '9999', nfFraction, 4, ['9999']);
  TestNumFmt({LINENUM}64835, '9999', nfFraction, 6, ['9999']);
  TestNumFmt({LINENUM}64836, '9999', nfFraction, 10, ['9999']);
  TestNumFmt({LINENUM}64837, '9999', nfFraction, 12, ['9999']);
  TestNumFmt({LINENUM}64838, '9999', nfFraction, 20, ['9999']);

  TestNumFmt({LINENUM}64840, '9999', nfFixed, ['9999', '9999.000000000000']);
  TestNumFmt({LINENUM}64841, '9999', nfFixed, 0, ['9999', '9999']);
  TestNumFmt({LINENUM}64842, '9999', nfFixed, 1, ['9999', '9999.0']);
  TestNumFmt({LINENUM}64843, '9999', nfFixed, 2, ['9999', '9999.00']);
  TestNumFmt({LINENUM}64844, '9999', nfFixed, 3, ['9999', '9999.000']);
  TestNumFmt({LINENUM}64845, '9999', nfFixed, 4, ['9999', '9999.0000']);
  TestNumFmt({LINENUM}64846, '9999', nfFixed, 6, ['9999', '9999.000000']);
  TestNumFmt({LINENUM}64847, '9999', nfFixed, 10, ['9999', '9999.0000000000']);
  TestNumFmt({LINENUM}64848, '9999', nfFixed, 12, ['9999', '9999.000000000000']);
  TestNumFmt({LINENUM}64849, '9999', nfFixed, 20, ['9999', '9999.00000000000000000000', '*']);

  TestNumFmt({LINENUM}64851, '9999', nfExponent, ['9999', '9.99900000000E3']);
  TestNumFmt({LINENUM}64852, '9999', nfExponent, 1, ['9999', '1E4', '1.0E4']);
  TestNumFmt({LINENUM}64853, '9999', nfExponent, 2, ['9999', '1.0E4']);
  TestNumFmt({LINENUM}64854, '9999', nfExponent, 3, ['9999', '1.00E4']);
  TestNumFmt({LINENUM}64855, '9999', nfExponent, 4, ['9999', '9.999E3']);
  TestNumFmt({LINENUM}64856, '9999', nfExponent, 6, ['9999', '9.99900E3']);
  TestNumFmt({LINENUM}64857, '9999', nfExponent, 10, ['9999', '9.999000000E3']);
  TestNumFmt({LINENUM}64858, '9999', nfExponent, 12, ['9999', '9.99900000000E3']);
  TestNumFmt({LINENUM}64859, '9999', nfExponent, 20, ['9999', '9.9990000000000000000E3', '*']);

  // --

  TestNumFmt({LINENUM}64863, '999.9', nfDefault, ['!', '999.9']);
  TestNumFmt({LINENUM}64864, '999.9', nfDefault, 1, ['!', '1E3']);
  TestNumFmt({LINENUM}64865, '999.9', nfDefault, 2, ['!', '1E3']);
  TestNumFmt({LINENUM}64866, '999.9', nfDefault, 3, ['!', '1E3']);
  TestNumFmt({LINENUM}64867, '999.9', nfDefault, 4, ['!', '999.9']);
  TestNumFmt({LINENUM}64868, '999.9', nfDefault, 6, ['!', '999.9']);
  TestNumFmt({LINENUM}64869, '999.9', nfDefault, 10, ['!', '999.9']);
  TestNumFmt({LINENUM}64870, '999.9', nfDefault, 12, ['!', '999.9']);
  TestNumFmt({LINENUM}64871, '999.9', nfDefault, 20, ['!', '999.9']);

  TestNumFmt({LINENUM}64873, '999.9', nfFraction, ['!', '9999/10', '999.9']);
  TestNumFmt({LINENUM}64874, '999.9', nfFraction, 1, ['!', '9999/10', '1E3']);
  TestNumFmt({LINENUM}64875, '999.9', nfFraction, 2, ['!', '9999/10', '1E3']);
  TestNumFmt({LINENUM}64876, '999.9', nfFraction, 3, ['!', '9999/10', '1E3']);
  TestNumFmt({LINENUM}64877, '999.9', nfFraction, 4, ['!', '9999/10', '999.9']);
  TestNumFmt({LINENUM}64878, '999.9', nfFraction, 6, ['!', '9999/10', '999.9']);
  TestNumFmt({LINENUM}64879, '999.9', nfFraction, 10, ['!', '9999/10', '999.9']);
  TestNumFmt({LINENUM}64880, '999.9', nfFraction, 12, ['!', '9999/10', '999.9']);
  TestNumFmt({LINENUM}64881, '999.9', nfFraction, 20, ['!', '9999/10', '999.9']);

  TestNumFmt({LINENUM}64883, '999.9', nfFixed, ['!', '999.900000000000']);
  TestNumFmt({LINENUM}64884, '999.9', nfFixed, 0, ['!', '1000']);
  TestNumFmt({LINENUM}64885, '999.9', nfFixed, 1, ['!', '999.9']);
  TestNumFmt({LINENUM}64886, '999.9', nfFixed, 2, ['!', '999.90']);
  TestNumFmt({LINENUM}64887, '999.9', nfFixed, 3, ['!', '999.900']);
  TestNumFmt({LINENUM}64888, '999.9', nfFixed, 4, ['!', '999.9000']);
  TestNumFmt({LINENUM}64889, '999.9', nfFixed, 6, ['!', '999.900000']);
  TestNumFmt({LINENUM}64890, '999.9', nfFixed, 10, ['!', '999.9000000000']);
  TestNumFmt({LINENUM}64891, '999.9', nfFixed, 12, ['!', '999.900000000000']);
  TestNumFmt({LINENUM}64892, '999.9', nfFixed, 20, ['!', '999.90000000000000000000', '*']);

  TestNumFmt({LINENUM}64894, '999.9', nfExponent, ['!', '9.99900000000E2']);
  TestNumFmt({LINENUM}64895, '999.9', nfExponent, 1, ['!', '1E3', '1.0E3']);
  TestNumFmt({LINENUM}64896, '999.9', nfExponent, 2, ['!', '1.0E3']);
  TestNumFmt({LINENUM}64897, '999.9', nfExponent, 3, ['!', '1.00E3']);
  TestNumFmt({LINENUM}64898, '999.9', nfExponent, 4, ['!', '9.999E2']);
  TestNumFmt({LINENUM}64899, '999.9', nfExponent, 6, ['!', '9.99900E2']);
  TestNumFmt({LINENUM}64900, '999.9', nfExponent, 10, ['!', '9.999000000E2']);
  TestNumFmt({LINENUM}64901, '999.9', nfExponent, 12, ['!', '9.99900000000E2']);
  TestNumFmt({LINENUM}64902, '999.9', nfExponent, 20, ['!', '9.9990000000000000000E2', '*']);

  // --

  TestNumFmt({LINENUM}64906, '99.99', nfDefault, ['!', '99.99']);
  TestNumFmt({LINENUM}64907, '99.99', nfDefault, 1, ['!', '1E2']);
  TestNumFmt({LINENUM}64908, '99.99', nfDefault, 2, ['!', '1E2']);
  TestNumFmt({LINENUM}64909, '99.99', nfDefault, 3, ['!', '100']);
  TestNumFmt({LINENUM}64910, '99.99', nfDefault, 4, ['!', '99.99']);
  TestNumFmt({LINENUM}64911, '99.99', nfDefault, 6, ['!', '99.99']);
  TestNumFmt({LINENUM}64912, '99.99', nfDefault, 10, ['!', '99.99']);
  TestNumFmt({LINENUM}64913, '99.99', nfDefault, 12, ['!', '99.99']);
  TestNumFmt({LINENUM}64914, '99.99', nfDefault, 20, ['!', '99.99']);

  TestNumFmt({LINENUM}64916, '99.99', nfFraction, ['!', '9999/100', '99.99']);
  TestNumFmt({LINENUM}64917, '99.99', nfFraction, 1, ['!', '9999/100', '1E2']);
  TestNumFmt({LINENUM}64918, '99.99', nfFraction, 2, ['!', '9999/100', '1E2']);
  TestNumFmt({LINENUM}64919, '99.99', nfFraction, 3, ['!', '9999/100', '100']);
  TestNumFmt({LINENUM}64920, '99.99', nfFraction, 4, ['!', '9999/100', '99.99']);
  TestNumFmt({LINENUM}64921, '99.99', nfFraction, 6, ['!', '9999/100', '99.99']);
  TestNumFmt({LINENUM}64922, '99.99', nfFraction, 10, ['!', '9999/100', '99.99']);
  TestNumFmt({LINENUM}64923, '99.99', nfFraction, 12, ['!', '9999/100', '99.99']);
  TestNumFmt({LINENUM}64924, '99.99', nfFraction, 20, ['!', '9999/100', '99.99']);

  TestNumFmt({LINENUM}64926, '99.99', nfFixed, ['!', '99.990000000000']);
  TestNumFmt({LINENUM}64927, '99.99', nfFixed, 0, ['!', '100']);
  TestNumFmt({LINENUM}64928, '99.99', nfFixed, 1, ['!', '100.0']);
  TestNumFmt({LINENUM}64929, '99.99', nfFixed, 2, ['!', '99.99']);
  TestNumFmt({LINENUM}64930, '99.99', nfFixed, 3, ['!', '99.990']);
  TestNumFmt({LINENUM}64931, '99.99', nfFixed, 4, ['!', '99.9900']);
  TestNumFmt({LINENUM}64932, '99.99', nfFixed, 6, ['!', '99.990000']);
  TestNumFmt({LINENUM}64933, '99.99', nfFixed, 10, ['!', '99.9900000000']);
  TestNumFmt({LINENUM}64934, '99.99', nfFixed, 12, ['!', '99.990000000000']);
  TestNumFmt({LINENUM}64935, '99.99', nfFixed, 20, ['!', '99.99000000000000000000', '*']);

  TestNumFmt({LINENUM}64937, '99.99', nfExponent, ['!', '9.99900000000E1']);
  TestNumFmt({LINENUM}64938, '99.99', nfExponent, 1, ['!', '1E2', '1.0E2']);
  TestNumFmt({LINENUM}64939, '99.99', nfExponent, 2, ['!', '1.0E2']);
  TestNumFmt({LINENUM}64940, '99.99', nfExponent, 3, ['!', '1.00E2']);
  TestNumFmt({LINENUM}64941, '99.99', nfExponent, 4, ['!', '9.999E1']);
  TestNumFmt({LINENUM}64942, '99.99', nfExponent, 6, ['!', '9.99900E1']);
  TestNumFmt({LINENUM}64943, '99.99', nfExponent, 10, ['!', '9.999000000E1']);
  TestNumFmt({LINENUM}64944, '99.99', nfExponent, 12, ['!', '9.99900000000E1']);
  TestNumFmt({LINENUM}64945, '99.99', nfExponent, 20, ['!', '9.9990000000000000000E1', '*']);

  // --

  TestNumFmt({LINENUM}64949, '9.999', nfDefault, ['!', '9.999']);
  TestNumFmt({LINENUM}64950, '9.999', nfDefault, 1, ['!', '1E1', '10']);
  TestNumFmt({LINENUM}64951, '9.999', nfDefault, 2, ['!', '10']);
  TestNumFmt({LINENUM}64952, '9.999', nfDefault, 3, ['!', '10']);
  TestNumFmt({LINENUM}64953, '9.999', nfDefault, 4, ['!', '9.999']);
  TestNumFmt({LINENUM}64954, '9.999', nfDefault, 6, ['!', '9.999']);
  TestNumFmt({LINENUM}64955, '9.999', nfDefault, 10, ['!', '9.999']);
  TestNumFmt({LINENUM}64956, '9.999', nfDefault, 12, ['!', '9.999']);
  TestNumFmt({LINENUM}64957, '9.999', nfDefault, 20, ['!', '9.999']);

  TestNumFmt({LINENUM}64959, '9.999', nfFraction, ['!', '9999/1000', '9.999']);
  TestNumFmt({LINENUM}64960, '9.999', nfFraction, 1, ['!', '9999/1000', '10']);
  TestNumFmt({LINENUM}64961, '9.999', nfFraction, 2, ['!', '9999/1000', '10']);
  TestNumFmt({LINENUM}64962, '9.999', nfFraction, 3, ['!', '9999/1000', '10']);
  TestNumFmt({LINENUM}64963, '9.999', nfFraction, 4, ['!', '9999/1000', '9.999']);
  TestNumFmt({LINENUM}64964, '9.999', nfFraction, 6, ['!', '9999/1000', '9.999']);
  TestNumFmt({LINENUM}64965, '9.999', nfFraction, 10, ['!', '9999/1000', '9.999']);
  TestNumFmt({LINENUM}64966, '9.999', nfFraction, 12, ['!', '9999/1000', '9.999']);
  TestNumFmt({LINENUM}64967, '9.999', nfFraction, 20, ['!', '9999/1000', '9.999']);

  TestNumFmt({LINENUM}64969, '9.999', nfFixed, ['!', '9.999000000000']);
  TestNumFmt({LINENUM}64970, '9.999', nfFixed, 0, ['!', '10']);
  TestNumFmt({LINENUM}64971, '9.999', nfFixed, 1, ['!', '10.0']);
  TestNumFmt({LINENUM}64972, '9.999', nfFixed, 2, ['!', '10.00']);
  TestNumFmt({LINENUM}64973, '9.999', nfFixed, 3, ['!', '9.999']);
  TestNumFmt({LINENUM}64974, '9.999', nfFixed, 4, ['!', '9.9990']);
  TestNumFmt({LINENUM}64975, '9.999', nfFixed, 6, ['!', '9.999000']);
  TestNumFmt({LINENUM}64976, '9.999', nfFixed, 10, ['!', '9.9990000000']);
  TestNumFmt({LINENUM}64977, '9.999', nfFixed, 12, ['!', '9.999000000000']);
  TestNumFmt({LINENUM}64978, '9.999', nfFixed, 20, ['!', '9.99900000000000000000', '*']);

  TestNumFmt({LINENUM}64980, '9.999', nfExponent, ['!', '9.99900000000E0']);
  TestNumFmt({LINENUM}64981, '9.999', nfExponent, 1, ['!', '1E1', '1.0E1']);
  TestNumFmt({LINENUM}64982, '9.999', nfExponent, 2, ['!', '1.0E1']);
  TestNumFmt({LINENUM}64983, '9.999', nfExponent, 3, ['!', '1.00E1']);
  TestNumFmt({LINENUM}64984, '9.999', nfExponent, 4, ['!', '9.999E0']);
  TestNumFmt({LINENUM}64985, '9.999', nfExponent, 6, ['!', '9.99900E0']);
  TestNumFmt({LINENUM}64986, '9.999', nfExponent, 10, ['!', '9.999000000E0']);
  TestNumFmt({LINENUM}64987, '9.999', nfExponent, 12, ['!', '9.99900000000E0']);
  TestNumFmt({LINENUM}64988, '9.999', nfExponent, 20, ['!', '9.9990000000000000000E0', '*']);

  // --

  TestNumFmt({LINENUM}64992, '0.9999', nfDefault, ['!', '0.9999']);
  TestNumFmt({LINENUM}64993, '0.9999', nfDefault, 1, ['!', '1']);
  TestNumFmt({LINENUM}64994, '0.9999', nfDefault, 2, ['!', '1']);
  TestNumFmt({LINENUM}64995, '0.9999', nfDefault, 3, ['!', '1']);
  TestNumFmt({LINENUM}64996, '0.9999', nfDefault, 4, ['!', '0.9999']);
  TestNumFmt({LINENUM}64997, '0.9999', nfDefault, 6, ['!', '0.9999']);
  TestNumFmt({LINENUM}64998, '0.9999', nfDefault, 10, ['!', '0.9999']);
  TestNumFmt({LINENUM}64999, '0.9999', nfDefault, 12, ['!', '0.9999']);
  TestNumFmt({LINENUM}65000, '0.9999', nfDefault, 20, ['!', '0.9999']);

  TestNumFmt({LINENUM}65002, '0.9999', nfFraction, ['!', '9999/10000', '0.9999']);
  TestNumFmt({LINENUM}65003, '0.9999', nfFraction, 1, ['!', '9999/10000', '1']);
  TestNumFmt({LINENUM}65004, '0.9999', nfFraction, 2, ['!', '9999/10000', '1']);
  TestNumFmt({LINENUM}65005, '0.9999', nfFraction, 3, ['!', '9999/10000', '1']);
  TestNumFmt({LINENUM}65006, '0.9999', nfFraction, 4, ['!', '9999/10000', '0.9999']);
  TestNumFmt({LINENUM}65007, '0.9999', nfFraction, 6, ['!', '9999/10000', '0.9999']);
  TestNumFmt({LINENUM}65008, '0.9999', nfFraction, 10, ['!', '9999/10000', '0.9999']);
  TestNumFmt({LINENUM}65009, '0.9999', nfFraction, 12, ['!', '9999/10000', '0.9999']);
  TestNumFmt({LINENUM}65010, '0.9999', nfFraction, 20, ['!', '9999/10000', '0.9999']);

  TestNumFmt({LINENUM}65012, '0.9999', nfFixed, ['!', '0.999900000000']);
  TestNumFmt({LINENUM}65013, '0.9999', nfFixed, 0, ['!', '1']);
  TestNumFmt({LINENUM}65014, '0.9999', nfFixed, 1, ['!', '1.0']);
  TestNumFmt({LINENUM}65015, '0.9999', nfFixed, 2, ['!', '1.00']);
  TestNumFmt({LINENUM}65016, '0.9999', nfFixed, 3, ['!', '1.000']);
  TestNumFmt({LINENUM}65017, '0.9999', nfFixed, 4, ['!', '0.9999']);
  TestNumFmt({LINENUM}65018, '0.9999', nfFixed, 6, ['!', '0.999900']);
  TestNumFmt({LINENUM}65019, '0.9999', nfFixed, 10, ['!', '0.9999000000']);
  TestNumFmt({LINENUM}65020, '0.9999', nfFixed, 12, ['!', '0.999900000000']);
  TestNumFmt({LINENUM}65021, '0.9999', nfFixed, 20, ['!', '0.99990000000000000000', '*']);

  TestNumFmt({LINENUM}65023, '0.9999', nfExponent, ['!', '9.99900000000E-1']);
  TestNumFmt({LINENUM}65024, '0.9999', nfExponent, 1, ['!', '1E0', '1.0E0']);
  TestNumFmt({LINENUM}65025, '0.9999', nfExponent, 2, ['!', '1.0E0']);
  TestNumFmt({LINENUM}65026, '0.9999', nfExponent, 3, ['!', '1.00E0']);
  TestNumFmt({LINENUM}65027, '0.9999', nfExponent, 4, ['!', '9.999E-1']);
  TestNumFmt({LINENUM}65028, '0.9999', nfExponent, 6, ['!', '9.99900E-1']);
  TestNumFmt({LINENUM}65029, '0.9999', nfExponent, 10, ['!', '9.999000000E-1']);
  TestNumFmt({LINENUM}65030, '0.9999', nfExponent, 12, ['!', '9.99900000000E-1']);
  TestNumFmt({LINENUM}65031, '0.9999', nfExponent, 20, ['!', '9.9990000000000000000E-1', '*']);

  // --

  TestNumFmt({LINENUM}65035, '0.09999', nfDefault, ['!', '0.09999']);
  TestNumFmt({LINENUM}65036, '0.09999', nfDefault, 1, ['!', '0.1']);
  TestNumFmt({LINENUM}65037, '0.09999', nfDefault, 2, ['!', '0.1']);
  TestNumFmt({LINENUM}65038, '0.09999', nfDefault, 3, ['!', '0.1']);
  TestNumFmt({LINENUM}65039, '0.09999', nfDefault, 4, ['!', '0.09999']);
  TestNumFmt({LINENUM}65040, '0.09999', nfDefault, 6, ['!', '0.09999']);
  TestNumFmt({LINENUM}65041, '0.09999', nfDefault, 10, ['!', '0.09999']);
  TestNumFmt({LINENUM}65042, '0.09999', nfDefault, 12, ['!', '0.09999']);
  TestNumFmt({LINENUM}65043, '0.09999', nfDefault, 20, ['!', '0.09999']);

  TestNumFmt({LINENUM}65045, '0.09999', nfFraction, ['!', '9999/100000', '0.09999']);
  TestNumFmt({LINENUM}65046, '0.09999', nfFraction, 1, ['!', '9999/100000', '0.1']);
  TestNumFmt({LINENUM}65047, '0.09999', nfFraction, 2, ['!', '9999/100000', '0.1']);
  TestNumFmt({LINENUM}65048, '0.09999', nfFraction, 3, ['!', '9999/100000', '0.1']);
  TestNumFmt({LINENUM}65049, '0.09999', nfFraction, 4, ['!', '9999/100000', '0.09999']);
  TestNumFmt({LINENUM}65050, '0.09999', nfFraction, 6, ['!', '9999/100000', '0.09999']);
  TestNumFmt({LINENUM}65051, '0.09999', nfFraction, 10, ['!', '9999/100000', '0.09999']);
  TestNumFmt({LINENUM}65052, '0.09999', nfFraction, 12, ['!', '9999/100000', '0.09999']);
  TestNumFmt({LINENUM}65053, '0.09999', nfFraction, 20, ['!', '9999/100000', '0.09999']);

  TestNumFmt({LINENUM}65055, '0.09999', nfFixed, ['!', '0.099990000000']);
  TestNumFmt({LINENUM}65056, '0.09999', nfFixed, 0, ['!', '0']);
  TestNumFmt({LINENUM}65057, '0.09999', nfFixed, 1, ['!', '0.1']);
  TestNumFmt({LINENUM}65058, '0.09999', nfFixed, 2, ['!', '0.10']);
  TestNumFmt({LINENUM}65059, '0.09999', nfFixed, 3, ['!', '0.100']);
  TestNumFmt({LINENUM}65060, '0.09999', nfFixed, 4, ['!', '0.1000']);
  TestNumFmt({LINENUM}65061, '0.09999', nfFixed, 5, ['!', '0.09999']);
  TestNumFmt({LINENUM}65062, '0.09999', nfFixed, 6, ['!', '0.099990']);
  TestNumFmt({LINENUM}65063, '0.09999', nfFixed, 10, ['!', '0.0999900000']);
  TestNumFmt({LINENUM}65064, '0.09999', nfFixed, 12, ['!', '0.099990000000']);
  TestNumFmt({LINENUM}65065, '0.09999', nfFixed, 20, ['!', '0.09999000000000000000', '*']);

  TestNumFmt({LINENUM}65067, '0.09999', nfExponent, ['!', '9.99900000000E-2']);
  TestNumFmt({LINENUM}65068, '0.09999', nfExponent, 1, ['!', '1E-1', '1.0E-1']);
  TestNumFmt({LINENUM}65069, '0.09999', nfExponent, 2, ['!', '1.0E-1']);
  TestNumFmt({LINENUM}65070, '0.09999', nfExponent, 3, ['!', '1.00E-1']);
  TestNumFmt({LINENUM}65071, '0.09999', nfExponent, 4, ['!', '9.999E-2']);
  TestNumFmt({LINENUM}65072, '0.09999', nfExponent, 5, ['!', '9.9990E-2']);
  TestNumFmt({LINENUM}65073, '0.09999', nfExponent, 6, ['!', '9.99900E-2']);
  TestNumFmt({LINENUM}65074, '0.09999', nfExponent, 10, ['!', '9.999000000E-2']);
  TestNumFmt({LINENUM}65075, '0.09999', nfExponent, 12, ['!', '9.99900000000E-2']);
  TestNumFmt({LINENUM}65076, '0.09999', nfExponent, 20, ['!', '9.9990000000000000000E-2', '*']);

  // --

  TestNumFmt({LINENUM}65080, '0.009999', nfDefault, ['!', '0.009999']);
  TestNumFmt({LINENUM}65081, '0.009999', nfDefault, 1, ['!', '0.01']);
  TestNumFmt({LINENUM}65082, '0.009999', nfDefault, 2, ['!', '0.01']);
  TestNumFmt({LINENUM}65083, '0.009999', nfDefault, 3, ['!', '0.01']);
  TestNumFmt({LINENUM}65084, '0.009999', nfDefault, 4, ['!', '0.009999']);
  TestNumFmt({LINENUM}65085, '0.009999', nfDefault, 6, ['!', '0.009999']);
  TestNumFmt({LINENUM}65086, '0.009999', nfDefault, 10, ['!', '0.009999']);
  TestNumFmt({LINENUM}65087, '0.009999', nfDefault, 12, ['!', '0.009999']);
  TestNumFmt({LINENUM}65088, '0.009999', nfDefault, 20, ['!', '0.009999']);

  TestNumFmt({LINENUM}65090, '0.009999', nfFraction, ['!', '9999/1000000', '0.009999']);
  TestNumFmt({LINENUM}65091, '0.009999', nfFraction, 1, ['!', '9999/1000000', '0.01']);
  TestNumFmt({LINENUM}65092, '0.009999', nfFraction, 2, ['!', '9999/1000000', '0.01']);
  TestNumFmt({LINENUM}65093, '0.009999', nfFraction, 3, ['!', '9999/1000000', '0.01']);
  TestNumFmt({LINENUM}65094, '0.009999', nfFraction, 4, ['!', '9999/1000000', '0.009999']);
  TestNumFmt({LINENUM}65095, '0.009999', nfFraction, 6, ['!', '9999/1000000', '0.009999']);
  TestNumFmt({LINENUM}65096, '0.009999', nfFraction, 10, ['!', '9999/1000000', '0.009999']);
  TestNumFmt({LINENUM}65097, '0.009999', nfFraction, 12, ['!', '9999/1000000', '0.009999']);
  TestNumFmt({LINENUM}65098, '0.009999', nfFraction, 20, ['!', '9999/1000000', '0.009999']);

  TestNumFmt({LINENUM}65100, '0.009999', nfFixed, ['!', '0.009999000000']);
  TestNumFmt({LINENUM}65101, '0.009999', nfFixed, 0, ['!', '0']);
  TestNumFmt({LINENUM}65102, '0.009999', nfFixed, 1, ['!', '0.0']);
  TestNumFmt({LINENUM}65103, '0.009999', nfFixed, 2, ['!', '0.01']);
  TestNumFmt({LINENUM}65104, '0.009999', nfFixed, 3, ['!', '0.010']);
  TestNumFmt({LINENUM}65105, '0.009999', nfFixed, 4, ['!', '0.0100']);
  TestNumFmt({LINENUM}65106, '0.009999', nfFixed, 5, ['!', '0.01000']);
  TestNumFmt({LINENUM}65107, '0.009999', nfFixed, 6, ['!', '0.009999']);
  TestNumFmt({LINENUM}65108, '0.009999', nfFixed, 10, ['!', '0.0099990000']);
  TestNumFmt({LINENUM}65109, '0.009999', nfFixed, 12, ['!', '0.009999000000']);
  TestNumFmt({LINENUM}65110, '0.009999', nfFixed, 20, ['!', '0.00999900000000000000', '*']);

  TestNumFmt({LINENUM}65112, '0.009999', nfExponent, ['!', '9.99900000000E-3']);
  TestNumFmt({LINENUM}65113, '0.009999', nfExponent, 1, ['!', '1E-2', '1.0E-2']);
  TestNumFmt({LINENUM}65114, '0.009999', nfExponent, 2, ['!', '1.0E-2']);
  TestNumFmt({LINENUM}65115, '0.009999', nfExponent, 3, ['!', '1.00E-2']);
  TestNumFmt({LINENUM}65116, '0.009999', nfExponent, 4, ['!', '9.999E-3']);
  TestNumFmt({LINENUM}65117, '0.009999', nfExponent, 5, ['!', '9.9990E-3']);
  TestNumFmt({LINENUM}65118, '0.009999', nfExponent, 6, ['!', '9.99900E-3']);
  TestNumFmt({LINENUM}65119, '0.009999', nfExponent, 10, ['!', '9.999000000E-3']);
  TestNumFmt({LINENUM}65120, '0.009999', nfExponent, 12, ['!', '9.99900000000E-3']);
  TestNumFmt({LINENUM}65121, '0.009999', nfExponent, 20, ['!', '9.9990000000000000000E-3', '*']);

  // --

  TestNumFmt({LINENUM}65125, '5.9', nfDefault, ['!', '5.9']);
  TestNumFmt({LINENUM}65126, '5.9', nfDefault, 1, ['!', '6', '5.9']);
  TestNumFmt({LINENUM}65127, '5.9', nfDefault, 2, ['!', '5.9']);
  TestNumFmt({LINENUM}65128, '5.9', nfDefault, 4, ['!', '5.9']);
  TestNumFmt({LINENUM}65129, '5.9', nfDefault, 12, ['!', '5.9']);
  TestNumFmt({LINENUM}65130, '5.9', nfDefault, 20, ['!', '5.9']);

  TestNumFmt({LINENUM}65132, '5.9', nfFraction, ['!', '59/10', '5.9']);
  TestNumFmt({LINENUM}65133, '5.9', nfFraction, 1, ['!', '59/10', '5.9']);
  TestNumFmt({LINENUM}65134, '5.9', nfFraction, 2, ['!', '59/10', '5.9']);
  TestNumFmt({LINENUM}65135, '5.9', nfFraction, 4, ['!', '59/10', '5.9']);
  TestNumFmt({LINENUM}65136, '5.9', nfFraction, 12, ['!', '59/10', '5.9']);
  TestNumFmt({LINENUM}65137, '5.9', nfFraction, 20, ['!', '59/10', '5.9']);

  TestNumFmt({LINENUM}65139, '5.9', nfFixed, ['!', '5.900000000000']);
  TestNumFmt({LINENUM}65140, '5.9', nfFixed, 0, ['!', '6']);
  TestNumFmt({LINENUM}65141, '5.9', nfFixed, 1, ['!', '5.9']);
  TestNumFmt({LINENUM}65142, '5.9', nfFixed, 2, ['!', '5.90']);
  TestNumFmt({LINENUM}65143, '5.9', nfFixed, 3, ['!', '5.900']);
  TestNumFmt({LINENUM}65144, '5.9', nfFixed, 4, ['!', '5.9000']);
  TestNumFmt({LINENUM}65145, '5.9', nfFixed, 12, ['!', '5.900000000000']);
  TestNumFmt({LINENUM}65146, '5.9', nfFixed, 20, ['!', '5.90000000000000000000', '*']);

  TestNumFmt({LINENUM}65148, '5.9', nfExponent, ['!', '5.90000000000E0']);
  TestNumFmt({LINENUM}65149, '5.9', nfExponent, 1, ['!', '6E0', '5.9E0']);
  TestNumFmt({LINENUM}65150, '5.9', nfExponent, 2, ['!', '5.9E0']);
  TestNumFmt({LINENUM}65151, '5.9', nfExponent, 3, ['!', '5.90E0']);
  TestNumFmt({LINENUM}65152, '5.9', nfExponent, 4, ['!', '5.900E0']);
  TestNumFmt({LINENUM}65153, '5.9', nfExponent, 12, ['!', '5.90000000000E0']);
  TestNumFmt({LINENUM}65154, '5.9', nfExponent, 20, ['!', '5.9000000000000000000E0', '*']);

  // --

  TestNumFmt({LINENUM}65158, '5.5', nfDefault, ['!', '5.5']);
  TestNumFmt({LINENUM}65159, '5.5', nfDefault, 1, ['!', '6', '5.5']);
  TestNumFmt({LINENUM}65160, '5.5', nfDefault, 2, ['!', '5.5']);
  TestNumFmt({LINENUM}65161, '5.5', nfDefault, 4, ['!', '5.5']);
  TestNumFmt({LINENUM}65162, '5.5', nfDefault, 12, ['!', '5.5']);
  TestNumFmt({LINENUM}65163, '5.5', nfDefault, 20, ['!', '5.5']);

  TestNumFmt({LINENUM}65165, '5.5', nfFraction, ['!', '11/2', '5.5']);
  TestNumFmt({LINENUM}65166, '5.5', nfFraction, 1, ['!', '11/2', '5.5']);
  TestNumFmt({LINENUM}65167, '5.5', nfFraction, 2, ['!', '11/2', '5.5']);
  TestNumFmt({LINENUM}65168, '5.5', nfFraction, 4, ['!', '11/2', '5.5']);
  TestNumFmt({LINENUM}65169, '5.5', nfFraction, 12, ['!', '11/2', '5.5']);
  TestNumFmt({LINENUM}65170, '5.5', nfFraction, 20, ['!', '11/2', '5.5']);

  TestNumFmt({LINENUM}65172, '5.5', nfFixed, ['!', '5.500000000000']);
  TestNumFmt({LINENUM}65173, '5.5', nfFixed, 0, ['!', '6']);
  TestNumFmt({LINENUM}65174, '5.5', nfFixed, 1, ['!', '5.5']);
  TestNumFmt({LINENUM}65175, '5.5', nfFixed, 2, ['!', '5.50']);
  TestNumFmt({LINENUM}65176, '5.5', nfFixed, 3, ['!', '5.500']);
  TestNumFmt({LINENUM}65177, '5.5', nfFixed, 4, ['!', '5.5000']);
  TestNumFmt({LINENUM}65178, '5.5', nfFixed, 12, ['!', '5.500000000000']);
  TestNumFmt({LINENUM}65179, '5.5', nfFixed, 20, ['!', '5.50000000000000000000', '*']);

  TestNumFmt({LINENUM}65181, '5.5', nfExponent, ['!', '5.50000000000E0']);
  TestNumFmt({LINENUM}65182, '5.5', nfExponent, 1, ['!', '6E0', '5.5E0']);
  TestNumFmt({LINENUM}65183, '5.5', nfExponent, 2, ['!', '5.5E0']);
  TestNumFmt({LINENUM}65184, '5.5', nfExponent, 3, ['!', '5.50E0']);
  TestNumFmt({LINENUM}65185, '5.5', nfExponent, 4, ['!', '5.500E0']);
  TestNumFmt({LINENUM}65186, '5.5', nfExponent, 12, ['!', '5.50000000000E0']);
  TestNumFmt({LINENUM}65187, '5.5', nfExponent, 20, ['!', '5.5000000000000000000E0', '*']);

  // --

  TestNumFmt({LINENUM}65191, '5.1', nfDefault, ['!', '5.1']);
  TestNumFmt({LINENUM}65192, '5.1', nfDefault, 1, ['!', '5', '5.1']);
  TestNumFmt({LINENUM}65193, '5.1', nfDefault, 2, ['!', '5.1']);
  TestNumFmt({LINENUM}65194, '5.1', nfDefault, 4, ['!', '5.1']);
  TestNumFmt({LINENUM}65195, '5.1', nfDefault, 12, ['!', '5.1']);
  TestNumFmt({LINENUM}65196, '5.1', nfDefault, 20, ['!', '5.1']);

  TestNumFmt({LINENUM}65198, '5.1', nfFraction, ['!', '51/10', '5.1']);
  TestNumFmt({LINENUM}65199, '5.1', nfFraction, 1, ['!', '51/10', '5.1']);
  TestNumFmt({LINENUM}65200, '5.1', nfFraction, 2, ['!', '51/10', '5.1']);
  TestNumFmt({LINENUM}65201, '5.1', nfFraction, 4, ['!', '51/10', '5.1']);
  TestNumFmt({LINENUM}65202, '5.1', nfFraction, 12, ['!', '51/10', '5.1']);
  TestNumFmt({LINENUM}65203, '5.1', nfFraction, 20, ['!', '51/10', '5.1']);

  TestNumFmt({LINENUM}65205, '5.1', nfFixed, ['!', '5.100000000000']);
  TestNumFmt({LINENUM}65206, '5.1', nfFixed, 0, ['!', '5']);
  TestNumFmt({LINENUM}65207, '5.1', nfFixed, 1, ['!', '5.1']);
  TestNumFmt({LINENUM}65208, '5.1', nfFixed, 2, ['!', '5.10']);
  TestNumFmt({LINENUM}65209, '5.1', nfFixed, 3, ['!', '5.100']);
  TestNumFmt({LINENUM}65210, '5.1', nfFixed, 4, ['!', '5.1000']);
  TestNumFmt({LINENUM}65211, '5.1', nfFixed, 12, ['!', '5.100000000000']);
  TestNumFmt({LINENUM}65212, '5.1', nfFixed, 20, ['!', '5.10000000000000000000', '*']);

  TestNumFmt({LINENUM}65214, '5.1', nfExponent, ['!', '5.10000000000E0']);
  TestNumFmt({LINENUM}65215, '5.1', nfExponent, 1, ['!', '5E0', '5.1E0']);
  TestNumFmt({LINENUM}65216, '5.1', nfExponent, 2, ['!', '5.1E0']);
  TestNumFmt({LINENUM}65217, '5.1', nfExponent, 3, ['!', '5.10E0']);
  TestNumFmt({LINENUM}65218, '5.1', nfExponent, 4, ['!', '5.100E0']);
  TestNumFmt({LINENUM}65219, '5.1', nfExponent, 12, ['!', '5.10000000000E0']);
  TestNumFmt({LINENUM}65220, '5.1', nfExponent, 20, ['!', '5.1000000000000000000E0', '*']);

  // --

  TestNumFmt({LINENUM}65224, '0.0009', nfDefault, ['!', '0.0009']);
  TestNumFmt({LINENUM}65225, '0.0009', nfDefault, 1, ['!', '0.0009']);
  TestNumFmt({LINENUM}65226, '0.0009', nfDefault, 2, ['!', '0.0009']);
  TestNumFmt({LINENUM}65227, '0.0009', nfDefault, 3, ['!', '0.0009']);
  TestNumFmt({LINENUM}65228, '0.0009', nfDefault, 4, ['!', '0.0009']);
  TestNumFmt({LINENUM}65229, '0.0009', nfDefault, 6, ['!', '0.0009']);
  TestNumFmt({LINENUM}65230, '0.0009', nfDefault, 7, ['!', '0.0009']);
  TestNumFmt({LINENUM}65231, '0.0009', nfDefault, 8, ['!', '0.0009']);
  TestNumFmt({LINENUM}65232, '0.0009', nfDefault, 12, ['!', '0.0009']);
  TestNumFmt({LINENUM}65233, '0.0009', nfDefault, 32, ['!', '0.0009']);

  TestNumFmt({LINENUM}65235, '0.0009', nfFraction, ['!', '9/10000', '0.0009']);
  TestNumFmt({LINENUM}65236, '0.0009', nfFraction, 1, ['!', '9/10000', '0.0009']);
  TestNumFmt({LINENUM}65237, '0.0009', nfFraction, 2, ['!', '9/10000', '0.0009']);
  TestNumFmt({LINENUM}65238, '0.0009', nfFraction, 3, ['!', '9/10000', '0.0009']);
  TestNumFmt({LINENUM}65239, '0.0009', nfFraction, 4, ['!', '9/10000', '0.0009']);
  TestNumFmt({LINENUM}65240, '0.0009', nfFraction, 6, ['!', '9/10000', '0.0009']);
  TestNumFmt({LINENUM}65241, '0.0009', nfFraction, 7, ['!', '9/10000', '0.0009']);
  TestNumFmt({LINENUM}65242, '0.0009', nfFraction, 8, ['!', '9/10000', '0.0009']);
  TestNumFmt({LINENUM}65243, '0.0009', nfFraction, 12, ['!', '9/10000', '0.0009']);
  TestNumFmt({LINENUM}65244, '0.0009', nfFraction, 32, ['!', '9/10000', '0.0009']);

  TestNumFmt({LINENUM}65246, '0.0009', nfFixed, ['!', '0.000900000000']);
  TestNumFmt({LINENUM}65247, '0.0009', nfFixed, 0, ['!', '0']);
  TestNumFmt({LINENUM}65248, '0.0009', nfFixed, 1, ['!', '0.0']);
  TestNumFmt({LINENUM}65249, '0.0009', nfFixed, 2, ['!', '0.00']);
  TestNumFmt({LINENUM}65250, '0.0009', nfFixed, 3, ['!', '0.001']);
  TestNumFmt({LINENUM}65251, '0.0009', nfFixed, 4, ['!', '0.0009']);
  TestNumFmt({LINENUM}65252, '0.0009', nfFixed, 5, ['!', '0.00090']);
  TestNumFmt({LINENUM}65253, '0.0009', nfFixed, 6, ['!', '0.000900']);
  TestNumFmt({LINENUM}65254, '0.0009', nfFixed, 7, ['!', '0.0009000']);
  TestNumFmt({LINENUM}65255, '0.0009', nfFixed, 8, ['!', '0.00090000']);
  TestNumFmt({LINENUM}65256, '0.0009', nfFixed, 12, ['!', '0.000900000000']);
  TestNumFmt({LINENUM}65257, '0.0009', nfFixed, 32, ['!', '0.00090000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}65259, '0.0009', nfExponent, ['!', '9.00000000000E-4']);
  TestNumFmt({LINENUM}65260, '0.0009', nfExponent, 1, ['!', '9E-4', '9.0E-4']);
  TestNumFmt({LINENUM}65261, '0.0009', nfExponent, 2, ['!', '9.0E-4']);
  TestNumFmt({LINENUM}65262, '0.0009', nfExponent, 3, ['!', '9.00E-4']);
  TestNumFmt({LINENUM}65263, '0.0009', nfExponent, 4, ['!', '9.000E-4']);
  TestNumFmt({LINENUM}65264, '0.0009', nfExponent, 5, ['!', '9.0000E-4']);
  TestNumFmt({LINENUM}65265, '0.0009', nfExponent, 6, ['!', '9.00000E-4']);
  TestNumFmt({LINENUM}65266, '0.0009', nfExponent, 7, ['!', '9.000000E-4']);
  TestNumFmt({LINENUM}65267, '0.0009', nfExponent, 8, ['!', '9.0000000E-4']);
  TestNumFmt({LINENUM}65268, '0.0009', nfExponent, 9, ['!', '9.00000000E-4']);
  TestNumFmt({LINENUM}65269, '0.0009', nfExponent, 10, ['!', '9.000000000E-4']);
  TestNumFmt({LINENUM}65270, '0.0009', nfExponent, 20, ['!', '9.0000000000000000000E-4', '*']);
  TestNumFmt({LINENUM}65271, '0.0009', nfExponent, 30, ['!', '9.00000000000000000000000000000E-4', '*']);

  // --

  TestNumFmt({LINENUM}65275, '0.00009', nfDefault, ['!', '9E-5']);
  TestNumFmt({LINENUM}65276, '0.00009', nfDefault, 1, ['!', '9E-5']);
  TestNumFmt({LINENUM}65277, '0.00009', nfDefault, 2, ['!', '9E-5']);
  TestNumFmt({LINENUM}65278, '0.00009', nfDefault, 3, ['!', '9E-5']);
  TestNumFmt({LINENUM}65279, '0.00009', nfDefault, 4, ['!', '9E-5']);
  TestNumFmt({LINENUM}65280, '0.00009', nfDefault, 6, ['!', '9E-5']);
  TestNumFmt({LINENUM}65281, '0.00009', nfDefault, 7, ['!', '9E-5']);
  TestNumFmt({LINENUM}65282, '0.00009', nfDefault, 8, ['!', '9E-5']);
  TestNumFmt({LINENUM}65283, '0.00009', nfDefault, 12, ['!', '9E-5']);
  TestNumFmt({LINENUM}65284, '0.00009', nfDefault, 32, ['!', '9E-5']);

  TestNumFmt({LINENUM}65286, '0.00009', nfFraction, ['!', '9/100000', '9E-5']);
  TestNumFmt({LINENUM}65287, '0.00009', nfFraction, 1, ['!', '9/100000', '9E-5']);
  TestNumFmt({LINENUM}65288, '0.00009', nfFraction, 2, ['!', '9/100000', '9E-5']);
  TestNumFmt({LINENUM}65289, '0.00009', nfFraction, 3, ['!', '9/100000', '9E-5']);
  TestNumFmt({LINENUM}65290, '0.00009', nfFraction, 4, ['!', '9/100000', '9E-5']);
  TestNumFmt({LINENUM}65291, '0.00009', nfFraction, 6, ['!', '9/100000', '9E-5']);
  TestNumFmt({LINENUM}65292, '0.00009', nfFraction, 7, ['!', '9/100000', '9E-5']);
  TestNumFmt({LINENUM}65293, '0.00009', nfFraction, 8, ['!', '9/100000', '9E-5']);
  TestNumFmt({LINENUM}65294, '0.00009', nfFraction, 12, ['!', '9/100000', '9E-5']);
  TestNumFmt({LINENUM}65295, '0.00009', nfFraction, 32, ['!', '9/100000', '9E-5']);

  TestNumFmt({LINENUM}65297, '0.00009', nfFixed, ['!', '0.000090000000']);
  TestNumFmt({LINENUM}65298, '0.00009', nfFixed, 0, ['!', '0']);
  TestNumFmt({LINENUM}65299, '0.00009', nfFixed, 1, ['!', '0.0']);
  TestNumFmt({LINENUM}65300, '0.00009', nfFixed, 2, ['!', '0.00']);
  TestNumFmt({LINENUM}65301, '0.00009', nfFixed, 3, ['!', '0.000']);
  TestNumFmt({LINENUM}65302, '0.00009', nfFixed, 4, ['!', '0.0001']);
  TestNumFmt({LINENUM}65303, '0.00009', nfFixed, 5, ['!', '0.00009']);
  TestNumFmt({LINENUM}65304, '0.00009', nfFixed, 6, ['!', '0.000090']);
  TestNumFmt({LINENUM}65305, '0.00009', nfFixed, 7, ['!', '0.0000900']);
  TestNumFmt({LINENUM}65306, '0.00009', nfFixed, 8, ['!', '0.00009000']);
  TestNumFmt({LINENUM}65307, '0.00009', nfFixed, 12, ['!', '0.000090000000']);
  TestNumFmt({LINENUM}65308, '0.00009', nfFixed, 32, ['!', '0.00009000000000000000000000000000', '*']);

  TestNumFmt({LINENUM}65310, '0.00009', nfExponent, ['!', '9.00000000000E-5']);
  TestNumFmt({LINENUM}65311, '0.00009', nfExponent, 1, ['!', '9E-5', '9.0E-5']);
  TestNumFmt({LINENUM}65312, '0.00009', nfExponent, 2, ['!', '9.0E-5']);
  TestNumFmt({LINENUM}65313, '0.00009', nfExponent, 3, ['!', '9.00E-5']);
  TestNumFmt({LINENUM}65314, '0.00009', nfExponent, 4, ['!', '9.000E-5']);
  TestNumFmt({LINENUM}65315, '0.00009', nfExponent, 5, ['!', '9.0000E-5']);
  TestNumFmt({LINENUM}65316, '0.00009', nfExponent, 6, ['!', '9.00000E-5']);
  TestNumFmt({LINENUM}65317, '0.00009', nfExponent, 7, ['!', '9.000000E-5']);
  TestNumFmt({LINENUM}65318, '0.00009', nfExponent, 8, ['!', '9.0000000E-5']);
  TestNumFmt({LINENUM}65319, '0.00009', nfExponent, 9, ['!', '9.00000000E-5']);
  TestNumFmt({LINENUM}65320, '0.00009', nfExponent, 10, ['!', '9.000000000E-5']);
  TestNumFmt({LINENUM}65321, '0.00009', nfExponent, 20, ['!', '9.0000000000000000000E-5', '*']);
  TestNumFmt({LINENUM}65322, '0.00009', nfExponent, 30, ['!', '9.00000000000000000000000000000E-5', '*']);

  // --

  TestNumFmt({LINENUM}65326, '0.9', nfDefault, ['!', '0.9']);
  TestNumFmt({LINENUM}65327, '0.9', nfDefault, 1, ['!', '0.9']);
  TestNumFmt({LINENUM}65328, '0.9', nfDefault, 2, ['!', '0.9']);
  TestNumFmt({LINENUM}65329, '0.9', nfDefault, 3, ['!', '0.9']);
  TestNumFmt({LINENUM}65330, '0.9', nfDefault, 4, ['!', '0.9']);
  TestNumFmt({LINENUM}65331, '0.9', nfDefault, 6, ['!', '0.9']);
  TestNumFmt({LINENUM}65332, '0.9', nfDefault, 10, ['!', '0.9']);
  TestNumFmt({LINENUM}65333, '0.9', nfDefault, 12, ['!', '0.9']);
  TestNumFmt({LINENUM}65334, '0.9', nfDefault, 20, ['!', '0.9']);

  TestNumFmt({LINENUM}65336, '0.9', nfFraction, ['!', '9/10', '0.9']);
  TestNumFmt({LINENUM}65337, '0.9', nfFraction, 1, ['!', '9/10', '0.9']);
  TestNumFmt({LINENUM}65338, '0.9', nfFraction, 2, ['!', '9/10', '0.9']);
  TestNumFmt({LINENUM}65339, '0.9', nfFraction, 3, ['!', '9/10', '0.9']);
  TestNumFmt({LINENUM}65340, '0.9', nfFraction, 4, ['!', '9/10', '0.9']);
  TestNumFmt({LINENUM}65341, '0.9', nfFraction, 6, ['!', '9/10', '0.9']);
  TestNumFmt({LINENUM}65342, '0.9', nfFraction, 10, ['!', '9/10', '0.9']);
  TestNumFmt({LINENUM}65343, '0.9', nfFraction, 12, ['!', '9/10', '0.9']);
  TestNumFmt({LINENUM}65344, '0.9', nfFraction, 20, ['!', '9/10', '0.9']);

  TestNumFmt({LINENUM}65346, '0.9', nfFixed, ['!', '0.900000000000']);
  TestNumFmt({LINENUM}65347, '0.9', nfFixed, 0, ['!', '1']);
  TestNumFmt({LINENUM}65348, '0.9', nfFixed, 1, ['!', '0.9']);
  TestNumFmt({LINENUM}65349, '0.9', nfFixed, 2, ['!', '0.90']);
  TestNumFmt({LINENUM}65350, '0.9', nfFixed, 3, ['!', '0.900']);
  TestNumFmt({LINENUM}65351, '0.9', nfFixed, 4, ['!', '0.9000']);
  TestNumFmt({LINENUM}65352, '0.9', nfFixed, 6, ['!', '0.900000']);
  TestNumFmt({LINENUM}65353, '0.9', nfFixed, 10, ['!', '0.9000000000']);
  TestNumFmt({LINENUM}65354, '0.9', nfFixed, 12, ['!', '0.900000000000']);
  TestNumFmt({LINENUM}65355, '0.9', nfFixed, 20, ['!', '0.90000000000000000000', '*']);

  TestNumFmt({LINENUM}65357, '0.9', nfExponent, ['!', '9.00000000000E-1']);
  TestNumFmt({LINENUM}65358, '0.9', nfExponent, 1, ['!', '9E-1', '9.0E-1']);
  TestNumFmt({LINENUM}65359, '0.9', nfExponent, 2, ['!', '9.0E-1']);
  TestNumFmt({LINENUM}65360, '0.9', nfExponent, 3, ['!', '9.00E-1']);
  TestNumFmt({LINENUM}65361, '0.9', nfExponent, 4, ['!', '9.000E-1']);
  TestNumFmt({LINENUM}65362, '0.9', nfExponent, 6, ['!', '9.00000E-1']);
  TestNumFmt({LINENUM}65363, '0.9', nfExponent, 10, ['!', '9.000000000E-1']);
  TestNumFmt({LINENUM}65364, '0.9', nfExponent, 12, ['!', '9.00000000000E-1']);
  TestNumFmt({LINENUM}65365, '0.9', nfExponent, 20, ['!', '9.0000000000000000000E-1', '*']);

  // --

  TestNumFmt({LINENUM}65369, '1/613', nfDefault, ['!', '0.00163132137031']);
  TestNumFmt({LINENUM}65370, '1/613', nfDefault, 1, ['!', '0.002', '0.0016']);
  TestNumFmt({LINENUM}65371, '1/613', nfDefault, 2, ['!', '0.0016']);
  TestNumFmt({LINENUM}65372, '1/613', nfDefault, 3, ['!', '0.00163']);
  TestNumFmt({LINENUM}65373, '1/613', nfDefault, 4, ['!', '0.001631']);
  TestNumFmt({LINENUM}65374, '1/613', nfDefault, 5, ['!', '0.0016313']);
  TestNumFmt({LINENUM}65375, '1/613', nfDefault, 6, ['!', '0.00163132']);
  TestNumFmt({LINENUM}65376, '1/613', nfDefault, 7, ['!', '0.001631321']);
  TestNumFmt({LINENUM}65377, '1/613', nfDefault, 8, ['!', '0.0016313214']);
  TestNumFmt({LINENUM}65378, '1/613', nfDefault, 9, ['!', '0.00163132137']);
  TestNumFmt({LINENUM}65379, '1/613', nfDefault, 10, ['!', '0.00163132137']);
  TestNumFmt({LINENUM}65380, '1/613', nfDefault, 11, ['!', '0.0016313213703']);
  TestNumFmt({LINENUM}65381, '1/613', nfDefault, 12, ['!', '0.00163132137031']);
  TestNumFmt({LINENUM}65382, '1/613', nfDefault, 20, ['!', '0.0016313213703099510604', '*']);
  TestNumFmt({LINENUM}65383, '1/613', nfDefault, 30, ['!', '0.00163132137030995106035889070147', '*']);
  TestNumFmt({LINENUM}65384, '1/613', nfDefault, 40, ['!', '0.001631321370309951060358890701468189233279', '*']);
  TestNumFmt({LINENUM}65385, '1/613', nfDefault, 50, ['!', '0.001631321370309951060358890701468189233278955954323', '*']);
  TestNumFmt({LINENUM}65386, '1/613', nfDefault, 60, ['!', '0.00163132137030995106035889070146818923327895595432300163132137', '*']);
  TestNumFmt({LINENUM}65387, '1/613', nfDefault, 70, ['!', '0.00163132137030995106035889070146818923327895595432300163132137030995106', '*']);
  TestNumFmt({LINENUM}65388, '1/613', nfDefault, 80, ['!', '0.0016313213703099510603588907014681892332789559543230016313213703099510603588907015', '*']);
  TestNumFmt({LINENUM}65389, '1/613', nfDefault, 90, ['!', '0.00163132137030995106035889070146818923327895595432300163132137030995106035889070146818923328', '*']);
  TestNumFmt({LINENUM}65390, '1/613', nfDefault, 100, ['!', '0.001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323', '*']);
  TestNumFmt({LINENUM}65391, '1/613', nfDefault, 150, ['!', '0.00163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432', '*']);
  TestNumFmt({LINENUM}65392, '1/613', nfDefault, 200, ['!', '0.0016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543', '*']);
  TestNumFmt({LINENUM}65393, '1/613', nfDefault, 250, ['!', '0.0016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313'+
  '21370309951060358890701468189233278955954', '*']);
  TestNumFmt({LINENUM}65395, '1/613', nfDefault, 1000, ['!', '0.001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631'+
  '32137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895'+'595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163'+
  '13213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313'+'21370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631'+
  '32137'+'0309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955'+'954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631'+
  '3213703099510'+'60358890701468', '*']);
  TestNumFmt({LINENUM}65400, '1/613', nfDefault, 2000, ['!', '0.0016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907'+'0146818923327895595432300163132137030995106035889070146818923327895595432300163'+
  '13213703099510603588907014681892'+'332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213'+'70309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001'+
  '6313'+'213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230'+'016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559'+'54323001631321370309951060358890701468189233278955954323'+
  '00163132137030995106035889070146818923327895595432300163132137030995106035889070146818'+'9233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309'+'95106035889070146818923327895595432300'+
  '1631321370309951060358890701468189'+
  '23327895595432300163132137030995106035889070'+'1468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358'+'89070146818923327895595432300163132137030995106035889070146818923'+
  '3278955954323001631321370309951060358890701468189233278955954323'+'00163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432'+'3001631321370309951060358890701468189233278'+
  '955954323001631321370309951060358890701468189233278955954323001631321370309951'+'06035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327'+'8955954323001631321370309951060358890701468189233278955954'+
  '323001631321370309951060358890701468189233278955954323001631321370309'+'951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954'+'3230016313213703', '*']);
  TestNumFmt({LINENUM}65409, '1/613', nfDefault, 3000, ['!', '0.0016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907'+'0146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995'+
  '10603588907014681892'+'332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213'+'703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313'+'21370309951060358'+
  '8907014681892332789559543230016313213703099510603588907014681892332789559543230'+'016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559'+'54323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189'+
  '23327895595432300163132137030995106035889070146818'+'9233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309'+'951060358890701468189233278955954323001631321370309951060358890701468189233'+
  '27895595432300163132137030995106035889070'+'1468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358'+'89070146818923327895595432300163132137030995106035889070146818923327895595432300'+
  '1631321370309951060358890701468189233278955954323'+'00163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432'+'3001631321370309951060358890701468189233278955954323001631321370309951'+
  '060358890701468189233278955954323001631321370309951'+'06035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327'+'8955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189'+
  '233278955954323001631321370309'+'951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954'+'3230016313213703'+
  '099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907'+'0146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300'+'1631321370309951060358890701468'+
  '189233278955954323001631321370309951060358890701468189233278955954323001631321370309'+'951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323'+'0016313213703099510603588907014681892332789559543230016'+
  '313213703099510603588907014681892332789559543230016313213703099510603588907014681892'+'3327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035'+'88907014681892332789559543230016313213703099510603588907'+
  '01468189233278955954323001631321370309951060358890701468189233278955'+'95432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327896', '*']);
  TestNumFmt({LINENUM}65421, '1/613', nfDefault, 4000, ['!', '0.0016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907'+'0146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818'+
  '92'+'332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213'+'703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313'+'21370309951060358890701468189233278955954323001631321'+
  '3703099510603588907014681892332789559543230'+'016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559'+'5432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818'+'9'+
  '233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309'+'9510603588907014681892332789'+
  '5595432300163132137030995106035889070146818923327895595432300163132137030995106035889070'+'1468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358'+'890701468189233278955954323001631321370309951060358'+
  '890701468189233278955954323001631321370309951060358890701468189233278955954323'+'00163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432'+'30016313213703099510603588907014681892332789559543230016313'+
  '21370309951060358890701468189233278955954323001631321370309951'+'06035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327'+'89559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789'+
  '55954323001631321370309'+'951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954'+'3230016313213703'+
  '099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907'+'0146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300'+'1631321370309951060358890701468189233278955954323'+
  '001631321370309951060358890701468189233278955954323001631321370309'+'951060358890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278955954323'+'0016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332'+
  '789559543230016313213703099510603588907014681892'+'3327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035'+'88907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014'+
  '68189233278955'+'95432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895'+
  '59543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213'+'703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543230016'+'313213703099510603588907014681892'+
  '33278955954323001631321370309951060358890701468189233278955954323001631321370309951060358'+'8907014681892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014'+'6818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146'+
  '81892332789559543230016'+'3132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030'+'995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327'+'895595432300163132137030995106035889'+
  '0701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951'+'060359', '*']);

  TestNumFmt({LINENUM}65438, '1/613', nfFraction, ['!', '1/613', '0.00163132137031']);
  TestNumFmt({LINENUM}65439, '1/613', nfFraction, 1, ['!', '1/613', '0.0016']);
  TestNumFmt({LINENUM}65440, '1/613', nfFraction, 2, ['!', '1/613', '0.0016']);
  TestNumFmt({LINENUM}65441, '1/613', nfFraction, 3, ['!', '1/613', '0.00163']);
  TestNumFmt({LINENUM}65442, '1/613', nfFraction, 4, ['!', '1/613', '0.001631']);
  TestNumFmt({LINENUM}65443, '1/613', nfFraction, 5, ['!', '1/613', '0.0016313']);
  TestNumFmt({LINENUM}65444, '1/613', nfFraction, 6, ['!', '1/613', '0.00163132']);
  TestNumFmt({LINENUM}65445, '1/613', nfFraction, 7, ['!', '1/613', '0.001631321']);
  TestNumFmt({LINENUM}65446, '1/613', nfFraction, 8, ['!', '1/613', '0.0016313214']);
  TestNumFmt({LINENUM}65447, '1/613', nfFraction, 9, ['!', '1/613', '0.00163132137']);
  TestNumFmt({LINENUM}65448, '1/613', nfFraction, 10, ['!', '1/613', '0.00163132137']);
  TestNumFmt({LINENUM}65449, '1/613', nfFraction, 11, ['!', '1/613', '0.0016313213703']);
  TestNumFmt({LINENUM}65450, '1/613', nfFraction, 12, ['!', '1/613', '0.00163132137031']);
  TestNumFmt({LINENUM}65451, '1/613', nfFraction, 20, ['!', '1/613', '*']);
  TestNumFmt({LINENUM}65452, '1/613', nfFraction, 30, ['!', '1/613', '*']);
  TestNumFmt({LINENUM}65453, '1/613', nfFraction, 40, ['!', '1/613', '*']);
  TestNumFmt({LINENUM}65454, '1/613', nfFraction, 50, ['!', '1/613', '*']);
  TestNumFmt({LINENUM}65455, '1/613', nfFraction, 4000, ['!', '1/613', '*']);

  TestNumFmt({LINENUM}65457, '1/613', nfFixed, ['!', '0.001631321370']);
  TestNumFmt({LINENUM}65458, '1/613', nfFixed,  0, ['!', '0']);
  TestNumFmt({LINENUM}65459, '1/613', nfFixed,  1, ['!', '0.0']);
  TestNumFmt({LINENUM}65460, '1/613', nfFixed,  2, ['!', '0.00']);
  TestNumFmt({LINENUM}65461, '1/613', nfFixed,  3, ['!', '0.002']);
  TestNumFmt({LINENUM}65462, '1/613', nfFixed,  4, ['!', '0.0016']);
  TestNumFmt({LINENUM}65463, '1/613', nfFixed,  5, ['!', '0.00163']);
  TestNumFmt({LINENUM}65464, '1/613', nfFixed,  6, ['!', '0.001631']);
  TestNumFmt({LINENUM}65465, '1/613', nfFixed,  7, ['!', '0.0016313']);
  TestNumFmt({LINENUM}65466, '1/613', nfFixed,  8, ['!', '0.00163132']);
  TestNumFmt({LINENUM}65467, '1/613', nfFixed,  9, ['!', '0.001631321']);
  TestNumFmt({LINENUM}65468, '1/613', nfFixed, 10, ['!', '0.0016313214']);
  TestNumFmt({LINENUM}65469, '1/613', nfFixed, 11, ['!', '0.00163132137']);
  TestNumFmt({LINENUM}65470, '1/613', nfFixed, 12, ['!', '0.001631321370']);
  TestNumFmt({LINENUM}65471, '1/613', nfFixed, 20, ['!', '0.00163132137030995106', '*']);
  TestNumFmt({LINENUM}65472, '1/613', nfFixed, 30, ['!', '0.001631321370309951060358890701', '*']);
  TestNumFmt({LINENUM}65473, '1/613', nfFixed, 40, ['!', '0.0016313213703099510603588907014681892333', '*']);
  TestNumFmt({LINENUM}65474, '1/613', nfFixed, 50, ['!', '0.00163132137030995106035889070146818923327895595432', '*']);
  TestNumFmt({LINENUM}65475, '1/613', nfFixed, 60, ['!', '0.001631321370309951060358890701468189233278955954323001631321', '*']);
  TestNumFmt({LINENUM}65476, '1/613', nfFixed, 70, ['!', '0.0016313213703099510603588907014681892332789559543230016313213703099511', '*']);
  TestNumFmt({LINENUM}65477, '1/613', nfFixed, 80, ['!', '0.00163132137030995106035889070146818923327895595432300163132137030995106035889070', '*']);
  TestNumFmt({LINENUM}65478, '1/613', nfFixed, 90, ['!', '0.001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233', '*']);
  TestNumFmt({LINENUM}65479, '1/613', nfFixed, 100, ['!', '0.0016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332789559543', '*']);
  TestNumFmt({LINENUM}65480, '1/613', nfFixed, 200, ['!', '0.00163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595', '*']);
  TestNumFmt({LINENUM}65481, '1/613', nfFixed, 300, ['!', '0.00163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035889070146818923327895595'+
  '4323001631321370309951060358890701468189233278955954323001631321370309951060358890701468189233278956', '*']);
  TestNumFmt({LINENUM}65483, '1/613', nfFixed, 400, ['!', '0.001631321370309951060358890701468189233278955954323001631321370309'+
  '95106035889070146818923327895595432300163132137030995106035889070146818923327895595432300163132137030995106035'+
  '8890701468189233278955954323001631321370309951060358890701468189233278955954323001631321370309951060358890701468'+
  '1892332789559543230016313213703099510603588907014681892332789559543230016313213703099510603588907014681892332790', '*']);

  TestNumFmt({LINENUM}65488, '1/613', nfExponent, ['!', '1.63132137031E-3']);
  TestNumFmt({LINENUM}65489, '1/613', nfExponent,  1, ['!', '2E-3', '1.6E-3']);
  TestNumFmt({LINENUM}65490, '1/613', nfExponent,  2, ['!', '1.6E-3']);
  TestNumFmt({LINENUM}65491, '1/613', nfExponent,  3, ['!', '1.63E-3']);
  TestNumFmt({LINENUM}65492, '1/613', nfExponent,  4, ['!', '1.631E-3']);
  TestNumFmt({LINENUM}65493, '1/613', nfExponent,  5, ['!', '1.6313E-3']);
  TestNumFmt({LINENUM}65494, '1/613', nfExponent,  6, ['!', '1.63132E-3']);
  TestNumFmt({LINENUM}65495, '1/613', nfExponent,  7, ['!', '1.631321E-3']);
  TestNumFmt({LINENUM}65496, '1/613', nfExponent,  8, ['!', '1.6313214E-3']);
  TestNumFmt({LINENUM}65497, '1/613', nfExponent,  9, ['!', '1.63132137E-3']);
  TestNumFmt({LINENUM}65498, '1/613', nfExponent, 10, ['!', '1.631321370E-3']);
  TestNumFmt({LINENUM}65499, '1/613', nfExponent, 11, ['!', '1.6313213703E-3']);
  TestNumFmt({LINENUM}65500, '1/613', nfExponent, 12, ['!', '1.63132137031E-3']);
  TestNumFmt({LINENUM}65501, '1/613', nfExponent, 20, ['!', '1.6313213703099510604E-3', '*']);
  TestNumFmt({LINENUM}65502, '1/613', nfExponent, 30, ['!', '1.63132137030995106035889070147E-3', '*']);
  TestNumFmt({LINENUM}65503, '1/613', nfExponent, 40, ['!', '1.631321370309951060358890701468189233279E-3', '*']);
  TestNumFmt({LINENUM}65504, '1/613', nfExponent, 50, ['!', '1.6313213703099510603588907014681892332789559543230E-3', '*']);
  TestNumFmt({LINENUM}65505, '1/613', nfExponent, 60, ['!', '1.63132137030995106035889070146818923327895595432300163132137E-3', '*']);
  TestNumFmt({LINENUM}65506, '1/613', nfExponent, 70, ['!', '1.631321370309951060358890701468189233278955954323001631321370309951060E-3', '*']);

  // --

  TestNumFmt({LINENUM}65510, '1/5137', nfDefault, ['!', '0.000194666147557']);
  TestNumFmt({LINENUM}65511, '1/5137', nfDefault,  1, ['!', '0.0002', '0.00019']);
  TestNumFmt({LINENUM}65512, '1/5137', nfDefault,  2, ['!', '0.00019']);
  TestNumFmt({LINENUM}65513, '1/5137', nfDefault,  3, ['!', '0.000195']);
  TestNumFmt({LINENUM}65514, '1/5137', nfDefault,  4, ['!', '0.0001947']);
  TestNumFmt({LINENUM}65515, '1/5137', nfDefault,  5, ['!', '0.00019467']);
  TestNumFmt({LINENUM}65516, '1/5137', nfDefault,  6, ['!', '0.000194666']);
  TestNumFmt({LINENUM}65517, '1/5137', nfDefault,  7, ['!', '0.0001946661']);
  TestNumFmt({LINENUM}65518, '1/5137', nfDefault,  8, ['!', '0.00019466615']);
  TestNumFmt({LINENUM}65519, '1/5137', nfDefault,  9, ['!', '0.000194666148']);
  TestNumFmt({LINENUM}65520, '1/5137', nfDefault, 10, ['!', '0.0001946661476']);
  TestNumFmt({LINENUM}65521, '1/5137', nfDefault, 11, ['!', '0.00019466614756']);
  TestNumFmt({LINENUM}65522, '1/5137', nfDefault, 12, ['!', '0.000194666147557']);
  TestNumFmt({LINENUM}65523, '1/5137', nfDefault, 20, ['!', '0.00019466614755693984816', '*']);
  TestNumFmt({LINENUM}65524, '1/5137', nfDefault, 30, ['!', '0.000194666147556939848160404905587', '*']);
  TestNumFmt({LINENUM}65525, '1/5137', nfDefault, 40, ['!', '0.0001946661475569398481604049055869184348842', '*']);
  TestNumFmt({LINENUM}65526, '1/5137', nfDefault, 50, ['!', '0.00019466614755693984816040490558691843488417364220362', '*']);
  TestNumFmt({LINENUM}65527, '1/5137', nfDefault, 60, ['!', '0.000194666147556939848160404905586918434884173642203620790344559', '*']);
  TestNumFmt({LINENUM}65528, '1/5137', nfDefault, 70, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835', '*']);
  TestNumFmt({LINENUM}65529, '1/5137', nfDefault, 80, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668', '*']);
  TestNumFmt({LINENUM}65530, '1/5137', nfDefault, 90, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884563', '*']);
  TestNumFmt({LINENUM}65531, '1/5137', nfDefault, 100, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467', '*']);
  TestNumFmt({LINENUM}65532, '1/5137', nfDefault, 110, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879891', '*']);
  TestNumFmt({LINENUM}65533, '1/5137', nfDefault, 120, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681', '*']);
  TestNumFmt({LINENUM}65534, '1/5137', nfDefault, 130, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017', '*']);
  TestNumFmt({LINENUM}65535, '1/5137', nfDefault, 140, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871326', '*']);
  TestNumFmt({LINENUM}65536, '1/5137', nfDefault, 150, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648628', '*']);
  TestNumFmt({LINENUM}65537, '1/5137', nfDefault, 160, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597236', '*']);
  TestNumFmt({LINENUM}65538, '1/5137', nfDefault, 170, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871325676464862760365972357407046915', '*']);
  TestNumFmt({LINENUM}65539, '1/5137', nfDefault, 180, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648627603659723574070469145415612225', '*']);
  TestNumFmt({LINENUM}65540, '1/5137', nfDefault, 190, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597235740704691454156122250340665758', '*']);
  TestNumFmt({LINENUM}65541, '1/5137', nfDefault, 200, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871325676464862760365972357407046914541561222503406657582246447343', '*']);
  TestNumFmt({LINENUM}65542, '1/5137', nfDefault, 210, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648627603659723574070469145415612225034066575822464473428070858478', '*']);
  TestNumFmt({LINENUM}65543, '1/5137', nfDefault, 220, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597235740704691454156122250340665758224644734280708584777107261047', '*']);
  TestNumFmt({LINENUM}65544, '1/5137', nfDefault, 230, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871325676464862760365972357407046914541561222503406657582246447342807085847771072610473038738563', '*']);
  TestNumFmt({LINENUM}65545, '1/5137', nfDefault, 240, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648627603659723574070469145415612225034066575822464473428070858477710726104730387385633638310298', '*']);
  TestNumFmt({LINENUM}65546, '1/5137', nfDefault, 250, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597235740704691454156122250340665758224644734280708584777107261047303873856336383102978392057621', '*']);

  TestNumFmt({LINENUM}65548, '1/5137', nfFraction, ['!', '1/5137', '0.000194666147557']);
  TestNumFmt({LINENUM}65549, '1/5137', nfFraction,  1, ['!', '1/5137', '0.00019']);
  TestNumFmt({LINENUM}65550, '1/5137', nfFraction,  2, ['!', '1/5137', '0.00019']);
  TestNumFmt({LINENUM}65551, '1/5137', nfFraction,  3, ['!', '1/5137', '0.000195']);
  TestNumFmt({LINENUM}65552, '1/5137', nfFraction,  4, ['!', '1/5137', '0.0001947']);
  TestNumFmt({LINENUM}65553, '1/5137', nfFraction,  5, ['!', '1/5137', '0.00019467']);
  TestNumFmt({LINENUM}65554, '1/5137', nfFraction,  6, ['!', '1/5137', '0.000194666']);
  TestNumFmt({LINENUM}65555, '1/5137', nfFraction,  7, ['!', '1/5137', '0.0001946661']);
  TestNumFmt({LINENUM}65556, '1/5137', nfFraction,  8, ['!', '1/5137', '0.00019466615']);
  TestNumFmt({LINENUM}65557, '1/5137', nfFraction,  9, ['!', '1/5137', '0.000194666148']);
  TestNumFmt({LINENUM}65558, '1/5137', nfFraction, 10, ['!', '1/5137', '0.0001946661476']);
  TestNumFmt({LINENUM}65559, '1/5137', nfFraction, 11, ['!', '1/5137', '0.00019466614756']);
  TestNumFmt({LINENUM}65560, '1/5137', nfFraction, 12, ['!', '1/5137', '0.000194666147557']);

  TestNumFmt({LINENUM}65562, '1/5137', nfFixed, ['!', '0.000194666148']);
  TestNumFmt({LINENUM}65563, '1/5137', nfFixed,  0, ['!', '0']);
  TestNumFmt({LINENUM}65564, '1/5137', nfFixed,  1, ['!', '0.0']);
  TestNumFmt({LINENUM}65565, '1/5137', nfFixed,  2, ['!', '0.00']);
  TestNumFmt({LINENUM}65566, '1/5137', nfFixed,  3, ['!', '0.000']);
  TestNumFmt({LINENUM}65567, '1/5137', nfFixed,  4, ['!', '0.0002']);
  TestNumFmt({LINENUM}65568, '1/5137', nfFixed,  5, ['!', '0.00019']);
  TestNumFmt({LINENUM}65569, '1/5137', nfFixed,  6, ['!', '0.000195']);
  TestNumFmt({LINENUM}65570, '1/5137', nfFixed,  7, ['!', '0.0001947']);
  TestNumFmt({LINENUM}65571, '1/5137', nfFixed,  8, ['!', '0.00019467']);
  TestNumFmt({LINENUM}65572, '1/5137', nfFixed,  9, ['!', '0.000194666']);
  TestNumFmt({LINENUM}65573, '1/5137', nfFixed, 10, ['!', '0.0001946661']);
  TestNumFmt({LINENUM}65574, '1/5137', nfFixed, 11, ['!', '0.00019466615']);
  TestNumFmt({LINENUM}65575, '1/5137', nfFixed, 12, ['!', '0.000194666148']);
  TestNumFmt({LINENUM}65576, '1/5137', nfFixed, 20, ['!', '0.00019466614755693985', '*']);
  TestNumFmt({LINENUM}65577, '1/5137', nfFixed, 30, ['!', '0.000194666147556939848160404906', '*']);
  TestNumFmt({LINENUM}65578, '1/5137', nfFixed, 40, ['!', '0.0001946661475569398481604049055869184349', '*']);
  TestNumFmt({LINENUM}65579, '1/5137', nfFixed, 50, ['!', '0.00019466614755693984816040490558691843488417364220', '*']);
  TestNumFmt({LINENUM}65580, '1/5137', nfFixed, 60, ['!', '0.000194666147556939848160404905586918434884173642203620790345', '*']);
  TestNumFmt({LINENUM}65581, '1/5137', nfFixed, 70, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811758', '*']);
  TestNumFmt({LINENUM}65582, '1/5137', nfFixed, 80, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124392', '*']);
  TestNumFmt({LINENUM}65583, '1/5137', nfFixed, 90, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888846', '*']);
  TestNumFmt({LINENUM}65584, '1/5137', nfFixed, 100, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873', '*']);
  TestNumFmt({LINENUM}65585, '1/5137', nfFixed, 110, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040880', '*']);
  TestNumFmt({LINENUM}65586, '1/5137', nfFixed, 120, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869574', '*']);
  TestNumFmt({LINENUM}65587, '1/5137', nfFixed, 130, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503', '*']);
  TestNumFmt({LINENUM}65588, '1/5137', nfFixed, 140, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871', '*']);
  TestNumFmt({LINENUM}65589, '1/5137', nfFixed, 150, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764649', '*']);
  TestNumFmt({LINENUM}65590, '1/5137', nfFixed, 160, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597', '*']);
  TestNumFmt({LINENUM}65591, '1/5137', nfFixed, 170, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871325676464862760365972357407047', '*']);
  TestNumFmt({LINENUM}65592, '1/5137', nfFixed, 180, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648627603659723574070469145415612', '*']);
  TestNumFmt({LINENUM}65593, '1/5137', nfFixed, 190, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597235740704691454156122250340666', '*']);
  TestNumFmt({LINENUM}65594, '1/5137', nfFixed, 200, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871325676464862760365972357407046914541561222503406657582246447', '*']);
  TestNumFmt({LINENUM}65595, '1/5137', nfFixed, 210, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648627603659723574070469145415612225034066575822464473428070858', '*']);
  TestNumFmt({LINENUM}65596, '1/5137', nfFixed, 220, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597235740704691454156122250340665758224644734280708584777107261', '*']);
  TestNumFmt({LINENUM}65597, '1/5137', nfFixed, 230, ['!', '0.00019466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871325676464862760365972357407046914541561222503406657582246447342807085847771072610473038739', '*']);
  TestNumFmt({LINENUM}65598, '1/5137', nfFixed, 240, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648627603659723574070469145415612225034066575822464473428070858477710726104730387385633638310', '*']);
  TestNumFmt({LINENUM}65599, '1/5137', nfFixed, 250, ['!', '0.0001946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597235740704691454156122250340665758224644734280708584777107261047303873856336383102978392058', '*']);
  TestNumFmt({LINENUM}65600, '1/5137', nfFixed, 1000, ['!', '0.000194666147556939848160404905586918434884173642203620790344559081175783531243'+'9166828888456297449873467004087989098695736811368503017325287132567646486276036597235740704691454156122250340665758224644734280708584777107261047303873856336383102978392057621179676854195055479852053727856725715398092271753'+
  '941989488028031925248199338135098306404516254623321004477321393809616507689312828499124002335993770683278177924858867043021218610083706443449484134708974109402374927000194666147556939'+'848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648627603659723574070469145415612'+
  '2250340'+'66575822464473428070858477710726104730387385633638310297839205762117967685419505547985205372785672571539809227175394198948802803192524819933813509830640451625462332100447732'+'13938096165076893128284991240023359937706832781779248588670430212186100837064434494841347089741094023749270001946661475569398481604049055869184348841736422036207903'+
  '4455908118', '*']);

  TestNumFmt({LINENUM}65605, '1/5137', nfExponent, ['!', '1.94666147557E-4']);
  TestNumFmt({LINENUM}65606, '1/5137', nfExponent,  1, ['!', '2E-4', '1.9E-4']);
  TestNumFmt({LINENUM}65607, '1/5137', nfExponent,  2, ['!', '1.9E-4']);
  TestNumFmt({LINENUM}65608, '1/5137', nfExponent,  3, ['!', '1.95E-4']);
  TestNumFmt({LINENUM}65609, '1/5137', nfExponent,  4, ['!', '1.947E-4']);
  TestNumFmt({LINENUM}65610, '1/5137', nfExponent,  5, ['!', '1.9467E-4']);
  TestNumFmt({LINENUM}65611, '1/5137', nfExponent,  6, ['!', '1.94666E-4']);
  TestNumFmt({LINENUM}65612, '1/5137', nfExponent,  7, ['!', '1.946661E-4']);
  TestNumFmt({LINENUM}65613, '1/5137', nfExponent,  8, ['!', '1.9466615E-4']);
  TestNumFmt({LINENUM}65614, '1/5137', nfExponent,  9, ['!', '1.94666148E-4']);
  TestNumFmt({LINENUM}65615, '1/5137', nfExponent, 10, ['!', '1.946661476E-4']);
  TestNumFmt({LINENUM}65616, '1/5137', nfExponent, 11, ['!', '1.9466614756E-4']);
  TestNumFmt({LINENUM}65617, '1/5137', nfExponent, 12, ['!', '1.94666147557E-4']);
  TestNumFmt({LINENUM}65618, '1/5137', nfExponent, 13, ['!', '1.946661475569E-4']);
  TestNumFmt({LINENUM}65619, '1/5137', nfExponent, 14, ['!', '1.9466614755694E-4']);
  TestNumFmt({LINENUM}65620, '1/5137', nfExponent, 15, ['!', '1.94666147556940E-4', '*']);
  TestNumFmt({LINENUM}65621, '1/5137', nfExponent, 16, ['!', '1.946661475569398E-4', '*']);
  TestNumFmt({LINENUM}65622, '1/5137', nfExponent, 17, ['!', '1.9466614755693985E-4', '*']);
  TestNumFmt({LINENUM}65623, '1/5137', nfExponent, 18, ['!', '1.94666147556939848E-4', '*']);
  TestNumFmt({LINENUM}65624, '1/5137', nfExponent, 19, ['!', '1.946661475569398482E-4', '*']);
  TestNumFmt({LINENUM}65625, '1/5137', nfExponent, 20, ['!', '1.9466614755693984816E-4', '*']);
  TestNumFmt({LINENUM}65626, '1/5137', nfExponent, 30, ['!', '1.94666147556939848160404905587E-4', '*']);
  TestNumFmt({LINENUM}65627, '1/5137', nfExponent, 40, ['!', '1.946661475569398481604049055869184348842E-4', '*']);
  TestNumFmt({LINENUM}65628, '1/5137', nfExponent, 50, ['!', '1.9466614755693984816040490558691843488417364220362E-4', '*']);
  TestNumFmt({LINENUM}65629, '1/5137', nfExponent, 60, ['!', '1.94666147556939848160404905586918434884173642203620790344559E-4', '*']);
  TestNumFmt({LINENUM}65630, '1/5137', nfExponent, 70, ['!', '1.946661475569398481604049055869184348841736422036207903445590811757835E-4', '*']);
  TestNumFmt({LINENUM}65631, '1/5137', nfExponent, 80, ['!', '1.9466614755693984816040490558691843488417364220362079034455908117578353124391668E-4', '*']);
  TestNumFmt({LINENUM}65632, '1/5137', nfExponent, 90, ['!', '1.94666147556939848160404905586918434884173642203620790344559081175783531243916682888845630E-4', '*']);
  TestNumFmt({LINENUM}65633, '1/5137', nfExponent, 100, ['!', '1.946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467E-4', '*']);
  TestNumFmt({LINENUM}65634, '1/5137', nfExponent, 110, ['!', '1.9466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879891E-4', '*']);
  TestNumFmt({LINENUM}65635, '1/5137', nfExponent, 120, ['!', '1.94666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681E-4', '*']);
  TestNumFmt({LINENUM}65636, '1/5137', nfExponent, 130, ['!', '1.946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017E-4', '*']);
  TestNumFmt({LINENUM}65637, '1/5137', nfExponent, 140, ['!', '1.9466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871326E-4', '*']);
  TestNumFmt({LINENUM}65638, '1/5137', nfExponent, 150, ['!', '1.94666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648628E-4', '*']);
  TestNumFmt({LINENUM}65639, '1/5137', nfExponent, 160, ['!', '1.946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597236E-4', '*']);
  TestNumFmt({LINENUM}65640, '1/5137', nfExponent, 170, ['!', '1.9466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871325676464862760365972357407046915E-4', '*']);
  TestNumFmt({LINENUM}65641, '1/5137', nfExponent, 180, ['!', '1.94666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648627603659723574070469145415612225E-4', '*']);
  TestNumFmt({LINENUM}65642, '1/5137', nfExponent, 190, ['!', '1.946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597235740704691454156122250340665758E-4', '*']);
  TestNumFmt({LINENUM}65643, '1/5137', nfExponent, 200, ['!', '1.9466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871325676464862760365972357407046914541561222503406657582246447343E-4', '*']);
  TestNumFmt({LINENUM}65644, '1/5137', nfExponent, 210, ['!', '1.94666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648627603659723574070469145415612225034066575822464473428070858478E-4', '*']);
  TestNumFmt({LINENUM}65645, '1/5137', nfExponent, 220, ['!', '1.946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597235740704691454156122250340665758224644734280708584777107261047E-4', '*']);
  TestNumFmt({LINENUM}65646, '1/5137', nfExponent, 230, ['!', '1.9466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871325676464862760365972357407046914541561222503406657582246447342807085847771072610473038738563E-4', '*']);
  TestNumFmt({LINENUM}65647, '1/5137', nfExponent, 240, ['!', '1.94666147556939848160404905586918434884173642203620790344559081175783531243916682888845629744987346700408798909869573681136850301732528713256764648627603659723574070469145415612225034066575822464473428070858477710726104730387385633638310298E-4', '*']);
  TestNumFmt({LINENUM}65648, '1/5137', nfExponent, 250, ['!', '1.946661475569398481604049055869184348841736422036207903445590811757835312439166828888456297449873467004087989098695736811368503017325287132567646486276036597235740704691454156122250340665758224644734280708584777107261047303873856336383102978392057621E-4', '*']);
  TestNumFmt({LINENUM}65649, '1/5137', nfExponent, 1000, ['!', '1.9466614755693984816040490558691843488417364220362079034455908117578353124391668288884562974498734670040879890986957368113685030173252871325676464862760365972357407046914541561222503406657582246447342807085847771072610473038738563363831029783920576211'+
  '7967685419505547985205372785672571539'+'809227175394198948802803192524819933813509830640451625462332100447732139380961650768931282849912400233599377068327817792485886704302121861008370644344948413470897410940237492700019466614755693984816040490558691843488417364'+'22036207903445590811757835312439166828'+
  '8884562974498734670040879890986957368'+'113685030173252871325676464862760365972357407046914541561222503406657582246447342807085847771072610473038738563363831029783920576211796768541950554798520537278567257153980922717539419894880280319252481993381350983064045162'+'54623321004477321393809616507689312828'+
  '49912400233599377068327817792485886704302121861008370644344948413470897410940237492700019466614755693984816040490558691843488417364220362079034455908117578E-4', '*']);

  // --

  TestNumFmt({LINENUM}65656, '1/9', nfDefault, ['!', '0.111111111111']);
  TestNumFmt({LINENUM}65657, '1/9', nfDefault, 01, ['!', '0.1', '0.11']);
  TestNumFmt({LINENUM}65658, '1/9', nfDefault, 02, ['!', '0.11']);
  TestNumFmt({LINENUM}65659, '1/9', nfDefault, 03, ['!', '0.111']);
  TestNumFmt({LINENUM}65660, '1/9', nfDefault, 04, ['!', '0.1111']);
  TestNumFmt({LINENUM}65661, '1/9', nfDefault, 05, ['!', '0.11111']);
  TestNumFmt({LINENUM}65662, '1/9', nfDefault, 06, ['!', '0.111111']);
  TestNumFmt({LINENUM}65663, '1/9', nfDefault, 07, ['!', '0.1111111']);
  TestNumFmt({LINENUM}65664, '1/9', nfDefault, 08, ['!', '0.11111111']);
  TestNumFmt({LINENUM}65665, '1/9', nfDefault, 09, ['!', '0.111111111']);
  TestNumFmt({LINENUM}65666, '1/9', nfDefault, 10, ['!', '0.1111111111']);
  TestNumFmt({LINENUM}65667, '1/9', nfDefault, 11, ['!', '0.11111111111']);
  TestNumFmt({LINENUM}65668, '1/9', nfDefault, 12, ['!', '0.111111111111']);
  TestNumFmt({LINENUM}65669, '1/9', nfDefault, 100, ['!', '0.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', '*']);
  TestNumFmt({LINENUM}65670, '1/9', nfDefault, 200, ['!', '0.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', '*']);

  TestNumFmt({LINENUM}65672, '1/9', nfFraction, ['!', '1/9', '0.111111111111']);
  TestNumFmt({LINENUM}65673, '1/9', nfFraction, 01, ['!', '1/9', '0.11']);
  TestNumFmt({LINENUM}65674, '1/9', nfFraction, 02, ['!', '1/9', '0.11']);
  TestNumFmt({LINENUM}65675, '1/9', nfFraction, 03, ['!', '1/9', '0.111']);
  TestNumFmt({LINENUM}65676, '1/9', nfFraction, 04, ['!', '1/9', '0.1111']);
  TestNumFmt({LINENUM}65677, '1/9', nfFraction, 05, ['!', '1/9', '0.11111']);
  TestNumFmt({LINENUM}65678, '1/9', nfFraction, 06, ['!', '1/9', '0.111111']);
  TestNumFmt({LINENUM}65679, '1/9', nfFraction, 07, ['!', '1/9', '0.1111111']);
  TestNumFmt({LINENUM}65680, '1/9', nfFraction, 08, ['!', '1/9', '0.11111111']);
  TestNumFmt({LINENUM}65681, '1/9', nfFraction, 09, ['!', '1/9', '0.111111111']);
  TestNumFmt({LINENUM}65682, '1/9', nfFraction, 10, ['!', '1/9', '0.1111111111']);
  TestNumFmt({LINENUM}65683, '1/9', nfFraction, 11, ['!', '1/9', '0.11111111111']);
  TestNumFmt({LINENUM}65684, '1/9', nfFraction, 12, ['!', '1/9', '0.111111111111']);
  TestNumFmt({LINENUM}65685, '1/9', nfFraction, 100, ['!', '1/9', '*']);
  TestNumFmt({LINENUM}65686, '1/9', nfFraction, 200, ['!', '1/9', '*']);

  TestNumFmt({LINENUM}65688, '1/9', nfFixed, ['!', '0.111111111111']);
  TestNumFmt({LINENUM}65689, '1/9', nfFixed, 00, ['!', '0']);
  TestNumFmt({LINENUM}65690, '1/9', nfFixed, 01, ['!', '0.1']);
  TestNumFmt({LINENUM}65691, '1/9', nfFixed, 02, ['!', '0.11']);
  TestNumFmt({LINENUM}65692, '1/9', nfFixed, 03, ['!', '0.111']);
  TestNumFmt({LINENUM}65693, '1/9', nfFixed, 04, ['!', '0.1111']);
  TestNumFmt({LINENUM}65694, '1/9', nfFixed, 05, ['!', '0.11111']);
  TestNumFmt({LINENUM}65695, '1/9', nfFixed, 06, ['!', '0.111111']);
  TestNumFmt({LINENUM}65696, '1/9', nfFixed, 07, ['!', '0.1111111']);
  TestNumFmt({LINENUM}65697, '1/9', nfFixed, 08, ['!', '0.11111111']);
  TestNumFmt({LINENUM}65698, '1/9', nfFixed, 09, ['!', '0.111111111']);
  TestNumFmt({LINENUM}65699, '1/9', nfFixed, 10, ['!', '0.1111111111']);
  TestNumFmt({LINENUM}65700, '1/9', nfFixed, 11, ['!', '0.11111111111']);
  TestNumFmt({LINENUM}65701, '1/9', nfFixed, 12, ['!', '0.111111111111']);
  TestNumFmt({LINENUM}65702, '1/9', nfFixed, 100, ['!', '0.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', '*']);
  TestNumFmt({LINENUM}65703, '1/9', nfFixed, 200, ['!', '0.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', '*']);

  TestNumFmt({LINENUM}65705, '1/9', nfExponent, ['!', '1.11111111111E-1']);
  TestNumFmt({LINENUM}65706, '1/9', nfExponent, 01, ['!', '1E-1', '1.1E-1']);
  TestNumFmt({LINENUM}65707, '1/9', nfExponent, 02, ['!', '1.1E-1']);
  TestNumFmt({LINENUM}65708, '1/9', nfExponent, 03, ['!', '1.11E-1']);
  TestNumFmt({LINENUM}65709, '1/9', nfExponent, 04, ['!', '1.111E-1']);
  TestNumFmt({LINENUM}65710, '1/9', nfExponent, 05, ['!', '1.1111E-1']);
  TestNumFmt({LINENUM}65711, '1/9', nfExponent, 06, ['!', '1.11111E-1']);
  TestNumFmt({LINENUM}65712, '1/9', nfExponent, 07, ['!', '1.111111E-1']);
  TestNumFmt({LINENUM}65713, '1/9', nfExponent, 08, ['!', '1.1111111E-1']);
  TestNumFmt({LINENUM}65714, '1/9', nfExponent, 09, ['!', '1.11111111E-1']);
  TestNumFmt({LINENUM}65715, '1/9', nfExponent, 10, ['!', '1.111111111E-1']);
  TestNumFmt({LINENUM}65716, '1/9', nfExponent, 11, ['!', '1.1111111111E-1']);
  TestNumFmt({LINENUM}65717, '1/9', nfExponent, 12, ['!', '1.11111111111E-1']);
  TestNumFmt({LINENUM}65718, '1/9', nfExponent, 100, ['!', '1.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111E-1', '*']);
  TestNumFmt({LINENUM}65719, '1/9', nfExponent, 200, ['!', '1.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111E-1', '*']);

  // --

  TestNumFmt({LINENUM}65723, '1/999', nfDefault, ['!', '0.001001001001']);
  TestNumFmt({LINENUM}65724, '1/999', nfDefault,  1, ['!', '0.001']);
  TestNumFmt({LINENUM}65725, '1/999', nfDefault,  2, ['!', '0.001']);
  TestNumFmt({LINENUM}65726, '1/999', nfDefault,  3, ['!', '0.001']);
  TestNumFmt({LINENUM}65727, '1/999', nfDefault,  4, ['!', '0.001001']);
  TestNumFmt({LINENUM}65728, '1/999', nfDefault,  5, ['!', '0.001001']);
  TestNumFmt({LINENUM}65729, '1/999', nfDefault,  6, ['!', '0.001001']);
  TestNumFmt({LINENUM}65730, '1/999', nfDefault,  7, ['!', '0.001001001']);
  TestNumFmt({LINENUM}65731, '1/999', nfDefault,  8, ['!', '0.001001001']);
  TestNumFmt({LINENUM}65732, '1/999', nfDefault,  9, ['!', '0.001001001']);
  TestNumFmt({LINENUM}65733, '1/999', nfDefault, 10, ['!', '0.001001001001']);
  TestNumFmt({LINENUM}65734, '1/999', nfDefault, 11, ['!', '0.001001001001']);
  TestNumFmt({LINENUM}65735, '1/999', nfDefault, 12, ['!', '0.001001001001']);

  TestNumFmt({LINENUM}65737, '1/999', nfFraction, ['!', '1/999', '0.001001001001']);
  TestNumFmt({LINENUM}65738, '1/999', nfFraction,  1, ['!', '1/999', '0.001']);
  TestNumFmt({LINENUM}65739, '1/999', nfFraction,  2, ['!', '1/999', '0.001']);
  TestNumFmt({LINENUM}65740, '1/999', nfFraction,  3, ['!', '1/999', '0.001']);
  TestNumFmt({LINENUM}65741, '1/999', nfFraction,  4, ['!', '1/999', '0.001001']);
  TestNumFmt({LINENUM}65742, '1/999', nfFraction,  5, ['!', '1/999', '0.001001']);
  TestNumFmt({LINENUM}65743, '1/999', nfFraction,  6, ['!', '1/999', '0.001001']);
  TestNumFmt({LINENUM}65744, '1/999', nfFraction,  7, ['!', '1/999', '0.001001001']);
  TestNumFmt({LINENUM}65745, '1/999', nfFraction,  8, ['!', '1/999', '0.001001001']);
  TestNumFmt({LINENUM}65746, '1/999', nfFraction,  9, ['!', '1/999', '0.001001001']);
  TestNumFmt({LINENUM}65747, '1/999', nfFraction, 10, ['!', '1/999', '0.001001001001']);
  TestNumFmt({LINENUM}65748, '1/999', nfFraction, 11, ['!', '1/999', '0.001001001001']);
  TestNumFmt({LINENUM}65749, '1/999', nfFraction, 12, ['!', '1/999', '0.001001001001']);

  TestNumFmt({LINENUM}65751, '1/999', nfFixed, ['!', '0.001001001001']);
  TestNumFmt({LINENUM}65752, '1/999', nfFixed,  0, ['!', '0']);
  TestNumFmt({LINENUM}65753, '1/999', nfFixed,  1, ['!', '0.0']);
  TestNumFmt({LINENUM}65754, '1/999', nfFixed,  2, ['!', '0.00']);
  TestNumFmt({LINENUM}65755, '1/999', nfFixed,  3, ['!', '0.001']);
  TestNumFmt({LINENUM}65756, '1/999', nfFixed,  4, ['!', '0.0010']);
  TestNumFmt({LINENUM}65757, '1/999', nfFixed,  5, ['!', '0.00100']);
  TestNumFmt({LINENUM}65758, '1/999', nfFixed,  6, ['!', '0.001001']);
  TestNumFmt({LINENUM}65759, '1/999', nfFixed,  7, ['!', '0.0010010']);
  TestNumFmt({LINENUM}65760, '1/999', nfFixed,  8, ['!', '0.00100100']);
  TestNumFmt({LINENUM}65761, '1/999', nfFixed,  9, ['!', '0.001001001']);
  TestNumFmt({LINENUM}65762, '1/999', nfFixed, 10, ['!', '0.0010010010']);
  TestNumFmt({LINENUM}65763, '1/999', nfFixed, 11, ['!', '0.00100100100']);
  TestNumFmt({LINENUM}65764, '1/999', nfFixed, 12, ['!', '0.001001001001']);

  TestNumFmt({LINENUM}65766, '1/999', nfExponent, ['!', '1.00100100100E-3']);
  TestNumFmt({LINENUM}65767, '1/999', nfExponent,  1, ['!', '1E-3', '1.0E-3']);
  TestNumFmt({LINENUM}65768, '1/999', nfExponent,  2, ['!', '1.0E-3']);
  TestNumFmt({LINENUM}65769, '1/999', nfExponent,  3, ['!', '1.00E-3']);
  TestNumFmt({LINENUM}65770, '1/999', nfExponent,  4, ['!', '1.001E-3']);
  TestNumFmt({LINENUM}65771, '1/999', nfExponent,  5, ['!', '1.0010E-3']);
  TestNumFmt({LINENUM}65772, '1/999', nfExponent,  6, ['!', '1.00100E-3']);
  TestNumFmt({LINENUM}65773, '1/999', nfExponent,  7, ['!', '1.001001E-3']);
  TestNumFmt({LINENUM}65774, '1/999', nfExponent,  8, ['!', '1.0010010E-3']);
  TestNumFmt({LINENUM}65775, '1/999', nfExponent,  9, ['!', '1.00100100E-3']);
  TestNumFmt({LINENUM}65776, '1/999', nfExponent, 10, ['!', '1.001001001E-3']);
  TestNumFmt({LINENUM}65777, '1/999', nfExponent, 11, ['!', '1.0010010010E-3']);
  TestNumFmt({LINENUM}65778, '1/999', nfExponent, 12, ['!', '1.00100100100E-3']);

  // --

  TestNumFmt({LINENUM}65782, '1/123456789', nfDefault, ['!', '8.10000007371E-9']);
  TestNumFmt({LINENUM}65783, '1/123456789', nfDefault,  1, ['!', '8E-9', '8.1E-9']);
  TestNumFmt({LINENUM}65784, '1/123456789', nfDefault,  2, ['!', '8.1E-9']);
  TestNumFmt({LINENUM}65785, '1/123456789', nfDefault,  3, ['!', '8.1E-9']);
  TestNumFmt({LINENUM}65786, '1/123456789', nfDefault,  4, ['!', '8.1E-9']);
  TestNumFmt({LINENUM}65787, '1/123456789', nfDefault,  5, ['!', '8.1E-9']);
  TestNumFmt({LINENUM}65788, '1/123456789', nfDefault,  6, ['!', '8.1E-9']);
  TestNumFmt({LINENUM}65789, '1/123456789', nfDefault,  7, ['!', '8.1E-9']);
  TestNumFmt({LINENUM}65790, '1/123456789', nfDefault,  8, ['!', '8.1000001E-9']);
  TestNumFmt({LINENUM}65791, '1/123456789', nfDefault,  9, ['!', '8.10000007E-9']);
  TestNumFmt({LINENUM}65792, '1/123456789', nfDefault, 10, ['!', '8.100000074E-9']);
  TestNumFmt({LINENUM}65793, '1/123456789', nfDefault, 11, ['!', '8.1000000737E-9']);
  TestNumFmt({LINENUM}65794, '1/123456789', nfDefault, 12, ['!', '8.10000007371E-9']);
  TestNumFmt({LINENUM}65795, '1/123456789', nfDefault, 20, ['!', '8.1000000737100006708E-9', '*']);
  TestNumFmt({LINENUM}65796, '1/123456789', nfDefault, 30, ['!', '8.10000007371000067076100610393E-9', '*']);
  TestNumFmt({LINENUM}65797, '1/123456789', nfDefault, 40, ['!', '8.100000073710000670761006103925155545719E-9', '*']);
  TestNumFmt({LINENUM}65798, '1/123456789', nfDefault, 50, ['!', '8.1000000737100006707610061039251555457189154660421E-9', '*']);
  TestNumFmt({LINENUM}65799, '1/123456789', nfDefault, 60, ['!', '8.10000007371000067076100610392515554571891546604213074098339E-9', '*']);
  TestNumFmt({LINENUM}65800, '1/123456789', nfDefault, 70, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948847E-9', '*']);
  TestNumFmt({LINENUM}65801, '1/123456789', nfDefault, 80, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046E-9', '*']);
  TestNumFmt({LINENUM}65802, '1/123456789', nfDefault, 90, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198E-9', '*']);
  TestNumFmt({LINENUM}65803, '1/123456789', nfDefault, 100, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327052E-9', '*']);
  TestNumFmt({LINENUM}65804, '1/123456789', nfDefault, 110, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706E-9', '*']);
  TestNumFmt({LINENUM}65805, '1/123456789', nfDefault, 120, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315281E-9', '*']);
  TestNumFmt({LINENUM}65806, '1/123456789', nfDefault, 130, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690544E-9', '*']);
  TestNumFmt({LINENUM}65807, '1/123456789', nfDefault, 140, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486E-9', '*']);
  TestNumFmt({LINENUM}65808, '1/123456789', nfDefault, 150, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315280701169054380638394863809393261E-9', '*']);
  TestNumFmt({LINENUM}65809, '1/123456789', nfDefault, 160, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690543806383948638093932606654786721E-9', '*']);
  TestNumFmt({LINENUM}65810, '1/123456789', nfDefault, 170, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486380939326066547867205585591571E-9', '*']);
  TestNumFmt({LINENUM}65811, '1/123456789', nfDefault, 180, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315280701169054380638394863809393260665478672055855915708288832945E-9', '*']);
  TestNumFmt({LINENUM}65812, '1/123456789', nfDefault, 190, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690543806383948638093932606654786720558559157082888329454283798034E-9', '*']);
  TestNumFmt({LINENUM}65813, '1/123456789', nfDefault, 200, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486380939326066547867205585591570828883294542837980339825621092E-9', '*']);
  TestNumFmt({LINENUM}65814, '1/123456789', nfDefault, 210, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486380939326066547867205585591570828883294542837980339825621092413151941E-9', '*']);
  TestNumFmt({LINENUM}65815, '1/123456789', nfDefault, 220, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690543806383948638093932606654786720558559157082888329454283798033982562109241315194095968266273E-9', '*']);
  TestNumFmt({LINENUM}65816, '1/123456789', nfDefault, 230, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486380939326066547867205585591570828883294542837980339825621092413151940959682662733112230871E-9', '*']);
  TestNumFmt({LINENUM}65817, '1/123456789', nfDefault, 240, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486380939326066547867205585591570828883294542837980339825621092413151940959682662733112230871321300929E-9', '*']);
  TestNumFmt({LINENUM}65818, '1/123456789', nfDefault, 250, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690543806383948638093932606654786720558559157082888329454283798033982562109241315194095968266273311223087132130092902383845412E-9', '*']);
  TestNumFmt({LINENUM}65819, '1/123456789', nfDefault, 500, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315280701169054380638394863809393260665478672055855915708288832945428379803398256210924131519409596826627331122308713213009290238384541169'+
  '29932464062385422967707349006136875955845571198194697903571750922502933394776693892467914421458021235267993240938738492542520282136934567446104563759551530211918924928462216849006173325956177266201213122431039414122458668514373883480802339675301291E-9', '*']);

  TestNumFmt({LINENUM}65822, '1/123456789', nfFraction, ['!', '1/123456789', '8.10000007371E-9']);
  TestNumFmt({LINENUM}65823, '1/123456789', nfFraction,  1, ['!', '1/123456789', '8.1E-9']);
  TestNumFmt({LINENUM}65824, '1/123456789', nfFraction,  2, ['!', '1/123456789', '8.1E-9']);
  TestNumFmt({LINENUM}65825, '1/123456789', nfFraction,  3, ['!', '1/123456789', '8.1E-9']);
  TestNumFmt({LINENUM}65826, '1/123456789', nfFraction,  4, ['!', '1/123456789', '8.1E-9']);
  TestNumFmt({LINENUM}65827, '1/123456789', nfFraction,  5, ['!', '1/123456789', '8.1E-9']);
  TestNumFmt({LINENUM}65828, '1/123456789', nfFraction,  6, ['!', '1/123456789', '8.1E-9']);
  TestNumFmt({LINENUM}65829, '1/123456789', nfFraction,  7, ['!', '1/123456789', '8.1E-9']);
  TestNumFmt({LINENUM}65830, '1/123456789', nfFraction,  8, ['!', '1/123456789', '8.1000001E-9']);
  TestNumFmt({LINENUM}65831, '1/123456789', nfFraction,  9, ['!', '1/123456789', '8.10000007E-9']);
  TestNumFmt({LINENUM}65832, '1/123456789', nfFraction, 10, ['!', '1/123456789', '8.100000074E-9']);
  TestNumFmt({LINENUM}65833, '1/123456789', nfFraction, 11, ['!', '1/123456789', '8.1000000737E-9']);
  TestNumFmt({LINENUM}65834, '1/123456789', nfFraction, 12, ['!', '1/123456789', '8.10000007371E-9']);

  TestNumFmt({LINENUM}65836, '1/123456789', nfFixed, ['!', '0.000000008100']);
  TestNumFmt({LINENUM}65837, '1/123456789', nfFixed,  0, ['!', '0']);
  TestNumFmt({LINENUM}65838, '1/123456789', nfFixed,  1, ['!', '0.0']);
  TestNumFmt({LINENUM}65839, '1/123456789', nfFixed,  2, ['!', '0.00']);
  TestNumFmt({LINENUM}65840, '1/123456789', nfFixed,  3, ['!', '0.000']);
  TestNumFmt({LINENUM}65841, '1/123456789', nfFixed,  4, ['!', '0.0000']);
  TestNumFmt({LINENUM}65842, '1/123456789', nfFixed,  5, ['!', '0.00000']);
  TestNumFmt({LINENUM}65843, '1/123456789', nfFixed,  6, ['!', '0.000000']);
  TestNumFmt({LINENUM}65844, '1/123456789', nfFixed,  7, ['!', '0.0000000']);
  TestNumFmt({LINENUM}65845, '1/123456789', nfFixed,  8, ['!', '0.00000001']);
  TestNumFmt({LINENUM}65846, '1/123456789', nfFixed,  9, ['!', '0.000000008']);
  TestNumFmt({LINENUM}65847, '1/123456789', nfFixed, 10, ['!', '0.0000000081']);
  TestNumFmt({LINENUM}65848, '1/123456789', nfFixed, 11, ['!', '0.00000000810']);
  TestNumFmt({LINENUM}65849, '1/123456789', nfFixed, 12, ['!', '0.000000008100']);
  TestNumFmt({LINENUM}65850, '1/123456789', nfFixed, 13, ['!', '0.0000000081000']);
  TestNumFmt({LINENUM}65851, '1/123456789', nfFixed, 14, ['!', '0.00000000810000']);
  TestNumFmt({LINENUM}65852, '1/123456789', nfFixed, 15, ['!', '0.000000008100000', '*']);
  TestNumFmt({LINENUM}65853, '1/123456789', nfFixed, 16, ['!', '0.0000000081000001', '*']);
  TestNumFmt({LINENUM}65854, '1/123456789', nfFixed, 17, ['!', '0.00000000810000007', '*']);
  TestNumFmt({LINENUM}65855, '1/123456789', nfFixed, 18, ['!', '0.000000008100000074', '*']);
  TestNumFmt({LINENUM}65856, '1/123456789', nfFixed, 19, ['!', '0.0000000081000000737', '*']);
  TestNumFmt({LINENUM}65857, '1/123456789', nfFixed, 20, ['!', '0.00000000810000007371', '*']);
  TestNumFmt({LINENUM}65858, '1/123456789', nfFixed, 30, ['!', '0.000000008100000073710000670761', '*']);
  TestNumFmt({LINENUM}65859, '1/123456789', nfFixed, 40, ['!', '0.0000000081000000737100006707610061039252', '*']);
  TestNumFmt({LINENUM}65860, '1/123456789', nfFixed, 50, ['!', '0.00000000810000007371000067076100610392515554571892', '*']);
  TestNumFmt({LINENUM}65861, '1/123456789', nfFixed, 100, ['!', '0.0000000081000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837', '*']);
  TestNumFmt({LINENUM}65862, '1/123456789', nfFixed, 150, ['!', '0.000000008100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690543806383948638', '*']);
  TestNumFmt({LINENUM}65863, '1/123456789', nfFixed, 200, ['!', '0.00000000810000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315280701169054380638394863809393260665478672055855915708288832945428379803398', '*']);
  TestNumFmt({LINENUM}65864, '1/123456789', nfFixed, 250, ['!', '0.0000000081000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486380939326066547867205585591570828883294542837980339825621092413151940959682662733112230871321300929024', '*']);

  TestNumFmt({LINENUM}65866, '1/123456789', nfExponent, ['!', '8.10000007371E-9']);
  TestNumFmt({LINENUM}65867, '1/123456789', nfExponent,  1, ['!', '8E-9', '8.1E-9']);
  TestNumFmt({LINENUM}65868, '1/123456789', nfExponent,  2, ['!', '8.1E-9']);
  TestNumFmt({LINENUM}65869, '1/123456789', nfExponent,  3, ['!', '8.10E-9']);
  TestNumFmt({LINENUM}65870, '1/123456789', nfExponent,  4, ['!', '8.100E-9']);
  TestNumFmt({LINENUM}65871, '1/123456789', nfExponent,  5, ['!', '8.1000E-9']);
  TestNumFmt({LINENUM}65872, '1/123456789', nfExponent,  6, ['!', '8.10000E-9']);
  TestNumFmt({LINENUM}65873, '1/123456789', nfExponent,  7, ['!', '8.100000E-9']);
  TestNumFmt({LINENUM}65874, '1/123456789', nfExponent,  8, ['!', '8.1000001E-9']);
  TestNumFmt({LINENUM}65875, '1/123456789', nfExponent,  9, ['!', '8.10000007E-9']);
  TestNumFmt({LINENUM}65876, '1/123456789', nfExponent, 10, ['!', '8.100000074E-9']);
  TestNumFmt({LINENUM}65877, '1/123456789', nfExponent, 11, ['!', '8.1000000737E-9']);
  TestNumFmt({LINENUM}65878, '1/123456789', nfExponent, 12, ['!', '8.10000007371E-9']);
  TestNumFmt({LINENUM}65879, '1/123456789', nfExponent, 20, ['!', '8.1000000737100006708E-9', '*']);
  TestNumFmt({LINENUM}65880, '1/123456789', nfExponent, 30, ['!', '8.10000007371000067076100610393E-9', '*']);
  TestNumFmt({LINENUM}65881, '1/123456789', nfExponent, 40, ['!', '8.100000073710000670761006103925155545719E-9', '*']);
  TestNumFmt({LINENUM}65882, '1/123456789', nfExponent, 50, ['!', '8.1000000737100006707610061039251555457189154660421E-9', '*']);
  TestNumFmt({LINENUM}65883, '1/123456789', nfExponent, 60, ['!', '8.10000007371000067076100610392515554571891546604213074098339E-9', '*']);
  TestNumFmt({LINENUM}65884, '1/123456789', nfExponent, 70, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948847E-9', '*']);
  TestNumFmt({LINENUM}65885, '1/123456789', nfExponent, 80, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046E-9', '*']);
  TestNumFmt({LINENUM}65886, '1/123456789', nfExponent, 90, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198E-9', '*']);
  TestNumFmt({LINENUM}65887, '1/123456789', nfExponent, 100, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327052E-9', '*']);
  TestNumFmt({LINENUM}65888, '1/123456789', nfExponent, 110, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706E-9', '*']);
  TestNumFmt({LINENUM}65889, '1/123456789', nfExponent, 120, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315281E-9', '*']);
  TestNumFmt({LINENUM}65890, '1/123456789', nfExponent, 130, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690544E-9', '*']);
  TestNumFmt({LINENUM}65891, '1/123456789', nfExponent, 140, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486E-9', '*']);
  TestNumFmt({LINENUM}65892, '1/123456789', nfExponent, 150, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315280701169054380638394863809393261E-9', '*']);
  TestNumFmt({LINENUM}65893, '1/123456789', nfExponent, 160, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690543806383948638093932606654786721E-9', '*']);
  TestNumFmt({LINENUM}65894, '1/123456789', nfExponent, 170, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486380939326066547867205585591571E-9', '*']);
  TestNumFmt({LINENUM}65895, '1/123456789', nfExponent, 180, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315280701169054380638394863809393260665478672055855915708288832945E-9', '*']);
  TestNumFmt({LINENUM}65896, '1/123456789', nfExponent, 190, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690543806383948638093932606654786720558559157082888329454283798034E-9', '*']);
  TestNumFmt({LINENUM}65897, '1/123456789', nfExponent, 200, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486380939326066547867205585591570828883294542837980339825621092E-9', '*']);
  TestNumFmt({LINENUM}65898, '1/123456789', nfExponent, 210, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315280701169054380638394863809393260665478672055855915708288832945428379803398256210924131519410E-9', '*']);
  TestNumFmt({LINENUM}65899, '1/123456789', nfExponent, 220, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690543806383948638093932606654786720558559157082888329454283798033982562109241315194095968266273E-9', '*']);
  TestNumFmt({LINENUM}65900, '1/123456789', nfExponent, 230, ['!', '8.1000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905438063839486380939326066547867205585591570828883294542837980339825621092413151940959682662733112230871E-9', '*']);
  TestNumFmt({LINENUM}65901, '1/123456789', nfExponent, 240, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315280701169054380638394863809393260665478672055855915708288832945428379803398256210924131519409596826627331122308713213009290E-9', '*']);
  TestNumFmt({LINENUM}65902, '1/123456789', nfExponent, 250, ['!', '8.100000073710000670761006103925155545718915466042130740983389742948846660834504613593991983705327051718476170638133152807011690543806383948638093932606654786720558559157082888329454283798033982562109241315194095968266273311223087132130092902383845412E-9', '*']);
  TestNumFmt({LINENUM}65903, '1/123456789', nfExponent, 500, ['!', '8.10000007371000067076100610392515554571891546604213074098338974294884666083450461359399198370532705171847617063813315280701169054380638394863809393260665478672055855915708288832945428379803398256210924131519409596826627331122308713213009290238384541169'+
  '29932464062385422967707349006136875955845571198194697903571750922502933394776693892467914421458021235267993240938738492542520282136934567446104563759551530211918924928462216849006173325956177266201213122431039414122458668514373883480802339675301291E-9', '*']);

  // --

  TestNumFmt({LINENUM}65908, '1234567890123/2', nfDefault, ['!', '617283945062']);
  TestNumFmt({LINENUM}65909, '1234567890123/2', nfDefault,  1, ['!', '6E11', '6.2E11']);
  TestNumFmt({LINENUM}65910, '1234567890123/2', nfDefault,  2, ['!', '6.2E11']);
  TestNumFmt({LINENUM}65911, '1234567890123/2', nfDefault,  3, ['!', '6.17E11']);
  TestNumFmt({LINENUM}65912, '1234567890123/2', nfDefault,  4, ['!', '6.173E11']);
  TestNumFmt({LINENUM}65913, '1234567890123/2', nfDefault,  5, ['!', '6.1728E11']);
  TestNumFmt({LINENUM}65914, '1234567890123/2', nfDefault,  6, ['!', '6.17284E11']);
  TestNumFmt({LINENUM}65915, '1234567890123/2', nfDefault,  7, ['!', '6.172839E11']);
  TestNumFmt({LINENUM}65916, '1234567890123/2', nfDefault,  8, ['!', '6.1728395E11']);
  TestNumFmt({LINENUM}65917, '1234567890123/2', nfDefault,  9, ['!', '6.17283945E11']);
  TestNumFmt({LINENUM}65918, '1234567890123/2', nfDefault, 10, ['!', '6.172839451E11']);
  TestNumFmt({LINENUM}65919, '1234567890123/2', nfDefault, 11, ['!', '6.1728394506E11']);
  TestNumFmt({LINENUM}65920, '1234567890123/2', nfDefault, 12, ['!', '617283945062']);
  TestNumFmt({LINENUM}65921, '1234567890123/2', nfDefault, 13, ['!', '617283945061.5']);
  TestNumFmt({LINENUM}65922, '1234567890123/2', nfDefault, 14, ['!', '617283945061.5']);
  TestNumFmt({LINENUM}65923, '1234567890123/2', nfDefault, 15, ['!', '617283945061.5']);
  TestNumFmt({LINENUM}65924, '1234567890123/2', nfDefault, 20, ['!', '617283945061.5']);
  TestNumFmt({LINENUM}65925, '1234567890123/2', nfDefault, 100, ['!', '617283945061.5']);
  TestNumFmt({LINENUM}65926, '1234567890123/2', nfDefault, 1000, ['!', '617283945061.5']);
  TestNumFmt({LINENUM}65927, '1234567890123/2', nfDefault, 5000, ['!', '617283945061.5']);

  TestNumFmt({LINENUM}65929, '1234567890123/2', nfFraction, ['!', '1234567890123/2', '617283945062']);
  TestNumFmt({LINENUM}65930, '1234567890123/2', nfFraction,  1, ['!', '1234567890123/2', '6.2E11']);
  TestNumFmt({LINENUM}65931, '1234567890123/2', nfFraction,  2, ['!', '1234567890123/2', '6.2E11']);
  TestNumFmt({LINENUM}65932, '1234567890123/2', nfFraction,  3, ['!', '1234567890123/2', '6.17E11']);
  TestNumFmt({LINENUM}65933, '1234567890123/2', nfFraction,  4, ['!', '1234567890123/2', '6.173E11']);
  TestNumFmt({LINENUM}65934, '1234567890123/2', nfFraction,  5, ['!', '1234567890123/2', '6.1728E11']);
  TestNumFmt({LINENUM}65935, '1234567890123/2', nfFraction,  6, ['!', '1234567890123/2', '6.17284E11']);
  TestNumFmt({LINENUM}65936, '1234567890123/2', nfFraction,  7, ['!', '1234567890123/2', '6.172839E11']);
  TestNumFmt({LINENUM}65937, '1234567890123/2', nfFraction,  8, ['!', '1234567890123/2', '6.1728395E11']);
  TestNumFmt({LINENUM}65938, '1234567890123/2', nfFraction,  9, ['!', '1234567890123/2', '6.17283945E11']);
  TestNumFmt({LINENUM}65939, '1234567890123/2', nfFraction, 10, ['!', '1234567890123/2', '6.172839451E11']);
  TestNumFmt({LINENUM}65940, '1234567890123/2', nfFraction, 11, ['!', '1234567890123/2', '6.1728394506E11']);
  TestNumFmt({LINENUM}65941, '1234567890123/2', nfFraction, 12, ['!', '1234567890123/2', '617283945062']);
  TestNumFmt({LINENUM}65942, '1234567890123/2', nfFraction, 13, ['!', '1234567890123/2', '617283945061.5']);
  TestNumFmt({LINENUM}65943, '1234567890123/2', nfFraction, 14, ['!', '1234567890123/2', '617283945061.5']);
  TestNumFmt({LINENUM}65944, '1234567890123/2', nfFraction, 15, ['!', '1234567890123/2', '617283945061.5']);
  TestNumFmt({LINENUM}65945, '1234567890123/2', nfFraction, 20, ['!', '1234567890123/2', '617283945061.5']);
  TestNumFmt({LINENUM}65946, '1234567890123/2', nfFraction, 100, ['!', '1234567890123/2', '617283945061.5']);
  TestNumFmt({LINENUM}65947, '1234567890123/2', nfFraction, 1000, ['!', '1234567890123/2', '617283945061.5']);
  TestNumFmt({LINENUM}65948, '1234567890123/2', nfFraction, 5000, ['!', '1234567890123/2', '617283945061.5']);

  TestNumFmt({LINENUM}65950, '1234567890123/2', nfFixed, ['!', '617283945061.500000000000']);
  TestNumFmt({LINENUM}65951, '1234567890123/2', nfFixed,  0, ['!', '617283945062']);
  TestNumFmt({LINENUM}65952, '1234567890123/2', nfFixed,  1, ['!', '617283945061.5']);
  TestNumFmt({LINENUM}65953, '1234567890123/2', nfFixed,  2, ['!', '617283945061.50']);
  TestNumFmt({LINENUM}65954, '1234567890123/2', nfFixed,  3, ['!', '617283945061.500']);
  TestNumFmt({LINENUM}65955, '1234567890123/2', nfFixed,  4, ['!', '617283945061.5000']);
  TestNumFmt({LINENUM}65956, '1234567890123/2', nfFixed,  5, ['!', '617283945061.50000']);
  TestNumFmt({LINENUM}65957, '1234567890123/2', nfFixed,  6, ['!', '617283945061.500000']);
  TestNumFmt({LINENUM}65958, '1234567890123/2', nfFixed,  7, ['!', '617283945061.5000000']);
  TestNumFmt({LINENUM}65959, '1234567890123/2', nfFixed,  8, ['!', '617283945061.50000000']);
  TestNumFmt({LINENUM}65960, '1234567890123/2', nfFixed,  9, ['!', '617283945061.500000000']);
  TestNumFmt({LINENUM}65961, '1234567890123/2', nfFixed, 10, ['!', '617283945061.5000000000']);
  TestNumFmt({LINENUM}65962, '1234567890123/2', nfFixed, 11, ['!', '617283945061.50000000000']);
  TestNumFmt({LINENUM}65963, '1234567890123/2', nfFixed, 12, ['!', '617283945061.500000000000']);
  TestNumFmt({LINENUM}65964, '1234567890123/2', nfFixed, 20, ['!', '617283945061.50000000000000000000', '*']);

  TestNumFmt({LINENUM}65966, '1234567890123/2', nfExponent, ['!', '6.17283945062E11']);
  TestNumFmt({LINENUM}65967, '1234567890123/2', nfExponent,  1, ['!', '6E11', '6.2E11']);
  TestNumFmt({LINENUM}65968, '1234567890123/2', nfExponent,  2, ['!', '6.2E11']);
  TestNumFmt({LINENUM}65969, '1234567890123/2', nfExponent,  3, ['!', '6.17E11']);
  TestNumFmt({LINENUM}65970, '1234567890123/2', nfExponent,  4, ['!', '6.173E11']);
  TestNumFmt({LINENUM}65971, '1234567890123/2', nfExponent,  5, ['!', '6.1728E11']);
  TestNumFmt({LINENUM}65972, '1234567890123/2', nfExponent,  6, ['!', '6.17284E11']);
  TestNumFmt({LINENUM}65973, '1234567890123/2', nfExponent,  7, ['!', '6.172839E11']);
  TestNumFmt({LINENUM}65974, '1234567890123/2', nfExponent,  8, ['!', '6.1728395E11']);
  TestNumFmt({LINENUM}65975, '1234567890123/2', nfExponent,  9, ['!', '6.17283945E11']);
  TestNumFmt({LINENUM}65976, '1234567890123/2', nfExponent, 10, ['!', '6.172839451E11']);
  TestNumFmt({LINENUM}65977, '1234567890123/2', nfExponent, 11, ['!', '6.1728394506E11']);
  TestNumFmt({LINENUM}65978, '1234567890123/2', nfExponent, 12, ['!', '6.17283945062E11']);
  TestNumFmt({LINENUM}65979, '1234567890123/2', nfExponent, 13, ['!', '6.172839450615E11']);
  TestNumFmt({LINENUM}65980, '1234567890123/2', nfExponent, 14, ['!', '6.1728394506150E11']);
  TestNumFmt({LINENUM}65981, '1234567890123/2', nfExponent, 15, ['!', '6.17283945061500E11']);
  TestNumFmt({LINENUM}65982, '1234567890123/2', nfExponent, 20, ['!', '6.1728394506150000000E11', '*']);

  // --

  TestNumFmt({LINENUM}65986, '123456789012345', nfDefault, ['123456789012345', '123456789012345', '1.23456789012E14']);
  TestNumFmt({LINENUM}65987, '123456789012345', nfDefault,  1, ['123456789012345', '123456789012345', '1.2E14']);
  TestNumFmt({LINENUM}65988, '123456789012345', nfDefault,  2, ['123456789012345', '123456789012345', '1.2E14']);
  TestNumFmt({LINENUM}65989, '123456789012345', nfDefault,  3, ['123456789012345', '123456789012345', '1.23E14']);
  TestNumFmt({LINENUM}65990, '123456789012345', nfDefault,  4, ['123456789012345', '123456789012345', '1.235E14']);
  TestNumFmt({LINENUM}65991, '123456789012345', nfDefault,  5, ['123456789012345', '123456789012345', '1.2346E14']);
  TestNumFmt({LINENUM}65992, '123456789012345', nfDefault,  6, ['123456789012345', '123456789012345', '1.23457E14']);
  TestNumFmt({LINENUM}65993, '123456789012345', nfDefault,  7, ['123456789012345', '123456789012345', '1.234568E14']);
  TestNumFmt({LINENUM}65994, '123456789012345', nfDefault,  8, ['123456789012345', '123456789012345', '1.2345679E14']);
  TestNumFmt({LINENUM}65995, '123456789012345', nfDefault,  9, ['123456789012345', '123456789012345', '1.23456789E14']);
  TestNumFmt({LINENUM}65996, '123456789012345', nfDefault, 10, ['123456789012345', '123456789012345', '1.23456789E14']);
  TestNumFmt({LINENUM}65997, '123456789012345', nfDefault, 11, ['123456789012345', '123456789012345', '1.2345678901E14']);
  TestNumFmt({LINENUM}65998, '123456789012345', nfDefault, 12, ['123456789012345', '123456789012345', '1.23456789012E14']);
  TestNumFmt({LINENUM}65999, '123456789012345', nfDefault, 13, ['123456789012345', '123456789012345', '1.234567890123E14']);
  TestNumFmt({LINENUM}66000, '123456789012345', nfDefault, 14, ['123456789012345', '123456789012345', '1.2345678901235E14']);
  TestNumFmt({LINENUM}66001, '123456789012345', nfDefault, 15, ['123456789012345', '123456789012345', '123456789012345']);

  TestNumFmt({LINENUM}66003, '123456789012345', nfFraction, ['123456789012345', '123456789012345', '1.23456789012E14']);
  TestNumFmt({LINENUM}66004, '123456789012345', nfFraction,  1, ['123456789012345', '123456789012345', '1.2E14']);
  TestNumFmt({LINENUM}66005, '123456789012345', nfFraction,  2, ['123456789012345', '123456789012345', '1.2E14']);
  TestNumFmt({LINENUM}66006, '123456789012345', nfFraction,  3, ['123456789012345', '123456789012345', '1.23E14']);
  TestNumFmt({LINENUM}66007, '123456789012345', nfFraction,  4, ['123456789012345', '123456789012345', '1.235E14']);
  TestNumFmt({LINENUM}66008, '123456789012345', nfFraction,  5, ['123456789012345', '123456789012345', '1.2346E14']);
  TestNumFmt({LINENUM}66009, '123456789012345', nfFraction,  6, ['123456789012345', '123456789012345', '1.23457E14']);
  TestNumFmt({LINENUM}66010, '123456789012345', nfFraction,  7, ['123456789012345', '123456789012345', '1.234568E14']);
  TestNumFmt({LINENUM}66011, '123456789012345', nfFraction,  8, ['123456789012345', '123456789012345', '1.2345679E14']);
  TestNumFmt({LINENUM}66012, '123456789012345', nfFraction,  9, ['123456789012345', '123456789012345', '1.23456789E14']);
  TestNumFmt({LINENUM}66013, '123456789012345', nfFraction, 10, ['123456789012345', '123456789012345', '1.23456789E14']);
  TestNumFmt({LINENUM}66014, '123456789012345', nfFraction, 11, ['123456789012345', '123456789012345', '1.2345678901E14']);
  TestNumFmt({LINENUM}66015, '123456789012345', nfFraction, 12, ['123456789012345', '123456789012345', '1.23456789012E14']);
  TestNumFmt({LINENUM}66016, '123456789012345', nfFraction, 13, ['123456789012345', '123456789012345', '1.234567890123E14']);
  TestNumFmt({LINENUM}66017, '123456789012345', nfFraction, 14, ['123456789012345', '123456789012345', '1.2345678901235E14']);
  TestNumFmt({LINENUM}66018, '123456789012345', nfFraction, 15, ['123456789012345', '123456789012345', '123456789012345']);

  TestNumFmt({LINENUM}66020, '123456789012345', nfFixed, ['123456789012345', '123456789012345.000000000000', '123456789012345.000000000000']);
  TestNumFmt({LINENUM}66021, '123456789012345', nfFixed,  0, ['123456789012345', '123456789012345', '123456789012345']);
  TestNumFmt({LINENUM}66022, '123456789012345', nfFixed,  1, ['123456789012345', '123456789012345.0', '123456789012345.0']);
  TestNumFmt({LINENUM}66023, '123456789012345', nfFixed,  2, ['123456789012345', '123456789012345.00', '123456789012345.00']);
  TestNumFmt({LINENUM}66024, '123456789012345', nfFixed,  3, ['123456789012345', '123456789012345.000', '123456789012345.000']);
  TestNumFmt({LINENUM}66025, '123456789012345', nfFixed,  4, ['123456789012345', '123456789012345.0000', '123456789012345.0000']);
  TestNumFmt({LINENUM}66026, '123456789012345', nfFixed,  5, ['123456789012345', '123456789012345.00000', '123456789012345.00000']);
  TestNumFmt({LINENUM}66027, '123456789012345', nfFixed,  6, ['123456789012345', '123456789012345.000000', '123456789012345.000000']);
  TestNumFmt({LINENUM}66028, '123456789012345', nfFixed,  7, ['123456789012345', '123456789012345.0000000', '123456789012345.0000000']);
  TestNumFmt({LINENUM}66029, '123456789012345', nfFixed,  8, ['123456789012345', '123456789012345.00000000', '123456789012345.00000000']);
  TestNumFmt({LINENUM}66030, '123456789012345', nfFixed,  9, ['123456789012345', '123456789012345.000000000', '123456789012345.000000000']);
  TestNumFmt({LINENUM}66031, '123456789012345', nfFixed, 10, ['123456789012345', '123456789012345.0000000000', '123456789012345.0000000000']);
  TestNumFmt({LINENUM}66032, '123456789012345', nfFixed, 11, ['123456789012345', '123456789012345.00000000000', '123456789012345.00000000000']);
  TestNumFmt({LINENUM}66033, '123456789012345', nfFixed, 12, ['123456789012345', '123456789012345.000000000000', '123456789012345.000000000000']);
  TestNumFmt({LINENUM}66034, '123456789012345', nfFixed, 13, ['123456789012345', '123456789012345.0000000000000', '123456789012345.0000000000000']);
  TestNumFmt({LINENUM}66035, '123456789012345', nfFixed, 14, ['123456789012345', '123456789012345.00000000000000', '123456789012345.00000000000000']);
  TestNumFmt({LINENUM}66036, '123456789012345', nfFixed, 15, ['123456789012345', '123456789012345.000000000000000', '123456789012345.000000000000000']);

  TestNumFmt({LINENUM}66038, '123456789012345', nfExponent, ['123456789012345', '1.23456789012E14']);
  TestNumFmt({LINENUM}66039, '123456789012345', nfExponent,  1, ['123456789012345', '1E14', '1.2E14']);
  TestNumFmt({LINENUM}66040, '123456789012345', nfExponent,  2, ['123456789012345', '1.2E14']);
  TestNumFmt({LINENUM}66041, '123456789012345', nfExponent,  3, ['123456789012345', '1.23E14']);
  TestNumFmt({LINENUM}66042, '123456789012345', nfExponent,  4, ['123456789012345', '1.235E14']);
  TestNumFmt({LINENUM}66043, '123456789012345', nfExponent,  5, ['123456789012345', '1.2346E14']);
  TestNumFmt({LINENUM}66044, '123456789012345', nfExponent,  6, ['123456789012345', '1.23457E14']);
  TestNumFmt({LINENUM}66045, '123456789012345', nfExponent,  7, ['123456789012345', '1.234568E14']);
  TestNumFmt({LINENUM}66046, '123456789012345', nfExponent,  8, ['123456789012345', '1.2345679E14']);
  TestNumFmt({LINENUM}66047, '123456789012345', nfExponent,  9, ['123456789012345', '1.23456789E14']);
  TestNumFmt({LINENUM}66048, '123456789012345', nfExponent, 10, ['123456789012345', '1.234567890E14']);
  TestNumFmt({LINENUM}66049, '123456789012345', nfExponent, 11, ['123456789012345', '1.2345678901E14']);
  TestNumFmt({LINENUM}66050, '123456789012345', nfExponent, 12, ['123456789012345', '1.23456789012E14']);
  TestNumFmt({LINENUM}66051, '123456789012345', nfExponent, 13, ['123456789012345', '1.234567890123E14']);
  TestNumFmt({LINENUM}66052, '123456789012345', nfExponent, 14, ['123456789012345', '1.2345678901235E14']);
  TestNumFmt({LINENUM}66053, '123456789012345', nfExponent, 15, ['123456789012345', '1.23456789012345E14']);
  TestNumFmt({LINENUM}66054, '123456789012345', nfExponent, 16, ['123456789012345', '1.234567890123450E14', '*']);
  TestNumFmt({LINENUM}66055, '123456789012345', nfExponent, 17, ['123456789012345', '1.2345678901234500E14', '*']);
  TestNumFmt({LINENUM}66056, '123456789012345', nfExponent, 18, ['123456789012345', '1.23456789012345000E14', '*']);
  TestNumFmt({LINENUM}66057, '123456789012345', nfExponent, 19, ['123456789012345', '1.234567890123450000E14', '*']);
  TestNumFmt({LINENUM}66058, '123456789012345', nfExponent, 20, ['123456789012345', '1.2345678901234500000E14', '*']);

  // --

  TestNumFmt({LINENUM}66062, '123456789012345/2', nfDefault, ['!', '6.17283945062E13']);
  TestNumFmt({LINENUM}66063, '123456789012345/2', nfDefault,  1, ['!', '6E13', '6.2E13']);
  TestNumFmt({LINENUM}66064, '123456789012345/2', nfDefault,  2, ['!', '6.2E13']);
  TestNumFmt({LINENUM}66065, '123456789012345/2', nfDefault,  3, ['!', '6.17E13']);
  TestNumFmt({LINENUM}66066, '123456789012345/2', nfDefault,  4, ['!', '6.173E13']);
  TestNumFmt({LINENUM}66067, '123456789012345/2', nfDefault,  5, ['!', '6.1728E13']);
  TestNumFmt({LINENUM}66068, '123456789012345/2', nfDefault,  6, ['!', '6.17284E13']);
  TestNumFmt({LINENUM}66069, '123456789012345/2', nfDefault,  7, ['!', '6.172839E13']);
  TestNumFmt({LINENUM}66070, '123456789012345/2', nfDefault,  8, ['!', '6.1728395E13']);
  TestNumFmt({LINENUM}66071, '123456789012345/2', nfDefault,  9, ['!', '6.17283945E13']);
  TestNumFmt({LINENUM}66072, '123456789012345/2', nfDefault, 10, ['!', '6.172839451E13']);
  TestNumFmt({LINENUM}66073, '123456789012345/2', nfDefault, 11, ['!', '6.1728394506E13']);
  TestNumFmt({LINENUM}66074, '123456789012345/2', nfDefault, 12, ['!', '6.17283945062E13']);
  TestNumFmt({LINENUM}66075, '123456789012345/2', nfDefault, 13, ['!', '6.172839450617E13']);
  TestNumFmt({LINENUM}66076, '123456789012345/2', nfDefault, 14, ['!', '61728394506173']);
  TestNumFmt({LINENUM}66077, '123456789012345/2', nfDefault, 15, ['!', '61728394506172.5']);
  TestNumFmt({LINENUM}66078, '123456789012345/2', nfDefault, 16, ['!', '61728394506172.5']);
  TestNumFmt({LINENUM}66079, '123456789012345/2', nfDefault, 17, ['!', '61728394506172.5']);
  TestNumFmt({LINENUM}66080, '123456789012345/2', nfDefault, 18, ['!', '61728394506172.5']);
  TestNumFmt({LINENUM}66081, '123456789012345/2', nfDefault, 19, ['!', '61728394506172.5']);
  TestNumFmt({LINENUM}66082, '123456789012345/2', nfDefault, 20, ['!', '61728394506172.5']);

  TestNumFmt({LINENUM}66084, '123456789012345/2', nfFraction, ['!', '123456789012345/2', '6.17283945062E13']);
  TestNumFmt({LINENUM}66085, '123456789012345/2', nfFraction,  1, ['!', '123456789012345/2', '6.2E13']);
  TestNumFmt({LINENUM}66086, '123456789012345/2', nfFraction,  2, ['!', '123456789012345/2', '6.2E13']);
  TestNumFmt({LINENUM}66087, '123456789012345/2', nfFraction,  3, ['!', '123456789012345/2', '6.17E13']);
  TestNumFmt({LINENUM}66088, '123456789012345/2', nfFraction,  4, ['!', '123456789012345/2', '6.173E13']);
  TestNumFmt({LINENUM}66089, '123456789012345/2', nfFraction,  5, ['!', '123456789012345/2', '6.1728E13']);
  TestNumFmt({LINENUM}66090, '123456789012345/2', nfFraction,  6, ['!', '123456789012345/2', '6.17284E13']);
  TestNumFmt({LINENUM}66091, '123456789012345/2', nfFraction,  7, ['!', '123456789012345/2', '6.172839E13']);
  TestNumFmt({LINENUM}66092, '123456789012345/2', nfFraction,  8, ['!', '123456789012345/2', '6.1728395E13']);
  TestNumFmt({LINENUM}66093, '123456789012345/2', nfFraction,  9, ['!', '123456789012345/2', '6.17283945E13']);
  TestNumFmt({LINENUM}66094, '123456789012345/2', nfFraction, 10, ['!', '123456789012345/2', '6.172839451E13']);
  TestNumFmt({LINENUM}66095, '123456789012345/2', nfFraction, 11, ['!', '123456789012345/2', '6.1728394506E13']);
  TestNumFmt({LINENUM}66096, '123456789012345/2', nfFraction, 12, ['!', '123456789012345/2', '6.17283945062E13']);
  TestNumFmt({LINENUM}66097, '123456789012345/2', nfFraction, 13, ['!', '123456789012345/2', '6.172839450617E13']);
  TestNumFmt({LINENUM}66098, '123456789012345/2', nfFraction, 14, ['!', '123456789012345/2', '61728394506173']);
  TestNumFmt({LINENUM}66099, '123456789012345/2', nfFraction, 15, ['!', '123456789012345/2', '61728394506172.5']);
  TestNumFmt({LINENUM}66100, '123456789012345/2', nfFraction, 16, ['!', '123456789012345/2', '61728394506172.5']);
  TestNumFmt({LINENUM}66101, '123456789012345/2', nfFraction, 17, ['!', '123456789012345/2', '61728394506172.5']);
  TestNumFmt({LINENUM}66102, '123456789012345/2', nfFraction, 18, ['!', '123456789012345/2', '61728394506172.5']);
  TestNumFmt({LINENUM}66103, '123456789012345/2', nfFraction, 19, ['!', '123456789012345/2', '61728394506172.5']);
  TestNumFmt({LINENUM}66104, '123456789012345/2', nfFraction, 20, ['!', '123456789012345/2', '61728394506172.5']);

  TestNumFmt({LINENUM}66106, '123456789012345/2', nfFixed, ['!', '61728394506172.500000000000']);
  TestNumFmt({LINENUM}66107, '123456789012345/2', nfFixed,  0, ['!', '61728394506173']);
  TestNumFmt({LINENUM}66108, '123456789012345/2', nfFixed,  1, ['!', '61728394506172.5']);
  TestNumFmt({LINENUM}66109, '123456789012345/2', nfFixed,  2, ['!', '61728394506172.50']);
  TestNumFmt({LINENUM}66110, '123456789012345/2', nfFixed,  3, ['!', '61728394506172.500']);
  TestNumFmt({LINENUM}66111, '123456789012345/2', nfFixed,  4, ['!', '61728394506172.5000']);
  TestNumFmt({LINENUM}66112, '123456789012345/2', nfFixed,  5, ['!', '61728394506172.50000']);
  TestNumFmt({LINENUM}66113, '123456789012345/2', nfFixed,  6, ['!', '61728394506172.500000']);
  TestNumFmt({LINENUM}66114, '123456789012345/2', nfFixed,  7, ['!', '61728394506172.5000000']);
  TestNumFmt({LINENUM}66115, '123456789012345/2', nfFixed,  8, ['!', '61728394506172.50000000']);
  TestNumFmt({LINENUM}66116, '123456789012345/2', nfFixed,  9, ['!', '61728394506172.500000000']);
  TestNumFmt({LINENUM}66117, '123456789012345/2', nfFixed, 10, ['!', '61728394506172.5000000000']);
  TestNumFmt({LINENUM}66118, '123456789012345/2', nfFixed, 11, ['!', '61728394506172.50000000000']);
  TestNumFmt({LINENUM}66119, '123456789012345/2', nfFixed, 12, ['!', '61728394506172.500000000000']);
  TestNumFmt({LINENUM}66120, '123456789012345/2', nfFixed, 13, ['!', '61728394506172.5000000000000']);
  TestNumFmt({LINENUM}66121, '123456789012345/2', nfFixed, 14, ['!', '61728394506172.50000000000000']);
  TestNumFmt({LINENUM}66122, '123456789012345/2', nfFixed, 15, ['!', '61728394506172.500000000000000']);
  TestNumFmt({LINENUM}66123, '123456789012345/2', nfFixed, 16, ['!', '61728394506172.5000000000000000', '*']);
  TestNumFmt({LINENUM}66124, '123456789012345/2', nfFixed, 17, ['!', '61728394506172.50000000000000000', '*']);
  TestNumFmt({LINENUM}66125, '123456789012345/2', nfFixed, 18, ['!', '61728394506172.500000000000000000', '*']);
  TestNumFmt({LINENUM}66126, '123456789012345/2', nfFixed, 19, ['!', '61728394506172.5000000000000000000', '*']);
  TestNumFmt({LINENUM}66127, '123456789012345/2', nfFixed, 20, ['!', '61728394506172.50000000000000000000', '*']);

  TestNumFmt({LINENUM}66129, '123456789012345/2', nfExponent, ['!', '6.17283945062E13']);
  TestNumFmt({LINENUM}66130, '123456789012345/2', nfExponent, 1, ['!', '6E13', '6.2E13']);
  TestNumFmt({LINENUM}66131, '123456789012345/2', nfExponent, 2, ['!', '6.2E13']);
  TestNumFmt({LINENUM}66132, '123456789012345/2', nfExponent, 3, ['!', '6.17E13']);
  TestNumFmt({LINENUM}66133, '123456789012345/2', nfExponent, 4, ['!', '6.173E13']);
  TestNumFmt({LINENUM}66134, '123456789012345/2', nfExponent, 5, ['!', '6.1728E13']);
  TestNumFmt({LINENUM}66135, '123456789012345/2', nfExponent, 6, ['!', '6.17284E13']);
  TestNumFmt({LINENUM}66136, '123456789012345/2', nfExponent, 7, ['!', '6.172839E13']);
  TestNumFmt({LINENUM}66137, '123456789012345/2', nfExponent, 8, ['!', '6.1728395E13']);
  TestNumFmt({LINENUM}66138, '123456789012345/2', nfExponent, 9, ['!', '6.17283945E13']);
  TestNumFmt({LINENUM}66139, '123456789012345/2', nfExponent, 10, ['!', '6.172839451E13']);
  TestNumFmt({LINENUM}66140, '123456789012345/2', nfExponent, 11, ['!', '6.1728394506E13']);
  TestNumFmt({LINENUM}66141, '123456789012345/2', nfExponent, 12, ['!', '6.17283945062E13']);
  TestNumFmt({LINENUM}66142, '123456789012345/2', nfExponent, 13, ['!', '6.172839450617E13']);
  TestNumFmt({LINENUM}66143, '123456789012345/2', nfExponent, 14, ['!', '6.1728394506173E13']);
  TestNumFmt({LINENUM}66144, '123456789012345/2', nfExponent, 15, ['!', '6.17283945061725E13']);
  TestNumFmt({LINENUM}66145, '123456789012345/2', nfExponent, 16, ['!', '6.172839450617250E13', '*']);
  TestNumFmt({LINENUM}66146, '123456789012345/2', nfExponent, 17, ['!', '6.1728394506172500E13', '*']);
  TestNumFmt({LINENUM}66147, '123456789012345/2', nfExponent, 18, ['!', '6.17283945061725000E13', '*']);
  TestNumFmt({LINENUM}66148, '123456789012345/2', nfExponent, 19, ['!', '6.172839450617250000E13', '*']);
  TestNumFmt({LINENUM}66149, '123456789012345/2', nfExponent, 20, ['!', '6.1728394506172500000E13', '*']);

  _i := RandSeed;
  try
    RandSeed := 1482311;
    for _j := 1 to 20000 do
      Test({LINENUM}66155,
        'x ≔ RandomInt(-100000000, 100000000)/RandomInt(1, 100000000); ' +
        'for(d, 0, 4, for(k, 2, 10, if(' +
        '  AsSingleLine(x\k) = AsSingleLine(RealNumber(x)\k) ' +
        '∧ AsSingleLine(SetDigitGrouping(SetNumberFormat(x\k, "default"), d)) = AsSingleLine(SetDigitGrouping(SetNumberFormat(RealNumber(x), "default")\k, d)) ' +
        '∧ AsSingleLine(SetDigitGrouping(SetNumberFormat(x\k, "fixed"), d)) = AsSingleLine(SetDigitGrouping(SetNumberFormat(RealNumber(x), "fixed")\k, d)) ' +
        '∧ AsSingleLine(SetDigitGrouping(SetNumberFormat(x\k, "scientific"), d)) = AsSingleLine(SetDigitGrouping(SetNumberFormat(RealNumber(x), "scientific")\k, d)), 0, fail(string(x)))))',
      null);
      Test({LINENUM}66163,
        '  if(RealNumber(AsSingleLine(x\100)) ≈ x' +
        '∧ RealNumber(AsSingleLine(SetNumberFormat(x, "default")\100)) ≈ x' +
        '∧ RealNumber(AsSingleLine(SetNumberFormat(x, "fixed")\100)) ≈ x' +
        '∧ RealNumber(AsSingleLine(SetNumberFormat(SetPrettyExp(x, false), "scientific")\100)) ≈ x, true, x)',
      True);
  finally
    RandSeed := _i;
  end;


  //
  // Digits
  //

  Test({LINENUM}66178, 'digits(5321407)', intarr([5, 3, 2, 1, 4, 0, 7]));
  Test({LINENUM}66179, 'digits(−28441105319810423)', intarr([2, 8, 4, 4, 1, 1, 0,5 , 3, 1, 9, 8, 1, 0, 4, 2, 3]));
  Test({LINENUM}66180, 'digits(0)', intarr([0]));

  Test({LINENUM}66182, 'digits(1/4)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr([2, 5]))
      ]
    ));

  Test({LINENUM}66191, 'digits(1/2)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr([5]))
      ]
    ));

  Test({LINENUM}66200, 'digits(1/10)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr([1]))
      ]
    ));

  Test({LINENUM}66209, 'digits(1/100)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr([0, 1]))
      ]
    ));

  Test({LINENUM}66218, 'digits(15327/10)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([1, 5, 3, 2])),
        sm('frac', intarr([7]))
      ]
    ));

  Test({LINENUM}66227, 'digits(15327632/10000)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([1, 5, 3, 2])),
        sm('frac', intarr([7, 6, 3, 2]))
      ]
    ));

  Test({LINENUM}66236, 'digits(1/3)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr([3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]))
      ]
    ));

  Test({LINENUM}66245, 'digits(100/3)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([3, 3])),
        sm('frac', intarr([3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]))
      ]
    ));

  Test({LINENUM}66254, 'digits(1/123456789, 4160)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr(
          [
            0, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 7, 3, 7, 1, 0, 0, 0, 0, 6, 7, 0,
            7, 6, 1, 0, 0, 6, 1, 0, 3, 9, 2, 5, 1, 5, 5, 5, 4, 5, 7, 1, 8, 9, 1, 5, 4, 6, 6,
            0, 4, 2, 1, 3, 0, 7, 4, 0, 9, 8, 3, 3, 8, 9, 7, 4, 2, 9, 4, 8, 8, 4, 6, 6, 6, 0,
            8, 3, 4, 5, 0, 4, 6, 1, 3, 5, 9, 3, 9, 9, 1, 9, 8, 3, 7, 0, 5, 3, 2, 7, 0, 5, 1,
            7, 1, 8, 4, 7, 6, 1, 7, 0, 6, 3, 8, 1, 3, 3, 1, 5, 2, 8, 0, 7, 0, 1, 1, 6, 9, 0,
            5, 4, 3, 8, 0, 6, 3, 8, 3, 9, 4, 8, 6, 3, 8, 0, 9, 3, 9, 3, 2, 6, 0, 6, 6, 5, 4,
            7, 8, 6, 7, 2, 0, 5, 5, 8, 5, 5, 9, 1, 5, 7, 0, 8, 2, 8, 8, 8, 3, 2, 9, 4, 5, 4,
            2, 8, 3, 7, 9, 8, 0, 3, 3, 9, 8, 2, 5, 6, 2, 1, 0, 9, 2, 4, 1, 3, 1, 5, 1, 9, 4,
            0, 9, 5, 9, 6, 8, 2, 6, 6, 2, 7, 3, 3, 1, 1, 2, 2, 3, 0, 8, 7, 1, 3, 2, 1, 3, 0,
            0, 9, 2, 9, 0, 2, 3, 8, 3, 8, 4, 5, 4, 1, 1, 6, 9, 2, 9, 9, 3, 2, 4, 6, 4, 0, 6,
            2, 3, 8, 5, 4, 2, 2, 9, 6, 7, 7, 0, 7, 3, 4, 9, 0, 0, 6, 1, 3, 6, 8, 7, 5, 9, 5,
            5, 8, 4, 5, 5, 7, 1, 1, 9, 8, 1, 9, 4, 6, 9, 7, 9, 0, 3, 5, 7, 1, 7, 5, 0, 9, 2,
            2, 5, 0, 2, 9, 3, 3, 3, 9, 4, 7, 7, 6, 6, 9, 3, 8, 9, 2, 4, 6, 7, 9, 1, 4, 4, 2,
            1, 4, 5, 8, 0, 2, 1, 2, 3, 5, 2, 6, 7, 9, 9, 3, 2, 4, 0, 9, 3, 8, 7, 3, 8, 4, 9,
            2, 5, 4, 2, 5, 2, 0, 2, 8, 2, 1, 3, 6, 9, 3, 4, 5, 6, 7, 4, 4, 6, 1, 0, 4, 5, 6,
            3, 7, 5, 9, 5, 5, 1, 5, 3, 0, 2, 1, 1, 9, 1, 8, 9, 2, 4, 9, 2, 8, 4, 6, 2, 2, 1,
            6, 8, 4, 9, 0, 0, 6, 1, 7, 3, 3, 2, 5, 9, 5, 6, 1, 7, 7, 2, 6, 6, 2, 0, 1, 2, 1,
            3, 1, 2, 2, 4, 3, 1, 0, 3, 9, 4, 1, 4, 1, 2, 2, 4, 5, 8, 6, 6, 8, 5, 1, 4, 3, 7,
            3, 8, 8, 3, 4, 8, 0, 8, 0, 2, 3, 3, 9, 6, 7, 5, 3, 0, 1, 2, 9, 1, 0, 4, 5, 2, 4,
            1, 7, 4, 8, 5, 1, 1, 6, 9, 9, 9, 1, 1, 4, 5, 6, 4, 6, 9, 1, 9, 4, 2, 5, 3, 8, 6,
            9, 6, 6, 7, 7, 1, 0, 2, 1, 3, 9, 7, 6, 1, 6, 2, 9, 4, 7, 1, 8, 3, 0, 8, 2, 8, 1,
            9, 3, 6, 6, 0, 5, 3, 6, 5, 6, 2, 3, 1, 0, 8, 8, 2, 7, 1, 7, 0, 2, 9, 0, 3, 2, 7,
            2, 4, 9, 6, 4, 1, 9, 7, 7, 9, 7, 1, 7, 4, 1, 9, 9, 9, 5, 4, 2, 8, 5, 2, 1, 9, 5,
            8, 3, 9, 9, 5, 4, 9, 8, 2, 1, 4, 3, 5, 9, 0, 3, 3, 7, 5, 0, 6, 6, 7, 2, 0, 7, 1,
            3, 1, 0, 7, 1, 5, 8, 4, 8, 9, 2, 7, 5, 1, 4, 2, 2, 5, 2, 4, 0, 3, 7, 9, 4, 4, 9,
            6, 8, 7, 4, 5, 2, 9, 9, 2, 1, 5, 5, 8, 2, 2, 2, 2, 8, 6, 1, 7, 9, 8, 2, 2, 8, 0,
            4, 2, 3, 6, 3, 8, 7, 5, 1, 8, 5, 5, 1, 1, 2, 6, 4, 1, 8, 8, 1, 5, 2, 5, 0, 4, 1,
            1, 2, 1, 8, 7, 7, 8, 7, 4, 2, 0, 9, 0, 8, 8, 6, 5, 5, 3, 0, 2, 7, 0, 6, 7, 6, 3,
            2, 5, 4, 6, 3, 1, 5, 4, 5, 6, 1, 7, 1, 4, 7, 0, 6, 5, 1, 1, 6, 0, 3, 8, 2, 9, 2,
            5, 5, 5, 9, 4, 8, 4, 6, 2, 2, 5, 9, 1, 3, 1, 0, 0, 6, 5, 5, 8, 0, 9, 2, 1, 5, 9,
            6, 7, 8, 6, 3, 8, 6, 5, 3, 0, 7, 5, 6, 1, 1, 7, 4, 2, 9, 8, 8, 0, 6, 6, 8, 6, 1,
            1, 9, 1, 4, 0, 8, 4, 3, 6, 8, 4, 1, 8, 1, 6, 7, 7, 5, 2, 6, 0, 5, 3, 2, 6, 5, 4,
            8, 7, 0, 8, 4, 7, 1, 5, 9, 3, 2, 4, 7, 0, 9, 1, 4, 9, 8, 5, 4, 8, 5, 3, 2, 6, 3,
            6, 7, 9, 1, 6, 4, 6, 9, 9, 4, 8, 0, 3, 9, 8, 7, 6, 5, 2, 7, 1, 6, 2, 8, 7, 6, 3,
            9, 7, 1, 8, 2, 1, 7, 5, 2, 1, 4, 3, 5, 7, 7, 9, 4, 4, 5, 0, 6, 5, 5, 9, 2, 9, 5,
            0, 0, 9, 6, 8, 9, 5, 8, 4, 5, 8, 8, 1, 7, 5, 2, 1, 9, 7, 5, 2, 3, 9, 4, 4, 9, 9,
            7, 4, 6, 7, 8, 9, 9, 4, 7, 6, 9, 5, 7, 8, 8, 5, 2, 4, 0, 3, 1, 6, 7, 5, 5, 6, 8,
            6, 8, 8, 2, 4, 7, 6, 7, 5, 0, 6, 3, 0, 5, 3, 8, 4, 3, 0, 7, 3, 7, 8, 9, 9, 7, 1,
            9, 7, 1, 4, 8, 8, 7, 4, 4, 9, 4, 0, 5, 4, 7, 5, 7, 8, 9, 5, 8, 9, 8, 2, 9, 6, 8,
            5, 2, 6, 7, 4, 5, 0, 1, 3, 5, 9, 3, 3, 7, 9, 6, 2, 3, 6, 9, 9, 7, 5, 4, 5, 7, 5,
            6, 6, 7, 7, 6, 6, 6, 3, 8, 5, 7, 6, 6, 7, 6, 4, 1, 1, 0, 4, 7, 7, 5, 5, 3, 4, 0,
            5, 3, 4, 5, 7, 3, 5, 9, 8, 8, 6, 4, 6, 1, 9, 7, 4, 9, 6, 6, 8, 0, 3, 9, 7, 2, 1,
            9, 7, 9, 1, 6, 1, 4, 7, 0, 0, 1, 0, 3, 6, 9, 3, 7, 7, 0, 9, 4, 3, 6, 1, 3, 3, 1,
            5, 5, 8, 6, 8, 8, 1, 1, 7, 1, 8, 4, 0, 6, 1, 8, 6, 6, 3, 7, 4, 9, 6, 2, 9, 8, 4,
            0, 1, 2, 1, 6, 3, 1, 5, 4, 5, 1, 0, 6, 8, 4, 7, 0, 6, 0, 4, 7, 2, 3, 0, 8, 2, 5,
            0, 2, 9, 8, 0, 0, 5, 0, 7, 7, 7, 1, 1, 8, 4, 6, 2, 0, 7, 1, 7, 7, 8, 0, 0, 4, 8,
            5, 3, 1, 7, 9, 8, 4, 4, 1, 6, 3, 9, 3, 6, 5, 8, 1, 8, 9, 1, 8, 2, 2, 8, 9, 5, 2,
            1, 5, 5, 8, 8, 3, 4, 6, 4, 6, 1, 8, 5, 3, 9, 5, 2, 8, 0, 2, 8, 7, 0, 9, 7, 0, 5,
            0, 6, 1, 2, 5, 8, 3, 1, 6, 0, 5, 7, 4, 5, 0, 6, 7, 6, 1, 2, 2, 8, 0, 1, 1, 5, 2,
            7, 1, 7, 4, 9, 0, 4, 8, 9, 7, 2, 9, 1, 6, 3, 4, 5, 6, 5, 3, 5, 3, 8, 7, 4, 5, 4,
            4, 7, 2, 0, 2, 5, 8, 3, 5, 6, 9, 5, 4, 3, 5, 1, 0, 4, 8, 2, 8, 4, 5, 9, 4, 5, 3,
            9, 3, 8, 9, 8, 1, 0, 3, 0, 8, 4, 4, 7, 2, 7, 3, 8, 0, 6, 8, 7, 0, 1, 9, 1, 6, 4,
            2, 5, 1, 8, 7, 4, 3, 9, 4, 6, 9, 2, 0, 5, 6, 9, 9, 1, 6, 9, 7, 7, 1, 8, 6, 2, 4,
            4, 4, 9, 2, 3, 9, 4, 8, 2, 4, 8, 8, 0, 7, 9, 2, 9, 0, 6, 4, 1, 5, 2, 1, 5, 4, 4,
            8, 3, 7, 8, 4, 6, 0, 5, 8, 0, 2, 4, 3, 9, 9, 1, 2, 8, 0, 2, 2, 0, 3, 2, 0, 6, 5,
            0, 0, 0, 4, 9, 1, 7, 9, 1, 5, 0, 4, 4, 7, 5, 3, 0, 2, 6, 9, 0, 7, 2, 5, 2, 5, 4,
            4, 8, 5, 5, 9, 9, 8, 1, 5, 8, 1, 8, 9, 5, 8, 3, 2, 3, 9, 5, 2, 5, 2, 0, 7, 4, 7,
            9, 6, 7, 9, 3, 8, 8, 0, 6, 5, 0, 8, 2, 4, 3, 1, 3, 9, 2, 2, 5, 0, 1, 2, 5, 6, 6,
            9, 4, 7, 6, 1, 4, 3, 5, 9, 2, 2, 3, 2, 9, 0, 6, 6, 8, 9, 3, 1, 9, 4, 5, 0, 8, 7,
            2, 8, 0, 7, 0, 0, 2, 9, 4, 2, 5, 4, 3, 7, 2, 6, 7, 7, 7, 1, 4, 7, 9, 1, 3, 6, 7,
            2, 0, 4, 6, 0, 1, 4, 4, 1, 5, 6, 1, 8, 7, 3, 1, 1, 8, 2, 1, 3, 0, 4, 5, 3, 7, 5,
            7, 3, 8, 7, 1, 2, 9, 1, 9, 2, 2, 2, 2, 8, 7, 5, 6, 4, 9, 2, 2, 8, 1, 6, 8, 4, 0,
            7, 9, 7, 6, 3, 3, 2, 5, 1, 2, 5, 8, 4, 6, 2, 5, 8, 6, 4, 5, 2, 0, 0, 9, 5, 3, 6,
            7, 1, 3, 2, 8, 6, 7, 8, 4, 0, 9, 0, 9, 0, 9, 7, 3, 5, 2, 2, 7, 2, 7, 8, 5, 9, 0,
            5, 6, 8, 2, 3, 5, 1, 7, 4, 1, 7, 0, 9, 4, 0, 0, 8, 4, 9, 5, 5, 5, 5, 4, 7, 7, 3,
            0, 9, 5, 5, 4, 8, 4, 3, 5, 1, 6, 9, 4, 9, 0, 7, 6, 0, 0, 4, 2, 3, 6, 5, 9, 1, 6,
            3, 8, 5, 5, 2, 9, 8, 3, 9, 1, 0, 8, 3, 2, 1, 5, 3, 5, 8, 8, 5, 7, 2, 5, 9, 7, 6,
            5, 6, 0, 1, 0, 6, 3, 8, 6, 6, 9, 6, 9, 6, 8, 1, 1, 8, 9, 4, 2, 4, 0, 9, 8, 8, 2,
            3, 7, 5, 9, 2, 9, 9, 2, 9, 6, 2, 0, 9, 6, 2, 3, 5, 9, 5, 5, 0, 7, 5, 7, 4, 7, 1,
            9, 1, 1, 8, 9, 2, 9, 9, 4, 3, 9, 8, 2, 2, 6, 2, 4, 9, 0, 2, 3, 8, 5, 8, 8, 6, 6,
            1, 1, 7, 1, 1, 5, 6, 8, 1, 6, 6, 5, 7, 5, 2, 7, 0, 3, 1, 5, 8, 3, 4, 9, 5, 9, 8,
            7, 4, 0, 9, 8, 1, 3, 4, 8, 5, 4, 2, 9, 3, 0, 2, 7, 1, 7, 4, 0, 6, 6, 5, 4, 7, 2,
            8, 4, 0, 0, 5, 5, 8, 0, 2, 8, 4, 4, 5, 0, 7, 8, 0, 5, 8, 8, 5, 0, 2, 1, 0, 3, 3,
            5, 5, 3, 6, 9, 1, 4, 0, 5, 3, 3, 8, 5, 9, 1, 7, 8, 8, 5, 8, 1, 1, 8, 5, 2, 7, 6,
            0, 8, 8, 7, 8, 6, 0, 1, 2, 4, 0, 7, 9, 5, 2, 7, 1, 2, 9, 1, 2, 3, 6, 9, 6, 8, 7,
            5, 0, 2, 5, 6, 4, 1, 5, 6, 2, 7, 3, 3, 3, 3, 8, 2, 2, 0, 8, 7, 3, 3, 7, 7, 8, 0,
            9, 9, 4, 7, 7, 3, 8, 0, 7, 0, 5, 2, 4, 4, 1, 6, 4, 4, 1, 7, 7, 2, 1, 8, 9, 6, 2,
            0, 1, 2, 6, 9, 2, 5, 5, 4, 3, 1, 5, 5, 0, 2, 2, 4, 4, 2, 7, 1, 0, 7, 0, 4, 2, 2,
            8, 6, 6, 7, 4, 0, 8, 4, 8, 0, 8, 7, 3, 4, 1, 7, 1, 7, 5, 9, 4, 8, 0, 9, 6, 3, 0,
            1, 1, 2, 7, 6, 7, 6, 3, 4, 0, 2, 6, 1, 8, 5, 4, 6, 9, 6, 3, 8, 2, 8, 7, 7, 7, 3,
            7, 0, 8, 4, 1, 8, 7, 4, 0, 7, 4, 6, 6, 1, 0, 5, 4, 0, 7, 9, 4, 1, 5, 5, 9, 2, 1,
            2, 2, 6, 8, 1, 8, 8, 8, 3, 1, 6, 4, 0, 5, 1, 8, 3, 6, 7, 9, 2, 8, 7, 1, 7, 1, 4,
            8, 1, 5, 1, 3, 2, 6, 0, 4, 8, 1, 7, 7, 0, 6, 7, 0, 3, 8, 4, 1, 1, 3, 1, 0, 0, 4,
            9, 5, 4, 2, 9, 2, 1, 4, 5, 0, 8, 4, 0, 5, 8, 5, 2, 0, 2, 6, 4, 9, 3, 2, 5, 3, 4,
            4, 1, 0, 8, 8, 6, 0, 6, 3, 1, 3, 9, 0, 6, 3, 1, 7, 4, 5, 6, 5, 4, 7, 4, 8, 8, 8,
            5, 4, 5, 8, 2, 1, 4, 8, 5, 7, 6, 6, 9, 7, 5, 5, 2, 0, 4, 7, 9, 4, 7, 7, 2, 3, 6,
            3, 6, 3, 2, 4, 2, 8, 5, 0, 9, 0, 5, 5, 0, 9, 9, 4, 3, 2, 4, 0, 1, 4, 0, 4, 8, 3,
            4, 8, 5, 2, 7, 8, 3, 9, 9, 7, 1, 6, 0, 3, 3, 4, 3, 7, 4, 1, 5, 9, 0, 4, 2, 8, 0,
            4, 8, 4, 7, 2, 8, 9, 5, 2, 4, 1, 1, 0, 3, 3, 4, 6, 6, 9, 4, 0, 4, 0, 4, 5, 4, 9,
            1, 5, 7, 6, 8, 1, 3, 9, 7, 3, 3, 4, 9, 0, 0, 7, 1, 5, 7, 4, 7, 5, 9, 6, 5, 1, 3,
            3, 0, 3, 1, 2, 8, 2, 7, 1, 0, 5, 8, 4, 6, 7, 2, 6, 6, 6, 3, 2, 0, 5, 2, 1, 2, 6,
            3, 5, 1, 6, 7, 4, 3, 4, 9, 8, 0, 0, 2, 3, 6, 5, 8, 3, 1, 8, 2, 1, 5, 2, 9, 0, 6,
            9, 5, 7, 5, 9, 1, 4, 5, 3, 3, 1, 4, 0, 8, 2, 2, 2, 5, 1, 5, 8, 1, 4, 8, 2, 4, 8,
            9, 3, 9, 1, 4, 9, 0, 6, 5, 3, 4, 6, 2, 5, 6, 4, 9, 4, 6, 5, 0, 9, 3, 4, 1, 0, 1,
            3, 2, 3, 5, 0, 0, 3, 2, 2, 0, 4, 3, 8, 5, 2, 9, 3, 0, 5, 9, 9, 0, 6, 1, 6, 6, 8,
            4, 5, 1, 4, 6, 1, 1, 8, 2, 9, 0, 8, 2, 9, 6, 7, 6, 4, 4, 6, 5, 5, 0, 0, 5, 5, 6,
            6, 3, 6, 0, 5, 5, 0, 6, 5, 3, 8, 8, 1, 0, 1, 0, 9, 5, 0, 3, 1, 7, 1, 9, 9, 6, 4,
            7, 8, 8, 6, 5, 1, 6, 7, 9, 5, 7, 6, 7, 3, 0, 2, 8, 4, 1, 4, 8, 2, 4, 5, 5, 8, 5,
            7, 4, 9, 0, 3, 4, 8, 3, 0, 3, 1, 6, 2, 1, 6, 9, 5, 5, 8, 7, 7, 5, 7, 4, 2, 9, 8,
            4, 8, 5, 9, 2, 6, 1, 1, 6, 2, 2, 1, 9, 2, 7, 6, 5, 7, 6, 1, 9, 5, 4, 1, 6, 8, 4,
            3, 3, 7, 8, 2, 9, 3, 2, 7, 4, 7, 4, 2, 4, 6, 8, 8, 0, 0, 1, 5, 6, 4, 6, 6, 0, 8,
            1, 4, 2, 3, 8, 4, 1, 3, 4, 0, 9, 5, 6, 9, 5, 6, 2, 0, 2, 7, 0, 8, 3, 0, 1, 4, 4,
            4, 6, 4, 5, 5, 4, 3, 1, 4, 6, 2, 7, 4, 4, 4, 2, 6, 3, 1, 0, 9, 7, 4, 2, 7, 9, 4,
            2, 9, 8, 6, 5, 9, 4, 2, 8, 1, 1, 7, 8, 0, 0, 7, 9, 5, 8, 7, 1, 9, 8, 7, 2, 4, 2,
            4, 3, 5, 0, 8, 3, 9, 0, 6, 1, 5, 9, 2, 6, 3, 5, 4, 6, 0, 4, 9, 2, 9, 8, 2, 6, 9,
            0, 4, 8, 6, 1, 4, 2, 4, 8, 3, 4, 2, 3, 8, 9, 6, 5, 9, 9, 1, 5, 7, 4, 5, 9, 0, 5,
            2, 3, 3, 2, 8, 7, 7, 3, 7, 6, 2, 2, 9, 1, 8, 4, 1, 2, 3, 6, 8, 5, 5, 7, 5, 5, 2,
            5, 5, 3, 8, 7, 3, 7, 2, 8, 2, 4, 0, 2, 5, 0, 9, 2, 6, 9, 8, 6, 2, 8, 3, 4, 3, 5,
            5, 7, 5, 1, 7, 9, 2, 6, 3, 7, 3, 4, 1, 3, 1, 2, 9, 9, 9, 8, 0, 5, 9, 4, 8, 2, 9,
            8, 2, 3, 4, 1, 2, 9, 5, 1, 3, 9, 3, 0, 5, 7, 8, 5, 7, 6, 7, 6, 8, 2, 6, 5, 0, 4,
            8, 5, 9, 1, 2, 1, 1, 9, 4, 2, 1, 8, 0, 0, 2, 8, 6, 7, 3, 8, 3, 8, 2, 6, 0, 9, 3,
            1, 9, 2, 8, 1, 7, 4, 4, 8, 0, 5, 4, 6, 3, 8, 7, 7, 7, 2, 9, 7, 2, 1, 2, 8, 7, 3,
            4, 0, 4, 6, 3, 7, 1, 4, 7, 9, 8, 2, 1, 9, 8, 0, 4, 6, 6, 3, 8, 0, 0, 2, 2, 2, 4,
            4, 0, 5, 8, 2, 0, 2, 4, 2, 0, 9, 2, 9, 6, 4, 2, 0, 3, 0, 4, 5, 9, 7, 4, 2, 4, 7,
            7, 1, 8, 3, 6, 5, 6, 5, 4, 2, 3, 7, 1, 2, 7, 4, 5, 3, 5, 5, 7, 8, 5, 9, 8, 2, 7,
            3, 7, 6, 5, 2, 4, 4, 2, 9, 1, 2, 6, 3, 7, 2, 3, 0, 5, 0, 4, 9, 9, 8, 7, 9, 7, 5,
            9, 5, 4, 8, 9, 0, 5, 8, 1, 1, 8, 9, 5, 0, 4, 2, 8, 8, 8, 2, 4, 4, 8, 9, 0, 2, 8,
            3, 0, 2, 8, 5, 0, 1, 5, 7, 5, 5, 5, 9, 3, 6, 4, 3, 3, 7, 5, 9, 0, 2, 1, 5, 4, 7,
            2, 0, 7, 0, 9, 6, 0, 7, 9, 5, 8, 4, 5, 7, 4, 3, 2, 4, 2, 1, 9, 6, 2, 6, 3, 5, 0,
            3, 9, 8, 5, 9, 9, 7, 8, 8, 6, 2, 7, 2, 5, 8, 0, 7, 6, 5, 0, 8, 0, 4, 8, 4, 9, 6,
            2, 2, 3, 2, 4, 1, 3, 1, 5, 6, 3, 1, 4, 9, 5, 9, 7, 2, 2, 4, 6, 6, 1, 3, 3, 4, 7,
            4, 4, 4, 1, 8, 1, 4, 6, 1, 7, 4, 2, 0, 5, 1, 3, 0, 1, 8, 5, 2, 6, 6, 6, 8, 4, 6,
            8, 5, 9, 2, 6, 8, 3, 0, 6, 4, 1, 9, 3, 4, 1, 5, 8, 8, 4, 1, 6, 0, 0, 8, 4, 5, 4,
            5, 8, 5, 6, 7, 6, 9, 3, 6, 7, 2, 9, 6, 6, 0, 1, 2, 4, 2, 3, 9, 9, 0, 7, 1, 3, 0,
            5, 8, 3, 1, 5, 4, 8, 8, 8, 3, 0, 6, 7, 0, 9, 4, 8, 3, 5, 9, 1, 0, 5, 6, 3, 0, 0,
            6, 7, 8, 6, 1, 2, 3, 3, 6, 1, 7, 5, 3, 7, 2, 2, 5, 9, 1, 9, 5, 8, 8, 7, 5, 5, 8,
            6, 8, 2, 5, 7, 6, 7, 8, 4, 0, 1, 1, 4, 4, 8, 7, 3, 4, 5, 0, 4, 1, 8, 3, 4, 8, 3,
            9, 8, 8, 0, 6, 9, 7, 0, 4, 2, 9, 1, 4, 3, 4, 3, 0, 9, 0, 5, 2, 0, 5, 2, 2, 1, 2,
            3, 7, 3, 6, 7, 5, 1, 3, 2, 6, 0, 0, 4, 4, 3, 7, 0, 6, 6, 6, 4, 0, 3, 7, 7, 3, 0,
            6, 4, 2, 7, 4, 3, 3, 4, 8, 8, 4, 8, 9, 6, 4, 4, 7, 4, 5, 2, 5, 5, 7, 6, 7, 1, 8,
            1, 8, 2, 7, 4, 8, 1, 3, 5, 4, 6, 3, 0, 0, 8, 0, 3, 2, 7, 1, 3, 3, 7, 3, 0, 9, 7,
            6, 9, 1, 6, 9, 5, 1, 8, 8, 9, 9, 4, 4, 2, 6, 2, 1, 9, 8, 4, 9, 2, 7, 8, 6, 0, 0,
            6, 2, 8, 4, 3, 5, 2, 6, 5, 7, 1, 8, 7, 6, 0, 9, 1, 8, 0, 4, 0, 7, 2, 4, 3, 5, 4,
            1, 7, 0, 5, 9, 1, 6, 2, 2, 9, 5, 2, 3, 8, 3, 7, 6, 8, 8, 6, 6, 6, 9, 2, 2, 9, 6,
            6, 8, 6, 8, 9, 9, 8, 9, 9, 8, 5, 0, 7, 8, 9, 0, 8, 8, 6, 4, 2, 1, 8, 0, 7, 0, 6,
            6, 4, 3, 8, 4, 4, 4, 3, 0, 4, 5, 8, 9, 8, 4, 3, 1, 7, 1, 7, 6, 7, 5, 7, 2, 8, 6,
            3, 0, 8, 4, 9, 1, 3, 0, 5, 4, 0, 7, 2, 7, 0, 8, 7, 9, 2, 0, 6, 1, 6, 5, 0, 0, 0,
            7, 7, 6, 1, 0, 1, 5, 0, 7, 0, 6, 2, 5, 2, 3, 7, 1, 4, 2, 6, 8, 9, 6, 5, 7, 9, 9,
            8, 4, 7, 5, 8, 8, 7, 7, 8, 6, 1, 3, 0, 5, 7, 8, 8, 5, 3, 7, 8, 8, 2, 6, 7, 5, 6,
            9, 4, 7, 3, 2, 3, 4, 8, 8, 2, 2, 0, 6, 4, 3, 7, 4, 2, 8, 0, 7, 8, 5, 8, 0, 5, 9,
            5, 5, 1, 5, 0, 8, 3, 4, 1, 9, 1, 8, 7, 2, 5, 9, 1, 1, 4, 6, 0, 4, 0, 5, 7, 9, 4,
            2, 8, 9, 6, 9, 2, 7, 2, 8, 0, 3, 6, 2, 0, 3, 8, 2, 5, 1, 2, 9, 4, 5, 4, 8, 0, 8,
            6, 7, 8, 0, 3, 8, 7, 5, 8, 9, 7, 0, 1, 5, 2, 7, 0, 6, 6, 2, 8, 3, 8, 9, 6, 3, 0,
            3, 1, 8, 3, 4, 5, 6, 3, 5, 8, 9, 6, 9, 4, 5, 2, 8, 6, 6, 6, 2, 2, 0, 2, 1, 0, 8,
            6, 2, 6, 0, 3, 9, 1, 8, 8, 4, 9, 6, 9, 5, 6, 6, 1, 5, 3, 2, 2, 3, 0, 5, 1, 9, 9,
            4, 3, 2, 9, 7, 7, 3, 1, 4, 8, 4, 0, 0, 9, 3, 5, 6, 5, 0, 4, 4, 8, 5, 1, 4, 4, 1,
            9, 0, 8, 1, 4, 8, 1, 2, 1, 3, 6, 4, 1, 4, 7, 9, 0, 4, 4, 1, 3, 7, 4, 5, 9, 3, 0,
            1, 6, 5, 0, 8, 7, 9, 6, 4, 5, 0, 2, 3, 0, 0, 4, 7, 6, 9, 7, 0, 9, 3, 4, 3, 4, 0,
            4, 3, 5, 5, 0, 2, 4, 9, 7, 9, 6, 3, 0, 7, 2, 7, 3, 1, 4, 6, 3, 9, 6, 1, 8, 5, 6,
            3, 2, 2, 0, 5, 2, 8, 9, 2, 5, 3, 0, 6, 8, 1, 3, 2, 2, 0, 2, 9, 2, 0, 0, 0, 3, 0,
            4, 6, 5, 7, 2, 0, 2, 7, 7, 2, 3, 8, 0, 5, 4, 5, 2, 2, 8, 6, 6, 2, 9, 6, 1, 5, 8,
            0, 8, 3, 2, 9, 5, 0, 3, 8, 5, 5, 7, 9, 8, 4, 8, 5, 0, 8, 7, 7, 6, 6, 2, 1, 4, 2,
            9, 8, 6, 7, 2, 5, 5, 0, 1, 1, 7, 9, 2, 0, 2, 0, 6, 0, 7, 3, 0, 7, 3, 8, 7, 5, 2,
            6, 4, 9, 7, 2, 2, 6, 4, 9, 1, 1, 2, 4, 7, 6, 1, 0, 6, 9, 2, 3, 5, 3, 2, 5, 7, 3{,
            0, 0}
          ]
        ))
      ]
    ));

  Test({LINENUM}66421, 'digits(1/123456789, 20)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr(
          [
            0, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 7, 3, 7, 1
          ]
        ))
      ]
    ));

  Test({LINENUM}66434, 'digits(1/123456789, 20, "fractional")',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr(
          [
            0, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 7, 3, 7, 1
          ]
        ))
      ]
    ));

  Test({LINENUM}66447, 'digits(1/123456789, 20, "significant")',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr(
          [
            0, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 7, 3, 7, 1, 0, 0, 0, 0, 6, 7, 0,
            7
          ]
        ))
      ]
    ));

  Test({LINENUM}66461, 'digits(1/613, 100)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr(
          [
            0, 0, 1, 6, 3, 1, 3, 2, 1, 3, 7, 0, 3, 0, 9, 9, 5, 1, 0, 6, 0, 3, 5, 8, 8, 9, 0,
            7, 0, 1, 4, 6, 8, 1, 8, 9, 2, 3, 3, 2, 7, 8, 9, 5, 5, 9, 5, 4, 3, 2, 3, 0, 0, 1,
            6, 3, 1, 3, 2, 1, 3, 7, 0, 3, 0, 9, 9, 5, 1, 0, 6, 0, 3, 5, 8, 8, 9, 0, 7, 0, 1,
            4, 6, 8, 1, 8, 9, 2, 3, 3, 2, 7, 8, 9, 5, 5, 9, 5, 4, 3
          ]
        ))
      ]
    ));

  Test({LINENUM}66477, 'digits(1/613, 100, "fractional")',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr(
          [
            0, 0, 1, 6, 3, 1, 3, 2, 1, 3, 7, 0, 3, 0, 9, 9, 5, 1, 0, 6, 0, 3, 5, 8, 8, 9, 0,
            7, 0, 1, 4, 6, 8, 1, 8, 9, 2, 3, 3, 2, 7, 8, 9, 5, 5, 9, 5, 4, 3, 2, 3, 0, 0, 1,
            6, 3, 1, 3, 2, 1, 3, 7, 0, 3, 0, 9, 9, 5, 1, 0, 6, 0, 3, 5, 8, 8, 9, 0, 7, 0, 1,
            4, 6, 8, 1, 8, 9, 2, 3, 3, 2, 7, 8, 9, 5, 5, 9, 5, 4, 3
          ]
        ))
      ]
    ));

  Test({LINENUM}66493, 'digits(1/613, 100, "significant")',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([0])),
        sm('frac', intarr(
          [
            0, 0, 1, 6, 3, 1, 3, 2, 1, 3, 7, 0, 3, 0, 9, 9, 5, 1, 0, 6, 0, 3, 5, 8, 8, 9, 0,
            7, 0, 1, 4, 6, 8, 1, 8, 9, 2, 3, 3, 2, 7, 8, 9, 5, 5, 9, 5, 4, 3, 2, 3, 0, 0, 1,
            6, 3, 1, 3, 2, 1, 3, 7, 0, 3, 0, 9, 9, 5, 1, 0, 6, 0, 3, 5, 8, 8, 9, 0, 7, 0, 1,
            4, 6, 8, 1, 8, 9, 2, 3, 3, 2, 7, 8, 9, 5, 5, 9, 5, 4, 3, 2, 3
          ]
        ))
      ]
    ));

  Test({LINENUM}66509, 'digits(-37153/7, 50, "fractional")',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([5, 3, 0, 7])),
        sm('frac', intarr(
          [
            5, 7, 1, 4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7, 1,
            4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7
          ]
        ))
      ]
    ));

  Test({LINENUM}66523, 'digits(37153/7, 50, "significant")',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([5, 3, 0, 7])),
        sm('frac', intarr(
          [
            5, 7, 1, 4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7, 1,
            4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7, 1, 4, 2, 8, 5, 7, 1, 4
          ]
        ))
      ]
    ));

  Test({LINENUM}66537, 'digits(-91523745821/9731, 100)',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([9, 4, 0, 5, 3, 7, 9])),
        sm('frac', intarr(
          [
            2, 8, 4, 8, 6, 2, 8, 0, 9, 5, 7, 7, 6, 3, 8, 4, 7, 4, 9, 7, 6, 8, 7, 8, 0, 1, 8,
            7, 0, 3, 1, 1, 3, 7, 6, 0, 1, 4, 7, 9, 8, 0, 6, 8, 0, 3, 0, 0, 0, 7, 1, 9, 3, 5,
            0, 5, 2, 9, 2, 3, 6, 4, 6, 0, 7, 9, 5, 3, 9, 6, 1, 5, 6, 6, 1, 2, 8, 8, 6, 6, 5,
            0, 9, 0, 9, 4, 6, 4, 5, 9, 7, 6, 7, 7, 5, 2, 5, 4, 3, 4
          ]
        ))
      ]
    ));

  Test({LINENUM}66553, 'digits(91523745821/9731, 100, "fractional")',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([9, 4, 0, 5, 3, 7, 9])),
        sm('frac', intarr(
          [
            2, 8, 4, 8, 6, 2, 8, 0, 9, 5, 7, 7, 6, 3, 8, 4, 7, 4, 9, 7, 6, 8, 7, 8, 0, 1, 8,
            7, 0, 3, 1, 1, 3, 7, 6, 0, 1, 4, 7, 9, 8, 0, 6, 8, 0, 3, 0, 0, 0, 7, 1, 9, 3, 5,
            0, 5, 2, 9, 2, 3, 6, 4, 6, 0, 7, 9, 5, 3, 9, 6, 1, 5, 6, 6, 1, 2, 8, 8, 6, 6, 5,
            0, 9, 0, 9, 4, 6, 4, 5, 9, 7, 6, 7, 7, 5, 2, 5, 4, 3, 4
          ]
        ))
      ]
    ));

  Test({LINENUM}66569, 'digits(-91523745821/9731, 100, "significant")',
    TAlgosimStructure.CreateWithValue
    (
      [
        sm('int', intarr([9, 4, 0, 5, 3, 7, 9])),
        sm('frac', intarr(
          [
            2, 8, 4, 8, 6, 2, 8, 0, 9, 5, 7, 7, 6, 3, 8, 4, 7, 4, 9, 7, 6, 8, 7, 8, 0, 1, 8,
            7, 0, 3, 1, 1, 3, 7, 6, 0, 1, 4, 7, 9, 8, 0, 6, 8, 0, 3, 0, 0, 0, 7, 1, 9, 3, 5,
            0, 5, 2, 9, 2, 3, 6, 4, 6, 0, 7, 9, 5, 3, 9, 6, 1, 5, 6, 6, 1, 2, 8, 8, 6, 6, 5,
            0, 9, 0, 9, 4, 6, 4, 5, 9, 7, 6, 7
          ]
        ))
      ]
    ));


  //
  // Fraction parts
  //

  Test({LINENUM}66590, 'FractionParts(1/2 - 1/2)', ASORationalNumber(rat(0, 1)));
  Test({LINENUM}66591, 'FractionParts(1/2)', ASORationalNumber(rat(1, 2)));
  Test({LINENUM}66592, 'FractionParts(1/3)', ASORationalNumber(rat(1, 3)));
  Test({LINENUM}66593, 'FractionParts(1/4)', ASORationalNumber(rat(1, 4)));
  Test({LINENUM}66594, 'FractionParts(1/5)', ASORationalNumber(rat(1, 5)));
  Test({LINENUM}66595, 'FractionParts(1/6)', ASORationalNumber(rat(1, 6)));
  Test({LINENUM}66596, 'FractionParts(1/7)', ASORationalNumber(rat(1, 7)));
  Test({LINENUM}66597, 'FractionParts(1/8)', ASORationalNumber(rat(1, 8)));
  Test({LINENUM}66598, 'FractionParts(1/9)', ASORationalNumber(rat(1, 9)));
  Test({LINENUM}66599, 'FractionParts(1/10)', ASORationalNumber(rat(1, 10)));
  Test({LINENUM}66600, 'FractionParts(1/100)', ASORationalNumber(rat(1, 100)));
  Test({LINENUM}66601, 'FractionParts(1/10000000)', ASORationalNumber(rat(1, 10000000)));
  Test({LINENUM}66602, 'FractionParts(2/10000000)', ASORationalNumber(rat(1, 5000000)));
  Test({LINENUM}66603, 'FractionParts(1/123456789123)', ASORationalNumber(rat(1, 123456789123)));
  Test({LINENUM}66604, 'FractionParts(2/12345678912345)', ASORationalNumber(rat(2, 12345678912345)));
  Test({LINENUM}66605, 'FractionParts(1/613)', ASORationalNumber(rat(1, 613)));

  Test({LINENUM}66607, 'FractionParts(2/3)', ASORationalNumber(rat(2, 3)));
  Test({LINENUM}66608, 'FractionParts(3/4)', ASORationalNumber(rat(3, 4)));
  Test({LINENUM}66609, 'FractionParts(57/59)', ASORationalNumber(rat(57, 59)));
  Test({LINENUM}66610, 'FractionParts(15243978/15243979)', ASORationalNumber(rat(15243978, 15243979)));
  Test({LINENUM}66611, 'FractionParts(824517365895213/82451757789123)', ASORationalNumber(rat(274839121965071, 27483919263041)));
  Test({LINENUM}66612, 'FractionParts(824517365895213/2)', ASORationalNumber(rat(824517365895213, 2)));

  Test({LINENUM}66614, 'FractionParts(-1/2)', ASORationalNumber(rat(-1, 2)));
  Test({LINENUM}66615, 'FractionParts(-1/3)', ASORationalNumber(rat(-1, 3)));
  Test({LINENUM}66616, 'FractionParts(-1/4)', ASORationalNumber(rat(-1, 4)));
  Test({LINENUM}66617, 'FractionParts(-1/5)', ASORationalNumber(rat(-1, 5)));
  Test({LINENUM}66618, 'FractionParts(-1/6)', ASORationalNumber(rat(-1, 6)));
  Test({LINENUM}66619, 'FractionParts(-1/7)', ASORationalNumber(rat(-1, 7)));
  Test({LINENUM}66620, 'FractionParts(-1/8)', ASORationalNumber(rat(-1, 8)));
  Test({LINENUM}66621, 'FractionParts(-1/9)', ASORationalNumber(rat(-1, 9)));
  Test({LINENUM}66622, 'FractionParts(-1/10)', ASORationalNumber(rat(-1, 10)));
  Test({LINENUM}66623, 'FractionParts(-1/100)', ASORationalNumber(rat(-1, 100)));
  Test({LINENUM}66624, 'FractionParts(-1/10000000)', ASORationalNumber(rat(-1, 10000000)));
  Test({LINENUM}66625, 'FractionParts(-2/10000000)', ASORationalNumber(rat(-1, 5000000)));
  Test({LINENUM}66626, 'FractionParts(-1/123456789123)', ASORationalNumber(rat(-1, 123456789123)));
  Test({LINENUM}66627, 'FractionParts(-2/12345678912345)', ASORationalNumber(rat(-2, 12345678912345)));
  Test({LINENUM}66628, 'FractionParts(-1/613)', ASORationalNumber(rat(-1, 613)));

  Test({LINENUM}66630, 'FractionParts(-2/3)', ASORationalNumber(rat(-2, 3)));
  Test({LINENUM}66631, 'FractionParts(-3/4)', ASORationalNumber(rat(-3, 4)));
  Test({LINENUM}66632, 'FractionParts(-57/59)', ASORationalNumber(rat(-57, 59)));
  Test({LINENUM}66633, 'FractionParts(-15243978/15243979)', ASORationalNumber(rat(-15243978, 15243979)));
  Test({LINENUM}66634, 'FractionParts(-824517365895213/82451757789123)', ASORationalNumber(rat(-274839121965071, 27483919263041)));
  Test({LINENUM}66635, 'FractionParts(-824517365895213/2)', ASORationalNumber(rat(-824517365895213, 2)));





  //
  //
  //  CHAPTER 18
  //  File system functions
  //
  //

  Chapter('File system functions');

  fn := TPath.Combine(TPath.GetTempPath, 'asfs');
  if TDirectory.Exists(fn) then
    TDirectory.Delete(fn, True);
  TDirectory.CreateDirectory(fn);
  try
    TDirectory.CreateDirectory(TPath.Combine(fn, 'cats'));
    TDirectory.CreateDirectory(TPath.Combine(fn, 'dogs'));
    TDirectory.CreateDirectory(TPath.Combine(fn, 'unicorns'));
    TFile.WriteAllText(TPath.Combine(fn, 'data.txt'), 'test data', TEncoding.UTF8);
    TFile.WriteAllText(TPath.Combine(fn, 'more data.txt'), 'more test data', TEncoding.UTF8);
    TFile.WriteAllText(TPath.Combine(fn, 'largefile.txt'), StringOfChar('A', 1024*1024), TEncoding.UTF8);
    Test({LINENUM}66661, 'fn ≔ "' + fn + '"', fn);
    Test({LINENUM}66662, 'DirectoryExists(fn)', True);
    Test({LINENUM}66663, 'DirectoryExists(fn + "\cats")', True);
    Test({LINENUM}66664, 'DirectoryExists(fn + "\dogs")', True);
    Test({LINENUM}66665, 'DirectoryExists(fn + "\unicorns")', True);
    Test({LINENUM}66666, 'DirectoryExists(fn + "\horses")', False);
    Test({LINENUM}66667, 'DirectoryExists(fn + "\rats")', False);
    Test({LINENUM}66668, 'CreateDirectory(fn + "\rats")', success);
    Test({LINENUM}66669, 'DirectoryExists(fn + "\rats")', True);
    Test({LINENUM}66670, 'DirectoryList(fn)', strarr([TPath.Combine(fn, 'cats'), TPath.Combine(fn, 'dogs'), TPath.Combine(fn, 'rats'), TPath.Combine(fn, 'unicorns')]));
    Test({LINENUM}66671, 'DeleteDirectory(fn + "\unicorns")', success);
    Test({LINENUM}66672, 'DirectoryList(fn)', strarr([TPath.Combine(fn, 'cats'), TPath.Combine(fn, 'dogs'), TPath.Combine(fn, 'rats')]));
    Test({LINENUM}66673, 'FileExists(fn + "\data.txt")', True);
    Test({LINENUM}66674, 'FileExists(fn + "\more data.txt")', True);
    Test({LINENUM}66675, 'FileExists(fn + "\largefile.txt")', True);
    Test({LINENUM}66676, 'FileExists(fn + "\nargles.txt")', False);
    Test({LINENUM}66677, 'FileSize(fn + "\data.txt")', 9 + 3);
    Test({LINENUM}66678, 'FileSize(fn + "\more data.txt")', 14 + 3);
    Test({LINENUM}66679, 'FileSize(fn + "\largefile.txt")', 1024*1024 + 3);
    Test({LINENUM}66680, 'FileSize(fn + "\nargles.txt")', failure, 'File not found.');
    Test({LINENUM}66681, 'FileList(fn)', strarr([TPath.Combine(fn, 'data.txt'), TPath.Combine(fn, 'largefile.txt'), TPath.Combine(fn, 'more data.txt')]));
    Test({LINENUM}66682, 'DeleteFile(fn + "\data.txt")', success);
    Test({LINENUM}66683, 'DeleteFile(fn + "\nargles.txt")', failure);
    Test({LINENUM}66684, 'FileList(fn)', strarr([TPath.Combine(fn, 'largefile.txt'), TPath.Combine(fn, 'more data.txt')]));
    Test({LINENUM}66685, 'FileExists(fn + "\data.txt")', False);
    Test({LINENUM}66686, 'DeleteDirectory(fn)', failure, 'The specified directory is not empty');
    Test({LINENUM}66687, 'fn ≔ "C:\Users\Luna Lovegood\Documents\The Quibbler\June 2015\Articles\More nargles found in southern England.html";', null);
    Test({LINENUM}66688, 'FileName(fn)', 'More nargles found in southern England.html');
    Test({LINENUM}66689, 'PrettyFileName(fn)', 'More nargles found in southern England');
    Test({LINENUM}66690, 'FileExt(fn)', '.html');
    Test({LINENUM}66691, 'FilePath(fn)', 'C:\Users\Luna Lovegood\Documents\The Quibbler\June 2015\Articles\');
    Test({LINENUM}66692, 'delete(fn)', success);
    Test({LINENUM}66693, 'DeleteFile( property("FrontEnd.ExeName") )', failure);
  finally
    if TDirectory.Exists(fn) then
      TDirectory.Delete(fn, True);
  end;





  //
  //
  //  CHAPTER 19
  //  Pathological expressions
  //
  //

  Chapter('Pathological expressions');

  Test({LINENUM}66712, 'CustomSort(''(0, 1), (left, right) ↦ left − right)', failure,
    'The comparer was expected to return a real number, but an object of type custom function was returned.');

  Test({LINENUM}66715, 'F ≔ ξ ↦ (n ↦ ξ⋅n); F(5)(7)', 35);
  Test({LINENUM}66716, 'F ≔ δ ↦ (ξ ↦ (n ↦ ξ⋅n + δ)); F(3)(5)(7)', 38);
  Test({LINENUM}66717, 'F ≔ ξ ↦ (ξ ↦ ξ⋅ξ); F(5)(7)', 49);

  Test({LINENUM}66719, '∑((n ↦ n^2; 7), n, 1, 10)', 70);
  Test({LINENUM}66720, '∑((n ↦ n^2)(3), n, 1, 10)', 90);
  Test({LINENUM}66721, '∑((n ↦ n^2)(n), n, 1, 10)', 385);
  Test({LINENUM}66722, '∑(∑((n ↦ n^2)(n), n, 1, 10), n, 1, 10)', 3850);
  Test({LINENUM}66723, '∑(∑(∑((n ↦ n^2)(n), n, 1, 10), n, 1, 10), n, 1, 10)', 38500);
  Test({LINENUM}66724, '(n ↦ ∑(∑(∑((n ↦ n^2)(n), n, 1, 10), n, 1, 10), n, 1, 10))(true)', 38500);
  Test({LINENUM}66725, 'f ≔ n ↦ ∑(∑(∑((n ↦ n^2)(n), n, 1, 10), n, 1, 10), n, 1, 10); f(2)', 38500);

  Test({LINENUM}66727, 'f ≔ n ↦ f(n); f(1)', failure, 'Too deep recursion.');
  Test({LINENUM}66728, 'a ≔ n ↦ b(n); b ≔ n ↦ a(n); a(1)', failure, 'Too deep recursion.');
  Test({LINENUM}66729, 'a ≔ n ↦ b(n); b ≔ n ↦ c(n); c ≔ n ↦ a(n); a(1)', failure, 'Too deep recursion.');
  Test({LINENUM}66730, 'f ≔ x ↦ ∫(g(t), t, 0, x); g ≔ x ↦ ∫(f(t), t, 0, x); f(1)', failure, 'Too deep recursion.');
  Test({LINENUM}66731, 'f ≔ x ↦ ∫(g(x), x, 0, x); g ≔ x ↦ ∫(f(x), x, 0, x); f(1)', failure, 'Too deep recursion.');

  Test({LINENUM}66733, StringOfChar('+', 1000) + '1', EParseException, 'Expression is too deep.');
  Test({LINENUM}66734, StringOfChar('+', 10000) + '1', EParseException, 'Expression is too deep.');

  Test({LINENUM}66736, StringOfChar('(', 1000) + '1' + StringOfChar(')', 1000), 1);

  Test({LINENUM}66738, '+/⋅−+/*−+−+/−+/−⋅/−+//+⋅−/−/+−+⋅+⋅−+/−', ESyntaxException);
  Test({LINENUM}66739, '−−+−+−⋅/−+//+⋅−/−/+−+⋅+⋅−+/−', ESyntaxException);
  Test({LINENUM}66740, '/−+/−+/−⋅/−+//+⋅−/−/+−+⋅+⋅−+/−', ESyntaxException);
  Test({LINENUM}66741, '*−+−+/−+/−⋅/−+//+⋅−/−/+−+⋅+⋅−+/−', ESyntaxException);
  Test({LINENUM}66742, '⋅−+*−−/−/−−+//+⋅−/−/+−+⋅+⋅−+/−', ESyntaxException);
  Test({LINENUM}66743, '+/⋅−+/*−+−+/−+/−⋅/−+/−/+−+⋅+⋅−+/−', ESyntaxException);
  Test({LINENUM}66744, '+', ESyntaxException, 'Operand missing after operator + at column 1.');

  Test({LINENUM}66746, 'x, x, x ≔ (x, x ≔ 5)', 5);
  Test({LINENUM}66747, 'x', 5);

  Test({LINENUM}66749, 'AtZero ≔ f ↦ f(0); AtZero(sin) ≈ 0 ∧ AtZero(cos) ≈ 1', True);
  Test({LINENUM}66750, 'f ≔ x ↦ x(x); f(type)', 'kernel function');
  Test({LINENUM}66751, 'f(f)', failure, 'Too deep recursion.');

  Test({LINENUM}66753, 'f ≔ x ↦ (y ↦ y(y) + x); f(type)(type)', 'kernel functiontype');
  Test({LINENUM}66754, '(x ↦ (y ↦ y(y) + x))(type)(type)', 'kernel functiontype');
  Test({LINENUM}66755, '(x ↦ (y ↦ y(y)))(0)(type)', 'kernel function');
  Test({LINENUM}66756, 'string((x ↦ (y ↦ y(y)))(0)(x ↦ x))', 'custom function');

  Test({LINENUM}66758, '(x ↦ (y ↦ y(y)))(0)(x ↦ x)(x ↦ x)(394)', 394);
  Test({LINENUM}66759, '(x ↦ (x ↦ x(x)))(0)(x ↦ x)(x ↦ x)(394)', 394);

  Test({LINENUM}66761, '(x ↦ (x ↦ x(x)))(x ↦ x)(x ↦ x)(x ↦ x)(394)', 394);

  Test({LINENUM}66763, 'repeat(repeat(repeat(break(3)))); 2', 2);

  Test({LINENUM}66765, '∫(break(), x, 0, 1)', failure, 'Integrand must be a real-valued function.');
  Test({LINENUM}66766, '∑(break(), n, 0, 10)', ASO(_break));

  Eps; Test({LINENUM}66768, '[[−1, ''(−1, ''(−1, ''(1, −1)[1])[−[−[−1, 1, 1][0! + [[[0, 1][1]]!]]]!])[−1]][[−1, [1]][−[−1, 1][−1]]], 10^⌈π⌉][−[0!]] − '+'(−[1, 10^⌈e⌉][−1]⋅⌊e⌋ − [[10⋅[⌊π + e⌋ + [1, [digits(e)[−1][11], [1, 10, 1][−digits(π)[1][1]]][1]][−1]]]⋅⌊π⌋ − (−[1, ''(sqr, sqrt)[digits(1)[1]](10), 1][40] − '+'[1, [1, 10, 1][[1, [1, ''(sqr)[−1](10), 1][−1], 1][[1, digits(e)[−1][11]][−[1, digits(e)[1][1]][1]]]], 1][−[[0]!]!])])',
    12345.0);





  //
  //
  //  CHAPTER 20
  //  Benchmarks
  //
  //

  Chapter('Benchmarks');
  begin

    ASNum.ClearCaches;

    var c20bmtc1 := GetTickCount64;

    Test({LINENUM}66789, 'for(n, 1, 40, eigenvalues(RandomMatrix(n)))', null);
    Test({LINENUM}66790, 'eigenvectors(RandomMatrix(40));', null);
    Test({LINENUM}66791, 'LU(RandomMatrix(150));', null);
    Test({LINENUM}66792, 'det(IdentityMatrix(1000))', 1.0);
    Test({LINENUM}66793, 'QR(IdentityMatrix(200));', null);
    Test({LINENUM}66794, 'for(n, 1, 10, assert(A ≔ RandomMatrix(250); IsIdentity(A ⋅ inv(A), 1E−12)))', null);

    Test({LINENUM}66796, 'n ≔ 1000; ComputePixmap(n, n, x, y, hsv(x⋅360/pred(n), 1, y/pred(n)));', null);
    Test({LINENUM}66797, 'ComputePixmap(1000, 1000, x, y, rgb(x/999, y/999, 0.5));', null);
    Test({LINENUM}66798, 'ComputePixmap(500, 500, x, y, hsv(x^2/100 + y/10 − sin((x−20⋅cos(y/25))/200)⋅x⋅y/50, abs(cos(x/500)), abs(cos(x/500))));', null);
    Test({LINENUM}66799, 'CustomScanlineRotation(ExampleData("Sally"), y, round(100⋅cos(sin(y/20)⋅y^2/300^2)));', null);
    Test({LINENUM}66800, 'ν ≔ 400; ω ≔ 2⋅π⋅ν; ComputeSound(sin(ω⋅sin(t)), t, 0, 10, 1);', null);

    Test({LINENUM}66802, '∫(FresnelC(t), t, 0, 1);', null);
    Test({LINENUM}66803, '∫(FresnelS(t), t, 0, 1);', null);
    Test({LINENUM}66804, '∫(erf(x), x, −2, 2);', null);
    Test({LINENUM}66805, '∑(sin(n)/cos(n), n, 1, 500000);', null);

    Test({LINENUM}66807, 'sort(frequencies(compute(RandomInt(1000000)^2, n, 1, 1000000) @ digits @ first));', null);

    var c20bmtc2 := GetTickCount64;

    TSelfTestCUI.OutputText(FormatFloat('#.0', 100 * (c20bmtc2 - c20bmtc1) / 60000) + '%');

  end;




end;

end.