diff --git a/test_sae_contenue_juste_le_main/src/androidTest/java/com/example/flow_free/ExampleInstrumentedTest.java b/test_sae_contenue_juste_le_main/src/androidTest/java/com/example/flow_free/ExampleInstrumentedTest.java new file mode 100644 index 0000000..e5a7bd2 --- /dev/null +++ b/test_sae_contenue_juste_le_main/src/androidTest/java/com/example/flow_free/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.flow_free; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.example.flow_free", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/test_sae_contenue_juste_le_main/main/AndroidManifest.xml b/test_sae_contenue_juste_le_main/src/main/AndroidManifest.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/AndroidManifest.xml rename to test_sae_contenue_juste_le_main/src/main/AndroidManifest.xml diff --git a/test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle10.xml b/test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle10.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle10.xml rename to test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle10.xml diff --git a/test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle11.xml b/test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle11.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle11.xml rename to test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle11.xml diff --git a/test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle12.xml b/test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle12.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle12.xml rename to test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle12.xml diff --git a/test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle13.xml b/test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle13.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle13.xml rename to test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle13.xml diff --git a/test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle14.xml b/test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle14.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle14.xml rename to test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle14.xml diff --git a/test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle5.xml b/test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle5.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle5.xml rename to test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle5.xml diff --git a/test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle6.xml b/test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle6.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle6.xml rename to test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle6.xml diff --git a/test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle7.xml b/test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle7.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle7.xml rename to test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle7.xml diff --git a/test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle8.xml b/test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle8.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle8.xml rename to test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle8.xml diff --git a/test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle9.xml b/test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle9.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/assets/puzzles/puzzle9.xml rename to test_sae_contenue_juste_le_main/src/main/assets/puzzles/puzzle9.xml diff --git a/test_sae_contenue_juste_le_main/main/java/com/example/flow_free/FlowFreeView.java b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/FlowFreeView.java similarity index 68% rename from test_sae_contenue_juste_le_main/main/java/com/example/flow_free/FlowFreeView.java rename to test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/FlowFreeView.java index e405004..6ee7a66 100644 --- a/test_sae_contenue_juste_le_main/main/java/com/example/flow_free/FlowFreeView.java +++ b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/FlowFreeView.java @@ -23,6 +23,8 @@ public class FlowFreeView extends View { private final Map> paths = new HashMap<>(); private final Map colorMap = new HashMap<>();//test pour la couleur + private final Set completedColors = new HashSet<>();// liste des chemin fini + private static final int[] DISTINCT_COLORS = { Color.rgb(255, 0, 0), // Rouge vif @@ -32,8 +34,7 @@ public class FlowFreeView extends View { Color.rgb(255, 0, 255), // Fuchsia / Magenta Color.rgb(0, 255, 255), // Cyan Color.rgb(255, 165, 0), // Orange vif - Color.rgb(0, 0, 0), // Noir - Color.rgb(255, 255, 255), // Blanc (à éviter sur fond blanc, mais utile en mode sombre) + Color.rgb(128, 0, 0), // Bordeaux Color.rgb(0, 128, 0), // Vert foncé Color.rgb(0, 0, 128), // Bleu foncé @@ -74,7 +75,18 @@ public class FlowFreeView extends View { - +//test +private void printBoardToLog() { + StringBuilder sb = new StringBuilder(); + for (int[] row : board) { + for (int cell : row) { + sb.append(String.format("%3d", cell)).append(" "); + } + sb.append("\n"); + } + Log.d("DEBUG_FLOW", "Contenu du board :\n" + sb.toString()); +} + //test @Override//test pour calculer cellsize @@ -121,7 +133,7 @@ public class FlowFreeView extends View { for (int row = 0; row < puzzle.getSize(); row++) { for (int col = 0; col < puzzle.getSize(); col++) { int colorId = board[row][col]; - if (colorId != 0) { + if (colorId > 0) { // permet de ne pas dessiner des cercle quand je fais un trait paint.setColor(getColorForId(colorId)); float cx = col * cellSize + cellSize / 2f; float cy = row * cellSize + cellSize / 2f; @@ -134,7 +146,7 @@ public class FlowFreeView extends View { paint.setStrokeWidth(cellSize / 4f); paint.setStyle(Paint.Style.STROKE); for (Map.Entry> entry : paths.entrySet()) { - paint.setColor(getColorForId(entry.getKey())); + paint.setColor(getColorForId(Math.abs(entry.getKey()))); List path = entry.getValue(); for (int i = 0; i < path.size() - 1; i++) { int[] p1 = path.get(i); @@ -157,10 +169,18 @@ public class FlowFreeView extends View { if (col < 0 || row < 0 || col >= puzzle.getSize() || row >= puzzle.getSize()) return false; + + switch (event.getAction()) { case MotionEvent.ACTION_DOWN: + int colorAtCell = board[row][col]; if (colorAtCell != 0) { + if (completedColors.contains(colorAtCell)) {// regarde si le chemin qu'on veut tracer est fini + // 🔒 Ne pas toucher à un chemin terminé + Log.d("DEBUG_FLOW", "Chemin déjà terminé, on ne fait rien."); + return true; + } selectedColor = colorAtCell; if (!paths.containsKey(selectedColor)) { paths.put(selectedColor, new ArrayList<>()); @@ -173,15 +193,64 @@ public class FlowFreeView extends View { } break; - case MotionEvent.ACTION_MOVE: + /* case MotionEvent.ACTION_MOVE: if (selectedColor != 0) { List path = paths.get(selectedColor); int[] last = path.get(path.size() - 1); if (last[0] != row || last[1] != col) { path.add(new int[]{row, col}); + board[row][col] = selectedColor; // ✅ Met à jour le tableau + + printBoardToLog(); // 🔍 Affiche la grille pendant le tracé + } + + } + break;*/ + + + + + //version chat + case MotionEvent.ACTION_MOVE: + if (selectedColor != 0) { + if (board[row][col] == 0) { // la case est vide + // Vérifie que la case est adjacente à la dernière + List path = paths.get(selectedColor); + int[] last = path.get(path.size() - 1); + + int dr = Math.abs(last[0] - row); + int dc = Math.abs(last[1] - col); + + if ((dr == 1 && dc == 0) || (dr == 0 && dc == 1)) { + board[row][col] = -selectedColor; // ✅ Remplit avec l’id du point de départ + path.add(new int[]{row, col}); // 🔁 On suit le chemin mais un seul id + invalidate(); // 🖌️ Redessine la vue + } + } + + if (board[row][col] == selectedColor) { // la case est la meme que le depart + // Vérifie que la case est adjacente à la dernière + List path = paths.get(selectedColor); + int[] last = path.get(path.size() - 1); + + int dr = Math.abs(last[0] - row); + int dc = Math.abs(last[1] - col); + + if ((dr == 1 && dc == 0) || (dr == 0 && dc == 1)) { + board[row][col] = selectedColor; // ✅ Remplit avec l’id du point de départ + path.add(new int[]{row, col}); // 🔁 On suit le chemin mais un seul id + completedColors.add(selectedColor); + selectedColor = 0;// permet de ne pas travers la paire + invalidate(); // 🖌️ Redessine la vue + Log.d("DEBUG_FLOW", "Paire " + selectedColor + " complétée !"); + } } } break; + //version chat + + + case MotionEvent.ACTION_UP: selectedColor = 0; // Permet de reprendre à la prochaine touche diff --git a/test_sae_contenue_juste_le_main/main/java/com/example/flow_free/GameActivity.java b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/GameActivity.java similarity index 99% rename from test_sae_contenue_juste_le_main/main/java/com/example/flow_free/GameActivity.java rename to test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/GameActivity.java index ab2404a..19e679f 100644 --- a/test_sae_contenue_juste_le_main/main/java/com/example/flow_free/GameActivity.java +++ b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/GameActivity.java @@ -12,6 +12,8 @@ public class GameActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + Log.d("DEBUG_FLOW", "GameActivity lancé"); // debug String puzzleFile = getIntent().getStringExtra("PUZZLE_FILE"); Puzzle puzzle = PuzzleLoader.loadPuzzle(this, puzzleFile); diff --git a/test_sae_contenue_juste_le_main/main/java/com/example/flow_free/MainActivity.java b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/MainActivity.java similarity index 100% rename from test_sae_contenue_juste_le_main/main/java/com/example/flow_free/MainActivity.java rename to test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/MainActivity.java diff --git a/test_sae_contenue_juste_le_main/main/java/com/example/flow_free/Puzzle.java b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/Puzzle.java similarity index 100% rename from test_sae_contenue_juste_le_main/main/java/com/example/flow_free/Puzzle.java rename to test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/Puzzle.java diff --git a/test_sae_contenue_juste_le_main/main/java/com/example/flow_free/PuzzleLoader.java b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/PuzzleLoader.java similarity index 100% rename from test_sae_contenue_juste_le_main/main/java/com/example/flow_free/PuzzleLoader.java rename to test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/PuzzleLoader.java diff --git a/test_sae_contenue_juste_le_main/main/java/com/example/flow_free/PuzzleParser.java b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/PuzzleParser.java similarity index 100% rename from test_sae_contenue_juste_le_main/main/java/com/example/flow_free/PuzzleParser.java rename to test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/PuzzleParser.java diff --git a/test_sae_contenue_juste_le_main/main/java/com/example/flow_free/SettingsActivity.java b/test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/SettingsActivity.java similarity index 100% rename from test_sae_contenue_juste_le_main/main/java/com/example/flow_free/SettingsActivity.java rename to test_sae_contenue_juste_le_main/src/main/java/com/example/flow_free/SettingsActivity.java diff --git a/test_sae_contenue_juste_le_main/main/res/drawable-v24/ic_launcher_foreground.xml b/test_sae_contenue_juste_le_main/src/main/res/drawable-v24/ic_launcher_foreground.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/drawable-v24/ic_launcher_foreground.xml rename to test_sae_contenue_juste_le_main/src/main/res/drawable-v24/ic_launcher_foreground.xml diff --git a/test_sae_contenue_juste_le_main/main/res/drawable/ic_launcher_background.xml b/test_sae_contenue_juste_le_main/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/drawable/ic_launcher_background.xml rename to test_sae_contenue_juste_le_main/src/main/res/drawable/ic_launcher_background.xml diff --git a/test_sae_contenue_juste_le_main/main/res/layout/activity_game.xml b/test_sae_contenue_juste_le_main/src/main/res/layout/activity_game.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/layout/activity_game.xml rename to test_sae_contenue_juste_le_main/src/main/res/layout/activity_game.xml diff --git a/test_sae_contenue_juste_le_main/main/res/layout/activity_main.xml b/test_sae_contenue_juste_le_main/src/main/res/layout/activity_main.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/layout/activity_main.xml rename to test_sae_contenue_juste_le_main/src/main/res/layout/activity_main.xml diff --git a/test_sae_contenue_juste_le_main/main/res/layout/activity_settings.xml b/test_sae_contenue_juste_le_main/src/main/res/layout/activity_settings.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/layout/activity_settings.xml rename to test_sae_contenue_juste_le_main/src/main/res/layout/activity_settings.xml diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-anydpi-v26/ic_launcher.xml b/test_sae_contenue_juste_le_main/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/test_sae_contenue_juste_le_main/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-hdpi/ic_launcher.webp b/test_sae_contenue_juste_le_main/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-hdpi/ic_launcher.webp rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-hdpi/ic_launcher_round.webp b/test_sae_contenue_juste_le_main/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-hdpi/ic_launcher_round.webp rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-mdpi/ic_launcher.webp b/test_sae_contenue_juste_le_main/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-mdpi/ic_launcher.webp rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-mdpi/ic_launcher_round.webp b/test_sae_contenue_juste_le_main/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-mdpi/ic_launcher_round.webp rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-xhdpi/ic_launcher.webp b/test_sae_contenue_juste_le_main/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-xhdpi/ic_launcher.webp rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-xhdpi/ic_launcher_round.webp b/test_sae_contenue_juste_le_main/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-xxhdpi/ic_launcher.webp b/test_sae_contenue_juste_le_main/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-xxhdpi/ic_launcher.webp rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/test_sae_contenue_juste_le_main/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-xxxhdpi/ic_launcher.webp b/test_sae_contenue_juste_le_main/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/test_sae_contenue_juste_le_main/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/test_sae_contenue_juste_le_main/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to test_sae_contenue_juste_le_main/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/test_sae_contenue_juste_le_main/main/res/values-night/themes.xml b/test_sae_contenue_juste_le_main/src/main/res/values-night/themes.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/values-night/themes.xml rename to test_sae_contenue_juste_le_main/src/main/res/values-night/themes.xml diff --git a/test_sae_contenue_juste_le_main/main/res/values/colors.xml b/test_sae_contenue_juste_le_main/src/main/res/values/colors.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/values/colors.xml rename to test_sae_contenue_juste_le_main/src/main/res/values/colors.xml diff --git a/test_sae_contenue_juste_le_main/main/res/values/strings.xml b/test_sae_contenue_juste_le_main/src/main/res/values/strings.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/values/strings.xml rename to test_sae_contenue_juste_le_main/src/main/res/values/strings.xml diff --git a/test_sae_contenue_juste_le_main/main/res/values/themes.xml b/test_sae_contenue_juste_le_main/src/main/res/values/themes.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/values/themes.xml rename to test_sae_contenue_juste_le_main/src/main/res/values/themes.xml diff --git a/test_sae_contenue_juste_le_main/main/res/xml/backup_rules.xml b/test_sae_contenue_juste_le_main/src/main/res/xml/backup_rules.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/xml/backup_rules.xml rename to test_sae_contenue_juste_le_main/src/main/res/xml/backup_rules.xml diff --git a/test_sae_contenue_juste_le_main/main/res/xml/data_extraction_rules.xml b/test_sae_contenue_juste_le_main/src/main/res/xml/data_extraction_rules.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/xml/data_extraction_rules.xml rename to test_sae_contenue_juste_le_main/src/main/res/xml/data_extraction_rules.xml diff --git a/test_sae_contenue_juste_le_main/main/res/xml/preferences.xml b/test_sae_contenue_juste_le_main/src/main/res/xml/preferences.xml similarity index 100% rename from test_sae_contenue_juste_le_main/main/res/xml/preferences.xml rename to test_sae_contenue_juste_le_main/src/main/res/xml/preferences.xml diff --git a/test_sae_contenue_juste_le_main/src/test/java/com/example/flow_free/ExampleUnitTest.java b/test_sae_contenue_juste_le_main/src/test/java/com/example/flow_free/ExampleUnitTest.java new file mode 100644 index 0000000..3981245 --- /dev/null +++ b/test_sae_contenue_juste_le_main/src/test/java/com/example/flow_free/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.example.flow_free; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file