aboutsummaryrefslogtreecommitdiff
path: root/auxiliary/hat-test.c (follow)
Commit message (Collapse)AuthorAge
* hat-test: support SVG output.Simon Tatham2023-06-16
| | | | I want to generate an SVG diagram for an upcoming article.
* hat-test: fix memory leaks.Simon Tatham2023-04-29
| | | | I ran this again today with Leak Sanitiser on, which complained.
* Fall back to <math.h> if <tgmath.h> doesn't work.Simon Tatham2023-04-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes a build failure introduced by commit 2e48ce132e011e8 yesterday. When I saw that commit I expected the most likely problem would be in the NestedVM build, which is currently the thing with the most most out-of-date C implementation. And indeed the NestedVM toolchain doesn't have <tgmath.h> - but much more surprisingly, our _Windows_ builds failed too, with a compile error inside <tgmath.h> itself! I haven't looked closely into the problem yet. Our Windows builds are done with clang, which comes with its own <tgmath.h> superseding the standard Windows one. So you'd _hope_ that clang could make sense of its own header! But perhaps the problem is that this is an unusual compile mode and hasn't been tested. My fix is to simply add a cmake check for <tgmath.h> - which doesn't just check the file's existence, it actually tries compiling a file that #includes it, so it will detect 'file exists but is mysteriously broken' just as easily as 'not there at all'. So this makes the builds start working again, precisely on Ben's theory of opportunistically using <tgmath.h> where possible and falling back to <math.h> otherwise. It looks ugly, though! I'm half tempted to make a new header file whose job is to include a standard set of system headers, just so that that nasty #ifdef doesn't have to sit at the top of almost all the source files. But for the moment this at least gets the build working again.
* Replace <math.h> with <tgmath.h> throughoutBen Harris2023-04-04
| | | | | | | | | | | | | | | C89 provided only double-precision mathematical functions (sin() etc), and so despite using single-precision elsewhere, those are what Puzzles has traditionally used. C99 introduced single-precision equivalents (sinf() etc), and I hope it's been long enough that we can safely use them. Maybe they'll even be faster. Rather than directly use the single-precision functions, though, we use the magic macros from <tgmath.h> that automatically choose the precision of mathematical functions based on their arguments. This has the advantage that we only need to change which header we include, and thus that we can switch back again if some platform has trouble with the new header.
* hat-test: more scaling and clipping options.Simon Tatham2023-04-02
| | | | | | | | | | | | | | | | This adds the ability to turn off hat-test's normal scaling of the bounding box to fit on an A4 page, which I intended for printing test patches (but never actually found a need to print one). The --unscaled mode seems more useful if you're planning to turn the output into an image, e.g. to use as a desktop background. Also added --clip, which generates a rectangle completely covered in hats (i.e. shows any hat that overlaps the output rectangle at all), as opposed to the normal mode which omits any hat that doesn't fit _entirely_ in the output rectangle (more similar to what Loopy wants). Actually generating a desktop background by this method is still a bit fiddly to get right, but it's better than before.
* hat-test: fix array underrun.Simon Tatham2023-04-02
| | | | | Having _checked_ whether a hat index in my four-colouring maps was -1, I then went ahead and used it as an array index anyway, oops!
* Move hat-test into its own source file.Simon Tatham2023-04-02
I noticed while hacking on hat-test recently that it's quite awkward to be compiling a test main() program that lives in a source file also built into the Puzzles support library, because every modification to main() also triggers a rebuild of the library, and thence of all the actual puzzles. So it's better if such a test main() has its own source file. In order to make hat-test work standalone, I've had to move a lot of hat.c's internal declarations out into a second header file. This also means making a bunch of internal functions global, which means they're also in the namespace of programs other than hat-test, which means in turn that they should have names with less implicit context.