GLM 5.3 · Coding
GLM 5.3 for coding: our test runs
GLM 5.3 ran our 5 coding prompts in llmwise, through the same pipeline your messages take. Here's every reply as it came, whether it passed, what it cost and what it counts as on Pro, next to the other models.
Based on 5 of our test runs on , through OpenRouter with the app's own prompt and settings. Updated .
Short answer
In our test runs on September 27, 2026, GLM 5.3 passed 5 of 5 of our coding prompts (both hard ones): tied 1st of 15 models. Each reply counted as 1 message on Pro, where it has 250 a month, and cost $0.0015 to run on average.
Prompt by prompt
Each of the 5 coding prompts, and how GLM 5.3's reply did.
| Prompt | Result | Cost | Time |
|---|---|---|---|
| Turn a title into a URL slugEveryday | Passed: All 7 tests passed. | $0.0010 | 0.4 s |
| Parse a duration like “1h 30m”Everyday | Passed: All 10 tests passed. | $0.0014 | 1.1 s |
| Merge overlapping intervalsEveryday | Passed: All 7 tests passed. | $0.0008 | 0.8 s |
| Evaluate an arithmetic expression, no evalHard | Passed: All 15 tests passed. | $0.0017 | 12.5 s |
| Parse CSV with quoted fieldsHard | Passed: All 8 tests passed. | $0.0024 | 2.6 s |
Every coding reply from GLM 5.3
Turn a title into a URL slug
An everyday prompt: “Turn a title into a URL slug”, in full.
Passed: All 7 tests passed.
```javascript function slugify(title) { return title .normalize("NFD") .replace(/[\u0300-\u036f]/g, "") .toLowerCase() .replace(/[^a-z0-9]+/g, "-") .replace(/^-+|-+$/g, ""); } ```498 tokens in, 74 out · 0.4 s · $0.0010 · 1 message on Pro · answered by z-ai/glm-5.3 via Modal ·
Parse a duration like “1h 30m”
An everyday prompt: “Parse a duration like “1h 30m””, in full.
Passed: All 10 tests passed.
```javascript function parseDuration(text) { if (typeof text !== "string") return null; const match = text.trim().match(/^(?:(\d+)h)?\s*(?:(\d+)m)?\s*(?:(\d+)s)?$/); if (!match || match[0].trim() === "") return null; const h = match[1] ? parseInt(match[1], 10) * 3600 : 0; const m = match[2] ? parseInt(match[2], 10) * 60 : 0; const s = match[3] ? parseInt(match[3], 10) : 0; return h + m + s; } ```503 tokens in, 161 out (4 of them reasoning) · 1.1 s · $0.0014 · 1 message on Pro · answered by z-ai/glm-5.3 via Wafer ·
Merge overlapping intervals
An everyday prompt: “Merge overlapping intervals”, in full.
Passed: All 7 tests passed.
```javascript function mergeIntervals(intervals) { const sorted = [...intervals].sort((a, b) => a[0] - b[0]); const result = []; for (const [start, end] of sorted) { const last = result[result.length - 1]; if (last && start <= last[1]) { last[1] = Math.max(last[1], end); } else { result.push([start, end]); } } return result; } ```486 tokens in, 114 out (1 of them reasoning) · 0.8 s · $0.0008 · 1 message on Pro · answered by z-ai/glm-5.3 via Wafer ·
Evaluate an arithmetic expression, no eval
A hard prompt: “Evaluate an arithmetic expression, no eval”, in full.
Passed: All 15 tests passed.
```javascript function evaluate(expression) { if (typeof expression !== 'string') throw new Error('Invalid expression'); const src = expression; let pos = 0; function skipSpaces() { while (pos < src.length && /\s/.test(src[pos])) pos++; } function parseExpr() { let left = parseTerm(); for (;;) { skipSpaces(); if (src[pos] === '+') { pos++; left += parseTerm(); } else if (src[pos] === '-') { pos++; left -= parseTerm(); } else return left; } } function parseTerm() { let left = parseUnary(); for (;;) { skipSpaces(); if (src[pos] === '*') { pos++; left *= parseUnary(); } else if (src[pos] === '/') { pos++; left /= parseUnary(); } else return left; } } function parseUnary() { skipSpaces(); if (src[pos] === '-') { pos++; return -parseUnary(); } return parsePower(); } function parsePower() { const base = parsePrimary(); skipSpaces(); if (src[pos] === '^') { pos++; return Math.pow(base, parseUnary()); // right-assoc, exponent may be unary } return base; } function parsePrimary() { skipSpaces(); if (src[pos] === '(') { pos++; const value = parseExpr(); skipSpaces(); if (src[pos] !== ')') throw new Error('Invalid expression: expected )'); pos++; return value; } if (src[pos] === '-') return parseUnary(); // handled here too for safety const start = pos; while (pos < src.length && /[0-9.]/.test(src[pos])) pos++; if (pos === start) throw new Error('Invalid expression: expected number'); const text = src.slice(start, pos); if (!/^\d+(\.\d+)?$|^\.\d+$/.test(text)) throw new Error('Invalid number: ' + text); return parseFloat(text); } const result = parseExpr(); skipSpaces(); if (pos !== src.length) throw new Error('Invalid expression: unexpected trailing input'); return result; } ```562 tokens in, 594 out (85 of them reasoning) · 12.5 s · $0.0017 · 1 message on Pro · answered by z-ai/glm-5.3 via Reka ·
Parse CSV with quoted fields
A hard prompt: “Parse CSV with quoted fields”, in full.
Passed: All 8 tests passed.
```javascript function parseCsv(text) { if (text === '') return []; const rows = []; let row = []; let field = ''; let inQuotes = false; let i = 0; const n = text.length; while (i < n) { const c = text[i]; if (inQuotes) { if (c === '"') { if (text[i + 1] === '"') { field += '"'; i += 2; } else { inQuotes = false; i++; } } else { field += c; i++; } continue; } if (c === '"' && field === '' && (i === 0 || /[\n\r,]/.test(text[i - 1]))) { inQuotes = true; i++; } else if (c === ',') { row.push(field); field = ''; i++; } else if (c === '\r' && text[i + 1] === '\n') { row.push(field); rows.push(row); row = []; field = ''; i += 2; } else if (c === '\n' || c === '\r') { row.push(field); rows.push(row); row = []; field = ''; i++; } else { field += c; i++; } } // Only emit a final row if there's a pending field/row (avoids trailing newline creating empty row) if (field !== '' || row.length > 0) { row.push(field); rows.push(row); } return rows; } ``` Notes on behavior: - A quote only starts a quoted field at the beginning of a field (start of input, after a comma, or after a line break), per your third rule; otherwise `"` is literal. - `""` inside quotes becomes a single `"`. - Embedded `\n`/`\r\n` inside quotes stays in the field; a trailing newline at the end of input doesn't create an empty final row; `''` returns `[]`.518 tokens in, 463 out (7 of them reasoning) · 2.6 s · $0.0024 · 1 message on Pro · answered by z-ai/glm-5.3 via Wafer ·
How it compares on coding
GLM 5.3 beside the job's picks among every model. 13 models share the hard-problems pick, GLM 5.3 among them.
| Model | Passed | On Pro | Cost per reply |
|---|---|---|---|
| GLM 5.3Our pick: hard problems (shared), best value | 5 of 5 | 250 a month on Pro | $0.0015 |
| GLM 5.3 FlashOur pick: hard problems (shared), everyday | 5 of 5 | 60 a day on Pro | $0.0003 |
Every limit is published. Paid plans also have a monthly fair-use limit on AI cost: Pro $7.50, Max $20, Ultra $42, Studio $85. Using every message on your plan at typical sizes stays under it; very large messages and heavy research use it faster. Every limit, explained.
How these runs were done
Tests. Automatic. The function runs against the prompt's tests in a separate Node.js process with a time limit and no file, network or child-process access; it passes when every test passes.
GLM 5.3, and coding, elsewhere
Questions
Is GLM 5.3 good for coding?
In our test runs it passed 5 of 5 coding prompts, tied 1st of the 15 models in llmwise. Every reply is on this page, so you can judge them yourself.
How many of my messages does a coding reply from GLM 5.3 use?
1 message each on Pro, where it has 250 a month on Pro. The price of a message is fixed and shown before you send it, however long the reply.
How were these runs done?
The same way for every model: each prompt sent through llmwise's own pipeline, each reply checked the same way. The methods page has every prompt and how each is scored.
Claude, GPT, Gemini, DeepSeek, Grok, Kimi, and GLM, in one chat.
See what a message costs before you send it. Free is 5 messages to try; sign in with an email link, no password or card.