Skip to content

Commit e81cead

Browse files
authored
fix: add missing out capabilities count assignment (#229)
1 parent 79a94ec commit e81cead

File tree

6 files changed

+117
-2
lines changed

6 files changed

+117
-2
lines changed

MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module(
77
bazel_dep(name = "rules_cc", version = "0.0.9")
88
bazel_dep(name = "bazel_skylib", version = "1.5.0")
99
bazel_dep(name = "magic_enum", version = "0.9.3")
10-
bazel_dep(name = "ecsact_runtime", version = "0.6.5")
10+
bazel_dep(name = "ecsact_runtime", version = "0.6.6")
1111
bazel_dep(name = "ecsact_parse", version = "0.5.1")
1212

1313
bazel_dep(name = "toolchains_llvm", version = "1.0.0", dev_dependency = True)

parse-resolver-runtime/assoc.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,10 @@ void ecsact_meta_system_assoc_capabilities(
317317
return;
318318
}
319319

320+
if(out_capabilities_count) {
321+
*out_capabilities_count = static_cast<int32_t>(info->caps.size());
322+
}
323+
320324
for(int32_t i = 0; max_capabilities_count > i; ++i) {
321325
if(i >= info->caps.size()) {
322326
break;

test/BUILD.bazel

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,22 @@ cc_test(
5959
],
6060
)
6161

62+
cc_test(
63+
name = "assoc_capabilities",
64+
srcs = ["assoc_capabilities.cc"],
65+
copts = copts,
66+
data = [
67+
"assoc_capabilities.ecsact",
68+
],
69+
deps = [
70+
":test_lib",
71+
"@ecsact_interpret",
72+
"@bazel_sundry//bazel_sundry:runfiles",
73+
"@googletest//:gtest",
74+
"@googletest//:gtest_main",
75+
],
76+
)
77+
6278
cc_test(
6379
name = "field_indexing",
6480
srcs = ["field_indexing.cc"],

test/MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ bazel_dep(name = "rules_cc", version = "0.0.9")
44
bazel_dep(name = "bazel_skylib", version = "1.5.0")
55
bazel_dep(name = "googletest", version = "1.14.0")
66
bazel_dep(name = "ecsact_parse", version = "0.5.1")
7-
bazel_dep(name = "ecsact_runtime", version = "0.6.5")
7+
bazel_dep(name = "ecsact_runtime", version = "0.6.6")
88

99
bazel_dep(name = "toolchains_llvm", version = "1.0.0", dev_dependency = True)
1010
bazel_dep(name = "hedron_compile_commands", dev_dependency = True)

test/assoc_capabilities.cc

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
2+
#include "gtest/gtest.h"
3+
4+
#include "ecsact/runtime/meta.hh"
5+
#include "ecsact/runtime/dynamic.h"
6+
#include "test_lib.hh"
7+
8+
using ecsact::meta::get_field_type;
9+
10+
class AssocCapabilities : public testing::Test {
11+
public:
12+
ecsact_package_id pkg_id;
13+
14+
protected:
15+
void SetUp() override {
16+
auto errs = ecsact_interpret_test_files({"assoc_capabilities.ecsact"});
17+
ASSERT_EQ(errs.size(), 0) //
18+
<< "Expected no errors. Instead got: " << errs[0].error_message << "\n";
19+
pkg_id = ecsact::meta::get_package_ids().at(0);
20+
}
21+
22+
void TearDown() override {
23+
// ecsact_destroy_package(pkg_id);
24+
}
25+
};
26+
27+
TEST_F(AssocCapabilities, GeneralReads) {
28+
auto example_comp = get_component_by_name(pkg_id, "Example");
29+
ASSERT_TRUE(example_comp);
30+
31+
auto comp = get_component_by_name(pkg_id, "AssocComp");
32+
ASSERT_TRUE(comp);
33+
34+
auto sys = get_system_by_name(pkg_id, "ReadwriteSystem");
35+
auto assoc_ids = ecsact::meta::system_assoc_ids(*sys);
36+
ASSERT_EQ(assoc_ids.size(), 1);
37+
38+
auto caps = ecsact::meta::system_assoc_capabilities(*sys, assoc_ids.at(0));
39+
ASSERT_EQ(caps.size(), 1);
40+
41+
ASSERT_EQ(
42+
caps.at(0).first,
43+
ecsact_id_cast<ecsact_component_like_id>(*example_comp)
44+
);
45+
ASSERT_EQ(caps.at(0).second, ECSACT_SYS_CAP_READWRITE);
46+
}
47+
48+
TEST_F(AssocCapabilities, RemovesExists) {
49+
auto example_comp = get_component_by_name(pkg_id, "Example");
50+
ASSERT_TRUE(example_comp);
51+
52+
auto tag_comp = get_component_by_name(pkg_id, "MyTag");
53+
ASSERT_TRUE(tag_comp);
54+
55+
auto comp = get_component_by_name(pkg_id, "AssocComp");
56+
ASSERT_TRUE(comp);
57+
58+
auto sys = get_system_by_name(pkg_id, "RemovesSystem");
59+
auto assoc_ids = ecsact::meta::system_assoc_ids(*sys);
60+
ASSERT_EQ(assoc_ids.size(), 1);
61+
62+
auto assoc_caps =
63+
ecsact::meta::system_assoc_capabilities(*sys, assoc_ids.at(0));
64+
65+
// order isn't guaranteed
66+
for(auto&& [comp_id, caps] : assoc_caps) {
67+
if(comp_id == ecsact_id_cast<ecsact_component_like_id>(*tag_comp)) {
68+
ASSERT_EQ(caps, ECSACT_SYS_CAP_INCLUDE);
69+
} else if(comp_id ==
70+
ecsact_id_cast<ecsact_component_like_id>(*example_comp)) {
71+
ASSERT_EQ(caps, ECSACT_SYS_CAP_REMOVES);
72+
} else {
73+
ASSERT_TRUE(false) << "unknown comp id";
74+
}
75+
}
76+
}

test/assoc_capabilities.ecsact

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package eval.assoc_capabilities;
2+
3+
component MyTag;
4+
component Example { i32 num; }
5+
component AssocComp { Example.num hello; }
6+
7+
system ReadwriteSystem {
8+
readwrite AssocComp with hello {
9+
readwrite Example;
10+
}
11+
}
12+
13+
system RemovesSystem {
14+
readwrite AssocComp with hello {
15+
include MyTag;
16+
removes Example;
17+
}
18+
}
19+

0 commit comments

Comments
 (0)