switch to length fn

This commit is contained in:
2026-01-18 10:35:05 -06:00
parent e695810e64
commit 98cb2c3239
31 changed files with 184 additions and 185 deletions

80
test.ce
View File

@@ -43,7 +43,7 @@ function get_current_package_name() {
// cell test package all - run all tests from all packages
function parse_args() {
if (args.length == 0) {
if (length(args) == 0) {
// cell test - run all tests for current package
if (!is_valid_package('.')) {
log.console('No cell.toml found in current directory')
@@ -64,7 +64,7 @@ function parse_args() {
}
if (args[0] == 'package') {
if (args.length < 2) {
if (length(args) < 2) {
log.console('Usage: cell test package <name> [test]')
log.console(' cell test package all')
return false
@@ -102,7 +102,7 @@ function parse_args() {
}
}
if (args.length >= 3) {
if (length(args) >= 3) {
// cell test package <name> <test>
target_test = args[2]
}
@@ -146,7 +146,7 @@ function ensure_dir(path) {
var parts = array(path, '/')
var current = starts_with(path, '/') ? '/' : ''
for (var i = 0; i < parts.length; i++) {
for (var i = 0; i < length(parts); i++) {
if (parts[i] == '') continue
current += parts[i] + '/'
if (!fd.is_dir(current)) {
@@ -176,7 +176,7 @@ function collect_actor_tests(package_name, specific_test) {
var files = pkg.list_files(package_name)
var actor_tests = []
for (var i = 0; i < files.length; i++) {
for (var i = 0; i < length(files); i++) {
var f = files[i]
// Check if file is in tests/ folder and is a .ce actor
if (starts_with(f, "tests/") && ends_with(f, ".ce")) {
@@ -247,7 +247,7 @@ function run_tests(package_name, specific_test) {
var files = pkg.list_files(package_name)
var test_files = []
for (var i = 0; i < files.length; i++) {
for (var i = 0; i < length(files); i++) {
var f = files[i]
// Check if file is in tests/ folder and is a .cm module (not .ce - those are actor tests)
if (starts_with(f, "tests/") && ends_with(f, ".cm")) {
@@ -264,12 +264,12 @@ function run_tests(package_name, specific_test) {
}
}
if (test_files.length > 0) {
if (length(test_files) > 0) {
if (package_name) log.console(`Running tests for ${package_name}`)
else log.console(`Running tests for local package`)
}
for (var i = 0; i < test_files.length; i++) {
for (var i = 0; i < length(test_files); i++) {
var f = test_files[i]
var mod_path = text(f, 0, -3) // remove .cm
@@ -297,9 +297,9 @@ function run_tests(package_name, specific_test) {
}
}
if (tests.length > 0) {
if (length(tests) > 0) {
log.console(` ${f}`)
for (var j = 0; j < tests.length; j++) {
for (var j = 0; j < length(tests); j++) {
var t = tests[j]
var test_entry = {
package: pkg_result.package,
@@ -381,7 +381,7 @@ if (all_pkgs) {
// Then all packages in lock
var packages = shop.list_packages()
for (var i = 0; i < packages.length; i++) {
for (var i = 0; i < length(packages); i++) {
all_results.push(run_tests(packages[i], null))
all_actor_tests = array(all_actor_tests, collect_actor_tests(packages[i], null))
}
@@ -391,9 +391,9 @@ if (all_pkgs) {
}
// Spawn actor tests if any
if (all_actor_tests.length > 0) {
log.console(`Running ${all_actor_tests.length} actor test(s)...`)
for (var i = 0; i < all_actor_tests.length; i++) {
if (length(all_actor_tests) > 0) {
log.console(`Running ${length(all_actor_tests)} actor test(s)...`)
for (var i = 0; i < length(all_actor_tests); i++) {
spawn_actor_test(all_actor_tests[i])
}
}
@@ -402,7 +402,7 @@ if (all_actor_tests.length > 0) {
function handle_actor_message(msg) {
var sender = msg.$sender
var found_idx = -1
for (var i = 0; i < pending_actor_tests.length; i++) {
for (var i = 0; i < length(pending_actor_tests); i++) {
if (pending_actor_tests[i].actor == sender) {
found_idx = i
break
@@ -426,12 +426,12 @@ function handle_actor_message(msg) {
results = [msg]
}
for (var i = 0; i < results.length; i++) {
for (var i = 0; i < length(results); i++) {
var res = results[i] || {}
var entry = {
package: base_entry.package,
file: base_entry.file,
test: res.test || base_entry.test + (results.length > 1 ? `#${i+1}` : ""),
test: res.test || base_entry.test + (length(results) > 1 ? `#${i+1}` : ""),
status: "failed",
duration_ns: duration_ns
}
@@ -459,7 +459,7 @@ function check_timeouts() {
var now = time.number()
var timed_out = []
for (var i = pending_actor_tests.length - 1; i >= 0; i--) {
for (var i = length(pending_actor_tests) - 1; i >= 0; i--) {
var entry = pending_actor_tests[i]
var elapsed_ms = (now - entry.start_time) * 1000
if (elapsed_ms > ACTOR_TEST_TIMEOUT) {
@@ -467,7 +467,7 @@ function check_timeouts() {
}
}
for (var i = 0; i < timed_out.length; i++) {
for (var i = 0; i < length(timed_out); i++) {
var idx = timed_out[i]
var entry = pending_actor_tests[idx]
pending_actor_tests.splice(idx, 1)
@@ -479,7 +479,7 @@ function check_timeouts() {
log.console(` TIMEOUT ${entry.test}`)
}
if (pending_actor_tests.length > 0) {
if (length(pending_actor_tests) > 0) {
$delay(check_timeouts, 1000)
}
check_completion()
@@ -489,7 +489,7 @@ function check_timeouts() {
var finalized = false
function check_completion() {
if (finalized) return
if (pending_actor_tests.length > 0) return
if (length(pending_actor_tests) > 0) return
finalized = true
finalize_results()
@@ -497,10 +497,10 @@ function check_completion() {
function finalize_results() {
// Add actor test results to all_results
for (var i = 0; i < actor_test_results.length; i++) {
for (var i = 0; i < length(actor_test_results); i++) {
var r = actor_test_results[i]
var pkg_result = null
for (var j = 0; j < all_results.length; j++) {
for (var j = 0; j < length(all_results); j++) {
if (all_results[j].package == r.package) {
pkg_result = all_results[j]
break
@@ -512,7 +512,7 @@ function finalize_results() {
}
var file_result = null
for (var j = 0; j < pkg_result.files.length; j++) {
for (var j = 0; j < length(pkg_result.files); j++) {
if (pkg_result.files[j].name == r.file) {
file_result = pkg_result.files[j]
break
@@ -536,7 +536,7 @@ function finalize_results() {
// Calculate totals
var totals = { total: 0, passed: 0, failed: 0 }
for (var i = 0; i < all_results.length; i++) {
for (var i = 0; i < length(all_results); i++) {
totals.total += all_results[i].total
totals.passed += all_results[i].passed
totals.failed += all_results[i].failed
@@ -551,9 +551,9 @@ function finalize_results() {
// If no actor tests, finalize immediately
var totals
if (all_actor_tests.length == 0) {
if (length(all_actor_tests) == 0) {
totals = { total: 0, passed: 0, failed: 0 }
for (var i = 0; i < all_results.length; i++) {
for (var i = 0; i < length(all_results); i++) {
totals.total += all_results[i].total
totals.passed += all_results[i].passed
totals.failed += all_results[i].failed
@@ -577,24 +577,24 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed}
=== SUMMARY ===
`
for (var i = 0; i < all_results.length; i++) {
for (var i = 0; i < length(all_results); i++) {
var pkg_res = all_results[i]
if (pkg_res.total == 0) continue
txt_report += `Package: ${pkg_res.package}\n`
for (var j = 0; j < pkg_res.files.length; j++) {
for (var j = 0; j < length(pkg_res.files); j++) {
var f = pkg_res.files[j]
var status = f.failed == 0 ? "PASS" : "FAIL"
txt_report += ` [${status}] ${f.name} (${f.passed}/${f.tests.length})\n`
txt_report += ` [${status}] ${f.name} (${f.passed}/${length(f.tests)})\n`
}
}
txt_report += `\n=== FAILURES ===\n`
var has_failures = false
for (var i = 0; i < all_results.length; i++) {
for (var i = 0; i < length(all_results); i++) {
var pkg_res = all_results[i]
for (var j = 0; j < pkg_res.files.length; j++) {
for (var j = 0; j < length(pkg_res.files); j++) {
var f = pkg_res.files[j]
for (var k = 0; k < f.tests.length; k++) {
for (var k = 0; k < length(f.tests); k++) {
var t = f.tests[k]
if (t.status == "failed") {
has_failures = true
@@ -613,13 +613,13 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed}
if (!has_failures) txt_report += `None\n`
txt_report += `\n=== DETAILED RESULTS ===\n`
for (var i = 0; i < all_results.length; i++) {
for (var i = 0; i < length(all_results); i++) {
var pkg_res = all_results[i]
if (pkg_res.total == 0) continue
for (var j = 0; j < pkg_res.files.length; j++) {
for (var j = 0; j < length(pkg_res.files); j++) {
var f = pkg_res.files[j]
for (var k = 0; k < f.tests.length; k++) {
for (var k = 0; k < length(f.tests); k++) {
var t = f.tests[k]
var dur = `${t.duration_ns || 0}ns`
var status = t.status == "passed" ? "PASS" : "FAIL"
@@ -632,14 +632,14 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed}
log.console(`Report written to ${report_dir}/test.txt`)
// Generate JSON per package
for (var i = 0; i < all_results.length; i++) {
for (var i = 0; i < length(all_results); i++) {
var pkg_res = all_results[i]
if (pkg_res.total == 0) continue
var pkg_tests = []
for (var j = 0; j < pkg_res.files.length; j++) {
for (var j = 0; j < length(pkg_res.files); j++) {
var f = pkg_res.files[j]
for (var k = 0; k < f.tests.length; k++) {
for (var k = 0; k < length(f.tests); k++) {
pkg_tests.push(f.tests[k])
}
}
@@ -650,7 +650,7 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed}
}
// If no actor tests, generate reports and stop immediately
if (all_actor_tests.length == 0) {
if (length(all_actor_tests) == 0) {
generate_reports(totals)
$stop()
} else {