Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project
adheres to Semantic Versioning.
Added
New libraries
vm
library for the virtual machine implementation
parsing
library for parser combinators
parsing
library features
bits
namespace containing primitives for parsing binary data
FixedWidthUnsignedIntegerType
concept, which constrains to one of the std::uintN_t
types
ByteSequenceMismatch
basic error type
UnexpectedEndOfInput
basic error type
ParseError
composite error type
ParseState
type specialized for binary data
ParseResult
partial specialization
ByteSequence
parser which matches an exact sequence of bytes
LittleEndianUnsignedInteger
parser template
BigEndianUnsignedInteger
parser template
combinators
namespace containing types for combining simple parsers into more complex parsers
AmbiguousMatch
basic error type
NeitherMatch
basic error type
ParseError
composite error type
ParseResult
partial specialization
OneOf
parser combinator template, which matches exclusively one or the other of the child parsers
operators
namespace containing tools for building combinator trees
operator^
, which combines two parsers using the OneOf
combinator
outcomes
namespace containing utility types for the outcomes of individual parsers
Reject
template for holding information about a rejected parse
Accept
template for holding information about an accepted parse
ParseResult
alias for core::result::Result
(with FAILURE
= Reject
and SUCCESS
= Accept
)
reject
function for building a Reject
wrapped in a core::result::Failure
accept
function for building an Accept
wrapped in a core::result::Success
text
namespace containing primitives for parsing UTF-8 data
CharacterSequenceMismatch
basic error type
ParseError
composite error type
ParseState
type specialized for UTF-8 data
ParseResult
partial specialization
CharacterSequence
parser which matches an exact sequence of characters
Changed
Build system
- Upgrade the C++ version to C++20
test
library features
- Print a special message when there are no tests in a test suite
Deprecated
Removed
Fixed
Build system
- Give a nice message from CMake instead of weird errors when trying to build for non-64-bit systems
Security
Released on September 04, 2021.
Added
New libraries
core
library for fundamental types and functions used by everything else
test
library for testing infrastructure
unix
library for wrapping Unix-like APIs
windows
library for wrapping Windows APIs
core
library features
core::constant_error
namespace, containing a ConstantError
template for errors with a constant message
core::error_chain
namespace, containing the ErrorChain
class for building complex error types
core::none
namespace, containing the None
type to use as a placeholder
core::resource_warden
namespace, containing a class template for cleaning up raw resources on scope exit
core::result
namespace, containing facilities for operations that can fail
test
library features
test::abstract_reporter
namespace, containing the AbstractReporter
interface
test::cli
namespace, containing a function execute()
that can be called from main()
test::console_reporter
namespace, containing a reporter that writes to stdout
test::expect
namespace, containing macros to express test assertions
test::outcome
namespace, containing types representing scenario outcomes
test::reporter
namespace, containing factories for specific reporters and also a wrapper type
test::scenario
namespace, containing the Scenario
type for representing a single test scenario
test::suite
namespace, containing the Suite
singleton used to hold all of the tests in a suite
unix
library features
unix::errno_error
namespace, containing utilities for working with errno
unix::fs
namespace, containing wrappers for filesystem APIs on Unix-like systems
windows
library features
windows::fs
namespace, containing wrappers for filesystem APIs on Windows
windows::transcoding
namespace, containing functions for transcoding UTF8 with UTF16 for Windows APIs
windows::windows_error
namespace, containing functions and a type for reading and formatting Windows errors
Build system features
AddCrucibleExecutable
module, which provides a wrapper for add_executable()
AddCrucibleLibrary
module, which provides a wrapper for add_library()
AddCrucibleTest
module, which provides a wrapper for add_test()
EnableCompilerWarnings
module, which provides a function that enables common compiler warning flags
EnableRuntimeSanitizers
module, which provides a function that enables ASAN, TSAN, and UBSAN based on options
- Write all final build outputs (executables and libraries) to
${PROJECT_BINARY_DIR}/artifacts
- Automatically export all symbols from all libraries when building Windows DLLs
Repository features
- Build dependencies in the README
- Build instructions in the README
- Test instructions in the README
- Attribution in the README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
#### New libraries
* `vm` library for the virtual machine implementation
* `parsing` library for parser combinators
#### `parsing` library features
* `bits` namespace containing primitives for parsing binary data
* `FixedWidthUnsignedIntegerType` concept, which constrains to one of the `std::uintN_t` types
* `ByteSequenceMismatch` basic error type
* `UnexpectedEndOfInput` basic error type
* `ParseError` composite error type
* `ParseState` type specialized for binary data
* `ParseResult` partial specialization
* `ByteSequence` parser which matches an exact sequence of bytes
* `LittleEndianUnsignedInteger` parser template
* `BigEndianUnsignedInteger` parser template
* `combinators` namespace containing types for combining simple parsers into more complex parsers
* `AmbiguousMatch` basic error type
* `NeitherMatch` basic error type
* `ParseError` composite error type
* `ParseResult` partial specialization
* `OneOf` parser combinator template, which matches exclusively one or the other of the child parsers
* `operators` namespace containing tools for building combinator trees
* `operator^`, which combines two parsers using the `OneOf` combinator
* `outcomes` namespace containing utility types for the outcomes of individual parsers
* `Reject` template for holding information about a rejected parse
* `Accept` template for holding information about an accepted parse
* `ParseResult` alias for `core::result::Result` (with `FAILURE` = `Reject` and `SUCCESS` = `Accept`)
* `reject` function for building a `Reject` wrapped in a `core::result::Failure`
* `accept` function for building an `Accept` wrapped in a `core::result::Success`
* `text` namespace containing primitives for parsing UTF-8 data
* `CharacterSequenceMismatch` basic error type
* `ParseError` composite error type
* `ParseState` type specialized for UTF-8 data
* `ParseResult` partial specialization
* `CharacterSequence` parser which matches an exact sequence of characters
### Changed
#### Build system
* Upgrade the C++ version to C++20
#### `test` library features
* Print a special message when there are no tests in a test suite
### Deprecated
### Removed
### Fixed
#### Build system
* Give a nice message from CMake instead of weird errors when trying to build for non-64-bit systems
### Security
## [0.1.0]
Released on September 04, 2021.
### Added
#### New libraries
* `core` library for fundamental types and functions used by everything else
* `test` library for testing infrastructure
* `unix` library for wrapping Unix-like APIs
* `windows` library for wrapping Windows APIs
#### `core` library features
* `core::constant_error` namespace, containing a `ConstantError` template for errors with a constant message
* `core::error_chain` namespace, containing the `ErrorChain` class for building complex error types
* `core::none` namespace, containing the `None` type to use as a placeholder
* `core::resource_warden` namespace, containing a class template for cleaning up raw resources on scope exit
* `core::result` namespace, containing facilities for operations that can fail
#### `test` library features
* `test::abstract_reporter` namespace, containing the `AbstractReporter` interface
* `test::cli` namespace, containing a function `execute()` that can be called from `main()`
* `test::console_reporter` namespace, containing a reporter that writes to stdout
* `test::expect` namespace, containing macros to express test assertions
* `test::outcome` namespace, containing types representing scenario outcomes
* `test::reporter` namespace, containing factories for specific reporters and also a wrapper type
* `test::scenario` namespace, containing the `Scenario` type for representing a single test scenario
* `test::suite` namespace, containing the `Suite` singleton used to hold all of the tests in a suite
#### `unix` library features
* `unix::errno_error` namespace, containing utilities for working with `errno`
* `unix::fs` namespace, containing wrappers for filesystem APIs on Unix-like systems
#### `windows` library features
* `windows::fs` namespace, containing wrappers for filesystem APIs on Windows
* `windows::transcoding` namespace, containing functions for transcoding UTF8 with UTF16 for Windows APIs
* `windows::windows_error` namespace, containing functions and a type for reading and formatting Windows errors
#### Build system features
* `AddCrucibleExecutable` module, which provides a wrapper for `add_executable()`
* `AddCrucibleLibrary` module, which provides a wrapper for `add_library()`
* `AddCrucibleTest` module, which provides a wrapper for `add_test()`
* `EnableCompilerWarnings` module, which provides a function that enables common compiler warning flags
* `EnableRuntimeSanitizers` module, which provides a function that enables ASAN, TSAN, and UBSAN based on options
* Write all final build outputs (executables and libraries) to `${PROJECT_BINARY_DIR}/artifacts`
* Automatically export all symbols from all libraries when building Windows DLLs
#### Repository features
* Build dependencies in the README
* Build instructions in the README
* Test instructions in the README
* Attribution in the README
[Unreleased]: https://gitlab.com/bravelytyped/crucible
[0.1.0]: https://gitlab.com/bravelytyped/crucible/-/tree/v0.1.0