Methodology
Last updated
Every tool on this site applies a defined rule. This page records the standard and test approach for the tools below — the places where a plausible answer and a correct one can differ. If a result disagrees with the standard named here, it is a defect — please report it.
Detailed entries: 33 tools. The full catalogue of 102 tools is in the tool directory; each tool page carries its own notes and limits.
Tools · Testing · Numeral bases · Known limits
Tools covered here
| Tool | Basis | What is tested |
|---|---|---|
| Numeral systems (22 scripts) | Ten consecutive Unicode decimal-digit code points per script; the base of each block is listed below. | Every script is asserted to yield ten distinct digits, and round-trips are tested. |
| Roman numerals | Canonical additive and subtractive notation. Validity is enforced by round-tripping: the parsed value must render back to the original string. | Valid forms, illegal characters, and non-canonical forms such as IIII and VX. |
| Chinese numerals | Everyday 一二三 and financial 壹贰叁 forms, with the 万/亿 grouping and the zero rules of written Chinese numbers. | Round-trips across 0–3000, plus the financial forms used on cheques. |
| Number to words | English number words with the optional “and”, and cheque-style amounts with the units and cents spelled out. | Boundary values, decimals, currencies and very large and very small numbers. |
| Pinyin tones | The standard tone-mark placement rule (a, o, e, i/u/ü), with v accepted for ü. | Marks ↔ numbers round-trips across curated syllables and random input. |
| Kana converter | Unicode hiragana and katakana blocks plus Hepburn romanisation, with digraphs and the sokuon handled. | Digraphs, the small tsu, and the long vowel cases. |
| Cyrillic transliteration | Reversible ISO 9 or an English-readable scheme, with the full alphabet table stated on the page. | ISO 9 round-trips and readable renderings of common names. |
| Remove Vietnamese accents | Unicode normalization form NFD, then removal of combining marks U+0300–U+036F; đ/Đ mapped explicitly because they do not decompose. | Published examples plus composed and decomposed variants of the same word. |
| Morse code | International Morse per ITU-R M.1677-1, with an explicit word separator. | Round-trip in both directions and reporting of unmappable characters. |
| Braille translator | Unicode Braille Patterns block, Grade 1, with the number sign and capital sign. | Both directions, including the capital and number signs. |
| NATO phonetic alphabet | The NATO/ICAO spelling alphabet. | Full mapping and reporting of characters outside the table. |
| Character and word counter | Counting by Unicode code point; UTF-8 byte counts per RFC 3629; sentences by terminator including full-width forms. | Multilingual sample strings where character and byte counts differ. |
| Case converter | Unicode character case properties (uppercase, lowercase, titlecase mappings), not an ASCII table. | All four modes, accented letters, and the quoted spreadsheet formulas. |
| Whitespace cleaner | Targeted Unicode ranges: U+200B–U+200F, U+202A–U+202E, U+2060–U+2064, U+FEFF for zero-width; U+00A0, U+202F, U+2007 for non-breaking spaces. | Each range individually, plus confirmation that letters, combining marks and emoji are untouched. |
| Slug generator | Unicode NFD folding for accents plus an explicit map for letters that do not decompose (đ→d, ß→ss, ø→o); every other run of non-alphanumerics becomes one hyphen. | Accented and mixed-script titles, including the cases in the worked example. |
| Line tools | Deterministic line operations: sort, reverse sort, sort by length, de-duplicate, reverse, shuffle and number. | Each action on curated line sets, including duplicates and blank lines. |
| Remove line breaks | Three modes — join with a space, join with nothing, or collapse blank lines into paragraph breaks. | Each mode on hard-wrapped and paragraph text. |
| Upside-down text | A 180°-rotation glyph map in the Unicode character repertoire, with reversal of character order. | Mapping coverage and reporting of characters with no rotated form. |
| Text repeater | Plain repeat-and-join; the separator is inserted between copies only, never after the last. | Each separator, zero and empty input, and the repeat limit. |
| Zalgo text generator | Stacked Unicode combining marks at four intensities, with a strip operation that removes them. | Strip(strip-safe) round-trips and per-intensity output. |
| Fancy text generator | Twelve Unicode alphabets (bold, italic, script, fraktur, double-struck, monospace, circled, small caps and more). | One-to-one mapping per style, and that characters outside the style are preserved. |
| Word frequency counter | Word tokenisation, rank by count, each word’s share of the total, and a CSV export. | Ordering, case sensitivity and the reported totals. |
| Unicode inspector | Iteration by code point, UTF-8 encoding, and Unicode general-category properties (L, N, M, Z, C, P, S). | Precomposed versus decomposed characters, and invisible format characters. |
| Binary & hex text converter | UTF-8 bytes rendered as binary, hexadecimal, octal or decimal byte values. | Round-trips for accented, CJK and emoji text. |
| Full-width converter | The Unicode full-width forms block U+FF01–U+FF5E and its offset from the ASCII range. | Both directions, including space and punctuation. |
| Superscript & subscript | The Unicode superscript and subscript character blocks, counting characters that have no such form. | Mapped characters and preservation of those without a form. |
| Base64 encoder & decoder | RFC 4648 alphabet over the UTF-8 bytes of the input; whitespace is ignored and invalid input is rejected. | UTF-8 round-trips and malformed-input handling. |
| URL encoder & decoder | RFC 3986 percent-encoding, in two modes: a single query component (encodeURIComponent) or a whole URL (encodeURI). | Reserved characters and UTF-8 sequences in both modes. |
| JSON formatter & validator | Parsing and re-serialisation per RFC 8259 / ECMA-404, with the error reported instead of guessing. | Valid formatting and minification, and the reported position of invalid input. |
| UUID generator | RFC 4122 version-4 UUIDs: 122 random bits with the version and variant bits set. | Format, version nibble, variant nibble and uniqueness across a batch. |
| Hash generator | SHA-1, SHA-256, SHA-384 and SHA-512 per FIPS 180-4, via the browser’s own WebCrypto implementation. | Known test vectors (including the empty string); not a password-storage scheme. |
| Unix timestamp converter | The Unix epoch 1970-01-01T00:00:00Z, seconds or milliseconds, and ISO 8601 / RFC 3339 output in UTC. | Round-trips in both units and rejection of unparseable dates. |
| Unit converter | Factor-based conversion against a category base unit, with temperature handled by an offset and SI versus binary prefixes labelled. | Known conversions for length, mass, temperature, storage and time. |
Numeral script code-point bases
Each supported script stores its ten digits as consecutive code points. The table lists the base (the code point of that script's zero); the digits one to nine follow immediately after it. This is why conversion is exact and lossless.
| Script | Zero at | Used in |
|---|---|---|
| Western Arabic (0–9) | U+0030 | Worldwide |
| Thai | U+0E50 | Thailand |
| Lao | U+0ED0 | Laos |
| Khmer | U+17E0 | Cambodia |
| Myanmar (Burmese) | U+1040 | Myanmar |
| Devanagari | U+0966 | Hindi, Marathi, Nepali |
| Bengali | U+09E6 | Bengali, Assamese |
| Gurmukhi | U+0A66 | Punjabi |
| Gujarati | U+0AE6 | Gujarat |
| Odia | U+0B66 | Odisha |
| Tamil | U+0BE6 | Tamil Nadu, Sri Lanka, Singapore |
| Telugu | U+0C66 | Andhra Pradesh, Telangana |
| Kannada | U+0CE6 | Karnataka |
| Malayalam | U+0D66 | Kerala |
| Sinhala Lith | U+0DE6 | Sri Lanka |
| Tibetan | U+0F20 | Tibet |
| Arabic-Indic | U+0660 | Arabic-speaking countries |
| Extended Arabic-Indic (Persian, Urdu) | U+06F0 | Iran, Pakistan, Afghanistan |
| Mongolian | U+1810 | Mongolia |
| Full-width | U+FF10 | CJK typography |
| Mathematical bold | U+1D7CE | Mathematical notation |
| Mathematical double-struck | U+1D7D8 | Mathematical notation |
How the tests work
Every engine is checked at four levels before a deployment:
- Unit examples —
tests/run.mjscovers known inputs and expected outputs for each engine. - Property and fuzz checks —
tests/validity.mjschecks round-trips, invariants and crash resistance across generated inputs. - Independent oracles —
tests/oracle.mjscross-checks engines against closed-form maths, Node's crypto and other references where one exists. - Browser end-to-end —
tests/functional.mjsdrives every tool page in Chrome and checks results, Copy buttons and runtime errors;tests/coverage.mjsfails if a control has no test.
These checks reduce the chance of a silent error; they do not make a tool a substitute for professional advice. The about page describes how the editorial and engineering work is split.
General principles
- No third-party dependencies. A conversion should not change because a library changed.
- Lossless where the standard allows it. Numeral conversions round-trip exactly; accent removal is documented as lossy because tone information cannot be recovered.
- Reject rather than guess. Where the Roman numeral parser cannot validate an input, it reports it as invalid instead of returning an approximate number.
- Client-side only. Nothing you paste leaves your browser, so there is no server log of your data.
Known limitations
- Accent removal cannot restore the original text; four different tone-marked syllables collapse to the same plain form.
- Roman numerals are limited to 1–3999, the classical range.
- Sentence counting for the character counter does not special-case abbreviations such as “e.g.”.
- Image tools re-encode through a browser canvas, so EXIF metadata — including GPS and the orientation flag — is dropped; the EXIF viewer lists common tags but does not decode the coordinate block into a map.
- “Next run” times for cron are computed in the browser's local time zone; a schedule that falls in a daylight-saving gap is skipped rather than shifted, and the page states which zone it used.
- Text diff is bounded for very large inputs: when an exact alignment would be too large, the middle of the change is reported as one block and the page marks the result as linearised.
Questions about this page? Contact us.