Commit graph

173 commits

Author SHA1 Message Date
Chris Boesch
5b232abd8c
Merge branch 'ratfactor:main' into testing 2023-05-06 19:15:49 +02:00
Manlio Perillo
8335f88001 build: improve Exercise.addExecutable
Replace the file_path variable with path.
2023-05-06 18:18:08 +02:00
Manlio Perillo
1a2a1e6f2a build: use multiline string literals when necessary
Update the output and hint fields in the `exercises` slice to use a
multiline string literal when the string have multiple lines or use the
`"` character.  This will greatly improve readability.
Additionally, remove the trailing whitespace on each line and check it
in the validate_exercises function.

Update the output comparison logic in ZiglingStep, since the current
code assumes that the string has only one line.

Update test/tests.zig to use the new `CheckNamedStep` in test case 1,
since RunStep.StdIo.Check is no longer able to correctly check the
output.

Fixes #283
2023-05-06 18:12:04 +02:00
Chris Boesch
f83f0c74db
Merge branch 'ratfactor:main' into testing 2023-05-06 15:29:22 +02:00
Manlio Perillo
0ac9a00dfa build: remove assertion in Exercise.key
Use `orelse unreachable` instead, in order to simplify the code.

Fix doc-comments in the Exercise type.
2023-05-06 12:02:21 +02:00
Manlio Perillo
4001168d2b build: make Exercise.hint optional
Use an optional type, instead of an empty string, since it is more
idiomatic.
2023-05-06 11:50:42 +02:00
Manlio Perillo
f14f4e95a4 build: add the healed-path option
This is necessary in the unit tests, to ensure each test case use a
different exercises directory.

Update test/tests.zig to use the new healed-path option, ensuring that
each temp directory is removed.

In test case 3, 4 and 5, move case_step as the first step in the
dependency chain.  This will improve the build summary tree.

In test case 5, remove the dependency to heal_step, since it is not
necessary.
2023-05-05 16:22:50 +02:00
Chris Boesch
67bdbf74b5
Merge branch 'ratfactor:main' into testing 2023-05-03 22:17:56 +02:00
Chris Boesch
497df878a7 Added new flag 'run_test' to support test steps for test exercises.
Also created a simple exercise '102_testing' to test the new flag.
After the new build system is ready, we skip the exercise in the flow to finish the actual testing exercise.
2023-05-03 18:17:21 +02:00
Manlio Perillo
a7078c9780 build: improve coding style in ZiglingStep
- Use an anonymous struct when initializing std.Build.Step.
  - Rename the builder parameter in the create method to b
  - Avoid lines too long

Additionally:
  - In the run method, rename output to raw_output in order to make the
    next variable names shorter.
  - In the compile method, rename zig_file to path.
2023-05-03 18:13:55 +02:00
Manlio Perillo
a7677f1cd1 build: use @panic("OOM") instead of unreachable
The code in ZiglingStep copied the error handling used in std.Build in
the past.

Use @panic("OOM") when the error is caused by the allocator failing to
allocate memory.
2023-05-03 18:13:55 +02:00
Manlio Perillo
f32acaf0e4 build: improve the exercise output check
Make the error message consistent with the one in std.Build.RunStep,
using the "=" character instead of "-" and correctly aligning the text.
2023-05-03 18:13:55 +02:00
Manlio Perillo
c2ab3fc191 build: don't use @This() in ZiglingStep
Use ZiglingStep, instead.

This is consistent with the coding style in std.Build.
2023-05-03 18:13:55 +02:00
Manlio Perillo
8af1c01c81 build: remove ZiglingStep.builder field
It is not necessary, since the builder is available in self.step.owner.
2023-05-03 18:13:55 +02:00
Manlio Perillo
7b1e1182fe build: use Child.exec in ZiglingStep.run
Update the run method to use Child.exec, instead of Child.spawn followed
by Child.wait.
This simplifies the code.
2023-05-03 18:13:55 +02:00
Manlio Perillo
3e7320a832 build: fix incorrect error handling in ZiglingStep.compile
When handling the error from the eval method, some possible errors are
ignored.  The make method will only print the exercise hint and the
help message.

Print the unexpected error message, in the else prong.
Note that FileNotFound can also be considered unexpected.
2023-05-03 18:13:55 +02:00
Manlio Perillo
68c468df73 build: remove the ZiglingStep.makeInternal method
Rename the doCompile method to compile and add the run method.
The two methods are now called from the make method.

Add the help method, since the error handling of compile and run methods
are now separate.

Remove the obsolete comment for the compile method.
2023-05-03 18:13:55 +02:00
Chris Boesch
02a35e8a09
Merge pull request #275 from perillo/heal-only-in-test
Heal only in test
2023-05-02 21:30:29 +02:00
Dave Gauer
3fc68332d8 Added Ex 101 "for loops part 5" (Closes #271)
Also gave a shot at explaining data-oriented design, a Zig "hot
topic" ever since the red Hawaiian shirt talk(s).
2023-05-02 08:26:32 -04:00
Manlio Perillo
402f4fa665 Restore unit tests 2023-05-02 11:13:31 +02:00
Chris Boesch
50966adb7e comment for the issue added 2023-05-01 20:14:52 +02:00
Chris Boesch
59d92e370f cli tests removed to solve 272 2023-05-01 19:54:13 +02:00
Manlio Perillo
d33e968f8d build: don't override the top level steps
When running `zig build -Dn=n`, the install and uninstall steps where
overridden in order to improve the description.

In recent version of Zig this is no longer allowed.
2023-05-01 18:39:54 +02:00
Manlio Perillo
405290555b build: rename Exercise.baseName to name
The name "baseName" is confusing, since it refers to the UNIX basename
command, and not to the basename function in some programming languages
including Zig.

Use the std.fs.path.stem function to remove the file extension, instead
of slicing.

Remove the use of the assertion, since it is no longer necessary.
Instead, add a check to ensure that the exercise must be a Zig source
file in the validate_exercises function.

Update the validate_exercises function to check the last exercise, too.
2023-05-01 18:39:54 +02:00
Manlio Perillo
370337998e build: add the Exercise.addExecutable method
Currently addExecutable is called 3 times, unnecessarily making the code
more complex.

The method takes as argument the path to the exercises directory.

Additionally, use the new std.Build.ExecutableOptions.link_libc field.
The new field was added in ziglang/zig@adc9b77d5f on 2023-04-13.

Update the required Zig compiler version.
Note that I added the **current** zig version to the changelog, since
the reason for the change is known only to the person updating the
version.
2023-05-01 18:39:54 +02:00
Manlio Perillo
423cb5057e build: rename the Exercise.C field to link_libc
The name "C" does not follow the naming conventions for container
fields.
2023-05-01 18:39:54 +02:00
Manlio Perillo
0b0523014a build: reduce code duplication when setting the work path
Currently, the code for defining the path to the exercises directory is
duplicate 4 times.

Add the constants `healed_path` and `work_path`, and use work_path
instead of the duplicated if expression.  Update ZiglingStep to take
`work_path` instead of `use_healed` as argument.

Reduce code length by using `join` instead of `std.fs.path.join` and
replace the use of a slice with a tuple.

Additionally, in case of an error from the `join` function, use @panic
instead of unreachable.

Document why the special branch, when the exercises are healed by the
eowyn script, has been disabled.
2023-05-01 18:39:54 +02:00
Manlio Perillo
b864078920 build: remove the Exercise.async field
The stage1 C++ compiler is gone forever.

Remove the custom support and documentation for the old stage1 compiler
in build.zig and README.md.
2023-05-01 18:39:54 +02:00
Manlio Perillo
40240a100e 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
53544f1ce5 Added Ex. 100 fourth for (as foretold in #261) 2023-04-30 21:23:54 -04:00
Dave Gauer
81f6539c05 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
4c78dce877 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
83d839bf49
Merge pull request #247 from chrboesch/formatting
added first formatting exercise
2023-04-19 22:09:32 +02:00
Chris Boesch
f42c390594 added first formatting exercise 2023-04-19 21:57:37 +02:00
Manlio Perillo
f121695bad 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
5d4d03f940 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
5bf14ffa19 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
e214c44eb7 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
1e7c42d31f 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
5f6762c351
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
5d254bb775 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
0293629a6c added the second exercise for bit manipulation 2023-04-12 17:00:26 +02:00
Chris Boesch
6c08d03905 added first exercise for bit manipulation 2023-04-12 15:44:12 +02:00
Manlio Perillo
96d3678ad1 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
7bf0b9b7fd 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
0c995677c7 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
edcb74a52b 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
a16d16bfd6 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
60b8e481cf 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
33fbfd637a 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