• R/O
  • SSH

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2


Commit MetaInfo

修订版6d8b6474c25e31acd67aebfb1c7bdd8c5693331b (tree)
时间2023-02-11 07:20:01
作者Albert Mietus < albert AT mietus DOT nl >
CommiterAlbert Mietus < albert AT mietus DOT nl >

Log Message

asis

更改概述

差异

diff -r ed0d54295efd -r 6d8b6474c25e Makefile
--- a/Makefile Wed Feb 08 23:03:41 2023 +0100
+++ b/Makefile Fri Feb 10 23:20:01 2023 +0100
@@ -7,12 +7,13 @@
77 pytst/writers/CC2Cpy/test_2b_EventProtocol.py \
88 pytst/writers/CC2Cpy/test_3a_CompPort.py \
99 pytst/writers/CC2Cpy/test_3b_CompInterface.py \
10+ pytst/writers/CC2Cpy/test_3c_CompClass.py \
1011 #
1112 CURRENT_TESTS = \
12- pytst/writers/CC2Cpy/test_3c_CompClass.py \
13+ pytst/writers/CC2Cpy/test_3d_CompStruct.py \
14+ pytst/writers/CC2Cpy/test_9_genSieve.py \
1315 #
1416 TODO_TESTS = \
15- pytst/writers/CC2Cpy/test_3d_CompStruct.py \
1617 pytst/writers/CC2Cpy/test_999_NoNameCollision.py \
1718 #
1819
diff -r ed0d54295efd -r 6d8b6474c25e castle/writers/CC2Cpy/Component.py
--- a/castle/writers/CC2Cpy/Component.py Wed Feb 08 23:03:41 2023 +0100
+++ b/castle/writers/CC2Cpy/Component.py Fri Feb 10 23:20:01 2023 +0100
@@ -77,7 +77,7 @@
7777 for no,port in enumerate(self.ports, start_port_no): # Loop over 'own' ports
7878 retval.append(f'{prepend}{indent*2}{{')
7979 retval.append(f'{prepend}{indent*3}.portNo = {no},')
80- retval.append(f'{prepend}{indent*3}.protocol = {port.portray_typePtr()},')
80+ retval.append(f'{prepend}{indent*3}.protocol = {port.portray_typePtr()},')
8181 retval.append(f'{prepend}{indent*3}.direction = {port.direction.portray_name()},')
8282 retval.append(f'{prepend}{indent*3}.name = "{port.name}",')
8383 retval.append(f'{prepend}{indent*3}.part_of = &{name} }},')
diff -r ed0d54295efd -r 6d8b6474c25e pytst/writers/CC2Cpy/test_3a_CompPort.py
--- a/pytst/writers/CC2Cpy/test_3a_CompPort.py Wed Feb 08 23:03:41 2023 +0100
+++ b/pytst/writers/CC2Cpy/test_3a_CompPort.py Fri Feb 10 23:20:01 2023 +0100
@@ -9,7 +9,7 @@
99 from . import * # CCompare
1010
1111 from castle.writers.CC2Cpy.Component import *
12-
12+from castle.writers.CC2Cpy.CCbase import CC_Base
1313
1414 def test_1a_CC_PortDirection():
1515 # Test the (int) value -- needed for the generated C code
@@ -86,3 +86,7 @@
8686 assert CCompare('&'+proto.portray_name(), port.portray_typePtr())
8787
8888
89+def test_BUG():
90+ proto = CC_EventProtocol("JustAProtocol", events=[], based_on=None)
91+ port = CC_Port(name="=NoName", type=proto)
92+ assert isinstance(port.type, CC_Base)
diff -r ed0d54295efd -r 6d8b6474c25e pytst/writers/CC2Cpy/test_3d_CompStruct.py
--- a/pytst/writers/CC2Cpy/test_3d_CompStruct.py Wed Feb 08 23:03:41 2023 +0100
+++ b/pytst/writers/CC2Cpy/test_3d_CompStruct.py Fri Feb 10 23:20:01 2023 +0100
@@ -4,7 +4,7 @@
44 import pytest
55 from . import * # CCompare
66
7-from castle.writers.CC2Cpy.Component import *
7+from castle.writers.CC2Cpy.Component import *
88
99
1010
diff -r ed0d54295efd -r 6d8b6474c25e pytst/writers/CC2Cpy/test_9_genSieve.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pytst/writers/CC2Cpy/test_9_genSieve.py Fri Feb 10 23:20:01 2023 +0100
@@ -0,0 +1,83 @@
1+# (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project
2+
3+"""CCastle::CC2Cpy integration test: write the C-code for the "Sieve" component
4+"""
5+
6+
7+import logging; logger = logging.getLogger(__name__)
8+import pytest
9+
10+
11+from castle.writers.CC2Cpy.Protocol import *
12+from castle.writers.CC2Cpy.Event import *
13+from castle.writers.CC2Cpy.Component import *
14+
15+### protocol SimpleSieve : Protocol {
16+### kind: event;
17+### input(int:try);
18+### }
19+@pytest.fixture
20+def simpleSieve():
21+ return CC_EventProtocol("SimpleSieve", events=[
22+ CC_Event("input", typedParameters=[CC_TypedParameter(name='event', type=int)])])
23+
24+
25+### component Sieve : Component {
26+### port SimpleSieve<in>:try;
27+### port SimpleSieve<out>:coprime;
28+### }
29+@pytest.fixture
30+def sieveInterface(simpleSieve):
31+ return CC_B_ComponentInterface("Sieve", ports=[
32+ CC_Port(name='try', direction=CC_PortDirection.In, type=simpleSieve),
33+ CC_Port(name='coprime', direction=CC_PortDirection.Out, type=simpleSieve)])
34+
35+
36+### implement Sieve {
37+### int myPrime;
38+### ...
39+@pytest.fixture
40+def sieveClass(sieveInterface):
41+ return CC_B_ComponentClass(sieveInterface,
42+ # methods=
43+ )
44+
45+
46+from pathlib import Path
47+from tempfile import TemporaryDirectory
48+import os
49+import subprocess
50+
51+
52+def write_header(f):
53+ f.writelines("""/*(C) Alber Mietus, Generated code*/
54+#include <CC/buildin_types.h>
55+#include <CC/runtime.h>
56+
57+""")
58+
59+def verify_it_compiles(file, in_dir:Path):
60+ os.symlink("/Users/albert/work/CCastle2/from_CC-Castle/SRC-EXAMPLE/SIEVE/2.GCD-work/CC", in_dir/"CC")
61+ return_code = subprocess.run(["gcc", "-I", in_dir, "-c", file]).returncode
62+ assert return_code == 0
63+
64+
65+def test_0a(simpleSieve, sieveInterface, sieveClass, tmp_path):
66+ with open(tmp_path/"sieve-interface.c", 'w') as f:
67+ write_header(f)
68+ f.write(simpleSieve.render())
69+ f.write(sieveInterface.render())
70+ verify_it_compiles(f.name, tmp_path)
71+
72+@pytest.mark.skip(reason="sieveClass refer to ``cc_B_Sieve_methods`` and ``CC_C_Sieve`` which aren't renderable yet")
73+def test_0b(simpleSieve, sieveInterface, sieveClass, tmp_path):
74+ with open(tmp_path/"sieve-interface.c", 'w') as f:
75+ write_header(f)
76+ f.write(simpleSieve.render())
77+ f.write(sieveInterface.render())
78+ f.write(sieveClass.render())
79+ verify_it_compiles(f.name, tmp_path)
80+
81+
82+@pytest.mark.skip(reason="More Generate C-file(s)")
83+def test_more(): pass