Skip to content
This repository was archived by the owner on Jun 17, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
108 changes: 83 additions & 25 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,37 @@
* limitations under the License.
*/

// Comamnd-line arguments

var testTarget = "unittests"
if (project.hasProperty("testDir")) {
testTarget = project.property("testDir").toString()
}

var jvmVersion = JavaVersion.VERSION_21
if (testTarget == "evosuitetests" ||
gradle.startParameter.taskNames.contains("generateEvoSuiteTests")) {

jvmVersion = JavaVersion.VERSION_1_8
}

var junitVersion = 5
if (testTarget == "evosuitetests") {
junitVersion = 4
}

if (JavaVersion.current() != jvmVersion) {
throw GradleException(
"Wrong java version for this task: use Java 8 for EvoSuite and 21 for everything else"
)
}

// Build script configuration

val evoSuiteDownload by configurations.creating {
isTransitive = true
}

// Project configuration

plugins {
Expand All @@ -27,52 +58,45 @@ repositories {
}

dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:5.12.1")
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.12.1")
// JUnit 4
testImplementation("junit:junit:4.13.2")

// JUnit 5
testImplementation("org.junit.jupiter:junit-jupiter:5.12.2")
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.12.2")

// EvoSuite Runtime
testImplementation("org.evosuite:evosuite-standalone-runtime:1.0.6")
evoSuiteDownload("org.evosuite:evosuite-master:1.0.6")
}

java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

application {
mainClass = "MakeItFit.Main"
}

jacoco {
toolVersion = "0.8.13"
}

// Test configuration

var testTarget = "unittests"
if (project.hasProperty("testDir")) {
testTarget = project.property("testDir").toString()
}

java.sourceSets["test"].java {
srcDir("src/${testTarget}/java")
}

tasks.named<Test>("test") {
useJUnitPlatform()
finalizedBy(tasks.jacocoTestReport)
}

// Other tasks
if (junitVersion == 5) {
useJUnitPlatform ()
}

tasks.named<JavaExec>("run") {
standardInput = System.`in`
finalizedBy(tasks.jacocoTestReport)
}

tasks.register<Exec>("format") {
workingDir = file(rootDir)
commandLine = listOf("sh", "-c", "find src -type f | xargs -n1 sh -c 'clang-format -i $0; sed -i s/\\\\r//g $0'")
jacoco {
toolVersion = "0.8.13"
}

// PIT Mutation Testing
pitest {
junit5PluginVersion.set("1.2.2")
pitestVersion.set("1.19.1")
Expand All @@ -84,3 +108,37 @@ pitest {
outputFormats.set(setOf("HTML"))
timestampedReports.set(false)
}

tasks.register<JavaExec>("generateEvoSuiteTests") {
classpath = evoSuiteDownload
mainClass = "org.evosuite.EvoSuite"
args = listOf(
"-target",
layout.buildDirectory.dir("classes/java/main").get().asFile.path,
"-Duse_separate_classloader=false",
"-seed",
"1"
)

doLast {
project.delete(files("evosuite-report"))
project.delete(files("src/evosuitetests/java"))
File("src/evosuitetests/java").mkdirs()
File("evosuite-tests").renameTo(File("src/evosuitetests/java"))
}

finalizedBy(tasks.named<Task>("format"))
}

// Other tasks

tasks.named<JavaExec>("run") {
standardInput = System.`in`
}

tasks.register<Exec>("format") {
workingDir = file(rootDir)
commandLine = listOf("sh", "-c",
"find src -type f | xargs -n1 sh -c 'clang-format -i $0; sed -i s/\\\\r//g $0'"
)
}
25 changes: 19 additions & 6 deletions src/main/java/MakeItFit/queries/MostDoneActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,26 @@ public String executeQuery(UserManager userManager) {
}
}
int maxIndex = max(count);
return switch (maxIndex) {
case 0 -> "DistanceWithAltimetry";
case 1 -> "Distance";
case 2 -> "Repetitions";
case 3 -> "RepetitionsWithWeights";
default -> "No activities";

String mostDoneActivity;
switch (maxIndex) {
case 0:
mostDoneActivity = "DistanceWithAltimetry";
break;
case 1:
mostDoneActivity = "Distance";
break;
case 2:
mostDoneActivity = "Repetitions";
break;
case 3:
mostDoneActivity = "RepetitionsWithWeights";
break;
default:
mostDoneActivity = "No activities";
break;
};
return mostDoneActivity;
}

/**
Expand Down
25 changes: 16 additions & 9 deletions src/main/java/MakeItFit/trainingPlan/TrainingPlanManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import MakeItFit.activities.HardInterface;
import MakeItFit.activities.implementation.*;
import MakeItFit.exceptions.EntityDoesNotExistException;
import MakeItFit.utils.ExtendedRandom;
import MakeItFit.utils.MakeItFitDate;
import MakeItFit.utils.MyTuple;

Expand Down Expand Up @@ -82,7 +83,7 @@ public TrainingPlan constructTrainingPlanByObjectives(TrainingPlan trainingPlan,

ActivityManager activityManager = new ActivityManager();
MakeItFitDate currentDate = trainingPlan.getStartDate();
Random random = new Random();
ExtendedRandom random = new ExtendedRandom();

Set<String> differentActivityTypes = new HashSet<>();

Expand All @@ -97,7 +98,7 @@ public TrainingPlan constructTrainingPlanByObjectives(TrainingPlan trainingPlan,
}

switch (activityType) {
case "PushUp" -> {
case "PushUp": {
int expectedDuration = random.nextInt(10, 40);
int repetitions = random.nextInt(5, 20);
int series = random.nextInt(1, 5);
Expand All @@ -108,8 +109,9 @@ public TrainingPlan constructTrainingPlanByObjectives(TrainingPlan trainingPlan,
activityType,
repetitions,
series);
}
case "Running" -> {
} break;

case "Running": {
int expectedDuration = random.nextInt(10, 40);
double distance = random.nextInt(500, 5000);
double speed = random.nextInt(5, 20);
Expand All @@ -120,8 +122,9 @@ public TrainingPlan constructTrainingPlanByObjectives(TrainingPlan trainingPlan,
activityType,
distance,
speed);
}
case "Trail" -> {
} break;

case "Trail": {
int expectedDuration = random.nextInt(10, 40);
int distance = random.nextInt(500, 5000);
int elevationGain = random.nextInt(0, 800);
Expand All @@ -136,8 +139,9 @@ public TrainingPlan constructTrainingPlanByObjectives(TrainingPlan trainingPlan,
elevationGain,
elevationLoss,
trailType);
}
case "WeightSquat" -> {
} break;

case "WeightSquat": {
int expectedDuration = random.nextInt(10, 40);
int repetitions = random.nextInt(5, 20);
int series = random.nextInt(1, 5);
Expand All @@ -150,8 +154,11 @@ public TrainingPlan constructTrainingPlanByObjectives(TrainingPlan trainingPlan,
repetitions,
series,
weight);
} break;

default: {
throw new IllegalArgumentException("Invalid type.");
}
default -> throw new IllegalArgumentException("Invalid type.");
}

if (!hardActivities && activity instanceof HardInterface) {
Expand Down
28 changes: 13 additions & 15 deletions src/main/java/MakeItFit/users/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -382,21 +382,19 @@ public float calculateIndex(float weight, int height, int bpm) {
@Override
public String toString() {
// clang-format off
return String.format("""
== (User details) ==
Code: %s
Name: %s
Age: %d
Gender: %s
Weight: %.2f kg
Height: %d cm
Bpm: %d
Level: %s
Address: %s
Phone: %s
Email: %s
Activities: %s
""",
return String.format(" == (User details) ==\n" +
" Code: %s\n" +
" Name: %s\n" +
" Age: %d\n" +
" Gender: %s\n" +
" Weight: %.2f kg\n" +
" Height: %d cm\n" +
" Bpm: %d\n" +
" Level: %s\n" +
" Address: %s\n" +
" Phone: %s\n" +
" Email: %s\n" +
" Activities: %s\n",
this.code,
this.name,
this.age,
Expand Down
32 changes: 32 additions & 0 deletions src/main/java/MakeItFit/utils/ExtendedRandom.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package MakeItFit.utils;

import java.util.Random;

/**
* Class to implement new java features to java.util.Random.
*
* @author Humberto Gomes (A104348)
* @version (27052025)
*/
public class ExtendedRandom extends Random {
/**
* Creates a new random number generator with a random seed.
*/
public ExtendedRandom() {
super();
}

/**
* Creates a new random number generator with a set seed.
*/
public ExtendedRandom(long seed) {
super(seed);
}

/**
* Generates a random integer between origin (inclusive) and bound (exclusive)
*/
public int nextInt(int origin, int bound) {
return this.nextInt(bound - origin) + origin;
}
}
Loading