blob: 34ec4b7d5e227cd29533c378a035bbbeba204049 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Institute for Software, HSR Hochschule fuer Technik
* Rapperswil, University of applied sciences and others
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.cdt.core.parser.tests.ast2.cxx14.constexpr;
import org.eclipse.cdt.internal.core.dom.parser.IntegralValue;
import junit.framework.TestSuite;
public abstract class UserDefinedLiteralTests extends TestBase {
public static class NonIndexingTests extends UserDefinedLiteralTests {
public NonIndexingTests() {
setStrategy(new NonIndexingTestStrategy());
}
public static TestSuite suite() {
return suite(NonIndexingTests.class);
}
}
public static class SingleProjectTests extends UserDefinedLiteralTests {
public SingleProjectTests() {
setStrategy(new SinglePDOMTestStrategy(true, false));
}
public static TestSuite suite() {
return suite(SingleProjectTests.class);
}
}
// constexpr unsigned long long operator"" _min(unsigned long long minutes) {
// return minutes * 60;
// }
// constexpr auto x = 25_min;
public void testUserDefinedIntegerLiteral() throws Exception {
assertEvaluationEquals(1500);
}
// constexpr unsigned long long operator"" _capitals(const char* str, unsigned long size) {
// unsigned long long count = 0;
// for(int i = 0; i < size; ++i) {
// if(str[i] >= 'A' && str[i] <= 'Z') {
// count++;
// }
// }
// return count;
// }
// constexpr auto x = "HAllO"_capitals;
public void testUserDefinedStringLiteral() throws Exception {
assertEvaluationEquals(3);
}
// constexpr bool operator "" _v(char c) {
// switch(c) {
// case 'a':
// case 'e':
// case 'i':
// case 'o':
// case 'u':
// return true;
// default:
// return false;
// }
// }
// constexpr auto x = 'a'_v;
public void testUserDefinedCharacterLiteral() throws Exception {
assertEvaluationEquals(true);
}
// constexpr long double operator"" _deg(long double deg) {
// return deg * 3.141592 / 180;
// }
// constexpr auto x = 100.0_deg;
public void testUserDefinedFloatingPointLiteral() throws Exception {
assertEvaluationEquals(1.74533);
}
// constexpr unsigned long long operator "" _l(const char *str) {
// int l = 0;
// while(str[l] != '\0') {
// l++;
// }
// return l;
// }
// constexpr auto x = 20000_l;
public void testFallbackToRawLiteralOperator() throws Exception {
assertEvaluationEquals(5);
}
// template <char... STR>
// constexpr unsigned operator"" _l() {
// return 5;
// }
// constexpr int x = 123.20_l;
public void testRawLiteralOperatorTemplate() throws Exception {
assertEvaluationEquals(5);
}
// constexpr unsigned operator "" _l(unsigned long long x) {
// return 10;
// }
// constexpr unsigned operator "" _l(const char *str) {
// return 20;
// }
// constexpr int x = 120_l;
public void testChoosesCookedLiteralOverRawLiteralOperatorIfAvailable() throws Exception {
assertEvaluationEquals(10);
}
// constexpr unsigned operator "" _l(unsigned long long x) {
// return 10;
// }
// template <char... STR>
// constexpr unsigned operator"" _l() {
// return 20;
// }
// constexpr int x = 120_l;
public void testChoosesCookedLiteralOverRawLiteralTemplateIfAvailable() throws Exception {
assertEvaluationEquals(10);
}
// constexpr unsigned operator "" _l(long double x) {
// return 10;
// }
// constexpr unsigned operator "" _l(const char *str) {
// return 20;
// }
// constexpr int x = 120_l;
public void testFallsBackToRawLiteralOperatorIfParameterTypeDoesntMatchUnsignedLongLong() throws Exception {
assertEvaluationEquals(20);
}
// constexpr unsigned operator "" _l(long double x) {
// return 10;
// }
// template <char... STR>
// constexpr unsigned operator"" _l() {
// return 20;
// }
// constexpr int x = 120_l;
public void testFallsBackToRawLiteralOperatorTemplateIfParameterTypeDoesntMatchUnsignedLongLong() throws Exception {
assertEvaluationEquals(20);
}
// constexpr unsigned operator "" _l(unsigned long long x) {
// return 10;
// }
// constexpr unsigned operator "" _l(const char *str) {
// return 20;
// }
// constexpr int x = 120.0_l;
public void testFallsBackToRawLiteralOperatorIfParameterTypeDoesntMatchLongDouble() throws Exception {
assertEvaluationEquals(20);
}
// constexpr unsigned operator "" _l(unsigned long long x) {
// return 10;
// }
// template <char... STR>
// constexpr unsigned operator"" _l() {
// return 20;
// }
// constexpr int x = 120.0_l;
public void testFallsBackToRawLiteralOperatorTemplateIfParameterTypeDoesntMatchLongDouble() throws Exception {
assertEvaluationEquals(20);
}
// constexpr unsigned operator "" _l(const char *str) {
// return 20;
// }
// constexpr int x = "hello"_l;
public void testIgnoresRawLiteralOperatorForUserDefinedStringLiterals() throws Exception {
assertEvaluationEquals(IntegralValue.ERROR);
}
// template <char... STR>
// constexpr unsigned operator"" _l() {
// return 20;
// }
// constexpr int x = "hello"_l;
public void testIgnoresRawLiteralOperatorTemplateForUserDefinedStringLiterals() throws Exception {
assertEvaluationEquals(IntegralValue.ERROR);
}
}