Commit Graph

427 Commits

Author SHA1 Message Date
Aryadev Chavali
b3de11d1f7 Making better documentation 2024-06-04 02:57:51 +01:00
Aryadev Chavali
95a8747c7f Cleaned up .dir-locals.el 2024-06-01 01:14:17 +01:00
Aryadev Chavali
d65da8eb0d char8_t -> char_t 2024-05-05 20:26:07 +05:30
Aryadev Chavali
91af3e14ef Clean up code 2024-05-05 20:20:25 +05:30
Aryadev Chavali
b77cc5639c Now base.c and inst.c are used to make a shared library
Instead of targeting the needed object files, users just need to link
with the shared library.
2024-05-05 20:20:25 +05:30
Aryadev Chavali
7a3e6d180f Use eglot for project
I rely on eglot being enabled for this to work
2024-05-05 20:20:25 +05:30
Aryadev Chavali
a40eaf29b8 OP_HALT is its own opcode, fixed some other minor bugs 2024-05-01 22:36:34 +05:30
Aryadev Chavali
fcc6bce6f9 Added header file for all INST_ macros that I deleted
This can be a possible method of native compilation, albeit requiring
the source code of the project.  Until I explore that this thing will
stay.
2024-04-29 01:42:08 +05:30
Aryadev Chavali
a83653f45d Added vm/struct.h and vm/main.c to documenting TODO 2024-04-29 01:38:51 +05:30
Aryadev Chavali
f64f456dff Finished documenting lib/heap.h 2024-04-29 01:38:43 +05:30
Aryadev Chavali
8ba25b2bf2 Use memset instead of setting properties manually
Does the same thing but it's a bit clearer that I'm not setting
anything.
2024-04-29 01:37:47 +05:30
Aryadev Chavali
e9d5aafde4 Trying to get github tests to work 2024-04-29 01:16:07 +05:30
Aryadev Chavali
ba573fd230 Quick fix to make compilation with VERBOSE=2 work 2024-04-29 01:11:33 +05:30
Aryadev Chavali
d88e297921 Added test to github workflows 2024-04-29 01:10:02 +05:30
Aryadev Chavali
05c3342e27 Added test for darr_append_bytes 2024-04-29 01:07:15 +05:30
Aryadev Chavali
3e64d7855a Changed darr_at to return a pointer 2024-04-29 01:06:58 +05:30
Aryadev Chavali
1fcdf853bd Implemented tests for darr_ensure_capacity and darr_append_byte 2024-04-29 00:38:49 +05:30
Aryadev Chavali
e8671042df Add angle brackets to suite output 2024-04-29 00:11:50 +05:30
Aryadev Chavali
cd6eeeeafe Fix some undefined behaviour in tests 2024-04-29 00:11:35 +05:30
Aryadev Chavali
33ec19566a Started unit testing darr.h 2024-04-28 23:32:01 +05:30
Aryadev Chavali
fadc61c2b0 INFO(..."Testing ... = ...") to "Testing ... -> ..." 2024-04-28 23:30:48 +05:30
Aryadev Chavali
c799eb2706 Adjust DARR_REALLOC_MULT 2024-04-28 23:29:50 +05:30
Aryadev Chavali
fd21e46aa7 Don't run tests on build, make it it's own recipe 2024-04-28 23:29:23 +05:30
Aryadev Chavali
15ed8e32c2 test_lib -> test_lib_base and implement remaining tests for base
Also refactored tests to new byteswap method
2024-04-28 22:33:35 +05:30
Aryadev Chavali
dede607036 If VERBOSE >= 1 then RUN_TEST_SUITE logs for each test of the suite 2024-04-28 22:32:18 +05:30
Aryadev Chavali
2ab1ee34f9 Use byteswap to implement conversion to and from bytes
Cleaner looking implementations
2024-04-28 22:31:41 +05:30
Aryadev Chavali
8aecb7b681 Fixed problem with detecting little endian
Copied the code from stack overflow without thinking about it.  The
first byte in little endian order should always be LSB so I construct
a more contrived example (0xFFFF0000) which should make it easier to
detect what the first byte is considered on the machine.  If it's 0
then the LSB is the first byte hence little endian, otherwise it's big
endian.

On a greater note: Don't never copy no code from stack overflow, bro.
I went up there at 11 o'clock last night trynna get me some code.
Bro, I copied that shit, woke up, my motherfucking LITTLE_ENDIAN
detection don't work.  Explain, bro.
2024-04-28 22:17:51 +05:30
Aryadev Chavali
08c9726333 Fixed bug with converting (h)word to (h)word in terms of endian
While it helped with understanding to use unions as a safe way to
access the underlying bits, this shift based mechanism actually makes
more sense at a glance, particularly by utilising WORD_NTH_BYTE
2024-04-28 20:57:41 +05:30
Aryadev Chavali
7ca9f1b98b Added test_lib_base_hword_to_bytes 2024-04-28 20:57:24 +05:30
Aryadev Chavali
8c0bebc8ea Function to generate string representation of byte array in testing.h 2024-04-28 20:57:16 +05:30
Aryadev Chavali
8461dcf423 Little endian check for convert_*_to_*
We don't need to perform the for loop if not necessary
2024-04-28 20:53:44 +05:30
Aryadev Chavali
df16aa9b19 Fixed WORD_NTH_HWORD which didn't work correctly before
Thank you testing
2024-04-28 19:09:28 +05:30
Aryadev Chavali
a0857b9090 test WORD_NTH_* and WORD_SAFE_SUB, ~refactored general testing code
The new general testing procedure is making a structure for tests that
include all the samples and expected results, then iterating over them
to run the test.
2024-04-28 19:08:20 +05:30
Aryadev Chavali
26a8fac732 Updated testing library to make writing tests easier
Success is printed by the RUN_TEST_SUITE macro so we don't need to add
that boilerplate.
2024-04-28 19:06:44 +05:30
Aryadev Chavali
06a883d538 Made lib/base conversion functions const where possible 2024-04-28 17:41:17 +05:30
Aryadev Chavali
cce3259b56 Fixed bugs in base.c
In particular, __LITTLE_ENDIAN__ was not a functioning macro.
Instead, I implemented a version by hand (copied from IBM) that
actually figures out if the machine is little endian or not.

Thank you unit testing!
2024-04-28 17:37:48 +05:30
Aryadev Chavali
cf6aa96539 Wrote tests for lib/base.h's convert_bytes_to_* functions
Just runs a sample of suitably byte arrays with an expected set of
functions.  The samples are in little endian format and the outputs
are what we expect them to be.  This should run regardless of the
endian of your machine.
2024-04-28 17:35:46 +05:30
Aryadev Chavali
ab839efbcd Defined a base testing library header
This defines useful macros, in particular to print information and to
define tests and test suites.

The idea is a suite will be a set of test functions, where a test
function will fail <=> an assert is called.  This allows us to stop
testing immediately upon a test failing and produce viable output.
2024-04-28 17:27:42 +05:30
Aryadev Chavali
f725c2a668 Started developing a unit test module
Folder per module in test/.  Header only tests with one actual main
file to implement a program that runs them.

Makefile runs the test and provides some eye candy to show if the test
succeeded or failed.  The tests, on the other hand, will show success
or failure for each of them.
2024-04-28 15:33:47 +05:30
Aryadev Chavali
b775afee2c heap_free_page -> heap_free 2024-04-28 14:54:01 +05:30
Aryadev Chavali
3085dfeded Added a PAGE_DEFAULT_SIZE so max can be set to 0 2024-04-28 14:34:02 +05:30
Aryadev Chavali
a2c9a06ca6 Documented lib/darr.h 2024-04-28 14:20:45 +05:30
Aryadev Chavali
4255c44a6a Propagated change in prog_t into vm
main now does error reporting for read errors
2024-04-27 17:43:42 +05:30
Aryadev Chavali
40907e5113 Reworked (de)serialising routines for instructions
No longer relying on darr_t or anything other than the C runtime and
aliases.  This means it should be *even easier* to target this via FFI
from other languages without having to initialise my custom made
structures!  Furthermore I've removed any form of allocation in the
library so FFI callers don't need to manage memory in any way.
Instead we rely on the caller allocating the correct amount of memory
for the functions to work, with basic error handling if that doesn't
happen.

In the case of inst_read_bytecode, error reporting occurs by making
the return of a function an integer.  If the integer is positive it is
the number of bytes read from the buffer.  If negative it flags a
possible error, which is a member of read_err_t.

prog_read_bytecode has been split into two functions: prog_read_header
and prog_read_instructions.  prog_read_instructions works under the
assumption that the program's header has been filled, e.g. via
prog_read_header.  prog_read_header returns 0 if there's not enough
space in the buffer or if the start_address is greater than the count.
prog_read_instructions returns a custom structure which contains an
byte position as well as an error enum, allowing for finer error
reporting.

In the case of inst_write_bytecode via the assumption that the caller
allocated the correct memory there is no need for error reporting.
For prog_write_bytecode if an error occurs due to

In the case of inst_read_bytecode we return the number
2024-04-27 17:43:06 +05:30
Aryadev Chavali
b9c94d0725 Changed doxygen comment style in base.h
Remove asterisk from start of each line and add a @brief.
2024-04-25 11:50:51 +05:30
Aryadev Chavali
a66f9825f6 Updated README lines of code 2024-04-25 11:13:05 +05:30
Aryadev Chavali
49b4470424 Defined bounds for signed and unsigned base types 2024-04-25 11:10:50 +05:30
Aryadev Chavali
331784281e Refactor s_word -> long_t 2024-04-25 11:08:17 +05:30
Aryadev Chavali
43d14d05cf Refactor type word -> word_t 2024-04-25 11:07:37 +05:30
Aryadev Chavali
9c0125542e Refactored type hword -> hword_t 2024-04-25 10:59:45 +05:30