528 lines
18 KiB
Plaintext
528 lines
18 KiB
Plaintext
(module main)
|
|
|
|
(import std.fs (read_text read_text_result read_text_option write_text_status write_text_result exists is_file is_dir remove_file_result create_dir_result remove_file_ok create_dir_ok open_text_read_result read_open_text_result close_result read_text_via_handle_result close_ok read_text_or write_text_ok read_i32_result read_i32_option read_i32_or_zero read_i32_or read_u32_result read_u32_option read_u32_or_zero read_u32_or read_i64_result read_i64_option read_i64_or_zero read_i64_or read_u64_result read_u64_option read_u64_or_zero read_u64_or read_f64_result read_f64_option read_f64_or_zero read_f64_or read_bool_result read_bool_option read_bool_or_false read_bool_or))
|
|
|
|
(fn fixture_path () -> string
|
|
"glagol-std-import-fs-alpha.txt")
|
|
|
|
(fn fixture_text () -> string
|
|
"std fs source search alpha")
|
|
|
|
(fn missing_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-missing.txt")
|
|
|
|
(fn fallback_text () -> string
|
|
"std fs source fallback alpha")
|
|
|
|
(fn i32_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-i32.txt")
|
|
|
|
(fn i64_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-i64.txt")
|
|
|
|
(fn u32_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-u32.txt")
|
|
|
|
(fn u64_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-u64.txt")
|
|
|
|
(fn f64_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-f64.txt")
|
|
|
|
(fn bool_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-bool.txt")
|
|
|
|
(fn invalid_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-invalid.txt")
|
|
|
|
(fn dir_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-dir")
|
|
|
|
(fn dir_helper_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-dir-helper")
|
|
|
|
(fn removable_fixture_path () -> string
|
|
"glagol-std-import-fs-alpha-remove.txt")
|
|
|
|
(fn imported_write_text_status () -> i32
|
|
(write_text_status (fixture_path) (fixture_text)))
|
|
|
|
(fn imported_read_text () -> string
|
|
(write_text_status (fixture_path) (fixture_text))
|
|
(read_text (fixture_path)))
|
|
|
|
(fn imported_write_text_result () -> (result i32 i32)
|
|
(write_text_result (fixture_path) (fixture_text)))
|
|
|
|
(fn imported_read_text_result () -> (result string i32)
|
|
(write_text_status (fixture_path) (fixture_text))
|
|
(read_text_result (fixture_path)))
|
|
|
|
(fn imported_read_text_via_handle_result () -> (result string i32)
|
|
(write_text_status (fixture_path) (fixture_text))
|
|
(read_text_via_handle_result (fixture_path)))
|
|
|
|
(fn imported_handle_open_read_close_ok () -> bool
|
|
(write_text_status (fixture_path) (fixture_text))
|
|
(match (open_text_read_result (fixture_path))
|
|
((ok handle)
|
|
(let text string (unwrap_ok (read_open_text_result handle)))
|
|
(let close_status i32 (unwrap_ok (close_result handle)))
|
|
(and (= text (fixture_text)) (= close_status 0)))
|
|
((err code)
|
|
false)))
|
|
|
|
(fn imported_handle_closed_read_err () -> bool
|
|
(write_text_status (fixture_path) (fixture_text))
|
|
(match (open_text_read_result (fixture_path))
|
|
((ok handle)
|
|
(close_result handle)
|
|
(= (unwrap_err (read_open_text_result handle)) 1))
|
|
((err code)
|
|
false)))
|
|
|
|
(fn imported_handle_invalid_close_err () -> bool
|
|
(= (unwrap_err (close_result -1)) 1))
|
|
|
|
(fn imported_exists_file_ok () -> bool
|
|
(write_text_status (fixture_path) (fixture_text))
|
|
(if (exists (fixture_path))
|
|
(if (is_file (fixture_path))
|
|
(if (is_dir (fixture_path))
|
|
false
|
|
true)
|
|
false)
|
|
false))
|
|
|
|
(fn imported_exists_missing_false () -> bool
|
|
(if (exists (missing_fixture_path))
|
|
false
|
|
true))
|
|
|
|
(fn imported_create_dir_result_ok () -> bool
|
|
(if (is_dir (dir_fixture_path))
|
|
true
|
|
(= (unwrap_ok (create_dir_result (dir_fixture_path))) 0)))
|
|
|
|
(fn imported_is_dir_ok () -> bool
|
|
(imported_create_dir_result_ok)
|
|
(is_dir (dir_fixture_path)))
|
|
|
|
(fn imported_create_dir_ok_helper () -> bool
|
|
(if (is_dir (dir_helper_fixture_path))
|
|
true
|
|
(create_dir_ok (dir_helper_fixture_path))))
|
|
|
|
(fn imported_remove_file_result_ok () -> bool
|
|
(write_text_status (removable_fixture_path) (fixture_text))
|
|
(if (exists (removable_fixture_path))
|
|
(if (= (unwrap_ok (remove_file_result (removable_fixture_path))) 0)
|
|
(if (exists (removable_fixture_path))
|
|
false
|
|
true)
|
|
false)
|
|
false))
|
|
|
|
(fn imported_remove_file_ok_helper () -> bool
|
|
(write_text_status (removable_fixture_path) (fixture_text))
|
|
(if (remove_file_ok (removable_fixture_path))
|
|
(if (exists (removable_fixture_path))
|
|
false
|
|
true)
|
|
false))
|
|
|
|
(fn imported_fs_status_mutation_ok () -> bool
|
|
(if (imported_exists_file_ok)
|
|
(if (imported_exists_missing_false)
|
|
(if (imported_create_dir_result_ok)
|
|
(if (imported_is_dir_ok)
|
|
(if (imported_create_dir_ok_helper)
|
|
(if (imported_remove_file_result_ok)
|
|
(imported_remove_file_ok_helper)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false))
|
|
|
|
(fn imported_read_text_option_missing_none () -> bool
|
|
(match (read_text_option (missing_fixture_path))
|
|
((some text)
|
|
false)
|
|
((none)
|
|
true)))
|
|
|
|
(fn imported_read_text_option_present_some () -> bool
|
|
(write_text_status (fixture_path) (fixture_text))
|
|
(match (read_text_option (fixture_path))
|
|
((some text)
|
|
(= text (fixture_text)))
|
|
((none)
|
|
false)))
|
|
|
|
(fn imported_read_text_or_missing_fallback () -> bool
|
|
(= (read_text_or (missing_fixture_path) (fallback_text)) (fallback_text)))
|
|
|
|
(fn imported_read_text_or_present_value () -> bool
|
|
(write_text_status (fixture_path) (fixture_text))
|
|
(= (read_text_or (fixture_path) (fallback_text)) (fixture_text)))
|
|
|
|
(fn imported_write_text_ok () -> bool
|
|
(write_text_ok (fixture_path) (fixture_text)))
|
|
|
|
(fn imported_read_i32_result_present () -> bool
|
|
(write_text_status (i32_fixture_path) "42")
|
|
(match (read_i32_result (i32_fixture_path))
|
|
((ok value)
|
|
(= value 42))
|
|
((err code)
|
|
false)))
|
|
|
|
(fn imported_read_i32_or_zero_invalid () -> bool
|
|
(write_text_status (invalid_fixture_path) "bad")
|
|
(= (read_i32_or_zero (invalid_fixture_path)) 0))
|
|
|
|
(fn imported_read_u32_result_present () -> bool
|
|
(write_text_status (u32_fixture_path) "42")
|
|
(match (read_u32_result (u32_fixture_path))
|
|
((ok value)
|
|
(= value 42u32))
|
|
((err code)
|
|
false)))
|
|
|
|
(fn imported_read_u32_or_zero_invalid () -> bool
|
|
(write_text_status (invalid_fixture_path) "bad")
|
|
(= (read_u32_or_zero (invalid_fixture_path)) 0u32))
|
|
|
|
(fn imported_read_i64_result_present () -> bool
|
|
(write_text_status (i64_fixture_path) "42000000000")
|
|
(match (read_i64_result (i64_fixture_path))
|
|
((ok value)
|
|
(= value 42000000000i64))
|
|
((err code)
|
|
false)))
|
|
|
|
(fn imported_read_i64_or_zero_missing () -> bool
|
|
(= (read_i64_or_zero (missing_fixture_path)) 0i64))
|
|
|
|
(fn imported_read_u64_result_present () -> bool
|
|
(write_text_status (u64_fixture_path) "4294967296")
|
|
(match (read_u64_result (u64_fixture_path))
|
|
((ok value)
|
|
(= value 4294967296u64))
|
|
((err code)
|
|
false)))
|
|
|
|
(fn imported_read_u64_or_zero_missing () -> bool
|
|
(= (read_u64_or_zero (missing_fixture_path)) 0u64))
|
|
|
|
(fn imported_read_f64_result_present () -> bool
|
|
(write_text_status (f64_fixture_path) "42.5")
|
|
(match (read_f64_result (f64_fixture_path))
|
|
((ok value)
|
|
(= value 42.5))
|
|
((err code)
|
|
false)))
|
|
|
|
(fn imported_read_f64_or_zero_invalid () -> bool
|
|
(write_text_status (invalid_fixture_path) "bad")
|
|
(= (read_f64_or_zero (invalid_fixture_path)) 0.0))
|
|
|
|
(fn imported_read_bool_result_present () -> bool
|
|
(write_text_status (bool_fixture_path) "true")
|
|
(match (read_bool_result (bool_fixture_path))
|
|
((ok value)
|
|
value)
|
|
((err code)
|
|
false)))
|
|
|
|
(fn imported_read_bool_or_false_invalid () -> bool
|
|
(write_text_status (invalid_fixture_path) "bad")
|
|
(if (read_bool_or_false (invalid_fixture_path))
|
|
false
|
|
true))
|
|
|
|
(fn imported_typed_options_ok () -> bool
|
|
(write_text_status (i32_fixture_path) "42")
|
|
(write_text_status (u32_fixture_path) "42")
|
|
(write_text_status (i64_fixture_path) "42000000000")
|
|
(write_text_status (u64_fixture_path) "4294967296")
|
|
(write_text_status (f64_fixture_path) "42.5")
|
|
(write_text_status (bool_fixture_path) "true")
|
|
(write_text_status (invalid_fixture_path) "bad")
|
|
(if (match (read_i32_option (i32_fixture_path))
|
|
((some value)
|
|
(= value 42))
|
|
((none)
|
|
false))
|
|
(if (match (read_i32_option (invalid_fixture_path))
|
|
((some value)
|
|
false)
|
|
((none)
|
|
true))
|
|
(if (match (read_u32_option (u32_fixture_path))
|
|
((some value)
|
|
(= value 42u32))
|
|
((none)
|
|
false))
|
|
(if (match (read_u32_option (invalid_fixture_path))
|
|
((some value)
|
|
false)
|
|
((none)
|
|
true))
|
|
(if (match (read_i64_option (i64_fixture_path))
|
|
((some value)
|
|
(= value 42000000000i64))
|
|
((none)
|
|
false))
|
|
(if (match (read_i64_option (missing_fixture_path))
|
|
((some value)
|
|
false)
|
|
((none)
|
|
true))
|
|
(if (match (read_u64_option (u64_fixture_path))
|
|
((some value)
|
|
(= value 4294967296u64))
|
|
((none)
|
|
false))
|
|
(if (match (read_u64_option (missing_fixture_path))
|
|
((some value)
|
|
false)
|
|
((none)
|
|
true))
|
|
(if (match (read_f64_option (f64_fixture_path))
|
|
((some value)
|
|
(= value 42.5))
|
|
((none)
|
|
false))
|
|
(if (match (read_f64_option (invalid_fixture_path))
|
|
((some value)
|
|
false)
|
|
((none)
|
|
true))
|
|
(if (match (read_bool_option (bool_fixture_path))
|
|
((some value)
|
|
value)
|
|
((none)
|
|
false))
|
|
(match (read_bool_option (invalid_fixture_path))
|
|
((some value)
|
|
false)
|
|
((none)
|
|
true))
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false))
|
|
|
|
(fn imported_typed_custom_fallbacks_ok () -> bool
|
|
(write_text_status (i32_fixture_path) "42")
|
|
(write_text_status (u32_fixture_path) "42")
|
|
(write_text_status (i64_fixture_path) "42000000000")
|
|
(write_text_status (u64_fixture_path) "4294967296")
|
|
(write_text_status (f64_fixture_path) "42.5")
|
|
(write_text_status (bool_fixture_path) "true")
|
|
(write_text_status (invalid_fixture_path) "bad")
|
|
(if (= (read_i32_or (i32_fixture_path) 7) 42)
|
|
(if (= (read_i32_or (invalid_fixture_path) 7) 7)
|
|
(if (= (read_u32_or (u32_fixture_path) 7u32) 42u32)
|
|
(if (= (read_u32_or (invalid_fixture_path) 7u32) 7u32)
|
|
(if (= (read_i64_or (i64_fixture_path) 9i64) 42000000000i64)
|
|
(if (= (read_i64_or (invalid_fixture_path) 9i64) 9i64)
|
|
(if (= (read_u64_or (u64_fixture_path) 9u64) 4294967296u64)
|
|
(if (= (read_u64_or (invalid_fixture_path) 9u64) 9u64)
|
|
(if (= (read_f64_or (f64_fixture_path) 1.5) 42.5)
|
|
(if (= (read_f64_or (invalid_fixture_path) 1.5) 1.5)
|
|
(if (read_bool_or (bool_fixture_path) false)
|
|
(read_bool_or (invalid_fixture_path) true)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false))
|
|
|
|
(fn imported_status_roundtrip_ok () -> bool
|
|
(write_text_status (fixture_path) (fixture_text))
|
|
(= (read_text (fixture_path)) (fixture_text)))
|
|
|
|
(fn imported_result_roundtrip_ok () -> bool
|
|
(write_text_result (fixture_path) (fixture_text))
|
|
(= (unwrap_ok (read_text_result (fixture_path))) (fixture_text)))
|
|
|
|
(fn imported_fs_facade_ok () -> bool
|
|
(if (imported_status_roundtrip_ok)
|
|
(if (imported_result_roundtrip_ok)
|
|
(if (imported_read_text_option_missing_none)
|
|
(if (imported_read_text_option_present_some)
|
|
(if (imported_read_text_or_missing_fallback)
|
|
(if (imported_read_text_or_present_value)
|
|
(if (imported_write_text_ok)
|
|
(if (imported_read_i32_result_present)
|
|
(if (imported_read_i32_or_zero_invalid)
|
|
(if (imported_read_u32_result_present)
|
|
(if (imported_read_u32_or_zero_invalid)
|
|
(if (imported_read_i64_result_present)
|
|
(if (imported_read_i64_or_zero_missing)
|
|
(if (imported_read_u64_result_present)
|
|
(if (imported_read_u64_or_zero_missing)
|
|
(if (imported_read_f64_result_present)
|
|
(if (imported_read_f64_or_zero_invalid)
|
|
(if (imported_read_bool_result_present)
|
|
(if (imported_read_bool_or_false_invalid)
|
|
(if (imported_typed_options_ok)
|
|
(if (imported_typed_custom_fallbacks_ok)
|
|
(if (= (unwrap_ok (imported_read_text_via_handle_result)) (fixture_text))
|
|
(if (imported_handle_open_read_close_ok)
|
|
(if (imported_handle_closed_read_err)
|
|
(if (imported_handle_invalid_close_err)
|
|
(imported_fs_status_mutation_ok)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false)
|
|
false))
|
|
|
|
(fn main () -> i32
|
|
(if (imported_fs_facade_ok)
|
|
42
|
|
1))
|
|
|
|
(test "explicit std fs write text status facade"
|
|
(= (imported_write_text_status) 0))
|
|
|
|
(test "explicit std fs read text facade"
|
|
(= (imported_read_text) (fixture_text)))
|
|
|
|
(test "explicit std fs write text result facade"
|
|
(= (unwrap_ok (imported_write_text_result)) 0))
|
|
|
|
(test "explicit std fs read text result facade"
|
|
(= (unwrap_ok (imported_read_text_result)) (fixture_text)))
|
|
|
|
(test "explicit std fs read text via handle facade"
|
|
(= (unwrap_ok (imported_read_text_via_handle_result)) (fixture_text)))
|
|
|
|
(test "explicit std fs open read close handle facade"
|
|
(imported_handle_open_read_close_ok))
|
|
|
|
(test "explicit std fs closed handle read err facade"
|
|
(imported_handle_closed_read_err))
|
|
|
|
(test "explicit std fs invalid close err facade"
|
|
(imported_handle_invalid_close_err))
|
|
|
|
(test "explicit std fs exists file facade"
|
|
(imported_exists_file_ok))
|
|
|
|
(test "explicit std fs exists missing facade"
|
|
(imported_exists_missing_false))
|
|
|
|
(test "explicit std fs create dir result facade"
|
|
(imported_create_dir_result_ok))
|
|
|
|
(test "explicit std fs is dir facade"
|
|
(imported_is_dir_ok))
|
|
|
|
(test "explicit std fs create dir ok facade"
|
|
(imported_create_dir_ok_helper))
|
|
|
|
(test "explicit std fs remove file result facade"
|
|
(imported_remove_file_result_ok))
|
|
|
|
(test "explicit std fs remove file ok facade"
|
|
(imported_remove_file_ok_helper))
|
|
|
|
(test "explicit std fs read text option missing facade"
|
|
(imported_read_text_option_missing_none))
|
|
|
|
(test "explicit std fs read text option present facade"
|
|
(imported_read_text_option_present_some))
|
|
|
|
(test "explicit std fs read text or missing facade"
|
|
(imported_read_text_or_missing_fallback))
|
|
|
|
(test "explicit std fs read text or present facade"
|
|
(imported_read_text_or_present_value))
|
|
|
|
(test "explicit std fs write text ok facade"
|
|
(imported_write_text_ok))
|
|
|
|
(test "explicit std fs read i32 result present facade"
|
|
(imported_read_i32_result_present))
|
|
|
|
(test "explicit std fs read i32 or zero invalid facade"
|
|
(imported_read_i32_or_zero_invalid))
|
|
|
|
(test "explicit std fs read u32 result present facade"
|
|
(imported_read_u32_result_present))
|
|
|
|
(test "explicit std fs read u32 or zero invalid facade"
|
|
(imported_read_u32_or_zero_invalid))
|
|
|
|
(test "explicit std fs read i64 result present facade"
|
|
(imported_read_i64_result_present))
|
|
|
|
(test "explicit std fs read i64 or zero missing facade"
|
|
(imported_read_i64_or_zero_missing))
|
|
|
|
(test "explicit std fs read u64 result present facade"
|
|
(imported_read_u64_result_present))
|
|
|
|
(test "explicit std fs read u64 or zero missing facade"
|
|
(imported_read_u64_or_zero_missing))
|
|
|
|
(test "explicit std fs read f64 result present facade"
|
|
(imported_read_f64_result_present))
|
|
|
|
(test "explicit std fs read f64 or zero invalid facade"
|
|
(imported_read_f64_or_zero_invalid))
|
|
|
|
(test "explicit std fs read bool result present facade"
|
|
(imported_read_bool_result_present))
|
|
|
|
(test "explicit std fs read bool or false invalid facade"
|
|
(imported_read_bool_or_false_invalid))
|
|
|
|
(test "explicit std fs typed option facade"
|
|
(imported_typed_options_ok))
|
|
|
|
(test "explicit std fs typed custom fallback facade"
|
|
(imported_typed_custom_fallbacks_ok))
|
|
|
|
(test "explicit std fs facade all"
|
|
(= (main) 42))
|