mirror of
https://git.mirrors.martin98.com/https://github.com/petaflot/pygcode
synced 2025-08-12 22:58:59 +08:00
gcode and float regex improvement
This commit is contained in:
parent
dcac4fcec5
commit
da772580e0
@ -4,9 +4,11 @@ import six
|
||||
|
||||
from .exceptions import GCodeBlockFormatError
|
||||
|
||||
FLOAT_REGEX = re.compile(r'^-?\d+(\.\d+)?')
|
||||
FLOAT_REGEX = re.compile(r'^-?(\d+\.?\d*|\.\d+)') # testcase: ..tests.test_words.WordValueMatchTests.test_float
|
||||
INT_REGEX = re.compile(r'^-?\d+')
|
||||
POSITIVEINT_REGEX = re.compile(r'^\d+')
|
||||
CODE_REGEX = re.compile(r'^\d+(\.\d)?') # similar
|
||||
|
||||
|
||||
WORD_MAP = {
|
||||
# Descriptions copied from wikipedia:
|
||||
@ -47,7 +49,7 @@ WORD_MAP = {
|
||||
# G-Codes
|
||||
'G': {
|
||||
'class': float,
|
||||
'value_regex': re.compile(r'^\d+(\.\d)?'),
|
||||
'value_regex': CODE_REGEX,
|
||||
'description': "Address for preparatory commands",
|
||||
},
|
||||
# Tool Offsets
|
||||
@ -81,7 +83,7 @@ WORD_MAP = {
|
||||
# Miscellaneous Function
|
||||
'M': {
|
||||
'class': float,
|
||||
'value_regex': re.compile(r'^\d+(\.\d)?'),
|
||||
'value_regex': CODE_REGEX,
|
||||
'description': "Miscellaneous function",
|
||||
},
|
||||
# Line Number
|
||||
|
@ -40,3 +40,44 @@ class WordIterTests(unittest.TestCase):
|
||||
self.assertEqual([w[3].letter, w[3].value], ['I', -0.11])
|
||||
self.assertEqual([w[4].letter, w[4].value], ['J', -1.26])
|
||||
self.assertEqual([w[5].letter, w[5].value], ['F', 70])
|
||||
|
||||
|
||||
class WordValueMatchTests(unittest.TestCase):
|
||||
|
||||
def regex_assertions(self, regex, positive_list, negative_list):
|
||||
# Assert all elements of positive_list match regex
|
||||
for (value_str, expected_match) in positive_list:
|
||||
match = regex.search(value_str)
|
||||
self.assertIsNotNone(match, "failed to match '%s'" % value_str)
|
||||
self.assertEqual(match.group(), expected_match)
|
||||
|
||||
# Asesrt all elements of negative_list do not match regex
|
||||
for value_str in negative_list:
|
||||
match = regex.search(value_str)
|
||||
self.assertIsNone(match, "matched for '%s'" % value_str)
|
||||
|
||||
def test_float(self):
|
||||
self.regex_assertions(
|
||||
regex=words.FLOAT_REGEX,
|
||||
positive_list=[
|
||||
('1.2', '1.2'), ('1', '1'), ('200', '200'), ('0092', '0092'),
|
||||
('1.', '1.'), ('.2', '.2'), ('-1.234', '-1.234'),
|
||||
('-1.', '-1.'), ('-.289', '-.289'),
|
||||
# error cases (only detectable in gcode context)
|
||||
('1.2e3', '1.2'),
|
||||
],
|
||||
negative_list=['.', ' 1.2']
|
||||
)
|
||||
|
||||
def test_code(self):
|
||||
self.regex_assertions(
|
||||
regex=words.CODE_REGEX,
|
||||
positive_list=[
|
||||
('1.2', '1.2'), ('1', '1'), ('10', '10'),
|
||||
('02', '02'), ('02.3', '02.3'),
|
||||
('1.', '1'), ('03 ', '03'),
|
||||
# error cases (only detectable in gcode context)
|
||||
('30.12', '30.1'),
|
||||
],
|
||||
negative_list=['.2', '.', ' 2']
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user