Download test_height_converter.py from NuBest/height-conversion-tool: direct link, hf CLI and curl.
- Browser
- Download file 5.32 kB
-
https://huggingface.co/NuBest/height-conversion-tool/resolve/main/test_height_converter.py
- Command line
-
hf download hf://NuBest/height-conversion-tool/test_height_converter.py
-
curl -L -o test_height_converter.py https://huggingface.co/NuBest/height-conversion-tool/resolve/main/test_height_converter.py
5.32 kB
| """ | |
| Unit tests for HeightConverter | |
| """ | |
| import pytest | |
| from height_converter import HeightConverter | |
| class TestHeightConverter: | |
| """Test suite for HeightConverter class.""" | |
| def converter(self): | |
| """Create a HeightConverter instance for testing.""" | |
| return HeightConverter() | |
| # Test feet to cm conversions | |
| def test_feet_to_cm_basic(self, converter): | |
| """Test basic feet to cm conversion.""" | |
| result = converter.feet_to_cm(5, 10) | |
| assert result == 177.8 | |
| def test_feet_to_cm_no_inches(self, converter): | |
| """Test feet to cm with no inches.""" | |
| result = converter.feet_to_cm(6) | |
| assert result == 182.88 | |
| def test_feet_to_cm_negative(self, converter): | |
| """Test that negative values raise ValueError.""" | |
| with pytest.raises(ValueError): | |
| converter.feet_to_cm(-5, 10) | |
| # Test cm to feet conversions | |
| def test_cm_to_feet_basic(self, converter): | |
| """Test basic cm to feet conversion.""" | |
| feet, inches = converter.cm_to_feet(180) | |
| assert feet == 5 | |
| assert inches == pytest.approx(10.9, rel=0.1) | |
| def test_cm_to_feet_short(self, converter): | |
| """Test cm to feet for shorter height.""" | |
| feet, inches = converter.cm_to_feet(150) | |
| assert feet == 4 | |
| assert inches == pytest.approx(11.1, rel=0.1) | |
| def test_cm_to_feet_negative(self, converter): | |
| """Test that negative cm raises ValueError.""" | |
| with pytest.raises(ValueError): | |
| converter.cm_to_feet(-180) | |
| # Test meters conversions | |
| def test_meters_to_feet(self, converter): | |
| """Test meters to feet conversion.""" | |
| feet, inches = converter.meters_to_feet(1.75) | |
| assert feet == 5 | |
| assert inches == pytest.approx(8.9, rel=0.1) | |
| def test_feet_to_meters(self, converter): | |
| """Test feet to meters conversion.""" | |
| result = converter.feet_to_meters(6, 0) | |
| assert result == 1.83 | |
| def test_cm_to_meters(self, converter): | |
| """Test cm to meters conversion.""" | |
| result = converter.cm_to_meters(175) | |
| assert result == 1.75 | |
| def test_meters_to_cm(self, converter): | |
| """Test meters to cm conversion.""" | |
| result = converter.meters_to_cm(1.8) | |
| assert result == 180.0 | |
| # Test string parsing | |
| def test_parse_feet_inches_standard(self, converter): | |
| """Test parsing standard feet/inches format.""" | |
| result = converter.parse_height_string("5'10\"") | |
| assert result == {'feet': 5, 'inches': 10, 'unit': 'feet'} | |
| def test_parse_feet_inches_no_quotes(self, converter): | |
| """Test parsing feet/inches without quotes.""" | |
| result = converter.parse_height_string("5'10") | |
| assert result == {'feet': 5, 'inches': 10, 'unit': 'feet'} | |
| def test_parse_cm(self, converter): | |
| """Test parsing centimeters.""" | |
| result = converter.parse_height_string("180cm") | |
| assert result == {'cm': 180.0, 'unit': 'cm'} | |
| def test_parse_cm_with_space(self, converter): | |
| """Test parsing cm with space.""" | |
| result = converter.parse_height_string("180 cm") | |
| assert result == {'cm': 180.0, 'unit': 'cm'} | |
| def test_parse_meters(self, converter): | |
| """Test parsing meters.""" | |
| result = converter.parse_height_string("1.8m") | |
| assert result == {'meters': 1.8, 'unit': 'meters'} | |
| def test_parse_invalid_format(self, converter): | |
| """Test that invalid format raises ValueError.""" | |
| with pytest.raises(ValueError): | |
| converter.parse_height_string("invalid") | |
| # Test convert method | |
| def test_convert_feet_to_cm(self, converter): | |
| """Test convert from feet to cm.""" | |
| result = converter.convert("5'10\"", "cm") | |
| assert result == "177.8 cm" | |
| def test_convert_cm_to_feet(self, converter): | |
| """Test convert from cm to feet.""" | |
| result = converter.convert("180cm", "feet") | |
| assert "5'" in result | |
| assert "10.9\"" in result | |
| def test_convert_meters_to_cm(self, converter): | |
| """Test convert from meters to cm.""" | |
| result = converter.convert("1.75m", "cm") | |
| assert result == "175.0 cm" | |
| def test_convert_cm_to_meters(self, converter): | |
| """Test convert from cm to meters.""" | |
| result = converter.convert("180cm", "meters") | |
| assert result == "1.8 m" | |
| def test_convert_invalid_unit(self, converter): | |
| """Test that invalid target unit raises ValueError.""" | |
| with pytest.raises(ValueError): | |
| converter.convert("180cm", "invalid") | |
| # Edge cases | |
| def test_zero_height(self, converter): | |
| """Test handling of zero height.""" | |
| result = converter.feet_to_cm(0, 0) | |
| assert result == 0.0 | |
| def test_very_tall_height(self, converter): | |
| """Test handling of very tall height.""" | |
| result = converter.feet_to_cm(8, 0) | |
| assert result == 243.84 | |
| def test_decimal_inches(self, converter): | |
| """Test handling of decimal inches.""" | |
| result = converter.feet_to_cm(5, 10.5) | |
| assert result == pytest.approx(179.07, rel=0.01) | |
| if __name__ == '__main__': | |
| pytest.main([__file__, '-v']) | |