================================================================================
objects/inequality
================================================================================

res1 = new Dynamic {} != new Dynamic {}
res2 = new Dynamic { foo = 1 } != new Dynamic { foo = 1 }
res3 = new Dynamic { foo = 1; bar = "two" } != new Dynamic { foo = 1; bar = "two" }
res4 = new Dynamic { foo = 1; bar = "two" } != new Dynamic { bar = "two"; foo = 1 }
res5 = new Dynamic { foo = 1; bar = "two" } != new Dynamic { foo = 1; bar = "one" }
res6 = new Dynamic { foo = 1; bar = "two" } != new Dynamic { foo = 1; bar = "two"; baz = "two" }
res7 = new Dynamic { foo = 1 } != new Dynamic { bar = "two" }

local obj1 {
  foo = 1
}
local obj2 {
  foo = 1
  bar = "two"
}
local obj3 {
  bar = "two"
  foo = 1
}

res8 = (obj1) {} != new Dynamic { foo = 1 }
res9 = (obj1) { bar = "two" } != obj2
res10 = (obj1) { bar = "two" } != (obj2) {}
res11 = (obj1) { bar = "two" } != (obj2) { bar = "two" }
res12 = (obj1) { bar = "two" } != (obj2) { foo = 1 }
res13 = (obj1) { bar = "two" } != obj3
res14 = (obj1) { baz = "two" } != obj3
res15 = (obj1) { bar = "three" } != obj3

class Person {
  name = "Pigeon"
  age: Int?
  street: String
}

class Person2 {
  name = "Pigeon"
  age: Int?
  street: String
}

res16 = new Person {} != Person
res17 = new Person {} != new Person2 {}
res18 = new Person { street = "Fulton St." } != new Person { street = "Fulton St." }
res19 = new Person { street = "Fulton St." } != new Person2 { street = "Fulton St." }
res20 = new Person { age = 40; street = "Fulton St." } != new Person { street = "Fulton St."; age = 40 }
res21 = new Person { age = 80; street = "Fulton St." } != new Person { street = "Fulton St."; age = 40 }

class Person3 {
  name: String
  age: Int
  hidden street: String
}

// equal by definition
local person3_1 = new Person3 { name = "Pigeon"; age = 42 }
local person3_2 = new Person3 { name = "Pigeon"; age = 42; street = "Fox St." }
local person3_3 = new Person3 { name = street; age = 42; street = "Pigeon" }

res22 = person3_1 != person3_2
res23 = person3_2 != person3_1
res24 = person3_1 != person3_3
res25 = person3_3 != person3_1

class Person4 {
  name: String
  age: Int
  hidden street: String
  hidden hobby: String
}

// equal by definition
local person4_1 = new Person4 { name = "Pigeon"; age = 42 }
local person4_2 = new Person4 { name = "Pigeon"; age = 42; street = "Fox St." }
local person4_3 = new Person4 { name = "Pigeon"; age = 42; street = "Fox St."; hobby = "swimming" }

res26 = person4_1 != person4_2
res27 = person4_2 != person4_3
res28 = person4_3 != person4_1

--------------------------------------------------------------------------------

(module
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))
          (objectProperty
            (identifier)
            (slStringLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))
          (objectProperty
            (identifier)
            (intLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))
          (objectProperty
            (identifier)
            (slStringLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))
          (objectProperty
            (identifier)
            (slStringLiteral))
          (objectProperty
            (identifier)
            (slStringLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))))
  (classProperty
    (modifier)
    (identifier)
    (objectBody
      (objectProperty
        (identifier)
        (intLiteral))))
  (classProperty
    (modifier)
    (identifier)
    (objectBody
      (objectProperty
        (identifier)
        (intLiteral))
      (objectProperty
        (identifier)
        (slStringLiteral))))
  (classProperty
    (modifier)
    (identifier)
    (objectBody
      (objectProperty
        (identifier)
        (slStringLiteral))
      (objectProperty
        (identifier)
        (intLiteral))))
  (classProperty
    (identifier)
    (binaryExpr
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (variableExpr
        (identifier))))
  (classProperty
    (identifier)
    (binaryExpr
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody))))
  (classProperty
    (identifier)
    (binaryExpr
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (variableExpr
        (identifier))))
  (classProperty
    (identifier)
    (binaryExpr
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (variableExpr
        (identifier))))
  (classProperty
    (identifier)
    (binaryExpr
      (objectLiteral
        (parenthesizedExpr
          (variableExpr
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (variableExpr
        (identifier))))
  (clazz
    (identifier)
    (classBody
      (classProperty
        (identifier)
        (slStringLiteral))
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (type
              (qualifiedIdentifier
                (identifier))))))
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))))
  (clazz
    (identifier)
    (classBody
      (classProperty
        (identifier)
        (slStringLiteral))
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (type
              (qualifiedIdentifier
                (identifier))))))
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody))
      (variableExpr
        (identifier))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))
          (objectProperty
            (identifier)
            (intLiteral))))))
  (classProperty
    (identifier)
    (binaryExpr
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (intLiteral))
          (objectProperty
            (identifier)
            (slStringLiteral))))
      (newExpr
        (type
          (qualifiedIdentifier
            (identifier)))
        (objectBody
          (objectProperty
            (identifier)
            (slStringLiteral))
          (objectProperty
            (identifier)
            (intLiteral))))))
  (clazz
    (identifier)
    (classBody
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))
      (classProperty
        (modifier)
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))))
  (lineComment)
  (classProperty
    (modifier)
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectProperty
          (identifier)
          (intLiteral)))))
  (classProperty
    (modifier)
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectProperty
          (identifier)
          (intLiteral))
        (objectProperty
          (identifier)
          (slStringLiteral)))))
  (classProperty
    (modifier)
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectProperty
          (identifier)
          (variableExpr
            (identifier)))
        (objectProperty
          (identifier)
          (intLiteral))
        (objectProperty
          (identifier)
          (slStringLiteral)))))
  (classProperty
    (identifier)
    (binaryExpr
      (variableExpr
        (identifier))
      (variableExpr
        (identifier))))
  (classProperty
    (identifier)
    (binaryExpr
      (variableExpr
        (identifier))
      (variableExpr
        (identifier))))
  (classProperty
    (identifier)
    (binaryExpr
      (variableExpr
        (identifier))
      (variableExpr
        (identifier))))
  (classProperty
    (identifier)
    (binaryExpr
      (variableExpr
        (identifier))
      (variableExpr
        (identifier))))
  (clazz
    (identifier)
    (classBody
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))
      (classProperty
        (modifier)
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))
      (classProperty
        (modifier)
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))))
  (lineComment)
  (classProperty
    (modifier)
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectProperty
          (identifier)
          (intLiteral)))))
  (classProperty
    (modifier)
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectProperty
          (identifier)
          (intLiteral))
        (objectProperty
          (identifier)
          (slStringLiteral)))))
  (classProperty
    (modifier)
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectProperty
          (identifier)
          (intLiteral))
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectProperty
          (identifier)
          (slStringLiteral)))))
  (classProperty
    (identifier)
    (binaryExpr
      (variableExpr
        (identifier))
      (variableExpr
        (identifier))))
  (classProperty
    (identifier)
    (binaryExpr
      (variableExpr
        (identifier))
      (variableExpr
        (identifier))))
  (classProperty
    (identifier)
    (binaryExpr
      (variableExpr
        (identifier))
      (variableExpr
        (identifier)))))
