CORD-1392: Autogenerate security policies

Change-Id: Ia183f2a84b27923802e62435c82b20b50fb3fcee
diff --git a/lib/xos-genx/tests/optimize_test.py b/lib/xos-genx/tests/optimize_test.py
new file mode 100644
index 0000000..ce15bf4
--- /dev/null
+++ b/lib/xos-genx/tests/optimize_test.py
@@ -0,0 +1,74 @@
+import unittest
+from xosgenx.jinja2_extensions.fol2 import FOL2Python
+import pdb
+
+class XProtoOptimizeTest(unittest.TestCase):
+    def setUp(self):
+        self.f2p = FOL2Python()
+
+    def test_constant(self):
+        input = 'True'
+        output = self.f2p.hoist_constants(input)
+        self.assertEqual(output, input)
+
+    def test_exists(self):
+        input = {'exists': ['x',{'|':['x','y']}]}
+
+        output = self.f2p.hoist_constants(input)
+        expected = {'|': ['y', {'exists': ['x', 'x']}]}
+        self.assertEqual(output, expected)
+        
+    def test_forall(self):
+        input = {'forall': ['x',{'|':['x','y']}]}
+
+        output = self.f2p.hoist_constants(input)
+        expected = {'|': ['y', {'forall': ['x', 'x']}]}
+        self.assertEqual(output, expected)
+
+    def test_exists_embedded(self):
+        input = {'|':['True',{'exists': ['x',{'|':['x','y']}]}]}
+
+        output = self.f2p.hoist_constants(input)
+        expected = {'|': ['True', {'|': ['y', {'exists': ['x', 'x']}]}]}
+        self.assertEqual(output, expected)
+    
+    def test_exists_equals(self):
+        input = {'|':['True',{'exists': ['x',{'|':['x',{'=':['y','z']}]}]}]}
+
+        output = self.f2p.hoist_constants(input)
+        expected = {'|': ['True', {'|': [{'=': ['y', 'z']}, {'exists': ['x', 'x']}]}]}
+        self.assertEqual(output, expected)
+
+    def test_exists_nested_constant(self):
+        input = {'|':['True',{'exists': ['x',{'|':['y',{'=':['y','x']}]}]}]}
+
+        output = self.f2p.hoist_constants(input)
+        expected = {'|': ['True', {'|': ['y', {'exists': ['x', {'=': ['y', 'x']}]}]}]}
+        self.assertEqual(output, expected)
+
+    def test_exists_nested(self):
+        input = {'exists': ['x',{'exists':['y',{'=':['y','x']}]}]}
+
+        output = self.f2p.hoist_constants(input)
+        expected = {'exists': ['x', {'exists': ['y', {'=': ['y', 'x']}]}]}
+        self.assertEqual(output, expected)
+
+    def test_exists_nested2(self):
+        input = {'exists': ['x',{'exists':['y',{'=':['z','y']}]}]}
+
+        output = self.f2p.hoist_constants(input)
+        expected = {'exists': ['y', {'=': ['z', 'y']}]}
+        self.assertEqual(output, expected)
+
+    def test_exists_nested3(self):
+        input = {'exists': ['x',{'exists':['y',{'=':['z','x']}]}]}
+
+        output = self.f2p.hoist_constants(input)
+        expected = {'exists': ['x', {'=': ['z', 'x']}]}
+        self.assertEqual(output, expected)
+
+
+if __name__ == '__main__':
+    unittest.main()
+
+