diff --git a/projects/Calculate Age/requirements.txt b/projects/Calculate Age/requirements.txt new file mode 100644 index 000000000..490d735e9 --- /dev/null +++ b/projects/Calculate Age/requirements.txt @@ -0,0 +1,2 @@ + +pytest diff --git a/projects/Calculate Age/test_CalculateJudgeLeapYear.py b/projects/Calculate Age/test_CalculateJudgeLeapYear.py new file mode 100644 index 000000000..92d27e701 --- /dev/null +++ b/projects/Calculate Age/test_CalculateJudgeLeapYear.py @@ -0,0 +1,191 @@ +# ********RoostGPT******** +""" +Test generated by RoostGPT for test Python-5768-test3 using AI Type Azure Open AI and AI Model roostgpt-4-32k + +ROOST_METHOD_HASH=judge_leap_year_f401fe1df5 +ROOST_METHOD_SIG_HASH=judge_leap_year_4548bc7362 + + + +Scenario 1: Verify Leap Year Determination for a Typical Leap Year +Details: + TestName: test_typical_leap_year + Description: Test to confirm the function correctly identifies a typical leap year based on the rules of the Gregorian calendar. +Execution: + Arrange: Prepare a valid leap year input, such as 2000. + Act: Call the `judge_leap_year` function with the year 2000. + Assert: Expect the function to return `True` as 2000 satisfies leap year conditions. +Validation: + Rationalize that testing typical leap year functionality ensures the fundamental correctness of the function's approximation to the Gregorian calendar rules. + +Scenario 2: Test Regular Non-Leap Year +Details: + TestName: test_regular_non_leap_year + Description: Verify the function correctly identifies a typical non-leap year that doesn't satisfy any leap year conditions. +Execution: + Arrange: Choose a regular non-leap year, for example, 2019. + Act: Call the `judge_leap_year` function with the year 2019. + Assert: Expect the function to return `False` as 2019 does not fall under leap year rules. +Validation: + Rationalize the importance of ensuring the function correctly excludes non-leap years from incorrectly being marked as leap years. + +Scenario 3: Test Leap Year Divisible by 4 but not 100 (Edge Case) +Details: + TestName: test_leap_year_divisible_by_4_not_100 + Description: Validate the function correctly identifies years that are divisible by 4 but not divisible by 100 unless divisible by 400. +Execution: + Arrange: Prepare a year like 2024, which is divisible by 4 but not divisible by 100. + Act: Invoke the `judge_leap_year` using the year 2024. + Assert: Confirm the function returns `True` since 2024 follows leap year rules. +Validation: + Rationalize testing edge cases based on divisibility rules ensures the function’s compliance with leap year logic. + +Scenario 4: Test Year Divisible by 100 but Not 400 (Non-Leap Year Edge Case) +Details: + TestName: test_year_divisible_by_100_not_400 + Description: Verify that the function identifies years divisible by 100 but not divisible by 400 as non-leap years. +Execution: + Arrange: Use a year such as 1900 which is divisible by 100 but not divisible by 400. + Act: Call the `judge_leap_year` function and pass 1900 as input. + Assert: Expect the function to return `False`, as 1900 is correctly excluded from being a leap year. +Validation: + Rationalize this edge case as critical to ensuring proper distinction between non-leap years and leap years in corner scenarios. + +Scenario 5: Verify Leap Year Divisible by 400 +Details: + TestName: test_leap_year_divisible_by_400 + Description: Check if the function correctly identifies years divisible by 400 as leap years regardless of other conditions. +Execution: + Arrange: Select a year like 1600 which is divisible by 400. + Act: Execute `judge_leap_year` with the input year 1600. + Assert: Verify the function returns `True` since 1600 fits leap year rules exactly. +Validation: + Rationalize this scenario confirms that the function properly identifies and handles leap years divisible by 400 as per Gregorian calendar specifications. + +Scenario 6: Validate Negative Year Input (Boundary Condition) +Details: + TestName: test_negative_year_input + Description: Ensure the function handles negative year values correctly by returning appropriate results based on leap year rules. +Execution: + Arrange: Choose a negative year, such as -400 (leap year) or -500 (non-leap year). + Act: Invoke `judge_leap_year` with the negative years separately. + Assert: Confirm the function returns `True` for -400 and `False` for -500 as expected. +Validation: + Rationalize that testing negative year inputs ensures the function's ability to handle historical dates correctly without breaking its logic. + +Scenario 7: Validate Boundary Year Input (Year 0 and Year 1) +Details: + TestName: test_boundary_year_input + Description: Test the behavior of the function when dealing with boundary inputs like year 0 and year 1. +Execution: + Arrange: Prepare years 0 and 1 as inputs for the function. + Act: Run `judge_leap_year` for both year values separately. + Assert: Expect the function to return `True` for year 0 and `False` for year 1. +Validation: + Rationalize testing boundary years checks the robustness of the function when handling edge inputs within historical limits. + +Scenario 8: Verify Exact Result for Large Year Ranges +Details: + TestName: test_large_year_range_input + Description: Ensure the function handles large year values consistently and accurately determines whether they are leap years. +Execution: + Arrange: Prepare large year values such as 10000 (leap year) and 10001 (non-leap year). + Act: Invoke `judge_leap_year` with year 10000 and year 10001 separately. + Assert: Verify that the function returns `True` for 10000 and `False` for 10001 appropriately. +Validation: + Rationalize testing large inputs safeguards against potential overflow or computational errors and ensures correct logic is applied across all valid year ranges. + +""" + +# ********RoostGPT******** +import pytest +import time +from calendar import isleap +from calculate import judge_leap_year # Ensure judge_leap_year is imported correctly + +class Test_CalculateJudgeLeapYear: + + @pytest.mark.positive + @pytest.mark.smoke + def test_typical_leap_year(self): + # Arrange + year = 2000 # Typical leap year + # Act + result = judge_leap_year(year) + # Assert + assert result is True, f"Expected True for leap year {year}, but got {result}" + + @pytest.mark.negative + @pytest.mark.regression + def test_regular_non_leap_year(self): + # Arrange + year = 2019 # Non-leap year + # Act + result = judge_leap_year(year) + # Assert + assert result is False, f"Expected False for non-leap year {year}, but got {result}" + + @pytest.mark.edge_case + @pytest.mark.valid + def test_leap_year_divisible_by_4_not_100(self): + # Arrange + year = 2024 # Divisible by 4, not divisible by 100 + # Act + result = judge_leap_year(year) + # Assert + assert result is True, f"Expected True for leap year {year}, but got {result}" + + @pytest.mark.edge_case + @pytest.mark.valid + def test_year_divisible_by_100_not_400(self): + # Arrange + year = 1900 # Divisible by 100 but not divisible by 400 + # Act + result = judge_leap_year(year) + # Assert + assert result is False, f"Expected False for non-leap year {year}, but got {result}" + + @pytest.mark.positive + @pytest.mark.valid + def test_leap_year_divisible_by_400(self): + # Arrange + year = 1600 # Divisible by 400 + # Act + result = judge_leap_year(year) + # Assert + assert result is True, f"Expected True for leap year {year}, but got {result}" + + @pytest.mark.boundary + @pytest.mark.negative + def test_negative_year_input(self): + # Arrange + years = [-400, -500] # Negative years, -400 is leap, -500 is non-leap + expected_results = [True, False] + # Act & Assert + for year, expected in zip(years, expected_results): + result = judge_leap_year(year) + assert result == expected, f"For year {year}, expected {expected} but got {result}" + + @pytest.mark.boundary + @pytest.mark.valid + def test_boundary_year_input(self): + # Arrange + years = [0, 1] # Boundary years, 0 is leap, 1 is non-leap + expected_results = [True, False] + # Act & Assert + for year, expected in zip(years, expected_results): + result = judge_leap_year(year) + assert result == expected, f"For year {year}, expected {expected} but got {result}" + + @pytest.mark.performance + @pytest.mark.valid + def test_large_year_range_input(self): + # Arrange + years = [10000, 10001] # Large year inputs, 10000 is leap, 10001 is non-leap + expected_results = [True, False] + # Act & Assert + for year, expected in zip(years, expected_results): + result = judge_leap_year(year) + assert result == expected, f"For year {year}, expected {expected} but got {result}" + +# TODO: Add more test scenarios if required based on updated requirements or edge cases