diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..3e0fb27
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/debug/ContainerArray.java b/src/debug/ContainerArray.java
index 124ece6..9f90873 100755
--- a/src/debug/ContainerArray.java
+++ b/src/debug/ContainerArray.java
@@ -2,7 +2,7 @@
public class ContainerArray {
- private int initialCapacity = 10;
+ private int limit = 10;
private int currentSize = 0;
private Object[] internalArray;
@@ -11,11 +11,12 @@ public ContainerArray () {
}
public ContainerArray (int initialCapacity) {
- internalArray = new Object[initialCapacity];
+ internalArray = new Object[limit];
}
public void add (E element) {
- internalArray[currentSize++] = element;
+ if (currentSize == limit) return;
+ internalArray[currentSize++] = element;
}
public int size () {
@@ -23,11 +24,22 @@ public int size () {
}
public void remove (E objectToRemove) {
- currentSize--;
+ currentSize--;
+
+ int i = 0;
+ while (!internalArray[i].equals(objectToRemove)) {
+ i++;
+ }
+ if (i < currentSize) {
+ for (int k = i; k < currentSize; k++) {
+ internalArray[k] = internalArray[k+1];
+ }
+ }
+ internalArray[currentSize] = null;
}
@SuppressWarnings("unchecked")
public E get (int index) {
return (E)internalArray[index];
}
-}
+}
\ No newline at end of file
diff --git a/src/debug/ContainerArrayTest.java b/src/debug/ContainerArrayTest.java
index c566d50..5524644 100755
--- a/src/debug/ContainerArrayTest.java
+++ b/src/debug/ContainerArrayTest.java
@@ -43,5 +43,18 @@ public void testObjectIsRemoved () {
myContainer.add("Bear");
myContainer.remove("Bear");
assertEquals("Remove should be same reference", alligator, myContainer.get(0));
+ myContainer.remove("Alligator");
+ assertEquals(null, myContainer.get(0));
+ }
+
+ @Test
+ public void testSizeLimit() {
+ for (int i = 0; i < 11; i++) {
+ myContainer.add("Yo");
+ }
+ assertEquals(10, myContainer.size());
}
+
}
+
+
diff --git a/src/tdd/Sheet.java b/src/tdd/Sheet.java
new file mode 100644
index 0000000..a73b537
--- /dev/null
+++ b/src/tdd/Sheet.java
@@ -0,0 +1,50 @@
+package tdd;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Sheet {
+
+ private Map mySheet;
+
+ public Sheet(){
+ mySheet = new HashMap();
+ }
+
+ public String get(String string) {
+ // TODO Auto-generated method stub
+ String val = mySheet.get(string);
+ if(val == null){
+ return "";
+ }
+ return strip(val);
+ }
+
+ public void put(String theCell, String string) {
+ // TODO Auto-generated method stub
+ mySheet.put(theCell, string);
+ }
+
+ private String strip(String string){
+ if(isNumeric(string)){
+ return string.trim();
+ }
+ return string;
+ }
+
+ private boolean isNumeric(String s) {
+ return s.matches("\\s+[-+]?\\d+\\.?\\d+\\s+");
+ }
+
+ public Object getLiteral(String theCell) {
+ // TODO Auto-generated method stub
+ String val = mySheet.get(theCell);
+ if(val == null){
+ return "";
+ }
+ return val;
+ }
+
+
+}
+
diff --git a/src/tdd/TestSheet.java b/src/tdd/TestSheet.java
new file mode 100644
index 0000000..a0bbe84
--- /dev/null
+++ b/src/tdd/TestSheet.java
@@ -0,0 +1,85 @@
+package tdd;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class TestSheet {
+
+ @Test
+ public void testThatCellsAreEmptyByDefault() {
+ Sheet sheet = new Sheet();
+ assertEquals("", sheet.get("A1"));
+ assertEquals("", sheet.get("ZX347"));
+ }
+
+ @Test
+ public void testThatTextCellsAreStored() {
+ Sheet sheet = new Sheet();
+ String theCell = "A21";
+
+ sheet.put(theCell, "A string");
+ assertEquals("A string", sheet.get(theCell));
+
+ sheet.put(theCell, "A different string");
+ assertEquals("A different string", sheet.get(theCell));
+
+ sheet.put(theCell, "");
+ assertEquals("", sheet.get(theCell));
+ }
+
+ @Test
+ public void testThatManyCellsExist() {
+ Sheet sheet = new Sheet();
+ sheet.put("A1", "First");
+ sheet.put("X27", "Second");
+ sheet.put("ZX901", "Third");
+
+ assertEquals("A1", "First", sheet.get("A1"));
+ assertEquals("X27", "Second", sheet.get("X27"));
+ assertEquals("ZX901", "Third", sheet.get("ZX901"));
+
+ sheet.put("A1", "Fourth");
+ assertEquals("A1 after", "Fourth", sheet.get("A1"));
+ assertEquals("X27 same", "Second", sheet.get("X27"));
+ assertEquals("ZX901 same", "Third", sheet.get("ZX901"));
+ }
+
+ @Test
+ public void testThatNumericCellsAreIdentifiedAndStored() {
+ Sheet sheet = new Sheet();
+ String theCell = "A21";
+
+ sheet.put(theCell, "X99"); // "Obvious" string
+ assertEquals("X99", sheet.get(theCell));
+
+ sheet.put(theCell, "14"); // "Obvious" number
+ assertEquals("14", sheet.get(theCell));
+
+ sheet.put(theCell, " 99 X"); // Whole string must be numeric
+ assertEquals(" 99 X", sheet.get(theCell));
+
+ sheet.put(theCell, " 1234 "); // Blanks ignored
+ assertEquals("1234", sheet.get(theCell));
+
+ sheet.put(theCell, " "); // Just a blank
+ assertEquals(" ", sheet.get(theCell));
+ }
+
+ @Test
+ public void testThatWeHaveAccessToCellLiteralValuesForEditing() {
+ Sheet sheet = new Sheet();
+ String theCell = "A21";
+
+ sheet.put(theCell, "Some string");
+ assertEquals("Some string", sheet.getLiteral(theCell));
+
+ sheet.put(theCell, " 1234 ");
+ assertEquals(" 1234 ", sheet.getLiteral(theCell));
+
+ sheet.put(theCell, "=7"); // Foreshadowing formulas:)
+ assertEquals("=7", sheet.getLiteral(theCell));
+ }
+
+
+}