text: // @Test: Equal
  define AGtB_Int: 5 = 4
  define AEqB_Int: 5 = 5
  define ALtB_Int: 5 = 6
  define EqTuples: Tuple{a: 1, b: Tuple{c: 1}} = Tuple{a: 1, b: Tuple{c: 1}}
  define UneqTuples: Tuple{a: 1, b: Tuple{c: 1}} = Tuple{a: 1, b: Tuple{c: -1}}
  define TupleA: Tuple{ Foo: null }
  define TupleB: Tuple{ Bar: null }
  define TupleDifferentKeys: TupleA = TupleB
  define EqTuplesWithNullFields: Tuple{a: 'Hello', b: null} = Tuple{a: 'Hello', b: null}
  define UneqTuplesWithNullFields: Tuple{a: 'Hello', b: null} = Tuple{a: 'Goodbye', b: null}
  define UncertTuplesWithNullFieldOnOne: Tuple{a: 'Hello', b: null} = Tuple{a: 'Hello', b: 'null'}
  define UncertTuplesWithDiffNullFields: Tuple{a: 'Hello', b: null} = Tuple{a: 'Hello', c: null}
  define EqDateTimes: DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0) = DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0)
  define UneqDateTimes: DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0) = DateTime(2000, 3, 15, 13, 30, 25, 201, +1.0)
  define EqDateTimesTZ: DateTime(2000, 3, 15, 23, 30, 25, 200, +1.0) = DateTime(2000, 3, 16, 2, 30, 25, 200, +4.0)
  define UneqDateTimesTZ: DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0) = DateTime(2000, 3, 15, 13, 30, 25, 200, +2.0)
  define EqDateTimesNullMs: DateTime(2000, 3, 15, 13, 30, 25, 0) = DateTime(2000, 3, 15, 13, 30, 25)
  define EqDateTimesNullOtherMs: DateTime(2000, 3, 15, 13, 30, 25) = DateTime(2000, 3, 15, 13, 30, 25, 0)
  define EqDateTimesOnlyDate: DateTime(2000, 3, 15) = DateTime(2000, 3, 15)
  define UneqDateTimesOnlyDate: DateTime(2000, 3, 14) = DateTime(2000, 3, 15)
  define PossiblyEqDateTimesOnlyDateOnOne: DateTime(2000, 3, 13) = DateTime(2000, 3, 13, 13, 43, 32)
  define UneqDateTimesOnlyDateOnOne: DateTime(2000, 4, 13, 12, 43, 32) = DateTime(2000, 3, 13)
  define PossiblyEqualDateTimes: DateTime(2000, 3, 15) = DateTime(2000)
  define ImpossiblyEqualDateTimes: DateTime(2000, 3, 15) = DateTime(2000, 4)
  define DateAndDateTimeNull: Date(2000, 3, 13) = DateTime(2000, 3, 13)
  define DateAndDateTimeNotEqual: Date(2000, 3, 13) = DateTime(2000, 3, 12)
  define DateAndDateTimeUncertainFalse: Date(2000, 3, 13) = DateTime(2000, 3, 13, 2, 4, 23)
  define DateTimeAndDateNull: DateTime(2000, 3, 13) = Date(2000, 3, 13)
  define DateTimeAndDateNotEqual: DateTime(2000, 3, 12) = Date(2000, 3, 13)
  define DateTimeAndDateUncertainFalse: DateTime(2000, 3, 13, 2, 4, 23) = Date(2000, 3, 13)
  define AGtB_Quantity: 5 'm' = 4 'm'
  define AEqB_Quantity: 5 'm' = 5 'm'
  define ALtB_Quantity: 5 'm' = 6 'm'
  define AGtB_Quantity_diff: 5 'm' = 5 'cm'
  define AEqB_Quantity_diff: 5 'm' = 500 'cm'
  define ALtB_Quantity_diff: 5 'm' = 5 'km'
  define AGtB_Quantity_incompatible: 5 'Cel' = 4 'm'
  define AEqB_Quantity_incompatible: 5 'Cel' = 5 'm'
  define ALtB_Quantity_incompatible: 5 'Cel' = 40 'm'
  define EqRatios: 10 'mg' : 2 'dL' = 15 'mg' : 3 'dL'
  define UneqRatios: 10 'mg' : 2 'dL' = 15 'mg' : 4 'dL'
  
  // @Test: NotEqual
  define AGtB_Int: 5 != 4
  define AEqB_Int: 5 != 5
  define ALtB_Int: 5 != 6
  define EqTuples: Tuple{a: 1, b: Tuple{c: 1}} != Tuple{a: 1, b: Tuple{c: 1}}
  define UneqTuples: Tuple{a: 1, b: Tuple{c: 1}} != Tuple{a: 1, b: Tuple{c: -1}}
  define EqTuplesWithNullFields: Tuple{a: 'Hello', b: null} != Tuple{a: 'Hello', b: null}
  define UneqTuplesWithNullFields: Tuple{a: 'Hello', b: null} != Tuple{a: 'Goodbye', b: null}
  define UncertTuplesWithNullFieldOnOne: Tuple{a: 'Hello', b: null} != Tuple{a: 'Hello', b: 'null'}
  define UncertTuplesWithDiffNullFields: Tuple{a: 'Hello', b: null} != Tuple{a: 'Hello', c: null}
  define EqDateTimes: DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0) != DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0)
  define UneqDateTimes: DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0) != DateTime(2000, 3, 15, 13, 30, 25, 201, +1.0)
  define EqDateTimesTZ: DateTime(2000, 3, 15, 23, 30, 25, 200, +1.0) != DateTime(2000, 3, 16, 2, 30, 25, 200, +4.0)
  define UneqDateTimesTZ: DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0) != DateTime(2000, 3, 15, 13, 30, 25, 200, +2.0)
  define EqDateTimesNullMs: DateTime(2000, 3, 15, 13, 30, 25, 0) != DateTime(2000, 3, 15, 13, 30, 25)
  define EqDateTimesNullOtherMs: DateTime(2000, 3, 15, 13, 30, 25) != DateTime(2000, 3, 15, 13, 30, 25, 0)
  define EqDateTimesOnlyDate: DateTime(2000, 3, 15) != DateTime(2000, 3, 15)
  define UneqDateTimesOnlyDate: DateTime(2000, 3, 14) != DateTime(2000, 3, 15)
  define PossiblyEqDateTimesOnlyDateOnOne: DateTime(2000, 3, 13) != DateTime(2000, 3, 13, 13, 43, 32)
  define UneqDateTimesOnlyDateOnOne: DateTime(2000, 4, 13, 12, 43, 32) != DateTime(2000, 3, 13)
  define PossiblyEqualDateTimes: DateTime(2000, 3, 15) != DateTime(2000)
  define ImpossiblyEqualDateTimes: DateTime(2000, 3, 15) != DateTime(2000, 4)
  define DateAndDateTimeNull: Date(2000, 3, 13) != DateTime(2000, 3, 13)
  define DateAndDateTimeNotEqual: Date(2000, 3, 13) != DateTime(2000, 3, 12)
  define DateAndDateTimeUncertainTrue: Date(2000, 3, 13) != DateTime(2000, 3, 13, 2, 4, 23)
  define DateTimeAndDateNull: DateTime(2000, 3, 13) != Date(2000, 3, 13)
  define DateTimeAndDateNotEqual: DateTime(2000, 3, 12) != Date(2000, 3, 13)
  define DateTimeAndDateUncertainTrue: DateTime(2000, 3, 13, 2, 4, 23) != Date(2000, 3, 13)
  define AGtB_Quantity: 5 'm' != 4 'm'
  define AEqB_Quantity: 5 'm' != 5 'm'
  define ALtB_Quantity: 5 'm' != 6 'm'
  define AGtB_Quantity_diff: 5 'm' != 5 'cm'
  define AEqB_Quantity_diff: 5 'm' != 500 'cm'
  define ALtB_Quantity_diff: 5 'm' != 5 'km'
  define AGtB_Quantity_incompatible: 5 'Cel' != 4 'm'
  define AEqB_Quantity_incompatible: 5 'Cel' != 5 'm'
  define ALtB_Quantity_incompatible: 5 'Cel' != 40 'm'
  
  // @Test: Equivalent
  codesystem "LOINC": 'http://loinc.org'
  code "Tobacco smoking status code": '72166-2' from "LOINC" display 'Tobacco smoking status code'
  code "Tobacco smoking status code clone": '72166-2' from "LOINC" display 'Tobacco smoking status code clone'
  code "Total Score [AUDIT-C] code": '75626-2' from "LOINC" display 'Total Score [Audit-C] code'
  concept "Tobacco smoking status": { "Tobacco smoking status code" } display 'Tobacco smoking status'
  concept "Tobacco smoking status clone": { "Tobacco smoking status code clone" } display 'Tobacco smoking status'
  concept "Total Score [AUDIT-C]": { "Total Score [AUDIT-C] code" } display 'Total Score [Audit-C]'
  
  define ANull_BDefined: null ~ 4
  define ADefined_BNull: 5 ~ null
  define ANull_BNull: (null as String) ~ (null as String)
  define ADefined_BDefined: 3 ~ 3
  define CaseInsensitiveStrings: 'FOO' ~ 'foo'
  define WhiteSpaceTabTrue: 'foo bar' ~ 'foo\tbar'
  define WhiteSpaceTabReturnTrue: 'foo\tbar' ~ 'foo\nbar'
  define WhiteSpaceIncorrectSpaceFalse: 'foo bar' ~ 'foo\t\tbar'
  define WhiteSpaceIncorrectNumberTabsFalse: 'foo\t\tbar' ~'foo\tbar'
  define WhiteSpaceNoSpaceFalse: 'foo bar' ~ 'foobar'
  define EqRatios: 10 'mg' : 2 'dL' ~ 15 'mg' : 3 'dL'
  define UneqRatios: 10 'mg' : 2 'dL' ~ 15 'mg' : 4 'dL'
  define UneqRatioTypes: 10 'mg' : 2 'dL' ~ DateTime(2000, 3, 13, 2, 4, 23)
  
  // define EmptyTuples: { : } ~ { : } // TODO: We don't seem to support this format
  define SameTuples: Tuple{a: 'a', b: 'b'} ~ Tuple{a: 'a', b: 'b'}
  define SameTuplesNull: Tuple{a: null} ~ Tuple{a : null}
  define DifferentTuples: Tuple{a: 'a', b: 'b'} ~ Tuple{a: 'x', b: 'b'}
  define SameNestedTuples: Tuple{a: 'a', b: Tuple{c: 'c'}} ~ Tuple{a: 'a', b: Tuple{c: 'c'}}
  define SameNestedTuplesNull: Tuple{a: 'a', b: Tuple{c: null}} ~ Tuple{a: 'a', b: Tuple{c: null}}
  
  define EmptyLists: { } ~ { }
  define DifferentTypesLists: {'1', '2', '3'} ~ {1, 2, 3}
  define DifferentLengthLists: {'a'} ~ {'a', 'a'}
  define DifferentOrderLists: {'a', 'b'} ~ {'b', 'a'}
  define SameLists: {'a', 'b', 'c'} ~ {'a', 'b', 'c'}
  define SameListsNull: {null, null, null} ~ {null, null, null}
  define SameNestedLists: {{'a','d'}, {'b', 'c'}} ~ {{'a','d'}, {'b', 'c'}}
  define SameNestedListsNull: {null, {null, null}} ~ {null, {null, null}}
  
  define EmptyInterval: Interval(null, null) ~ Interval(null, null)
  define IntervalDifferentPointTypes:  Interval[1, 5] ~ Interval['1', '5']
  define IntervalDifferentStarts: Interval[1,3] ~ Interval[2,3]
  define IntervalDifferentEndings: Interval[1,3] ~ Interval[1,4]
  define SameIntervals: Interval[1,3] ~ Interval[1,3]
  
  define TupleAndList: {a: '1'} ~ {'1'}
  define ListAndTuple: {'1'} ~ {a: '1'}
  define TupleAndNullList: {a: '1'} ~ {null}
  define NullListAndTuple: {null} ~ {a: '1'}
  
  define SameCodeAndCode: "Tobacco smoking status code" ~ "Tobacco smoking status code clone"
  define SameCodeAndConcept: "Tobacco smoking status code clone" ~ "Tobacco smoking status"
  define SameConceptAndCode: "Tobacco smoking status" ~ "Tobacco smoking status code clone"
  define SameConceptAndConcept: "Tobacco smoking status" ~ "Tobacco smoking status clone"
  define DiffCodeAndCode: "Tobacco smoking status code" ~ "Total Score [AUDIT-C] code"
  define DiffCodeAndConcept: "Tobacco smoking status code clone" ~ "Total Score [AUDIT-C]"
  define DiffConceptAndCode: "Tobacco smoking status" ~ "Total Score [AUDIT-C] code"
  define DiffConceptAndConcept: "Tobacco smoking status" ~ "Total Score [AUDIT-C]"
  
  define EqDateTimes: DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0) ~ DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0)
  define UneqDateTimes: DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0) ~ DateTime(2000, 3, 15, 13, 30, 25, 201, +1.0)
  define EqDateTimesTZ: DateTime(2000, 3, 15, 23, 30, 25, 200, +1.0) ~ DateTime(2000, 3, 16, 2, 30, 25, 200, +4.0)
  define UneqDateTimesTZ: DateTime(2000, 3, 15, 13, 30, 25, 200, +1.0) ~ DateTime(2000, 3, 15, 13, 30, 25, 200, +2.0)
  define EqDateTimesNullMs: DateTime(2000, 3, 15, 13, 30, 25, 0) ~ DateTime(2000, 3, 15, 13, 30, 25)
  define EqDateTimesNullOtherMs: DateTime(2000, 3, 15, 13, 30, 25) ~ DateTime(2000, 3, 15, 13, 30, 25, 0)
  define EqDateTimesOnlyDate: DateTime(2000, 3, 15) ~ DateTime(2000, 3, 15)
  define UneqDateTimesOnlyDate: DateTime(2000, 3, 14) ~ DateTime(2000, 3, 15)
  define PossiblyEqDateTimesOnlyDateOnOne: DateTime(2000, 3, 13) ~ DateTime(2000, 3, 13, 13, 43, 32)
  define UneqDateTimesOnlyDateOnOne: DateTime(2000, 4, 13, 12, 43, 32) ~ DateTime(2000, 3, 13)
  define PossiblyEqualDateTimes: DateTime(2000, 3, 15) ~ DateTime(2000)
  define ImpossiblyEqualDateTimes: DateTime(2000, 3, 15) ~ DateTime(2000, 4)
  define DateAndDateTimeNull: Date(2000, 3, 13) ~ DateTime(2000, 3, 13)
  define DateAndDateTimeNotEqual: Date(2000, 3, 13) ~ DateTime(2000, 3, 12)
  define DateAndDateTimeUncertainFalse: Date(2000, 3, 13) ~ DateTime(2000, 3, 13, 2, 4, 23)
  define DateTimeAndDateNull: DateTime(2000, 3, 13) ~ Date(2000, 3, 13)
  define DateTimeAndDateNotEqual: DateTime(2000, 3, 12) ~ Date(2000, 3, 13)
  define DateTimeAndDateUncertainFalse: DateTime(2000, 3, 13, 2, 4, 23) ~ Date(2000, 3, 13)
  
  // @Test: Less
  define AGtB_Int: 5 < 4
  define AEqB_Int: 5 < 5
  define ALtB_Int: 5 < 6
  define AGtB_Quantity: 5 'm' < 4 'm'
  define AEqB_Quantity: 5 'm' < 5 'm'
  define ALtB_Quantity: 5 'm' < 6 'm'
  define AGtB_Quantity_diff: 5 'm' < 5 'cm'
  define AEqB_Quantity_diff: 5 'm' < 500 'cm'
  define ALtB_Quantity_diff: 5 'm' < 5 'km'
  define AGtB_Quantity_incompatible: 5 'Cel' < 4 'm'
  define AEqB_Quantity_incompatible: 5 'Cel' < 5 'm'
  define ALtB_Quantity_incompatible: 5 'Cel' < 40 'm'
  
  // @Test: LessOrEqual
  define AGtB_Int: 5 <= 4
  define AEqB_Int: 5 <= 5
  define ALtB_Int: 5 <= 6
  define AGtB_Quantity: 5 'm' <= 4 'm'
  define AEqB_Quantity: 5 'm' <= 5 'm'
  define ALtB_Quantity: 5 'm' <= 6 'm'
  define AGtB_Quantity_diff: 5 'm' <= 4 'm'
  define AEqB_Quantity_diff: 5 'm' <= 500 'cm'
  define ALtB_Quantity_diff: 5 'm' <= 5 'km'
  define AGtB_Quantity_incompatible: 5 'Cel' <= 4 'm'
  define AEqB_Quantity_incompatible: 5 'Cel' <= 5 'm'
  define ALtB_Quantity_incompatible: 5 'Cel' <= 40 'm'
  
  
  // @Test: Greater
  define AGtB_Int: 5 > 4
  define AEqB_Int: 5 > 5
  define ALtB_Int: 5 > 6
  define AGtB_Quantity: 5 'm' > 4 'm'
  define AEqB_Quantity: 5 'm' > 5 'm'
  define ALtB_Quantity: 5 'm' > 6 'm'
  define AGtB_Quantity_diff: 5 'm' > 5 'cm'
  define AEqB_Quantity_diff: 5 'm' > 500 'cm'
  define ALtB_Quantity_diff: 5 'm' > 5 'km'
  define AGtB_Quantity_incompatible: 5 'Cel' > 4 'm'
  define AEqB_Quantity_incompatible: 5 'Cel' > 5 'm'
  define ALtB_Quantity_incompatible: 5 'Cel' > 40 'm'
  
  // @Test: GreaterOrEqual
  define AGtB_Int: 5 >= 4
  define AEqB_Int: 5 >= 5
  define ALtB_Int: 5 >= 6
  define AGtB_Quantity: 5 'm' >= 4 'm'
  define AEqB_Quantity: 5 'm' >= 5 'm'
  define ALtB_Quantity: 5 'm' >= 6 'm'
  define AGtB_Quantity_diff: 5 'm' >= 5 'cm'
  define AEqB_Quantity_diff: 5 'm' >= 500 'cm'
  define ALtB_Quantity_diff: 5 'm' >= 5 'km'
  define AGtB_Quantity_incompatible: 5 'Cel' >= 4 'm'
  define AEqB_Quantity_incompatible: 5 'Cel' >= 5 'm'
  define ALtB_Quantity_incompatible: 5 'Cel' >= 40 'm'
  define DivideUcum_incompatible: (100 '[nmi_i]' / 2 'h') > 49 'mg/[lb_av]'
  define DivideUcum: (100 'mg' / 2 '[lb_av]') > 49 'mg/[lb_av]'
  