Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a094ff7
Created and tested Person class
AndrewAscone Aug 24, 2023
103f86d
Learner interface added
AndrewAscone Aug 24, 2023
f9b7b8e
Created student class
AndrewAscone Aug 24, 2023
98bad62
Created tests for Student class
AndrewAscone Aug 24, 2023
7cd28e2
Created Teacher interface
AndrewAscone Aug 24, 2023
ea5d0a5
Began creating Instructor class
AndrewAscone Aug 25, 2023
2acec56
Finished Instructor class methods, need to make tests
AndrewAscone Aug 25, 2023
d864593
Creating tests for Instructor class
AndrewAscone Aug 26, 2023
048b3e7
Added lecture method test, Instructor tests complete
AndrewAscone Aug 26, 2023
da22e71
Created People class; add, findById, and contains methods
AndrewAscone Aug 26, 2023
f576903
Added remove, removeAll, count, and toArray methods
AndrewAscone Aug 26, 2023
4ec93d4
Updating classes and tests
AndrewAscone Aug 29, 2023
5f9c3d7
Updated Student class, testStudent class
AndrewAscone Aug 29, 2023
0399db6
Updated Instructor class, TestInstructor class
AndrewAscone Aug 29, 2023
2aa9d3d
Updated People class, updated and completed TestPeople class
AndrewAscone Aug 29, 2023
67ed363
Created Students singleton, created tests in TestStudents class
AndrewAscone Aug 29, 2023
d80782b
Created Instructors singleton, created tests in TestInstructors class
AndrewAscone Aug 29, 2023
82ef1d2
Created Classroom enum, added test in TestClassroom
AndrewAscone Aug 29, 2023
4b64d43
Modified and refactored multiple classes and test to remove intermedi…
AndrewAscone Aug 31, 2023
c3640b1
Created Educator enum
AndrewAscone Aug 31, 2023
5a6c1fd
Added findByName method to People class, filled out Educator enum
AndrewAscone Sep 2, 2023
9128a34
Added tests for Educator
AndrewAscone Sep 5, 2023
e7bd96d
Updated Classroom tests
AndrewAscone Sep 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/main/java/com/github/curriculeon/Classroom.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.github.curriculeon;

import java.util.HashMap;
import java.util.Map;

public enum Classroom {
INSTANCE;

private Students students = Students.getInstance();
private Instructors instructors = Instructors.getInstance();

public void hostLecture(Teacher teacher, double numberOfHours){
Student[] studentArray = students.toArray();
teacher.lecture(studentArray, numberOfHours);
}

public void hostLecture(Long id, double numberOfHours){
Teacher teacher = Instructors.getInstance().findById(id);
hostLecture(teacher, numberOfHours);
}

public Map<Student, Double> getStudyMap() {
Map<Student, Double> map = new HashMap<>();
for(Student student : Students.getInstance().toArray()){
double numberOfHours = student.getTotalStudyTime();
map.put(student, numberOfHours);
}
return map;
}
}
29 changes: 29 additions & 0 deletions src/main/java/com/github/curriculeon/Educator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.github.curriculeon;

public enum Educator implements Teacher{
LEON,
HUNTER;


private double timeWorked;

@Override
public void teach(Learner learner, double numberOfHours) {
getTeacher().teach(learner, numberOfHours);
timeWorked += numberOfHours;
}

@Override
public void lecture(Learner[] learners, double numberOfHours) {
getTeacher().lecture(learners, numberOfHours);
timeWorked += numberOfHours;
}

public double getTimeWorked(){
return timeWorked;
}

private Teacher getTeacher() {
return Instructors.getInstance().findByName(name().toUpperCase());
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/github/curriculeon/Instructor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.github.curriculeon;

public class Instructor extends Person implements Teacher {

public Instructor(Long id, String name) {
super(id, name);
}

@Override
public void teach(Learner learner, double numberOfHours) {
learner.learn(numberOfHours);
}

@Override
public void lecture(Learner[] learners, double numberOfHours) {
double numberOfHoursPerLearner = numberOfHours / learners.length;
for (Learner learner:learners) {
teach(learner, numberOfHoursPerLearner);
}
}
}
20 changes: 20 additions & 0 deletions src/main/java/com/github/curriculeon/Instructors.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.github.curriculeon;

public final class Instructors extends People<Instructor> {

private static final Instructors INSTANCE = new Instructors();

private Instructors(){
this.add(new Instructor(1L, "LEON"));
this.add(new Instructor(2L, "HUNTER"));
}

public static Instructors getInstance() {
return INSTANCE;
}

@Override
public Instructor[] toArray() {
return this.list.toArray(new Instructor[0]);
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/github/curriculeon/Learner.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.github.curriculeon;

public interface Learner {
void learn(double numberOfHours);

double getTotalStudyTime();
}
60 changes: 60 additions & 0 deletions src/main/java/com/github/curriculeon/People.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.github.curriculeon;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;

abstract public class People<PersonType extends Person> implements Iterable<PersonType> {

protected List<PersonType> list = new ArrayList<>();

public void add(PersonType person){
list.add(person);
}

public PersonType findById(Long id){
for (PersonType person: list) {
if(person.getId() == id){
return person;
}
}
return null;
}

public PersonType findByName(String name) {
for(PersonType person : list) {
if(Objects.requireNonNull(name).equals(person.getName())) {
return person;
}
}
return null;
}

public boolean contains(PersonType person){
return list.contains(person);
}

public void remove(PersonType person){
list.remove(person);
}

public void remove(Long id){
remove(findById(id));
}

public void removeAll(){
list.clear();
}

public int count(){
return list.size();
}

abstract public PersonType[] toArray();

@Override
public Iterator<PersonType> iterator() {
return list.iterator();
}
}
20 changes: 20 additions & 0 deletions src/main/java/com/github/curriculeon/Person.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
package com.github.curriculeon;

public class Person {
final Long id;

String name;

public Person(Long id, String name) {
this.id = id;

this.name = name;
}

public Long getId() {
return id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
20 changes: 20 additions & 0 deletions src/main/java/com/github/curriculeon/Student.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.github.curriculeon;

public class Student extends Person implements Learner {

double totalStudyTime;

public Student(Long id, String name) {
super(id, name);
}

@Override
public void learn(double numberOfHours) {
this.totalStudyTime += numberOfHours;
}

@Override
public double getTotalStudyTime() {
return totalStudyTime;
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/github/curriculeon/Students.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.github.curriculeon;

public final class Students extends People<Student> {

private static Students INSTANCE = new Students();

private Students(){
this.add(new Student(1L, "Jarek"));
this.add(new Student(2L, "Mary"));
this.add(new Student(3L, "Andrew"));
}

public static Students getInstance(){
return INSTANCE;
}

@Override
public Student[] toArray() {
return this.list.toArray(new Student[0]);
}
}
8 changes: 8 additions & 0 deletions src/main/java/com/github/curriculeon/Teacher.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.github.curriculeon;

public interface Teacher {
void teach(Learner learner, double numberOfHours);

void lecture(Learner[] learners, double numberOfHours);

}
41 changes: 41 additions & 0 deletions src/test/java/com/github/curriculeon/TestClassroom.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.github.curriculeon;

import org.junit.Assert;
import org.junit.Test;

import java.util.Map;

public class TestClassroom {
public void testHostLecture(Teacher teacher) {
//given
Classroom classroom = Classroom.INSTANCE;
double numberOfHours = Students.getInstance().count();
double hoursPerStudent = numberOfHours / Students.getInstance().count();
Map<Student, Double> preStudyMap = classroom.getStudyMap();

//when
classroom.hostLecture(teacher, numberOfHours);
Map<Student, Double> postStudyMap = classroom.getStudyMap();

for(Map.Entry<Student, Double> entry : preStudyMap.entrySet()){
Student student = entry.getKey();
double preStudyTime = entry.getValue();
double actualStudyTime = postStudyMap.get(student);
double expectedStudyTime = preStudyTime + hoursPerStudent;

//then
Assert.assertEquals(expectedStudyTime, actualStudyTime, 0.001);
}


}
@Test
public void testHostLectureEducator() {
testHostLecture(Educator.LEON);
}

@Test
public void testHostLectureInstructor(){
testHostLecture(Instructors.getInstance().findById(1L));
}
}
65 changes: 65 additions & 0 deletions src/test/java/com/github/curriculeon/TestEducator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.github.curriculeon;

import org.junit.Assert;
import org.junit.Test;

public class TestEducator {

@Test
public void testImplementation(){
Educator educator = Educator.LEON;

boolean isTeacher = educator instanceof Teacher;

Assert.assertTrue(isTeacher);
}

@Test
public void testTeach(){
Educator educator = Educator.LEON;
Student student = new Student(null, null);
double preStudyTime = student.getTotalStudyTime();
double preWorkTime = educator.getTimeWorked();
double lectureTime = 10.0;
double expectedStudyTime = preStudyTime + lectureTime;
double expectedWorkTime = preWorkTime + lectureTime;

educator.teach(student, lectureTime);
double actualStudyTime = student.getTotalStudyTime();
double actualWorkTime = educator.getTimeWorked();

Assert.assertEquals(expectedStudyTime, actualStudyTime, 0.001);
Assert.assertEquals(expectedWorkTime, actualWorkTime, 0.001);

}

@Test
public void testLecture(){
/*Student student1 = new Student(null, null);
Student student2 = new Student(null, null);
Student student3 = new Student(null, null);
Student student4 = new Student(null, null);
Student[] students = new Student[]{student1, student2, student3, student4};*/
//SEE ALSO: Implementation in TestInstructor
Student[] students = Students.getInstance().toArray();
Educator educator = Educator.HUNTER;
double lectureTime = students.length;
double preWorkTime = educator.getTimeWorked();
double expectedStudyTime = lectureTime/ students.length;
double expectedWorkTime = preWorkTime + lectureTime;
for(Student student : students){
Assert.assertNotEquals(expectedStudyTime, student.getTotalStudyTime());
}

educator.lecture(students, lectureTime);
double actualWorkTime = educator.getTimeWorked();
for(Student student : students) {
double actualStudyTime = student.getTotalStudyTime();

//then
Assert.assertEquals(expectedStudyTime, actualStudyTime, 0.001);
}

Assert.assertEquals(expectedWorkTime, actualWorkTime, 0.001);
}
}
Loading