SXXXXXXX_PyUCC/tests/test_ucc_compat_counting.py

131 lines
4.4 KiB
Python

"""Test UCC-compatible counting engine.
Verifies that the Python port produces identical results to original UCC.
"""
from pathlib import Path
import sys
sys.path.insert(0, str(Path(__file__).parent.parent))
from pyucc.core.ucc_compat_counting import analyze_file_ucc_compatible
def test_ucc_compat():
"""Test UCC-compatible counting on real file."""
test_file = Path(
r"C:\__temp\Metrics\attuale\REP\Projects\DSP\ChimeraMCK\dev\mck_c66\mck_c66_boot_multicore.c"
)
if not test_file.exists():
print("⚠️ Test file not found, using demo...")
demo_ucc_compat()
return
print(f"Analyzing: {test_file.name}")
print("=" * 80)
result = analyze_file_ucc_compatible(test_file)
print("\n🐍 PyUCC (UCC-Compatible Engine) Results:")
print(f" Total Lines: {result['total_lines']:>6}")
print(f" Blank Lines: {result['blank_lines']:>6}")
print(f" Compiler Dir (Physical): {result['compiler_directives_phy']:>6}")
print(f" Compiler Dir (Logical): {result['compiler_directives_log']:>6}")
print(f" Data Decl (Physical): {result['data_declarations_phy']:>6}")
print(f" Data Decl (Logical): {result['data_declarations_log']:>6}")
print(f" Exec Inst (Physical): {result['exec_instructions_phy']:>6}")
print(f" Exec Inst (Logical): {result['exec_instructions_log']:>6}")
print(f" Logical SLOC (Total): {result['logical_sloc']:>6}")
print(f" Physical SLOC (Total): {result['physical_sloc']:>6}")
print("\n" + "=" * 80)
print("🎯 UCC Expected Values (from original output):")
print(f" Total Lines: {'402':>6}")
print(f" Blank Lines: {'86':>6}")
print(f" Compiler Dir (Logical): {'22':>6}")
print(f" Data Decl (Logical): {'57':>6}")
print(f" Exec Inst (Logical): {'127':>6}")
print(f" Logical SLOC (Total): {'206':>6}")
print(f" Physical SLOC (Total): {'271':>6}")
print("\n" + "=" * 80)
print("📊 Comparison:")
print(f" Total: {result['total_lines'] - 402:>+6} (target: 0)")
print(f" Blank: {result['blank_lines'] - 86:>+6} (target: 0)")
print(f" Directive Log: {result['compiler_directives_log'] - 22:>+6} (target: 0)")
print(f" Data Decl Log: {result['data_declarations_log'] - 57:>+6} (target: 0)")
print(f" Exec Inst Log: {result['exec_instructions_log'] - 127:>+6} (target: 0)")
print(f" Logical SLOC: {result['logical_sloc'] - 206:>+6} (target: 0)")
print(f" Physical SLOC: {result['physical_sloc'] - 271:>+6} (target: 0)")
# Calculate accuracy
total_diff = abs(result["total_lines"] - 402)
blank_diff = abs(result["blank_lines"] - 86)
dir_diff = abs(result["compiler_directives_log"] - 22)
data_diff = abs(result["data_declarations_log"] - 57)
exec_diff = abs(result["exec_instructions_log"] - 127)
lsloc_diff = abs(result["logical_sloc"] - 206)
psloc_diff = abs(result["physical_sloc"] - 271)
total_metrics = 7
perfect_matches = sum(
[
total_diff == 0,
blank_diff == 0,
dir_diff == 0,
data_diff == 0,
exec_diff == 0,
lsloc_diff == 0,
psloc_diff == 0,
]
)
accuracy = (perfect_matches / total_metrics) * 100
print(f"\n✅ Perfect Matches: {perfect_matches}/{total_metrics} ({accuracy:.1f}%)")
if accuracy == 100.0:
print("\n🎉 PERFECT! 100% match with UCC!")
elif accuracy >= 85.0:
print(f"\n✅ GOOD! {accuracy:.1f}% accuracy - close to UCC")
else:
print(f"\n⚠️ NEEDS WORK: {accuracy:.1f}% accuracy")
def demo_ucc_compat():
"""Demo with simple code."""
import tempfile
code = """// Demo file
#include <stdio.h>
int main() {
int x = 5;
if (x > 0) {
printf("positive");
}
return 0;
}
"""
with tempfile.NamedTemporaryFile(mode="w", suffix=".c", delete=False) as f:
f.write(code)
temp_path = Path(f.name)
print("Testing with demo C code...")
result = analyze_file_ucc_compatible(temp_path)
print(f"\nResults:")
print(f" Total Lines: {result['total_lines']}")
print(f" Logical SLOC: {result['logical_sloc']}")
print(f" Data Decl: {result['data_declarations_log']}")
print(f" Exec Inst: {result['exec_instructions_log']}")
temp_path.unlink()
if __name__ == "__main__":
test_ucc_compat()