From 60aa65b6d6bd045aeb875cb69464f294cf8f0b81 Mon Sep 17 00:00:00 2001 From: Lukasz Okraszewski Date: Mon, 7 Oct 2019 21:34:55 +0100 Subject: [PATCH 1/2] Add default args to Define and make elselines optional in IfNdef/Ifdef --- cgen/__init__.py | 27 +++++++++++++++---------- test/test_cgen.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/cgen/__init__.py b/cgen/__init__.py index 9d98e57..8070e0f 100644 --- a/cgen/__init__.py +++ b/cgen/__init__.py @@ -784,7 +784,7 @@ def make_multiple_ifs(conditions_and_blocks, base=None): # {{{ simple statements class Define(Generable): - def __init__(self, symbol, value): + def __init__(self, symbol, value=""): self.symbol = symbol self.value = value @@ -1096,12 +1096,15 @@ class IfDef(Module): :param iflines: the block of code inside the if [an array of type Generable] :param elselines: the block of code inside the else [an array of type Generable] """ - def __init__(self, condition, iflines, elselines): + def __init__(self, condition, iflines, elselines=None): ifdef_line = Line('#ifdef %s' % condition) - if len(elselines): - elselines.insert(0, Line('#else')) - endif_line = Line('#endif') - lines = [ifdef_line]+iflines+elselines+[endif_line] + lines = [ifdef_line] + iflines + + if elselines: + lines += [Line('#else')] + lines += elselines + + lines += [Line('#endif')] super(IfDef, self).__init__(lines) mapper_method = "map_ifdef" @@ -1115,11 +1118,15 @@ class IfNDef(Module): [an array of type Generable] :param elselines: the block of code inside the else [an array of type Generable] """ - def __init__(self, condition, ifndeflines, elselines): + def __init__(self, condition, ifndeflines, elselines=None): ifndefdef_line = Line('#ifndef %s' % condition) - if len(elselines): - elselines.insert(0, Line('#else')) - lines = [ifndefdef_line]+ifndeflines+elselines+[Line('#endif')] + lines = [ifndefdef_line] + ifndeflines + + if elselines: + lines += [Line('#else')] + lines += elselines + + lines += [Line('#endif')] super(IfNDef, self).__init__(lines) mapper_method = "map_ifndef" diff --git a/test/test_cgen.py b/test/test_cgen.py index cbb3d9f..a4902f8 100644 --- a/test/test_cgen.py +++ b/test/test_cgen.py @@ -3,7 +3,7 @@ from cgen import ( POD, Struct, FunctionBody, FunctionDeclaration, For, If, Assign, Value, Block, ArrayOf, Comment, - Template, Pointer) + Template, Pointer, IfNDef, IfDef, Define) import numpy as np @@ -57,6 +57,55 @@ def test_ptr_to_array(): t2 = Pointer(Pointer(ArrayOf(POD(np.float32, "yyy"), 2))) assert str(t2) == "float **(yyy[2]);" +def test_ifndef_no_else(): + expected = """#ifndef SOME_DEFINE +/* TRUE */ +#endif""" + + code = IfNDef("SOME_DEFINE", [Comment("TRUE")]) + assert str(code) == expected + +def test_ifndef(): + expected = """#ifndef SOME_DEFINE +/* TRUE */ +#else +/* FALSE */ +#endif""" + + code = IfNDef("SOME_DEFINE", [Comment("TRUE")], [Comment("FALSE")]) + assert str(code) == expected + +def test_ifdef_no_else(): + expected = """#ifdef SOME_DEFINE +/* TRUE */ +#endif""" + + code = IfDef("SOME_DEFINE", [Comment("TRUE")]) + assert str(code) == expected + +def test_ifdef(): + expected = """#ifdef SOME_DEFINE +/* TRUE */ +#else +/* FALSE */ +#endif""" + + code = IfDef("SOME_DEFINE", [Comment("TRUE")], [Comment("FALSE")]) + assert str(code) == expected + + +def test_define_no_val(): + expected = "#define SOME_DEFINE" + code = Define("SOME_DEFINE") + assert str(code) == expected + + +def test_define_with_val(): + expected = "#define SOME_DEFINE 42" + code = Define("SOME_DEFINE", 42) + assert str(code) == expected + + if __name__ == "__main__": if len(sys.argv) > 1: From a1607c3ce352af2fcac951f77bc0dc8c4c6dc177 Mon Sep 17 00:00:00 2001 From: Lukasz Okraszewski Date: Mon, 7 Oct 2019 21:45:44 +0100 Subject: [PATCH 2/2] Fix flake8 warnings --- test/test_cgen.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/test_cgen.py b/test/test_cgen.py index a4902f8..217017d 100644 --- a/test/test_cgen.py +++ b/test/test_cgen.py @@ -57,6 +57,7 @@ def test_ptr_to_array(): t2 = Pointer(Pointer(ArrayOf(POD(np.float32, "yyy"), 2))) assert str(t2) == "float **(yyy[2]);" + def test_ifndef_no_else(): expected = """#ifndef SOME_DEFINE /* TRUE */ @@ -65,6 +66,7 @@ def test_ifndef_no_else(): code = IfNDef("SOME_DEFINE", [Comment("TRUE")]) assert str(code) == expected + def test_ifndef(): expected = """#ifndef SOME_DEFINE /* TRUE */ @@ -75,6 +77,7 @@ def test_ifndef(): code = IfNDef("SOME_DEFINE", [Comment("TRUE")], [Comment("FALSE")]) assert str(code) == expected + def test_ifdef_no_else(): expected = """#ifdef SOME_DEFINE /* TRUE */ @@ -83,6 +86,7 @@ def test_ifdef_no_else(): code = IfDef("SOME_DEFINE", [Comment("TRUE")]) assert str(code) == expected + def test_ifdef(): expected = """#ifdef SOME_DEFINE /* TRUE */ @@ -106,7 +110,6 @@ def test_define_with_val(): assert str(code) == expected - if __name__ == "__main__": if len(sys.argv) > 1: exec(sys.argv[1])