exam modal dev aout 2023
This commit is contained in:
		
							
								
								
									
										32
									
								
								bac2/modalDev/e23/question1/app/.classpath
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								bac2/modalDev/e23/question1/app/.classpath
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<classpath>
 | 
			
		||||
	<classpathentry kind="src" output="bin/main" path="src/main/java">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="gradle_scope" value="main"/>
 | 
			
		||||
			<attribute name="gradle_used_by_scope" value="main,test"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="src" output="bin/main" path="src/main/resources">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="gradle_scope" value="main"/>
 | 
			
		||||
			<attribute name="gradle_used_by_scope" value="main,test"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="src" output="bin/test" path="src/test/java">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="gradle_scope" value="test"/>
 | 
			
		||||
			<attribute name="gradle_used_by_scope" value="test"/>
 | 
			
		||||
			<attribute name="test" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="src" output="bin/test" path="src/test/resources">
 | 
			
		||||
		<attributes>
 | 
			
		||||
			<attribute name="gradle_scope" value="test"/>
 | 
			
		||||
			<attribute name="gradle_used_by_scope" value="test"/>
 | 
			
		||||
			<attribute name="test" value="true"/>
 | 
			
		||||
		</attributes>
 | 
			
		||||
	</classpathentry>
 | 
			
		||||
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21/"/>
 | 
			
		||||
	<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
 | 
			
		||||
	<classpathentry kind="output" path="bin/default"/>
 | 
			
		||||
</classpath>
 | 
			
		||||
							
								
								
									
										34
									
								
								bac2/modalDev/e23/question1/app/.project
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								bac2/modalDev/e23/question1/app/.project
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<projectDescription>
 | 
			
		||||
	<name>app</name>
 | 
			
		||||
	<comment></comment>
 | 
			
		||||
	<projects>
 | 
			
		||||
	</projects>
 | 
			
		||||
	<buildSpec>
 | 
			
		||||
		<buildCommand>
 | 
			
		||||
			<name>org.eclipse.jdt.core.javabuilder</name>
 | 
			
		||||
			<arguments>
 | 
			
		||||
			</arguments>
 | 
			
		||||
		</buildCommand>
 | 
			
		||||
		<buildCommand>
 | 
			
		||||
			<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
 | 
			
		||||
			<arguments>
 | 
			
		||||
			</arguments>
 | 
			
		||||
		</buildCommand>
 | 
			
		||||
	</buildSpec>
 | 
			
		||||
	<natures>
 | 
			
		||||
		<nature>org.eclipse.jdt.core.javanature</nature>
 | 
			
		||||
		<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
 | 
			
		||||
	</natures>
 | 
			
		||||
	<filteredResources>
 | 
			
		||||
		<filter>
 | 
			
		||||
			<id>1705162039553</id>
 | 
			
		||||
			<name></name>
 | 
			
		||||
			<type>30</type>
 | 
			
		||||
			<matcher>
 | 
			
		||||
				<id>org.eclipse.core.resources.regexFilterMatcher</id>
 | 
			
		||||
				<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
 | 
			
		||||
			</matcher>
 | 
			
		||||
		</filter>
 | 
			
		||||
	</filteredResources>
 | 
			
		||||
</projectDescription>
 | 
			
		||||
@ -0,0 +1,13 @@
 | 
			
		||||
arguments=
 | 
			
		||||
auto.sync=false
 | 
			
		||||
build.scans.enabled=false
 | 
			
		||||
connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
 | 
			
		||||
connection.project.dir=..
 | 
			
		||||
eclipse.preferences.version=1
 | 
			
		||||
gradle.user.home=
 | 
			
		||||
java.home=
 | 
			
		||||
jvm.arguments=
 | 
			
		||||
offline.mode=false
 | 
			
		||||
override.workspace.settings=false
 | 
			
		||||
show.console.view=false
 | 
			
		||||
show.executions.view=false
 | 
			
		||||
@ -0,0 +1,11 @@
 | 
			
		||||
eclipse.preferences.version=1
 | 
			
		||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 | 
			
		||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
 | 
			
		||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 | 
			
		||||
org.eclipse.jdt.core.compiler.compliance=21
 | 
			
		||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 | 
			
		||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
 | 
			
		||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 | 
			
		||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 | 
			
		||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 | 
			
		||||
org.eclipse.jdt.core.compiler.source=21
 | 
			
		||||
							
								
								
									
										44
									
								
								bac2/modalDev/e23/question1/app/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								bac2/modalDev/e23/question1/app/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This file was generated by the Gradle 'init' task.
 | 
			
		||||
 *
 | 
			
		||||
 * This generated file contains a sample Java application project to get you started.
 | 
			
		||||
 * For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.5/userguide/building_java_projects.html in the Gradle documentation.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
plugins {
 | 
			
		||||
    // Apply the application plugin to add support for building a CLI application in Java.
 | 
			
		||||
    application
 | 
			
		||||
	eclipse
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
repositories {
 | 
			
		||||
    // Use Maven Central for resolving dependencies.
 | 
			
		||||
    mavenCentral()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
    // Use JUnit Jupiter for testing.
 | 
			
		||||
    testImplementation(libs.junit.jupiter)
 | 
			
		||||
 | 
			
		||||
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
 | 
			
		||||
 | 
			
		||||
    // This dependency is used by the application.
 | 
			
		||||
    implementation(libs.guava)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Apply a specific Java toolchain to ease working on different environments.
 | 
			
		||||
java {
 | 
			
		||||
    toolchain {
 | 
			
		||||
        languageVersion.set(JavaLanguageVersion.of(21))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
application {
 | 
			
		||||
    // Define the main class for the application.
 | 
			
		||||
    mainClass.set("question1.App")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tasks.named<Test>("test") {
 | 
			
		||||
    // Use JUnit Platform for unit tests.
 | 
			
		||||
    useJUnitPlatform()
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,14 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This Java source file was generated by the Gradle 'init' task.
 | 
			
		||||
 */
 | 
			
		||||
package question1;
 | 
			
		||||
 | 
			
		||||
public class App {
 | 
			
		||||
    public String getGreeting() {
 | 
			
		||||
        return "Hello World!";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        System.out.println(new App().getGreeting());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,49 @@
 | 
			
		||||
package question1;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
 | 
			
		||||
public class InventoryManagement {
 | 
			
		||||
 | 
			
		||||
	// cnt[zone][product] = quantity
 | 
			
		||||
	HashMap<Integer, HashMap<Integer, Integer>> cnt = new HashMap<>();
 | 
			
		||||
	
 | 
			
		||||
	// ajoute dans une zone du stock une quantité donnée d’un produit donné
 | 
			
		||||
	void replenish(int product, int quantity, int destination_zone) throws ZoneFullException{
 | 
			
		||||
		cnt.putIfAbsent(destination_zone, new HashMap<>());
 | 
			
		||||
		cnt.get(destination_zone).putIfAbsent(product, 0);
 | 
			
		||||
		Integer q = cnt.get(destination_zone).get(product) + quantity;
 | 
			
		||||
		if(q > 100)
 | 
			
		||||
			throw new ZoneFullException();
 | 
			
		||||
		cnt.get(destination_zone).put(product, q);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// retire d’une zone spécifique du stock une quantité donnée d’un produit donné pour l’envoyer vers le réseau de distribution 
 | 
			
		||||
	void distribute(int product, int source_zone, int quantity) throws StockOutException{
 | 
			
		||||
		cnt.putIfAbsent(source_zone, new HashMap<>());
 | 
			
		||||
		cnt.get(source_zone).putIfAbsent(product, 0);
 | 
			
		||||
		Integer q = cnt.get(source_zone).get(product) - quantity;
 | 
			
		||||
		if(q < 0)
 | 
			
		||||
			throw new StockOutException();
 | 
			
		||||
		cnt.get(source_zone).put(product, q);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// déplace une quantité donnée d’un produit vers une autre zone 
 | 
			
		||||
	void move(int product, int quantity, int source_zone, int destination_zone) throws StockOutException, ZoneFullException {
 | 
			
		||||
		distribute(product, source_zone, quantity);
 | 
			
		||||
		try {
 | 
			
		||||
			replenish(product, quantity, destination_zone);
 | 
			
		||||
		}catch(ZoneFullException e){ 
 | 
			
		||||
			replenish(product, quantity, source_zone);
 | 
			
		||||
			throw e;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// retourne la quantité disponible d’un produit donné dans le stock, toutes zones confondues 
 | 
			
		||||
	int quantity(int product){
 | 
			
		||||
		int sum[] = {0};
 | 
			
		||||
		cnt.forEach((key, value) -> {
 | 
			
		||||
			sum[0] += value.getOrDefault(product, 0);
 | 
			
		||||
		});
 | 
			
		||||
		return sum[0];
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,6 @@
 | 
			
		||||
package question1;
 | 
			
		||||
 | 
			
		||||
public class StockOutException extends Exception{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,4 @@
 | 
			
		||||
package question1;
 | 
			
		||||
 | 
			
		||||
public class ZoneFullException extends Exception {}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,14 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This Java source file was generated by the Gradle 'init' task.
 | 
			
		||||
 */
 | 
			
		||||
package question1;
 | 
			
		||||
 | 
			
		||||
import org.junit.jupiter.api.Test;
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.*;
 | 
			
		||||
 | 
			
		||||
class AppTest {
 | 
			
		||||
    @Test void appHasAGreeting() {
 | 
			
		||||
        App classUnderTest = new App();
 | 
			
		||||
        assertNotNull(classUnderTest.getGreeting(), "app should have a greeting");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,55 @@
 | 
			
		||||
package question1;
 | 
			
		||||
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertThrows;
 | 
			
		||||
 | 
			
		||||
import org.junit.jupiter.api.Test;
 | 
			
		||||
 | 
			
		||||
public class InventoryManagementTest {
 | 
			
		||||
	
 | 
			
		||||
	@Test
 | 
			
		||||
	public void testExceptions() throws Exception {
 | 
			
		||||
		InventoryManagement iv = new InventoryManagement();
 | 
			
		||||
		iv.replenish(0, 10, 0);
 | 
			
		||||
		assertThrows(ZoneFullException.class, () -> iv.replenish(0, 96, 0));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void testExceptions2() throws Exception {
 | 
			
		||||
		InventoryManagement iv = new InventoryManagement();
 | 
			
		||||
		assertThrows(StockOutException.class, () -> iv.distribute(0, 0, 92));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void testQuantity() throws Exception {
 | 
			
		||||
		InventoryManagement iv = new InventoryManagement();
 | 
			
		||||
		iv.replenish(2, 42, 0);
 | 
			
		||||
		iv.replenish(2, 21, 1);
 | 
			
		||||
		iv.replenish(2, 0, 3);
 | 
			
		||||
		assertEquals(63, iv.quantity(2));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void testMove() throws Exception {
 | 
			
		||||
		InventoryManagement iv = new InventoryManagement();
 | 
			
		||||
		iv.replenish(42, 50, 1);
 | 
			
		||||
		iv.move(42, 21, 1, 2);
 | 
			
		||||
		assertEquals(50, iv.quantity(42));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void testFailure() throws Exception {
 | 
			
		||||
		InventoryManagement iv = new InventoryManagement();
 | 
			
		||||
		iv.replenish(42, 50, 1);
 | 
			
		||||
		iv.replenish(42, 50, 2);
 | 
			
		||||
		assertEquals(5050, iv.quantity(42)); // Should return a Failure
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Test
 | 
			
		||||
	public void testError() throws Exception {
 | 
			
		||||
		InventoryManagement iv = new InventoryManagement();
 | 
			
		||||
		iv.replenish(42, 100, 1);
 | 
			
		||||
		iv.replenish(42, 1, 1); // Should create an error
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user