spark: add wordcount utility verified against wc output
This commit is contained in:
1 parent
94184654c3
commit
397bcb3c99
3 files changed
+61
-27
No files matched your search
@@ -1,6 +1,3 @@
|
||||
# Test file with known content
|
||||
This is a test.
|
||||
Multiple lines here.
|
||||
And a third line.
|
||||
|
||||
Total: 4 lines, 8 words, 37 chars including newlines.
|
||||
Hello world
|
||||
This is a test file
|
||||
With three lines
|
||||
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Verification test for wordcount.py - must match wc output exactly."""
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import os
|
||||
|
||||
# Create test file with known content
|
||||
test_content = "Hello world\nThis is a test file\nWith three lines\n"
|
||||
test_file = "/root/troupe-standup/test_verification.txt"
|
||||
with open(test_file, 'w') as f:
|
||||
f.write(test_content)
|
||||
|
||||
# Get wc output
|
||||
wc_result = subprocess.run(['wc', test_file], capture_output=True, text=True)
|
||||
wc_lines, wc_words, wc_chars = map(int, wc_result.stdout.strip().split()[:3])
|
||||
|
||||
# Get wordcount.py output
|
||||
pyc_result = subprocess.run(
|
||||
['python3', '/root/.hermes/wizard-outputs/spark/wordcount.py', test_file],
|
||||
capture_output=True, text=True
|
||||
)
|
||||
|
||||
if pyc_result.returncode != 0:
|
||||
print(f"FAIL: wordcount.py returned {pyc_result.returncode}")
|
||||
print(pyc_result.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
parts = pyc_result.stdout.strip().split()
|
||||
py_lines, py_words, py_chars = int(parts[0]), int(parts[1]), int(parts[2])
|
||||
|
||||
print(f"wc: {wc_lines} lines, {wc_words} words, {wc_chars} chars")
|
||||
print(f"wordcount.py: {py_lines} lines, {py_words} words, {py_chars} chars")
|
||||
|
||||
if (wc_lines == py_lines and wc_words == py_words and wc_chars == py_chars):
|
||||
print("PASS: outputs match")
|
||||
sys.exit(0)
|
||||
else:
|
||||
print("FAIL: outputs do not match")
|
||||
sys.exit(1)
|
||||
@@ -1,31 +1,28 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Word count utility - counts words in a file and outputs JSON result."""
|
||||
import json
|
||||
"""Simple word/line/char counter for files."""
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
def word_count(filepath):
|
||||
"""Count words in file and return stats."""
|
||||
path = Path(filepath)
|
||||
if not path.exists():
|
||||
return {"error": f"File not found: {filepath}"}
|
||||
|
||||
content = path.read_text()
|
||||
words = content.split()
|
||||
lines = content.splitlines()
|
||||
|
||||
|
||||
def count_file(path: str) -> dict:
|
||||
"""Return line, word, and char counts for a file (wc-style)."""
|
||||
content = Path(path).read_text()
|
||||
# wc -l counts newline characters, not lines
|
||||
return {
|
||||
"file": str(path),
|
||||
"bytes": path.stat().st_size,
|
||||
"lines": len(lines),
|
||||
"words": len(words),
|
||||
"characters": len(content)
|
||||
'lines': content.count('\n'),
|
||||
'words': len(content.split()),
|
||||
'chars': len(content)
|
||||
}
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print(json.dumps({"error": "Usage: wordcount.py <file>"}))
|
||||
print("Usage: wordcount.py <file>", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
result = word_count(sys.argv[1])
|
||||
print(json.dumps(result, indent=2))
|
||||
result = count_file(sys.argv[1])
|
||||
print(f"{result['lines']} {result['words']} {result['chars']} {sys.argv[1]}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in new issue
Block a user