

// %CopyrightBegin%
// 
// Copyright Ericsson AB 1997-2010. All Rights Reserved.
// 
// The contents of this file are subject to the Erlang Public License,
// Version 1.1, (the "License"); you may not use this file except in
// compliance with the License. You should have received a copy of the
// Erlang Public License along with this software. If not, it can be
// retrieved online at http://www.erlang.org/.
// 
// Software distributed under the License is distributed on an "AS IS"
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
// the License for the specific language governing rights and limitations
// under the License.
// 
// %CopyrightEnd%

//
// Check normal values and expressions for constants
//

// Integer types
const long		co1 = 077;
const long		ch1 = 0xf1;
const long		ch2 = 0XAB;
const long		c1 = 1;
const short		c2 = 3;
const unsigned long	c3 = 1;
const unsigned short	c4 = 3;

// Unary ops
const long		c1hb = -0x1;
const long		c1b = -1;
const short		c2b = -3;
const long		c1c = +1;
const short		c2c = +3;
// ~ not supported

// Check binary ops
const long		c1d = 9+1-3;
const long		c1hd = 9+1-0xf3;
const short		c2d = 7+3;
const short		c2e = 7*3;
const long		c1e = 1 | 7;
const long		c1f = 7 & 9;
const long		c1g = (1 | 7) & 9;
const long		c1h = 1^7;

//floats
const float		c5 = 1.9;
const double		c6 = 1.9;
const float		c5b = -1.9;
const double		c6b = -1.9;

// Check type operand casting
const float		c5c = 1/(9+2) * 2;
const double		c6c = 1.9-1;
//const double		c6d = 1; // Does not work yet

// Booleans and expressions
const boolean		c7 = TRUE;
const boolean		c7b = FALSE;
const boolean		c7c = TRUE | FALSE;
const boolean		c7d = TRUE & FALSE;
const boolean		c7e = TRUE&TRUE | FALSE&TRUE;
const boolean		c7f = TRUE&TRUE ^ FALSE&TRUE;

// Character and string
const char		c8 = 'c';
const char		c8b = '\n';
const string		c9 = "hej";
const string<9>		c9b = "hejdu";


//
// Check that value references work
//

const long		rc1 = c1g;
const long		rc1h = c1h + 9;
const short		rc2 = c2;
const unsigned long	rc3 = c3;
const unsigned short	rc4 = c4;


const float		rc5c = c5c;
const double		rc6c = c6c;
const double		rc6d = c6c+1.3;

const boolean		rc7 = c7;
const boolean		rc7c = c7c | TRUE;

const char		rc8 = c8;
const char		rc8b = c8b;
const string		rc9 = c9;
const string<9>		rc9b = c9b;




//
// Now check that all typerefs work
//

typedef long longT;
typedef short shortT;
typedef unsigned long ulongT;
typedef unsigned short ushortT;

typedef float floatT;
typedef double doubleT;

typedef char charT;
typedef string stringT;

typedef boolean booleanT;

const longT		cc1 = 1;
const shortT		cc2 = 3;
const ::longT		cc1b = -1;
const ::shortT		cc2b = -3;

const floatT		cc5 = 1.9;
const doubleT		cc6 = 1.9;
const floatT		cc5b = -1.9;
const doubleT		cc6b = -1.9;
const floatT		cc5c = 1/(9+2) * 2;
const doubleT		cc6c = 1.9-1;

const booleanT		cc7 = TRUE;
const booleanT		cc7b = TRUE;
const booleanT		cc7c = TRUE | FALSE;
const booleanT		cc7d = TRUE & FALSE;
const booleanT		cc7e = TRUE&TRUE | FALSE&TRUE;


const charT		cc8 = 'c';
const charT		cc8b = '\n';
const stringT		cc9 = "hej";
const stringT		cc9b = "hejdu";


//
// Check value casting
//
const long		longC = -9;
const short		shortC = -9;
const unsigned long	ulongC = 1;
const unsigned short	ushortC = 0;

const float		floatC = 5.1;
const double		doubleC = -2.111;

const long		c20 = shortC;
const long		c21 = ulongC;
const long		c22 = ushortC;
const short		c23 = ushortC;
const double		c34 = floatC;



