Skip to content

Commit d533deb

Browse files
committed
add ImmutableVec::to_array method moonbitlang#50
1 parent f1bb1c7 commit d533deb

File tree

2 files changed

+23
-26
lines changed

2 files changed

+23
-26
lines changed

immut/array/array.mbti

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package moonbitlang/core/immut/array
22

3+
alias @moonbitlang/core/iter as @iter
4+
35
// Values
46
fn immutable_push[T](Array[T], T) -> Array[T]
57

@@ -12,6 +14,7 @@ fn length[T](ImmutableVec[T]) -> Int
1214
// Types and methods
1315
type ImmutableVec
1416
impl ImmutableVec {
17+
as_iter[T](Self[T]) -> @iter.Iter[T]
1518
copy[T](Self[T]) -> Self[T]
1619
debug_write[T : Debug](Self[T], Buffer) -> Unit
1720
empty[T]() -> Self[T]
@@ -27,6 +30,7 @@ impl ImmutableVec {
2730
op_get[T](Self[T], Int) -> T
2831
push[T](Self[T], T) -> Self[T]
2932
set[T](Self[T], Int, T) -> Self[T]
33+
to_array[T](Self[T]) -> Array[T]
3034
to_string[T : Show](Self[T]) -> String
3135
}
3236

immut/array/immutable_vec.mbt

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ pub fn ImmutableVec::empty[T]() -> ImmutableVec[T] {
1616
{ tree: Tree::empty(), size: 0, shift: 0 }
1717
}
1818

19+
test "is_empty" {
20+
let v = ImmutableVec::[1, 2, 3, 4, 5]
21+
let ve : ImmutableVec[Int] = ImmutableVec::empty()
22+
inspect(is_empty(v), content="false")?
23+
inspect(is_empty(ve), content="true")?
24+
}
25+
1926
pub fn to_string[T : Show](self : ImmutableVec[T]) -> String {
2027
let mut s = "ImmutableVec::[".to_string()
2128
for i = 0; i < self.size; i = i + 1 {
@@ -39,16 +46,18 @@ pub fn is_empty[T](v : ImmutableVec[T]) -> Bool {
3946
v.size == 0
4047
}
4148

42-
pub fn to_array[T : Show](self : ImmutableVec[T]) -> String {
43-
let mut s = "ImmutableVec::[".to_string()
49+
pub fn to_array[T](self : ImmutableVec[T]) -> Array[T] {
50+
let arr = Array::new()
4451
for i = 0; i < self.size; i = i + 1 {
45-
s = s + self[i].to_string()
46-
if i < self.size - 1 {
47-
s = s + ", "
48-
}
52+
arr.push(self[i])
4953
}
50-
s = s + "]"
51-
s
54+
arr
55+
}
56+
57+
test "to_array" {
58+
let v = ImmutableVec::[1, 2, 3, 4]
59+
inspect(v.to_array().to_string(), content="[1, 2, 3, 4]")?
60+
inspect(v.push(5).to_array().to_string(), content="[1, 2, 3, 4, 5]")?
5261
}
5362

5463
pub fn as_iter[T](self : ImmutableVec[T]) -> @iter.Iter[T] {
@@ -68,29 +77,13 @@ pub fn as_iter[T](self : ImmutableVec[T]) -> @iter.Iter[T] {
6877
test "as_iter" {
6978
let buf = Buffer::make(20)
7079
let v = ImmutableVec::[1, 2, 3]
71-
v.as_iter().iter(
72-
fn(e) {
73-
buf.write_string("[\(e)]")
74-
},
75-
)
80+
v.as_iter().iter(fn(e) { buf.write_string("[\(e)]") })
7681
inspect(buf, content="[1][2][3]")?
7782
buf.reset()
78-
v.as_iter().take(2).iter(
79-
fn(e) {
80-
buf.write_string("[\(e)]")
81-
},
82-
)
83+
v.as_iter().take(2).iter(fn(e) { buf.write_string("[\(e)]") })
8384
inspect(buf, content="[1][2]")?
8485
}
8586

86-
87-
test "is_empty" {
88-
let v = ImmutableVec::[1, 2, 3, 4, 5]
89-
let ve : ImmutableVec[Int] = ImmutableVec::empty()
90-
inspect(is_empty(v), content="false")?
91-
inspect(is_empty(ve), content="true")?
92-
}
93-
9487
pub fn length[T](v : ImmutableVec[T]) -> Int {
9588
v.size
9689
}

0 commit comments

Comments
 (0)