Browse Source

Bugfixes in mutator and in turmit

Turmit stack size was 0 sometimes
Mutator sometimes delete leading to empty expressions
Yann Weber 6 years ago
parent
commit
7d7754aad8
3 changed files with 13 additions and 4 deletions
  1. 2
    1
      gte/__main__.py
  2. 2
    0
      gte/mutator.py
  3. 9
    3
      gte/turmit.py

+ 2
- 1
gte/__main__.py View File

@@ -100,7 +100,8 @@ if 'pool_size' in args:
100 100
         #        for _ in range(args.pool_size)]
101 101
     else:
102 102
         prog = rpnlib.RpnExpr.from_string(args.prog)
103
-        progs = [mutate(prog, force=True) for _ in range(args.pool_size-1)]
103
+        progs = [prog]
104
+        progs += [mutate(prog, force=True) for _ in range(args.pool_size-1)]
104 105
 
105 106
     generation = 0
106 107
 

+ 2
- 0
gte/mutator.py View File

@@ -59,6 +59,8 @@ def mutadd(expr):
59 59
     return expr
60 60
 
61 61
 def mutdel(expr):
62
+    if len(expr) == 1:
63
+        return mutadd(expr)
62 64
     pos = randint(0, len(expr)-1)
63 65
     del(expr[pos])
64 66
     return expr

+ 9
- 3
gte/turmit.py View File

@@ -1,5 +1,9 @@
1
+import logging
2
+
1 3
 from .rpnlib import *
2 4
 
5
+logger = logging.getLogger()
6
+
3 7
 class Turmit(object):
4 8
     ''' @brief Represent a turmit that act given an RPN expression with an
5 9
         infinite looping stack with variable stack size.
@@ -101,7 +105,7 @@ class Turmit(object):
101 105
             @return popped value
102 106
         '''
103 107
         res = self._stack[self._cur]
104
-        if self._cur == 0:
108
+        if self._cur <= 0:
105 109
             self._cur = len(self._stack) - 1
106 110
         else:
107 111
             self._cur -= 1
@@ -137,10 +141,10 @@ class Turmit(object):
137 141
         ''' @brief Update memory stack size
138 142
         '''
139 143
 	    
140
-        if new_sz < 2:
141
-            new_sz = 2
142 144
         stksz = len(self._stack)
143 145
         new_sz %= 0xFFF
146
+        if new_sz < 2:
147
+            new_sz = 2
144 148
         if new_sz > stksz:
145 149
             self._stack += [ 0 for _ in range(new_sz - stksz) ]
146 150
         elif new_sz < stksz:
@@ -253,6 +257,7 @@ class Turmit(object):
253 257
         if a == 0:
254 258
             self.__ip += offset
255 259
 
260
+    """
256 261
     @RpnOp
257 262
     def jnz(self, a, offset):
258 263
         ''' @brief Increments IP if a != 0
@@ -261,6 +266,7 @@ class Turmit(object):
261 266
         '''
262 267
         if a != 0:
263 268
             self.__ip += offset
269
+    """
264 270
 
265 271
     @RpnOp
266 272
     def jcmp(self, a, b, cnd, offset):

Loading…
Cancel
Save