How we tested

Every figure on this site is a result of the project's own tests. This page says what each one means, and what it does not.

Measured in October 2026 on development builds, on a MacBook Air with an M5 chip.

500+ functions

The formula engine implements 507 of the functions in Excel's list, from SUM to LAMBDA, GROUPBY and FORECAST.ETS.

They are checked by tests of two kinds: formulas whose expected results come from the examples in Excel's documentation and from the definitions of the functions, and formulas that are also run in LibreOffice Calc. Where the two programs disagree, Excel is the reference and the difference is written down. One more test makes sure that every function on the list is in fact computed.

What this does not say: that every function has been compared in Excel itself with every combination of arguments.

1,090,000 workbooks without a crash

These are 1,090,000 different files, not repeated runs: two corpora of 90,000 and 1,000,000 workbooks in the .xlsx, .xlsm and .xls formats.

They are generated, not collected from people. Scripts wrote them to cover as many kinds of formulas and layouts as possible. Each file was opened and calculated, then saved, and the saved file was checked. The work ran in separate processes, so that a crash or a hang would be counted. There were none.

Of these files 1,035,507 are sound: all of them opened without a remark and were saved as valid files. Another 21,085 carry formulas that are wrong on purpose (errors, references that go in a circle), and 33,408 are damaged on purpose. A generated corpus shows that the reader is hard to break. It does not show how real documents look on the screen.

33,408 damaged workbooks

The same corpora hold 33,408 files damaged on purpose: 13,243 cut short, 11,802 with parts removed and 8,363 with their first bytes overwritten.

Each was recognised as damaged instead of being opened silently, and was then opened in repair mode with whatever it still held. That is what the figure counts.

It does not mean that everything came back. A file that was cut short has lost what stood after the cut, and no program can return it. The repaired workbook opens as a new document, and the damaged file is left as it was.

Separately, after every change to the reader, randomly damaged copies of several files (300 of each) are run through it: none may stop the app or make it save a broken file.

51,887 of 51,887 formulas

This check uses 70 existing workbooks (67 .xlsx and 3 .xls) that the project's own scripts did not write. All of them are read and saved again without a discrepancy. Seven of them, copies not counted, carry formulas next to which the program that saved the file stored a result: 51,887 formulas, from 20 in the smallest workbook to 15,047 in the largest.

Every such formula was calculated again from scratch and compared with the stored result: numbers to nine significant digits, text, logical values and error values exactly. All 51,887 agree.

The check covers the functions these workbooks happen to use, not all 507. And one stress workbook is not part of it: of its 1,035,302 formulas 1,029,950 agree, and almost all of the other 5,352 depend on today's date, whose stored result is from the day the file was saved. The rest use random numbers or carry results written by another program.

99% of lines as in Word

This check uses 368 existing documents that the project did not write: 192 .docx and 176 .doc files (175 of the .doc files are .docx inside, one is a binary Word 97-2003 document), from one page to 2,724 pages, 36,144 pages in all. Among them are reports, theses, forms, tables and documents converted from PDF.

Microsoft Word for Mac (version 16.113) turned each of them into a PDF, and Vex Writer did the same with its own layout. The two PDFs were compared by their text: where every line ends, and with which line every page begins.

Of 1,337,425 lines 1,326,043 end where Word ends them, 99.15%. Of 31,951 pages 31,916 begin with the same line, 99.9%. Compared by the text each page holds, whatever order its pieces have in the PDF, 36,110 of 36,144 pages hold the same letters and digits as Word's page, 99.9%. All 368 documents have as many pages as in Word, and in 354 of them every page holds the same text as in Word.

Then every document was saved by Vex Writer as .docx, Word opened the saved file and made a PDF of it, and that PDF was compared with Word's PDF of the original. All 368 files open in Word, each on as many pages as the original, and 1,336,984 of 1,337,425 lines, 99.97%, end in the same place. Two fixes of the same day made it so, both found on the one binary .doc: Word did not open its .docx at first, because list overrides of .doc files were read from the wrong place, and then laid it out on 265 pages instead of 257, because the tables of .doc files were written as tables that fit their columns to the text, while Word keeps their columns as they are. The documents were saved as they were opened, without edits.

What this does not say: that the pages are identical to the pixel. It compares where the text breaks, not the exact place of every letter, the colours or the pictures. Documents set in Calibri and Cambria are laid out with Carlito and Caladea, free fonts with the same widths; lines of Cambria also break by the widths Word itself gives its characters, measured in Word's own PDFs rather than taken from the font. A font that is missing on the Mac is replaced the way Word itself replaces it where the PDFs showed that, and by a font of the same kind elsewhere, so its lines can break differently.

23 MB for the two apps

This is the size on disk of the two application bundles of a release build: Vex Sheets 13.4 MB and Vex Writer 9.8 MB. Each carries 2.9 MB of fonts with the very widths of Calibri and Cambria (Carlito and Caladea, free fonts), so that documents set in them keep their lines and pages.

It is not the size of a download, and the build that reaches the Mac App Store may differ.

Opening and scrolling

Opening was timed on three stress workbooks. The largest is a 20 MB file with 1,035,302 formulas: it is read in 1.2 seconds, and all of its formulas are recalculated in 1.9 seconds. The other two, of 10 MB and 8 MB with 868,453 and 797,317 formulas, are read in 0.4 seconds each and recalculated in 4.4 and 3.0 seconds.

These times are those of reading the file and of calculating it, measured by the project's command-line tool. Building the window is not included.

Scrolling was measured in the real window of the app, which scrolls a sheet by itself at the speed of a quick swipe for six and a half seconds and records how long every frame took to draw: 0.7 to 1.1 milliseconds on average, and 1.3 milliseconds or less for 95 of 100 frames. The screen it ran on shows 60 frames a second, and showed 59 to 60. No 120 Hz screen has been measured yet, which is why the site names the time of a frame and not a frame rate.

What has not been checked yet

Workbooks saved by Vex Sheets have not been opened in Excel itself yet, and documents edited in Vex Writer have not been opened in Word after the edit. Until then every saved file passes a strict check of the format instead: the order of elements, the references between parts, the counts.

Much of the behaviour under the mouse is covered by automated tests and by pictures of the windows, not yet by a person going through it by hand.

Both are on the list of work in progress on the home page.

Back to the home page