Download Game! Currently 67 players and visitors. Last logged in:PereZhouyuVihaanDesert

Blitzer's Blog >> 71977

Back to blogs index
Posted: 03 Sep 2026 20:17 [ permalink ]
user@elli:~/Downloads/Remote/LPC/GEM$ node harness.js tests/string.c
[1] Loading tests/string.c...
[2] Executing reference binary (tests/string)...
[3] Compiling LPC to JS via port...
[4] Executing generated JS...

[FAIL] Execution outputs do not match.

--- JS EXECUTION OUTPUT ---
(No Output)

--- EXPECTED LPC OUTPUT ---
Str: abcd123<XYZ>
Str[-2..-1]: Z>

Lower case: abcd123<xyz>
Upper case: ABCD123<XYZ>
Capitalize: Abcd123<XYZ>

Str [1 .. 2] = .b.c.

Str: a.b.c.d123<XYZ>
HTML: a.b.c.d123&lt;XYZ&gt;

Str[3..4]: .c
Crop(str,3,4): .c

Str: a.b.c.d123<XYZ>
Strpos(str,'c'): 4
Strpos(str,"d1"): 6
Strpos(str,'.'): 1 (.)
Strrpos(str,'.'): 5 (.)

Str + str [0]: a.b.c.d123<XYZ>97
Str + str [0 .. 0]: a.b.c.d123<XYZ>97a

substr_count(str,a): 2

dirname(str): .
str: a.b.c.d123<XYZ>97a/xyz
dirname(str): a.b.c.d123<XYZ>97a
str_truncate(str,50): 50 bytes: a.b.c.d123<XYZ>97a/xyz
str_truncate(str,5): 5 bytes: a.b.c
str_write (str,1,***): a***c.d123<XYZ>97a/xyz
str_write (str,20,***): a***c.d123<XYZ>97a/x***


--- GENERATED JAVASCRIPT EMISSION ---

const rt = {
    printf: (fmt, ...args) => {
        let i = 0;
        let res = fmt.replace(/%([sdc])/g, (match, type) => {
            let val = args[i++];
            if (type === 'c') return String.fromCharCode(val); // LPC %c
integer to char
            return val;
        });
        process_stdout.write(res);
    },
    lower_case: (s) => s.toLowerCase(),
    upper_case: (s) => s.toUpperCase(),
    capitalize: (s) => s.charAt(0).toUpperCase() + s.slice(1),
    htmlspecialchars: (s) => s.replace(/</g, "&lt;").replace(/>/g, "&gt;"),
    crop_string: function(s, start, end) { return this.range(s, start, end);
},
    strpos: (s, c) => typeof c === 'number' ? s.indexOf(String.fromCharCode(c))
 : s.indexOf(c),
    strrpos: (s, c) => typeof c === 'number' ? s.lastIndexOf(String.fromCharCod
e(c)) : s.lastIndexOf(c),
    substr_count: (s, c) => s.split(c).length - 1,
    dirname: (s) => {
        let idx = s.lastIndexOf('/');
        return idx === -1 ? "." : s.substring(0, idx);
    },
    str_truncate: (s, len) => s.length > len ? s.slice(0, len) : s,
    strlen: (s) => s.length,
    str_write: (s, pos, val) => s.substring(0, pos) + val + s.substring(pos +
val.length),
    
    // Core Array/String access mappings
    index: (s, idx) => {
        if (idx < 0) idx = s.length + idx;
        return typeof s === 'string' ? s.charCodeAt(idx) : s[idx]; // LPC
strings return int codes
    },
    range: (s, start, end) => {
        if (start < 0) start = s.length + start;
        if (end < 0) end = s.length + end;
        return s.slice(start, end + 1); // LPC slicing is inclusive
    },
    range_set: (s, start, end, val) => {
        if (start < 0) start = s.length + start;
        if (end < 0) end = s.length + end;
        return s.substring(0, start) + val + s.substring(end + 1);
    }
};
function lpc_main() {
  let str;
  let x;
  (str = _tmp_string0);
  rt.printf(_tmp_string1, str);
  rt.printf(_tmp_string2, rt.range(str, -2, (-1)));
  rt.printf(_tmp_string3);
  rt.printf(_tmp_string4, rt.lower_case(str));
  rt.printf(_tmp_string5, rt.upper_case(str));
  rt.printf(_tmp_string6, rt.capitalize(str));
  rt.printf(_tmp_string3);
  rt.printf(_tmp_string7);
  rt.printf(_tmp_string1, (rt.range(str, 1, 2) = _tmp_string8));
  rt.printf(_tmp_string9, rt.htmlspecialchars(str));
  rt.printf(_tmp_string3);
  rt.printf(_tmp_string10, rt.range(str, 3, 4));
  rt.printf(_tmp_string11, rt.crop_string(str, 3, 4));
  rt.printf(_tmp_string3);
  rt.printf(_tmp_string1, str);
  rt.printf(_tmp_string12, rt.strpos(str, _tmp_char13));
  rt.printf(_tmp_string14, rt.strpos(str, _tmp_string15));
  rt.printf(_tmp_string16, rt.strpos(str, _tmp_char17), rt.index(str,
rt.strpos(str, _tmp_char17)));
  rt.printf(_tmp_string18, rt.strrpos(str, _tmp_char17), rt.index(str,
rt.strrpos(str, _tmp_char17)));
  rt.printf(_tmp_string3);
  (str += rt.index(str, 0));
  rt.printf(_tmp_string19, str);
  (str += rt.range(str, 0, 0));
  rt.printf(_tmp_string20, str);
  rt.printf(_tmp_string3);
  rt.printf(_tmp_string21, rt.substr_count(str, _tmp_string22));
  rt.printf(_tmp_string23, rt.dirname(str));
  (str += _tmp_string24);
  rt.printf(_tmp_string25, str);
  rt.printf(_tmp_string26, rt.dirname(str));
  rt.printf(_tmp_string27, rt.strlen((x = rt.str_truncate(str, 50))), x);
  rt.printf(_tmp_string28, rt.strlen((x = rt.str_truncate(str, 5))), x);
  rt.printf(_tmp_string29, rt.str_write(str, 1, _tmp_string30));
  rt.printf(_tmp_string31, rt.str_write(str, 20, _tmp_string30));
  (str === str);
}

lpc_main();

user@elli:~/Downloads/Remote/LPC/GEM$