# file      : tests/eval/comp.testscript
# license   : MIT; see accompanying LICENSE file

# Test comparison operators (eval-comp).

.include ../common.testscript

$* <'print (foo == bar)' >'false' : eq-false
$* <'print (foo == foo)' >'true'  : eq-true

$* <'print (foo != foo)' >'false' : ne-false
$* <'print (foo != bar)' >'true'  : ne-true

$* <'print (foo < bar)' >'false'  : lt-false
$* <'print (bar < foo)' >'true'   : lt-true

$* <'print (bar > foo)' >'false'  : gt-false
$* <'print (foo > bar)' >'true'   : gt-true

$* <'print (foo <= bar)' >'false' : le-false
$* <'print (bar <= foo)' >'true'  : le-true
$* <'print (bar <= bar)' >'true'  : le-true-eq

$* <'print (bar >= foo)' >'false' : ge-false
$* <'print (foo >= bar)' >'true'  : ge-true
$* <'print (foo >= foo)' >'true'  : ge-true-eq

: associativity
:
$* <'print (foo == bar == false)' >'true'

: type
:
{{
  $* <'print ((foo bar) == foo bar)' >'true' : untyped-list
  $* <'print ("" == "")' >'true'             : untyped-empty

  $* <'print (0 < 00)'                   >'true'     : untyped-untyped
  $* <'print (0 < [null])'               >'false'    : untyped-null
  $* <'print ([uint64] 00 < 0)'          >'false'    : uint64-untyped
  $* <'print ([uint64] 00 < [null])'     >'false'    : uint64-null
  $* <'print ([uint64] 00 < [uint64] 0)' >'false'    : uint64-uint64
  $* <'print ([uint64] 00 < [string] 0)' 2>>EOE != 0 : uint64-string
  <stdin>:1:20: error: comparison between uint64 and string
  EOE
}}

: null-equal-empty
:
$* <<EOI >>EOO
x = [string, null]
print ($x == [null])
print ($x == '')
print ($y == ) # Undefined/untyped.
EOI
true
true
true
EOO
