diff --git a/interfaces-1.iml b/interfaces-1.iml new file mode 100644 index 00000000..0ddf51c1 --- /dev/null +++ b/interfaces-1.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/io/zipcoder/interfaces/ConcretePeople.java b/src/main/java/io/zipcoder/interfaces/ConcretePeople.java new file mode 100644 index 00000000..3b0bf7cf --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/ConcretePeople.java @@ -0,0 +1,12 @@ +package io.zipcoder.interfaces; + +public class ConcretePeople extends People { + + public Person[] toArray() { + Person[] personArray = new Person[this.count()]; + for (int i = 0; i < this.count(); i++) { + personArray[i] = this.personList.get(i); + } + return personArray; + } +} diff --git a/src/main/java/io/zipcoder/interfaces/Educator.java b/src/main/java/io/zipcoder/interfaces/Educator.java new file mode 100644 index 00000000..cfe86d18 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Educator.java @@ -0,0 +1,30 @@ +package io.zipcoder.interfaces; + +public enum Educator implements Teacher { + INSTRUCTOR0(Long.valueOf(1), "instructor0"), INSTRUCTOR1(Long.valueOf(2), "instructor1"), INSTRUCTOR2(Long.valueOf(3), "instructor2"), INSTRUCTOR3(Long.valueOf(4), "instructor3"), INSTRUCTOR4(Long.valueOf(5), "instructor4"); + + private Instructor instructor; + private Double timeWorked = 0.0; + + Educator (Long id, String name) { + this.instructor = new Instructor(id, name); + } + + public void teach(Learner learner, Double numberOfHours) { + timeWorked += numberOfHours; + learner.learn(numberOfHours); + } + + public void lecture(Learner[] learners, Double numberOfHours) { + Double numberOfHoursPerLearner = numberOfHours / learners.length; + for (Learner learner : learners) { + teach(learner, numberOfHoursPerLearner); + } + } + + public Double getTimeWorked() { + return timeWorked; + } + + +} \ No newline at end of file diff --git a/src/main/java/io/zipcoder/interfaces/Instructor.java b/src/main/java/io/zipcoder/interfaces/Instructor.java new file mode 100644 index 00000000..6a2f3ab2 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Instructor.java @@ -0,0 +1,19 @@ +package io.zipcoder.interfaces; + +public class Instructor extends Person implements Teacher { + + public Instructor(Long id, String name) { + super(id, name); + + } + public void teach(Learner learner, Double numberOfHours) { + learner.learn(numberOfHours); + } + + public void lecture(Learner[] learners, Double numberOfHours) { + Double numberOfHoursPerLearner = numberOfHours / learners.length; + for (Learner learner: learners) { + learner.learn(numberOfHoursPerLearner); + } + } +} diff --git a/src/main/java/io/zipcoder/interfaces/Instructors.java b/src/main/java/io/zipcoder/interfaces/Instructors.java new file mode 100644 index 00000000..eb6a4db4 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Instructors.java @@ -0,0 +1,26 @@ +package io.zipcoder.interfaces; + +public class Instructors extends People { + private static final Instructors INSTANCE; + + private Instructors() {} + + public static Instructors getInstance() { + if (INSTANCE == null) { + INSTANCE.add(new Instructor(Long.valueOf(3), "Wes")); + } + return INSTANCE; + } + + static { + INSTANCE = new Instructors(); + for (int i = 0; i < 5; i++) { + INSTANCE.add(new Instructor(Long.valueOf(i+1), "instructor"+i)); + } + + } + + public Instructor[] toArray() { + return personList.toArray(new Instructor[0]); + } +} diff --git a/src/main/java/io/zipcoder/interfaces/Learner.java b/src/main/java/io/zipcoder/interfaces/Learner.java new file mode 100644 index 00000000..b58b3882 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Learner.java @@ -0,0 +1,8 @@ +package io.zipcoder.interfaces; + +public interface Learner { + void learn(Double numberOfHours); + + Double getTotalStudyTime(); + +} diff --git a/src/main/java/io/zipcoder/interfaces/People.java b/src/main/java/io/zipcoder/interfaces/People.java new file mode 100644 index 00000000..7fd63d7c --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/People.java @@ -0,0 +1,67 @@ +package io.zipcoder.interfaces; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public abstract class People implements Iterable { + List personList = new ArrayList(); + + public void add(E person) { + this.personList.add(person); + } + + public E findById(Long id) { + E target = null; + for (E person: this.personList) { + if (person.getId().equals(id)) { + target = person; + break; + } + } + return target; + } + + public Boolean contains(E person) { + Boolean exists = false; + for (E eachPerson: this.personList) { + if (eachPerson.getName().equals(person.getName()) + && eachPerson.getId().equals(person.getId())) { + exists = true; + break; + } + } + return exists; + } + + public void remove(E person) { + if (this.contains(person)) { + this.personList.remove(person); + } + } + + public void remove(Long id) { + E personToRemove = this.findById(id); + this.remove(personToRemove); + } + + public void removeAll() { + this.personList = new ArrayList(); + } + + public Integer count() { + return this.personList.size(); + } + + public abstract E[] toArray(); +// Person[] personArray = new Person[this.count()]; +// for (int i = 0; i < this.count(); i++) { +// personArray[i] = this.personList.get(i); +// } +// return personArray; +// } + + public Iterator iterator() { + return personList.iterator(); + } +} diff --git a/src/main/java/io/zipcoder/interfaces/Person.java b/src/main/java/io/zipcoder/interfaces/Person.java index fc6a3ffe..f8bee5a0 100644 --- a/src/main/java/io/zipcoder/interfaces/Person.java +++ b/src/main/java/io/zipcoder/interfaces/Person.java @@ -1,5 +1,24 @@ package io.zipcoder.interfaces; public class Person { + private final long id; + private String name; + + public Person(long id, String name) { + this.id = id; + this.name = name; + } + + public Long getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } } diff --git a/src/main/java/io/zipcoder/interfaces/Student.java b/src/main/java/io/zipcoder/interfaces/Student.java new file mode 100644 index 00000000..1ad373d9 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Student.java @@ -0,0 +1,18 @@ +package io.zipcoder.interfaces; + +public class Student extends Person implements Learner { + private Double totalStudyTime; + + public Student(Long id, String name) { + super(id, name); + this.totalStudyTime = 0.0; + } + + public void learn(Double numberOfHours) { + this.totalStudyTime += numberOfHours; + } + + public Double getTotalStudyTime() { + return this.totalStudyTime; + } +} diff --git a/src/main/java/io/zipcoder/interfaces/Students.java b/src/main/java/io/zipcoder/interfaces/Students.java new file mode 100644 index 00000000..035e3b72 --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Students.java @@ -0,0 +1,25 @@ +package io.zipcoder.interfaces; + +public class Students extends People { + private static final Students INSTANCE; + + private Students() {} + + static Students getInstance() { + if (INSTANCE == null) { + INSTANCE.add(new Student(3L, "Wes")); + } + return INSTANCE; + } + + static { + INSTANCE = new Students(); + for (long i = 0; i < 35; i++) { + INSTANCE.add(new Student(i+1L, "student"+i)); + } + } + + public Student[] toArray() { + return personList.toArray(new Student[0]); + } +} \ No newline at end of file diff --git a/src/main/java/io/zipcoder/interfaces/Teacher.java b/src/main/java/io/zipcoder/interfaces/Teacher.java new file mode 100644 index 00000000..fe62cb8c --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/Teacher.java @@ -0,0 +1,6 @@ +package io.zipcoder.interfaces; + +public interface Teacher { + void teach(Learner learner, Double numberOfHours); + void lecture(Learner[] learners, Double numberOfHours); +} diff --git a/src/main/java/io/zipcoder/interfaces/ZipCodeWilmington.java b/src/main/java/io/zipcoder/interfaces/ZipCodeWilmington.java new file mode 100644 index 00000000..29fc84ce --- /dev/null +++ b/src/main/java/io/zipcoder/interfaces/ZipCodeWilmington.java @@ -0,0 +1,38 @@ +package io.zipcoder.interfaces; + +import java.util.LinkedHashMap; + +public class ZipCodeWilmington { + private static final ZipCodeWilmington INSTANCE = new ZipCodeWilmington(); + + private static final Students students = Students.getInstance(); + private static final Instructors instructors = Instructors.getInstance(); + + public static ZipCodeWilmington getInstance() { + return INSTANCE; + } + + public static void hostLecture (Teacher teacher, Double numberOfHours) { + teacher.lecture(students.toArray(), numberOfHours); + } + + public static void hostLecture (Long id, Double numberOfHours) { + Teacher teacher = instructors.findById(id); + + teacher.lecture(students.toArray(), numberOfHours); + } + + public static LinkedHashMap getStudyMap() { + LinkedHashMap map = new LinkedHashMap(); + for (Student student: students) { + map.put(student, student.getTotalStudyTime()); + } + return map; + } + +// static { +// INSTANCE = new ZipCodeWilmington(); +// students = Students.getInstance(); +// instructors = Instructors.getInstance(); +// } +} diff --git a/src/test/java/io/zipcoder/interfaces/TestEducator.java b/src/test/java/io/zipcoder/interfaces/TestEducator.java new file mode 100644 index 00000000..c2144041 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/TestEducator.java @@ -0,0 +1,39 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class TestEducator { + + @Test + public void testTeach() { + Student stu = new Student(Long.valueOf(56), "Stu"); + Educator.INSTRUCTOR1.teach(stu, 5000.0); + Assert.assertEquals(stu.getTotalStudyTime(), Educator.INSTRUCTOR1.getTimeWorked(), 2); + } + + @Test + public void testLecture() { + Student stu1 = new Student(Long.valueOf(344), "Stu"); + Student stu3 = new Student(Long.valueOf(5623), "Stu"); + Student stu2 = new Student(Long.valueOf(56123), "Stu"); + Student[] stus = {stu1, stu2, stu3}; + Educator.INSTRUCTOR2.lecture(stus, 6000.0); + Double expected = 2000.0; + for (Student stu : stus) { + Double actual = stu.getTotalStudyTime(); + Assert.assertEquals(expected, actual, 2); + } + } + + @Test + public void testGetTimeWorked() { + Student stu = new Student(Long.valueOf(333), "Stu"); + Educator.INSTRUCTOR0.teach(stu, 5000.0); + Double actual = Educator.INSTRUCTOR0.getTimeWorked(); + Double expected = 5000.0; + Assert.assertEquals(expected, actual, 2); + } +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/interfaces/TestInstructor.java b/src/test/java/io/zipcoder/interfaces/TestInstructor.java new file mode 100644 index 00000000..9a8c22bc --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/TestInstructor.java @@ -0,0 +1,42 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +public class TestInstructor { + @Test + public void testImplementation() { + Instructor instructor = new Instructor(Long.valueOf(3), "github"); + Assert.assertTrue(instructor instanceof Teacher); + } + + @Test + public void testInheritance() { + Instructor instructor = new Instructor(Long.valueOf(3), "github"); + Assert.assertTrue(instructor instanceof Person); + } + + @Test + public void testTeach() { + Instructor instructor = new Instructor(Long.valueOf(3), "github"); + Student student1 = new Student(Long.valueOf(5), "Wes"); + instructor.teach(student1, 45.4); + Double actual = student1.getTotalStudyTime(); + Double expected = 45.4; + Assert.assertEquals(expected, actual, 2); + } + + @Test + public void testLecture() { + Instructor instructor = new Instructor(Long.valueOf(3), "github"); + Student student1 = new Student(Long.valueOf(5), "Wes"); + Student student2 = new Student(Long.valueOf(8), "Table"); + Student student3 = new Student(Long.valueOf(33), "Book"); + Student[] students = {student1, student2, student3}; + + instructor.lecture(students, 48.0); + for (Student student: students) { + Assert.assertEquals(student.getTotalStudyTime(), 16.0, 2); + } + } +} diff --git a/src/test/java/io/zipcoder/interfaces/TestInstructors.java b/src/test/java/io/zipcoder/interfaces/TestInstructors.java new file mode 100644 index 00000000..e99b068b --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/TestInstructors.java @@ -0,0 +1,18 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +public class TestInstructors { + @Test + public void testSingleton() { +// People people = new People(); +// for (int i = 0; i < 5; i++) { +// people.add(new Student(Long.valueOf(i+1), "name"+i)); +// } + Instructors instructors = Instructors.getInstance(); + Integer expected = 5; + Integer actual = instructors.count(); + Assert.assertEquals(expected, actual); + } +} diff --git a/src/test/java/io/zipcoder/interfaces/TestPeople.java b/src/test/java/io/zipcoder/interfaces/TestPeople.java new file mode 100644 index 00000000..d5a3c156 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/TestPeople.java @@ -0,0 +1,69 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class TestPeople { + People people; + Person person1, person2, person3; + + @Before + public void setUp() { + people = new ConcretePeople(); + person1 = new Person(3L, "rake"); + person2 = new Person(2L, "ferb"); + person3 = new Person(5L, "jimothy"); + people.add(person1); + people.add(person2); + } + + @Test + public void testAdd1() { + people.add(person3); + Assert.assertTrue(people.contains(person3)); + } + + @Test + public void testAdd2() { + Person person4 = new Person(6L, "lump"); + people.add(person4); + Assert.assertTrue(people.contains(person4)); + } + + @Test + public void testRemove() { + Assert.assertTrue(people.contains(person2)); + people.remove(person2); + Assert.assertFalse(people.contains(person2)); + } + + @Test + public void testRemoveById() { + Assert.assertTrue(people.contains(person2)); + people.remove(Long.valueOf(2)); + Assert.assertFalse(people.contains(person2)); + } + + @Test + public void testRemoveAll() { + Assert.assertTrue(people.contains(person2)); + people.removeAll(); + Integer actual = people.count(); + Integer expected = 0; + Assert.assertEquals(expected, actual); + } + + @Test + public void testFindById() { + Person actual = people.findById(3L); + Person expected = person1; + Assert.assertEquals(expected, actual); + } + + @Test + public void testToArray() { + Person[] personArr = people.toArray(); + Assert.assertEquals(2, personArr.length); + } +} diff --git a/src/test/java/io/zipcoder/interfaces/TestPerson.java b/src/test/java/io/zipcoder/interfaces/TestPerson.java index d64cd2f0..4459707b 100644 --- a/src/test/java/io/zipcoder/interfaces/TestPerson.java +++ b/src/test/java/io/zipcoder/interfaces/TestPerson.java @@ -1,5 +1,26 @@ package io.zipcoder.interfaces; +import org.junit.Assert; +import org.junit.Test; + public class TestPerson { + @Test + public void testConstructor() { + Long expectedId = Long.valueOf(5); + String expectedName = "Wes"; + Person person = new Person(expectedId, expectedName); + Long actualId = person.getId(); + String actualName = person.getName(); + Assert.assertEquals(expectedId, actualId); + Assert.assertEquals(expectedName, actualName); + } + @Test + public void testSetName() { + Long expectedId = Long.valueOf(5); + String expectedName = "Wes"; + Person person = new Person(expectedId, expectedName); + person.setName("newname"); + Assert.assertEquals("newname", person.getName()); + } } diff --git a/src/test/java/io/zipcoder/interfaces/TestStudent.java b/src/test/java/io/zipcoder/interfaces/TestStudent.java new file mode 100644 index 00000000..636a8790 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/TestStudent.java @@ -0,0 +1,27 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +public class TestStudent { + @Test + public void testImplementation() { + Student student = new Student(Long.valueOf(4), "Wes"); + Assert.assertTrue(student instanceof Learner); + } + + @Test + public void testInheritance() { + Student student = new Student(Long.valueOf(4), "Wes"); + Assert.assertTrue(student instanceof Person); + } + + @Test + public void testLearn() { + Student student = new Student(Long.valueOf(4), "Wes"); + student.learn(80.5); + Double actual = student.getTotalStudyTime(); + Double expected = 80.5; + Assert.assertEquals(expected, actual); + } +} diff --git a/src/test/java/io/zipcoder/interfaces/TestStudents.java b/src/test/java/io/zipcoder/interfaces/TestStudents.java new file mode 100644 index 00000000..52415979 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/TestStudents.java @@ -0,0 +1,14 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +public class TestStudents { + @Test + public void testSingleton() { + Students students = Students.getInstance(); + Integer expected = 35; + Integer actual = students.count(); + Assert.assertEquals(expected, actual); + } +} diff --git a/src/test/java/io/zipcoder/interfaces/TestZipCodeWilmington.java b/src/test/java/io/zipcoder/interfaces/TestZipCodeWilmington.java new file mode 100644 index 00000000..86d5cc24 --- /dev/null +++ b/src/test/java/io/zipcoder/interfaces/TestZipCodeWilmington.java @@ -0,0 +1,110 @@ +package io.zipcoder.interfaces; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.Map; + +public class TestZipCodeWilmington { + @Test + public void testSingleton() { + Instructors.getInstance().findById(Long.valueOf(1)); + ZipCodeWilmington.hostLecture(Long.valueOf(1), 350.0); + Map map = ZipCodeWilmington.getStudyMap(); + StringBuilder output = new StringBuilder(); + for (Student student: map.keySet()) { + output.append(String.format("%s\t%s\n",student.getName(), map.get(student))); + } + String actual = output.toString(); + String expected = "student0\t10.0\n" + + "student1\t10.0\n" + + "student2\t10.0\n" + + "student3\t10.0\n" + + "student4\t10.0\n" + + "student5\t10.0\n" + + "student6\t10.0\n" + + "student7\t10.0\n" + + "student8\t10.0\n" + + "student9\t10.0\n" + + "student10\t10.0\n" + + "student11\t10.0\n" + + "student12\t10.0\n" + + "student13\t10.0\n" + + "student14\t10.0\n" + + "student15\t10.0\n" + + "student16\t10.0\n" + + "student17\t10.0\n" + + "student18\t10.0\n" + + "student19\t10.0\n" + + "student20\t10.0\n" + + "student21\t10.0\n" + + "student22\t10.0\n" + + "student23\t10.0\n" + + "student24\t10.0\n" + + "student25\t10.0\n" + + "student26\t10.0\n" + + "student27\t10.0\n" + + "student28\t10.0\n" + + "student29\t10.0\n" + + "student30\t10.0\n" + + "student31\t10.0\n" + + "student32\t10.0\n" + + "student33\t10.0\n" + + "student34\t10.0\n"; + Assert.assertEquals(expected, actual); + ZipCodeWilmington.hostLecture(Long.valueOf(1), -350.0); + + } + + @Test + public void testHostLecture() { + Instructor instructor = Instructors.getInstance().findById(Long.valueOf(1)); + + ZipCodeWilmington.hostLecture(instructor, 350.0); + + Map map = ZipCodeWilmington.getStudyMap(); + + StringBuilder output = new StringBuilder(); + for (Student student: map.keySet()) { + output.append(String.format("%s\t%s\n",student.getName(), map.get(student))); + } + String actual = output.toString(); + String expected = "student0\t10.0\n" + + "student1\t10.0\n" + + "student2\t10.0\n" + + "student3\t10.0\n" + + "student4\t10.0\n" + + "student5\t10.0\n" + + "student6\t10.0\n" + + "student7\t10.0\n" + + "student8\t10.0\n" + + "student9\t10.0\n" + + "student10\t10.0\n" + + "student11\t10.0\n" + + "student12\t10.0\n" + + "student13\t10.0\n" + + "student14\t10.0\n" + + "student15\t10.0\n" + + "student16\t10.0\n" + + "student17\t10.0\n" + + "student18\t10.0\n" + + "student19\t10.0\n" + + "student20\t10.0\n" + + "student21\t10.0\n" + + "student22\t10.0\n" + + "student23\t10.0\n" + + "student24\t10.0\n" + + "student25\t10.0\n" + + "student26\t10.0\n" + + "student27\t10.0\n" + + "student28\t10.0\n" + + "student29\t10.0\n" + + "student30\t10.0\n" + + "student31\t10.0\n" + + "student32\t10.0\n" + + "student33\t10.0\n" + + "student34\t10.0\n"; + Assert.assertEquals(expected, actual); + + } +}