diff --git a/SAE/sae b/SAE/sae
new file mode 160000
index 0000000000000000000000000000000000000000..e796556a52454114b55d1d4f244e7bbda8394db4
--- /dev/null
+++ b/SAE/sae
@@ -0,0 +1 @@
+Subproject commit e796556a52454114b55d1d4f244e7bbda8394db4
diff --git a/deno.lock b/deno.lock
new file mode 100644
index 0000000000000000000000000000000000000000..04a47e6cf035a8715889c90479017c6101902c6d
--- /dev/null
+++ b/deno.lock
@@ -0,0 +1,24 @@
+{
+  "version": "4",
+  "specifiers": {
+    "jsr:@std/assert@*": "1.0.12",
+    "jsr:@std/assert@^1.0.12": "1.0.12",
+    "jsr:@std/internal@^1.0.6": "1.0.6"
+  },
+  "jsr": {
+    "@std/assert@1.0.12": {
+      "integrity": "08009f0926dda9cbd8bef3a35d3b6a4b964b0ab5c3e140a4e0351fbf34af5b9a",
+      "dependencies": [
+        "jsr:@std/internal"
+      ]
+    },
+    "@std/internal@1.0.6": {
+      "integrity": "9533b128f230f73bd209408bb07a4b12f8d4255ab2a4d22a1fd6d87304aca9a4"
+    }
+  },
+  "workspace": {
+    "dependencies": [
+      "jsr:@std/assert@^1.0.12"
+    ]
+  }
+}
diff --git a/qualdev/qualdev/Point.ts b/qualdev/qualdev/Point.ts
new file mode 100644
index 0000000000000000000000000000000000000000..889f3e8f4e26863d1a0d8ebc2ef61ea7cbbb40f9
--- /dev/null
+++ b/qualdev/qualdev/Point.ts
@@ -0,0 +1,35 @@
+export class Point {
+  private _x: number;
+  private _y: number;
+
+  constructor(x = 0, y = 0) {
+    this._x = x;
+    this._y = y;
+  }
+
+  get x(): number {
+    return this._x;
+  }
+
+  set x(value : number) {
+    this._x = value;
+  }
+
+  get y(): number {
+    return this._y;
+  }
+
+  set y(value : number) {
+    this._y = value;
+  }
+
+  deplacer(x: number, y: number): void {
+    this._x += x;
+    this._y += y;
+  }
+
+  public distance(p: Point): number {
+    return Math.sqrt((this._x - p._x) ** 2 + (this._y - p._y) ** 2);
+  }
+
+}
diff --git a/qualdev/qualdev/Test/Point.test.ts b/qualdev/qualdev/Test/Point.test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fd981406d4b7045af0309174e49c56a8ab0fd669
--- /dev/null
+++ b/qualdev/qualdev/Test/Point.test.ts
@@ -0,0 +1,8 @@
+import { Point } from "../Point.ts";
+import { assertEquals } from "jsr:@std/assert/equals";
+
+Deno.test("constructeur par défaut", () => {
+  const p = new Point();
+  assertEquals(p.x, 0);
+  assertEquals(p.y, 0);
+});
diff --git a/qualdev/qualdev/Test/deno.json b/qualdev/qualdev/Test/deno.json
new file mode 100644
index 0000000000000000000000000000000000000000..6dffbccf75a0e8cc66c21227bd84ae95c1d18ed9
--- /dev/null
+++ b/qualdev/qualdev/Test/deno.json
@@ -0,0 +1,5 @@
+{
+  "imports": {
+    "@std/assert": "jsr:@std/assert@^1.0.12"
+  }
+}
diff --git a/qualdev/qualdev/Test/deno.lock b/qualdev/qualdev/Test/deno.lock
new file mode 100644
index 0000000000000000000000000000000000000000..04a47e6cf035a8715889c90479017c6101902c6d
--- /dev/null
+++ b/qualdev/qualdev/Test/deno.lock
@@ -0,0 +1,24 @@
+{
+  "version": "4",
+  "specifiers": {
+    "jsr:@std/assert@*": "1.0.12",
+    "jsr:@std/assert@^1.0.12": "1.0.12",
+    "jsr:@std/internal@^1.0.6": "1.0.6"
+  },
+  "jsr": {
+    "@std/assert@1.0.12": {
+      "integrity": "08009f0926dda9cbd8bef3a35d3b6a4b964b0ab5c3e140a4e0351fbf34af5b9a",
+      "dependencies": [
+        "jsr:@std/internal"
+      ]
+    },
+    "@std/internal@1.0.6": {
+      "integrity": "9533b128f230f73bd209408bb07a4b12f8d4255ab2a4d22a1fd6d87304aca9a4"
+    }
+  },
+  "workspace": {
+    "dependencies": [
+      "jsr:@std/assert@^1.0.12"
+    ]
+  }
+}
diff --git a/qualdev/qualdev/Test/mesMaths.test.ts b/qualdev/qualdev/Test/mesMaths.test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..30a9b508b7a3d73d21db91ea19d1dbb5b2f2da46
--- /dev/null
+++ b/qualdev/qualdev/Test/mesMaths.test.ts
@@ -0,0 +1,12 @@
+import { multAdd } from "../mesMaths.ts";
+import { assertEquals } from "jsr:@std/assert/equals";
+
+Deno.test("cas général", () => {
+  assertEquals(multAdd(3, 8), 24);
+});
+Deno.test("multiplication par 0", () => {
+  assertEquals(multAdd(3, 0), 0);
+});
+Deno.test("multiplication par un nombre négatif", () => {
+  assertEquals(multAdd(3, -8), -24);
+});
diff --git a/qualdev/qualdev/Test/puissanceMult.test.ts b/qualdev/qualdev/Test/puissanceMult.test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cf1dccb71f416931239ea1493bc34b121d990849
--- /dev/null
+++ b/qualdev/qualdev/Test/puissanceMult.test.ts
@@ -0,0 +1,9 @@
+import { ErreurPuissanceMult, puissanceMult } from "../mesMaths.ts";
+import { assertEquals } from "jsr:@std/assert/equals";
+import { assertThrows } from "jsr:@std/assert/throws";
+
+Deno.test("cas général", () => assertEquals(puissanceMult(3, 2), 9));
+Deno.test("cas si x négatif", () => assertEquals(puissanceMult(-3, 2), 9));
+Deno.test("cas si y négatif", () => assertThrows(()=>{puissanceMult(3,-3)},ErreurPuissanceMult,"y ne peut pas etre négatif"));
+Deno.test("cas si deux nombres négatifs", () =>  assertThrows(()=>{puissanceMult(-3,-3)},ErreurPuissanceMult,"y ne peut pas etre négatif"));
+Deno.test("cas si nombre nul", () => assertEquals(puissanceMult(-1, 0), 1));
diff --git a/qualdev/qualdev/ex1/FizzBuzzle.ts b/qualdev/qualdev/ex1/FizzBuzzle.ts
new file mode 100644
index 0000000000000000000000000000000000000000..11ad25ca958bbb92b77d617ad4a845f0a6e24d3e
--- /dev/null
+++ b/qualdev/qualdev/ex1/FizzBuzzle.ts
@@ -0,0 +1,17 @@
+export function getFizzBuzzle(i: number) {
+    if ((i % 3 === 0) && (i % 5 === 0)) {
+        return "FizzBuzzle";
+    } else if (i % 3 === 0) {
+        return "Fizz";
+    } else if (i % 5 === 0) {
+        return "Buzzle";
+    } else {
+        return i;
+    }
+}
+
+export function fizzBuzzle(n: number): void {
+    for (let i = 1; i <= n; i++) {
+        console.log(getFizzBuzzle(i));
+    }
+}
diff --git a/qualdev/qualdev/ex1/Test/FizzBuzzle.test.ts b/qualdev/qualdev/ex1/Test/FizzBuzzle.test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2cab93de820b41426193eebfd867307901485124
--- /dev/null
+++ b/qualdev/qualdev/ex1/Test/FizzBuzzle.test.ts
@@ -0,0 +1,14 @@
+import { getFizzBuzzle } from "../FizzBuzzle.ts";
+import { assertEquals } from "jsr:@std/assert/equals";
+Deno.test("Cas si i est un multiple de 3", () => {
+  assertEquals(getFizzBuzzle(6), "Fizz");
+});
+Deno.test("Cas si i est un multiple de 3", () => {
+  assertEquals(getFizzBuzzle(10), "Buzzle");
+});
+Deno.test("Cas si i est un multiple de 3 et 5", () => {
+  assertEquals(getFizzBuzzle(15), "FizzBuzzle");
+});
+Deno.test("Cas si i n'est pas un multiple de 3 et 5", () => {
+  assertEquals(getFizzBuzzle(11), 11);
+});
diff --git a/qualdev/qualdev/ex2/FizzBuzzleSpoutnik.ts b/qualdev/qualdev/ex2/FizzBuzzleSpoutnik.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4c33d39b74eb202cace1d91ab41a599b3361f06e
--- /dev/null
+++ b/qualdev/qualdev/ex2/FizzBuzzleSpoutnik.ts
@@ -0,0 +1,25 @@
+export function getFizzBuzzleSpoutnik(i: number) {
+    if ((i % 3 === 0) && (i % 5 === 0) && (i % 4 === 0)) {
+        return "FizzBuzzleSpoutnik";
+    } else if ((i % 3 === 0) && (i % 4 === 0)) {
+        return "FizzSpoutnik";
+    } else if ((i % 3 === 0) && (i % 5 === 0)) {
+        return "FizzBuzzle";
+    } else if ((i % 4 === 0) && (i % 5 === 0)) {
+        return "BuzzleSpoutnik";
+    } else if (i % 3 === 0) {
+        return "Fizz";
+    } else if (i % 5 === 0) {
+        return "Buzzle";
+    } else if (i % 4 === 0) {
+        return "Spoutnik";
+    } else {
+        return i;
+    }
+}
+
+export function fizzBuzzleSpoutnik(n: number): void {
+    for (let i = 1; i <= n; i++) {
+        console.log(getFizzBuzzleSpoutnik(i));
+    }
+}
diff --git a/qualdev/qualdev/ex2/Test/FizzBuzzleSpoutnik.test.ts b/qualdev/qualdev/ex2/Test/FizzBuzzleSpoutnik.test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d95861350bddfe2bffed842a4d339c7ff5fe7f58
--- /dev/null
+++ b/qualdev/qualdev/ex2/Test/FizzBuzzleSpoutnik.test.ts
@@ -0,0 +1,23 @@
+import { getFizzBuzzleSpoutnik } from "../FizzBuzzleSpoutnik.ts";
+import { assertEquals } from "jsr:@std/assert/equals";
+Deno.test("Cas si i est un multiple de 3", () => {
+  assertEquals(getFizzBuzzleSpoutnik(6), "Fizz");
+});
+Deno.test("Cas si i est un multiple de 3", () => {
+  assertEquals(getFizzBuzzleSpoutnik(10), "Buzzle");
+});
+Deno.test("Cas si i est un multiple de 3 et 5", () => {
+  assertEquals(getFizzBuzzleSpoutnik(15), "FizzBuzzle");
+});
+Deno.test("Cas si i n'est pas un multiple de 3 et 5", () => {
+  assertEquals(getFizzBuzzleSpoutnik(11), 11);
+});
+Deno.test("Cas si i n'est pas un multiple de 3, 4 et 5", () => {
+  assertEquals(getFizzBuzzleSpoutnik(120), "FizzBuzzleSpoutnik");
+});
+Deno.test("Cas si i n'est pas un multiple de 3 et 4", () => {
+  assertEquals(getFizzBuzzleSpoutnik(24), "FizzSpoutnik");
+});
+Deno.test("Cas si i n'est pas un multiple de 4 et 5", () => {
+  assertEquals(getFizzBuzzleSpoutnik(40), "BuzzleSpoutnik");
+});
diff --git a/qualdev/qualdev/math.ts b/qualdev/qualdev/math.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/qualdev/qualdev/mesMaths.ts b/qualdev/qualdev/mesMaths.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ee535bcda9c02c79d751945c3bb8335a5efb0f11
--- /dev/null
+++ b/qualdev/qualdev/mesMaths.ts
@@ -0,0 +1,47 @@
+export function multAdd(x: number, y: number): number {
+  let resultat = 0;
+  if (x < 0 && y > 0) {
+    x = -x;
+    for (let i = 0; i < y; i++) {
+      resultat += x;
+    }
+    return -resultat;
+  }
+  if (x > 0 && y < 0) {
+    y = -y;
+    for (let i = 0; i < y; i++) {
+      resultat += x;
+    }
+    return -resultat;
+  }
+  if (x < 0 && y < 0) {
+    x = -x;
+    y = -y;
+    for (let i = 0; i < y; i++) {
+      resultat += x;
+    }
+    return resultat;
+  }
+  for (let i = 0; i < y; i++) {
+    resultat += x;
+  }
+  return resultat;
+}
+
+export class ErreurPuissanceMult extends Error {
+  constructor(msg: string){
+    super(msg);
+    this.name = "ErreurPuissanceMult";
+  }
+}
+
+export function puissanceMult(x: number, y: number): number {
+  if (y < 0){
+    throw new ErreurPuissanceMult("y ne peut pas etre négatif")
+  }
+  let val = 1;
+  for (let i = 0; i < y; i++) {
+    val *= x;
+  }
+  return val;
+}
diff --git a/qualdev/qualdev/test.ts b/qualdev/qualdev/test.ts
deleted file mode 100644
index a65ab5742c62c2782e02118b93b160bf4fdc6b12..0000000000000000000000000000000000000000
--- a/qualdev/qualdev/test.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-console.log("1");
-console.log("2");
\ No newline at end of file