Skip to content

Claude Sonnet 5.5 · Coding

Claude Sonnet 5.5 for coding: our test runs

Claude Sonnet 5.5 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 28, 2026, Claude Sonnet 5.5 passed 5 of 5 of our coding prompts (both hard ones): tied 1st of 16 models. Each reply counted as 1 message on Pro, where it has 125 a month, and cost $0.0063 to run on average.

Prompt by prompt

Each of the 5 coding prompts, and how Claude Sonnet 5.5's reply did.

Claude Sonnet 5.5 on each coding prompt
PromptResultCostTime
Turn a title into a URL slugEverydayPassed: All 7 tests passed.$0.00281.8 s
Parse a duration like “1h 30m”EverydayPassed: All 10 tests passed.$0.00362.0 s
Merge overlapping intervalsEverydayPassed: All 7 tests passed.$0.00331.4 s
Evaluate an arithmetic expression, no evalHardPassed: All 15 tests passed.$0.01024.8 s
Parse CSV with quoted fieldsHardPassed: All 8 tests passed.$0.01145.3 s

Every coding reply from Claude Sonnet 5.5

  1. 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 String(title)
        .normalize("NFD")
        .replace(/[\u0300-\u036f]/g, "")
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, "-")
        .replace(/^-+|-+$/g, "");
    }
    ```

    673 tokens in, 112 out · 1.8 s · $0.0028 · 1 message on Pro · answered by anthropic/claude-sonnet-5.5 via Anthropic ·

  2. 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 = /^\s*(?:(\d+)\s*h)?\s*(?:(\d+)\s*m)?\s*(?:(\d+)\s*s)?\s*$/.exec(text);
      if (!match) return null;
      const [, h, m, s] = match;
      if (h === undefined && m === undefined && s === undefined) return null;
      return (h ? Number(h) * 3600 : 0) + (m ? Number(m) * 60 : 0) + (s ? Number(s) : 0);
    }
    ```

    628 tokens in, 208 out · 2.0 s · $0.0036 · 1 message on Pro · answered by anthropic/claude-sonnet-5.5 via Anthropic ·

  3. Merge overlapping intervals

    An everyday prompt: “Merge overlapping intervals”, in full.

    Passed: All 7 tests passed.

    ```javascript
    function mergeIntervals(intervals) {
      const sorted = intervals
        .map(([start, end]) => [start, end])
        .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
    
      const result = [];
      for (const [start, end] of sorted) {
        const last = result[result.length - 1];
        if (last && start <= last[1]) {
          if (end > last[1]) last[1] = end;
        } else {
          result.push([start, end]);
        }
      }
      return result;
    }
    ```

    623 tokens in, 180 out · 1.4 s · $0.0033 · 1 message on Pro · answered by anthropic/claude-sonnet-5.5 via Anthropic ·

  4. 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('Expression must be a string');
      const s = expression;
      let pos = 0;
    
      function skip() {
        while (pos < s.length && /\s/.test(s[pos])) pos++;
      }
    
      function peek() {
        skip();
        return pos < s.length ? s[pos] : null;
      }
    
      // expr := term (('+'|'-') term)*
      function parseExpr() {
        let left = parseTerm();
        for (;;) {
          const c = peek();
          if (c === '+') { pos++; left = left + parseTerm(); }
          else if (c === '-') { pos++; left = left - parseTerm(); }
          else return left;
        }
      }
    
      // term := unary (('*'|'/') unary)*
      function parseTerm() {
        let left = parseUnary();
        for (;;) {
          const c = peek();
          if (c === '*') { pos++; left = left * parseUnary(); }
          else if (c === '/') { pos++; left = left / parseUnary(); }
          else return left;
        }
      }
    
      // unary := '-' unary | power   (also allow unary plus? not required -> no)
      function parseUnary() {
        if (peek() === '-') {
          pos++;
          return -parseUnary();
        }
        return parsePower();
      }
    
      // power := primary ('^' unary)?   right-assoc; exponent may have unary minus
      function parsePower() {
        const base = parsePrimary();
        if (peek() === '^') {
          pos++;
          const exp = parseUnary();
          return Math.pow(base, exp);
        }
        return base;
      }
    
      function parsePrimary() {
        const c = peek();
        if (c === null) throw new Error('Unexpected end of expression');
        if (c === '(') {
          pos++;
          const v = parseExpr();
          if (peek() !== ')') throw new Error('Missing closing parenthesis');
          pos++;
          return v;
        }
        const m = /^(\d+(\.\d+)?|\.\d+)/.exec(s.slice(pos));
        if (m) {
          pos += m[0].length;
          return parseFloat(m[0]);
        }
        throw new Error('Unexpected character: ' + c);
      }
    
      const result = parseExpr();
      if (peek() !== null) throw new Error('Unexpected token: ' + s[pos]);
      return result;
    }
    ```

    764 tokens in, 827 out · 4.8 s · $0.0102 · 1 message on Pro · answered by anthropic/claude-sonnet-5.5 via Anthropic ·

  5. Parse CSV with quoted fields

    A hard prompt: “Parse CSV with quoted fields”, in full.

    Passed: All 8 tests passed.

    ```javascript
    function parseCsv(text) {
      const rows = [];
      let row = [];
      let field = "";
      let inQuotes = false;
      let fieldStarted = false; // any content or quote seen in current row
      const n = text.length;
    
      for (let i = 0; i < n; i++) {
        const c = text[i];
    
        if (inQuotes) {
          if (c === '"') {
            if (text[i + 1] === '"') {
              field += '"';
              i++;
            } else {
              inQuotes = false;
            }
          } else {
            field += c;
          }
          continue;
        }
    
        if (c === '"' && field === "" && !fieldStarted) {
          inQuotes = true;
          fieldStarted = true;
        } else if (c === ",") {
          row.push(field);
          field = "";
          fieldStarted = false;
          rowHasContent = true;
        } else if (c === "\n" || (c === "\r" && text[i + 1] === "\n")) {
          if (c === "\r") i++;
          row.push(field);
          rows.push(row);
          row = [];
          field = "";
          fieldStarted = false;
          rowHasContent = false;
        } else {
          field += c;
          fieldStarted = true;
        }
      }
    
      // Final row: only if the text didn't end with a line break
      if (field !== "" || fieldStarted || row.length > 0 || inQuotes) {
        row.push(field);
        rows.push(row);
      }
    
      return rows;
    }
    ```
    
    Wait — `rowHasContent` is undeclared, which would throw in strict mode. Here is the corrected version:
    
    ```javascript
    function parseCsv(text) {
      const rows = [];
      let row = [];
      let field = "";
      let inQuotes = false;
      let fieldStarted = false;
      const n = text.length;
    
      for (let i = 0; i < n; i++) {
        const c = text[i];
    
        if (inQuotes) {
          if (c === '"') {
            if (text[i + 1] === '"') {
              field += '"';
              i++;
            } else {
              inQuotes = false;
            }
          } else {
            field += c;
          }
          continue;
        }
    
        if (c === '"' && !fieldStarted) {
          inQuotes = true;
          fieldStarted = true;
        } else if (c === ",") {
          row.push(field);
          field = "";
          fieldStarted = false;
        } else if (c === "\n" || (c === "\r" && text[i + 1] === "\n")) {
          if (c === "\r") i++;
          row.push(field);
          rows.push(row);
          row = [];
          field = "";
          fieldStarted = false;
        } else {
          field += c;
          fieldStarted = true;
        }
      }
    
      if (fieldStarted || field !== "" || row.length > 0 || inQuotes) {
        row.push(field);
        rows.push(row);
      }
    
      return rows;
    }
    ```

    671 tokens in, 978 out · 5.3 s · $0.0114 · 1 message on Pro · answered by anthropic/claude-sonnet-5.5 via Anthropic ·

How it compares on coding

Claude Sonnet 5.5 beside the job's picks among every model. 14 models share the hard-problems pick, Claude Sonnet 5.5 among them.

Claude Sonnet 5.5 beside other models on coding
ModelPassedOn ProCost per reply
GLM 5.3Our pick: hard problems (shared), best value5 of 5250 a month on Pro$0.0015
GLM 5.3 FlashOur pick: hard problems (shared), everyday5 of 560 a day on Pro$0.0003
Claude Sonnet 5.5Our pick: hard problems (shared)5 of 5125 a month on Pro$0.0063
On Pro: Pro's count on each model. Cost: what OpenRouter charged us per reply, on average.

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.

Claude Sonnet 5.5 next to each model on coding

Claude Sonnet 5.5 against each model on the same 5 coding prompts. One run each, through OpenRouter: a wait depends on the provider and the load that day, so a lead under 10% counts as close.

  • Against Claude Fable 5.1: Claude Sonnet 5.5 answered 2.8× sooner (2.0 s to 5.5 s), cost 6.8× less, and passed 5 of 5 to its 5.

  • Against Claude Opus 5.5: Claude Sonnet 5.5 answered 3.7× sooner (2.0 s to 7.2 s), cost 2.7× less, and passed 5 of 5 to its 5.

  • Against Claude Sonnet 5: Claude Sonnet 5.5 answered 1.4× sooner (2.0 s to 2.7 s), cost 1.6× less, and passed 5 of 5 to its 5.

  • Against Claude Haiku 4.5: Claude Sonnet 5.5 answered 1.2× sooner (2.0 s to 2.3 s), cost 2.3× more, and passed 5 of 5 to its 3. Only Claude Sonnet 5.5 passed Evaluate an arithmetic expression, no eval; Parse CSV with quoted fields.

  • Against GPT-6 Astra: Claude Sonnet 5.5 answered 4.2× sooner (2.0 s to 8.2 s), cost 3.6× less, and passed 5 of 5 to its 5.

  • Against GPT-6 Sol: Claude Sonnet 5.5 answered 2.5× sooner (2.0 s to 4.8 s), cost 1.2× more, and passed 5 of 5 to its 5.

  • Against GPT-6 Luna: Claude Sonnet 5.5 answered 2.3× sooner (2.0 s to 4.6 s), cost 21.8× more, and passed 5 of 5 to its 5.

  • Against Gemini 3.1 Pro (preview): Claude Sonnet 5.5 answered 5.2× sooner (2.0 s to 10.3 s), cost 3.1× less, and passed 5 of 5 to its 5.

  • Against Gemini 3.8 Flash: Claude Sonnet 5.5 answered 2.1× sooner (2.0 s to 4.2 s), cost 3.2× more, and passed 5 of 5 to its 5.

  • Against DeepSeek V4.1 Flash: Claude Sonnet 5.5 answered 4.0× sooner (2.0 s to 7.8 s), cost 5.8× more, and passed 5 of 5 to its 5.

  • Against DeepSeek V4 Pro: Claude Sonnet 5.5 answered 10.3× sooner (2.0 s to 20.1 s), cost 2.1× less, and passed 5 of 5 to its 4. Only Claude Sonnet 5.5 passed Parse CSV with quoted fields.

  • Against Grok 4.7: Claude Sonnet 5.5 answered 12.9× sooner (2.0 s to 25.3 s), cost 3.5× less, and passed 5 of 5 to its 5.

  • Against Kimi K3: Claude Sonnet 5.5 answered 2.1× sooner (2.0 s to 4.1 s), cost within 10% of it, and passed 5 of 5 to its 5.

  • Against GLM 5.3: Claude Sonnet 5.5 answered 1.9× later (2.0 s to 1.1 s), cost 4.3× more, and passed 5 of 5 to its 5.

  • Against GLM 5.3 Flash: Claude Sonnet 5.5 answered 4.3× sooner (2.0 s to 8.4 s), cost 24.8× more, and passed 5 of 5 to its 5.

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.

How the runs were done, and every coding prompt.

Claude Sonnet 5.5, and coding, elsewhere

Questions

Is Claude Sonnet 5.5 good for coding?

In our test runs it passed 5 of 5 coding prompts, tied 1st of the 16 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 Claude Sonnet 5.5 use?

1 message each on Pro, where it has 125 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.