AsmGrader 0.0.0
Loading...
Searching...
No Matches
auto_registrars.hpp
Go to the documentation of this file.
1#pragma once
2
7
8#include <concepts>
9#include <memory>
10#include <string_view>
11
12namespace asmgrader {
13
14// /// Helper class that, whem constructed, automatically registers an assignment to the global registrar
15// class AssignmentAutoRegistrar
16// {
17// public:
18// explicit AssignmentAutoRegistrar(Assignment assignment) noexcept {
19// GlobalRegistrar::get().add(std::move(assignment));
20// }
21// };
22
24template <typename TestClass>
25 requires(std::derived_from<TestClass, TestBase>)
27{
28public:
29 template <typename... MetadataAttrs>
30 explicit TestAutoRegistrar(std::string_view name, metadata::Metadata<MetadataAttrs...> metadata =
32
34
35 TestClass test{assignment, name, metadata};
36 assignment.add_test(std::make_unique<TestClass>(std::forward<TestClass>(test)));
37 }
38};
39
40} // namespace asmgrader
Declaration for the logic and data encapsulating a class assignment.
Definition assignment.hpp:23
void add_test(std::unique_ptr< TestBase > test) const noexcept
Definition assignment.cpp:16
Assignment & find_or_create_assignment(metadata::Metadata< MetadataAttrs... > metadata)
Find the assignment corresponding to the Assignment attribute of metadata, or create a new assignment...
Definition global_registrar.hpp:84
static GlobalRegistrar & get() noexcept
Safe global singleton pattern (first intro. by Scott Meyers for C++, I think)
Definition global_registrar.cpp:11
Helper class that, whem constructed, automatically constructs and registers a test.
Definition auto_registrars.hpp:27
TestAutoRegistrar(std::string_view name, metadata::Metadata< MetadataAttrs... > metadata=metadata::Metadata< MetadataAttrs... >{}) noexcept
Definition auto_registrars.hpp:30
Definition metadata.hpp:117
Definition asm_buffer.hpp:19