blob: 2a23e0b60f7af6c58e2c8125a0a3f2ee90d71676 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.parser.xlc.tests;
import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement;
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement;
import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression;
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
import org.eclipse.cdt.core.dom.ast.IASTIdExpression;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
public class VectorExtensionsTest extends XlcTestBase {
public VectorExtensionsTest() {
}
public VectorExtensionsTest(String name) {
super(name);
}
public void testVector1() {
String code =
"int test() { \n" +
" vector unsigned int a = {1,2,3,4}; \n" +
" vector unsigned int b = {2,4,6,8}; \n" +
" vector unsigned int c = a + b; \n" +
" int e = b > a; \n" +
" int f = a[2]; \n" +
" vector unsigned int d = ++a; \n" +
"}\n";
parse(code, getCLanguage(), true);
parse(code, getCPPLanguage(), true);
}
public void testVectorDeclarations() {
String code =
"vector unsigned char a; \n" +
"vector signed char b; \n" +
"vector bool char c; \n" +
"vector unsigned short d; \n" +
"vector unsigned short int e; \n" +
"vector signed short f; \n" +
"vector signed short int g; \n" +
"vector bool short h; \n" +
"vector bool short int i; \n" +
"vector unsigned int j; \n" +
"vector unsigned long k; \n" +
"vector unsigned long int l; \n" +
"vector signed int m; \n" +
"vector signed long n; \n" +
"vector signed long int o; \n" +
"vector bool int p; \n" +
"vector bool long q; \n" +
"vector bool long int r; \n" +
"vector float s; \n" +
"vector pixel t; \n" +
"__vector __pixel u; \n";
parse(code, getCLanguage(), true);
parse(code, getCPPLanguage(), true);
}
// these are only treated as keywords inside a vector declaration
public void testReservedWords() {
String code =
"int pixel; " +
"int bool; ";
parse(code, getCLanguage(), true);
parse(code, getCPPLanguage(), true);
}
public void testVectorLiterals() {
String code =
"int test() {" +
" (vector unsigned int)(10); " +
" (vector unsigned int)(14, 82, 73, 700); " +
" (vector pixel)(14, 82, 73, 700); " +
" (vector bool int)(10); " +
"}";
parse(code, getCLanguage(), true);
parse(code, getCPPLanguage(), true);
}
public void testVectorInitializers() {
String code =
"int test() {" +
" vector unsigned int v3 = {1,2,3,4}; " +
"}";
parse(code, getCLanguage(), true);
parse(code, getCPPLanguage(), true);
}
public void testVectorTypedefs() {
String code =
"int test() {" +
" typedef vector pixel vint16; " +
" vint16 v1;" +
"}";
parse(code, getCLanguage(), true);
parse(code, getCPPLanguage(), true);
}
public void testVectorCompoundLiterals() {
String code =
"int test() {" +
" (vector unsigned int){10}; " +
" (vector unsigned int){14, 82, 73, 700}; " +
" (vector pixel){14, 82, 73, 700}; " +
" (vector bool int){10}; " +
"}";
parse(code, getCLanguage(), true);
parse(code, getCPPLanguage(), true);
}
public void testVectorAlignof() {
String code =
"int test() {" +
" vector unsigned int v1 = (vector unsigned int)(10); \n" +
" vector unsigned int *pv1 = &v1; \n" +
" __alignof__(v1); \n" +
" __alignof__(&v1); \n" +
" __alignof__(*pv1); \n" +
" __alignof__(pv1); \n" +
" __alignof__(vector signed char); \n" +
"}";
parse(code, getCLanguage(), true);
parse(code, getCPPLanguage(), true);
}
public void testVectorTypeof() {
String code =
"int test() {" +
" vector unsigned int v1 = (vector unsigned int)(10); \n" +
" vector unsigned int *pv1 = &v1; \n" +
" __typeof__(v1); \n" +
" __typeof__(&v1); \n" +
" __typeof__(*pv1); \n" +
" __typeof__(pv1); \n" +
" __typeof__(vector signed char); \n" +
"}";
parse(code, getCLanguage(), true);
parse(code, getCPPLanguage(), true);
}
public void _testOverloads() {
String code =
"void foo(int); \n" +
"void foo(vector unsigned int); \n" +
"void foo(vector pixel) \n" +
"int test() { \n" +
" int x; \n" +
" vector unsigned int y; \n" +
" vector pixel z; \n" +
" foo(x); \n" +
" foo(y); \n" +
" foo(z); \n" +
"} \n";
IASTTranslationUnit tu = parse(code, getCPPLanguage(), true);
IASTDeclaration[] decls = tu.getDeclarations();
IASTName foo1 = ((IASTSimpleDeclaration)decls[0]).getDeclarators()[0].getName();
IASTName foo2 = ((IASTSimpleDeclaration)decls[1]).getDeclarators()[0].getName();
IASTName foo3 = ((IASTSimpleDeclaration)decls[2]).getDeclarators()[0].getName();
IASTFunctionDefinition func = (IASTFunctionDefinition) decls[4];
IASTStatement[] stats = ((IASTCompoundStatement)func.getBody()).getStatements();
IASTName fooCall1 = ((IASTIdExpression)((IASTFunctionCallExpression)((IASTExpressionStatement)stats[3]).getExpression()).getFunctionNameExpression()).getName();
IASTName fooCall2 = ((IASTIdExpression)((IASTFunctionCallExpression)((IASTExpressionStatement)stats[4]).getExpression()).getFunctionNameExpression()).getName();
IASTName fooCall3 = ((IASTIdExpression)((IASTFunctionCallExpression)((IASTExpressionStatement)stats[5]).getExpression()).getFunctionNameExpression()).getName();
assertSame(foo1.resolveBinding(), fooCall1.resolveBinding());
assertSame(foo2.resolveBinding(), fooCall2.resolveBinding());
assertSame(foo3.resolveBinding(), fooCall3.resolveBinding());
}
}