Integral Types
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
namespace {
|
||||
class score_view final : public luma::control {
|
||||
public:
|
||||
score_view(luma::application& app, vamp_zero::score_document score, std::string output, std::size_t page, bool& saved)
|
||||
score_view(luma::application& app, vamp_zero::score_document score, std::string output, std::size_t page, std::bool_t& saved)
|
||||
: app_{app}, score_{std::move(score)}, output_{std::move(output)}, page_{page}, saved_{saved} {}
|
||||
auto measure(luma::draw_context&, luma::theme const&, luma::constraints) -> luma::size override { return {976,484}; }
|
||||
auto draw(luma::draw_context& context, luma::theme const&) const -> void override {
|
||||
@@ -28,18 +28,18 @@ private:
|
||||
vamp_zero::score_document score_;
|
||||
std::string output_;
|
||||
std::size_t page_;
|
||||
bool& saved_;
|
||||
std::bool_t& saved_;
|
||||
};
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
int main(int argc, std::char_t** argv) {
|
||||
if (argc < 3) { std::cerr << "Usage: vamp-render-score input.json output.png [page]\n"; return 2; }
|
||||
auto input = std::ifstream{argv[1]};
|
||||
auto json = std::string{std::istreambuf_iterator<char>{input},std::istreambuf_iterator<char>{}};
|
||||
auto json = std::string{std::istreambuf_iterator<std::char_t>{input},std::istreambuf_iterator<std::char_t>{}};
|
||||
auto score = vamp_zero::parse_score_document(json,argv[1]);
|
||||
if (!score) { std::cerr << score.error().describe() << '\n'; return 1; }
|
||||
auto app = luma::application{{.title="Notation Regression",.display={.width=976,.height=484,.target_fps=30,.fullscreen=false}}};
|
||||
auto saved = false;
|
||||
auto saved = std::bool_t{false};
|
||||
auto root = app.set_root(std::make_unique<score_view>(app,std::move(*score),argv[2],argc>3 ? std::stoul(argv[3]) : 0,saved));
|
||||
if (!root) return 1;
|
||||
auto ran = app.run();
|
||||
|
||||
+10
-10
@@ -421,13 +421,13 @@ BOOST_AUTO_TEST_CASE(main_menu_toggles_audio_settings_and_edits_tempo) {
|
||||
BOOST_TEST(state.selected_main_menu_index == 2U);
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::SELECT);
|
||||
BOOST_TEST(state.audio.track_enabled);
|
||||
BOOST_TEST(static_cast<int>(state.mode) == static_cast<int>(vamp_zero::app_mode::MAIN_MENU));
|
||||
BOOST_TEST(static_cast<std::int32_t>(state.mode) == static_cast<std::int32_t>(vamp_zero::app_mode::MAIN_MENU));
|
||||
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::NEXT);
|
||||
BOOST_TEST(state.selected_main_menu_index == 3U);
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::SELECT);
|
||||
BOOST_TEST(state.audio.metronome_enabled);
|
||||
BOOST_TEST(static_cast<int>(state.mode) == static_cast<int>(vamp_zero::app_mode::MAIN_MENU));
|
||||
BOOST_TEST(static_cast<std::int32_t>(state.mode) == static_cast<std::int32_t>(vamp_zero::app_mode::MAIN_MENU));
|
||||
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::NEXT);
|
||||
BOOST_TEST(state.selected_main_menu_index == 4U);
|
||||
@@ -437,11 +437,11 @@ BOOST_AUTO_TEST_CASE(main_menu_toggles_audio_settings_and_edits_tempo) {
|
||||
BOOST_TEST(state.audio.metronome_bpm == 125U);
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::PREVIOUS);
|
||||
BOOST_TEST(state.audio.metronome_bpm == 120U);
|
||||
for (auto index = 0; index < 40; ++index) {
|
||||
for (auto index = std::int32_t{}; index < 40; ++index) {
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::PREVIOUS);
|
||||
}
|
||||
BOOST_TEST(state.audio.metronome_bpm == 40U);
|
||||
for (auto index = 0; index < 80; ++index) {
|
||||
for (auto index = std::int32_t{}; index < 80; ++index) {
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::NEXT);
|
||||
}
|
||||
BOOST_TEST(state.audio.metronome_bpm == 240U);
|
||||
@@ -472,21 +472,21 @@ BOOST_AUTO_TEST_CASE(main_menu_metronome_setting_survives_score_selection) {
|
||||
state.audio.metronome_enabled = true;
|
||||
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::SELECT);
|
||||
BOOST_TEST(static_cast<int>(state.mode) == static_cast<int>(vamp_zero::app_mode::PERFORMANCE_SONG_MENU));
|
||||
BOOST_TEST(static_cast<std::int32_t>(state.mode) == static_cast<std::int32_t>(vamp_zero::app_mode::PERFORMANCE_SONG_MENU));
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::NEXT);
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::SELECT);
|
||||
BOOST_TEST(static_cast<int>(state.mode) == static_cast<int>(vamp_zero::app_mode::PERFORMANCE_PART_MENU));
|
||||
BOOST_TEST(static_cast<std::int32_t>(state.mode) == static_cast<std::int32_t>(vamp_zero::app_mode::PERFORMANCE_PART_MENU));
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::NEXT);
|
||||
state = vamp_zero::apply_app_command(std::move(state), vamp_protocol::page_command::SELECT);
|
||||
|
||||
BOOST_TEST(static_cast<int>(state.mode) == static_cast<int>(vamp_zero::app_mode::PERFORMANCE_SCORE));
|
||||
BOOST_TEST(static_cast<std::int32_t>(state.mode) == static_cast<std::int32_t>(vamp_zero::app_mode::PERFORMANCE_SCORE));
|
||||
BOOST_TEST(state.audio.metronome_enabled);
|
||||
BOOST_TEST(!state.audio.tempo_editing);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(score_parser_preserves_notation_preamble) {
|
||||
auto parsed = vamp_zero::parse_score_document(score_asset_json("Standard Tune", "Eb"), "standard-tune.json");
|
||||
BOOST_REQUIRE(static_cast<bool>(parsed));
|
||||
BOOST_REQUIRE(static_cast<std::bool_t>(parsed));
|
||||
BOOST_TEST(parsed->title == "Standard Tune");
|
||||
BOOST_TEST(parsed->composer == "Composer");
|
||||
BOOST_TEST(parsed->key_signature == "Eb");
|
||||
@@ -503,7 +503,7 @@ BOOST_AUTO_TEST_CASE(score_parser_loads_the_generated_catalogue) {
|
||||
for (auto const& entry : std::filesystem::recursive_directory_iterator{VAMP_TEST_ASSETS_DIR}) {
|
||||
if (entry.path().extension() != ".json") continue;
|
||||
auto input = std::ifstream{entry.path()};
|
||||
auto json = std::string{std::istreambuf_iterator<char>{input}, std::istreambuf_iterator<char>{}};
|
||||
auto json = std::string{std::istreambuf_iterator<std::char_t>{input}, std::istreambuf_iterator<std::char_t>{}};
|
||||
auto parsed = vamp_zero::parse_score_document(json, entry.path().string());
|
||||
BOOST_TEST_CONTEXT(entry.path().string()) {
|
||||
BOOST_REQUIRE(parsed.has_value());
|
||||
@@ -558,7 +558,7 @@ BOOST_AUTO_TEST_CASE(score_layout_supports_all_written_durations_and_multiple_do
|
||||
|
||||
BOOST_AUTO_TEST_CASE(score_layout_paginates_dense_measures_without_losing_events) {
|
||||
auto notes = std::vector<vamp_zero::score_note>{};
|
||||
for (int i = 0; i < 128; ++i) {
|
||||
for (auto i = std::int32_t{}; i < 128; ++i) {
|
||||
auto n = note_with_ticks({pitch('c',"#",4)},128);
|
||||
n.written = {.type="128th"};
|
||||
n.duration = {1,32};
|
||||
|
||||
@@ -9,9 +9,19 @@ from pathlib import Path
|
||||
|
||||
from generator.__main__ import copy_runtime_fonts
|
||||
from tools import generate_pico_font
|
||||
from tools import generate_score_metrics
|
||||
|
||||
|
||||
class FontAssetsTests(unittest.TestCase):
|
||||
def test_score_metrics_use_fixed_width_codepoints(self):
|
||||
root = Path(__file__).resolve().parents[1]
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
output = Path(directory) / "generated/score_metrics.hpp"
|
||||
generate_score_metrics.generate(root / "package/assets/fonts/petaluma/Petaluma.otf", output)
|
||||
content = output.read_text(encoding="ascii")
|
||||
self.assertIn("#include <cstdint>", content)
|
||||
self.assertIn("std::int32_t codepoint", content)
|
||||
|
||||
def test_font_generator_requires_kerning_backend(self):
|
||||
with unittest.mock.patch.object(generate_pico_font.features, "check_feature", return_value=False):
|
||||
with self.assertRaisesRegex(RuntimeError, "Raqm"):
|
||||
|
||||
Reference in New Issue
Block a user