diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..24eccee
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..cb7de09
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..528e38c
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,24 @@
+
+
+ 4.0.0
+
+ groupId
+ lab-java-intro-to-testing
+ 1.0-SNAPSHOT
+
+
+ 18
+ 18
+ UTF-8
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ 5.10.0
+
+
+
\ No newline at end of file
diff --git a/src/main/java/exercise1/Ex1.java b/src/main/java/exercise1/Ex1.java
new file mode 100644
index 0000000..ca64405
--- /dev/null
+++ b/src/main/java/exercise1/Ex1.java
@@ -0,0 +1,21 @@
+package exercise1;
+
+public class Ex1 {
+ public static int[] getOddInts(int n) throws IllegalArgumentException {
+ if (n < 1) {
+ throw new IllegalArgumentException("the number must be greater than or equal to 1");
+ }
+
+ int[] oddNums = new int[(n + 1) / 2];
+ int index = 0;
+
+ for (int i = 1; i <= n; i++) {
+ if (i % 2 != 0) {
+ oddNums[index] = i;
+ index++;
+ }
+ }
+
+ return oddNums;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/exercise2/Ex2.java b/src/main/java/exercise2/Ex2.java
new file mode 100644
index 0000000..cb91efc
--- /dev/null
+++ b/src/main/java/exercise2/Ex2.java
@@ -0,0 +1,25 @@
+package exercise2;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public class Ex2 {
+ private static final Set javaKeywords = new HashSet<>(Arrays.asList(
+ "abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class",
+ "const", "continue", "default", "do", "double", "else", "enum", "extends", "final",
+ "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int",
+ "interface", "long", "native", "new", "package", "private", "protected", "public",
+ "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this",
+ "throw", "throws", "transient", "try", "void", "volatile", "while"
+ ));
+
+ public static boolean hasKeyword(String str) {
+ for (String word : str.split("\\s+")) {
+ if (javaKeywords.contains(word)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/exercise3/Elf.java b/src/main/java/exercise3/Elf.java
new file mode 100644
index 0000000..c928415
--- /dev/null
+++ b/src/main/java/exercise3/Elf.java
@@ -0,0 +1,17 @@
+package exercise3;
+
+class Elf extends Player {
+ final int speed;
+
+ public Elf(int health, int strength, int lives, int speed) {
+ super(health, strength, lives);
+ this.speed = speed;
+ }
+
+ //Getters
+
+ public int getSpeed() {
+ return speed;
+ }
+}
+
diff --git a/src/main/java/exercise3/Player.java b/src/main/java/exercise3/Player.java
new file mode 100644
index 0000000..85bdb3a
--- /dev/null
+++ b/src/main/java/exercise3/Player.java
@@ -0,0 +1,63 @@
+package exercise3;
+
+abstract class Player {
+ private int health;
+ private int strength;
+ private int lives;
+ private final int initialHealth;
+
+ //Constructor
+ public Player(int health, int strength, int lives) {
+ setHealth(health);
+ setStrength(strength);
+ setLives(lives);
+ initialHealth = health;
+ }
+
+ //Getters
+ public int getHealth() {
+ return health;
+ }
+
+ public int getStrength() {
+ return strength;
+ }
+
+ public int getLives() {
+ return lives;
+ }
+
+ //Setters
+ public void setHealth(int health) {
+ this.health = health;
+ }
+
+ public void setStrength(int strength) {
+ this.strength = strength;
+ }
+
+ public void setLives(int lives) {
+ this.lives = lives;
+ }
+
+ //Methods
+ // Methods
+ public void decrementLive() {
+ if (lives <= 0) {
+ System.out.println("This character is dead");
+ } else {
+ lives--;
+ setHealth(initialHealth);
+ }
+ }
+
+ public void attack(Player playerToAttack) {
+ playerToAttack.setHealth(playerToAttack.getHealth() - strength);
+ }
+
+ public void checkHealth() {
+ if (health <= 0) {
+ decrementLive();
+ }
+ }
+}
diff --git a/src/main/java/exercise3/Warrior.java b/src/main/java/exercise3/Warrior.java
new file mode 100644
index 0000000..d0cbfa9
--- /dev/null
+++ b/src/main/java/exercise3/Warrior.java
@@ -0,0 +1,20 @@
+package exercise3;
+
+class Warrior extends Player {
+ final int force;
+
+ public Warrior(int health, int strength, int lives, int force) {
+ super(health, strength, lives);
+ this.force = force;
+ }
+
+ //Getter
+ public int getForce() {
+ return force;
+ }
+
+ // Method
+ public Elf convertToElf() {
+ return new Elf(getHealth(), getStrength(), getLives(), 0);
+ }
+}
diff --git a/src/main/java/exercise3/Wizard.java b/src/main/java/exercise3/Wizard.java
new file mode 100644
index 0000000..365b113
--- /dev/null
+++ b/src/main/java/exercise3/Wizard.java
@@ -0,0 +1,20 @@
+package exercise3;
+
+class Wizard extends Player {
+ private String spell;
+
+ public Wizard(int health, int strength, int lives, String spell) {
+ super(health, strength, lives);
+ this.spell = spell;
+ }
+
+ //Getters
+ public String getSpell() {
+ return spell;
+ }
+
+ //Methods
+ public Elf convertToElf() {
+ return new Elf(getHealth(), getStrength(), getLives(), 0);
+ }
+}
diff --git a/src/test/java/exercise1/TestEx1.java b/src/test/java/exercise1/TestEx1.java
new file mode 100644
index 0000000..d93cb05
--- /dev/null
+++ b/src/test/java/exercise1/TestEx1.java
@@ -0,0 +1,12 @@
+package exercise1;
+
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+
+public class TestEx1 {
+ @Test
+ public void getOddInts() {
+ int[] expected = {1, 3, 5, 7, 9};
+ assertArrayEquals(expected, Ex1.getOddInts(10));
+ }
+}
diff --git a/src/test/java/exercise2/TestEx2.java b/src/test/java/exercise2/TestEx2.java
new file mode 100644
index 0000000..9c997b9
--- /dev/null
+++ b/src/test/java/exercise2/TestEx2.java
@@ -0,0 +1,12 @@
+package exercise2;
+
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class TestEx2 {
+ @Test
+ public void getJavaKeyword() {
+ assertTrue(Ex2.hasKeyword("Don't break my heart"), "Expected 'Don't break my heart' to contain a Java keyword");
+ assertTrue(!Ex2.hasKeyword("I love to breakdance"), "Expected 'I love to breakdance' not to contain any Java keyword");
+ }
+}
diff --git a/src/test/java/exercise3/TestEx3.java b/src/test/java/exercise3/TestEx3.java
new file mode 100644
index 0000000..013a8bf
--- /dev/null
+++ b/src/test/java/exercise3/TestEx3.java
@@ -0,0 +1,72 @@
+package exercise3;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class TestEx3 {
+ private Warrior warrior;
+ private Elf elf;
+ private Wizard wizard;
+ private Player playerToAttack;
+
+ @BeforeEach
+ public void setUp() {
+ warrior = new Warrior(100, 20, 3, 50);
+ elf = new Elf(80, 15, 4, 30);
+ wizard = new Wizard(90, 10, 5, "Fireball");
+ playerToAttack = new Warrior(100, 20, 3, 50);
+ }
+
+ @Test
+ public void testWarrior() {
+ assertEquals(100, warrior.getHealth());
+ assertEquals(20, warrior.getStrength());
+ assertEquals(3, warrior.getLives());
+ assertEquals(50, warrior.getForce());
+ }
+
+ @Test
+ public void testElf() {
+ assertEquals(80, elf.getHealth());
+ assertEquals(15, elf.getStrength());
+ assertEquals(4, elf.getLives());
+ assertEquals(30, elf.getSpeed());
+ }
+
+ @Test
+ public void testWizard() {
+ assertEquals(90, wizard.getHealth());
+ assertEquals(10, wizard.getStrength());
+ assertEquals(5, wizard.getLives());
+ assertEquals("Fireball", wizard.getSpell());
+ }
+
+ @Test
+ public void testAttack() {
+ warrior.attack(playerToAttack);
+ assertEquals(80, playerToAttack.getHealth());
+ }
+
+ @Test
+ public void testCheckHealth() {
+ warrior.setHealth(0);
+ warrior.checkHealth();
+ assertEquals(2, warrior.getLives());
+ }
+
+ @Test
+ public void testConvertToElf() {
+ Elf elfFromWarrior = warrior.convertToElf();
+ assertEquals(100, elfFromWarrior.getHealth());
+ assertEquals(20, elfFromWarrior.getStrength());
+ assertEquals(3, elfFromWarrior.getLives());
+ assertEquals(0, elfFromWarrior.getSpeed());
+
+ Elf elfFromWizard = wizard.convertToElf();
+ assertEquals(90, elfFromWizard.getHealth());
+ assertEquals(10, elfFromWizard.getStrength());
+ assertEquals(5, elfFromWizard.getLives());
+ assertEquals(0, elfFromWizard.getSpeed());
+ }
+}
diff --git a/target/classes/exercise1/ex1.class b/target/classes/exercise1/ex1.class
new file mode 100644
index 0000000..6a567eb
Binary files /dev/null and b/target/classes/exercise1/ex1.class differ
diff --git a/target/classes/exercise2/Ex2.class b/target/classes/exercise2/Ex2.class
new file mode 100644
index 0000000..2539a6b
Binary files /dev/null and b/target/classes/exercise2/Ex2.class differ
diff --git a/target/classes/exercise3/Elf.class b/target/classes/exercise3/Elf.class
new file mode 100644
index 0000000..85c0690
Binary files /dev/null and b/target/classes/exercise3/Elf.class differ
diff --git a/target/classes/exercise3/Player.class b/target/classes/exercise3/Player.class
new file mode 100644
index 0000000..64f9448
Binary files /dev/null and b/target/classes/exercise3/Player.class differ
diff --git a/target/classes/exercise3/Warrior.class b/target/classes/exercise3/Warrior.class
new file mode 100644
index 0000000..f9d6d9a
Binary files /dev/null and b/target/classes/exercise3/Warrior.class differ
diff --git a/target/classes/exercise3/Wizard.class b/target/classes/exercise3/Wizard.class
new file mode 100644
index 0000000..a505d48
Binary files /dev/null and b/target/classes/exercise3/Wizard.class differ
diff --git a/target/test-classes/exercise1/testEx1.class b/target/test-classes/exercise1/testEx1.class
new file mode 100644
index 0000000..931d0cf
Binary files /dev/null and b/target/test-classes/exercise1/testEx1.class differ
diff --git a/target/test-classes/exercise2/TestEx2.class b/target/test-classes/exercise2/TestEx2.class
new file mode 100644
index 0000000..ddc1477
Binary files /dev/null and b/target/test-classes/exercise2/TestEx2.class differ
diff --git a/target/test-classes/exercise3/TestEx3.class b/target/test-classes/exercise3/TestEx3.class
new file mode 100644
index 0000000..4161102
Binary files /dev/null and b/target/test-classes/exercise3/TestEx3.class differ