Commit graph

951 commits

Author SHA1 Message Date
Dave Gauer
7a44e4d342 Merge pull request #265 from Arya-Elfren/methods-clarification
Clarify the methods syntax sugar & a bit more
2023-05-04 08:25:28 -04:00
Dave Gauer
8345197f54 Merge pull request #264 from Arya-Elfren/float-clarification
Clarify `f16` maths - closes #204
2023-05-04 08:22:54 -04:00
Chris Boesch
2027c6a403 Merge branch 'ratfactor:main' into testing 2023-05-03 22:17:56 +02:00
Chris Boesch
a2b7fbe3e5 Merge pull request #279 from perillo/refactor-zigling-step-2
Refactor ZiglingStep
2023-05-03 22:05:51 +02:00
Chris Boesch
193bee7d2d 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
a5d93c0b20 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
771b499cbc 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
c6c6a32270 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
feeba51940 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
3ec978d73f 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
11d8468539 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
40cbee8fa2 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
27b941fdaf 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
72a6287a5f Merge pull request #275 from perillo/heal-only-in-test
Heal only in test
2023-05-02 21:30:29 +02:00
Dave Gauer
e2f3a5e519 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
7a40c4584e Restore unit tests 2023-05-02 11:13:31 +02:00
Manlio Perillo
74b48192e4 test: don't run heal during configuration phase
In order to simplify the code, the heal function is called during the
configuration phase, thus resulting in the function being always called
when the build.zig file is run.

This behavior unfortunately causes a serious issue when the user fix a
broken exercise and, during the next step, the heal function tries to heal
the fixed exercise resulting in GNU patch assuming an attempt to reverse
a patch, waiting for input from the terminal.

Run the heal function from the new HealStep step, so that it is called
only during tests.

Rename the outdir constant to work_path, for consistency with build.zig.

Fixes #272
2023-05-02 11:13:25 +02:00
Chris Boesch
f9aec283c8 Merge pull request #273 from chrboesch/patch_error
cli tests removed to solve 272
2023-05-01 20:43:26 +02:00
Chris Boesch
f02389e925 comment for the issue added 2023-05-01 20:14:52 +02:00
Chris Boesch
371a8637b3 unit tests temporarily disabled 2023-05-01 20:07:01 +02:00
Chris Boesch
44d51eb9ed cli tests removed to solve 272 2023-05-01 19:54:13 +02:00
Chris Boesch
e9d0ab3784 Merge pull request #270 from perillo/improve-exercise-type
Improve the Exercise type
2023-05-01 18:58:07 +02:00
Manlio Perillo
a86d4c2795 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
5c20e2b553 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
69103a3b82 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
123fd4b105 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
ec1976e9ab 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
070734a520 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
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
4198d5b2db Oops, capitalization in ex016. 2023-04-30 17:12:35 -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
Dave Gauer
fd10ff8bb3 Updating 095 patch to match, natch! 2023-04-30 16:45:57 -04:00
Dave Gauer
e9e6be4e05 Updating wording in 'for' exercises
This is in preparation for another dive into 'for'
in an upcoming Exercise 100.

Also reformatted 095 for 65 columns and some wording.
2023-04-30 16:23:35 -04:00
Chris Boesch
6b48914d7a Merge pull request #269 from perillo/fix-windows-deadlock
Fix deadlock on Windows
2023-04-29 22:49:07 +02:00
Manlio Perillo
0dc6b45770 eowyn.sh: remove checking formatting one file at a time
This avoids unnecessary output.
Also remove the comment, since the message to stdout makes it
unnecessary.
2023-04-29 16:59:33 +02:00
Manlio Perillo
11d2279f4f test: make the patch command silent
The POSIX standard says that the patch command should not use stdout,
but GNU patch writes the message:
patching file patches/healed/xxx.zig (read from exercises/xxx.zig).

Add the -s flag to suppress these messages.

Note that the heal function from test/tests.zig is called when running
`zig build -Dhealed` because it is executed in the configure phase.
2023-04-29 16:50:28 +02:00
Manlio Perillo
4b1e292ae4 test: fix deadlock on windows when running tests
The deadlock was caused by setting stdout behavior to ignore, when
spawning the patch command.  When the patch command writes to devnull it
causes some errors and a deadlock.

The cause of the bug is probably Zig using `\Device\Null` from `ntdll`
while git-bash uses `NUL` from `kernel32`.
2023-04-29 16:25:58 +02:00
Manlio Perillo
93e8b5710c workflows: remove the custom windows only jobs
Restore the job matrix to run on linux, macos and windows.

Remove lines with extra whitespace.

Improve the documentation of the Eowyn workflow.

Remove the single quoting of the workflow names.
2023-04-29 16:22:52 +02:00
Chris Boesch
edeca97370 Update README.md 2023-04-29 12:48:22 +00:00
Chris Boesch
ac25e91f81 Merge pull request #268 from chrboesch/main
Switched back to bash on Windows
2023-04-28 16:20:54 +00:00
Chris Boesch
3dacb04452 switched back to bash on windows 2023-04-28 15:41:10 +00:00
Chris Boesch
6920dbebcd switched back to bash on windows 2023-04-28 15:40:46 +00:00
Arya-Elfren
c2fe843a8a 060 - remove @as() 2023-04-28 15:11:43 +01:00
Chris Boesch
7ae8c2a827 Merge pull request #267 from chrboesch/main
Split github actions into 'Windows' and 'Linux/Mac' for using PowerShell on Windows
2023-04-28 11:38:58 +00:00
Chris Boesch
83fa3de220 Split Windows with PowerShell 2023-04-28 11:29:18 +00:00
Chris Boesch
7cfdc2b126 Update ci.yml 2023-04-28 11:20:54 +00:00
Chris Boesch
c74c542372 Update ci.yml 2023-04-28 11:17:57 +00:00
Chris Boesch
b903edd290 Update ci.yml 2023-04-28 11:14:43 +00:00
Chris Boesch
0302650acf Update ci.yml 2023-04-28 11:10:37 +00:00