From 08697512e84abaa87be93fa61ac30937d24d4364 Mon Sep 17 00:00:00 2001
From: Vivien Maisonneuve <v.maisonneuve@gmail.com>
Date: Sat, 5 Jul 2014 10:45:38 +0200
Subject: [PATCH] Make Domain.sample() consistent with Domain.points()

---
 pypol/domains.py            | 15 +++++++++++----
 pypol/tests/test_domains.py |  7 +++----
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/pypol/domains.py b/pypol/domains.py
index 632335b..6088e32 100644
--- a/pypol/domains.py
+++ b/pypol/domains.py
@@ -170,10 +170,17 @@ class Domain:
     def sample(self):
         from .polyhedra import Polyhedron
         islset = self._toislset(self.polyhedra, self.symbols)
-        islbset = libisl.isl_set_sample(islset)
-        # next instruction should NOT be required
-        islbset = libisl.isl_basic_set_finalize(islbset)
-        return Polyhedron._fromislbasicset(islbset, self.symbols)
+        islpoint = libisl.isl_set_sample_point(islset)
+        point = {}
+        for index, symbol in enumerate(self.symbols):
+            coordinate = libisl.isl_point_get_coordinate_val(islpoint,
+                libisl.isl_dim_set, index)
+            coordinate = islhelper.isl_val_to_int(coordinate)
+            point[symbol] = coordinate
+        if bool(libisl.isl_point_is_void(islpoint)):
+            point = None
+        libisl.isl_point_free(islpoint)
+        return point
 
     def intersection(self, *others):
         if len(others) == 0:
diff --git a/pypol/tests/test_domains.py b/pypol/tests/test_domains.py
index 820d556..e4f996c 100644
--- a/pypol/tests/test_domains.py
+++ b/pypol/tests/test_domains.py
@@ -22,7 +22,6 @@ class TestDomain(unittest.TestCase):
         self.complement = Or(Ge(-x - 1, 0), Ge(x - 3, 0), And(Ge(x, 0), Ge(-x + 2, 0), Ge(-y - 1, 0)), And(Ge(x, 0), Ge(-x + 2, 0), Ge(y - 3, 0)))
         self.hull = And(Ge(x, 0), Ge(-x + 2, 0), Ge(y, 0), Ge(-y + 2, 0))
         self.dropped = And(Ge(y, 0), Ge(-y + 2, 0))
-        self.sample = And(Eq(y - 3, 0), Eq(x - 1, 0))
         self.intersection = And(Ge(x - 1, 0), Ge(-x + 2, 0), Ge(y - 1, 0), Ge(-y + 2, 0))
         self.union = Or(And(Ge(x, 0), Ge(-x + 2, 0), Ge(y, 0), Ge(-y + 2, 0)), And(Ge(x - 1, 0), Ge(-x + 3, 0), Ge(y - 1, 0), Ge(-y + 3, 0)))
         self.sum1 = Or(And(Ge(x, 0), Ge(-x + 2, 0), Ge(y, 0), Ge(-y + 2, 0)), And(Ge(x - 1, 0), Ge(-x + 3, 0), Ge(y - 1, 0), Ge(-y + 3, 0)))
@@ -104,9 +103,9 @@ class TestDomain(unittest.TestCase):
         self.assertEqual(self.empty.simplify(), Empty)
 
     def test_sample(self):
-        self.assertEqual(self.square6.sample(), self.sample)
-        self.assertEqual(self.empty.sample(), Empty)
-        self.assertEqual(self.universe.sample(), self.universe)
+        self.assertEqual(self.square6.sample(), {Symbol('x'): 1, Symbol('y'): 3})
+        self.assertEqual(self.empty.sample(), None)
+        self.assertEqual(self.universe.sample(), {})
 
     def test_intersection(self):
         self.assertEqual(self.square1.intersection(self.square2), self.intersection)
-- 
2.20.1