diff --git a/.github/workflows/run_test.yml b/.github/workflows/run_test.yml new file mode 100644 index 00000000..56a7166f --- /dev/null +++ b/.github/workflows/run_test.yml @@ -0,0 +1,33 @@ +name: simple_calculator unit test + +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10"] + + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Lint with Ruff + run: | + pip install ruff + ruff --format=github --target-version=py310 . + continue-on-error: true + - name: Test with pytest + run: | + pytest + - name: Generate Coverage Report + run: | + pip install pytest-cov + pytest --cov=labs/lab_1 --cov-report=term-missing \ No newline at end of file diff --git a/labs/lab_1/lab_1a.py b/labs/lab_1/lab_1a.py index 9d15ec83..ad5e0b69 100644 --- a/labs/lab_1/lab_1a.py +++ b/labs/lab_1/lab_1a.py @@ -3,12 +3,15 @@ The first lab in the BWSI CSS course. To complete this lab, fill out the variable on line 10 with your name. Then, save the code, add it to the staging area, and commit it to the Git tree. + +This is to simulate a change made on a robot: robot_speed = 8 # m/s """ def main(): print("Hello World!") + print("This is my first lab in the BWSI CSS course. I love aircraft and I hope to learn a lot.") - name = "" # TODO: Insert your name between the double quotes + name = "Isha Goel" # TODO: Insert your name between the double quotes print(f"{name}, Welcome to the CSS course!") diff --git a/labs/lab_1/lab_1b.py b/labs/lab_1/lab_1b.py index e58dd957..b40221e9 100644 --- a/labs/lab_1/lab_1b.py +++ b/labs/lab_1/lab_1b.py @@ -1,28 +1,5 @@ -""" -lab_1b.py - -This is a script that implements a simple calculator. It takes two numbers and an operation, -then performs the operation and returns the result. - -The script asks the user to input the numbers and the operation to be performed, -and prints the result to the terminal window. - -""" def simple_calculator(operation: str, num1: float, num2: float) -> float: - """ - Function that takes in two numbers and an operation (add, subtract, multiply, divide), - then performs the operation on the two numbers and returns the result. - - Args: - operation (str): The operation to perform ("add", "subtract", "multiply", "divide"). - num1 (float): The first number. - num2 (float): The second number. - - Returns: - float: The result of the operation. - """ - if operation == "add": return num1 + num2 elif operation == "subtract": @@ -30,26 +7,36 @@ def simple_calculator(operation: str, num1: float, num2: float) -> float: elif operation == "multiply": return num1 * num2 elif operation == "divide": - if num2 != 0: - return num1 / num2 - else: + if num2 == 0: raise ValueError("Cannot divide by zero.") + return num1 / num2 else: raise ValueError("Invalid operation. Please choose from 'add', 'subtract', 'multiply', or 'divide'.") +def request_sanitized_number(prompt: str) -> float: + while True: + try: + return float(input(prompt)) + except ValueError: + print("Invalid input. Please enter a valid number.") +tests/simple_calculator def main(): - print(f"===== Simple Calculator =====") + print("Simple Calculator ") - # Ask the user for sample input - num1 = float(input("Enter the first number: ")) - num2 = float(input("Enter the second number: ")) - operation = input("Enter the operation (add, subtract, multiply, divide): ").strip().lower() +main - # Perform the calculation and display the result - result = simple_calculator(operation, num1, num2) - print(f"The result of {operation}ing {num1} and {num2} is: {result}") +def main(): + print("Simple Calculator") + num1 = request_sanitized_number("Enter the first number: ") + num2 = request_sanitized_number("Enter the second number: ") + operation = input("Enter the operation (add, subtract, multiply, divide): ") + try: + result = simple_calculator(operation, num1, num2) + print(f"The result of {operation}ing {num1} and {num2} is: {result}") + except ValueError as e: + print(e) if __name__ == "__main__": - main() + main() \ No newline at end of file