From c8790a2d4bb922d6f1461e2c09b0a190bbf57bdd Mon Sep 17 00:00:00 2001
From: muoimeo <bvnminh6a01@gmail.com>
Date: Fri, 21 Mar 2025 11:39:57 +0700
Subject: [PATCH] Add lab 11 works

---
 lab11/my_sum.py                       |  15 ++++
 lab11/ptest/__MACOSX/._uwe_logo.png   | Bin 0 -> 176 bytes
 lab11/ptest/piltest.py                |  28 ++++++++
 lab11/ptest/uwe_logo.png              | Bin 0 -> 23761 bytes
 lab11/study_unittest/basic.ipynb      |  82 +++++++++++++++++++++
 lab11/study_unittest/inc_dec.py       |   5 ++
 lab11/study_unittest/test_unittest.py |  13 ++++
 lab11/test_my_sum.py                  |  98 ++++++++++++++++++++++++++
 8 files changed, 241 insertions(+)
 create mode 100644 lab11/my_sum.py
 create mode 100644 lab11/ptest/__MACOSX/._uwe_logo.png
 create mode 100644 lab11/ptest/piltest.py
 create mode 100644 lab11/ptest/uwe_logo.png
 create mode 100644 lab11/study_unittest/basic.ipynb
 create mode 100644 lab11/study_unittest/inc_dec.py
 create mode 100644 lab11/study_unittest/test_unittest.py
 create mode 100644 lab11/test_my_sum.py

diff --git a/lab11/my_sum.py b/lab11/my_sum.py
new file mode 100644
index 0000000..44cfd36
--- /dev/null
+++ b/lab11/my_sum.py
@@ -0,0 +1,15 @@
+class Calculate:
+
+    def sum(self, a, b):
+        return a + b
+
+    def multiply(self, a, b):
+        return a * b
+
+    def subtract(self, a, b):
+        return a - b
+
+    def divide(self, a, b):
+        if b == 0:
+            raise ValueError("Division by zero is not allowed")
+        return a / b
diff --git a/lab11/ptest/__MACOSX/._uwe_logo.png b/lab11/ptest/__MACOSX/._uwe_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..0ea62ea99b4fc0b23d2f9b41a3db4fdf23cb5d24
GIT binary patch
literal 176
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3Cj$e65d#B59RmZHzkz{)f#E+CfY{ivV@OC4
zR0gDD1_J|w1e6b>7#SECpyHy*`MG+D1qC^&dWEHlMTvPOnR%%Uh57~t7KYYlrl!dj
QNvY=6&KX7dxvAC+04rM_%m4rY

literal 0
HcmV?d00001

diff --git a/lab11/ptest/piltest.py b/lab11/ptest/piltest.py
new file mode 100644
index 0000000..8ed7876
--- /dev/null
+++ b/lab11/ptest/piltest.py
@@ -0,0 +1,28 @@
+# This program will test the installation of tkinter/PIL 
+# If you see a UWE logo and a button then it is working
+
+# Use this to test the setup on any machnes you will be using for ASD development
+
+import tkinter as tk
+import tkinter.messagebox as tkm
+from PIL import ImageTk, Image
+
+window = tk.Tk()
+
+def buttonPressed():
+    tkm.showinfo("Alert!","Hooray!")
+    
+label = tk.Label(text="If you see the UWE logo below PIL is working!");
+label.pack()
+
+button = tk.Button(master=window, text="OK",command=buttonPressed)
+button.pack()
+
+c = tk.Canvas(master=window,bg="red",width=700, height=350)
+
+# Use an absolute path to the image file
+im = tk.PhotoImage(file = r"d:\UWE\2nd Year\2nd semester\Advanced Software Dev\twinkter lab\lab11\ptest\uwe_logo.png") 
+image = c.create_image(0, 0,anchor="nw", image=im)
+
+c.pack()
+window.mainloop()
\ No newline at end of file
diff --git a/lab11/ptest/uwe_logo.png b/lab11/ptest/uwe_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..a22d6bd7de2df56f91992284bee6d9a7770460d3
GIT binary patch
literal 23761
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
KKbLh*2~7Y`ipY-u

literal 0
HcmV?d00001

diff --git a/lab11/study_unittest/basic.ipynb b/lab11/study_unittest/basic.ipynb
new file mode 100644
index 0000000..aa59a16
--- /dev/null
+++ b/lab11/study_unittest/basic.ipynb
@@ -0,0 +1,82 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Everything passed\n"
+     ]
+    }
+   ],
+   "source": [
+    "# test_sum_list\n",
+    "\n",
+    "def test_sum():\n",
+    "    assert sum([1, 2, 3]) == 6, \"Should be 6\"\n",
+    "\n",
+    "if __name__ == \"__main__\":\n",
+    "    test_sum()\n",
+    "    print(\"Everything passed\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "AssertionError",
+     "evalue": "Should be 6",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[1;31mAssertionError\u001b[0m                            Traceback (most recent call last)",
+      "Cell \u001b[1;32mIn[2], line 11\u001b[0m\n\u001b[0;32m      9\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;18m__name__\u001b[39m \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m__main__\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m     10\u001b[0m     test_sum()\n\u001b[1;32m---> 11\u001b[0m     \u001b[43mtest_sum_tuple\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     12\u001b[0m     \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mEverything passed\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
+      "Cell \u001b[1;32mIn[2], line 7\u001b[0m, in \u001b[0;36mtest_sum_tuple\u001b[1;34m()\u001b[0m\n\u001b[0;32m      6\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtest_sum_tuple\u001b[39m():\n\u001b[1;32m----> 7\u001b[0m     \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28msum\u001b[39m((\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m, \u001b[38;5;241m2\u001b[39m)) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m6\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mShould be 6\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
+      "\u001b[1;31mAssertionError\u001b[0m: Should be 6"
+     ]
+    }
+   ],
+   "source": [
+    "# test_sum_tuple\n",
+    "\n",
+    "def test_sum():\n",
+    "    assert sum([1, 2, 3]) == 6, \"Should be 6\"\n",
+    "\n",
+    "def test_sum_tuple():\n",
+    "    assert sum((1, 2, 2)) == 6, \"Should be 6\"\n",
+    "\n",
+    "if __name__ == \"__main__\":\n",
+    "    test_sum()\n",
+    "    test_sum_tuple()\n",
+    "    print(\"Everything passed\")"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.11.5"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/lab11/study_unittest/inc_dec.py b/lab11/study_unittest/inc_dec.py
new file mode 100644
index 0000000..d7c396c
--- /dev/null
+++ b/lab11/study_unittest/inc_dec.py
@@ -0,0 +1,5 @@
+def increment(x):
+    return x + 1
+
+def decrement(x):
+    return x - 1
diff --git a/lab11/study_unittest/test_unittest.py b/lab11/study_unittest/test_unittest.py
new file mode 100644
index 0000000..c09d62e
--- /dev/null
+++ b/lab11/study_unittest/test_unittest.py
@@ -0,0 +1,13 @@
+import inc_dec    # The code to test
+import unittest   # The test framework
+
+class Test_TestIncrementDecrement(unittest.TestCase):
+    def test_increment(self):
+        self.assertEqual(inc_dec.increment(3), 4)
+
+    # This test is designed to fail for demonstration purposes.
+    def test_decrement(self):
+        self.assertEqual(inc_dec.decrement(3), 4)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/lab11/test_my_sum.py b/lab11/test_my_sum.py
new file mode 100644
index 0000000..79c5092
--- /dev/null
+++ b/lab11/test_my_sum.py
@@ -0,0 +1,98 @@
+import unittest
+from my_sum import Calculate
+
+class TestCalculate(unittest.TestCase):
+    def setUp(self):
+        self.calc = Calculate()  # Create instance
+    
+    # 5 Correct Expected Values
+    def test_sum_positive(self):
+        """Test sum with two positive numbers"""
+        self.assertEqual(self.calc.sum(3, 4), 7)
+    
+    def test_sum_negative(self):
+        """Test sum with two negative numbers"""
+        self.assertEqual(self.calc.sum(-2, -3), -5)
+    
+    def test_sum_mixed(self):
+        """Test sum with positive and negative numbers"""
+        self.assertEqual(self.calc.sum(5, -2), 3)
+    
+    def test_multiply_positive(self):
+        """Test multiply with two positive numbers"""
+        self.assertEqual(self.calc.multiply(2, 3), 6)
+    
+    def test_multiply_negative(self):
+        """Test multiply with positive and negative numbers"""
+        self.assertEqual(self.calc.multiply(4, -2), -8)
+    
+    # 5 Incorrect Expected Values
+    def test_sum_wrong_positive(self):
+        """Test sum with incorrect positive result"""
+        self.assertEqual(self.calc.sum(3, 4), 8)  # Should be 7
+    
+    def test_sum_wrong_negative(self):
+        """Test sum with incorrect negative result"""
+        self.assertEqual(self.calc.sum(-2, -3), -4)  # Should be -5
+    
+    def test_sum_wrong_zero(self):
+        """Test sum with incorrect zero result"""
+        self.assertEqual(self.calc.sum(5, -5), 1)  # Should be 0
+    
+    def test_multiply_wrong_positive(self):
+        """Test multiply with incorrect positive result"""
+        self.assertEqual(self.calc.multiply(2, 3), 5)  # Should be 6
+    
+    def test_multiply_wrong_negative(self):
+        """Test multiply with incorrect negative result"""
+        self.assertEqual(self.calc.multiply(4, -2), -7)  # Should be -8
+
+    # Tests for subtract()
+    def test_subtract_positive_integers(self):
+        """Test subtract with positive integers"""
+        self.assertEqual(self.calc.subtract(5, 3), 2)
+
+    def test_subtract_negative_integers(self):
+        """Test subtract with negative integers"""
+        self.assertEqual(self.calc.subtract(-5, -2), -3)
+
+    def test_subtract_mixed(self):
+        """Test subtract with positive and negative integers"""
+        self.assertEqual(self.calc.subtract(5, -2), 7)
+
+    def test_subtract_floats(self):
+        """Test subtract with floating-point numbers"""
+        self.assertEqual(self.calc.subtract(3.5, 1.5), 2.0)
+
+    def test_subtract_wrong(self):
+        """Test subtract with incorrect result"""
+        self.assertEqual(self.calc.subtract(5, 3), 3) # Should be 2
+
+    # Tests for divide()
+    def test_divide_positive_integers(self):
+        """Test divide with positive integers"""
+        self.assertEqual(self.calc.divide(6, 2), 3)
+
+    def test_divide_negative_integers(self):
+        """Test divide with negative integers"""
+        self.assertEqual(self.calc.divide(-6, -2), 3)
+
+    def test_divide_mixed(self):
+        """Test divide with positive and negative integers"""
+        self.assertEqual(self.calc.divide(8, -2), -4)
+
+    def test_divide_floats(self):
+        """Test divide with floating-point numbers"""
+        self.assertEqual(self.calc.divide(4.5, 1.5), 3.0)
+
+    def test_divide_by_zero(self):
+        """Test divide by zero raises ValueError"""
+        with self.assertRaises(ValueError):
+            self.calc.divide(5, 0)
+
+    def test_divide_wrong(self):
+        """Test divide with incorrect result"""
+        self.assertEqual(self.calc.divide(6, 2), 2) # Should be 3
+
+if __name__ == '__main__':
+    unittest.main()
\ No newline at end of file
-- 
GitLab