From a78bf3e1fc210ad7cb6f84b55d2220d9017b1b3c Mon Sep 17 00:00:00 2001 From: BushraHussain Date: Sat, 18 Oct 2025 12:06:17 +0500 Subject: [PATCH] Addition --- quick_calc/pyproject.toml | 4 + quick_calc/src/__init__.py | 0 .../src/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 212 bytes .../__pycache__/quick_calc.cpython-312.pyc | Bin 0 -> 1257 bytes quick_calc/src/quick_calc.py | 23 ++++ quick_calc/tests/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 205 bytes ...test_addition.cpython-312-pytest-8.3.4.pyc | Bin 0 -> 35655 bytes quick_calc/tests/test_addition.py | 130 ++++++++++++++++++ quick_calc/uv.lock | 7 + 10 files changed, 164 insertions(+) create mode 100644 quick_calc/src/__init__.py create mode 100644 quick_calc/src/__pycache__/__init__.cpython-312.pyc create mode 100644 quick_calc/src/__pycache__/quick_calc.cpython-312.pyc create mode 100644 quick_calc/src/quick_calc.py create mode 100644 quick_calc/tests/__init__.py create mode 100644 quick_calc/tests/__pycache__/__init__.cpython-312.pyc create mode 100644 quick_calc/tests/__pycache__/test_addition.cpython-312-pytest-8.3.4.pyc create mode 100644 quick_calc/tests/test_addition.py create mode 100644 quick_calc/uv.lock diff --git a/quick_calc/pyproject.toml b/quick_calc/pyproject.toml index cdde5e7..a84a92e 100644 --- a/quick_calc/pyproject.toml +++ b/quick_calc/pyproject.toml @@ -5,3 +5,7 @@ description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] + +[tool.pytest.ini_options] +testpaths = ["tests"] +pythonpath = ["src"] diff --git a/quick_calc/src/__init__.py b/quick_calc/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/quick_calc/src/__pycache__/__init__.cpython-312.pyc b/quick_calc/src/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e44e2ba23e28cfb890e48f89449bf1c43a2d41a7 GIT binary patch literal 212 zcmZ9GF%H5o3`G+P5<==7SQ%O$0K|j@1M0>cwW&oT+O)(;QBT4dI0Pr)7@PogV^f+wv=p7tHIq9;;B_A^mHd`pKOQY{jz&GZWv9!Sf|J5gLNRQDySV5#>t5u9dDq zZ3&K;8?E#?$?yhyWe=`MYSkl9hcYRRN4+eu$GYvp23(zz7a{Xnf<^Kd(iF%@5JG8X cg-E;MJKr>I>1y1Xng4LWDCgP30MN_Lf9wyTnPUU@*ih{)&|FK0p_wm6|gRD zrxVfRp1kmPp4?zPuC^?&UN^3SosMqauJ^}z31puKD;$k|6>#&91&v~jiuf${2pijsf#M83KecS4#I)T&pyb{q%1>L)}dw;(wI=l^ekpMOd?LU z4Ix z1|o>KNV+TBCLo1kFMhph1RrNBKFT*USRC=81m1|Qv%XI}QEEs$MX-?=&?e`(Hx#3=`PoauN8PX(d z1=75pbu8gJwE~QXRxp*)Pywe>mY)yO>S>SBX9>s>($wAt2oDW$k@AltrVW}SC}&WL z6iuAgC8s|s&SFF~Maz!Ga9O;ouzN;&OjSx)q(v-^$%Ka*lyM2GdeNSUxN0cUN=ibi zBr;4H6(bRm63O#EQe3zENS4VUw_vXnea#;m;0FZ36PstBCmOw@+xa&`yVH#`S3ieN znWN+T?EU1sa&uz7HZgCGFPIC9jpUN~;9))asF}>vk{NR`YmVgVA;k1zk2&JWh`DtJ9Lb$lv{f MAhdkL!jOag1!Q0}o&W#< literal 0 HcmV?d00001 diff --git a/quick_calc/src/quick_calc.py b/quick_calc/src/quick_calc.py new file mode 100644 index 0000000..ee7ebcd --- /dev/null +++ b/quick_calc/src/quick_calc.py @@ -0,0 +1,23 @@ +def add(a, b): + """ + Add two numbers together. + + Args: + a: First number (int or float) + b: Second number (int or float) + + Returns: + The sum of a and b + + Raises: + TypeError: If either argument is not a number + """ + # Check if both arguments are numbers (int or float) but not booleans + # In Python, bool is a subclass of int, so we need to check for bool separately + if isinstance(a, bool) or isinstance(b, bool): + raise TypeError(f"Boolean values are not allowed, got {type(a).__name__} and {type(b).__name__}") + + if not isinstance(a, (int, float)) or not isinstance(b, (int, float)): + raise TypeError(f"Both arguments must be numbers (int or float), got {type(a).__name__} and {type(b).__name__}") + + return a + b \ No newline at end of file diff --git a/quick_calc/tests/__init__.py b/quick_calc/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/quick_calc/tests/__pycache__/__init__.cpython-312.pyc b/quick_calc/tests/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33d05fb6ddfdf664565cdb5fcf3916dab3ca10c0 GIT binary patch literal 205 zcmX@j%ge<81beMNXMpI(AOanHW&w&!XQ*V*Wb|9fP{ah}eFmxdm7^b8oLW?@pHy0$ zQIwcbT3no%nWyiPpIn-onpaY+?~|HXl$V*8uIratuJ4{%;!&EUo0D0Vs$X1?nyi~r z1Z3tZq@zAY!15JpJ&&W5r~UHjE~HWjEqIhKo$U-NIACv literal 0 HcmV?d00001 diff --git a/quick_calc/tests/__pycache__/test_addition.cpython-312-pytest-8.3.4.pyc b/quick_calc/tests/__pycache__/test_addition.cpython-312-pytest-8.3.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce0872996c24f44ae5a6b6225a2b1d4afecf9681 GIT binary patch literal 35655 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