diff --git a/scripts/format-project.sh b/scripts/format-project.sh index d5d4a2432..678e085a6 100755 --- a/scripts/format-project.sh +++ b/scripts/format-project.sh @@ -31,6 +31,7 @@ fi src/xrt/ipc \ src/xrt/state_trackers \ src/xrt/targets \ + tests \ \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) \ -exec ${CLANGFORMAT} -i -style=file \{\} + ) diff --git a/src/xrt/.clang-format b/src/xrt/.clang-format index 474fc6876..8abac62cc 100644 --- a/src/xrt/.clang-format +++ b/src/xrt/.clang-format @@ -1,6 +1,6 @@ --- # SPDX-LicenseIdentifier: CC0-1.0 -# SPDX-FileCopyrightText: 2019, Collabora, Ltd. +# SPDX-FileCopyrightText: 2020, Collabora, Ltd. Language: Cpp BasedOnStyle: LLVM Standard: Auto diff --git a/tests/.clang-format b/tests/.clang-format new file mode 100644 index 000000000..0b270b068 --- /dev/null +++ b/tests/.clang-format @@ -0,0 +1,51 @@ +--- +# SPDX-LicenseIdentifier: CC0-1.0 +# SPDX-FileCopyrightText: 2020, Collabora, Ltd. +Language: Cpp +BasedOnStyle: LLVM +Standard: Auto + +# Includes +SortIncludes: false + +# Spacing and Blank Lines +DerivePointerAlignment: false +PointerAlignment: Right +#AlignEscapedNewlines: DontAlign +#AlignConsecutiveDeclarations: false +#AlignConsecutiveAssignments: false +MaxEmptyLinesToKeep: 3 + +# Indentation +IndentWidth: 8 +TabWidth: 8 +UseTab: ForIndentation +AccessModifierOffset: -8 +IndentCaseLabels: false +NamespaceIndentation: Inner + +# Line length/reflow +# Longer for tests because of high levels of indentation +ColumnLimit: 120 +ReflowComments: true + + +# Line breaks +AlwaysBreakAfterReturnType: All +AllowShortFunctionsOnASingleLine: Empty +AllowShortIfStatementsOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: true +AlwaysBreakBeforeMultilineStrings: true +BreakBeforeBraces: Custom +BraceWrapping: + AfterEnum: true + AfterStruct: true + AfterClass: true + SplitEmptyFunction: false + AfterFunction: true + AfterNamespace: false + +# false means either "all on one line" or "each on their own", +# won't put more than one on a line if they don't all fit. +BinPackArguments: true +BinPackParameters: false diff --git a/tests/tests_input_transform.cpp b/tests/tests_input_transform.cpp index ca459e436..dc8ee914c 100644 --- a/tests/tests_input_transform.cpp +++ b/tests/tests_input_transform.cpp @@ -16,257 +16,301 @@ using Catch::Generators::values; -TEST_CASE("input_transform") { - struct oxr_logger log; - oxr_log_init(&log, "test"); - struct oxr_sink_logger slog = {}; +TEST_CASE("input_transform") +{ + struct oxr_logger log; + oxr_log_init(&log, "test"); + struct oxr_sink_logger slog = {}; - struct oxr_input_transform *transforms = NULL; - size_t num_transforms = 0; + struct oxr_input_transform *transforms = NULL; + size_t num_transforms = 0; - oxr_input_value_tagged input = {}; - oxr_input_value_tagged output = {}; + oxr_input_value_tagged input = {}; + oxr_input_value_tagged output = {}; - SECTION("Float action") { - XrActionType action_type = XR_ACTION_TYPE_FLOAT_INPUT; - SECTION("From Vec1 -1 to 1 identity") { - input.type = XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE; - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "float_action", - "/dummy_float", &transforms, &num_transforms)); + SECTION("Float action") + { + XrActionType action_type = XR_ACTION_TYPE_FLOAT_INPUT; - // Just identity - CHECK(num_transforms == 1); - CHECK(transforms != nullptr); + SECTION("From Vec1 -1 to 1 identity") + { + input.type = XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE; - SECTION("Roundtrip") { - auto value = - GENERATE(values({-1.f, -0.5f, 0.f, -0.f, 0.5f, 1.f})); - input.value.vec1.x = value; - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(input.value.vec1.x == output.value.vec1.x); - } - } + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, "float_action", + "/dummy_float", &transforms, &num_transforms)); - SECTION("From Vec1 0 to 1 identity") { - input.type = XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE; - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "float_action", - "/dummy_float", &transforms, &num_transforms)); - // Just identity - CHECK(num_transforms == 1); - CHECK(transforms != nullptr); + // Just identity + CHECK(num_transforms == 1); + CHECK(transforms != nullptr); - SECTION("Roundtrip") { - auto value = GENERATE(values({0.f, -0.f, 0.5f, 1.f})); - input.value.vec1.x = value; - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(input.value.vec1.x == output.value.vec1.x); - } - } + SECTION("Roundtrip") + { + auto value = GENERATE(values({-1.f, -0.5f, 0.f, -0.f, 0.5f, 1.f})); + input.value.vec1.x = value; - SECTION("From Vec2 input") { - input.type = XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE; - input.value.vec2.x = -1; - input.value.vec2.y = 1; - SECTION("path component x") { - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "float_action", - "/dummy_vec2/x", &transforms, &num_transforms)); - // Identity and a get-x - CHECK(num_transforms == 2); - CHECK(transforms != nullptr); + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(input.value.vec1.x == output.value.vec1.x); + } + } - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(input.value.vec2.x == output.value.vec1.x); - } - SECTION("path component y") { - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "float_action", - "/dummy_vec2/y", &transforms, &num_transforms)); - // Identity and a get-y - CHECK(num_transforms == 2); - CHECK(transforms != nullptr); + SECTION("From Vec1 0 to 1 identity") + { + input.type = XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE; - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(input.value.vec2.y == output.value.vec1.x); - } - SECTION("no component") { - CHECK_FALSE(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "float_action", - "/dummy_vec2", &transforms, &num_transforms)); - // Shouldn't make a transform, not possible - CHECK(num_transforms == 0); - CHECK(transforms == nullptr); + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, "float_action", + "/dummy_float", &transforms, &num_transforms)); - // shouldn't do anything, but shouldn't explode. - CHECK_FALSE(oxr_input_transform_process( - transforms, num_transforms, &input, &output)); - } - } + // Just identity + CHECK(num_transforms == 1); + CHECK(transforms != nullptr); - SECTION("From bool input") { - input.type = XRT_INPUT_TYPE_BOOLEAN; - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "float_action", - "/dummy_bool", &transforms, &num_transforms)); - // Identity and a bool-to-float - CHECK(num_transforms == 2); - CHECK(transforms != nullptr); + SECTION("Roundtrip") + { + auto value = GENERATE(values({0.f, -0.f, 0.5f, 1.f})); + input.value.vec1.x = value; - SECTION("False") { - input.value.boolean = false; - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(0.0f == output.value.vec1.x); - } - SECTION("True") { - input.value.boolean = true; - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(1.0f == output.value.vec1.x); - } - } - } + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(input.value.vec1.x == output.value.vec1.x); + } + } - SECTION("Bool action") { - XrActionType action_type = XR_ACTION_TYPE_BOOLEAN_INPUT; - SECTION("From Bool identity") { - input.type = XRT_INPUT_TYPE_BOOLEAN; - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "bool_action", - "/dummy_bool", &transforms, &num_transforms)); - CHECK(num_transforms == 1); - CHECK(transforms != nullptr); + SECTION("From Vec2 input") + { + input.type = XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE; + input.value.vec2.x = -1; + input.value.vec2.y = 1; - SECTION("Roundtrip") { - auto value = GENERATE(values({0, 1})); - input.value.boolean = bool(value); - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(input.value.boolean == output.value.boolean); - } - } + SECTION("path component x") + { + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, + "float_action", "/dummy_vec2/x", &transforms, + &num_transforms)); - SECTION("From Vec1 -1 to 1") { - input.type = XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE; - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "bool_action", - "/dummy_float", &transforms, &num_transforms)); - CHECK(num_transforms == 2); - CHECK(transforms != nullptr); + // Identity and a get-x + CHECK(num_transforms == 2); + CHECK(transforms != nullptr); - SECTION("True") { - auto value = GENERATE(values({0.5f, 1.f})); - input.value.vec1.x = value; - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(output.value.boolean == true); - } - SECTION("False") { - auto value = GENERATE(values({0.0f, -1.f})); - input.value.vec1.x = value; - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(output.value.boolean == false); - } - } + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(input.value.vec2.x == output.value.vec1.x); + } - SECTION("From Vec1 0 to 1") { - input.type = XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE; - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "bool_action", - "/dummy_float", &transforms, &num_transforms)); - CHECK(num_transforms == 2); - CHECK(transforms != nullptr); + SECTION("path component y") + { + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, + "float_action", "/dummy_vec2/y", &transforms, + &num_transforms)); - SECTION("True") { - auto value = GENERATE(values({0.95f, 1.f})); - input.value.vec1.x = value; - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(output.value.boolean == true); - } - SECTION("False") { - auto value = GENERATE(values({0.0f, 0.5f})); - input.value.vec1.x = value; - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(output.value.boolean == false); - } - } - SECTION("From Vec2") { - input.type = XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE; - input.value.vec2.x = -1; - input.value.vec2.y = 1; - SECTION("x") { - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "float_action", - "/dummy_vec2/x", &transforms, &num_transforms)); - CHECK(num_transforms == 3); - CHECK(transforms != nullptr); + // Identity and a get-y + CHECK(num_transforms == 2); + CHECK(transforms != nullptr); - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(false == output.value.boolean); - } - SECTION("y") { - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "float_action", - "/dummy_vec2/y", &transforms, &num_transforms)); - CHECK(num_transforms == 3); - CHECK(transforms != nullptr); + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(input.value.vec2.y == output.value.vec1.x); + } - CHECK(oxr_input_transform_process(transforms, num_transforms, - &input, &output)); - CHECK(true == output.value.boolean); - } - SECTION("no component") { - CHECK_FALSE(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "float_action", - "/dummy", &transforms, &num_transforms)); - // Shouldn't make a transform, not possible - CHECK(num_transforms == 0); - CHECK(transforms == nullptr); + SECTION("no component") + { + CHECK_FALSE(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, + "float_action", "/dummy_vec2", &transforms, + &num_transforms)); - // shouldn't do anything, but shouldn't explode. - CHECK_FALSE(oxr_input_transform_process( - transforms, num_transforms, &input, &output)); - } - } - } + // Shouldn't make a transform, not possible + CHECK(num_transforms == 0); + CHECK(transforms == nullptr); - SECTION("Pose action") { - XrActionType action_type = XR_ACTION_TYPE_POSE_INPUT; - SECTION("From Pose identity") { - input.type = XRT_INPUT_TYPE_POSE; - CHECK(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "pose_action", - "/dummy_pose", &transforms, &num_transforms)); - // Identity, just so this binding doesn't get culled. - CHECK(num_transforms == 1); - } - SECTION("From other input") { - auto input_type = GENERATE(values( - {XRT_INPUT_TYPE_BOOLEAN, XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE, - XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE, - XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE, - XRT_INPUT_TYPE_VEC3_MINUS_ONE_TO_ONE})); - CAPTURE(input_type); - input.type = input_type; - CHECK_FALSE(oxr_input_transform_create_chain( - &log, &slog, input.type, action_type, "pose_action", "/dummy", - &transforms, &num_transforms)); - // not possible - CHECK(num_transforms == 0); - CHECK(transforms == nullptr); - } - } - oxr_log_slog(&log, &slog); - oxr_input_transform_destroy(&transforms); - CHECK(NULL == transforms); + // shouldn't do anything, but shouldn't explode. + CHECK_FALSE(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + } + } + + SECTION("From bool input") + { + input.type = XRT_INPUT_TYPE_BOOLEAN; + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, "float_action", + "/dummy_bool", &transforms, &num_transforms)); + + // Identity and a bool-to-float + CHECK(num_transforms == 2); + CHECK(transforms != nullptr); + + SECTION("False") + { + input.value.boolean = false; + + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(0.0f == output.value.vec1.x); + } + + SECTION("True") + { + input.value.boolean = true; + + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(1.0f == output.value.vec1.x); + } + } + } + + SECTION("Bool action") + { + XrActionType action_type = XR_ACTION_TYPE_BOOLEAN_INPUT; + SECTION("From Bool identity") + { + input.type = XRT_INPUT_TYPE_BOOLEAN; + + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, "bool_action", + "/dummy_bool", &transforms, &num_transforms)); + CHECK(num_transforms == 1); + CHECK(transforms != nullptr); + + SECTION("Roundtrip") + { + auto value = GENERATE(values({0, 1})); + input.value.boolean = bool(value); + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(input.value.boolean == output.value.boolean); + } + } + + SECTION("From Vec1 -1 to 1") + { + input.type = XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE; + + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, "bool_action", + "/dummy_float", &transforms, &num_transforms)); + CHECK(num_transforms == 2); + CHECK(transforms != nullptr); + + SECTION("True") + { + auto value = GENERATE(values({0.5f, 1.f})); + input.value.vec1.x = value; + + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(output.value.boolean == true); + } + + SECTION("False") + { + auto value = GENERATE(values({0.0f, -1.f})); + input.value.vec1.x = value; + + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(output.value.boolean == false); + } + } + + SECTION("From Vec1 0 to 1") + { + input.type = XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE; + + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, "bool_action", + "/dummy_float", &transforms, &num_transforms)); + CHECK(num_transforms == 2); + CHECK(transforms != nullptr); + + SECTION("True") + { + auto value = GENERATE(values({0.95f, 1.f})); + input.value.vec1.x = value; + + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(output.value.boolean == true); + } + + SECTION("False") + { + auto value = GENERATE(values({0.0f, 0.5f})); + input.value.vec1.x = value; + + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(output.value.boolean == false); + } + } + + SECTION("From Vec2") + { + input.type = XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE; + input.value.vec2.x = -1; + input.value.vec2.y = 1; + + SECTION("x") + { + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, + "float_action", "/dummy_vec2/x", &transforms, + &num_transforms)); + CHECK(num_transforms == 3); + CHECK(transforms != nullptr); + + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(false == output.value.boolean); + } + + SECTION("y") + { + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, + "float_action", "/dummy_vec2/y", &transforms, + &num_transforms)); + CHECK(num_transforms == 3); + CHECK(transforms != nullptr); + + CHECK(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + CHECK(true == output.value.boolean); + } + + SECTION("no component") + { + CHECK_FALSE(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, + "float_action", "/dummy", &transforms, + &num_transforms)); + + // Shouldn't make a transform, not possible + CHECK(num_transforms == 0); + CHECK(transforms == nullptr); + + // shouldn't do anything, but shouldn't explode. + CHECK_FALSE(oxr_input_transform_process(transforms, num_transforms, &input, &output)); + } + } + } + + SECTION("Pose action") + { + XrActionType action_type = XR_ACTION_TYPE_POSE_INPUT; + + SECTION("From Pose identity") + { + input.type = XRT_INPUT_TYPE_POSE; + CHECK(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, "pose_action", + "/dummy_pose", &transforms, &num_transforms)); + // Identity, just so this binding doesn't get culled. + CHECK(num_transforms == 1); + } + + SECTION("From other input") + { + auto input_type = GENERATE(values({ + XRT_INPUT_TYPE_BOOLEAN, + XRT_INPUT_TYPE_VEC1_MINUS_ONE_TO_ONE, + XRT_INPUT_TYPE_VEC1_ZERO_TO_ONE, + XRT_INPUT_TYPE_VEC2_MINUS_ONE_TO_ONE, + XRT_INPUT_TYPE_VEC3_MINUS_ONE_TO_ONE, + })); + + CAPTURE(input_type); + input.type = input_type; + + CHECK_FALSE(oxr_input_transform_create_chain(&log, &slog, input.type, action_type, + "pose_action", "/dummy", &transforms, + &num_transforms)); + + // not possible + CHECK(num_transforms == 0); + CHECK(transforms == nullptr); + } + } + + oxr_log_slog(&log, &slog); + oxr_input_transform_destroy(&transforms); + CHECK(NULL == transforms); } diff --git a/tests/tests_main.cpp b/tests/tests_main.cpp index 0425f3d7f..fbf3aa52e 100644 --- a/tests/tests_main.cpp +++ b/tests/tests_main.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: BSL-1.0 /*! * @file - * @brief Translation unit to build Catch2 main. + * @brief Translation unit to build Catch2 main. * @author Ryan Pavlik */