From 27ef72014e8b7a43c6a8e0af0b53e30f76a360fa Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Wed, 29 Aug 2018 22:12:19 +0200 Subject: [PATCH] Add simple Grid - List Wrapper Data Structure --- lib/src/Grid.dart | 22 ++++++++++ test/src/grid_test.dart | 91 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 lib/src/Grid.dart create mode 100644 test/src/grid_test.dart diff --git a/lib/src/Grid.dart b/lib/src/Grid.dart new file mode 100644 index 0000000..540e9e7 --- /dev/null +++ b/lib/src/Grid.dart @@ -0,0 +1,22 @@ +import 'dart:core'; + +import 'package:collection/collection.dart'; + +class Grid extends DelegatingList { + final List _internal; + final width; + final height; + + Grid(int width, int height) : this._(List(width * height), width, height); + + Grid.from(Grid l) + : this._(List.from(l.getRange(0, l.length)), l.width, l.height); + + Grid.fromList(List l, int width) : this._(l, width, l.length ~/ width); + + Grid._(l, int w, int h) + : _internal = l, + width = w, + height = h, + super(l); +} diff --git a/test/src/grid_test.dart b/test/src/grid_test.dart new file mode 100644 index 0000000..2435ae1 --- /dev/null +++ b/test/src/grid_test.dart @@ -0,0 +1,91 @@ +import 'package:rules_of_living/src/Grid.dart'; +import 'package:test/test.dart'; + +@Tags(const ["nobrowser"]) +void main() { + Grid sut; + group("Instantiation", () { + List l; + setUp(() { + l = [ + "Hey", + "you", + "me", + "together", + "Hello", + "World", + "I", + "am", + "ready." + ]; + }); + test("gets created with the correct length for given quadratic gridsize", + () { + Grid sut = Grid(3, 3); + expect(sut.length, 9); + }); + test("gets created with the correct length for given rectangular gridsize", + () { + Grid sut = Grid(87, 85); + expect(sut.length, 7395); + }); + test("copies the content of another grid on .from Constructor call", () { + Grid original = Grid(2, 2); + original[0] = "Hey"; + original[1] = "you"; + original[2] = "me"; + original[3] = "together"; + + Grid sut = Grid.from(original); + expect(sut, containsAllInOrder(["Hey", "you", "me", "together"])); + }); + test("copies the length of another grid on .from Constructor call", () { + Grid original = Grid(2, 2); + original[0] = "Hey"; + original[1] = "you"; + original[2] = "me"; + original[3] = "together"; + + Grid sut = Grid.from(original); + expect(sut.length, 4); + }); + test("sets the length for list passed in on .fromList Constructor call", + () { + Grid sut = Grid.fromList(l, 3); + + expect(sut.length, 9); + }); + test("sets the contents of list passed in on .fromList Constructor call", + () { + Grid sut = Grid.fromList(l, 3); + + expect(sut[3], "together"); + }); + test( + "sets the correct height for list passed in on .fromList Constructor call", + () { + Grid sut = Grid.fromList(l, 3); + + expect(sut.width, 3); + }); + }); + group("getter", () { + setUp(() { + sut = Grid(3, 3); + sut.setAll(0, [ + "Hey", + "you", + "me", + "together", + "Hello", + "World", + "I", + "am", + "ready." + ]); + }); + test("Engine can be instantiated without canvas", () { + expect(sut, isNot(throwsNoSuchMethodError)); + }); + }); +}