Commit graph

245 commits

Author SHA1 Message Date
Manlio Perillo
6f482a1f7a build: move exercises at the end of the file
The exercises slice takes about 460 lines, making it hard to read the
source code of build.zig.

Closes #225
2023-05-01 18:39:42 +02:00
Dave Gauer
2e2924abdb Added Ex. 100 fourth for (as foretold in #261) 2023-04-30 21:23:54 -04:00
Dave Gauer
bef099fee6 Renamed 095 to "for3" to match feature sequence
So 100 will be the next in line.
2023-04-30 17:11:37 -04:00
Manlio Perillo
3dd7cdcb3b build: make exercise output more reliable
Currently, ZiglingStep prints the raw exercise output.  This is not a
problem when executing `zig build` from the shell, but in a unit test it
is necessary to know when the exercise output ends.

Document that Exercise.output should not have trailing whitespace.
Ensure this is true by adding a check in the validate_exercises
function.

Remove trailing whitespace in exercises 68 and 99.

Simplify the output validation in ZiglingStep.makeInternal.
Checking that the length of the actual and expected output is the same
is not necessary, since trailing whitespace has been removed.  Simply do
an exact comparison.

Print the trimmed exercise output, instead of the raw output.
This will ensure that the exercise output always ends with only one LF
character.

Fix some small coding style issues.
2023-04-24 11:31:16 +02:00
Chris Boesch
4435cebe7a Merge pull request #247 from chrboesch/formatting
added first formatting exercise
2023-04-19 22:09:32 +02:00
Chris Boesch
d6d30934db added first formatting exercise 2023-04-19 21:57:37 +02:00
Manlio Perillo
30db9d105a build: avoid intermixed messages on the same line
In same cases, the progress messages from the compiler are intermixed
with the messages printed by ZiglingStep.

This intermixing appears in two cases:
  - when printing, e.g., the message "Checking 0_arrays2.zig..."
  - when printing the compiler errors

Closes #230
2023-04-18 14:43:17 +02:00
Manlio Perillo
c6e055dd83 build: don't print errors in ZiglingStep.eval
Move the code for printing compiler errors and messages to the new
ZiglingStep.printErrors method.

Call printErrors in the Zigling.doCompile method, both in the normal and
error flow.

When handling an error from the Zig IPC, add the case when the compiler
was unable to return the executable path.

Before using the IPC, the error was
  "The following command exited with error code 1"
now it is
  "The following command failed to communicate the compilation result"
2023-04-18 12:57:03 +02:00
Manlio Perillo
b39c7e61ef build: restore compatibility support again
Commit e214c44 (build: update ZiglingStep to the new API) broke again
the compatibility support for old compilers, due to the use of the
multi-object for loop syntax.

Move the Zig IPC support code to src/ipc.zig.

Use the while statement, instead of the for statement.
2023-04-18 12:22:30 +02:00
Manlio Perillo
e3c5cb2175 build: update ZiglingStep to the new API
Update the code to the breaking change in ziglang
commit c96cb98ad (CLI: remove --enable-cache option).

Replace the --enable-cache option with the --listen=- option and use the
Zig IPC to get the path to the executable.

Closes #236
2023-04-13 18:39:51 +02:00
Manlio Perillo
e91c7a24f2 build: disable special case for zig build -Dhealed
The special case was added because it was used by the Eowyn github
workflow.

As a side effect, however, it prevents testing the normal case used by
users.

Disable it, until a better solution is found.
2023-04-13 17:47:17 +02:00
Chris Boesch
bf013df4bf Merge pull request #235 from perillo/update-to-version-0.11.0-dev.2560
Update the code to the new zig version
2023-04-12 19:02:43 +02:00
Manlio Perillo
bc98057d66 Update the code to the new zig version
Update the code to the breaking change in ziglang commit
60eabc0ec (std.Build.CompileStep: remove run() and install())

Update the zig version in the README.md file.
2023-04-12 18:50:30 +02:00
Chris Boesch
9f48d84ac8 added the second exercise for bit manipulation 2023-04-12 17:00:26 +02:00
Chris Boesch
3c19500827 added first exercise for bit manipulation 2023-04-12 15:44:12 +02:00
Manlio Perillo
47876e6371 build: make PrintStep thread safe
Update PrintStep to always printing to stderr, using std.debug.print, so
that the message is written atomically.

Note that currently it is not an issue, since PrintStep prints the
message before everything else.
2023-04-11 12:52:48 +02:00
Manlio Perillo
1ee8aabcf3 build: simplify the code when solving all the exercises
Initialize the first step in the chain to the header_step, instead of
making the code more complex handling the first step as a special case
in the for loop.
2023-04-11 12:45:55 +02:00
Manlio Perillo
be782af7a3 build: restore compatibility support
Commit 0d56ba3 (build: restore the exercise chain) broke the
compatibility support for old compilers, due to the use of the
multi-object for loop syntax.

Use the normal for loop syntax; the change still keep the code readable.

Use the variable `n`, instead of `i`, when referring to the exercise
number; this will improve the readability.

Closes #227
2023-04-11 12:45:55 +02:00
Manlio Perillo
647a24afae build: improve PrintStep, SkipStep and PatchStep names
Use lover case for the step names.

Add the exercise name for the SkipStep and PatchStep step name.
2023-04-11 12:45:55 +02:00
Manlio Perillo
c656536d3f build: simplify code and add tests
Simplify the code finding the exercise number from the exercise index,
when the -Dn option is set.  This is now possible since the exercise
numbers have no holes.

Add the validate_exercises function to check that exercise number are in
the correct order, and call it at the start of the build function.

Add tests, with 2 test cases.
2023-04-11 12:45:55 +02:00
Manlio Perillo
d43f19ded8 build: add support for skipping exercises
Currently, exercises not working with the current Zig compiler are
commented. This is problematic, since the exercise key and exercise
index are no longer consistent.

Add the skip field to the Excercise struct.  Update ZiglingStep to
support it and add a new SkipStep step to support it when using the
standard build step.
2023-04-11 12:45:55 +02:00
Manlio Perillo
67f369484c build: ensure the exercise links libc, when needed
When running, as an example, `zig build -Dhealed -Dn=93 test`, the build
fails, because the `test` step use the standard CompileStep, instead of
ZiglingStep.

Ensure that exercises using libc are correctly built.

Closes #229
2023-04-11 12:45:27 +02:00
Manlio Perillo
1cf910fb51 build: enable full parallelism when -Dhealed is set
The eowyn.sh script is used in a github workflow, but after
commit 0d56ba3 (build: restore the exercise chain), the github action
will take more time to complete.

Enable full build parallelism, when -Dhealed is true and -Dn is null.
Use the standard CompileStep and RunStep, instead of ZiglingStep.

On my PC, this change reduces the build time by about 30%.
2023-04-08 09:31:03 +02:00
Chris Boesch
0fd80d6cba help text for parameters adapted 2023-04-07 18:06:13 +02:00
Manlio Perillo
59e28987da build: restore the exercise chain
The new parallel build support in Zig broke the exercise chain, so that
each esercise check is no longer strictly serialized.

  1. Add the Dexno option, in order to isolate the chain starting from a
     named exercise from the normal chain, thus simplify the code.

     The current code have an additional issue: it added 4 x n steps,
     making reading the help message or the list of steps very hard.

     Add only the `install`, `uninstall`, `zigling`, `test` and `start`
     steps.  The last three steps match the old steps `n`, `n_test` and
     `n_start`.

     The default step is zigling (note the singular form).

     The `install` step override the builtin install step, showing a
     custom description and matches the old `n_install` step.
     The uninstall step was added for consistency, so that the
     description is consistent.

     Setup a new chain starting at `zig build -Dexno=n start` so that it
     is stricly serialized.

     The behavior should be the same as the old one.

  2. Handle the code for all the exercises separately.

     Add only the `ziglings step`, making it the default step, in
     addition to the install and uninstall steps.

     Setup a new chain starting at the first exercise, to that it is
     strictly serialized.

     The behavior should be the same as the old one.

The current code has a know issue: the messages from the ZiglingStep and
the ones from the compiler compilation progress are interleaved, but each
message is written atomically, due to the use of `std.debug.getStderrMutex()`.

Update the README.md file.

Closes #202
2023-04-07 11:36:26 +02:00
Manlio Perillo
75a1600626 build: fix the description of the named_install step
Replace the description of the named_install step from
"Install {s} to zig-cache/bin" to "Copy {s} to prefix path".  The latter
has been adapded from the description of the builtin install step.

Ad an empty line before the build_step variable, in order to improve
readability.

Closes #213
2023-04-05 21:19:17 +02:00
Manlio Perillo
36e3f577ca build: replace the logo step with the header step
Remove the logo step, and use PrintStep for the header step.

The logo step was added as a quick fix after the Builder.addLog function
was removed.

Now the logo is no longer shown when running `zig build -l` or
`zig build -h`.
2023-04-04 18:32:30 +02:00
Manlio Perillo
45713ec8ab build: restore support for Zig 0.6.0
The version check for Zig 0.6.0 was incorrect since commit
971ab7f (Use a zig build script to run ziglings).

Move compatibility support to a separate file, in order to simplify
build.zig.

In case of incompatible version, exit with code 3 instead of 0, in order
to detect the case of failure in a test (to be implemented).

Remove the use of comptime when checking compatibility at the start of
the build function, since it is not necessary.

Closes #210.
2023-04-03 11:37:12 +02:00
Manlio Perillo
dd15cb94fd build: make the logo a build step
Currently, the logo is always printed when the build script is executed,
resulting in the logo being printed twice with `zig build -h` and
`zig build -l`.

Make the logo a build step, so that the logo is printed to stderr only
when necessary.

Closes #211
2023-04-02 15:09:51 +02:00
Chris Boesch
3b85c24694 workaround for parallel processing of the build steps 2023-03-19 18:23:35 +01:00
Chris Boesch
78e856f602 first test for new build system 2023-03-19 00:59:42 +01:00
Sean Aubin
f08af9b242 move memory allocation example to 095 2023-03-08 13:36:25 -05:00
Sean Aubin
1be1d854a8 first draft of memory allocation exercise 2023-03-08 13:35:02 -05:00
Chris Boesch
101151f3f1 exercise for new for-loops 2023-03-04 16:07:53 +01:00
Sean Aubin
20a0fcdd9a fix typos/grammar in 093_hello_c.zig
- output a text -> output text
- In Zig -> add comma
- result ist -> result is
- remove extra whitespace
2023-02-28 10:17:32 -05:00
Chris Boesch
e7326dc5f9 dev.1711 - switched to multi-object-for-loops 2023-02-21 21:43:40 +01:00
Chris Boesch
1d10a062e2 check for dev1650 and some minor polish 2023-02-19 17:52:16 +01:00
Chris Boesch
23f2cc88d2 added C math exercise 2023-02-18 23:39:21 +01:00
Chris Boesch
dc187889c1 some improvements in the description 2023-02-16 19:28:10 +01:00
Chris Boesch
dce731a0ec Merge branch 'main' into hello_c 2023-02-16 11:17:52 +01:00
Chris Boesch
abdcc77984 Merge pull request #181 from chrboesch/interfaces
Interfaces
2023-02-16 10:07:48 +01:00
Dave Gauer
662086cb89 Added story/explanation to new ex. 092 2023-02-15 17:45:10 -05:00
Chris Boesch
4cf3bd63a2 added the first C exercise 2023-02-15 22:55:44 +01:00
Chris Boesch
561484280c update to version 1636 2023-02-15 19:28:27 +01:00
Chris Boesch
5007e7330f updated to version 011.0-dev.1602 2023-02-12 17:10:40 +01:00
Chris Boesch
35c5d6b976 added 092_interfaces to build 2023-02-11 11:43:09 +01:00
Chris Boesch
763ee7955d Merge pull request #177 from DameonSmith/patch-1
Updating build.zig to support new API change.
2023-02-04 15:12:50 +01:00
Chris Boesch
7ed121ee12 new build number added 2023-02-04 15:06:20 +01:00
Chris Boesch
4056f0cb21 Merge pull request #178 from chrboesch/issue176
removed trim of trailing spaces
2023-02-02 10:45:25 +01:00
Chris Boesch
45aa554046 removed trim of trailing spaces 2023-02-02 10:38:02 +01:00
Dameon Smith
48ee92a9a5 Updating build.zig to support new API change.
I updated zig today and the addExecutable API appears to have changed with it. I was able to get the build to run again with this change.
2023-02-01 21:51:47 -06:00
Chris Boesch
894456a3cc update to zig dev release 1501 2023-01-31 23:48:50 +01:00
Chris Boesch
9d9dc1dacf changed 'the_end' to '999_the_end' 2023-01-22 13:12:53 +01:00
Chris Boesch
007f4d655b the_end function added 2023-01-21 23:26:53 +01:00
Chris Boesch
7fb9b199a3 trim of leading spaces added 2023-01-21 17:59:56 +01:00
Chris Boesch
68af87518f Merge branch 'main' into check_output_len 2023-01-21 14:41:35 +01:00
Chris Boesch
22289d6ad1 disable the async excercises because of temporary not available in zig
compiler
2023-01-21 13:57:32 +01:00
Tobias Simetsreiter
e978b09a0a output fixes to 16 and 19 2022-11-16 14:29:34 +01:00
Tobias Simetsreiter
eb24c6291a exit non zero on error 2022-11-16 13:05:25 +01:00
Tobias Simetsreiter
ae193c08c3 exclude trailing newlines and spaces 2022-11-16 13:00:36 +01:00
Tobias Simetsreiter
980a278ccc add check for trailing output characters 2022-11-16 12:36:31 +01:00
Dave Gauer
5a920ac48c README tweaks and another ver bump 2022-09-10 14:41:40 -04:00
Sebastian Aigner
74ce482711 Remove parameter in call to NativeTargetInfo.detect
Compatibility with ziglang/zig@3ee01c14ee
2022-09-09 20:42:57 +02:00
Dave Gauer
f59e07b303 Bump version for Ex 074 fix from upstream :-) 2022-09-06 08:28:31 -04:00
Dave Gauer
2656b26c83 Update Zig development build minimum version 2022-08-29 21:00:45 -04:00
Jan Brauer
6cb0cb11ff Use stage 1 compiler for async exercises 2022-08-29 09:17:42 +02:00
Dave Gauer
dee6a96ddf Correct conventional Zig reference vs value passing re #89 2022-07-31 15:58:24 -04:00
Dave Gauer
00796028ba Updated build version requirement to 0.10.0-dev.3385 2022-07-31 11:04:16 -04:00
Dave Gauer
46ed43d63e Merge pull request #104 from lkadalski/patch-2
fix: wrong expected output in exercise 004
2022-07-31 09:41:17 -04:00
Łukasz Kądalski
4098910387 fix: wrong expected output in exercise 004 2022-06-11 14:27:11 +02:00
DerTee
daf0a99f94 064_builtins: clarify @addWithOverflow explanation
There were misunderstandings concerning
overflowing operations and overflowed variables.
Hopefully it's clearer now.
2022-05-16 02:37:18 +02:00
iz
43ab394592 Fix build on latest nightly zig 2022-05-01 19:19:37 -05:00
Dave Gauer
f34b6aa024 Update sentinel type for v0.10.0
Fixes

.../076_sentinels.zig:95:30: error: incompatible types:
  'u32' and '?*const anyopaque':
    while (my_seq[i] != my_sentinel) {
2022-03-19 19:38:05 -04:00
Dave Gauer
515a5188f4 Update c_void to anyopaque to fix #84 2021-12-20 14:43:51 -05:00
Dave Gauer
49ce260748 Added ex91 - closing in on async! 2021-11-07 20:51:33 -05:00
Dave Gauer
ef4bd3c749 Bumped version requirement 2021-10-09 11:01:17 -04:00
Dave Gauer
0ba79fe869 Updated for dev pre-release build v0.9.0-dev.1343
A change in the "build" library imports and some cleanup in the
patches.
2021-10-09 10:19:34 -04:00
Dave Gauer
608468913c Cleaned trailing spaces, added trailing commas 2021-07-21 11:33:32 -04:00
Dave Gauer
44440ace5a Newline after PASSED so multiline results line up better 2021-07-21 11:30:51 -04:00
Airbus5717
fca600290c another fix 2021-07-21 17:03:44 +03:00
Airbus5717
d6051b8b72 fix fmt 2021-07-21 17:02:13 +03:00
Airbus5717
e051903055 added newline print to make output look nicer 2021-07-21 13:04:52 +03:00
Dave Gauer
34af14ca7b add ex090 async 7 2021-06-14 15:39:49 -04:00
Dave Gauer
67ebfc7a95 Update version for real :-) 2021-06-14 10:45:32 -04:00
Dave Gauer
18335d519d Updated to master build 0.9.0-dev.137 2021-06-14 10:20:16 -04:00
Dave Gauer
e47dccf245 Add ex089 Async 6 2021-05-27 19:04:11 -04:00
Dave Gauer
110e556ae1 add ex088 async 5 await 2021-05-13 19:48:10 -04:00
Dave Gauer
be279c78f5 add ex087 async 4 2021-05-12 21:36:57 -04:00
Dave Gauer
3e5647d88c add ex086 async 3 2021-05-12 21:25:48 -04:00
Dave Gauer
54c048b0a0 add ex085 async 2 2021-05-12 21:04:58 -04:00
Dave Gauer
3b08761532 add ex084 async 2021-05-12 20:35:29 -04:00
Dave Gauer
4a379159a3 add ex083 anon lists 2021-05-09 19:53:14 -04:00
Dave Gauer
c43e5480c6 add ex082 anon structs 3 2021-05-09 18:58:56 -04:00
Dave Gauer
c0bbbee176 add ex081 anon structs 2 2021-05-09 14:25:51 -04:00
Dave Gauer
ae0dc2b282 add ex080 anonymous structs 1 2021-05-09 13:24:25 -04:00
Dave Gauer
34ac5f6742 Add ex079 quoted identifiers 2021-05-09 13:10:09 -04:00
Dave Gauer
d4f5684450 Fix 076, add 077,078 sentinels and many-item pointers 2021-05-08 18:51:08 -04:00
Dave Gauer
e9547cf808 add ex076 sentinels 2021-05-06 20:32:36 -04:00
Dave Gauer
4760c62d62 Added ex075 Quiz 8 2021-04-30 21:35:56 -04:00
Dave Gauer
db20e9541a add ex073 comptime 8 2021-04-26 20:01:54 -04:00
Dave Gauer
2ecf31daa4 fixed hint typo 2021-04-24 21:07:58 -04:00
Dave Gauer
14c7e73343 add 072 comptime 7 2021-04-24 14:34:46 -04:00
Dave Gauer
f3a7b57385 make global required version in build script 2021-04-23 12:40:20 -04:00
Dave Gauer
ea17a9c8cb add 071 comptime 6 inline for 2021-04-22 17:17:25 -04:00
Dave Gauer
9c095c60a4 add ex070 comptime 5 2021-04-21 20:08:34 -04:00
Dave Gauer
be2b98f404 add ex069 comptime 4 2021-04-21 09:47:16 -04:00
Dave Gauer
17a22adce1 add ex068 comptime 3 2021-04-18 18:05:36 -04:00
Dave Gauer
bf861f71f7 add ex067 comptime TWO 2021-04-15 20:58:12 -04:00
Dave Gauer
dd06f3c95f Added type reflection to 066 2021-04-14 11:00:25 -04:00
Dave Gauer
e23eba236a Add ex066, the first comptime explanation 2021-04-13 20:47:05 -04:00
Dave Gauer
9fbda0c502 add ex065 builtins2 2021-04-11 11:19:58 -04:00
Dave Gauer
838cb43f25 added ex064 builtins 2021-04-10 20:26:17 -04:00
Dave Gauer
cc269968ea Added ex063 labels 2021-04-10 11:39:11 -04:00
Dave Gauer
e608e41cc7 added ex062 loop expressions 2021-04-09 19:24:59 -04:00
Dave Gauer
96f5b425e3 added ex061 coercions 2021-04-09 14:41:25 -04:00
Dave Gauer
b3f4773be4 Added ex060 floats 2021-04-09 13:02:36 -04:00
Dave Gauer
1427d3b6f1 added 059 2021-04-08 18:42:19 -04:00
Dave Gauer
cc01013921 Normalized exercise output, answers (#41)
1. All exercises should print a trailing \n
2. The build script should always show you _exactly_ what it's looking
   for when you get it wrong. Therefore, .output should be set to the
   exact expected output.
2021-04-04 16:29:28 -04:00
Dave Gauer
8ebc7009c1 Added epic ex058 - quiz 7 2021-04-04 16:05:44 -04:00
Dave Gauer
33040bce0c removed dupe ex 057 from build script 2021-03-16 10:30:25 -04:00
Dave Gauer
0956f1839f "999 is enough for anybody" triple-zero padding (#18)
When I hit 999 exercises, I will finally have reached the ultimate
state of soteriological release and no more exercises will be needed.
The cycle will be complete. All that will be left is perfect quietude,
freedom, and highest happiness.
2021-03-12 18:59:46 -05:00
Dave Gauer
af597c86a5 add ex 57 unions 3 2021-03-10 20:14:25 -05:00
Dave Gauer
dff61673c8 add ex56 for real 2021-03-09 20:51:00 -05:00
Dave Gauer
7b1c9c3b63 add ex 55 unions 2021-03-09 20:04:43 -05:00
Dave Gauer
784b66ffcf "Multi pointers" are now "many pointers"
TypeInfo.Pointer.Size says "many", so there we are!
2021-03-07 10:08:07 -05:00
Dave Gauer
fd2cec02af add ex54 multipointers (for real) 2021-03-06 21:31:02 -05:00
Dave Gauer
a8b9d6f2b8 add ex53 slices2 2021-03-06 19:16:28 -05:00
Dave Gauer
d1c6993898 add ex52 slices 2021-03-06 18:20:50 -05:00
Dave Gauer
0fea5bc00c Merge branch 'main' of github.com:ratfactor/ziglings into main 2021-03-05 11:01:16 -05:00
Dave Gauer
4f9c8f57ba Add ex51 values 2021-03-05 11:01:12 -05:00
Joseph T Lyons
a26c3eb36f Cleaned up some extraneous whitespace characters 2021-03-02 23:06:09 -05:00
Dave Gauer
28791f0cb8 Add ex 50 'no values' (help further address #25) 2021-02-28 18:36:38 -05:00
Dave Gauer
0552a62896 Added quiz 6 (and the trumpeting sounds grow louder) 2021-02-28 13:51:33 -05:00
Dave Gauer
5f7e9389d5 Added ex 48, additional comment on 46 2021-02-28 13:23:22 -05:00
Dave Gauer
42e6ebd2fe Add ex 47: methods 2021-02-27 16:52:57 -05:00
Dave Gauer
f27601b558 Added ex. 46 optionals 2 - elephants! 2021-02-16 20:21:32 -05:00
Dave Gauer
bbbda4bd0a Exit rather than return upon version failure (#14)
A plain `zig build` was exiting as expected after the version check
failure did an early 'return'.

But `zig build 01` (specifying a step) would print the fail message
and then continue...but fail to find the step (which was not added).

Calling `exit()` solves this. Calling it with an error status code
causes vomiting in the build system (since, you know, there was an
error). So returning with `exit(0)` is the way to go here.
2021-02-16 18:10:02 -05:00
Dave Gauer
9b54ba79a0 Second attempt of the second attempt (#14) 2021-02-15 20:13:50 -05:00
Dave Gauer
3693a35aeb Second attempt at explaining the minimum build (#14) 2021-02-15 20:04:18 -05:00
Dave Gauer
4b8cb2e444 Attempt to make the version error and README clearer (#14) 2021-02-14 19:25:35 -05:00
Dave Gauer
03a09639c6 Added testing ability
For the full details, see patches/README.md :-)
2021-02-14 18:36:09 -05:00
Dave Gauer
654437c0bc Make "check and halt" the default for zig build NN (#15)
The "start with NN" action is now NN_start.

Also formatting output for improved clarity (hopefully).
2021-02-14 16:45:18 -05:00
Dave Gauer
545573fc84 Added ex 45 optionals
(And secretly added the patches/ dir. Don't tell anybody!)
2021-02-14 10:49:09 -05:00
Dave Gauer
a7e101cd05 Emit correct output as green text indicating passed. 2021-02-13 22:09:37 -05:00
Martin Wickham
6e576785c5 Use a zig build script to run ziglings 2021-02-11 22:10:55 -06:00