py/compile: Fix edge case when constant-folding negation of integer.

Also adds tests specifically for testing constant folding.
diff --git a/py/compile.c b/py/compile.c
index f9d53bc..9d2a6f2 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -315,7 +315,10 @@
                         pn = mp_parse_node_new_leaf(MP_PARSE_NODE_SMALL_INT, arg);
                     } else if (MP_PARSE_NODE_IS_TOKEN_KIND(pns->nodes[0], MP_TOKEN_OP_MINUS)) {
                         // -int
-                        pn = mp_parse_node_new_leaf(MP_PARSE_NODE_SMALL_INT, -arg);
+                        arg = -arg;
+                        if (MP_SMALL_INT_FITS(arg)) {
+                            pn = mp_parse_node_new_leaf(MP_PARSE_NODE_SMALL_INT, arg);
+                        }
                     } else {
                         assert(MP_PARSE_NODE_IS_TOKEN_KIND(pns->nodes[0], MP_TOKEN_OP_TILDE)); // should be
                         // ~int