Skip to content

Commit b6ced64

Browse files
committed
Added CEGIS control benchmark 4
CEGIS control benchmark 4 tests the __CPROVER_fixedbv semantics fixed in 1f1a11e.
1 parent 1f1a11e commit b6ced64

File tree

5 files changed

+628
-0
lines changed

5 files changed

+628
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#define INT_BITS 12
2+
#define FRAC_BITS 12
3+
#include "control_types.h"
4+
5+
#define NSTATES 3
6+
#define NINPUTS 1
7+
#define NOUTPUTS 1
8+
#define INPUT_LOWERBOUND (__plant_typet)-1
9+
#define INPUT_UPPERBOUND (__plant_typet)1
10+
const __plant_typet _controller_A[NSTATES][NSTATES] = { { interval(0.9905),interval(0.075687),interval(0.021033) }, { interval(0.125),interval(0),interval(0) }, { interval(0),interval(0.015625),interval(0) } };
11+
const __plant_typet _controller_B[NSTATES] = { interval(16), interval(0), interval(0) };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* control_types.h
3+
*
4+
* Created on: 18 Jan 2017
5+
* Author: elipol
6+
*/
7+
8+
#ifndef CONTROL_TYPES_H_
9+
#define CONTROL_TYPES_H_
10+
11+
#ifdef CPROVER
12+
#ifdef INTERVAL
13+
typedef __CPROVER_fixedbv[_CONTROL_FLOAT_WIDTH][_CONTORL_RADIX_WIDTH] __plant_precisiont;
14+
#include "intervals.h"
15+
typedef struct intervalt __plant_typet;
16+
typedef __CPROVER_fixedbv[_CONTROL_FLOAT_WIDTH][_CONTORL_RADIX_WIDTH] __controller_precisiont;
17+
typedef struct intervalt __controller_typet;
18+
#define interval(x) interval_cast(x);
19+
#else
20+
typedef __CPROVER_fixedbv[_CONTROL_FLOAT_WIDTH][_CONTORL_RADIX_WIDTH] __plant_precisiont;
21+
typedef __plant_precisiont __plant_typet;
22+
typedef __CPROVER_fixedbv[INT_BITS+FRAC_BITS][FRAC_BITS] __controller_precisiont;
23+
typedef __controller_precisiont __controller_typet;
24+
#define plant_cast(x) ((__plant_typet)x)
25+
#define controller_cast(x) ((__controller_typet)x)
26+
#define interval(x) x
27+
#endif
28+
#else
29+
#ifdef INTERVAL
30+
typedef double __plant_precisiont;
31+
#include "intervals.h"
32+
typedef struct intervalt __plant_typet;
33+
typedef double __controller_precisiont; //fixed point arithmetic is implemented using doubles
34+
typedef struct intervalt __controller_typet;
35+
#define interval(x) interval_cast(x)
36+
#endif
37+
#ifndef INTERVAL
38+
typedef double __plant_precisiont;
39+
typedef __plant_precisiont __plant_typet;
40+
typedef double __controller_precisiont; //fixed point arithmetic is implemented using doubles
41+
typedef __controller_precisiont __controller_typet;
42+
#define interval(x) (x)
43+
#define plant_cast(x) x
44+
#define controller_cast(x) x
45+
#endif
46+
#endif
47+
48+
#endif /* CONTROL_TYPES_H_ */
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* operators.h
3+
*
4+
* Created on: 18 Jan 2017
5+
* Author: elipol
6+
*/
7+
8+
#ifndef OPERATORS_H_
9+
#define OPERATORS_H_
10+
11+
#ifndef INTERVAL
12+
#define controller_mult(x,y) ((x) *(y))
13+
#define mult(x,y) ( (x) * (y))
14+
15+
#define _abs(a) ( (a) < 0 ? -(a) : (a))
16+
#define add(x,y) ( (x) + (y))
17+
18+
#define lessthan(x,y) ((x)<(y))
19+
#define greaterthan(x,y) ((x)>(y))
20+
#define lessthanzero(x) ((x) < 0)
21+
#define lessthan_equaltozero(x) ((x) <= 0)
22+
#define zero_type 0
23+
#define one_type (__plant_precisiont)1.0
24+
#define minusone (__plant_precisiont)-1
25+
#define div(x,y) ( (x) / (y))
26+
#define sub(x,y) ( (x) - (y))
27+
#define set(x,y) (x)=(y)
28+
29+
30+
#endif
31+
#ifdef INTERVAL
32+
33+
#define controller_mult(x,y) (interval_fxp_mult((x),(y)))
34+
#define mult(x,y) ( interval_mult((x),(y)))
35+
36+
#define _abs(a) ( abs_interval(a))
37+
38+
#define lessthan(x,y) (interval_lessthan(x,y))
39+
#define greaterthan(x,y) (interval_greaterthan((x),(y)))
40+
#define add(x,y) (interval_add((x),(y)))
41+
#define lessthanzero(x) (interval_lessthanzero(x))
42+
#define lessthan_equaltozero(x) (interval_lessthan_equal_to_zero(x))
43+
44+
#define zero_type (zero_interval)
45+
#define minusone (minusone_interval)
46+
#define one_type one_interval
47+
#define div(x,y) (interval_posDiv((x),(y)))
48+
#define sub(x,y) (interval_sub((x),(y)))
49+
50+
#define controller_cast(x) (fxp_interval_check(x))
51+
#define plant_cast(x) x
52+
#define set(x,y) (x.low=y, x.high=y)
53+
54+
55+
#endif
56+
57+
#endif /* OPERATORS_H_ */

0 commit comments

Comments
 (0)