diff --git a/spec/param.spec.ts b/spec/param.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2f54abc7fe29e21cbf1747983dfa94b2b093e496
--- /dev/null
+++ b/spec/param.spec.ts
@@ -0,0 +1,140 @@
+/// <reference path="../node_modules/@types/jasmine/index.d.ts" />
+
+import { ParamDefinition, ParamDomain, ParamDomainValue } from "../src/param";
+import { MessageCode, Message } from "../src/util/message";
+
+describe('Class ParamDomain : ', () => {
+    function shouldFail(f: () => void, min: number = undefined, max: number = undefined) {
+        try {
+            f();
+            fail();
+        }
+        catch (e) {
+            expect(e instanceof Message).toBeTruthy();
+            expect(e.code).toEqual(MessageCode.ERROR_PARAMDOMAIN_INTERVAL_BOUNDS);
+            expect(e.extraVar["minValue"] == min).toBeTruthy();
+            expect(e.extraVar["maxValue"] == max).toBeTruthy();
+        }
+    }
+
+    it('test 1', () => {
+        let d = new ParamDomain(ParamDomainValue.ANY);
+        d = new ParamDomain(ParamDomainValue.INTERVAL, 0, 1);
+        d = new ParamDomain(ParamDomainValue.NOT_NULL);
+        d = new ParamDomain(ParamDomainValue.POS);
+        d = new ParamDomain(ParamDomainValue.POS_NULL);
+    });
+
+    it('test 2', () => {
+        shouldFail(() => {
+            const d = new ParamDomain(ParamDomainValue.ANY, 0, 1);
+        }, 0, 1);
+    });
+
+    it('test 3', () => {
+        shouldFail(() => {
+            const d = new ParamDomain(ParamDomainValue.ANY, 0, undefined);
+        }, 0);
+    });
+
+    it('test 4', () => {
+        shouldFail(() => {
+            const d = new ParamDomain(ParamDomainValue.INTERVAL);
+        });
+    });
+
+    it('test 5', () => {
+        shouldFail(() => {
+            const d = new ParamDomain(ParamDomainValue.INTERVAL, 1, 0);
+        }, 1, 0);
+    });
+});
+
+describe('Class ParamDefinition : ', () => {
+    function shouldFail(f: () => void, code: MessageCode) {
+        try {
+            f();
+            fail();
+        }
+        catch (e) {
+            expect(e instanceof Message).toBeTruthy();
+            expect(e.code).toEqual(code);
+        }
+    }
+
+    describe('Domaine de définition : POS : ', () => {
+        it('test 1', () => {
+            let p = new ParamDefinition(undefined, "a", ParamDomainValue.POS, 1e-8);
+            p = new ParamDefinition(undefined, "a", ParamDomainValue.POS, 10);
+        });
+
+        it('test 2', () => {
+            shouldFail(() => {
+                const p = new ParamDefinition(undefined, "a", ParamDomainValue.POS, 0);
+            }, MessageCode.ERROR_PARAMDEF_VALUE_POS);
+        });
+
+        it('test 3', () => {
+            shouldFail(() => {
+                const p = new ParamDefinition(undefined, "a", ParamDomainValue.POS, -1);
+            }, MessageCode.ERROR_PARAMDEF_VALUE_POS);
+        });
+    });
+
+    describe('Domaine de définition : POS_NULL : ', () => {
+        it('test 1', () => {
+            let p = new ParamDefinition(undefined, "a", ParamDomainValue.POS_NULL, 0);
+            p = new ParamDefinition(undefined, "a", ParamDomainValue.POS_NULL, 10);
+        });
+
+        it('test 2', () => {
+            shouldFail(() => {
+                const p = new ParamDefinition(undefined, "a", ParamDomainValue.POS_NULL, -1);
+            }, MessageCode.ERROR_PARAMDEF_VALUE_POSNULL);
+        });
+    });
+
+    describe('Domaine de définition : NOT_NULL : ', () => {
+        it('test 1', () => {
+            let p = new ParamDefinition(undefined, "a", ParamDomainValue.NOT_NULL, -1);
+            p = new ParamDefinition(undefined, "a", ParamDomainValue.NOT_NULL, 1);
+        });
+
+        it('test 2', () => {
+            shouldFail(() => {
+                const p = new ParamDefinition(undefined, "a", ParamDomainValue.NOT_NULL, 0);
+            }, MessageCode.ERROR_PARAMDEF_VALUE_NULL);
+        });
+    });
+
+    describe('Domaine de définition : ANY : ', () => {
+        it('test 1', () => {
+            let p = new ParamDefinition(undefined, "a", ParamDomainValue.ANY, -1);
+            p = new ParamDefinition(undefined, "a", ParamDomainValue.ANY, 0);
+            p = new ParamDefinition(undefined, "a", ParamDomainValue.ANY, 1);
+        });
+    });
+
+    describe('Domaine de définition : INTERVAL : ', () => {
+        it('test 1', () => {
+            let d = new ParamDomain(ParamDomainValue.INTERVAL, 0, 10)
+            let p = new ParamDefinition(undefined, "a", d, 0);
+            p = new ParamDefinition(undefined, "a", d, 1);
+            p = new ParamDefinition(undefined, "a", d, 10);
+        });
+
+        it('test 2', () => {
+            shouldFail(() => {
+                let d = new ParamDomain(ParamDomainValue.INTERVAL, 0, 10)
+                let p = new ParamDefinition(undefined, "a", d, -1e-8);
+            }, MessageCode.ERROR_PARAMDEF_VALUE_INTERVAL);
+        });
+
+        it('test 3', () => {
+            shouldFail(() => {
+                let d = new ParamDomain(ParamDomainValue.INTERVAL, 0, 10)
+                let p = new ParamDefinition(undefined, "a", d, 10 + 1e-8);
+            }, MessageCode.ERROR_PARAMDEF_VALUE_INTERVAL);
+        });
+    });
+});