﻿`` RA := (3, "hi");
`` QA := RA->Opt();
`` NA := RA->Null();
`` RBs := [(3, "hi"), (5, "hi"), (3, "HI"), (3, "hj")];
`` QBs := RBs ++ [null];
`` RCs := RBs->DropOne();
`` __IL_Func_Ind := 0;

RA   = RBs
RA   = QBs
QA   = RBs
QA   = QBs
NA   = RBs
NA   = QBs
RA ! = RBs
RA ! = QBs
QA ! = RBs
QA ! = QBs
NA ! = RBs
NA ! = QBs
RA  ~= RBs
RA  ~= QBs
QA  ~= RBs
QA  ~= QBs
NA  ~= RBs
NA  ~= QBs
RA !~= RBs
RA !~= QBs
QA !~= RBs
QA !~= QBs
NA !~= RBs
NA !~= QBs

RA   = RBs = RBs
RA   = QBs = QBs
QA   = RBs = RBs
QA   = QBs = QBs
NA   = RBs = RBs
NA   = QBs = QBs
RA ! = RBs = RBs
RA ! = QBs = QBs
QA ! = RBs = RBs
QA ! = QBs = QBs
NA ! = RBs = RBs
NA ! = QBs = QBs
RA  ~= RBs = RBs
RA  ~= QBs = QBs
QA  ~= RBs = RBs
QA  ~= QBs = QBs
NA  ~= RBs = RBs
NA  ~= QBs = QBs
RA !~= RBs = RBs
RA !~= QBs = QBs
QA !~= RBs = RBs
QA !~= QBs = QBs
NA !~= RBs = RBs
NA !~= QBs = QBs

RA = RA   = RBs
RA = RA   = QBs
QA = QA   = RBs
QA = QA   = QBs
NA = NA   = RBs
NA = NA   = QBs
RA = RA ! = RBs
RA = RA ! = QBs
QA = QA ! = RBs
QA = QA ! = QBs
NA = NA ! = RBs
NA = NA ! = QBs
RA = RA  ~= RBs
RA = RA  ~= QBs
QA = QA  ~= RBs
QA = QA  ~= QBs
NA = NA  ~= RBs
NA = NA  ~= QBs
RA = RA !~= RBs
RA = RA !~= QBs
QA = QA !~= RBs
QA = QA !~= QBs
NA = NA !~= RBs
NA = NA !~= QBs

RA   in RBs
RA   in RCs
RA ! in RBs
RA ! in RCs
RA  ~in RBs
RA  ~in RCs
RA !~in RBs
RA !~in RCs

`` RAs := [(3.5, "hi"), (0/0, "hi")];
`` QAs := RAs ++ [null];
`` RBs := [(3.5, "hi"), (5.0, "hi"), (3.5, "HI"), (3.5, "hj"), (0/0, "hi"), (0/0, "HI")];
`` QBs := RBs ++ [null];
// DAs has instances taken from the RBs sequence. This is used to test the reference equality
// short-cut, which must be disabled for $ variants.
`` DAs := [RBs->TakeAt(0), RBs->TakeAt(4)];
`` func F(As, Bs) := ForEach(a:As, ForEach(b:Bs,
``     (
``      ("M" if a   = b else "_") &
``      ("M" if a ~ = b else "_") &
``      ("M" if a  $= b else "_") &
``      ("M" if a ~$= b else "_"),
``      a, b
``     )));

F(RAs, RBs)
F(RAs, QBs)
F(QAs, RBs)
F(QAs, QBs)
F(DAs, RBs)
F(DAs, QBs)
F(DAs ++ [null], RBs)
F(DAs ++ [null], QBs)
