aboutsummaryrefslogtreecommitdiff
path: root/src/field.nim
diff options
context:
space:
mode:
Diffstat (limited to 'src/field.nim')
-rw-r--r--src/field.nim37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/field.nim b/src/field.nim
new file mode 100644
index 0000000..a9d26fc
--- /dev/null
+++ b/src/field.nim
@@ -0,0 +1,37 @@
+type
+ Line = ref object
+ x, l: int
+ columns: seq[int]
+
+ Field* = ref object
+ x, y: int
+ lx, ly: int
+ lines: seq[Line]
+
+proc get*(f: Field, x, y: int): int =
+ if y >= f.y and y < f.y + f.ly:
+ let l = f.lines[y-f.y]
+ if x >= l.x and x < l.x + l.l:
+ return l.columns[x-l.x]
+ return int(' ')
+
+proc isIn*(f: Field, x, y: int): bool =
+ return x >= f.x and y >= f.y and x < f.x+f.lx and y < f.y+f.ly
+
+when defined(unitTesting):
+ let minimal = Field(
+ x: 0,
+ y: 0,
+ lx: 1,
+ ly: 1,
+ lines: @[
+ Line(x: 0, l: 1, columns: @[int('@')])
+ ]
+ )
+ suite "Field":
+ test "Field.get":
+ check minimal.get(0,0) == int('@')
+ check minimal.get(1,0) == int(' ')
+ test "Field.isIn":
+ check minimal.isIn(0, 0) == true
+ check minimal.isIn(1, 0) == false