1414
1515syntax = {
1616 "+1" : FunctionType (INT , INT ),
17+ "0" : INT ,
1718 "head" : FunctionType (List (PolymorphicType ("a" )), PolymorphicType ("a" )),
1819 "non_reachable" : PrimitiveType ("non_reachable" ),
1920 "non_productive" : FunctionType (INT , STRING ),
2021}
2122
2223semantics = {
2324 "+1" : lambda x : x + 1 ,
25+ "0" : 0 ,
2426}
2527max_depth = 4
2628dsl = DSL (syntax )
@@ -35,7 +37,10 @@ def test_eval() -> None:
3537 program = pcfg .sample_program ()
3638 try :
3739 for i in range (- 25 , 25 ):
38- assert eval .eval (program , [i ]) == program .size () + i - 1
40+ if len (program .used_variables ()) == 0 :
41+ assert eval .eval (program , [i ]) == program .size () - 1
42+ else :
43+ assert eval .eval (program , [i ]) == program .size () + i - 1
3944 except Exception as e :
4045 assert False , e
4146
@@ -48,7 +53,10 @@ def test_supports_list() -> None:
4853 program = pcfg .sample_program ()
4954 try :
5055 for i in range (- 25 , 25 ):
51- assert eval .eval (program , [i , [i ]]) == program .size () + i - 1
56+ if len (program .used_variables ()) == 0 :
57+ assert eval .eval (program , [i ]) == program .size () - 1
58+ else :
59+ assert eval .eval (program , [i ]) == program .size () + i - 1
5260 except Exception as e :
5361 assert False , e
5462
@@ -61,7 +69,22 @@ def test_use_cache() -> None:
6169 program = pcfg .sample_program ()
6270 try :
6371 for i in range (- 25 , 25 ):
64- assert eval .eval (program , [i ]) == program .size () + i - 1
65- assert eval ._cache [__tuplify__ ([i ])][program ] == program .size () + i - 1
72+ if len (program .used_variables ()) == 0 :
73+ assert eval .eval (program , [i ]) == program .size () - 1
74+ assert eval ._cache [__tuplify__ ([i ])][program ] == program .size () - 1
75+ else :
76+ assert eval .eval (program , [i ]) == program .size () + i - 1
77+ assert (
78+ eval ._cache [__tuplify__ ([i ])][program ] == program .size () + i - 1
79+ )
6680 except Exception as e :
6781 assert False , e
82+
83+
84+ def test_compress () -> None :
85+ eval = DSLEvaluator (dsl .instantiate_semantics (semantics ))
86+ p = dsl .auto_parse_program ("(+1 0)" )
87+ pp = dsl .auto_parse_program ("1" , constants = {"1" : (INT , 1 )})
88+ c = eval .compress (p )
89+ assert c != p
90+ assert c == pp
0 commit comments