Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/development/std/str/casing_tests.nct

casing_tests.nct

//! Unicode default case-conversion contract tests.

see ./index.nct

use /mem

test default_casing_handles_full_and_contextual_mappings {
    let dotted_i = "İ".to_lowercase()
    if (&dotted_i as &str) != "i\xCC\x87" {
        return error.new("std.str.test", "full lowercase mapping changed")
    }

    let sharp_s = "ß".to_uppercase()
    if (&sharp_s as &str) != "SS" {
        return error.new("std.str.test", "full uppercase mapping changed")
    }

    let final_sigma = "ΟΣ".to_lowercase()
    let medial_sigma = "ΟΣΑ".to_lowercase()
    if (&final_sigma as &str) != "ος" || (&medial_sigma as &str) != "οσα" {
        return error.new("std.str.test", "Final_Sigma context changed")
    }

    let ignored_before = "Ο\xCC\x81Σ".to_lowercase()
    let ignored_after = "ΟΣ\xCC\x81".to_lowercase()
    if (&ignored_before as &str) != "ο\xCC\x81ς"
        || (&ignored_after as &str) != "ος\xCC\x81" {
        return error.new("std.str.test", "case-ignorable context changed")
    }
    return
}

test recoverable_casing_uses_the_selected_allocator {
    var allocator = mem.page_try_allocator()
    let lower = "İΣ".try_to_lowercase(&+allocator)?
    let upper = "ffiß".try_to_uppercase(&+allocator)?
    if (&lower as &str) != "i\xCC\x87ς" || (&upper as &str) != "FFISS" {
        return error.new("std.str.test", "recoverable default casing changed")
    }
    return
}