blob: 685a63b1d5c7f940e0d8ae4937e7648568e91fc0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2017 IBM Corporation and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
*******************************************************************************/
package org.eclipse.dltk.tcl.parser.perfomance.tests;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.eclipse.dltk.ast.declarations.ModuleDeclaration;
import org.eclipse.dltk.compiler.env.ModuleSource;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.SourceParserUtil;
import org.eclipse.dltk.core.mixin.IMixinRequestor;
import org.eclipse.dltk.core.tests.model.AbstractModelTests;
import org.eclipse.dltk.tcl.core.TclNature;
import org.eclipse.dltk.tcl.core.tests.model.Activator;
import org.eclipse.dltk.tcl.internal.core.search.mixin.TclMixinBuildVisitor;
import org.eclipse.dltk.tcl.internal.core.search.mixin.TclMixinParser;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class PeromanceTest0 {
ZipFile scriptsZip = null;
private final static String[] scripts = new String[] { "append.tcl",
"appendComp.tcl", "assocd.tcl", "async.tcl", "autoMkindex.tcl",
"basic.tcl", "binary.tcl", "case.tcl", "clock.tcl", "cmdAH.tcl",
"cmdIL.tcl", "cmdInfo.tcl", "cmdMZ.tcl", "compExpr.tcl",
"compExpr-old.tcl", "compile.tcl", "concat.tcl", "dcall.tcl",
"dstring.tcl", "encoding.tcl", "env.tcl", "error.tcl", "escp.tcl",
"eval.tcl", "event.tcl", "exec.tcl", "execute.tcl", "expr.tcl",
"expr-old.tcl", "fCmd.tcl", "fileName.tcl", "fileSystem.tcl",
"for.tcl", "for-old.tcl", "foreach.tcl", "format.tcl", "get.tcl",
"history.tcl", "http.tcl", "httpold.tcl", "if.tcl", "if-old.tcl",
"incr.tcl", "incr-old.tcl", "indexObj.tcl", "info.tcl", "init.tcl",
"interp.tcl", "io.tcl", "ioCmd.tcl", "iogt.tcl", "ioUtil.tcl",
"join.tcl", "lindex.tcl", "link.tcl", "linsert.tcl", "list.tcl",
"listObj.tcl", "llength.tcl", "load.tcl", "lrange.tcl",
"lreplace.tcl", "lsearch.tcl", "lset.tcl", "lsetComp.tcl",
"macFCmd.tcl", "main.tcl", "misc.tcl", "msgcat.tcl",
"namespace.tcl", "namespace-old.tcl", "notify.tcl", "obj.tcl",
"opt.tcl", "osa.tcl", "package.tcl", "parse.tcl", "parseExpr.tcl",
"parseOld.tcl", "pid.tcl", "pkg.tcl", "pkgMkIndex.tcl",
"platform.tcl", "proc.tcl", "proc-old.tcl", "pwd.tcl", "reg.tcl",
"regexp.tcl", "regexpComp.tcl", "registry.tcl", "rename.tcl",
"resource.tcl", "result.tcl", "safe.tcl", "scan.tcl",
"security.tcl", "set.tcl", "set-old.tcl", "socket.tcl",
"source.tcl", "split.tcl", "stack.tcl", "string.tcl",
"stringComp.tcl", "stringObj.tcl", "subst.tcl", "switch.tcl",
"tcl-import.tcl", "tcl-object.tcl", "tcltest.tcl", "test0.tcl",
"thread.tcl", "timer.tcl", "trace.tcl", "unixFCmd.tcl",
"unixFile.tcl", "unixInit.tcl", "unixNotfy.tcl", "unknown.tcl",
"uplevel.tcl", "upvar.tcl", "utf.tcl", "util.tcl", "var.tcl",
"while.tcl", "while-old.tcl", "winConsole.tcl", "winDde.tcl",
"winFCmd.tcl", "winFile.tcl", "winNotify.tcl", "winPipe.tcl",
"winTime.tcl" };
private String getContents(InputStream stream) throws IOException {
StringBuffer result = new StringBuffer();
try {
InputStreamReader isr = new InputStreamReader(stream);
BufferedReader input = new BufferedReader(isr);
while (stream.available() > 0) {
long size = stream.available();
char c[] = new char[(int) size];
input.read(c);
result.append(c);
}
} finally {
if (stream != null) {
stream.close();
}
}
return result.toString();
}
@Before
public void setUp() throws Exception {
this.scriptsZip = new ZipFile(AbstractModelTests.storeToMetadata(
Activator.getDefault().getBundle(), "tcl_scripts.zip",
"/scripts/scripts.zip"));
}
@After
public void tearDown() throws Exception {
if (this.scriptsZip != null) {
removeIfExist(this.scriptsZip.getName());
}
}
private void removeIfExist(String name) {
File file = new File(name);
if (file.exists()) {
file.delete();
}
}
@Test
public void testPerfomance001() throws Exception {
if (this.scriptsZip == null) {
throw new IOException("Scripts not pressent...");
}
long start = System.currentTimeMillis();
final List<IMixinRequestor.ElementInfo> elements = new ArrayList<>();
TclMixinParser parser = new TclMixinParser();
IMixinRequestor requestor = info -> elements.add(info);
for (int number = 0; number < scripts.length; number++) {
String script = scripts[number];
InputStream input = null;
try {
ZipEntry entry = scriptsZip.getEntry(script);
if (entry == null) {
throw new IOException("Script:" + script
+ " not pressent in:" + scriptsZip.getName());
}
String content = getContents(scriptsZip.getInputStream(entry));
parser.setRequirestor(requestor);
ModuleDeclaration moduleDeclaration = (ModuleDeclaration) SourceParserUtil
.parse(new ModuleSource(content), TclNature.NATURE_ID,
null);
TclMixinBuildVisitor visitor = new TclMixinBuildVisitor(
moduleDeclaration, null, false, requestor);
try {
moduleDeclaration.traverse(visitor);
} catch (Exception e) {
if (DLTKCore.DEBUG) {
e.printStackTrace();
}
}
} finally {
if (input != null) {
input.close();
}
}
}
long end = System.currentTimeMillis();
System.out.println("Time:" + Long.toString(end - start));
}
}