﻿:: { g:g, R1:{A:i8, B:s}, R2:{A:i8?, B:s}, R3:{A:i4, B:s} }

Like(g, 3)
Like(g, "hi")
Like(g, R1)
Like(g, R2)
Like(R2, R1)
Like(R1, R2)

LikeOr(g, 3)
LikeOr(g, "hi")
LikeOr(g, R1)
LikeOr(g, R2)
LikeOr(R2, R1)
LikeOr(R1, R2)

LikeOrDef(g, 3)
LikeOrDef(g, "hi")
LikeOrDef(g, R1)
LikeOrDef(g, R2)
LikeOrDef(R2, R1)
LikeOrDef(R1, R2)

Like(7 if true else "txt", 3)
Like(7 if true else "txt", "hi")
Like(7 if false else "txt", 3)
Like(7 if false else "txt", "hi")

Like(3, g)
Like(g, Range(3))
Like(g, []->TakeOne())
Like(g, (3, "hi"))
Like(g, module {param A := 3;})
Like(g, Tensor.Fill(3, 17))
Like(g, Tensor.Fill({A:3}, 17))
Like(3, 17)
Like(Opt(3), 17)
Like(R1, 17)
Like(R1, R3)
Like(3 if true else g, 17)
Like("hi" if true else g, 17)

LikeOr(3, g)
LikeOr(g, Range(3))
LikeOr(g, []->TakeOne())
LikeOr(g, (3, "hi"))
LikeOr(g, module {param A := 3;})
LikeOr(g, Tensor.Fill(3, 17))
LikeOr(g, Tensor.Fill({A:3}, 17))
LikeOr(3, 17)
LikeOr(Opt(3), 17)
LikeOr(R1, 17)
LikeOr(R1, R3)
LikeOr(3 if true else g, 17)
LikeOr("hi" if true else g, 17)
