From 3f847d533ad72e987ff9e34483a3af63702b7749 Mon Sep 17 00:00:00 2001 From: Chris Pressey Date: Tue, 8 Feb 2022 12:57:08 +0000 Subject: [PATCH] Add failing (on C backend) test for deep struct equality. --- eg/equality.castile | 15 +++++++++++++++ eg/struct-equality.castile | 7 ------- tests/Castile.md | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 eg/equality.castile delete mode 100644 eg/struct-equality.castile diff --git a/eg/equality.castile b/eg/equality.castile new file mode 100644 index 0000000..40c6418 --- /dev/null +++ b/eg/equality.castile @@ -0,0 +1,15 @@ +struct name { first: string; last: string } +struct person { age: integer; name: name } + +fun main() { + a = 40 as string|integer + b = 40 as string|integer + if a == b { + print("these union-type values are equal") + } + j = make person(age: 23, name:make name(first:"Bamber", last:"Smith")); + k = make person(age: 23, name:make name(first:"Bamber", last:"Smith")); + if j == k { + print("these deep struct-type values are equal") + } +} diff --git a/eg/struct-equality.castile b/eg/struct-equality.castile deleted file mode 100644 index c327c0a..0000000 --- a/eg/struct-equality.castile +++ /dev/null @@ -1,7 +0,0 @@ -fun main() { - a = 40 as string|integer - b = 40 as string|integer - if a == b { - print("it is") - } -} diff --git a/tests/Castile.md b/tests/Castile.md index 373a1b0..a15fb17 100644 --- a/tests/Castile.md +++ b/tests/Castile.md @@ -807,6 +807,26 @@ Structs of two different types cannot be tested for equality. | } ? mismatch +Deeply nested structs can be tested for equality. + + | struct name { first: string; last: string } + | struct person { age: integer; name: name } + | main = fun() { + | j = make person(age: 23, name:make name(first:"Bamber", last:"Smith")); + | k = make person(age: 23, name:make name(first:"Bamber", last:"Smith")); + | j == k + | } + = True + + | struct name { first: string; last: string } + | struct person { age: integer; name: name } + | main = fun() { + | j = make person(age: 23, name:make name(first:"Bamber", last:"Smith")); + | k = make person(age: 23, name:make name(first:"Amber", last:"Smith")); + | j != k + | } + = True + Structs cannot be compared for ordering. | struct person { age: integer; name: string }