⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testsuite.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 2 页
字号:
	TEST_STRTOLL("  0x15",	0,	21LL,	6, 0);	TEST_STRTOLL("10",	16,	16LL,	2, 0);	TEST_STRTOLL("  10 ",	16,	16LL,	4, 0);	TEST_STRTOLL("0x10",	16,	16LL,	4, 0);	TEST_STRTOLL("0x10",	0,	16LL,	4, 0);	TEST_STRTOLL(" 0x10 ",	0,	16LL,	5, 0);	TEST_STRTOLL("+10",	16,	16LL,	3, 0);	TEST_STRTOLL("  +10 ",	16,	16LL,	5, 0);	TEST_STRTOLL("+0x10",	16,	16LL,	5, 0);	TEST_STRTOLL("+0x10",	0,	16LL,	5, 0);	TEST_STRTOLL(" +0x10 ",	0,	16LL,	6, 0);	TEST_STRTOLL("-10",	16,	-16LL,	3, 0);	TEST_STRTOLL("  -10 ",	16,	-16LL,	5, 0);	TEST_STRTOLL("-0x10",	16,	-16LL,	5, 0);	TEST_STRTOLL("-0x10",	0,	-16LL,	5, 0);	TEST_STRTOLL(" -0x10 ",	0,	-16LL,	6, 0);	TEST_STRTOLL("010",	16,	16LL,	3, 0);	TEST_STRTOLL("  010 ",	16,	16LL,	5, 0);	TEST_STRTOLL("-010",	16,	-16LL,	4, 0);	TEST_STRTOLL("11",	8,	9LL,	2, 0);	TEST_STRTOLL("011",	8,	9LL,	3, 0);	TEST_STRTOLL("011",	0,	9LL,	3, 0);	TEST_STRTOLL("-11",	8,	-9LL,	3, 0);	TEST_STRTOLL("-011",	8,	-9LL,	4, 0);	TEST_STRTOLL("-011",	0,	-9LL,	4, 0);	TEST_STRTOLL("011",	8,	9LL,	3, 0);	TEST_STRTOLL("011",	0,	9LL,	3, 0);	TEST_STRTOLL("-11",	8,	-9LL,	3, 0);	TEST_STRTOLL("-011",	8,	-9LL,	4, 0);	TEST_STRTOLL("-011",	0,	-9LL,	4, 0);	TEST_STRTOLL("Text",	0,	0LL,	0, 0);	TEST_STRTOLL("9223372036854775807",	10,	9223372036854775807LL,	19, 0);	TEST_STRTOLL("9223372036854775807",	0,	9223372036854775807LL,	19, 0);	TEST_STRTOLL("9223372036854775808",	0,	9223372036854775807LL,	19, ERANGE);	TEST_STRTOLL("9223372036854775808",	10,	9223372036854775807LL,	19, ERANGE);	TEST_STRTOLL("0x7FFFFFFFFFFFFFFF",	0,	9223372036854775807LL,	18, 0);	TEST_STRTOLL("0x7FFFFFFFFFFFFFFF",	16,	9223372036854775807LL,	18, 0);	TEST_STRTOLL("7FFFFFFFFFFFFFFF",	16,	9223372036854775807LL,	16, 0);	TEST_STRTOLL("0x8000000000000000",	0,	9223372036854775807LL,	18, ERANGE);	TEST_STRTOLL("0x8000000000000000",	16,	9223372036854775807LL,	18, ERANGE);	TEST_STRTOLL("80000000000000000",	16,	9223372036854775807LL,	17, ERANGE);	TEST_STRTOLL("0777777777777777777777",	0,	9223372036854775807LL,	22, 0);	TEST_STRTOLL("0777777777777777777777",	8,	9223372036854775807LL,	22, 0);	TEST_STRTOLL("777777777777777777777",	8,	9223372036854775807LL,	21, 0);	TEST_STRTOLL("01000000000000000000000",	0,	9223372036854775807LL,	23, ERANGE);	TEST_STRTOLL("01000000000000000000000",	8,	9223372036854775807LL,	23, ERANGE);	TEST_STRTOLL("1000000000000000000000",	8,	9223372036854775807LL,	22, ERANGE);	TEST_STRTOLL("-9223372036854775808",	10,	-9223372036854775807LL -1,	20, 0);	TEST_STRTOLL("-9223372036854775808",	0,	-9223372036854775807LL -1,	20, 0);	TEST_STRTOLL("-9223372036854775809",	0,	-9223372036854775807LL -1,	20, ERANGE);	TEST_STRTOLL("-9223372036854775809",	10,	-9223372036854775807LL -1,	20, ERANGE);	TEST_STRTOLL("-0x8000000000000000",	0,	-9223372036854775807LL -1,	19, 0);	TEST_STRTOLL("-0x8000000000000000",	16,	-9223372036854775807LL -1,	19, 0);	TEST_STRTOLL("-8000000000000000",	16,	-9223372036854775807LL -1,	17, 0);	TEST_STRTOLL("-0x8000000000000001",	0,	-9223372036854775807LL -1,	19, ERANGE);	TEST_STRTOLL("-0x8000000000000001",	16,	-9223372036854775807LL -1,	19, ERANGE);	TEST_STRTOLL("-80000000000000001",	16,	-9223372036854775807LL -1,	18, ERANGE);	TEST_STRTOLL("-01000000000000000000000",0,	-9223372036854775807LL -1,	24, 0);	TEST_STRTOLL("-01000000000000000000000",8,	-9223372036854775807LL -1,	24, 0);	TEST_STRTOLL("-1000000000000000000000",	8,	-9223372036854775807LL -1,	23, 0);	TEST_STRTOLL("-01000000000000000000001",0,	-9223372036854775807LL -1,	24, ERANGE);	TEST_STRTOLL("-01000000000000000000001",8,	-9223372036854775807LL -1,	24, ERANGE);	TEST_STRTOLL("-1000000000000000000001",	8,	-9223372036854775807LL -1,	23, ERANGE);	printf("success: strtoll\n");	return true;}static int test_strtoull(void){	printf("test: strtoull\n");#define TEST_STRTOULL(str,base,res,diff,errnoo) TEST_STRTO_X(long long unsigned int,"%llu",strtoull,str,base,res,diff,errnoo)	TEST_STRTOULL("15",	10,	15LLU,	2, 0);	TEST_STRTOULL("  15",	10,	15LLU,	4, 0);	TEST_STRTOULL("15",	0,	15LLU,	2, 0);	TEST_STRTOULL(" 15 ",	0,	15LLU,	3, 0);	TEST_STRTOULL("+15",	10,	15LLU,	3, 0);	TEST_STRTOULL("  +15",	10,	15LLU,	5, 0);	TEST_STRTOULL("+15",	0,	15LLU,	3, 0);	TEST_STRTOULL(" +15 ",	0,	15LLU,	4, 0);	TEST_STRTOULL("-15",	10,	18446744073709551601LLU,	3, 0);	TEST_STRTOULL("  -15",	10,	18446744073709551601LLU,	5, 0);	TEST_STRTOULL("-15",	0,	18446744073709551601LLU,	3, 0);	TEST_STRTOULL(" -15 ",	0,	18446744073709551601LLU,	4, 0);	TEST_STRTOULL("015",	10,	15LLU,	3, 0);	TEST_STRTOULL("  015",	10,	15LLU,	5, 0);	TEST_STRTOULL("015",	0,	13LLU,	3, 0);	TEST_STRTOULL("  015",	0,	13LLU,	5, 0);	TEST_STRTOULL("0x15",	10,	0LLU,	1, 0);	TEST_STRTOULL("  0x15",	10,	0LLU,	3, 0);	TEST_STRTOULL("0x15",	0,	21LLU,	4, 0);	TEST_STRTOULL("  0x15",	0,	21LLU,	6, 0);	TEST_STRTOULL("10",	16,	16LLU,	2, 0);	TEST_STRTOULL("  10 ",	16,	16LLU,	4, 0);	TEST_STRTOULL("0x10",	16,	16LLU,	4, 0);	TEST_STRTOULL("0x10",	0,	16LLU,	4, 0);	TEST_STRTOULL(" 0x10 ",	0,	16LLU,	5, 0);	TEST_STRTOULL("+10",	16,	16LLU,	3, 0);	TEST_STRTOULL("  +10 ",	16,	16LLU,	5, 0);	TEST_STRTOULL("+0x10",	16,	16LLU,	5, 0);	TEST_STRTOULL("+0x10",	0,	16LLU,	5, 0);	TEST_STRTOULL(" +0x10 ",	0,	16LLU,	6, 0);	TEST_STRTOULL("-10",	16,	-16LLU,	3, 0);	TEST_STRTOULL("  -10 ",	16,	-16LLU,	5, 0);	TEST_STRTOULL("-0x10",	16,	-16LLU,	5, 0);	TEST_STRTOULL("-0x10",	0,	-16LLU,	5, 0);	TEST_STRTOULL(" -0x10 ",	0,	-16LLU,	6, 0);	TEST_STRTOULL("010",	16,	16LLU,	3, 0);	TEST_STRTOULL("  010 ",	16,	16LLU,	5, 0);	TEST_STRTOULL("-010",	16,	-16LLU,	4, 0);	TEST_STRTOULL("11",	8,	9LLU,	2, 0);	TEST_STRTOULL("011",	8,	9LLU,	3, 0);	TEST_STRTOULL("011",	0,	9LLU,	3, 0);	TEST_STRTOULL("-11",	8,	-9LLU,	3, 0);	TEST_STRTOULL("-011",	8,	-9LLU,	4, 0);	TEST_STRTOULL("-011",	0,	-9LLU,	4, 0);	TEST_STRTOULL("011",	8,	9LLU,	3, 0);	TEST_STRTOULL("011",	0,	9LLU,	3, 0);	TEST_STRTOULL("-11",	8,	-9LLU,	3, 0);	TEST_STRTOULL("-011",	8,	-9LLU,	4, 0);	TEST_STRTOULL("-011",	0,	-9LLU,	4, 0);	TEST_STRTOULL("Text",	0,	0LLU,	0, 0);	TEST_STRTOULL("9223372036854775807",	10,	9223372036854775807LLU,	19, 0);	TEST_STRTOULL("9223372036854775807",	0,	9223372036854775807LLU,	19, 0);	TEST_STRTOULL("9223372036854775808",	0,	9223372036854775808LLU,	19, 0);	TEST_STRTOULL("9223372036854775808",	10,	9223372036854775808LLU,	19, 0);	TEST_STRTOULL("0x7FFFFFFFFFFFFFFF",	0,	9223372036854775807LLU,	18, 0);	TEST_STRTOULL("0x7FFFFFFFFFFFFFFF",	16,	9223372036854775807LLU,	18, 0);	TEST_STRTOULL("7FFFFFFFFFFFFFFF",	16,	9223372036854775807LLU,	16, 0);	TEST_STRTOULL("0x8000000000000000",	0,	9223372036854775808LLU,	18, 0);	TEST_STRTOULL("0x8000000000000000",	16,	9223372036854775808LLU,	18, 0);	TEST_STRTOULL("8000000000000000",	16,	9223372036854775808LLU,	16, 0);	TEST_STRTOULL("0777777777777777777777",	0,	9223372036854775807LLU,	22, 0);	TEST_STRTOULL("0777777777777777777777",	8,	9223372036854775807LLU,	22, 0);	TEST_STRTOULL("777777777777777777777",	8,	9223372036854775807LLU,	21, 0);	TEST_STRTOULL("01000000000000000000000",0,	9223372036854775808LLU,	23, 0);	TEST_STRTOULL("01000000000000000000000",8,	9223372036854775808LLU,	23, 0);	TEST_STRTOULL("1000000000000000000000",	8,	9223372036854775808LLU,	22, 0);	TEST_STRTOULL("-9223372036854775808",	10,	9223372036854775808LLU,	20, 0);	TEST_STRTOULL("-9223372036854775808",	0,	9223372036854775808LLU,	20, 0);	TEST_STRTOULL("-9223372036854775809",	0,	9223372036854775807LLU,	20, 0);	TEST_STRTOULL("-9223372036854775809",	10,	9223372036854775807LLU,	20, 0);	TEST_STRTOULL("-0x8000000000000000",	0,	9223372036854775808LLU,	19, 0);	TEST_STRTOULL("-0x8000000000000000",	16,	9223372036854775808LLU,	19, 0);	TEST_STRTOULL("-8000000000000000",	16,	9223372036854775808LLU,	17, 0);	TEST_STRTOULL("-0x8000000000000001",	0,	9223372036854775807LLU,	19, 0);	TEST_STRTOULL("-0x8000000000000001",	16,	9223372036854775807LLU,	19, 0);	TEST_STRTOULL("-8000000000000001",	16,	9223372036854775807LLU,	17, 0);	TEST_STRTOULL("-01000000000000000000000",0,	9223372036854775808LLU,	24, 0);	TEST_STRTOULL("-01000000000000000000000",8,	9223372036854775808LLU,	24, 0);	TEST_STRTOULL("-1000000000000000000000",8,	9223372036854775808LLU,	23, 0);	TEST_STRTOULL("-01000000000000000000001",0,	9223372036854775807LLU,	24, 0);	TEST_STRTOULL("-01000000000000000000001",8,	9223372036854775807LLU,	24, 0);	TEST_STRTOULL("-1000000000000000000001",8,	9223372036854775807LLU,	23, 0);	TEST_STRTOULL("18446744073709551615",	0,	18446744073709551615LLU,	20, 0);	TEST_STRTOULL("18446744073709551615",	10,	18446744073709551615LLU,	20, 0);	TEST_STRTOULL("18446744073709551616",	0,	18446744073709551615LLU,	20, ERANGE);	TEST_STRTOULL("18446744073709551616",	10,	18446744073709551615LLU,	20, ERANGE);	TEST_STRTOULL("0xFFFFFFFFFFFFFFFF",	0,	18446744073709551615LLU,	18, 0);	TEST_STRTOULL("0xFFFFFFFFFFFFFFFF",	16,	18446744073709551615LLU,	18, 0);	TEST_STRTOULL("FFFFFFFFFFFFFFFF",	16,	18446744073709551615LLU,	16, 0);	TEST_STRTOULL("0x10000000000000000",	0,	18446744073709551615LLU,	19, ERANGE);	TEST_STRTOULL("0x10000000000000000",	16,	18446744073709551615LLU,	19, ERANGE);	TEST_STRTOULL("10000000000000000",	16,	18446744073709551615LLU,	17, ERANGE);	TEST_STRTOULL("01777777777777777777777",0,	18446744073709551615LLU,	23, 0);	TEST_STRTOULL("01777777777777777777777",8,	18446744073709551615LLU,	23, 0);	TEST_STRTOULL("1777777777777777777777",	8,	18446744073709551615LLU,	22, 0);	TEST_STRTOULL("02000000000000000000000",0,	18446744073709551615LLU,	23, ERANGE);	TEST_STRTOULL("02000000000000000000000",8,	18446744073709551615LLU,	23, ERANGE);	TEST_STRTOULL("2000000000000000000000",	8,	18446744073709551615LLU,	22, ERANGE);	TEST_STRTOULL("-18446744073709551615",	0,	1LLU,				21, 0);	TEST_STRTOULL("-18446744073709551615",	10,	1LLU,				21, 0);	TEST_STRTOULL("-18446744073709551616",	0,	18446744073709551615LLU,	21, ERANGE);	TEST_STRTOULL("-18446744073709551616",	10,	18446744073709551615LLU,	21, ERANGE);	TEST_STRTOULL("-0xFFFFFFFFFFFFFFFF",	0,	1LLU,				19, 0);	TEST_STRTOULL("-0xFFFFFFFFFFFFFFFF",	16,	1LLU,				19, 0);	TEST_STRTOULL("-FFFFFFFFFFFFFFFF",	16,	1LLU,				17, 0);	TEST_STRTOULL("-0x10000000000000000",	0,	18446744073709551615LLU,	20, ERANGE);	TEST_STRTOULL("-0x10000000000000000",	16,	18446744073709551615LLU,	20, ERANGE);	TEST_STRTOULL("-10000000000000000",	16,	18446744073709551615LLU,	18, ERANGE);	TEST_STRTOULL("-01777777777777777777777",0,	1LLU,				24, 0);	TEST_STRTOULL("-01777777777777777777777",8,	1LLU,				24, 0);	TEST_STRTOULL("-1777777777777777777777",8,	1LLU,				23, 0);	TEST_STRTOULL("-02000000000000000000000",0,	18446744073709551615LLU,	24, ERANGE);	TEST_STRTOULL("-02000000000000000000000",8,	18446744073709551615LLU,	24, ERANGE);	TEST_STRTOULL("-2000000000000000000000",8,	18446744073709551615LLU,	23, ERANGE);	printf("success: strtoull\n");	return true;}/* FIXME:Types:boolsocklen_tuint_tuint{8,16,32,64}_tint{8,16,32,64}_tintptr_tConstants:PATH_NAME_MAXUINT{16,32,64}_MAXINT32_MAX*/static int test_va_copy(void){	/* FIXME */	return true;}static int test_FUNCTION(void){	printf("test: FUNCTION\n");	if (strcmp(__FUNCTION__, "test_FUNCTION") != 0) {		printf("failure: FAILURE [\nFAILURE invalid\n]\n");		return false;	}	printf("success: FUNCTION\n");	return true;}static int test_MIN(void){	printf("test: MIN\n");	if (MIN(20, 1) != 1) {		printf("failure: MIN [\nMIN invalid\n]\n");		return false;	}	if (MIN(1, 20) != 1) {		printf("failure: MIN [\nMIN invalid\n]\n");		return false;	}	printf("success: MIN\n");	return true;}static int test_MAX(void){	printf("test: MAX\n");	if (MAX(20, 1) != 20) {		printf("failure: MAX [\nMAX invalid\n]\n");		return false;	}	if (MAX(1, 20) != 20) {		printf("failure: MAX [\nMAX invalid\n]\n");		return false;	}	printf("success: MAX\n");	return true;}static int test_socketpair(void){	int sock[2];	char buf[20];	printf("test: socketpair\n");	if (socketpair(AF_UNIX, SOCK_STREAM, 0, sock) == -1) {		printf("failure: socketpair [\n"			   "socketpair() failed\n"			   "]\n");		return false;	}	if (write(sock[1], "automatisch", 12) == -1) {		printf("failure: socketpair [\n"			   "write() failed: %s\n"			   "]\n", strerror(errno));		return false;	}	if (read(sock[0], buf, 12) == -1) {		printf("failure: socketpair [\n"			   "read() failed: %s\n"			   "]\n", strerror(errno));		return false;	}	if (strcmp(buf, "automatisch") != 0) {		printf("failure: socketpair [\n"			   "expected: automatisch, got: %s\n"			   "]\n", buf);		return false;	}	printf("success: socketpair\n");	return true;}extern int libreplace_test_strptime(void);static int test_strptime(void){	return libreplace_test_strptime();}extern int getifaddrs_test(void);static int test_getifaddrs(void){	printf("test: getifaddrs\n");	if (getifaddrs_test() != 0) {		printf("failure: getifaddrs\n");		return false;	}	printf("success: getifaddrs\n");	return true;}static int test_utime(void){	struct utimbuf u;	struct stat st1, st2, st3;	int fd;	printf("test: utime\n");	unlink(TESTFILE);	fd = open(TESTFILE, O_RDWR|O_CREAT, 0600);	if (fd == -1) {		printf("failure: utime [\n"		       "creating '%s' failed - %s\n]\n",		       TESTFILE, strerror(errno));		return false;	}	if (fstat(fd, &st1) != 0) {		printf("failure: utime [\n"		       "fstat (1) failed - %s\n]\n",		       strerror(errno));		return false;	}	u.actime = st1.st_atime + 300;	u.modtime = st1.st_mtime - 300;	if (utime(TESTFILE, &u) != 0) {		printf("failure: utime [\n"		       "utime(&u) failed - %s\n]\n",		       strerror(errno));		return false;	}	if (fstat(fd, &st2) != 0) {		printf("failure: utime [\n"		       "fstat (2) failed - %s\n]\n",		       strerror(errno));		return false;	}	if (utime(TESTFILE, NULL) != 0) {		printf("failure: utime [\n"		       "utime(NULL) failed - %s\n]\n",		       strerror(errno));		return false;	}	if (fstat(fd, &st3) != 0) {		printf("failure: utime [\n"		       "fstat (3) failed - %s\n]\n",		       strerror(errno));		return false;	}#define CMP_VAL(a,c,b) do { \	if (a c b) { \		printf("failure: utime [\n" \		       "%s: %s(%d) %s %s(%d)\n]\n", \		       __location__, \		       #a, (int)a, #c, #b, (int)b); \		return false; \	} \} while(0)#define EQUAL_VAL(a,b) CMP_VAL(a,!=,b)#define GREATER_VAL(a,b) CMP_VAL(a,<=,b)#define LESSER_VAL(a,b) CMP_VAL(a,>=,b)	EQUAL_VAL(st2.st_atime, st1.st_atime + 300);	EQUAL_VAL(st2.st_mtime, st1.st_mtime - 300);	LESSER_VAL(st3.st_atime, st2.st_atime);	GREATER_VAL(st3.st_mtime, st2.st_mtime);#undef CMP_VAL#undef EQUAL_VAL#undef GREATER_VAL#undef LESSER_VAL	unlink(TESTFILE);	printf("success: utime\n");	return true;}static int test_utimes(void){	struct timeval tv[2];	struct stat st1, st2;	int fd;	printf("test: utimes\n");	unlink(TESTFILE);	fd = open(TESTFILE, O_RDWR|O_CREAT, 0600);	if (fd == -1) {		printf("failure: utimes [\n"		       "creating '%s' failed - %s\n]\n",		       TESTFILE, strerror(errno));		return false;	}	if (fstat(fd, &st1) != 0) {		printf("failure: utimes [\n"		       "fstat (1) failed - %s\n]\n",		       strerror(errno));		return false;	}	ZERO_STRUCT(tv);	tv[0].tv_sec = st1.st_atime + 300;	tv[1].tv_sec = st1.st_mtime - 300;	if (utimes(TESTFILE, tv) != 0) {		printf("failure: utimes [\n"		       "utimes(tv) failed - %s\n]\n",		       strerror(errno));		return false;	}	if (fstat(fd, &st2) != 0) {		printf("failure: utimes [\n"		       "fstat (2) failed - %s\n]\n",		       strerror(errno));		return false;	}#define EQUAL_VAL(a,b) do { \	if (a != b) { \		printf("failure: utimes [\n" \		       "%s: %s(%d) != %s(%d)\n]\n", \		       __location__, \		       #a, (int)a, #b, (int)b); \		return false; \	} \} while(0)	EQUAL_VAL(st2.st_atime, st1.st_atime + 300);	EQUAL_VAL(st2.st_mtime, st1.st_mtime - 300);#undef EQUAL_VAL	unlink(TESTFILE);	printf("success: utimes\n");	return true;}struct torture_context;bool torture_local_replace(struct torture_context *ctx){	bool ret = true;	ret &= test_ftruncate();	ret &= test_strlcpy();	ret &= test_strlcat();	ret &= test_mktime();	ret &= test_initgroups();	ret &= test_memmove();	ret &= test_strdup();	ret &= test_setlinebuf();	ret &= test_vsyslog();	ret &= test_timegm();	ret &= test_setenv();	ret &= test_strndup();	ret &= test_strnlen();	ret &= test_waitpid();	ret &= test_seteuid();	ret &= test_setegid();	ret &= test_asprintf();	ret &= test_snprintf();	ret &= test_vasprintf();	ret &= test_vsnprintf();	ret &= test_opendir();	ret &= test_readdir();	ret &= test_telldir();	ret &= test_seekdir();	ret &= test_dlopen();	ret &= test_chroot();	ret &= test_bzero();	ret &= test_strerror();	ret &= test_errno();	ret &= test_mkdtemp();	ret &= test_mkstemp();	ret &= test_pread();	ret &= test_pwrite();	ret &= test_getpass();	ret &= test_inet_ntoa();	ret &= test_strtoll();	ret &= test_strtoull();	ret &= test_va_copy();	ret &= test_FUNCTION();	ret &= test_MIN();	ret &= test_MAX();	ret &= test_socketpair();	ret &= test_strptime();	ret &= test_getifaddrs();	ret &= test_utime();	ret &= test_utimes();	return ret;}#if _SAMBA_BUILD_<4int main(void){	bool ret = torture_local_replace(NULL);	if (ret) 		return 0;	return -1;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -