File: test_aigvec.cpp

package info (click to toggle)
boolector 3.2.4-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 20,744 kB
  • sloc: ansic: 83,136; cpp: 18,159; sh: 3,668; python: 2,889; makefile: 210
file content (293 lines) | stat: -rw-r--r-- 9,843 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
/*  Boolector: Satisfiability Modulo Theories (SMT) solver.
 *
 *  Copyright (C) 2007-2021 by the authors listed in the AUTHORS file.
 *
 *  This file is part of Boolector.
 *  See COPYING for more information on using this software.
 */

#include "test.h"

extern "C" {
#include "btoraigvec.h"
#include "btorbv.h"
}

class TestAigvec : public TestBtor
{
};

TEST_F (TestAigvec, new_delete_aigvec_mgr)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, const)
{
  BtorBitVector *bits  = btor_bv_uint64_to_bv (d_btor->mm, 11, 4);  // "1011"
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av       = btor_aigvec_const (avmgr, bits);
  ASSERT_EQ (av->width, 4u);
  btor_aigvec_release_delete (avmgr, av);
  btor_aigvec_mgr_delete (avmgr);
  btor_bv_free (d_btor->mm, bits);
}

TEST_F (TestAigvec, zero)
{
  BtorAIGVec *av1, *av2;
  BtorBitVector *bits;
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);

  bits = btor_bv_zero (d_btor->mm, 4);
  av1  = btor_aigvec_const (avmgr, bits);
  av2  = btor_aigvec_zero (avmgr, 4);
  ASSERT_EQ (av1->width, 4u);
  ASSERT_EQ (av1->width, av2->width);
  ASSERT_EQ (memcmp (av1->aigs, av2->aigs, sizeof (BtorAIG *) * av1->width), 0);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_bv_free (d_btor->mm, bits);

  bits = btor_bv_ones (d_btor->mm, 4);
  av1  = btor_aigvec_const (avmgr, bits);
  av2  = btor_aigvec_zero (avmgr, 4);
  ASSERT_EQ (av1->width, 4u);
  ASSERT_EQ (av1->width, av2->width);
  ASSERT_GT (memcmp (av1->aigs, av2->aigs, sizeof (BtorAIG *) * av1->width), 0);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_bv_free (d_btor->mm, bits);

  bits = btor_bv_one (d_btor->mm, 4);
  av1  = btor_aigvec_const (avmgr, bits);
  av2  = btor_aigvec_zero (avmgr, 4);
  ASSERT_EQ (av1->width, 4u);
  ASSERT_EQ (av1->width, av2->width);
  ASSERT_GT (memcmp (av1->aigs, av2->aigs, sizeof (BtorAIG *) * av1->width), 0);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_bv_free (d_btor->mm, bits);

  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, var)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av       = btor_aigvec_var (avmgr, 32);
  ASSERT_TRUE (av->width == 32);
  btor_aigvec_release_delete (avmgr, av);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, invert)
{
  int32_t i            = 0;
  int32_t width        = 0;
  BtorBitVector *bits  = btor_bv_uint64_to_bv (d_btor->mm, 11, 4);  // "1011"
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_const (avmgr, bits);
  width                = av1->width;
  ASSERT_TRUE (width == 32);
  for (i = 0; i < width; i++)
  {
    ASSERT_TRUE (!BTOR_IS_INVERTED_AIG (av1->aigs[i]));
    ASSERT_TRUE (btor_aig_is_var (av1->aigs[i]));
  }
  btor_aigvec_invert (avmgr, av1);
  for (i = 0; i < width; i++) ASSERT_TRUE (BTOR_IS_INVERTED_AIG (av1->aigs[i]));
  btor_aigvec_invert (avmgr, av1);
  for (i = 0; i < width; i++)
  {
    ASSERT_TRUE (!BTOR_IS_INVERTED_AIG (av1->aigs[i]));
    ASSERT_TRUE (btor_aig_is_var (av1->aigs[i]));
  }
  ASSERT_TRUE (av2->aigs[0] == BTOR_AIG_TRUE);
  ASSERT_TRUE (av2->aigs[1] == BTOR_AIG_FALSE);
  ASSERT_TRUE (av2->aigs[2] == BTOR_AIG_TRUE);
  ASSERT_TRUE (av2->aigs[3] == BTOR_AIG_TRUE);
  btor_aigvec_invert (avmgr, av2);
  ASSERT_TRUE (av2->aigs[0] == BTOR_AIG_FALSE);
  ASSERT_TRUE (av2->aigs[1] == BTOR_AIG_TRUE);
  ASSERT_TRUE (av2->aigs[2] == BTOR_AIG_FALSE);
  ASSERT_TRUE (av2->aigs[3] == BTOR_AIG_FALSE);
  btor_aigvec_invert (avmgr, av2);
  ASSERT_TRUE (av2->aigs[0] == BTOR_AIG_TRUE);
  ASSERT_TRUE (av2->aigs[1] == BTOR_AIG_FALSE);
  ASSERT_TRUE (av2->aigs[2] == BTOR_AIG_TRUE);
  ASSERT_TRUE (av2->aigs[3] == BTOR_AIG_TRUE);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_mgr_delete (avmgr);
  btor_bv_free (d_btor->mm, bits);
}

TEST_F (TestAigvec, not)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_not (avmgr, av1);
  ASSERT_TRUE (av2->width == 32);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, slice)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_slice (avmgr, av1, 17, 2);
  ASSERT_TRUE (av2->width == 16);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, and)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_and (avmgr, av1, av2);
  ASSERT_TRUE (av3->width == 32);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, ult)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_ult (avmgr, av1, av2);
  ASSERT_TRUE (av3->width == 1);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, eq)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_eq (avmgr, av1, av2);
  ASSERT_TRUE (av3->width == 1);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, add)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_add (avmgr, av1, av2);
  ASSERT_TRUE (av3->width == 32);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, sll)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_sll (avmgr, av1, av2);
  ASSERT_TRUE (av3->width == 32);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, srl)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_srl (avmgr, av1, av2);
  ASSERT_TRUE (av3->width == 32);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, mul)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_mul (avmgr, av1, av2);
  ASSERT_TRUE (av3->width == 32);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, udiv)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_udiv (avmgr, av1, av2);
  ASSERT_TRUE (av3->width == 32);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, urem)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_urem (avmgr, av1, av2);
  ASSERT_TRUE (av3->width == 32);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, concat)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 16);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_concat (avmgr, av1, av2);
  ASSERT_TRUE (av3->width == 48);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_mgr_delete (avmgr);
}

TEST_F (TestAigvec, cond)
{
  BtorAIGVecMgr *avmgr = btor_aigvec_mgr_new (d_btor);
  BtorAIGVec *av1      = btor_aigvec_var (avmgr, 1);
  BtorAIGVec *av2      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av3      = btor_aigvec_var (avmgr, 32);
  BtorAIGVec *av4      = btor_aigvec_cond (avmgr, av1, av2, av3);
  ASSERT_TRUE (av4->width == 32);
  btor_aigvec_release_delete (avmgr, av1);
  btor_aigvec_release_delete (avmgr, av2);
  btor_aigvec_release_delete (avmgr, av3);
  btor_aigvec_release_delete (avmgr, av4);
  btor_aigvec_mgr_delete (avmgr);
}