From 7d7784fa4726d33d7408c940b69891faaf9fa62e Mon Sep 17 00:00:00 2001 From: Margaux Haller <margaux.haller2@etu.univ-lorraine.fr> Date: Mon, 15 Apr 2024 14:57:41 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20du=20devoir=20not=C3=A9=20du=20jour?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metier/demographie.ts | 81 +++++++++++++++++++ devoir qualdev 15-04-2024/metier/pays.ts | 77 ++++++++++++++++++ .../test/demographie.test.ts | 71 ++++++++++++++++ devoir qualdev 15-04-2024/test/pays.test.ts | 79 ++++++++++++++++++ 4 files changed, 308 insertions(+) create mode 100644 devoir qualdev 15-04-2024/metier/demographie.ts create mode 100644 devoir qualdev 15-04-2024/metier/pays.ts create mode 100644 devoir qualdev 15-04-2024/test/demographie.test.ts create mode 100644 devoir qualdev 15-04-2024/test/pays.test.ts diff --git a/devoir qualdev 15-04-2024/metier/demographie.ts b/devoir qualdev 15-04-2024/metier/demographie.ts new file mode 100644 index 0000000..1bb437d --- /dev/null +++ b/devoir qualdev 15-04-2024/metier/demographie.ts @@ -0,0 +1,81 @@ +import { Pays } from './pays.ts'; + +export class DemographieMondiale { + private _pays!: Pays[]; + + constructor() { + this._pays = []; + } + + setPays(liste: Pays[]):void { + this._pays = liste; + } + + getPays(): Pays[] { + return this._pays; + } + + getIndexPays(nomOuCode: string): number { + for (let i= 0; i < this._pays.length; i++) { + if (this._pays[i].getNom() === nomOuCode || this._pays[i].getCode() === nomOuCode) { + return i; + } + } + return -1; + } + + paysDejaConnu(nomOuCode: string): boolean { + return this.getIndexPays(nomOuCode) !== -1; + } + + ajoutePays(pays: Pays): void { + const position = this.getIndexPays(pays.getNom()); + if (position !== -1) { + throw new Error('Ce pays est déjà présent dans la liste !'); + } else { + this._pays.push(pays); + } + } + + ajouteHabitants(nomOuCode: string, nbHabitants: number): void { + const position = this.getIndexPays(nomOuCode); + if (position === -1) { + throw new Error('Pays non présent dans la liste !'); + } else { + this._pays[position].ajouteHabitants(nbHabitants); + } + } + + retrancheHabitants(nomOuCode: string, nbHabitants: number): void { + const position = this.getIndexPays(nomOuCode); + if (position === -1) { + throw new Error('Pays non présent dans la liste !'); + } else { + const vide: boolean = this._pays[position].supprimeHabitants(nbHabitants); + if (vide) { + this._pays.splice(position, 1); + } + } + } + + getTotal(): number { + let total= 0; + this._pays.forEach((value: Pays) => { + total += value.getNbHabitants(); + }); + return total; + } + + toString(): string { + if (this._pays.length === 0) { + return 'Liste vide !'; + } + let content = ''; + this._pays.forEach((value: Pays) => { + content += value.toString() + ' ; '; + }); + + content = content.substring(0, content.length - 3) + '.'; + return content; + } +} diff --git a/devoir qualdev 15-04-2024/metier/pays.ts b/devoir qualdev 15-04-2024/metier/pays.ts new file mode 100644 index 0000000..c1f8bfe --- /dev/null +++ b/devoir qualdev 15-04-2024/metier/pays.ts @@ -0,0 +1,77 @@ +export class Pays { + private _nom!: string; + private _code!: string; + private _nbHabitants!: number; + + constructor( + nom: string = 'France', + nbHabitants: number = 67, + code: string = 'FR' + ) { + this._nom = nom; + this._nbHabitants = nbHabitants; + this._code = code; + } + + getNom(): string { + return this._nom; + } + + setNom(nom: string) :void{ + if (nom.trim().length > 2) { + this._nom = nom.trim(); + } else { + throw new Error('Le nom du pays doit avoir au moins 3 lettres.'); + } + } + + setNbHabitants(nbHabitants: number) :void{ + if (nbHabitants >= 0) { + this._nbHabitants = nbHabitants; + } else { + throw new Error('Le nombre de millions d\'habitants doit être positif !'); + } + } + + getNbHabitants(): number { + return this._nbHabitants; + } + + setCode(code: string) :void { + if (code.length === 2) { + this._code = code; + } else { + throw new Error('Le code pays doit faire 2 caractères !'); + } + } + + getCode(): string { + return this._code; + } + + ajouteHabitants(nb: number): void { + if (nb > 0) { + this._nbHabitants += nb; + } else { + throw new Error('Le nombre à ajouter doit être positif !'); + } + } + + supprimeHabitants(nb: number): boolean { + if (nb > 0) { + if (nb <= this._nbHabitants) { + this._nbHabitants -= nb; + return this._nbHabitants === 0; + } + throw new Error("Pas assez d'habitants dans ce pays!"); + } else { + throw new Error('Le nombre à retrancher doit être positif !'); + } + } + + toString(): string { + return ( + this._nom + ' (' + this._code + '), ' + this._nbHabitants + ' millions d\'habitants' + ); + } +} diff --git a/devoir qualdev 15-04-2024/test/demographie.test.ts b/devoir qualdev 15-04-2024/test/demographie.test.ts new file mode 100644 index 0000000..0b1b3c1 --- /dev/null +++ b/devoir qualdev 15-04-2024/test/demographie.test.ts @@ -0,0 +1,71 @@ +import { assertEquals } from "https://deno.land/std@0.220.0/assert/mod.ts"; +import { assertThrows } from "https://deno.land/std@0.220.0/assert/assert_throws.ts"; +import { Pays } from "../metier/pays.ts"; +import { DemographieMondiale } from "../metier/demographie.ts"; + +Deno.test("cas par defaut", () => { + let variable = new DemographieMondiale(); + assertEquals(variable.getPays() , []); + assertEquals(variable.toString() , 'Liste vide !'); + assertEquals(variable.getTotal(), 0); + assertEquals(variable.getIndexPays("EO") , -1); +}); + +Deno.test("cas avec 2 pays renseignés", () => { + let variable = new DemographieMondiale(); + + assertEquals(variable.getTotal(), 0); + + let paysTest1 = new Pays("Pangée", 45, "PN"); + let paysTest2 = new Pays("Esperantie", 56, "EO"); + variable.setPays([paysTest1, paysTest2]); + + assertEquals(variable.getPays() , [paysTest1, paysTest2]); + + assertEquals(variable.getIndexPays("Pangée") , 0); + assertEquals(variable.getIndexPays("EO") , 1); + + assertEquals(variable.paysDejaConnu("Pangée"), true); + assertEquals(variable.paysDejaConnu("Westalie"), false); + + let paysTest3 = new Pays("Westalie", 34, "WT"); + variable.ajoutePays(paysTest3); + assertEquals(variable.getPays() , [paysTest1, paysTest2, paysTest3]); + + assertEquals(variable.getTotal(), 135); + + assertEquals(variable.toString() , "Pangée (PN), 45 millions d'habitants ; Esperantie (EO), 56 millions d'habitants ; Westalie (WT), 34 millions d'habitants."); +}); + +Deno.test("cas ajout d'habitants", () => { + let variable = new DemographieMondiale(); + let paysTest2 = new Pays("Esperantie", 56, "EO"); + variable.setPays([paysTest2]); + + variable.ajouteHabitants("EO", 4) + assertEquals(variable.getPays()[0].getNbHabitants(), 60); +}); + +Deno.test("cas retrait d'habitants", () => { + let variable = new DemographieMondiale(); + let paysTest2 = new Pays("Esperantie", 56, "EO"); + variable.setPays([paysTest2]); + + variable.retrancheHabitants("EO", 6) + assertEquals(variable.getPays()[0].getNbHabitants(), 50); +}); + +Deno.test("cas erreur ajout pays déjà existant", () => { + let variable = new DemographieMondiale(); + let paysTest2 = new Pays("Esperantie", 56, "EO"); + variable.setPays([paysTest2]); + assertThrows(() => variable.ajoutePays(paysTest2), "Ce pays est déjà présent dans la liste !"); +}); + +Deno.test("cas erreur retrait ou ajout habitants d'un pays pas dans liste", () => { + let variable = new DemographieMondiale(); + let paysTest2 = new Pays("Esperantie", 56, "EO"); + variable.setPays([paysTest2]); + assertThrows(() => variable.retrancheHabitants("PN", 4), "Pays non présent dans la liste !"); + assertThrows(() => variable.ajouteHabitants("PN", 4), "Pays non présent dans la liste !"); +}); \ No newline at end of file diff --git a/devoir qualdev 15-04-2024/test/pays.test.ts b/devoir qualdev 15-04-2024/test/pays.test.ts new file mode 100644 index 0000000..cdd816d --- /dev/null +++ b/devoir qualdev 15-04-2024/test/pays.test.ts @@ -0,0 +1,79 @@ +import { assertEquals } from "https://deno.land/std@0.220.0/assert/mod.ts"; +import { assertThrows } from "https://deno.land/std@0.220.0/assert/assert_throws.ts"; +import { Pays } from "../metier/pays.ts"; + +Deno.test("cas par defaut", () => { + let paysTest = new Pays(); + assertEquals(paysTest.getNom() , "France"); + assertEquals(paysTest.getNbHabitants() , 67); + assertEquals(paysTest.getCode() , "FR"); + assertEquals(paysTest.toString(), "France (FR), 67 millions d'habitants"); +}); + +Deno.test("cas pays fictif dans les paramètres", () => { + let paysTest = new Pays("Pangée", 45, "PN"); + assertEquals(paysTest.getNom() , "Pangée"); + assertEquals(paysTest.getNbHabitants() , 45); + assertEquals(paysTest.getCode() , "PN"); + assertEquals(paysTest.toString(), "Pangée (PN), 45 millions d'habitants"); +}); + + +Deno.test("cas pays fictif initialisé après création", () => { + let paysTest = new Pays(); + paysTest.setNom("Pangée"); + paysTest.setNbHabitants(45); + paysTest.setCode("PN"); + assertEquals(paysTest.getNom() , "Pangée"); + assertEquals(paysTest.getNbHabitants() , 45); + assertEquals(paysTest.getCode() , "PN"); + assertEquals(paysTest.toString(), "Pangée (PN), 45 millions d'habitants"); +}); + +Deno.test("cas ajout d'habitants après création pays fictif", () => { + let paysTest = new Pays("Pangée", 45, "PN"); + paysTest.ajouteHabitants(45); + assertEquals(paysTest.getNbHabitants() , 90); +}); + +Deno.test("cas supression d'habitants après création pays fictif", () => { + let paysTest = new Pays("Pangée", 45, "PN"); + paysTest.supprimeHabitants(25); + assertEquals(paysTest.getNbHabitants() , 20); +}); + +Deno.test("cas erreur nom pays de moins de 3 lettres", () => { + let paysTest = new Pays(); + assertThrows(() => paysTest.setNom("ah"), "Le nom du pays doit avoir au moins 3 lettres."); +}); + +Deno.test("cas erreur nombres habitants négatif", () => { + let paysTest = new Pays(); + assertThrows(() => paysTest.setNbHabitants(-5), "Le nombre de millions d'habitants doit être positif !"); +}); + +Deno.test("cas erreur code d'une logueur différente de 2", () => { + let paysTest = new Pays(); + assertThrows(() => paysTest.setCode("A"), "Le code pays doit faire 2 caractères !"); + assertThrows(() => paysTest.setCode("ABC"), "Le code pays doit faire 2 caractères !"); +}); + +Deno.test("cas erreur ajout nb habitants négatifs", () => { + let paysTest = new Pays("Pangée", 45, "PN"); + assertThrows(() => paysTest.ajouteHabitants(-1), "Le nombre à ajouter doit être positif !"); +}); + +Deno.test("cas erreur suppression nb habitants négatifs", () => { + let paysTest = new Pays("Pangée", 45, "PN"); + assertThrows(() => paysTest.supprimeHabitants(-1), "Le nombre à retrancher doit être positif !"); +}); + +Deno.test("cas erreur suppression nb habitants positif mais > aux nb actuel", () => { + let paysTest = new Pays("Pangée", 45, "PN"); + assertThrows(() => paysTest.supprimeHabitants(50), "Pas assez d'habitants dans ce pays!"); +}); + +/* + + variable.retrancheHabitants("EO", 50) + assertThrows(() => variable.getPays()[0].getNbHabitants(), 0);*/ \ No newline at end of file -- GitLab