""" Test mesh quality checking system """ import pytest import time from backend.pymechanical.session_manager import ANSYSSessionManager from backend.pymechanical.mesh_quality_checker import MeshQualityChecker, QualityMetrics, QualityResult def test_mesh_quality_checker_simulation(): """Test mesh quality checker in simulation mode""" # Create session manager in simulation mode session_manager = ANSYSSessionManager(simulation_mode=True) # Start session assert session_manager.start_session() try: # Initialize quality checker quality_checker = MeshQualityChecker(session_manager.session) # Perform quality check result = quality_checker.check_mesh_quality() # Verify result structure assert isinstance(result, QualityResult) assert result.check_time is not None assert isinstance(result.metrics, QualityMetrics) assert isinstance(result.recommendations, list) assert isinstance(result.warnings, list) assert isinstance(result.critical_issues, list) # Verify metrics are reasonable assert 0.0 <= result.metrics.min_element_quality <= 1.0 assert result.metrics.max_aspect_ratio >= 1.0 assert 0.0 <= result.metrics.max_skewness <= 1.0 assert 0.0 <= result.metrics.min_orthogonal_quality <= 1.0 assert result.metrics.total_elements > 0 assert result.metrics.failed_elements_count >= 0 # Check quality summary summary = quality_checker.get_quality_summary(result) assert 'overall_status' in summary assert 'metrics' in summary assert 'thresholds' in summary assert 'quality_score' in summary assert 0.0 <= summary['quality_score'] <= 100.0 print(f"✓ Quality check result: {summary['overall_status']}") print(f"✓ Quality score: {summary['quality_score']:.1f}") print(f"✓ Element quality: {result.metrics.min_element_quality:.3f}") print(f"✓ Failed elements: {result.metrics.failed_elements_percentage:.1f}%") finally: session_manager.close_session() def test_session_manager_quality_check(): """Test mesh quality check through session manager""" # Create session manager in simulation mode session_manager = ANSYSSessionManager(simulation_mode=True) # Start session assert session_manager.start_session() try: # Perform quality check through session manager result = session_manager.check_mesh_quality() # Verify result structure assert result['success'] is True assert 'overall_status' in result assert 'quality_score' in result assert 'metrics' in result assert 'thresholds' in result assert 'recommendations' in result assert 'warnings' in result # Verify metrics structure metrics = result['metrics'] assert 'min_element_quality' in metrics assert 'max_aspect_ratio' in metrics assert 'max_skewness' in metrics assert 'min_orthogonal_quality' in metrics assert 'total_elements' in metrics assert 'failed_elements_count' in metrics assert 'failed_elements_percentage' in metrics # Verify thresholds thresholds = result['thresholds'] assert 'min_element_quality' in thresholds assert 'max_aspect_ratio' in thresholds assert 'max_skewness' in thresholds assert 'min_orthogonal_quality' in thresholds # Print quality report print(f"\n=== Mesh Quality Report ===") print(f"Overall Status: {result['overall_status']}") print(f"Quality Score: {result['quality_score']:.1f}/100") print(f"Element Quality: {metrics['min_element_quality']:.3f} (threshold: {thresholds['min_element_quality']})") print(f"Aspect Ratio: {metrics['max_aspect_ratio']:.1f} (threshold: {thresholds['max_aspect_ratio']})") print(f"Skewness: {metrics['max_skewness']:.3f} (threshold: {thresholds['max_skewness']})") print(f"Orthogonal Quality: {metrics['min_orthogonal_quality']:.3f} (threshold: {thresholds['min_orthogonal_quality']})") print(f"Total Elements: {metrics['total_elements']}") print(f"Failed Elements: {metrics['failed_elements_count']} ({metrics['failed_elements_percentage']:.1f}%)") if result['recommendations']: print(f"\nRecommendations:") for rec in result['recommendations']: print(f" - {rec}") if result['warnings']: print(f"\nWarnings:") for warning in result['warnings']: print(f" - {warning}") if result.get('critical_issues'): print(f"\nCritical Issues:") for issue in result['critical_issues']: print(f" - {issue}") print("=== End Quality Report ===\n") finally: session_manager.close_session() def test_quality_metrics_calculations(): """Test quality metrics calculations and scoring""" # Create quality checker in simulation mode quality_checker = MeshQualityChecker(None) # No session needed for calculation tests # Test case 1: Good quality metrics good_metrics = QualityMetrics( min_element_quality=0.35, max_aspect_ratio=15.0, max_skewness=0.6, min_orthogonal_quality=0.25, average_element_quality=0.7, failed_elements_count=10, total_elements=5000 ) good_result = QualityResult() good_result.metrics = good_metrics quality_checker._evaluate_quality_metrics(good_metrics, good_result) assert good_result.passed is True assert len(good_result.critical_issues) == 0 good_score = quality_checker._calculate_quality_score(good_metrics) assert good_score >= 60.0 # Should be acceptable score (meets all thresholds) # Test case 2: Poor quality metrics poor_metrics = QualityMetrics( min_element_quality=0.15, # Below threshold (0.2) max_aspect_ratio=25.0, # Above threshold (20) max_skewness=0.9, # Above threshold (0.8) min_orthogonal_quality=0.1, # Below threshold (0.15) average_element_quality=0.3, failed_elements_count=300, # 6% failed elements total_elements=5000 ) poor_result = QualityResult() poor_result.metrics = poor_metrics quality_checker._evaluate_quality_metrics(poor_metrics, poor_result) assert poor_result.passed is False assert len(poor_result.critical_issues) >= 4 # Should have multiple issues poor_score = quality_checker._calculate_quality_score(poor_metrics) assert poor_score <= 50.0 # Should be a poor score print(f"✓ Good quality score: {good_score:.1f}") print(f"✓ Poor quality score: {poor_score:.1f}") print(f"✓ Good quality issues: {len(good_result.critical_issues)}") print(f"✓ Poor quality issues: {len(poor_result.critical_issues)}") if __name__ == "__main__": print("Testing Mesh Quality Checking System...") test_mesh_quality_checker_simulation() print("✓ Quality checker simulation test passed") test_session_manager_quality_check() print("✓ Session manager quality check test passed") test_quality_metrics_calculations() print("✓ Quality metrics calculations test passed") print("\n🎉 All mesh quality tests passed!")