///|
fn main {
try {
let source = "~V\r\nVERS. 2.0 : version\r\nWRAP. NO : layout\r\n~W\r\nSTRT.M 0 : start\r\nSTOP.M 2 : stop\r\nSTEP.M 1 : step\r\nNULL. -999.25 : null\r\nCOMP. : company\r\nWELL. SYN:CASE : well\r\nFLD. : field\r\nLOC. : location\r\nPROV. : province\r\nSRVC. : service\r\nDATE. : date\r\nUWI. : identifier\r\n~C\r\nDEPT.M : depth\r\nGR.GAPI 07 010 01 00 : gamma\r\n~A\r\n0 10\r\n1 -999.25\r\n2 30\r\n"
let doc = @well.read_las_document(source)
assert_eq(@well.document_text(doc), source)
assert_eq(@well.check_las2(doc).length(), 0)
let log = @well.document_to_log(doc)
for wrapped in [false, true] {
let output = @well.write_las_strict(log, wrapped~)
assert_eq(@well.check_las2(@well.read_las_document(output)).length(), 0)
assert_eq(@well.parse_strict(output).curves[1].api_code, "07 010 01 00")
}
let duplicate = source.replace(old="GR.GAPI", new="DEPT.GAPI")
let archive = @well.read_las_document(duplicate)
assert_eq(@well.check_las2(archive).length(), 0)
assert_eq(@well.document_text(archive), duplicate)
assert_eq(
@well.document_entries(archive).filter(e => e.section == "C").length(),
2,
)
let limited = try {
ignore(@well.document_to_log(archive))
false
} catch {
@well.WellError(message) => message.has_prefix("model:")
}
assert_true(limited)
let invalid = source.replace(old="COMP. : company\r\n", new="")
let errors = @well.check_las2(@well.read_las_document(invalid))
assert_true(errors.any(d => d.kind == "standard" && d.field == "COMP"))
println(
"LAS2 strict validate -> analyze -> write both WRAPs; exact archive; model/standard diagnostics passed",
)
} catch {
error => abort(error.to_string())
}
}