Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Revisión | 2e3a2844f5d3181ca304fcf7e5b5aea9cd6b5c98 (tree) |
---|---|
Tiempo | 2023-01-29 02:29:07 |
Autor | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
asis
@@ -6,13 +6,20 @@ | ||
6 | 6 | |
7 | 7 | all: current demo test mutmut pyanalyse XXX missing |
8 | 8 | |
9 | +ToCS_dir = _ToCS-reports/ | |
10 | +COVERAGE_dir = ${ToCS_dir}Coverage/ | |
11 | +MUTMUT_dir = ${ToCS_dir}MutMut/ | |
12 | + | |
9 | 13 | missing: missing_visitor missing_serialization |
10 | 14 | |
11 | 15 | PYTEST_OPTONS=-rxXsfE |
12 | 16 | pytest test coverage: |
13 | 17 | coverage run --branch -m pytest ${PYTEST_OPTONS} pytst/ |
14 | 18 | coverage report --skip-covered |
15 | - coverage html | |
19 | + coverage html --directory=${COVERAGE_dir} | |
20 | +coverage-open: coverage | |
21 | + open ${COVERAGE_dir}index.html | |
22 | + | |
16 | 23 | pytest-only: # No coverage reports |
17 | 24 | pytest ${PYTEST_OPTONS} pytst |
18 | 25 | pytest-s: # -s : No capure (so, show stdout/stderr) |
@@ -22,16 +29,16 @@ | ||
22 | 29 | |
23 | 30 | mutmut: mutmut-3.11 # Mutation testing (takes a long run) https://en.wikipedia.org/wiki/Mutation_testing |
24 | 31 | -mutmut run --tests-dir pytst --paths-to-mutate castle |
25 | - mutmut html && rm -rf mutmut-report ;mv html mutmut-report | |
32 | + mutmut html && rm ${MUTMUT_dir} ; mv html ${MUTMUT_dir} | |
26 | 33 | mutmut results |
34 | +mutmut-open: mutmut | |
35 | + open ${MUTMUT_dir}index.html | |
27 | 36 | |
28 | 37 | mutmut-3.11: |
29 | 38 | @echo Mutmut is currenly not working in python-3.11. See BUGS.rst. |
30 | 39 | @echo But it works on 3.10 -- Therefore we use the 3.10 version |
31 | 40 | python --version |
32 | 41 | |
33 | -mutmut-open: mutmut | |
34 | - open mutmut-report/index.html | |
35 | 42 | |
36 | 43 | |
37 | 44 | current: |
@@ -67,21 +74,8 @@ | ||
67 | 74 | XXX: |
68 | 75 | grep XXX `find . -type f -name \*.py` |
69 | 76 | |
70 | -clean: clean_caches | |
71 | -clean_caches: | |
72 | - find . -type d -name __pycache__ -print0 | xargs -0 rm -r | |
73 | - find . -type d -name .pytest_cache -print0 | xargs -0 rm -r | |
74 | - rm -f ./.coverage | |
75 | - rm -f ./.mutmut-cache | |
76 | 77 | |
77 | -cleaner: clean | |
78 | - rm -rf ./htmlcov/ #coverage | |
79 | - rm -rf mutmut-report/ # mutmut | |
80 | - rm -rf pyreversed/* | |
81 | - | |
82 | -cleanest veryclean: cleaner | |
83 | - | |
84 | -PYREVERSE_DIR=pyreversed | |
78 | +PYREVERSE_DIR=pyreversed/ | |
85 | 79 | PYREVERSE_FORMAT=svg |
86 | 80 | PYREVERSE_OPTIONS=-k -A -my |
87 | 81 | PYREVERSE_PRJS= castle castle.readers castle.ast castle.writers.CC2Cpy |
@@ -91,6 +85,20 @@ | ||
91 | 85 | echo "PYANALYSE::" $$P "...";\ |
92 | 86 | pyreverse -d ${PYREVERSE_DIR} -o ${PYREVERSE_FORMAT} ${PYREVERSE_OPTIONS} -p $$P --colorized --max-color-depth=42 -my $$P >>/dev/null;\ |
93 | 87 | echo ".. done. Result-files:" ;\ |
94 | - ls -l ${PYREVERSE_DIR}/*$${P}.${PYREVERSE_FORMAT} ;\ | |
88 | + ls -l ${PYREVERSE_DIR}*$${P}.${PYREVERSE_FORMAT} ;\ | |
95 | 89 | echo;\ |
96 | 90 | done |
91 | + | |
92 | +clean: clean_caches | |
93 | +clean_caches: | |
94 | + find . -type d -name __pycache__ -print0 | xargs -0 rm -r | |
95 | + find . -type d -name .pytest_cache -print0 | xargs -0 rm -r | |
96 | + rm -f ./.coverage | |
97 | + rm -f ./.mutmut-cache | |
98 | + | |
99 | +cleaner: clean | |
100 | + rm -rf ${COVERAGE_dir} | |
101 | + rm -rf ${MUTMUT_dir} | |
102 | + rm -rf {PYREVERSE_DIR}* | |
103 | + | |
104 | +cleanest veryclean: cleaner |
@@ -87,7 +87,7 @@ | ||
87 | 87 | |
88 | 88 | for n, e in enumerate(self.events, len(self.event_dict(inherired=True, mine=False))): # pragma: no mutate on event_dict parms |
89 | 89 | lineval = [] |
90 | - lineval.append(f'{prepend}{indent*2}{{') # pragma: no mutate | |
90 | + lineval.append(f'{prepend}{indent*2}{{') # XXXpragma: no mutate | |
91 | 91 | lineval.append(f' .seqNo = {n}, ') |
92 | 92 | lineval.append(f' .name = "{e.name}", ') |
93 | 93 | lineval.append(f' .part_of = &{var_name} ') |
@@ -95,24 +95,25 @@ | ||
95 | 95 | # add line to retval |
96 | 96 | retval.append("".join(lineval)) |
97 | 97 | |
98 | - retval.append(f'{prepend}{indent*2}}}') #end of events | |
99 | - retval.append(f'{prepend}}};\n') # end of struct | |
98 | + retval.append(f'{prepend}{indent*2}}}') #end of events XXX Mutant 41 | |
99 | + retval.append(f'{prepend}}};\n') #end of struct | |
100 | 100 | return '\n'.join(retval) +"\n" |
101 | 101 | |
102 | + # XXX Mutant 45,46: default values prepend/indent | |
102 | 103 | def render_indexes(self, prepend:str="", indent=" ") ->str: ## #define CC_P_<proto>_<event> index |
103 | 104 | ## For now, loop over the events here ... |
104 | 105 | retval = [] |
105 | - for n, e in enumerate(self.events, len(self.event_dict(inherired=True,mine=False))): | |
106 | + for n, e in enumerate(self.events, len(self.event_dict(inherired=True,mine=False))): # pragma: no mutate on event_dict parms | |
106 | 107 | retval.append(f'#define CC_P_{self.name}_{e.name}\t{n}\n') |
107 | 108 | return '\n'.join(retval)+"\n" |
108 | 109 | |
109 | - | |
110 | + # XXX Mutant 53/53: default values prepend/indent | |
110 | 111 | def render_FTs(self, prepend:str="", indent=" ") ->str: ##typedef void (*CC_E_{...}_FT)(CC_selfType, CC_ComponentType, {...}); |
111 | 112 | type_name = lambda ptype : ptype if isinstance(ptype, str) else ptype.__name__ |
112 | 113 | |
113 | 114 | retval = [] |
114 | 115 | for e in self.events: |
115 | - types =" , ".join(f'{type_name(parm.type)}' for parm in e.typedParameters) | |
116 | + types =" , ".join(f'{type_name(parm.type)}' for parm in e.typedParameters) # pragma: no mutate on " , " befor join() | |
116 | 117 | retval.append( f'typedef void (*CC_E_{self.name}_{e.name}_FT)(CC_selfType, CC_ComponentType, {types});') |
117 | 118 | return '\n'.join(retval)+"\n" |
118 | 119 |