summaryrefslogtreecommitdiff
path: root/Test/floats/float6.bpl
blob: fe0eab0e39203a09790e568aadbc1c75012b12bf (plain)
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
// RUN: %boogie -proverWarnings:1 "%s" > "%t"
// RUN: %diff "%s.expect" "%t"

function {:builtin "(_ to_fp 8 24) RNE"} TO_FLOAT824_INT(int) returns (float<8, 24>);
function {:builtin "(_ to_fp 8 24) RNE"} TO_FLOAT824_REAL(real) returns (float<8, 24>);
function {:builtin "(_ to_fp 8 24) RNE"} TO_FLOAT824_BV32(bv32) returns (float<8, 24>);
function {:builtin "(_ to_fp 11 53) RNE"} TO_FLOAT1153_BV64(bv64) returns (float<11, 53>);
function {:builtin "(_ to_fp 8 24) RNE"} TO_FLOAT824_FLOAT32(float32) returns (float<8, 24>);  //Should just be an identity function
function {:builtin "(_ to_fp 8 24) RNE"} TO_FLOAT32_FLOAT824(float<8, 24>) returns (float32); //Should just be an identity function
function {:builtin "(_ to_fp 8 24) RNE"} TO_FLOAT32_FLOAT64(float64) returns (float32);
function {:builtin "(_ to_fp 11 53) RNE"} TO_FLOAT64_FLOAT32(float32) returns (float64);

procedure main() returns () {
	var i : int;
	var r : real;
	var f824 : float<8, 24>;
	var f32 : float32;
	var f1153 : float<11, 53>;
	var f64 : float64;
	
	f824 := TO_FLOAT824_INT(5);
	f32 := TO_FLOAT824_INT(5);
	f824 := TO_FLOAT824_REAL(5.0);
	f32 := TO_FLOAT824_REAL(5.0);
	
	f824 := TO_FLOAT824_BV32(0bv32);
	f32 := TO_FLOAT824_BV32(0bv32);
	f1153 := TO_FLOAT1153_BV64(0bv64);
	f64 := TO_FLOAT1153_BV64(0bv64);
	
	f824 := TO_FLOAT824_FLOAT32(fp<8, 24>(0bv32));
	f32 := TO_FLOAT32_FLOAT824(fp<8, 24>(0bv32));
	f824 := TO_FLOAT32_FLOAT64(fp<11, 53>(0bv32));
	f32 := TO_FLOAT32_FLOAT64(fp<11, 53>(0bv32));
	f1153 := TO_FLOAT64_FLOAT32(fp<8, 24>(0bv32));
	f64 := TO_FLOAT64_FLOAT32(fp<8, 24>(0bv32));
	
	f824 := TO_FLOAT824_INT(5);
	f32 := TO_FLOAT32_FLOAT824(f824);
	assert(f32 == f824);
	
	f32 := TO_FLOAT824_INT(5);
	f824 := TO_FLOAT824_FLOAT32(f32);
	assert(f32 == f824);
	
	f32 := TO_FLOAT32_FLOAT64(f64);
	f64 := TO_FLOAT64_FLOAT32(f32);
	
	return;
}