Skip to content
This repository was archived by the owner on Feb 18, 2025. It is now read-only.

Commit 16c6f0a

Browse files
committed
stdlib: rename has to includes, add missing Identity bounds
works on #88
1 parent 7dc6416 commit 16c6f0a

File tree

6 files changed

+33
-29
lines changed

6 files changed

+33
-29
lines changed

dora/stdlib/collections.dora

+4-4
Original file line numberDiff line numberDiff line change
@@ -278,11 +278,11 @@ impl[T: Equals] Array[T] {
278278
}
279279

280280
impl[T: Identity] Array[T] {
281-
@pub fun has(value: T): Bool {
281+
@pub fun includes(val: T): Bool {
282282
var i = 0i64;
283283

284284
while i < self.size() {
285-
if self.get(i).identicalTo(value) {
285+
if self.get(i).identicalTo(val) {
286286
return true;
287287
}
288288
i = i + 1i64;
@@ -1347,11 +1347,11 @@ impl[T: Equals] List[T] {
13471347
}
13481348

13491349
impl[T: Identity] List[T] {
1350-
@pub fun has(value: T): Bool {
1350+
@pub fun includes(val: T): Bool {
13511351
var i = 0i64;
13521352

13531353
while i < self.size() {
1354-
if self.get(i).identicalTo(value) {
1354+
if self.get(i).identicalTo(val) {
13551355
return true;
13561356
}
13571357
i = i + 1i64;

dora/stdlib/primitives.dora

+12-8
Original file line numberDiff line numberDiff line change
@@ -467,10 +467,6 @@ impl[T] Option[T] {
467467
... is Some(value) { value }
468468
... is None { alt };
469469

470-
@pub fun has(val: T): Bool = if self
471-
... is Some(actual) { actual === val }
472-
... is None { false };
473-
474470
@pub fun all(fct: (T): Bool): Bool = if self
475471
... is Some(val) { fct(val) }
476472
... is None { true };
@@ -514,6 +510,12 @@ impl[T: Identity] Identity for Option[T] {
514510
@pub fun identicalTo(rhs: Option[T]): Bool = self === rhs;
515511
}
516512

513+
impl[T: Identity] Option[T] {
514+
@pub fun includes(val: T): Bool = if self
515+
... is Some(actual) { actual.identicalTo(val) }
516+
... is None { false };
517+
}
518+
517519
impl[T: Equals] Equals for Option[T] {
518520
@pub fun equals(rhs: Option[T]): Bool {
519521
if self.isSome() {
@@ -585,10 +587,6 @@ impl[T, E] Result[T, E] {
585587
... is Ok(_) { fatalError("cannot unwrap Ok."); unreachable[E]() }
586588
... is Err(value) { value };
587589

588-
@pub fun has(val: T): Bool = if self
589-
... is Ok(actual) { actual === val }
590-
... is Err(_) { false };
591-
592590
@pub fun all(fct: (T): Bool): Bool = if self
593591
... is Ok(val) { fct(val) }
594592
... is Err(_) { true };
@@ -634,6 +632,12 @@ impl[T: Identity, E] Identity for Result[T, E] {
634632
@pub fun identicalTo(rhs: Result[T, E]): Bool = self === rhs;
635633
}
636634

635+
impl[T: Identity, E] Result[T, E] {
636+
@pub fun includes(val: T): Bool = if self
637+
... is Ok(actual) { actual.identicalTo(val) }
638+
... is Err(_) { false };
639+
}
640+
637641
impl[T: Equals, E] Result[T, E] {
638642
@pub fun contains(rhs: T): Bool = if self
639643
... is Ok(val) { val.equals(rhs) }
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
fun main(): Unit {
22
let x = Array[Bool]::fill(3i64, true);
3-
assert(x.has(true));
3+
assert(x.includes(true));
44

55
let x = Array[Int32]::fill(3i64, 3i32);
6-
assert(x.has(3i32));
6+
assert(x.includes(3i32));
77

88
let x = Array[Int64]::fill(3i64, 3i64);
9-
assert(x.has(3i64));
9+
assert(x.includes(3i64));
1010

1111
let x = Array[Float64]::fill(3i64, 0.0/0.0);
12-
assert(x.has(0.0/0.0));
12+
assert(x.includes(0.0/0.0));
1313
}

tests/stdlib/option2.dora

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ fun main(): Unit {
22
let x = None[Int32];
33
assert(x.isNone());
44
assert(x.isSome().not());
5-
assert(x.has(0i32).not());
5+
assert(x.includes(0i32).not());
66
assert(x.contains(0i32).not());
77
assert(x.equals(None[Int32]));
88
assert(x.equals(Some[Int32](0i32)).not());
@@ -12,7 +12,7 @@ fun main(): Unit {
1212
assert(x.isSome());
1313
assert(x.isNone().not());
1414
assert(x.getOrPanic() == 42i32);
15-
assert(x.has(42i32));
15+
assert(x.includes(42i32));
1616
assert(x.contains(42i32));
1717
assert(x.equals(Some[Int32](42i32)));
1818
assert(x.equals(Some[Int32](2i32)).not());

tests/stdlib/result-has.dora renamed to tests/stdlib/result-includes.dora

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ fun main(): Unit {
44
let er1 = Result[Int32, String]::Err("err1");
55
let nan = Result[Float64, String]::Ok(0.0/0.0);
66

7-
assert(ok1.has(ok));
8-
assert(ok1.has("ok").not());
9-
assert(er1.has(23i32).not());
10-
assert(nan.has(0.0/0.0));
7+
assert(ok1.includes(ok));
8+
assert(ok1.includes("ok").not());
9+
assert(er1.includes(23i32).not());
10+
assert(nan.includes(0.0/0.0));
1111
}

tests/string/string-indexOfFirst.dora

+7-7
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ fun main(): Unit {
99
}
1010

1111
fun testBothEmpty(): Unit {
12-
assert("".indexOfFirst("").has(0i64));
12+
assert("".indexOfFirst("").includes(0i64));
1313
}
1414

1515
fun testNeedleEmpty(): Unit {
16-
assert("abc".indexOfFirst("").has(0i64));
16+
assert("abc".indexOfFirst("").includes(0i64));
1717
}
1818

1919
fun testHaystackEmpty(): Unit {
@@ -25,14 +25,14 @@ fun testNeedleLarger(): Unit {
2525
}
2626

2727
fun testSuccess(): Unit {
28-
assert("abcdef".indexOfFirst("abc").has(0i64));
29-
assert("defabc".indexOfFirst("abc").has(3i64));
30-
assert("ababbaadef".indexOfFirst("aa").has(5i64));
31-
assert("apapplapple".indexOfFirst("apple").has(6i64));
28+
assert("abcdef".indexOfFirst("abc").includes(0i64));
29+
assert("defabc".indexOfFirst("abc").includes(3i64));
30+
assert("ababbaadef".indexOfFirst("aa").includes(5i64));
31+
assert("apapplapple".indexOfFirst("apple").includes(6i64));
3232
}
3333

3434
fun testMultipleMatch(): Unit {
35-
assert("abcdefabc".indexOfFirst("abc").has(0i64));
35+
assert("abcdefabc".indexOfFirst("abc").includes(0i64));
3636
}
3737

3838
fun testFailure(): Unit {

0 commit comments

Comments
 (0)