Generated on Thu Jan 16 2025 00:00:00 for Gecode by doxygen 1.14.0
sequence.cpp
Go to the documentation of this file.
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2/*
3 * Main authors:
4 * Guido Tack <tack@gecode.org>
5 *
6 * Copyright:
7 * Guido Tack, 2005
8 *
9 * This file is part of Gecode, the generic constraint
10 * development environment:
11 * http://www.gecode.org
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining
14 * a copy of this software and associated documentation files (the
15 * "Software"), to deal in the Software without restriction, including
16 * without limitation the rights to use, copy, modify, merge, publish,
17 * distribute, sublicense, and/or sell copies of the Software, and to
18 * permit persons to whom the Software is furnished to do so, subject to
19 * the following conditions:
20 *
21 * The above copyright notice and this permission notice shall be
22 * included in all copies or substantial portions of the Software.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 *
32 */
33
34#include "test/set.hh"
35
36using namespace Gecode;
37
38namespace Test { namespace Set {
39
41 namespace Sequence {
42
48
49 static IntSet ds_33(-1,2);
50
52 class Sequence : public SetTest {
53 public:
55 Sequence(const char* t)
56 : SetTest(t,4,ds_33,false) {}
57
58 virtual bool solution(const SetAssignment& x) const {
60 for (int i=0; i<4; i++) {
61 CountableSetRanges xir(x.lub, x[i]);
62 IntSet xi(xir);
63 if (xi.ranges() > 0) {
64 int oldMax = max;
65 max = xi.max();
66 if (xi.min() <= oldMax)
67 return false;
68 }
69 }
70 return true;
71 }
72
73 virtual void post(Space& home, SetVarArray& x, IntVarArray&) {
74 Gecode::sequence(home, x);
75 }
76 };
77 Sequence _sequence("Sequence::Sequence");
78
80 class SeqU : public SetTest {
81 private:
82 int n;
83 public:
85 SeqU(int n0)
86 : SetTest("Sequence::SeqU"+str(n0),n0+1,ds_33,false), n(n0) {}
87
88 virtual bool solution(const SetAssignment& x) const {
90 for (int i=0; i<n; i++) {
91 CountableSetRanges xir(x.lub, x[i]);
92 IntSet xi(xir);
93 if (xi.ranges() > 0) {
94 int oldMax = max;
95 max = xi.max();
96 if (xi.min() <= oldMax)
97 return false;
98 }
99 }
101 for (int i=n; i--; )
102 isrs[i].init(x.lub, x[i]);
103 bool ret;
104 {
105 Region r;
106 Iter::Ranges::NaryUnion u(r, isrs, n);
107 CountableSetRanges xnr(x.lub, x[n]);
108 ret = Iter::Ranges::equal(u, xnr);
109 }
110 delete[] isrs;
111 return ret;
112 }
113
114 virtual void post(Space& home, SetVarArray& x, IntVarArray&) {
115 SetVarArgs xs(x.size()-1);
116 for (int i=x.size()-1; i--;)
117 xs[i]=x[i];
118 Gecode::sequence(home, xs, x[x.size()-1]);
119 }
120 };
124
125}}}
126
127// STATISTICS: test-set
Integer sets.
Definition int.hh:174
int min(int i) const
Return minimum of range at position i.
int max(int i) const
Return maximum of range at position i.
int ranges(void) const
Return number of ranges of the specification.
Integer variable array.
Definition int.hh:772
Range iterator for union of iterators.
Passing set variables.
Definition set.hh:491
Set variable array
Definition set.hh:573
Computation spaces.
Definition core.hpp:1744
Test for Region memory area
Definition region.cpp:42
Range iterator producing subsets of an IntSet.
Definition set.hh:99
Test for sequential-union constraint
Definition sequence.cpp:80
virtual bool solution(const SetAssignment &x) const
Test whether x is solution
Definition sequence.cpp:88
SeqU(int n0)
Create and register test.
Definition sequence.cpp:85
virtual void post(Space &home, SetVarArray &x, IntVarArray &)
Post constraint on x.
Definition sequence.cpp:114
Test for sequence constraint
Definition sequence.cpp:52
virtual bool solution(const SetAssignment &x) const
Test whether x is solution
Definition sequence.cpp:58
Sequence(const char *t)
Create and register test.
Definition sequence.cpp:55
virtual void post(Space &home, SetVarArray &x, IntVarArray &)
Post constraint on x.
Definition sequence.cpp:73
Generate all set assignments.
Definition set.hh:142
static std::string str(Gecode::SetRelType srt)
Map set relation to string.
Definition set.hpp:46
SetTest(const std::string &s, int a, const Gecode::IntSet &d, bool r=false, int w=0)
Constructor.
Definition set.hh:304
bool equal(I &i, J &j)
Check whether range iterators i and j are equal.
const int min
Smallest allowed integer in integer set.
Definition set.hh:99
Gecode toplevel namespace
void sequence(Home home, const IntVarArgs &x, const IntSet &s, int q, int l, int u, IntPropLevel ipl=IPL_DEF)
Post propagator for .
Definition sequence.cpp:47
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Post propagator for SetVar x
Definition set.hh:773
Sequence _sequence("Sequence::Sequence")
Testing finite sets.
Definition set.cpp:42
General test support.
Definition afc.cpp:39
Region r
Definition region.cpp:65