Skip to content

Commit d0a221f

Browse files
committed
added some methods
1 parent 5d8bbb4 commit d0a221f

File tree

5 files changed

+103
-65
lines changed

5 files changed

+103
-65
lines changed

pixi.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ version = "1.2.1"
88

99
[tasks]
1010
test = "mojo test tests/mojo_csv"
11-
test-dev = "mojo test tests/dev"
11+
test-dev = "mojo test_parse.mojo"
1212
format = { cmd = "mojo format -l 88 ." }
13-
prep = { depends-on = ["format", "test"] }
13+
prep = { depends-on = ["format", "test-dev"] }
1414
pack = "mojo package src -o .pixi/envs/default/lib/mojo/mojo_csv.mojopkg;cp .pixi/envs/default/lib/mojo/mojo_csv.mojopkg dist; sha256sum dist/mojo_csv.mojopkg > dist/sha256sum.mojo_csv.mojopkg.txt;"
1515
test-build = { cmd = "rattler-build build --channel https://prefix.dev/modular-community --channel https://conda.modular.com/max --channel conda-forge --variant-config tests/variants.yaml --skip-existing=all --recipe tests/recipe.yaml", env = {MODULAR_MOJO_IMPORT_PATH = "$CONDA_PREFIX/lib/mojo"} }
1616

src/csv_reader.mojo

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ from testing import assert_true
66

77
# https://www.rfc-editor.org/rfc/rfc4180
88
#
9-
@value
10-
struct CsvReader:
9+
@fieldwise_init
10+
struct CsvReader(Copyable, Representable, Sized, Stringable, Writable):
1111
# var data: Dict[String,String]
1212
var headers: List[String]
1313
var elements: List[String]
@@ -20,13 +20,15 @@ struct CsvReader:
2020
var row_count: Int
2121
var col_count: Int
2222
var length: Int
23+
var index: Int
2324

2425
fn __init__(
2526
out self,
2627
owned in_csv: Path,
2728
owned delimiter: String = ",",
2829
owned quotation_mark: String = '"',
2930
) raises:
31+
self.index = 0
3032
self.raw = ""
3133
self.raw_length = 0
3234
self.length = 0
@@ -120,22 +122,35 @@ struct CsvReader:
120122
fn __len__(self) -> Int:
121123
return self.length
122124

123-
# fn __iter__(self) -> collection:
124-
# return self.elements.__iter__()
125-
126-
# fn __repr__(self) -> String:
127-
# var out: String = "["
128-
# for el in self.elements:
129-
# out.append(el)
130-
# out.append("]")
131-
# return out
132-
133-
# fn __copyinit__(out self) -> CsvReader:
134-
# self.raw = existing.raw
135-
# self.delimiter = existing.delimiter
136-
# self.QM = existing.QM
137-
# self.elements = existing.elements
138-
# self.col_count = existing.col_count
139-
# self.row_count = existing.row_count
140-
# return self
141-
# ---------------------
125+
fn __repr__(self) -> String:
126+
var out: String = "["
127+
128+
for el in self.elements:
129+
out += "'"
130+
out += String(el)
131+
out += "', "
132+
out += "]"
133+
return out
134+
135+
fn __str__(self) -> String:
136+
return String.write(self)
137+
138+
fn write_to[W: Writer](self, mut writer: W) -> None:
139+
writer.write(String("CsvReader" + repr(self)))
140+
141+
@parameter
142+
fn __next_ref__(mut self) -> String:
143+
self.index += 1
144+
return self.elements[self.index - 1]
145+
146+
@always_inline
147+
fn __next__(mut self) -> String:
148+
return self.__next_ref__()
149+
150+
@always_inline
151+
fn __has_next__(self) -> Bool:
152+
return self.length > self.index
153+
154+
@always_inline
155+
fn __iter__(self) -> Self:
156+
return self
Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,19 @@ from testing import assert_true
44

55
from src.csv_reader import CsvReader
66

7-
var VALID = List[String](
8-
"item1",
9-
"item2",
10-
'"ite,em3"',
11-
'"p""ic"',
12-
" pi c",
13-
"pic",
14-
"r_i_1",
15-
'"r_i_2"""',
16-
"r_i_3",
17-
)
187

19-
20-
fn test_parse() raises:
8+
fn main() raises:
9+
var VALID = List[String](
10+
"item1",
11+
"item2",
12+
'"ite,em3"',
13+
'"p""ic"',
14+
" pi c",
15+
"pic",
16+
"r_i_1",
17+
'"r_i_2"""',
18+
"r_i_3",
19+
)
2120
var in_csv: Path = cwd().joinpath("tests/test.csv")
2221
var rd = CsvReader(in_csv)
2322
# print(rd)
@@ -39,11 +38,27 @@ fn test_parse() raises:
3938
assert_true(rd.row_count == 3)
4039
print("elements:", rd.__len__(), "of 9")
4140
assert_true(len(rd.elements) == 9)
41+
t_methods(rd)
4242

43-
# for x in rd:
44-
# print(x)
4543
except AssertionError:
46-
print(AssertionError)
44+
# print(AssertionError)
4745
raise AssertionError
4846
print("----------")
4947
print("parse successful")
48+
49+
50+
fn t_methods(rd: CsvReader) raises:
51+
try:
52+
print(String("repr: {}").format(repr(rd)))
53+
print(String("len: {}").format(len(rd)))
54+
print(String("print: {}").format(rd))
55+
print(String("slice: {}").format(rd[0]))
56+
print(String("slice repr: {}").format(repr(rd[0])))
57+
print("iter: ...")
58+
print("----")
59+
for x in rd:
60+
print(x)
61+
print("----")
62+
except:
63+
print("error")
64+
raise

tests/mojo_csv/test_methods.mojo

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from pathlib import Path, cwd
2+
from sys import argv, exit
3+
from testing import assert_true
4+
5+
from mojo_csv import CsvReader
6+
7+
8+
fn test_methods() raises:
9+
try:
10+
var in_csv: Path = cwd().joinpath("tests/test.csv")
11+
var rd = CsvReader(in_csv)
12+
assert_true(String("repr: {}").format(repr(rd)))
13+
assert_true(String("len: {}").format(len(rd)))
14+
assert_true(String("print: {}").format(rd))
15+
assert_true(String("slice: {}").format(rd[0]))
16+
assert_true(String("slice repr: {}").format(repr(rd[0])))
17+
assert_true("iter:...")
18+
for x in rd:
19+
assert_true(x)
20+
except AssertionError:
21+
raise

tests/mojo_csv/test_pack.mojo

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,33 @@ from testing import assert_true
44

55
from mojo_csv import CsvReader
66

7-
var VALID = List[String](
8-
"item1",
9-
"item2",
10-
'"ite,em3"',
11-
'"p""ic"',
12-
" pi c",
13-
"pic",
14-
"r_i_1",
15-
'"r_i_2"""',
16-
"r_i_3",
17-
)
18-
197

208
fn test_pack() raises:
21-
var in_csv: Path = cwd().joinpath("tests/test.csv")
22-
var rd = CsvReader(in_csv)
23-
# print(rd)
24-
print("parsing:", in_csv)
25-
print("----------")
9+
var VALID = List[String](
10+
"item1",
11+
"item2",
12+
'"ite,em3"',
13+
'"p""ic"',
14+
" pi c",
15+
"pic",
16+
"r_i_1",
17+
'"r_i_2"""',
18+
"r_i_3",
19+
)
2620
try:
21+
var in_csv: Path = cwd().joinpath("tests/test.csv")
22+
var rd = CsvReader(in_csv)
2723
assert_true(rd.col_count == 3)
2824
for x in range(len(rd)):
29-
print(rd.elements[x])
3025
assert_true(
3126
rd.elements[x] == VALID[x],
3227
String("[{0}] != expected [{1}] at index {2}").format(
3328
rd.elements[x], VALID[x], x
3429
),
3530
)
36-
print("----------")
37-
print("columns:", rd.col_count, "of 3")
38-
print("rows:", rd.row_count, "of 3")
3931
assert_true(rd.row_count == 3)
40-
print("elements:", rd.__len__(), "of 9")
4132
assert_true(len(rd.elements) == 9)
4233

43-
# for x in rd:
44-
# print(x)
4534
except AssertionError:
46-
print(AssertionError)
4735
raise AssertionError
48-
print("----------")
4936
print("parse successful")

0 commit comments

Comments
 (0)