diff --git a/info4/kapitel-8/Interpreter/test_while_interpreter.py b/info4/kapitel-8/Interpreter/test_while_interpreter.py
index 5f9913f41ba283b75e14f21a1f4fe14ca066490b..cae730e4a89927db053ab063711ef7309d834362 100644
--- a/info4/kapitel-8/Interpreter/test_while_interpreter.py
+++ b/info4/kapitel-8/Interpreter/test_while_interpreter.py
@@ -1,22 +1,111 @@
 from whileinterpreter import interpret
 from test_loop_interpreter import LOOPInterpreterTest
-import unittest
 
 
 class WHILEInterpreterTest(LOOPInterpreterTest):
+    def test_while_assignment(self):
+        self.assertEqual(interpret('x1:=1;\n WHILE x1!=0 DO\n x0:=1;\n x1:=x1-1 END'), 1)
+        self.assertEqual(interpret('x1:=3; WHILE x1/=0 DO x0:=x0+1; x1:=x1-1 END'), 3)
+
+    def test_while_empty_assignment(self):
+        self.assertEqual(interpret('WHILE x1 != 0 DO x0:=2; x1:=x1-1 END'), 0)
+        self.assertEqual(interpret('WHILE x1 /= 0 DO x0:=1 END'), 0)
+        self.assertEqual(interpret('WHILE x1!=0 DO LOOP x2 DO x0:=3 END END'), 0)
+
+    def test_while_nested_assignment(self):
+        self.assertEqual(interpret('x1:=2; WHILE x1!=0 DO  x2:=3;' +
+                                   'WHILE x2/=0 DO x0:=x0+1; x2:=x2-1 END; x1:=x1-1 END'), 6)
+        self.assertEqual(interpret('x1:=10; WHILE x1!=0 DO LOOP x1 DO x0:=x0+1 END; x1:=x1-1 END'), 55)
+
+    def test_while_nested_empty_assignment(self):
+        self.assertEqual(interpret('WHILE x1!=0 DO  x2:=3;' +
+                                   'WHILE x2/=0 DO x0:=x0+1; x2:=x2-1 END; x1:=x1-1 END'), 0)
+        self.assertEqual(interpret('WHILE x1!=0 DO LOOP x1 DO x0:=x0+1 END; x1:=x1-1 END'), 0)
+
     def test_while_forbidden_identifier(self):
         with self.assertRaises(SyntaxError):
-            interpret("LOOP x1 DO WHILE x1 != 0 DO x0:=x0+1 END END ")
+            interpret('LOOP x1 DO WHILE x1 != 0 DO x0:=x0+1 END END ')
+        with self.assertRaises(SyntaxError):
+            interpret('LOOP x1 DO WHILE x2 != 0 DO x1:=x0+1 END END ')
+        with self.assertRaises(SyntaxError):
+            interpret('LOOP x1 DO WHILE x3 != 0 DO x0:=x1+1 END END ')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:=2; LOOP x1 DO WHILE x1 != 0 DO x0:=x0+1 END END ')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:=3; x2:=3; LOOP x1 DO WHILE x2 != 0 DO x1:=x0+1 END END ')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:=2; x2:=4; LOOP x1 DO WHILE x2 != 0 DO x0:=x1+1 END END ')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:=3; LOOP x1 DO WHILE x2 != 0 DO x1:=x0+1 END END ')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:=2; LOOP x1 DO WHILE x2 != 0 DO x0:=x1+1 END END ')
 
-    def test_while(self):
-        self.assertEqual(interpret('x1:=1; WHILE x1 != 0 DO x0:=2; x1:=x1-1 END'), 2)
-        self.assertEqual(interpret('WHILE x1 /= 0 DO x0:=1 END'), 0)
-        self.assertEqual(interpret('WHILE x1 /= 0 DO WHILE x1 /= 0 DO x0:=2 END END'), 0)
+    def test_while_wrong_syntax(self):
+        with self.assertRaises(SyntaxError):
+            interpret('x1:= 1; WHILE x1 /= 1 DO x0:=2 END')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:= 2; WHILE x1 /= 1 DO x0:=2 END')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:= 1; WHILE x1 /= 0 DO WHILE x1 /= 1 DO x0:=2 END END')
+        with self.assertRaises(SyntaxError):
+            interpret('WHILE false DO x2:=2 END')
+        with self.assertRaises(SyntaxError):
+            interpret('WHILE x1>0 DO x1:=x1-1 END')
+        with self.assertRaises(SyntaxError):
+            interpret('WHILE 3>0 DO x0:=2 END')
 
-    def test_while_non_zero(self):
+    def test_syntax_missing_semicolon_while(self):
+        with self.assertRaises(SyntaxError):
+            interpret('x0:=2 WHILE x0!=0 DO x1:=x1+1 END')
+        with self.assertRaises(SyntaxError):
+            interpret('WHILE x0/= DO x1:=x1+1 x1:=x1+1 END')
+        with self.assertRaises(SyntaxError):
+            interpret('WHILE x0/=0 DO x1:=x1+1 x1:=x1+1 END')
         with self.assertRaises(SyntaxError):
-            interpret("x1:= 1; WHILE x1 /= 1 DO x0:=2 END")
+            interpret('x0:=2; WHILE x0/=0 DO x1:=x1+1 x1:=x1+1 END')
+        with self.assertRaises(SyntaxError):
+            interpret('WHILE x0/=0 DO x1:=x1+1 END x0:=x1+0')
+        with self.assertRaises(SyntaxError):
+            interpret('x0:=2; WHILE x0!=0 DO x1:=x1+1; x0=x0-1 END x0:=x1+0')
+        with self.assertRaises(SyntaxError):
+            interpret('LOOP x0 DO WHILE x1!=0 DO x2:=2 x1:=0 END')
+
+    def test_syntax_missing_identifier_while(self):
+        with self.assertRaises(SyntaxError):
+            interpret('LOOP x1 DO WHILE /= 0 DO x0:=x0+2 END')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:=2; LOOP x1 DO WHILE /= 0 DO x0:=x0+2 END')
+
+    def test_syntax_missing_unequal_while(self):
+        with self.assertRaises(SyntaxError):
+            interpret('LOOP x1 DO WHILE x2 0 DO x0:=x0+2 END END')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:=2; LOOP x1 DO WHILE x2 0 DO x0:=x0+2 END END')
+
+    def test_syntax_missing_zero_while(self):
+        with self.assertRaises(SyntaxError):
+            interpret('LOOP x1 DO WHILE x2 != DO x0:=x0+2 END END')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:=2; LOOP x1 DO WHILE x2 /= DO x0:=x0+2 END END')
+
+    def test_syntax_wrong_number_while(self):
+        with self.assertRaises(SyntaxError):
+            interpret('LOOP x1 DO WHILE x2 /= 1 DO x0:=x0+2 END END')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:=2; LOOP x1 DO WHILE x2 /= 3 DO x0:=x0+2 END END')
+
+    def test_syntax_missing_do_while(self):
+        with self.assertRaises(SyntaxError):
+            interpret('LOOP x1 DO WHILE x2 != 0 x0:=x0+2 END END')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:=2; LOOP x1 DO WHILE x2 /= 0 x0:=x0+2 END END')
+        with self.assertRaises(SyntaxError):
+            interpret('WHILE x1 != 0 x2:=2 END')
+        with self.assertRaises(SyntaxError):
+            interpret('x1:= 2; WHILE x1 != 0 x2:=2 END')
+
+    def test_syntax_unnecessary_semicolon_while(self):
         with self.assertRaises(SyntaxError):
-            interpret("x1:= 2; WHILE x1 /= 1 DO x0:=2 END")
+            interpret('x1:=2;; x0:=3')
         with self.assertRaises(SyntaxError):
-            interpret("x1:= 1; WHILE x1 /= 0 DO WHILE x1 /= 1 DO x0:=2 END END")
+            interpret('WHILE x1 != 0 DO x0:=2;;x2:=1 END')