28 Commits

Author SHA1 Message Date
George Thomas
fb2d412f95 Simplify test name handling
We keep the internal type safety, while making things easier for users.
2026-01-07 00:55:07 +00:00
George Thomas
f634b9b42d Use Text for test names 2026-01-07 00:43:51 +00:00
George Thomas
3721c27c32 Use custom monad for more principled test failure handling 2026-01-07 00:39:35 +00:00
George Thomas
41f0b8d511 Move some utilities out of Day4.hs 2026-01-06 23:15:03 +00:00
George Thomas
db41a65453 Avoid forcing puzzle parts outputs
Note that:
- This allows us to remove some very temporary hacky code from day 4.
- This includes a refactoring to hide `TestTree`, which could in theory have been made separate.
- This reverts a lot of 1163889.
2026-01-06 23:14:36 +00:00
George Thomas
83e4489e1f Add timing information to tests
Most of this is concerned with propagating `NFData` constraints.
2026-01-06 23:13:58 +00:00
George Thomas
7bacf5efc4 Improve error handling in Day 4 extra tests 2026-01-05 17:00:21 +00:00
George Thomas
c3e69cde09 Move to custom test library 2026-01-05 17:00:15 +00:00
George Thomas
ab0a926e24 Move and rephrase comment 2026-01-04 11:16:00 +00:00
George Thomas
f6771a7131 Check day 4 number of frames is as expected 2026-01-04 11:13:39 +00:00
George Thomas
f7c9297a85 Reuse expensive computation for day 4 extra tests
Ideally we'd similarly add the ability for later tests to use the results of earlier ones. But this would probably require much heavier type family usage.
2025-12-31 01:49:16 +00:00
George Thomas
450d7e5240 Port from Tasty to Sydtest
There are some drawbacks:
- No properly lazy golden tests. This would in principle be nice when e.g. using `pretty-simple`.
- Because tests can be created dynamically, they can't be listed up front without running them. This presumably makes filtering slightly more annoying to use in practice.
- Terminal output is less compact than tasty, both horizontally and vertically. There appears to be no way to change this.
- We end up defining an orphan `Monoid (TestDefM '[] () ())` instance, to avoid changing much downstream code. Note though that this is not strictly necessary, and could potentially be contributed upstream.
- There's a warning about threads in GHCI which we can't seem to disable.
- The license forbids use in commercial projects without sponsoring. Thankfully that doesn't apply here.

Anyway, it's generally very impressive. It simplifies a few things for us, and will particularly help when we come to want to specify dependencies between tests.
2025-12-31 01:49:07 +00:00
George Thomas
5b24dc1238 Format 2025-12-30 12:03:38 +00:00
George Thomas
2cd2341673 Share frame generation to avoid accidental quadratic complexity
Previously each test was computing all frames from scratch.
2025-12-30 12:03:21 +00:00
George Thomas
415055dcc2 Allow output types to vary for different parts of same day
For now this applies to Haskell only, and it may turn out to be tricky for the Rust implementation.

In practice, the limitation hasn't turned out to be important, and we could even go the other way and use `Integer` everywhere. This does however at least help with debugging, as well as just being conceptually right.

The `nil` and `(/\)` functions are intended to be overloaded to work for other list-like things in a later commit, and from there we will investigate using `OverloadedLists` and `RebindableSyntax` to recover standard list syntax, although there are probably limitations due to `(:)` being special.
2025-12-16 16:15:11 +00:00
George Thomas
57c1613019 Move output showing to main entry point 2025-12-09 16:57:05 +00:00
George Thomas
6e851d63f0 Show diff for golden test failures 2025-12-09 16:47:12 +00:00
George Thomas
ea64a5af3e Consistently use separator parsing combinators in infix form 2025-12-08 23:44:43 +00:00
George Thomas
d0488726a0 Add argument to parser for disambiguating real data versus examples
This breaks less code than adding it to the solution functions, and is more elegant in a way.
2025-12-08 22:59:50 +00:00
George Thomas
371bddf748 Use custom prelude 2025-12-08 12:48:49 +00:00
George Thomas
7ba96ee3e5 Shorten test name for cleaner CLI output 2025-12-05 13:49:04 +00:00
George Thomas
ef342a1483 Refactor day 4 and add extra tests 2025-12-05 12:09:49 +00:00
George Thomas
be0a6510d8 Use lazy text for test outputs
Simplifies encoding code slightly, and potentially saves a lot of time for failing tests. Plus we've always been using `T.show` in practice anyway, so it's an easy change to make.
2025-12-04 21:24:49 +00:00
George Thomas
f91824a6a9 Add some useful inputs to extraTests 2025-12-04 21:17:50 +00:00
George Thomas
8f67916e1a Add way to specify extra tests 2025-12-04 21:17:50 +00:00
George Thomas
0508947a65 Solve day 4 part 2 2025-12-04 20:00:53 +00:00
George Thomas
9137e7cd66 Solve day 4 part 1 2025-12-04 18:02:57 +00:00
George Thomas
0844d4af2f Initialise day 4 2025-12-04 10:00:15 +00:00