// tests/suite/src/test_all.el — master entry point for the El comprehensive test suite. // // This is an El vessel. Build and run with: // // cd tests/suite && elb && ./dist/el-tests // // Exit code equals the number of failing assertions (0 = all pass). import "../../../runtime/string.el" import "../../../runtime/math.el" import "../../../runtime/state.el" import "../../../runtime/fs.el" import "../../../runtime/json.el" import "../../../runtime/time.el" import "../../../runtime/thread.el" import "../../../runtime/test.el" import "test_string.el" import "test_math.el" import "test_json.el" import "test_state.el" import "test_time.el" import "test_fs.el" import "test_collections.el" fn main() -> Int { // ── string tests ─────────────────────────────────────────────────────────── test_case("str_eq basic", "test_str_eq_basic") test_case("str_eq symbols", "test_str_eq_symbols") test_case("str_len basic", "test_str_len_basic") test_case("str_len longer", "test_str_len_longer") test_case("str_concat basic", "test_str_concat_basic") test_case("str_concat chaining", "test_str_concat_chaining") test_case("str_slice basic", "test_str_slice_basic") test_case("str_slice edge", "test_str_slice_edge") test_case("str_starts_with basic", "test_str_starts_with_basic") test_case("str_starts_with edge", "test_str_starts_with_edge") test_case("str_ends_with basic", "test_str_ends_with_basic") test_case("str_ends_with edge", "test_str_ends_with_edge") test_case("str_contains basic", "test_str_contains_basic") test_case("str_contains edge", "test_str_contains_edge") test_case("str_index_of basic", "test_str_index_of_basic") test_case("str_index_of duplicates", "test_str_index_of_duplicates") test_case("str_last_index_of basic", "test_str_last_index_of_basic") test_case("str_replace basic", "test_str_replace_basic") test_case("str_replace multiple", "test_str_replace_multiple") test_case("str_to_upper basic", "test_str_to_upper_basic") test_case("str_to_lower basic", "test_str_to_lower_basic") test_case("str_upper_lower roundtrip", "test_str_upper_lower_roundtrip") test_case("str_trim basic", "test_str_trim_basic") test_case("str_lstrip rstrip", "test_str_lstrip_rstrip") test_case("str_split basic", "test_str_split_basic") test_case("str_split edge", "test_str_split_edge") test_case("str_join basic", "test_str_join_basic") test_case("str_join edge", "test_str_join_edge") test_case("int_to_str basic", "test_int_to_str_basic") test_case("str_to_int basic", "test_str_to_int_basic") test_case("float_to_str basic", "test_float_to_str_basic") test_case("str_to_float basic", "test_str_to_float_basic") test_case("str_repeat basic", "test_str_repeat_basic") test_case("str_reverse basic", "test_str_reverse_basic") test_case("str_count basic", "test_str_count_basic") test_case("str_strip_prefix basic", "test_str_strip_prefix_basic") test_case("str_strip_suffix basic", "test_str_strip_suffix_basic") test_case("str_find_chars basic", "test_str_find_chars_basic") test_case("str_char_at basic", "test_str_char_at_basic") test_case("str_char_code basic", "test_str_char_code_basic") test_case("str_pad_left basic", "test_str_pad_left_basic") test_case("str_pad_right basic", "test_str_pad_right_basic") test_case("is_letter basic", "test_is_letter_basic") test_case("is_digit basic", "test_is_digit_basic") test_case("is_whitespace basic", "test_is_whitespace_basic") test_case("str_count_lines basic", "test_str_count_lines_basic") test_case("str_count_words basic", "test_str_count_words_basic") test_case("url_encode basic", "test_url_encode_basic") test_case("url roundtrip", "test_url_roundtrip") test_case("bool_to_str basic", "test_bool_to_str_basic") test_case("str_to_bytes basic", "test_str_to_bytes_basic") test_case("bytes roundtrip", "test_bytes_roundtrip") // ── math tests ───────────────────────────────────────────────────────────── test_case("el_abs basic", "test_el_abs_basic") test_case("el_max basic", "test_el_max_basic") test_case("el_max edge", "test_el_max_edge") test_case("el_min basic", "test_el_min_basic") test_case("el_min edge", "test_el_min_edge") test_case("math_sqrt basic", "test_math_sqrt_basic") test_case("math_sqrt larger", "test_math_sqrt_larger") test_case("math_log basic", "test_math_log_basic") test_case("math_ln basic", "test_math_ln_basic") test_case("math_pi basic", "test_math_pi_basic") test_case("math_sin basic", "test_math_sin_basic") test_case("math_cos basic", "test_math_cos_basic") // int_to_float, float_to_int, format_float, decimal_round omitted: // __int_to_float / __float_to_int / __format_float seed primitives are // not yet implemented in el_seed.c on the runtime/integrate branch. test_case("int arithmetic basic", "test_int_arithmetic_basic") test_case("int arithmetic edge", "test_int_arithmetic_edge") test_case("int arithmetic negative", "test_int_arithmetic_negative") test_case("float arithmetic basic", "test_float_arithmetic_basic") test_case("float comparison basic", "test_float_comparison_basic") // ── json tests ───────────────────────────────────────────────────────────── test_case("json_get basic", "test_json_get_basic") test_case("json_get types", "test_json_get_types") test_case("json_get nested", "test_json_get_nested") test_case("json_get empty", "test_json_get_empty") test_case("json_get_int basic", "test_json_get_int_basic") test_case("json_get_bool basic", "test_json_get_bool_basic") test_case("json_get_float basic", "test_json_get_float_basic") test_case("json_set basic", "test_json_set_basic") test_case("json_set numeric", "test_json_set_numeric") test_case("json_set chained", "test_json_set_chained") test_case("json_array_len basic", "test_json_array_len_basic") test_case("json_array_get basic", "test_json_array_get_basic") test_case("json_array_get numbers", "test_json_array_get_numbers") test_case("json_array_get objects", "test_json_array_get_objects") test_case("json_escape_string basic", "test_json_escape_string_basic") test_case("json_escape_string backslash", "test_json_escape_string_backslash") test_case("json_escape roundtrip", "test_json_escape_roundtrip") test_case("json_build_object basic", "test_json_build_object_basic") test_case("json_build_object empty", "test_json_build_object_empty") test_case("json_build_array basic", "test_json_build_array_basic") test_case("json_build_array empty", "test_json_build_array_empty") test_case("json_build_array numbers", "test_json_build_array_numbers") test_case("json_array_push basic", "test_json_array_push_basic") test_case("json_array_push preserves order", "test_json_array_push_preserves_order") test_case("json nested set get", "test_json_nested_set_get") test_case("json array of objects", "test_json_array_of_objects") // ── state tests ──────────────────────────────────────────────────────────── test_case("state set get basic", "test_state_set_get_basic") test_case("state overwrite", "test_state_overwrite") test_case("state multiple keys", "test_state_multiple_keys") test_case("state missing key", "test_state_missing_key") test_case("state del basic", "test_state_del_basic") test_case("state del and reset", "test_state_del_and_reset") test_case("state has basic", "test_state_has_basic") test_case("state get_or basic", "test_state_get_or_basic") test_case("state cross function", "test_state_cross_function") test_case("state keys basic", "test_state_keys_basic") test_case("state value types", "test_state_value_types") // ── time tests ───────────────────────────────────────────────────────────── test_case("time_now basic", "test_time_now_basic") test_case("now_millis basic", "test_now_millis_basic") test_case("unix_timestamp_ms basic", "test_unix_timestamp_ms_basic") test_case("time_now_ms alias", "test_time_now_ms_alias") test_case("time monotonic now_millis", "test_time_monotonic_now_millis") test_case("time monotonic time_now", "test_time_monotonic_time_now") test_case("time monotonic now_ns", "test_time_monotonic_now_ns") test_case("unix_timestamp basic", "test_unix_timestamp_basic") test_case("time_to_parts basic", "test_time_to_parts_basic") test_case("time_to_parts epoch", "test_time_to_parts_epoch") test_case("time_to_parts current", "test_time_to_parts_current") test_case("time_format iso", "test_time_format_iso") test_case("time_format empty", "test_time_format_empty") test_case("time_format strftime", "test_time_format_strftime") test_case("time_add basic", "test_time_add_basic") test_case("time_add multiple", "test_time_add_multiple") test_case("time_diff basic", "test_time_diff_basic") test_case("time_diff larger", "test_time_diff_larger") test_case("time_diff zero", "test_time_diff_zero") test_case("duration helpers basic", "test_duration_helpers_basic") test_case("instant helpers basic", "test_instant_helpers_basic") test_case("uuid_new basic", "test_uuid_new_basic") test_case("uuid uniqueness", "test_uuid_uniqueness") test_case("time_from_parts basic", "test_time_from_parts_basic") test_case("instant_to_iso8601 basic", "test_instant_to_iso8601_basic") // ── filesystem tests ─────────────────────────────────────────────────────── test_case("fs write read basic", "test_fs_write_read_basic") test_case("fs write read multiline", "test_fs_write_read_multiline") test_case("fs write read empty", "test_fs_write_read_empty") test_case("fs write overwrite", "test_fs_write_overwrite") test_case("fs write large content", "test_fs_write_large_content") test_case("fs exists basic", "test_fs_exists_basic") test_case("fs exists nonexistent", "test_fs_exists_nonexistent") test_case("fs write creates file", "test_fs_write_creates_file") test_case("fs read nonexistent", "test_fs_read_nonexistent") test_case("fs write json", "test_fs_write_json") test_case("fs write json array", "test_fs_write_json_array") test_case("fs multiple files", "test_fs_multiple_files") test_case("fs mkdir basic", "test_fs_mkdir_basic") test_case("fs mkdir write inside", "test_fs_mkdir_write_inside") test_case("fs special chars", "test_fs_special_chars") test_case("fs unicode content", "test_fs_unicode_content") // ── collection / list tests ──────────────────────────────────────────────── test_case("list empty basic", "test_list_empty_basic") test_case("list empty multiple", "test_list_empty_multiple") test_case("list append single", "test_list_append_single") test_case("list append multiple", "test_list_append_multiple") test_case("list append order", "test_list_append_order") test_case("list append empty string", "test_list_append_empty_string") test_case("list len basic", "test_list_len_basic") test_case("list len large", "test_list_len_large") test_case("list get basic", "test_list_get_basic") test_case("list get preserves content", "test_list_get_preserves_content") test_case("list split join roundtrip", "test_list_split_join_roundtrip") test_case("list build and join", "test_list_build_and_join") test_case("list from split access", "test_list_from_split_access") test_case("native list empty basic", "test_native_list_empty_basic") test_case("native list append basic", "test_native_list_append_basic") test_case("native list join", "test_native_list_join") test_case("env list helpers", "test_env_list_helpers") test_case("list accumulate loop", "test_list_accumulate_loop") test_case("list string building", "test_list_string_building") return test_run_all() }