Skip to content

Commit 2f9c51c

Browse files
Implemented addition
1 parent d1d718f commit 2f9c51c

File tree

6 files changed

+89
-0
lines changed

6 files changed

+89
-0
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ set(SOURCES
1616
src/fields/field_definition.cpp
1717
src/fields/abstract_function_definition.cpp
1818
src/fields/input_field.cpp
19+
src/fields/addition.cpp
1920
src/fields/subtraction.cpp
2021
src/fields/field_link_definition.cpp
2122
src/fields/obj.cpp

include/fields/addition.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#ifndef ADDITION_H
2+
#define ADDITION_H
3+
4+
#include "fields/abstract_function_definition.h"
5+
#include "fields/type.h"
6+
#include "fields/obj.h"
7+
8+
class Addition : public AbstractFunctionDefinition {
9+
public:
10+
11+
// Constructor
12+
Addition(Type* ref, const std::string& name);
13+
14+
// Overridden method from AbstractFunctionDefinition
15+
double computeUpdate(Obj* obj, FieldLinkDefinition* fl, double u) override;
16+
};
17+
18+
#endif // ADDITION_H

install_manifest.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/abstract_function_definition.h
2020
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/type_registry.h
2121
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/queue_interceptor.h
22+
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/addition.h
2223
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/field_update.h
2324
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/flattened_type.h
2425
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/rel_obj_iterator.h

python-tests/addition-test.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import unittest
2+
import sys
3+
import os
4+
5+
# Add the project root to Python's module search path
6+
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
7+
8+
import aika
9+
10+
class AdditionTestCase(unittest.TestCase):
11+
12+
def testAddition(self):
13+
print("Module 'aika' was loaded from:", aika.__file__)
14+
15+
TEST_RELATION_FROM = aika.RelationOne(1, "TEST_FROM")
16+
TEST_RELATION_TO = aika.RelationOne(2, "TEST_TO")
17+
TEST_RELATION_TO.setReversed(TEST_RELATION_FROM)
18+
TEST_RELATION_FROM.setReversed(TEST_RELATION_TO)
19+
20+
registry = aika.TypeRegistry()
21+
22+
typeA = aika.TestType(registry, "A")
23+
typeB = aika.TestType(registry, "B")
24+
25+
a = typeA.inputField("a")
26+
b = typeA.inputField("b")
27+
28+
c = typeB.add("c")
29+
30+
c.input(TEST_RELATION_FROM, a, 0)
31+
c.input(TEST_RELATION_FROM, b, 1)
32+
33+
registry.flattenTypeHierarchy()
34+
35+
oa = typeA.instantiate()
36+
ob = typeB.instantiate()
37+
38+
aika.TestObj.linkObjects(oa, ob)
39+
ob.initFields()
40+
41+
oa.setFieldValue(a, 50.0)
42+
oa.setFieldValue(b, 20.0)
43+
44+
print("ob.getFieldValue(c):", ob.getFieldValue(c))
45+
46+
self.assertEqual(70.0, ob.getFieldValue(c))
47+
48+
if __name__ == '__main__':
49+
unittest.main()

src/fields/addition.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include "fields/addition.h"
2+
3+
// Constructor
4+
Addition::Addition(Type* ref, const std::string& name)
5+
: AbstractFunctionDefinition(ref, name, 2, 0.0) {}
6+
7+
// Overridden computeUpdate method
8+
double Addition::computeUpdate(Obj* obj, FieldLinkDefinition* fl, double u) {
9+
return u;
10+
}

src/fields/python_bindings.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "fields/test_type.h"
1212
#include "fields/test_object.h"
1313
#include "fields/field.h"
14+
#include "fields/addition.h"
1415

1516

1617
// ----------------
@@ -49,6 +50,9 @@ PYBIND11_MODULE(aika, m)
4950
// Bind Subtraction (inherits from AbstractFunctionDefinition)
5051
py::class_<Subtraction, AbstractFunctionDefinition>(m, "Subtraction");
5152

53+
// Bind Addition (inherits from AbstractFunctionDefinition)
54+
py::class_<Addition, AbstractFunctionDefinition>(m, "Addition");
55+
5256
py::class_<InputField, FieldDefinition>(m, "InputField")
5357
.def(py::init<Type*, const std::string &>())
5458
.def("__str__", [](const InputField &f) {
@@ -71,6 +75,12 @@ PYBIND11_MODULE(aika, m)
7175
const_cast<Type*>(&ref),
7276
name
7377
);
78+
}, py::return_value_policy::reference_internal)
79+
.def("add", [](const Type &ref, const std::string &name) {
80+
return new Addition(
81+
const_cast<Type*>(&ref),
82+
name
83+
);
7484
}, py::return_value_policy::reference_internal);
7585

7686
py::class_<Obj>(m, "Obj")

0 commit comments

Comments
 (0)