return {
    test_array_basic: function() {
        var arr1 = ["Hello", " ", "World"]
        var result1 = text(arr1)
        if (result1 != "Hello World") disrupt
    },

    test_array_separator: function() {
        var arr2 = ["one", "two", "three"]
        var result2 = text(arr2, ", ")
        if (result2 != "one, two, three") disrupt
    },

    test_array_codepoints: function() {
        var arr3 = [72, 101, 108, 108, 111]
        var result3 = text(arr3)
        if (result3 != "Hello") disrupt
    },

    test_array_mixed: function() {
        var arr4 = ["Hi", 32, "there", 33]
        var result4 = text(arr4)
        if (result4 != "Hi there!") disrupt
    },

    test_radix_10: function() {
        var result = text(12, 10)
        if (result != "12") disrupt
    },

    test_radix_8: function() {
        var result = text(12, 8)
        if (result != "14") disrupt
    },

    test_radix_16: function() {
        var result = text(12, 16)
        if (result != "c") disrupt
    },

    test_radix_2: function() {
        var result = text(12, 2)
        if (result != "1100") disrupt
    },

    test_radix_32: function() {
        var result = text(12, 32)
        if (result != "c") disrupt
    },

    test_radix_hex_large: function() {
        var result = text(255, 16)
        if (result != "ff") disrupt
    },

    test_radix_negative: function() {
        var result = text(-42, 10)
        if (result != "-42") disrupt
    },

    test_radix_36: function() {
        var result = text(100, 36)
        if (result != "2s") disrupt
    },

    test_format_n: function() {
        var result = text(123456789.1, "n")
        if (result != "123456789.1") disrupt
    },

    test_format_spaced_decimal: function() {
        var result = text(123456789.1, "3s4")
        if (result != "123 456 789.1000") disrupt
    },

    test_format_s: function() {
        var result = text(123456789.1, "s")
        if (result != "123 456 789.1") disrupt
    },

    test_format_d2: function() {
        var result = text(123456789.1, "d2")
        if (result != "123,456,789.10") disrupt
    },

    test_format_4d0: function() {
        var result = text(123456789.1, "4d0")
        if (result != "1,2345,6789.1") disrupt
    },

    test_format_e: function() {
        var result = text(123456789.1, "e")
        if (result != "1.234567891e+8") disrupt
    },

    test_format_e4: function() {
        var result = text(123456789.1, "e4")
        if (result != "1.2346e+8") disrupt
    },

    test_format_i: function() {
        var result = text(123456789.1, "i")
        if (result != "123456789") disrupt
    },

    test_format_8b: function() {
        var result = text(123456789.1, "8b")
        if (result != "111_01011011_11001101_00010101") disrupt
    },

    test_format_o: function() {
        var result = text(123456789.1, "o")
        if (result != "726746425") disrupt
    },

    test_format_h: function() {
        var result = text(123456789.1, "h")
        if (result != "75BCD15") disrupt
    },

    test_format_t: function() {
        var result = text(123456789.1, "t")
        if (result != "3NQK8N") disrupt
    },

    test_int_4b8: function() {
        var result = text(12, "4b8")
        if (result != "0000_1100") disrupt
    },

    test_int_o3: function() {
        var result = text(12, "o3")
        if (result != "014") disrupt
    },

    test_int_h4: function() {
        var result = text(12, "h4")
        if (result != "000C") disrupt
    },

    test_int_t2: function() {
        var result = text(12, "t2")
        if (result != "0C") disrupt
    },

    test_int_h_negative: function() {
        var result = text(-15, "h")
        if (result != "-F") disrupt
    },

    test_int_b_zero: function() {
        var result = text(0, "b")
        if (result != "0") disrupt
    },

    test_substr_start: function() {
        var str = "miskatonic"
        var result = text(str, 0, 3)
        if (result != "mis") disrupt
    },

    test_substr_middle: function() {
        var str = "miskatonic"
        var result = text(str, 3, 6)
        if (result != "kat") disrupt
    },

    test_substr_to_end: function() {
        var str = "miskatonic"
        var result = text(str, 5, null)
        if (result != "tonic") disrupt
    },

    test_substr_negative_to: function() {
        var str = "miskatonic"
        var result = text(str, 0, -4)
        if (result != "miskat") disrupt
    },

    test_substr_negative_from: function() {
        var str = "miskatonic"
        var result = text(str, -3, null)
        if (result != "nic") disrupt
    },

    test_substr_empty_range: function() {
        var str = "miskatonic"
        var result = text(str, 0, 0)
        if (result != "") disrupt
    },

    test_substr_past_end: function() {
        var str = "miskatonic"
        var result = text(str, 10, null)
        if (result != "") disrupt
    },

    test_substr_out_of_bounds: function() {
        var str = "miskatonic"
        var result = text(str, 11, null)
        if (result != null) disrupt
    },

    test_substr_invalid_range: function() {
        var str = "miskatonic"
        var result = text(str, 2, 1)
        if (result != null) disrupt
    },

    test_empty_array: function() {
        var result = text([])
        if (result != "") disrupt
    },

    test_single_element: function() {
        var result = text([42])
        if (result != "42") disrupt
    },

    test_identity: function() {
        var result = text("hello")
        if (result != "hello") disrupt
    },

    test_invalid_format: function() {
        var result = text(123, "xyz")
        if (result != null) disrupt
    },

    test_tiny_number: function() {
        var tiny = 0.0000001
        var result = text(tiny, "n")
        if (search(result, 'e', 0) == null) disrupt
    },

    test_huge_number: function() {
        var huge = 1e22
        var result = text(huge, "n")
        if (search(result, 'e', 0) == null) disrupt
    }
}
