main page
modules
namespaces
classes
files
Gecode home
Generated on Tue Jan 28 2020 00:00:00 for Gecode by
doxygen
1.8.17
test
int
unshare.cpp
Go to the documentation of this file.
1
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
/*
3
* Main authors:
4
* Christian Schulte <schulte@gecode.org>
5
*
6
* Copyright:
7
* Christian Schulte, 2008
8
*
9
* Last modified:
10
* $Date: 2015-09-11 16:29:45 +0200 (Fri, 11 Sep 2015) $ by $Author: schulte $
11
* $Revision: 14672 $
12
*
13
* This file is part of Gecode, the generic constraint
14
* development environment:
15
* http://www.gecode.org
16
*
17
* Permission is hereby granted, free of charge, to any person obtaining
18
* a copy of this software and associated documentation files (the
19
* "Software"), to deal in the Software without restriction, including
20
* without limitation the rights to use, copy, modify, merge, publish,
21
* distribute, sublicense, and/or sell copies of the Software, and to
22
* permit persons to whom the Software is furnished to do so, subject to
23
* the following conditions:
24
*
25
* The above copyright notice and this permission notice shall be
26
* included in all copies or substantial portions of the Software.
27
*
28
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
*
36
*/
37
38
#include "
test/int.hh
"
39
40
#include <
gecode/minimodel.hh
>
41
42
namespace
Test
{
namespace
Int {
43
45
namespace
Unshare {
46
52
class
Int
:
public
Test
{
54
public
:
56
Int
(
Gecode::IntPropLevel
ipl
)
57
:
Test
(
"Unshare::Int::"
+
str
(
ipl
),9,-1,1,false,
ipl
) {}
59
virtual
bool
solution
(
const
Assignment
&
x
)
const
{
60
return
((
x
[0] ==
x
[3]) &&
61
(
x
[1] ==
x
[4]) && (
x
[1] ==
x
[6]) &&
62
(
x
[2] ==
x
[5]) && (
x
[2] ==
x
[7]) && (
x
[2] ==
x
[8]));
63
}
65
virtual
void
post
(
Gecode::Space
& home,
Gecode::IntVarArray
&
x
) {
66
using namespace
Gecode
;
67
IntVarArgs
y
(6);
68
y
[0]=
x
[0];
y
[1]=
y
[3]=
x
[1];
y
[2]=
y
[4]=
y
[5]=
x
[2];
69
unshare
(home,
y
,
ipl
);
70
for
(
int
i
=0;
i
<6;
i
++)
71
rel
(home,
y
[
i
],
IRT_EQ
,
x
[3+
i
],
IPL_DOM
);
72
}
73
};
74
76
class
Bool
:
public
Test
{
77
public
:
79
Bool
(
void
)
80
:
Test
(
"Unshare::Bool"
,9,0,1,false) {}
82
virtual
bool
solution
(
const
Assignment
&
x
)
const
{
83
return
((
x
[0] ==
x
[3]) &&
84
(
x
[1] ==
x
[4]) && (
x
[1] ==
x
[6]) &&
85
(
x
[2] ==
x
[5]) && (
x
[2] ==
x
[7]) && (
x
[2] ==
x
[8]));
86
}
88
virtual
void
post
(
Gecode::Space
& home,
Gecode::IntVarArray
&
x
) {
89
using namespace
Gecode
;
90
BoolVarArgs
y
(6);
91
y
[0]=
channel
(home,
x
[0]);
92
y
[1]=
y
[3]=
channel
(home,
x
[1]);
93
y
[2]=
y
[4]=
y
[5]=
channel
(home,
x
[2]);
94
unshare
(home,
y
);
95
for
(
int
i
=0;
i
<6;
i
++)
96
rel
(home,
y
[
i
],
IRT_EQ
,
channel
(home,
x
[3+
i
]));
97
}
98
};
99
100
Int
i_bnd
(
Gecode::IPL_BND
);
101
Int
i_dom
(
Gecode::IPL_DOM
);
102
103
Bool
b
;
105
106
}
107
}}
108
109
// STATISTICS: test-int
Test::Int::Unshare::Int::solution
virtual bool solution(const Assignment &x) const
Test whether x is solution
Definition:
unshare.cpp:59
Gecode::y
Post propagator for SetVar SetOpType SetVar y
Definition:
set.hh:784
minimodel.hh
Test::Int::Test::ipl
Gecode::IntPropLevel ipl
Propagation level.
Definition:
int.hh:238
Gecode::IntVarArgs
Passing integer variables.
Definition:
int.hh:639
Test::Int::Unshare::Int
Test for unsharing integer variables
Definition:
unshare.cpp:53
Test::Int::Basic::i
Gecode::IntArgs i(4, 1, 2, 3, 4)
Test::Int::Unshare::Int::post
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
Definition:
unshare.cpp:65
Gecode::IntPropLevel
IntPropLevel
Propagation levels for integer propagators.
Definition:
int.hh:955
Gecode::Space
Computation spaces.
Definition:
core.hpp:1748
int.hh
Test::Int::Unshare::i_bnd
Int i_bnd(Gecode::IPL_BND)
Gecode::IntVarArray
Integer variable array.
Definition:
int.hh:744
Gecode
Gecode toplevel namespace
Test::Int::Unshare::b
Bool b
Definition:
unshare.cpp:103
x
Node * x
Pointer to corresponding Boolean expression node.
Definition:
bool-expr.cpp:253
Gecode::BoolVarArgs
Passing Boolean variables.
Definition:
int.hh:693
Gecode::unshare
void unshare(Home home, BoolVarArgs &x, IntPropLevel)
Replace multiple variable occurences in x by fresh variables.
Definition:
unshare.cpp:139
Gecode::IPL_DOM
@ IPL_DOM
Domain propagation Preferences: prefer speed or memory.
Definition:
int.hh:960
Test::Int::Unshare::Bool
Test for unsharing Boolean variables
Definition:
unshare.cpp:76
Gecode::IPL_BND
@ IPL_BND
Bounds propagation.
Definition:
int.hh:959
Test::Int::Assignment
Base class for assignments
Definition:
int.hh:63
Test::Int::Unshare::Bool::post
virtual void post(Gecode::Space &home, Gecode::IntVarArray &x)
Post constraint on x.
Definition:
unshare.cpp:88
Gecode::rel
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
Definition:
rel.cpp:47
Gecode::channel
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
Definition:
channel.cpp:45
Test::Int::Unshare::Int::Int
Int(Gecode::IntPropLevel ipl)
Create and register test.
Definition:
unshare.cpp:56
Test::Int::Unshare::Bool::Bool
Bool(void)
Create and register test.
Definition:
unshare.cpp:79
Test
General test support.
Definition:
afc.cpp:43
Gecode::IRT_EQ
@ IRT_EQ
Equality ( )
Definition:
int.hh:907
Test::Int::Unshare::Bool::solution
virtual bool solution(const Assignment &x) const
Test whether x is solution
Definition:
unshare.cpp:82
Test::Int::Unshare::i_dom
Int i_dom(Gecode::IPL_DOM)
Test::Int::Test::str
static std::string str(Gecode::IntPropLevel ipl)
Map integer propagation level to string.
Definition:
int.hpp:212