tst.substr.d revision 178529
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#pragma ident	"%Z%%M%	%I%	%E% SMI"
28
29#pragma D option quiet
30
31struct {
32	int index;
33	int length;
34	int nolen;
35} command[int];
36
37int i;
38
39BEGIN
40{
41	str = "foobarbazbop";
42
43	command[i].index = 3;
44	command[i].nolen = 1;
45	i++;
46
47	command[i].index = 300;
48	command[i].nolen = 1;
49	i++;
50
51	command[i].index = -10;
52	command[i].nolen = 1;
53	i++;
54
55	command[i].index = 0;
56	command[i].nolen = 1;
57	i++;
58
59	command[i].index = 1;
60	command[i].nolen = 1;
61	i++;
62
63	command[i].index = strlen(str) - 1;
64	command[i].nolen = 1;
65	i++;
66
67	command[i].index = strlen(str);
68	command[i].nolen = 1;
69	i++;
70
71	command[i].index = strlen(str) + 1;
72	command[i].nolen = 1;
73	i++;
74
75	command[i].index = 8;
76	command[i].length = 20;
77	i++;
78
79	command[i].index = 4;
80	command[i].length = 4;
81	i++;
82
83	command[i].index = 5;
84	command[i].length = strlen(str) - command[i].index + 1;
85	i++;
86
87	command[i].index = 5;
88	command[i].length = strlen(str) - command[i].index + 2;
89	i++;
90
91	command[i].index = 400;
92	command[i].length = 20;
93	i++;
94
95	command[i].index = 400;
96	command[i].length = 0;
97	i++;
98
99	command[i].index = 400;
100	command[i].length = -1;
101	i++;
102
103	command[i].index = 3;
104	command[i].length = 0;
105	i++;
106
107	command[i].index = 3;
108	command[i].length = -1;
109	i++;
110
111	command[i].index = 0;
112	command[i].length = 400;
113	i++;
114
115	command[i].index = -1;
116	command[i].length = 400;
117	i++;
118
119	command[i].index = -1;
120	command[i].length = 0;
121	i++;
122
123	command[i].index = -1;
124	command[i].length = -1;
125	i++;
126
127	command[i].index = -2 * strlen(str);
128	command[i].length = 2 * strlen(str);
129	i++;
130
131	command[i].index = -2 * strlen(str);
132	command[i].length = strlen(str);
133	i++;
134
135	command[i].index = -2 * strlen(str);
136	command[i].length = strlen(str) + 1;
137	i++;
138
139	command[i].index = -1 * strlen(str);
140	command[i].length = strlen(str);
141	i++;
142
143	command[i].index = -1 * strlen(str);
144	command[i].length = strlen(str) - 1;
145	i++;
146
147	end = i;
148	i = 0;
149	printf("#!/usr/perl5/bin/perl\n\nBEGIN {\n");
150
151}
152
153tick-1ms
154/i < end && command[i].nolen/
155{
156	this->result = substr(str, command[i].index);
157
158	printf("\tif (substr(\"%s\", %d) != \"%s\") {\n",
159	    str, command[i].index, this->result);
160
161	printf("\t\tprintf(\"perl => substr(\\\"%s\\\", %d) = ",
162	    str, command[i].index);
163	printf("\\\"%%s\\\"\\n\",\n\t\t    substr(\"%s\", %d));\n",
164	    str, command[i].index);
165	printf("\t\tprintf(\"   D => substr(\\\"%s\\\", %d) = ",
166	    str, command[i].index);
167	printf("\\\"%%s\\\"\\n\",\n\t\t    \"%s\");\n", this->result);
168	printf("\t\t$failed++;\n");
169	printf("\t}\n\n");
170}
171
172tick-1ms
173/i < end && !command[i].nolen/
174{
175	this->result = substr(str, command[i].index, command[i].length);
176
177	printf("\tif (substr(\"%s\", %d, %d) != \"%s\") {\n",
178	    str, command[i].index, command[i].length, this->result);
179	printf("\t\tprintf(\"perl => substr(\\\"%s\\\", %d, %d) = ",
180	    str, command[i].index, command[i].length);
181	printf("\\\"%%s\\\"\\n\",\n\t\t    substr(\"%s\", %d, %d));\n",
182	    str, command[i].index, command[i].length);
183	printf("\t\tprintf(\"   D => substr(\\\"%s\\\", %d, %d) = ",
184	    str, command[i].index, command[i].length);
185	printf("\\\"%%s\\\"\\n\",\n\t\t    \"%s\");\n", this->result);
186	printf("\t\t$failed++;\n");
187	printf("\t}\n\n");
188}
189
190tick-1ms
191/++i == end/
192{
193	printf("\texit($failed);\n}\n");
194	exit(0);
195}
196