Skip to content

Commit 84c7c71

Browse files
committed
Compare arrays/maps by structure
Closes #71
1 parent 9645a58 commit 84c7c71

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
## Unreleased - [Full diff](https://github.com/lit-lang/lit/compare/v0.2.0...main)
22

3+
- Compare arrays/maps by structure
4+
5+
```lit
6+
let a = [1, 2, 3]
7+
let b = [1, 2, 3]
8+
println a == b # true
9+
10+
let m = {a: 1, b: 2}
11+
let n = {b: 2, a: 1}
12+
println m == n # true
13+
```
14+
315
- Add symbol-string shorthand syntax for maps
416

517
```lit

spec/e2e/operator/equals.lit

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,21 @@ println("str" == "ing") # expect: false
1212
println(nil == false) # expect: false
1313
println(false == 0) # expect: false
1414
println(0 == "0") # expect: false
15+
16+
# compound types
17+
println([] == []) # expect: true
18+
println([1, "foo"] == [1, "foo"]) # expect: true
19+
println([1, "foo"] == ["foo", 1]) # expect: false
20+
21+
println({:} == {:}) # expect: true
22+
println({1 : "a"} == {1 : "a"}) # expect: true
23+
println({1 : "a", 2 : "b"} == {2 : "b", 1 : "a"}) # expect: true
24+
println({1 : "a"} == {2 : "b"}) # expect: false
25+
26+
# custom types
27+
type Foo {}
28+
println(Foo() == Foo()) # expect: false
29+
type Bar {
30+
init do |x| self.x = x
31+
}
32+
println(Bar(1) == Bar(1)) # expect: false

src/lit/stdlib/lit_array.cr

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,5 +112,9 @@ module Lit
112112
def set(name : Token, value : Value)
113113
raise RuntimeError.new(name, "Cannot set properties on array.")
114114
end
115+
116+
def ==(other : LitArray) : Bool
117+
return @elements == other.elements
118+
end
115119
end
116120
end

src/lit/stdlib/lit_map.cr

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,9 @@ module Lit
5757
def set(name : Token, value : Value)
5858
raise RuntimeError.new(name, "Cannot set properties on array.")
5959
end
60+
61+
def ==(other : LitMap) : Bool
62+
return @elements == other.elements
63+
end
6064
end
6165
end

0 commit comments

Comments
 (0)