diff options
author | Seth Tisue <seth@tisue.net> | 2015-07-20 10:57:52 -0400 |
---|---|---|
committer | Seth Tisue <seth@tisue.net> | 2015-07-20 10:57:52 -0400 |
commit | 100a234882a86a249ebe586b4e75fede58c098c3 (patch) | |
tree | d7b2fc7d8c5b2f599af17bd0430d6773b06faf9d | |
parent | 8f0c4b42617903ef974e25ff45250a34e93f40e7 (diff) | |
parent | a2973dfd954c0c094f956becb05a82bee5f7da01 (diff) | |
download | scala-100a234882a86a249ebe586b4e75fede58c098c3.tar.gz scala-100a234882a86a249ebe586b4e75fede58c098c3.tar.bz2 scala-100a234882a86a249ebe586b4e75fede58c098c3.zip |
Merge pull request #4629 from adriaanm/unforkjoin
Remove our fork of forkjoin. Java 8 bundles it.
136 files changed, 131 insertions, 76302 deletions
diff --git a/build-ant-macros.xml b/build-ant-macros.xml index cfdb1ce70e..19429cdaa3 100644 --- a/build-ant-macros.xml +++ b/build-ant-macros.xml @@ -91,7 +91,6 @@ <macrodef name="simple-javac"> <attribute name="project"/> - <!-- project: forkjoin --> <attribute name="args" default=""/> <attribute name="jar" default="yes"/> <sequential> @@ -156,7 +156,6 @@ lazy val library = configureAsSubproject(project) Seq("-doc-no-compile", libraryAuxDir.toString) }, includeFilter in unmanagedResources in Compile := libIncludes) - .dependsOn (forkjoin) lazy val reflect = configureAsSubproject(project) .settings(generatePropertiesFileSettings: _*) @@ -213,8 +212,6 @@ lazy val scaladoc = configureAsSubproject(project) lazy val scalap = configureAsSubproject(project). dependsOn(compiler) -lazy val forkjoin = configureAsForkOfJavaProject(project) - lazy val partestExtras = configureAsSubproject(Project("partest-extras", file(".") / "src" / "partest-extras")) .dependsOn(repl) .settings(clearSourceAndResourceDirectories: _*) @@ -283,7 +280,7 @@ lazy val test = project. ) lazy val root = (project in file(".")). - aggregate(library, forkjoin, reflect, compiler, interactive, repl, + aggregate(library, reflect, compiler, interactive, repl, scaladoc, scalap, partestExtras, junit).settings( sources in Compile := Seq.empty, onLoadMessage := """|*** Welcome to the sbt build definition for Scala! *** @@ -312,27 +309,6 @@ def configureAsSubproject(project: Project): Project = { (project in base).settings(scalaSubprojectSettings: _*) } -/** - * Configuration for subprojects that are forks of some Java projects - * we depend on. At the moment there's just forkjoin. - * - * We do not publish artifacts for those projects but we package their - * binaries in a jar of other project (compiler or library). - * - * For that reason we disable docs generation, packaging and publishing. - */ -def configureAsForkOfJavaProject(project: Project): Project = { - val base = file(".") / "src" / project.id - (project in base). - settings(commonSettings: _*). - settings(disableDocsAndPublishingTasks: _*). - settings( - sourceDirectory in Compile := baseDirectory.value, - javaSource in Compile := (sourceDirectory in Compile).value, - sources in Compile in doc := Seq.empty, - classDirectory in Compile := buildDirectory.value / "libs/classes" / thisProject.value.id - ) -} lazy val buildDirectory = settingKey[File]("The directory where all build products go. By default ./build") lazy val copyrightString = settingKey[String]("Copyright string.") @@ -165,7 +165,6 @@ TODO: <property name="build.dir" value="${basedir}/build"/> <property name="build-deps.dir" value="${build.dir}/deps"/> <property name="build-libs.dir" value="${build.dir}/libs"/> - <property name="build-forkjoin.dir" value="${build-libs.dir}"/> <property name="build-locker.dir" value="${build.dir}/locker"/> <property name="build-quick.dir" value="${build.dir}/quick"/> <property name="build-pack.dir" value="${build.dir}/pack"/> @@ -570,9 +569,6 @@ TODO: </propertyfile> </then></if> - <path id="forkjoin.classpath" path="${build-forkjoin.dir}/classes/forkjoin"/> - <property name="forkjoin-classes" refid="forkjoin.classpath"/> - <!-- the following properties fully define staged-docs, staged-pack, make-bundle, copy-bundle and mvn-package for each of the projects --> <property name="library.description" value="Scala Standard Library"/> <property name="library.docroot" value="rootdoc.txt"/> @@ -627,7 +623,7 @@ TODO: <property name="partest-extras.description" value="Scala Compiler Testing Tool (compiler-specific extras)"/> <property name="partest-javaagent.description" value="Scala Compiler Testing Tool (compiler-specific java agent)"/> - <!-- projects without project-specific options: forkjoin, manual, bin, repl --> + <!-- projects without project-specific options: manual, bin, repl --> <for list="compiler,interactive,scaladoc,library,parser-combinators,partest,partest-extras,partest-javaagent,reflect,scalap,swing,xml,repl-jline" param="project"> <sequential> <!-- description is mandatory --> @@ -685,7 +681,6 @@ TODO: <!-- LOCKER --> <path id="locker.library.build.path"> <pathelement location="${build-locker.dir}/classes/library"/> - <path refid="forkjoin.classpath"/> <path refid="aux.libs"/> </path> @@ -706,7 +701,6 @@ TODO: <!-- QUICK --> <path id="quick.library.build.path"> <pathelement location="${build-quick.dir}/classes/library"/> - <path refid="forkjoin.classpath"/> <path refid="aux.libs"/> </path> @@ -781,7 +775,6 @@ TODO: <pathelement location="${reflect.jar}"/> <pathelement location="${compiler.jar}"/> <pathelement location="${ant.jar}"/> - <path refid="forkjoin.classpath"/> <path refid="aux.libs"/> </path> @@ -799,7 +792,6 @@ TODO: <path id="pack.library.files"> <fileset dir="${build-quick.dir}/classes/library"/> - <fileset dir="${forkjoin-classes}"/> </path> <path id="pack.repl-jline.files"> <fileset dir="${build-quick.dir}/classes/repl-jline"/> </path> @@ -829,7 +821,6 @@ TODO: <!-- STRAP --> <path id="strap.library.build.path"> <pathelement location="${build-strap.dir}/classes/library"/> - <path refid="forkjoin.classpath"/> <path refid="aux.libs"/> </path> @@ -958,7 +949,6 @@ TODO: <pathelement location="${build-osgi.dir}/org.scala-lang.scala-reflect.jar"/> <pathelement location="${build-osgi.dir}/org.scala-lang.scala-compiler.jar"/> <path refid="pax.exam.classpath"/> - <path refid="forkjoin.classpath"/> </path> <path id="test.osgi.compiler.build.path.felix"> @@ -1029,8 +1019,6 @@ TODO: LOCAL DEPENDENCIES ============================================================================ --> - <target name="forkjoin.done" depends="init"> <simple-javac project="forkjoin" args="-XDignore.symbol.file" jar="no"/></target> - <!-- For local development only. We only allow released versions of Scala for STARR. This builds quick (core only) and publishes it with a generated version number, saving it as starr.version in build.properties, so this compiler will be used as STARR in your next build @@ -1051,7 +1039,7 @@ TODO: <!-- =========================================================================== LOCAL REFERENCE BUILD (LOCKER) ============================================================================ --> - <target name="locker.start" depends="forkjoin.done"> + <target name="locker.start" depends="init"> <condition property="locker.locked"><available file="${build-locker.dir}/locker.locked"/></condition></target> <target name="locker.lib" depends="locker.start" unless="locker.locked"> @@ -1137,7 +1125,7 @@ TODO: <!-- =========================================================================== PACKED QUICK BUILD (PACK) ============================================================================ --> - <target name="pack.lib" depends="quick.lib, forkjoin.done"> <staged-pack project="library"/></target> + <target name="pack.lib" depends="quick.lib"> <staged-pack project="library"/></target> <target name="pack.reflect" depends="quick.reflect"> <staged-pack project="reflect"/> </target> diff --git a/doc/LICENSE.md b/doc/LICENSE.md index 6b039afd68..6eab02548d 100644 --- a/doc/LICENSE.md +++ b/doc/LICENSE.md @@ -61,8 +61,4 @@ This license is used by the following third-party libraries: * sizzle * tools tooltip -### Public Domain -The following libraries are freely available in the public domain: - - * forkjoin diff --git a/doc/License.rtf b/doc/License.rtf index 62ec2d023c..541f4d7996 100644 --- a/doc/License.rtf +++ b/doc/License.rtf @@ -57,9 +57,3 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \'93AS IS\'9 \'95 jquery-layout\ \'95 sizzle\ \'95 tools tooltip\ - -\fs30 \ -Public Domain\ - -\fs26 The following libraries are freely available in the public domain:\ - \'95 forkjoin}
\ No newline at end of file diff --git a/lib/forkjoin.jar.desired.sha1 b/lib/forkjoin.jar.desired.sha1 deleted file mode 100644 index 8bb86f397d..0000000000 --- a/lib/forkjoin.jar.desired.sha1 +++ /dev/null @@ -1 +0,0 @@ -ddd7d5398733c4fbbb8355c049e258d47af636cf ?forkjoin.jar diff --git a/src/build/dbuild-meta-json-gen.scala b/src/build/dbuild-meta-json-gen.scala index f967fffdd0..043ad19b2e 100644 --- a/src/build/dbuild-meta-json-gen.scala +++ b/src/build/dbuild-meta-json-gen.scala @@ -16,7 +16,7 @@ val meta = ProjMeta(version = "2.12.0", projects = Seq( Project("scala-library", "org.scala-lang", Seq(ProjectRef("scala-library", "org.scala-lang")), - Seq.empty), // TODO: forkjoin + Seq.empty), Project("scala-reflect", "org.scala-lang", Seq(ProjectRef("scala-reflect", "org.scala-lang")), Seq(ProjectRef("scala-library", "org.scala-lang"))), diff --git a/src/forkjoin/scala/concurrent/forkjoin/ForkJoinPool.java b/src/forkjoin/scala/concurrent/forkjoin/ForkJoinPool.java deleted file mode 100644 index 9bd378c61c..0000000000 --- a/src/forkjoin/scala/concurrent/forkjoin/ForkJoinPool.java +++ /dev/null @@ -1,3762 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -package scala.concurrent.forkjoin; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.AbstractExecutorService; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.RunnableFuture; -import java.util.concurrent.TimeUnit; - -/** - * @since 1.8 - * @author Doug Lea - */ -@Deprecated -/*public*/ abstract class CountedCompleter<T> extends ForkJoinTask<T> { - private static final long serialVersionUID = 5232453752276485070L; - - /** This task's completer, or null if none */ - final CountedCompleter<?> completer; - /** The number of pending tasks until completion */ - volatile int pending; - - /** - * Creates a new CountedCompleter with the given completer - * and initial pending count. - * - * @param completer this task's completer, or {@code null} if none - * @param initialPendingCount the initial pending count - */ - protected CountedCompleter(CountedCompleter<?> completer, - int initialPendingCount) { - this.completer = completer; - this.pending = initialPendingCount; - } - - /** - * Creates a new CountedCompleter with the given completer - * and an initial pending count of zero. - * - * @param completer this task's completer, or {@code null} if none - */ - protected CountedCompleter(CountedCompleter<?> completer) { - this.completer = completer; - } - - /** - * Creates a new CountedCompleter with no completer - * and an initial pending count of zero. - */ - protected CountedCompleter() { - this.completer = null; - } - - /** - * The main computation performed by this task. - */ - public abstract void compute(); - - /** - * Performs an action when method {@link #tryComplete} is invoked - * and the pending count is zero, or when the unconditional - * method {@link #complete} is invoked. By default, this method - * does nothing. You can distinguish cases by checking the - * identity of the given caller argument. If not equal to {@code - * this}, then it is typically a subtask that may contain results - * (and/or links to other results) to combine. - * - * @param caller the task invoking this method (which may - * be this task itself) - */ - public void onCompletion(CountedCompleter<?> caller) { - } - - /** - * Performs an action when method {@link #completeExceptionally} - * is invoked or method {@link #compute} throws an exception, and - * this task has not otherwise already completed normally. On - * entry to this method, this task {@link - * ForkJoinTask#isCompletedAbnormally}. The return value of this - * method controls further propagation: If {@code true} and this - * task has a completer, then this completer is also completed - * exceptionally. The default implementation of this method does - * nothing except return {@code true}. - * - * @param ex the exception - * @param caller the task invoking this method (which may - * be this task itself) - * @return true if this exception should be propagated to this - * task's completer, if one exists - */ - public boolean onExceptionalCompletion(Throwable ex, CountedCompleter<?> caller) { - return true; - } - - /** - * Returns the completer established in this task's constructor, - * or {@code null} if none. - * - * @return the completer - */ - public final CountedCompleter<?> getCompleter() { - return completer; - } - - /** - * Returns the current pending count. - * - * @return the current pending count - */ - public final int getPendingCount() { - return pending; - } - - /** - * Sets the pending count to the given value. - * - * @param count the count - */ - public final void setPendingCount(int count) { - pending = count; - } - - /** - * Adds (atomically) the given value to the pending count. - * - * @param delta the value to add - */ - public final void addToPendingCount(int delta) { - int c; // note: can replace with intrinsic in jdk8 - do {} while (!U.compareAndSwapInt(this, PENDING, c = pending, c+delta)); - } - - /** - * Sets (atomically) the pending count to the given count only if - * it currently holds the given expected value. - * - * @param expected the expected value - * @param count the new value - * @return true if successful - */ - public final boolean compareAndSetPendingCount(int expected, int count) { - return U.compareAndSwapInt(this, PENDING, expected, count); - } - - /** - * If the pending count is nonzero, (atomically) decrements it. - * - * @return the initial (undecremented) pending count holding on entry - * to this method - */ - public final int decrementPendingCountUnlessZero() { - int c; - do {} while ((c = pending) != 0 && - !U.compareAndSwapInt(this, PENDING, c, c - 1)); - return c; - } - - /** - * Returns the root of the current computation; i.e., this - * task if it has no completer, else its completer's root. - * - * @return the root of the current computation - */ - public final CountedCompleter<?> getRoot() { - CountedCompleter<?> a = this, p; - while ((p = a.completer) != null) - a = p; - return a; - } - - /** - * If the pending count is nonzero, decrements the count; - * otherwise invokes {@link #onCompletion} and then similarly - * tries to complete this task's completer, if one exists, - * else marks this task as complete. - */ - public final void tryComplete() { - CountedCompleter<?> a = this, s = a; - for (int c;;) { - if ((c = a.pending) == 0) { - a.onCompletion(s); - if ((a = (s = a).completer) == null) { - s.quietlyComplete(); - return; - } - } - else if (U.compareAndSwapInt(a, PENDING, c, c - 1)) - return; - } - } - - /** - * Equivalent to {@link #tryComplete} but does not invoke {@link - * #onCompletion} along the completion path: If the pending count - * is nonzero, decrements the count; otherwise, similarly tries to - * complete this task's completer, if one exists, else marks this - * task as complete. This method may be useful in cases where - * {@code onCompletion} should not, or need not, be invoked for - * each completer in a computation. - */ - public final void propagateCompletion() { - CountedCompleter<?> a = this, s = a; - for (int c;;) { - if ((c = a.pending) == 0) { - if ((a = (s = a).completer) == null) { - s.quietlyComplete(); - return; - } - } - else if (U.compareAndSwapInt(a, PENDING, c, c - 1)) - return; - } - } - - /** - * Regardless of pending count, invokes {@link #onCompletion}, - * marks this task as complete and further triggers {@link - * #tryComplete} on this task's completer, if one exists. The - * given rawResult is used as an argument to {@link #setRawResult} - * before invoking {@link #onCompletion} or marking this task as - * complete; its value is meaningful only for classes overriding - * {@code setRawResult}. - * - * <p>This method may be useful when forcing completion as soon as - * any one (versus all) of several subtask results are obtained. - * However, in the common (and recommended) case in which {@code - * setRawResult} is not overridden, this effect can be obtained - * more simply using {@code quietlyCompleteRoot();}. - * - * @param rawResult the raw result - */ - public void complete(T rawResult) { - CountedCompleter<?> p; - setRawResult(rawResult); - onCompletion(this); - quietlyComplete(); - if ((p = completer) != null) - p.tryComplete(); - } - - - /** - * If this task's pending count is zero, returns this task; - * otherwise decrements its pending count and returns {@code - * null}. This method is designed to be used with {@link - * #nextComplete} in completion traversal loops. - * - * @return this task, if pending count was zero, else {@code null} - */ - public final CountedCompleter<?> firstComplete() { - for (int c;;) { - if ((c = pending) == 0) - return this; - else if (U.compareAndSwapInt(this, PENDING, c, c - 1)) - return null; - } - } - - /** - * If this task does not have a completer, invokes {@link - * ForkJoinTask#quietlyComplete} and returns {@code null}. Or, if - * this task's pending count is non-zero, decrements its pending - * count and returns {@code null}. Otherwise, returns the - * completer. This method can be used as part of a completion - * traversal loop for homogeneous task hierarchies: - * - * <pre> {@code - * for (CountedCompleter<?> c = firstComplete(); - * c != null; - * c = c.nextComplete()) { - * // ... process c ... - * }}</pre> - * - * @return the completer, or {@code null} if none - */ - public final CountedCompleter<?> nextComplete() { - CountedCompleter<?> p; - if ((p = completer) != null) - return p.firstComplete(); - else { - quietlyComplete(); - return null; - } - } - - /** - * Equivalent to {@code getRoot().quietlyComplete()}. - */ - public final void quietlyCompleteRoot() { - for (CountedCompleter<?> a = this, p;;) { - if ((p = a.completer) == null) { - a.quietlyComplete(); - return; - } - a = p; - } - } - - /** - * Supports ForkJoinTask exception propagation. - */ - void internalPropagateException(Throwable ex) { - CountedCompleter<?> a = this, s = a; - while (a.onExceptionalCompletion(ex, s) && - (a = (s = a).completer) != null && a.status >= 0) - a.recordExceptionalCompletion(ex); - } - - /** - * Implements execution conventions for CountedCompleters. - */ - protected final boolean exec() { - compute(); - return false; - } - - /** - * Returns the result of the computation. By default - * returns {@code null}, which is appropriate for {@code Void} - * actions, but in other cases should be overridden, almost - * always to return a field or function of a field that - * holds the result upon completion. - * - * @return the result of the computation - */ - public T getRawResult() { return null; } - - /** - * A method that result-bearing CountedCompleters may optionally - * use to help maintain result data. By default, does nothing. - * Overrides are not recommended. However, if this method is - * overridden to update existing objects or fields, then it must - * in general be defined to be thread-safe. - */ - protected void setRawResult(T t) { } - - // Unsafe mechanics - private static final sun.misc.Unsafe U; - private static final long PENDING; - static { - try { - U = getUnsafe(); - PENDING = U.objectFieldOffset - (CountedCompleter.class.getDeclaredField("pending")); - } catch (Exception e) { - throw new Error(e); - } - } - - /** - * Returns a sun.misc.Unsafe. Suitable for use in a 3rd party package. - * Replace with a simple call to Unsafe.getUnsafe when integrating - * into a jdk. - * - * @return a sun.misc.Unsafe - */ - private static sun.misc.Unsafe getUnsafe() { - return scala.concurrent.util.Unsafe.instance; - } -} - -/** - * An {@link ExecutorService} for running {@link ForkJoinTask}s. - * A {@code ForkJoinPool} provides the entry point for submissions - * from non-{@code ForkJoinTask} clients, as well as management and - * monitoring operations. - * - * <p>A {@code ForkJoinPool} differs from other kinds of {@link - * ExecutorService} mainly by virtue of employing - * <em>work-stealing</em>: all threads in the pool attempt to find and - * execute tasks submitted to the pool and/or created by other active - * tasks (eventually blocking waiting for work if none exist). This - * enables efficient processing when most tasks spawn other subtasks - * (as do most {@code ForkJoinTask}s), as well as when many small - * tasks are submitted to the pool from external clients. Especially - * when setting <em>asyncMode</em> to true in constructors, {@code - * ForkJoinPool}s may also be appropriate for use with event-style - * tasks that are never joined. - * - * <p>A static {@link #commonPool()} is available and appropriate for - * most applications. The common pool is used by any ForkJoinTask that - * is not explicitly submitted to a specified pool. Using the common - * pool normally reduces resource usage (its threads are slowly - * reclaimed during periods of non-use, and reinstated upon subsequent - * use). - * - * <p>For applications that require separate or custom pools, a {@code - * ForkJoinPool} may be constructed with a given target parallelism - * level; by default, equal to the number of available processors. The - * pool attempts to maintain enough active (or available) threads by - * dynamically adding, suspending, or resuming internal worker - * threads, even if some tasks are stalled waiting to join - * others. However, no such adjustments are guaranteed in the face of - * blocked I/O or other unmanaged synchronization. The nested {@link - * ManagedBlocker} interface enables extension of the kinds of - * synchronization accommodated. - * - * <p>In addition to execution and lifecycle control methods, this - * class provides status check methods (for example - * {@link #getStealCount}) that are intended to aid in developing, - * tuning, and monitoring fork/join applications. Also, method - * {@link #toString} returns indications of pool state in a - * convenient form for informal monitoring. - * - * <p>As is the case with other ExecutorServices, there are three - * main task execution methods summarized in the following table. - * These are designed to be used primarily by clients not already - * engaged in fork/join computations in the current pool. The main - * forms of these methods accept instances of {@code ForkJoinTask}, - * but overloaded forms also allow mixed execution of plain {@code - * Runnable}- or {@code Callable}- based activities as well. However, - * tasks that are already executing in a pool should normally instead - * use the within-computation forms listed in the table unless using - * async event-style tasks that are not usually joined, in which case - * there is little difference among choice of methods. - * - * <table BORDER CELLPADDING=3 CELLSPACING=1> - * <tr> - * <td></td> - * <td ALIGN=CENTER> <b>Call from non-fork/join clients</b></td> - * <td ALIGN=CENTER> <b>Call from within fork/join computations</b></td> - * </tr> - * <tr> - * <td> <b>Arrange async execution</td> - * <td> {@link #execute(ForkJoinTask)}</td> - * <td> {@link ForkJoinTask#fork}</td> - * </tr> - * <tr> - * <td> <b>Await and obtain result</td> - * <td> {@link #invoke(ForkJoinTask)}</td> - * <td> {@link ForkJoinTask#invoke}</td> - * </tr> - * <tr> - * <td> <b>Arrange exec and obtain Future</td> - * <td> {@link #submit(ForkJoinTask)}</td> - * <td> {@link ForkJoinTask#fork} (ForkJoinTasks <em>are</em> Futures)</td> - * </tr> - * </table> - * - * <p>The common pool is by default constructed with default - * parameters, but these may be controlled by setting three {@link - * System#getProperty system properties} with prefix {@code - * java.util.concurrent.ForkJoinPool.common}: {@code parallelism} -- - * an integer greater than zero, {@code threadFactory} -- the class - * name of a {@link ForkJoinWorkerThreadFactory}, and {@code - * exceptionHandler} -- the class name of a {@link - * java.lang.Thread.UncaughtExceptionHandler - * Thread.UncaughtExceptionHandler}. Upon any error in establishing - * these settings, default parameters are used. - * - * <p><b>Implementation notes</b>: This implementation restricts the - * maximum number of running threads to 32767. Attempts to create - * pools with greater than the maximum number result in - * {@code IllegalArgumentException}. - * - * <p>This implementation rejects submitted tasks (that is, by throwing - * {@link RejectedExecutionException}) only when the pool is shut down - * or internal resources have been exhausted. - * - * @since 1.7 - * @author Doug Lea - */ -@Deprecated -public class ForkJoinPool extends AbstractExecutorService { - - /* - * Implementation Overview - * - * This class and its nested classes provide the main - * functionality and control for a set of worker threads: - * Submissions from non-FJ threads enter into submission queues. - * Workers take these tasks and typically split them into subtasks - * that may be stolen by other workers. Preference rules give - * first priority to processing tasks from their own queues (LIFO - * or FIFO, depending on mode), then to randomized FIFO steals of - * tasks in other queues. - * - * WorkQueues - * ========== - * - * Most operations occur within work-stealing queues (in nested - * class WorkQueue). These are special forms of Deques that - * support only three of the four possible end-operations -- push, - * pop, and poll (aka steal), under the further constraints that - * push and pop are called only from the owning thread (or, as - * extended here, under a lock), while poll may be called from - * other threads. (If you are unfamiliar with them, you probably - * want to read Herlihy and Shavit's book "The Art of - * Multiprocessor programming", chapter 16 describing these in - * more detail before proceeding.) The main work-stealing queue - * design is roughly similar to those in the papers "Dynamic - * Circular Work-Stealing Deque" by Chase and Lev, SPAA 2005 - * (http://research.sun.com/scalable/pubs/index.html) and - * "Idempotent work stealing" by Michael, Saraswat, and Vechev, - * PPoPP 2009 (http://portal.acm.org/citation.cfm?id=1504186). - * The main differences ultimately stem from GC requirements that - * we null out taken slots as soon as we can, to maintain as small - * a footprint as possible even in programs generating huge - * numbers of tasks. To accomplish this, we shift the CAS - * arbitrating pop vs poll (steal) from being on the indices - * ("base" and "top") to the slots themselves. So, both a - * successful pop and poll mainly entail a CAS of a slot from - * non-null to null. Because we rely on CASes of references, we - * do not need tag bits on base or top. They are simple ints as - * used in any circular array-based queue (see for example - * ArrayDeque). Updates to the indices must still be ordered in a - * way that guarantees that top == base means the queue is empty, - * but otherwise may err on the side of possibly making the queue - * appear nonempty when a push, pop, or poll have not fully - * committed. Note that this means that the poll operation, - * considered individually, is not wait-free. One thief cannot - * successfully continue until another in-progress one (or, if - * previously empty, a push) completes. However, in the - * aggregate, we ensure at least probabilistic non-blockingness. - * If an attempted steal fails, a thief always chooses a different - * random victim target to try next. So, in order for one thief to - * progress, it suffices for any in-progress poll or new push on - * any empty queue to complete. (This is why we normally use - * method pollAt and its variants that try once at the apparent - * base index, else consider alternative actions, rather than - * method poll.) - * - * This approach also enables support of a user mode in which local - * task processing is in FIFO, not LIFO order, simply by using - * poll rather than pop. This can be useful in message-passing - * frameworks in which tasks are never joined. However neither - * mode considers affinities, loads, cache localities, etc, so - * rarely provide the best possible performance on a given - * machine, but portably provide good throughput by averaging over - * these factors. (Further, even if we did try to use such - * information, we do not usually have a basis for exploiting it. - * For example, some sets of tasks profit from cache affinities, - * but others are harmed by cache pollution effects.) - * - * WorkQueues are also used in a similar way for tasks submitted - * to the pool. We cannot mix these tasks in the same queues used - * for work-stealing (this would contaminate lifo/fifo - * processing). Instead, we randomly associate submission queues - * with submitting threads, using a form of hashing. The - * ThreadLocal Submitter class contains a value initially used as - * a hash code for choosing existing queues, but may be randomly - * repositioned upon contention with other submitters. In - * essence, submitters act like workers except that they are - * restricted to executing local tasks that they submitted (or in - * the case of CountedCompleters, others with the same root task). - * However, because most shared/external queue operations are more - * expensive than internal, and because, at steady state, external - * submitters will compete for CPU with workers, ForkJoinTask.join - * and related methods disable them from repeatedly helping to - * process tasks if all workers are active. Insertion of tasks in - * shared mode requires a lock (mainly to protect in the case of - * resizing) but we use only a simple spinlock (using bits in - * field qlock), because submitters encountering a busy queue move - * on to try or create other queues -- they block only when - * creating and registering new queues. - * - * Management - * ========== - * - * The main throughput advantages of work-stealing stem from - * decentralized control -- workers mostly take tasks from - * themselves or each other. We cannot negate this in the - * implementation of other management responsibilities. The main - * tactic for avoiding bottlenecks is packing nearly all - * essentially atomic control state into two volatile variables - * that are by far most often read (not written) as status and - * consistency checks. - * - * Field "ctl" contains 64 bits holding all the information needed - * to atomically decide to add, inactivate, enqueue (on an event - * queue), dequeue, and/or re-activate workers. To enable this - * packing, we restrict maximum parallelism to (1<<15)-1 (which is - * far in excess of normal operating range) to allow ids, counts, - * and their negations (used for thresholding) to fit into 16bit - * fields. - * - * Field "plock" is a form of sequence lock with a saturating - * shutdown bit (similarly for per-queue "qlocks"), mainly - * protecting updates to the workQueues array, as well as to - * enable shutdown. When used as a lock, it is normally only very - * briefly held, so is nearly always available after at most a - * brief spin, but we use a monitor-based backup strategy to - * block when needed. - * - * Recording WorkQueues. WorkQueues are recorded in the - * "workQueues" array that is created upon first use and expanded - * if necessary. Updates to the array while recording new workers - * and unrecording terminated ones are protected from each other - * by a lock but the array is otherwise concurrently readable, and - * accessed directly. To simplify index-based operations, the - * array size is always a power of two, and all readers must - * tolerate null slots. Worker queues are at odd indices. Shared - * (submission) queues are at even indices, up to a maximum of 64 - * slots, to limit growth even if array needs to expand to add - * more workers. Grouping them together in this way simplifies and - * speeds up task scanning. - * - * All worker thread creation is on-demand, triggered by task - * submissions, replacement of terminated workers, and/or - * compensation for blocked workers. However, all other support - * code is set up to work with other policies. To ensure that we - * do not hold on to worker references that would prevent GC, ALL - * accesses to workQueues are via indices into the workQueues - * array (which is one source of some of the messy code - * constructions here). In essence, the workQueues array serves as - * a weak reference mechanism. Thus for example the wait queue - * field of ctl stores indices, not references. Access to the - * workQueues in associated methods (for example signalWork) must - * both index-check and null-check the IDs. All such accesses - * ignore bad IDs by returning out early from what they are doing, - * since this can only be associated with termination, in which - * case it is OK to give up. All uses of the workQueues array - * also check that it is non-null (even if previously - * non-null). This allows nulling during termination, which is - * currently not necessary, but remains an option for - * resource-revocation-based shutdown schemes. It also helps - * reduce JIT issuance of uncommon-trap code, which tends to - * unnecessarily complicate control flow in some methods. - * - * Event Queuing. Unlike HPC work-stealing frameworks, we cannot - * let workers spin indefinitely scanning for tasks when none can - * be found immediately, and we cannot start/resume workers unless - * there appear to be tasks available. On the other hand, we must - * quickly prod them into action when new tasks are submitted or - * generated. In many usages, ramp-up time to activate workers is - * the main limiting factor in overall performance (this is - * compounded at program start-up by JIT compilation and - * allocation). So we try to streamline this as much as possible. - * We park/unpark workers after placing in an event wait queue - * when they cannot find work. This "queue" is actually a simple - * Treiber stack, headed by the "id" field of ctl, plus a 15bit - * counter value (that reflects the number of times a worker has - * been inactivated) to avoid ABA effects (we need only as many - * version numbers as worker threads). Successors are held in - * field WorkQueue.nextWait. Queuing deals with several intrinsic - * races, mainly that a task-producing thread can miss seeing (and - * signalling) another thread that gave up looking for work but - * has not yet entered the wait queue. We solve this by requiring - * a full sweep of all workers (via repeated calls to method - * scan()) both before and after a newly waiting worker is added - * to the wait queue. During a rescan, the worker might release - * some other queued worker rather than itself, which has the same - * net effect. Because enqueued workers may actually be rescanning - * rather than waiting, we set and clear the "parker" field of - * WorkQueues to reduce unnecessary calls to unpark. (This - * requires a secondary recheck to avoid missed signals.) Note - * the unusual conventions about Thread.interrupts surrounding - * parking and other blocking: Because interrupts are used solely - * to alert threads to check termination, which is checked anyway - * upon blocking, we clear status (using Thread.interrupted) - * before any call to park, so that park does not immediately - * return due to status being set via some other unrelated call to - * interrupt in user code. - * - * Signalling. We create or wake up workers only when there - * appears to be at least one task they might be able to find and - * execute. However, many other threads may notice the same task - * and each signal to wake up a thread that might take it. So in - * general, pools will be over-signalled. When a submission is - * added or another worker adds a task to a queue that has fewer - * than two tasks, they signal waiting workers (or trigger - * creation of new ones if fewer than the given parallelism level - * -- signalWork), and may leave a hint to the unparked worker to - * help signal others upon wakeup). These primary signals are - * buttressed by others (see method helpSignal) whenever other - * threads scan for work or do not have a task to process. On - * most platforms, signalling (unpark) overhead time is noticeably - * long, and the time between signalling a thread and it actually - * making progress can be very noticeably long, so it is worth - * offloading these delays from critical paths as much as - * possible. - * - * Trimming workers. To release resources after periods of lack of - * use, a worker starting to wait when the pool is quiescent will - * time out and terminate if the pool has remained quiescent for a - * given period -- a short period if there are more threads than - * parallelism, longer as the number of threads decreases. This - * will slowly propagate, eventually terminating all workers after - * periods of non-use. - * - * Shutdown and Termination. A call to shutdownNow atomically sets - * a plock bit and then (non-atomically) sets each worker's - * qlock status, cancels all unprocessed tasks, and wakes up - * all waiting workers. Detecting whether termination should - * commence after a non-abrupt shutdown() call requires more work - * and bookkeeping. We need consensus about quiescence (i.e., that - * there is no more work). The active count provides a primary - * indication but non-abrupt shutdown still requires a rechecking - * scan for any workers that are inactive but not queued. - * - * Joining Tasks - * ============= - * - * Any of several actions may be taken when one worker is waiting - * to join a task stolen (or always held) by another. Because we - * are multiplexing many tasks on to a pool of workers, we can't - * just let them block (as in Thread.join). We also cannot just - * reassign the joiner's run-time stack with another and replace - * it later, which would be a form of "continuation", that even if - * possible is not necessarily a good idea since we sometimes need - * both an unblocked task and its continuation to progress. - * Instead we combine two tactics: - * - * Helping: Arranging for the joiner to execute some task that it - * would be running if the steal had not occurred. - * - * Compensating: Unless there are already enough live threads, - * method tryCompensate() may create or re-activate a spare - * thread to compensate for blocked joiners until they unblock. - * - * A third form (implemented in tryRemoveAndExec) amounts to - * helping a hypothetical compensator: If we can readily tell that - * a possible action of a compensator is to steal and execute the - * task being joined, the joining thread can do so directly, - * without the need for a compensation thread (although at the - * expense of larger run-time stacks, but the tradeoff is - * typically worthwhile). - * - * The ManagedBlocker extension API can't use helping so relies - * only on compensation in method awaitBlocker. - * - * The algorithm in tryHelpStealer entails a form of "linear" - * helping: Each worker records (in field currentSteal) the most - * recent task it stole from some other worker. Plus, it records - * (in field currentJoin) the task it is currently actively - * joining. Method tryHelpStealer uses these markers to try to - * find a worker to help (i.e., steal back a task from and execute - * it) that could hasten completion of the actively joined task. - * In essence, the joiner executes a task that would be on its own - * local deque had the to-be-joined task not been stolen. This may - * be seen as a conservative variant of the approach in Wagner & - * Calder "Leapfrogging: a portable technique for implementing - * efficient futures" SIGPLAN Notices, 1993 - * (http://portal.acm.org/citation.cfm?id=155354). It differs in - * that: (1) We only maintain dependency links across workers upon - * steals, rather than use per-task bookkeeping. This sometimes - * requires a linear scan of workQueues array to locate stealers, - * but often doesn't because stealers leave hints (that may become - * stale/wrong) of where to locate them. It is only a hint - * because a worker might have had multiple steals and the hint - * records only one of them (usually the most current). Hinting - * isolates cost to when it is needed, rather than adding to - * per-task overhead. (2) It is "shallow", ignoring nesting and - * potentially cyclic mutual steals. (3) It is intentionally - * racy: field currentJoin is updated only while actively joining, - * which means that we miss links in the chain during long-lived - * tasks, GC stalls etc (which is OK since blocking in such cases - * is usually a good idea). (4) We bound the number of attempts - * to find work (see MAX_HELP) and fall back to suspending the - * worker and if necessary replacing it with another. - * - * Helping actions for CountedCompleters are much simpler: Method - * helpComplete can take and execute any task with the same root - * as the task being waited on. However, this still entails some - * traversal of completer chains, so is less efficient than using - * CountedCompleters without explicit joins. - * - * It is impossible to keep exactly the target parallelism number - * of threads running at any given time. Determining the - * existence of conservatively safe helping targets, the - * availability of already-created spares, and the apparent need - * to create new spares are all racy, so we rely on multiple - * retries of each. Compensation in the apparent absence of - * helping opportunities is challenging to control on JVMs, where - * GC and other activities can stall progress of tasks that in - * turn stall out many other dependent tasks, without us being - * able to determine whether they will ever require compensation. - * Even though work-stealing otherwise encounters little - * degradation in the presence of more threads than cores, - * aggressively adding new threads in such cases entails risk of - * unwanted positive feedback control loops in which more threads - * cause more dependent stalls (as well as delayed progress of - * unblocked threads to the point that we know they are available) - * leading to more situations requiring more threads, and so - * on. This aspect of control can be seen as an (analytically - * intractable) game with an opponent that may choose the worst - * (for us) active thread to stall at any time. We take several - * precautions to bound losses (and thus bound gains), mainly in - * methods tryCompensate and awaitJoin. - * - * Common Pool - * =========== - * - * The static common Pool always exists after static - * initialization. Since it (or any other created pool) need - * never be used, we minimize initial construction overhead and - * footprint to the setup of about a dozen fields, with no nested - * allocation. Most bootstrapping occurs within method - * fullExternalPush during the first submission to the pool. - * - * When external threads submit to the common pool, they can - * perform some subtask processing (see externalHelpJoin and - * related methods). We do not need to record whether these - * submissions are to the common pool -- if not, externalHelpJoin - * returns quickly (at the most helping to signal some common pool - * workers). These submitters would otherwise be blocked waiting - * for completion, so the extra effort (with liberally sprinkled - * task status checks) in inapplicable cases amounts to an odd - * form of limited spin-wait before blocking in ForkJoinTask.join. - * - * Style notes - * =========== - * - * There is a lot of representation-level coupling among classes - * ForkJoinPool, ForkJoinWorkerThread, and ForkJoinTask. The - * fields of WorkQueue maintain data structures managed by - * ForkJoinPool, so are directly accessed. There is little point - * trying to reduce this, since any associated future changes in - * representations will need to be accompanied by algorithmic - * changes anyway. Several methods intrinsically sprawl because - * they must accumulate sets of consistent reads of volatiles held - * in local variables. Methods signalWork() and scan() are the - * main bottlenecks, so are especially heavily - * micro-optimized/mangled. There are lots of inline assignments - * (of form "while ((local = field) != 0)") which are usually the - * simplest way to ensure the required read orderings (which are - * sometimes critical). This leads to a "C"-like style of listing - * declarations of these locals at the heads of methods or blocks. - * There are several occurrences of the unusual "do {} while - * (!cas...)" which is the simplest way to force an update of a - * CAS'ed variable. There are also other coding oddities (including - * several unnecessary-looking hoisted null checks) that help - * some methods perform reasonably even when interpreted (not - * compiled). - * - * The order of declarations in this file is: - * (1) Static utility functions - * (2) Nested (static) classes - * (3) Static fields - * (4) Fields, along with constants used when unpacking some of them - * (5) Internal control methods - * (6) Callbacks and other support for ForkJoinTask methods - * (7) Exported methods - * (8) Static block initializing statics in minimally dependent order - */ - - // Static utilities - - /** - * If there is a security manager, makes sure caller has - * permission to modify threads. - */ - private static void checkPermission() { - SecurityManager security = System.getSecurityManager(); - if (security != null) - security.checkPermission(modifyThreadPermission); - } - - // Nested classes - - /** - * Factory for creating new {@link ForkJoinWorkerThread}s. - * A {@code ForkJoinWorkerThreadFactory} must be defined and used - * for {@code ForkJoinWorkerThread} subclasses that extend base - * functionality or initialize threads with different contexts. - */ - public static interface ForkJoinWorkerThreadFactory { - /** - * Returns a new worker thread operating in the given pool. - * - * @param pool the pool this thread works in - * @throws NullPointerException if the pool is null - */ - public ForkJoinWorkerThread newThread(ForkJoinPool pool); - } - - /** - * Default ForkJoinWorkerThreadFactory implementation; creates a - * new ForkJoinWorkerThread. - */ - static final class DefaultForkJoinWorkerThreadFactory - implements ForkJoinWorkerThreadFactory { - public final ForkJoinWorkerThread newThread(ForkJoinPool pool) { - return new ForkJoinWorkerThread(pool); - } - } - - /** - * Per-thread records for threads that submit to pools. Currently - * holds only pseudo-random seed / index that is used to choose - * submission queues in method externalPush. In the future, this may - * also incorporate a means to implement different task rejection - * and resubmission policies. - * - * Seeds for submitters and workers/workQueues work in basically - * the same way but are initialized and updated using slightly - * different mechanics. Both are initialized using the same - * approach as in class ThreadLocal, where successive values are - * unlikely to collide with previous values. Seeds are then - * randomly modified upon collisions using xorshifts, which - * requires a non-zero seed. - */ - static final class Submitter { - int seed; - Submitter(int s) { seed = s; } - } - - /** - * Class for artificial tasks that are used to replace the target - * of local joins if they are removed from an interior queue slot - * in WorkQueue.tryRemoveAndExec. We don't need the proxy to - * actually do anything beyond having a unique identity. - */ - static final class EmptyTask extends ForkJoinTask<Void> { - private static final long serialVersionUID = -7721805057305804111L; - EmptyTask() { status = ForkJoinTask.NORMAL; } // force done - public final Void getRawResult() { return null; } - public final void setRawResult(Void x) {} - public final boolean exec() { return true; } - } - - /** - * Queues supporting work-stealing as well as external task - * submission. See above for main rationale and algorithms. - * Implementation relies heavily on "Unsafe" intrinsics - * and selective use of "volatile": - * - * Field "base" is the index (mod array.length) of the least valid - * queue slot, which is always the next position to steal (poll) - * from if nonempty. Reads and writes require volatile orderings - * but not CAS, because updates are only performed after slot - * CASes. - * - * Field "top" is the index (mod array.length) of the next queue - * slot to push to or pop from. It is written only by owner thread - * for push, or under lock for external/shared push, and accessed - * by other threads only after reading (volatile) base. Both top - * and base are allowed to wrap around on overflow, but (top - - * base) (or more commonly -(base - top) to force volatile read of - * base before top) still estimates size. The lock ("qlock") is - * forced to -1 on termination, causing all further lock attempts - * to fail. (Note: we don't need CAS for termination state because - * upon pool shutdown, all shared-queues will stop being used - * anyway.) Nearly all lock bodies are set up so that exceptions - * within lock bodies are "impossible" (modulo JVM errors that - * would cause failure anyway.) - * - * The array slots are read and written using the emulation of - * volatiles/atomics provided by Unsafe. Insertions must in - * general use putOrderedObject as a form of releasing store to - * ensure that all writes to the task object are ordered before - * its publication in the queue. All removals entail a CAS to - * null. The array is always a power of two. To ensure safety of - * Unsafe array operations, all accesses perform explicit null - * checks and implicit bounds checks via power-of-two masking. - * - * In addition to basic queuing support, this class contains - * fields described elsewhere to control execution. It turns out - * to work better memory-layout-wise to include them in this class - * rather than a separate class. - * - * Performance on most platforms is very sensitive to placement of - * instances of both WorkQueues and their arrays -- we absolutely - * do not want multiple WorkQueue instances or multiple queue - * arrays sharing cache lines. (It would be best for queue objects - * and their arrays to share, but there is nothing available to - * help arrange that). Unfortunately, because they are recorded - * in a common array, WorkQueue instances are often moved to be - * adjacent by garbage collectors. To reduce impact, we use field - * padding that works OK on common platforms; this effectively - * trades off slightly slower average field access for the sake of - * avoiding really bad worst-case access. (Until better JVM - * support is in place, this padding is dependent on transient - * properties of JVM field layout rules.) We also take care in - * allocating, sizing and resizing the array. Non-shared queue - * arrays are initialized by workers before use. Others are - * allocated on first use. - */ - static final class WorkQueue { - /** - * Capacity of work-stealing queue array upon initialization. - * Must be a power of two; at least 4, but should be larger to - * reduce or eliminate cacheline sharing among queues. - * Currently, it is much larger, as a partial workaround for - * the fact that JVMs often place arrays in locations that - * share GC bookkeeping (especially cardmarks) such that - * per-write accesses encounter serious memory contention. - */ - static final int INITIAL_QUEUE_CAPACITY = 1 << 13; - - /** - * Maximum size for queue arrays. Must be a power of two less - * than or equal to 1 << (31 - width of array entry) to ensure - * lack of wraparound of index calculations, but defined to a - * value a bit less than this to help users trap runaway - * programs before saturating systems. - */ - static final int MAXIMUM_QUEUE_CAPACITY = 1 << 26; // 64M - - // Heuristic padding to ameliorate unfortunate memory placements - volatile long pad00, pad01, pad02, pad03, pad04, pad05, pad06; - - int seed; // for random scanning; initialize nonzero - volatile int eventCount; // encoded inactivation count; < 0 if inactive - int nextWait; // encoded record of next event waiter - int hint; // steal or signal hint (index) - int poolIndex; // index of this queue in pool (or 0) - final int mode; // 0: lifo, > 0: fifo, < 0: shared - int nsteals; // number of steals - volatile int qlock; // 1: locked, -1: terminate; else 0 - volatile int base; // index of next slot for poll - int top; // index of next slot for push - ForkJoinTask<?>[] array; // the elements (initially unallocated) - final ForkJoinPool pool; // the containing pool (may be null) - final ForkJoinWorkerThread owner; // owning thread or null if shared - volatile Thread parker; // == owner during call to park; else null - volatile ForkJoinTask<?> currentJoin; // task being joined in awaitJoin - ForkJoinTask<?> currentSteal; // current non-local task being executed - - volatile Object pad10, pad11, pad12, pad13, pad14, pad15, pad16, pad17; - volatile Object pad18, pad19, pad1a, pad1b, pad1c, pad1d; - - WorkQueue(ForkJoinPool pool, ForkJoinWorkerThread owner, int mode, - int seed) { - this.pool = pool; - this.owner = owner; - this.mode = mode; - this.seed = seed; - // Place indices in the center of array (that is not yet allocated) - base = top = INITIAL_QUEUE_CAPACITY >>> 1; - } - - /** - * Returns the approximate number of tasks in the queue. - */ - final int queueSize() { - int n = base - top; // non-owner callers must read base first - return (n >= 0) ? 0 : -n; // ignore transient negative - } - - /** - * Provides a more accurate estimate of whether this queue has - * any tasks than does queueSize, by checking whether a - * near-empty queue has at least one unclaimed task. - */ - final boolean isEmpty() { - ForkJoinTask<?>[] a; int m, s; - int n = base - (s = top); - return (n >= 0 || - (n == -1 && - ((a = array) == null || - (m = a.length - 1) < 0 || - U.getObject - (a, (long)((m & (s - 1)) << ASHIFT) + ABASE) == null))); - } - - /** - * Pushes a task. Call only by owner in unshared queues. (The - * shared-queue version is embedded in method externalPush.) - * - * @param task the task. Caller must ensure non-null. - * @throws RejectedExecutionException if array cannot be resized - */ - final void push(ForkJoinTask<?> task) { - ForkJoinTask<?>[] a; ForkJoinPool p; - int s = top, m, n; - if ((a = array) != null) { // ignore if queue removed - int j = (((m = a.length - 1) & s) << ASHIFT) + ABASE; - U.putOrderedObject(a, j, task); - if ((n = (top = s + 1) - base) <= 2) { - if ((p = pool) != null) - p.signalWork(this); - } - else if (n >= m) - growArray(); - } - } - - /** - * Initializes or doubles the capacity of array. Call either - * by owner or with lock held -- it is OK for base, but not - * top, to move while resizings are in progress. - */ - final ForkJoinTask<?>[] growArray() { - ForkJoinTask<?>[] oldA = array; - int size = oldA != null ? oldA.length << 1 : INITIAL_QUEUE_CAPACITY; - if (size > MAXIMUM_QUEUE_CAPACITY) - throw new RejectedExecutionException("Queue capacity exceeded"); - int oldMask, t, b; - ForkJoinTask<?>[] a = array = new ForkJoinTask<?>[size]; - if (oldA != null && (oldMask = oldA.length - 1) >= 0 && - (t = top) - (b = base) > 0) { - int mask = size - 1; - do { - ForkJoinTask<?> x; - int oldj = ((b & oldMask) << ASHIFT) + ABASE; - int j = ((b & mask) << ASHIFT) + ABASE; - x = (ForkJoinTask<?>)U.getObjectVolatile(oldA, oldj); - if (x != null && - U.compareAndSwapObject(oldA, oldj, x, null)) - U.putObjectVolatile(a, j, x); - } while (++b != t); - } - return a; - } - - /** - * Takes next task, if one exists, in LIFO order. Call only - * by owner in unshared queues. - */ - final ForkJoinTask<?> pop() { - ForkJoinTask<?>[] a; ForkJoinTask<?> t; int m; - if ((a = array) != null && (m = a.length - 1) >= 0) { - for (int s; (s = top - 1) - base >= 0;) { - long j = ((m & s) << ASHIFT) + ABASE; - if ((t = (ForkJoinTask<?>)U.getObject(a, j)) == null) - break; - if (U.compareAndSwapObject(a, j, t, null)) { - top = s; - return t; - } - } - } - return null; - } - - /** - * Takes a task in FIFO order if b is base of queue and a task - * can be claimed without contention. Specialized versions - * appear in ForkJoinPool methods scan and tryHelpStealer. - */ - final ForkJoinTask<?> pollAt(int b) { - ForkJoinTask<?> t; ForkJoinTask<?>[] a; - if ((a = array) != null) { - int j = (((a.length - 1) & b) << ASHIFT) + ABASE; - if ((t = (ForkJoinTask<?>)U.getObjectVolatile(a, j)) != null && - base == b && - U.compareAndSwapObject(a, j, t, null)) { - base = b + 1; - return t; - } - } - return null; - } - - /** - * Takes next task, if one exists, in FIFO order. - */ - final ForkJoinTask<?> poll() { - ForkJoinTask<?>[] a; int b; ForkJoinTask<?> t; - while ((b = base) - top < 0 && (a = array) != null) { - int j = (((a.length - 1) & b) << ASHIFT) + ABASE; - t = (ForkJoinTask<?>)U.getObjectVolatile(a, j); - if (t != null) { - if (base == b && - U.compareAndSwapObject(a, j, t, null)) { - base = b + 1; - return t; - } - } - else if (base == b) { - if (b + 1 == top) - break; - Thread.yield(); // wait for lagging update (very rare) - } - } - return null; - } - - /** - * Takes next task, if one exists, in order specified by mode. - */ - final ForkJoinTask<?> nextLocalTask() { - return mode == 0 ? pop() : poll(); - } - - /** - * Returns next task, if one exists, in order specified by mode. - */ - final ForkJoinTask<?> peek() { - ForkJoinTask<?>[] a = array; int m; - if (a == null || (m = a.length - 1) < 0) - return null; - int i = mode == 0 ? top - 1 : base; - int j = ((i & m) << ASHIFT) + ABASE; - return (ForkJoinTask<?>)U.getObjectVolatile(a, j); - } - - /** - * Pops the given task only if it is at the current top. - * (A shared version is available only via FJP.tryExternalUnpush) - */ - final boolean tryUnpush(ForkJoinTask<?> t) { - ForkJoinTask<?>[] a; int s; - if ((a = array) != null && (s = top) != base && - U.compareAndSwapObject - (a, (((a.length - 1) & --s) << ASHIFT) + ABASE, t, null)) { - top = s; - return true; - } - return false; - } - - /** - * Removes and cancels all known tasks, ignoring any exceptions. - */ - final void cancelAll() { - ForkJoinTask.cancelIgnoringExceptions(currentJoin); - ForkJoinTask.cancelIgnoringExceptions(currentSteal); - for (ForkJoinTask<?> t; (t = poll()) != null; ) - ForkJoinTask.cancelIgnoringExceptions(t); - } - - /** - * Computes next value for random probes. Scans don't require - * a very high quality generator, but also not a crummy one. - * Marsaglia xor-shift is cheap and works well enough. Note: - * This is manually inlined in its usages in ForkJoinPool to - * avoid writes inside busy scan loops. - */ - final int nextSeed() { - int r = seed; - r ^= r << 13; - r ^= r >>> 17; - return seed = r ^= r << 5; - } - - // Specialized execution methods - - /** - * Pops and runs tasks until empty. - */ - private void popAndExecAll() { - // A bit faster than repeated pop calls - ForkJoinTask<?>[] a; int m, s; long j; ForkJoinTask<?> t; - while ((a = array) != null && (m = a.length - 1) >= 0 && - (s = top - 1) - base >= 0 && - (t = ((ForkJoinTask<?>) - U.getObject(a, j = ((m & s) << ASHIFT) + ABASE))) - != null) { - if (U.compareAndSwapObject(a, j, t, null)) { - top = s; - t.doExec(); - } - } - } - - /** - * Polls and runs tasks until empty. - */ - private void pollAndExecAll() { - for (ForkJoinTask<?> t; (t = poll()) != null;) - t.doExec(); - } - - /** - * If present, removes from queue and executes the given task, - * or any other cancelled task. Returns (true) on any CAS - * or consistency check failure so caller can retry. - * - * @return false if no progress can be made, else true - */ - final boolean tryRemoveAndExec(ForkJoinTask<?> task) { - boolean stat = true, removed = false, empty = true; - ForkJoinTask<?>[] a; int m, s, b, n; - if ((a = array) != null && (m = a.length - 1) >= 0 && - (n = (s = top) - (b = base)) > 0) { - for (ForkJoinTask<?> t;;) { // traverse from s to b - int j = ((--s & m) << ASHIFT) + ABASE; - t = (ForkJoinTask<?>)U.getObjectVolatile(a, j); - if (t == null) // inconsistent length - break; - else if (t == task) { - if (s + 1 == top) { // pop - if (!U.compareAndSwapObject(a, j, task, null)) - break; - top = s; - removed = true; - } - else if (base == b) // replace with proxy - removed = U.compareAndSwapObject(a, j, task, - new EmptyTask()); - break; - } - else if (t.status >= 0) - empty = false; - else if (s + 1 == top) { // pop and throw away - if (U.compareAndSwapObject(a, j, t, null)) - top = s; - break; - } - if (--n == 0) { - if (!empty && base == b) - stat = false; - break; - } - } - } - if (removed) - task.doExec(); - return stat; - } - - /** - * Polls for and executes the given task or any other task in - * its CountedCompleter computation. - */ - final boolean pollAndExecCC(ForkJoinTask<?> root) { - ForkJoinTask<?>[] a; int b; Object o; - outer: while ((b = base) - top < 0 && (a = array) != null) { - long j = (((a.length - 1) & b) << ASHIFT) + ABASE; - if ((o = U.getObject(a, j)) == null || - !(o instanceof CountedCompleter)) - break; - for (CountedCompleter<?> t = (CountedCompleter<?>)o, r = t;;) { - if (r == root) { - if (base == b && - U.compareAndSwapObject(a, j, t, null)) { - base = b + 1; - t.doExec(); - return true; - } - else - break; // restart - } - if ((r = r.completer) == null) - break outer; // not part of root computation - } - } - return false; - } - - /** - * Executes a top-level task and any local tasks remaining - * after execution. - */ - final void runTask(ForkJoinTask<?> t) { - if (t != null) { - (currentSteal = t).doExec(); - currentSteal = null; - ++nsteals; - if (base - top < 0) { // process remaining local tasks - if (mode == 0) - popAndExecAll(); - else - pollAndExecAll(); - } - } - } - - /** - * Executes a non-top-level (stolen) task. - */ - final void runSubtask(ForkJoinTask<?> t) { - if (t != null) { - ForkJoinTask<?> ps = currentSteal; - (currentSteal = t).doExec(); - currentSteal = ps; - } - } - - /** - * Returns true if owned and not known to be blocked. - */ - final boolean isApparentlyUnblocked() { - Thread wt; Thread.State s; - return (eventCount >= 0 && - (wt = owner) != null && - (s = wt.getState()) != Thread.State.BLOCKED && - s != Thread.State.WAITING && - s != Thread.State.TIMED_WAITING); - } - - // Unsafe mechanics - private static final sun.misc.Unsafe U; - private static final long QLOCK; - private static final int ABASE; - private static final int ASHIFT; - static { - try { - U = getUnsafe(); - Class<?> k = WorkQueue.class; - Class<?> ak = ForkJoinTask[].class; - QLOCK = U.objectFieldOffset - (k.getDeclaredField("qlock")); - ABASE = U.arrayBaseOffset(ak); - int scale = U.arrayIndexScale(ak); - if ((scale & (scale - 1)) != 0) - throw new Error("data type scale not a power of two"); - ASHIFT = 31 - Integer.numberOfLeadingZeros(scale); - } catch (Exception e) { - throw new Error(e); - } - } - } - - // static fields (initialized in static initializer below) - - /** - * Creates a new ForkJoinWorkerThread. This factory is used unless - * overridden in ForkJoinPool constructors. - */ - public static final ForkJoinWorkerThreadFactory - defaultForkJoinWorkerThreadFactory; - - /** - * Per-thread submission bookkeeping. Shared across all pools - * to reduce ThreadLocal pollution and because random motion - * to avoid contention in one pool is likely to hold for others. - * Lazily initialized on first submission (but null-checked - * in other contexts to avoid unnecessary initialization). - */ - static final ThreadLocal<Submitter> submitters; - - /** - * Permission required for callers of methods that may start or - * kill threads. - */ - private static final RuntimePermission modifyThreadPermission; - - /** - * Common (static) pool. Non-null for public use unless a static - * construction exception, but internal usages null-check on use - * to paranoically avoid potential initialization circularities - * as well as to simplify generated code. - */ - static final ForkJoinPool common; - - /** - * Common pool parallelism. Must equal common.parallelism. - */ - static final int commonParallelism; - - /** - * Sequence number for creating workerNamePrefix. - */ - private static int poolNumberSequence; - - /** - * Returns the next sequence number. We don't expect this to - * ever contend, so use simple builtin sync. - */ - private static final synchronized int nextPoolId() { - return ++poolNumberSequence; - } - - // static constants - - /** - * Initial timeout value (in nanoseconds) for the thread - * triggering quiescence to park waiting for new work. On timeout, - * the thread will instead try to shrink the number of - * workers. The value should be large enough to avoid overly - * aggressive shrinkage during most transient stalls (long GCs - * etc). - */ - private static final long IDLE_TIMEOUT = 2000L * 1000L * 1000L; // 2sec - - /** - * Timeout value when there are more threads than parallelism level - */ - private static final long FAST_IDLE_TIMEOUT = 200L * 1000L * 1000L; - - /** - * Tolerance for idle timeouts, to cope with timer undershoots - */ - private static final long TIMEOUT_SLOP = 2000000L; - - /** - * The maximum stolen->joining link depth allowed in method - * tryHelpStealer. Must be a power of two. Depths for legitimate - * chains are unbounded, but we use a fixed constant to avoid - * (otherwise unchecked) cycles and to bound staleness of - * traversal parameters at the expense of sometimes blocking when - * we could be helping. - */ - private static final int MAX_HELP = 64; - - /** - * Increment for seed generators. See class ThreadLocal for - * explanation. - */ - private static final int SEED_INCREMENT = 0x61c88647; - - /* - * Bits and masks for control variables - * - * Field ctl is a long packed with: - * AC: Number of active running workers minus target parallelism (16 bits) - * TC: Number of total workers minus target parallelism (16 bits) - * ST: true if pool is terminating (1 bit) - * EC: the wait count of top waiting thread (15 bits) - * ID: poolIndex of top of Treiber stack of waiters (16 bits) - * - * When convenient, we can extract the upper 32 bits of counts and - * the lower 32 bits of queue state, u = (int)(ctl >>> 32) and e = - * (int)ctl. The ec field is never accessed alone, but always - * together with id and st. The offsets of counts by the target - * parallelism and the positionings of fields makes it possible to - * perform the most common checks via sign tests of fields: When - * ac is negative, there are not enough active workers, when tc is - * negative, there are not enough total workers, and when e is - * negative, the pool is terminating. To deal with these possibly - * negative fields, we use casts in and out of "short" and/or - * signed shifts to maintain signedness. - * - * When a thread is queued (inactivated), its eventCount field is - * set negative, which is the only way to tell if a worker is - * prevented from executing tasks, even though it must continue to - * scan for them to avoid queuing races. Note however that - * eventCount updates lag releases so usage requires care. - * - * Field plock is an int packed with: - * SHUTDOWN: true if shutdown is enabled (1 bit) - * SEQ: a sequence lock, with PL_LOCK bit set if locked (30 bits) - * SIGNAL: set when threads may be waiting on the lock (1 bit) - * - * The sequence number enables simple consistency checks: - * Staleness of read-only operations on the workQueues array can - * be checked by comparing plock before vs after the reads. - */ - - // bit positions/shifts for fields - private static final int AC_SHIFT = 48; - private static final int TC_SHIFT = 32; - private static final int ST_SHIFT = 31; - private static final int EC_SHIFT = 16; - - // bounds - private static final int SMASK = 0xffff; // short bits - private static final int MAX_CAP = 0x7fff; // max #workers - 1 - private static final int EVENMASK = 0xfffe; // even short bits - private static final int SQMASK = 0x007e; // max 64 (even) slots - private static final int SHORT_SIGN = 1 << 15; - private static final int INT_SIGN = 1 << 31; - - // masks - private static final long STOP_BIT = 0x0001L << ST_SHIFT; - private static final long AC_MASK = ((long)SMASK) << AC_SHIFT; - private static final long TC_MASK = ((long)SMASK) << TC_SHIFT; - - // units for incrementing and decrementing - private static final long TC_UNIT = 1L << TC_SHIFT; - private static final long AC_UNIT = 1L << AC_SHIFT; - - // masks and units for dealing with u = (int)(ctl >>> 32) - private static final int UAC_SHIFT = AC_SHIFT - 32; - private static final int UTC_SHIFT = TC_SHIFT - 32; - private static final int UAC_MASK = SMASK << UAC_SHIFT; - private static final int UTC_MASK = SMASK << UTC_SHIFT; - private static final int UAC_UNIT = 1 << UAC_SHIFT; - private static final int UTC_UNIT = 1 << UTC_SHIFT; - - // masks and units for dealing with e = (int)ctl - private static final int E_MASK = 0x7fffffff; // no STOP_BIT - private static final int E_SEQ = 1 << EC_SHIFT; - - // plock bits - private static final int SHUTDOWN = 1 << 31; - private static final int PL_LOCK = 2; - private static final int PL_SIGNAL = 1; - private static final int PL_SPINS = 1 << 8; - - // access mode for WorkQueue - static final int LIFO_QUEUE = 0; - static final int FIFO_QUEUE = 1; - static final int SHARED_QUEUE = -1; - - // bounds for #steps in scan loop -- must be power 2 minus 1 - private static final int MIN_SCAN = 0x1ff; // cover estimation slop - private static final int MAX_SCAN = 0x1ffff; // 4 * max workers - - // Instance fields - - /* - * Field layout of this class tends to matter more than one would - * like. Runtime layout order is only loosely related to - * declaration order and may differ across JVMs, but the following - * empirically works OK on current JVMs. - */ - - // Heuristic padding to ameliorate unfortunate memory placements - volatile long pad00, pad01, pad02, pad03, pad04, pad05, pad06; - - volatile long stealCount; // collects worker counts - volatile long ctl; // main pool control - volatile int plock; // shutdown status and seqLock - volatile int indexSeed; // worker/submitter index seed - final int config; // mode and parallelism level - WorkQueue[] workQueues; // main registry - final ForkJoinWorkerThreadFactory factory; - final Thread.UncaughtExceptionHandler ueh; // per-worker UEH - final String workerNamePrefix; // to create worker name string - - volatile Object pad10, pad11, pad12, pad13, pad14, pad15, pad16, pad17; - volatile Object pad18, pad19, pad1a, pad1b; - - /** - * Acquires the plock lock to protect worker array and related - * updates. This method is called only if an initial CAS on plock - * fails. This acts as a spinlock for normal cases, but falls back - * to builtin monitor to block when (rarely) needed. This would be - * a terrible idea for a highly contended lock, but works fine as - * a more conservative alternative to a pure spinlock. - */ - private int acquirePlock() { - int spins = PL_SPINS, r = 0, ps, nps; - for (;;) { - if (((ps = plock) & PL_LOCK) == 0 && - U.compareAndSwapInt(this, PLOCK, ps, nps = ps + PL_LOCK)) - return nps; - else if (r == 0) { // randomize spins if possible - Thread t = Thread.currentThread(); WorkQueue w; Submitter z; - if ((t instanceof ForkJoinWorkerThread) && - (w = ((ForkJoinWorkerThread)t).workQueue) != null) - r = w.seed; - else if ((z = submitters.get()) != null) - r = z.seed; - else - r = 1; - } - else if (spins >= 0) { - r ^= r << 1; r ^= r >>> 3; r ^= r << 10; // xorshift - if (r >= 0) - --spins; - } - else if (U.compareAndSwapInt(this, PLOCK, ps, ps | PL_SIGNAL)) { - synchronized (this) { - if ((plock & PL_SIGNAL) != 0) { - try { - wait(); - } catch (InterruptedException ie) { - try { - Thread.currentThread().interrupt(); - } catch (SecurityException ignore) { - } - } - } - else - notifyAll(); - } - } - } - } - - /** - * Unlocks and signals any thread waiting for plock. Called only - * when CAS of seq value for unlock fails. - */ - private void releasePlock(int ps) { - plock = ps; - synchronized (this) { notifyAll(); } - } - - /** - * Tries to create and start one worker if fewer than target - * parallelism level exist. Adjusts counts etc on failure. - */ - private void tryAddWorker() { - long c; int u; - while ((u = (int)((c = ctl) >>> 32)) < 0 && - (u & SHORT_SIGN) != 0 && (int)c == 0) { - long nc = (long)(((u + UTC_UNIT) & UTC_MASK) | - ((u + UAC_UNIT) & UAC_MASK)) << 32; - if (U.compareAndSwapLong(this, CTL, c, nc)) { - ForkJoinWorkerThreadFactory fac; - Throwable ex = null; - ForkJoinWorkerThread wt = null; - try { - if ((fac = factory) != null && - (wt = fac.newThread(this)) != null) { - wt.start(); - break; - } - } catch (Throwable e) { - ex = e; - } - deregisterWorker(wt, ex); - break; - } - } - } - - // Registering and deregistering workers - - /** - * Callback from ForkJoinWorkerThread to establish and record its - * WorkQueue. To avoid scanning bias due to packing entries in - * front of the workQueues array, we treat the array as a simple - * power-of-two hash table using per-thread seed as hash, - * expanding as needed. - * - * @param wt the worker thread - * @return the worker's queue - */ - final WorkQueue registerWorker(ForkJoinWorkerThread wt) { - Thread.UncaughtExceptionHandler handler; WorkQueue[] ws; int s, ps; - wt.setDaemon(true); - if ((handler = ueh) != null) - wt.setUncaughtExceptionHandler(handler); - do {} while (!U.compareAndSwapInt(this, INDEXSEED, s = indexSeed, - s += SEED_INCREMENT) || - s == 0); // skip 0 - WorkQueue w = new WorkQueue(this, wt, config >>> 16, s); - if (((ps = plock) & PL_LOCK) != 0 || - !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK)) - ps = acquirePlock(); - int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN); - try { - if ((ws = workQueues) != null) { // skip if shutting down - int n = ws.length, m = n - 1; - int r = (s << 1) | 1; // use odd-numbered indices - if (ws[r &= m] != null) { // collision - int probes = 0; // step by approx half size - int step = (n <= 4) ? 2 : ((n >>> 1) & EVENMASK) + 2; - while (ws[r = (r + step) & m] != null) { - if (++probes >= n) { - workQueues = ws = Arrays.copyOf(ws, n <<= 1); - m = n - 1; - probes = 0; - } - } - } - w.eventCount = w.poolIndex = r; // volatile write orders - ws[r] = w; - } - } finally { - if (!U.compareAndSwapInt(this, PLOCK, ps, nps)) - releasePlock(nps); - } - wt.setName(workerNamePrefix.concat(Integer.toString(w.poolIndex))); - return w; - } - - /** - * Final callback from terminating worker, as well as upon failure - * to construct or start a worker. Removes record of worker from - * array, and adjusts counts. If pool is shutting down, tries to - * complete termination. - * - * @param wt the worker thread or null if construction failed - * @param ex the exception causing failure, or null if none - */ - final void deregisterWorker(ForkJoinWorkerThread wt, Throwable ex) { - WorkQueue w = null; - if (wt != null && (w = wt.workQueue) != null) { - int ps; - w.qlock = -1; // ensure set - long ns = w.nsteals, sc; // collect steal count - do {} while (!U.compareAndSwapLong(this, STEALCOUNT, - sc = stealCount, sc + ns)); - if (((ps = plock) & PL_LOCK) != 0 || - !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK)) - ps = acquirePlock(); - int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN); - try { - int idx = w.poolIndex; - WorkQueue[] ws = workQueues; - if (ws != null && idx >= 0 && idx < ws.length && ws[idx] == w) - ws[idx] = null; - } finally { - if (!U.compareAndSwapInt(this, PLOCK, ps, nps)) - releasePlock(nps); - } - } - - long c; // adjust ctl counts - do {} while (!U.compareAndSwapLong - (this, CTL, c = ctl, (((c - AC_UNIT) & AC_MASK) | - ((c - TC_UNIT) & TC_MASK) | - (c & ~(AC_MASK|TC_MASK))))); - - if (!tryTerminate(false, false) && w != null && w.array != null) { - w.cancelAll(); // cancel remaining tasks - WorkQueue[] ws; WorkQueue v; Thread p; int u, i, e; - while ((u = (int)((c = ctl) >>> 32)) < 0 && (e = (int)c) >= 0) { - if (e > 0) { // activate or create replacement - if ((ws = workQueues) == null || - (i = e & SMASK) >= ws.length || - (v = ws[i]) == null) - break; - long nc = (((long)(v.nextWait & E_MASK)) | - ((long)(u + UAC_UNIT) << 32)); - if (v.eventCount != (e | INT_SIGN)) - break; - if (U.compareAndSwapLong(this, CTL, c, nc)) { - v.eventCount = (e + E_SEQ) & E_MASK; - if ((p = v.parker) != null) - U.unpark(p); - break; - } - } - else { - if ((short)u < 0) - tryAddWorker(); - break; - } - } - } - if (ex == null) // help clean refs on way out - ForkJoinTask.helpExpungeStaleExceptions(); - else // rethrow - ForkJoinTask.rethrow(ex); - } - - // Submissions - - /** - * Unless shutting down, adds the given task to a submission queue - * at submitter's current queue index (modulo submission - * range). Only the most common path is directly handled in this - * method. All others are relayed to fullExternalPush. - * - * @param task the task. Caller must ensure non-null. - */ - final void externalPush(ForkJoinTask<?> task) { - WorkQueue[] ws; WorkQueue q; Submitter z; int m; ForkJoinTask<?>[] a; - if ((z = submitters.get()) != null && plock > 0 && - (ws = workQueues) != null && (m = (ws.length - 1)) >= 0 && - (q = ws[m & z.seed & SQMASK]) != null && - U.compareAndSwapInt(q, QLOCK, 0, 1)) { // lock - int b = q.base, s = q.top, n, an; - if ((a = q.array) != null && (an = a.length) > (n = s + 1 - b)) { - int j = (((an - 1) & s) << ASHIFT) + ABASE; - U.putOrderedObject(a, j, task); - q.top = s + 1; // push on to deque - q.qlock = 0; - if (n <= 2) - signalWork(q); - return; - } - q.qlock = 0; - } - fullExternalPush(task); - } - - /** - * Full version of externalPush. This method is called, among - * other times, upon the first submission of the first task to the - * pool, so must perform secondary initialization. It also - * detects first submission by an external thread by looking up - * its ThreadLocal, and creates a new shared queue if the one at - * index if empty or contended. The plock lock body must be - * exception-free (so no try/finally) so we optimistically - * allocate new queues outside the lock and throw them away if - * (very rarely) not needed. - * - * Secondary initialization occurs when plock is zero, to create - * workQueue array and set plock to a valid value. This lock body - * must also be exception-free. Because the plock seq value can - * eventually wrap around zero, this method harmlessly fails to - * reinitialize if workQueues exists, while still advancing plock. - */ - private void fullExternalPush(ForkJoinTask<?> task) { - int r = 0; // random index seed - for (Submitter z = submitters.get();;) { - WorkQueue[] ws; WorkQueue q; int ps, m, k; - if (z == null) { - if (U.compareAndSwapInt(this, INDEXSEED, r = indexSeed, - r += SEED_INCREMENT) && r != 0) - submitters.set(z = new Submitter(r)); - } - else if (r == 0) { // move to a different index - r = z.seed; - r ^= r << 13; // same xorshift as WorkQueues - r ^= r >>> 17; - z.seed = r ^ (r << 5); - } - else if ((ps = plock) < 0) - throw new RejectedExecutionException(); - else if (ps == 0 || (ws = workQueues) == null || - (m = ws.length - 1) < 0) { // initialize workQueues - int p = config & SMASK; // find power of two table size - int n = (p > 1) ? p - 1 : 1; // ensure at least 2 slots - n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; - n |= n >>> 8; n |= n >>> 16; n = (n + 1) << 1; - WorkQueue[] nws = ((ws = workQueues) == null || ws.length == 0 ? - new WorkQueue[n] : null); - if (((ps = plock) & PL_LOCK) != 0 || - !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK)) - ps = acquirePlock(); - if (((ws = workQueues) == null || ws.length == 0) && nws != null) - workQueues = nws; - int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN); - if (!U.compareAndSwapInt(this, PLOCK, ps, nps)) - releasePlock(nps); - } - else if ((q = ws[k = r & m & SQMASK]) != null) { - if (q.qlock == 0 && U.compareAndSwapInt(q, QLOCK, 0, 1)) { - ForkJoinTask<?>[] a = q.array; - int s = q.top; - boolean submitted = false; - try { // locked version of push - if ((a != null && a.length > s + 1 - q.base) || - (a = q.growArray()) != null) { // must presize - int j = (((a.length - 1) & s) << ASHIFT) + ABASE; - U.putOrderedObject(a, j, task); - q.top = s + 1; - submitted = true; - } - } finally { - q.qlock = 0; // unlock - } - if (submitted) { - signalWork(q); - return; - } - } - r = 0; // move on failure - } - else if (((ps = plock) & PL_LOCK) == 0) { // create new queue - q = new WorkQueue(this, null, SHARED_QUEUE, r); - if (((ps = plock) & PL_LOCK) != 0 || - !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK)) - ps = acquirePlock(); - if ((ws = workQueues) != null && k < ws.length && ws[k] == null) - ws[k] = q; - int nps = (ps & SHUTDOWN) | ((ps + PL_LOCK) & ~SHUTDOWN); - if (!U.compareAndSwapInt(this, PLOCK, ps, nps)) - releasePlock(nps); - } - else - r = 0; // try elsewhere while lock held - } - } - - // Maintaining ctl counts - - /** - * Increments active count; mainly called upon return from blocking. - */ - final void incrementActiveCount() { - long c; - do {} while (!U.compareAndSwapLong(this, CTL, c = ctl, c + AC_UNIT)); - } - - /** - * Tries to create or activate a worker if too few are active. - * - * @param q the (non-null) queue holding tasks to be signalled - */ - final void signalWork(WorkQueue q) { - int hint = q.poolIndex; - long c; int e, u, i, n; WorkQueue[] ws; WorkQueue w; Thread p; - while ((u = (int)((c = ctl) >>> 32)) < 0) { - if ((e = (int)c) > 0) { - if ((ws = workQueues) != null && ws.length > (i = e & SMASK) && - (w = ws[i]) != null && w.eventCount == (e | INT_SIGN)) { - long nc = (((long)(w.nextWait & E_MASK)) | - ((long)(u + UAC_UNIT) << 32)); - if (U.compareAndSwapLong(this, CTL, c, nc)) { - w.hint = hint; - w.eventCount = (e + E_SEQ) & E_MASK; - if ((p = w.parker) != null) - U.unpark(p); - break; - } - if (q.top - q.base <= 0) - break; - } - else - break; - } - else { - if ((short)u < 0) - tryAddWorker(); - break; - } - } - } - - // Scanning for tasks - - /** - * Top-level runloop for workers, called by ForkJoinWorkerThread.run. - */ - final void runWorker(WorkQueue w) { - w.growArray(); // allocate queue - do { w.runTask(scan(w)); } while (w.qlock >= 0); - } - - /** - * Scans for and, if found, returns one task, else possibly - * inactivates the worker. This method operates on single reads of - * volatile state and is designed to be re-invoked continuously, - * in part because it returns upon detecting inconsistencies, - * contention, or state changes that indicate possible success on - * re-invocation. - * - * The scan searches for tasks across queues (starting at a random - * index, and relying on registerWorker to irregularly scatter - * them within array to avoid bias), checking each at least twice. - * The scan terminates upon either finding a non-empty queue, or - * completing the sweep. If the worker is not inactivated, it - * takes and returns a task from this queue. Otherwise, if not - * activated, it signals workers (that may include itself) and - * returns so caller can retry. Also returns for true if the - * worker array may have changed during an empty scan. On failure - * to find a task, we take one of the following actions, after - * which the caller will retry calling this method unless - * terminated. - * - * * If pool is terminating, terminate the worker. - * - * * If not already enqueued, try to inactivate and enqueue the - * worker on wait queue. Or, if inactivating has caused the pool - * to be quiescent, relay to idleAwaitWork to possibly shrink - * pool. - * - * * If already enqueued and none of the above apply, possibly - * park awaiting signal, else lingering to help scan and signal. - * - * * If a non-empty queue discovered or left as a hint, - * help wake up other workers before return. - * - * @param w the worker (via its WorkQueue) - * @return a task or null if none found - */ - private final ForkJoinTask<?> scan(WorkQueue w) { - WorkQueue[] ws; int m; - int ps = plock; // read plock before ws - if (w != null && (ws = workQueues) != null && (m = ws.length - 1) >= 0) { - int ec = w.eventCount; // ec is negative if inactive - int r = w.seed; r ^= r << 13; r ^= r >>> 17; w.seed = r ^= r << 5; - w.hint = -1; // update seed and clear hint - int j = ((m + m + 1) | MIN_SCAN) & MAX_SCAN; - do { - WorkQueue q; ForkJoinTask<?>[] a; int b; - if ((q = ws[(r + j) & m]) != null && (b = q.base) - q.top < 0 && - (a = q.array) != null) { // probably nonempty - int i = (((a.length - 1) & b) << ASHIFT) + ABASE; - ForkJoinTask<?> t = (ForkJoinTask<?>) - U.getObjectVolatile(a, i); - if (q.base == b && ec >= 0 && t != null && - U.compareAndSwapObject(a, i, t, null)) { - if ((q.base = b + 1) - q.top < 0) - signalWork(q); - return t; // taken - } - else if ((ec < 0 || j < m) && (int)(ctl >> AC_SHIFT) <= 0) { - w.hint = (r + j) & m; // help signal below - break; // cannot take - } - } - } while (--j >= 0); - - int h, e, ns; long c, sc; WorkQueue q; - if ((ns = w.nsteals) != 0) { - if (U.compareAndSwapLong(this, STEALCOUNT, - sc = stealCount, sc + ns)) - w.nsteals = 0; // collect steals and rescan - } - else if (plock != ps) // consistency check - ; // skip - else if ((e = (int)(c = ctl)) < 0) - w.qlock = -1; // pool is terminating - else { - if ((h = w.hint) < 0) { - if (ec >= 0) { // try to enqueue/inactivate - long nc = (((long)ec | - ((c - AC_UNIT) & (AC_MASK|TC_MASK)))); - w.nextWait = e; // link and mark inactive - w.eventCount = ec | INT_SIGN; - if (ctl != c || !U.compareAndSwapLong(this, CTL, c, nc)) - w.eventCount = ec; // unmark on CAS failure - else if ((int)(c >> AC_SHIFT) == 1 - (config & SMASK)) - idleAwaitWork(w, nc, c); - } - else if (w.eventCount < 0 && ctl == c) { - Thread wt = Thread.currentThread(); - Thread.interrupted(); // clear status - U.putObject(wt, PARKBLOCKER, this); - w.parker = wt; // emulate LockSupport.park - if (w.eventCount < 0) // recheck - U.park(false, 0L); // block - w.parker = null; - U.putObject(wt, PARKBLOCKER, null); - } - } - if ((h >= 0 || (h = w.hint) >= 0) && - (ws = workQueues) != null && h < ws.length && - (q = ws[h]) != null) { // signal others before retry - WorkQueue v; Thread p; int u, i, s; - for (int n = (config & SMASK) - 1;;) { - int idleCount = (w.eventCount < 0) ? 0 : -1; - if (((s = idleCount - q.base + q.top) <= n && - (n = s) <= 0) || - (u = (int)((c = ctl) >>> 32)) >= 0 || - (e = (int)c) <= 0 || m < (i = e & SMASK) || - (v = ws[i]) == null) - break; - long nc = (((long)(v.nextWait & E_MASK)) | - ((long)(u + UAC_UNIT) << 32)); - if (v.eventCount != (e | INT_SIGN) || - !U.compareAndSwapLong(this, CTL, c, nc)) - break; - v.hint = h; - v.eventCount = (e + E_SEQ) & E_MASK; - if ((p = v.parker) != null) - U.unpark(p); - if (--n <= 0) - break; - } - } - } - } - return null; - } - - /** - * If inactivating worker w has caused the pool to become - * quiescent, checks for pool termination, and, so long as this is - * not the only worker, waits for event for up to a given - * duration. On timeout, if ctl has not changed, terminates the - * worker, which will in turn wake up another worker to possibly - * repeat this process. - * - * @param w the calling worker - * @param currentCtl the ctl value triggering possible quiescence - * @param prevCtl the ctl value to restore if thread is terminated - */ - private void idleAwaitWork(WorkQueue w, long currentCtl, long prevCtl) { - if (w != null && w.eventCount < 0 && - !tryTerminate(false, false) && (int)prevCtl != 0 && - ctl == currentCtl) { - int dc = -(short)(currentCtl >>> TC_SHIFT); - long parkTime = dc < 0 ? FAST_IDLE_TIMEOUT: (dc + 1) * IDLE_TIMEOUT; - long deadline = System.nanoTime() + parkTime - TIMEOUT_SLOP; - Thread wt = Thread.currentThread(); - while (ctl == currentCtl) { - Thread.interrupted(); // timed variant of version in scan() - U.putObject(wt, PARKBLOCKER, this); - w.parker = wt; - if (ctl == currentCtl) - U.park(false, parkTime); - w.parker = null; - U.putObject(wt, PARKBLOCKER, null); - if (ctl != currentCtl) - break; - if (deadline - System.nanoTime() <= 0L && - U.compareAndSwapLong(this, CTL, currentCtl, prevCtl)) { - w.eventCount = (w.eventCount + E_SEQ) | E_MASK; - w.hint = -1; - w.qlock = -1; // shrink - break; - } - } - } - } - - /** - * Scans through queues looking for work while joining a task; if - * any present, signals. May return early if more signalling is - * detectably unneeded. - * - * @param task return early if done - * @param origin an index to start scan - */ - private void helpSignal(ForkJoinTask<?> task, int origin) { - WorkQueue[] ws; WorkQueue w; Thread p; long c; int m, u, e, i, s; - if (task != null && task.status >= 0 && - (u = (int)(ctl >>> 32)) < 0 && (u >> UAC_SHIFT) < 0 && - (ws = workQueues) != null && (m = ws.length - 1) >= 0) { - outer: for (int k = origin, j = m; j >= 0; --j) { - WorkQueue q = ws[k++ & m]; - for (int n = m;;) { // limit to at most m signals - if (task.status < 0) - break outer; - if (q == null || - ((s = -q.base + q.top) <= n && (n = s) <= 0)) - break; - if ((u = (int)((c = ctl) >>> 32)) >= 0 || - (e = (int)c) <= 0 || m < (i = e & SMASK) || - (w = ws[i]) == null) - break outer; - long nc = (((long)(w.nextWait & E_MASK)) | - ((long)(u + UAC_UNIT) << 32)); - if (w.eventCount != (e | INT_SIGN)) - break outer; - if (U.compareAndSwapLong(this, CTL, c, nc)) { - w.eventCount = (e + E_SEQ) & E_MASK; - if ((p = w.parker) != null) - U.unpark(p); - if (--n <= 0) - break; - } - } - } - } - } - - /** - * Tries to locate and execute tasks for a stealer of the given - * task, or in turn one of its stealers, Traces currentSteal -> - * currentJoin links looking for a thread working on a descendant - * of the given task and with a non-empty queue to steal back and - * execute tasks from. The first call to this method upon a - * waiting join will often entail scanning/search, (which is OK - * because the joiner has nothing better to do), but this method - * leaves hints in workers to speed up subsequent calls. The - * implementation is very branchy to cope with potential - * inconsistencies or loops encountering chains that are stale, - * unknown, or so long that they are likely cyclic. - * - * @param joiner the joining worker - * @param task the task to join - * @return 0 if no progress can be made, negative if task - * known complete, else positive - */ - private int tryHelpStealer(WorkQueue joiner, ForkJoinTask<?> task) { - int stat = 0, steps = 0; // bound to avoid cycles - if (joiner != null && task != null) { // hoist null checks - restart: for (;;) { - ForkJoinTask<?> subtask = task; // current target - for (WorkQueue j = joiner, v;;) { // v is stealer of subtask - WorkQueue[] ws; int m, s, h; - if ((s = task.status) < 0) { - stat = s; - break restart; - } - if ((ws = workQueues) == null || (m = ws.length - 1) <= 0) - break restart; // shutting down - if ((v = ws[h = (j.hint | 1) & m]) == null || - v.currentSteal != subtask) { - for (int origin = h;;) { // find stealer - if (((h = (h + 2) & m) & 15) == 1 && - (subtask.status < 0 || j.currentJoin != subtask)) - continue restart; // occasional staleness check - if ((v = ws[h]) != null && - v.currentSteal == subtask) { - j.hint = h; // save hint - break; - } - if (h == origin) - break restart; // cannot find stealer - } - } - for (;;) { // help stealer or descend to its stealer - ForkJoinTask[] a; int b; - if (subtask.status < 0) // surround probes with - continue restart; // consistency checks - if ((b = v.base) - v.top < 0 && (a = v.array) != null) { - int i = (((a.length - 1) & b) << ASHIFT) + ABASE; - ForkJoinTask<?> t = - (ForkJoinTask<?>)U.getObjectVolatile(a, i); - if (subtask.status < 0 || j.currentJoin != subtask || - v.currentSteal != subtask) - continue restart; // stale - stat = 1; // apparent progress - if (t != null && v.base == b && - U.compareAndSwapObject(a, i, t, null)) { - v.base = b + 1; // help stealer - joiner.runSubtask(t); - } - else if (v.base == b && ++steps == MAX_HELP) - break restart; // v apparently stalled - } - else { // empty -- try to descend - ForkJoinTask<?> next = v.currentJoin; - if (subtask.status < 0 || j.currentJoin != subtask || - v.currentSteal != subtask) - continue restart; // stale - else if (next == null || ++steps == MAX_HELP) - break restart; // dead-end or maybe cyclic - else { - subtask = next; - j = v; - break; - } - } - } - } - } - } - return stat; - } - - /** - * Analog of tryHelpStealer for CountedCompleters. Tries to steal - * and run tasks within the target's computation. - * - * @param task the task to join - * @param mode if shared, exit upon completing any task - * if all workers are active - */ - private int helpComplete(ForkJoinTask<?> task, int mode) { - WorkQueue[] ws; WorkQueue q; int m, n, s, u; - if (task != null && (ws = workQueues) != null && - (m = ws.length - 1) >= 0) { - for (int j = 1, origin = j;;) { - if ((s = task.status) < 0) - return s; - if ((q = ws[j & m]) != null && q.pollAndExecCC(task)) { - origin = j; - if (mode == SHARED_QUEUE && - ((u = (int)(ctl >>> 32)) >= 0 || (u >> UAC_SHIFT) >= 0)) - break; - } - else if ((j = (j + 2) & m) == origin) - break; - } - } - return 0; - } - - /** - * Tries to decrement active count (sometimes implicitly) and - * possibly release or create a compensating worker in preparation - * for blocking. Fails on contention or termination. Otherwise, - * adds a new thread if no idle workers are available and pool - * may become starved. - */ - final boolean tryCompensate() { - int pc = config & SMASK, e, i, tc; long c; - WorkQueue[] ws; WorkQueue w; Thread p; - if ((ws = workQueues) != null && (e = (int)(c = ctl)) >= 0) { - if (e != 0 && (i = e & SMASK) < ws.length && - (w = ws[i]) != null && w.eventCount == (e | INT_SIGN)) { - long nc = ((long)(w.nextWait & E_MASK) | - (c & (AC_MASK|TC_MASK))); - if (U.compareAndSwapLong(this, CTL, c, nc)) { - w.eventCount = (e + E_SEQ) & E_MASK; - if ((p = w.parker) != null) - U.unpark(p); - return true; // replace with idle worker - } - } - else if ((tc = (short)(c >>> TC_SHIFT)) >= 0 && - (int)(c >> AC_SHIFT) + pc > 1) { - long nc = ((c - AC_UNIT) & AC_MASK) | (c & ~AC_MASK); - if (U.compareAndSwapLong(this, CTL, c, nc)) - return true; // no compensation - } - else if (tc + pc < MAX_CAP) { - long nc = ((c + TC_UNIT) & TC_MASK) | (c & ~TC_MASK); - if (U.compareAndSwapLong(this, CTL, c, nc)) { - ForkJoinWorkerThreadFactory fac; - Throwable ex = null; - ForkJoinWorkerThread wt = null; - try { - if ((fac = factory) != null && - (wt = fac.newThread(this)) != null) { - wt.start(); - return true; - } - } catch (Throwable rex) { - ex = rex; - } - deregisterWorker(wt, ex); // clean up and return false - } - } - } - return false; - } - - /** - * Helps and/or blocks until the given task is done. - * - * @param joiner the joining worker - * @param task the task - * @return task status on exit - */ - final int awaitJoin(WorkQueue joiner, ForkJoinTask<?> task) { - int s = 0; - if (joiner != null && task != null && (s = task.status) >= 0) { - ForkJoinTask<?> prevJoin = joiner.currentJoin; - joiner.currentJoin = task; - do {} while ((s = task.status) >= 0 && !joiner.isEmpty() && - joiner.tryRemoveAndExec(task)); // process local tasks - if (s >= 0 && (s = task.status) >= 0) { - helpSignal(task, joiner.poolIndex); - if ((s = task.status) >= 0 && - (task instanceof CountedCompleter)) - s = helpComplete(task, LIFO_QUEUE); - } - while (s >= 0 && (s = task.status) >= 0) { - if ((!joiner.isEmpty() || // try helping - (s = tryHelpStealer(joiner, task)) == 0) && - (s = task.status) >= 0) { - helpSignal(task, joiner.poolIndex); - if ((s = task.status) >= 0 && tryCompensate()) { - if (task.trySetSignal() && (s = task.status) >= 0) { - synchronized (task) { - if (task.status >= 0) { - try { // see ForkJoinTask - task.wait(); // for explanation - } catch (InterruptedException ie) { - } - } - else - task.notifyAll(); - } - } - long c; // re-activate - do {} while (!U.compareAndSwapLong - (this, CTL, c = ctl, c + AC_UNIT)); - } - } - } - joiner.currentJoin = prevJoin; - } - return s; - } - - /** - * Stripped-down variant of awaitJoin used by timed joins. Tries - * to help join only while there is continuous progress. (Caller - * will then enter a timed wait.) - * - * @param joiner the joining worker - * @param task the task - */ - final void helpJoinOnce(WorkQueue joiner, ForkJoinTask<?> task) { - int s; - if (joiner != null && task != null && (s = task.status) >= 0) { - ForkJoinTask<?> prevJoin = joiner.currentJoin; - joiner.currentJoin = task; - do {} while ((s = task.status) >= 0 && !joiner.isEmpty() && - joiner.tryRemoveAndExec(task)); - if (s >= 0 && (s = task.status) >= 0) { - helpSignal(task, joiner.poolIndex); - if ((s = task.status) >= 0 && - (task instanceof CountedCompleter)) - s = helpComplete(task, LIFO_QUEUE); - } - if (s >= 0 && joiner.isEmpty()) { - do {} while (task.status >= 0 && - tryHelpStealer(joiner, task) > 0); - } - joiner.currentJoin = prevJoin; - } - } - - /** - * Returns a (probably) non-empty steal queue, if one is found - * during a scan, else null. This method must be retried by - * caller if, by the time it tries to use the queue, it is empty. - * @param r a (random) seed for scanning - */ - private WorkQueue findNonEmptyStealQueue(int r) { - for (;;) { - int ps = plock, m; WorkQueue[] ws; WorkQueue q; - if ((ws = workQueues) != null && (m = ws.length - 1) >= 0) { - for (int j = (m + 1) << 2; j >= 0; --j) { - if ((q = ws[(((r + j) << 1) | 1) & m]) != null && - q.base - q.top < 0) - return q; - } - } - if (plock == ps) - return null; - } - } - - /** - * Runs tasks until {@code isQuiescent()}. We piggyback on - * active count ctl maintenance, but rather than blocking - * when tasks cannot be found, we rescan until all others cannot - * find tasks either. - */ - final void helpQuiescePool(WorkQueue w) { - for (boolean active = true;;) { - long c; WorkQueue q; ForkJoinTask<?> t; int b; - while ((t = w.nextLocalTask()) != null) { - if (w.base - w.top < 0) - signalWork(w); - t.doExec(); - } - if ((q = findNonEmptyStealQueue(w.nextSeed())) != null) { - if (!active) { // re-establish active count - active = true; - do {} while (!U.compareAndSwapLong - (this, CTL, c = ctl, c + AC_UNIT)); - } - if ((b = q.base) - q.top < 0 && (t = q.pollAt(b)) != null) { - if (q.base - q.top < 0) - signalWork(q); - w.runSubtask(t); - } - } - else if (active) { // decrement active count without queuing - long nc = (c = ctl) - AC_UNIT; - if ((int)(nc >> AC_SHIFT) + (config & SMASK) == 0) - return; // bypass decrement-then-increment - if (U.compareAndSwapLong(this, CTL, c, nc)) - active = false; - } - else if ((int)((c = ctl) >> AC_SHIFT) + (config & SMASK) == 0 && - U.compareAndSwapLong(this, CTL, c, c + AC_UNIT)) - return; - } - } - - /** - * Gets and removes a local or stolen task for the given worker. - * - * @return a task, if available - */ - final ForkJoinTask<?> nextTaskFor(WorkQueue w) { - for (ForkJoinTask<?> t;;) { - WorkQueue q; int b; - if ((t = w.nextLocalTask()) != null) - return t; - if ((q = findNonEmptyStealQueue(w.nextSeed())) == null) - return null; - if ((b = q.base) - q.top < 0 && (t = q.pollAt(b)) != null) { - if (q.base - q.top < 0) - signalWork(q); - return t; - } - } - } - - /** - * Returns a cheap heuristic guide for task partitioning when - * programmers, frameworks, tools, or languages have little or no - * idea about task granularity. In essence by offering this - * method, we ask users only about tradeoffs in overhead vs - * expected throughput and its variance, rather than how finely to - * partition tasks. - * - * In a steady state strict (tree-structured) computation, each - * thread makes available for stealing enough tasks for other - * threads to remain active. Inductively, if all threads play by - * the same rules, each thread should make available only a - * constant number of tasks. - * - * The minimum useful constant is just 1. But using a value of 1 - * would require immediate replenishment upon each steal to - * maintain enough tasks, which is infeasible. Further, - * partitionings/granularities of offered tasks should minimize - * steal rates, which in general means that threads nearer the top - * of computation tree should generate more than those nearer the - * bottom. In perfect steady state, each thread is at - * approximately the same level of computation tree. However, - * producing extra tasks amortizes the uncertainty of progress and - * diffusion assumptions. - * - * So, users will want to use values larger (but not much larger) - * than 1 to both smooth over transient shortages and hedge - * against uneven progress; as traded off against the cost of - * extra task overhead. We leave the user to pick a threshold - * value to compare with the results of this call to guide - * decisions, but recommend values such as 3. - * - * When all threads are active, it is on average OK to estimate - * surplus strictly locally. In steady-state, if one thread is - * maintaining say 2 surplus tasks, then so are others. So we can - * just use estimated queue length. However, this strategy alone - * leads to serious mis-estimates in some non-steady-state - * conditions (ramp-up, ramp-down, other stalls). We can detect - * many of these by further considering the number of "idle" - * threads, that are known to have zero queued tasks, so - * compensate by a factor of (#idle/#active) threads. - * - * Note: The approximation of #busy workers as #active workers is - * not very good under current signalling scheme, and should be - * improved. - */ - static int getSurplusQueuedTaskCount() { - Thread t; ForkJoinWorkerThread wt; ForkJoinPool pool; WorkQueue q; - if (((t = Thread.currentThread()) instanceof ForkJoinWorkerThread)) { - int p = (pool = (wt = (ForkJoinWorkerThread)t).pool).config & SMASK; - int n = (q = wt.workQueue).top - q.base; - int a = (int)(pool.ctl >> AC_SHIFT) + p; - return n - (a > (p >>>= 1) ? 0 : - a > (p >>>= 1) ? 1 : - a > (p >>>= 1) ? 2 : - a > (p >>>= 1) ? 4 : - 8); - } - return 0; - } - - // Termination - - /** - * Possibly initiates and/or completes termination. The caller - * triggering termination runs three passes through workQueues: - * (0) Setting termination status, followed by wakeups of queued - * workers; (1) cancelling all tasks; (2) interrupting lagging - * threads (likely in external tasks, but possibly also blocked in - * joins). Each pass repeats previous steps because of potential - * lagging thread creation. - * - * @param now if true, unconditionally terminate, else only - * if no work and no active workers - * @param enable if true, enable shutdown when next possible - * @return true if now terminating or terminated - */ - private boolean tryTerminate(boolean now, boolean enable) { - int ps; - if (this == common) // cannot shut down - return false; - if ((ps = plock) >= 0) { // enable by setting plock - if (!enable) - return false; - if ((ps & PL_LOCK) != 0 || - !U.compareAndSwapInt(this, PLOCK, ps, ps += PL_LOCK)) - ps = acquirePlock(); - int nps = ((ps + PL_LOCK) & ~SHUTDOWN) | SHUTDOWN; - if (!U.compareAndSwapInt(this, PLOCK, ps, nps)) - releasePlock(nps); - } - for (long c;;) { - if (((c = ctl) & STOP_BIT) != 0) { // already terminating - if ((short)(c >>> TC_SHIFT) == -(config & SMASK)) { - synchronized (this) { - notifyAll(); // signal when 0 workers - } - } - return true; - } - if (!now) { // check if idle & no tasks - WorkQueue[] ws; WorkQueue w; - if ((int)(c >> AC_SHIFT) != -(config & SMASK)) - return false; - if ((ws = workQueues) != null) { - for (int i = 0; i < ws.length; ++i) { - if ((w = ws[i]) != null) { - if (!w.isEmpty()) { // signal unprocessed tasks - signalWork(w); - return false; - } - if ((i & 1) != 0 && w.eventCount >= 0) - return false; // unqueued inactive worker - } - } - } - } - if (U.compareAndSwapLong(this, CTL, c, c | STOP_BIT)) { - for (int pass = 0; pass < 3; ++pass) { - WorkQueue[] ws; WorkQueue w; Thread wt; - if ((ws = workQueues) != null) { - int n = ws.length; - for (int i = 0; i < n; ++i) { - if ((w = ws[i]) != null) { - w.qlock = -1; - if (pass > 0) { - w.cancelAll(); - if (pass > 1 && (wt = w.owner) != null) { - if (!wt.isInterrupted()) { - try { - wt.interrupt(); - } catch (Throwable ignore) { - } - } - U.unpark(wt); - } - } - } - } - // Wake up workers parked on event queue - int i, e; long cc; Thread p; - while ((e = (int)(cc = ctl) & E_MASK) != 0 && - (i = e & SMASK) < n && i >= 0 && - (w = ws[i]) != null) { - long nc = ((long)(w.nextWait & E_MASK) | - ((cc + AC_UNIT) & AC_MASK) | - (cc & (TC_MASK|STOP_BIT))); - if (w.eventCount == (e | INT_SIGN) && - U.compareAndSwapLong(this, CTL, cc, nc)) { - w.eventCount = (e + E_SEQ) & E_MASK; - w.qlock = -1; - if ((p = w.parker) != null) - U.unpark(p); - } - } - } - } - } - } - } - - // external operations on common pool - - /** - * Returns common pool queue for a thread that has submitted at - * least one task. - */ - static WorkQueue commonSubmitterQueue() { - ForkJoinPool p; WorkQueue[] ws; int m; Submitter z; - return ((z = submitters.get()) != null && - (p = common) != null && - (ws = p.workQueues) != null && - (m = ws.length - 1) >= 0) ? - ws[m & z.seed & SQMASK] : null; - } - - /** - * Tries to pop the given task from submitter's queue in common pool. - */ - static boolean tryExternalUnpush(ForkJoinTask<?> t) { - ForkJoinPool p; WorkQueue[] ws; WorkQueue q; Submitter z; - ForkJoinTask<?>[] a; int m, s; - if (t != null && - (z = submitters.get()) != null && - (p = common) != null && - (ws = p.workQueues) != null && - (m = ws.length - 1) >= 0 && - (q = ws[m & z.seed & SQMASK]) != null && - (s = q.top) != q.base && - (a = q.array) != null) { - long j = (((a.length - 1) & (s - 1)) << ASHIFT) + ABASE; - if (U.getObject(a, j) == t && - U.compareAndSwapInt(q, QLOCK, 0, 1)) { - if (q.array == a && q.top == s && // recheck - U.compareAndSwapObject(a, j, t, null)) { - q.top = s - 1; - q.qlock = 0; - return true; - } - q.qlock = 0; - } - } - return false; - } - - /** - * Tries to pop and run local tasks within the same computation - * as the given root. On failure, tries to help complete from - * other queues via helpComplete. - */ - private void externalHelpComplete(WorkQueue q, ForkJoinTask<?> root) { - ForkJoinTask<?>[] a; int m; - if (q != null && (a = q.array) != null && (m = (a.length - 1)) >= 0 && - root != null && root.status >= 0) { - for (;;) { - int s, u; Object o; CountedCompleter<?> task = null; - if ((s = q.top) - q.base > 0) { - long j = ((m & (s - 1)) << ASHIFT) + ABASE; - if ((o = U.getObject(a, j)) != null && - (o instanceof CountedCompleter)) { - CountedCompleter<?> t = (CountedCompleter<?>)o, r = t; - do { - if (r == root) { - if (U.compareAndSwapInt(q, QLOCK, 0, 1)) { - if (q.array == a && q.top == s && - U.compareAndSwapObject(a, j, t, null)) { - q.top = s - 1; - task = t; - } - q.qlock = 0; - } - break; - } - } while ((r = r.completer) != null); - } - } - if (task != null) - task.doExec(); - if (root.status < 0 || - (u = (int)(ctl >>> 32)) >= 0 || (u >> UAC_SHIFT) >= 0) - break; - if (task == null) { - helpSignal(root, q.poolIndex); - if (root.status >= 0) - helpComplete(root, SHARED_QUEUE); - break; - } - } - } - } - - /** - * Tries to help execute or signal availability of the given task - * from submitter's queue in common pool. - */ - static void externalHelpJoin(ForkJoinTask<?> t) { - // Some hard-to-avoid overlap with tryExternalUnpush - ForkJoinPool p; WorkQueue[] ws; WorkQueue q, w; Submitter z; - ForkJoinTask<?>[] a; int m, s, n; - if (t != null && - (z = submitters.get()) != null && - (p = common) != null && - (ws = p.workQueues) != null && - (m = ws.length - 1) >= 0 && - (q = ws[m & z.seed & SQMASK]) != null && - (a = q.array) != null) { - int am = a.length - 1; - if ((s = q.top) != q.base) { - long j = ((am & (s - 1)) << ASHIFT) + ABASE; - if (U.getObject(a, j) == t && - U.compareAndSwapInt(q, QLOCK, 0, 1)) { - if (q.array == a && q.top == s && - U.compareAndSwapObject(a, j, t, null)) { - q.top = s - 1; - q.qlock = 0; - t.doExec(); - } - else - q.qlock = 0; - } - } - if (t.status >= 0) { - if (t instanceof CountedCompleter) - p.externalHelpComplete(q, t); - else - p.helpSignal(t, q.poolIndex); - } - } - } - - // Exported methods - - // Constructors - - /** - * Creates a {@code ForkJoinPool} with parallelism equal to {@link - * java.lang.Runtime#availableProcessors}, using the {@linkplain - * #defaultForkJoinWorkerThreadFactory default thread factory}, - * no UncaughtExceptionHandler, and non-async LIFO processing mode. - * - * @throws SecurityException if a security manager exists and - * the caller is not permitted to modify threads - * because it does not hold {@link - * java.lang.RuntimePermission}{@code ("modifyThread")} - */ - public ForkJoinPool() { - this(Math.min(MAX_CAP, Runtime.getRuntime().availableProcessors()), - defaultForkJoinWorkerThreadFactory, null, false); - } - - /** - * Creates a {@code ForkJoinPool} with the indicated parallelism - * level, the {@linkplain - * #defaultForkJoinWorkerThreadFactory default thread factory}, - * no UncaughtExceptionHandler, and non-async LIFO processing mode. - * - * @param parallelism the parallelism level - * @throws IllegalArgumentException if parallelism less than or - * equal to zero, or greater than implementation limit - * @throws SecurityException if a security manager exists and - * the caller is not permitted to modify threads - * because it does not hold {@link - * java.lang.RuntimePermission}{@code ("modifyThread")} - */ - public ForkJoinPool(int parallelism) { - this(parallelism, defaultForkJoinWorkerThreadFactory, null, false); - } - - /** - * Creates a {@code ForkJoinPool} with the given parameters. - * - * @param parallelism the parallelism level. For default value, - * use {@link java.lang.Runtime#availableProcessors}. - * @param factory the factory for creating new threads. For default value, - * use {@link #defaultForkJoinWorkerThreadFactory}. - * @param handler the handler for internal worker threads that - * terminate due to unrecoverable errors encountered while executing - * tasks. For default value, use {@code null}. - * @param asyncMode if true, - * establishes local first-in-first-out scheduling mode for forked - * tasks that are never joined. This mode may be more appropriate - * than default locally stack-based mode in applications in which - * worker threads only process event-style asynchronous tasks. - * For default value, use {@code false}. - * @throws IllegalArgumentException if parallelism less than or - * equal to zero, or greater than implementation limit - * @throws NullPointerException if the factory is null - * @throws SecurityException if a security manager exists and - * the caller is not permitted to modify threads - * because it does not hold {@link - * java.lang.RuntimePermission}{@code ("modifyThread")} - */ - public ForkJoinPool(int parallelism, - ForkJoinWorkerThreadFactory factory, - Thread.UncaughtExceptionHandler handler, - boolean asyncMode) { - checkPermission(); - if (factory == null) - throw new NullPointerException(); - if (parallelism <= 0 || parallelism > MAX_CAP) - throw new IllegalArgumentException(); - this.factory = factory; - this.ueh = handler; - this.config = parallelism | (asyncMode ? (FIFO_QUEUE << 16) : 0); - long np = (long)(-parallelism); // offset ctl counts - this.ctl = ((np << AC_SHIFT) & AC_MASK) | ((np << TC_SHIFT) & TC_MASK); - int pn = nextPoolId(); - StringBuilder sb = new StringBuilder("ForkJoinPool-"); - sb.append(Integer.toString(pn)); - sb.append("-worker-"); - this.workerNamePrefix = sb.toString(); - } - - /** - * Constructor for common pool, suitable only for static initialization. - * Basically the same as above, but uses smallest possible initial footprint. - */ - ForkJoinPool(int parallelism, long ctl, - ForkJoinWorkerThreadFactory factory, - Thread.UncaughtExceptionHandler handler) { - this.config = parallelism; - this.ctl = ctl; - this.factory = factory; - this.ueh = handler; - this.workerNamePrefix = "ForkJoinPool.commonPool-worker-"; - } - - /** - * Returns the common pool instance. This pool is statically - * constructed; its run state is unaffected by attempts to {@link - * #shutdown} or {@link #shutdownNow}. However this pool and any - * ongoing processing are automatically terminated upon program - * {@link System#exit}. Any program that relies on asynchronous - * task processing to complete before program termination should - * invoke {@code commonPool().}{@link #awaitQuiescence}, before - * exit. - * - * @return the common pool instance - * @since 1.8 - */ - public static ForkJoinPool commonPool() { - // assert common != null : "static init error"; - return common; - } - - // Execution methods - - /** - * Performs the given task, returning its result upon completion. - * If the computation encounters an unchecked Exception or Error, - * it is rethrown as the outcome of this invocation. Rethrown - * exceptions behave in the same way as regular exceptions, but, - * when possible, contain stack traces (as displayed for example - * using {@code ex.printStackTrace()}) of both the current thread - * as well as the thread actually encountering the exception; - * minimally only the latter. - * - * @param task the task - * @return the task's result - * @throws NullPointerException if the task is null - * @throws RejectedExecutionException if the task cannot be - * scheduled for execution - */ - public <T> T invoke(ForkJoinTask<T> task) { - if (task == null) - throw new NullPointerException(); - externalPush(task); - return task.join(); - } - - /** - * Arranges for (asynchronous) execution of the given task. - * - * @param task the task - * @throws NullPointerException if the task is null - * @throws RejectedExecutionException if the task cannot be - * scheduled for execution - */ - public void execute(ForkJoinTask<?> task) { - if (task == null) - throw new NullPointerException(); - externalPush(task); - } - - // AbstractExecutorService methods - - /** - * @throws NullPointerException if the task is null - * @throws RejectedExecutionException if the task cannot be - * scheduled for execution - */ - public void execute(Runnable task) { - if (task == null) - throw new NullPointerException(); - ForkJoinTask<?> job; - if (task instanceof ForkJoinTask<?>) // avoid re-wrap - job = (ForkJoinTask<?>) task; - else - job = new ForkJoinTask.AdaptedRunnableAction(task); - externalPush(job); - } - - /** - * Submits a ForkJoinTask for execution. - * - * @param task the task to submit - * @return the task - * @throws NullPointerException if the task is null - * @throws RejectedExecutionException if the task cannot be - * scheduled for execution - */ - public <T> ForkJoinTask<T> submit(ForkJoinTask<T> task) { - if (task == null) - throw new NullPointerException(); - externalPush(task); - return task; - } - - /** - * @throws NullPointerException if the task is null - * @throws RejectedExecutionException if the task cannot be - * scheduled for execution - */ - public <T> ForkJoinTask<T> submit(Callable<T> task) { - ForkJoinTask<T> job = new ForkJoinTask.AdaptedCallable<T>(task); - externalPush(job); - return job; - } - - /** - * @throws NullPointerException if the task is null - * @throws RejectedExecutionException if the task cannot be - * scheduled for execution - */ - public <T> ForkJoinTask<T> submit(Runnable task, T result) { - ForkJoinTask<T> job = new ForkJoinTask.AdaptedRunnable<T>(task, result); - externalPush(job); - return job; - } - - /** - * @throws NullPointerException if the task is null - * @throws RejectedExecutionException if the task cannot be - * scheduled for execution - */ - public ForkJoinTask<?> submit(Runnable task) { - if (task == null) - throw new NullPointerException(); - ForkJoinTask<?> job; - if (task instanceof ForkJoinTask<?>) // avoid re-wrap - job = (ForkJoinTask<?>) task; - else - job = new ForkJoinTask.AdaptedRunnableAction(task); - externalPush(job); - return job; - } - - /** - * @throws NullPointerException {@inheritDoc} - * @throws RejectedExecutionException {@inheritDoc} - */ - public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) { - // In previous versions of this class, this method constructed - // a task to run ForkJoinTask.invokeAll, but now external - // invocation of multiple tasks is at least as efficient. - ArrayList<Future<T>> futures = new ArrayList<Future<T>>(tasks.size()); - - boolean done = false; - try { - for (Callable<T> t : tasks) { - ForkJoinTask<T> f = new ForkJoinTask.AdaptedCallable<T>(t); - futures.add(f); - externalPush(f); - } - for (int i = 0, size = futures.size(); i < size; i++) - ((ForkJoinTask<?>)futures.get(i)).quietlyJoin(); - done = true; - return futures; - } finally { - if (!done) - for (int i = 0, size = futures.size(); i < size; i++) - futures.get(i).cancel(false); - } - } - - /** - * Returns the factory used for constructing new workers. - * - * @return the factory used for constructing new workers - */ - public ForkJoinWorkerThreadFactory getFactory() { - return factory; - } - - /** - * Returns the handler for internal worker threads that terminate - * due to unrecoverable errors encountered while executing tasks. - * - * @return the handler, or {@code null} if none - */ - public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler() { - return ueh; - } - - /** - * Returns the targeted parallelism level of this pool. - * - * @return the targeted parallelism level of this pool - */ - public int getParallelism() { - return config & SMASK; - } - - /** - * Returns the targeted parallelism level of the common pool. - * - * @return the targeted parallelism level of the common pool - * @since 1.8 - */ - public static int getCommonPoolParallelism() { - return commonParallelism; - } - - /** - * Returns the number of worker threads that have started but not - * yet terminated. The result returned by this method may differ - * from {@link #getParallelism} when threads are created to - * maintain parallelism when others are cooperatively blocked. - * - * @return the number of worker threads - */ - public int getPoolSize() { - return (config & SMASK) + (short)(ctl >>> TC_SHIFT); - } - - /** - * Returns {@code true} if this pool uses local first-in-first-out - * scheduling mode for forked tasks that are never joined. - * - * @return {@code true} if this pool uses async mode - */ - public boolean getAsyncMode() { - return (config >>> 16) == FIFO_QUEUE; - } - - /** - * Returns an estimate of the number of worker threads that are - * not blocked waiting to join tasks or for other managed - * synchronization. This method may overestimate the - * number of running threads. - * - * @return the number of worker threads - */ - public int getRunningThreadCount() { - int rc = 0; - WorkQueue[] ws; WorkQueue w; - if ((ws = workQueues) != null) { - for (int i = 1; i < ws.length; i += 2) { - if ((w = ws[i]) != null && w.isApparentlyUnblocked()) - ++rc; - } - } - return rc; - } - - /** - * Returns an estimate of the number of threads that are currently - * stealing or executing tasks. This method may overestimate the - * number of active threads. - * - * @return the number of active threads - */ - public int getActiveThreadCount() { - int r = (config & SMASK) + (int)(ctl >> AC_SHIFT); - return (r <= 0) ? 0 : r; // suppress momentarily negative values - } - - /** - * Returns {@code true} if all worker threads are currently idle. - * An idle worker is one that cannot obtain a task to execute - * because none are available to steal from other threads, and - * there are no pending submissions to the pool. This method is - * conservative; it might not return {@code true} immediately upon - * idleness of all threads, but will eventually become true if - * threads remain inactive. - * - * @return {@code true} if all threads are currently idle - */ - public boolean isQuiescent() { - return (int)(ctl >> AC_SHIFT) + (config & SMASK) == 0; - } - - /** - * Returns an estimate of the total number of tasks stolen from - * one thread's work queue by another. The reported value - * underestimates the actual total number of steals when the pool - * is not quiescent. This value may be useful for monitoring and - * tuning fork/join programs: in general, steal counts should be - * high enough to keep threads busy, but low enough to avoid - * overhead and contention across threads. - * - * @return the number of steals - */ - public long getStealCount() { - long count = stealCount; - WorkQueue[] ws; WorkQueue w; - if ((ws = workQueues) != null) { - for (int i = 1; i < ws.length; i += 2) { - if ((w = ws[i]) != null) - count += w.nsteals; - } - } - return count; - } - - /** - * Returns an estimate of the total number of tasks currently held - * in queues by worker threads (but not including tasks submitted - * to the pool that have not begun executing). This value is only - * an approximation, obtained by iterating across all threads in - * the pool. This method may be useful for tuning task - * granularities. - * - * @return the number of queued tasks - */ - public long getQueuedTaskCount() { - long count = 0; - WorkQueue[] ws; WorkQueue w; - if ((ws = workQueues) != null) { - for (int i = 1; i < ws.length; i += 2) { - if ((w = ws[i]) != null) - count += w.queueSize(); - } - } - return count; - } - - /** - * Returns an estimate of the number of tasks submitted to this - * pool that have not yet begun executing. This method may take - * time proportional to the number of submissions. - * - * @return the number of queued submissions - */ - public int getQueuedSubmissionCount() { - int count = 0; - WorkQueue[] ws; WorkQueue w; - if ((ws = workQueues) != null) { - for (int i = 0; i < ws.length; i += 2) { - if ((w = ws[i]) != null) - count += w.queueSize(); - } - } - return count; - } - - /** - * Returns {@code true} if there are any tasks submitted to this - * pool that have not yet begun executing. - * - * @return {@code true} if there are any queued submissions - */ - public boolean hasQueuedSubmissions() { - WorkQueue[] ws; WorkQueue w; - if ((ws = workQueues) != null) { - for (int i = 0; i < ws.length; i += 2) { - if ((w = ws[i]) != null && !w.isEmpty()) - return true; - } - } - return false; - } - - /** - * Removes and returns the next unexecuted submission if one is - * available. This method may be useful in extensions to this - * class that re-assign work in systems with multiple pools. - * - * @return the next submission, or {@code null} if none - */ - protected ForkJoinTask<?> pollSubmission() { - WorkQueue[] ws; WorkQueue w; ForkJoinTask<?> t; - if ((ws = workQueues) != null) { - for (int i = 0; i < ws.length; i += 2) { - if ((w = ws[i]) != null && (t = w.poll()) != null) - return t; - } - } - return null; - } - - /** - * Removes all available unexecuted submitted and forked tasks - * from scheduling queues and adds them to the given collection, - * without altering their execution status. These may include - * artificially generated or wrapped tasks. This method is - * designed to be invoked only when the pool is known to be - * quiescent. Invocations at other times may not remove all - * tasks. A failure encountered while attempting to add elements - * to collection {@code c} may result in elements being in - * neither, either or both collections when the associated - * exception is thrown. The behavior of this operation is - * undefined if the specified collection is modified while the - * operation is in progress. - * - * @param c the collection to transfer elements into - * @return the number of elements transferred - */ - protected int drainTasksTo(Collection<? super ForkJoinTask<?>> c) { - int count = 0; - WorkQueue[] ws; WorkQueue w; ForkJoinTask<?> t; - if ((ws = workQueues) != null) { - for (int i = 0; i < ws.length; ++i) { - if ((w = ws[i]) != null) { - while ((t = w.poll()) != null) { - c.add(t); - ++count; - } - } - } - } - return count; - } - - /** - * Returns a string identifying this pool, as well as its state, - * including indications of run state, parallelism level, and - * worker and task counts. - * - * @return a string identifying this pool, as well as its state - */ - public String toString() { - // Use a single pass through workQueues to collect counts - long qt = 0L, qs = 0L; int rc = 0; - long st = stealCount; - long c = ctl; - WorkQueue[] ws; WorkQueue w; - if ((ws = workQueues) != null) { - for (int i = 0; i < ws.length; ++i) { - if ((w = ws[i]) != null) { - int size = w.queueSize(); - if ((i & 1) == 0) - qs += size; - else { - qt += size; - st += w.nsteals; - if (w.isApparentlyUnblocked()) - ++rc; - } - } - } - } - int pc = (config & SMASK); - int tc = pc + (short)(c >>> TC_SHIFT); - int ac = pc + (int)(c >> AC_SHIFT); - if (ac < 0) // ignore transient negative - ac = 0; - String level; - if ((c & STOP_BIT) != 0) - level = (tc == 0) ? "Terminated" : "Terminating"; - else - level = plock < 0 ? "Shutting down" : "Running"; - return super.toString() + - "[" + level + - ", parallelism = " + pc + - ", size = " + tc + - ", active = " + ac + - ", running = " + rc + - ", steals = " + st + - ", tasks = " + qt + - ", submissions = " + qs + - "]"; - } - - /** - * Possibly initiates an orderly shutdown in which previously - * submitted tasks are executed, but no new tasks will be - * accepted. Invocation has no effect on execution state if this - * is the {@link #commonPool()}, and no additional effect if - * already shut down. Tasks that are in the process of being - * submitted concurrently during the course of this method may or - * may not be rejected. - * - * @throws SecurityException if a security manager exists and - * the caller is not permitted to modify threads - * because it does not hold {@link - * java.lang.RuntimePermission}{@code ("modifyThread")} - */ - public void shutdown() { - checkPermission(); - tryTerminate(false, true); - } - - /** - * Possibly attempts to cancel and/or stop all tasks, and reject - * all subsequently submitted tasks. Invocation has no effect on - * execution state if this is the {@link #commonPool()}, and no - * additional effect if already shut down. Otherwise, tasks that - * are in the process of being submitted or executed concurrently - * during the course of this method may or may not be - * rejected. This method cancels both existing and unexecuted - * tasks, in order to permit termination in the presence of task - * dependencies. So the method always returns an empty list - * (unlike the case for some other Executors). - * - * @return an empty list - * @throws SecurityException if a security manager exists and - * the caller is not permitted to modify threads - * because it does not hold {@link - * java.lang.RuntimePermission}{@code ("modifyThread")} - */ - public List<Runnable> shutdownNow() { - checkPermission(); - tryTerminate(true, true); - return Collections.emptyList(); - } - - /** - * Returns {@code true} if all tasks have completed following shut down. - * - * @return {@code true} if all tasks have completed following shut down - */ - public boolean isTerminated() { - long c = ctl; - return ((c & STOP_BIT) != 0L && - (short)(c >>> TC_SHIFT) == -(config & SMASK)); - } - - /** - * Returns {@code true} if the process of termination has - * commenced but not yet completed. This method may be useful for - * debugging. A return of {@code true} reported a sufficient - * period after shutdown may indicate that submitted tasks have - * ignored or suppressed interruption, or are waiting for I/O, - * causing this executor not to properly terminate. (See the - * advisory notes for class {@link ForkJoinTask} stating that - * tasks should not normally entail blocking operations. But if - * they do, they must abort them on interrupt.) - * - * @return {@code true} if terminating but not yet terminated - */ - public boolean isTerminating() { - long c = ctl; - return ((c & STOP_BIT) != 0L && - (short)(c >>> TC_SHIFT) != -(config & SMASK)); - } - - /** - * Returns {@code true} if this pool has been shut down. - * - * @return {@code true} if this pool has been shut down - */ - public boolean isShutdown() { - return plock < 0; - } - - /** - * Blocks until all tasks have completed execution after a - * shutdown request, or the timeout occurs, or the current thread - * is interrupted, whichever happens first. Because the {@link - * #commonPool()} never terminates until program shutdown, when - * applied to the common pool, this method is equivalent to {@link - * #awaitQuiescence} but always returns {@code false}. - * - * @param timeout the maximum time to wait - * @param unit the time unit of the timeout argument - * @return {@code true} if this executor terminated and - * {@code false} if the timeout elapsed before termination - * @throws InterruptedException if interrupted while waiting - */ - public boolean awaitTermination(long timeout, TimeUnit unit) - throws InterruptedException { - if (Thread.interrupted()) - throw new InterruptedException(); - if (this == common) { - awaitQuiescence(timeout, unit); - return false; - } - long nanos = unit.toNanos(timeout); - if (isTerminated()) - return true; - long startTime = System.nanoTime(); - boolean terminated = false; - synchronized (this) { - for (long waitTime = nanos, millis = 0L;;) { - if (terminated = isTerminated() || - waitTime <= 0L || - (millis = unit.toMillis(waitTime)) <= 0L) - break; - wait(millis); - waitTime = nanos - (System.nanoTime() - startTime); - } - } - return terminated; - } - - /** - * If called by a ForkJoinTask operating in this pool, equivalent - * in effect to {@link ForkJoinTask#helpQuiesce}. Otherwise, - * waits and/or attempts to assist performing tasks until this - * pool {@link #isQuiescent} or the indicated timeout elapses. - * - * @param timeout the maximum time to wait - * @param unit the time unit of the timeout argument - * @return {@code true} if quiescent; {@code false} if the - * timeout elapsed. - */ - public boolean awaitQuiescence(long timeout, TimeUnit unit) { - long nanos = unit.toNanos(timeout); - ForkJoinWorkerThread wt; - Thread thread = Thread.currentThread(); - if ((thread instanceof ForkJoinWorkerThread) && - (wt = (ForkJoinWorkerThread)thread).pool == this) { - helpQuiescePool(wt.workQueue); - return true; - } - long startTime = System.nanoTime(); - WorkQueue[] ws; - int r = 0, m; - boolean found = true; - while (!isQuiescent() && (ws = workQueues) != null && - (m = ws.length - 1) >= 0) { - if (!found) { - if ((System.nanoTime() - startTime) > nanos) - return false; - Thread.yield(); // cannot block - } - found = false; - for (int j = (m + 1) << 2; j >= 0; --j) { - ForkJoinTask<?> t; WorkQueue q; int b; - if ((q = ws[r++ & m]) != null && (b = q.base) - q.top < 0) { - found = true; - if ((t = q.pollAt(b)) != null) { - if (q.base - q.top < 0) - signalWork(q); - t.doExec(); - } - break; - } - } - } - return true; - } - - /** - * Waits and/or attempts to assist performing tasks indefinitely - * until the {@link #commonPool()} {@link #isQuiescent}. - */ - static void quiesceCommonPool() { - common.awaitQuiescence(Long.MAX_VALUE, TimeUnit.NANOSECONDS); - } - - /** - * Interface for extending managed parallelism for tasks running - * in {@link ForkJoinPool}s. - * - * <p>A {@code ManagedBlocker} provides two methods. Method - * {@code isReleasable} must return {@code true} if blocking is - * not necessary. Method {@code block} blocks the current thread - * if necessary (perhaps internally invoking {@code isReleasable} - * before actually blocking). These actions are performed by any - * thread invoking {@link ForkJoinPool#managedBlock}. The - * unusual methods in this API accommodate synchronizers that may, - * but don't usually, block for long periods. Similarly, they - * allow more efficient internal handling of cases in which - * additional workers may be, but usually are not, needed to - * ensure sufficient parallelism. Toward this end, - * implementations of method {@code isReleasable} must be amenable - * to repeated invocation. - * - * <p>For example, here is a ManagedBlocker based on a - * ReentrantLock: - * <pre> {@code - * class ManagedLocker implements ManagedBlocker { - * final ReentrantLock lock; - * boolean hasLock = false; - * ManagedLocker(ReentrantLock lock) { this.lock = lock; } - * public boolean block() { - * if (!hasLock) - * lock.lock(); - * return true; - * } - * public boolean isReleasable() { - * return hasLock || (hasLock = lock.tryLock()); - * } - * }}</pre> - * - * <p>Here is a class that possibly blocks waiting for an - * item on a given queue: - * <pre> {@code - * class QueueTaker<E> implements ManagedBlocker { - * final BlockingQueue<E> queue; - * volatile E item = null; - * QueueTaker(BlockingQueue<E> q) { this.queue = q; } - * public boolean block() throws InterruptedException { - * if (item == null) - * item = queue.take(); - * return true; - * } - * public boolean isReleasable() { - * return item != null || (item = queue.poll()) != null; - * } - * public E getItem() { // call after pool.managedBlock completes - * return item; - * } - * }}</pre> - */ - @Deprecated - public static interface ManagedBlocker { - /** - * Possibly blocks the current thread, for example waiting for - * a lock or condition. - * - * @return {@code true} if no additional blocking is necessary - * (i.e., if isReleasable would return true) - * @throws InterruptedException if interrupted while waiting - * (the method is not required to do so, but is allowed to) - */ - boolean block() throws InterruptedException; - - /** - * Returns {@code true} if blocking is unnecessary. - */ - boolean isReleasable(); - } - - /** - * Blocks in accord with the given blocker. If the current thread - * is a {@link ForkJoinWorkerThread}, this method possibly - * arranges for a spare thread to be activated if necessary to - * ensure sufficient parallelism while the current thread is blocked. - * - * <p>If the caller is not a {@link ForkJoinTask}, this method is - * behaviorally equivalent to - * <pre> {@code - * while (!blocker.isReleasable()) - * if (blocker.block()) - * return; - * }</pre> - * - * If the caller is a {@code ForkJoinTask}, then the pool may - * first be expanded to ensure parallelism, and later adjusted. - * - * @param blocker the blocker - * @throws InterruptedException if blocker.block did so - */ - public static void managedBlock(ManagedBlocker blocker) - throws InterruptedException { - Thread t = Thread.currentThread(); - if (t instanceof ForkJoinWorkerThread) { - ForkJoinPool p = ((ForkJoinWorkerThread)t).pool; - while (!blocker.isReleasable()) { // variant of helpSignal - WorkQueue[] ws; WorkQueue q; int m, u; - if ((ws = p.workQueues) != null && (m = ws.length - 1) >= 0) { - for (int i = 0; i <= m; ++i) { - if (blocker.isReleasable()) - return; - if ((q = ws[i]) != null && q.base - q.top < 0) { - p.signalWork(q); - if ((u = (int)(p.ctl >>> 32)) >= 0 || - (u >> UAC_SHIFT) >= 0) - break; - } - } - } - if (p.tryCompensate()) { - try { - do {} while (!blocker.isReleasable() && - !blocker.block()); - } finally { - p.incrementActiveCount(); - } - break; - } - } - } - else { - do {} while (!blocker.isReleasable() && - !blocker.block()); - } - } - - // AbstractExecutorService overrides. These rely on undocumented - // fact that ForkJoinTask.adapt returns ForkJoinTasks that also - // implement RunnableFuture. - - protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) { - return new ForkJoinTask.AdaptedRunnable<T>(runnable, value); - } - - protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) { - return new ForkJoinTask.AdaptedCallable<T>(callable); - } - - // Unsafe mechanics - private static final sun.misc.Unsafe U; - private static final long CTL; - private static final long PARKBLOCKER; - private static final int ABASE; - private static final int ASHIFT; - private static final long STEALCOUNT; - private static final long PLOCK; - private static final long INDEXSEED; - private static final long QLOCK; - - static { - // initialize field offsets for CAS etc - try { - U = getUnsafe(); - Class<?> k = ForkJoinPool.class; - CTL = U.objectFieldOffset - (k.getDeclaredField("ctl")); - STEALCOUNT = U.objectFieldOffset - (k.getDeclaredField("stealCount")); - PLOCK = U.objectFieldOffset - (k.getDeclaredField("plock")); - INDEXSEED = U.objectFieldOffset - (k.getDeclaredField("indexSeed")); - Class<?> tk = Thread.class; - PARKBLOCKER = U.objectFieldOffset - (tk.getDeclaredField("parkBlocker")); - Class<?> wk = WorkQueue.class; - QLOCK = U.objectFieldOffset - (wk.getDeclaredField("qlock")); - Class<?> ak = ForkJoinTask[].class; - ABASE = U.arrayBaseOffset(ak); - int scale = U.arrayIndexScale(ak); - if ((scale & (scale - 1)) != 0) - throw new Error("data type scale not a power of two"); - ASHIFT = 31 - Integer.numberOfLeadingZeros(scale); - } catch (Exception e) { - throw new Error(e); - } - - submitters = new ThreadLocal<Submitter>(); - ForkJoinWorkerThreadFactory fac = defaultForkJoinWorkerThreadFactory = - new DefaultForkJoinWorkerThreadFactory(); - modifyThreadPermission = new RuntimePermission("modifyThread"); - - /* - * Establish common pool parameters. For extra caution, - * computations to set up common pool state are here; the - * constructor just assigns these values to fields. - */ - - int par = 0; - Thread.UncaughtExceptionHandler handler = null; - try { // TBD: limit or report ignored exceptions? - String pp = System.getProperty - ("java.util.concurrent.ForkJoinPool.common.parallelism"); - String hp = System.getProperty - ("java.util.concurrent.ForkJoinPool.common.exceptionHandler"); - String fp = System.getProperty - ("java.util.concurrent.ForkJoinPool.common.threadFactory"); - if (fp != null) - fac = ((ForkJoinWorkerThreadFactory)ClassLoader. - getSystemClassLoader().loadClass(fp).newInstance()); - if (hp != null) - handler = ((Thread.UncaughtExceptionHandler)ClassLoader. - getSystemClassLoader().loadClass(hp).newInstance()); - if (pp != null) - par = Integer.parseInt(pp); - } catch (Exception ignore) { - } - - if (par <= 0) - par = Runtime.getRuntime().availableProcessors(); - if (par > MAX_CAP) - par = MAX_CAP; - commonParallelism = par; - long np = (long)(-par); // precompute initial ctl value - long ct = ((np << AC_SHIFT) & AC_MASK) | ((np << TC_SHIFT) & TC_MASK); - - common = new ForkJoinPool(par, ct, fac, handler); - } - - /** - * Returns a sun.misc.Unsafe. Suitable for use in a 3rd party package. - * Replace with a simple call to Unsafe.getUnsafe when integrating - * into a jdk. - * - * @return a sun.misc.Unsafe - */ - private static sun.misc.Unsafe getUnsafe() { - return scala.concurrent.util.Unsafe.instance; - } -} diff --git a/src/forkjoin/scala/concurrent/forkjoin/ForkJoinTask.java b/src/forkjoin/scala/concurrent/forkjoin/ForkJoinTask.java deleted file mode 100644 index b4f5c24ca9..0000000000 --- a/src/forkjoin/scala/concurrent/forkjoin/ForkJoinTask.java +++ /dev/null @@ -1,1493 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -package scala.concurrent.forkjoin; - -import java.io.Serializable; -import java.util.Collection; -import java.util.List; -import java.util.RandomAccess; -import java.lang.ref.WeakReference; -import java.lang.ref.ReferenceQueue; -import java.util.concurrent.Callable; -import java.util.concurrent.CancellationException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.RunnableFuture; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.concurrent.locks.ReentrantLock; -import java.lang.reflect.Constructor; - -/** - * Abstract base class for tasks that run within a {@link ForkJoinPool}. - * A {@code ForkJoinTask} is a thread-like entity that is much - * lighter weight than a normal thread. Huge numbers of tasks and - * subtasks may be hosted by a small number of actual threads in a - * ForkJoinPool, at the price of some usage limitations. - * - * <p>A "main" {@code ForkJoinTask} begins execution when it is - * explicitly submitted to a {@link ForkJoinPool}, or, if not already - * engaged in a ForkJoin computation, commenced in the {@link - * ForkJoinPool#commonPool()} via {@link #fork}, {@link #invoke}, or - * related methods. Once started, it will usually in turn start other - * subtasks. As indicated by the name of this class, many programs - * using {@code ForkJoinTask} employ only methods {@link #fork} and - * {@link #join}, or derivatives such as {@link - * #invokeAll(ForkJoinTask...) invokeAll}. However, this class also - * provides a number of other methods that can come into play in - * advanced usages, as well as extension mechanics that allow support - * of new forms of fork/join processing. - * - * <p>A {@code ForkJoinTask} is a lightweight form of {@link Future}. - * The efficiency of {@code ForkJoinTask}s stems from a set of - * restrictions (that are only partially statically enforceable) - * reflecting their main use as computational tasks calculating pure - * functions or operating on purely isolated objects. The primary - * coordination mechanisms are {@link #fork}, that arranges - * asynchronous execution, and {@link #join}, that doesn't proceed - * until the task's result has been computed. Computations should - * ideally avoid {@code synchronized} methods or blocks, and should - * minimize other blocking synchronization apart from joining other - * tasks or using synchronizers such as Phasers that are advertised to - * cooperate with fork/join scheduling. Subdividable tasks should also - * not perform blocking I/O, and should ideally access variables that - * are completely independent of those accessed by other running - * tasks. These guidelines are loosely enforced by not permitting - * checked exceptions such as {@code IOExceptions} to be - * thrown. However, computations may still encounter unchecked - * exceptions, that are rethrown to callers attempting to join - * them. These exceptions may additionally include {@link - * RejectedExecutionException} stemming from internal resource - * exhaustion, such as failure to allocate internal task - * queues. Rethrown exceptions behave in the same way as regular - * exceptions, but, when possible, contain stack traces (as displayed - * for example using {@code ex.printStackTrace()}) of both the thread - * that initiated the computation as well as the thread actually - * encountering the exception; minimally only the latter. - * - * <p>It is possible to define and use ForkJoinTasks that may block, - * but doing do requires three further considerations: (1) Completion - * of few if any <em>other</em> tasks should be dependent on a task - * that blocks on external synchronization or I/O. Event-style async - * tasks that are never joined (for example, those subclassing {@link - * CountedCompleter}) often fall into this category. (2) To minimize - * resource impact, tasks should be small; ideally performing only the - * (possibly) blocking action. (3) Unless the {@link - * ForkJoinPool.ManagedBlocker} API is used, or the number of possibly - * blocked tasks is known to be less than the pool's {@link - * ForkJoinPool#getParallelism} level, the pool cannot guarantee that - * enough threads will be available to ensure progress or good - * performance. - * - * <p>The primary method for awaiting completion and extracting - * results of a task is {@link #join}, but there are several variants: - * The {@link Future#get} methods support interruptible and/or timed - * waits for completion and report results using {@code Future} - * conventions. Method {@link #invoke} is semantically - * equivalent to {@code fork(); join()} but always attempts to begin - * execution in the current thread. The "<em>quiet</em>" forms of - * these methods do not extract results or report exceptions. These - * may be useful when a set of tasks are being executed, and you need - * to delay processing of results or exceptions until all complete. - * Method {@code invokeAll} (available in multiple versions) - * performs the most common form of parallel invocation: forking a set - * of tasks and joining them all. - * - * <p>In the most typical usages, a fork-join pair act like a call - * (fork) and return (join) from a parallel recursive function. As is - * the case with other forms of recursive calls, returns (joins) - * should be performed innermost-first. For example, {@code a.fork(); - * b.fork(); b.join(); a.join();} is likely to be substantially more - * efficient than joining {@code a} before {@code b}. - * - * <p>The execution status of tasks may be queried at several levels - * of detail: {@link #isDone} is true if a task completed in any way - * (including the case where a task was cancelled without executing); - * {@link #isCompletedNormally} is true if a task completed without - * cancellation or encountering an exception; {@link #isCancelled} is - * true if the task was cancelled (in which case {@link #getException} - * returns a {@link java.util.concurrent.CancellationException}); and - * {@link #isCompletedAbnormally} is true if a task was either - * cancelled or encountered an exception, in which case {@link - * #getException} will return either the encountered exception or - * {@link java.util.concurrent.CancellationException}. - * - * <p>The ForkJoinTask class is not usually directly subclassed. - * Instead, you subclass one of the abstract classes that support a - * particular style of fork/join processing, typically {@link - * RecursiveAction} for most computations that do not return results, - * {@link RecursiveTask} for those that do, and {@link - * CountedCompleter} for those in which completed actions trigger - * other actions. Normally, a concrete ForkJoinTask subclass declares - * fields comprising its parameters, established in a constructor, and - * then defines a {@code compute} method that somehow uses the control - * methods supplied by this base class. - * - * <p>Method {@link #join} and its variants are appropriate for use - * only when completion dependencies are acyclic; that is, the - * parallel computation can be described as a directed acyclic graph - * (DAG). Otherwise, executions may encounter a form of deadlock as - * tasks cyclically wait for each other. However, this framework - * supports other methods and techniques (for example the use of - * {@link Phaser}, {@link #helpQuiesce}, and {@link #complete}) that - * may be of use in constructing custom subclasses for problems that - * are not statically structured as DAGs. To support such usages a - * ForkJoinTask may be atomically <em>tagged</em> with a {@code short} - * value using {@link #setForkJoinTaskTag} or {@link - * #compareAndSetForkJoinTaskTag} and checked using {@link - * #getForkJoinTaskTag}. The ForkJoinTask implementation does not use - * these {@code protected} methods or tags for any purpose, but they - * may be of use in the construction of specialized subclasses. For - * example, parallel graph traversals can use the supplied methods to - * avoid revisiting nodes/tasks that have already been processed. - * (Method names for tagging are bulky in part to encourage definition - * of methods that reflect their usage patterns.) - * - * <p>Most base support methods are {@code final}, to prevent - * overriding of implementations that are intrinsically tied to the - * underlying lightweight task scheduling framework. Developers - * creating new basic styles of fork/join processing should minimally - * implement {@code protected} methods {@link #exec}, {@link - * #setRawResult}, and {@link #getRawResult}, while also introducing - * an abstract computational method that can be implemented in its - * subclasses, possibly relying on other {@code protected} methods - * provided by this class. - * - * <p>ForkJoinTasks should perform relatively small amounts of - * computation. Large tasks should be split into smaller subtasks, - * usually via recursive decomposition. As a very rough rule of thumb, - * a task should perform more than 100 and less than 10000 basic - * computational steps, and should avoid indefinite looping. If tasks - * are too big, then parallelism cannot improve throughput. If too - * small, then memory and internal task maintenance overhead may - * overwhelm processing. - * - * <p>This class provides {@code adapt} methods for {@link Runnable} - * and {@link Callable}, that may be of use when mixing execution of - * {@code ForkJoinTasks} with other kinds of tasks. When all tasks are - * of this form, consider using a pool constructed in <em>asyncMode</em>. - * - * <p>ForkJoinTasks are {@code Serializable}, which enables them to be - * used in extensions such as remote execution frameworks. It is - * sensible to serialize tasks only before or after, but not during, - * execution. Serialization is not relied on during execution itself. - * - * @since 1.7 - * @author Doug Lea - */ -@Deprecated -public abstract class ForkJoinTask<V> implements Future<V>, Serializable { - - /* - * See the internal documentation of class ForkJoinPool for a - * general implementation overview. ForkJoinTasks are mainly - * responsible for maintaining their "status" field amidst relays - * to methods in ForkJoinWorkerThread and ForkJoinPool. - * - * The methods of this class are more-or-less layered into - * (1) basic status maintenance - * (2) execution and awaiting completion - * (3) user-level methods that additionally report results. - * This is sometimes hard to see because this file orders exported - * methods in a way that flows well in javadocs. - */ - - /* - * The status field holds run control status bits packed into a - * single int to minimize footprint and to ensure atomicity (via - * CAS). Status is initially zero, and takes on nonnegative - * values until completed, upon which status (anded with - * DONE_MASK) holds value NORMAL, CANCELLED, or EXCEPTIONAL. Tasks - * undergoing blocking waits by other threads have the SIGNAL bit - * set. Completion of a stolen task with SIGNAL set awakens any - * waiters via notifyAll. Even though suboptimal for some - * purposes, we use basic builtin wait/notify to take advantage of - * "monitor inflation" in JVMs that we would otherwise need to - * emulate to avoid adding further per-task bookkeeping overhead. - * We want these monitors to be "fat", i.e., not use biasing or - * thin-lock techniques, so use some odd coding idioms that tend - * to avoid them, mainly by arranging that every synchronized - * block performs a wait, notifyAll or both. - * - * These control bits occupy only (some of) the upper half (16 - * bits) of status field. The lower bits are used for user-defined - * tags. - */ - - /** The run status of this task */ - volatile int status; // accessed directly by pool and workers - static final int DONE_MASK = 0xf0000000; // mask out non-completion bits - static final int NORMAL = 0xf0000000; // must be negative - static final int CANCELLED = 0xc0000000; // must be < NORMAL - static final int EXCEPTIONAL = 0x80000000; // must be < CANCELLED - static final int SIGNAL = 0x00010000; // must be >= 1 << 16 - static final int SMASK = 0x0000ffff; // short bits for tags - - /** - * Marks completion and wakes up threads waiting to join this - * task. - * - * @param completion one of NORMAL, CANCELLED, EXCEPTIONAL - * @return completion status on exit - */ - private int setCompletion(int completion) { - for (int s;;) { - if ((s = status) < 0) - return s; - if (U.compareAndSwapInt(this, STATUS, s, s | completion)) { - if ((s >>> 16) != 0) - synchronized (this) { notifyAll(); } - return completion; - } - } - } - - /** - * Primary execution method for stolen tasks. Unless done, calls - * exec and records status if completed, but doesn't wait for - * completion otherwise. - * - * @return status on exit from this method - */ - final int doExec() { - int s; boolean completed; - if ((s = status) >= 0) { - try { - completed = exec(); - } catch (Throwable rex) { - return setExceptionalCompletion(rex); - } - if (completed) - s = setCompletion(NORMAL); - } - return s; - } - - /** - * Tries to set SIGNAL status unless already completed. Used by - * ForkJoinPool. Other variants are directly incorporated into - * externalAwaitDone etc. - * - * @return true if successful - */ - final boolean trySetSignal() { - int s = status; - return s >= 0 && U.compareAndSwapInt(this, STATUS, s, s | SIGNAL); - } - - /** - * Blocks a non-worker-thread until completion. - * @return status upon completion - */ - private int externalAwaitDone() { - int s; - ForkJoinPool.externalHelpJoin(this); - boolean interrupted = false; - while ((s = status) >= 0) { - if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) { - synchronized (this) { - if (status >= 0) { - try { - wait(); - } catch (InterruptedException ie) { - interrupted = true; - } - } - else - notifyAll(); - } - } - } - if (interrupted) - Thread.currentThread().interrupt(); - return s; - } - - /** - * Blocks a non-worker-thread until completion or interruption. - */ - private int externalInterruptibleAwaitDone() throws InterruptedException { - int s; - if (Thread.interrupted()) - throw new InterruptedException(); - ForkJoinPool.externalHelpJoin(this); - while ((s = status) >= 0) { - if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) { - synchronized (this) { - if (status >= 0) - wait(); - else - notifyAll(); - } - } - } - return s; - } - - - /** - * Implementation for join, get, quietlyJoin. Directly handles - * only cases of already-completed, external wait, and - * unfork+exec. Others are relayed to ForkJoinPool.awaitJoin. - * - * @return status upon completion - */ - private int doJoin() { - int s; Thread t; ForkJoinWorkerThread wt; ForkJoinPool.WorkQueue w; - return (s = status) < 0 ? s : - ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) ? - (w = (wt = (ForkJoinWorkerThread)t).workQueue). - tryUnpush(this) && (s = doExec()) < 0 ? s : - wt.pool.awaitJoin(w, this) : - externalAwaitDone(); - } - - /** - * Implementation for invoke, quietlyInvoke. - * - * @return status upon completion - */ - private int doInvoke() { - int s; Thread t; ForkJoinWorkerThread wt; - return (s = doExec()) < 0 ? s : - ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) ? - (wt = (ForkJoinWorkerThread)t).pool.awaitJoin(wt.workQueue, this) : - externalAwaitDone(); - } - - // Exception table support - - /** - * Table of exceptions thrown by tasks, to enable reporting by - * callers. Because exceptions are rare, we don't directly keep - * them with task objects, but instead use a weak ref table. Note - * that cancellation exceptions don't appear in the table, but are - * instead recorded as status values. - * - * Note: These statics are initialized below in static block. - */ - private static final ExceptionNode[] exceptionTable; - private static final ReentrantLock exceptionTableLock; - private static final ReferenceQueue<Object> exceptionTableRefQueue; - - /** - * Fixed capacity for exceptionTable. - */ - private static final int EXCEPTION_MAP_CAPACITY = 32; - - /** - * Key-value nodes for exception table. The chained hash table - * uses identity comparisons, full locking, and weak references - * for keys. The table has a fixed capacity because it only - * maintains task exceptions long enough for joiners to access - * them, so should never become very large for sustained - * periods. However, since we do not know when the last joiner - * completes, we must use weak references and expunge them. We do - * so on each operation (hence full locking). Also, some thread in - * any ForkJoinPool will call helpExpungeStaleExceptions when its - * pool becomes isQuiescent. - */ - @Deprecated - static final class ExceptionNode extends WeakReference<ForkJoinTask<?>> { - final Throwable ex; - ExceptionNode next; - final long thrower; // use id not ref to avoid weak cycles - ExceptionNode(ForkJoinTask<?> task, Throwable ex, ExceptionNode next) { - super(task, exceptionTableRefQueue); - this.ex = ex; - this.next = next; - this.thrower = Thread.currentThread().getId(); - } - } - - /** - * Records exception and sets status. - * - * @return status on exit - */ - final int recordExceptionalCompletion(Throwable ex) { - int s; - if ((s = status) >= 0) { - int h = System.identityHashCode(this); - final ReentrantLock lock = exceptionTableLock; - lock.lock(); - try { - expungeStaleExceptions(); - ExceptionNode[] t = exceptionTable; - int i = h & (t.length - 1); - for (ExceptionNode e = t[i]; ; e = e.next) { - if (e == null) { - t[i] = new ExceptionNode(this, ex, t[i]); - break; - } - if (e.get() == this) // already present - break; - } - } finally { - lock.unlock(); - } - s = setCompletion(EXCEPTIONAL); - } - return s; - } - - /** - * Records exception and possibly propagates. - * - * @return status on exit - */ - private int setExceptionalCompletion(Throwable ex) { - int s = recordExceptionalCompletion(ex); - if ((s & DONE_MASK) == EXCEPTIONAL) - internalPropagateException(ex); - return s; - } - - /** - * Hook for exception propagation support for tasks with completers. - */ - void internalPropagateException(Throwable ex) { - } - - /** - * Cancels, ignoring any exceptions thrown by cancel. Used during - * worker and pool shutdown. Cancel is spec'ed not to throw any - * exceptions, but if it does anyway, we have no recourse during - * shutdown, so guard against this case. - */ - static final void cancelIgnoringExceptions(ForkJoinTask<?> t) { - if (t != null && t.status >= 0) { - try { - t.cancel(false); - } catch (Throwable ignore) { - } - } - } - - /** - * Removes exception node and clears status. - */ - private void clearExceptionalCompletion() { - int h = System.identityHashCode(this); - final ReentrantLock lock = exceptionTableLock; - lock.lock(); - try { - ExceptionNode[] t = exceptionTable; - int i = h & (t.length - 1); - ExceptionNode e = t[i]; - ExceptionNode pred = null; - while (e != null) { - ExceptionNode next = e.next; - if (e.get() == this) { - if (pred == null) - t[i] = next; - else - pred.next = next; - break; - } - pred = e; - e = next; - } - expungeStaleExceptions(); - status = 0; - } finally { - lock.unlock(); - } - } - - /** - * Returns a rethrowable exception for the given task, if - * available. To provide accurate stack traces, if the exception - * was not thrown by the current thread, we try to create a new - * exception of the same type as the one thrown, but with the - * recorded exception as its cause. If there is no such - * constructor, we instead try to use a no-arg constructor, - * followed by initCause, to the same effect. If none of these - * apply, or any fail due to other exceptions, we return the - * recorded exception, which is still correct, although it may - * contain a misleading stack trace. - * - * @return the exception, or null if none - */ - private Throwable getThrowableException() { - if ((status & DONE_MASK) != EXCEPTIONAL) - return null; - int h = System.identityHashCode(this); - ExceptionNode e; - final ReentrantLock lock = exceptionTableLock; - lock.lock(); - try { - expungeStaleExceptions(); - ExceptionNode[] t = exceptionTable; - e = t[h & (t.length - 1)]; - while (e != null && e.get() != this) - e = e.next; - } finally { - lock.unlock(); - } - Throwable ex; - if (e == null || (ex = e.ex) == null) - return null; - if (false && e.thrower != Thread.currentThread().getId()) { - Class<? extends Throwable> ec = ex.getClass(); - try { - Constructor<?> noArgCtor = null; - Constructor<?>[] cs = ec.getConstructors();// public ctors only - for (int i = 0; i < cs.length; ++i) { - Constructor<?> c = cs[i]; - Class<?>[] ps = c.getParameterTypes(); - if (ps.length == 0) - noArgCtor = c; - else if (ps.length == 1 && ps[0] == Throwable.class) - return (Throwable)(c.newInstance(ex)); - } - if (noArgCtor != null) { - Throwable wx = (Throwable)(noArgCtor.newInstance()); - wx.initCause(ex); - return wx; - } - } catch (Exception ignore) { - } - } - return ex; - } - - /** - * Poll stale refs and remove them. Call only while holding lock. - */ - private static void expungeStaleExceptions() { - for (Object x; (x = exceptionTableRefQueue.poll()) != null;) { - if (x instanceof ExceptionNode) { - ForkJoinTask<?> key = ((ExceptionNode)x).get(); - ExceptionNode[] t = exceptionTable; - int i = System.identityHashCode(key) & (t.length - 1); - ExceptionNode e = t[i]; - ExceptionNode pred = null; - while (e != null) { - ExceptionNode next = e.next; - if (e == x) { - if (pred == null) - t[i] = next; - else - pred.next = next; - break; - } - pred = e; - e = next; - } - } - } - } - - /** - * If lock is available, poll stale refs and remove them. - * Called from ForkJoinPool when pools become quiescent. - */ - static final void helpExpungeStaleExceptions() { - final ReentrantLock lock = exceptionTableLock; - if (lock.tryLock()) { - try { - expungeStaleExceptions(); - } finally { - lock.unlock(); - } - } - } - - /** - * A version of "sneaky throw" to relay exceptions - */ - static void rethrow(final Throwable ex) { - if (ex != null) { - if (ex instanceof Error) - throw (Error)ex; - if (ex instanceof RuntimeException) - throw (RuntimeException)ex; - ForkJoinTask.<RuntimeException>uncheckedThrow(ex); - } - } - - /** - * The sneaky part of sneaky throw, relying on generics - * limitations to evade compiler complaints about rethrowing - * unchecked exceptions - */ - @SuppressWarnings("unchecked") static <T extends Throwable> - void uncheckedThrow(Throwable t) throws T { - if (t != null) - throw (T)t; // rely on vacuous cast - } - - /** - * Throws exception, if any, associated with the given status. - */ - private void reportException(int s) { - if (s == CANCELLED) - throw new CancellationException(); - if (s == EXCEPTIONAL) - rethrow(getThrowableException()); - } - - // public methods - - /** - * Arranges to asynchronously execute this task in the pool the - * current task is running in, if applicable, or using the {@link - * ForkJoinPool#commonPool()} if not {@link #inForkJoinPool}. While - * it is not necessarily enforced, it is a usage error to fork a - * task more than once unless it has completed and been - * reinitialized. Subsequent modifications to the state of this - * task or any data it operates on are not necessarily - * consistently observable by any thread other than the one - * executing it unless preceded by a call to {@link #join} or - * related methods, or a call to {@link #isDone} returning {@code - * true}. - * - * @return {@code this}, to simplify usage - */ - public final ForkJoinTask<V> fork() { - Thread t; - if ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) - ((ForkJoinWorkerThread)t).workQueue.push(this); - else - ForkJoinPool.common.externalPush(this); - return this; - } - - /** - * Returns the result of the computation when it {@link #isDone is - * done}. This method differs from {@link #get()} in that - * abnormal completion results in {@code RuntimeException} or - * {@code Error}, not {@code ExecutionException}, and that - * interrupts of the calling thread do <em>not</em> cause the - * method to abruptly return by throwing {@code - * InterruptedException}. - * - * @return the computed result - */ - public final V join() { - int s; - if ((s = doJoin() & DONE_MASK) != NORMAL) - reportException(s); - return getRawResult(); - } - - /** - * Commences performing this task, awaits its completion if - * necessary, and returns its result, or throws an (unchecked) - * {@code RuntimeException} or {@code Error} if the underlying - * computation did so. - * - * @return the computed result - */ - public final V invoke() { - int s; - if ((s = doInvoke() & DONE_MASK) != NORMAL) - reportException(s); - return getRawResult(); - } - - /** - * Forks the given tasks, returning when {@code isDone} holds for - * each task or an (unchecked) exception is encountered, in which - * case the exception is rethrown. If more than one task - * encounters an exception, then this method throws any one of - * these exceptions. If any task encounters an exception, the - * other may be cancelled. However, the execution status of - * individual tasks is not guaranteed upon exceptional return. The - * status of each task may be obtained using {@link - * #getException()} and related methods to check if they have been - * cancelled, completed normally or exceptionally, or left - * unprocessed. - * - * @param t1 the first task - * @param t2 the second task - * @throws NullPointerException if any task is null - */ - public static void invokeAll(ForkJoinTask<?> t1, ForkJoinTask<?> t2) { - int s1, s2; - t2.fork(); - if ((s1 = t1.doInvoke() & DONE_MASK) != NORMAL) - t1.reportException(s1); - if ((s2 = t2.doJoin() & DONE_MASK) != NORMAL) - t2.reportException(s2); - } - - /** - * Forks the given tasks, returning when {@code isDone} holds for - * each task or an (unchecked) exception is encountered, in which - * case the exception is rethrown. If more than one task - * encounters an exception, then this method throws any one of - * these exceptions. If any task encounters an exception, others - * may be cancelled. However, the execution status of individual - * tasks is not guaranteed upon exceptional return. The status of - * each task may be obtained using {@link #getException()} and - * related methods to check if they have been cancelled, completed - * normally or exceptionally, or left unprocessed. - * - * @param tasks the tasks - * @throws NullPointerException if any task is null - */ - public static void invokeAll(ForkJoinTask<?>... tasks) { - Throwable ex = null; - int last = tasks.length - 1; - for (int i = last; i >= 0; --i) { - ForkJoinTask<?> t = tasks[i]; - if (t == null) { - if (ex == null) - ex = new NullPointerException(); - } - else if (i != 0) - t.fork(); - else if (t.doInvoke() < NORMAL && ex == null) - ex = t.getException(); - } - for (int i = 1; i <= last; ++i) { - ForkJoinTask<?> t = tasks[i]; - if (t != null) { - if (ex != null) - t.cancel(false); - else if (t.doJoin() < NORMAL) - ex = t.getException(); - } - } - if (ex != null) - rethrow(ex); - } - - /** - * Forks all tasks in the specified collection, returning when - * {@code isDone} holds for each task or an (unchecked) exception - * is encountered, in which case the exception is rethrown. If - * more than one task encounters an exception, then this method - * throws any one of these exceptions. If any task encounters an - * exception, others may be cancelled. However, the execution - * status of individual tasks is not guaranteed upon exceptional - * return. The status of each task may be obtained using {@link - * #getException()} and related methods to check if they have been - * cancelled, completed normally or exceptionally, or left - * unprocessed. - * - * @param tasks the collection of tasks - * @return the tasks argument, to simplify usage - * @throws NullPointerException if tasks or any element are null - */ - public static <T extends ForkJoinTask<?>> Collection<T> invokeAll(Collection<T> tasks) { - if (!(tasks instanceof RandomAccess) || !(tasks instanceof List<?>)) { - invokeAll(tasks.toArray(new ForkJoinTask<?>[tasks.size()])); - return tasks; - } - @SuppressWarnings("unchecked") - List<? extends ForkJoinTask<?>> ts = - (List<? extends ForkJoinTask<?>>) tasks; - Throwable ex = null; - int last = ts.size() - 1; - for (int i = last; i >= 0; --i) { - ForkJoinTask<?> t = ts.get(i); - if (t == null) { - if (ex == null) - ex = new NullPointerException(); - } - else if (i != 0) - t.fork(); - else if (t.doInvoke() < NORMAL && ex == null) - ex = t.getException(); - } - for (int i = 1; i <= last; ++i) { - ForkJoinTask<?> t = ts.get(i); - if (t != null) { - if (ex != null) - t.cancel(false); - else if (t.doJoin() < NORMAL) - ex = t.getException(); - } - } - if (ex != null) - rethrow(ex); - return tasks; - } - - /** - * Attempts to cancel execution of this task. This attempt will - * fail if the task has already completed or could not be - * cancelled for some other reason. If successful, and this task - * has not started when {@code cancel} is called, execution of - * this task is suppressed. After this method returns - * successfully, unless there is an intervening call to {@link - * #reinitialize}, subsequent calls to {@link #isCancelled}, - * {@link #isDone}, and {@code cancel} will return {@code true} - * and calls to {@link #join} and related methods will result in - * {@code CancellationException}. - * - * <p>This method may be overridden in subclasses, but if so, must - * still ensure that these properties hold. In particular, the - * {@code cancel} method itself must not throw exceptions. - * - * <p>This method is designed to be invoked by <em>other</em> - * tasks. To terminate the current task, you can just return or - * throw an unchecked exception from its computation method, or - * invoke {@link #completeExceptionally}. - * - * @param mayInterruptIfRunning this value has no effect in the - * default implementation because interrupts are not used to - * control cancellation. - * - * @return {@code true} if this task is now cancelled - */ - public boolean cancel(boolean mayInterruptIfRunning) { - return (setCompletion(CANCELLED) & DONE_MASK) == CANCELLED; - } - - public final boolean isDone() { - return status < 0; - } - - public final boolean isCancelled() { - return (status & DONE_MASK) == CANCELLED; - } - - /** - * Returns {@code true} if this task threw an exception or was cancelled. - * - * @return {@code true} if this task threw an exception or was cancelled - */ - public final boolean isCompletedAbnormally() { - return status < NORMAL; - } - - /** - * Returns {@code true} if this task completed without throwing an - * exception and was not cancelled. - * - * @return {@code true} if this task completed without throwing an - * exception and was not cancelled - */ - public final boolean isCompletedNormally() { - return (status & DONE_MASK) == NORMAL; - } - - /** - * Returns the exception thrown by the base computation, or a - * {@code CancellationException} if cancelled, or {@code null} if - * none or if the method has not yet completed. - * - * @return the exception, or {@code null} if none - */ - public final Throwable getException() { - int s = status & DONE_MASK; - return ((s >= NORMAL) ? null : - (s == CANCELLED) ? new CancellationException() : - getThrowableException()); - } - - /** - * Completes this task abnormally, and if not already aborted or - * cancelled, causes it to throw the given exception upon - * {@code join} and related operations. This method may be used - * to induce exceptions in asynchronous tasks, or to force - * completion of tasks that would not otherwise complete. Its use - * in other situations is discouraged. This method is - * overridable, but overridden versions must invoke {@code super} - * implementation to maintain guarantees. - * - * @param ex the exception to throw. If this exception is not a - * {@code RuntimeException} or {@code Error}, the actual exception - * thrown will be a {@code RuntimeException} with cause {@code ex}. - */ - public void completeExceptionally(Throwable ex) { - setExceptionalCompletion((ex instanceof RuntimeException) || - (ex instanceof Error) ? ex : - new RuntimeException(ex)); - } - - /** - * Completes this task, and if not already aborted or cancelled, - * returning the given value as the result of subsequent - * invocations of {@code join} and related operations. This method - * may be used to provide results for asynchronous tasks, or to - * provide alternative handling for tasks that would not otherwise - * complete normally. Its use in other situations is - * discouraged. This method is overridable, but overridden - * versions must invoke {@code super} implementation to maintain - * guarantees. - * - * @param value the result value for this task - */ - public void complete(V value) { - try { - setRawResult(value); - } catch (Throwable rex) { - setExceptionalCompletion(rex); - return; - } - setCompletion(NORMAL); - } - - /** - * Completes this task normally without setting a value. The most - * recent value established by {@link #setRawResult} (or {@code - * null} by default) will be returned as the result of subsequent - * invocations of {@code join} and related operations. - * - * @since 1.8 - */ - public final void quietlyComplete() { - setCompletion(NORMAL); - } - - /** - * Waits if necessary for the computation to complete, and then - * retrieves its result. - * - * @return the computed result - * @throws CancellationException if the computation was cancelled - * @throws ExecutionException if the computation threw an - * exception - * @throws InterruptedException if the current thread is not a - * member of a ForkJoinPool and was interrupted while waiting - */ - public final V get() throws InterruptedException, ExecutionException { - int s = (Thread.currentThread() instanceof ForkJoinWorkerThread) ? - doJoin() : externalInterruptibleAwaitDone(); - Throwable ex; - if ((s &= DONE_MASK) == CANCELLED) - throw new CancellationException(); - if (s == EXCEPTIONAL && (ex = getThrowableException()) != null) - throw new ExecutionException(ex); - return getRawResult(); - } - - /** - * Waits if necessary for at most the given time for the computation - * to complete, and then retrieves its result, if available. - * - * @param timeout the maximum time to wait - * @param unit the time unit of the timeout argument - * @return the computed result - * @throws CancellationException if the computation was cancelled - * @throws ExecutionException if the computation threw an - * exception - * @throws InterruptedException if the current thread is not a - * member of a ForkJoinPool and was interrupted while waiting - * @throws TimeoutException if the wait timed out - */ - public final V get(long timeout, TimeUnit unit) - throws InterruptedException, ExecutionException, TimeoutException { - if (Thread.interrupted()) - throw new InterruptedException(); - // Messy in part because we measure in nanosecs, but wait in millisecs - int s; long ms; - long ns = unit.toNanos(timeout); - if ((s = status) >= 0 && ns > 0L) { - long deadline = System.nanoTime() + ns; - ForkJoinPool p = null; - ForkJoinPool.WorkQueue w = null; - Thread t = Thread.currentThread(); - if (t instanceof ForkJoinWorkerThread) { - ForkJoinWorkerThread wt = (ForkJoinWorkerThread)t; - p = wt.pool; - w = wt.workQueue; - p.helpJoinOnce(w, this); // no retries on failure - } - else - ForkJoinPool.externalHelpJoin(this); - boolean canBlock = false; - boolean interrupted = false; - try { - while ((s = status) >= 0) { - if (w != null && w.qlock < 0) - cancelIgnoringExceptions(this); - else if (!canBlock) { - if (p == null || p.tryCompensate()) - canBlock = true; - } - else { - if ((ms = TimeUnit.NANOSECONDS.toMillis(ns)) > 0L && - U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) { - synchronized (this) { - if (status >= 0) { - try { - wait(ms); - } catch (InterruptedException ie) { - if (p == null) - interrupted = true; - } - } - else - notifyAll(); - } - } - if ((s = status) < 0 || interrupted || - (ns = deadline - System.nanoTime()) <= 0L) - break; - } - } - } finally { - if (p != null && canBlock) - p.incrementActiveCount(); - } - if (interrupted) - throw new InterruptedException(); - } - if ((s &= DONE_MASK) != NORMAL) { - Throwable ex; - if (s == CANCELLED) - throw new CancellationException(); - if (s != EXCEPTIONAL) - throw new TimeoutException(); - if ((ex = getThrowableException()) != null) - throw new ExecutionException(ex); - } - return getRawResult(); - } - - /** - * Joins this task, without returning its result or throwing its - * exception. This method may be useful when processing - * collections of tasks when some have been cancelled or otherwise - * known to have aborted. - */ - public final void quietlyJoin() { - doJoin(); - } - - /** - * Commences performing this task and awaits its completion if - * necessary, without returning its result or throwing its - * exception. - */ - public final void quietlyInvoke() { - doInvoke(); - } - - /** - * Possibly executes tasks until the pool hosting the current task - * {@link ForkJoinPool#isQuiescent is quiescent}. This method may - * be of use in designs in which many tasks are forked, but none - * are explicitly joined, instead executing them until all are - * processed. - */ - public static void helpQuiesce() { - Thread t; - if ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) { - ForkJoinWorkerThread wt = (ForkJoinWorkerThread)t; - wt.pool.helpQuiescePool(wt.workQueue); - } - else - ForkJoinPool.quiesceCommonPool(); - } - - /** - * Resets the internal bookkeeping state of this task, allowing a - * subsequent {@code fork}. This method allows repeated reuse of - * this task, but only if reuse occurs when this task has either - * never been forked, or has been forked, then completed and all - * outstanding joins of this task have also completed. Effects - * under any other usage conditions are not guaranteed. - * This method may be useful when executing - * pre-constructed trees of subtasks in loops. - * - * <p>Upon completion of this method, {@code isDone()} reports - * {@code false}, and {@code getException()} reports {@code - * null}. However, the value returned by {@code getRawResult} is - * unaffected. To clear this value, you can invoke {@code - * setRawResult(null)}. - */ - public void reinitialize() { - if ((status & DONE_MASK) == EXCEPTIONAL) - clearExceptionalCompletion(); - else - status = 0; - } - - /** - * Returns the pool hosting the current task execution, or null - * if this task is executing outside of any ForkJoinPool. - * - * @see #inForkJoinPool - * @return the pool, or {@code null} if none - */ - public static ForkJoinPool getPool() { - Thread t = Thread.currentThread(); - return (t instanceof ForkJoinWorkerThread) ? - ((ForkJoinWorkerThread) t).pool : null; - } - - /** - * Returns {@code true} if the current thread is a {@link - * ForkJoinWorkerThread} executing as a ForkJoinPool computation. - * - * @return {@code true} if the current thread is a {@link - * ForkJoinWorkerThread} executing as a ForkJoinPool computation, - * or {@code false} otherwise - */ - public static boolean inForkJoinPool() { - return Thread.currentThread() instanceof ForkJoinWorkerThread; - } - - /** - * Tries to unschedule this task for execution. This method will - * typically (but is not guaranteed to) succeed if this task is - * the most recently forked task by the current thread, and has - * not commenced executing in another thread. This method may be - * useful when arranging alternative local processing of tasks - * that could have been, but were not, stolen. - * - * @return {@code true} if unforked - */ - public boolean tryUnfork() { - Thread t; - return (((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) ? - ((ForkJoinWorkerThread)t).workQueue.tryUnpush(this) : - ForkJoinPool.tryExternalUnpush(this)); - } - - /** - * Returns an estimate of the number of tasks that have been - * forked by the current worker thread but not yet executed. This - * value may be useful for heuristic decisions about whether to - * fork other tasks. - * - * @return the number of tasks - */ - public static int getQueuedTaskCount() { - Thread t; ForkJoinPool.WorkQueue q; - if ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) - q = ((ForkJoinWorkerThread)t).workQueue; - else - q = ForkJoinPool.commonSubmitterQueue(); - return (q == null) ? 0 : q.queueSize(); - } - - /** - * Returns an estimate of how many more locally queued tasks are - * held by the current worker thread than there are other worker - * threads that might steal them, or zero if this thread is not - * operating in a ForkJoinPool. This value may be useful for - * heuristic decisions about whether to fork other tasks. In many - * usages of ForkJoinTasks, at steady state, each worker should - * aim to maintain a small constant surplus (for example, 3) of - * tasks, and to process computations locally if this threshold is - * exceeded. - * - * @return the surplus number of tasks, which may be negative - */ - public static int getSurplusQueuedTaskCount() { - return ForkJoinPool.getSurplusQueuedTaskCount(); - } - - // Extension methods - - /** - * Returns the result that would be returned by {@link #join}, even - * if this task completed abnormally, or {@code null} if this task - * is not known to have been completed. This method is designed - * to aid debugging, as well as to support extensions. Its use in - * any other context is discouraged. - * - * @return the result, or {@code null} if not completed - */ - public abstract V getRawResult(); - - /** - * Forces the given value to be returned as a result. This method - * is designed to support extensions, and should not in general be - * called otherwise. - * - * @param value the value - */ - protected abstract void setRawResult(V value); - - /** - * Immediately performs the base action of this task and returns - * true if, upon return from this method, this task is guaranteed - * to have completed normally. This method may return false - * otherwise, to indicate that this task is not necessarily - * complete (or is not known to be complete), for example in - * asynchronous actions that require explicit invocations of - * completion methods. This method may also throw an (unchecked) - * exception to indicate abnormal exit. This method is designed to - * support extensions, and should not in general be called - * otherwise. - * - * @return {@code true} if this task is known to have completed normally - */ - protected abstract boolean exec(); - - /** - * Returns, but does not unschedule or execute, a task queued by - * the current thread but not yet executed, if one is immediately - * available. There is no guarantee that this task will actually - * be polled or executed next. Conversely, this method may return - * null even if a task exists but cannot be accessed without - * contention with other threads. This method is designed - * primarily to support extensions, and is unlikely to be useful - * otherwise. - * - * @return the next task, or {@code null} if none are available - */ - protected static ForkJoinTask<?> peekNextLocalTask() { - Thread t; ForkJoinPool.WorkQueue q; - if ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) - q = ((ForkJoinWorkerThread)t).workQueue; - else - q = ForkJoinPool.commonSubmitterQueue(); - return (q == null) ? null : q.peek(); - } - - /** - * Unschedules and returns, without executing, the next task - * queued by the current thread but not yet executed, if the - * current thread is operating in a ForkJoinPool. This method is - * designed primarily to support extensions, and is unlikely to be - * useful otherwise. - * - * @return the next task, or {@code null} if none are available - */ - protected static ForkJoinTask<?> pollNextLocalTask() { - Thread t; - return ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) ? - ((ForkJoinWorkerThread)t).workQueue.nextLocalTask() : - null; - } - - /** - * If the current thread is operating in a ForkJoinPool, - * unschedules and returns, without executing, the next task - * queued by the current thread but not yet executed, if one is - * available, or if not available, a task that was forked by some - * other thread, if available. Availability may be transient, so a - * {@code null} result does not necessarily imply quiescence of - * the pool this task is operating in. This method is designed - * primarily to support extensions, and is unlikely to be useful - * otherwise. - * - * @return a task, or {@code null} if none are available - */ - protected static ForkJoinTask<?> pollTask() { - Thread t; ForkJoinWorkerThread wt; - return ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) ? - (wt = (ForkJoinWorkerThread)t).pool.nextTaskFor(wt.workQueue) : - null; - } - - // tag operations - - /** - * Returns the tag for this task. - * - * @return the tag for this task - * @since 1.8 - */ - public final short getForkJoinTaskTag() { - return (short)status; - } - - /** - * Atomically sets the tag value for this task. - * - * @param tag the tag value - * @return the previous value of the tag - * @since 1.8 - */ - public final short setForkJoinTaskTag(short tag) { - for (int s;;) { - if (U.compareAndSwapInt(this, STATUS, s = status, - (s & ~SMASK) | (tag & SMASK))) - return (short)s; - } - } - - /** - * Atomically conditionally sets the tag value for this task. - * Among other applications, tags can be used as visit markers - * in tasks operating on graphs, as in methods that check: {@code - * if (task.compareAndSetForkJoinTaskTag((short)0, (short)1))} - * before processing, otherwise exiting because the node has - * already been visited. - * - * @param e the expected tag value - * @param tag the new tag value - * @return true if successful; i.e., the current value was - * equal to e and is now tag. - * @since 1.8 - */ - public final boolean compareAndSetForkJoinTaskTag(short e, short tag) { - for (int s;;) { - if ((short)(s = status) != e) - return false; - if (U.compareAndSwapInt(this, STATUS, s, - (s & ~SMASK) | (tag & SMASK))) - return true; - } - } - - /** - * Adaptor for Runnables. This implements RunnableFuture - * to be compliant with AbstractExecutorService constraints - * when used in ForkJoinPool. - */ - @Deprecated - static final class AdaptedRunnable<T> extends ForkJoinTask<T> - implements RunnableFuture<T> { - final Runnable runnable; - T result; - AdaptedRunnable(Runnable runnable, T result) { - if (runnable == null) throw new NullPointerException(); - this.runnable = runnable; - this.result = result; // OK to set this even before completion - } - public final T getRawResult() { return result; } - public final void setRawResult(T v) { result = v; } - public final boolean exec() { runnable.run(); return true; } - public final void run() { invoke(); } - private static final long serialVersionUID = 5232453952276885070L; - } - - /** - * Adaptor for Runnables without results - */ - @Deprecated - static final class AdaptedRunnableAction extends ForkJoinTask<Void> - implements RunnableFuture<Void> { - final Runnable runnable; - AdaptedRunnableAction(Runnable runnable) { - if (runnable == null) throw new NullPointerException(); - this.runnable = runnable; - } - public final Void getRawResult() { return null; } - public final void setRawResult(Void v) { } - public final boolean exec() { runnable.run(); return true; } - public final void run() { invoke(); } - private static final long serialVersionUID = 5232453952276885070L; - } - - /** - * Adaptor for Callables - */ - @Deprecated - static final class AdaptedCallable<T> extends ForkJoinTask<T> - implements RunnableFuture<T> { - final Callable<? extends T> callable; - T result; - AdaptedCallable(Callable<? extends T> callable) { - if (callable == null) throw new NullPointerException(); - this.callable = callable; - } - public final T getRawResult() { return result; } - public final void setRawResult(T v) { result = v; } - public final boolean exec() { - try { - result = callable.call(); - return true; - } catch (Error err) { - throw err; - } catch (RuntimeException rex) { - throw rex; - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - public final void run() { invoke(); } - private static final long serialVersionUID = 2838392045355241008L; - } - - /** - * Returns a new {@code ForkJoinTask} that performs the {@code run} - * method of the given {@code Runnable} as its action, and returns - * a null result upon {@link #join}. - * - * @param runnable the runnable action - * @return the task - */ - public static ForkJoinTask<?> adapt(Runnable runnable) { - return new AdaptedRunnableAction(runnable); - } - - /** - * Returns a new {@code ForkJoinTask} that performs the {@code run} - * method of the given {@code Runnable} as its action, and returns - * the given result upon {@link #join}. - * - * @param runnable the runnable action - * @param result the result upon completion - * @return the task - */ - public static <T> ForkJoinTask<T> adapt(Runnable runnable, T result) { - return new AdaptedRunnable<T>(runnable, result); - } - - /** - * Returns a new {@code ForkJoinTask} that performs the {@code call} - * method of the given {@code Callable} as its action, and returns - * its result upon {@link #join}, translating any checked exceptions - * encountered into {@code RuntimeException}. - * - * @param callable the callable action - * @return the task - */ - public static <T> ForkJoinTask<T> adapt(Callable<? extends T> callable) { - return new AdaptedCallable<T>(callable); - } - - // Serialization support - - private static final long serialVersionUID = -7721805057305804111L; - - /** - * Saves this task to a stream (that is, serializes it). - * - * @serialData the current run status and the exception thrown - * during execution, or {@code null} if none - */ - private void writeObject(java.io.ObjectOutputStream s) - throws java.io.IOException { - s.defaultWriteObject(); - s.writeObject(getException()); - } - - /** - * Reconstitutes this task from a stream (that is, deserializes it). - */ - private void readObject(java.io.ObjectInputStream s) - throws java.io.IOException, ClassNotFoundException { - s.defaultReadObject(); - Object ex = s.readObject(); - if (ex != null) - setExceptionalCompletion((Throwable)ex); - } - - // Unsafe mechanics - private static final sun.misc.Unsafe U; - private static final long STATUS; - - static { - exceptionTableLock = new ReentrantLock(); - exceptionTableRefQueue = new ReferenceQueue<Object>(); - exceptionTable = new ExceptionNode[EXCEPTION_MAP_CAPACITY]; - try { - U = getUnsafe(); - Class<?> k = ForkJoinTask.class; - STATUS = U.objectFieldOffset - (k.getDeclaredField("status")); - } catch (Exception e) { - throw new Error(e); - } - } - - /** - * Returns a sun.misc.Unsafe. Suitable for use in a 3rd party package. - * Replace with a simple call to Unsafe.getUnsafe when integrating - * into a jdk. - * - * @return a sun.misc.Unsafe - */ - private static sun.misc.Unsafe getUnsafe() { - return scala.concurrent.util.Unsafe.instance; - } -} diff --git a/src/forkjoin/scala/concurrent/forkjoin/ForkJoinWorkerThread.java b/src/forkjoin/scala/concurrent/forkjoin/ForkJoinWorkerThread.java deleted file mode 100644 index e00fb5cc43..0000000000 --- a/src/forkjoin/scala/concurrent/forkjoin/ForkJoinWorkerThread.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -package scala.concurrent.forkjoin; - -/** - * A thread managed by a {@link ForkJoinPool}, which executes - * {@link ForkJoinTask}s. - * This class is subclassable solely for the sake of adding - * functionality -- there are no overridable methods dealing with - * scheduling or execution. However, you can override initialization - * and termination methods surrounding the main task processing loop. - * If you do create such a subclass, you will also need to supply a - * custom {@link ForkJoinPool.ForkJoinWorkerThreadFactory} to use it - * in a {@code ForkJoinPool}. - * - * @since 1.7 - * @author Doug Lea - */ -@Deprecated -public class ForkJoinWorkerThread extends Thread { - /* - * ForkJoinWorkerThreads are managed by ForkJoinPools and perform - * ForkJoinTasks. For explanation, see the internal documentation - * of class ForkJoinPool. - * - * This class just maintains links to its pool and WorkQueue. The - * pool field is set immediately upon construction, but the - * workQueue field is not set until a call to registerWorker - * completes. This leads to a visibility race, that is tolerated - * by requiring that the workQueue field is only accessed by the - * owning thread. - */ - - final ForkJoinPool pool; // the pool this thread works in - final ForkJoinPool.WorkQueue workQueue; // work-stealing mechanics - - /** - * Creates a ForkJoinWorkerThread operating in the given pool. - * - * @param pool the pool this thread works in - * @throws NullPointerException if pool is null - */ - protected ForkJoinWorkerThread(ForkJoinPool pool) { - // Use a placeholder until a useful name can be set in registerWorker - super("aForkJoinWorkerThread"); - this.pool = pool; - this.workQueue = pool.registerWorker(this); - } - - /** - * Returns the pool hosting this thread. - * - * @return the pool - */ - public ForkJoinPool getPool() { - return pool; - } - - /** - * Returns the index number of this thread in its pool. The - * returned value ranges from zero to the maximum number of - * threads (minus one) that have ever been created in the pool. - * This method may be useful for applications that track status or - * collect results per-worker rather than per-task. - * - * @return the index number - */ - public int getPoolIndex() { - return workQueue.poolIndex; - } - - /** - * Initializes internal state after construction but before - * processing any tasks. If you override this method, you must - * invoke {@code super.onStart()} at the beginning of the method. - * Initialization requires care: Most fields must have legal - * default values, to ensure that attempted accesses from other - * threads work correctly even before this thread starts - * processing tasks. - */ - protected void onStart() { - } - - /** - * Performs cleanup associated with termination of this worker - * thread. If you override this method, you must invoke - * {@code super.onTermination} at the end of the overridden method. - * - * @param exception the exception causing this thread to abort due - * to an unrecoverable error, or {@code null} if completed normally - */ - protected void onTermination(Throwable exception) { - } - - /** - * This method is required to be public, but should never be - * called explicitly. It performs the main run loop to execute - * {@link ForkJoinTask}s. - */ - public void run() { - Throwable exception = null; - try { - onStart(); - pool.runWorker(workQueue); - } catch (Throwable ex) { - exception = ex; - } finally { - try { - onTermination(exception); - } catch (Throwable ex) { - if (exception == null) - exception = ex; - } finally { - pool.deregisterWorker(this, exception); - } - } - } -} diff --git a/src/forkjoin/scala/concurrent/forkjoin/LinkedTransferQueue.java b/src/forkjoin/scala/concurrent/forkjoin/LinkedTransferQueue.java deleted file mode 100644 index 47d52af895..0000000000 --- a/src/forkjoin/scala/concurrent/forkjoin/LinkedTransferQueue.java +++ /dev/null @@ -1,1338 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -package scala.concurrent.forkjoin; - -import java.util.AbstractQueue; -import java.util.Collection; -import java.util.Iterator; -import java.util.NoSuchElementException; -import java.util.Queue; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.LockSupport; - -/** - * An unbounded {@link TransferQueue} based on linked nodes. - * This queue orders elements FIFO (first-in-first-out) with respect - * to any given producer. The <em>head</em> of the queue is that - * element that has been on the queue the longest time for some - * producer. The <em>tail</em> of the queue is that element that has - * been on the queue the shortest time for some producer. - * - * <p>Beware that, unlike in most collections, the {@code size} method - * is <em>NOT</em> a constant-time operation. Because of the - * asynchronous nature of these queues, determining the current number - * of elements requires a traversal of the elements, and so may report - * inaccurate results if this collection is modified during traversal. - * Additionally, the bulk operations {@code addAll}, - * {@code removeAll}, {@code retainAll}, {@code containsAll}, - * {@code equals}, and {@code toArray} are <em>not</em> guaranteed - * to be performed atomically. For example, an iterator operating - * concurrently with an {@code addAll} operation might view only some - * of the added elements. - * - * <p>This class and its iterator implement all of the - * <em>optional</em> methods of the {@link Collection} and {@link - * Iterator} interfaces. - * - * <p>Memory consistency effects: As with other concurrent - * collections, actions in a thread prior to placing an object into a - * {@code LinkedTransferQueue} - * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a> - * actions subsequent to the access or removal of that element from - * the {@code LinkedTransferQueue} in another thread. - * - * <p>This class is a member of the - * <a href="{@docRoot}/../technotes/guides/collections/index.html"> - * Java Collections Framework</a>. - * - * @since 1.7 - * @author Doug Lea - * @param <E> the type of elements held in this collection - */ -@Deprecated -public class LinkedTransferQueue<E> extends AbstractQueue<E> - implements TransferQueue<E>, java.io.Serializable { - private static final long serialVersionUID = -3223113410248163686L; - - /* - * *** Overview of Dual Queues with Slack *** - * - * Dual Queues, introduced by Scherer and Scott - * (http://www.cs.rice.edu/~wns1/papers/2004-DISC-DDS.pdf) are - * (linked) queues in which nodes may represent either data or - * requests. When a thread tries to enqueue a data node, but - * encounters a request node, it instead "matches" and removes it; - * and vice versa for enqueuing requests. Blocking Dual Queues - * arrange that threads enqueuing unmatched requests block until - * other threads provide the match. Dual Synchronous Queues (see - * Scherer, Lea, & Scott - * http://www.cs.rochester.edu/u/scott/papers/2009_Scherer_CACM_SSQ.pdf) - * additionally arrange that threads enqueuing unmatched data also - * block. Dual Transfer Queues support all of these modes, as - * dictated by callers. - * - * A FIFO dual queue may be implemented using a variation of the - * Michael & Scott (M&S) lock-free queue algorithm - * (http://www.cs.rochester.edu/u/scott/papers/1996_PODC_queues.pdf). - * It maintains two pointer fields, "head", pointing to a - * (matched) node that in turn points to the first actual - * (unmatched) queue node (or null if empty); and "tail" that - * points to the last node on the queue (or again null if - * empty). For example, here is a possible queue with four data - * elements: - * - * head tail - * | | - * v v - * M -> U -> U -> U -> U - * - * The M&S queue algorithm is known to be prone to scalability and - * overhead limitations when maintaining (via CAS) these head and - * tail pointers. This has led to the development of - * contention-reducing variants such as elimination arrays (see - * Moir et al http://portal.acm.org/citation.cfm?id=1074013) and - * optimistic back pointers (see Ladan-Mozes & Shavit - * http://people.csail.mit.edu/edya/publications/OptimisticFIFOQueue-journal.pdf). - * However, the nature of dual queues enables a simpler tactic for - * improving M&S-style implementations when dual-ness is needed. - * - * In a dual queue, each node must atomically maintain its match - * status. While there are other possible variants, we implement - * this here as: for a data-mode node, matching entails CASing an - * "item" field from a non-null data value to null upon match, and - * vice-versa for request nodes, CASing from null to a data - * value. (Note that the linearization properties of this style of - * queue are easy to verify -- elements are made available by - * linking, and unavailable by matching.) Compared to plain M&S - * queues, this property of dual queues requires one additional - * successful atomic operation per enq/deq pair. But it also - * enables lower cost variants of queue maintenance mechanics. (A - * variation of this idea applies even for non-dual queues that - * support deletion of interior elements, such as - * j.u.c.ConcurrentLinkedQueue.) - * - * Once a node is matched, its match status can never again - * change. We may thus arrange that the linked list of them - * contain a prefix of zero or more matched nodes, followed by a - * suffix of zero or more unmatched nodes. (Note that we allow - * both the prefix and suffix to be zero length, which in turn - * means that we do not use a dummy header.) If we were not - * concerned with either time or space efficiency, we could - * correctly perform enqueue and dequeue operations by traversing - * from a pointer to the initial node; CASing the item of the - * first unmatched node on match and CASing the next field of the - * trailing node on appends. (Plus some special-casing when - * initially empty). While this would be a terrible idea in - * itself, it does have the benefit of not requiring ANY atomic - * updates on head/tail fields. - * - * We introduce here an approach that lies between the extremes of - * never versus always updating queue (head and tail) pointers. - * This offers a tradeoff between sometimes requiring extra - * traversal steps to locate the first and/or last unmatched - * nodes, versus the reduced overhead and contention of fewer - * updates to queue pointers. For example, a possible snapshot of - * a queue is: - * - * head tail - * | | - * v v - * M -> M -> U -> U -> U -> U - * - * The best value for this "slack" (the targeted maximum distance - * between the value of "head" and the first unmatched node, and - * similarly for "tail") is an empirical matter. We have found - * that using very small constants in the range of 1-3 work best - * over a range of platforms. Larger values introduce increasing - * costs of cache misses and risks of long traversal chains, while - * smaller values increase CAS contention and overhead. - * - * Dual queues with slack differ from plain M&S dual queues by - * virtue of only sometimes updating head or tail pointers when - * matching, appending, or even traversing nodes; in order to - * maintain a targeted slack. The idea of "sometimes" may be - * operationalized in several ways. The simplest is to use a - * per-operation counter incremented on each traversal step, and - * to try (via CAS) to update the associated queue pointer - * whenever the count exceeds a threshold. Another, that requires - * more overhead, is to use random number generators to update - * with a given probability per traversal step. - * - * In any strategy along these lines, because CASes updating - * fields may fail, the actual slack may exceed targeted - * slack. However, they may be retried at any time to maintain - * targets. Even when using very small slack values, this - * approach works well for dual queues because it allows all - * operations up to the point of matching or appending an item - * (hence potentially allowing progress by another thread) to be - * read-only, thus not introducing any further contention. As - * described below, we implement this by performing slack - * maintenance retries only after these points. - * - * As an accompaniment to such techniques, traversal overhead can - * be further reduced without increasing contention of head - * pointer updates: Threads may sometimes shortcut the "next" link - * path from the current "head" node to be closer to the currently - * known first unmatched node, and similarly for tail. Again, this - * may be triggered with using thresholds or randomization. - * - * These ideas must be further extended to avoid unbounded amounts - * of costly-to-reclaim garbage caused by the sequential "next" - * links of nodes starting at old forgotten head nodes: As first - * described in detail by Boehm - * (http://portal.acm.org/citation.cfm?doid=503272.503282) if a GC - * delays noticing that any arbitrarily old node has become - * garbage, all newer dead nodes will also be unreclaimed. - * (Similar issues arise in non-GC environments.) To cope with - * this in our implementation, upon CASing to advance the head - * pointer, we set the "next" link of the previous head to point - * only to itself; thus limiting the length of connected dead lists. - * (We also take similar care to wipe out possibly garbage - * retaining values held in other Node fields.) However, doing so - * adds some further complexity to traversal: If any "next" - * pointer links to itself, it indicates that the current thread - * has lagged behind a head-update, and so the traversal must - * continue from the "head". Traversals trying to find the - * current tail starting from "tail" may also encounter - * self-links, in which case they also continue at "head". - * - * It is tempting in slack-based scheme to not even use CAS for - * updates (similarly to Ladan-Mozes & Shavit). However, this - * cannot be done for head updates under the above link-forgetting - * mechanics because an update may leave head at a detached node. - * And while direct writes are possible for tail updates, they - * increase the risk of long retraversals, and hence long garbage - * chains, which can be much more costly than is worthwhile - * considering that the cost difference of performing a CAS vs - * write is smaller when they are not triggered on each operation - * (especially considering that writes and CASes equally require - * additional GC bookkeeping ("write barriers") that are sometimes - * more costly than the writes themselves because of contention). - * - * *** Overview of implementation *** - * - * We use a threshold-based approach to updates, with a slack - * threshold of two -- that is, we update head/tail when the - * current pointer appears to be two or more steps away from the - * first/last node. The slack value is hard-wired: a path greater - * than one is naturally implemented by checking equality of - * traversal pointers except when the list has only one element, - * in which case we keep slack threshold at one. Avoiding tracking - * explicit counts across method calls slightly simplifies an - * already-messy implementation. Using randomization would - * probably work better if there were a low-quality dirt-cheap - * per-thread one available, but even ThreadLocalRandom is too - * heavy for these purposes. - * - * With such a small slack threshold value, it is not worthwhile - * to augment this with path short-circuiting (i.e., unsplicing - * interior nodes) except in the case of cancellation/removal (see - * below). - * - * We allow both the head and tail fields to be null before any - * nodes are enqueued; initializing upon first append. This - * simplifies some other logic, as well as providing more - * efficient explicit control paths instead of letting JVMs insert - * implicit NullPointerExceptions when they are null. While not - * currently fully implemented, we also leave open the possibility - * of re-nulling these fields when empty (which is complicated to - * arrange, for little benefit.) - * - * All enqueue/dequeue operations are handled by the single method - * "xfer" with parameters indicating whether to act as some form - * of offer, put, poll, take, or transfer (each possibly with - * timeout). The relative complexity of using one monolithic - * method outweighs the code bulk and maintenance problems of - * using separate methods for each case. - * - * Operation consists of up to three phases. The first is - * implemented within method xfer, the second in tryAppend, and - * the third in method awaitMatch. - * - * 1. Try to match an existing node - * - * Starting at head, skip already-matched nodes until finding - * an unmatched node of opposite mode, if one exists, in which - * case matching it and returning, also if necessary updating - * head to one past the matched node (or the node itself if the - * list has no other unmatched nodes). If the CAS misses, then - * a loop retries advancing head by two steps until either - * success or the slack is at most two. By requiring that each - * attempt advances head by two (if applicable), we ensure that - * the slack does not grow without bound. Traversals also check - * if the initial head is now off-list, in which case they - * start at the new head. - * - * If no candidates are found and the call was untimed - * poll/offer, (argument "how" is NOW) return. - * - * 2. Try to append a new node (method tryAppend) - * - * Starting at current tail pointer, find the actual last node - * and try to append a new node (or if head was null, establish - * the first node). Nodes can be appended only if their - * predecessors are either already matched or are of the same - * mode. If we detect otherwise, then a new node with opposite - * mode must have been appended during traversal, so we must - * restart at phase 1. The traversal and update steps are - * otherwise similar to phase 1: Retrying upon CAS misses and - * checking for staleness. In particular, if a self-link is - * encountered, then we can safely jump to a node on the list - * by continuing the traversal at current head. - * - * On successful append, if the call was ASYNC, return. - * - * 3. Await match or cancellation (method awaitMatch) - * - * Wait for another thread to match node; instead cancelling if - * the current thread was interrupted or the wait timed out. On - * multiprocessors, we use front-of-queue spinning: If a node - * appears to be the first unmatched node in the queue, it - * spins a bit before blocking. In either case, before blocking - * it tries to unsplice any nodes between the current "head" - * and the first unmatched node. - * - * Front-of-queue spinning vastly improves performance of - * heavily contended queues. And so long as it is relatively - * brief and "quiet", spinning does not much impact performance - * of less-contended queues. During spins threads check their - * interrupt status and generate a thread-local random number - * to decide to occasionally perform a Thread.yield. While - * yield has underdefined specs, we assume that it might help, - * and will not hurt, in limiting impact of spinning on busy - * systems. We also use smaller (1/2) spins for nodes that are - * not known to be front but whose predecessors have not - * blocked -- these "chained" spins avoid artifacts of - * front-of-queue rules which otherwise lead to alternating - * nodes spinning vs blocking. Further, front threads that - * represent phase changes (from data to request node or vice - * versa) compared to their predecessors receive additional - * chained spins, reflecting longer paths typically required to - * unblock threads during phase changes. - * - * - * ** Unlinking removed interior nodes ** - * - * In addition to minimizing garbage retention via self-linking - * described above, we also unlink removed interior nodes. These - * may arise due to timed out or interrupted waits, or calls to - * remove(x) or Iterator.remove. Normally, given a node that was - * at one time known to be the predecessor of some node s that is - * to be removed, we can unsplice s by CASing the next field of - * its predecessor if it still points to s (otherwise s must - * already have been removed or is now offlist). But there are two - * situations in which we cannot guarantee to make node s - * unreachable in this way: (1) If s is the trailing node of list - * (i.e., with null next), then it is pinned as the target node - * for appends, so can only be removed later after other nodes are - * appended. (2) We cannot necessarily unlink s given a - * predecessor node that is matched (including the case of being - * cancelled): the predecessor may already be unspliced, in which - * case some previous reachable node may still point to s. - * (For further explanation see Herlihy & Shavit "The Art of - * Multiprocessor Programming" chapter 9). Although, in both - * cases, we can rule out the need for further action if either s - * or its predecessor are (or can be made to be) at, or fall off - * from, the head of list. - * - * Without taking these into account, it would be possible for an - * unbounded number of supposedly removed nodes to remain - * reachable. Situations leading to such buildup are uncommon but - * can occur in practice; for example when a series of short timed - * calls to poll repeatedly time out but never otherwise fall off - * the list because of an untimed call to take at the front of the - * queue. - * - * When these cases arise, rather than always retraversing the - * entire list to find an actual predecessor to unlink (which - * won't help for case (1) anyway), we record a conservative - * estimate of possible unsplice failures (in "sweepVotes"). - * We trigger a full sweep when the estimate exceeds a threshold - * ("SWEEP_THRESHOLD") indicating the maximum number of estimated - * removal failures to tolerate before sweeping through, unlinking - * cancelled nodes that were not unlinked upon initial removal. - * We perform sweeps by the thread hitting threshold (rather than - * background threads or by spreading work to other threads) - * because in the main contexts in which removal occurs, the - * caller is already timed-out, cancelled, or performing a - * potentially O(n) operation (e.g. remove(x)), none of which are - * time-critical enough to warrant the overhead that alternatives - * would impose on other threads. - * - * Because the sweepVotes estimate is conservative, and because - * nodes become unlinked "naturally" as they fall off the head of - * the queue, and because we allow votes to accumulate even while - * sweeps are in progress, there are typically significantly fewer - * such nodes than estimated. Choice of a threshold value - * balances the likelihood of wasted effort and contention, versus - * providing a worst-case bound on retention of interior nodes in - * quiescent queues. The value defined below was chosen - * empirically to balance these under various timeout scenarios. - * - * Note that we cannot self-link unlinked interior nodes during - * sweeps. However, the associated garbage chains terminate when - * some successor ultimately falls off the head of the list and is - * self-linked. - */ - - /** True if on multiprocessor */ - private static final boolean MP = - Runtime.getRuntime().availableProcessors() > 1; - - /** - * The number of times to spin (with randomly interspersed calls - * to Thread.yield) on multiprocessor before blocking when a node - * is apparently the first waiter in the queue. See above for - * explanation. Must be a power of two. The value is empirically - * derived -- it works pretty well across a variety of processors, - * numbers of CPUs, and OSes. - */ - private static final int FRONT_SPINS = 1 << 7; - - /** - * The number of times to spin before blocking when a node is - * preceded by another node that is apparently spinning. Also - * serves as an increment to FRONT_SPINS on phase changes, and as - * base average frequency for yielding during spins. Must be a - * power of two. - */ - private static final int CHAINED_SPINS = FRONT_SPINS >>> 1; - - /** - * The maximum number of estimated removal failures (sweepVotes) - * to tolerate before sweeping through the queue unlinking - * cancelled nodes that were not unlinked upon initial - * removal. See above for explanation. The value must be at least - * two to avoid useless sweeps when removing trailing nodes. - */ - static final int SWEEP_THRESHOLD = 32; - - /** - * Queue nodes. Uses Object, not E, for items to allow forgetting - * them after use. Relies heavily on Unsafe mechanics to minimize - * unnecessary ordering constraints: Writes that are intrinsically - * ordered wrt other accesses or CASes use simple relaxed forms. - */ - @Deprecated - static final class Node { - final boolean isData; // false if this is a request node - volatile Object item; // initially non-null if isData; CASed to match - volatile Node next; - volatile Thread waiter; // null until waiting - - // CAS methods for fields - final boolean casNext(Node cmp, Node val) { - return UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val); - } - - final boolean casItem(Object cmp, Object val) { - // assert cmp == null || cmp.getClass() != Node.class; - return UNSAFE.compareAndSwapObject(this, itemOffset, cmp, val); - } - - /** - * Constructs a new node. Uses relaxed write because item can - * only be seen after publication via casNext. - */ - Node(Object item, boolean isData) { - UNSAFE.putObject(this, itemOffset, item); // relaxed write - this.isData = isData; - } - - /** - * Links node to itself to avoid garbage retention. Called - * only after CASing head field, so uses relaxed write. - */ - final void forgetNext() { - UNSAFE.putObject(this, nextOffset, this); - } - - /** - * Sets item to self and waiter to null, to avoid garbage - * retention after matching or cancelling. Uses relaxed writes - * because order is already constrained in the only calling - * contexts: item is forgotten only after volatile/atomic - * mechanics that extract items. Similarly, clearing waiter - * follows either CAS or return from park (if ever parked; - * else we don't care). - */ - final void forgetContents() { - UNSAFE.putObject(this, itemOffset, this); - UNSAFE.putObject(this, waiterOffset, null); - } - - /** - * Returns true if this node has been matched, including the - * case of artificial matches due to cancellation. - */ - final boolean isMatched() { - Object x = item; - return (x == this) || ((x == null) == isData); - } - - /** - * Returns true if this is an unmatched request node. - */ - final boolean isUnmatchedRequest() { - return !isData && item == null; - } - - /** - * Returns true if a node with the given mode cannot be - * appended to this node because this node is unmatched and - * has opposite data mode. - */ - final boolean cannotPrecede(boolean haveData) { - boolean d = isData; - Object x; - return d != haveData && (x = item) != this && (x != null) == d; - } - - /** - * Tries to artificially match a data node -- used by remove. - */ - final boolean tryMatchData() { - // assert isData; - Object x = item; - if (x != null && x != this && casItem(x, null)) { - LockSupport.unpark(waiter); - return true; - } - return false; - } - - private static final long serialVersionUID = -3375979862319811754L; - - // Unsafe mechanics - private static final sun.misc.Unsafe UNSAFE; - private static final long itemOffset; - private static final long nextOffset; - private static final long waiterOffset; - static { - try { - UNSAFE = getUnsafe(); - Class<?> k = Node.class; - itemOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("item")); - nextOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("next")); - waiterOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("waiter")); - } catch (Exception e) { - throw new Error(e); - } - } - } - - /** head of the queue; null until first enqueue */ - transient volatile Node head; - - /** tail of the queue; null until first append */ - private transient volatile Node tail; - - /** The number of apparent failures to unsplice removed nodes */ - private transient volatile int sweepVotes; - - // CAS methods for fields - private boolean casTail(Node cmp, Node val) { - return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val); - } - - private boolean casHead(Node cmp, Node val) { - return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val); - } - - private boolean casSweepVotes(int cmp, int val) { - return UNSAFE.compareAndSwapInt(this, sweepVotesOffset, cmp, val); - } - - /* - * Possible values for "how" argument in xfer method. - */ - private static final int NOW = 0; // for untimed poll, tryTransfer - private static final int ASYNC = 1; // for offer, put, add - private static final int SYNC = 2; // for transfer, take - private static final int TIMED = 3; // for timed poll, tryTransfer - - @SuppressWarnings("unchecked") - static <E> E cast(Object item) { - // assert item == null || item.getClass() != Node.class; - return (E) item; - } - - /** - * Implements all queuing methods. See above for explanation. - * - * @param e the item or null for take - * @param haveData true if this is a put, else a take - * @param how NOW, ASYNC, SYNC, or TIMED - * @param nanos timeout in nanosecs, used only if mode is TIMED - * @return an item if matched, else e - * @throws NullPointerException if haveData mode but e is null - */ - private E xfer(E e, boolean haveData, int how, long nanos) { - if (haveData && (e == null)) - throw new NullPointerException(); - Node s = null; // the node to append, if needed - - retry: - for (;;) { // restart on append race - - for (Node h = head, p = h; p != null;) { // find & match first node - boolean isData = p.isData; - Object item = p.item; - if (item != p && (item != null) == isData) { // unmatched - if (isData == haveData) // can't match - break; - if (p.casItem(item, e)) { // match - for (Node q = p; q != h;) { - Node n = q.next; // update by 2 unless singleton - if (head == h && casHead(h, n == null ? q : n)) { - h.forgetNext(); - break; - } // advance and retry - if ((h = head) == null || - (q = h.next) == null || !q.isMatched()) - break; // unless slack < 2 - } - LockSupport.unpark(p.waiter); - return LinkedTransferQueue.<E>cast(item); - } - } - Node n = p.next; - p = (p != n) ? n : (h = head); // Use head if p offlist - } - - if (how != NOW) { // No matches available - if (s == null) - s = new Node(e, haveData); - Node pred = tryAppend(s, haveData); - if (pred == null) - continue retry; // lost race vs opposite mode - if (how != ASYNC) - return awaitMatch(s, pred, e, (how == TIMED), nanos); - } - return e; // not waiting - } - } - - /** - * Tries to append node s as tail. - * - * @param s the node to append - * @param haveData true if appending in data mode - * @return null on failure due to losing race with append in - * different mode, else s's predecessor, or s itself if no - * predecessor - */ - private Node tryAppend(Node s, boolean haveData) { - for (Node t = tail, p = t;;) { // move p to last node and append - Node n, u; // temps for reads of next & tail - if (p == null && (p = head) == null) { - if (casHead(null, s)) - return s; // initialize - } - else if (p.cannotPrecede(haveData)) - return null; // lost race vs opposite mode - else if ((n = p.next) != null) // not last; keep traversing - p = p != t && t != (u = tail) ? (t = u) : // stale tail - (p != n) ? n : null; // restart if off list - else if (!p.casNext(null, s)) - p = p.next; // re-read on CAS failure - else { - if (p != t) { // update if slack now >= 2 - while ((tail != t || !casTail(t, s)) && - (t = tail) != null && - (s = t.next) != null && // advance and retry - (s = s.next) != null && s != t); - } - return p; - } - } - } - - /** - * Spins/yields/blocks until node s is matched or caller gives up. - * - * @param s the waiting node - * @param pred the predecessor of s, or s itself if it has no - * predecessor, or null if unknown (the null case does not occur - * in any current calls but may in possible future extensions) - * @param e the comparison value for checking match - * @param timed if true, wait only until timeout elapses - * @param nanos timeout in nanosecs, used only if timed is true - * @return matched item, or e if unmatched on interrupt or timeout - */ - private E awaitMatch(Node s, Node pred, E e, boolean timed, long nanos) { - long lastTime = timed ? System.nanoTime() : 0L; - Thread w = Thread.currentThread(); - int spins = -1; // initialized after first item and cancel checks - ThreadLocalRandom randomYields = null; // bound if needed - - for (;;) { - Object item = s.item; - if (item != e) { // matched - // assert item != s; - s.forgetContents(); // avoid garbage - return LinkedTransferQueue.<E>cast(item); - } - if ((w.isInterrupted() || (timed && nanos <= 0)) && - s.casItem(e, s)) { // cancel - unsplice(pred, s); - return e; - } - - if (spins < 0) { // establish spins at/near front - if ((spins = spinsFor(pred, s.isData)) > 0) - randomYields = ThreadLocalRandom.current(); - } - else if (spins > 0) { // spin - --spins; - if (randomYields.nextInt(CHAINED_SPINS) == 0) - Thread.yield(); // occasionally yield - } - else if (s.waiter == null) { - s.waiter = w; // request unpark then recheck - } - else if (timed) { - long now = System.nanoTime(); - if ((nanos -= now - lastTime) > 0) - LockSupport.parkNanos(this, nanos); - lastTime = now; - } - else { - LockSupport.park(this); - } - } - } - - /** - * Returns spin/yield value for a node with given predecessor and - * data mode. See above for explanation. - */ - private static int spinsFor(Node pred, boolean haveData) { - if (MP && pred != null) { - if (pred.isData != haveData) // phase change - return FRONT_SPINS + CHAINED_SPINS; - if (pred.isMatched()) // probably at front - return FRONT_SPINS; - if (pred.waiter == null) // pred apparently spinning - return CHAINED_SPINS; - } - return 0; - } - - /* -------------- Traversal methods -------------- */ - - /** - * Returns the successor of p, or the head node if p.next has been - * linked to self, which will only be true if traversing with a - * stale pointer that is now off the list. - */ - final Node succ(Node p) { - Node next = p.next; - return (p == next) ? head : next; - } - - /** - * Returns the first unmatched node of the given mode, or null if - * none. Used by methods isEmpty, hasWaitingConsumer. - */ - private Node firstOfMode(boolean isData) { - for (Node p = head; p != null; p = succ(p)) { - if (!p.isMatched()) - return (p.isData == isData) ? p : null; - } - return null; - } - - /** - * Returns the item in the first unmatched node with isData; or - * null if none. Used by peek. - */ - private E firstDataItem() { - for (Node p = head; p != null; p = succ(p)) { - Object item = p.item; - if (p.isData) { - if (item != null && item != p) - return LinkedTransferQueue.<E>cast(item); - } - else if (item == null) - return null; - } - return null; - } - - /** - * Traverses and counts unmatched nodes of the given mode. - * Used by methods size and getWaitingConsumerCount. - */ - private int countOfMode(boolean data) { - int count = 0; - for (Node p = head; p != null; ) { - if (!p.isMatched()) { - if (p.isData != data) - return 0; - if (++count == Integer.MAX_VALUE) // saturated - break; - } - Node n = p.next; - if (n != p) - p = n; - else { - count = 0; - p = head; - } - } - return count; - } - - @Deprecated - final class Itr implements Iterator<E> { - private Node nextNode; // next node to return item for - private E nextItem; // the corresponding item - private Node lastRet; // last returned node, to support remove - private Node lastPred; // predecessor to unlink lastRet - - /** - * Moves to next node after prev, or first node if prev null. - */ - private void advance(Node prev) { - /* - * To track and avoid buildup of deleted nodes in the face - * of calls to both Queue.remove and Itr.remove, we must - * include variants of unsplice and sweep upon each - * advance: Upon Itr.remove, we may need to catch up links - * from lastPred, and upon other removes, we might need to - * skip ahead from stale nodes and unsplice deleted ones - * found while advancing. - */ - - Node r, b; // reset lastPred upon possible deletion of lastRet - if ((r = lastRet) != null && !r.isMatched()) - lastPred = r; // next lastPred is old lastRet - else if ((b = lastPred) == null || b.isMatched()) - lastPred = null; // at start of list - else { - Node s, n; // help with removal of lastPred.next - while ((s = b.next) != null && - s != b && s.isMatched() && - (n = s.next) != null && n != s) - b.casNext(s, n); - } - - this.lastRet = prev; - - for (Node p = prev, s, n;;) { - s = (p == null) ? head : p.next; - if (s == null) - break; - else if (s == p) { - p = null; - continue; - } - Object item = s.item; - if (s.isData) { - if (item != null && item != s) { - nextItem = LinkedTransferQueue.<E>cast(item); - nextNode = s; - return; - } - } - else if (item == null) - break; - // assert s.isMatched(); - if (p == null) - p = s; - else if ((n = s.next) == null) - break; - else if (s == n) - p = null; - else - p.casNext(s, n); - } - nextNode = null; - nextItem = null; - } - - Itr() { - advance(null); - } - - public final boolean hasNext() { - return nextNode != null; - } - - public final E next() { - Node p = nextNode; - if (p == null) throw new NoSuchElementException(); - E e = nextItem; - advance(p); - return e; - } - - public final void remove() { - final Node lastRet = this.lastRet; - if (lastRet == null) - throw new IllegalStateException(); - this.lastRet = null; - if (lastRet.tryMatchData()) - unsplice(lastPred, lastRet); - } - } - - /* -------------- Removal methods -------------- */ - - /** - * Unsplices (now or later) the given deleted/cancelled node with - * the given predecessor. - * - * @param pred a node that was at one time known to be the - * predecessor of s, or null or s itself if s is/was at head - * @param s the node to be unspliced - */ - final void unsplice(Node pred, Node s) { - s.forgetContents(); // forget unneeded fields - /* - * See above for rationale. Briefly: if pred still points to - * s, try to unlink s. If s cannot be unlinked, because it is - * trailing node or pred might be unlinked, and neither pred - * nor s are head or offlist, add to sweepVotes, and if enough - * votes have accumulated, sweep. - */ - if (pred != null && pred != s && pred.next == s) { - Node n = s.next; - if (n == null || - (n != s && pred.casNext(s, n) && pred.isMatched())) { - for (;;) { // check if at, or could be, head - Node h = head; - if (h == pred || h == s || h == null) - return; // at head or list empty - if (!h.isMatched()) - break; - Node hn = h.next; - if (hn == null) - return; // now empty - if (hn != h && casHead(h, hn)) - h.forgetNext(); // advance head - } - if (pred.next != pred && s.next != s) { // recheck if offlist - for (;;) { // sweep now if enough votes - int v = sweepVotes; - if (v < SWEEP_THRESHOLD) { - if (casSweepVotes(v, v + 1)) - break; - } - else if (casSweepVotes(v, 0)) { - sweep(); - break; - } - } - } - } - } - } - - /** - * Unlinks matched (typically cancelled) nodes encountered in a - * traversal from head. - */ - private void sweep() { - for (Node p = head, s, n; p != null && (s = p.next) != null; ) { - if (!s.isMatched()) - // Unmatched nodes are never self-linked - p = s; - else if ((n = s.next) == null) // trailing node is pinned - break; - else if (s == n) // stale - // No need to also check for p == s, since that implies s == n - p = head; - else - p.casNext(s, n); - } - } - - /** - * Main implementation of remove(Object) - */ - private boolean findAndRemove(Object e) { - if (e != null) { - for (Node pred = null, p = head; p != null; ) { - Object item = p.item; - if (p.isData) { - if (item != null && item != p && e.equals(item) && - p.tryMatchData()) { - unsplice(pred, p); - return true; - } - } - else if (item == null) - break; - pred = p; - if ((p = p.next) == pred) { // stale - pred = null; - p = head; - } - } - } - return false; - } - - - /** - * Creates an initially empty {@code LinkedTransferQueue}. - */ - public LinkedTransferQueue() { - } - - /** - * Creates a {@code LinkedTransferQueue} - * initially containing the elements of the given collection, - * added in traversal order of the collection's iterator. - * - * @param c the collection of elements to initially contain - * @throws NullPointerException if the specified collection or any - * of its elements are null - */ - public LinkedTransferQueue(Collection<? extends E> c) { - this(); - addAll(c); - } - - /** - * Inserts the specified element at the tail of this queue. - * As the queue is unbounded, this method will never block. - * - * @throws NullPointerException if the specified element is null - */ - public void put(E e) { - xfer(e, true, ASYNC, 0); - } - - /** - * Inserts the specified element at the tail of this queue. - * As the queue is unbounded, this method will never block or - * return {@code false}. - * - * @return {@code true} (as specified by - * {@link java.util.concurrent.BlockingQueue#offer(Object,long,TimeUnit) - * BlockingQueue.offer}) - * @throws NullPointerException if the specified element is null - */ - public boolean offer(E e, long timeout, TimeUnit unit) { - xfer(e, true, ASYNC, 0); - return true; - } - - /** - * Inserts the specified element at the tail of this queue. - * As the queue is unbounded, this method will never return {@code false}. - * - * @return {@code true} (as specified by {@link Queue#offer}) - * @throws NullPointerException if the specified element is null - */ - public boolean offer(E e) { - xfer(e, true, ASYNC, 0); - return true; - } - - /** - * Inserts the specified element at the tail of this queue. - * As the queue is unbounded, this method will never throw - * {@link IllegalStateException} or return {@code false}. - * - * @return {@code true} (as specified by {@link Collection#add}) - * @throws NullPointerException if the specified element is null - */ - public boolean add(E e) { - xfer(e, true, ASYNC, 0); - return true; - } - - /** - * Transfers the element to a waiting consumer immediately, if possible. - * - * <p>More precisely, transfers the specified element immediately - * if there exists a consumer already waiting to receive it (in - * {@link #take} or timed {@link #poll(long,TimeUnit) poll}), - * otherwise returning {@code false} without enqueuing the element. - * - * @throws NullPointerException if the specified element is null - */ - public boolean tryTransfer(E e) { - return xfer(e, true, NOW, 0) == null; - } - - /** - * Transfers the element to a consumer, waiting if necessary to do so. - * - * <p>More precisely, transfers the specified element immediately - * if there exists a consumer already waiting to receive it (in - * {@link #take} or timed {@link #poll(long,TimeUnit) poll}), - * else inserts the specified element at the tail of this queue - * and waits until the element is received by a consumer. - * - * @throws NullPointerException if the specified element is null - */ - public void transfer(E e) throws InterruptedException { - if (xfer(e, true, SYNC, 0) != null) { - Thread.interrupted(); // failure possible only due to interrupt - throw new InterruptedException(); - } - } - - /** - * Transfers the element to a consumer if it is possible to do so - * before the timeout elapses. - * - * <p>More precisely, transfers the specified element immediately - * if there exists a consumer already waiting to receive it (in - * {@link #take} or timed {@link #poll(long,TimeUnit) poll}), - * else inserts the specified element at the tail of this queue - * and waits until the element is received by a consumer, - * returning {@code false} if the specified wait time elapses - * before the element can be transferred. - * - * @throws NullPointerException if the specified element is null - */ - public boolean tryTransfer(E e, long timeout, TimeUnit unit) - throws InterruptedException { - if (xfer(e, true, TIMED, unit.toNanos(timeout)) == null) - return true; - if (!Thread.interrupted()) - return false; - throw new InterruptedException(); - } - - public E take() throws InterruptedException { - E e = xfer(null, false, SYNC, 0); - if (e != null) - return e; - Thread.interrupted(); - throw new InterruptedException(); - } - - public E poll(long timeout, TimeUnit unit) throws InterruptedException { - E e = xfer(null, false, TIMED, unit.toNanos(timeout)); - if (e != null || !Thread.interrupted()) - return e; - throw new InterruptedException(); - } - - public E poll() { - return xfer(null, false, NOW, 0); - } - - /** - * @throws NullPointerException {@inheritDoc} - * @throws IllegalArgumentException {@inheritDoc} - */ - public int drainTo(Collection<? super E> c) { - if (c == null) - throw new NullPointerException(); - if (c == this) - throw new IllegalArgumentException(); - int n = 0; - for (E e; (e = poll()) != null;) { - c.add(e); - ++n; - } - return n; - } - - /** - * @throws NullPointerException {@inheritDoc} - * @throws IllegalArgumentException {@inheritDoc} - */ - public int drainTo(Collection<? super E> c, int maxElements) { - if (c == null) - throw new NullPointerException(); - if (c == this) - throw new IllegalArgumentException(); - int n = 0; - for (E e; n < maxElements && (e = poll()) != null;) { - c.add(e); - ++n; - } - return n; - } - - /** - * Returns an iterator over the elements in this queue in proper sequence. - * The elements will be returned in order from first (head) to last (tail). - * - * <p>The returned iterator is a "weakly consistent" iterator that - * will never throw {@link java.util.ConcurrentModificationException - * ConcurrentModificationException}, and guarantees to traverse - * elements as they existed upon construction of the iterator, and - * may (but is not guaranteed to) reflect any modifications - * subsequent to construction. - * - * @return an iterator over the elements in this queue in proper sequence - */ - public Iterator<E> iterator() { - return new Itr(); - } - - public E peek() { - return firstDataItem(); - } - - /** - * Returns {@code true} if this queue contains no elements. - * - * @return {@code true} if this queue contains no elements - */ - public boolean isEmpty() { - for (Node p = head; p != null; p = succ(p)) { - if (!p.isMatched()) - return !p.isData; - } - return true; - } - - public boolean hasWaitingConsumer() { - return firstOfMode(false) != null; - } - - /** - * Returns the number of elements in this queue. If this queue - * contains more than {@code Integer.MAX_VALUE} elements, returns - * {@code Integer.MAX_VALUE}. - * - * <p>Beware that, unlike in most collections, this method is - * <em>NOT</em> a constant-time operation. Because of the - * asynchronous nature of these queues, determining the current - * number of elements requires an O(n) traversal. - * - * @return the number of elements in this queue - */ - public int size() { - return countOfMode(true); - } - - public int getWaitingConsumerCount() { - return countOfMode(false); - } - - /** - * Removes a single instance of the specified element from this queue, - * if it is present. More formally, removes an element {@code e} such - * that {@code o.equals(e)}, if this queue contains one or more such - * elements. - * Returns {@code true} if this queue contained the specified element - * (or equivalently, if this queue changed as a result of the call). - * - * @param o element to be removed from this queue, if present - * @return {@code true} if this queue changed as a result of the call - */ - public boolean remove(Object o) { - return findAndRemove(o); - } - - /** - * Returns {@code true} if this queue contains the specified element. - * More formally, returns {@code true} if and only if this queue contains - * at least one element {@code e} such that {@code o.equals(e)}. - * - * @param o object to be checked for containment in this queue - * @return {@code true} if this queue contains the specified element - */ - public boolean contains(Object o) { - if (o == null) return false; - for (Node p = head; p != null; p = succ(p)) { - Object item = p.item; - if (p.isData) { - if (item != null && item != p && o.equals(item)) - return true; - } - else if (item == null) - break; - } - return false; - } - - /** - * Always returns {@code Integer.MAX_VALUE} because a - * {@code LinkedTransferQueue} is not capacity constrained. - * - * @return {@code Integer.MAX_VALUE} (as specified by - * {@link java.util.concurrent.BlockingQueue#remainingCapacity() - * BlockingQueue.remainingCapacity}) - */ - public int remainingCapacity() { - return Integer.MAX_VALUE; - } - - /** - * Saves the state to a stream (that is, serializes it). - * - * @serialData All of the elements (each an {@code E}) in - * the proper order, followed by a null - * @param s the stream - */ - private void writeObject(java.io.ObjectOutputStream s) - throws java.io.IOException { - s.defaultWriteObject(); - for (E e : this) - s.writeObject(e); - // Use trailing null as sentinel - s.writeObject(null); - } - - /** - * Reconstitutes the Queue instance from a stream (that is, - * deserializes it). - * - * @param s the stream - */ - private void readObject(java.io.ObjectInputStream s) - throws java.io.IOException, ClassNotFoundException { - s.defaultReadObject(); - for (;;) { - @SuppressWarnings("unchecked") - E item = (E) s.readObject(); - if (item == null) - break; - else - offer(item); - } - } - - // Unsafe mechanics - - private static final sun.misc.Unsafe UNSAFE; - private static final long headOffset; - private static final long tailOffset; - private static final long sweepVotesOffset; - static { - try { - UNSAFE = getUnsafe(); - Class<?> k = LinkedTransferQueue.class; - headOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("head")); - tailOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("tail")); - sweepVotesOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("sweepVotes")); - } catch (Exception e) { - throw new Error(e); - } - } - - /** - * Returns a sun.misc.Unsafe. Suitable for use in a 3rd party package. - * Replace with a simple call to Unsafe.getUnsafe when integrating - * into a jdk. - * - * @return a sun.misc.Unsafe - */ - static sun.misc.Unsafe getUnsafe() { - return scala.concurrent.util.Unsafe.instance; - } - -} diff --git a/src/forkjoin/scala/concurrent/forkjoin/RecursiveAction.java b/src/forkjoin/scala/concurrent/forkjoin/RecursiveAction.java deleted file mode 100644 index f4a77f0f61..0000000000 --- a/src/forkjoin/scala/concurrent/forkjoin/RecursiveAction.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -package scala.concurrent.forkjoin; - -/** - * A recursive resultless {@link ForkJoinTask}. This class - * establishes conventions to parameterize resultless actions as - * {@code Void} {@code ForkJoinTask}s. Because {@code null} is the - * only valid value of type {@code Void}, methods such as {@code join} - * always return {@code null} upon completion. - * - * <p><b>Sample Usages.</b> Here is a simple but complete ForkJoin - * sort that sorts a given {@code long[]} array: - * - * <pre> {@code - * static class SortTask extends RecursiveAction { - * final long[] array; final int lo, hi; - * SortTask(long[] array, int lo, int hi) { - * this.array = array; this.lo = lo; this.hi = hi; - * } - * SortTask(long[] array) { this(array, 0, array.length); } - * protected void compute() { - * if (hi - lo < THRESHOLD) - * sortSequentially(lo, hi); - * else { - * int mid = (lo + hi) >>> 1; - * invokeAll(new SortTask(array, lo, mid), - * new SortTask(array, mid, hi)); - * merge(lo, mid, hi); - * } - * } - * // implementation details follow: - * final static int THRESHOLD = 1000; - * void sortSequentially(int lo, int hi) { - * Arrays.sort(array, lo, hi); - * } - * void merge(int lo, int mid, int hi) { - * long[] buf = Arrays.copyOfRange(array, lo, mid); - * for (int i = 0, j = lo, k = mid; i < buf.length; j++) - * array[j] = (k == hi || buf[i] < array[k]) ? - * buf[i++] : array[k++]; - * } - * }}</pre> - * - * You could then sort {@code anArray} by creating {@code new - * SortTask(anArray)} and invoking it in a ForkJoinPool. As a more - * concrete simple example, the following task increments each element - * of an array: - * <pre> {@code - * class IncrementTask extends RecursiveAction { - * final long[] array; final int lo, hi; - * IncrementTask(long[] array, int lo, int hi) { - * this.array = array; this.lo = lo; this.hi = hi; - * } - * protected void compute() { - * if (hi - lo < THRESHOLD) { - * for (int i = lo; i < hi; ++i) - * array[i]++; - * } - * else { - * int mid = (lo + hi) >>> 1; - * invokeAll(new IncrementTask(array, lo, mid), - * new IncrementTask(array, mid, hi)); - * } - * } - * }}</pre> - * - * <p>The following example illustrates some refinements and idioms - * that may lead to better performance: RecursiveActions need not be - * fully recursive, so long as they maintain the basic - * divide-and-conquer approach. Here is a class that sums the squares - * of each element of a double array, by subdividing out only the - * right-hand-sides of repeated divisions by two, and keeping track of - * them with a chain of {@code next} references. It uses a dynamic - * threshold based on method {@code getSurplusQueuedTaskCount}, but - * counterbalances potential excess partitioning by directly - * performing leaf actions on unstolen tasks rather than further - * subdividing. - * - * <pre> {@code - * double sumOfSquares(ForkJoinPool pool, double[] array) { - * int n = array.length; - * Applyer a = new Applyer(array, 0, n, null); - * pool.invoke(a); - * return a.result; - * } - * - * class Applyer extends RecursiveAction { - * final double[] array; - * final int lo, hi; - * double result; - * Applyer next; // keeps track of right-hand-side tasks - * Applyer(double[] array, int lo, int hi, Applyer next) { - * this.array = array; this.lo = lo; this.hi = hi; - * this.next = next; - * } - * - * double atLeaf(int l, int h) { - * double sum = 0; - * for (int i = l; i < h; ++i) // perform leftmost base step - * sum += array[i] * array[i]; - * return sum; - * } - * - * protected void compute() { - * int l = lo; - * int h = hi; - * Applyer right = null; - * while (h - l > 1 && getSurplusQueuedTaskCount() <= 3) { - * int mid = (l + h) >>> 1; - * right = new Applyer(array, mid, h, right); - * right.fork(); - * h = mid; - * } - * double sum = atLeaf(l, h); - * while (right != null) { - * if (right.tryUnfork()) // directly calculate if not stolen - * sum += right.atLeaf(right.lo, right.hi); - * else { - * right.join(); - * sum += right.result; - * } - * right = right.next; - * } - * result = sum; - * } - * }}</pre> - * - * @since 1.7 - * @author Doug Lea - */ -@Deprecated -public abstract class RecursiveAction extends ForkJoinTask<Void> { - private static final long serialVersionUID = 5232453952276485070L; - - /** - * The main computation performed by this task. - */ - protected abstract void compute(); - - /** - * Always returns {@code null}. - * - * @return {@code null} always - */ - public final Void getRawResult() { return null; } - - /** - * Requires null completion value. - */ - protected final void setRawResult(Void mustBeNull) { } - - /** - * Implements execution conventions for RecursiveActions. - */ - protected final boolean exec() { - compute(); - return true; - } - -} diff --git a/src/forkjoin/scala/concurrent/forkjoin/RecursiveTask.java b/src/forkjoin/scala/concurrent/forkjoin/RecursiveTask.java deleted file mode 100644 index 097b7cda1f..0000000000 --- a/src/forkjoin/scala/concurrent/forkjoin/RecursiveTask.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -package scala.concurrent.forkjoin; - -/** - * A recursive result-bearing {@link ForkJoinTask}. - * - * <p>For a classic example, here is a task computing Fibonacci numbers: - * - * <pre> {@code - * class Fibonacci extends RecursiveTask<Integer> { - * final int n; - * Fibonacci(int n) { this.n = n; } - * Integer compute() { - * if (n <= 1) - * return n; - * Fibonacci f1 = new Fibonacci(n - 1); - * f1.fork(); - * Fibonacci f2 = new Fibonacci(n - 2); - * return f2.compute() + f1.join(); - * } - * }}</pre> - * - * However, besides being a dumb way to compute Fibonacci functions - * (there is a simple fast linear algorithm that you'd use in - * practice), this is likely to perform poorly because the smallest - * subtasks are too small to be worthwhile splitting up. Instead, as - * is the case for nearly all fork/join applications, you'd pick some - * minimum granularity size (for example 10 here) for which you always - * sequentially solve rather than subdividing. - * - * @since 1.7 - * @author Doug Lea - */ -@Deprecated -public abstract class RecursiveTask<V> extends ForkJoinTask<V> { - private static final long serialVersionUID = 5232453952276485270L; - - /** - * The result of the computation. - */ - V result; - - /** - * The main computation performed by this task. - */ - protected abstract V compute(); - - public final V getRawResult() { - return result; - } - - protected final void setRawResult(V value) { - result = value; - } - - /** - * Implements execution conventions for RecursiveTask. - */ - protected final boolean exec() { - result = compute(); - return true; - } - -} diff --git a/src/forkjoin/scala/concurrent/forkjoin/ThreadLocalRandom.java b/src/forkjoin/scala/concurrent/forkjoin/ThreadLocalRandom.java deleted file mode 100644 index 3ea1af66bc..0000000000 --- a/src/forkjoin/scala/concurrent/forkjoin/ThreadLocalRandom.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -package scala.concurrent.forkjoin; - -import java.util.Random; - -/** - * A random number generator isolated to the current thread. Like the - * global {@link java.util.Random} generator used by the {@link - * java.lang.Math} class, a {@code ThreadLocalRandom} is initialized - * with an internally generated seed that may not otherwise be - * modified. When applicable, use of {@code ThreadLocalRandom} rather - * than shared {@code Random} objects in concurrent programs will - * typically encounter much less overhead and contention. Use of - * {@code ThreadLocalRandom} is particularly appropriate when multiple - * tasks (for example, each a {@link ForkJoinTask}) use random numbers - * in parallel in thread pools. - * - * <p>Usages of this class should typically be of the form: - * {@code ThreadLocalRandom.current().nextX(...)} (where - * {@code X} is {@code Int}, {@code Long}, etc). - * When all usages are of this form, it is never possible to - * accidently share a {@code ThreadLocalRandom} across multiple threads. - * - * <p>This class also provides additional commonly used bounded random - * generation methods. - * - * @since 1.7 - * @author Doug Lea - */ -@Deprecated -public class ThreadLocalRandom extends Random { - // same constants as Random, but must be redeclared because private - private static final long multiplier = 0x5DEECE66DL; - private static final long addend = 0xBL; - private static final long mask = (1L << 48) - 1; - - /** - * The random seed. We can't use super.seed. - */ - private long rnd; - - /** - * Initialization flag to permit calls to setSeed to succeed only - * while executing the Random constructor. We can't allow others - * since it would cause setting seed in one part of a program to - * unintentionally impact other usages by the thread. - */ - boolean initialized; - - // Padding to help avoid memory contention among seed updates in - // different TLRs in the common case that they are located near - // each other. - private long pad0, pad1, pad2, pad3, pad4, pad5, pad6, pad7; - - /** - * The actual ThreadLocal - */ - private static final ThreadLocal<ThreadLocalRandom> localRandom = - new ThreadLocal<ThreadLocalRandom>() { - protected ThreadLocalRandom initialValue() { - return new ThreadLocalRandom(); - } - }; - - - /** - * Constructor called only by localRandom.initialValue. - */ - ThreadLocalRandom() { - super(); - initialized = true; - } - - /** - * Returns the current thread's {@code ThreadLocalRandom}. - * - * @return the current thread's {@code ThreadLocalRandom} - */ - @Deprecated - public static ThreadLocalRandom current() { - return localRandom.get(); - } - - /** - * Throws {@code UnsupportedOperationException}. Setting seeds in - * this generator is not supported. - * - * @throws UnsupportedOperationException always - */ - public void setSeed(long seed) { - if (initialized) - throw new UnsupportedOperationException(); - rnd = (seed ^ multiplier) & mask; - } - - protected int next(int bits) { - rnd = (rnd * multiplier + addend) & mask; - return (int) (rnd >>> (48-bits)); - } - - /** - * Returns a pseudorandom, uniformly distributed value between the - * given least value (inclusive) and bound (exclusive). - * - * @param least the least value returned - * @param bound the upper bound (exclusive) - * @throws IllegalArgumentException if least greater than or equal - * to bound - * @return the next value - */ - public int nextInt(int least, int bound) { - if (least >= bound) - throw new IllegalArgumentException(); - return nextInt(bound - least) + least; - } - - /** - * Returns a pseudorandom, uniformly distributed value - * between 0 (inclusive) and the specified value (exclusive). - * - * @param n the bound on the random number to be returned. Must be - * positive. - * @return the next value - * @throws IllegalArgumentException if n is not positive - */ - public long nextLong(long n) { - if (n <= 0) - throw new IllegalArgumentException("n must be positive"); - // Divide n by two until small enough for nextInt. On each - // iteration (at most 31 of them but usually much less), - // randomly choose both whether to include high bit in result - // (offset) and whether to continue with the lower vs upper - // half (which makes a difference only if odd). - long offset = 0; - while (n >= Integer.MAX_VALUE) { - int bits = next(2); - long half = n >>> 1; - long nextn = ((bits & 2) == 0) ? half : n - half; - if ((bits & 1) == 0) - offset += n - nextn; - n = nextn; - } - return offset + nextInt((int) n); - } - - /** - * Returns a pseudorandom, uniformly distributed value between the - * given least value (inclusive) and bound (exclusive). - * - * @param least the least value returned - * @param bound the upper bound (exclusive) - * @return the next value - * @throws IllegalArgumentException if least greater than or equal - * to bound - */ - public long nextLong(long least, long bound) { - if (least >= bound) - throw new IllegalArgumentException(); - return nextLong(bound - least) + least; - } - - /** - * Returns a pseudorandom, uniformly distributed {@code double} value - * between 0 (inclusive) and the specified value (exclusive). - * - * @param n the bound on the random number to be returned. Must be - * positive. - * @return the next value - * @throws IllegalArgumentException if n is not positive - */ - public double nextDouble(double n) { - if (n <= 0) - throw new IllegalArgumentException("n must be positive"); - return nextDouble() * n; - } - - /** - * Returns a pseudorandom, uniformly distributed value between the - * given least value (inclusive) and bound (exclusive). - * - * @param least the least value returned - * @param bound the upper bound (exclusive) - * @return the next value - * @throws IllegalArgumentException if least greater than or equal - * to bound - */ - public double nextDouble(double least, double bound) { - if (least >= bound) - throw new IllegalArgumentException(); - return nextDouble() * (bound - least) + least; - } - - private static final long serialVersionUID = -5851777807851030925L; -} diff --git a/src/forkjoin/scala/concurrent/forkjoin/TransferQueue.java b/src/forkjoin/scala/concurrent/forkjoin/TransferQueue.java deleted file mode 100644 index 4fcd8ea601..0000000000 --- a/src/forkjoin/scala/concurrent/forkjoin/TransferQueue.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -package scala.concurrent.forkjoin; -import java.util.concurrent.*; - -/** - * A {@link BlockingQueue} in which producers may wait for consumers - * to receive elements. A {@code TransferQueue} may be useful for - * example in message passing applications in which producers - * sometimes (using method {@link #transfer}) await receipt of - * elements by consumers invoking {@code take} or {@code poll}, while - * at other times enqueue elements (via method {@code put}) without - * waiting for receipt. - * {@linkplain #tryTransfer(Object) Non-blocking} and - * {@linkplain #tryTransfer(Object,long,TimeUnit) time-out} versions of - * {@code tryTransfer} are also available. - * A {@code TransferQueue} may also be queried, via {@link - * #hasWaitingConsumer}, whether there are any threads waiting for - * items, which is a converse analogy to a {@code peek} operation. - * - * <p>Like other blocking queues, a {@code TransferQueue} may be - * capacity bounded. If so, an attempted transfer operation may - * initially block waiting for available space, and/or subsequently - * block waiting for reception by a consumer. Note that in a queue - * with zero capacity, such as {@link SynchronousQueue}, {@code put} - * and {@code transfer} are effectively synonymous. - * - * <p>This interface is a member of the - * <a href="{@docRoot}/../technotes/guides/collections/index.html"> - * Java Collections Framework</a>. - * - * @since 1.7 - * @author Doug Lea - * @param <E> the type of elements held in this collection - */ -@Deprecated -public interface TransferQueue<E> extends BlockingQueue<E> { - /** - * Transfers the element to a waiting consumer immediately, if possible. - * - * <p>More precisely, transfers the specified element immediately - * if there exists a consumer already waiting to receive it (in - * {@link #take} or timed {@link #poll(long,TimeUnit) poll}), - * otherwise returning {@code false} without enqueuing the element. - * - * @param e the element to transfer - * @return {@code true} if the element was transferred, else - * {@code false} - * @throws ClassCastException if the class of the specified element - * prevents it from being added to this queue - * @throws NullPointerException if the specified element is null - * @throws IllegalArgumentException if some property of the specified - * element prevents it from being added to this queue - */ - boolean tryTransfer(E e); - - /** - * Transfers the element to a consumer, waiting if necessary to do so. - * - * <p>More precisely, transfers the specified element immediately - * if there exists a consumer already waiting to receive it (in - * {@link #take} or timed {@link #poll(long,TimeUnit) poll}), - * else waits until the element is received by a consumer. - * - * @param e the element to transfer - * @throws InterruptedException if interrupted while waiting, - * in which case the element is not left enqueued - * @throws ClassCastException if the class of the specified element - * prevents it from being added to this queue - * @throws NullPointerException if the specified element is null - * @throws IllegalArgumentException if some property of the specified - * element prevents it from being added to this queue - */ - void transfer(E e) throws InterruptedException; - - /** - * Transfers the element to a consumer if it is possible to do so - * before the timeout elapses. - * - * <p>More precisely, transfers the specified element immediately - * if there exists a consumer already waiting to receive it (in - * {@link #take} or timed {@link #poll(long,TimeUnit) poll}), - * else waits until the element is received by a consumer, - * returning {@code false} if the specified wait time elapses - * before the element can be transferred. - * - * @param e the element to transfer - * @param timeout how long to wait before giving up, in units of - * {@code unit} - * @param unit a {@code TimeUnit} determining how to interpret the - * {@code timeout} parameter - * @return {@code true} if successful, or {@code false} if - * the specified waiting time elapses before completion, - * in which case the element is not left enqueued - * @throws InterruptedException if interrupted while waiting, - * in which case the element is not left enqueued - * @throws ClassCastException if the class of the specified element - * prevents it from being added to this queue - * @throws NullPointerException if the specified element is null - * @throws IllegalArgumentException if some property of the specified - * element prevents it from being added to this queue - */ - boolean tryTransfer(E e, long timeout, TimeUnit unit) - throws InterruptedException; - - /** - * Returns {@code true} if there is at least one consumer waiting - * to receive an element via {@link #take} or - * timed {@link #poll(long,TimeUnit) poll}. - * The return value represents a momentary state of affairs. - * - * @return {@code true} if there is at least one waiting consumer - */ - boolean hasWaitingConsumer(); - - /** - * Returns an estimate of the number of consumers waiting to - * receive elements via {@link #take} or timed - * {@link #poll(long,TimeUnit) poll}. The return value is an - * approximation of a momentary state of affairs, that may be - * inaccurate if consumers have completed or given up waiting. - * The value may be useful for monitoring and heuristics, but - * not for synchronization control. Implementations of this - * method are likely to be noticeably slower than those for - * {@link #hasWaitingConsumer}. - * - * @return the number of consumers waiting to receive elements - */ - int getWaitingConsumerCount(); -} diff --git a/src/forkjoin/scala/concurrent/forkjoin/package-info.java b/src/forkjoin/scala/concurrent/forkjoin/package-info.java deleted file mode 100644 index 3561b9b44a..0000000000 --- a/src/forkjoin/scala/concurrent/forkjoin/package-info.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - - -/** - * Preview versions of classes targeted for Java 7. Includes a - * fine-grained parallel computation framework: ForkJoinTasks and - * their related support classes provide a very efficient basis for - * obtaining platform-independent parallel speed-ups of - * computation-intensive operations. They are not a full substitute - * for the kinds of arbitrary processing supported by Executors or - * Threads. However, when applicable, they typically provide - * significantly greater performance on multiprocessor platforms. - * - * <p>Candidates for fork/join processing mainly include those that - * can be expressed using parallel divide-and-conquer techniques: To - * solve a problem, break it in two (or more) parts, and then solve - * those parts in parallel, continuing on in this way until the - * problem is too small to be broken up, so is solved directly. The - * underlying <em>work-stealing</em> framework makes subtasks - * available to other threads (normally one per CPU), that help - * complete the tasks. In general, the most efficient ForkJoinTasks - * are those that directly implement this algorithmic design pattern. - */ -package scala.concurrent.forkjoin; diff --git a/src/forkjoin/scala/concurrent/util/Unsafe.java b/src/forkjoin/scala/concurrent/util/Unsafe.java deleted file mode 100644 index d82e4bbdd5..0000000000 --- a/src/forkjoin/scala/concurrent/util/Unsafe.java +++ /dev/null @@ -1,33 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ Scala API ** -** / __/ __// _ | / / / _ | (c) 2003-2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** -** /____/\___/_/ |_/____/_/ | | ** -** |/ ** -\* */ - -package scala.concurrent.util; -import java.lang.reflect.Field; - - -@Deprecated -public final class Unsafe { - @Deprecated - public final static sun.misc.Unsafe instance; - static { - try { - sun.misc.Unsafe found = null; - for(Field field : sun.misc.Unsafe.class.getDeclaredFields()) { - if (field.getType() == sun.misc.Unsafe.class) { - field.setAccessible(true); - found = (sun.misc.Unsafe) field.get(null); - break; - } - } - if (found == null) throw new IllegalStateException("Can't find instance of sun.misc.Unsafe"); - else instance = found; - } catch(Throwable t) { - throw new ExceptionInInitializerError(t); - } - } -} diff --git a/src/intellij/forkjoin.iml.SAMPLE b/src/intellij/forkjoin.iml.SAMPLE deleted file mode 100644 index 42507b2911..0000000000 --- a/src/intellij/forkjoin.iml.SAMPLE +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module type="JAVA_MODULE" version="4"> - <component name="NewModuleRootManager" inherit-compiler-output="true"> - <exclude-output /> - <content url="file://$MODULE_DIR$/../forkjoin"> - <sourceFolder url="file://$MODULE_DIR$/../forkjoin" isTestSource="false" /> - </content> - <orderEntry type="inheritedJdk" /> - <orderEntry type="sourceFolder" forTests="false" /> - </component> -</module>
\ No newline at end of file diff --git a/src/intellij/library.iml.SAMPLE b/src/intellij/library.iml.SAMPLE index b03fef9414..8ceb9dd3f1 100644 --- a/src/intellij/library.iml.SAMPLE +++ b/src/intellij/library.iml.SAMPLE @@ -8,7 +8,6 @@ </content> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> - <orderEntry type="module" module-name="forkjoin" /> <orderEntry type="library" name="starr" level="project" /> </component> </module>
\ No newline at end of file diff --git a/src/intellij/scala.ipr.SAMPLE b/src/intellij/scala.ipr.SAMPLE index 290d53aa5d..3e6e074717 100644 --- a/src/intellij/scala.ipr.SAMPLE +++ b/src/intellij/scala.ipr.SAMPLE @@ -36,7 +36,6 @@ <component name="ProjectModuleManager"> <modules> <module fileurl="file://$PROJECT_DIR$/compiler.iml" filepath="$PROJECT_DIR$/compiler.iml" /> - <module fileurl="file://$PROJECT_DIR$/forkjoin.iml" filepath="$PROJECT_DIR$/forkjoin.iml" /> <module fileurl="file://$PROJECT_DIR$/interactive.iml" filepath="$PROJECT_DIR$/interactive.iml" /> <module fileurl="file://$PROJECT_DIR$/library.iml" filepath="$PROJECT_DIR$/library.iml" /> <module fileurl="file://$PROJECT_DIR$/manual.iml" filepath="$PROJECT_DIR$/manual.iml" /> diff --git a/src/intellij/test-junit.iml.SAMPLE b/src/intellij/test-junit.iml.SAMPLE index 8252ef6d98..326c9813aa 100644 --- a/src/intellij/test-junit.iml.SAMPLE +++ b/src/intellij/test-junit.iml.SAMPLE @@ -8,7 +8,6 @@ <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="module" module-name="compiler" /> - <orderEntry type="module" module-name="forkjoin" /> <orderEntry type="module" module-name="library" /> <orderEntry type="module" module-name="partest-extras" /> <orderEntry type="module" module-name="reflect" /> diff --git a/src/intellij/test.iml.SAMPLE b/src/intellij/test.iml.SAMPLE index e7eb7576c3..d1f2975fbf 100644 --- a/src/intellij/test.iml.SAMPLE +++ b/src/intellij/test.iml.SAMPLE @@ -8,7 +8,6 @@ <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="module" module-name="compiler" /> - <orderEntry type="module" module-name="forkjoin" /> <orderEntry type="module" module-name="interactive" /> <orderEntry type="module" module-name="library" /> <orderEntry type="module" module-name="partest-extras" /> diff --git a/src/library/scala/collection/concurrent/TrieMap.scala b/src/library/scala/collection/concurrent/TrieMap.scala index bcfea7a463..74e0e0f7d2 100644 --- a/src/library/scala/collection/concurrent/TrieMap.scala +++ b/src/library/scala/collection/concurrent/TrieMap.scala @@ -471,7 +471,7 @@ private[collection] final class CNode[K, V](val bitmap: Int, val array: Array[Ba val offset = if (array.length > 0) //util.Random.nextInt(array.length) /* <-- benchmarks show that this causes observable contention */ - scala.concurrent.forkjoin.ThreadLocalRandom.current.nextInt(0, array.length) + java.util.concurrent.ThreadLocalRandom.current.nextInt(0, array.length) else 0 while (i < array.length) { val pos = (i + offset) % array.length diff --git a/src/library/scala/collection/parallel/ParIterableLike.scala b/src/library/scala/collection/parallel/ParIterableLike.scala index 016255dca4..53f9a7b87a 100644 --- a/src/library/scala/collection/parallel/ParIterableLike.scala +++ b/src/library/scala/collection/parallel/ParIterableLike.scala @@ -195,7 +195,7 @@ self: ParIterableLike[T, Repr, Sequential] => * import scala.collection.parallel._ * val pc = mutable.ParArray(1, 2, 3) * pc.tasksupport = new ForkJoinTaskSupport( - * new scala.concurrent.forkjoin.ForkJoinPool(2)) + * new java.util.concurrent.ForkJoinPool(2)) * }}} * * @see [[scala.collection.parallel.TaskSupport]] diff --git a/src/library/scala/collection/parallel/TaskSupport.scala b/src/library/scala/collection/parallel/TaskSupport.scala index 9064018d46..6ab694de04 100644 --- a/src/library/scala/collection/parallel/TaskSupport.scala +++ b/src/library/scala/collection/parallel/TaskSupport.scala @@ -10,7 +10,7 @@ package scala package collection.parallel import java.util.concurrent.ThreadPoolExecutor -import scala.concurrent.forkjoin.ForkJoinPool +import java.util.concurrent.ForkJoinPool import scala.concurrent.ExecutionContext /** A trait implementing the scheduling of a parallel collection operation. @@ -41,7 +41,7 @@ import scala.concurrent.ExecutionContext * import scala.collection.parallel._ * val pc = mutable.ParArray(1, 2, 3) * pc.tasksupport = new ForkJoinTaskSupport( - * new scala.concurrent.forkjoin.ForkJoinPool(2)) + * new java.util.concurrent.ForkJoinPool(2)) * }}} * * @see [[http://docs.scala-lang.org/overviews/parallel-collections/configuration.html Configuring Parallel Collections]] section diff --git a/src/library/scala/collection/parallel/Tasks.scala b/src/library/scala/collection/parallel/Tasks.scala index fcf0dff846..c9a75752df 100644 --- a/src/library/scala/collection/parallel/Tasks.scala +++ b/src/library/scala/collection/parallel/Tasks.scala @@ -10,7 +10,7 @@ package scala package collection.parallel import java.util.concurrent.ThreadPoolExecutor -import scala.concurrent.forkjoin._ +import java.util.concurrent.{ForkJoinPool, RecursiveAction, ForkJoinWorkerThread} import scala.concurrent.ExecutionContext import scala.util.control.Breaks._ import scala.annotation.unchecked.uncheckedVariance diff --git a/src/library/scala/concurrent/forkjoin/package.scala b/src/library/scala/concurrent/forkjoin/package.scala new file mode 100644 index 0000000000..7f4524fccf --- /dev/null +++ b/src/library/scala/concurrent/forkjoin/package.scala @@ -0,0 +1,60 @@ +/* __ *\ +** ________ ___ / / ___ Scala API ** +** / __/ __// _ | / / / _ | (c) 2015, LAMP/EPFL and Typesafe, Inc. ** +** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** +** /____/\___/_/ |_/____/_/ | | ** +** |/ ** +\* */ + +package scala.concurrent +import java.util.{concurrent => juc} +import java.util.Collection + +package object forkjoin { + @deprecated("Use java.util.concurrent.ForkJoinPool directly, instead of this alias.", "2.12.0") + type ForkJoinPool = juc.ForkJoinPool + @deprecated("Use java.util.concurrent.ForkJoinPool directly, instead of this alias.", "2.12.0") + object ForkJoinPool { + type ForkJoinWorkerThreadFactory = juc.ForkJoinPool.ForkJoinWorkerThreadFactory + type ManagedBlocker = juc.ForkJoinPool.ManagedBlocker + + val defaultForkJoinWorkerThreadFactory: ForkJoinWorkerThreadFactory = juc.ForkJoinPool.defaultForkJoinWorkerThreadFactory + def managedBlock(blocker: ManagedBlocker): Unit = juc.ForkJoinPool.managedBlock(blocker) + } + + @deprecated("Use java.util.concurrent.ForkJoinTask directly, instead of this alias.", "2.12.0") + type ForkJoinTask[T] = juc.ForkJoinTask[T] + @deprecated("Use java.util.concurrent.ForkJoinTask directly, instead of this alias.", "2.12.0") + object ForkJoinTask { + def adapt(runnable: Runnable): ForkJoinTask[_] = juc.ForkJoinTask.adapt(runnable) + def adapt[T](callable: juc.Callable[_ <: T]): ForkJoinTask[T] = juc.ForkJoinTask.adapt(callable) + def adapt[T](runnable: Runnable, result: T): ForkJoinTask[T] = juc.ForkJoinTask.adapt(runnable, result) + def getPool(): ForkJoinPool = juc.ForkJoinTask.getPool + def getQueuedTaskCount(): Int = juc.ForkJoinTask.getQueuedTaskCount + def getSurplusQueuedTaskCount(): Int = juc.ForkJoinTask.getSurplusQueuedTaskCount + def helpQuiesce(): Unit = juc.ForkJoinTask.helpQuiesce + def inForkJoinPool(): Boolean = juc.ForkJoinTask.inForkJoinPool + def invokeAll[T <: ForkJoinTask[_]](tasks: Collection[T]): Collection[T] = juc.ForkJoinTask.invokeAll(tasks) + def invokeAll[T](t1: ForkJoinTask[T]): Unit = juc.ForkJoinTask.invokeAll(t1) + def invokeAll[T](tasks: ForkJoinTask[T]*): Unit = juc.ForkJoinTask.invokeAll(tasks: _*) + } + + @deprecated("Use java.util.concurrent.ForkJoinWorkerThread directly, instead of this alias.", "2.12.0") + type ForkJoinWorkerThread = juc.ForkJoinWorkerThread + @deprecated("Use java.util.concurrent.LinkedTransferQueue directly, instead of this alias.", "2.12.0") + type LinkedTransferQueue[T] = juc.LinkedTransferQueue[T] + @deprecated("Use java.util.concurrent.RecursiveAction directly, instead of this alias.", "2.12.0") + type RecursiveAction = juc.RecursiveAction + @deprecated("Use java.util.concurrent.RecursiveTask directly, instead of this alias.", "2.12.0") + type RecursiveTask[T] = juc.RecursiveTask[T] + + @deprecated("Use java.util.concurrent.ThreadLocalRandom directly, instead of this alias.", "2.12.0") + type ThreadLocalRandom = juc.ThreadLocalRandom + @deprecated("Use java.util.concurrent.ThreadLocalRandom directly, instead of this alias.", "2.12.0") + object ThreadLocalRandom { + // For source compatibility, current must declare the empty argument list. + // Having no argument list makes more sense since it doesn't have any side effects, + // but existing callers will break if they invoked it as `current()`. + def current() = juc.ThreadLocalRandom.current + } +} diff --git a/src/library/scala/concurrent/impl/ExecutionContextImpl.scala b/src/library/scala/concurrent/impl/ExecutionContextImpl.scala index 0c7f98ce5a..c98746a98d 100644 --- a/src/library/scala/concurrent/impl/ExecutionContextImpl.scala +++ b/src/library/scala/concurrent/impl/ExecutionContextImpl.scala @@ -10,10 +10,9 @@ package scala.concurrent.impl -import java.util.concurrent.{ LinkedBlockingQueue, Callable, Executor, ExecutorService, Executors, ThreadFactory, TimeUnit, ThreadPoolExecutor } +import java.util.concurrent.{ ForkJoinPool, ForkJoinWorkerThread, ForkJoinTask, LinkedBlockingQueue, Callable, Executor, ExecutorService, Executors, ThreadFactory, TimeUnit, ThreadPoolExecutor } import java.util.concurrent.atomic.AtomicInteger import java.util.Collection -import scala.concurrent.forkjoin._ import scala.concurrent.{ BlockContext, ExecutionContext, Awaitable, CanAwait, ExecutionContextExecutor, ExecutionContextExecutorService } import scala.util.control.NonFatal import scala.annotation.tailrec diff --git a/src/library/scala/concurrent/util/Unsafe.java b/src/library/scala/concurrent/util/Unsafe.java new file mode 100644 index 0000000000..73739e377d --- /dev/null +++ b/src/library/scala/concurrent/util/Unsafe.java @@ -0,0 +1,38 @@ +/* __ *\ +** ________ ___ / / ___ Scala API ** +** / __/ __// _ | / / / _ | (c) 2003-2013, LAMP/EPFL ** +** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** +** /____/\___/_/ |_/____/_/ | | ** +** |/ ** +\* */ + +package scala.concurrent.util; +import java.lang.reflect.Field; + +// TODO: remove once akka no longer needs it, hopefully by 2.12.0-M3! +@Deprecated +public final class Unsafe { + @Deprecated + public final static sun.misc.Unsafe instance; + static { + try { + sun.misc.Unsafe found = null; + for(Field field : sun.misc.Unsafe.class.getDeclaredFields()) { + if (field.getType() == sun.misc.Unsafe.class) { + field.setAccessible(true); + found = (sun.misc.Unsafe) field.get(null); + break; + } + } + if (found == null) throw new IllegalStateException("Can't find instance of sun.misc.Unsafe"); + else instance = found; + } catch(Throwable t) { + throw new ExceptionInInitializerError(t); + } + } +} + +// Scala version: +// classOf[sun.misc.Unsafe].getDeclaredFields.filter(_.getType == classOf[sun.misc.Unsafe]).headOption.map { field => +// field.setAccessible(true); field.get(null).asInstanceOf[sun.misc.Unsafe] +// } getOrElse (throw new IllegalStateException("Can't find instance of sun.misc.Unsafe")) diff --git a/test/benchmarking/AVL-insert-random.scala b/test/benchmarking/AVL-insert-random.scala deleted file mode 100644 index 7299e330f5..0000000000 --- a/test/benchmarking/AVL-insert-random.scala +++ /dev/null @@ -1,67 +0,0 @@ -package scala.collection - - - - - -class Dummy(val a: Int) extends math.Ordered[Dummy] { - def compare(other: Dummy) = this.a - other.a - override def toString = a.toString -} - - -object RandomGlobal { - val sz = 500000 - val data = util.Random.shuffle((0 until sz) map { new Dummy(_) }) toArray; -} - - -import RandomGlobal._ - - -object RandomAVL extends testing.Benchmark { - - def run() { - val avl = new collection.mutable.TreeSet[Dummy] - - var i = 0 - while (i < sz) { - val elem = data(i) - avl += elem - i += 1 - } - } - -} - - -object RandomImmutableTreeSet extends testing.Benchmark { - - def run() { - var tree = new collection.immutable.TreeSet[Dummy] - - var i = 0 - while (i < sz) { - val elem = data(i) - tree += elem - i += 1 - } - } - -} - - -object RandomJavaTreeSet extends testing.Benchmark { - - def run() { - val tree = new java.util.TreeSet[Dummy] - - var i = 0 - while (i < sz) { - val elem = data(i) - tree add elem - i += 1 - } - } - -} diff --git a/test/benchmarking/AVL-insert.scala b/test/benchmarking/AVL-insert.scala deleted file mode 100644 index 4f3ab390c9..0000000000 --- a/test/benchmarking/AVL-insert.scala +++ /dev/null @@ -1,67 +0,0 @@ -package scala.collection - - - - - -class Dummy(val a: Int) extends math.Ordered[Dummy] { - def compare(other: Dummy) = this.a - other.a - override def toString = a.toString -} - - -object Global { - val sz = 500000 - val data = (0 until sz) map { new Dummy(_) } toArray -} - - -import Global._ - - -object AVL extends testing.Benchmark { - - def run() { - val avl = new collection.mutable.TreeSet[Dummy] - - var i = 0 - while (i < sz) { - val elem = data(i) - avl += elem - i += 1 - } - } - -} - - -object ImmutableTreeSet extends testing.Benchmark { - - def run() { - var tree = new collection.immutable.TreeSet[Dummy] - - var i = 0 - while (i < sz) { - val elem = data(i) - tree += elem - i += 1 - } - } - -} - - -object JavaTreeSet extends testing.Benchmark { - - def run() { - val tree = new java.util.TreeSet[Dummy] - - var i = 0 - while (i < sz) { - val elem = data(i) - tree add elem - i += 1 - } - } - -} diff --git a/test/benchmarking/ParCtrie-bfs.scala b/test/benchmarking/ParCtrie-bfs.scala deleted file mode 100644 index 59149fff8c..0000000000 --- a/test/benchmarking/ParCtrie-bfs.scala +++ /dev/null @@ -1,73 +0,0 @@ - - - - - -import collection.parallel.mutable.ParCtrie - - -object Bfs extends testing.Benchmark { - val length = sys.props("length").toInt - val par = sys.props("par").toInt - - type Node = (Int, Int); - type Parent = (Int, Int); - - def up(n: Node) = (n._1, n._2 - 1); - def down(n: Node) = (n._1, n._2 + 1); - def left(n: Node) = (n._1 - 1, n._2); - def right(n: Node) = (n._1 + 1, n._2); - - // create a map and a target - val target = (length / 2, length / 2); - val map = Array.tabulate(length, length)((x, y) => (x % 3) != 0 || (y % 3) != 0 || (x, y) == target) - def onMap(n: Node) = n._1 >= 0 && n._1 < length && n._2 >= 0 && n._2 < length - - // open and closed lists - val open = ParCtrie[Node, Parent]() - val closed = ParCtrie[Node, Parent]() - - collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(par) - - override def setUp() { - open.clear() - closed.clear() - - // a couple of starting positions - open((0, 0)) = null - open((length - 1, length - 1)) = null - open((0, length - 1)) = null - open((length - 1, 0)) = null - } - - def run() = { - // greedy bfs path search - while (open.nonEmpty && !open.contains(target)) { - for ((node, parent) <- open) { - def expand(next: Node) { - if (onMap(next) && map(next._1)(next._2) && !closed.contains(next) && !open.contains(next)) { - open(next) = node - } - } - expand(up(node)) - expand(down(node)) - expand(left(node)) - expand(right(node)) - closed(node) = parent - open.remove(node) - } - } - } - - override def tearDown() { - // print path - var pathnode = open(target) - while (closed.contains(pathnode)) { - print(pathnode + "->") - pathnode = closed(pathnode) - } - println() - } - -} - diff --git a/test/benchmarking/ParCtrie-map.scala b/test/benchmarking/ParCtrie-map.scala deleted file mode 100644 index f1d2f560b7..0000000000 --- a/test/benchmarking/ParCtrie-map.scala +++ /dev/null @@ -1,21 +0,0 @@ - - - -import collection.parallel.mutable.ParCtrie - - - -object Map extends testing.Benchmark { - val length = sys.props("length").toInt - val par = sys.props("par").toInt - val parctrie = ParCtrie((0 until length) zip (0 until length): _*) - - parctrie.tasksupport = new collection.parallel.ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(par)) - - def run = { - parctrie map { - kv => kv - } - } -} - diff --git a/test/benchmarking/ParCtrie-nums.scala b/test/benchmarking/ParCtrie-nums.scala deleted file mode 100644 index 76d1966d1f..0000000000 --- a/test/benchmarking/ParCtrie-nums.scala +++ /dev/null @@ -1,39 +0,0 @@ - - - - - -import collection.parallel.mutable.ParCtrie - - -case class Entry(num: Double) { - var sqrt = num -} - - -object Nums extends testing.Benchmark { - val length = sys.props("length").toInt - val par = sys.props("par").toInt - var entries: Seq[Entry] = null - var results: ParCtrie[Double, Entry] = null - - collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(par) - - override def setUp() { - entries = (1 until length) map { num => Entry(num.toDouble) } - results = ParCtrie() - for (e <- entries) results += ((e.num, e)) - } - - def run() = { - while (results.nonEmpty) { - for ((num, e) <- results) { - val nsqrt = 0.5 * (e.sqrt + e.num / e.sqrt) - if (math.abs(nsqrt - e.sqrt) < 0.01) { - results.remove(num) - } else e.sqrt = nsqrt - } - } - } -} - diff --git a/test/benchmarking/ParCtrie-size.scala b/test/benchmarking/ParCtrie-size.scala deleted file mode 100644 index 3f47dc23fd..0000000000 --- a/test/benchmarking/ParCtrie-size.scala +++ /dev/null @@ -1,37 +0,0 @@ - - - - -import collection.parallel.mutable.ParTrieMap - - - -object Size extends testing.Benchmark { - val length = sys.props("length").toInt - val par = sys.props("par").toInt - var parctrie = ParTrieMap((0 until length) zip (0 until length): _*) - - //collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(par) - val ts = new collection.parallel.ForkJoinTaskSupport(new concurrent.forkjoin.ForkJoinPool(par)) - parctrie.tasksupport = ts - - def run = { - parctrie.size - } - - var iteration = 0 - - override def tearDown() { - iteration += 1 - if (iteration % 4 == 0) parctrie = ParTrieMap((0 until length) zip (0 until length): _*) - parctrie.tasksupport = ts - } - -} - - - - - - - diff --git a/test/benchmarking/ParHashMap.scala b/test/benchmarking/ParHashMap.scala deleted file mode 100644 index 33a378fb04..0000000000 --- a/test/benchmarking/ParHashMap.scala +++ /dev/null @@ -1,33 +0,0 @@ - - - -import collection.parallel.mutable.ParHashMap - - - -object Map extends testing.Benchmark { - val length = sys.props("length").toInt - val par = sys.props("par").toInt - val phm = ParHashMap((0 until length) zip (0 until length): _*) - - phm.tasksupport = new collection.parallel.ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(par)) - - def run = { - phm map { - kv => kv - } - } -} - - -object MapSeq extends testing.Benchmark { - val length = sys.props("length").toInt - val hm = collection.mutable.HashMap((0 until length) zip (0 until length): _*) - - def run = { - hm map { - kv => kv - } - } -} - diff --git a/test/benchmarking/ParVector-reduce.scala b/test/benchmarking/ParVector-reduce.scala deleted file mode 100644 index 2b4594e997..0000000000 --- a/test/benchmarking/ParVector-reduce.scala +++ /dev/null @@ -1,33 +0,0 @@ - - - -import collection.parallel.immutable.ParVector - - - -object Reduce extends testing.Benchmark { - val length = sys.props("length").toInt - val par = sys.props("par").toInt - val parvector = ParVector((0 until length): _*) - - parvector.tasksupport = new collection.parallel.ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(par)) - - def run = { - parvector reduce { - (a, b) => a + b - } - } -} - - -object ReduceSeq extends testing.Benchmark { - val length = sys.props("length").toInt - val vector = collection.immutable.Vector((0 until length): _*) - - def run = { - vector reduce { - (a, b) => a + b - } - } -} - diff --git a/test/benchmarking/TreeSetInsert.scala b/test/benchmarking/TreeSetInsert.scala deleted file mode 100644 index 23444aa305..0000000000 --- a/test/benchmarking/TreeSetInsert.scala +++ /dev/null @@ -1,70 +0,0 @@ - -object TreeSetInsert { - - def main(args: Array[String]): Unit = { - val n = 500000 - JavaUtilTS.main(args) - MutableTS.main(args) - ImmutableTS.main(args) - } -} - -class Dummy(val a: Int) extends math.Ordered[Dummy] { - def compare(other: Dummy) = this.a - other.a - - override def toString = a.toString - } - - -object JavaUtilTS extends testing.Benchmark { - val length = sys.props("length").toInt - var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray - var t: java.util.TreeSet[Dummy] = null - - def run = { - t = new java.util.TreeSet[Dummy]() - - var i = 0 - while (i < length) { - val elem = data(i) - t add elem - i += 1 - } - } -} - - -object MutableTS extends testing.Benchmark { - val length = sys.props("length").toInt - var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray - var t: collection.mutable.TreeSet[Dummy] = null - - def run = { - t = collection.mutable.TreeSet[Dummy]() - - var i = 0 - while (i < length) { - val elem = data(i) - t += elem - i += 1 - } - } -} - - -object ImmutableTS extends testing.Benchmark { - val length = sys.props("length").toInt - var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray - var t: collection.immutable.TreeSet[Dummy] = null - - def run = { - t = collection.immutable.TreeSet[Dummy]() - - var i = 0 - while (i < length) { - val elem = data(i) - t += elem - i += 1 - } - } -} diff --git a/test/benchmarking/TreeSetInsertRandom.scala b/test/benchmarking/TreeSetInsertRandom.scala deleted file mode 100644 index 7f182548b7..0000000000 --- a/test/benchmarking/TreeSetInsertRandom.scala +++ /dev/null @@ -1,65 +0,0 @@ - -object TreeSetInsertRandom { - - def main(args: Array[String]): Unit = { - val n = 500000 - new JavaUtilTS(n).main(args) - new MutableTS(n).main(args) - new ImmutableTS(n).main(args) - } -} - -class Dummy(val a: Int) extends math.Ordered[Dummy] { - def compare(other: Dummy) = this.a - other.a - - override def toString = a.toString - } - - -class JavaUtilTS(val length: Int) extends testing.Benchmark { - var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray - var t: java.util.TreeSet[Dummy] = null - - def run = { - t = new java.util.TreeSet[Dummy]() - - var i = 0 - while (i < length) { - val elem = data(i) - t add elem - i += 1 - } - } -} - -class MutableTS(val length: Int) extends testing.Benchmark { - var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray - var t: collection.mutable.TreeSet[Dummy] = null - - def run = { - t = collection.mutable.TreeSet[Dummy]() - - var i = 0 - while (i < length) { - val elem = data(i) - t += elem - i += 1 - } - } -} - -class ImmutableTS(val length: Int) extends testing.Benchmark { - var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray - var t: collection.immutable.TreeSet[Dummy] = null - - def run = { - t = collection.immutable.TreeSet[Dummy]() - - var i = 0 - while (i < length) { - val elem = data(i) - t += elem - i += 1 - } - } -} diff --git a/test/benchmarking/TreeSetIterator.scala b/test/benchmarking/TreeSetIterator.scala deleted file mode 100644 index 08c20e8b0c..0000000000 --- a/test/benchmarking/TreeSetIterator.scala +++ /dev/null @@ -1,69 +0,0 @@ - -object TreeSetIterator { - - def main(args: Array[String]): Unit = { - val n = 500000 - JavaUtilTS.main(args) - MutableTS.main(args) - ImmutableTS.main(args) - } -} - -class Dummy(val a: Int) extends math.Ordered[Dummy] { - def compare(other: Dummy) = this.a - other.a - - override def toString = a.toString - } - - -object JavaUtilTS extends testing.Benchmark { - val length = sys.props("length").toInt - var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray - var t: java.util.TreeSet[Dummy] = null - - def run = { - t = new java.util.TreeSet[Dummy]() - data foreach { a => t add a } - - var i: Dummy = null - var it = t.iterator - while (it.hasNext) { - i = it.next - } - i - } -} - -object MutableTS extends testing.Benchmark { - val length = sys.props("length").toInt - var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray - var t: collection.mutable.TreeSet[Dummy] = null - - def run = { - t = collection.mutable.TreeSet[Dummy](data: _*) - - var i: Dummy = null - var it = t.iterator - while (it.hasNext) { - i = it.next - } - i - } -} - -object ImmutableTS extends testing.Benchmark { - val length = sys.props("length").toInt - var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray - var t: collection.immutable.TreeSet[Dummy] = null - - def run = { - t = collection.immutable.TreeSet[Dummy](data: _*) - - var i: Dummy = null - var it = t.iterator - while (it.hasNext) { - i = it.next - } - i - } -} diff --git a/test/benchmarking/TreeSetRemove.scala b/test/benchmarking/TreeSetRemove.scala deleted file mode 100644 index f84066f336..0000000000 --- a/test/benchmarking/TreeSetRemove.scala +++ /dev/null @@ -1,69 +0,0 @@ - -object TreeSetRemove { - - def main(args: Array[String]): Unit = { - val n = 500000 - JavaUtilTS.main(args) - MutableTS.main(args) - ImmutableTS.main(args) - } -} - -class Dummy(val a: Int) extends math.Ordered[Dummy] { - def compare(other: Dummy) = this.a - other.a - - override def toString = a.toString - } - - -object JavaUtilTS extends testing.Benchmark { - val length = sys.props("length").toInt - var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray - var t: java.util.TreeSet[Dummy] = null - - def run = { - t = new java.util.TreeSet[Dummy]() - data foreach { a => t add a } - - var i = 0 - while (i < length) { - val elem = data(i) - t remove elem - i += 1 - } - } -} - -object MutableTS extends testing.Benchmark { - val length = sys.props("length").toInt - var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray - var t: collection.mutable.TreeSet[Dummy] = null - - def run = { - t = collection.mutable.TreeSet[Dummy](data: _*) - - var i = 0 - while (i < length) { - val elem = data(i) - t -= elem - i += 1 - } - } -} - -object ImmutableTS extends testing.Benchmark { - val length = sys.props("length").toInt - var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray - var t: collection.immutable.TreeSet[Dummy] = null - - def run = { - t = collection.immutable.TreeSet[Dummy](data: _*) - - var i = 0 - while (i < length) { - val elem = data(i) - t -= elem - i += 1 - } - } -} diff --git a/test/benchmarking/TreeSetRemoveRandom.scala b/test/benchmarking/TreeSetRemoveRandom.scala deleted file mode 100644 index 4d311679e3..0000000000 --- a/test/benchmarking/TreeSetRemoveRandom.scala +++ /dev/null @@ -1,66 +0,0 @@ - -object TreeSetRemoveRandom { - - def main(args: Array[String]): Unit = { - val n = 500000 - new JavaUtilTS(n).main(args) - new MutableTS(n).main(args) - new ImmutableTS(n).main(args) - } -} - -class Dummy(val a: Int) extends math.Ordered[Dummy] { - def compare(other: Dummy) = this.a - other.a - - override def toString = a.toString - } - - -class JavaUtilTS(val length: Int) extends testing.Benchmark { - var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray - var t: java.util.TreeSet[Dummy] = null - - def run = { - t = new java.util.TreeSet[Dummy]() - data foreach { a => t add a } - - var i = 0 - while (i < length) { - val elem = data(i) - t remove elem - i += 1 - } - } -} - -class MutableTS(val length: Int) extends testing.Benchmark { - var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray - var t: collection.mutable.TreeSet[Dummy] = null - - def run = { - t = collection.mutable.TreeSet[Dummy](data: _*) - - var i = 0 - while (i < length) { - val elem = data(i) - t -= elem - i += 1 - } - } -} - -class ImmutableTS(val length: Int) extends testing.Benchmark { - var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray - var t: collection.immutable.TreeSet[Dummy] = null - - def run = { - t = collection.immutable.TreeSet[Dummy](data: _*) - - var i = 0 - while (i < length) { - val elem = data(i) - t -= elem - i += 1 - } - } -} diff --git a/test/benchmarking/t6726-patmat-analysis.scala b/test/benchmarking/t6726-patmat-analysis.scala deleted file mode 100644 index bcb7f6c6b2..0000000000 --- a/test/benchmarking/t6726-patmat-analysis.scala +++ /dev/null @@ -1,4005 +0,0 @@ -trait Foo{ -abstract class Base -case class Dummy0(x: Int) extends Base -case class Dummy1(x: Int) extends Base -case class Dummy2(x: Int) extends Base -case class Dummy3(x: Int) extends Base -case class Dummy4(x: Int) extends Base -case class Dummy5(x: Int) extends Base -case class Dummy6(x: Int) extends Base -case class Dummy7(x: Int) extends Base -case class Dummy8(x: Int) extends Base -case class Dummy9(x: Int) extends Base -case class Dummy10(x: Int) extends Base -case class Dummy11(x: Int) extends Base -case class Dummy12(x: Int) extends Base -case class Dummy13(x: Int) extends Base -case class Dummy14(x: Int) extends Base -case class Dummy15(x: Int) extends Base -case class Dummy16(x: Int) extends Base -case class Dummy17(x: Int) extends Base -case class Dummy18(x: Int) extends Base -case class Dummy19(x: Int) extends Base -case class Dummy20(x: Int) extends Base -case class Dummy21(x: Int) extends Base -case class Dummy22(x: Int) extends Base -case class Dummy23(x: Int) extends Base -case class Dummy24(x: Int) extends Base -case class Dummy25(x: Int) extends Base -case class Dummy26(x: Int) extends Base -case class Dummy27(x: Int) extends Base -case class Dummy28(x: Int) extends Base -case class Dummy29(x: Int) extends Base -case class Dummy30(x: Int) extends Base -case class Dummy31(x: Int) extends Base -case class Dummy32(x: Int) extends Base -case class Dummy33(x: Int) extends Base -case class Dummy34(x: Int) extends Base -case class Dummy35(x: Int) extends Base -case class Dummy36(x: Int) extends Base -case class Dummy37(x: Int) extends Base -case class Dummy38(x: Int) extends Base -case class Dummy39(x: Int) extends Base -case class Dummy40(x: Int) extends Base -case class Dummy41(x: Int) extends Base -case class Dummy42(x: Int) extends Base -case class Dummy43(x: Int) extends Base -case class Dummy44(x: Int) extends Base -case class Dummy45(x: Int) extends Base -case class Dummy46(x: Int) extends Base -case class Dummy47(x: Int) extends Base -case class Dummy48(x: Int) extends Base -case class Dummy49(x: Int) extends Base -case class Dummy50(x: Int) extends Base -case class Dummy51(x: Int) extends Base -case class Dummy52(x: Int) extends Base -case class Dummy53(x: Int) extends Base -case class Dummy54(x: Int) extends Base -case class Dummy55(x: Int) extends Base -case class Dummy56(x: Int) extends Base -case class Dummy57(x: Int) extends Base -case class Dummy58(x: Int) extends Base -case class Dummy59(x: Int) extends Base -case class Dummy60(x: Int) extends Base -case class Dummy61(x: Int) extends Base -case class Dummy62(x: Int) extends Base -case class Dummy63(x: Int) extends Base -case class Dummy64(x: Int) extends Base -case class Dummy65(x: Int) extends Base -case class Dummy66(x: Int) extends Base -case class Dummy67(x: Int) extends Base -case class Dummy68(x: Int) extends Base -case class Dummy69(x: Int) extends Base -case class Dummy70(x: Int) extends Base -case class Dummy71(x: Int) extends Base -case class Dummy72(x: Int) extends Base -case class Dummy73(x: Int) extends Base -case class Dummy74(x: Int) extends Base -case class Dummy75(x: Int) extends Base -case class Dummy76(x: Int) extends Base -case class Dummy77(x: Int) extends Base -case class Dummy78(x: Int) extends Base -case class Dummy79(x: Int) extends Base -case class Dummy80(x: Int) extends Base -case class Dummy81(x: Int) extends Base -case class Dummy82(x: Int) extends Base -case class Dummy83(x: Int) extends Base -case class Dummy84(x: Int) extends Base -case class Dummy85(x: Int) extends Base -case class Dummy86(x: Int) extends Base -case class Dummy87(x: Int) extends Base -case class Dummy88(x: Int) extends Base -case class Dummy89(x: Int) extends Base -case class Dummy90(x: Int) extends Base -case class Dummy91(x: Int) extends Base -case class Dummy92(x: Int) extends Base -case class Dummy93(x: Int) extends Base -case class Dummy94(x: Int) extends Base -case class Dummy95(x: Int) extends Base -case class Dummy96(x: Int) extends Base -case class Dummy97(x: Int) extends Base -case class Dummy98(x: Int) extends Base -case class Dummy99(x: Int) extends Base -case class Dummy100(x: Int) extends Base -case class Dummy101(x: Int) extends Base -case class Dummy102(x: Int) extends Base -case class Dummy103(x: Int) extends Base -case class Dummy104(x: Int) extends Base -case class Dummy105(x: Int) extends Base -case class Dummy106(x: Int) extends Base -case class Dummy107(x: Int) extends Base -case class Dummy108(x: Int) extends Base -case class Dummy109(x: Int) extends Base -case class Dummy110(x: Int) extends Base -case class Dummy111(x: Int) extends Base -case class Dummy112(x: Int) extends Base -case class Dummy113(x: Int) extends Base -case class Dummy114(x: Int) extends Base -case class Dummy115(x: Int) extends Base -case class Dummy116(x: Int) extends Base -case class Dummy117(x: Int) extends Base -case class Dummy118(x: Int) extends Base -case class Dummy119(x: Int) extends Base -case class Dummy120(x: Int) extends Base -case class Dummy121(x: Int) extends Base -case class Dummy122(x: Int) extends Base -case class Dummy123(x: Int) extends Base -case class Dummy124(x: Int) extends Base -case class Dummy125(x: Int) extends Base -case class Dummy126(x: Int) extends Base -case class Dummy127(x: Int) extends Base -case class Dummy128(x: Int) extends Base -case class Dummy129(x: Int) extends Base -case class Dummy130(x: Int) extends Base -case class Dummy131(x: Int) extends Base -case class Dummy132(x: Int) extends Base -case class Dummy133(x: Int) extends Base -case class Dummy134(x: Int) extends Base -case class Dummy135(x: Int) extends Base -case class Dummy136(x: Int) extends Base -case class Dummy137(x: Int) extends Base -case class Dummy138(x: Int) extends Base -case class Dummy139(x: Int) extends Base -case class Dummy140(x: Int) extends Base -case class Dummy141(x: Int) extends Base -case class Dummy142(x: Int) extends Base -case class Dummy143(x: Int) extends Base -case class Dummy144(x: Int) extends Base -case class Dummy145(x: Int) extends Base -case class Dummy146(x: Int) extends Base -case class Dummy147(x: Int) extends Base -case class Dummy148(x: Int) extends Base -case class Dummy149(x: Int) extends Base -case class Dummy150(x: Int) extends Base -case class Dummy151(x: Int) extends Base -case class Dummy152(x: Int) extends Base -case class Dummy153(x: Int) extends Base -case class Dummy154(x: Int) extends Base -case class Dummy155(x: Int) extends Base -case class Dummy156(x: Int) extends Base -case class Dummy157(x: Int) extends Base -case class Dummy158(x: Int) extends Base -case class Dummy159(x: Int) extends Base -case class Dummy160(x: Int) extends Base -case class Dummy161(x: Int) extends Base -case class Dummy162(x: Int) extends Base -case class Dummy163(x: Int) extends Base -case class Dummy164(x: Int) extends Base -case class Dummy165(x: Int) extends Base -case class Dummy166(x: Int) extends Base -case class Dummy167(x: Int) extends Base -case class Dummy168(x: Int) extends Base -case class Dummy169(x: Int) extends Base -case class Dummy170(x: Int) extends Base -case class Dummy171(x: Int) extends Base -case class Dummy172(x: Int) extends Base -case class Dummy173(x: Int) extends Base -case class Dummy174(x: Int) extends Base -case class Dummy175(x: Int) extends Base -case class Dummy176(x: Int) extends Base -case class Dummy177(x: Int) extends Base -case class Dummy178(x: Int) extends Base -case class Dummy179(x: Int) extends Base -case class Dummy180(x: Int) extends Base -case class Dummy181(x: Int) extends Base -case class Dummy182(x: Int) extends Base -case class Dummy183(x: Int) extends Base -case class Dummy184(x: Int) extends Base -case class Dummy185(x: Int) extends Base -case class Dummy186(x: Int) extends Base -case class Dummy187(x: Int) extends Base -case class Dummy188(x: Int) extends Base -case class Dummy189(x: Int) extends Base -case class Dummy190(x: Int) extends Base -case class Dummy191(x: Int) extends Base -case class Dummy192(x: Int) extends Base -case class Dummy193(x: Int) extends Base -case class Dummy194(x: Int) extends Base -case class Dummy195(x: Int) extends Base -case class Dummy196(x: Int) extends Base -case class Dummy197(x: Int) extends Base -case class Dummy198(x: Int) extends Base -case class Dummy199(x: Int) extends Base -case class Dummy200(x: Int) extends Base -case class Dummy201(x: Int) extends Base -case class Dummy202(x: Int) extends Base -case class Dummy203(x: Int) extends Base -case class Dummy204(x: Int) extends Base -case class Dummy205(x: Int) extends Base -case class Dummy206(x: Int) extends Base -case class Dummy207(x: Int) extends Base -case class Dummy208(x: Int) extends Base -case class Dummy209(x: Int) extends Base -case class Dummy210(x: Int) extends Base -case class Dummy211(x: Int) extends Base -case class Dummy212(x: Int) extends Base -case class Dummy213(x: Int) extends Base -case class Dummy214(x: Int) extends Base -case class Dummy215(x: Int) extends Base -case class Dummy216(x: Int) extends Base -case class Dummy217(x: Int) extends Base -case class Dummy218(x: Int) extends Base -case class Dummy219(x: Int) extends Base -case class Dummy220(x: Int) extends Base -case class Dummy221(x: Int) extends Base -case class Dummy222(x: Int) extends Base -case class Dummy223(x: Int) extends Base -case class Dummy224(x: Int) extends Base -case class Dummy225(x: Int) extends Base -case class Dummy226(x: Int) extends Base -case class Dummy227(x: Int) extends Base -case class Dummy228(x: Int) extends Base -case class Dummy229(x: Int) extends Base -case class Dummy230(x: Int) extends Base -case class Dummy231(x: Int) extends Base -case class Dummy232(x: Int) extends Base -case class Dummy233(x: Int) extends Base -case class Dummy234(x: Int) extends Base -case class Dummy235(x: Int) extends Base -case class Dummy236(x: Int) extends Base -case class Dummy237(x: Int) extends Base -case class Dummy238(x: Int) extends Base -case class Dummy239(x: Int) extends Base -case class Dummy240(x: Int) extends Base -case class Dummy241(x: Int) extends Base -case class Dummy242(x: Int) extends Base -case class Dummy243(x: Int) extends Base -case class Dummy244(x: Int) extends Base -case class Dummy245(x: Int) extends Base -case class Dummy246(x: Int) extends Base -case class Dummy247(x: Int) extends Base -case class Dummy248(x: Int) extends Base -case class Dummy249(x: Int) extends Base -case class Dummy250(x: Int) extends Base -case class Dummy251(x: Int) extends Base -case class Dummy252(x: Int) extends Base -case class Dummy253(x: Int) extends Base -case class Dummy254(x: Int) extends Base -case class Dummy255(x: Int) extends Base -case class Dummy256(x: Int) extends Base -case class Dummy257(x: Int) extends Base -case class Dummy258(x: Int) extends Base -case class Dummy259(x: Int) extends Base -case class Dummy260(x: Int) extends Base -case class Dummy261(x: Int) extends Base -case class Dummy262(x: Int) extends Base -case class Dummy263(x: Int) extends Base -case class Dummy264(x: Int) extends Base -case class Dummy265(x: Int) extends Base -case class Dummy266(x: Int) extends Base -case class Dummy267(x: Int) extends Base -case class Dummy268(x: Int) extends Base -case class Dummy269(x: Int) extends Base -case class Dummy270(x: Int) extends Base -case class Dummy271(x: Int) extends Base -case class Dummy272(x: Int) extends Base -case class Dummy273(x: Int) extends Base -case class Dummy274(x: Int) extends Base -case class Dummy275(x: Int) extends Base -case class Dummy276(x: Int) extends Base -case class Dummy277(x: Int) extends Base -case class Dummy278(x: Int) extends Base -case class Dummy279(x: Int) extends Base -case class Dummy280(x: Int) extends Base -case class Dummy281(x: Int) extends Base -case class Dummy282(x: Int) extends Base -case class Dummy283(x: Int) extends Base -case class Dummy284(x: Int) extends Base -case class Dummy285(x: Int) extends Base -case class Dummy286(x: Int) extends Base -case class Dummy287(x: Int) extends Base -case class Dummy288(x: Int) extends Base -case class Dummy289(x: Int) extends Base -case class Dummy290(x: Int) extends Base -case class Dummy291(x: Int) extends Base -case class Dummy292(x: Int) extends Base -case class Dummy293(x: Int) extends Base -case class Dummy294(x: Int) extends Base -case class Dummy295(x: Int) extends Base -case class Dummy296(x: Int) extends Base -case class Dummy297(x: Int) extends Base -case class Dummy298(x: Int) extends Base -case class Dummy299(x: Int) extends Base -case class Dummy300(x: Int) extends Base -case class Dummy301(x: Int) extends Base -case class Dummy302(x: Int) extends Base -case class Dummy303(x: Int) extends Base -case class Dummy304(x: Int) extends Base -case class Dummy305(x: Int) extends Base -case class Dummy306(x: Int) extends Base -case class Dummy307(x: Int) extends Base -case class Dummy308(x: Int) extends Base -case class Dummy309(x: Int) extends Base -case class Dummy310(x: Int) extends Base -case class Dummy311(x: Int) extends Base -case class Dummy312(x: Int) extends Base -case class Dummy313(x: Int) extends Base -case class Dummy314(x: Int) extends Base -case class Dummy315(x: Int) extends Base -case class Dummy316(x: Int) extends Base -case class Dummy317(x: Int) extends Base -case class Dummy318(x: Int) extends Base -case class Dummy319(x: Int) extends Base -case class Dummy320(x: Int) extends Base -case class Dummy321(x: Int) extends Base -case class Dummy322(x: Int) extends Base -case class Dummy323(x: Int) extends Base -case class Dummy324(x: Int) extends Base -case class Dummy325(x: Int) extends Base -case class Dummy326(x: Int) extends Base -case class Dummy327(x: Int) extends Base -case class Dummy328(x: Int) extends Base -case class Dummy329(x: Int) extends Base -case class Dummy330(x: Int) extends Base -case class Dummy331(x: Int) extends Base -case class Dummy332(x: Int) extends Base -case class Dummy333(x: Int) extends Base -case class Dummy334(x: Int) extends Base -case class Dummy335(x: Int) extends Base -case class Dummy336(x: Int) extends Base -case class Dummy337(x: Int) extends Base -case class Dummy338(x: Int) extends Base -case class Dummy339(x: Int) extends Base -case class Dummy340(x: Int) extends Base -case class Dummy341(x: Int) extends Base -case class Dummy342(x: Int) extends Base -case class Dummy343(x: Int) extends Base -case class Dummy344(x: Int) extends Base -case class Dummy345(x: Int) extends Base -case class Dummy346(x: Int) extends Base -case class Dummy347(x: Int) extends Base -case class Dummy348(x: Int) extends Base -case class Dummy349(x: Int) extends Base -case class Dummy350(x: Int) extends Base -case class Dummy351(x: Int) extends Base -case class Dummy352(x: Int) extends Base -case class Dummy353(x: Int) extends Base -case class Dummy354(x: Int) extends Base -case class Dummy355(x: Int) extends Base -case class Dummy356(x: Int) extends Base -case class Dummy357(x: Int) extends Base -case class Dummy358(x: Int) extends Base -case class Dummy359(x: Int) extends Base -case class Dummy360(x: Int) extends Base -case class Dummy361(x: Int) extends Base -case class Dummy362(x: Int) extends Base -case class Dummy363(x: Int) extends Base -case class Dummy364(x: Int) extends Base -case class Dummy365(x: Int) extends Base -case class Dummy366(x: Int) extends Base -case class Dummy367(x: Int) extends Base -case class Dummy368(x: Int) extends Base -case class Dummy369(x: Int) extends Base -case class Dummy370(x: Int) extends Base -case class Dummy371(x: Int) extends Base -case class Dummy372(x: Int) extends Base -case class Dummy373(x: Int) extends Base -case class Dummy374(x: Int) extends Base -case class Dummy375(x: Int) extends Base -case class Dummy376(x: Int) extends Base -case class Dummy377(x: Int) extends Base -case class Dummy378(x: Int) extends Base -case class Dummy379(x: Int) extends Base -case class Dummy380(x: Int) extends Base -case class Dummy381(x: Int) extends Base -case class Dummy382(x: Int) extends Base -case class Dummy383(x: Int) extends Base -case class Dummy384(x: Int) extends Base -case class Dummy385(x: Int) extends Base -case class Dummy386(x: Int) extends Base -case class Dummy387(x: Int) extends Base -case class Dummy388(x: Int) extends Base -case class Dummy389(x: Int) extends Base -case class Dummy390(x: Int) extends Base -case class Dummy391(x: Int) extends Base -case class Dummy392(x: Int) extends Base -case class Dummy393(x: Int) extends Base -case class Dummy394(x: Int) extends Base -case class Dummy395(x: Int) extends Base -case class Dummy396(x: Int) extends Base -case class Dummy397(x: Int) extends Base -case class Dummy398(x: Int) extends Base -case class Dummy399(x: Int) extends Base -case class Dummy400(x: Int) extends Base -case class Dummy401(x: Int) extends Base -case class Dummy402(x: Int) extends Base -case class Dummy403(x: Int) extends Base -case class Dummy404(x: Int) extends Base -case class Dummy405(x: Int) extends Base -case class Dummy406(x: Int) extends Base -case class Dummy407(x: Int) extends Base -case class Dummy408(x: Int) extends Base -case class Dummy409(x: Int) extends Base -case class Dummy410(x: Int) extends Base -case class Dummy411(x: Int) extends Base -case class Dummy412(x: Int) extends Base -case class Dummy413(x: Int) extends Base -case class Dummy414(x: Int) extends Base -case class Dummy415(x: Int) extends Base -case class Dummy416(x: Int) extends Base -case class Dummy417(x: Int) extends Base -case class Dummy418(x: Int) extends Base -case class Dummy419(x: Int) extends Base -case class Dummy420(x: Int) extends Base -case class Dummy421(x: Int) extends Base -case class Dummy422(x: Int) extends Base -case class Dummy423(x: Int) extends Base -case class Dummy424(x: Int) extends Base -case class Dummy425(x: Int) extends Base -case class Dummy426(x: Int) extends Base -case class Dummy427(x: Int) extends Base -case class Dummy428(x: Int) extends Base -case class Dummy429(x: Int) extends Base -case class Dummy430(x: Int) extends Base -case class Dummy431(x: Int) extends Base -case class Dummy432(x: Int) extends Base -case class Dummy433(x: Int) extends Base -case class Dummy434(x: Int) extends Base -case class Dummy435(x: Int) extends Base -case class Dummy436(x: Int) extends Base -case class Dummy437(x: Int) extends Base -case class Dummy438(x: Int) extends Base -case class Dummy439(x: Int) extends Base -case class Dummy440(x: Int) extends Base -case class Dummy441(x: Int) extends Base -case class Dummy442(x: Int) extends Base -case class Dummy443(x: Int) extends Base -case class Dummy444(x: Int) extends Base -case class Dummy445(x: Int) extends Base -case class Dummy446(x: Int) extends Base -case class Dummy447(x: Int) extends Base -case class Dummy448(x: Int) extends Base -case class Dummy449(x: Int) extends Base -case class Dummy450(x: Int) extends Base -case class Dummy451(x: Int) extends Base -case class Dummy452(x: Int) extends Base -case class Dummy453(x: Int) extends Base -case class Dummy454(x: Int) extends Base -case class Dummy455(x: Int) extends Base -case class Dummy456(x: Int) extends Base -case class Dummy457(x: Int) extends Base -case class Dummy458(x: Int) extends Base -case class Dummy459(x: Int) extends Base -case class Dummy460(x: Int) extends Base -case class Dummy461(x: Int) extends Base -case class Dummy462(x: Int) extends Base -case class Dummy463(x: Int) extends Base -case class Dummy464(x: Int) extends Base -case class Dummy465(x: Int) extends Base -case class Dummy466(x: Int) extends Base -case class Dummy467(x: Int) extends Base -case class Dummy468(x: Int) extends Base -case class Dummy469(x: Int) extends Base -case class Dummy470(x: Int) extends Base -case class Dummy471(x: Int) extends Base -case class Dummy472(x: Int) extends Base -case class Dummy473(x: Int) extends Base -case class Dummy474(x: Int) extends Base -case class Dummy475(x: Int) extends Base -case class Dummy476(x: Int) extends Base -case class Dummy477(x: Int) extends Base -case class Dummy478(x: Int) extends Base -case class Dummy479(x: Int) extends Base -case class Dummy480(x: Int) extends Base -case class Dummy481(x: Int) extends Base -case class Dummy482(x: Int) extends Base -case class Dummy483(x: Int) extends Base -case class Dummy484(x: Int) extends Base -case class Dummy485(x: Int) extends Base -case class Dummy486(x: Int) extends Base -case class Dummy487(x: Int) extends Base -case class Dummy488(x: Int) extends Base -case class Dummy489(x: Int) extends Base -case class Dummy490(x: Int) extends Base -case class Dummy491(x: Int) extends Base -case class Dummy492(x: Int) extends Base -case class Dummy493(x: Int) extends Base -case class Dummy494(x: Int) extends Base -case class Dummy495(x: Int) extends Base -case class Dummy496(x: Int) extends Base -case class Dummy497(x: Int) extends Base -case class Dummy498(x: Int) extends Base -case class Dummy499(x: Int) extends Base -case class Dummy500(x: Int) extends Base -case class Dummy501(x: Int) extends Base -case class Dummy502(x: Int) extends Base -case class Dummy503(x: Int) extends Base -case class Dummy504(x: Int) extends Base -case class Dummy505(x: Int) extends Base -case class Dummy506(x: Int) extends Base -case class Dummy507(x: Int) extends Base -case class Dummy508(x: Int) extends Base -case class Dummy509(x: Int) extends Base -case class Dummy510(x: Int) extends Base -case class Dummy511(x: Int) extends Base -case class Dummy512(x: Int) extends Base -case class Dummy513(x: Int) extends Base -case class Dummy514(x: Int) extends Base -case class Dummy515(x: Int) extends Base -case class Dummy516(x: Int) extends Base -case class Dummy517(x: Int) extends Base -case class Dummy518(x: Int) extends Base -case class Dummy519(x: Int) extends Base -case class Dummy520(x: Int) extends Base -case class Dummy521(x: Int) extends Base -case class Dummy522(x: Int) extends Base -case class Dummy523(x: Int) extends Base -case class Dummy524(x: Int) extends Base -case class Dummy525(x: Int) extends Base -case class Dummy526(x: Int) extends Base -case class Dummy527(x: Int) extends Base -case class Dummy528(x: Int) extends Base -case class Dummy529(x: Int) extends Base -case class Dummy530(x: Int) extends Base -case class Dummy531(x: Int) extends Base -case class Dummy532(x: Int) extends Base -case class Dummy533(x: Int) extends Base -case class Dummy534(x: Int) extends Base -case class Dummy535(x: Int) extends Base -case class Dummy536(x: Int) extends Base -case class Dummy537(x: Int) extends Base -case class Dummy538(x: Int) extends Base -case class Dummy539(x: Int) extends Base -case class Dummy540(x: Int) extends Base -case class Dummy541(x: Int) extends Base -case class Dummy542(x: Int) extends Base -case class Dummy543(x: Int) extends Base -case class Dummy544(x: Int) extends Base -case class Dummy545(x: Int) extends Base -case class Dummy546(x: Int) extends Base -case class Dummy547(x: Int) extends Base -case class Dummy548(x: Int) extends Base -case class Dummy549(x: Int) extends Base -case class Dummy550(x: Int) extends Base -case class Dummy551(x: Int) extends Base -case class Dummy552(x: Int) extends Base -case class Dummy553(x: Int) extends Base -case class Dummy554(x: Int) extends Base -case class Dummy555(x: Int) extends Base -case class Dummy556(x: Int) extends Base -case class Dummy557(x: Int) extends Base -case class Dummy558(x: Int) extends Base -case class Dummy559(x: Int) extends Base -case class Dummy560(x: Int) extends Base -case class Dummy561(x: Int) extends Base -case class Dummy562(x: Int) extends Base -case class Dummy563(x: Int) extends Base -case class Dummy564(x: Int) extends Base -case class Dummy565(x: Int) extends Base -case class Dummy566(x: Int) extends Base -case class Dummy567(x: Int) extends Base -case class Dummy568(x: Int) extends Base -case class Dummy569(x: Int) extends Base -case class Dummy570(x: Int) extends Base -case class Dummy571(x: Int) extends Base -case class Dummy572(x: Int) extends Base -case class Dummy573(x: Int) extends Base -case class Dummy574(x: Int) extends Base -case class Dummy575(x: Int) extends Base -case class Dummy576(x: Int) extends Base -case class Dummy577(x: Int) extends Base -case class Dummy578(x: Int) extends Base -case class Dummy579(x: Int) extends Base -case class Dummy580(x: Int) extends Base -case class Dummy581(x: Int) extends Base -case class Dummy582(x: Int) extends Base -case class Dummy583(x: Int) extends Base -case class Dummy584(x: Int) extends Base -case class Dummy585(x: Int) extends Base -case class Dummy586(x: Int) extends Base -case class Dummy587(x: Int) extends Base -case class Dummy588(x: Int) extends Base -case class Dummy589(x: Int) extends Base -case class Dummy590(x: Int) extends Base -case class Dummy591(x: Int) extends Base -case class Dummy592(x: Int) extends Base -case class Dummy593(x: Int) extends Base -case class Dummy594(x: Int) extends Base -case class Dummy595(x: Int) extends Base -case class Dummy596(x: Int) extends Base -case class Dummy597(x: Int) extends Base -case class Dummy598(x: Int) extends Base -case class Dummy599(x: Int) extends Base -case class Dummy600(x: Int) extends Base -case class Dummy601(x: Int) extends Base -case class Dummy602(x: Int) extends Base -case class Dummy603(x: Int) extends Base -case class Dummy604(x: Int) extends Base -case class Dummy605(x: Int) extends Base -case class Dummy606(x: Int) extends Base -case class Dummy607(x: Int) extends Base -case class Dummy608(x: Int) extends Base -case class Dummy609(x: Int) extends Base -case class Dummy610(x: Int) extends Base -case class Dummy611(x: Int) extends Base -case class Dummy612(x: Int) extends Base -case class Dummy613(x: Int) extends Base -case class Dummy614(x: Int) extends Base -case class Dummy615(x: Int) extends Base -case class Dummy616(x: Int) extends Base -case class Dummy617(x: Int) extends Base -case class Dummy618(x: Int) extends Base -case class Dummy619(x: Int) extends Base -case class Dummy620(x: Int) extends Base -case class Dummy621(x: Int) extends Base -case class Dummy622(x: Int) extends Base -case class Dummy623(x: Int) extends Base -case class Dummy624(x: Int) extends Base -case class Dummy625(x: Int) extends Base -case class Dummy626(x: Int) extends Base -case class Dummy627(x: Int) extends Base -case class Dummy628(x: Int) extends Base -case class Dummy629(x: Int) extends Base -case class Dummy630(x: Int) extends Base -case class Dummy631(x: Int) extends Base -case class Dummy632(x: Int) extends Base -case class Dummy633(x: Int) extends Base -case class Dummy634(x: Int) extends Base -case class Dummy635(x: Int) extends Base -case class Dummy636(x: Int) extends Base -case class Dummy637(x: Int) extends Base -case class Dummy638(x: Int) extends Base -case class Dummy639(x: Int) extends Base -case class Dummy640(x: Int) extends Base -case class Dummy641(x: Int) extends Base -case class Dummy642(x: Int) extends Base -case class Dummy643(x: Int) extends Base -case class Dummy644(x: Int) extends Base -case class Dummy645(x: Int) extends Base -case class Dummy646(x: Int) extends Base -case class Dummy647(x: Int) extends Base -case class Dummy648(x: Int) extends Base -case class Dummy649(x: Int) extends Base -case class Dummy650(x: Int) extends Base -case class Dummy651(x: Int) extends Base -case class Dummy652(x: Int) extends Base -case class Dummy653(x: Int) extends Base -case class Dummy654(x: Int) extends Base -case class Dummy655(x: Int) extends Base -case class Dummy656(x: Int) extends Base -case class Dummy657(x: Int) extends Base -case class Dummy658(x: Int) extends Base -case class Dummy659(x: Int) extends Base -case class Dummy660(x: Int) extends Base -case class Dummy661(x: Int) extends Base -case class Dummy662(x: Int) extends Base -case class Dummy663(x: Int) extends Base -case class Dummy664(x: Int) extends Base -case class Dummy665(x: Int) extends Base -case class Dummy666(x: Int) extends Base -case class Dummy667(x: Int) extends Base -case class Dummy668(x: Int) extends Base -case class Dummy669(x: Int) extends Base -case class Dummy670(x: Int) extends Base -case class Dummy671(x: Int) extends Base -case class Dummy672(x: Int) extends Base -case class Dummy673(x: Int) extends Base -case class Dummy674(x: Int) extends Base -case class Dummy675(x: Int) extends Base -case class Dummy676(x: Int) extends Base -case class Dummy677(x: Int) extends Base -case class Dummy678(x: Int) extends Base -case class Dummy679(x: Int) extends Base -case class Dummy680(x: Int) extends Base -case class Dummy681(x: Int) extends Base -case class Dummy682(x: Int) extends Base -case class Dummy683(x: Int) extends Base -case class Dummy684(x: Int) extends Base -case class Dummy685(x: Int) extends Base -case class Dummy686(x: Int) extends Base -case class Dummy687(x: Int) extends Base -case class Dummy688(x: Int) extends Base -case class Dummy689(x: Int) extends Base -case class Dummy690(x: Int) extends Base -case class Dummy691(x: Int) extends Base -case class Dummy692(x: Int) extends Base -case class Dummy693(x: Int) extends Base -case class Dummy694(x: Int) extends Base -case class Dummy695(x: Int) extends Base -case class Dummy696(x: Int) extends Base -case class Dummy697(x: Int) extends Base -case class Dummy698(x: Int) extends Base -case class Dummy699(x: Int) extends Base -case class Dummy700(x: Int) extends Base -case class Dummy701(x: Int) extends Base -case class Dummy702(x: Int) extends Base -case class Dummy703(x: Int) extends Base -case class Dummy704(x: Int) extends Base -case class Dummy705(x: Int) extends Base -case class Dummy706(x: Int) extends Base -case class Dummy707(x: Int) extends Base -case class Dummy708(x: Int) extends Base -case class Dummy709(x: Int) extends Base -case class Dummy710(x: Int) extends Base -case class Dummy711(x: Int) extends Base -case class Dummy712(x: Int) extends Base -case class Dummy713(x: Int) extends Base -case class Dummy714(x: Int) extends Base -case class Dummy715(x: Int) extends Base -case class Dummy716(x: Int) extends Base -case class Dummy717(x: Int) extends Base -case class Dummy718(x: Int) extends Base -case class Dummy719(x: Int) extends Base -case class Dummy720(x: Int) extends Base -case class Dummy721(x: Int) extends Base -case class Dummy722(x: Int) extends Base -case class Dummy723(x: Int) extends Base -case class Dummy724(x: Int) extends Base -case class Dummy725(x: Int) extends Base -case class Dummy726(x: Int) extends Base -case class Dummy727(x: Int) extends Base -case class Dummy728(x: Int) extends Base -case class Dummy729(x: Int) extends Base -case class Dummy730(x: Int) extends Base -case class Dummy731(x: Int) extends Base -case class Dummy732(x: Int) extends Base -case class Dummy733(x: Int) extends Base -case class Dummy734(x: Int) extends Base -case class Dummy735(x: Int) extends Base -case class Dummy736(x: Int) extends Base -case class Dummy737(x: Int) extends Base -case class Dummy738(x: Int) extends Base -case class Dummy739(x: Int) extends Base -case class Dummy740(x: Int) extends Base -case class Dummy741(x: Int) extends Base -case class Dummy742(x: Int) extends Base -case class Dummy743(x: Int) extends Base -case class Dummy744(x: Int) extends Base -case class Dummy745(x: Int) extends Base -case class Dummy746(x: Int) extends Base -case class Dummy747(x: Int) extends Base -case class Dummy748(x: Int) extends Base -case class Dummy749(x: Int) extends Base -case class Dummy750(x: Int) extends Base -case class Dummy751(x: Int) extends Base -case class Dummy752(x: Int) extends Base -case class Dummy753(x: Int) extends Base -case class Dummy754(x: Int) extends Base -case class Dummy755(x: Int) extends Base -case class Dummy756(x: Int) extends Base -case class Dummy757(x: Int) extends Base -case class Dummy758(x: Int) extends Base -case class Dummy759(x: Int) extends Base -case class Dummy760(x: Int) extends Base -case class Dummy761(x: Int) extends Base -case class Dummy762(x: Int) extends Base -case class Dummy763(x: Int) extends Base -case class Dummy764(x: Int) extends Base -case class Dummy765(x: Int) extends Base -case class Dummy766(x: Int) extends Base -case class Dummy767(x: Int) extends Base -case class Dummy768(x: Int) extends Base -case class Dummy769(x: Int) extends Base -case class Dummy770(x: Int) extends Base -case class Dummy771(x: Int) extends Base -case class Dummy772(x: Int) extends Base -case class Dummy773(x: Int) extends Base -case class Dummy774(x: Int) extends Base -case class Dummy775(x: Int) extends Base -case class Dummy776(x: Int) extends Base -case class Dummy777(x: Int) extends Base -case class Dummy778(x: Int) extends Base -case class Dummy779(x: Int) extends Base -case class Dummy780(x: Int) extends Base -case class Dummy781(x: Int) extends Base -case class Dummy782(x: Int) extends Base -case class Dummy783(x: Int) extends Base -case class Dummy784(x: Int) extends Base -case class Dummy785(x: Int) extends Base -case class Dummy786(x: Int) extends Base -case class Dummy787(x: Int) extends Base -case class Dummy788(x: Int) extends Base -case class Dummy789(x: Int) extends Base -case class Dummy790(x: Int) extends Base -case class Dummy791(x: Int) extends Base -case class Dummy792(x: Int) extends Base -case class Dummy793(x: Int) extends Base -case class Dummy794(x: Int) extends Base -case class Dummy795(x: Int) extends Base -case class Dummy796(x: Int) extends Base -case class Dummy797(x: Int) extends Base -case class Dummy798(x: Int) extends Base -case class Dummy799(x: Int) extends Base -case class Dummy800(x: Int) extends Base -case class Dummy801(x: Int) extends Base -case class Dummy802(x: Int) extends Base -case class Dummy803(x: Int) extends Base -case class Dummy804(x: Int) extends Base -case class Dummy805(x: Int) extends Base -case class Dummy806(x: Int) extends Base -case class Dummy807(x: Int) extends Base -case class Dummy808(x: Int) extends Base -case class Dummy809(x: Int) extends Base -case class Dummy810(x: Int) extends Base -case class Dummy811(x: Int) extends Base -case class Dummy812(x: Int) extends Base -case class Dummy813(x: Int) extends Base -case class Dummy814(x: Int) extends Base -case class Dummy815(x: Int) extends Base -case class Dummy816(x: Int) extends Base -case class Dummy817(x: Int) extends Base -case class Dummy818(x: Int) extends Base -case class Dummy819(x: Int) extends Base -case class Dummy820(x: Int) extends Base -case class Dummy821(x: Int) extends Base -case class Dummy822(x: Int) extends Base -case class Dummy823(x: Int) extends Base -case class Dummy824(x: Int) extends Base -case class Dummy825(x: Int) extends Base -case class Dummy826(x: Int) extends Base -case class Dummy827(x: Int) extends Base -case class Dummy828(x: Int) extends Base -case class Dummy829(x: Int) extends Base -case class Dummy830(x: Int) extends Base -case class Dummy831(x: Int) extends Base -case class Dummy832(x: Int) extends Base -case class Dummy833(x: Int) extends Base -case class Dummy834(x: Int) extends Base -case class Dummy835(x: Int) extends Base -case class Dummy836(x: Int) extends Base -case class Dummy837(x: Int) extends Base -case class Dummy838(x: Int) extends Base -case class Dummy839(x: Int) extends Base -case class Dummy840(x: Int) extends Base -case class Dummy841(x: Int) extends Base -case class Dummy842(x: Int) extends Base -case class Dummy843(x: Int) extends Base -case class Dummy844(x: Int) extends Base -case class Dummy845(x: Int) extends Base -case class Dummy846(x: Int) extends Base -case class Dummy847(x: Int) extends Base -case class Dummy848(x: Int) extends Base -case class Dummy849(x: Int) extends Base -case class Dummy850(x: Int) extends Base -case class Dummy851(x: Int) extends Base -case class Dummy852(x: Int) extends Base -case class Dummy853(x: Int) extends Base -case class Dummy854(x: Int) extends Base -case class Dummy855(x: Int) extends Base -case class Dummy856(x: Int) extends Base -case class Dummy857(x: Int) extends Base -case class Dummy858(x: Int) extends Base -case class Dummy859(x: Int) extends Base -case class Dummy860(x: Int) extends Base -case class Dummy861(x: Int) extends Base -case class Dummy862(x: Int) extends Base -case class Dummy863(x: Int) extends Base -case class Dummy864(x: Int) extends Base -case class Dummy865(x: Int) extends Base -case class Dummy866(x: Int) extends Base -case class Dummy867(x: Int) extends Base -case class Dummy868(x: Int) extends Base -case class Dummy869(x: Int) extends Base -case class Dummy870(x: Int) extends Base -case class Dummy871(x: Int) extends Base -case class Dummy872(x: Int) extends Base -case class Dummy873(x: Int) extends Base -case class Dummy874(x: Int) extends Base -case class Dummy875(x: Int) extends Base -case class Dummy876(x: Int) extends Base -case class Dummy877(x: Int) extends Base -case class Dummy878(x: Int) extends Base -case class Dummy879(x: Int) extends Base -case class Dummy880(x: Int) extends Base -case class Dummy881(x: Int) extends Base -case class Dummy882(x: Int) extends Base -case class Dummy883(x: Int) extends Base -case class Dummy884(x: Int) extends Base -case class Dummy885(x: Int) extends Base -case class Dummy886(x: Int) extends Base -case class Dummy887(x: Int) extends Base -case class Dummy888(x: Int) extends Base -case class Dummy889(x: Int) extends Base -case class Dummy890(x: Int) extends Base -case class Dummy891(x: Int) extends Base -case class Dummy892(x: Int) extends Base -case class Dummy893(x: Int) extends Base -case class Dummy894(x: Int) extends Base -case class Dummy895(x: Int) extends Base -case class Dummy896(x: Int) extends Base -case class Dummy897(x: Int) extends Base -case class Dummy898(x: Int) extends Base -case class Dummy899(x: Int) extends Base -case class Dummy900(x: Int) extends Base -case class Dummy901(x: Int) extends Base -case class Dummy902(x: Int) extends Base -case class Dummy903(x: Int) extends Base -case class Dummy904(x: Int) extends Base -case class Dummy905(x: Int) extends Base -case class Dummy906(x: Int) extends Base -case class Dummy907(x: Int) extends Base -case class Dummy908(x: Int) extends Base -case class Dummy909(x: Int) extends Base -case class Dummy910(x: Int) extends Base -case class Dummy911(x: Int) extends Base -case class Dummy912(x: Int) extends Base -case class Dummy913(x: Int) extends Base -case class Dummy914(x: Int) extends Base -case class Dummy915(x: Int) extends Base -case class Dummy916(x: Int) extends Base -case class Dummy917(x: Int) extends Base -case class Dummy918(x: Int) extends Base -case class Dummy919(x: Int) extends Base -case class Dummy920(x: Int) extends Base -case class Dummy921(x: Int) extends Base -case class Dummy922(x: Int) extends Base -case class Dummy923(x: Int) extends Base -case class Dummy924(x: Int) extends Base -case class Dummy925(x: Int) extends Base -case class Dummy926(x: Int) extends Base -case class Dummy927(x: Int) extends Base -case class Dummy928(x: Int) extends Base -case class Dummy929(x: Int) extends Base -case class Dummy930(x: Int) extends Base -case class Dummy931(x: Int) extends Base -case class Dummy932(x: Int) extends Base -case class Dummy933(x: Int) extends Base -case class Dummy934(x: Int) extends Base -case class Dummy935(x: Int) extends Base -case class Dummy936(x: Int) extends Base -case class Dummy937(x: Int) extends Base -case class Dummy938(x: Int) extends Base -case class Dummy939(x: Int) extends Base -case class Dummy940(x: Int) extends Base -case class Dummy941(x: Int) extends Base -case class Dummy942(x: Int) extends Base -case class Dummy943(x: Int) extends Base -case class Dummy944(x: Int) extends Base -case class Dummy945(x: Int) extends Base -case class Dummy946(x: Int) extends Base -case class Dummy947(x: Int) extends Base -case class Dummy948(x: Int) extends Base -case class Dummy949(x: Int) extends Base -case class Dummy950(x: Int) extends Base -case class Dummy951(x: Int) extends Base -case class Dummy952(x: Int) extends Base -case class Dummy953(x: Int) extends Base -case class Dummy954(x: Int) extends Base -case class Dummy955(x: Int) extends Base -case class Dummy956(x: Int) extends Base -case class Dummy957(x: Int) extends Base -case class Dummy958(x: Int) extends Base -case class Dummy959(x: Int) extends Base -case class Dummy960(x: Int) extends Base -case class Dummy961(x: Int) extends Base -case class Dummy962(x: Int) extends Base -case class Dummy963(x: Int) extends Base -case class Dummy964(x: Int) extends Base -case class Dummy965(x: Int) extends Base -case class Dummy966(x: Int) extends Base -case class Dummy967(x: Int) extends Base -case class Dummy968(x: Int) extends Base -case class Dummy969(x: Int) extends Base -case class Dummy970(x: Int) extends Base -case class Dummy971(x: Int) extends Base -case class Dummy972(x: Int) extends Base -case class Dummy973(x: Int) extends Base -case class Dummy974(x: Int) extends Base -case class Dummy975(x: Int) extends Base -case class Dummy976(x: Int) extends Base -case class Dummy977(x: Int) extends Base -case class Dummy978(x: Int) extends Base -case class Dummy979(x: Int) extends Base -case class Dummy980(x: Int) extends Base -case class Dummy981(x: Int) extends Base -case class Dummy982(x: Int) extends Base -case class Dummy983(x: Int) extends Base -case class Dummy984(x: Int) extends Base -case class Dummy985(x: Int) extends Base -case class Dummy986(x: Int) extends Base -case class Dummy987(x: Int) extends Base -case class Dummy988(x: Int) extends Base -case class Dummy989(x: Int) extends Base -case class Dummy990(x: Int) extends Base -case class Dummy991(x: Int) extends Base -case class Dummy992(x: Int) extends Base -case class Dummy993(x: Int) extends Base -case class Dummy994(x: Int) extends Base -case class Dummy995(x: Int) extends Base -case class Dummy996(x: Int) extends Base -case class Dummy997(x: Int) extends Base -case class Dummy998(x: Int) extends Base -case class Dummy999(x: Int) extends Base -case class Dummy1000(x: Int) extends Base -case class Dummy1001(x: Int) extends Base -case class Dummy1002(x: Int) extends Base -case class Dummy1003(x: Int) extends Base -case class Dummy1004(x: Int) extends Base -case class Dummy1005(x: Int) extends Base -case class Dummy1006(x: Int) extends Base -case class Dummy1007(x: Int) extends Base -case class Dummy1008(x: Int) extends Base -case class Dummy1009(x: Int) extends Base -case class Dummy1010(x: Int) extends Base -case class Dummy1011(x: Int) extends Base -case class Dummy1012(x: Int) extends Base -case class Dummy1013(x: Int) extends Base -case class Dummy1014(x: Int) extends Base -case class Dummy1015(x: Int) extends Base -case class Dummy1016(x: Int) extends Base -case class Dummy1017(x: Int) extends Base -case class Dummy1018(x: Int) extends Base -case class Dummy1019(x: Int) extends Base -case class Dummy1020(x: Int) extends Base -case class Dummy1021(x: Int) extends Base -case class Dummy1022(x: Int) extends Base -case class Dummy1023(x: Int) extends Base -case class Dummy1024(x: Int) extends Base -case class Dummy1025(x: Int) extends Base -case class Dummy1026(x: Int) extends Base -case class Dummy1027(x: Int) extends Base -case class Dummy1028(x: Int) extends Base -case class Dummy1029(x: Int) extends Base -case class Dummy1030(x: Int) extends Base -case class Dummy1031(x: Int) extends Base -case class Dummy1032(x: Int) extends Base -case class Dummy1033(x: Int) extends Base -case class Dummy1034(x: Int) extends Base -case class Dummy1035(x: Int) extends Base -case class Dummy1036(x: Int) extends Base -case class Dummy1037(x: Int) extends Base -case class Dummy1038(x: Int) extends Base -case class Dummy1039(x: Int) extends Base -case class Dummy1040(x: Int) extends Base -case class Dummy1041(x: Int) extends Base -case class Dummy1042(x: Int) extends Base -case class Dummy1043(x: Int) extends Base -case class Dummy1044(x: Int) extends Base -case class Dummy1045(x: Int) extends Base -case class Dummy1046(x: Int) extends Base -case class Dummy1047(x: Int) extends Base -case class Dummy1048(x: Int) extends Base -case class Dummy1049(x: Int) extends Base -case class Dummy1050(x: Int) extends Base -case class Dummy1051(x: Int) extends Base -case class Dummy1052(x: Int) extends Base -case class Dummy1053(x: Int) extends Base -case class Dummy1054(x: Int) extends Base -case class Dummy1055(x: Int) extends Base -case class Dummy1056(x: Int) extends Base -case class Dummy1057(x: Int) extends Base -case class Dummy1058(x: Int) extends Base -case class Dummy1059(x: Int) extends Base -case class Dummy1060(x: Int) extends Base -case class Dummy1061(x: Int) extends Base -case class Dummy1062(x: Int) extends Base -case class Dummy1063(x: Int) extends Base -case class Dummy1064(x: Int) extends Base -case class Dummy1065(x: Int) extends Base -case class Dummy1066(x: Int) extends Base -case class Dummy1067(x: Int) extends Base -case class Dummy1068(x: Int) extends Base -case class Dummy1069(x: Int) extends Base -case class Dummy1070(x: Int) extends Base -case class Dummy1071(x: Int) extends Base -case class Dummy1072(x: Int) extends Base -case class Dummy1073(x: Int) extends Base -case class Dummy1074(x: Int) extends Base -case class Dummy1075(x: Int) extends Base -case class Dummy1076(x: Int) extends Base -case class Dummy1077(x: Int) extends Base -case class Dummy1078(x: Int) extends Base -case class Dummy1079(x: Int) extends Base -case class Dummy1080(x: Int) extends Base -case class Dummy1081(x: Int) extends Base -case class Dummy1082(x: Int) extends Base -case class Dummy1083(x: Int) extends Base -case class Dummy1084(x: Int) extends Base -case class Dummy1085(x: Int) extends Base -case class Dummy1086(x: Int) extends Base -case class Dummy1087(x: Int) extends Base -case class Dummy1088(x: Int) extends Base -case class Dummy1089(x: Int) extends Base -case class Dummy1090(x: Int) extends Base -case class Dummy1091(x: Int) extends Base -case class Dummy1092(x: Int) extends Base -case class Dummy1093(x: Int) extends Base -case class Dummy1094(x: Int) extends Base -case class Dummy1095(x: Int) extends Base -case class Dummy1096(x: Int) extends Base -case class Dummy1097(x: Int) extends Base -case class Dummy1098(x: Int) extends Base -case class Dummy1099(x: Int) extends Base -case class Dummy1100(x: Int) extends Base -case class Dummy1101(x: Int) extends Base -case class Dummy1102(x: Int) extends Base -case class Dummy1103(x: Int) extends Base -case class Dummy1104(x: Int) extends Base -case class Dummy1105(x: Int) extends Base -case class Dummy1106(x: Int) extends Base -case class Dummy1107(x: Int) extends Base -case class Dummy1108(x: Int) extends Base -case class Dummy1109(x: Int) extends Base -case class Dummy1110(x: Int) extends Base -case class Dummy1111(x: Int) extends Base -case class Dummy1112(x: Int) extends Base -case class Dummy1113(x: Int) extends Base -case class Dummy1114(x: Int) extends Base -case class Dummy1115(x: Int) extends Base -case class Dummy1116(x: Int) extends Base -case class Dummy1117(x: Int) extends Base -case class Dummy1118(x: Int) extends Base -case class Dummy1119(x: Int) extends Base -case class Dummy1120(x: Int) extends Base -case class Dummy1121(x: Int) extends Base -case class Dummy1122(x: Int) extends Base -case class Dummy1123(x: Int) extends Base -case class Dummy1124(x: Int) extends Base -case class Dummy1125(x: Int) extends Base -case class Dummy1126(x: Int) extends Base -case class Dummy1127(x: Int) extends Base -case class Dummy1128(x: Int) extends Base -case class Dummy1129(x: Int) extends Base -case class Dummy1130(x: Int) extends Base -case class Dummy1131(x: Int) extends Base -case class Dummy1132(x: Int) extends Base -case class Dummy1133(x: Int) extends Base -case class Dummy1134(x: Int) extends Base -case class Dummy1135(x: Int) extends Base -case class Dummy1136(x: Int) extends Base -case class Dummy1137(x: Int) extends Base -case class Dummy1138(x: Int) extends Base -case class Dummy1139(x: Int) extends Base -case class Dummy1140(x: Int) extends Base -case class Dummy1141(x: Int) extends Base -case class Dummy1142(x: Int) extends Base -case class Dummy1143(x: Int) extends Base -case class Dummy1144(x: Int) extends Base -case class Dummy1145(x: Int) extends Base -case class Dummy1146(x: Int) extends Base -case class Dummy1147(x: Int) extends Base -case class Dummy1148(x: Int) extends Base -case class Dummy1149(x: Int) extends Base -case class Dummy1150(x: Int) extends Base -case class Dummy1151(x: Int) extends Base -case class Dummy1152(x: Int) extends Base -case class Dummy1153(x: Int) extends Base -case class Dummy1154(x: Int) extends Base -case class Dummy1155(x: Int) extends Base -case class Dummy1156(x: Int) extends Base -case class Dummy1157(x: Int) extends Base -case class Dummy1158(x: Int) extends Base -case class Dummy1159(x: Int) extends Base -case class Dummy1160(x: Int) extends Base -case class Dummy1161(x: Int) extends Base -case class Dummy1162(x: Int) extends Base -case class Dummy1163(x: Int) extends Base -case class Dummy1164(x: Int) extends Base -case class Dummy1165(x: Int) extends Base -case class Dummy1166(x: Int) extends Base -case class Dummy1167(x: Int) extends Base -case class Dummy1168(x: Int) extends Base -case class Dummy1169(x: Int) extends Base -case class Dummy1170(x: Int) extends Base -case class Dummy1171(x: Int) extends Base -case class Dummy1172(x: Int) extends Base -case class Dummy1173(x: Int) extends Base -case class Dummy1174(x: Int) extends Base -case class Dummy1175(x: Int) extends Base -case class Dummy1176(x: Int) extends Base -case class Dummy1177(x: Int) extends Base -case class Dummy1178(x: Int) extends Base -case class Dummy1179(x: Int) extends Base -case class Dummy1180(x: Int) extends Base -case class Dummy1181(x: Int) extends Base -case class Dummy1182(x: Int) extends Base -case class Dummy1183(x: Int) extends Base -case class Dummy1184(x: Int) extends Base -case class Dummy1185(x: Int) extends Base -case class Dummy1186(x: Int) extends Base -case class Dummy1187(x: Int) extends Base -case class Dummy1188(x: Int) extends Base -case class Dummy1189(x: Int) extends Base -case class Dummy1190(x: Int) extends Base -case class Dummy1191(x: Int) extends Base -case class Dummy1192(x: Int) extends Base -case class Dummy1193(x: Int) extends Base -case class Dummy1194(x: Int) extends Base -case class Dummy1195(x: Int) extends Base -case class Dummy1196(x: Int) extends Base -case class Dummy1197(x: Int) extends Base -case class Dummy1198(x: Int) extends Base -case class Dummy1199(x: Int) extends Base -case class Dummy1200(x: Int) extends Base -case class Dummy1201(x: Int) extends Base -case class Dummy1202(x: Int) extends Base -case class Dummy1203(x: Int) extends Base -case class Dummy1204(x: Int) extends Base -case class Dummy1205(x: Int) extends Base -case class Dummy1206(x: Int) extends Base -case class Dummy1207(x: Int) extends Base -case class Dummy1208(x: Int) extends Base -case class Dummy1209(x: Int) extends Base -case class Dummy1210(x: Int) extends Base -case class Dummy1211(x: Int) extends Base -case class Dummy1212(x: Int) extends Base -case class Dummy1213(x: Int) extends Base -case class Dummy1214(x: Int) extends Base -case class Dummy1215(x: Int) extends Base -case class Dummy1216(x: Int) extends Base -case class Dummy1217(x: Int) extends Base -case class Dummy1218(x: Int) extends Base -case class Dummy1219(x: Int) extends Base -case class Dummy1220(x: Int) extends Base -case class Dummy1221(x: Int) extends Base -case class Dummy1222(x: Int) extends Base -case class Dummy1223(x: Int) extends Base -case class Dummy1224(x: Int) extends Base -case class Dummy1225(x: Int) extends Base -case class Dummy1226(x: Int) extends Base -case class Dummy1227(x: Int) extends Base -case class Dummy1228(x: Int) extends Base -case class Dummy1229(x: Int) extends Base -case class Dummy1230(x: Int) extends Base -case class Dummy1231(x: Int) extends Base -case class Dummy1232(x: Int) extends Base -case class Dummy1233(x: Int) extends Base -case class Dummy1234(x: Int) extends Base -case class Dummy1235(x: Int) extends Base -case class Dummy1236(x: Int) extends Base -case class Dummy1237(x: Int) extends Base -case class Dummy1238(x: Int) extends Base -case class Dummy1239(x: Int) extends Base -case class Dummy1240(x: Int) extends Base -case class Dummy1241(x: Int) extends Base -case class Dummy1242(x: Int) extends Base -case class Dummy1243(x: Int) extends Base -case class Dummy1244(x: Int) extends Base -case class Dummy1245(x: Int) extends Base -case class Dummy1246(x: Int) extends Base -case class Dummy1247(x: Int) extends Base -case class Dummy1248(x: Int) extends Base -case class Dummy1249(x: Int) extends Base -case class Dummy1250(x: Int) extends Base -case class Dummy1251(x: Int) extends Base -case class Dummy1252(x: Int) extends Base -case class Dummy1253(x: Int) extends Base -case class Dummy1254(x: Int) extends Base -case class Dummy1255(x: Int) extends Base -case class Dummy1256(x: Int) extends Base -case class Dummy1257(x: Int) extends Base -case class Dummy1258(x: Int) extends Base -case class Dummy1259(x: Int) extends Base -case class Dummy1260(x: Int) extends Base -case class Dummy1261(x: Int) extends Base -case class Dummy1262(x: Int) extends Base -case class Dummy1263(x: Int) extends Base -case class Dummy1264(x: Int) extends Base -case class Dummy1265(x: Int) extends Base -case class Dummy1266(x: Int) extends Base -case class Dummy1267(x: Int) extends Base -case class Dummy1268(x: Int) extends Base -case class Dummy1269(x: Int) extends Base -case class Dummy1270(x: Int) extends Base -case class Dummy1271(x: Int) extends Base -case class Dummy1272(x: Int) extends Base -case class Dummy1273(x: Int) extends Base -case class Dummy1274(x: Int) extends Base -case class Dummy1275(x: Int) extends Base -case class Dummy1276(x: Int) extends Base -case class Dummy1277(x: Int) extends Base -case class Dummy1278(x: Int) extends Base -case class Dummy1279(x: Int) extends Base -case class Dummy1280(x: Int) extends Base -case class Dummy1281(x: Int) extends Base -case class Dummy1282(x: Int) extends Base -case class Dummy1283(x: Int) extends Base -case class Dummy1284(x: Int) extends Base -case class Dummy1285(x: Int) extends Base -case class Dummy1286(x: Int) extends Base -case class Dummy1287(x: Int) extends Base -case class Dummy1288(x: Int) extends Base -case class Dummy1289(x: Int) extends Base -case class Dummy1290(x: Int) extends Base -case class Dummy1291(x: Int) extends Base -case class Dummy1292(x: Int) extends Base -case class Dummy1293(x: Int) extends Base -case class Dummy1294(x: Int) extends Base -case class Dummy1295(x: Int) extends Base -case class Dummy1296(x: Int) extends Base -case class Dummy1297(x: Int) extends Base -case class Dummy1298(x: Int) extends Base -case class Dummy1299(x: Int) extends Base -case class Dummy1300(x: Int) extends Base -case class Dummy1301(x: Int) extends Base -case class Dummy1302(x: Int) extends Base -case class Dummy1303(x: Int) extends Base -case class Dummy1304(x: Int) extends Base -case class Dummy1305(x: Int) extends Base -case class Dummy1306(x: Int) extends Base -case class Dummy1307(x: Int) extends Base -case class Dummy1308(x: Int) extends Base -case class Dummy1309(x: Int) extends Base -case class Dummy1310(x: Int) extends Base -case class Dummy1311(x: Int) extends Base -case class Dummy1312(x: Int) extends Base -case class Dummy1313(x: Int) extends Base -case class Dummy1314(x: Int) extends Base -case class Dummy1315(x: Int) extends Base -case class Dummy1316(x: Int) extends Base -case class Dummy1317(x: Int) extends Base -case class Dummy1318(x: Int) extends Base -case class Dummy1319(x: Int) extends Base -case class Dummy1320(x: Int) extends Base -case class Dummy1321(x: Int) extends Base -case class Dummy1322(x: Int) extends Base -case class Dummy1323(x: Int) extends Base -case class Dummy1324(x: Int) extends Base -case class Dummy1325(x: Int) extends Base -case class Dummy1326(x: Int) extends Base -case class Dummy1327(x: Int) extends Base -case class Dummy1328(x: Int) extends Base -case class Dummy1329(x: Int) extends Base -case class Dummy1330(x: Int) extends Base -case class Dummy1331(x: Int) extends Base -case class Dummy1332(x: Int) extends Base -case class Dummy1333(x: Int) extends Base -case class Dummy1334(x: Int) extends Base -case class Dummy1335(x: Int) extends Base -case class Dummy1336(x: Int) extends Base -case class Dummy1337(x: Int) extends Base -case class Dummy1338(x: Int) extends Base -case class Dummy1339(x: Int) extends Base -case class Dummy1340(x: Int) extends Base -case class Dummy1341(x: Int) extends Base -case class Dummy1342(x: Int) extends Base -case class Dummy1343(x: Int) extends Base -case class Dummy1344(x: Int) extends Base -case class Dummy1345(x: Int) extends Base -case class Dummy1346(x: Int) extends Base -case class Dummy1347(x: Int) extends Base -case class Dummy1348(x: Int) extends Base -case class Dummy1349(x: Int) extends Base -case class Dummy1350(x: Int) extends Base -case class Dummy1351(x: Int) extends Base -case class Dummy1352(x: Int) extends Base -case class Dummy1353(x: Int) extends Base -case class Dummy1354(x: Int) extends Base -case class Dummy1355(x: Int) extends Base -case class Dummy1356(x: Int) extends Base -case class Dummy1357(x: Int) extends Base -case class Dummy1358(x: Int) extends Base -case class Dummy1359(x: Int) extends Base -case class Dummy1360(x: Int) extends Base -case class Dummy1361(x: Int) extends Base -case class Dummy1362(x: Int) extends Base -case class Dummy1363(x: Int) extends Base -case class Dummy1364(x: Int) extends Base -case class Dummy1365(x: Int) extends Base -case class Dummy1366(x: Int) extends Base -case class Dummy1367(x: Int) extends Base -case class Dummy1368(x: Int) extends Base -case class Dummy1369(x: Int) extends Base -case class Dummy1370(x: Int) extends Base -case class Dummy1371(x: Int) extends Base -case class Dummy1372(x: Int) extends Base -case class Dummy1373(x: Int) extends Base -case class Dummy1374(x: Int) extends Base -case class Dummy1375(x: Int) extends Base -case class Dummy1376(x: Int) extends Base -case class Dummy1377(x: Int) extends Base -case class Dummy1378(x: Int) extends Base -case class Dummy1379(x: Int) extends Base -case class Dummy1380(x: Int) extends Base -case class Dummy1381(x: Int) extends Base -case class Dummy1382(x: Int) extends Base -case class Dummy1383(x: Int) extends Base -case class Dummy1384(x: Int) extends Base -case class Dummy1385(x: Int) extends Base -case class Dummy1386(x: Int) extends Base -case class Dummy1387(x: Int) extends Base -case class Dummy1388(x: Int) extends Base -case class Dummy1389(x: Int) extends Base -case class Dummy1390(x: Int) extends Base -case class Dummy1391(x: Int) extends Base -case class Dummy1392(x: Int) extends Base -case class Dummy1393(x: Int) extends Base -case class Dummy1394(x: Int) extends Base -case class Dummy1395(x: Int) extends Base -case class Dummy1396(x: Int) extends Base -case class Dummy1397(x: Int) extends Base -case class Dummy1398(x: Int) extends Base -case class Dummy1399(x: Int) extends Base -case class Dummy1400(x: Int) extends Base -case class Dummy1401(x: Int) extends Base -case class Dummy1402(x: Int) extends Base -case class Dummy1403(x: Int) extends Base -case class Dummy1404(x: Int) extends Base -case class Dummy1405(x: Int) extends Base -case class Dummy1406(x: Int) extends Base -case class Dummy1407(x: Int) extends Base -case class Dummy1408(x: Int) extends Base -case class Dummy1409(x: Int) extends Base -case class Dummy1410(x: Int) extends Base -case class Dummy1411(x: Int) extends Base -case class Dummy1412(x: Int) extends Base -case class Dummy1413(x: Int) extends Base -case class Dummy1414(x: Int) extends Base -case class Dummy1415(x: Int) extends Base -case class Dummy1416(x: Int) extends Base -case class Dummy1417(x: Int) extends Base -case class Dummy1418(x: Int) extends Base -case class Dummy1419(x: Int) extends Base -case class Dummy1420(x: Int) extends Base -case class Dummy1421(x: Int) extends Base -case class Dummy1422(x: Int) extends Base -case class Dummy1423(x: Int) extends Base -case class Dummy1424(x: Int) extends Base -case class Dummy1425(x: Int) extends Base -case class Dummy1426(x: Int) extends Base -case class Dummy1427(x: Int) extends Base -case class Dummy1428(x: Int) extends Base -case class Dummy1429(x: Int) extends Base -case class Dummy1430(x: Int) extends Base -case class Dummy1431(x: Int) extends Base -case class Dummy1432(x: Int) extends Base -case class Dummy1433(x: Int) extends Base -case class Dummy1434(x: Int) extends Base -case class Dummy1435(x: Int) extends Base -case class Dummy1436(x: Int) extends Base -case class Dummy1437(x: Int) extends Base -case class Dummy1438(x: Int) extends Base -case class Dummy1439(x: Int) extends Base -case class Dummy1440(x: Int) extends Base -case class Dummy1441(x: Int) extends Base -case class Dummy1442(x: Int) extends Base -case class Dummy1443(x: Int) extends Base -case class Dummy1444(x: Int) extends Base -case class Dummy1445(x: Int) extends Base -case class Dummy1446(x: Int) extends Base -case class Dummy1447(x: Int) extends Base -case class Dummy1448(x: Int) extends Base -case class Dummy1449(x: Int) extends Base -case class Dummy1450(x: Int) extends Base -case class Dummy1451(x: Int) extends Base -case class Dummy1452(x: Int) extends Base -case class Dummy1453(x: Int) extends Base -case class Dummy1454(x: Int) extends Base -case class Dummy1455(x: Int) extends Base -case class Dummy1456(x: Int) extends Base -case class Dummy1457(x: Int) extends Base -case class Dummy1458(x: Int) extends Base -case class Dummy1459(x: Int) extends Base -case class Dummy1460(x: Int) extends Base -case class Dummy1461(x: Int) extends Base -case class Dummy1462(x: Int) extends Base -case class Dummy1463(x: Int) extends Base -case class Dummy1464(x: Int) extends Base -case class Dummy1465(x: Int) extends Base -case class Dummy1466(x: Int) extends Base -case class Dummy1467(x: Int) extends Base -case class Dummy1468(x: Int) extends Base -case class Dummy1469(x: Int) extends Base -case class Dummy1470(x: Int) extends Base -case class Dummy1471(x: Int) extends Base -case class Dummy1472(x: Int) extends Base -case class Dummy1473(x: Int) extends Base -case class Dummy1474(x: Int) extends Base -case class Dummy1475(x: Int) extends Base -case class Dummy1476(x: Int) extends Base -case class Dummy1477(x: Int) extends Base -case class Dummy1478(x: Int) extends Base -case class Dummy1479(x: Int) extends Base -case class Dummy1480(x: Int) extends Base -case class Dummy1481(x: Int) extends Base -case class Dummy1482(x: Int) extends Base -case class Dummy1483(x: Int) extends Base -case class Dummy1484(x: Int) extends Base -case class Dummy1485(x: Int) extends Base -case class Dummy1486(x: Int) extends Base -case class Dummy1487(x: Int) extends Base -case class Dummy1488(x: Int) extends Base -case class Dummy1489(x: Int) extends Base -case class Dummy1490(x: Int) extends Base -case class Dummy1491(x: Int) extends Base -case class Dummy1492(x: Int) extends Base -case class Dummy1493(x: Int) extends Base -case class Dummy1494(x: Int) extends Base -case class Dummy1495(x: Int) extends Base -case class Dummy1496(x: Int) extends Base -case class Dummy1497(x: Int) extends Base -case class Dummy1498(x: Int) extends Base -case class Dummy1499(x: Int) extends Base -case class Dummy1500(x: Int) extends Base -case class Dummy1501(x: Int) extends Base -case class Dummy1502(x: Int) extends Base -case class Dummy1503(x: Int) extends Base -case class Dummy1504(x: Int) extends Base -case class Dummy1505(x: Int) extends Base -case class Dummy1506(x: Int) extends Base -case class Dummy1507(x: Int) extends Base -case class Dummy1508(x: Int) extends Base -case class Dummy1509(x: Int) extends Base -case class Dummy1510(x: Int) extends Base -case class Dummy1511(x: Int) extends Base -case class Dummy1512(x: Int) extends Base -case class Dummy1513(x: Int) extends Base -case class Dummy1514(x: Int) extends Base -case class Dummy1515(x: Int) extends Base -case class Dummy1516(x: Int) extends Base -case class Dummy1517(x: Int) extends Base -case class Dummy1518(x: Int) extends Base -case class Dummy1519(x: Int) extends Base -case class Dummy1520(x: Int) extends Base -case class Dummy1521(x: Int) extends Base -case class Dummy1522(x: Int) extends Base -case class Dummy1523(x: Int) extends Base -case class Dummy1524(x: Int) extends Base -case class Dummy1525(x: Int) extends Base -case class Dummy1526(x: Int) extends Base -case class Dummy1527(x: Int) extends Base -case class Dummy1528(x: Int) extends Base -case class Dummy1529(x: Int) extends Base -case class Dummy1530(x: Int) extends Base -case class Dummy1531(x: Int) extends Base -case class Dummy1532(x: Int) extends Base -case class Dummy1533(x: Int) extends Base -case class Dummy1534(x: Int) extends Base -case class Dummy1535(x: Int) extends Base -case class Dummy1536(x: Int) extends Base -case class Dummy1537(x: Int) extends Base -case class Dummy1538(x: Int) extends Base -case class Dummy1539(x: Int) extends Base -case class Dummy1540(x: Int) extends Base -case class Dummy1541(x: Int) extends Base -case class Dummy1542(x: Int) extends Base -case class Dummy1543(x: Int) extends Base -case class Dummy1544(x: Int) extends Base -case class Dummy1545(x: Int) extends Base -case class Dummy1546(x: Int) extends Base -case class Dummy1547(x: Int) extends Base -case class Dummy1548(x: Int) extends Base -case class Dummy1549(x: Int) extends Base -case class Dummy1550(x: Int) extends Base -case class Dummy1551(x: Int) extends Base -case class Dummy1552(x: Int) extends Base -case class Dummy1553(x: Int) extends Base -case class Dummy1554(x: Int) extends Base -case class Dummy1555(x: Int) extends Base -case class Dummy1556(x: Int) extends Base -case class Dummy1557(x: Int) extends Base -case class Dummy1558(x: Int) extends Base -case class Dummy1559(x: Int) extends Base -case class Dummy1560(x: Int) extends Base -case class Dummy1561(x: Int) extends Base -case class Dummy1562(x: Int) extends Base -case class Dummy1563(x: Int) extends Base -case class Dummy1564(x: Int) extends Base -case class Dummy1565(x: Int) extends Base -case class Dummy1566(x: Int) extends Base -case class Dummy1567(x: Int) extends Base -case class Dummy1568(x: Int) extends Base -case class Dummy1569(x: Int) extends Base -case class Dummy1570(x: Int) extends Base -case class Dummy1571(x: Int) extends Base -case class Dummy1572(x: Int) extends Base -case class Dummy1573(x: Int) extends Base -case class Dummy1574(x: Int) extends Base -case class Dummy1575(x: Int) extends Base -case class Dummy1576(x: Int) extends Base -case class Dummy1577(x: Int) extends Base -case class Dummy1578(x: Int) extends Base -case class Dummy1579(x: Int) extends Base -case class Dummy1580(x: Int) extends Base -case class Dummy1581(x: Int) extends Base -case class Dummy1582(x: Int) extends Base -case class Dummy1583(x: Int) extends Base -case class Dummy1584(x: Int) extends Base -case class Dummy1585(x: Int) extends Base -case class Dummy1586(x: Int) extends Base -case class Dummy1587(x: Int) extends Base -case class Dummy1588(x: Int) extends Base -case class Dummy1589(x: Int) extends Base -case class Dummy1590(x: Int) extends Base -case class Dummy1591(x: Int) extends Base -case class Dummy1592(x: Int) extends Base -case class Dummy1593(x: Int) extends Base -case class Dummy1594(x: Int) extends Base -case class Dummy1595(x: Int) extends Base -case class Dummy1596(x: Int) extends Base -case class Dummy1597(x: Int) extends Base -case class Dummy1598(x: Int) extends Base -case class Dummy1599(x: Int) extends Base -case class Dummy1600(x: Int) extends Base -case class Dummy1601(x: Int) extends Base -case class Dummy1602(x: Int) extends Base -case class Dummy1603(x: Int) extends Base -case class Dummy1604(x: Int) extends Base -case class Dummy1605(x: Int) extends Base -case class Dummy1606(x: Int) extends Base -case class Dummy1607(x: Int) extends Base -case class Dummy1608(x: Int) extends Base -case class Dummy1609(x: Int) extends Base -case class Dummy1610(x: Int) extends Base -case class Dummy1611(x: Int) extends Base -case class Dummy1612(x: Int) extends Base -case class Dummy1613(x: Int) extends Base -case class Dummy1614(x: Int) extends Base -case class Dummy1615(x: Int) extends Base -case class Dummy1616(x: Int) extends Base -case class Dummy1617(x: Int) extends Base -case class Dummy1618(x: Int) extends Base -case class Dummy1619(x: Int) extends Base -case class Dummy1620(x: Int) extends Base -case class Dummy1621(x: Int) extends Base -case class Dummy1622(x: Int) extends Base -case class Dummy1623(x: Int) extends Base -case class Dummy1624(x: Int) extends Base -case class Dummy1625(x: Int) extends Base -case class Dummy1626(x: Int) extends Base -case class Dummy1627(x: Int) extends Base -case class Dummy1628(x: Int) extends Base -case class Dummy1629(x: Int) extends Base -case class Dummy1630(x: Int) extends Base -case class Dummy1631(x: Int) extends Base -case class Dummy1632(x: Int) extends Base -case class Dummy1633(x: Int) extends Base -case class Dummy1634(x: Int) extends Base -case class Dummy1635(x: Int) extends Base -case class Dummy1636(x: Int) extends Base -case class Dummy1637(x: Int) extends Base -case class Dummy1638(x: Int) extends Base -case class Dummy1639(x: Int) extends Base -case class Dummy1640(x: Int) extends Base -case class Dummy1641(x: Int) extends Base -case class Dummy1642(x: Int) extends Base -case class Dummy1643(x: Int) extends Base -case class Dummy1644(x: Int) extends Base -case class Dummy1645(x: Int) extends Base -case class Dummy1646(x: Int) extends Base -case class Dummy1647(x: Int) extends Base -case class Dummy1648(x: Int) extends Base -case class Dummy1649(x: Int) extends Base -case class Dummy1650(x: Int) extends Base -case class Dummy1651(x: Int) extends Base -case class Dummy1652(x: Int) extends Base -case class Dummy1653(x: Int) extends Base -case class Dummy1654(x: Int) extends Base -case class Dummy1655(x: Int) extends Base -case class Dummy1656(x: Int) extends Base -case class Dummy1657(x: Int) extends Base -case class Dummy1658(x: Int) extends Base -case class Dummy1659(x: Int) extends Base -case class Dummy1660(x: Int) extends Base -case class Dummy1661(x: Int) extends Base -case class Dummy1662(x: Int) extends Base -case class Dummy1663(x: Int) extends Base -case class Dummy1664(x: Int) extends Base -case class Dummy1665(x: Int) extends Base -case class Dummy1666(x: Int) extends Base -case class Dummy1667(x: Int) extends Base -case class Dummy1668(x: Int) extends Base -case class Dummy1669(x: Int) extends Base -case class Dummy1670(x: Int) extends Base -case class Dummy1671(x: Int) extends Base -case class Dummy1672(x: Int) extends Base -case class Dummy1673(x: Int) extends Base -case class Dummy1674(x: Int) extends Base -case class Dummy1675(x: Int) extends Base -case class Dummy1676(x: Int) extends Base -case class Dummy1677(x: Int) extends Base -case class Dummy1678(x: Int) extends Base -case class Dummy1679(x: Int) extends Base -case class Dummy1680(x: Int) extends Base -case class Dummy1681(x: Int) extends Base -case class Dummy1682(x: Int) extends Base -case class Dummy1683(x: Int) extends Base -case class Dummy1684(x: Int) extends Base -case class Dummy1685(x: Int) extends Base -case class Dummy1686(x: Int) extends Base -case class Dummy1687(x: Int) extends Base -case class Dummy1688(x: Int) extends Base -case class Dummy1689(x: Int) extends Base -case class Dummy1690(x: Int) extends Base -case class Dummy1691(x: Int) extends Base -case class Dummy1692(x: Int) extends Base -case class Dummy1693(x: Int) extends Base -case class Dummy1694(x: Int) extends Base -case class Dummy1695(x: Int) extends Base -case class Dummy1696(x: Int) extends Base -case class Dummy1697(x: Int) extends Base -case class Dummy1698(x: Int) extends Base -case class Dummy1699(x: Int) extends Base -case class Dummy1700(x: Int) extends Base -case class Dummy1701(x: Int) extends Base -case class Dummy1702(x: Int) extends Base -case class Dummy1703(x: Int) extends Base -case class Dummy1704(x: Int) extends Base -case class Dummy1705(x: Int) extends Base -case class Dummy1706(x: Int) extends Base -case class Dummy1707(x: Int) extends Base -case class Dummy1708(x: Int) extends Base -case class Dummy1709(x: Int) extends Base -case class Dummy1710(x: Int) extends Base -case class Dummy1711(x: Int) extends Base -case class Dummy1712(x: Int) extends Base -case class Dummy1713(x: Int) extends Base -case class Dummy1714(x: Int) extends Base -case class Dummy1715(x: Int) extends Base -case class Dummy1716(x: Int) extends Base -case class Dummy1717(x: Int) extends Base -case class Dummy1718(x: Int) extends Base -case class Dummy1719(x: Int) extends Base -case class Dummy1720(x: Int) extends Base -case class Dummy1721(x: Int) extends Base -case class Dummy1722(x: Int) extends Base -case class Dummy1723(x: Int) extends Base -case class Dummy1724(x: Int) extends Base -case class Dummy1725(x: Int) extends Base -case class Dummy1726(x: Int) extends Base -case class Dummy1727(x: Int) extends Base -case class Dummy1728(x: Int) extends Base -case class Dummy1729(x: Int) extends Base -case class Dummy1730(x: Int) extends Base -case class Dummy1731(x: Int) extends Base -case class Dummy1732(x: Int) extends Base -case class Dummy1733(x: Int) extends Base -case class Dummy1734(x: Int) extends Base -case class Dummy1735(x: Int) extends Base -case class Dummy1736(x: Int) extends Base -case class Dummy1737(x: Int) extends Base -case class Dummy1738(x: Int) extends Base -case class Dummy1739(x: Int) extends Base -case class Dummy1740(x: Int) extends Base -case class Dummy1741(x: Int) extends Base -case class Dummy1742(x: Int) extends Base -case class Dummy1743(x: Int) extends Base -case class Dummy1744(x: Int) extends Base -case class Dummy1745(x: Int) extends Base -case class Dummy1746(x: Int) extends Base -case class Dummy1747(x: Int) extends Base -case class Dummy1748(x: Int) extends Base -case class Dummy1749(x: Int) extends Base -case class Dummy1750(x: Int) extends Base -case class Dummy1751(x: Int) extends Base -case class Dummy1752(x: Int) extends Base -case class Dummy1753(x: Int) extends Base -case class Dummy1754(x: Int) extends Base -case class Dummy1755(x: Int) extends Base -case class Dummy1756(x: Int) extends Base -case class Dummy1757(x: Int) extends Base -case class Dummy1758(x: Int) extends Base -case class Dummy1759(x: Int) extends Base -case class Dummy1760(x: Int) extends Base -case class Dummy1761(x: Int) extends Base -case class Dummy1762(x: Int) extends Base -case class Dummy1763(x: Int) extends Base -case class Dummy1764(x: Int) extends Base -case class Dummy1765(x: Int) extends Base -case class Dummy1766(x: Int) extends Base -case class Dummy1767(x: Int) extends Base -case class Dummy1768(x: Int) extends Base -case class Dummy1769(x: Int) extends Base -case class Dummy1770(x: Int) extends Base -case class Dummy1771(x: Int) extends Base -case class Dummy1772(x: Int) extends Base -case class Dummy1773(x: Int) extends Base -case class Dummy1774(x: Int) extends Base -case class Dummy1775(x: Int) extends Base -case class Dummy1776(x: Int) extends Base -case class Dummy1777(x: Int) extends Base -case class Dummy1778(x: Int) extends Base -case class Dummy1779(x: Int) extends Base -case class Dummy1780(x: Int) extends Base -case class Dummy1781(x: Int) extends Base -case class Dummy1782(x: Int) extends Base -case class Dummy1783(x: Int) extends Base -case class Dummy1784(x: Int) extends Base -case class Dummy1785(x: Int) extends Base -case class Dummy1786(x: Int) extends Base -case class Dummy1787(x: Int) extends Base -case class Dummy1788(x: Int) extends Base -case class Dummy1789(x: Int) extends Base -case class Dummy1790(x: Int) extends Base -case class Dummy1791(x: Int) extends Base -case class Dummy1792(x: Int) extends Base -case class Dummy1793(x: Int) extends Base -case class Dummy1794(x: Int) extends Base -case class Dummy1795(x: Int) extends Base -case class Dummy1796(x: Int) extends Base -case class Dummy1797(x: Int) extends Base -case class Dummy1798(x: Int) extends Base -case class Dummy1799(x: Int) extends Base -case class Dummy1800(x: Int) extends Base -case class Dummy1801(x: Int) extends Base -case class Dummy1802(x: Int) extends Base -case class Dummy1803(x: Int) extends Base -case class Dummy1804(x: Int) extends Base -case class Dummy1805(x: Int) extends Base -case class Dummy1806(x: Int) extends Base -case class Dummy1807(x: Int) extends Base -case class Dummy1808(x: Int) extends Base -case class Dummy1809(x: Int) extends Base -case class Dummy1810(x: Int) extends Base -case class Dummy1811(x: Int) extends Base -case class Dummy1812(x: Int) extends Base -case class Dummy1813(x: Int) extends Base -case class Dummy1814(x: Int) extends Base -case class Dummy1815(x: Int) extends Base -case class Dummy1816(x: Int) extends Base -case class Dummy1817(x: Int) extends Base -case class Dummy1818(x: Int) extends Base -case class Dummy1819(x: Int) extends Base -case class Dummy1820(x: Int) extends Base -case class Dummy1821(x: Int) extends Base -case class Dummy1822(x: Int) extends Base -case class Dummy1823(x: Int) extends Base -case class Dummy1824(x: Int) extends Base -case class Dummy1825(x: Int) extends Base -case class Dummy1826(x: Int) extends Base -case class Dummy1827(x: Int) extends Base -case class Dummy1828(x: Int) extends Base -case class Dummy1829(x: Int) extends Base -case class Dummy1830(x: Int) extends Base -case class Dummy1831(x: Int) extends Base -case class Dummy1832(x: Int) extends Base -case class Dummy1833(x: Int) extends Base -case class Dummy1834(x: Int) extends Base -case class Dummy1835(x: Int) extends Base -case class Dummy1836(x: Int) extends Base -case class Dummy1837(x: Int) extends Base -case class Dummy1838(x: Int) extends Base -case class Dummy1839(x: Int) extends Base -case class Dummy1840(x: Int) extends Base -case class Dummy1841(x: Int) extends Base -case class Dummy1842(x: Int) extends Base -case class Dummy1843(x: Int) extends Base -case class Dummy1844(x: Int) extends Base -case class Dummy1845(x: Int) extends Base -case class Dummy1846(x: Int) extends Base -case class Dummy1847(x: Int) extends Base -case class Dummy1848(x: Int) extends Base -case class Dummy1849(x: Int) extends Base -case class Dummy1850(x: Int) extends Base -case class Dummy1851(x: Int) extends Base -case class Dummy1852(x: Int) extends Base -case class Dummy1853(x: Int) extends Base -case class Dummy1854(x: Int) extends Base -case class Dummy1855(x: Int) extends Base -case class Dummy1856(x: Int) extends Base -case class Dummy1857(x: Int) extends Base -case class Dummy1858(x: Int) extends Base -case class Dummy1859(x: Int) extends Base -case class Dummy1860(x: Int) extends Base -case class Dummy1861(x: Int) extends Base -case class Dummy1862(x: Int) extends Base -case class Dummy1863(x: Int) extends Base -case class Dummy1864(x: Int) extends Base -case class Dummy1865(x: Int) extends Base -case class Dummy1866(x: Int) extends Base -case class Dummy1867(x: Int) extends Base -case class Dummy1868(x: Int) extends Base -case class Dummy1869(x: Int) extends Base -case class Dummy1870(x: Int) extends Base -case class Dummy1871(x: Int) extends Base -case class Dummy1872(x: Int) extends Base -case class Dummy1873(x: Int) extends Base -case class Dummy1874(x: Int) extends Base -case class Dummy1875(x: Int) extends Base -case class Dummy1876(x: Int) extends Base -case class Dummy1877(x: Int) extends Base -case class Dummy1878(x: Int) extends Base -case class Dummy1879(x: Int) extends Base -case class Dummy1880(x: Int) extends Base -case class Dummy1881(x: Int) extends Base -case class Dummy1882(x: Int) extends Base -case class Dummy1883(x: Int) extends Base -case class Dummy1884(x: Int) extends Base -case class Dummy1885(x: Int) extends Base -case class Dummy1886(x: Int) extends Base -case class Dummy1887(x: Int) extends Base -case class Dummy1888(x: Int) extends Base -case class Dummy1889(x: Int) extends Base -case class Dummy1890(x: Int) extends Base -case class Dummy1891(x: Int) extends Base -case class Dummy1892(x: Int) extends Base -case class Dummy1893(x: Int) extends Base -case class Dummy1894(x: Int) extends Base -case class Dummy1895(x: Int) extends Base -case class Dummy1896(x: Int) extends Base -case class Dummy1897(x: Int) extends Base -case class Dummy1898(x: Int) extends Base -case class Dummy1899(x: Int) extends Base -case class Dummy1900(x: Int) extends Base -case class Dummy1901(x: Int) extends Base -case class Dummy1902(x: Int) extends Base -case class Dummy1903(x: Int) extends Base -case class Dummy1904(x: Int) extends Base -case class Dummy1905(x: Int) extends Base -case class Dummy1906(x: Int) extends Base -case class Dummy1907(x: Int) extends Base -case class Dummy1908(x: Int) extends Base -case class Dummy1909(x: Int) extends Base -case class Dummy1910(x: Int) extends Base -case class Dummy1911(x: Int) extends Base -case class Dummy1912(x: Int) extends Base -case class Dummy1913(x: Int) extends Base -case class Dummy1914(x: Int) extends Base -case class Dummy1915(x: Int) extends Base -case class Dummy1916(x: Int) extends Base -case class Dummy1917(x: Int) extends Base -case class Dummy1918(x: Int) extends Base -case class Dummy1919(x: Int) extends Base -case class Dummy1920(x: Int) extends Base -case class Dummy1921(x: Int) extends Base -case class Dummy1922(x: Int) extends Base -case class Dummy1923(x: Int) extends Base -case class Dummy1924(x: Int) extends Base -case class Dummy1925(x: Int) extends Base -case class Dummy1926(x: Int) extends Base -case class Dummy1927(x: Int) extends Base -case class Dummy1928(x: Int) extends Base -case class Dummy1929(x: Int) extends Base -case class Dummy1930(x: Int) extends Base -case class Dummy1931(x: Int) extends Base -case class Dummy1932(x: Int) extends Base -case class Dummy1933(x: Int) extends Base -case class Dummy1934(x: Int) extends Base -case class Dummy1935(x: Int) extends Base -case class Dummy1936(x: Int) extends Base -case class Dummy1937(x: Int) extends Base -case class Dummy1938(x: Int) extends Base -case class Dummy1939(x: Int) extends Base -case class Dummy1940(x: Int) extends Base -case class Dummy1941(x: Int) extends Base -case class Dummy1942(x: Int) extends Base -case class Dummy1943(x: Int) extends Base -case class Dummy1944(x: Int) extends Base -case class Dummy1945(x: Int) extends Base -case class Dummy1946(x: Int) extends Base -case class Dummy1947(x: Int) extends Base -case class Dummy1948(x: Int) extends Base -case class Dummy1949(x: Int) extends Base -case class Dummy1950(x: Int) extends Base -case class Dummy1951(x: Int) extends Base -case class Dummy1952(x: Int) extends Base -case class Dummy1953(x: Int) extends Base -case class Dummy1954(x: Int) extends Base -case class Dummy1955(x: Int) extends Base -case class Dummy1956(x: Int) extends Base -case class Dummy1957(x: Int) extends Base -case class Dummy1958(x: Int) extends Base -case class Dummy1959(x: Int) extends Base -case class Dummy1960(x: Int) extends Base -case class Dummy1961(x: Int) extends Base -case class Dummy1962(x: Int) extends Base -case class Dummy1963(x: Int) extends Base -case class Dummy1964(x: Int) extends Base -case class Dummy1965(x: Int) extends Base -case class Dummy1966(x: Int) extends Base -case class Dummy1967(x: Int) extends Base -case class Dummy1968(x: Int) extends Base -case class Dummy1969(x: Int) extends Base -case class Dummy1970(x: Int) extends Base -case class Dummy1971(x: Int) extends Base -case class Dummy1972(x: Int) extends Base -case class Dummy1973(x: Int) extends Base -case class Dummy1974(x: Int) extends Base -case class Dummy1975(x: Int) extends Base -case class Dummy1976(x: Int) extends Base -case class Dummy1977(x: Int) extends Base -case class Dummy1978(x: Int) extends Base -case class Dummy1979(x: Int) extends Base -case class Dummy1980(x: Int) extends Base -case class Dummy1981(x: Int) extends Base -case class Dummy1982(x: Int) extends Base -case class Dummy1983(x: Int) extends Base -case class Dummy1984(x: Int) extends Base -case class Dummy1985(x: Int) extends Base -case class Dummy1986(x: Int) extends Base -case class Dummy1987(x: Int) extends Base -case class Dummy1988(x: Int) extends Base -case class Dummy1989(x: Int) extends Base -case class Dummy1990(x: Int) extends Base -case class Dummy1991(x: Int) extends Base -case class Dummy1992(x: Int) extends Base -case class Dummy1993(x: Int) extends Base -case class Dummy1994(x: Int) extends Base -case class Dummy1995(x: Int) extends Base -case class Dummy1996(x: Int) extends Base -case class Dummy1997(x: Int) extends Base -case class Dummy1998(x: Int) extends Base -case class Dummy1999(x: Int) extends Base -def test(y: Base) = y match { - case Dummy0(p) => p - case Dummy1(p) => p - case Dummy2(p) => p - case Dummy3(p) => p - case Dummy4(p) => p - case Dummy5(p) => p - case Dummy6(p) => p - case Dummy7(p) => p - case Dummy8(p) => p - case Dummy9(p) => p - case Dummy10(p) => p - case Dummy11(p) => p - case Dummy12(p) => p - case Dummy13(p) => p - case Dummy14(p) => p - case Dummy15(p) => p - case Dummy16(p) => p - case Dummy17(p) => p - case Dummy18(p) => p - case Dummy19(p) => p - case Dummy20(p) => p - case Dummy21(p) => p - case Dummy22(p) => p - case Dummy23(p) => p - case Dummy24(p) => p - case Dummy25(p) => p - case Dummy26(p) => p - case Dummy27(p) => p - case Dummy28(p) => p - case Dummy29(p) => p - case Dummy30(p) => p - case Dummy31(p) => p - case Dummy32(p) => p - case Dummy33(p) => p - case Dummy34(p) => p - case Dummy35(p) => p - case Dummy36(p) => p - case Dummy37(p) => p - case Dummy38(p) => p - case Dummy39(p) => p - case Dummy40(p) => p - case Dummy41(p) => p - case Dummy42(p) => p - case Dummy43(p) => p - case Dummy44(p) => p - case Dummy45(p) => p - case Dummy46(p) => p - case Dummy47(p) => p - case Dummy48(p) => p - case Dummy49(p) => p - case Dummy50(p) => p - case Dummy51(p) => p - case Dummy52(p) => p - case Dummy53(p) => p - case Dummy54(p) => p - case Dummy55(p) => p - case Dummy56(p) => p - case Dummy57(p) => p - case Dummy58(p) => p - case Dummy59(p) => p - case Dummy60(p) => p - case Dummy61(p) => p - case Dummy62(p) => p - case Dummy63(p) => p - case Dummy64(p) => p - case Dummy65(p) => p - case Dummy66(p) => p - case Dummy67(p) => p - case Dummy68(p) => p - case Dummy69(p) => p - case Dummy70(p) => p - case Dummy71(p) => p - case Dummy72(p) => p - case Dummy73(p) => p - case Dummy74(p) => p - case Dummy75(p) => p - case Dummy76(p) => p - case Dummy77(p) => p - case Dummy78(p) => p - case Dummy79(p) => p - case Dummy80(p) => p - case Dummy81(p) => p - case Dummy82(p) => p - case Dummy83(p) => p - case Dummy84(p) => p - case Dummy85(p) => p - case Dummy86(p) => p - case Dummy87(p) => p - case Dummy88(p) => p - case Dummy89(p) => p - case Dummy90(p) => p - case Dummy91(p) => p - case Dummy92(p) => p - case Dummy93(p) => p - case Dummy94(p) => p - case Dummy95(p) => p - case Dummy96(p) => p - case Dummy97(p) => p - case Dummy98(p) => p - case Dummy99(p) => p - case Dummy100(p) => p - case Dummy101(p) => p - case Dummy102(p) => p - case Dummy103(p) => p - case Dummy104(p) => p - case Dummy105(p) => p - case Dummy106(p) => p - case Dummy107(p) => p - case Dummy108(p) => p - case Dummy109(p) => p - case Dummy110(p) => p - case Dummy111(p) => p - case Dummy112(p) => p - case Dummy113(p) => p - case Dummy114(p) => p - case Dummy115(p) => p - case Dummy116(p) => p - case Dummy117(p) => p - case Dummy118(p) => p - case Dummy119(p) => p - case Dummy120(p) => p - case Dummy121(p) => p - case Dummy122(p) => p - case Dummy123(p) => p - case Dummy124(p) => p - case Dummy125(p) => p - case Dummy126(p) => p - case Dummy127(p) => p - case Dummy128(p) => p - case Dummy129(p) => p - case Dummy130(p) => p - case Dummy131(p) => p - case Dummy132(p) => p - case Dummy133(p) => p - case Dummy134(p) => p - case Dummy135(p) => p - case Dummy136(p) => p - case Dummy137(p) => p - case Dummy138(p) => p - case Dummy139(p) => p - case Dummy140(p) => p - case Dummy141(p) => p - case Dummy142(p) => p - case Dummy143(p) => p - case Dummy144(p) => p - case Dummy145(p) => p - case Dummy146(p) => p - case Dummy147(p) => p - case Dummy148(p) => p - case Dummy149(p) => p - case Dummy150(p) => p - case Dummy151(p) => p - case Dummy152(p) => p - case Dummy153(p) => p - case Dummy154(p) => p - case Dummy155(p) => p - case Dummy156(p) => p - case Dummy157(p) => p - case Dummy158(p) => p - case Dummy159(p) => p - case Dummy160(p) => p - case Dummy161(p) => p - case Dummy162(p) => p - case Dummy163(p) => p - case Dummy164(p) => p - case Dummy165(p) => p - case Dummy166(p) => p - case Dummy167(p) => p - case Dummy168(p) => p - case Dummy169(p) => p - case Dummy170(p) => p - case Dummy171(p) => p - case Dummy172(p) => p - case Dummy173(p) => p - case Dummy174(p) => p - case Dummy175(p) => p - case Dummy176(p) => p - case Dummy177(p) => p - case Dummy178(p) => p - case Dummy179(p) => p - case Dummy180(p) => p - case Dummy181(p) => p - case Dummy182(p) => p - case Dummy183(p) => p - case Dummy184(p) => p - case Dummy185(p) => p - case Dummy186(p) => p - case Dummy187(p) => p - case Dummy188(p) => p - case Dummy189(p) => p - case Dummy190(p) => p - case Dummy191(p) => p - case Dummy192(p) => p - case Dummy193(p) => p - case Dummy194(p) => p - case Dummy195(p) => p - case Dummy196(p) => p - case Dummy197(p) => p - case Dummy198(p) => p - case Dummy199(p) => p - case Dummy200(p) => p - case Dummy201(p) => p - case Dummy202(p) => p - case Dummy203(p) => p - case Dummy204(p) => p - case Dummy205(p) => p - case Dummy206(p) => p - case Dummy207(p) => p - case Dummy208(p) => p - case Dummy209(p) => p - case Dummy210(p) => p - case Dummy211(p) => p - case Dummy212(p) => p - case Dummy213(p) => p - case Dummy214(p) => p - case Dummy215(p) => p - case Dummy216(p) => p - case Dummy217(p) => p - case Dummy218(p) => p - case Dummy219(p) => p - case Dummy220(p) => p - case Dummy221(p) => p - case Dummy222(p) => p - case Dummy223(p) => p - case Dummy224(p) => p - case Dummy225(p) => p - case Dummy226(p) => p - case Dummy227(p) => p - case Dummy228(p) => p - case Dummy229(p) => p - case Dummy230(p) => p - case Dummy231(p) => p - case Dummy232(p) => p - case Dummy233(p) => p - case Dummy234(p) => p - case Dummy235(p) => p - case Dummy236(p) => p - case Dummy237(p) => p - case Dummy238(p) => p - case Dummy239(p) => p - case Dummy240(p) => p - case Dummy241(p) => p - case Dummy242(p) => p - case Dummy243(p) => p - case Dummy244(p) => p - case Dummy245(p) => p - case Dummy246(p) => p - case Dummy247(p) => p - case Dummy248(p) => p - case Dummy249(p) => p - case Dummy250(p) => p - case Dummy251(p) => p - case Dummy252(p) => p - case Dummy253(p) => p - case Dummy254(p) => p - case Dummy255(p) => p - case Dummy256(p) => p - case Dummy257(p) => p - case Dummy258(p) => p - case Dummy259(p) => p - case Dummy260(p) => p - case Dummy261(p) => p - case Dummy262(p) => p - case Dummy263(p) => p - case Dummy264(p) => p - case Dummy265(p) => p - case Dummy266(p) => p - case Dummy267(p) => p - case Dummy268(p) => p - case Dummy269(p) => p - case Dummy270(p) => p - case Dummy271(p) => p - case Dummy272(p) => p - case Dummy273(p) => p - case Dummy274(p) => p - case Dummy275(p) => p - case Dummy276(p) => p - case Dummy277(p) => p - case Dummy278(p) => p - case Dummy279(p) => p - case Dummy280(p) => p - case Dummy281(p) => p - case Dummy282(p) => p - case Dummy283(p) => p - case Dummy284(p) => p - case Dummy285(p) => p - case Dummy286(p) => p - case Dummy287(p) => p - case Dummy288(p) => p - case Dummy289(p) => p - case Dummy290(p) => p - case Dummy291(p) => p - case Dummy292(p) => p - case Dummy293(p) => p - case Dummy294(p) => p - case Dummy295(p) => p - case Dummy296(p) => p - case Dummy297(p) => p - case Dummy298(p) => p - case Dummy299(p) => p - case Dummy300(p) => p - case Dummy301(p) => p - case Dummy302(p) => p - case Dummy303(p) => p - case Dummy304(p) => p - case Dummy305(p) => p - case Dummy306(p) => p - case Dummy307(p) => p - case Dummy308(p) => p - case Dummy309(p) => p - case Dummy310(p) => p - case Dummy311(p) => p - case Dummy312(p) => p - case Dummy313(p) => p - case Dummy314(p) => p - case Dummy315(p) => p - case Dummy316(p) => p - case Dummy317(p) => p - case Dummy318(p) => p - case Dummy319(p) => p - case Dummy320(p) => p - case Dummy321(p) => p - case Dummy322(p) => p - case Dummy323(p) => p - case Dummy324(p) => p - case Dummy325(p) => p - case Dummy326(p) => p - case Dummy327(p) => p - case Dummy328(p) => p - case Dummy329(p) => p - case Dummy330(p) => p - case Dummy331(p) => p - case Dummy332(p) => p - case Dummy333(p) => p - case Dummy334(p) => p - case Dummy335(p) => p - case Dummy336(p) => p - case Dummy337(p) => p - case Dummy338(p) => p - case Dummy339(p) => p - case Dummy340(p) => p - case Dummy341(p) => p - case Dummy342(p) => p - case Dummy343(p) => p - case Dummy344(p) => p - case Dummy345(p) => p - case Dummy346(p) => p - case Dummy347(p) => p - case Dummy348(p) => p - case Dummy349(p) => p - case Dummy350(p) => p - case Dummy351(p) => p - case Dummy352(p) => p - case Dummy353(p) => p - case Dummy354(p) => p - case Dummy355(p) => p - case Dummy356(p) => p - case Dummy357(p) => p - case Dummy358(p) => p - case Dummy359(p) => p - case Dummy360(p) => p - case Dummy361(p) => p - case Dummy362(p) => p - case Dummy363(p) => p - case Dummy364(p) => p - case Dummy365(p) => p - case Dummy366(p) => p - case Dummy367(p) => p - case Dummy368(p) => p - case Dummy369(p) => p - case Dummy370(p) => p - case Dummy371(p) => p - case Dummy372(p) => p - case Dummy373(p) => p - case Dummy374(p) => p - case Dummy375(p) => p - case Dummy376(p) => p - case Dummy377(p) => p - case Dummy378(p) => p - case Dummy379(p) => p - case Dummy380(p) => p - case Dummy381(p) => p - case Dummy382(p) => p - case Dummy383(p) => p - case Dummy384(p) => p - case Dummy385(p) => p - case Dummy386(p) => p - case Dummy387(p) => p - case Dummy388(p) => p - case Dummy389(p) => p - case Dummy390(p) => p - case Dummy391(p) => p - case Dummy392(p) => p - case Dummy393(p) => p - case Dummy394(p) => p - case Dummy395(p) => p - case Dummy396(p) => p - case Dummy397(p) => p - case Dummy398(p) => p - case Dummy399(p) => p - case Dummy400(p) => p - case Dummy401(p) => p - case Dummy402(p) => p - case Dummy403(p) => p - case Dummy404(p) => p - case Dummy405(p) => p - case Dummy406(p) => p - case Dummy407(p) => p - case Dummy408(p) => p - case Dummy409(p) => p - case Dummy410(p) => p - case Dummy411(p) => p - case Dummy412(p) => p - case Dummy413(p) => p - case Dummy414(p) => p - case Dummy415(p) => p - case Dummy416(p) => p - case Dummy417(p) => p - case Dummy418(p) => p - case Dummy419(p) => p - case Dummy420(p) => p - case Dummy421(p) => p - case Dummy422(p) => p - case Dummy423(p) => p - case Dummy424(p) => p - case Dummy425(p) => p - case Dummy426(p) => p - case Dummy427(p) => p - case Dummy428(p) => p - case Dummy429(p) => p - case Dummy430(p) => p - case Dummy431(p) => p - case Dummy432(p) => p - case Dummy433(p) => p - case Dummy434(p) => p - case Dummy435(p) => p - case Dummy436(p) => p - case Dummy437(p) => p - case Dummy438(p) => p - case Dummy439(p) => p - case Dummy440(p) => p - case Dummy441(p) => p - case Dummy442(p) => p - case Dummy443(p) => p - case Dummy444(p) => p - case Dummy445(p) => p - case Dummy446(p) => p - case Dummy447(p) => p - case Dummy448(p) => p - case Dummy449(p) => p - case Dummy450(p) => p - case Dummy451(p) => p - case Dummy452(p) => p - case Dummy453(p) => p - case Dummy454(p) => p - case Dummy455(p) => p - case Dummy456(p) => p - case Dummy457(p) => p - case Dummy458(p) => p - case Dummy459(p) => p - case Dummy460(p) => p - case Dummy461(p) => p - case Dummy462(p) => p - case Dummy463(p) => p - case Dummy464(p) => p - case Dummy465(p) => p - case Dummy466(p) => p - case Dummy467(p) => p - case Dummy468(p) => p - case Dummy469(p) => p - case Dummy470(p) => p - case Dummy471(p) => p - case Dummy472(p) => p - case Dummy473(p) => p - case Dummy474(p) => p - case Dummy475(p) => p - case Dummy476(p) => p - case Dummy477(p) => p - case Dummy478(p) => p - case Dummy479(p) => p - case Dummy480(p) => p - case Dummy481(p) => p - case Dummy482(p) => p - case Dummy483(p) => p - case Dummy484(p) => p - case Dummy485(p) => p - case Dummy486(p) => p - case Dummy487(p) => p - case Dummy488(p) => p - case Dummy489(p) => p - case Dummy490(p) => p - case Dummy491(p) => p - case Dummy492(p) => p - case Dummy493(p) => p - case Dummy494(p) => p - case Dummy495(p) => p - case Dummy496(p) => p - case Dummy497(p) => p - case Dummy498(p) => p - case Dummy499(p) => p - case Dummy500(p) => p - case Dummy501(p) => p - case Dummy502(p) => p - case Dummy503(p) => p - case Dummy504(p) => p - case Dummy505(p) => p - case Dummy506(p) => p - case Dummy507(p) => p - case Dummy508(p) => p - case Dummy509(p) => p - case Dummy510(p) => p - case Dummy511(p) => p - case Dummy512(p) => p - case Dummy513(p) => p - case Dummy514(p) => p - case Dummy515(p) => p - case Dummy516(p) => p - case Dummy517(p) => p - case Dummy518(p) => p - case Dummy519(p) => p - case Dummy520(p) => p - case Dummy521(p) => p - case Dummy522(p) => p - case Dummy523(p) => p - case Dummy524(p) => p - case Dummy525(p) => p - case Dummy526(p) => p - case Dummy527(p) => p - case Dummy528(p) => p - case Dummy529(p) => p - case Dummy530(p) => p - case Dummy531(p) => p - case Dummy532(p) => p - case Dummy533(p) => p - case Dummy534(p) => p - case Dummy535(p) => p - case Dummy536(p) => p - case Dummy537(p) => p - case Dummy538(p) => p - case Dummy539(p) => p - case Dummy540(p) => p - case Dummy541(p) => p - case Dummy542(p) => p - case Dummy543(p) => p - case Dummy544(p) => p - case Dummy545(p) => p - case Dummy546(p) => p - case Dummy547(p) => p - case Dummy548(p) => p - case Dummy549(p) => p - case Dummy550(p) => p - case Dummy551(p) => p - case Dummy552(p) => p - case Dummy553(p) => p - case Dummy554(p) => p - case Dummy555(p) => p - case Dummy556(p) => p - case Dummy557(p) => p - case Dummy558(p) => p - case Dummy559(p) => p - case Dummy560(p) => p - case Dummy561(p) => p - case Dummy562(p) => p - case Dummy563(p) => p - case Dummy564(p) => p - case Dummy565(p) => p - case Dummy566(p) => p - case Dummy567(p) => p - case Dummy568(p) => p - case Dummy569(p) => p - case Dummy570(p) => p - case Dummy571(p) => p - case Dummy572(p) => p - case Dummy573(p) => p - case Dummy574(p) => p - case Dummy575(p) => p - case Dummy576(p) => p - case Dummy577(p) => p - case Dummy578(p) => p - case Dummy579(p) => p - case Dummy580(p) => p - case Dummy581(p) => p - case Dummy582(p) => p - case Dummy583(p) => p - case Dummy584(p) => p - case Dummy585(p) => p - case Dummy586(p) => p - case Dummy587(p) => p - case Dummy588(p) => p - case Dummy589(p) => p - case Dummy590(p) => p - case Dummy591(p) => p - case Dummy592(p) => p - case Dummy593(p) => p - case Dummy594(p) => p - case Dummy595(p) => p - case Dummy596(p) => p - case Dummy597(p) => p - case Dummy598(p) => p - case Dummy599(p) => p - case Dummy600(p) => p - case Dummy601(p) => p - case Dummy602(p) => p - case Dummy603(p) => p - case Dummy604(p) => p - case Dummy605(p) => p - case Dummy606(p) => p - case Dummy607(p) => p - case Dummy608(p) => p - case Dummy609(p) => p - case Dummy610(p) => p - case Dummy611(p) => p - case Dummy612(p) => p - case Dummy613(p) => p - case Dummy614(p) => p - case Dummy615(p) => p - case Dummy616(p) => p - case Dummy617(p) => p - case Dummy618(p) => p - case Dummy619(p) => p - case Dummy620(p) => p - case Dummy621(p) => p - case Dummy622(p) => p - case Dummy623(p) => p - case Dummy624(p) => p - case Dummy625(p) => p - case Dummy626(p) => p - case Dummy627(p) => p - case Dummy628(p) => p - case Dummy629(p) => p - case Dummy630(p) => p - case Dummy631(p) => p - case Dummy632(p) => p - case Dummy633(p) => p - case Dummy634(p) => p - case Dummy635(p) => p - case Dummy636(p) => p - case Dummy637(p) => p - case Dummy638(p) => p - case Dummy639(p) => p - case Dummy640(p) => p - case Dummy641(p) => p - case Dummy642(p) => p - case Dummy643(p) => p - case Dummy644(p) => p - case Dummy645(p) => p - case Dummy646(p) => p - case Dummy647(p) => p - case Dummy648(p) => p - case Dummy649(p) => p - case Dummy650(p) => p - case Dummy651(p) => p - case Dummy652(p) => p - case Dummy653(p) => p - case Dummy654(p) => p - case Dummy655(p) => p - case Dummy656(p) => p - case Dummy657(p) => p - case Dummy658(p) => p - case Dummy659(p) => p - case Dummy660(p) => p - case Dummy661(p) => p - case Dummy662(p) => p - case Dummy663(p) => p - case Dummy664(p) => p - case Dummy665(p) => p - case Dummy666(p) => p - case Dummy667(p) => p - case Dummy668(p) => p - case Dummy669(p) => p - case Dummy670(p) => p - case Dummy671(p) => p - case Dummy672(p) => p - case Dummy673(p) => p - case Dummy674(p) => p - case Dummy675(p) => p - case Dummy676(p) => p - case Dummy677(p) => p - case Dummy678(p) => p - case Dummy679(p) => p - case Dummy680(p) => p - case Dummy681(p) => p - case Dummy682(p) => p - case Dummy683(p) => p - case Dummy684(p) => p - case Dummy685(p) => p - case Dummy686(p) => p - case Dummy687(p) => p - case Dummy688(p) => p - case Dummy689(p) => p - case Dummy690(p) => p - case Dummy691(p) => p - case Dummy692(p) => p - case Dummy693(p) => p - case Dummy694(p) => p - case Dummy695(p) => p - case Dummy696(p) => p - case Dummy697(p) => p - case Dummy698(p) => p - case Dummy699(p) => p - case Dummy700(p) => p - case Dummy701(p) => p - case Dummy702(p) => p - case Dummy703(p) => p - case Dummy704(p) => p - case Dummy705(p) => p - case Dummy706(p) => p - case Dummy707(p) => p - case Dummy708(p) => p - case Dummy709(p) => p - case Dummy710(p) => p - case Dummy711(p) => p - case Dummy712(p) => p - case Dummy713(p) => p - case Dummy714(p) => p - case Dummy715(p) => p - case Dummy716(p) => p - case Dummy717(p) => p - case Dummy718(p) => p - case Dummy719(p) => p - case Dummy720(p) => p - case Dummy721(p) => p - case Dummy722(p) => p - case Dummy723(p) => p - case Dummy724(p) => p - case Dummy725(p) => p - case Dummy726(p) => p - case Dummy727(p) => p - case Dummy728(p) => p - case Dummy729(p) => p - case Dummy730(p) => p - case Dummy731(p) => p - case Dummy732(p) => p - case Dummy733(p) => p - case Dummy734(p) => p - case Dummy735(p) => p - case Dummy736(p) => p - case Dummy737(p) => p - case Dummy738(p) => p - case Dummy739(p) => p - case Dummy740(p) => p - case Dummy741(p) => p - case Dummy742(p) => p - case Dummy743(p) => p - case Dummy744(p) => p - case Dummy745(p) => p - case Dummy746(p) => p - case Dummy747(p) => p - case Dummy748(p) => p - case Dummy749(p) => p - case Dummy750(p) => p - case Dummy751(p) => p - case Dummy752(p) => p - case Dummy753(p) => p - case Dummy754(p) => p - case Dummy755(p) => p - case Dummy756(p) => p - case Dummy757(p) => p - case Dummy758(p) => p - case Dummy759(p) => p - case Dummy760(p) => p - case Dummy761(p) => p - case Dummy762(p) => p - case Dummy763(p) => p - case Dummy764(p) => p - case Dummy765(p) => p - case Dummy766(p) => p - case Dummy767(p) => p - case Dummy768(p) => p - case Dummy769(p) => p - case Dummy770(p) => p - case Dummy771(p) => p - case Dummy772(p) => p - case Dummy773(p) => p - case Dummy774(p) => p - case Dummy775(p) => p - case Dummy776(p) => p - case Dummy777(p) => p - case Dummy778(p) => p - case Dummy779(p) => p - case Dummy780(p) => p - case Dummy781(p) => p - case Dummy782(p) => p - case Dummy783(p) => p - case Dummy784(p) => p - case Dummy785(p) => p - case Dummy786(p) => p - case Dummy787(p) => p - case Dummy788(p) => p - case Dummy789(p) => p - case Dummy790(p) => p - case Dummy791(p) => p - case Dummy792(p) => p - case Dummy793(p) => p - case Dummy794(p) => p - case Dummy795(p) => p - case Dummy796(p) => p - case Dummy797(p) => p - case Dummy798(p) => p - case Dummy799(p) => p - case Dummy800(p) => p - case Dummy801(p) => p - case Dummy802(p) => p - case Dummy803(p) => p - case Dummy804(p) => p - case Dummy805(p) => p - case Dummy806(p) => p - case Dummy807(p) => p - case Dummy808(p) => p - case Dummy809(p) => p - case Dummy810(p) => p - case Dummy811(p) => p - case Dummy812(p) => p - case Dummy813(p) => p - case Dummy814(p) => p - case Dummy815(p) => p - case Dummy816(p) => p - case Dummy817(p) => p - case Dummy818(p) => p - case Dummy819(p) => p - case Dummy820(p) => p - case Dummy821(p) => p - case Dummy822(p) => p - case Dummy823(p) => p - case Dummy824(p) => p - case Dummy825(p) => p - case Dummy826(p) => p - case Dummy827(p) => p - case Dummy828(p) => p - case Dummy829(p) => p - case Dummy830(p) => p - case Dummy831(p) => p - case Dummy832(p) => p - case Dummy833(p) => p - case Dummy834(p) => p - case Dummy835(p) => p - case Dummy836(p) => p - case Dummy837(p) => p - case Dummy838(p) => p - case Dummy839(p) => p - case Dummy840(p) => p - case Dummy841(p) => p - case Dummy842(p) => p - case Dummy843(p) => p - case Dummy844(p) => p - case Dummy845(p) => p - case Dummy846(p) => p - case Dummy847(p) => p - case Dummy848(p) => p - case Dummy849(p) => p - case Dummy850(p) => p - case Dummy851(p) => p - case Dummy852(p) => p - case Dummy853(p) => p - case Dummy854(p) => p - case Dummy855(p) => p - case Dummy856(p) => p - case Dummy857(p) => p - case Dummy858(p) => p - case Dummy859(p) => p - case Dummy860(p) => p - case Dummy861(p) => p - case Dummy862(p) => p - case Dummy863(p) => p - case Dummy864(p) => p - case Dummy865(p) => p - case Dummy866(p) => p - case Dummy867(p) => p - case Dummy868(p) => p - case Dummy869(p) => p - case Dummy870(p) => p - case Dummy871(p) => p - case Dummy872(p) => p - case Dummy873(p) => p - case Dummy874(p) => p - case Dummy875(p) => p - case Dummy876(p) => p - case Dummy877(p) => p - case Dummy878(p) => p - case Dummy879(p) => p - case Dummy880(p) => p - case Dummy881(p) => p - case Dummy882(p) => p - case Dummy883(p) => p - case Dummy884(p) => p - case Dummy885(p) => p - case Dummy886(p) => p - case Dummy887(p) => p - case Dummy888(p) => p - case Dummy889(p) => p - case Dummy890(p) => p - case Dummy891(p) => p - case Dummy892(p) => p - case Dummy893(p) => p - case Dummy894(p) => p - case Dummy895(p) => p - case Dummy896(p) => p - case Dummy897(p) => p - case Dummy898(p) => p - case Dummy899(p) => p - case Dummy900(p) => p - case Dummy901(p) => p - case Dummy902(p) => p - case Dummy903(p) => p - case Dummy904(p) => p - case Dummy905(p) => p - case Dummy906(p) => p - case Dummy907(p) => p - case Dummy908(p) => p - case Dummy909(p) => p - case Dummy910(p) => p - case Dummy911(p) => p - case Dummy912(p) => p - case Dummy913(p) => p - case Dummy914(p) => p - case Dummy915(p) => p - case Dummy916(p) => p - case Dummy917(p) => p - case Dummy918(p) => p - case Dummy919(p) => p - case Dummy920(p) => p - case Dummy921(p) => p - case Dummy922(p) => p - case Dummy923(p) => p - case Dummy924(p) => p - case Dummy925(p) => p - case Dummy926(p) => p - case Dummy927(p) => p - case Dummy928(p) => p - case Dummy929(p) => p - case Dummy930(p) => p - case Dummy931(p) => p - case Dummy932(p) => p - case Dummy933(p) => p - case Dummy934(p) => p - case Dummy935(p) => p - case Dummy936(p) => p - case Dummy937(p) => p - case Dummy938(p) => p - case Dummy939(p) => p - case Dummy940(p) => p - case Dummy941(p) => p - case Dummy942(p) => p - case Dummy943(p) => p - case Dummy944(p) => p - case Dummy945(p) => p - case Dummy946(p) => p - case Dummy947(p) => p - case Dummy948(p) => p - case Dummy949(p) => p - case Dummy950(p) => p - case Dummy951(p) => p - case Dummy952(p) => p - case Dummy953(p) => p - case Dummy954(p) => p - case Dummy955(p) => p - case Dummy956(p) => p - case Dummy957(p) => p - case Dummy958(p) => p - case Dummy959(p) => p - case Dummy960(p) => p - case Dummy961(p) => p - case Dummy962(p) => p - case Dummy963(p) => p - case Dummy964(p) => p - case Dummy965(p) => p - case Dummy966(p) => p - case Dummy967(p) => p - case Dummy968(p) => p - case Dummy969(p) => p - case Dummy970(p) => p - case Dummy971(p) => p - case Dummy972(p) => p - case Dummy973(p) => p - case Dummy974(p) => p - case Dummy975(p) => p - case Dummy976(p) => p - case Dummy977(p) => p - case Dummy978(p) => p - case Dummy979(p) => p - case Dummy980(p) => p - case Dummy981(p) => p - case Dummy982(p) => p - case Dummy983(p) => p - case Dummy984(p) => p - case Dummy985(p) => p - case Dummy986(p) => p - case Dummy987(p) => p - case Dummy988(p) => p - case Dummy989(p) => p - case Dummy990(p) => p - case Dummy991(p) => p - case Dummy992(p) => p - case Dummy993(p) => p - case Dummy994(p) => p - case Dummy995(p) => p - case Dummy996(p) => p - case Dummy997(p) => p - case Dummy998(p) => p - case Dummy999(p) => p - case Dummy1000(p) => p - case Dummy1001(p) => p - case Dummy1002(p) => p - case Dummy1003(p) => p - case Dummy1004(p) => p - case Dummy1005(p) => p - case Dummy1006(p) => p - case Dummy1007(p) => p - case Dummy1008(p) => p - case Dummy1009(p) => p - case Dummy1010(p) => p - case Dummy1011(p) => p - case Dummy1012(p) => p - case Dummy1013(p) => p - case Dummy1014(p) => p - case Dummy1015(p) => p - case Dummy1016(p) => p - case Dummy1017(p) => p - case Dummy1018(p) => p - case Dummy1019(p) => p - case Dummy1020(p) => p - case Dummy1021(p) => p - case Dummy1022(p) => p - case Dummy1023(p) => p - case Dummy1024(p) => p - case Dummy1025(p) => p - case Dummy1026(p) => p - case Dummy1027(p) => p - case Dummy1028(p) => p - case Dummy1029(p) => p - case Dummy1030(p) => p - case Dummy1031(p) => p - case Dummy1032(p) => p - case Dummy1033(p) => p - case Dummy1034(p) => p - case Dummy1035(p) => p - case Dummy1036(p) => p - case Dummy1037(p) => p - case Dummy1038(p) => p - case Dummy1039(p) => p - case Dummy1040(p) => p - case Dummy1041(p) => p - case Dummy1042(p) => p - case Dummy1043(p) => p - case Dummy1044(p) => p - case Dummy1045(p) => p - case Dummy1046(p) => p - case Dummy1047(p) => p - case Dummy1048(p) => p - case Dummy1049(p) => p - case Dummy1050(p) => p - case Dummy1051(p) => p - case Dummy1052(p) => p - case Dummy1053(p) => p - case Dummy1054(p) => p - case Dummy1055(p) => p - case Dummy1056(p) => p - case Dummy1057(p) => p - case Dummy1058(p) => p - case Dummy1059(p) => p - case Dummy1060(p) => p - case Dummy1061(p) => p - case Dummy1062(p) => p - case Dummy1063(p) => p - case Dummy1064(p) => p - case Dummy1065(p) => p - case Dummy1066(p) => p - case Dummy1067(p) => p - case Dummy1068(p) => p - case Dummy1069(p) => p - case Dummy1070(p) => p - case Dummy1071(p) => p - case Dummy1072(p) => p - case Dummy1073(p) => p - case Dummy1074(p) => p - case Dummy1075(p) => p - case Dummy1076(p) => p - case Dummy1077(p) => p - case Dummy1078(p) => p - case Dummy1079(p) => p - case Dummy1080(p) => p - case Dummy1081(p) => p - case Dummy1082(p) => p - case Dummy1083(p) => p - case Dummy1084(p) => p - case Dummy1085(p) => p - case Dummy1086(p) => p - case Dummy1087(p) => p - case Dummy1088(p) => p - case Dummy1089(p) => p - case Dummy1090(p) => p - case Dummy1091(p) => p - case Dummy1092(p) => p - case Dummy1093(p) => p - case Dummy1094(p) => p - case Dummy1095(p) => p - case Dummy1096(p) => p - case Dummy1097(p) => p - case Dummy1098(p) => p - case Dummy1099(p) => p - case Dummy1100(p) => p - case Dummy1101(p) => p - case Dummy1102(p) => p - case Dummy1103(p) => p - case Dummy1104(p) => p - case Dummy1105(p) => p - case Dummy1106(p) => p - case Dummy1107(p) => p - case Dummy1108(p) => p - case Dummy1109(p) => p - case Dummy1110(p) => p - case Dummy1111(p) => p - case Dummy1112(p) => p - case Dummy1113(p) => p - case Dummy1114(p) => p - case Dummy1115(p) => p - case Dummy1116(p) => p - case Dummy1117(p) => p - case Dummy1118(p) => p - case Dummy1119(p) => p - case Dummy1120(p) => p - case Dummy1121(p) => p - case Dummy1122(p) => p - case Dummy1123(p) => p - case Dummy1124(p) => p - case Dummy1125(p) => p - case Dummy1126(p) => p - case Dummy1127(p) => p - case Dummy1128(p) => p - case Dummy1129(p) => p - case Dummy1130(p) => p - case Dummy1131(p) => p - case Dummy1132(p) => p - case Dummy1133(p) => p - case Dummy1134(p) => p - case Dummy1135(p) => p - case Dummy1136(p) => p - case Dummy1137(p) => p - case Dummy1138(p) => p - case Dummy1139(p) => p - case Dummy1140(p) => p - case Dummy1141(p) => p - case Dummy1142(p) => p - case Dummy1143(p) => p - case Dummy1144(p) => p - case Dummy1145(p) => p - case Dummy1146(p) => p - case Dummy1147(p) => p - case Dummy1148(p) => p - case Dummy1149(p) => p - case Dummy1150(p) => p - case Dummy1151(p) => p - case Dummy1152(p) => p - case Dummy1153(p) => p - case Dummy1154(p) => p - case Dummy1155(p) => p - case Dummy1156(p) => p - case Dummy1157(p) => p - case Dummy1158(p) => p - case Dummy1159(p) => p - case Dummy1160(p) => p - case Dummy1161(p) => p - case Dummy1162(p) => p - case Dummy1163(p) => p - case Dummy1164(p) => p - case Dummy1165(p) => p - case Dummy1166(p) => p - case Dummy1167(p) => p - case Dummy1168(p) => p - case Dummy1169(p) => p - case Dummy1170(p) => p - case Dummy1171(p) => p - case Dummy1172(p) => p - case Dummy1173(p) => p - case Dummy1174(p) => p - case Dummy1175(p) => p - case Dummy1176(p) => p - case Dummy1177(p) => p - case Dummy1178(p) => p - case Dummy1179(p) => p - case Dummy1180(p) => p - case Dummy1181(p) => p - case Dummy1182(p) => p - case Dummy1183(p) => p - case Dummy1184(p) => p - case Dummy1185(p) => p - case Dummy1186(p) => p - case Dummy1187(p) => p - case Dummy1188(p) => p - case Dummy1189(p) => p - case Dummy1190(p) => p - case Dummy1191(p) => p - case Dummy1192(p) => p - case Dummy1193(p) => p - case Dummy1194(p) => p - case Dummy1195(p) => p - case Dummy1196(p) => p - case Dummy1197(p) => p - case Dummy1198(p) => p - case Dummy1199(p) => p - case Dummy1200(p) => p - case Dummy1201(p) => p - case Dummy1202(p) => p - case Dummy1203(p) => p - case Dummy1204(p) => p - case Dummy1205(p) => p - case Dummy1206(p) => p - case Dummy1207(p) => p - case Dummy1208(p) => p - case Dummy1209(p) => p - case Dummy1210(p) => p - case Dummy1211(p) => p - case Dummy1212(p) => p - case Dummy1213(p) => p - case Dummy1214(p) => p - case Dummy1215(p) => p - case Dummy1216(p) => p - case Dummy1217(p) => p - case Dummy1218(p) => p - case Dummy1219(p) => p - case Dummy1220(p) => p - case Dummy1221(p) => p - case Dummy1222(p) => p - case Dummy1223(p) => p - case Dummy1224(p) => p - case Dummy1225(p) => p - case Dummy1226(p) => p - case Dummy1227(p) => p - case Dummy1228(p) => p - case Dummy1229(p) => p - case Dummy1230(p) => p - case Dummy1231(p) => p - case Dummy1232(p) => p - case Dummy1233(p) => p - case Dummy1234(p) => p - case Dummy1235(p) => p - case Dummy1236(p) => p - case Dummy1237(p) => p - case Dummy1238(p) => p - case Dummy1239(p) => p - case Dummy1240(p) => p - case Dummy1241(p) => p - case Dummy1242(p) => p - case Dummy1243(p) => p - case Dummy1244(p) => p - case Dummy1245(p) => p - case Dummy1246(p) => p - case Dummy1247(p) => p - case Dummy1248(p) => p - case Dummy1249(p) => p - case Dummy1250(p) => p - case Dummy1251(p) => p - case Dummy1252(p) => p - case Dummy1253(p) => p - case Dummy1254(p) => p - case Dummy1255(p) => p - case Dummy1256(p) => p - case Dummy1257(p) => p - case Dummy1258(p) => p - case Dummy1259(p) => p - case Dummy1260(p) => p - case Dummy1261(p) => p - case Dummy1262(p) => p - case Dummy1263(p) => p - case Dummy1264(p) => p - case Dummy1265(p) => p - case Dummy1266(p) => p - case Dummy1267(p) => p - case Dummy1268(p) => p - case Dummy1269(p) => p - case Dummy1270(p) => p - case Dummy1271(p) => p - case Dummy1272(p) => p - case Dummy1273(p) => p - case Dummy1274(p) => p - case Dummy1275(p) => p - case Dummy1276(p) => p - case Dummy1277(p) => p - case Dummy1278(p) => p - case Dummy1279(p) => p - case Dummy1280(p) => p - case Dummy1281(p) => p - case Dummy1282(p) => p - case Dummy1283(p) => p - case Dummy1284(p) => p - case Dummy1285(p) => p - case Dummy1286(p) => p - case Dummy1287(p) => p - case Dummy1288(p) => p - case Dummy1289(p) => p - case Dummy1290(p) => p - case Dummy1291(p) => p - case Dummy1292(p) => p - case Dummy1293(p) => p - case Dummy1294(p) => p - case Dummy1295(p) => p - case Dummy1296(p) => p - case Dummy1297(p) => p - case Dummy1298(p) => p - case Dummy1299(p) => p - case Dummy1300(p) => p - case Dummy1301(p) => p - case Dummy1302(p) => p - case Dummy1303(p) => p - case Dummy1304(p) => p - case Dummy1305(p) => p - case Dummy1306(p) => p - case Dummy1307(p) => p - case Dummy1308(p) => p - case Dummy1309(p) => p - case Dummy1310(p) => p - case Dummy1311(p) => p - case Dummy1312(p) => p - case Dummy1313(p) => p - case Dummy1314(p) => p - case Dummy1315(p) => p - case Dummy1316(p) => p - case Dummy1317(p) => p - case Dummy1318(p) => p - case Dummy1319(p) => p - case Dummy1320(p) => p - case Dummy1321(p) => p - case Dummy1322(p) => p - case Dummy1323(p) => p - case Dummy1324(p) => p - case Dummy1325(p) => p - case Dummy1326(p) => p - case Dummy1327(p) => p - case Dummy1328(p) => p - case Dummy1329(p) => p - case Dummy1330(p) => p - case Dummy1331(p) => p - case Dummy1332(p) => p - case Dummy1333(p) => p - case Dummy1334(p) => p - case Dummy1335(p) => p - case Dummy1336(p) => p - case Dummy1337(p) => p - case Dummy1338(p) => p - case Dummy1339(p) => p - case Dummy1340(p) => p - case Dummy1341(p) => p - case Dummy1342(p) => p - case Dummy1343(p) => p - case Dummy1344(p) => p - case Dummy1345(p) => p - case Dummy1346(p) => p - case Dummy1347(p) => p - case Dummy1348(p) => p - case Dummy1349(p) => p - case Dummy1350(p) => p - case Dummy1351(p) => p - case Dummy1352(p) => p - case Dummy1353(p) => p - case Dummy1354(p) => p - case Dummy1355(p) => p - case Dummy1356(p) => p - case Dummy1357(p) => p - case Dummy1358(p) => p - case Dummy1359(p) => p - case Dummy1360(p) => p - case Dummy1361(p) => p - case Dummy1362(p) => p - case Dummy1363(p) => p - case Dummy1364(p) => p - case Dummy1365(p) => p - case Dummy1366(p) => p - case Dummy1367(p) => p - case Dummy1368(p) => p - case Dummy1369(p) => p - case Dummy1370(p) => p - case Dummy1371(p) => p - case Dummy1372(p) => p - case Dummy1373(p) => p - case Dummy1374(p) => p - case Dummy1375(p) => p - case Dummy1376(p) => p - case Dummy1377(p) => p - case Dummy1378(p) => p - case Dummy1379(p) => p - case Dummy1380(p) => p - case Dummy1381(p) => p - case Dummy1382(p) => p - case Dummy1383(p) => p - case Dummy1384(p) => p - case Dummy1385(p) => p - case Dummy1386(p) => p - case Dummy1387(p) => p - case Dummy1388(p) => p - case Dummy1389(p) => p - case Dummy1390(p) => p - case Dummy1391(p) => p - case Dummy1392(p) => p - case Dummy1393(p) => p - case Dummy1394(p) => p - case Dummy1395(p) => p - case Dummy1396(p) => p - case Dummy1397(p) => p - case Dummy1398(p) => p - case Dummy1399(p) => p - case Dummy1400(p) => p - case Dummy1401(p) => p - case Dummy1402(p) => p - case Dummy1403(p) => p - case Dummy1404(p) => p - case Dummy1405(p) => p - case Dummy1406(p) => p - case Dummy1407(p) => p - case Dummy1408(p) => p - case Dummy1409(p) => p - case Dummy1410(p) => p - case Dummy1411(p) => p - case Dummy1412(p) => p - case Dummy1413(p) => p - case Dummy1414(p) => p - case Dummy1415(p) => p - case Dummy1416(p) => p - case Dummy1417(p) => p - case Dummy1418(p) => p - case Dummy1419(p) => p - case Dummy1420(p) => p - case Dummy1421(p) => p - case Dummy1422(p) => p - case Dummy1423(p) => p - case Dummy1424(p) => p - case Dummy1425(p) => p - case Dummy1426(p) => p - case Dummy1427(p) => p - case Dummy1428(p) => p - case Dummy1429(p) => p - case Dummy1430(p) => p - case Dummy1431(p) => p - case Dummy1432(p) => p - case Dummy1433(p) => p - case Dummy1434(p) => p - case Dummy1435(p) => p - case Dummy1436(p) => p - case Dummy1437(p) => p - case Dummy1438(p) => p - case Dummy1439(p) => p - case Dummy1440(p) => p - case Dummy1441(p) => p - case Dummy1442(p) => p - case Dummy1443(p) => p - case Dummy1444(p) => p - case Dummy1445(p) => p - case Dummy1446(p) => p - case Dummy1447(p) => p - case Dummy1448(p) => p - case Dummy1449(p) => p - case Dummy1450(p) => p - case Dummy1451(p) => p - case Dummy1452(p) => p - case Dummy1453(p) => p - case Dummy1454(p) => p - case Dummy1455(p) => p - case Dummy1456(p) => p - case Dummy1457(p) => p - case Dummy1458(p) => p - case Dummy1459(p) => p - case Dummy1460(p) => p - case Dummy1461(p) => p - case Dummy1462(p) => p - case Dummy1463(p) => p - case Dummy1464(p) => p - case Dummy1465(p) => p - case Dummy1466(p) => p - case Dummy1467(p) => p - case Dummy1468(p) => p - case Dummy1469(p) => p - case Dummy1470(p) => p - case Dummy1471(p) => p - case Dummy1472(p) => p - case Dummy1473(p) => p - case Dummy1474(p) => p - case Dummy1475(p) => p - case Dummy1476(p) => p - case Dummy1477(p) => p - case Dummy1478(p) => p - case Dummy1479(p) => p - case Dummy1480(p) => p - case Dummy1481(p) => p - case Dummy1482(p) => p - case Dummy1483(p) => p - case Dummy1484(p) => p - case Dummy1485(p) => p - case Dummy1486(p) => p - case Dummy1487(p) => p - case Dummy1488(p) => p - case Dummy1489(p) => p - case Dummy1490(p) => p - case Dummy1491(p) => p - case Dummy1492(p) => p - case Dummy1493(p) => p - case Dummy1494(p) => p - case Dummy1495(p) => p - case Dummy1496(p) => p - case Dummy1497(p) => p - case Dummy1498(p) => p - case Dummy1499(p) => p - case Dummy1500(p) => p - case Dummy1501(p) => p - case Dummy1502(p) => p - case Dummy1503(p) => p - case Dummy1504(p) => p - case Dummy1505(p) => p - case Dummy1506(p) => p - case Dummy1507(p) => p - case Dummy1508(p) => p - case Dummy1509(p) => p - case Dummy1510(p) => p - case Dummy1511(p) => p - case Dummy1512(p) => p - case Dummy1513(p) => p - case Dummy1514(p) => p - case Dummy1515(p) => p - case Dummy1516(p) => p - case Dummy1517(p) => p - case Dummy1518(p) => p - case Dummy1519(p) => p - case Dummy1520(p) => p - case Dummy1521(p) => p - case Dummy1522(p) => p - case Dummy1523(p) => p - case Dummy1524(p) => p - case Dummy1525(p) => p - case Dummy1526(p) => p - case Dummy1527(p) => p - case Dummy1528(p) => p - case Dummy1529(p) => p - case Dummy1530(p) => p - case Dummy1531(p) => p - case Dummy1532(p) => p - case Dummy1533(p) => p - case Dummy1534(p) => p - case Dummy1535(p) => p - case Dummy1536(p) => p - case Dummy1537(p) => p - case Dummy1538(p) => p - case Dummy1539(p) => p - case Dummy1540(p) => p - case Dummy1541(p) => p - case Dummy1542(p) => p - case Dummy1543(p) => p - case Dummy1544(p) => p - case Dummy1545(p) => p - case Dummy1546(p) => p - case Dummy1547(p) => p - case Dummy1548(p) => p - case Dummy1549(p) => p - case Dummy1550(p) => p - case Dummy1551(p) => p - case Dummy1552(p) => p - case Dummy1553(p) => p - case Dummy1554(p) => p - case Dummy1555(p) => p - case Dummy1556(p) => p - case Dummy1557(p) => p - case Dummy1558(p) => p - case Dummy1559(p) => p - case Dummy1560(p) => p - case Dummy1561(p) => p - case Dummy1562(p) => p - case Dummy1563(p) => p - case Dummy1564(p) => p - case Dummy1565(p) => p - case Dummy1566(p) => p - case Dummy1567(p) => p - case Dummy1568(p) => p - case Dummy1569(p) => p - case Dummy1570(p) => p - case Dummy1571(p) => p - case Dummy1572(p) => p - case Dummy1573(p) => p - case Dummy1574(p) => p - case Dummy1575(p) => p - case Dummy1576(p) => p - case Dummy1577(p) => p - case Dummy1578(p) => p - case Dummy1579(p) => p - case Dummy1580(p) => p - case Dummy1581(p) => p - case Dummy1582(p) => p - case Dummy1583(p) => p - case Dummy1584(p) => p - case Dummy1585(p) => p - case Dummy1586(p) => p - case Dummy1587(p) => p - case Dummy1588(p) => p - case Dummy1589(p) => p - case Dummy1590(p) => p - case Dummy1591(p) => p - case Dummy1592(p) => p - case Dummy1593(p) => p - case Dummy1594(p) => p - case Dummy1595(p) => p - case Dummy1596(p) => p - case Dummy1597(p) => p - case Dummy1598(p) => p - case Dummy1599(p) => p - case Dummy1600(p) => p - case Dummy1601(p) => p - case Dummy1602(p) => p - case Dummy1603(p) => p - case Dummy1604(p) => p - case Dummy1605(p) => p - case Dummy1606(p) => p - case Dummy1607(p) => p - case Dummy1608(p) => p - case Dummy1609(p) => p - case Dummy1610(p) => p - case Dummy1611(p) => p - case Dummy1612(p) => p - case Dummy1613(p) => p - case Dummy1614(p) => p - case Dummy1615(p) => p - case Dummy1616(p) => p - case Dummy1617(p) => p - case Dummy1618(p) => p - case Dummy1619(p) => p - case Dummy1620(p) => p - case Dummy1621(p) => p - case Dummy1622(p) => p - case Dummy1623(p) => p - case Dummy1624(p) => p - case Dummy1625(p) => p - case Dummy1626(p) => p - case Dummy1627(p) => p - case Dummy1628(p) => p - case Dummy1629(p) => p - case Dummy1630(p) => p - case Dummy1631(p) => p - case Dummy1632(p) => p - case Dummy1633(p) => p - case Dummy1634(p) => p - case Dummy1635(p) => p - case Dummy1636(p) => p - case Dummy1637(p) => p - case Dummy1638(p) => p - case Dummy1639(p) => p - case Dummy1640(p) => p - case Dummy1641(p) => p - case Dummy1642(p) => p - case Dummy1643(p) => p - case Dummy1644(p) => p - case Dummy1645(p) => p - case Dummy1646(p) => p - case Dummy1647(p) => p - case Dummy1648(p) => p - case Dummy1649(p) => p - case Dummy1650(p) => p - case Dummy1651(p) => p - case Dummy1652(p) => p - case Dummy1653(p) => p - case Dummy1654(p) => p - case Dummy1655(p) => p - case Dummy1656(p) => p - case Dummy1657(p) => p - case Dummy1658(p) => p - case Dummy1659(p) => p - case Dummy1660(p) => p - case Dummy1661(p) => p - case Dummy1662(p) => p - case Dummy1663(p) => p - case Dummy1664(p) => p - case Dummy1665(p) => p - case Dummy1666(p) => p - case Dummy1667(p) => p - case Dummy1668(p) => p - case Dummy1669(p) => p - case Dummy1670(p) => p - case Dummy1671(p) => p - case Dummy1672(p) => p - case Dummy1673(p) => p - case Dummy1674(p) => p - case Dummy1675(p) => p - case Dummy1676(p) => p - case Dummy1677(p) => p - case Dummy1678(p) => p - case Dummy1679(p) => p - case Dummy1680(p) => p - case Dummy1681(p) => p - case Dummy1682(p) => p - case Dummy1683(p) => p - case Dummy1684(p) => p - case Dummy1685(p) => p - case Dummy1686(p) => p - case Dummy1687(p) => p - case Dummy1688(p) => p - case Dummy1689(p) => p - case Dummy1690(p) => p - case Dummy1691(p) => p - case Dummy1692(p) => p - case Dummy1693(p) => p - case Dummy1694(p) => p - case Dummy1695(p) => p - case Dummy1696(p) => p - case Dummy1697(p) => p - case Dummy1698(p) => p - case Dummy1699(p) => p - case Dummy1700(p) => p - case Dummy1701(p) => p - case Dummy1702(p) => p - case Dummy1703(p) => p - case Dummy1704(p) => p - case Dummy1705(p) => p - case Dummy1706(p) => p - case Dummy1707(p) => p - case Dummy1708(p) => p - case Dummy1709(p) => p - case Dummy1710(p) => p - case Dummy1711(p) => p - case Dummy1712(p) => p - case Dummy1713(p) => p - case Dummy1714(p) => p - case Dummy1715(p) => p - case Dummy1716(p) => p - case Dummy1717(p) => p - case Dummy1718(p) => p - case Dummy1719(p) => p - case Dummy1720(p) => p - case Dummy1721(p) => p - case Dummy1722(p) => p - case Dummy1723(p) => p - case Dummy1724(p) => p - case Dummy1725(p) => p - case Dummy1726(p) => p - case Dummy1727(p) => p - case Dummy1728(p) => p - case Dummy1729(p) => p - case Dummy1730(p) => p - case Dummy1731(p) => p - case Dummy1732(p) => p - case Dummy1733(p) => p - case Dummy1734(p) => p - case Dummy1735(p) => p - case Dummy1736(p) => p - case Dummy1737(p) => p - case Dummy1738(p) => p - case Dummy1739(p) => p - case Dummy1740(p) => p - case Dummy1741(p) => p - case Dummy1742(p) => p - case Dummy1743(p) => p - case Dummy1744(p) => p - case Dummy1745(p) => p - case Dummy1746(p) => p - case Dummy1747(p) => p - case Dummy1748(p) => p - case Dummy1749(p) => p - case Dummy1750(p) => p - case Dummy1751(p) => p - case Dummy1752(p) => p - case Dummy1753(p) => p - case Dummy1754(p) => p - case Dummy1755(p) => p - case Dummy1756(p) => p - case Dummy1757(p) => p - case Dummy1758(p) => p - case Dummy1759(p) => p - case Dummy1760(p) => p - case Dummy1761(p) => p - case Dummy1762(p) => p - case Dummy1763(p) => p - case Dummy1764(p) => p - case Dummy1765(p) => p - case Dummy1766(p) => p - case Dummy1767(p) => p - case Dummy1768(p) => p - case Dummy1769(p) => p - case Dummy1770(p) => p - case Dummy1771(p) => p - case Dummy1772(p) => p - case Dummy1773(p) => p - case Dummy1774(p) => p - case Dummy1775(p) => p - case Dummy1776(p) => p - case Dummy1777(p) => p - case Dummy1778(p) => p - case Dummy1779(p) => p - case Dummy1780(p) => p - case Dummy1781(p) => p - case Dummy1782(p) => p - case Dummy1783(p) => p - case Dummy1784(p) => p - case Dummy1785(p) => p - case Dummy1786(p) => p - case Dummy1787(p) => p - case Dummy1788(p) => p - case Dummy1789(p) => p - case Dummy1790(p) => p - case Dummy1791(p) => p - case Dummy1792(p) => p - case Dummy1793(p) => p - case Dummy1794(p) => p - case Dummy1795(p) => p - case Dummy1796(p) => p - case Dummy1797(p) => p - case Dummy1798(p) => p - case Dummy1799(p) => p - case Dummy1800(p) => p - case Dummy1801(p) => p - case Dummy1802(p) => p - case Dummy1803(p) => p - case Dummy1804(p) => p - case Dummy1805(p) => p - case Dummy1806(p) => p - case Dummy1807(p) => p - case Dummy1808(p) => p - case Dummy1809(p) => p - case Dummy1810(p) => p - case Dummy1811(p) => p - case Dummy1812(p) => p - case Dummy1813(p) => p - case Dummy1814(p) => p - case Dummy1815(p) => p - case Dummy1816(p) => p - case Dummy1817(p) => p - case Dummy1818(p) => p - case Dummy1819(p) => p - case Dummy1820(p) => p - case Dummy1821(p) => p - case Dummy1822(p) => p - case Dummy1823(p) => p - case Dummy1824(p) => p - case Dummy1825(p) => p - case Dummy1826(p) => p - case Dummy1827(p) => p - case Dummy1828(p) => p - case Dummy1829(p) => p - case Dummy1830(p) => p - case Dummy1831(p) => p - case Dummy1832(p) => p - case Dummy1833(p) => p - case Dummy1834(p) => p - case Dummy1835(p) => p - case Dummy1836(p) => p - case Dummy1837(p) => p - case Dummy1838(p) => p - case Dummy1839(p) => p - case Dummy1840(p) => p - case Dummy1841(p) => p - case Dummy1842(p) => p - case Dummy1843(p) => p - case Dummy1844(p) => p - case Dummy1845(p) => p - case Dummy1846(p) => p - case Dummy1847(p) => p - case Dummy1848(p) => p - case Dummy1849(p) => p - case Dummy1850(p) => p - case Dummy1851(p) => p - case Dummy1852(p) => p - case Dummy1853(p) => p - case Dummy1854(p) => p - case Dummy1855(p) => p - case Dummy1856(p) => p - case Dummy1857(p) => p - case Dummy1858(p) => p - case Dummy1859(p) => p - case Dummy1860(p) => p - case Dummy1861(p) => p - case Dummy1862(p) => p - case Dummy1863(p) => p - case Dummy1864(p) => p - case Dummy1865(p) => p - case Dummy1866(p) => p - case Dummy1867(p) => p - case Dummy1868(p) => p - case Dummy1869(p) => p - case Dummy1870(p) => p - case Dummy1871(p) => p - case Dummy1872(p) => p - case Dummy1873(p) => p - case Dummy1874(p) => p - case Dummy1875(p) => p - case Dummy1876(p) => p - case Dummy1877(p) => p - case Dummy1878(p) => p - case Dummy1879(p) => p - case Dummy1880(p) => p - case Dummy1881(p) => p - case Dummy1882(p) => p - case Dummy1883(p) => p - case Dummy1884(p) => p - case Dummy1885(p) => p - case Dummy1886(p) => p - case Dummy1887(p) => p - case Dummy1888(p) => p - case Dummy1889(p) => p - case Dummy1890(p) => p - case Dummy1891(p) => p - case Dummy1892(p) => p - case Dummy1893(p) => p - case Dummy1894(p) => p - case Dummy1895(p) => p - case Dummy1896(p) => p - case Dummy1897(p) => p - case Dummy1898(p) => p - case Dummy1899(p) => p - case Dummy1900(p) => p - case Dummy1901(p) => p - case Dummy1902(p) => p - case Dummy1903(p) => p - case Dummy1904(p) => p - case Dummy1905(p) => p - case Dummy1906(p) => p - case Dummy1907(p) => p - case Dummy1908(p) => p - case Dummy1909(p) => p - case Dummy1910(p) => p - case Dummy1911(p) => p - case Dummy1912(p) => p - case Dummy1913(p) => p - case Dummy1914(p) => p - case Dummy1915(p) => p - case Dummy1916(p) => p - case Dummy1917(p) => p - case Dummy1918(p) => p - case Dummy1919(p) => p - case Dummy1920(p) => p - case Dummy1921(p) => p - case Dummy1922(p) => p - case Dummy1923(p) => p - case Dummy1924(p) => p - case Dummy1925(p) => p - case Dummy1926(p) => p - case Dummy1927(p) => p - case Dummy1928(p) => p - case Dummy1929(p) => p - case Dummy1930(p) => p - case Dummy1931(p) => p - case Dummy1932(p) => p - case Dummy1933(p) => p - case Dummy1934(p) => p - case Dummy1935(p) => p - case Dummy1936(p) => p - case Dummy1937(p) => p - case Dummy1938(p) => p - case Dummy1939(p) => p - case Dummy1940(p) => p - case Dummy1941(p) => p - case Dummy1942(p) => p - case Dummy1943(p) => p - case Dummy1944(p) => p - case Dummy1945(p) => p - case Dummy1946(p) => p - case Dummy1947(p) => p - case Dummy1948(p) => p - case Dummy1949(p) => p - case Dummy1950(p) => p - case Dummy1951(p) => p - case Dummy1952(p) => p - case Dummy1953(p) => p - case Dummy1954(p) => p - case Dummy1955(p) => p - case Dummy1956(p) => p - case Dummy1957(p) => p - case Dummy1958(p) => p - case Dummy1959(p) => p - case Dummy1960(p) => p - case Dummy1961(p) => p - case Dummy1962(p) => p - case Dummy1963(p) => p - case Dummy1964(p) => p - case Dummy1965(p) => p - case Dummy1966(p) => p - case Dummy1967(p) => p - case Dummy1968(p) => p - case Dummy1969(p) => p - case Dummy1970(p) => p - case Dummy1971(p) => p - case Dummy1972(p) => p - case Dummy1973(p) => p - case Dummy1974(p) => p - case Dummy1975(p) => p - case Dummy1976(p) => p - case Dummy1977(p) => p - case Dummy1978(p) => p - case Dummy1979(p) => p - case Dummy1980(p) => p - case Dummy1981(p) => p - case Dummy1982(p) => p - case Dummy1983(p) => p - case Dummy1984(p) => p - case Dummy1985(p) => p - case Dummy1986(p) => p - case Dummy1987(p) => p - case Dummy1988(p) => p - case Dummy1989(p) => p - case Dummy1990(p) => p - case Dummy1991(p) => p - case Dummy1992(p) => p - case Dummy1993(p) => p - case Dummy1994(p) => p - case Dummy1995(p) => p - case Dummy1996(p) => p - case Dummy1997(p) => p - case Dummy1998(p) => p - case Dummy1999(p) => p -} -} diff --git a/test/benchmarks/bench b/test/benchmarks/bench deleted file mode 100755 index 3aa7e7468c..0000000000 --- a/test/benchmarks/bench +++ /dev/null @@ -1,63 +0,0 @@ - -################################################################# -# -# A simple script used to rebuild benchmarks using fsc and then run them. -# If you need to rebuild, use: -# -# ./bench <arguments> -# -# Omitting <arguments> will print more information. -# If you don't want to rebuild: -# -# ./bench skip <same-args-as-above> -# -################################################################# - - -TOP_DIR=$PWD -# build/pack for ant, target/pack for sbt -SCALA_BUILD_DIR=../../target/pack -SRC_DIR=src/ -TARGET_DIR=target -CLASS_DIR=$TARGET_DIR/classes - -FSC=$SCALA_BUILD_DIR/bin/fsc -SCALA_LIBS_PATH=$SCALA_BUILD_DIR/lib -CLASSPATH=$SCALA_LIBS_PATH/scala-library.jar:lib/jsr166_and_extra.jar - -ARTIFACT=benchmarks.jar -ARTIFACT_PATH=$TARGET_DIR/$ARTIFACT - - -if [ "$1" != "skip" ] -then - # fetch source file list - find $SRC_DIR -name *.scala -print > source.list - - # recompile with fsc - $FSC -cp $CLASSPATH -d $CLASS_DIR @source.list - - # copy files - cd $SRC_DIR - cp -r * ../$CLASS_DIR - cd .. - - # jar it up - rm $ARTIFACT_PATH - cd $CLASS_DIR - jar cf $ARTIFACT . - mv $ARTIFACT $TOP_DIR/$ARTIFACT_PATH - cd $TOP_DIR -fi - -# run a benchmark -RUNCOMMAND="java -Xms256m -Xmx512m -server -cp $CLASSPATH:$ARTIFACT_PATH scala.collection.parallel.Benchmarking " -if [ "$1" != skip ] -then - $RUNCOMMAND "$@" -else - $RUNCOMMAND $2 $3 $4 $5 $6 $7 $8 -fi - - - diff --git a/test/benchmarks/lib/jsr166_and_extra.jar.desired.sha1 b/test/benchmarks/lib/jsr166_and_extra.jar.desired.sha1 deleted file mode 100644 index c879571eae..0000000000 --- a/test/benchmarks/lib/jsr166_and_extra.jar.desired.sha1 +++ /dev/null @@ -1 +0,0 @@ -0392ecdeb306263c471ce51fa368223388b82b61 ?jsr166_and_extra.jar diff --git a/test/benchmarks/source.list b/test/benchmarks/source.list deleted file mode 100644 index c5d5f7f8fe..0000000000 --- a/test/benchmarks/source.list +++ /dev/null @@ -1,79 +0,0 @@ -src/scala/collection/parallel/Benchmarking.scala -src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala -src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala -src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala -src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala -src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala -src/scala/collection/parallel/benchmarks/arrays/Resetting.scala -src/scala/collection/parallel/benchmarks/arrays/Arrays.scala -src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala -src/scala/collection/parallel/benchmarks/arrays/Dummy.scala -src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala -src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala -src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala -src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala -src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala -src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala -src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala -src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala -src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala -src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala -src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala -src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala -src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala -src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala -src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala -src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala -src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala -src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala -src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala -src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala -src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala -src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala -src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala -src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala -src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala -src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala -src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala -src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala -src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala -src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala -src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala -src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala -src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala -src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala -src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala -src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala -src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala -src/scala/collection/parallel/benchmarks/generic/Operators.scala -src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala -src/scala/collection/parallel/benchmarks/generic/Dummy.scala -src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala -src/scala/collection/parallel/benchmarks/misc/Dictionary.scala -src/scala/collection/parallel/benchmarks/misc/Loader.scala -src/scala/collection/parallel/benchmarks/misc/Coder.scala -src/scala/collection/parallel/benchmarks/Bench.scala -src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala -src/scala/collection/parallel/benchmarks/hashtries/Combine.scala -src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala -src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala -src/scala/collection/parallel/benchmarks/hashtries/Construct.scala -src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala -src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala -src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala diff --git a/test/benchmarks/src/scala/collection/immutable/range-bench.scala b/test/benchmarks/src/scala/collection/immutable/range-bench.scala deleted file mode 100644 index e167ff04e8..0000000000 --- a/test/benchmarks/src/scala/collection/immutable/range-bench.scala +++ /dev/null @@ -1,61 +0,0 @@ -package scala.collection.immutable -package benchmarks - -object RangeTest { - // not inlined any more, needs investigation - // - // class XXS { - // private val array = Array.range(0, 100) - // def tst = { var sum = 0; for (i <- 0 until array.length) sum += array(i); sum } - // } - - var x: Int = 0 - - def foreachSum(max: Int): Int = { - var sum = 0 - 1 to max foreach (sum += _) - sum - } - def whileSum(max: Int) = { - var sum = 0 - var num = 1 - while (num <= max) { - sum += num - num += 1 - } - sum - } - - def show(max: Int, foreachNanos: Long, whileNanos: Long) { - val winner = if (foreachNanos < whileNanos) "foreachSum" else "whileSum" - val ratio = if (foreachNanos < whileNanos) foreachNanos.toDouble / whileNanos else whileNanos.toDouble / foreachNanos - println("1 to %d:, %12s wins, %.3f: foreach %.3f while %.3f".format( - max, winner, ratio, - foreachNanos.toDouble / 1000000L, - whileNanos.toDouble / 1000000L) - ) - } - - def run(max: Int) = { - val foreachFirst = util.Random.nextBoolean - val t1 = System.nanoTime - x = if (foreachFirst) foreachSum(max) else whileSum(max) - val t2 = System.nanoTime - x = if (foreachFirst) whileSum(max) else foreachSum(max) - val t3 = System.nanoTime - - val foreachNanos = if (foreachFirst) t2 - t1 else t3 - t2 - val whileNanos = if (foreachFirst) t3 - t2 else t2 - t1 - show(max, foreachNanos, whileNanos) - } - - def main(args: Array[String]): Unit = { - var max = if (args.isEmpty) 100 else args(0).toInt - while (max > 0) { - run(max) - run(max) - run(max) - max += (max / 7) - } - } -} diff --git a/test/benchmarks/src/scala/collection/mutable/hashtable-bench.scala b/test/benchmarks/src/scala/collection/mutable/hashtable-bench.scala deleted file mode 100644 index c01e7cb46e..0000000000 --- a/test/benchmarks/src/scala/collection/mutable/hashtable-bench.scala +++ /dev/null @@ -1,61 +0,0 @@ -import scala.collection.mutable.HashMap - -object Test { - var dummy: Long = 0L - var _foreach: Long = 0L - var _iterator: Long = 0L - - def numbers: Seq[Int] = 1 to 1000000 - val map: HashMap[Int, Int] = HashMap(numbers zip numbers: _*) - - @inline final def timed(body: => Unit): Long = { - val start = System.nanoTime - body - System.nanoTime - start - } - - def go(xs: Iterable[Int], reps: Int) = { - _foreach = 0L - _iterator = 0L - - 0 until reps foreach { _ => - _foreach += timed(xs foreach (dummy += _)) - _iterator += timed(xs.iterator foreach (dummy += _)) - } - - " foreach avg " + (_foreach / reps) + "\n iterator avg " + (_iterator / reps) + "\n" - } - - def go2(xs: collection.Map[Int, Int], reps: Int) = { - _foreach = 0L - _iterator = 0L - - def incDummy(nums: (Int, Int)) = { - dummy += nums._1 - dummy -= nums._2 - } - - 0 until reps foreach { _ => - _foreach += timed(xs foreach incDummy) - _iterator += timed(xs.iterator foreach incDummy) - } - - " foreach avg " + (_foreach / reps) + "\n iterator avg " + (_iterator / reps) + "\n" - } - - def main(args: Array[String]): Unit = { - println("map.keys:") - go(map.keys, 10) // warm - println(go(map.keys, 10)) - - println("map.values:") - go(map.values, 10) // warm - println(go(map.values, 10)) - - println("map:") - go2(map, 10) // warm - println(go2(map, 10)) - - println("// pay me no mind ... " + dummy) - } -} diff --git a/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala b/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala deleted file mode 100644 index bd75764636..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala +++ /dev/null @@ -1,223 +0,0 @@ -package scala.collection.parallel - - -import scala.collection.mutable.LinkedHashSet - -import benchmarks._ - - -/** - * All benchmarks are registered here. - * - * @author prokopec - */ -trait BenchmarkRegister { - - val benchcreators = LinkedHashSet[BenchCompanion]() - - def register(companion: BenchCompanion) = benchcreators += companion - - // parallel array benchmarks - register(parallel_array.ReduceLight) - register(parallel_array.ReduceNew) - register(parallel_array.ReduceList) - register(parallel_array.ReducePrime) - register(parallel_array.ReduceHeavy) - register(parallel_array.CountLight) - register(parallel_array.CountList) - register(parallel_array.CountHeavy) - register(parallel_array.ForeachLight) - register(parallel_array.ForeachHeavy) - register(parallel_array.SumLight) - register(parallel_array.MinLight) - register(parallel_array.MapLight) - register(parallel_array.FilterLight) - register(parallel_array.PartitionLight) - register(parallel_array.PartialMapLight) - register(parallel_array.FlatMapLight) - register(parallel_array.PlusPlus) - register(parallel_array.ForallLight) - register(parallel_array.ForallQuickStop) - register(parallel_array.ForallStop80k) - register(parallel_array.ForallHeavy) - register(parallel_array.ExistsLight) - register(parallel_array.FindLight) - register(parallel_array.TakeMany) - register(parallel_array.DropMany) - register(parallel_array.SliceMany) - register(parallel_array.SliceMedium) - register(parallel_array.SliceFew) - register(parallel_array.SplitHalf) - register(parallel_array.TakeWhileLight) - register(parallel_array.SpanLight) - register(parallel_array.CopyToArray) - register(parallel_array.SegmentLength) - register(parallel_array.IndexWhere) - register(parallel_array.LastIndexWhere) - register(parallel_array.Reverse) - register(parallel_array.ReverseMap) - register(parallel_array.SameElementsLong) - register(parallel_array.Corresponds) - register(parallel_array.DiffHalf) - register(parallel_array.IntersectHalf) - register(parallel_array.RemoveDuplicates) - register(parallel_array.PatchHalf) - register(parallel_array.PadToDouble) - register(parallel_array.AggregateLight) - register(parallel_array.ScanLight) - register(parallel_array.ScanMedium) - register(parallel_array.GroupByLight) - register(parallel_array.MatrixMultiplication) - - // parallel views - register(parallel_view.DummyViewBenchList.Reduce) - register(parallel_view.DummyViewBenchList.MediumReduce) - register(parallel_view.DummyViewBenchList.ModifyThenReduce) - register(parallel_view.DummyViewBenchList.ModifyThenForce) - register(parallel_view.DummyViewBenchList.Iteration) - register(parallel_view.DummyViewBenchList.IterationS) - register(parallel_view.DummyViewBenchList.IterationM) - register(parallel_view.DummyViewBenchList.IterationA) - register(parallel_view.DummyViewBenchList.IterationZ) - register(parallel_view.DummyViewBenchList.IterationP) - - // parallel ranges - register(parallel_range.RangeBenches.Reduce) - register(parallel_range.RangeBenches.ReduceMedium) - register(parallel_range.RangeBenches.ForeachAdd) - register(parallel_range.RangeBenches.ForeachAddCollatz) - register(parallel_range.RangeBenches.ForeachModify) - register(parallel_range.RangeBenches.ForeachModifyMedium) - register(parallel_range.RangeBenches.ForeachModifyHeavy) - register(parallel_range.RangeBenches.MapLight) - register(parallel_range.RangeBenches.MapMedium) - - // array benchmarks - register(arrays.ObjectAccess) - register(arrays.IntAccess) - - // hash benchmarks - register(hashtries.Foreach) - register(hashtries.Iterate) - register(hashtries.Construct) - register(hashtries.Lookup) - register(hashtries.Combine) - register(hashtries.MultipleCombine) - - // parallel hash trie benchmarks - register(hashtries.RefParHashTrieBenches.Reduce) - register(hashtries.RefParHashTrieBenches.ReduceMedium) - register(hashtries.RefParHashTrieBenches.Reduce2) - register(hashtries.RefParHashTrieBenches.Map) - register(hashtries.RefParHashTrieBenches.Map2) - - // parallel hash table map benchmarks - register(hashtables.RefParHashTableBenches.Reduce) - register(hashtables.RefParHashTableBenches.Reduce2) - register(hashtables.RefParHashTableBenches.Foreach) - register(hashtables.RefParHashTableBenches.ForeachSet) - register(hashtables.RefParHashTableBenches.Map) - register(hashtables.RefParHashTableBenches.Map2) - register(hashtables.RefParHashTableBenches.HeavyMap) - register(hashtables.RefParHashTableBenches.Filter) - register(hashtables.RefParHashTableBenches.FlatMap) - register(hashtables.RefParHashTableBenches.FlatMap2) - - // parallel hash table set benchmarks - register(hashtables.RefParHashTableSetBenches.Reduce) - register(hashtables.RefParHashTableSetBenches.Reduce2) - register(hashtables.RefParHashTableSetBenches.Foreach) - register(hashtables.RefParHashTableSetBenches.ForeachSet) - register(hashtables.RefParHashTableSetBenches.Map) - register(hashtables.RefParHashTableSetBenches.Map2) - register(hashtables.RefParHashTableSetBenches.HeavyMap) - register(hashtables.RefParHashTableSetBenches.Filter) - register(hashtables.RefParHashTableSetBenches.FlatMap) - - // general examples - register(misc.Coder) - register(misc.Loader) -} - - -/** - * Serves as an entrypoint to run all the benchmarks. - */ -object Benchmarking extends BenchmarkRegister { - - def printHelp { - println("Must enter at least four arguments: <collection> <benchmark> <size of the collection> <type>") - println(" Example: ParArray reduce-light 50000 par") - println(" Example: ParArray -all 50000 par") - println - println("General synthax: <collection> <benchmark> <size> <type> <parallelism-level>") - println(" <collection> - name of the collection to test, `-all` runs benchmarks for all collections") - println(" <benchmark> - name of the specific benchmark, `-all` runs all benchmarks for the chosen collections") - println(" <size> - the size (number of elements) of the collection, or `-default` for default size per benchmark") - println(" <type> - `seq` for benchmarking sequential version of the functionality") - println(" `par` for benchmarking parallel version of the functionality") - println(" `<something-else>` for running comparison benchmarks") - println(" `-all` for running sequential, parallel and comparison benchmarks") - println(" <parallelism-level> - the level of parallelism used (default 2)") - } - - def otherOptions(args: Array[String]) { - if (args.length == 0) printHelp - else args(0) match { - case "-list" => // lists all benchmarks - for (bc <- benchcreators) println(bc.fullname) - case _ => printHelp - } - } - - def main(args: Array[String]) { - if (args.length < 4) { - otherOptions(args) - return - } - - val collname = args(0) - val benchname = args(1) - val size = if (args(2) == "-default") -1 else args(2).toInt - val tpe = args(3) - val parlevel = if (args.length >= 5) args(4).toInt else 2 - - // find all benchmarks to run - val benches = benchcreators.filter(comp => { - (collname, benchname) match { - case ("-all", "-all") => true - case ("-all", bn) if (benchname != "-all") => bn == comp.benchName - case (cn, "-all") if (collname != "-all") => cn == comp.collectionName - case (cn, bn) => cn == comp.collectionName && bn == comp.benchName - } - }).flatMap(comp => { - val collsz = if (size != -1) size else comp.defaultSize - if (tpe != "-all") List(comp.apply(collsz, parlevel, tpe)) - else for (benchtype <- "seq" :: "par" :: comp.comparisons) - yield comp.apply(collsz, parlevel, benchtype) - }) - - println("Running benchmarks...") - for (b <- benches) b.executeBenchmark - } - -} - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala deleted file mode 100644 index c20bbaeef1..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala +++ /dev/null @@ -1,126 +0,0 @@ -package scala.collection.parallel.benchmarks - - -import scala.collection._ -import scala.testing.Benchmark - - - -trait BenchCompanion { - def benchName: String - def collectionName: String - def fullname = collectionName + "." + benchName - def defaultSize = 100000 - def comparisons = List[String]() - def apply(sz: Int, parallelism: Int, what: String): Bench -} - - -/** - * An interface for all benchmark classes. - * A benchmark runs some functionality a prespecified number of times. - */ -trait Bench extends Benchmark { - val size: Int - - val parallelism: Int - - val runWhat: String - - /** - * Name of the benchmark. Convention is for it to start with the name of the collection being - * tested, continuing '.' and ending with the name of the specific functionality being benchmarked. - * @return - */ - def name: String = companion.fullname - def collectionName: String = companion.collectionName - def benchName: String = companion.benchName - - def companion: BenchCompanion - - def runseq: Unit - - def runpar: Unit - - /** - * Describes the number of runs of the test. - */ - val runs = 10 - - /** - * Returns the number of repetitions for this benchmark. - */ - def repetitionsPerRun = 500 - - /** - * Resets the benchmark object. Typically, this means recreating - * the collection being tested. - */ - def reset: Unit - - /** - * Returns a map of available comparison tests. - */ - def comparisons: List[String] = companion.comparisons - - def comparison(name: String): Option[() => Unit] = comparisonMap.get(name) - - def comparisonMap: Map[String, () => Unit] - - def run = runWhat match { - case "seq" => for (i <- 0 until repetitionsPerRun) runseq - case "par" => for (i <- 0 until repetitionsPerRun) runpar - case _ => comparison(runWhat) match { - case Some(fun) => for (i <- 0 until repetitionsPerRun) fun() - case None => throw new IllegalArgumentException("Unknown bench option: `" + runWhat + - "`, need `seq`, `par` or one of: " + comparisons.mkString("`", "`, `", "`")) - } - } - - /** - * Prints results of the benchmark. May be overridden in benchmarks. - */ - def printResults {} - - def onEnd {} - - def executeBenchmark = { - println("-----------------------") - print(name + ", " + runWhat + ", par.=" + parallelism + ", sz=" + niceSize + ": ") - - val times = runBenchmark(runs) - - onEnd - - for (t <- times) print(t + " ") - println - printResults - } - - private def niceSize = if (size < 1000 || size % 1000 != 0) size.toString else size / 1000 + "k" -} - - -trait HavingResult[T] extends Bench { - var runresult: T = null.asInstanceOf[T] - - abstract override def printResults { - println("result: " + (if (runresult != null) runresult else "<not set>")) - super.printResults - } -} - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Arrays.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Arrays.scala deleted file mode 100644 index 39232122a9..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Arrays.scala +++ /dev/null @@ -1,63 +0,0 @@ -package scala.collection.parallel.benchmarks.arrays - - - - - - - -object Arrays { - - @inline def genericApply[T](xs: Array[T], idx: Int): T = xs.asInstanceOf[AnyRef] match { - case x: Array[AnyRef] => x(idx).asInstanceOf[T] - case _ => genericApplyNotAnyRef(xs, idx) - } - - @noinline private def genericApplyNotAnyRef[T](xs: Array[T], idx: Int): T = xs.asInstanceOf[AnyRef] match { - case x: Array[Int] => x(idx).asInstanceOf[T] - case x: Array[Double] => x(idx).asInstanceOf[T] - case x: Array[Long] => x(idx).asInstanceOf[T] - case x: Array[Float] => x(idx).asInstanceOf[T] - case x: Array[Char] => x(idx).asInstanceOf[T] - case x: Array[Byte] => x(idx).asInstanceOf[T] - case x: Array[Short] => x(idx).asInstanceOf[T] - case x: Array[Boolean] => x(idx).asInstanceOf[T] - case x: Array[Unit] => x(idx).asInstanceOf[T] - case null => throw new NullPointerException - } - - @inline def apply(xs: AnyRef, idx: Int): Any = xs match { - case x: Array[AnyRef] => x(idx).asInstanceOf[Any] - case _ => applyNotAnyRef(xs, idx) - } - - @noinline private def applyNotAnyRef(xs: AnyRef, idx: Int): Any = xs match { - case x: Array[Int] => x(idx).asInstanceOf[Any] - case x: Array[Double] => x(idx).asInstanceOf[Any] - case x: Array[Long] => x(idx).asInstanceOf[Any] - case x: Array[Float] => x(idx).asInstanceOf[Any] - case x: Array[Char] => x(idx).asInstanceOf[Any] - case x: Array[Byte] => x(idx).asInstanceOf[Any] - case x: Array[Short] => x(idx).asInstanceOf[Any] - case x: Array[Boolean] => x(idx).asInstanceOf[Any] - case x: Array[Unit] => x(idx).asInstanceOf[Any] - case null => throw new NullPointerException - } - -} - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Dummy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Dummy.scala deleted file mode 100644 index 56af7b9d85..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Dummy.scala +++ /dev/null @@ -1,22 +0,0 @@ -package scala.collection.parallel.benchmarks.arrays - - - - -case class Dummy(in: Int) { - def op = {} -} - -object Dummy { - def dummyOp(a: Int) = { if (a < 0) -1 } - def dummyOp(d: Dummy) = { if (d.in < 0) d.op } -} - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala deleted file mode 100644 index 81f0e4da03..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala +++ /dev/null @@ -1,68 +0,0 @@ -package scala.collection.parallel.benchmarks.arrays - - -import scala.collection.parallel.benchmarks._ - - - -object IntAccess extends BenchCompanion { - def collectionName = "array"; - def benchName = "access-int"; - def apply(sz: Int, p: Int, what: String) = new IntAccess(sz, p, what) - override def comparisons = List("any", "cast", "manif", "unknown") - override def defaultSize = 100000 -} - - -class IntAccess(sz: Int, p: Int, what: String) -extends Resetting(n => n, sz, p, what) with UnknownManif[Int] { - def companion = IntAccess - - def runseq {} - def runpar {} - - def runany = { - var i = 0 - while (i < sz) { - val d = anyarray(i).asInstanceOf[Int] - i += 1 - } - } - - def runcast = { - var i = 0 - while (i < sz) { - val d = Arrays.apply(castarray, i).asInstanceOf[Int] - i += 1 - } - } - - def runmanif = { - var i = 0 - while (i < sz) { - val d = manifarray(i) - if (op(d)) i += 1 - i += 1 - } - } - - def op(a: Int) = a < 0 - - def comparisonMap = collection.Map("any" -> runany _, "cast" -> runcast _, - "manif" -> runmanif _, "unknown" -> rununknown _) - -} - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala deleted file mode 100644 index 29251f3719..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala +++ /dev/null @@ -1,75 +0,0 @@ -package scala.collection.parallel.benchmarks.arrays - - -import scala.collection.parallel.benchmarks._ - - - -object ObjectAccess extends BenchCompanion { - def collectionName = "array"; - def benchName = "access-obj"; - def apply(sz: Int, p: Int, what: String) = new ObjectAccess(sz, p, what) - override def comparisons = List("any", "cast", "gencast", "manif", "unknown") - override def defaultSize = 100000 -} - - -class ObjectAccess(sz: Int, p: Int, what: String) -extends Resetting(Dummy(_), sz, p, what) with UnknownManif[Dummy] { - def companion = ObjectAccess - - def runseq {} - def runpar {} - - def runany = { - var i = 0 - while (i < sz) { - val d = anyarray(i).asInstanceOf[Dummy] - Dummy.dummyOp(d) - i += 1 - } - } - - def runcast = { - var i = 0 - while (i < sz) { - val d = Arrays.apply(castarray, i).asInstanceOf[Dummy] - i += 1 - } - } - - def rungenericcast = { - var i = 0 - while (i < sz) { - val d = Arrays.genericApply(gencastarray, i) - i += 1 - } - } - - def runmanif = { - var i = 0 - while (i < sz) { - val d = manifarray(i) - if (d.in < 0) i += 1 - i += 1 - } - } - - def comparisonMap = collection.Map("any" -> runany _, "cast" -> runcast _, "gencast" -> rungenericcast _, - "manif" -> runmanif _, "unknown" -> rununknown _) - -} - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Resetting.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Resetting.scala deleted file mode 100644 index 22d2107f62..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Resetting.scala +++ /dev/null @@ -1,39 +0,0 @@ -package scala.collection.parallel.benchmarks.arrays - - -import scala.collection.parallel.benchmarks._ - - -abstract class Resetting[T: ClassTag](elemcreate: Int => T, sz: Int, p: Int, what: String) -extends Bench { - val size = sz - val parallelism = p - val runWhat = what - - var anyarray: Array[Any] = null - var castarray: AnyRef = null - var gencastarray: Array[T] = null - var manifarray: Array[T] = null - - reset - - def reset = what match { - case "any" => - anyarray = new Array[Any](sz) - for (i <- 0 until sz) anyarray(i) = elemcreate(i) - case "cast" => - val arr = new Array[T](sz) - for (i <- 0 until sz) arr(i) = elemcreate(i) - castarray = arr - case "gencast" => - gencastarray = new Array[T](sz) - for (i <- 0 until sz) gencastarray(i) = elemcreate(i) - case "manif" => - manifarray = new Array[T](sz) - for (i <- 0 until sz) manifarray(i) = elemcreate(i) - case "unknown" => - manifarray = new Array[T](sz) - for (i <- 0 until sz) manifarray(i) = elemcreate(i) - case _ => - } -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala deleted file mode 100644 index 46a28ae111..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala +++ /dev/null @@ -1,38 +0,0 @@ -package scala.collection.parallel.benchmarks.arrays - - - - -trait UnknownManif[T] { - def manifarray: Array[T] - def size: Int - - def rununknown { - val arr = manifarray - val sz = size - var i = 0 - while (i < sz) { - val d = arr(i) - op(d) - i += 1 - } - } - - def op(d: Any) {} -} - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala deleted file mode 100644 index 3b5308f8c2..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala +++ /dev/null @@ -1,83 +0,0 @@ -package scala.collection.parallel.benchmarks.generic - - - - -class Dummy(val in: Int) { - var num = in - override def toString = in.toString - override def hashCode = in - def dummy = num + in - def one = "1".length -} - - -object DummyOperators extends Operators[Dummy] { - val foreachFun = (a: Dummy) => { - a - () - } - val reducer = (a: Dummy, b: Dummy) => { - var i = 0 - if (a.in > b.in) { - a.num = a.in + b.in + i - a - } else { - b.num = a.in + b.in + i - b - } - } - private def rec(a: Int, b: Int): Int = { - val result = if (b == 0) a else { - rec(b, a - b * (a / b)) - } - result + 1000 - } - val mediumreducer = (a: Dummy, b: Dummy) => { - var i = 0 - var sum = a.num + b.num - b.num = rec(a.num, b.num) - b - } - val filterer = (a: Dummy) => { - a.in % 2 == 0 - } - val mapper = (a: Dummy) => { - a.num = a.dummy + a.num + a.in + a.one - a - } - override val mapper2 = (a: Dummy) => { - val x = 1 - new Dummy(a.in * -2 + x) - } - val heavymapper = (a: Dummy) => { - var i = -100 - while (i < 0) { - if (a.in < i) a.num += 1 - i += 1 - } - a - } - val flatmapper = (a: Dummy) => { - List(a, a, a, a, a) - } - val taker = (a: Dummy) => { - a.in >= 0 - } - val eachFun: Dummy => Unit = (d: Dummy) => { - d.dummy - } - override val eachPairFun: ((Dummy, Dummy)) => Unit = p => { - p._1.dummy - p._2.dummy - } - override def sequence(sz: Int): Seq[Dummy] = { - val pa = new collection.parallel.mutable.ParArray[Dummy](sz) - for (i <- 0 until sz) pa(i) = new Dummy(i) - pa - } -} - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala deleted file mode 100644 index 539e3f6972..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala +++ /dev/null @@ -1,64 +0,0 @@ -package scala.collection.parallel.benchmarks.generic - - - - - - -trait Operators[T] { - - def foreachFun: T => Unit - def reducer: (T, T) => T - def mediumreducer: (T, T) => T - def filterer: T => Boolean - def mapper: T => T - def mapper2: T => T = error("unsupported") - def heavymapper: T => T - def flatmapper: T => Seq[T] - def taker: T => Boolean - def eachFun: T => Unit - def eachPairFun: ((T, T)) => Unit = error("unsupported") - def sequence(sz: Int): Seq[T] = error("unsupported") - -} - - - -trait IntOperators extends Operators[Int] { - - val foreachFun: Int => Unit = x => () - val reducer: (Int, Int) => Int = _ + _ - val mediumreducer: (Int, Int) => Int = (a: Int, b: Int) => { - val result = if (b == 0) a else { - mediumreducer.apply(b, a - b * (a / b)) - } - result + 1000 - } - val filterer: Int => Boolean = _ % 2 == 0 - val mapper: Int => Int = _ * 2 - val heavymapper: Int => Int = (n: Int) => { - var i = -10 - var sum = 0 - while (i < 0) { - sum += -i - i += 1 - } - n + sum - } - val flatmapper: Int => Seq[Int] = (n: Int) => { - List(n, n, n, n, n) - } - val taker: Int => Boolean = _ < 10000 - val eachFun: Int => Unit = { n => - n % 2 == 0 - } - -} - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala deleted file mode 100644 index c39c384927..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala +++ /dev/null @@ -1,362 +0,0 @@ -package scala.collection.parallel -package benchmarks -package generic - - - -import scala.collection.SeqView - - - -trait ParIterableBenches[T, Coll <: ParIterable[T]] { -self => - - def createSequential(sz: Int, p: Int): Iterable[T] - def createParallel(sz: Int, p: Int): Coll - def nameOfCollection: String - def operators: Operators[T] - - trait IterableBenchCompanion extends BenchCompanion { - def collectionName = self.nameOfCollection - } - - trait IterableBench extends collection.parallel.benchmarks.Bench { - protected var seqcoll: Iterable[T] = null - protected var parcoll: Coll = null.asInstanceOf[Coll] - - reset - - def reset = runWhat match { - case "seq" => this.seqcoll = createSequential(size, parallelism) - case "par" => this.parcoll = createParallel(size, parallelism) - case _ => - } - - def nameOfCollection = self.nameOfCollection - def operators = self.operators - def createSequential(sz: Int, p: Int) = self.createSequential(size, parallelism) - def createParallel(sz: Int, p: Int) = self.createParallel(size, parallelism) - def forkJoinPool: scala.concurrent.forkjoin.ForkJoinPool = self.forkJoinPool - - override def printResults { - println(" --- Fork join pool state --- ") - println("Parallelism: " + forkJoinPool.getParallelism) - println("Active threads: " + forkJoinPool.getActiveThreadCount) - println("Work stealings: " + forkJoinPool.getStealCount) - } - - } - - def forkJoinPool: scala.concurrent.forkjoin.ForkJoinPool - -} - - -trait ParSeqBenches[T, Coll <: ParSeq[T]] extends ParIterableBenches[T, Coll] { -self => - - def createSequential(sz: Int, p: Int): Seq[T] - - trait SeqBenchCompanion extends BenchCompanion { - def collectionName = self.nameOfCollection - } - - trait SeqBench extends IterableBench { - def seqcollAsSeq = seqcoll.asInstanceOf[Seq[T]] - override def createSequential(sz: Int, p: Int) = self.createSequential(sz, p) - } - -} - - - - -/** Standard benchmarks for collections. - */ -trait StandardParIterableBenches[T, Coll <: ParIterable[T]] extends ParIterableBenches[T, Coll] { - - object Reduce extends IterableBenchCompanion { - override def defaultSize = 50000 - def benchName = "reduce"; - def apply(sz: Int, p: Int, w: String) = new Reduce(sz, p, w) - } - - class Reduce(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.reduceLeft(operators.reducer) - def runpar = this.parcoll.reduce(operators.reducer) - def companion = Reduce - } - - object ReduceMedium extends IterableBenchCompanion { - override def defaultSize = 5000 - def benchName = "reduce-medium"; - def apply(sz: Int, p: Int, w: String) = new ReduceMedium(sz, p, w) - } - - class ReduceMedium(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.reduceLeft(operators.mediumreducer) - def runpar = this.parcoll.reduce(operators.mediumreducer) - def companion = ReduceMedium - } - - object Map extends IterableBenchCompanion { - override def defaultSize = 5000 - def benchName = "map"; - def apply(sz: Int, p: Int, w: String) = new Map(sz, p, w) - } - - class Map(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.map(operators.mapper) - def runpar = this.parcoll.map(operators.mapper) - def companion = Map - } - - object Filter extends IterableBenchCompanion { - override def defaultSize = 5000 - def benchName = "filter"; - def apply(sz: Int, p: Int, w: String) = new Filter(sz, p, w) - } - - class Filter(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.filter(operators.filterer) - def runpar = this.parcoll.filter(operators.filterer) - def companion = Filter - } - - object FlatMap extends IterableBenchCompanion { - override def defaultSize = 5000 - def benchName = "flatmap"; - def apply(sz: Int, p: Int, w: String) = new FlatMap(sz, p, w) - } - - class FlatMap(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.flatMap(operators.flatmapper) - def runpar = this.parcoll.flatMap(operators.flatmapper) - def companion = FlatMap - } - -} - - - -/** Benchmarks for sequence views. - */ -trait ParSeqViewBenches[T, Coll <: ParSeqView[T, ParSeq[T], CollSeq], CollSeq] extends ParSeqBenches[T, Coll] { -self => - - trait SeqViewBench extends SeqBench { - lazy val seqview: SeqView[T, Seq[T]] = createSeqView(size, parallelism) - - def createSeqView(sz: Int, p: Int) = self.createSeqView(sz, p) - } - - def createSeqView(sz: Int, p: Int): SeqView[T, Seq[T]] - - object Iteration extends SeqBenchCompanion { - override def defaultSize = 250000 - def benchName = "iter" - def apply(sz: Int, p: Int, w: String) = new Iteration(sz, p, w) - } - - class Iteration(val size: Int, val parallelism: Int, val runWhat: String) - extends SeqBench with SeqViewBench { - def comparisonMap = collection.Map("seqview" -> runseqview _) - def runseq = this.seqcoll.foreach(operators.eachFun) - def runpar = this.parcoll.pforeach(operators.eachFun) - def runseqview = { - this.seqview.foreach(operators.eachFun) - } - def companion = Iteration - } - - object IterationS extends SeqBenchCompanion { - override def defaultSize = 250000 - def benchName = "iter-s" - def apply(sz: Int, p: Int, w: String) = new IterationS(sz, p, w) - } - - class IterationS(val size: Int, val parallelism: Int, val runWhat: String) - extends SeqBench with SeqViewBench { - def comparisonMap = collection.Map("seqview" -> runseqview _) - def runseq = this.seqcoll.slice(0, size / 2).foreach(operators.eachFun) - def runpar = this.parcoll.slice(0, size / 2).pforeach(operators.eachFun) - def runseqview = this.seqview.slice(0, size / 2).foreach(operators.eachFun) - def companion = IterationS - } - - object IterationM extends SeqBenchCompanion { - override def defaultSize = 100000 - def benchName = "iter-m" - def apply(sz: Int, p: Int, w: String) = new IterationM(sz, p, w) - } - - class IterationM(val size: Int, val parallelism: Int, val runWhat: String) - extends SeqBench with SeqViewBench { - def comparisonMap = collection.Map("seqview" -> runseqview _) - def runseq = this.seqcoll.map(operators.mapper).foreach(operators.eachFun) - def runpar = this.parcoll.map(operators.mapper).pforeach(operators.eachFun) - def runseqview = this.seqview.map(operators.mapper).foreach(operators.eachFun) - def companion = IterationM - } - - object IterationA extends SeqBenchCompanion { - override def defaultSize = 50000 - def benchName = "iter-a" - def apply(sz: Int, p: Int, w: String) = new IterationA(sz, p, w) - } - - class IterationA(val size: Int, val parallelism: Int, val runWhat: String) - extends SeqBench with SeqViewBench { - val appended = operators.sequence(size) - val sqappended = appended.toSeq - def comparisonMap = collection.Map("seqview" -> runseqview _) - def runseq = { - val withapp = this.seqcoll.++(sqappended) - withapp.foreach(operators.eachFun) - } - def runpar = this.parcoll.++(appended).pforeach(operators.eachFun) - def runseqview = this.seqview.++(appended).foreach(operators.eachFun) - def companion = IterationA - } - - object IterationZ extends SeqBenchCompanion { - override def defaultSize = 50000 - def benchName = "iter-z" - def apply(sz: Int, p: Int, w: String) = new IterationZ(sz, p, w) - } - - class IterationZ(val size: Int, val parallelism: Int, val runWhat: String) - extends SeqBench with SeqViewBench { - val zipped = operators.sequence(size) - def comparisonMap = collection.Map("seqview" -> runseqview _) - def runseq = { - val withzip = this.seqcoll.zip(zipped) - withzip.foreach(operators.eachPairFun) - } - def runpar = this.parcoll.zip(zipped).pforeach(operators.eachPairFun) - def runseqview = this.seqview.zip(zipped).foreach(operators.eachPairFun) - def companion = IterationZ - } - - object IterationP extends SeqBenchCompanion { - override def defaultSize = 50000 - def benchName = "iter-p" - def apply(sz: Int, p: Int, w: String) = new IterationP(sz, p, w) - } - - class IterationP(val size: Int, val parallelism: Int, val runWhat: String) - extends SeqBench with SeqViewBench { - val patch = operators.sequence(size / 4) - val sqpatch = patch.toSeq - def comparisonMap = collection.Map("seqview" -> runseqview _) - def runseq = { - val withpatch = this.seqcollAsSeq.patch(size / 4, sqpatch, size / 2) - withpatch.foreach(operators.eachFun) - } - def runpar = this.parcoll.patch(size / 4, patch, size / 2).pforeach(operators.eachFun) - def runseqview = this.seqview.patch(size / 4, patch, size / 2).foreach(operators.eachFun) - def companion = IterationP - } - - object Reduce extends SeqBenchCompanion { - override def defaultSize = 50000 - def benchName = "reduce"; - def apply(sz: Int, p: Int, w: String) = new Reduce(sz, p, w) - } - - class Reduce(val size: Int, val parallelism: Int, val runWhat: String) - extends SeqBench with SeqViewBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.reduceLeft(operators.reducer) - def runpar = this.parcoll.reduce(operators.reducer) - def companion = Reduce - } - - object MediumReduce extends SeqBenchCompanion { - override def defaultSize = 50000 - def benchName = "reduce-medium"; - def apply(sz: Int, p: Int, w: String) = new MediumReduce(sz, p, w) - } - - class MediumReduce(val size: Int, val parallelism: Int, val runWhat: String) - extends SeqBench with SeqViewBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.reduceLeft(operators.mediumreducer) - def runpar = this.parcoll.reduce(operators.mediumreducer) - def companion = Reduce - } - - object ModifyThenReduce extends SeqBenchCompanion { - override def defaultSize = 20000 - def benchName = "modify-then-reduce"; - def apply(sz: Int, p: Int, w: String) = new ModifyThenReduce(sz, p, w) - } - - class ModifyThenReduce(val size: Int, val parallelism: Int, val runWhat: String) - extends SeqBench with SeqViewBench { - val toadd = createSequential(size, parallelism) - def comparisonMap = collection.Map() - def runseq = { - val modified = (seqcoll ++ toadd).drop(size).map(operators.mapper).++(toadd).take(size) - modified.reduceLeft(operators.reducer) - } - def runpar = { - val modified = (parcoll ++ toadd).drop(size).map(operators.mapper).++(toadd).take(size) - modified.reduce(operators.reducer) - } - def companion = ModifyThenReduce - } - - object ModifyThenForce extends SeqBenchCompanion { - override def defaultSize = 20000 - def benchName = "modify-then-force"; - def apply(sz: Int, p: Int, w: String) = new ModifyThenForce(sz, p, w) - } - - class ModifyThenForce(val size: Int, val parallelism: Int, val runWhat: String) - extends SeqBench with SeqViewBench { - val toadd = createSequential(size, parallelism) - def comparisonMap = collection.Map() - def runseq = (seqcoll ++ toadd).drop(size).map(operators.mapper).++(toadd).take(size) - def runpar = { - val r: ParSeqView[T, ParSeq[T], Seq[T]] = (parcoll ++ toadd).drop(size).map(operators.mapper).++(toadd).take(size) - r.force - } - def companion = ModifyThenForce - } - -} - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala deleted file mode 100644 index 17f0315103..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala +++ /dev/null @@ -1,144 +0,0 @@ -package scala.collection.parallel.benchmarks.hashtables - - - - -import scala.collection.parallel.benchmarks.generic.StandardParIterableBenches -import scala.collection.parallel.benchmarks.generic.Dummy -import scala.collection.parallel.benchmarks.generic.DummyOperators -import scala.collection.parallel.mutable.ParHashSet - - - - - -trait ParHashTableSetBenches[T] extends StandardParIterableBenches[T, ParHashSet[T]] { - - def nameOfCollection = "mutable.ParHashSet" - def comparisonMap = collection.mutable.Set() - val forkJoinPool = new scala.concurrent.forkjoin.ForkJoinPool - - object Map2 extends IterableBenchCompanion { - override def defaultSize = 50000 - override def comparisons = List() - def benchName = "map2"; - def apply(sz: Int, p: Int, w: String) = new Map2(sz, p, w) - } - - class Map2(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - var result: Int = 0 - def comparisonMap = collection.Map() - def runseq = { - val r = this.seqcoll.asInstanceOf[collection.mutable.HashSet[T]].map(operators.mapper2) - result = r.size - } - def runpar = { - result = this.parcoll.map(operators.mapper2).size - } - def companion = Map2 - override def repetitionsPerRun = 50 - override def printResults { - println("Size of last result: " + result) - } - } - - object HeavyMap extends IterableBenchCompanion { - override def defaultSize = 5000 - override def comparisons = List() - def benchName = "heavy-map"; - def apply(sz: Int, p: Int, w: String) = new HeavyMap(sz, p, w) - } - - class HeavyMap(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - var result: Int = 0 - def comparisonMap = collection.Map() - def runseq = { - val r = this.seqcoll.asInstanceOf[collection.mutable.HashSet[T]].map(operators.heavymapper) - result = r.size - } - def runpar = { - result = this.parcoll.map(operators.heavymapper).size - } - def companion = HeavyMap - override def repetitionsPerRun = 50 - } - - object Reduce2 extends IterableBenchCompanion { - override def defaultSize = 50000 - override def comparisons = List() - def benchName = "reduce2"; - def apply(sz: Int, p: Int, w: String) = new Reduce2(sz, p, w) - } - - class Reduce2(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.reduceLeft(operators.mediumreducer) - def runpar = this.parcoll.reduce(operators.mediumreducer) - def companion = Reduce2 - } - - object Foreach extends IterableBenchCompanion { - override def defaultSize = 50000 - override def comparisons = List() - def benchName = "foreach"; - def apply(sz: Int, p: Int, w: String) = new Foreach(sz, p, w) - } - - class Foreach(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.foreach(operators.foreachFun) - def runpar = this.parcoll.pforeach(operators.foreachFun) - def companion = Foreach - } - -} - - - - - -object RefParHashTableSetBenches extends ParHashTableSetBenches[Dummy] { - - object ForeachSet extends IterableBenchCompanion { - override def defaultSize = 50000 - override def comparisons = List() - def benchName = "foreach-set"; - def apply(sz: Int, p: Int, w: String) = new ForeachSet(sz, p, w) - } - - class ForeachSet(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - val array = new Array[Int](size) - def comparisonMap = collection.Map() - def runseq = for (x <- this.seqcoll) array(x.in) += 1 - def runpar = this.parcoll.pforeach { x => array(x.in) += 1 } - def companion = ForeachSet - - override def onEnd { - for (i <- 0 until array.length) { - assert(array(i) == repetitionsPerRun * runs) - } - } - } - - val operators = DummyOperators - - def createSequential(sz: Int, p: Int) = { - val ht = new collection.mutable.HashSet[Dummy] - for (i <- 0 until sz) ht += new Dummy(i) - ht - } - - def createParallel(sz: Int, p: Int) = { - val phm = new ParHashSet[Dummy] - for (i <- 0 until sz) phm += new Dummy(i) - forkJoinPool.setParallelism(p) - collection.parallel.tasksupport.environment = forkJoinPool - phm - } - -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala deleted file mode 100644 index 79d038bf3d..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala +++ /dev/null @@ -1,232 +0,0 @@ -package scala.collection.parallel.benchmarks.hashtables - - - - -import scala.collection.parallel.benchmarks.generic.StandardParIterableBenches -import scala.collection.parallel.benchmarks.generic.Dummy -import scala.collection.parallel.benchmarks.generic.Operators -import scala.collection.parallel.mutable.ParHashMap - - - - - -trait ParHashTableBenches[K, V] extends StandardParIterableBenches[(K, V), ParHashMap[K, V]] { - - def nameOfCollection = "mutable.ParHashMap" - def comparisonMap = collection.mutable.Map() - val forkJoinPool = new scala.concurrent.forkjoin.ForkJoinPool - - object Map2 extends IterableBenchCompanion { - override def defaultSize = 40000 - override def comparisons = List("jhashtable") - def benchName = "map2"; - def apply(sz: Int, p: Int, w: String) = new Map2(sz, p, w) - } - - class Map2(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - var result: Int = 0 - def comparisonMap = collection.Map("jhashtable" -> runjhashtable _) - def runseq = { - val r = this.seqcoll.asInstanceOf[collection.mutable.HashMap[K, V]].map(operators.mapper2) - result = r.size - } - def runpar = { - result = this.parcoll.map(operators.mapper2).size - } - def runjhashtable = { - val jumap = new java.util.HashMap[K, V]() - val it = this.seqcoll.iterator - val f = operators.mapper2 - while (it.hasNext) { - val p = f(it.next) - jumap.put(p._1, p._2) - } - result = jumap.size - } - override def reset = runWhat match { - case "jhashtable" => this.seqcoll = createSequential(size, parallelism) - case _ => super.reset - } - def companion = Map2 - override def repetitionsPerRun = 50 - override def printResults { - println("Size of last result: " + result) - } - } - - object FlatMap2 extends IterableBenchCompanion { - override def defaultSize = 5000 - def benchName = "flatmap2"; - def apply(sz: Int, p: Int, w: String) = new FlatMap2(sz, p, w) - } - - class FlatMap2(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def comparisonMap = collection.Map() - override def repetitionsPerRun = 25 - def runseq = this.seqcoll.flatMap(operators.flatmapper) - def runpar = this.parcoll.flatMap(operators.flatmapper) - def companion = FlatMap2 - } - - object HeavyMap extends IterableBenchCompanion { - override def defaultSize = 5000 - override def comparisons = List() - def benchName = "heavy-map"; - def apply(sz: Int, p: Int, w: String) = new HeavyMap(sz, p, w) - } - - class HeavyMap(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - var result: Int = 0 - def comparisonMap = collection.Map() - def runseq = { - val r = this.seqcoll.asInstanceOf[collection.mutable.HashMap[K, V]].map(operators.heavymapper) - result = r.size - } - def runpar = { - result = this.parcoll.map(operators.heavymapper).size - } - def companion = HeavyMap - override def repetitionsPerRun = 50 - } - - object Reduce2 extends IterableBenchCompanion { - override def defaultSize = 50000 - override def comparisons = List() - def benchName = "reduce2"; - def apply(sz: Int, p: Int, w: String) = new Reduce2(sz, p, w) - } - - class Reduce2(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.reduceLeft(operators.mediumreducer) - def runpar = this.parcoll.reduce(operators.mediumreducer) - def companion = Reduce2 - } - - object Foreach extends IterableBenchCompanion { - override def defaultSize = 50000 - override def comparisons = List() - def benchName = "foreach"; - def apply(sz: Int, p: Int, w: String) = new Foreach(sz, p, w) - } - - class Foreach(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def comparisonMap = collection.Map() - def runseq = this.seqcoll.foreach(operators.foreachFun) - def runpar = this.parcoll.pforeach(operators.foreachFun) - def companion = Foreach - } - -} - - - - - -object RefParHashTableBenches extends ParHashTableBenches[Dummy, Dummy] { - - type DPair = (Dummy, Dummy); - - object ForeachSet extends IterableBenchCompanion { - override def defaultSize = 50000 - override def comparisons = List() - def benchName = "foreach-set"; - def apply(sz: Int, p: Int, w: String) = new ForeachSet(sz, p, w) - } - - class ForeachSet(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - val array = new Array[Int](size) - def comparisonMap = collection.Map() - def runseq = for (p <- this.seqcoll) array(p._1.in) += 1 - def runpar = this.parcoll.pforeach { p => array(p._1.in) += 1 } - def companion = ForeachSet - - override def onEnd { - for (i <- 0 until array.length) { - assert(array(i) == repetitionsPerRun * runs) - } - } - } - - object operators extends Operators[DPair] { - def gcd(a: Int, b: Int): Int = { - val result = if (b == 0) a else { - gcd(b, a - b * (a / b)) - } - result + 1000 - } - def heavy(a: Int): Int = { - var i = 0 - var sum = a - while (i < 3000) { - i += 1 - sum += a + i - } - sum - } - val foreachFun = (t: DPair) => { - t - () - } - val reducer = (x: DPair, y: DPair) => { - //y._2.num = x._2.in + y._2.in - y - } - val mediumreducer = (x: DPair, y: DPair) => { - y._2.num = gcd(x._2.in, y._2.in) - y - } - val filterer = (p: DPair) => { - p._1.num % 2 == 0 - } - val mapper = (p: DPair) => { - val a = p._1 - a.num = a.in % 2 - (a, p._2) - } - val flatmapper = (p: DPair) => { - for (i <- 0 until 20) yield p - } - override val mapper2 = (p: DPair) => { - val a = 1 //heavy(p._1.in) - (new Dummy(p._1.in * -2 + a), p._2) - } - val heavymapper = (p: DPair) => { - var i = -2000 - var t = p._1.in - while (i < 0) { - t += (p._2.num - p._1.num) / 500 - p._1.num += p._2.num + t - i += 1 - } - (p._1, new Dummy(0)) - } - val taker = (p: DPair) => true - val eachFun: DPair => Unit = { dp => - dp._1.dummy - } - } - - def createSequential(sz: Int, p: Int) = { - val ht = new collection.mutable.HashMap[Dummy, Dummy] - for (i <- 0 until sz) ht += ((new Dummy(i), new Dummy(i))) - ht - } - - def createParallel(sz: Int, p: Int) = { - val phm = new ParHashMap[Dummy, Dummy] - for (i <- 0 until sz) phm += ((new Dummy(i), new Dummy(i))) - forkJoinPool.setParallelism(p) - collection.parallel.tasksupport.environment = forkJoinPool - phm - } - -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Combine.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Combine.scala deleted file mode 100644 index 96598840fd..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Combine.scala +++ /dev/null @@ -1,66 +0,0 @@ -package scala.collection.parallel.benchmarks -package hashtries - - - - -import collection.immutable.{HashMap => HashTrie} -import collection.mutable.HashMap - - - - - - -class Combine(val size: Int, val parallelism: Int, val runWhat: String) extends Bench with IntInit { - var thattrie = new HashTrie[Int, Int] - for (i <- size until 2 * size) thattrie += ((i, i)) - val thatmap = new HashMap[Int, Int] - for (i <- size until 2 * size) thatmap += ((i, i)) - - def runpar = throw new UnsupportedOperationException - def runseq = runhashtrie - def runhashtrie = { - hashtrie merge thattrie - // println - // println("both tries: " + HashTrie.bothtries) - // println("one trie, one item: " + HashTrie.onetrie) - // println("both single: " + HashTrie.bothsingle) - // System exit 1 - } - def rundestructive = { - hashtrie merge thattrie - } - def runappendtrie = hashtrie ++ thattrie - def runhashmap = hashmap ++ thatmap - def companion = Combine - def comparisonMap = Map("hashtrie" -> runhashtrie _, "hashmap" -> runhashmap _, "destruct" -> rundestructive _, "appendtrie" -> runappendtrie _) - override def reset = runWhat match { - case "appendtrie" => initHashTrie - case "destruct" => initHashTrie - case _ => super.reset - } -} - - -object Combine extends BenchCompanion { - def collectionName = "HashTrie" - def benchName = "combine"; - def apply(sz: Int, p: Int, what: String) = new Combine(sz, p, what) - override def defaultSize = 5000 -} - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Construct.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Construct.scala deleted file mode 100644 index f65a349ec5..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Construct.scala +++ /dev/null @@ -1,54 +0,0 @@ -package scala.collection.parallel.benchmarks -package hashtries - - - - -import collection.immutable.{HashMap => HashTrie} -import collection.mutable.HashMap - - - - - - -class Construct(val size: Int, val parallelism: Int, val runWhat: String) extends Bench { - def reset {} - - def runpar = throw new UnsupportedOperationException - def runseq = throw new UnsupportedOperationException - def runhashmap = { - val hashmap = new HashMap[Int, Int] - for (i <- 0 until size) hashmap += ((i, i)) - } - def runhashtrie = { - var hashtrie = new HashTrie[Int, Int] - for (i <- 0 until size) hashtrie += ((i, i)) - } - - def companion = Construct - def comparisonMap = Map("hashmap" -> runhashmap _, "hashtrie" -> runhashtrie _) -} - - -object Construct extends BenchCompanion { - def collectionName = "HashTrie" - def benchName = "construct"; - def apply(sz: Int, p: Int, what: String) = new Construct(sz, p, what) - override def defaultSize = 5000 -} - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala deleted file mode 100644 index f53ea02e36..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala +++ /dev/null @@ -1,45 +0,0 @@ -package scala.collection.parallel.benchmarks -package hashtries - - - - -import collection.immutable.{HashMap => HashTrie} -import collection.mutable.HashMap - - - - - - -class Foreach(val size: Int, val parallelism: Int, val runWhat: String) extends Bench with IntInit { - def runpar = throw new UnsupportedOperationException - def runseq = runhashtrie - def runhashmap = hashmap.foreach(n => ()) - def runhashtrie = hashtrie.foreach(n => ()) - def companion = Foreach - def comparisonMap = Map("hashmap" -> runhashmap _, "hashtrie" -> runhashtrie _) -} - - -object Foreach extends BenchCompanion { - def collectionName = "HashTrie" - def benchName = "foreach-light"; - def apply(sz: Int, p: Int, what: String) = new Foreach(sz, p, what) - override def defaultSize = 25000 -} - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala deleted file mode 100644 index 79ebd0e98c..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala +++ /dev/null @@ -1,31 +0,0 @@ -package scala.collection.parallel.benchmarks -package hashtries - - - - -import collection.immutable.{HashMap => HashTrie} -import collection.mutable.HashMap - - - -trait IntInit extends Bench { - var hashmap: HashMap[Int, Int] = null - var hashtrie: HashTrie[Int, Int] = null - - reset - def reset = runWhat match { - case "hashmap" => initHashMap - case "hashtrie" => initHashTrie - case "seq" => initHashTrie - } - def initHashTrie = { - hashtrie = new HashTrie - for (i <- 0 until size) hashtrie += ((i, i)) - } - def initHashMap = { - hashmap = new HashMap - for (i <- 0 until size) hashmap += ((i, i)) - } - -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala deleted file mode 100644 index d27aa200b8..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala +++ /dev/null @@ -1,51 +0,0 @@ -package scala.collection.parallel.benchmarks -package hashtries - - - - -import collection.immutable.{HashMap => HashTrie} -import collection.mutable.HashMap - - - - - - -class Iterate(val size: Int, val parallelism: Int, val runWhat: String) extends Bench with IntInit { - def runpar = throw new UnsupportedOperationException - def runseq = throw new UnsupportedOperationException - def runhashmap = { - val it = hashmap.iterator - while (it.hasNext) it.next - } - def runhashtrie = { - val it = hashtrie.iterator - while (it.hasNext) it.next - } - def companion = Iterate - def comparisonMap = Map("hashmap" -> runhashmap _, "hashtrie" -> runhashtrie _) -} - - -object Iterate extends BenchCompanion { - def collectionName = "HashTrie" - def benchName = "iterate-light"; - def apply(sz: Int, p: Int, what: String) = new Iterate(sz, p, what) - override def defaultSize = 25000 -} - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala deleted file mode 100644 index 4ee8c17118..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala +++ /dev/null @@ -1,57 +0,0 @@ -package scala.collection.parallel.benchmarks -package hashtries - - - - -import collection.immutable.{HashMap => HashTrie} -import collection.mutable.HashMap - - - - - - -class Lookup(val size: Int, val parallelism: Int, val runWhat: String) extends Bench with IntInit { - def runpar = throw new UnsupportedOperationException - def runseq = throw new UnsupportedOperationException - def runhashmap = { - var i = 0 - while (i < size) { - hashmap(i) - i += 1 - } - } - def runhashtrie = { - var i = 0 - while (i < size) { - hashtrie(i) - i += 1 - } - } - def companion = Iterate - def comparisonMap = Map("hashmap" -> runhashmap _, "hashtrie" -> runhashtrie _) -} - - -object Lookup extends BenchCompanion { - def collectionName = "HashTrie" - def benchName = "lookup"; - def apply(sz: Int, p: Int, what: String) = new Lookup(sz, p, what) - override def defaultSize = 25000 -} - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala deleted file mode 100644 index c08d6b5cad..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala +++ /dev/null @@ -1,87 +0,0 @@ -package scala.collection.parallel.benchmarks -package hashtries - - - - -import collection.immutable.{HashMap => HashTrie} -import collection.mutable.HashMap - - - - - - -class MultipleCombine(val size: Int, val parallelism: Int, val runWhat: String) extends Bench with IntInit { - var combines = 10 - - var thattries = new Array[HashTrie[Int, Int]](combines) - def initTries = for (r <- 0 until combines) { - var thattrie = new HashTrie[Int, Int] - for (i <- ((r + 1) * size) until ((r + 2) * size)) thattrie += ((i, i)) - thattries(r) = thattrie - } - initTries - - val thatmaps = new Array[HashMap[Int, Int]](10) - def initMaps = for (r <- 0 until combines) { - var thatmap = new HashMap[Int, Int] - for (i <- ((r + 1) * size) until ((r + 2) * size)) thatmap += ((i, i)) - thatmaps(r) = thatmap - } - initMaps - - override def repetitionsPerRun = 25 - def runpar = throw new UnsupportedOperationException - def runseq = runhashtrie - def runhashtrie = { - initHashTrie - var trie = hashtrie - for (r <- 0 until combines) trie = trie merge thattries(r) - } - def runappendtrie = { - initHashTrie - var trie = hashtrie - for (r <- 0 until combines) trie = trie ++ thattries(r) - } - def runhashmap = { - initHashMap - var map = hashmap - for (r <- 0 until combines) map = map ++ thatmaps(r) - } - def rundestructive = { - initHashTrie - var trie = hashtrie - for (r <- 0 until combines) trie = trie merge thattries(r) - } - def companion = MultipleCombine - def comparisonMap = Map("hashtrie" -> runhashtrie _, "hashmap" -> runhashmap _, "appendtrie" -> runappendtrie _, "destruct" -> rundestructive _) - override def reset = runWhat match { - case "appendtrie" => initHashTrie - case "destruct" => initHashTrie - case _ => super.reset - } -} - - -object MultipleCombine extends BenchCompanion { - def collectionName = "HashTrie" - def benchName = "multi-combine"; - def apply(sz: Int, p: Int, what: String) = new MultipleCombine(sz, p, what) - override def defaultSize = 5000 -} - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala deleted file mode 100644 index dc8804cf57..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala +++ /dev/null @@ -1,180 +0,0 @@ -package scala.collection.parallel.benchmarks.hashtries - - - - -import scala.collection.parallel.benchmarks.generic.StandardParIterableBenches -import scala.collection.parallel.benchmarks.generic.Dummy -import scala.collection.parallel.benchmarks.generic.Operators -import scala.collection.parallel.immutable.ParHashMap - - - - - -trait ParHashTrieBenches[K, V] extends StandardParIterableBenches[(K, V), ParHashMap[K, V]] { - - def nameOfCollection = "immutable.ParHashMap" - def comparisonMap = collection.Map() - val forkJoinPool = new scala.concurrent.forkjoin.ForkJoinPool - - object Map2 extends IterableBenchCompanion { - override def defaultSize = 5000 - override def comparisons = List("jhashtable", "hashtable") - def benchName = "map2"; - def apply(sz: Int, p: Int, w: String) = new Map2(sz, p, w) - } - - class Map2(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - var result: Int = 0 - def comparisonMap = collection.Map("jhashtable" -> runjhashtable _, "hashtable" -> runhashtable _) - def runseq = { - val r = this.seqcoll.asInstanceOf[collection.immutable.HashMap[K, V]].map(operators.mapper2) - result = r.size - } - def runpar = { - result = this.parcoll.map(operators.mapper2).size - } - def runjhashtable = { - val jumap = new java.util.HashMap[K, V]() - val it = this.seqcoll.iterator - while (it.hasNext) { - val p = it.next - jumap.put(p._1, p._2) - } - result = jumap.size - } - def runhashtable = { - val smap = collection.mutable.HashMap[K, V]() - val it = this.seqcoll.iterator - while (it.hasNext) { - val p = it.next - smap.put(p._1, p._2) - } - result = smap.size - } - override def reset = runWhat match { - case "jhashtable" => this.seqcoll = createSequential(size, parallelism) - case "hashtable" => this.seqcoll = createSequential(size, parallelism) - case _ => super.reset - } - def companion = Map2 - override def repetitionsPerRun = 50 - override def printResults { - println("Size of last result: " + result) - } - } - - object Reduce2 extends IterableBenchCompanion { - override def defaultSize = 50000 - override def comparisons = List("hashtable") - def benchName = "reduce2"; - def apply(sz: Int, p: Int, w: String) = new Reduce2(sz, p, w) - } - - class Reduce2(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - private var ht: collection.mutable.HashMap[K, V] = _ - def comparisonMap = collection.Map("hashtable" -> runhashtable _) - def runseq = this.seqcoll.reduceLeft(operators.reducer) - def runpar = this.parcoll.reduce(operators.reducer) - def runhashtable = ht.reduceLeft(operators.reducer) - override def reset = runWhat match { - case "hashtable" => ht = createHashTable(size) - case _ => super.reset - } - def companion = Reduce2 - } - - def createHashTable(sz: Int): collection.mutable.HashMap[K, V] - -} - - - - - -object RefParHashTrieBenches extends ParHashTrieBenches[Dummy, Dummy] { - - type DPair = (Dummy, Dummy) - - object operators extends Operators[DPair] { - def gcd(a: Int, b: Int): Int = { - val result = if (b == 0) a else { - gcd(b, a - b * (a / b)) - } - result + 1000 - } - def heavy(a: Int): Int = { - var i = 0 - var sum = a - while (i < 3000) { - i += 1 - sum += a + i - } - sum - } - val foreachFun = (t: DPair) => { - t - () - } - val reducer = (x: DPair, y: DPair) => { - //y._2.num = x._2.in + y._2.in - y - } - val mediumreducer = (x: DPair, y: DPair) => { - y._2.num = gcd(x._2.in, y._2.in) - y - } - val filterer = (p: DPair) => { - p._1.num % 2 == 0 - } - val mapper = (p: DPair) => { - val a = p._1 - a.num = a.in % 2 - (a, p._2) - } - val flatmapper = (p: DPair) => { - List(p, p, p, p, p) - } - override val mapper2 = (p: DPair) => { - val a = 1 //heavy(p._1.in) - (new Dummy(p._1.in * -2 + a), p._2) - } - val heavymapper = (p: DPair) => { - val a = p._1 - var i = -100 - while (i < 0) { - if (a.in < i) a.num += 1 - i += 1 - } - (a, p._2) - } - val taker = (p: DPair) => true - val eachFun: DPair => Unit = { dp => - dp._1.dummy - } - } - - def createSequential(sz: Int, p: Int) = { - var ht = new collection.immutable.HashMap[Dummy, Dummy] - for (i <- 0 until sz) ht += ((new Dummy(i), new Dummy(i))) - ht - } - - def createParallel(sz: Int, p: Int) = { - var pht = new ParHashMap[Dummy, Dummy] - for (i <- 0 until sz) pht += ((new Dummy(i), new Dummy(i))) - forkJoinPool.setParallelism(p) - collection.parallel.tasksupport.environment = forkJoinPool - pht - } - - def createHashTable(sz: Int) = { - val hm = collection.mutable.HashMap[Dummy, Dummy]() - for (i <- 0 until sz) hm.put(new Dummy(i), new Dummy(i)) - hm - } - -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Coder.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Coder.scala deleted file mode 100644 index 04e37085b8..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Coder.scala +++ /dev/null @@ -1,162 +0,0 @@ -package scala.collection.parallel.benchmarks -package misc - - - - - - -import collection._ //immutable._ -import collection.parallel._//immutable._ - - -class SeqCoder(words: List[String]) { - - private val m = Map( - '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", - '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ") - - /** Invert the mnemonics map to give a map from chars 'A' ... 'Z' to '2' ... '9' */ - private val charCode: Map[Char, Char] = - for ((digit, letters) <- m; letter <- letters) yield letter -> digit - - /** Maps a word to the digit string it represents, - * e.g. `Java` -> `5282` */ - private def wordCode(word: String): String = word.toUpperCase map charCode - - /** A map from digit strings to the words that represent - * them e.g. `5282` -> List(`Java`, `Kata`, `Lava`, ...) - */ - val wordsForNum: Map[String, Seq[String]] = - (words groupBy wordCode).map(t => (t._1, t._2.toSeq)) withDefaultValue Seq() - - /** All ways to encode a number as a list of words */ - def encode(number: String): Set[Seq[String]] = - if (number.isEmpty) Set(Seq()) - else { - val splits = (1 to number.length).toSet - // for { - // split <- splits - // word <- wordsForNum(number take split) - // rest <- encode(number drop split) - // } yield word :: rest - val r = splits.flatMap(split => { - val wfn = wordsForNum(number take split).flatMap(word => { - val subs = encode(number drop split) - subs.map(rest => word +: rest) - }) - wfn - }) - r - } - - /** Maps a number to a list of all word phrases that can - * represent it */ - def translate(number: String) = encode(number)// map (_ mkString " ") - - def ??? : Nothing = throw new UnsupportedOperationException -} - -class ParCoder(words: List[String]) { - - private val m = Map( - '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", - '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ") - - /** Invert the mnemonics map to give a map from chars 'A' ... 'Z' to '2' ... '9' */ - private val charCode: Map[Char, Char] = - for ((digit, letters) <- m; letter <- letters) yield letter -> digit - - /** Maps a word to the digit string it represents, - * e.g. `Java` -> `5282` */ - private def wordCode(word: String): String = word.toUpperCase map charCode - - /** A map from digit strings to the words that represent - * them e.g. `5282` -> List(`Java`, `Kata`, `Lava`, ...) - */ - val wordsForNum: Map[String, Seq[String]] = - (words groupBy wordCode).map(t => (t._1, t._2)) withDefaultValue Seq() - - /** All ways to encode a number as a list of words */ - def encode(number: String): Set[Seq[String]] = if (number.length > 12) { - if (number.isEmpty) ParSet(ParSeq()) - else { - val splits = (1 to number.length).toParSet - for { - split <- splits - word <- wordsForNum(number take split) - rest <- encode(number drop split) - } yield word +: rest - } - } else { - if (number.isEmpty) Set(Seq()) - else { - val splits = (1 to number.length).toSet - for { - split <- splits - word <- wordsForNum(number take split) - rest <- encode(number drop split) - } yield word +: rest - } - } - - /** Maps a number to a list of all word phrases that can - * represent it */ - def translate(number: String) = { - encode(number)// map (_ mkString " ") - } - - def ??? : Nothing = throw new UnsupportedOperationException -} - - - - - -object Coder extends BenchCompanion { - def benchName = "Coder" - def collectionName = "General" - def apply(sz: Int, p: Int, what: String) = new Coder(sz, p, what) - override def defaultSize = 100 -} - -class Coder(val size: Int, val parallelism: Int, val runWhat: String) extends Bench { - def companion = Coder - - var seqcoder: SeqCoder = null - var parcoder: ParCoder = null - - override def repetitionsPerRun = 1 - - val code = "23284374729473626268379762538" - - reset - - def runseq { - val translations = seqcoder.translate(code) - //println(translations) - } - - def runpar { - val translations = parcoder.translate(code) - //println(translations) - } - - def reset = runWhat match { - case "seq" => - seqcoder = new SeqCoder(Dictionary.wordlist) - val t = seqcoder.translate(code) - println("Translation check: " + t.size) - //println(t) - case "par" => - collection.parallel.tasksupport.environment.asInstanceOf[concurrent.forkjoin.ForkJoinPool].setParallelism(parallelism) - parcoder = new ParCoder(Dictionary.wordlist) - val t = parcoder.translate(code) - println("Translation check: " + t.size) - //println(t) - } - - def comparisonMap = Map() - -} - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Dictionary.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Dictionary.scala deleted file mode 100644 index e6ff55d234..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Dictionary.scala +++ /dev/null @@ -1,13 +0,0 @@ -package scala.collection.parallel.benchmarks.misc - - - - -object Dictionary { - val wordlist = wordlines.split(System.getProperty("line.separator")).filter(_.trim != "").toList - val wordarray = wordlist.toArray - def wordlines = { - val is = getClass.getClassLoader.getResourceAsStream("scala/collection/parallel/benchmarks/misc/dict.txt") - scala.io.Source.fromInputStream(is).mkString - } -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Loader.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Loader.scala deleted file mode 100644 index c7e4723e64..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Loader.scala +++ /dev/null @@ -1,66 +0,0 @@ -package scala.collection.parallel.benchmarks -package misc - - - - - - -import collection._ //immutable._ -import collection.parallel._//immutable._ - - - - - - - -object Loader extends BenchCompanion { - def benchName = "Loader" - def collectionName = "General" - def apply(sz: Int, p: Int, what: String) = new Loader(sz, p, what) - override def defaultSize = 100 -} - - -class Loader(val size: Int, val parallelism: Int, val runWhat: String) extends Bench { - def companion = Loader - - override def repetitionsPerRun = 1 - - reset - - val wa = Dictionary.wordarray ++ Dictionary.wordarray ++ Dictionary.wordarray - - def runseq { - val m = Map( - '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", - '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ" - ) - val charCode: Map[Char, Char] = for ((digit, letters) <- m; letter <- letters) yield letter -> digit - def wordCode(word: String): String = (word.toUpperCase.toList map charCode).toString - - wa groupBy wordCode - } - - def runpar { - val m = Map( - '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", - '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ" - ) - val charCode: Map[Char, Char] = for ((digit, letters) <- m; letter <- letters) yield letter -> digit - def wordCode(word: String): String = (word.toUpperCase.toList map charCode).toString - - wa.par groupBy wordCode - } - - def reset = runWhat match { - case "seq" => - case "par" => - collection.parallel.tasksupport.environment.asInstanceOf[concurrent.forkjoin.ForkJoinPool].setParallelism(parallelism) - } - - def comparisonMap = Map() - -} - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/dict.txt b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/dict.txt deleted file mode 100644 index 46e95c907f..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/dict.txt +++ /dev/null @@ -1,58111 +0,0 @@ -aardvark -aardwolf -aaron -aback -abacus -abaft -abalone -abandon -abandoned -abandonment -abandons -abase -abased -abasement -abash -abashed -abate -abated -abatement -abates -abattoir -abattoirs -abbe -abbess -abbey -abbeys -abbot -abbots -abbreviate -abbreviated -abbreviates -abbreviating -abbreviation -abbreviations -abdicate -abdicated -abdicates -abdicating -abdication -abdomen -abdomens -abdominal -abduct -abducted -abducting -abduction -abductions -abductor -abductors -abducts -abe -abeam -abel -abele -aberdeen -aberrant -aberration -aberrations -abet -abets -abetted -abetting -abeyance -abhor -abhorred -abhorrence -abhorrent -abhors -abide -abided -abides -abiding -abidjan -abies -abilities -ability -abject -abjectly -abjure -abjured -ablate -ablates -ablating -ablation -ablative -ablaze -able -ablebodied -abler -ablest -abloom -ablution -ablutions -ably -abnegation -abnormal -abnormalities -abnormality -abnormally -aboard -abode -abodes -abolish -abolished -abolishes -abolishing -abolition -abolitionist -abolitionists -abomb -abominable -abominably -abominate -abominated -abomination -abominations -aboriginal -aborigines -abort -aborted -aborting -abortion -abortionist -abortionists -abortions -abortive -aborts -abound -abounded -abounding -abounds -about -above -abraded -abraham -abrasion -abrasions -abrasive -abrasively -abrasiveness -abrasives -abreast -abridge -abridged -abridgement -abridging -abroad -abrogate -abrogated -abrogating -abrogation -abrogations -abrupt -abruptly -abruptness -abscess -abscesses -abscissa -abscissae -abscissas -abscond -absconded -absconder -absconding -absconds -abseil -abseiled -abseiler -abseiling -abseils -absence -absences -absent -absented -absentee -absenteeism -absentees -absenting -absently -absentminded -absentmindedly -absentmindedness -absolute -absolutely -absoluteness -absolutes -absolution -absolutism -absolutist -absolutists -absolve -absolved -absolves -absolving -absorb -absorbed -absorbency -absorbent -absorber -absorbers -absorbing -absorbingly -absorbs -absorption -absorptions -absorptive -absorptivity -abstain -abstained -abstainer -abstainers -abstaining -abstains -abstemious -abstemiously -abstemiousness -abstention -abstentions -abstinence -abstinent -abstract -abstracted -abstractedly -abstracting -abstraction -abstractions -abstractly -abstracts -abstruse -abstrusely -absurd -absurder -absurdest -absurdist -absurdities -absurdity -absurdly -abundance -abundances -abundant -abundantly -abuse -abused -abuser -abusers -abuses -abusing -abusive -abusively -abusiveness -abut -abutment -abutments -abutted -abutting -abuzz -aby -abysmal -abysmally -abyss -abyssal -abysses -acacia -academe -academia -academic -academical -academically -academician -academicians -academics -academies -academy -acanthus -acapulco -accede -acceded -acceding -accelerate -accelerated -accelerates -accelerating -acceleration -accelerations -accelerator -accelerators -accelerometer -accelerometers -accent -accented -accenting -accents -accentuate -accentuated -accentuates -accentuating -accentuation -accept -acceptability -acceptable -acceptably -acceptance -acceptances -accepted -accepting -acceptor -acceptors -accepts -access -accessed -accesses -accessibility -accessible -accessing -accession -accessions -accessories -accessory -accidence -accident -accidental -accidentally -accidentprone -accidents -acclaim -acclaimed -acclaims -acclamation -acclamations -acclimatisation -acclimatise -acclimatised -acclimatising -accolade -accolades -accommodate -accommodated -accommodates -accommodating -accommodation -accommodations -accompanied -accompanies -accompaniment -accompaniments -accompanist -accompany -accompanying -accomplice -accomplices -accomplish -accomplished -accomplishes -accomplishing -accomplishment -accomplishments -accord -accordance -accorded -according -accordingly -accordion -accordionist -accordions -accords -accost -accosted -accosting -accosts -account -accountability -accountable -accountancy -accountant -accountants -accounted -accounting -accounts -accra -accredit -accreditation -accredited -accrediting -accredits -accreted -accretion -accretions -accrual -accruals -accrue -accrued -accrues -accruing -accumulate -accumulated -accumulates -accumulating -accumulation -accumulations -accumulative -accumulator -accumulators -accuracies -accuracy -accurate -accurately -accursed -accusal -accusals -accusation -accusations -accusative -accusatory -accuse -accused -accuser -accusers -accuses -accusing -accusingly -accustom -accustomed -accustoming -ace -aced -acentric -acerbic -acerbity -acers -aces -acetal -acetate -acetates -acetic -acetone -acetylene -ache -ached -aches -achievable -achieve -achieved -achievement -achievements -achiever -achievers -achieves -achieving -aching -achingly -achings -achromatic -achy -acid -acidic -acidification -acidified -acidify -acidifying -acidity -acidly -acidophiles -acidrain -acids -acknowledge -acknowledged -acknowledgement -acknowledgements -acknowledges -acknowledging -acknowledgment -acknowledgments -acme -acne -acolyte -acolytes -aconite -acorn -acorns -acoustic -acoustical -acoustically -acoustics -acquaint -acquaintance -acquaintances -acquainted -acquainting -acquaints -acquiesce -acquiesced -acquiescence -acquiescent -acquiescing -acquire -acquired -acquirer -acquirers -acquires -acquiring -acquisition -acquisitions -acquisitive -acquisitiveness -acquit -acquited -acquites -acquits -acquittal -acquittals -acquittance -acquitted -acquitting -acre -acreage -acres -acrid -acrimonious -acrimoniously -acrimony -acrobat -acrobatic -acrobatics -acrobats -acronym -acronyms -across -acrostic -acrostics -acrylic -acrylics -act -acted -acting -actings -actinides -action -actionable -actions -activate -activated -activates -activating -activation -activations -activator -activators -active -actively -actives -activism -activist -activists -activities -activity -actor -actors -actress -actresses -acts -actual -actualisation -actualise -actualised -actualities -actuality -actually -actuarial -actuaries -actuary -actuate -actuated -actuates -actuating -actuation -actuator -actuators -acuity -acumen -acupuncture -acupuncturist -acupuncturists -acute -acutely -acuteness -acuter -acutest -acyclic -adage -adages -adagio -adam -adamant -adamantly -adapt -adaptability -adaptable -adaptation -adaptations -adapted -adapter -adapters -adapting -adaptive -adaptively -adaptivity -adaptor -adaptors -adapts -add -added -addenda -addendum -adder -adders -addict -addicted -addiction -addictions -addictive -addictiveness -addicts -adding -addition -additional -additionally -additions -additive -additively -additives -addle -addled -addles -addling -address -addressability -addressable -addressed -addressee -addressees -addresses -addressing -adds -adduce -adduced -adduces -adducing -adelaide -aden -adenine -adenoid -adenoids -adenoma -adenomas -adept -adepts -adequacy -adequate -adequately -adhere -adhered -adherence -adherent -adherents -adherer -adherers -adheres -adhering -adhesion -adhesions -adhesive -adhesiveness -adhesives -adhoc -adiabatic -adiabatically -adieu -adieus -adieux -adios -adipose -adit -adjacency -adjacent -adjacently -adjectival -adjective -adjectives -adjoin -adjoined -adjoining -adjoins -adjourn -adjourned -adjourning -adjournment -adjourns -adjudge -adjudged -adjudges -adjudicate -adjudicated -adjudicates -adjudicating -adjudication -adjudications -adjudicator -adjudicators -adjunct -adjuncts -adjure -adjust -adjustable -adjusted -adjuster -adjusting -adjustment -adjustments -adjusts -adjutant -adlib -adlibs -adman -admen -admin -administer -administered -administering -administers -administrate -administrated -administrating -administration -administrations -administrative -administratively -administrator -administrators -admirable -admirably -admiral -admirals -admiration -admire -admired -admirer -admirers -admires -admiring -admiringly -admissibility -admissible -admission -admissions -admit -admits -admittance -admittances -admitted -admittedly -admitting -admix -admixture -admonish -admonished -admonishes -admonishing -admonishment -admonition -admonitions -admonitory -ado -adobe -adolescence -adolescent -adolescents -adonis -adopt -adopted -adopter -adopting -adoption -adoptions -adoptive -adopts -adorable -adorably -adoration -adore -adored -adorer -adorers -adores -adoring -adoringly -adorn -adorned -adorning -adornment -adornments -adorns -adrenal -adrenalin -adrenaline -adrift -adroit -adroitly -adroitness -adsorb -adsorbed -adsorption -adulation -adulatory -adult -adulterate -adulterated -adulterates -adulterating -adulteration -adulterations -adulterer -adulterers -adulteress -adulteresses -adulterous -adultery -adulthood -adults -adumbrate -adumbrated -adumbrating -advance -advanced -advancement -advancements -advancer -advances -advancing -advantage -advantaged -advantageous -advantageously -advantages -advent -advents -adventure -adventured -adventurer -adventurers -adventures -adventuring -adventurism -adventurous -adventurously -adverb -adverbial -adverbs -adversarial -adversaries -adversary -adverse -adversely -adversities -adversity -advert -adverted -advertise -advertised -advertisement -advertisements -advertiser -advertisers -advertises -advertising -adverts -advice -advices -advisability -advisable -advise -advised -advisedly -adviser -advisers -advises -advising -advisory -advocacy -advocate -advocated -advocates -advocating -adze -aegean -aegina -aegis -aeolian -aeon -aeons -aerate -aerated -aerates -aerating -aeration -aerator -aerial -aerially -aerials -aerify -aerobatic -aerobatics -aerobe -aerobes -aerobic -aerobically -aerobics -aerobraking -aerodrome -aerodromes -aerodynamic -aerodynamically -aerodynamics -aerofoil -aerofoils -aeronaut -aeronautic -aeronautical -aeronautics -aeroplane -aeroplanes -aerosol -aerosols -aerospace -aesop -aesthete -aesthetes -aesthetic -aesthetically -aestheticism -aestheticsy -afar -affability -affable -affably -affair -affairs -affect -affectation -affectations -affected -affectedly -affecting -affection -affectionate -affectionately -affections -affective -affects -afferent -affidavit -affidavits -affiliate -affiliated -affiliates -affiliating -affiliation -affiliations -affine -affinities -affinity -affirm -affirmation -affirmations -affirmative -affirmatively -affirmed -affirming -affirms -affix -affixed -affixes -affixing -afflict -afflicted -afflicting -affliction -afflictions -afflicts -affluence -affluent -afflux -afford -affordability -affordable -afforded -affording -affords -afforestation -afforested -affray -affront -affronted -affronts -afghan -afghani -afghans -afield -afire -aflame -afloat -afoot -aforementioned -aforesaid -aforethought -afraid -afresh -africa -african -africans -afro -afros -aft -after -afterbirth -aftercare -aftereffect -aftereffects -afterglow -afterlife -afterlives -aftermath -afternoon -afternoons -aftershave -aftershocks -aftertaste -afterthought -afterthoughts -afterward -afterwards -aga -again -against -agakhan -agape -agar -agaragar -agave -agaves -age -aged -ageing -ageings -ageism -ageless -agencies -agency -agenda -agendas -agendums -agent -agents -ageold -ages -agglomerated -agglomerating -agglomeration -agglomerations -agglutinative -aggravate -aggravated -aggravates -aggravating -aggravation -aggravations -aggregate -aggregated -aggregates -aggregating -aggregation -aggregations -aggression -aggressions -aggressive -aggressively -aggressiveness -aggressor -aggressors -aggrieved -aggrievedly -aghast -agile -agiler -agility -aging -agings -agio -agitate -agitated -agitatedly -agitates -agitating -agitation -agitations -agitator -agitators -agitprop -agleam -aglow -agnostic -agnosticism -agnostics -ago -agog -agonies -agonise -agonised -agonises -agonising -agonisingly -agonist -agonists -agony -agora -agoraphobia -agoraphobic -agouti -agrarian -agree -agreeable -agreeableness -agreeably -agreed -agreeing -agreement -agreements -agrees -agribusiness -agricultural -agriculturalist -agriculturalists -agriculturally -agriculture -agrimony -agrochemical -agrochemicals -agronomist -agronomists -agronomy -aground -ague -ah -aha -ahead -ahem -ahoy -aid -aide -aided -aidedecamp -aider -aiders -aides -aidesdecamp -aiding -aids -ail -aileron -ailerons -ailing -ailment -ailments -ails -aim -aimed -aimer -aiming -aimless -aimlessly -aimlessness -aims -aint -air -airbase -airborne -airbrush -airbus -airconditioned -airconditioner -airconditioning -aircraft -aircrew -aircrews -aire -aired -airfield -airfields -airflow -airforce -airframe -airframes -airgun -airier -airiest -airily -airiness -airing -airings -airless -airlift -airlifted -airlifting -airlifts -airline -airliner -airliners -airlines -airlock -airlocks -airmail -airman -airmen -airplane -airplay -airport -airports -airraid -airs -airship -airships -airsick -airsickness -airspace -airstream -airstrip -airstrips -airtight -airtime -airwave -airwaves -airway -airways -airworthiness -airworthy -airy -aisle -aisles -aitches -ajar -akimbo -akin -ala -alabama -alabaster -alacarte -alack -alacrity -aladdin -alanine -alarm -alarmed -alarming -alarmingly -alarmism -alarmist -alarms -alas -alaska -alaskan -alb -albania -albany -albatross -albatrosses -albeit -albinism -albino -album -albumen -albumin -albums -alchemical -alchemist -alchemists -alchemy -alcohol -alcoholic -alcoholics -alcoholism -alcohols -alcove -alcoves -aldehyde -aldehydes -alder -alderman -aldermen -aldrin -ale -alehouse -alembic -alert -alerted -alerting -alertly -alertness -alerts -ales -alfalfa -alfatah -alga -algae -algal -algebra -algebraic -algebraical -algebraically -algebraist -algebras -algeria -algerian -algiers -algorithm -algorithmic -algorithmically -algorithms -alias -aliases -alibaba -alibi -alibis -alien -alienate -alienated -alienates -alienating -alienation -aliened -aliening -aliens -alight -alighted -alighting -alights -align -aligned -aligning -alignment -alignments -aligns -alike -alimentary -alimony -aline -alined -alines -alining -aliphatic -aliquot -aliquots -alive -alkali -alkalic -alkaline -alkalinity -alkalis -alkalise -alkaloid -alkaloids -alkanes -alkyl -all -allay -allayed -allaying -allays -allegation -allegations -allege -alleged -allegedly -alleges -allegiance -allegiances -alleging -allegorical -allegorically -allegories -allegory -allegri -allegro -allele -alleles -allelic -allergen -allergens -allergic -allergies -allergy -alleviate -alleviated -alleviates -alleviating -alleviation -alleviations -alley -alleys -alleyway -alleyways -alliance -alliances -allied -allies -alligator -alligators -alliterate -alliterated -alliterating -alliteration -alliterations -alliterative -allocatable -allocate -allocated -allocates -allocating -allocation -allocations -allocator -allocators -allophones -allot -allotment -allotments -allotrope -allotropic -allots -allotted -allotting -allow -allowable -allowance -allowances -allowed -allowing -allows -alloy -alloyed -alloying -alloys -allude -alluded -alludes -alluding -allure -allured -allurement -allurements -allures -alluring -alluringly -allusion -allusions -allusive -alluvia -alluvial -alluvium -ally -allying -almanac -almanacs -almighty -almond -almonds -almost -alms -almshouse -almshouses -aloe -aloes -aloft -aloha -alone -aloneness -along -alongside -aloof -aloofness -aloud -alp -alpaca -alpacas -alpha -alphabet -alphabetic -alphabetical -alphabetically -alphabets -alphanumeric -alphas -alpine -alps -already -alright -also -alt -altar -altarpiece -altarpieces -altars -alter -alterable -alteration -alterations -altercate -altercation -altercations -altered -alterego -altering -alternate -alternated -alternately -alternates -alternating -alternation -alternations -alternative -alternatively -alternatives -alternator -alternators -alters -although -altimeter -altimeters -altitude -altitudes -alto -altogether -altruism -altruist -altruistic -altruistically -alts -alum -aluminium -aluminum -alumni -alumnus -alveolar -alveoli -always -am -amalgam -amalgamate -amalgamated -amalgamates -amalgamating -amalgamation -amalgamations -amalgams -amanuensis -amass -amassed -amasses -amassing -amateur -amateurish -amateurishly -amateurishness -amateurism -amateurs -amatory -amaze -amazed -amazement -amazes -amazing -amazingly -amazon -amazons -ambassador -ambassadorial -ambassadors -amber -ambergris -ambiance -ambidextrous -ambience -ambient -ambiguities -ambiguity -ambiguous -ambiguously -ambit -ambition -ambitions -ambitious -ambitiously -ambivalence -ambivalent -ambivalently -amble -ambled -ambler -ambles -ambling -ambrosia -ambulance -ambulances -ambulant -ambulate -ambulatory -ambuscade -ambuscades -ambush -ambushed -ambushers -ambushes -ambushing -ameliorate -ameliorated -ameliorates -ameliorating -amelioration -amen -amenability -amenable -amend -amendable -amended -amending -amendment -amendments -amends -amenities -amenity -amenorrhoea -amens -america -american -americans -americium -amethyst -amethystine -amethysts -amiability -amiable -amiableness -amiably -amicability -amicable -amicably -amid -amide -amidships -amidst -amigo -amine -amines -amino -amir -amiss -amity -amman -ammeter -ammeters -ammo -ammonia -ammonites -ammonium -ammunition -amnesia -amnesiac -amnesic -amnesties -amnesty -amniotic -amoeba -amoebae -amoebic -amok -among -amongst -amoral -amorality -amorist -amorous -amorously -amorphous -amortisation -amortise -amortised -amount -amounted -amounting -amounts -amour -amours -amp -ampere -amperes -ampersand -ampersands -amphetamine -amphetamines -amphibia -amphibian -amphibians -amphibious -amphitheatre -amphitheatres -amphora -ample -ampler -amplification -amplifications -amplified -amplifier -amplifiers -amplifies -amplify -amplifying -amplitude -amplitudes -amply -ampoules -amps -ampule -ampules -ampuls -amputate -amputated -amputating -amputation -amputations -amputee -amputees -amuck -amulet -amulets -amuse -amused -amusement -amusements -amuses -amusing -amusingly -an -ana -anabolic -anachronism -anachronisms -anachronistic -anachronistically -anaconda -anacondas -anaemia -anaemic -anaerobic -anaerobically -anaesthesia -anaesthetic -anaesthetics -anaesthetise -anaesthetised -anaesthetising -anaesthetist -anaesthetists -anagram -anagrammatic -anagrammatically -anagrams -anal -analgesia -analgesic -analgesics -anally -analogical -analogies -analogise -analogous -analogously -analogue -analogues -analogy -analysable -analyse -analysed -analyser -analysers -analyses -analysing -analysis -analyst -analysts -analytic -analytical -analytically -anamorphic -ananas -anaphora -anaphoric -anarchic -anarchical -anarchism -anarchist -anarchistic -anarchists -anarchy -anathema -anatomic -anatomical -anatomically -anatomies -anatomist -anatomists -anatomy -ancestor -ancestors -ancestral -ancestries -ancestry -anchor -anchorage -anchorages -anchored -anchoring -anchorite -anchors -anchovies -anchovy -ancient -anciently -ancients -ancillary -and -andante -andes -andrew -androgynous -android -androids -anecdotal -anecdotally -anecdote -anecdotes -anechoic -anemia -anemic -anemone -anemones -anergy -aneroid -aneurysm -aneurysms -anew -angel -angelic -angelica -angels -angelus -anger -angered -angering -angers -angina -anginal -angioplasty -angle -angled -anglepoise -angler -anglers -angles -anglian -anglican -angling -angola -angolan -angolans -angora -angoras -angrier -angriest -angrily -angry -angst -angstroms -anguish -anguished -anguishes -angular -angularity -anhydrous -anil -aniline -animal -animals -animate -animated -animatedly -animates -animating -animation -animations -animator -animators -animism -animist -animists -animosities -animosity -animus -anion -anionic -anions -anise -aniseed -aniseeds -anisotropic -anisotropies -anisotropy -ankara -ankle -ankles -anklet -anklets -anna -annal -annals -anneal -annealed -annealer -annealing -annex -annexation -annexations -annexe -annexed -annexes -annexing -annihilate -annihilated -annihilates -annihilating -annihilation -anniversaries -anniversary -annotate -annotated -annotates -annotating -annotation -annotations -announce -announced -announcement -announcements -announcer -announcers -announces -announcing -annoy -annoyance -annoyances -annoyed -annoyer -annoyers -annoying -annoyingly -annoys -annual -annualised -annually -annuals -annuities -annuity -annul -annular -annuli -annulled -annulling -annulment -annuls -annulus -annunciation -anode -anodes -anodised -anodyne -anoint -anointed -anointing -anoints -anomalies -anomalous -anomalously -anomaly -anomic -anon -anonym -anonymity -anonymous -anonymously -anonyms -anorak -anoraks -anorexia -anorexic -another -answer -answerable -answered -answerer -answering -answers -ant -antacid -antacids -antagonise -antagonised -antagonises -antagonising -antagonism -antagonisms -antagonist -antagonistic -antagonists -ante -anteater -anteaters -antecedent -antecedents -antechamber -antedate -antedates -antedating -antediluvian -antelope -antelopes -antenatal -antenna -antennae -antennas -anterior -anteriorly -anteroom -anthem -anthems -anther -anthologies -anthologise -anthologised -anthology -anthracite -anthrax -anthropic -anthropocentric -anthropogenic -anthropogenically -anthropoid -anthropological -anthropologist -anthropologists -anthropology -anthropometric -anthropomorphic -anthropomorphising -anthropomorphism -anti -antiabortionists -antiaircraft -antibiotic -antibiotics -antibodies -antibody -antic -anticipate -anticipated -anticipates -anticipating -anticipation -anticipations -anticipative -anticipatory -anticlimax -anticlockwise -anticoagulants -anticonstitutional -antics -anticyclone -antidepressant -antidepressants -antidote -antidotes -antifreeze -antigen -antigenic -antigens -antihistamines -antilope -antimatter -antimony -antioxidants -antiparticles -antipathetic -antipathies -antipathy -antipodes -antiquarian -antiquarianism -antiquarians -antiquaries -antiquary -antiquated -antique -antiques -antiquities -antiquity -antiseptic -antiseptics -antisocial -antistatic -antisymmetric -antisymmetry -antitheses -antithesis -antithetic -antithetical -antithetically -antitrust -antiviral -antler -antlers -antlion -antlions -antonym -antonyms -antral -antrum -ants -antwerp -anus -anvil -anvils -anxieties -anxiety -anxious -anxiously -any -anybody -anyhow -anymore -anyone -anyplace -anything -anyway -anyways -anywhere -aorist -aorta -aortas -aortic -apace -apache -apaches -apart -apartment -apartments -apartness -apathetic -apathetically -apathy -ape -aped -apeman -aperies -aperiodic -aperiodically -aperitif -aperitifs -aperture -apertures -apery -apes -apex -aphasia -aphelion -aphid -aphids -aphorism -aphorisms -aphorist -aphoristic -aphrodisiac -aphrodisiacs -apian -apiaries -apiarist -apiary -apiece -aping -apis -apish -aplenty -aplomb -apnea -apnoea -apocalypse -apocalyptic -apocryphal -apogee -apolitical -apollo -apologetic -apologetically -apologia -apologies -apologise -apologised -apologises -apologising -apologist -apologists -apology -apoplectic -apoplexy -apostasy -apostate -apostates -apostle -apostles -apostolate -apostolic -apostrophe -apostrophes -apostrophised -apothecaries -apothecary -apotheosis -appal -appalled -appalling -appallingly -appals -apparatchik -apparatchiks -apparatus -apparatuses -apparel -apparelled -apparent -apparently -apparition -apparitions -appeal -appealed -appealing -appealingly -appeals -appear -appearance -appearances -appeared -appearing -appears -appease -appeased -appeasement -appeaser -appeasers -appeases -appeasing -appellant -appellants -appellate -appellation -appellations -append -appendage -appendages -appended -appendices -appendicitis -appending -appendix -appends -appertain -appertained -appertaining -appetiser -appetising -appetite -appetites -applaud -applauded -applauding -applauds -applause -apple -applecart -applepie -apples -applet -appliance -appliances -applicability -applicable -applicant -applicants -application -applications -applicative -applicator -applicators -applied -applier -applies -applique -apply -applying -appoint -appointed -appointee -appointees -appointing -appointment -appointments -appoints -apportion -apportioned -apportioning -apportionment -apportions -apposite -apposition -appraisal -appraisals -appraise -appraised -appraisees -appraiser -appraisers -appraises -appraising -appraisingly -appreciable -appreciably -appreciate -appreciated -appreciates -appreciating -appreciation -appreciations -appreciative -appreciatively -apprehend -apprehended -apprehending -apprehends -apprehension -apprehensions -apprehensive -apprehensively -apprentice -apprenticed -apprentices -apprenticeship -apprenticeships -apprise -apprised -apprising -appro -approach -approachability -approachable -approached -approaches -approaching -approbation -appropriate -appropriated -appropriately -appropriateness -appropriates -appropriating -appropriation -appropriations -approval -approvals -approve -approved -approves -approving -approvingly -approximate -approximated -approximately -approximates -approximating -approximation -approximations -apricot -apricots -april -apriori -apron -aprons -apropos -apse -apses -apsis -apt -aptest -aptitude -aptitudes -aptly -aptness -aqua -aqualung -aquamarine -aquanaut -aquaria -aquarium -aquariums -aquatic -aquatics -aqueduct -aqueducts -aqueous -aquifer -aquifers -aquiline -arab -arabesque -arabesques -arabia -arabian -arabians -arabic -arable -arabs -arachnid -arachnids -arachnoid -arachnophobia -arak -araks -ararat -arbiter -arbiters -arbitrage -arbitrageur -arbitrageurs -arbitral -arbitrarily -arbitrariness -arbitrary -arbitrate -arbitrated -arbitrates -arbitrating -arbitration -arbitrations -arbitrator -arbitrators -arbor -arboreal -arboretum -arbour -arc -arcade -arcades -arcadia -arcading -arcana -arcane -arcanely -arcaneness -arced -arch -archaeological -archaeologically -archaeologist -archaeologists -archaeology -archaeopteryx -archaic -archaism -archaisms -archangel -archangels -archbishop -archbishops -archdeacon -archdeaconry -archdeacons -archdiocese -archduke -archdukes -arched -archenemies -archenemy -archer -archers -archery -arches -archetypal -archetype -archetypes -archetypical -arching -archipelago -architect -architectonic -architects -architectural -architecturally -architecture -architectures -architrave -architraves -archival -archive -archived -archives -archiving -archivist -archivists -archly -archness -archway -archways -arcing -arcs -arctic -ardency -ardent -ardently -ardour -arduous -are -area -areal -areas -arena -arenas -arent -argent -argon -argot -arguable -arguably -argue -argued -arguer -arguers -argues -arguing -argument -argumentation -argumentative -argumentatively -arguments -argus -aria -arias -arid -aridity -aridness -aright -arise -arisen -arises -arising -aristocracies -aristocracy -aristocrat -aristocratic -aristocrats -arithmetic -arithmetical -arithmetically -arizona -ark -arkansas -arks -arm -armada -armadas -armadillo -armament -armaments -armature -armatures -armband -armbands -armchair -armchairs -armed -armenia -armful -armfuls -armhole -armholes -armies -arming -armistice -armless -armlet -armlets -armour -armoured -armourer -armourers -armouries -armourplated -armoury -armpit -armpits -armrest -arms -army -aroma -aromas -aromatherapist -aromatherapy -aromatic -aromaticity -aromatics -arose -around -arousal -arousals -arouse -aroused -arouses -arousing -arrange -arrangeable -arranged -arrangement -arrangements -arranger -arranges -arranging -arrant -arrases -array -arrayed -arraying -arrays -arrears -arrest -arrestable -arrested -arrester -arresting -arrests -arrhythmia -arrival -arrivals -arrive -arrived -arriver -arrives -arriving -arrogance -arrogant -arrogantly -arrow -arrowed -arrowhead -arrowheads -arrowing -arrowroot -arrows -arsenal -arsenals -arsenic -arsenide -arson -arsonist -arsonists -art -artefact -artefacts -artefactual -arterial -arteries -artery -artful -artfully -artfulness -arthritic -arthritis -arthropod -arthropods -arthur -artichoke -artichokes -article -articled -articles -articulacy -articular -articulate -articulated -articulately -articulates -articulating -articulation -articulations -articulatory -artier -artifice -artificial -artificiality -artificially -artillery -artisan -artisans -artist -artiste -artistes -artistic -artistically -artistry -artists -artless -artlessly -artlessness -arts -artwork -artworks -arty -arum -as -asbestos -asbestosis -ascend -ascendancy -ascendant -ascended -ascendency -ascender -ascending -ascends -ascension -ascensions -ascent -ascents -ascertain -ascertainable -ascertained -ascertaining -ascertainment -ascertains -ascetic -asceticism -ascetics -ascorbic -ascribable -ascribe -ascribed -ascribes -ascribing -ascription -ascriptions -aseptic -asexual -ash -ashamed -ashamedly -ashbin -ashbins -ashcans -ashen -ashes -ashore -ashtray -ashtrays -ashy -asia -asian -asians -asiatic -aside -asides -asinine -ask -askance -asked -askers -askew -asking -asks -aslant -asleep -asocial -asp -asparagus -aspect -aspects -asperity -aspersion -aspersions -asphalt -asphyxia -asphyxiate -asphyxiated -asphyxiation -aspic -aspidistra -aspirant -aspirants -aspirate -aspirated -aspirates -aspirating -aspiration -aspirational -aspirations -aspirators -aspire -aspired -aspires -aspirin -aspiring -aspirins -asps -ass -assail -assailable -assailant -assailants -assailed -assailing -assails -assassin -assassinate -assassinated -assassinating -assassination -assassinations -assassins -assault -assaulted -assaulting -assaults -assay -assayed -assayer -assays -assegai -assegais -assemblage -assemblages -assemble -assembled -assembler -assemblers -assembles -assemblies -assembling -assembly -assent -assented -assenting -assents -assert -asserted -asserting -assertion -assertions -assertive -assertively -assertiveness -asserts -asses -assess -assessable -assessed -assesses -assessing -assessment -assessments -assessor -assessors -asset -assets -assiduity -assiduous -assiduously -assign -assignable -assignation -assignations -assigned -assignees -assigner -assigning -assignment -assignments -assigns -assimilable -assimilate -assimilated -assimilates -assimilating -assimilation -assist -assistance -assistant -assistants -assisted -assisting -assists -assizes -associate -associated -associates -associateship -associating -association -associational -associations -associative -associatively -associativity -assonance -assort -assorted -assortment -assortments -assuage -assuaged -assuages -assuaging -assume -assumed -assumes -assuming -assumption -assumptions -assurance -assurances -assure -assured -assuredly -assures -assuring -assyria -assyrian -aster -asterisk -asterisked -asterisks -astern -asteroid -asteroids -asters -asthma -asthmatic -asthmatics -astigmatic -astigmatism -astir -astonish -astonished -astonishes -astonishing -astonishingly -astonishment -astound -astounded -astounding -astoundingly -astounds -astraddle -astral -astrally -astray -astride -astringent -astrolabe -astrolabes -astrologer -astrologers -astrological -astrology -astronaut -astronautical -astronautics -astronauts -astronomer -astronomers -astronomic -astronomical -astronomically -astronomy -astrophysical -astrophysicist -astrophysicists -astrophysics -astute -astutely -astuteness -asunder -aswan -asylum -asylums -asymmetric -asymmetrical -asymmetrically -asymmetries -asymmetry -asymptomatic -asymptote -asymptotes -asymptotic -asymptotically -asynchronous -asynchronously -at -atavism -atavistic -ate -atelier -atheism -atheist -atheistic -atheistically -atheists -athena -athens -atherosclerosis -athlete -athletes -athletic -athletically -athleticism -athletics -atlanta -atlantic -atlantis -atlas -atlases -atmosphere -atmospheres -atmospheric -atmospherically -atmospherics -atoll -atolls -atom -atombomb -atomic -atomically -atomicity -atomisation -atomised -atomistic -atoms -atonal -atonality -atone -atoned -atonement -atones -atonic -atoning -atop -atrial -atrium -atrocious -atrociously -atrocities -atrocity -atrophied -atrophies -atrophy -atrophying -atropine -attach -attachable -attache -attached -attaches -attaching -attachment -attachments -attack -attacked -attacker -attackers -attacking -attacks -attain -attainable -attained -attaining -attainment -attainments -attains -attempt -attempted -attempting -attempts -attend -attendance -attendances -attendant -attendants -attended -attendees -attender -attenders -attending -attends -attention -attentional -attentions -attentive -attentively -attentiveness -attenuate -attenuated -attenuates -attenuating -attenuation -attenuator -attenuators -attest -attestation -attested -attesting -attests -attic -attics -attila -attire -attired -attiring -attitude -attitudes -attitudinal -attorney -attorneys -attract -attracted -attracting -attraction -attractions -attractive -attractively -attractiveness -attractor -attractors -attracts -attributable -attribute -attributed -attributes -attributing -attribution -attributions -attributive -attrition -attritional -attune -attuned -atypical -atypically -aubergine -aubergines -auburn -auction -auctioned -auctioneer -auctioneers -auctioning -auctions -audacious -audaciously -audacity -audibility -audible -audibly -audience -audiences -audio -audiovisual -audit -audited -auditing -audition -auditioned -auditioning -auditions -auditive -auditor -auditorium -auditors -auditory -audits -auger -augers -augite -augment -augmentation -augmentations -augmented -augmenting -augments -augur -augured -augurs -augury -august -augustus -auk -auks -aunt -auntie -aunties -aunts -aupair -aupairs -aura -aural -aurally -auras -aurevoir -auric -auriculas -aurora -aurorae -auroral -auroras -auspice -auspices -auspicious -auspiciously -aussie -aussies -austere -austerely -austerity -austral -australian -austria -autarchy -auteur -authentic -authentically -authenticate -authenticated -authenticates -authenticating -authentication -authenticator -authenticators -authenticity -author -authored -authoress -authorial -authoring -authorisation -authorisations -authorise -authorised -authorises -authorising -authoritarian -authoritarianism -authoritarians -authoritative -authoritatively -authorities -authority -authors -authorship -autism -autistic -auto -autobahn -autobahns -autobiographical -autobiographically -autobiographies -autobiography -autocracies -autocracy -autocrat -autocratic -autocratically -autocrats -autocue -autograph -autographed -autographing -autographs -autoignition -autoimmune -automat -automata -automate -automated -automates -automatic -automatically -automatics -automating -automation -automaton -automats -automobile -automorphism -automorphisms -automotive -autonomic -autonomous -autonomously -autonomy -autopilot -autopsies -autopsy -autosuggestion -autumn -autumnal -autumns -auxiliaries -auxiliary -avail -availabilities -availability -available -availed -availing -avails -avalanche -avalanches -avalanching -avantgarde -avarice -avaricious -avariciousness -ave -avenge -avenged -avenger -avengers -avenges -avenging -avens -avenue -avenues -aver -average -averaged -averagely -averages -averaging -averred -averring -avers -averse -aversion -aversions -aversive -avert -averted -averting -averts -avian -aviaries -aviary -aviate -aviation -aviator -aviators -avid -avidity -avidly -avionics -avocado -avoid -avoidable -avoidance -avoided -avoiding -avoids -avoirdupois -avow -avowal -avowals -avowed -avowedly -avowing -avulsion -avuncular -await -awaited -awaiting -awaits -awake -awaken -awakened -awakening -awakenings -awakens -awakes -awaking -award -awarded -awarding -awards -aware -awareness -awash -away -awe -awed -aweless -awesome -awesomely -awesomeness -awestruck -awful -awfully -awfulness -awhile -awkward -awkwardest -awkwardly -awkwardness -awls -awn -awning -awnings -awoke -awoken -awol -awry -axe -axed -axehead -axeheads -axeman -axes -axial -axially -axillary -axing -axiom -axiomatic -axiomatically -axiomatising -axioms -axis -axle -axles -axolotl -axon -axons -aye -ayurvedic -azalea -azaleas -azimuth -azimuthal -azores -aztec -aztecs -azure -baa -baaing -baal -babas -babble -babbled -babbler -babblers -babbles -babbling -babe -babel -babes -babies -baboon -baboons -baby -babyface -babyhood -babying -babyish -babylon -babysit -babysitter -babysitters -babysitting -baccarat -bacchus -bach -bachelor -bachelors -bacilli -bacillus -back -backache -backbench -backbencher -backbenchers -backbone -backbones -backchat -backdate -backdated -backdrop -backed -backer -backers -backfire -backfired -backfires -backfiring -backgammon -background -backgrounds -backhand -backhanded -backing -backlash -backless -backlight -backlit -backlog -backlogs -backpack -backpacker -backpackers -backpacking -backpacks -backpedal -backpedalled -backpedalling -backrest -backs -backseat -backside -backsides -backslapping -backslash -backsliding -backspace -backspaces -backspacing -backstabbing -backstage -backstairs -backstreet -backstreets -backstroke -backtrack -backtracked -backtracking -backtracks -backup -backups -backward -backwardness -backwards -backwash -backwater -backwaters -backwoods -backwoodsmen -backyard -bacon -bacteria -bacterial -bactericidal -bacteriological -bacteriologist -bacteriologists -bacteriology -bacteriophage -bacterium -bad -baddy -bade -bader -badge -badged -badger -badgered -badgering -badgers -badges -badinage -badlands -badly -badminton -badness -badtempered -baffle -baffled -bafflement -baffler -baffles -baffling -bafflingly -bag -bagatelle -bagdad -bagels -bagful -bagfuls -baggage -baggages -bagged -bagger -baggier -baggiest -bagging -baggy -baghdad -bagman -bagmen -bagpipe -bagpiper -bagpipes -bags -baguette -baguettes -bah -bahamas -bail -bailed -bailiff -bailiffs -bailing -bailiwick -bailout -bails -bait -baited -baiters -baiting -baitings -baits -bake -baked -bakehouse -baker -bakeries -bakers -bakery -bakes -baking -bakings -baklavas -balaclava -balaclavas -balalaika -balance -balanced -balancer -balances -balancing -balconies -balcony -bald -balder -balderdash -baldest -balding -baldly -baldness -baldy -bale -baled -baleen -baleful -balefully -bales -bali -baling -ball -ballad -ballade -ballades -ballads -ballast -ballasts -ballbearing -ballbearings -ballerina -ballerinas -ballet -balletic -ballets -ballistic -ballistics -balloon -ballooned -ballooning -balloonist -balloonists -balloons -ballot -balloted -balloting -ballots -ballpen -ballpens -ballpoint -ballroom -ballrooms -balls -ballyhoo -balm -balmier -balmiest -balmoral -balms -balmy -baloney -balsa -balsam -baltic -baluster -balusters -balustrade -balustraded -balustrades -bambino -bamboo -bamboos -bamboozle -bamboozled -bamboozles -ban -banal -banalities -banality -banana -bananas -band -bandage -bandaged -bandages -bandaging -bandanna -banded -bandied -bandier -bandiest -banding -bandit -banditry -bandits -bandpass -bands -bandstand -bandwagon -bandwagons -bandwidth -bandwidths -bane -bang -banged -banger -bangers -banging -bangkok -bangle -bangles -bangs -banish -banished -banishes -banishing -banishment -banister -banisters -banjo -bank -bankable -banked -banker -bankers -banking -banknote -banknotes -bankrupt -bankruptcies -bankruptcy -bankrupted -bankrupting -bankrupts -banks -banned -banner -banners -banning -bannister -bannisters -banns -banquet -banqueting -banquets -bans -banshee -banshees -bantam -bantams -bantamweight -banter -bantered -bantering -baobab -baobabs -bap -baptise -baptised -baptises -baptising -baptism -baptismal -baptisms -baptist -baptists -bar -barb -barbarian -barbarians -barbaric -barbarically -barbarism -barbarities -barbarity -barbarous -barbarously -barbecue -barbecued -barbecues -barbed -barbell -barbels -barber -barbers -barbie -barbiturate -barbiturates -barbs -barcode -bard -bards -bare -bareback -bared -barefaced -barefoot -barefooted -barely -bareness -barer -bares -barest -bargain -bargained -bargainers -bargaining -bargains -barge -barged -bargepole -barges -barging -baring -baritone -baritones -barium -bark -barked -barker -barkers -barking -barks -barky -barley -barleycorn -barleycorns -barmaid -barmaids -barman -barmen -barn -barnacle -barnacles -barns -barnstorming -barnyard -barometer -barometers -barometric -baron -baronage -baroness -baronesses -baronet -baronets -baronial -baronies -barons -barony -baroque -barrack -barracking -barracks -barracuda -barrage -barrages -barre -barred -barrel -barrelled -barrels -barren -barrenness -barricade -barricaded -barricades -barrier -barriers -barring -barrister -barristers -barrow -barrows -bars -bart -bartender -barter -bartered -barterer -bartering -basal -basalt -basaltic -basalts -base -baseball -baseballs -based -baseless -baseline -baselines -basely -basement -basements -baseness -baser -bases -basest -bash -bashed -bashes -bashful -bashfully -bashfulness -bashing -basic -basically -basics -basify -basil -basilica -basilicas -basilisk -basilisks -basin -basinful -basing -basins -basis -bask -basked -basket -basketball -basketful -basketry -baskets -basking -basks -basque -basrelief -basreliefs -bass -basses -bassist -bassoon -bassoons -bastard -bastardisation -bastardise -bastardised -bastards -bastardy -baste -basted -basting -bastion -bastions -bat -batch -batched -batches -batching -bate -bated -bates -bath -bathe -bathed -bather -bathers -bathes -bathetic -bathhouse -bathing -bathos -bathrobe -bathroom -bathrooms -baths -bathtub -bathtubs -bathurst -bathwater -batik -batiks -bating -batman -batmen -baton -batons -bats -batsman -batsmen -battalion -battalions -batted -batten -battened -battening -battens -batter -battered -batteries -battering -batters -battery -batting -battle -battleaxe -battlecry -battled -battledress -battlefield -battlefields -battleground -battlegrounds -battlement -battlemented -battlements -battler -battlers -battles -battleship -battleships -battling -batty -bauble -baubles -baud -baulk -baulked -baulking -baulks -baulky -bauxite -bavaria -bavarian -bawdier -bawdiest -bawdy -bawl -bawled -bawling -bawls -bay -bayed -baying -bayonet -bayonets -bays -bazaar -bazaars -bazooka -bazookas -be -beach -beachcomber -beached -beaches -beachhead -beaching -beachside -beachy -beacon -beaconed -beacons -bead -beaded -beadier -beadiest -beading -beadings -beadle -beadles -beads -beadwork -beady -beadyeyed -beagle -beagles -beak -beaked -beaker -beakers -beaks -beam -beamed -beaming -beams -beamy -bean -beanbag -beanery -beanie -beanpole -beans -beanstalk -beanstalks -beany -bear -bearable -bearably -beard -bearded -beardless -beards -bearer -bearers -bearing -bearings -bearish -bears -bearskin -bearskins -beast -beastliest -beastliness -beastly -beasts -beat -beaten -beater -beaters -beatific -beatification -beatifications -beatified -beatifies -beatify -beating -beatings -beatitude -beatitudes -beatnik -beatniks -beats -beatup -beau -beaus -beauteous -beautician -beauties -beautified -beautifier -beautifiers -beautifies -beautiful -beautifully -beautify -beauts -beauty -beaux -beaver -beavering -beavers -bebop -becalm -becalmed -became -because -beck -beckon -beckoned -beckoning -beckons -becks -become -becomes -becoming -bed -bedazzle -bedazzled -bedbug -bedbugs -bedchamber -bedclothes -bedcover -bedded -bedder -bedding -beddings -bedecked -bedecks -bedevil -bedevilled -bedevilment -bedevils -bedfellow -bedfellows -bedlam -bedlinen -bedmaker -bedmakers -bedouin -bedouins -bedpan -bedpans -bedpost -bedraggled -bedridden -bedrock -bedroom -bedrooms -beds -bedsheets -bedside -bedsit -bedsitter -bedsitters -bedsore -bedsores -bedspread -bedspreads -bedstead -bedsteads -bedtime -bedtimes -bee -beech -beeches -beechnut -beechwood -beef -beefburger -beefburgers -beefcake -beefeater -beefier -beefiest -beefs -beefy -beehive -beehives -beekeepers -beeline -beelines -been -beep -beeper -beeping -beeps -beer -beermat -beermats -beers -beery -bees -beeswax -beet -beetle -beetles -beetroot -beets -befall -befallen -befalling -befalls -befell -befit -befits -befitted -befitting -befog -before -beforehand -befoul -befriend -befriended -befriending -befriends -befuddle -befuddled -befuddling -beg -began -begat -beget -begets -begetting -beggar -beggared -beggarly -beggars -beggary -begged -begging -beggings -begin -beginner -beginners -beginning -beginnings -begins -begone -begonias -begot -begotten -begrudge -begrudged -begrudgingly -begs -beguile -beguiled -beguilement -beguiling -begun -behalf -behave -behaved -behaves -behaving -behaviour -behavioural -behaviourally -behaviourism -behaviourist -behaviourists -behaviours -behead -beheaded -beheading -beheld -behemoth -behest -behind -behindhand -behinds -behold -beholden -beholder -beholders -beholding -beholds -behoved -behoves -beige -beijing -being -beings -beirut -bejewel -bejewelled -bel -belabour -belated -belatedly -belatedness -belay -belayed -belays -belch -belched -belches -belching -beleaguered -belfast -belfries -belfry -belgian -belgians -belgium -belgrade -belie -belied -belief -beliefs -belies -believability -believable -believably -believe -believed -believer -believers -believes -believing -belike -belittle -belittled -belittles -belittling -bell -belladonna -bellbottoms -belle -belled -belles -bellicose -bellicosity -bellies -belligerence -belligerent -belligerently -belligerents -bellow -bellowed -bellowing -bellows -bells -belly -bellyful -belong -belonged -belonging -belongings -belongs -beloved -below -belt -belted -belting -beltings -belts -belying -bemoan -bemoaned -bemoaning -bemoans -bemuse -bemused -bemusedly -bemusement -ben -bench -benches -benchmark -benchmarking -benchmarks -bend -bendable -bended -bender -benders -bending -bendings -bends -beneath -benediction -benedictions -benefaction -benefactions -benefactor -benefactors -benefactress -benefice -beneficence -beneficent -beneficial -beneficially -beneficiaries -beneficiary -benefit -benefited -benefiting -benefits -benelux -benevolence -benevolent -benevolently -bengal -benighted -benightedly -benign -benignity -benignly -benjamin -bent -benzene -bequeath -bequeathed -bequeathing -bequest -bequests -berate -berated -berating -berber -bereave -bereaved -bereavement -bereavements -bereaving -bereft -beret -berets -bergs -berk -berlin -berliner -bermuda -bern -berries -berry -berserk -berth -berthed -berths -beryl -beryllium -beseech -beseeched -beseeches -beseeching -beseechingly -beset -besets -besetting -beside -besides -besiege -besieged -besieging -besmirch -besot -besotted -bespattered -bespeak -bespeaking -bespeaks -bespectacled -bespoke -best -bestial -bestiality -bestiary -bestir -bestirred -bestirring -bestknown -bestow -bestowal -bestowals -bestowed -bestowing -bestows -bestride -bestrode -bests -bestseller -bestsellers -bestselling -bet -beta -betel -betide -betimes -betoken -betokened -betokens -betray -betrayal -betrayals -betrayed -betrayer -betrayers -betraying -betrays -betroth -betrothal -betrothed -betroths -bets -betted -better -bettered -bettering -betterment -betters -betting -between -betwixt -bevel -bevelled -bevelling -bevels -beverage -beverages -bevvy -bevy -bewail -bewailed -bewailing -bewails -beware -bewhiskered -bewilder -bewildered -bewildering -bewilderingly -bewilderment -bewilders -bewitch -bewitched -bewitching -beyond -biannual -bias -biased -biases -biasing -biassed -biasses -biassing -bib -bible -bibles -biblical -biblically -biblicists -bibliographic -bibliographical -bibliographies -bibliography -bibliophile -bibs -bicameral -bicarb -bicarbonate -bicentenary -bicentennial -biceps -bicker -bickering -bickerings -bicycle -bicycled -bicycles -bicycling -bid -bidden -bidder -bidders -bidding -biddings -bide -bided -bides -bidet -biding -bidirectional -bids -biennial -biennials -bier -bifocal -bifocals -bifurcated -bifurcation -bifurcations -big -bigamist -bigamists -bigamous -bigamy -bigapple -bigben -bigger -biggest -biggish -bigheads -bigness -bigot -bigoted -bigotry -bigots -bijou -bijoux -bike -biker -bikes -biking -bikini -bikinis -bilabial -bilateral -bilaterally -bile -biles -bilge -bilges -bilharzia -biliary -bilingual -bilingualism -bilinguals -bilious -bill -billable -billboard -billboards -billed -billet -billeted -billeting -billets -billiard -billiards -billing -billings -billion -billionaire -billionaires -billions -billionth -billow -billowed -billowing -billows -billowy -billposters -bills -billy -biltong -bimbo -bimodal -bimonthly -bin -binaries -binary -bind -binder -binders -bindery -binding -bindings -binds -bindweed -bing -binge -bingo -binnacle -binocular -binoculars -binodal -binomial -bins -biochemical -biochemically -biochemist -biochemistry -biochemists -biodegradable -biodiversity -bioengineering -biofeedback -biogeographical -biographer -biographers -biographical -biographically -biographies -biography -biological -biologically -biologist -biologists -biology -biomass -biomedical -biometric -biometrics -biometry -biomorph -bionic -bionics -biophysical -biopsies -biopsy -biorhythm -biorhythms -bioscope -biosphere -biospheres -biosynthesis -biota -biotechnological -biotechnologist -biotechnologists -biotechnology -biotic -bipartisan -bipartite -biped -bipedal -bipedalism -bipeds -biplane -biplanes -bipolar -birch -birched -birches -bird -birdbath -birdbaths -birdcage -birdcages -birdie -birdies -birds -birdsong -birdtables -birdwatcher -birdwatchers -birdwatching -birefringence -birefringent -birth -birthday -birthdays -birthmark -birthmarks -birthplace -birthrate -birthright -birthrights -births -biscuit -biscuits -biscuity -bisect -bisected -bisecting -bisects -bisexual -bisexuality -bisexuals -bishop -bishopric -bishoprics -bishops -bismarck -bismuth -bison -bisons -bissau -bistable -bistro -bit -bitch -bitches -bitchiness -bitching -bitchy -bite -biter -biters -bites -biting -bitingly -bitmap -bits -bitten -bitter -bitterest -bitterly -bittern -bitterness -bitters -bittersweet -bittiness -bitts -bitty -bitumen -bituminous -bivalve -bivalves -bivouac -bivouacked -bivouacs -biweekly -biz -bizarre -bizarrely -bizarreness -blab -blabbed -blabber -blabbering -blabs -black -blackball -blackballed -blackballing -blackberries -blackberry -blackbird -blackbirds -blackboard -blackboards -blackcurrant -blackcurrants -blacked -blacken -blackened -blackening -blackens -blacker -blackest -blackfly -blackguard -blackhead -blackheads -blacking -blackish -blackjack -blackleg -blacklist -blacklisted -blacklisting -blacklists -blackly -blackmail -blackmailed -blackmailer -blackmailers -blackmailing -blackmails -blackness -blackout -blackouts -blacks -blacksea -blackshirts -blacksmith -blacksmiths -blackthorn -bladder -bladders -blade -bladed -blades -blah -blame -blameable -blamed -blameful -blameless -blamelessly -blamelessness -blames -blameworthy -blaming -blanch -blanched -blanching -blancmange -bland -blandest -blandishments -blandly -blandness -blank -blanked -blanker -blanket -blanketed -blanketing -blankets -blanking -blankly -blankness -blanks -blare -blared -blares -blaring -blase -blaspheme -blasphemed -blasphemer -blasphemers -blasphemies -blaspheming -blasphemous -blasphemously -blasphemy -blast -blasted -blaster -blasters -blasting -blasts -blat -blatancy -blatant -blatantly -blaze -blazed -blazer -blazers -blazes -blazing -bleach -bleached -bleacher -bleachers -bleaches -bleaching -bleak -bleaker -bleakest -bleakly -bleakness -blearily -bleary -blearyeyed -bleat -bleated -bleating -bleats -bled -bleed -bleeder -bleeders -bleeding -bleeds -bleep -bleeped -bleeper -bleeping -bleeps -blemish -blemished -blemishes -blench -blenched -blend -blended -blender -blenders -blending -blends -blesbok -bless -blessed -blessedness -blesses -blessing -blessings -blew -blight -blighted -blighting -blights -blimp -blimps -blind -blinded -blinder -blindest -blindfold -blindfolded -blindfolds -blinding -blindingly -blindly -blindness -blinds -blink -blinked -blinker -blinkered -blinkering -blinkers -blinking -blinks -blip -blips -bliss -blissful -blissfully -blister -blistered -blistering -blisteringly -blisters -blithe -blithely -blithering -blitz -blitzkrieg -blizzard -blizzards -bloat -bloated -bloating -blob -blobs -bloc -block -blockade -blockaded -blockades -blockading -blockage -blockages -blockbuster -blockbusters -blockbusting -blocked -blockers -blockhead -blockheads -blocking -blockish -blocks -blocky -blocs -bloke -blokes -blond -blonde -blonder -blondes -blondest -blondhaired -blonds -blood -bloodbath -bloodcurdling -blooded -bloodhound -bloodhounds -bloodied -bloodier -bloodies -bloodiest -bloodily -bloodless -bloodlessness -bloodletting -bloodline -bloodlust -bloodred -bloods -bloodshed -bloodshot -bloodsport -bloodsports -bloodstain -bloodstained -bloodstains -bloodstock -bloodstone -bloodstream -bloodsuckers -bloodthirstier -bloodthirstiest -bloodthirsty -bloodworm -bloody -bloodymindedness -bloom -bloomed -bloomer -bloomers -blooming -blooms -bloomy -blossom -blossomed -blossoming -blossoms -blot -blotch -blotched -blotches -blotchy -blots -blotted -blotter -blotting -blouse -blouses -blow -blowdried -blowdrying -blowed -blower -blowers -blowfly -blowing -blowlamp -blown -blowpipe -blowpipes -blows -blowtorch -blowtorches -blowup -blubber -blubbered -blubbering -bludgeon -bludgeoned -bludgeoning -bludgeons -blue -bluebell -bluebells -blueberries -blueberry -bluebird -bluebirds -blueblooded -bluebottle -bluebottles -bluecollar -blueish -bluemoon -blueness -bluenile -blueprint -blueprints -bluer -blues -bluest -bluesy -bluff -bluffed -bluffer -bluffers -bluffing -bluffs -bluish -blunder -blunderbuss -blundered -blundering -blunderings -blunders -blunt -blunted -blunter -bluntest -blunting -bluntly -bluntness -blunts -blur -blurb -blurbs -blurred -blurring -blurry -blurs -blurt -blurted -blurting -blurts -blush -blushed -blusher -blushers -blushes -blushing -blushingly -bluster -blustered -blustering -blusters -blustery -bmus -boa -boar -board -boarded -boarder -boarders -boardgames -boarding -boardings -boardroom -boardrooms -boards -boars -boas -boast -boasted -boaster -boasters -boastful -boastfully -boastfulness -boasting -boasts -boat -boated -boater -boaters -boathouse -boathouses -boating -boatload -boatman -boatmen -boats -boatswain -bob -bobbed -bobbies -bobbin -bobbing -bobbins -bobble -bobbles -bobby -bobcat -bobs -bobsled -bobtail -bobtails -bode -boded -bodes -bodice -bodices -bodied -bodies -bodiless -bodily -boding -bodkin -body -bodybuilding -bodyguard -bodyguards -bodywork -boer -boers -boerwar -boffin -boffins -bog -bogey -bogeyman -bogeymen -bogeys -bogged -boggiest -bogging -boggle -boggled -boggles -boggling -bogglingly -boggy -bogies -bogs -bogus -bogy -bohemian -boil -boiled -boiler -boilermakers -boilers -boiling -boils -boisterous -boisterously -bola -bold -bolder -boldest -boldface -boldly -boldness -bole -bolero -boleyn -bolivia -bollard -bollards -bologna -bolster -bolstered -bolstering -bolsters -bolt -bolted -bolting -bolts -bomb -bombard -bombarded -bombardier -bombarding -bombardment -bombardments -bombards -bombast -bombastic -bombasts -bombay -bombed -bomber -bombers -bombing -bombings -bombs -bombshell -bonanza -bonanzas -bonbon -bonbons -bond -bondage -bonded -bondholders -bonding -bondings -bonds -bone -boned -boneless -bonemeal -bones -boney -bonfire -bonfires -bong -bongs -bonier -boniest -bonn -bonnet -bonneted -bonnets -bonnie -bonniest -bonny -bonobo -bonsai -bonus -bonuses -bony -boo -boobies -booboo -booby -boobytrap -boobytrapped -boobytraps -booed -boohoo -booing -book -bookable -bookbinder -bookbinders -bookbinding -bookcase -bookcases -booked -bookends -bookers -bookie -bookies -booking -bookings -bookish -bookkeeper -bookkeeping -booklet -booklets -bookmaker -bookmakers -bookmaking -bookmark -bookmarks -books -bookseller -booksellers -bookshelf -bookshelves -bookshop -bookshops -bookstall -bookstalls -bookwork -bookworm -bookworms -boom -boomed -boomer -boomerang -boomeranging -boomerangs -booming -booms -boon -boons -boor -boorish -boorishly -boorishness -boors -boos -boost -boosted -booster -boosters -boosting -boosts -boot -booted -bootees -booth -booths -booting -bootlace -bootlaces -bootleg -bootless -bootprints -boots -bootstrap -bootstraps -booty -booze -boozed -boozer -boozers -boozes -bop -bops -boracic -borate -borates -borax -bordeaux -border -bordered -borderer -bordering -borderline -borders -bore -boreal -bored -boredom -borehole -boreholes -borer -borers -bores -boring -boringly -born -bornagain -borne -borneo -boron -borough -boroughs -borrow -borrowable -borrowed -borrower -borrowers -borrowing -borrowings -borrows -borstal -borstals -bosnia -bosom -bosoms -boson -bosons -boss -bossed -bosses -bossier -bossiest -bossiness -bossing -bossy -boston -bosun -botanic -botanical -botanically -botanist -botanists -botany -botch -botched -both -bother -bothered -bothering -bothers -bothersome -bothy -botswana -bottle -bottled -bottlefed -bottlefeed -bottleneck -bottlenecks -bottler -bottles -bottling -bottom -bottomed -bottoming -bottomless -bottommost -bottoms -botulism -boudoir -boudoirs -bouffant -bougainvillea -bough -boughs -bought -boulder -boulders -boulevard -boulevards -bounce -bounced -bouncer -bouncers -bounces -bouncier -bounciest -bouncing -bouncy -bound -boundaries -boundary -bounded -boundedness -bounder -bounders -bounding -boundless -bounds -bounteous -bounties -bountiful -bountifully -bounty -bouquet -bouquets -bourbon -bourbons -bourgeois -bourgeoisie -bout -boutique -boutiques -bouts -bovine -bow -bowdlerisation -bowdlerised -bowdlerising -bowed -bowel -bowels -bower -bowers -bowie -bowing -bowl -bowlder -bowled -bowler -bowlers -bowlines -bowling -bowls -bowman -bowmen -bows -bowsprit -bowstring -box -boxed -boxer -boxers -boxes -boxful -boxing -boxoffice -boxtops -boxwood -boxy -boy -boycott -boycotted -boycotting -boycotts -boyfriend -boyfriends -boyhood -boyish -boyishly -boys -boyscout -bra -brabble -brabbled -brabbles -brace -braced -bracelet -bracelets -bracer -braces -brachiopods -bracing -bracingly -bracken -bracket -bracketed -bracketing -brackets -brackish -bradawl -bradycardia -brag -braggart -braggarts -bragged -bragging -brags -brahman -brahms -braid -braided -braiding -braids -brail -braille -brain -braincell -braincells -brainchild -braindamaged -braindead -brainier -brainless -brainlessly -brainlessness -brainpower -brains -brainstorm -brainstorming -brainstorms -brainteasers -brainteasing -brainwash -brainwashed -brainwashing -brainwave -brainwaves -brainy -braise -braised -brake -brake -braked -brakes -braking -bramble -brambles -bran -branch -branched -branches -branching -branchy -brand -branded -brandies -branding -brandish -brandished -brandishes -brandishing -brands -brandy -brans -bras -brash -brasher -brashly -brashness -brasiers -brasil -brasilia -brass -brasserie -brasses -brassiere -brassy -brat -brats -bratty -bravado -brave -braved -bravely -braver -bravery -braves -bravest -braving -bravo -braw -brawl -brawled -brawler -brawling -brawls -brawn -brawnier -brawniest -brawny -bray -brayed -braying -brays -braze -brazen -brazened -brazenly -brazenness -brazier -braziers -brazil -brazing -breach -breached -breaches -breaching -bread -breadandbutter -breadboard -breadboards -breadcrumbs -breaded -breadfruit -breadline -breads -breadth -breadths -breadwinner -breadwinners -break -breakable -breakage -breakages -breakaway -breakaways -breakdown -breakdowns -breaker -breakers -breakfast -breakfasted -breakfasting -breakfasts -breakin -breaking -breakins -breakneck -breakout -breakpoint -breakpoints -breaks -breakthrough -breakthroughs -breakup -breakups -breakwater -breakwaters -bream -breast -breastbone -breasted -breastfeed -breastfeeding -breasting -breastplate -breasts -breaststroke -breath -breathable -breathalysed -breathalyser -breathalysers -breathe -breathed -breather -breathes -breathing -breathings -breathingspace -breathless -breathlessly -breathlessness -breaths -breathtaking -breathtakingly -breathy -breccias -brecciated -bred -breech -breeches -breed -breeder -breeders -breeding -breeds -breeze -breezed -breezes -breezier -breeziest -breezily -breezing -breezy -brethren -breton -breviary -brevity -brew -brewage -brewed -brewer -breweries -brewers -brewery -brewing -brews -briar -bribe -bribed -briber -bribers -bribery -bribes -bribing -bricabrac -brick -brickbat -brickbats -bricked -bricking -bricklayer -bricklayers -bricklaying -brickred -bricks -brickwork -bridal -bridals -bride -bridegroom -bridegrooms -brides -bridesmaid -bridesmaids -bridge -bridgebuilding -bridged -bridgehead -bridges -bridging -bridle -bridled -bridles -bridleway -bridleways -bridling -brief -briefcase -briefcases -briefed -briefer -briefest -briefing -briefings -briefly -briefs -briers -brig -brigade -brigades -brigadier -brigadiers -brigand -brigands -bright -brighten -brightened -brightening -brightens -brighter -brightest -brighteyed -brightly -brightness -brightnesses -brighton -brilliance -brilliancy -brilliant -brilliantly -brim -brimmed -brimming -brims -brimstone -brindled -brine -brines -bring -bringer -bringing -brings -brink -brinkmanship -brinks -briny -brio -brioche -briquettes -brisbane -brisk -brisker -briskest -briskly -briskness -bristle -bristled -bristles -bristling -bristly -brit -britain -british -britons -brittle -brittleness -broach -broached -broaches -broaching -broad -broadband -broadcast -broadcaster -broadcasters -broadcasting -broadcasts -broaden -broadened -broadening -broadens -broader -broadest -broadleaved -broadloom -broadly -broadminded -broadmindedness -broadness -broadsheet -broadsheets -broadside -broadsides -broadsword -broadswords -broadway -brocade -brocaded -broccoli -brochure -brochures -brogue -brogues -broil -broiled -broiler -broiling -broils -broke -broken -brokenhearted -brokenly -broker -brokerage -brokered -brokers -broking -bromide -bromides -bromine -bronchi -bronchial -bronchitis -bronco -brontosaurus -bronze -bronzed -bronzes -brooch -brooches -brood -brooded -broodiness -brooding -broodingly -broods -broody -brook -brooklyn -brooks -broom -brooms -broomstick -broomsticks -broth -brothel -brothels -brother -brotherhood -brotherinlaw -brotherly -brothers -brothersinlaw -broths -brought -brouhaha -brow -browbeat -browbeaten -browbeating -brown -browned -browner -brownest -brownie -brownies -browning -brownish -brownness -browns -brows -browse -browsed -browser -browsers -browses -browsing -bruise -bruised -bruiser -bruisers -bruises -bruising -brunch -brunches -brunei -brunet -brunets -brunette -brunettes -brunt -brunts -brush -brushed -brushes -brushing -brushoff -brushup -brushwood -brushwork -brushy -brusque -brusquely -brusqueness -brussels -brutal -brutalisation -brutalise -brutalised -brutalising -brutalism -brutalities -brutality -brutally -brute -brutes -brutish -brutishness -brutus -bub -bubble -bubbled -bubblegum -bubbles -bubblier -bubbliest -bubbling -bubbly -bubonic -buccaneer -buccaneering -buccaneers -buck -bucked -bucket -bucketful -bucketfuls -bucketing -buckets -bucking -buckle -buckled -buckler -bucklers -buckles -buckling -buckminsterfullerene -buckpassing -bucks -buckshot -buckskin -bucolic -bud -budapest -budded -buddhism -buddhist -buddies -budding -buddings -buddy -budge -budged -budgerigar -budget -budgetary -budgeted -budgeting -budgets -budgie -budgies -budging -buds -buff -buffalo -buffer -buffered -buffering -buffers -buffet -buffeted -buffeting -buffetings -buffets -buffing -buffoon -buffoonery -buffoons -buffs -bug -bugbear -bugbears -bugeyed -bugged -bugger -buggered -buggering -buggers -buggery -buggies -bugging -buggy -bugle -bugler -buglers -bugles -bugs -build -builder -builders -building -buildings -builds -buildup -buildups -built -builtin -builtup -bulb -bulbous -bulbs -bulgaria -bulge -bulged -bulges -bulging -bulgy -bulimia -bulimic -bulk -bulkhead -bulkheads -bulkier -bulkiest -bulks -bulky -bull -bulldog -bulldogs -bulldoze -bulldozed -bulldozer -bulldozers -bulldozing -bullet -bulletin -bulletins -bulletproof -bullets -bullfight -bullfighting -bullfinch -bullfrog -bullied -bullies -bullion -bullish -bullock -bullocks -bulls -bully -bullying -bulrushes -bulwark -bulwarks -bum -bumble -bumbled -bumbler -bumblers -bumbles -bumbling -bump -bumped -bumper -bumpers -bumpier -bumpiest -bumping -bumpkin -bumpkins -bumps -bumptious -bumpy -bums -bun -bunch -bunched -bunches -bunching -bundle -bundled -bundles -bundling -bung -bungalow -bungalows -bungee -bungle -bungled -bungler -bunglers -bungles -bungling -bunion -bunions -bunk -bunked -bunker -bunkered -bunkers -bunks -bunkum -bunnies -bunny -buns -bunting -bunyan -buoy -buoyancy -buoyant -buoyantly -buoyed -buoys -bur -burble -burbled -burbles -burbling -burden -burdened -burdening -burdens -burdensome -burdock -bureau -bureaucracies -bureaucracy -bureaucrat -bureaucratic -bureaucratically -bureaucratisation -bureaucrats -bureaus -bureaux -burette -burg -burgeon -burgeoned -burgeoning -burgeons -burger -burgers -burghers -burglar -burglaries -burglars -burglary -burgle -burgled -burgles -burgling -burgundy -burial -burials -buried -buries -burlesque -burlesquing -burlier -burliest -burly -burma -burmese -burn -burned -burner -burners -burning -burnings -burnished -burnishing -burns -burnt -burp -burped -burping -burps -burr -burrow -burrowed -burrowing -burrows -burs -bursar -bursaries -bursars -bursary -burst -bursted -bursting -bursts -burundi -bury -burying -bus -buses -bush -bushel -bushels -bushes -bushfire -bushier -bushiest -bushiness -bushing -bushland -bushman -bushmen -bushy -busied -busier -busies -busiest -busily -business -businesses -businesslike -businessman -businessmen -businesswoman -busk -busker -buskers -busking -busman -busmen -bussed -bussing -bust -bustard -bustards -busted -busters -bustier -busting -bustle -bustled -bustles -bustling -busts -busty -busy -busybodies -busybody -busying -but -butane -butcher -butchered -butchering -butchers -butchery -butler -butlers -buts -butt -butted -butter -buttercup -buttercups -buttered -butterfat -butterflies -butterfly -buttering -buttermilk -butters -butterscotch -buttery -butting -buttock -buttocks -button -buttoned -buttonhole -buttonholed -buttonholes -buttoning -buttons -buttress -buttressed -buttresses -buttressing -butts -buxom -buy -buyer -buyers -buying -buyout -buys -buzz -buzzard -buzzards -buzzed -buzzer -buzzers -buzzes -buzzing -buzzwords -by -bye -byebye -byelaw -byelaws -byelection -byelections -byes -bygone -bygones -bylaw -bylaws -byline -bypass -bypassed -bypasses -bypassing -bypath -bypaths -byproduct -byproducts -bystander -bystanders -byte -bytes -byway -byways -byword -cab -cabal -cabals -cabaret -cabarets -cabbage -cabbages -cabby -cabin -cabinet -cabinetmaker -cabinets -cabins -cable -cabled -cables -cableway -cabling -cabman -cabmen -caboodle -caboose -cabriolet -cabs -cacao -cache -cached -caches -cachet -caching -cackle -cackled -cackles -cackling -cacophonous -cacophony -cacti -cactus -cactuses -cad -cadaver -cadaverous -cadavers -caddie -caddied -caddies -caddy -caddying -cade -cadence -cadences -cadenza -cadenzas -cadet -cadets -cadge -cadged -cadger -cadges -cadmium -cads -caesar -cafe -cafes -cafeteria -cafeterias -caftan -caftans -cage -caged -cages -cagey -cagiest -caging -cagoule -cagoules -cagy -cahoots -caiman -caimans -cain -cairn -cairns -cairo -cajole -cajoled -cajoling -cake -caked -cakes -caking -calamities -calamitous -calamitously -calamity -calcareous -calcification -calcified -calcify -calcite -calcium -calculable -calculate -calculated -calculatedly -calculates -calculating -calculation -calculations -calculative -calculator -calculators -calculus -calcutta -caldera -caldron -caldrons -calendar -calendars -calf -calibrate -calibrated -calibrates -calibrating -calibration -calibrations -calibrator -calibrators -calibre -calico -calif -california -caliper -calipers -caliph -call -callable -called -caller -callers -callgirl -callgirls -calligrapher -calligraphic -calligraphy -calling -callings -calliper -callipers -callisthenics -callous -calloused -callously -callousness -callow -callowness -calls -callup -callus -calm -calmed -calmer -calmest -calming -calmly -calmness -calms -calorie -calories -calorific -calorimeter -calorimeters -calorimetry -calory -calumniate -calumnies -calumny -calvary -calve -calves -calvin -calving -calypso -cam -camaraderie -camber -cambodia -camcorder -camcorders -came -camel -camelhair -camelot -camels -cameo -camera -cameraman -cameramen -cameras -camerawork -camisole -camomile -camouflage -camouflaged -camouflages -camouflaging -camp -campaign -campaigned -campaigner -campaigners -campaigning -campaigns -campanile -campanological -campanologist -campanology -camped -camper -campers -campfire -campfires -camphor -camping -camps -campsite -campsites -campus -campuses -cams -camshaft -can -canaan -canada -canadian -canal -canalisation -canals -canape -canapes -canard -canaries -canary -canberra -cancan -cancel -cancellation -cancellations -cancelled -cancelling -cancels -cancer -cancerous -cancers -candelabra -candelas -candid -candidacy -candidate -candidates -candidature -candidatures -candidly -candies -candle -candlelight -candlelit -candlepower -candles -candlestick -candlesticks -candour -candy -cane -caned -canes -canine -canines -caning -canings -canister -canisters -cannabis -canned -cannel -cannery -cannes -cannibal -cannibalise -cannibalised -cannibalising -cannibalism -cannibalistic -cannibals -cannily -canning -cannon -cannonball -cannonballs -cannoned -cannoning -cannons -cannot -cannula -canny -canoe -canoed -canoeing -canoeist -canoeists -canoes -canon -canonic -canonical -canonically -canonisation -canonise -canonised -canonry -canons -canopener -canopied -canopies -canopy -cans -cant -cantaloupe -cantankerous -cantata -cantatas -canted -canteen -canteens -canter -cantered -cantering -canters -canticle -canticles -cantilever -cantilevered -canton -cantons -cantor -canvas -canvased -canvases -canvass -canvassed -canvasser -canvassers -canvasses -canvassing -canyon -canyons -cap -capabilities -capability -capable -capably -capacious -capacitance -capacities -capacitive -capacitor -capacitors -capacity -caparisoned -cape -caped -caper -capered -capering -capers -capes -capetown -capillaries -capillary -capita -capital -capitalisation -capitalise -capitalised -capitalises -capitalising -capitalism -capitalist -capitalistic -capitalists -capitally -capitals -capitate -capitation -capitol -capitulate -capitulated -capitulates -capitulating -capitulation -capped -capping -cappuccino -capri -caprice -caprices -capricious -capriciously -capriciousness -capriole -capris -caps -capsize -capsized -capsizes -capsizing -capstan -capstans -capsule -capsules -captain -captaincy -captained -captaining -captains -caption -captioned -captions -captious -captivate -captivated -captivating -captivation -captive -captives -captivity -captor -captors -capture -captured -captures -capturing -capybara -car -carabinieri -caracal -caracals -carafe -caramel -caramelised -caramels -carapace -carat -carats -caravan -caravanning -caravans -caravel -caraway -carbide -carbine -carbines -carbohydrate -carbohydrates -carbolic -carbon -carbonaceous -carbonate -carbonated -carbonates -carbonic -carboniferous -carbonise -carbons -carbonyl -carborundum -carboxyl -carbuncle -carbuncles -carburettor -carburettors -carcase -carcases -carcass -carcasses -carcinogen -carcinogenesis -carcinogenic -carcinogens -carcinoma -carcinomas -card -cardboard -carded -cardholders -cardiac -cardiff -cardigan -cardigans -cardinal -cardinality -cardinals -carding -cardioid -cardiologist -cardiology -cardiopulmonary -cardiovascular -cards -care -cared -career -careered -careering -careerism -careerist -careerists -careers -carefree -careful -carefully -carefulness -careless -carelessly -carelessness -carer -carers -cares -caress -caressed -caresses -caressing -caressingly -caretaker -caretakers -carets -careworn -cargo -caribou -caricature -caricatured -caricatures -caricaturisation -caries -caring -carmine -carnage -carnages -carnal -carnality -carnally -carnation -carnations -carnival -carnivals -carnivore -carnivores -carnivorous -carnivorousness -carol -carols -carotene -carotid -carotin -carouse -carousel -carousing -carp -carpal -carpenter -carpenters -carpentry -carpet -carpeted -carpeting -carpets -carping -carport -carports -carps -carrel -carriage -carriages -carriageway -carriageways -carried -carrier -carriers -carries -carrion -carrot -carrots -carroty -carry -carrycot -carrying -cars -carsick -cart -carted -cartel -cartels -carter -carthorses -cartilage -carting -cartload -cartloads -cartographer -cartographers -cartographic -cartography -carton -cartons -cartoon -cartoonist -cartoonists -cartoons -cartouche -cartridge -cartridges -carts -cartwheel -cartwheels -carve -carved -carver -carvers -carvery -carves -carving -carvings -caryatids -casanova -cascade -cascaded -cascades -cascading -cascara -case -casebook -cased -caseload -caseloads -casement -casements -cases -casework -cash -cashbox -cashed -cashes -cashew -cashier -cashiers -cashing -cashless -cashmere -casing -casings -casino -cask -casket -caskets -casks -cassava -casserole -casseroles -cassette -cassettes -cassock -cassocks -cassowary -cast -castanet -castanets -castaway -castaways -caste -castellated -caster -casters -castes -castigate -castigated -castigates -castigating -casting -castings -castiron -castle -castled -castles -castling -castoff -castoffs -castor -castors -castrate -castrated -castrating -castration -castrato -casts -casual -casually -casualness -casuals -casualties -casualty -casuistry -cat -cataclysm -cataclysmic -catacomb -catacombs -catalepsy -catalogue -catalogued -cataloguer -cataloguers -catalogues -cataloguing -catalyse -catalysed -catalyses -catalysing -catalysis -catalyst -catalysts -catalytic -catamaran -catamarans -catanddog -catapult -catapulted -catapulting -catapults -cataract -cataracts -catarrh -catastrophe -catastrophes -catastrophic -catastrophically -catatonic -catcalls -catch -catched -catcher -catchers -catches -catchier -catchiest -catching -catchment -catchphrase -catchphrases -catchword -catchwords -catchy -catechism -catechisms -catechist -catechists -categorical -categorically -categories -categorisation -categorisations -categorise -categorised -categorises -categorising -category -cater -catered -caterer -caterers -catering -caterpillar -caterpillars -caters -caterwaul -caterwauls -catfish -catgut -catguts -catharsis -cathartic -cathedral -cathedrals -catheter -catheterisation -catheters -cathode -cathodes -catholic -cation -cationic -cations -catlike -catnap -catnip -cats -catsuit -cattery -cattle -catwalk -catwalks -caucus -caucuses -caudal -caught -cauldron -cauldrons -cauliflower -cauliflowers -caulking -causal -causality -causally -causation -causative -cause -caused -causes -causeway -causeways -causing -caustic -caustically -caustics -cauterise -cauterising -caution -cautionary -cautioned -cautioning -cautions -cautious -cautiously -cautiousness -cavalcade -cavalier -cavalierly -cavaliers -cavalry -cavalryman -cavalrymen -cave -caveat -caveats -caved -cavein -caveman -cavemen -caver -cavern -cavernous -caverns -cavers -caves -caviar -caviare -caviars -caving -cavitation -cavities -cavity -cavort -cavorted -cavorting -cavorts -caw -cawing -cayman -caymans -cease -ceased -ceasefire -ceasefires -ceaseless -ceaselessly -ceases -ceasing -cedar -cedars -cedarwood -cede -ceded -cedilla -ceding -ceilidh -ceilidhs -ceiling -ceilings -celandine -celeb -celebrant -celebrants -celebrate -celebrated -celebrates -celebrating -celebration -celebrations -celebratory -celebrities -celebrity -celeriac -celery -celestial -celestially -celibacy -celibate -cell -cellar -cellars -cellist -cellists -cello -cellophane -cells -cellular -cellulite -celluloid -cellulose -celsius -celtic -cement -cemented -cementing -cements -cemeteries -cemetery -cenotaph -censer -censor -censored -censorial -censoring -censorious -censoriousness -censors -censorship -censure -censured -censures -censuring -census -censuses -cent -centaur -centaurs -centenarians -centenary -centennial -centigrade -centime -centimes -centimetre -centimetres -centipede -centipedes -central -centralisation -centralise -centralised -centraliser -centralisers -centralises -centralising -centralism -centralist -centrality -centrally -centre -centred -centrefold -centrefolds -centreing -centrepiece -centrepieces -centres -centric -centrifugal -centrifugally -centrifugation -centrifuge -centrifuged -centrifuges -centrifuging -centring -centripetal -centrist -centrists -centroid -centroids -cents -centuries -centurion -centurions -century -cephalopods -ceramic -ceramics -ceramist -cereal -cereals -cerebellum -cerebral -cerebrum -ceremonial -ceremonially -ceremonials -ceremonies -ceremonious -ceremoniously -ceremony -ceres -cerise -certain -certainly -certainties -certainty -certifiable -certifiably -certificate -certificated -certificates -certification -certified -certifies -certify -certifying -certitude -certitudes -cervical -cervix -cess -cessation -cessations -cession -cesspit -cesspool -cesspools -cetacean -ceylon -chacha -chad -chafe -chafed -chafes -chaff -chaffed -chaffinch -chaffinches -chaffing -chafing -chagrin -chagrined -chain -chained -chaining -chains -chainsaw -chainsaws -chainsmoke -chainsmoked -chainsmoking -chair -chaired -chairing -chairlift -chairman -chairmanship -chairmanships -chairmen -chairperson -chairpersons -chairs -chairwoman -chairwomen -chaldronxxxxxxxxxxxxxx -chalet -chalets -chalice -chalices -chalk -chalked -chalking -chalks -chalky -challenge -challenged -challenger -challengers -challenges -challenging -challengingly -chamber -chambered -chamberlain -chamberlains -chambermaid -chambermaids -chamberpot -chamberpots -chambers -chameleon -chameleons -chamfer -chamfered -chamois -chamomile -champ -champagne -champagnes -champing -champion -championed -championing -champions -championship -championships -champs -chance -chanced -chancel -chancellery -chancellor -chancellors -chancellorship -chancer -chancery -chances -chancier -chanciest -chancing -chancy -chandelier -chandeliers -chandler -change -changeability -changeable -changed -changeless -changeling -changeover -changeovers -changer -changers -changes -changing -channel -channelled -channelling -channels -chant -chanted -chanter -chanteuse -chanting -chantings -chantries -chantry -chants -chaos -chaotic -chaotically -chap -chapel -chapels -chaperon -chaperone -chaperoned -chaperones -chaplain -chaplaincy -chaplains -chaplainxxxxxxxx -chapman -chapped -chapping -chaps -chapter -chapters -char -charabanc -character -characterful -characterisation -characterisations -characterise -characterised -characterises -characterising -characteristic -characteristically -characteristics -characterless -characters -charade -charades -charcoal -charcuterie -chared -charge -chargeable -charged -charger -chargers -charges -charging -chariot -charioteer -charioteers -chariots -charisma -charismas -charismatic -charismatically -charismatics -charitable -charitably -charities -charity -charlady -charlatan -charlatans -charles -charlie -charm -charmed -charmer -charmers -charming -charmingly -charmless -charms -charon -charred -charring -chars -chart -charted -charter -chartered -chartering -charters -charting -chartists -charts -charwoman -chary -chase -chased -chaser -chasers -chases -chasing -chasm -chasms -chassis -chaste -chastely -chastened -chastening -chastise -chastised -chastisement -chastises -chastising -chastity -chat -chateau -chats -chatted -chattel -chattels -chatter -chatterbox -chattered -chatterer -chattering -chatters -chattily -chatting -chatty -chauffeur -chauffeured -chauffeurs -chauvinism -chauvinist -chauvinistic -chauvinists -cheap -cheapen -cheapened -cheapening -cheapens -cheaper -cheapest -cheapish -cheaply -cheapness -cheapskates -cheat -cheated -cheater -cheaters -cheating -cheats -check -checked -checker -checkered -checkering -checkers -checkin -checking -checklist -checklists -checkmate -checkout -checkouts -checkpoint -checkpoints -checks -checkup -checkups -cheddar -cheek -cheekbone -cheekbones -cheeked -cheekier -cheekiest -cheekily -cheeking -cheeks -cheeky -cheep -cheeping -cheer -cheered -cheerful -cheerfully -cheerfulness -cheerier -cheeriest -cheerily -cheering -cheerio -cheerleader -cheerleaders -cheerless -cheerlessness -cheers -cheery -cheese -cheeseboard -cheeseburger -cheeseburgers -cheesecake -cheesecloth -cheesemaking -cheeses -cheesy -cheetah -cheetahs -chef -chefs -chekov -chemic -chemical -chemically -chemicals -chemiluminescence -chemiluminescent -chemise -chemist -chemistry -chemists -chemosynthesis -chemotherapeutic -chemotherapy -cheque -chequebook -chequebooks -chequer -chequerboard -chequered -chequering -chequers -cheques -cherish -cherished -cherishes -cherishing -cheroot -cheroots -cherries -cherry -cherryred -cherub -cherubic -cherubim -cherubs -chess -chessboard -chessboards -chessmen -chest -chested -chester -chesterfield -chestnut -chestnuts -chests -chesty -chevalier -chevron -chevrons -chew -chewable -chewed -chewer -chewier -chewiest -chewing -chews -chewy -chic -chicago -chicane -chicanery -chick -chicken -chickens -chicks -chicory -chide -chided -chides -chiding -chief -chiefly -chiefs -chieftain -chieftains -chiffon -chihuahua -chihuahuas -chilblain -chilblains -child -childbearing -childbirth -childcare -childhood -childhoods -childish -childishly -childishness -childless -childlessness -childlike -childly -childminders -childproof -children -chilean -chili -chill -chilled -chiller -chillers -chilli -chillier -chillies -chilliest -chilliness -chilling -chillingly -chills -chilly -chimaera -chimaerical -chime -chimed -chimera -chimeras -chimerical -chimes -chiming -chimney -chimneys -chimp -chimpanzee -chimpanzees -chimps -chin -china -chinese -chink -chinked -chinking -chinks -chinless -chinoiserie -chins -chintz -chintzy -chip -chipboard -chipmunk -chipped -chipping -chippings -chips -chiral -chiropodist -chiropody -chiropractic -chiropractor -chiropractors -chirp -chirped -chirping -chirps -chirpy -chirruped -chisel -chiseled -chiselled -chiselling -chisels -chit -chits -chivalric -chivalrous -chivalrously -chivalry -chives -chivvied -chivvy -chivvying -chlamydia -chlorate -chloride -chlorinated -chlorination -chlorine -chlorofluorocarbon -chlorofluorocarbons -chloroform -chloroformed -chloroforming -chlorophyll -chloroquine -chock -chockablock -chockfull -chocks -chocolate -chocolates -choice -choices -choicest -choir -choirboy -choirboys -choirmaster -choirs -choke -choked -choker -chokes -choking -cholera -cholesterol -choline -chomp -chomped -chomping -chomps -choose -chooser -choosers -chooses -choosey -choosier -choosing -choosy -chop -chopin -chopped -chopper -choppers -choppier -choppiest -chopping -choppy -chops -chopsticks -choral -chorale -chorales -chorals -chord -chordal -chords -chore -chorea -choreographed -choreographer -choreographers -choreographic -choreographing -choreography -chores -chorister -choristers -chortle -chortled -chortles -chortling -chorus -chorused -choruses -chose -chosen -choughs -chow -christ -christen -christened -christening -christenings -christian -chroma -chromatic -chromaticism -chromatograph -chromatographic -chromatography -chrome -chromed -chromite -chromium -chromosomal -chromosome -chromosomes -chronic -chronically -chronicle -chronicled -chronicler -chroniclers -chronicles -chronicling -chronograph -chronological -chronologically -chronologies -chronology -chronometer -chronometric -chrysalis -chrysanthemum -chrysanthemums -chubbiness -chubby -chuck -chucked -chucking -chuckle -chuckled -chuckles -chuckling -chucks -chuff -chuffed -chug -chugged -chugging -chugs -chum -chump -chums -chunk -chunkier -chunks -chunky -chunnel -chuntering -church -churches -churchgoer -churchgoers -churchman -churchmen -churchwarden -churchwardens -churchyard -churchyards -churlish -churlishly -churlishness -churn -churned -churning -churns -chute -chutes -chutney -chutzpah -cicada -cicadas -cicero -cider -ciders -cigar -cigaret -cigarette -cigarettes -cigars -cilia -cilium -cinch -cinder -cinders -cine -cinema -cinemas -cinematic -cinematographer -cinematography -cinnamon -cipher -ciphered -ciphers -circa -circadian -circle -circled -circles -circlet -circlets -circling -circuit -circuitous -circuitry -circuits -circulant -circular -circularise -circularised -circularity -circularly -circulars -circulate -circulated -circulates -circulating -circulation -circulations -circulatory -circumcise -circumcised -circumcision -circumference -circumferences -circumferential -circumflex -circumflexes -circumlocution -circumlocutions -circumlocutory -circumnavigate -circumnavigated -circumnavigates -circumnavigation -circumnavigational -circumscribe -circumscribed -circumscribing -circumspect -circumspection -circumspectly -circumstance -circumstances -circumstantial -circumstantially -circumvent -circumventable -circumvented -circumventing -circumvention -circumventions -circumvents -circus -circuses -cirrhosis -cirrhotic -cirrus -cist -cistern -cisterns -citadel -citadels -citation -citations -cite -cited -cites -cithers -cities -citing -citizen -citizenry -citizens -citizenship -citrate -citrates -citric -citron -citrons -citrus -citruses -cittern -city -cityscape -civic -civics -civies -civil -civilian -civilians -civilisation -civilisations -civilise -civilised -civilising -civilities -civility -civilly -clacking -clad -cladding -claim -claimable -claimant -claimants -claimed -claiming -claims -clairvoyance -clairvoyant -clairvoyants -clam -clamber -clambered -clambering -clambers -clammed -clamming -clammy -clamorous -clamorously -clamour -clamoured -clamouring -clamours -clamp -clampdown -clamped -clamping -clamps -clams -clan -clandestine -clandestinely -clang -clanged -clangers -clanging -clank -clanked -clanking -clannish -clans -clansmen -clap -clapped -clapper -clappers -clapping -claps -claptrap -claret -clarets -clarification -clarifications -clarified -clarifies -clarify -clarifying -clarinet -clarinets -clarinettist -clarion -clarity -clash -clashed -clashes -clashing -clasp -clasped -clasper -clasping -clasps -class -classed -classes -classic -classical -classically -classicism -classicist -classicists -classics -classier -classiest -classifiable -classification -classifications -classificatory -classified -classifier -classifiers -classifies -classify -classifying -classing -classless -classlessness -classmate -classmates -classroom -classrooms -classy -clatter -clattered -clattering -clatters -clausal -clause -clauses -claustrophobia -claustrophobic -clavichord -clavicle -claw -clawed -clawing -claws -clay -clayey -claymore -claymores -clays -clean -cleancut -cleaned -cleaner -cleaners -cleanest -cleaning -cleanliness -cleanliving -cleanly -cleanness -cleans -cleanse -cleansed -cleanser -cleanses -cleanshaven -cleansing -cleanup -clear -clearance -clearances -clearcut -cleared -clearer -clearest -clearheaded -clearing -clearings -clearly -clearness -clears -clearsighted -clearup -clearups -clearway -cleat -cleavage -cleavages -cleave -cleaved -cleaver -cleavers -cleaves -cleaving -clef -cleft -clefts -cleg -clematis -clemency -clement -clench -clenched -clenches -clenching -clergies -clergy -clergyman -clergymen -cleric -clerical -clerically -clerics -clerk -clerks -clever -cleverer -cleverest -cleverly -cleverness -cliche -cliches -click -clicked -clicking -clicks -client -clientele -clients -cliff -cliffhanger -cliffs -climactic -climate -climates -climatic -climatically -climatological -climatologists -climatology -climax -climaxed -climaxes -climaxing -climb -climbable -climbdown -climbed -climber -climbers -climbing -climbs -climes -clinch -clinched -clinches -clinching -cling -clingers -clinging -clings -clinic -clinical -clinically -clinician -clinicians -clinics -clink -clinked -clinker -clinking -clip -clipboard -clipboards -clipped -clipper -clippers -clipping -clippings -clips -clique -cliques -cliquey -clitoral -clitoris -cloaca -cloak -cloakanddagger -cloaked -cloaking -cloakroom -cloakrooms -cloaks -clobber -clock -clocked -clocking -clockmaker -clocks -clockwise -clockwork -clod -clods -clog -clogged -clogging -clogs -cloister -cloistered -cloisters -clonal -clone -cloned -clones -cloning -closable -close -closed -closedcircuit -closeknit -closely -closeness -closer -closers -closes -closest -closet -closeted -closets -closeup -closeups -closing -closings -closure -closures -clot -cloth -clothe -clothed -clothes -clothespeg -clothespegs -clothier -clothiers -clothing -cloths -clots -clotted -clotting -cloud -cloudburst -cloudbursts -clouded -cloudier -cloudiest -cloudiness -clouding -cloudless -clouds -cloudscape -cloudscapes -cloudy -clout -clouted -clouts -clove -cloven -clover -cloves -clown -clowned -clowning -clownish -clowns -cloying -cloyingly -club -clubbed -clubbing -clubfooted -clubhouse -clubman -clubroom -clubs -cluck -clucked -clucking -clucks -clue -clued -cluedup -clueless -clues -clumber -clump -clumped -clumping -clumps -clumpy -clumsier -clumsiest -clumsily -clumsiness -clumsy -clung -cluster -clustered -clustering -clusters -clutch -clutched -clutches -clutching -clutter -cluttered -cluttering -clutters -coach -coached -coaches -coaching -coachload -coachloads -coachman -coachmen -coachwork -coacted -coaction -coacts -coagulate -coagulated -coagulation -coal -coalblack -coalesce -coalesced -coalescence -coalesces -coalescing -coalface -coalfield -coalfields -coalition -coalitions -coalminers -coals -coapts -coarse -coarsely -coarseness -coarsens -coarser -coarsest -coast -coastal -coasted -coaster -coasters -coastguard -coastguards -coasting -coastlands -coastline -coastlines -coasts -coat -coated -coathanger -coating -coatings -coats -coauthor -coauthored -coauthoring -coauthors -coax -coaxed -coaxes -coaxial -coaxing -coaxingly -cob -cobalt -cobble -cobbled -cobbler -cobblers -cobbles -cobblestones -cobbling -coble -cobra -cobras -cobs -cobweb -cobwebbed -cobwebby -cobwebs -coca -cocain -cocaine -cochlea -cochlear -cock -cockatoo -cockatoos -cockatrice -cockatrices -cockcrow -cocked -cockerel -cockerels -cockeyed -cockier -cockiest -cockiness -cocking -cockle -cockles -cockney -cockneys -cockpit -cockpits -cockroach -cockroaches -cocks -cockshies -cocksure -cocktail -cocktails -cocky -cocoa -coconut -coconuts -cocoon -cocooned -cocoons -cod -coda -coddle -coddling -code -codebreaker -coded -codeine -codename -codenamed -coder -coders -codes -codeword -codewords -codex -codfish -codices -codicil -codicils -codification -codifications -codified -codifies -codify -codifying -coding -codling -codpiece -cods -coefficient -coefficients -coelenterates -coerce -coerced -coercer -coerces -coercible -coercing -coercion -coercions -coercive -coercively -coeval -coexist -coexisted -coexistence -coexistent -coexisting -coexists -coextensive -coffee -coffees -coffer -cofferdam -cofferdams -coffers -coffin -coffins -cog -cogency -cogent -cogently -cogitate -cogitated -cogitating -cogitation -cogitations -cogitative -cognac -cognacs -cognate -cognates -cognisance -cognisant -cognition -cognitive -cognitively -cognizance -cognizant -cognoscenti -cogs -cohabit -cohabitation -cohabitees -cohabiting -cohere -cohered -coherence -coherency -coherent -coherently -coheres -cohesion -cohesive -cohesively -cohesiveness -cohort -cohorts -coiffure -coil -coiled -coiling -coils -coin -coinage -coinages -coincide -coincided -coincidence -coincidences -coincident -coincidental -coincidentally -coincides -coinciding -coined -coiner -coiners -coining -coins -coital -coitus -coke -col -cola -colander -colas -cold -coldblooded -coldbloodedly -colder -coldest -coldhearted -coldish -coldly -coldness -colds -coldwar -cole -coleslaw -colitis -collaborate -collaborated -collaborates -collaborating -collaboration -collaborationist -collaborations -collaborative -collaboratively -collaborator -collaborators -collage -collagen -collages -collapse -collapsed -collapses -collapsible -collapsing -collar -collarbone -collared -collaring -collarless -collars -collate -collated -collateral -collaterally -collates -collating -collation -colleague -colleagues -collect -collectability -collectable -collectables -collected -collecting -collection -collections -collective -collectively -collectives -collectivisation -collectivism -collectivist -collectivity -collector -collectors -collects -college -colleges -collegial -collegiate -collide -collided -collides -colliding -collie -collier -collieries -colliers -colliery -collies -collimation -collimator -collinear -collins -collision -collisional -collisions -collocated -collocation -collocational -collocations -colloid -colloidal -colloids -colloquia -colloquial -colloquialism -colloquialisms -colloquially -colloquium -collude -colluded -colluding -collusion -colobus -cologne -colon -colonel -colonels -colonial -colonialism -colonialist -colonialists -colonials -colonic -colonies -colonisation -colonisations -colonise -colonised -colonisers -colonising -colonist -colonists -colonnade -colonnaded -colonnades -colons -colony -colossal -colossally -colossus -colostomies -colostomy -colour -colourant -colourants -colouration -colourblind -coloure -colourful -colourfully -colouring -colourings -colourisation -colourise -colourised -colourising -colourless -colours -coloury -cols -colt -colts -columbus -column -columnar -columned -columnist -columnists -columns -coma -comas -comatose -comb -combat -combatant -combatants -combated -combating -combative -combativeness -combats -combed -comber -combination -combinations -combinatorial -combine -combined -combines -combing -combining -combs -combusted -combustible -combustibles -combustion -combusts -come -comeback -comedian -comedians -comedies -comedown -comedy -comeliness -comely -comer -comers -comes -comestible -comestibles -comet -cometary -comets -comfort -comfortable -comfortably -comforted -comforter -comforters -comforting -comfortingly -comforts -comfy -comic -comical -comically -comics -coming -comings -comity -comma -command -commandant -commanded -commandeer -commandeered -commandeering -commander -commanders -commanding -commandingly -commandment -commandments -commando -commands -commas -commemorate -commemorated -commemorates -commemorating -commemoration -commemorations -commemorative -commence -commenced -commencement -commences -commencing -commend -commendable -commendably -commendation -commendations -commended -commending -commends -commensurate -commensurately -comment -commentaries -commentary -commentate -commentating -commentator -commentators -commented -commenter -commenting -comments -commerce -commercial -commercialisation -commercialise -commercialised -commercialism -commercially -commercials -commiserate -commiserated -commiserating -commiseration -commiserations -commissar -commissariat -commissars -commission -commissionaire -commissioned -commissioner -commissioners -commissioning -commissions -commit -commitment -commitments -commits -committal -committed -committee -committees -committing -commode -commodes -commodious -commodities -commodity -commodore -commodores -common -commonalities -commonality -commoner -commoners -commonest -commonlaw -commonly -commonness -commonplace -commonplaces -commons -commonsense -commonsensical -commonwealth -commotion -commotions -communal -communality -communally -commune -communed -communes -communicable -communicant -communicants -communicate -communicated -communicates -communicating -communication -communications -communicative -communicativeness -communicator -communicators -communing -communion -communions -communique -communiques -communism -communist -communists -communitarian -communities -community -commutation -commutative -commutativity -commutator -commute -commuted -commuter -commuters -commutes -commuting -compact -compacted -compacting -compaction -compactions -compactly -compactness -compacts -companies -companion -companionable -companionably -companions -companionship -company -comparability -comparable -comparably -comparative -comparatively -comparatives -comparator -comparators -compare -compared -compares -comparing -comparison -comparisons -compartment -compartmentalisation -compartmentalised -compartmentalising -compartments -compass -compassed -compasses -compassion -compassionate -compassionately -compatibilities -compatibility -compatible -compatibles -compatibly -compatriot -compatriots -compel -compelled -compelling -compellingly -compels -compendia -compendium -compendiums -compensate -compensated -compensates -compensating -compensation -compensations -compensator -compensatory -compere -compete -competed -competence -competences -competencies -competency -competent -competently -competes -competing -competition -competitions -competitive -competitively -competitiveness -competitor -competitors -compilable -compilation -compilations -compile -compiled -compiler -compilers -compiles -compiling -complacency -complacent -complacently -complain -complainant -complainants -complained -complainer -complaining -complainingly -complains -complaint -complaints -complaisant -complement -complementarity -complementary -complemented -complementing -complements -completable -complete -completed -completely -completeness -completes -completing -completion -completions -complex -complexes -complexion -complexioned -complexions -complexities -complexity -complexly -compliance -compliant -complicate -complicated -complicates -complicating -complication -complications -complicit -complicity -complied -complies -compliment -complimentary -complimented -complimenting -compliments -complot -comply -complying -component -components -comport -compose -composed -composedly -composer -composers -composes -composing -composite -composites -composition -compositional -compositions -compositor -compositors -compost -composts -composure -compound -compounded -compounding -compounds -comprehend -comprehended -comprehending -comprehends -comprehensibility -comprehensible -comprehensibly -comprehension -comprehensive -comprehensively -comprehensiveness -comprehensives -compress -compressed -compresses -compressibility -compressible -compressing -compression -compressional -compressions -compressive -compressor -compressors -comprise -comprised -comprises -comprising -compromise -compromised -compromises -compromising -comptroller -compulsion -compulsions -compulsive -compulsively -compulsorily -compulsory -compunction -computability -computable -computably -computation -computational -computationally -computations -compute -computed -computer -computerisation -computerise -computerised -computerising -computerliterate -computers -computes -computing -comrade -comradeinarms -comradely -comrades -comradeship -con -conakry -concatenate -concatenated -concatenates -concatenating -concatenation -concatenations -concave -concavity -conceal -concealed -concealing -concealment -conceals -concede -conceded -concedes -conceding -conceit -conceited -conceits -conceivability -conceivable -conceivably -conceive -conceived -conceives -conceiving -concentrate -concentrated -concentrates -concentrating -concentration -concentrations -concentrator -concentrators -concentric -concept -conception -conceptions -concepts -conceptual -conceptualisation -conceptualisations -conceptualise -conceptualised -conceptualising -conceptually -concern -concerned -concernedly -concerning -concerns -concert -concerted -concertgoers -concerti -concertina -concerto -concerts -concession -concessional -concessionary -concessions -concierge -conciliar -conciliate -conciliating -conciliation -conciliator -conciliatory -concise -concisely -conciseness -conclave -conclaves -conclude -concluded -concludes -concluding -conclusion -conclusions -conclusive -conclusively -concoct -concocted -concocting -concoction -concoctions -concocts -concomitant -concomitantly -concord -concordance -concordances -concordant -concordat -concords -concourse -concourses -concrete -concreted -concretely -concreteness -concretes -concreting -concretions -concubine -concubines -concur -concurred -concurrence -concurrency -concurrent -concurrently -concurring -concurs -concuss -concussed -concussion -condemn -condemnable -condemnation -condemnations -condemnatory -condemned -condemning -condemns -condensate -condensation -condensations -condense -condensed -condenser -condensers -condenses -condensing -condescend -condescended -condescending -condescendingly -condescends -condescension -condiment -condiments -condition -conditional -conditionality -conditionally -conditionals -conditioned -conditioner -conditioners -conditioning -conditions -condole -condoled -condolence -condolences -condoles -condonable -condone -condoned -condones -condoning -condor -condors -conducive -conduct -conductance -conducted -conducting -conduction -conductive -conductivities -conductivity -conductor -conductors -conductress -conducts -conduit -conduits -cone -coned -cones -confabulate -confection -confectioner -confectioners -confectionery -confectionist -confections -confederacy -confederate -confederates -confederation -confederations -confer -conference -conferences -conferencing -conferment -conferred -conferring -confers -confess -confessed -confesses -confessing -confession -confessional -confessionals -confessions -confessor -confessors -confetti -confidant -confidante -confidantes -confidants -confide -confided -confidence -confidences -confident -confidential -confidentiality -confidentially -confidently -confides -confiding -confidingly -configurable -configuration -configurations -configure -configured -configures -configuring -confine -confined -confinement -confinements -confines -confining -confirm -confirmation -confirmations -confirmatory -confirmed -confirming -confirms -confiscate -confiscated -confiscates -confiscating -confiscation -confiscations -confiscatory -conflagration -conflagrations -conflated -conflates -conflating -conflation -conflict -conflicted -conflicting -conflictingly -conflicts -conflictual -confluence -confluent -confocal -conform -conformable -conformal -conformance -conformation -conformational -conformed -conforming -conformism -conformist -conformists -conformity -conforms -confound -confounded -confoundedly -confounding -confounds -confront -confrontation -confrontational -confrontations -confronted -confronting -confronts -confusable -confuse -confused -confusedly -confuser -confuses -confusing -confusingly -confusion -confusions -conga -congeal -congealed -congealing -congeals -congenial -congeniality -congenital -congenitally -conger -congest -congested -congesting -congestion -congestive -conglomerate -conglomerated -conglomerates -conglomeration -congo -congratulate -congratulated -congratulates -congratulating -congratulation -congratulations -congratulatory -congregate -congregated -congregating -congregation -congregational -congregations -congress -congresses -congressional -congressman -congressmen -congruence -congruences -congruency -congruent -congruential -congruity -conic -conical -conics -conifer -coniferous -conifers -conjectural -conjecture -conjectured -conjectures -conjecturing -conjoin -conjoined -conjoining -conjoint -conjugacy -conjugal -conjugate -conjugated -conjugates -conjugating -conjugation -conjugations -conjunct -conjunction -conjunctions -conjunctive -conjunctivitis -conjunctures -conjure -conjured -conjurer -conjurers -conjures -conjuring -conjuror -conjurors -conjury -conk -conker -conkers -conman -conmen -connect -connected -connectedness -connecting -connection -connectionless -connections -connective -connectives -connectivity -connector -connectors -connects -conned -connexion -connexions -connivance -connive -connived -conniving -connoisseur -connoisseurs -connoisseurship -connotation -connotations -connote -connoted -connotes -connoting -conquer -conquerable -conquered -conquering -conqueror -conquerors -conquers -conquest -conquests -conquistador -conquistadores -cons -consanguineous -consanguinity -conscience -consciences -consciencestricken -conscientious -conscientiously -conscientiousness -conscionable -conscious -consciously -consciousness -consciousnesses -conscript -conscripted -conscripting -conscription -conscripts -consecrate -consecrated -consecrating -consecration -consecutive -consecutively -consensual -consensually -consensus -consent -consented -consenting -consents -consequence -consequences -consequent -consequential -consequentially -consequently -conservation -conservationist -conservationists -conservations -conservatism -conservative -conservatively -conservativeness -conservatives -conservatoire -conservator -conservatories -conservators -conservatory -conserve -conserved -conserves -conserving -consider -considerable -considerably -considerate -considerately -consideration -considerations -considered -considering -considers -consign -consigned -consignee -consigning -consignment -consignments -consigns -consist -consisted -consistencies -consistency -consistent -consistently -consisting -consists -consolation -consolations -console -consoled -consoles -consolidate -consolidated -consolidates -consolidating -consolidation -consolidations -consoling -consolingly -consonance -consonant -consonantal -consonants -consort -consorted -consortia -consorting -consortium -consorts -conspecific -conspicuous -conspicuously -conspicuousness -conspiracies -conspiracy -conspirator -conspiratorial -conspiratorially -conspirators -conspire -conspired -conspires -conspiring -constable -constables -constabularies -constabulary -constancy -constant -constantly -constants -constellation -constellations -consternating -consternation -constipated -constipation -constituencies -constituency -constituent -constituents -constitute -constituted -constitutes -constituting -constitution -constitutional -constitutionalism -constitutionalists -constitutionality -constitutionally -constitutions -constitutive -constitutively -constrain -constrained -constraining -constrains -constraint -constraints -constrict -constricted -constricting -constriction -constrictions -constrictive -constrictor -constrictors -constricts -construct -constructable -constructed -constructing -construction -constructional -constructions -constructive -constructively -constructivism -constructivist -constructor -constructors -constructs -construe -construed -construes -construing -consul -consular -consulate -consulates -consuls -consult -consultancies -consultancy -consultant -consultants -consultation -consultations -consultative -consulted -consulting -consults -consumable -consumables -consume -consumed -consumer -consumerism -consumerist -consumers -consumes -consuming -consummate -consummated -consummately -consummation -consumption -consumptions -consumptive -contact -contactable -contacted -contacting -contacts -contagion -contagious -contain -containable -contained -container -containers -containing -containment -contains -contaminant -contaminants -contaminate -contaminated -contaminates -contaminating -contamination -contemplate -contemplated -contemplates -contemplating -contemplation -contemplations -contemplative -contemporaneity -contemporaneous -contemporaneously -contemporaries -contemporary -contempt -contemptible -contemptibly -contemptuous -contemptuously -contend -contended -contender -contenders -contending -contends -content -contented -contentedly -contenting -contention -contentions -contentious -contentiously -contentment -contents -contest -contestable -contestant -contestants -contested -contesting -contests -context -contexts -contextual -contextualisation -contextually -contiguity -contiguous -contiguously -continence -continent -continental -continentals -continents -contingencies -contingency -contingent -contingently -contingents -continua -continuable -continual -continually -continuance -continuation -continuations -continue -continued -continues -continuing -continuities -continuity -continuous -continuously -continuum -contort -contorted -contorting -contortion -contortionist -contortions -contorts -contour -contoured -contouring -contours -contra -contraband -contraception -contraceptive -contraceptives -contract -contracted -contractible -contractile -contracting -contraction -contractions -contractor -contractors -contracts -contractual -contractually -contradict -contradicted -contradicting -contradiction -contradictions -contradictorily -contradictory -contradicts -contradistinction -contraflow -contraflows -contraindication -contraindications -contralto -contraption -contraptions -contrapuntal -contrarily -contrariness -contrariwise -contrary -contras -contrast -contrasted -contrasting -contrastingly -contrastive -contrasts -contrasty -contravene -contravened -contravenes -contravening -contravention -contraventions -contretemps -contribute -contributed -contributes -contributing -contribution -contributions -contributor -contributors -contributory -contrite -contritely -contrition -contrivance -contrivances -contrive -contrived -contrives -contriving -control -controllable -controlled -controller -controllers -controlling -controls -controversial -controversially -controversies -controversy -controvert -controverted -contumely -contuse -contusion -contusions -conundrum -conundrums -conurbation -conurbations -convalesce -convalescence -convalescent -convalescing -convect -convected -convecting -convection -convectional -convective -convector -convects -convene -convened -convener -convenes -convenience -conveniences -convenient -conveniently -convening -convenor -convenors -convent -conventicle -convention -conventional -conventionalism -conventionalist -conventionality -conventionally -conventions -convents -converge -converged -convergence -convergences -convergent -converges -converging -conversant -conversation -conversational -conversationalist -conversationalists -conversationally -conversations -conversazione -converse -conversed -conversely -converses -conversing -conversion -conversions -convert -converted -converter -converters -convertibility -convertible -convertibles -converting -convertor -convertors -converts -convex -convexity -convey -conveyance -conveyancing -conveyed -conveying -conveyor -conveyors -conveys -convict -convicted -convicting -conviction -convictions -convicts -convince -convinced -convinces -convincing -convincingly -convivial -conviviality -convocation -convocations -convoluted -convolution -convolutions -convolve -convolved -convoy -convoys -convulse -convulsed -convulses -convulsing -convulsion -convulsions -convulsive -convulsively -cony -coo -cooed -cooing -cook -cookbook -cookbooks -cooked -cooker -cookers -cookery -cookies -cooking -cooks -cookware -cool -coolant -coolants -cooled -cooler -coolers -coolest -cooling -coolness -cools -coon -coons -coop -cooped -cooper -cooperate -cooperated -cooperates -cooperating -cooperation -cooperative -cooperatively -cooperatives -coopers -coops -coordinate -coordinated -coordinates -coordinating -coordination -coordinator -coordinators -coos -cop -cope -coped -copes -copied -copier -copiers -copies -copilot -coping -copious -copiously -coplanar -copout -copouts -copper -copperplate -coppers -coppery -coppice -coppiced -coppices -coppicing -copra -coprocessor -coprocessors -coproduced -coprolite -coprophagous -cops -copse -copses -copulate -copulating -copulation -copulations -copulatory -copy -copyable -copycat -copycats -copying -copyist -copyists -copyright -copyrightable -copyrighted -copyrighting -copyrights -copywriter -coquette -coquettes -coquettish -coquettishly -cor -coracle -coral -coralline -corals -cord -cordage -cordate -corded -cordial -cordiality -cordially -cordials -cordillera -cordite -cordless -cordon -cordoned -cordons -cords -corduroy -corduroys -core -cores -corespondent -corgi -corgis -coriander -corinth -cork -corkage -corked -corks -corkscrew -corkscrews -corky -cormorant -cormorants -corn -corncrake -cornea -corneal -corneas -corned -corner -cornered -cornering -corners -cornerstone -cornerstones -cornet -cornets -cornfield -cornfields -cornflake -cornflakes -cornflour -cornflower -cornflowers -cornice -cornices -cornish -cornmeal -corns -cornucopia -corny -corollaries -corollary -corona -coronal -coronaries -coronary -coronas -coronation -coronations -coroner -coroners -coronet -coronets -corpora -corporal -corporals -corporate -corporately -corporates -corporation -corporations -corporatism -corporatist -corporeal -corporeally -corps -corpse -corpses -corpulent -corpus -corpuscle -corpuscles -corpuscular -corral -corralled -corrals -correct -correctable -corrected -correcting -correction -correctional -corrections -corrective -correctly -correctness -corrector -correctors -corrects -correlate -correlated -correlates -correlating -correlation -correlations -correlative -correspond -corresponded -correspondence -correspondences -correspondent -correspondents -corresponding -correspondingly -corresponds -corridor -corridors -corrigenda -corroborate -corroborated -corroborates -corroborating -corroboration -corroborative -corroboratory -corrode -corroded -corrodes -corroding -corrosion -corrosive -corrugated -corrugations -corrupt -corrupted -corruptible -corrupting -corruption -corruptions -corruptly -corrupts -corsage -corse -corset -corsets -corsica -corslet -cortege -cortex -cortical -corticosteroid -corticosteroids -cortisol -cortisone -coruscates -corvette -corvettes -cosier -cosiest -cosily -cosine -cosines -cosiness -cosmetic -cosmetically -cosmetics -cosmic -cosmical -cosmically -cosmological -cosmologically -cosmologies -cosmologist -cosmologists -cosmology -cosmonaut -cosmonauts -cosmopolitan -cosmopolitans -cosmos -cossacks -cosset -cosseted -cossets -cost -costar -costarred -costarring -costars -costcutting -costed -costeffective -costeffectiveness -costefficient -costing -costings -costive -costless -costlier -costliest -costliness -costly -costs -costume -costumed -costumes -cosy -cot -coterie -coterminous -cots -cottage -cottages -cotton -cottoned -cottons -couch -couched -couches -couching -cougar -cougars -cough -coughed -coughing -coughs -could -couloir -coulomb -coulombs -council -councillor -councillors -councils -counsel -counselled -counselling -counsellor -counsellors -counsels -count -countability -countable -countably -countdown -counted -countenance -countenanced -countenances -countenancing -counter -counteract -counteracted -counteracting -counteracts -counterattack -counterattacked -counterattacks -counterbalance -counterbalanced -counterbalancing -countered -counterfeit -counterfeited -counterfeiters -counterfeiting -counterfeits -counterfoil -counterfoils -countering -counterintelligence -counterintuitive -countermanded -countermeasures -counteroffensive -counterpane -counterpart -counterparts -counterpoint -counterpointed -counterpoints -counterpoise -counterproductive -counterrevolution -counterrevolutionaries -counterrevolutionary -counters -countersign -countersigned -countersigns -countess -countesses -counties -counting -countless -countries -country -countryman -countrymen -countryside -countrywide -counts -county -coup -coupe -coupes -couple -coupled -coupler -couplers -couples -couplet -couplets -coupling -couplings -coupon -coupons -coups -courage -courageous -courageously -courgette -courgettes -courier -couriers -course -coursebook -coursed -courses -coursework -coursing -court -courted -courteous -courteously -courtesan -courtesans -courtesies -courtesy -courthouse -courtier -courtiers -courting -courtly -courtmartial -courtroom -courtrooms -courts -courtship -courtships -courtyard -courtyards -couscous -cousin -cousinly -cousins -couther -couture -couturier -couturiers -covalent -covalently -covariance -covariances -cove -coven -covenant -covenanted -covenanters -covenants -covens -cover -coverage -coverages -coveralls -covered -covering -coverings -coverlet -coverlets -covers -coversheet -covert -covertly -coverts -coverup -coverups -coves -covet -coveted -coveting -covetous -covetousness -covets -cow -coward -cowardice -cowardly -cowards -cowboy -cowboys -cowed -cower -cowered -cowering -cowers -cowgirl -cowgirls -cowhand -cowherd -cowing -cowl -cowled -cowling -coworker -coworkers -cowriter -cowritten -cows -cowshed -cowsheds -cowslip -cowslips -cox -coxcomb -coxcombs -coxed -coxes -coxing -coxswain -coy -coyly -coyness -coyote -coyotes -cozier -crab -crabby -crabs -crack -crackable -crackdown -crackdowns -cracked -cracker -crackers -cracking -crackle -crackled -crackles -crackling -crackly -crackpot -crackpots -cracks -cradle -cradled -cradles -cradling -craft -crafted -crafter -craftier -craftiest -craftily -crafting -crafts -craftsman -craftsmanship -craftsmen -craftspeople -crafty -crag -craggy -crags -cram -crammed -crammer -cramming -cramp -cramped -cramping -crampon -crampons -cramps -crams -cran -cranberries -cranberry -crane -craned -cranes -cranial -craning -cranium -crank -cranked -cranking -cranks -crankshaft -cranky -crannies -cranny -crap -crash -crashed -crasher -crashers -crashes -crashing -crashingly -crashland -crashlanded -crashlanding -crass -crasser -crassly -crassness -crate -crateful -crater -cratered -craters -crates -cravat -cravats -crave -craved -craven -cravenly -craves -craving -cravings -crawl -crawled -crawler -crawlers -crawling -crawls -craws -crayfish -crayon -crayoned -crayons -craze -crazed -crazes -crazier -craziest -crazily -craziness -crazy -creak -creaked -creakier -creakiest -creaking -creaks -creaky -cream -creamed -creamer -creamery -creamier -creamiest -creaming -creams -creamy -crease -creased -creases -creasing -creatable -create -created -creates -creating -creation -creationism -creationist -creationists -creations -creative -creatively -creativeness -creativity -creator -creators -creature -creatures -creche -creches -credence -credentials -credibility -credible -credibly -credit -creditability -creditable -creditably -credited -crediting -creditor -creditors -credits -creditworthiness -creditworthy -credo -credulity -credulous -creed -creeds -creek -creeks -creel -creep -creeper -creepers -creeping -creeps -creepy -cremate -cremated -cremates -cremation -cremations -crematoria -crematorium -creme -crenellated -crenellation -crenellations -creole -creoles -creosote -crepe -crept -crepuscular -crescendo -crescent -crescents -cress -crest -crested -crestfallen -cresting -crests -cretaceous -cretan -cretans -crete -cretin -cretinous -cretins -crevasse -crevasses -crevice -crevices -crew -crewed -crewing -crewman -crewmen -crews -crib -cribbage -cribbed -cribbing -cribs -crick -cricket -cricketer -cricketers -cricketing -crickets -cried -crier -cries -crim -crime -crimea -crimes -criminal -criminalisation -criminalise -criminalised -criminalising -criminality -criminally -criminals -criminological -criminologist -criminologists -criminology -crimp -crimped -crimping -crimson -cringe -cringed -cringes -cringing -crinkle -crinkled -crinkling -crinkly -crinoline -cripple -crippled -cripples -crippling -cripplingly -crises -crisis -crisp -crisped -crisper -crispier -crispiest -crisply -crispness -crisps -crispy -crisscrossed -crisscrosses -criteria -criterion -critic -critical -critically -criticise -criticised -criticises -criticising -criticism -criticisms -critics -critique -critiques -critter -croak -croaked -croakier -croakiest -croaking -croaks -croatia -croatian -crochet -crocheted -crochets -crock -crockery -crocks -crocodile -crocodiles -crocus -crocuses -croft -crofter -crofters -crofting -crofts -croissant -croissants -crone -crones -cronies -crony -crook -crooked -crookedly -crookedness -crooking -crooks -croon -crooned -crooner -crooners -crooning -croons -crop -cropped -cropper -croppers -cropping -crops -croquet -croqueted -croqueting -croquette -crores -crosier -crosiers -cross -crossbar -crossbars -crossbones -crossbow -crossbows -crossbred -crosscheck -crosschecked -crosschecking -crosschecks -crosscountry -crossed -crosser -crosses -crossexamination -crossexamine -crossexamined -crossexamines -crossexamining -crossfertilisation -crossfire -crossing -crossings -crossly -crossness -crossover -crossovers -crossreference -crossreferenced -crossreferences -crossreferencing -crossroads -crosssection -crosssectional -crosssections -crosstalk -crossways -crosswind -crosswinds -crossword -crosswords -crotch -crotchet -crotchetiness -crotchety -crotchless -crouch -crouched -crouches -crouching -croup -croupier -croutons -crow -crowbar -crowbars -crowd -crowded -crowding -crowds -crowed -crowing -crown -crowned -crowning -crowns -crows -crozier -croziers -crucial -crucially -cruciate -crucible -crucibles -crucifiable -crucified -crucifix -crucifixes -crucifixion -crucifixions -cruciform -crucify -crucifying -crude -crudely -crudeness -cruder -crudest -crudities -crudity -cruel -crueler -cruelest -crueller -cruellest -cruelly -cruelness -cruelties -cruelty -cruise -cruised -cruiser -cruisers -cruises -cruising -cruller -crumb -crumbing -crumble -crumbled -crumbles -crumblier -crumbliest -crumbling -crumbly -crumbs -crumby -crummy -crumpet -crumpets -crumple -crumpled -crumples -crumpling -crunch -crunched -cruncher -crunchers -crunches -crunchier -crunchiest -crunching -crunchy -crusade -crusaded -crusader -crusaders -crusades -crusading -crush -crushed -crusher -crushers -crushes -crushing -crushingly -crust -crustacean -crustaceans -crustal -crusted -crustier -crustiest -crusts -crusty -crutch -crutches -crux -cruxes -cry -crying -cryings -cryogenic -cryogenics -cryostat -crypt -cryptanalysis -cryptanalyst -cryptanalytic -cryptic -cryptically -cryptogram -cryptographer -cryptographers -cryptographic -cryptographically -cryptography -cryptology -crypts -crystal -crystalclear -crystalline -crystallisation -crystallise -crystallised -crystallises -crystallising -crystallographer -crystallographers -crystallographic -crystallography -crystals -cub -cuba -cuban -cubans -cube -cubed -cubes -cubic -cubical -cubically -cubicle -cubicles -cubing -cubism -cubist -cubistic -cubists -cubit -cubits -cuboid -cubs -cuckold -cuckolded -cuckoo -cuckoos -cucumber -cucumbers -cud -cuddle -cuddled -cuddles -cuddlier -cuddliest -cuddliness -cuddling -cuddly -cudgel -cudgels -cuds -cue -cued -cueing -cues -cuff -cuffed -cuffing -cuffs -cuing -cuirass -cuisine -culdesac -culinary -cull -culled -culling -culls -culminate -culminated -culminates -culminating -culmination -culpability -culpable -culpably -culprit -culprits -cult -cultivable -cultivar -cultivate -cultivated -cultivates -cultivating -cultivation -cultivations -cultivator -cultivators -cults -cultural -culturally -culture -cultured -cultures -culturing -cultus -culvert -cumbersome -cumbersomely -cumlaude -cummerbund -cumulative -cumulatively -cumulus -cuneiform -cunnilingus -cunning -cunningly -cup -cupboard -cupboards -cupful -cupid -cupidinously -cupidity -cupola -cupolas -cupped -cupping -cuprous -cups -cur -curable -curare -curate -curated -curates -curative -curator -curatorial -curators -curatorships -curb -curbed -curbing -curbs -curd -curdle -curdled -curdles -curdling -curds -cure -cured -curer -cures -curfew -curfews -curia -curial -curie -curies -curing -curio -curiosities -curiosity -curious -curiously -curl -curled -curlers -curlew -curlews -curlicues -curlier -curliest -curliness -curling -curls -curly -curmudgeons -currant -currants -currencies -currency -current -currently -currents -curricle -curricula -curricular -curriculum -curried -curries -curry -currying -curs -curse -cursed -curses -cursing -cursive -cursor -cursorily -cursors -cursory -curt -curtail -curtailed -curtailing -curtailment -curtailments -curtails -curtain -curtained -curtaining -curtains -curtilage -curtly -curtness -curtsey -curtseyed -curtseying -curtseys -curtsied -curtsies -curtsy -curtsying -curvaceous -curvature -curvatures -curve -curved -curves -curvilinear -curving -curvy -cushion -cushioned -cushioning -cushions -cusp -cusps -cuss -cussedness -custard -custards -custodial -custodian -custodians -custodianship -custody -custom -customarily -customary -customer -customers -customisable -customisation -customisations -customise -customised -customising -customs -cut -cutback -cutbacks -cute -cutely -cuteness -cutest -cuticle -cuticles -cutlass -cutlasses -cutler -cutlery -cutlet -cutlets -cutout -cutouts -cutprice -cutrate -cuts -cutter -cutters -cutthroat -cutting -cuttingly -cuttings -cuttle -cuttlefish -cyan -cyanide -cyanogen -cybernetic -cybernetics -cyberpunk -cyberspace -cyborg -cycad -cycads -cycle -cycled -cycles -cycleway -cycleways -cyclic -cyclical -cyclically -cycling -cyclist -cyclists -cycloid -cyclone -cyclones -cyclops -cyclotron -cyclotrons -cygnet -cygnets -cylinder -cylinders -cylindrical -cylindrically -cymbal -cymbals -cynic -cynical -cynically -cynicism -cynics -cypher -cyphers -cypress -cypresses -cyprian -cyprians -cypriot -cypriots -cyprus -cyst -cysteine -cystic -cystine -cystitis -cysts -cytochrome -cytogenetic -cytological -cytology -cytoplasm -cytoplasmic -cytosine -cytotoxic -czar -czars -czech -czechs -dab -dabbed -dabbing -dabble -dabbled -dabbler -dabbles -dabbling -dabs -dace -dacha -dachau -dachshund -dactyl -dactylic -dactyls -dad -daddies -daddy -daddylonglegs -dado -dads -daemon -daemonic -daemons -daffodil -daffodils -daffy -daft -dafter -daftest -daftness -dagama -dagga -dagger -daggers -dahlia -dahlias -dahomey -dailies -daily -daintier -daintiest -daintily -daintiness -dainty -dairies -dairy -dairying -dairyman -dairymen -dais -daisies -daisy -dakar -dakoits -dale -dales -dallas -dalliance -dallied -dally -dallying -dam -damage -damaged -damages -damaging -damagingly -damascus -damask -dame -dames -dammed -damming -damn -damnable -damnably -damnation -damned -damnify -damning -damningly -damns -damp -damped -dampen -dampened -dampening -dampens -damper -dampers -dampest -damping -dampish -damply -dampness -damps -dams -damsel -damsels -damson -damsons -dan -dance -danceable -danced -dancer -dancers -dances -dancing -dandelion -dandelions -dandies -dandruff -dandy -dane -danes -danger -dangerous -dangerously -dangerousness -dangers -dangle -dangled -dangles -dangling -daniel -danish -dank -dankest -dante -danube -danzig -dapper -dapple -dappled -dapples -dare -dared -daredevil -dares -daring -daringly -dark -darken -darkened -darkening -darkens -darker -darkest -darkish -darkly -darkness -darkroom -darkrooms -darling -darlings -darn -darned -darning -darns -dart -dartboard -dartboards -darted -darter -darters -darting -darts -darwin -dash -dashboard -dashed -dashes -dashing -dassie -dassies -dastardly -data -database -databases -datable -date -dated -dateline -dates -dating -dative -datum -daub -daubed -dauber -daubing -daughter -daughterinlaw -daughters -daughtersinlaw -daunt -daunted -daunting -dauntingly -dauntless -daunts -dauphin -dauphins -david -davinci -dawdle -dawdled -dawdling -dawn -dawned -dawning -dawns -day -daybreak -daycare -daydream -daydreaming -daydreams -daylight -daylights -daylong -dayold -days -daytime -daze -dazed -dazedly -dazing -dazzle -dazzled -dazzler -dazzles -dazzling -dazzlingly -dday -deacon -deaconess -deaconesses -deacons -deactivate -deactivated -deactivates -deactivating -deactivation -dead -deadbeat -deaden -deadend -deadened -deadening -deadens -deader -deadlier -deadliest -deadline -deadlines -deadlock -deadlocked -deadlocking -deadlocks -deadly -deadness -deadon -deadpan -deadsea -deaf -deafanddumb -deafen -deafened -deafening -deafeningly -deafens -deafer -deafest -deafness -deal -dealer -dealers -dealership -dealerships -dealing -dealings -deals -dealt -dean -deanery -deans -dear -dearer -dearest -dearie -dearies -dearly -dearness -dears -dearth -deary -death -deathbed -deathless -deathly -deaths -deb -debacle -debacles -debar -debark -debarred -debars -debase -debased -debasement -debaser -debasing -debatable -debate -debated -debater -debaters -debates -debating -debauch -debauched -debauchery -debenture -debentures -debilitate -debilitated -debilitating -debility -debit -debited -debiting -debits -debonair -debone -deboned -debones -debrief -debriefed -debriefing -debris -debt -debtor -debtors -debts -debug -debugged -debugger -debuggers -debugging -debugs -debunk -debunks -debut -debutant -debutante -debutantes -debutants -debuts -decade -decadence -decadent -decades -decaf -decaffeinate -decaffeinated -decagon -decagons -decamp -decamped -decant -decanted -decanter -decanters -decanting -decants -decapitate -decapitated -decapitates -decapitating -decapitation -decapitations -decapod -decathlon -decay -decayed -decaying -decays -decease -deceased -deceases -deceit -deceitful -deceitfulness -deceits -deceive -deceived -deceiver -deceives -deceiving -decelerate -decelerated -decelerates -decelerating -deceleration -decelerations -december -decency -decent -decently -decentralisation -decentralise -decentralised -decentralising -deception -deceptions -deceptive -deceptively -decibel -decibels -decidability -decidable -decide -decided -decidedly -decider -decides -deciding -deciduous -decile -deciles -decilitre -decimal -decimalisation -decimalise -decimals -decimate -decimated -decimating -decimation -decimetres -decipher -decipherable -deciphered -deciphering -decipherment -decipherments -decision -decisions -decisive -decisively -decisiveness -deck -deckchair -deckchairs -decked -decker -decking -decks -declaim -declaimed -declaiming -declaims -declamation -declamatory -declaration -declarations -declarative -declaratory -declare -declared -declarer -declarers -declares -declaring -declassification -declassified -declension -declensions -declination -declinations -decline -declined -declines -declining -declivity -deco -decode -decoded -decoder -decoders -decodes -decoding -decoke -decolonisation -decommission -decommissioned -decommissioning -decomposable -decompose -decomposed -decomposes -decomposing -decomposition -decompositions -decompress -decompressed -decompressing -decompression -decongestants -deconstruct -deconstructed -deconstructing -deconstruction -deconstructionist -deconstructive -decontaminated -decontaminating -decontamination -deconvolution -deconvolve -decor -decorate -decorated -decorates -decorating -decoration -decorations -decorative -decoratively -decorator -decorators -decorous -decorously -decors -decorum -decouple -decoupled -decoupling -decoy -decoyed -decoying -decoys -decrease -decreased -decreases -decreasing -decreasingly -decree -decreed -decreeing -decrees -decrement -decremental -decremented -decrementing -decrements -decrepit -decrepitude -decried -decries -decriminalisation -decriminalise -decriminalised -decriminalising -decry -decrying -decrypt -decrypted -decrypting -decryption -decrypts -decustomised -dedicate -dedicated -dedicates -dedicating -dedication -dedications -deduce -deduced -deduces -deducible -deducing -deduct -deducted -deductible -deducting -deduction -deductions -deductive -deductively -deducts -dee -deed -deeds -deejay -deem -deemed -deeming -deems -deep -deepen -deepened -deepening -deepens -deeper -deepest -deepfreeze -deepfreezing -deepfried -deepfrozen -deepish -deeply -deepness -deeprooted -deeps -deepsea -deepseated -deer -deerstalker -deerstalkers -deerstalking -deface -defaced -defaces -defacing -defacto -defamation -defamatory -defame -defamed -defamer -defames -defaming -default -defaulted -defaulter -defaulters -defaulting -defaults -defeat -defeated -defeater -defeating -defeatism -defeatist -defeats -defecate -defecating -defect -defected -defecting -defection -defections -defective -defectiveness -defectives -defector -defectors -defects -defence -defenceless -defencelessness -defences -defend -defendant -defendants -defended -defender -defenders -defending -defends -defenestrate -defenestrated -defenestration -defenses -defensibility -defensible -defensive -defensively -defensiveness -defer -deference -deferential -deferentially -deferment -deferral -deferred -deferring -defers -defiance -defiant -defiantly -defibrillator -defibrillators -deficiencies -deficiency -deficient -deficit -deficits -defied -defier -defies -defile -defiled -defilement -defiles -defiling -definable -definably -define -defined -definer -defines -defining -definite -definitely -definiteness -definition -definitional -definitions -definitive -definitively -definitiveness -deflatable -deflate -deflated -deflates -deflating -deflation -deflationary -deflect -deflected -deflecting -deflection -deflections -deflector -deflectors -deflects -deflower -deflowering -defoliants -defoliation -deforestation -deforested -deform -deformable -deformation -deformations -deformed -deforming -deformities -deformity -deforms -defragmentation -defraud -defrauded -defrauding -defrauds -defray -defrayed -defrost -defrosted -defrosting -defrosts -deft -defter -deftly -deftness -defunct -defuse -defused -defuses -defusing -defy -defying -degas -degauss -degaussed -degaussing -degeneracies -degeneracy -degenerate -degenerated -degenerates -degenerating -degeneration -degenerative -degradable -degradation -degradations -degrade -degraded -degrades -degrading -degrease -degree -degrees -dehorn -dehumanised -dehumanises -dehumanising -dehumidifier -dehydrate -dehydrated -dehydrating -dehydration -deification -deified -deifies -deify -deifying -deism -deist -deists -deities -deity -deject -dejected -dejectedly -dejection -dejects -deklerk -delate -delay -delayed -delaying -delays -delectable -delectation -delegate -delegated -delegates -delegating -delegation -delegations -deletable -delete -deleted -deleter -deleterious -deleteriously -deletes -deleting -deletion -deletions -delhi -deli -deliberate -deliberated -deliberately -deliberating -deliberation -deliberations -deliberative -delible -delicacies -delicacy -delicate -delicately -delicatessen -delicatessens -delicious -deliciously -delict -delight -delighted -delightedly -delightful -delightfully -delighting -delights -delilah -delimit -delimited -delimiter -delimiters -delimiting -delimits -delineate -delineated -delineates -delineating -delineation -delinquency -delinquent -delinquents -deliquesced -deliquescent -delirious -deliriously -delirium -deliver -deliverable -deliverance -delivered -deliverer -deliverers -deliveries -delivering -delivers -delivery -dell -dells -delphi -delphiniums -delta -deltas -deltoid -deltoids -delude -deluded -deludes -deluding -deluge -deluged -deluges -deluging -delusion -delusional -delusions -delusive -deluxe -delve -delved -delves -delving -demagnetisation -demagnetise -demagog -demagogic -demagogue -demagoguery -demagogues -demagogy -demand -demanded -demander -demanding -demands -demarcate -demarcated -demarcating -demarcation -demarcations -dematerialise -dematerialised -dematerialises -demean -demeaned -demeaning -demeanour -demeans -dement -demented -dementedly -dementia -demerge -demerit -demigod -demigods -demijohns -demilitarisation -demilitarised -demise -demised -demises -demist -demists -demo -demobilisation -demobilised -demobs -democracies -democracy -democrat -democratic -democratically -democratisation -democratising -democrats -demodulator -demographer -demographers -demographic -demographically -demographics -demography -demolish -demolished -demolisher -demolishes -demolishing -demolition -demolitions -demon -demonic -demonise -demonology -demons -demonstrable -demonstrably -demonstrate -demonstrated -demonstrates -demonstrating -demonstration -demonstrations -demonstrative -demonstratively -demonstratives -demonstrator -demonstrators -demoralisation -demoralise -demoralised -demoralising -demote -demoted -demotes -demotic -demotion -demount -demountable -demounted -demounting -demur -demure -demurely -demurred -demurring -demurs -demystification -demystify -demystifying -den -denationalisation -denatured -denaturing -dendrites -dendritic -dendrochronological -dendrochronology -deniable -denial -denials -denied -denier -deniers -denies -denigrate -denigrated -denigrates -denigrating -denigration -denigrations -denim -denims -denizen -denizens -denmark -denominated -denomination -denominational -denominations -denominator -denominators -denotation -denotational -denotations -denote -denoted -denotes -denoting -denouement -denounce -denounced -denouncements -denounces -denouncing -dens -dense -densely -denseness -denser -densest -densities -densitometry -density -dent -dental -dented -dentin -dentine -denting -dentist -dentistry -dentists -dentition -dents -denture -dentures -denudation -denude -denuded -denudes -denunciation -denunciations -denver -deny -denying -deodorant -deodorants -deodorised -depart -departed -departer -departing -department -departmental -departmentally -departments -departs -departure -departures -depend -dependability -dependable -dependant -dependants -depended -dependence -dependencies -dependency -dependent -depending -depends -depersonalisation -depersonalising -depict -depicted -depicting -depiction -depictions -depicts -deplete -depleted -depleting -depletion -deplorable -deplorably -deplore -deplored -deplores -deploring -deploy -deployed -deploying -deployment -deployments -deploys -depolarisation -depolarisations -depoliticisation -deponent -depopulated -depopulation -deport -deportation -deportations -deported -deportee -deportees -deporting -deportment -deports -depose -deposed -deposing -deposit -depositary -deposited -depositing -deposition -depositional -depositions -depositories -depositors -depository -deposits -depot -depots -deprave -depraved -depraves -depraving -depravity -deprecate -deprecated -deprecates -deprecating -deprecatingly -deprecation -deprecations -deprecatory -depreciate -depreciated -depreciating -depreciation -depredation -depredations -depress -depressant -depressants -depressed -depresses -depressing -depressingly -depression -depressions -depressive -depressives -deprivation -deprivations -deprive -deprived -deprives -depriving -depth -depths -deputation -deputations -depute -deputed -deputes -deputies -deputise -deputised -deputises -deputising -deputy -derail -derailed -derailing -derailment -derails -derange -deranged -derangement -derate -derated -derates -derbies -derby -deregulate -deregulated -deregulating -deregulation -derelict -dereliction -derelictions -deride -derided -deriders -derides -deriding -derision -derisive -derisively -derisory -derivable -derivation -derivations -derivative -derivatively -derivatives -derive -derived -derives -deriving -dermal -dermatitis -dermatological -dermatologist -dermatologists -dermatology -dermic -dermis -derogate -derogation -derogations -derogatory -derrick -dervishes -desalination -desalt -desaturated -descant -descend -descendant -descendants -descended -descendent -descender -descenders -descending -descends -descent -descents -describable -describe -described -describer -describers -describes -describing -description -descriptions -descriptive -descriptively -descriptiveness -descriptivism -descriptor -descriptors -desecrate -desecrated -desecrates -desecrating -desecration -desegregation -deselected -desensitising -desert -deserted -deserter -deserters -desertification -deserting -desertion -desertions -deserts -deserve -deserved -deservedly -deserves -deserving -desiccated -desiccation -desiccator -desiderata -desideratum -design -designable -designate -designated -designates -designating -designation -designational -designations -designator -designators -designed -designedly -designer -designers -designing -designs -desirabilia -desirability -desirable -desirableness -desirably -desire -desired -desires -desiring -desirous -desist -desisted -desisting -desk -deskilling -desks -desktop -desktops -desolate -desolated -desolating -desolation -desorption -despair -despaired -despairing -despairingly -despairs -despatch -despatched -despatches -despatching -desperado -desperate -desperately -desperation -despicable -despicably -despisal -despise -despised -despises -despising -despite -despoil -despoiled -despoiling -despond -despondency -despondent -despondently -despot -despotic -despotism -despots -dessert -desserts -dessicated -dessication -destabilisation -destabilise -destabilised -destabilising -destination -destinations -destine -destined -destinies -destiny -destitute -destitution -destroy -destroyable -destroyed -destroyer -destroyers -destroying -destroys -destruct -destruction -destructive -destructively -destructiveness -desuetude -desultorily -desultoriness -desultory -detach -detachable -detached -detaches -detaching -detachment -detachments -detail -detailed -detailing -details -detain -detained -detainee -detainees -detainer -detaining -detains -detect -detectability -detectable -detectably -detected -detecting -detection -detections -detective -detectives -detector -detectors -detects -detent -detente -detention -detentions -deter -detergent -detergents -deteriorate -deteriorated -deteriorates -deteriorating -deterioration -determinable -determinacy -determinant -determinants -determinate -determinately -determination -determinations -determinative -determine -determined -determinedly -determiner -determines -determining -determinism -determinist -deterministic -deterministically -deterred -deterrence -deterrent -deterrents -deterring -deters -detest -detestable -detestably -detestation -detested -detester -detesters -detesting -detests -dethrone -dethroned -detonate -detonated -detonates -detonating -detonation -detonations -detonator -detonators -detour -detoured -detours -detox -detoxification -detoxify -detract -detracted -detracting -detraction -detractor -detractors -detracts -detriment -detrimental -detrimentally -detrital -detritus -detroit -deuce -deuced -deuces -deuterium -deuteron -devaluation -devaluations -devalue -devalued -devalues -devaluing -devastate -devastated -devastating -devastatingly -devastation -develop -developed -developer -developers -developing -development -developmental -developmentally -developments -develops -deviance -deviancy -deviant -deviants -deviate -deviated -deviates -deviating -deviation -deviations -device -devices -devil -devilish -devilishly -devilled -devilment -devilry -devils -devious -deviously -deviousness -devisal -devise -devised -deviser -devises -devising -devoice -devoid -devoir -devolution -devolve -devolved -devolving -devote -devoted -devotedly -devotedness -devotee -devotees -devotes -devoting -devotion -devotional -devotions -devour -devoured -devourer -devourers -devouring -devours -devout -devoutly -devoutness -dew -dewdrop -dewdrops -dews -dewy -dexterity -dexterous -dexterously -dextral -dextrose -dextrous -dextrously -dhow -diabetes -diabetic -diabetics -diabolic -diabolical -diabolically -diabolism -diachronic -diaconal -diacritical -diacriticals -diacritics -diadem -diadems -diagnosable -diagnose -diagnosed -diagnoses -diagnosing -diagnosis -diagnostic -diagnostically -diagnostician -diagnostics -diagonal -diagonalise -diagonalised -diagonalises -diagonalising -diagonally -diagonals -diagram -diagrammatic -diagrammatically -diagrams -dial -dialect -dialectal -dialectic -dialectical -dialectically -dialectics -dialects -dialing -dialled -dialler -dialling -dialog -dialogue -dialogues -dials -dialysis -diamante -diameter -diameters -diametric -diametrically -diamond -diamonds -diana -diapason -diaper -diapers -diaphanous -diaphragm -diaphragmatic -diaphragms -diaries -diarist -diarrhea -diarrhoea -diarrhoeal -diary -diaspora -diastolic -diathermy -diatom -diatomic -diatoms -diatonic -diatribe -diatribes -dice -diced -dices -dicey -dichloride -dichotomies -dichotomous -dichotomy -diciest -dicing -dickens -dictate -dictated -dictates -dictating -dictation -dictator -dictatorial -dictatorially -dictators -dictatorship -dictatorships -diction -dictionaries -dictionary -dictions -dictum -did -didactic -didnt -die -died -diehard -diehards -dielectric -dielectrics -dies -diesel -dieselelectric -diesels -diet -dietary -dieted -dieter -dietetic -dietician -dieticians -dieting -dietitian -dietitians -diets -differ -differed -difference -differences -differencing -different -differentiability -differentiable -differential -differentially -differentials -differentiate -differentiated -differentiates -differentiating -differentiation -differentiations -differentiators -differently -differing -differs -difficult -difficulties -difficulty -diffidence -diffident -diffidently -diffract -diffracted -diffracting -diffraction -diffracts -diffuse -diffused -diffuser -diffusers -diffuses -diffusing -diffusion -diffusional -diffusive -diffusivity -dig -digest -digested -digester -digestible -digesting -digestion -digestions -digestive -digestives -digests -digger -diggers -digging -diggings -digit -digital -digitalis -digitally -digitisation -digitise -digitised -digitiser -digitisers -digitising -digits -dignified -dignify -dignifying -dignitaries -dignitary -dignities -dignity -digraphs -digress -digressed -digressing -digression -digressions -digs -dihedral -dikes -diktat -diktats -dilapidated -dilapidation -dilatation -dilate -dilated -dilates -dilating -dilation -dilator -dilatory -dildo -dilemma -dilemmas -dilettante -dilettantes -diligence -diligent -diligently -dill -dilly -diluent -dilute -diluted -diluter -dilutes -diluting -dilution -dilutions -dim -dime -dimension -dimensional -dimensionality -dimensionally -dimensioned -dimensioning -dimensionless -dimensions -dimer -dimers -dimes -diminish -diminishable -diminished -diminishes -diminishing -diminuendo -diminution -diminutive -diminutives -dimly -dimmed -dimmer -dimmers -dimmest -dimming -dimness -dimorphic -dimorphism -dimple -dimpled -dimples -dims -dimwit -din -dinar -dinars -dine -dined -diner -diners -dines -ding -dingdong -dinged -dinghies -dinghy -dingier -dingiest -dinginess -dingle -dingo -dingy -dining -dinky -dinner -dinners -dinosaur -dinosaurs -dint -dints -diocesan -diocese -diode -diodes -dioptre -dioptres -dioxide -dioxides -dioxin -dioxins -dip -diphtheria -diphthong -diphthongs -diplexers -diploid -diploma -diplomacy -diplomas -diplomat -diplomatic -diplomatically -diplomats -dipolar -dipole -dipoles -dipped -dipper -dipping -dips -dipsomania -dipsomaniac -dipsomaniacs -dipstick -dipsticks -dire -direct -directed -directing -direction -directional -directionality -directionally -directionless -directions -directive -directives -directly -directness -director -directorate -directorates -directorial -directories -directors -directorship -directorships -directory -directs -direly -direness -direst -dirge -dirges -dirigible -dirigiste -dirt -dirtied -dirtier -dirties -dirtiest -dirtily -dirtiness -dirts -dirty -dirtying -disabilities -disability -disable -disabled -disablement -disables -disabling -disabuse -disabused -disadvantage -disadvantaged -disadvantageous -disadvantageously -disadvantages -disaffected -disaffection -disaffiliate -disaffiliated -disaffiliating -disaffiliation -disaggregate -disaggregated -disaggregation -disagree -disagreeable -disagreeably -disagreed -disagreeing -disagreement -disagreements -disagrees -disallow -disallowed -disallowing -disallows -disambiguate -disambiguated -disambiguating -disambiguation -disappear -disappearance -disappearances -disappeared -disappearing -disappears -disappoint -disappointed -disappointing -disappointingly -disappointment -disappointments -disappoints -disapprobation -disapproval -disapprove -disapproved -disapproves -disapproving -disapprovingly -disarm -disarmament -disarmed -disarmer -disarming -disarmingly -disarms -disarranging -disarray -disarrayed -disassemble -disassembled -disassembler -disassembles -disassembling -disassembly -disassociate -disassociated -disassociating -disassociation -disaster -disasters -disastrous -disastrously -disavow -disavowal -disavowed -disavowing -disband -disbanded -disbanding -disbandment -disbands -disbars -disbelief -disbelieve -disbelieved -disbeliever -disbelievers -disbelieving -disbelievingly -disburse -disbursed -disbursement -disbursements -disc -discant -discard -discarded -discarding -discards -discern -discerned -discernible -discernibly -discerning -discernment -discerns -discharge -discharged -discharges -discharging -disciple -disciples -discipleship -disciplinarian -disciplinarians -disciplinary -discipline -disciplined -disciplines -disciplining -disclaim -disclaimed -disclaimer -disclaimers -disclaiming -disclaims -disclose -disclosed -discloses -disclosing -disclosure -disclosures -disco -discography -discolour -discolouration -discoloured -discolours -discomfit -discomfited -discomfiture -discomfort -discomforting -discomforts -disconcert -disconcerted -disconcerting -disconcertingly -disconnect -disconnected -disconnecting -disconnection -disconnections -disconnects -disconsolate -disconsolately -disconsolation -discontent -discontented -discontentedly -discontents -discontinuance -discontinuation -discontinue -discontinued -discontinues -discontinuing -discontinuities -discontinuity -discontinuous -discontinuously -discord -discordance -discordant -discords -discotheque -discotheques -discount -discountability -discountable -discounted -discounting -discounts -discourage -discouraged -discouragement -discouragements -discourages -discouraging -discouragingly -discourse -discoursed -discourses -discoursing -discourteous -discourteously -discourtesy -discover -discoverable -discovered -discoverer -discoverers -discoveries -discovering -discovers -discovery -discredit -discreditable -discredited -discrediting -discredits -discreet -discreetly -discreetness -discrepancies -discrepancy -discrepant -discrete -discretely -discretion -discretionary -discriminant -discriminants -discriminate -discriminated -discriminates -discriminating -discrimination -discriminative -discriminator -discriminators -discriminatory -discs -discursive -discursively -discus -discuss -discussable -discussed -discusses -discussing -discussion -discussions -disdain -disdained -disdainful -disdainfully -disdaining -disease -diseased -diseases -disembark -disembarkation -disembarked -disembarking -disembodied -disembodiment -disembowel -disembowelled -disembowelment -disembowels -disenchanted -disenchantment -disenfranchise -disenfranchised -disenfranchisement -disenfranchises -disenfranchising -disengage -disengaged -disengagement -disengaging -disentangle -disentangled -disentangles -disentangling -disequilibrium -disestablish -disestablished -disestablishing -disestablishment -disfavour -disfigure -disfigured -disfigurement -disfigurements -disfigures -disfiguring -disfranchise -disgorge -disgorged -disgorging -disgrace -disgraced -disgraceful -disgracefully -disgraces -disgracing -disgruntled -disgruntlement -disguise -disguised -disguises -disguising -disgust -disgusted -disgustedly -disgusting -disgustingly -disgusts -dish -disharmonious -disharmony -dishcloth -disheartened -disheartening -dished -dishes -dishevelled -dishier -dishing -dishonest -dishonestly -dishonesty -dishonour -dishonourable -dishonourably -dishonoured -dishpan -dishwasher -dishwashers -dishwater -dishy -disillusion -disillusioned -disillusioning -disillusionment -disincentive -disincentives -disinclination -disinclined -disinfect -disinfectant -disinfectants -disinfected -disinfecting -disinfection -disinformation -disingenuous -disingenuously -disinherit -disinherited -disintegrate -disintegrated -disintegrates -disintegrating -disintegration -disinter -disinterest -disinterested -disinterestedly -disinterestedness -disinterred -disinvest -disinvestment -disjoin -disjoint -disjointed -disjointedly -disjointness -disjunct -disjunction -disjunctions -disjunctive -diskette -diskettes -dislike -disliked -dislikes -disliking -dislocate -dislocated -dislocates -dislocating -dislocation -dislocations -dislodge -dislodged -dislodges -dislodging -disloyal -disloyalty -dismal -dismally -dismantle -dismantled -dismantles -dismantling -dismay -dismayed -dismaying -dismays -dismember -dismembered -dismembering -dismemberment -dismembers -dismiss -dismissal -dismissals -dismissed -dismisses -dismissible -dismissing -dismissive -dismissively -dismount -dismounted -dismounting -dismounts -disobedience -disobedient -disobey -disobeyed -disobeying -disobeys -disorder -disordered -disorderly -disorders -disorganisation -disorganise -disorganised -disorganising -disorient -disorientated -disorientating -disorientation -disoriented -disown -disowned -disowning -disowns -disparage -disparaged -disparagement -disparaging -disparagingly -disparate -disparities -disparity -dispassionate -dispassionately -dispatch -dispatched -dispatcher -dispatchers -dispatches -dispatching -dispel -dispelled -dispelling -dispels -dispensable -dispensaries -dispensary -dispensation -dispensations -dispense -dispensed -dispenser -dispensers -dispenses -dispensing -dispersal -dispersant -disperse -dispersed -disperser -dispersers -disperses -dispersing -dispersion -dispersions -dispersive -dispersively -dispirited -dispiritedly -dispiriting -displace -displaced -displacement -displacements -displacer -displaces -displacing -display -displayable -displayed -displaying -displays -displease -displeased -displeasing -displeasure -disporting -disposable -disposables -disposal -disposals -dispose -disposed -disposer -disposers -disposes -disposing -disposition -dispositions -dispossess -dispossessed -dispossession -disproof -disproofs -disproportional -disproportionally -disproportionate -disproportionately -disprovable -disprove -disproved -disproves -disproving -disputable -disputant -disputants -disputation -disputatious -dispute -disputed -disputes -disputing -disqualification -disqualifications -disqualified -disqualifies -disqualify -disqualifying -disquiet -disquieting -disquietude -disquisition -disquisitions -disregard -disregarded -disregarding -disregards -disrepair -disreputable -disrepute -disrespect -disrespectful -disrespectfully -disrespects -disrobe -disrobing -disrupt -disrupted -disrupting -disruption -disruptions -disruptive -disruptively -disruptor -disrupts -dissatisfaction -dissatisfactions -dissatisfied -dissatisfies -dissatisfy -dissatisfying -dissect -dissected -dissecting -dissection -dissections -dissector -dissects -dissemble -dissembled -dissembling -disseminate -disseminated -disseminating -dissemination -dissension -dissensions -dissent -dissented -dissenter -dissenters -dissenting -dissertation -dissertations -disservice -dissidence -dissident -dissidents -dissimilar -dissimilarities -dissimilarity -dissimulation -dissipate -dissipated -dissipates -dissipating -dissipation -dissipative -dissociate -dissociated -dissociating -dissociation -dissociative -dissociatively -dissolute -dissolution -dissolve -dissolved -dissolves -dissolving -dissonance -dissonances -dissonant -dissuade -dissuaded -dissuades -dissuading -distaff -distal -distally -distance -distanced -distances -distancing -distant -distantly -distaste -distasteful -distastefully -distemper -distempered -distempers -distended -distension -distil -distillate -distillation -distillations -distilled -distiller -distilleries -distillers -distillery -distilling -distils -distinct -distinction -distinctions -distinctive -distinctively -distinctiveness -distinctly -distinctness -distinguish -distinguishable -distinguishably -distinguished -distinguishes -distinguishing -distort -distorted -distorter -distorting -distortion -distortions -distorts -distract -distracted -distractedly -distractedness -distracting -distractingly -distraction -distractions -distracts -distraught -distress -distressed -distresses -distressing -distressingly -distributable -distribute -distributed -distributes -distributing -distribution -distributional -distributions -distributive -distributivity -distributor -distributors -district -districts -distrust -distrusted -distrustful -distrustfully -distrusting -distrusts -disturb -disturbance -disturbances -disturbed -disturbing -disturbingly -disturbs -disulphide -disunion -disunite -disunity -disuse -disused -disyllabic -disyllable -ditch -ditched -ditches -ditching -dither -dithered -dithering -dithers -ditties -ditto -ditty -diuresis -diuretic -diuretics -diurnal -diva -divan -divans -divas -dive -divebombing -dived -diver -diverge -diverged -divergence -divergences -divergent -diverges -diverging -divers -diverse -diversely -diversification -diversified -diversifies -diversify -diversifying -diversion -diversionary -diversions -diversities -diversity -divert -diverted -diverticular -diverting -diverts -dives -divest -divested -divesting -divide -divided -dividend -dividends -divider -dividers -divides -dividing -divination -divine -divined -divinely -diviner -divines -divinest -diving -divining -divinities -divinity -divisibility -divisible -division -divisional -divisions -divisive -divisiveness -divisor -divisors -divorce -divorced -divorcee -divorcees -divorces -divorcing -divot -divots -divulge -divulged -divulges -divulging -dizzier -dizziest -dizzily -dizziness -dizzy -dizzying -dizzyingly -do -doberman -doc -docile -docilely -docility -dock -dockage -docked -docker -dockers -docket -dockets -docking -dockland -docklands -docks -dockside -dockyard -dockyards -docs -doctor -doctoral -doctorate -doctorates -doctored -doctoring -doctors -doctrinaire -doctrinal -doctrinally -doctrine -doctrines -document -documentaries -documentary -documentation -documented -documenting -documents -dodecahedra -dodecahedral -dodecahedron -dodge -dodged -dodgem -dodgems -dodger -dodgers -dodges -dodgier -dodging -dodgy -dodo -doe -doer -doers -does -doesnt -doffed -doffing -dog -dogdays -doge -dogeared -doges -dogfight -dogfights -dogfish -dogged -doggedly -doggedness -doggerel -dogging -doggy -doglike -dogma -dogmas -dogmatic -dogmatically -dogmatism -dogmatist -dogmatists -dogood -dogooder -dogooders -dogs -dogsbody -dogtag -dogy -doh -dohs -doily -doing -doings -doityourself -doldrums -dole -doled -doleful -dolefully -dolerite -doles -doling -doll -dollar -dollars -dolled -dollies -dollop -dolls -dolly -dolman -dolmen -dolomite -dolorous -dolphin -dolphinarium -dolphins -dolt -domain -domains -dome -domed -domes -domestic -domestically -domesticated -domestication -domesticity -domestics -domicile -domiciled -domiciliary -dominance -dominant -dominantly -dominate -dominated -dominates -dominating -domination -domineer -domineered -domineering -dominion -dominions -domino -don -donate -donated -donates -donating -donation -donations -done -dong -donga -donjuan -donkey -donkeys -donned -donning -donor -donors -dons -dont -donut -doodle -doodled -doodles -doodling -doom -doomed -dooming -dooms -doomsday -door -doorbell -doorbells -doorhandles -doorkeeper -doorkeepers -doorknob -doorknobs -doorman -doormat -doormats -doormen -doornail -doorpost -doors -doorstep -doorsteps -doorstop -doorstops -doorway -doorways -dopamine -dope -doped -dopes -dopey -dopier -doping -dopy -dor -dorado -dormancy -dormant -dormer -dormers -dormice -dormitories -dormitory -dormouse -dorsal -dorsally -dosage -dosages -dose -dosed -doses -dosing -dossier -dossiers -dot -dotage -dote -doted -dotes -doting -dots -dotted -dottiness -dotting -dotty -double -doublebarrelled -doublecross -doublecrossing -doubled -doubledealing -doubledecker -doubledeckers -doubles -doublet -doubletalk -doublets -doubling -doubly -doubt -doubted -doubter -doubters -doubtful -doubtfully -doubting -doubtingly -doubtless -doubtlessly -doubts -douche -douching -dough -doughnut -doughnuts -doughs -doughty -dour -dourly -dourness -douse -doused -dousing -dove -dovecot -dovecote -dover -doves -dovetail -dovetails -dowager -dowagers -dowdier -dowdiest -dowdy -dowel -dowelling -dowels -down -downbeat -downcast -downed -downfall -downgrade -downgraded -downgrades -downgrading -downhearted -downhill -downing -downland -downlands -download -downloaded -downloading -downloads -downpipe -downpipes -downplay -downplayed -downpour -downpours -downright -downs -downside -downsize -downsized -downsizing -downstage -downstairs -downstream -downswing -downtoearth -downtrodden -downturn -downturns -downward -downwardly -downwards -downwind -downy -dowries -dowry -dowse -dowser -dowsers -dowsing -doyen -doyenne -doyens -doze -dozed -dozen -dozens -dozes -dozier -dozing -dozy -dr -drab -drabness -drachm -drachma -drachmas -dracone -draconian -dracula -draft -drafted -draftee -draftees -drafter -drafters -draftier -drafting -drafts -draftsman -drafty -drag -dragged -dragging -dragnet -dragon -dragonflies -dragonfly -dragons -dragoon -dragooned -dragoons -drags -drain -drainage -drained -drainer -draining -drainpipe -drainpipes -drains -drake -drakes -dram -drama -dramas -dramatic -dramatically -dramatics -dramatisation -dramatisations -dramatise -dramatised -dramatising -dramatist -dramatists -dramaturgical -drank -drape -draped -draper -draperies -drapers -drapery -drapes -draping -drastic -drastically -drat -draught -draughtier -draughtiest -draughts -draughtsman -draughtsmanship -draughtsmen -draughty -draw -drawable -drawback -drawbacks -drawbridge -drawbridges -drawcord -drawees -drawer -drawers -drawing -drawings -drawl -drawled -drawling -drawls -drawn -draws -dray -drays -dread -dreaded -dreadful -dreadfully -dreadfulness -dreading -dreadlocks -dreadnought -dreads -dream -dreamed -dreamer -dreamers -dreamier -dreamiest -dreamily -dreaming -dreamland -dreamless -dreamlike -dreams -dreamt -dreamy -drear -drearier -dreariest -drearily -dreariness -dreary -dredge -dredged -dredger -dredges -dredging -dregs -drench -drenched -drenches -drenching -dress -dressage -dressed -dresser -dressers -dresses -dressing -dressings -dressmaker -dressmakers -dressmaking -dressy -drew -dribble -dribbled -dribbler -dribbles -dribbling -dried -drier -driers -dries -driest -drift -drifted -drifter -drifters -drifting -drifts -driftwood -drill -drilled -driller -drilling -drills -drily -drink -drinkable -drinker -drinkers -drinking -drinks -drip -dripdry -dripped -dripping -drippy -drips -drivable -drive -drive -drivein -driveins -drivel -drivelled -drivelling -drivels -driven -driver -driverless -drivers -drives -driveway -driveways -driving -drizzle -drizzled -drizzles -drizzling -drizzly -droll -droller -drollery -drollest -dromedaries -dromedary -drone -droned -drones -droning -drool -drooled -drooling -drools -droop -drooped -droopier -droopiest -drooping -droopingly -droops -droopy -drop -droplet -droplets -dropout -dropouts -dropped -dropper -dropping -droppings -drops -dropsy -dross -drought -droughts -drove -drover -drovers -droves -droving -drown -drowned -drowning -drownings -drowns -drowse -drowsed -drowses -drowsier -drowsiest -drowsily -drowsiness -drowsy -drub -drubbed -drubbing -drudge -drudgery -drudges -drug -drugged -drugging -druggist -drugs -druid -druids -drum -drumbeat -drumbeats -drummed -drummer -drummers -drumming -drums -drumsticks -drunk -drunkard -drunkards -drunken -drunkenly -drunkenness -drunker -drunks -dry -drycleaned -drycleaning -dryer -dryers -dryeyed -drying -dryish -dryly -dryness -drystone -dual -dualism -dualisms -dualist -dualistic -dualities -duality -dually -duals -dub -dubbed -dubbing -dubious -dubiously -dubiousness -dublin -dubs -duce -duchess -duchesses -duchies -duchy -duck -duckbill -duckbilled -duckboards -ducked -ducking -duckings -duckling -ducklings -duckpond -ducks -duct -ducted -ductile -ducting -ducts -dud -dude -dudes -dudgeon -duds -due -duel -duelled -dueller -duellers -duelling -duellist -duels -dues -duet -duets -duff -duffel -dug -dugout -dugouts -duiker -duke -dukedom -dukedoms -dukes -dulcet -dulcimer -dull -dullard -dullards -dulled -duller -dullest -dulling -dullness -dulls -dully -dulness -duly -dumb -dumbbell -dumber -dumbest -dumbfound -dumbfounded -dumbfounding -dumbfounds -dumbly -dumbness -dumbstruck -dumfound -dumfounded -dumfounding -dumfounds -dummied -dummies -dummy -dump -dumped -dumper -dumping -dumpling -dumplings -dumps -dumpy -dun -dunce -dunces -dune -dunes -dung -dungarees -dungbeetle -dungeon -dungeons -dunghill -dunked -dunking -dunkirk -duo -duodenal -duodenum -duologue -duomo -duopoly -dupe -duped -dupes -duplex -duplicability -duplicate -duplicated -duplicates -duplicating -duplication -duplications -duplicator -duplicators -duplicities -duplicitous -duplicity -durability -durable -durables -durance -duration -durations -durban -duress -during -dusk -duskier -dusky -dust -dustbin -dustbins -dustcart -dusted -duster -dusters -dustier -dustily -dusting -dustman -dustmen -dustpan -dusts -dusty -dutch -dutchman -dutchmen -duties -dutiful -dutifully -dutifulness -duty -dutyfree -duvet -duvets -dux -dwarf -dwarfed -dwarfing -dwarfish -dwarfs -dwarves -dwell -dwelled -dweller -dwellers -dwelling -dwellings -dwells -dwelt -dwindle -dwindled -dwindles -dwindling -dyad -dyadic -dye -dyed -dyeing -dyeings -dyer -dyers -dyes -dyestuff -dyestuffs -dying -dyke -dykes -dynamic -dynamical -dynamically -dynamics -dynamism -dynamite -dynamited -dynamo -dynast -dynastic -dynasties -dynasts -dynasty -dyne -dysentery -dysfunction -dysfunctional -dysfunctions -dyslexia -dyslexic -dyslexically -dyslexics -dyspepsia -dyspeptic -dystrophy -each -eager -eagerly -eagerness -eagle -eagles -eaglet -eaglets -ear -earache -earaches -eardrop -eardrops -eardrum -eardrums -eared -earful -earholes -earl -earldom -earldoms -earlier -earliest -earlobe -earlobes -earls -early -earmark -earmarked -earmarking -earn -earned -earner -earners -earnest -earnestly -earnestness -earning -earnings -earns -earphone -earphones -earpiece -earpieces -earplug -earplugs -earring -earrings -ears -earshot -earsplitting -earth -earthbound -earthed -earthen -earthenware -earthiness -earthing -earthling -earthlings -earthly -earthquake -earthquakes -earths -earthshaking -earthshattering -earthwards -earthwork -earthworks -earthworm -earthworms -earthy -earwax -earwig -earwigs -ease -eased -easel -easels -easement -easements -eases -easier -easiest -easily -easiness -easing -east -eastbound -easter -easterly -eastern -easterners -easternmost -easting -eastward -eastwards -easy -easygoing -eat -eatable -eatage -eaten -eater -eaters -eatery -eating -eatings -eats -eaves -eavesdrop -eavesdropped -eavesdropper -eavesdroppers -eavesdropping -eavesdrops -ebb -ebbed -ebbing -ebbs -ebbtide -ebony -ebullience -ebullient -eccentric -eccentrically -eccentricities -eccentricity -eccentrics -ecclesiastic -ecclesiastical -ecclesiastically -echelon -echelons -echidna -echidnas -echinoderm -echinoderms -echo -echoed -echoic -echoing -eclair -eclairs -eclectic -eclecticism -eclipse -eclipsed -eclipses -eclipsing -ecliptic -ecological -ecologically -ecologist -ecologists -ecology -econometric -econometrics -economic -economical -economically -economics -economies -economisation -economise -economised -economises -economising -economist -economists -economy -ecosystem -ecosystems -ecstasies -ecstasy -ecstatic -ecstatically -ectopic -ectoplasm -ecuador -ecumenical -ecumenically -ecumenism -eczema -eddied -eddies -eddy -eddying -edema -eden -edge -edged -edgeless -edges -edgeways -edgewise -edgier -edgily -edginess -edging -edgings -edgy -edibility -edible -edibles -edict -edicts -edification -edifice -edifices -edified -edifies -edify -edifying -edison -edit -editable -edited -editing -edition -editions -editor -editorial -editorialised -editorially -editorials -editors -editorship -editorships -edits -educate -educated -educates -educating -education -educational -educationalist -educationalists -educationally -educationist -educationists -educations -educative -educator -educators -eduction -eel -eels -eelworm -eelworms -eerie -eerier -eeriest -eerily -eeriness -eery -efface -effaced -effacing -effect -effected -effecting -effective -effectively -effectiveness -effector -effectors -effects -effectual -effectually -effeminacy -effeminate -efferent -effervescence -effervescent -effete -efficacious -efficacy -efficiencies -efficiency -efficient -efficiently -effigies -effigy -effluent -effluents -effluvia -effluxion -effort -effortless -effortlessly -efforts -effrontery -effulgence -effulgent -effusion -effusions -effusive -effusively -eg -egalitarian -egalitarianism -egalitarians -egg -egged -eggheads -egging -eggs -eggshell -eggshells -ego -egocentric -egocentricity -egoism -egoist -egoistic -egoists -egomania -egomaniac -egomaniacs -egotism -egotist -egotistic -egotistical -egotistically -egotists -egregious -egress -egret -egrets -egypt -egyptian -eh -eider -eiderdown -eidetic -eigenfunction -eigenfunctions -eigenstate -eigenstates -eigenvalue -eigenvalues -eight -eighteen -eighteenth -eightfold -eighth -eighties -eightieth -eightpence -eights -eighty -einstein -eire -eisteddfod -either -eject -ejected -ejecting -ejection -ejections -ejector -ejectors -ejects -eke -eked -eking -elaborate -elaborated -elaborately -elaborateness -elaborates -elaborating -elaboration -elaborations -elal -elan -eland -elands -elapse -elapsed -elapses -elapsing -elastic -elastically -elasticated -elasticities -elasticity -elastics -elastin -elastodynamics -elate -elated -elates -elation -elbe -elbow -elbowed -elbowing -elbows -elder -elderberries -elderberry -elderflower -elderly -elders -eldest -eldorado -elect -electability -electable -elected -electing -election -electioneering -elections -elective -elector -electoral -electorally -electorate -electorates -electors -electric -electrical -electrically -electrician -electricians -electricity -electrics -electrification -electrified -electrify -electrifying -electro -electrocardiogram -electrocardiographic -electrochemical -electrochemically -electrocute -electrocuted -electrocutes -electrocuting -electrocution -electrode -electrodes -electrodynamic -electrodynamics -electroencephalogram -electroluminescent -electrolyse -electrolysed -electrolysing -electrolysis -electrolyte -electrolytes -electrolytic -electrolytically -electromagnet -electromagnetic -electromagnetically -electromagnetism -electromechanical -electromechanics -electromotive -electron -electronegative -electronic -electronically -electronics -electrons -electrophoresis -electrostatic -electrostatics -electrotechnical -elects -elegance -elegant -elegantly -elegiac -elegies -elegy -element -elemental -elementally -elementarily -elementary -elements -elephant -elephantiasis -elephantine -elephants -elevate -elevated -elevates -elevating -elevation -elevations -elevator -elevators -eleven -eleventh -elf -elfin -elflike -elgreco -elicit -elicitation -elicited -eliciting -elicits -elide -elided -elides -eliding -eligibility -eligible -eligibly -elijah -eliminate -eliminated -eliminates -eliminating -elimination -eliminations -eliminator -elision -elisions -elite -elites -elitism -elitist -elitists -elixir -elixirs -elk -elks -ell -ellipse -ellipses -ellipsis -ellipsoid -ellipsoidal -ellipsoids -elliptic -elliptical -elliptically -ells -elm -elms -elnino -elocution -elongate -elongated -elongates -elongating -elongation -elongations -elope -eloped -elopement -elopes -eloping -eloquence -eloquent -eloquently -els -else -elsewhere -elucidate -elucidated -elucidates -elucidating -elucidation -elude -eluded -eludes -eluding -elusion -elusions -elusive -elusively -elusiveness -eluted -elution -elven -elves -elvish -elysee -em -emaciate -emaciated -emaciation -email -emailed -emanate -emanated -emanates -emanating -emanation -emanations -emancipate -emancipated -emancipates -emancipating -emancipation -emancipator -emancipatory -emasculate -emasculated -emasculating -emasculation -embalm -embalmed -embalmer -embalmers -embalming -embalms -embank -embankment -embankments -embargo -embargoed -embark -embarkation -embarked -embarking -embarks -embarrass -embarrassed -embarrassedly -embarrasses -embarrassing -embarrassingly -embarrassment -embarrassments -embassies -embassy -embattle -embattled -embed -embeddable -embedded -embedding -embeddings -embeds -embellish -embellished -embellishing -embellishment -embellishments -ember -embers -embezzle -embezzled -embezzlement -embezzler -embezzlers -embezzling -embitter -embittered -embittering -embitterment -emblazoned -emblem -emblematic -emblems -embodied -embodies -embodiment -embodiments -embody -embodying -embolden -emboldened -emboldening -emboldens -embolism -embosom -emboss -embossed -embrace -embraced -embraces -embracing -embrasure -embrocation -embroider -embroidered -embroiderers -embroideries -embroidering -embroidery -embroil -embroiled -embroiling -embryo -embryological -embryology -embryonal -embryonic -emendation -emendations -emended -emerald -emeralds -emerge -emerged -emergence -emergencies -emergency -emergent -emerges -emerging -emeritus -emersion -emery -emetic -emigrant -emigrants -emigrate -emigrated -emigrating -emigration -emigre -emigres -eminence -eminences -eminent -eminently -emir -emirate -emirates -emirs -emissaries -emissary -emission -emissions -emissivities -emissivity -emit -emits -emitted -emitter -emitters -emitting -emollient -emolument -emoluments -emotion -emotional -emotionalism -emotionality -emotionally -emotionless -emotions -emotive -emotively -empathetic -empathetical -empathic -empathise -empathising -empathy -emperor -emperors -emphases -emphasis -emphasise -emphasised -emphasises -emphasising -emphatic -emphatically -emphysema -empire -empires -empiric -empirical -empirically -empiricism -empiricist -empiricists -emplacement -emplacements -employ -employability -employable -employed -employee -employees -employer -employers -employing -employment -employments -employs -emporia -emporium -empower -empowered -empowering -empowerment -empowers -empress -emptied -emptier -empties -emptiest -emptily -emptiness -empty -emptyhanded -emptying -ems -emu -emulate -emulated -emulates -emulating -emulation -emulations -emulator -emulators -emulsifies -emulsion -emulsions -emus -enable -enabled -enables -enabling -enact -enacted -enacting -enactment -enactments -enacts -enamel -enamelled -enamels -enamoured -encage -encamp -encamped -encampment -encampments -encapsulate -encapsulated -encapsulates -encapsulating -encapsulation -encapsulations -encase -encased -encases -encashment -encasing -encephalitis -encephalopathy -enchain -enchant -enchanted -enchanter -enchanters -enchanting -enchantingly -enchantment -enchantments -enchantress -enchants -enchiladas -enciphering -encircle -encircled -encirclement -encirclements -encircles -encircling -enclasp -enclave -enclaves -enclose -enclosed -encloses -enclosing -enclosure -enclosures -encode -encoded -encoder -encoders -encodes -encoding -encomium -encompass -encompassed -encompasses -encompassing -encore -encored -encores -encounter -encountered -encountering -encounters -encourage -encouraged -encouragement -encouragements -encourager -encourages -encouraging -encouragingly -encroach -encroached -encroaches -encroaching -encroachment -encroachments -encrust -encrustation -encrusted -encrusting -encrypt -encrypted -encrypting -encryption -encrypts -encumber -encumbered -encumbering -encumbrance -encumbrances -encyclical -encyclopaedia -encyclopaedias -encyclopaedic -encyclopedia -encyclopedias -encyclopedic -end -endanger -endangered -endangering -endangers -endear -endeared -endearing -endearingly -endearment -endearments -endears -endeavour -endeavoured -endeavouring -endeavours -ended -endemic -endemically -endgame -ending -endings -endive -endless -endlessly -endlessness -endocrine -endogenous -endogenously -endometrial -endometriosis -endometrium -endomorphism -endomorphisms -endoplasmic -endorphins -endorse -endorsed -endorsement -endorsements -endorser -endorses -endorsing -endoscope -endoscopic -endoscopy -endothermic -endotoxin -endow -endowed -endowing -endowment -endowments -endows -endpapers -ends -endued -endues -endungeoned -endurable -endurance -endure -endured -endures -enduring -enema -enemas -enemies -enemy -energetic -energetically -energetics -energies -energise -energised -energiser -energisers -energising -energy -enervate -enervated -enervating -enfeeble -enfeebled -enfeeblement -enfold -enfolded -enfolding -enfolds -enforce -enforceability -enforceable -enforced -enforcement -enforcements -enforcer -enforcers -enforces -enforcing -enfranchise -enfranchised -enfranchisement -enfranchiser -enfranchising -engage -engaged -engagement -engagements -engages -engaging -engagingly -engarde -engels -engender -engendered -engendering -engenders -engine -engined -engineer -engineered -engineering -engineers -engines -england -english -engorge -engorged -engrained -engrave -engraved -engraver -engravers -engraves -engraving -engravings -engross -engrossed -engrossing -engulf -engulfed -engulfing -engulfs -enhance -enhanceable -enhanced -enhancement -enhancements -enhancer -enhancers -enhances -enhancing -enharmonic -enigma -enigmas -enigmatic -enigmatically -enjoin -enjoined -enjoining -enjoins -enjoy -enjoyability -enjoyable -enjoyably -enjoyed -enjoyer -enjoying -enjoyment -enjoyments -enjoys -enlace -enlarge -enlarged -enlargement -enlargements -enlarger -enlarges -enlarging -enlighten -enlightened -enlightening -enlightenment -enlightens -enlist -enlisted -enlisting -enlistment -enlists -enliven -enlivened -enlivening -enlivens -enmasse -enmeshed -enmities -enmity -enneads -ennoble -ennobled -ennobles -ennobling -ennui -enormities -enormity -enormous -enormously -enough -enounced -enounces -enquire -enquired -enquirer -enquirers -enquires -enquiries -enquiring -enquiringly -enquiry -enrage -enraged -enrages -enraging -enraptured -enrich -enriched -enriches -enriching -enrichment -enrichments -enrobe -enrobed -enrol -enroll -enrolled -enrolling -enrolls -enrolment -enrolments -enrols -enroute -ensconce -ensconced -ensemble -ensembles -enshrine -enshrined -enshrines -enshrining -enshroud -enshrouded -ensign -ensigns -enslave -enslaved -enslavement -enslaves -enslaving -ensnare -ensnared -ensnaring -ensnarl -ensue -ensued -ensues -ensuing -ensure -ensured -ensures -ensuring -entablature -entail -entailed -entailing -entailment -entails -entangle -entangled -entanglement -entanglements -entangler -entangles -entangling -entente -enter -entered -entering -enteritis -enterprise -enterprises -enterprising -enters -entertain -entertained -entertainer -entertainers -entertaining -entertainingly -entertainment -entertainments -entertains -enthalpies -enthalpy -enthralled -enthralling -enthrone -enthroned -enthronement -enthuse -enthused -enthuses -enthusiasm -enthusiasms -enthusiast -enthusiastic -enthusiastically -enthusiasts -enthusing -entice -enticed -enticement -enticements -entices -enticing -enticingly -entire -entirely -entires -entirety -entities -entitle -entitled -entitlement -entitlements -entitles -entitling -entity -entomb -entombed -entombment -entombs -entomological -entomologist -entomologists -entomology -entourage -entrails -entrain -entrained -entrainment -entrance -entranced -entrances -entrancing -entrant -entrants -entrap -entrapment -entrapped -entrapping -entreat -entreated -entreaties -entreating -entreatingly -entreats -entreaty -entree -entrench -entrenched -entrenching -entrenchment -entrepreneur -entrepreneurial -entrepreneurs -entrepreneurship -entries -entropic -entropy -entrust -entrusted -entrusting -entrusts -entry -entwine -entwined -entwines -entwining -enumerable -enumerate -enumerated -enumerates -enumerating -enumeration -enumerations -enumerator -enumerators -enunciate -enunciated -enunciating -enunciation -envelop -envelope -enveloped -enveloper -envelopers -envelopes -enveloping -envelops -enviable -enviably -envied -envies -envious -enviously -environ -environment -environmental -environmentalism -environmentalist -environmentalists -environmentally -environments -environs -envisage -envisaged -envisages -envisaging -envision -envisioned -envoy -envoys -envy -envying -enwrap -enzymatic -enzyme -enzymes -eon -eons -eosin -epaulettes -ephemera -ephemeral -ephemeris -ephor -epic -epically -epicarp -epicentre -epics -epicure -epicurean -epicycles -epicycloid -epidemic -epidemics -epidemiological -epidemiologist -epidemiologists -epidemiology -epidermal -epidermis -epidural -epigenetic -epigon -epigones -epigram -epigrammatic -epigrams -epigraph -epigraphical -epigraphy -epilepsy -epileptic -epileptics -epilogue -epinephrine -epiphanies -epiphenomena -epiphenomenon -episcopacy -episcopal -episcopalian -episcopate -episode -episodes -episodic -episodically -epistemic -epistemological -epistemology -epistle -epistles -epistolary -epitap -epitaph -epitaphs -epitaxial -epitaxy -epithelial -epithelium -epithet -epithetic -epithets -epitome -epitomise -epitomised -epitomises -epoch -epochal -epochs -epoxies -epoxy -epsilon -equable -equably -equal -equalisation -equalise -equalised -equaliser -equalisers -equalising -equalities -equality -equalled -equalling -equally -equals -equanimity -equate -equated -equates -equating -equation -equations -equator -equatorial -equerry -equestrian -equestrianism -equiangular -equidistant -equilateral -equilibrating -equilibration -equilibria -equilibrium -equine -equinoctial -equinox -equinoxes -equip -equipartition -equipment -equipments -equipped -equipping -equips -equitable -equitably -equities -equity -equivalence -equivalences -equivalent -equivalently -equivalents -equivocal -equivocated -equivocating -equivocation -equivocations -era -eradicate -eradicated -eradicating -eradication -eras -erasable -erase -erased -eraser -erasers -erases -erasing -erasure -erasures -erbium -ere -erect -erected -erecter -erectile -erecting -erection -erections -erectly -erects -erg -ergo -ergodic -ergonomic -ergonomically -ergonomics -ergophobia -ergot -ergs -erica -ericas -eritrea -ermine -erode -eroded -erodes -eroding -erogenous -eros -erose -erosion -erosional -erosions -erosive -erotic -erotica -erotically -eroticism -err -errand -errands -errant -errata -erratic -erratically -erratum -erred -erring -erroneous -erroneously -error -errors -errs -ersatz -erst -erstwhile -erudite -erudition -erupt -erupted -erupting -eruption -eruptions -eruptive -erupts -erysipelas -esau -escalade -escalate -escalated -escalates -escalating -escalation -escalator -escalators -escapade -escapades -escape -escaped -escapee -escapees -escapement -escapes -escaping -escapism -escapist -escapology -escarp -escarpment -escarpments -escarps -eschatological -eschatology -eschew -eschewed -eschewing -eschews -escort -escorted -escorting -escorts -escudo -eskimo -esoteric -esoterica -esoterically -espadrilles -especial -especially -espied -espionage -esplanade -espousal -espouse -espoused -espouses -espousing -espresso -esprit -espy -espying -esquire -esquires -essay -essayed -essayist -essayists -essays -essen -essence -essences -essential -essentialism -essentialist -essentially -essentials -est -establish -established -establishes -establishing -establishment -establishments -estate -estates -esteem -esteemed -esteems -ester -esters -esthete -esthetic -estimable -estimate -estimated -estimates -estimating -estimation -estimations -estimator -estimators -estonia -estranged -estrangement -estrangements -estuaries -estuarine -estuary -eta -etal -etcetera -etch -etched -etcher -etchers -etches -etching -etchings -eternal -eternally -eternity -ethane -ethanol -ether -ethereal -ethereally -etherised -ethic -ethical -ethically -ethicist -ethics -ethiopia -ethnic -ethnical -ethnically -ethnicity -ethnocentric -ethnographer -ethnographers -ethnographic -ethnography -ethnological -ethnology -ethological -ethologist -ethologists -ethology -ethos -ethyl -ethylene -etiquette -etna -etudes -etui -etymological -etymologically -etymologies -etymologist -etymologists -etymology -eucalyptus -eugenic -eugenics -eukaryote -eukaryotes -eukaryotic -eulogies -eulogise -eulogises -eulogising -eulogistic -eulogy -eunuch -eunuchs -euphemism -euphemisms -euphemistic -euphemistically -euphonious -euphonium -euphoniums -euphony -euphoria -euphoric -eurasia -eurasian -eureka -eurekas -euro -europe -european -eurydice -eutectic -euthanasia -evacuate -evacuated -evacuating -evacuation -evacuations -evacuee -evacuees -evadable -evade -evaded -evader -evaders -evades -evading -evaluable -evaluate -evaluated -evaluates -evaluating -evaluation -evaluational -evaluations -evaluative -evaluator -evaluators -evanescent -evangelical -evangelicalism -evangelicals -evangelisation -evangelise -evangelising -evangelism -evangelist -evangelistic -evangelists -evaporate -evaporated -evaporates -evaporating -evaporation -evaporator -evasion -evasions -evasive -evasively -evasiveness -eve -even -evened -evener -evenhanded -evening -evenings -evenly -evenness -evens -evensong -event -eventful -eventide -eventing -events -eventual -eventualities -eventuality -eventually -ever -everchanging -everest -evergreen -evergreens -everincreasing -everlasting -everlastingly -everliving -evermore -everpresent -eversion -everting -every -everybody -everyday -everyone -everything -everywhere -eves -evict -evicted -evicting -eviction -evictions -evicts -evidence -evidenced -evidences -evident -evidential -evidently -evil -evildoer -evilly -evilness -evils -evince -evinced -evinces -evincing -eviscerate -evocation -evocations -evocative -evocatively -evoke -evoked -evokes -evoking -evolute -evolution -evolutionarily -evolutionary -evolutionism -evolutionist -evolutionists -evolutions -evolve -evolved -evolves -evolving -ewe -ewes -exacerbate -exacerbated -exacerbates -exacerbating -exacerbation -exact -exacted -exacting -exaction -exactitude -exactly -exactness -exacts -exaggerate -exaggerated -exaggeratedly -exaggerates -exaggerating -exaggeration -exaggerations -exalt -exaltation -exalted -exalting -exalts -exam -examinable -examination -examinations -examine -examined -examinees -examiner -examiners -examines -examining -example -examples -exams -exasperate -exasperated -exasperatedly -exasperating -exasperation -excavate -excavated -excavating -excavation -excavations -excavator -excavators -exceed -exceeded -exceeding -exceedingly -exceeds -excel -excelled -excellence -excellencies -excellency -excellent -excellently -excelling -excels -excelsior -except -excepted -excepting -exception -exceptionable -exceptional -exceptionally -exceptions -excepts -excerpt -excerpted -excerpts -excess -excesses -excessive -excessively -exchange -exchangeable -exchanged -exchanger -exchangers -exchanges -exchanging -exchequer -excise -excised -excising -excision -excitability -excitable -excitation -excitations -excite -excited -excitedly -excitement -excitements -excites -exciting -excitingly -exciton -exclaim -exclaimed -exclaiming -exclaims -exclamation -exclamations -exclamatory -exclude -excluded -excludes -excluding -exclusion -exclusionary -exclusions -exclusive -exclusively -exclusiveness -exclusivist -exclusivity -excommunicate -excommunicated -excommunicating -excommunication -excrete -excruciating -excruciatingly -excruciation -excursion -excursionists -excursions -excursus -excusable -excuse -excused -excuses -excusing -executable -execute -executed -executes -executing -execution -executioner -executioners -executions -executive -executives -executor -executors -exegesis -exegetical -exemplar -exemplars -exemplary -exemplification -exemplified -exemplifies -exemplify -exemplifying -exempt -exempted -exempting -exemption -exemptions -exempts -exercisable -exercise -exercised -exerciser -exercises -exercising -exert -exerted -exerting -exertion -exertions -exerts -exes -exeunt -exfoliation -exhalation -exhalations -exhale -exhaled -exhales -exhaling -exhaust -exhausted -exhaustible -exhausting -exhaustion -exhaustive -exhaustively -exhausts -exhibit -exhibited -exhibiting -exhibition -exhibitioner -exhibitioners -exhibitionism -exhibitionist -exhibitionists -exhibitions -exhibitor -exhibitors -exhibits -exhilarate -exhilarated -exhilarating -exhilaration -exhort -exhortation -exhortations -exhorted -exhorting -exhorts -exhumation -exhume -exhumed -exhumes -exhuming -exhusband -exigencies -exigency -exigent -exiguous -exile -exiled -exiles -exiling -exist -existed -existence -existences -existent -existential -existentialism -existentialist -existentialistic -existentially -existing -exists -exit -exited -exiting -exits -exmember -exmembers -exocrine -exoderm -exodus -exogenous -exogenously -exonerate -exonerated -exonerates -exonerating -exoneration -exorbitant -exorbitantly -exorcise -exorcised -exorcising -exorcism -exorcisms -exorcist -exoskeleton -exothermic -exothermically -exotic -exotica -exotically -exoticism -expand -expandability -expandable -expanded -expander -expanding -expands -expanse -expanses -expansible -expansion -expansionary -expansionism -expansionist -expansions -expansive -expansively -expansiveness -expatriate -expatriated -expatriates -expect -expectancies -expectancy -expectant -expectantly -expectation -expectational -expectations -expected -expecting -expectorate -expectorated -expectoration -expects -expedience -expediency -expedient -expedients -expedite -expedited -expedites -expediting -expedition -expeditionary -expeditions -expeditious -expeditiously -expel -expelled -expelling -expels -expend -expendable -expended -expending -expenditure -expenditures -expends -expense -expenses -expensive -expensively -experience -experienced -experiences -experiencing -experiential -experiment -experimental -experimentalist -experimentalists -experimentally -experimentation -experimented -experimenter -experimenters -experimenting -experiments -expert -expertise -expertly -expertness -experts -expiate -expiation -expiatory -expiration -expiratory -expire -expired -expires -expiring -expiry -explain -explainable -explained -explaining -explains -explanation -explanations -explanatory -expletive -expletives -explicable -explicate -explicated -explication -explicative -explicit -explicitly -explicitness -explode -exploded -exploder -exploders -explodes -exploding -exploit -exploitable -exploitation -exploitations -exploitative -exploited -exploiter -exploiters -exploiting -exploits -explorable -exploration -explorations -exploratory -explore -explored -explorer -explorers -explores -exploring -explosion -explosions -explosive -explosively -explosiveness -explosives -expo -exponent -exponential -exponentially -exponentiation -exponents -export -exportability -exportable -exported -exporter -exporters -exporting -exports -expose -exposed -exposes -exposing -exposition -expositions -expository -expostulate -expostulated -expostulating -expostulation -expostulations -exposure -exposures -expound -expounded -expounding -expounds -express -expressed -expresses -expressible -expressing -expression -expressionism -expressionist -expressionistic -expressionists -expressionless -expressionlessly -expressions -expressive -expressively -expressiveness -expressly -expropriate -expropriated -expropriation -expropriations -expulsion -expulsions -expunge -expunged -expunges -expunging -expurgate -expurgated -expurgating -exquisite -exquisitely -exquisiteness -ext -extend -extendability -extendable -extended -extender -extenders -extendible -extending -extends -extensibility -extensible -extension -extensional -extensionally -extensions -extensive -extensively -extensiveness -extensors -extent -extents -extenuate -extenuated -extenuating -extenuation -exterior -exteriors -exterminate -exterminated -exterminates -exterminating -extermination -exterminations -exterminator -exterminators -extern -external -externalised -externally -externals -externs -extinct -extinction -extinctions -extinguish -extinguished -extinguisher -extinguishers -extinguishes -extinguishing -extinguishment -extirpate -extirpation -extol -extolled -extolling -extols -extort -extorted -extorting -extortion -extortionate -extortionately -extortionists -extorts -extra -extracellular -extract -extractable -extracted -extracting -extraction -extractions -extractive -extractor -extracts -extraditable -extradite -extradited -extraditing -extradition -extragalactic -extrajudicial -extralinguistic -extramarital -extramural -extraneous -extraordinarily -extraordinary -extrapolate -extrapolated -extrapolating -extrapolation -extrapolations -extras -extrasolar -extraterrestrial -extraterrestrials -extraterritorial -extravagance -extravagances -extravagant -extravagantly -extravaganza -extravaganzas -extrema -extremal -extreme -extremely -extremes -extremest -extremism -extremist -extremists -extremities -extremity -extricate -extricated -extricating -extrication -extrinsic -extrinsically -extroversion -extrovert -extroverts -extrude -extruded -extrusion -extrusions -exuberance -exuberant -exuberantly -exudate -exude -exuded -exudes -exuding -exult -exultant -exultantly -exultation -exulted -exulting -exultingly -exults -exwife -exwives -eye -eyeball -eyeballs -eyebrow -eyebrows -eyecatching -eyed -eyeful -eyeglass -eyeglasses -eyeing -eyelash -eyelashes -eyeless -eyelet -eyelets -eyelevel -eyelid -eyelids -eyelike -eyeliner -eyepatch -eyepiece -eyes -eyeshadow -eyesight -eyesore -eyesores -eyeteeth -eyetooth -eyewash -eyewitness -eyewitnesses -fab -fable -fabled -fables -fabric -fabricate -fabricated -fabricates -fabricating -fabrication -fabrications -fabricator -fabrics -fabulists -fabulous -fabulously -facade -facades -face -faced -faceless -facelift -faceplate -facer -facers -faces -facet -faceted -faceting -facetious -facetiously -facetiousness -facets -facia -facial -facials -facile -facilitate -facilitated -facilitates -facilitating -facilitation -facilitative -facilitator -facilitators -facilities -facility -facing -facings -facsimile -facsimiles -fact -faction -factional -factionalism -factions -factious -factitious -factor -factored -factorial -factorials -factories -factoring -factorisable -factorisation -factorisations -factorise -factorised -factorises -factorising -factors -factory -factotum -facts -factual -factually -faculties -faculty -fad -fade -faded -fadeout -fades -fading -fads -faecal -faeces -fag -faggot -faggots -fagot -fags -fail -failed -failing -failings -fails -failure -failures -faint -fainted -fainter -faintest -fainthearted -fainting -faintly -faintness -faints -fair -fairer -fairest -fairground -fairgrounds -fairies -fairing -fairish -fairly -fairness -fairs -fairsex -fairway -fairways -fairy -fairytale -faith -faithful -faithfully -faithfulness -faithless -faithlessness -faiths -fake -faked -fakers -fakery -fakes -faking -falcon -falconer -falconry -falcons -fall -fallacies -fallacious -fallacy -fallen -faller -fallers -fallguy -fallibility -fallible -falling -fallopian -fallout -fallow -falls -false -falsebay -falsehood -falsehoods -falsely -falseness -falser -falsetto -falsifiability -falsifiable -falsification -falsifications -falsified -falsifier -falsifiers -falsifies -falsify -falsifying -falsities -falsity -falter -faltered -faltering -falteringly -falters -fame -famed -familial -familiar -familiarisation -familiarise -familiarised -familiarising -familiarities -familiarity -familiarly -families -family -famine -famines -famish -famished -famous -famously -fan -fanatic -fanatical -fanatically -fanaticism -fanatics -fanbelt -fanciable -fancied -fancier -fanciers -fancies -fanciest -fanciful -fancifully -fancy -fancying -fandango -fanfare -fanfares -fang -fangs -fanlight -fanned -fanning -fanny -fans -fantail -fantails -fantasia -fantastic -far -farad -faraday -faraway -farce -farces -farcical -fare -fared -fares -farewell -farewells -farfetched -farflung -faring -farm -farmed -farmer -farmers -farmhouse -farmhouses -farming -farmings -farmland -farms -farmstead -farmsteads -farmyard -farmyards -faroff -farout -farrago -farreaching -farrier -farriers -farrow -farseeing -farsighted -farther -farthest -farthing -farthings -fascia -fascias -fascinate -fascinated -fascinates -fascinating -fascinatingly -fascination -fascinations -fascism -fascist -fascists -fashion -fashionable -fashionably -fashioned -fashioning -fashions -fast -fasted -fasten -fastened -fastener -fasteners -fastening -fastenings -fastens -faster -fastest -fastidious -fastidiously -fastidiousness -fasting -fastings -fastness -fastnesses -fasts -fat -fatal -fatalism -fatalist -fatalistic -fatalistically -fatalities -fatality -fatally -fatcat -fate -fated -fateful -fates -fatheadedness -father -fathered -fatherhood -fathering -fatherinlaw -fatherland -fatherless -fatherly -fathers -fathersinlaw -fathom -fathomed -fathoming -fathomless -fathoms -fatigue -fatigued -fatigues -fatiguing -fatless -fatness -fats -fatted -fatten -fattened -fattening -fattens -fatter -fattest -fattier -fattiest -fatty -fatuity -fatuous -fatuously -fatwa -faucet -faucets -fault -faulted -faulting -faultless -faultlessly -faults -faulty -faun -fauna -faunal -faunas -fauns -faust -faustus -favour -favourable -favourably -favoured -favouring -favourite -favourites -favouritism -favours -fawn -fawned -fawning -fawningly -fawns -fax -faxed -faxes -faxing -fealty -fear -feared -fearful -fearfully -fearfulness -fearing -fearless -fearlessly -fearlessness -fears -fearsome -fearsomely -fearsomeness -feasibility -feasible -feasibly -feast -feasted -feasting -feasts -feat -feather -feathered -feathering -featherlight -feathers -featherweight -feathery -feats -feature -featured -featureless -features -featuring -febrile -february -feckless -fecklessness -fecund -fecundity -fed -federal -federalism -federalist -federalists -federally -federate -federated -federation -federations -fedora -feds -fedup -fee -feeble -feebleminded -feebleness -feebler -feeblest -feebly -feed -feedback -feeder -feeders -feeding -feedings -feeds -feedstock -feedstuffs -feel -feeler -feelers -feeling -feelingly -feelings -feels -fees -feet -feign -feigned -feigning -feigns -feint -feinted -feinting -feints -feldspar -feldspars -felicia -felicitation -felicitations -felicities -felicitous -felicity -feline -felines -fell -fellatio -felled -feller -felling -fellow -fellows -fellowship -fellowships -fells -felon -felonious -felons -felony -felt -feltpen -female -femaleness -females -feminine -femininely -femininity -feminism -feminist -feminists -femur -femurs -fen -fence -fenced -fencepost -fencer -fencers -fences -fencing -fencings -fend -fended -fender -fenders -fending -fends -fenland -fennel -fens -feral -ferment -fermentation -fermented -fermenting -ferments -fermion -fermions -fern -ferns -ferny -ferocious -ferociously -ferociousness -ferocity -ferret -ferreted -ferreting -ferrets -ferric -ferried -ferries -ferrite -ferromagnetic -ferrous -ferrule -ferry -ferrying -ferryman -fertile -fertilisation -fertilise -fertilised -fertiliser -fertilisers -fertilises -fertilising -fertility -fervent -fervently -fervid -fervidly -fervour -fescue -fest -festal -fester -festered -festering -festers -festival -festivals -festive -festivities -festivity -festoon -festooned -festooning -festoons -fetal -fetch -fetched -fetches -fetching -fete -feted -fetes -fetid -fetish -fetishes -fetishism -fetishist -fetishistic -fetishists -fetlock -fetlocks -fetter -fettered -fetters -fettle -fetus -feud -feudal -feudalism -feuded -feuding -feudist -feuds -fever -fevered -feverish -feverishly -fevers -few -fewer -fewest -fewness -fez -fiance -fiancee -fiasco -fiat -fib -fibbed -fibber -fibbers -fibbing -fibers -fibre -fibreboard -fibred -fibreglass -fibres -fibrillating -fibrillation -fibroblast -fibroblasts -fibrosis -fibrous -fibs -fibula -fiche -fiches -fickle -fickleness -fiction -fictional -fictions -fictitious -fictive -ficus -fiddle -fiddled -fiddler -fiddlers -fiddles -fiddlesticks -fiddling -fiddlings -fiddly -fidelity -fidget -fidgeted -fidgeting -fidgets -fidgety -fiduciary -fief -fiefdom -fiefdoms -fiefs -field -fielded -fielder -fielders -fielding -fields -fieldwork -fieldworker -fieldworkers -fiend -fiendish -fiendishly -fiends -fierce -fiercely -fierceness -fiercer -fiercest -fierier -fieriest -fierily -fiery -fiesta -fiestas -fife -fifes -fifteen -fifteenth -fifth -fifthly -fifths -fifties -fiftieth -fifty -fig -fight -fightback -fighter -fighters -fighting -fights -figleaf -figment -figments -figs -figtree -figural -figuration -figurative -figuratively -figure -figured -figurehead -figureheads -figurer -figures -figurine -figurines -figuring -fiji -fijians -filament -filamentary -filamentous -filaments -filch -filched -file -filed -filer -filers -files -filet -filial -filibuster -filigree -filing -filings -fill -filled -filler -fillers -fillet -fillets -fillies -filling -fillings -fillip -fills -filly -film -filmed -filmic -filming -filmmakers -films -filmset -filmy -filter -filtered -filtering -filters -filth -filthier -filthiest -filthily -filthy -filtrate -filtration -fin -final -finale -finales -finalisation -finalise -finalised -finalising -finalist -finalists -finality -finally -finals -finance -financed -finances -financial -financially -financier -financiers -financing -finch -finches -find -findable -finder -finders -finding -findings -finds -fine -fined -finely -fineness -finer -finery -fines -finesse -finest -finetune -finetuned -finetunes -finetuning -finger -fingerboard -fingered -fingering -fingerings -fingerless -fingermarks -fingernail -fingernails -fingerprint -fingerprinted -fingerprinting -fingerprints -fingers -fingertip -fingertips -finial -finicky -fining -finis -finish -finished -finisher -finishers -finishes -finishing -finite -finitely -finiteness -finland -finn -finned -finnish -fins -fiord -fiords -fir -fire -firearm -firearms -fireball -fireballs -firebomb -firebombed -firebombing -firebombs -firebox -firebrand -firecontrol -fired -firefight -firefighter -firefighters -firefighting -fireflies -firefly -fireguard -firelight -firelighters -fireman -firemen -fireplace -fireplaces -firepower -fireproof -fireproofed -firer -fires -fireside -firesides -firewood -firework -fireworks -firing -firings -firkin -firm -firmament -firmed -firmer -firmest -firming -firmly -firmness -firms -firmware -firs -first -firstaid -firstborn -firstborns -firsthand -firstly -firsts -firth -fiscal -fiscally -fish -fished -fisher -fisheries -fisherman -fishermen -fishers -fishery -fishes -fishhook -fishhooks -fishier -fishiest -fishing -fishings -fishlike -fishmonger -fishmongers -fishnet -fishwife -fishy -fissile -fission -fissions -fissure -fissured -fissures -fist -fisted -fistful -fisticuffs -fists -fistula -fit -fitful -fitfully -fitfulness -fitly -fitment -fitments -fitness -fits -fitted -fitter -fitters -fittest -fitting -fittingly -fittings -five -fivefold -fiver -fivers -fives -fix -fixable -fixate -fixated -fixates -fixation -fixations -fixative -fixed -fixedly -fixer -fixers -fixes -fixing -fixings -fixture -fixtures -fizz -fizzed -fizzes -fizzier -fizziest -fizzing -fizzle -fizzled -fizzles -fizzy -fjord -fjords -flab -flabbergasted -flabbier -flabbiest -flabby -flabs -flaccid -flaccidity -flack -flag -flagella -flagellate -flagellation -flagged -flagging -flagon -flagons -flagpole -flagrant -flagrantly -flags -flagship -flagships -flair -flak -flake -flaked -flakes -flakiest -flaking -flaky -flamboyance -flamboyant -flamboyantly -flame -flamed -flamenco -flameproof -flames -flaming -flamingo -flammability -flammable -flan -flange -flanged -flanges -flank -flanked -flanker -flanking -flanks -flannel -flannelette -flannels -flans -flap -flapjack -flapped -flapper -flappers -flapping -flaps -flare -flared -flares -flareup -flareups -flaring -flash -flashback -flashbacks -flashbulb -flashed -flasher -flashes -flashier -flashiest -flashily -flashing -flashlight -flashlights -flashpoint -flashpoints -flashy -flask -flasks -flat -flatfish -flatly -flatmate -flatmates -flatness -flats -flatten -flattened -flattening -flattens -flatter -flattered -flatterer -flatterers -flattering -flatteringly -flatters -flattery -flattest -flattish -flatulence -flatulent -flatus -flatworms -flaunt -flaunted -flaunting -flaunts -flautist -flavour -flavoured -flavouring -flavourings -flavours -flaw -flawed -flawless -flawlessly -flaws -flax -flaxen -flay -flayed -flayer -flayers -flaying -flea -fleabites -fleas -fleck -flecked -flecks -fled -fledge -fledged -fledgeling -fledges -fledgling -fledglings -flee -fleece -fleeced -fleeces -fleecing -fleecy -fleeing -flees -fleet -fleeted -fleeter -fleeting -fleetingly -fleetly -fleets -flemish -flesh -fleshed -flesher -fleshes -fleshier -fleshiest -fleshing -fleshless -fleshly -fleshpots -fleshy -flew -flex -flexed -flexes -flexibilities -flexibility -flexible -flexibly -flexile -flexing -flexion -flexor -flick -flicked -flicker -flickered -flickering -flickers -flickery -flicking -flicks -flier -fliers -flies -flight -flighted -flightless -flightpath -flights -flighty -flimsier -flimsiest -flimsily -flimsiness -flimsy -flinch -flinched -flinching -fling -flinging -flings -flint -flintlock -flintlocks -flints -flinty -flip -flipflop -flipflops -flippable -flippancy -flippant -flippantly -flipped -flipper -flippers -flipping -flips -flirt -flirtation -flirtations -flirtatious -flirtatiously -flirted -flirting -flirts -flit -fliting -flits -flitted -flitting -float -floated -floater -floaters -floating -floats -floaty -flock -flocked -flocking -flocks -floe -flog -flogged -flogger -floggers -flogging -floggings -flogs -flood -flooded -floodgates -flooding -floodlight -floodlighting -floodlights -floodlit -floods -floor -floorboard -floorboards -floored -flooring -floors -floorspace -floozie -floozies -floozy -flop -flopped -flopper -floppier -floppies -floppiest -flopping -floppy -flops -flora -floral -floras -floreat -florence -floret -florid -florida -floridly -florin -florins -florist -florists -floss -flosses -flossing -flossy -flotation -flotations -flotilla -flotillas -flotsam -flounce -flounced -flounces -flouncing -flounder -floundered -floundering -flounders -flour -floured -flourish -flourished -flourishes -flourishing -flours -floury -flout -flouted -flouting -flouts -flow -flowed -flower -flowered -flowering -flowerless -flowerpot -flowerpots -flowers -flowery -flowing -flown -flows -flub -flubbed -fluctuate -fluctuated -fluctuates -fluctuating -fluctuation -fluctuations -flue -fluency -fluent -fluently -flues -fluff -fluffed -fluffier -fluffiest -fluffing -fluffs -fluffy -fluid -fluidised -fluidity -fluidly -fluids -fluke -flukes -flukey -flukier -flukiest -flumes -flumped -flung -flunked -fluor -fluoresce -fluorescence -fluorescent -fluoresces -fluorescing -fluoridation -fluoride -fluorine -fluorocarbon -fluorocarbons -flurried -flurries -flurry -flush -flushed -flusher -flushes -flushing -fluster -flustered -flute -fluted -flutes -fluting -flutist -flutter -fluttered -fluttering -flutters -fluttery -fluvial -flux -fluxes -fly -flyaway -flyer -flyers -flyhalf -flying -flyover -flyovers -flypaper -flypast -flyway -flyways -flyweight -flywheel -foal -foaled -foaling -foals -foam -foamed -foamier -foamiest -foaming -foams -foamy -fob -fobbed -fobbing -fobs -focal -focally -foci -focus -focused -focuses -focusing -focussed -focusses -focussing -fodder -fodders -foe -foehns -foes -foetal -foetid -foetus -foetuses -fog -fogbank -fogey -fogged -foggier -foggiest -fogging -foggy -foghorn -foghorns -fogs -fogy -foible -foibles -foil -foiled -foiling -foils -foist -foisted -foisting -fold -folded -folder -folders -folding -folds -foliage -foliate -foliated -folio -folk -folkart -folkish -folklore -folklorist -folklorists -folks -folktale -follicle -follicles -follicular -follies -follow -followable -followed -follower -followers -following -followings -follows -folly -foment -fomented -fomenting -fond -fondant -fonder -fondest -fondle -fondled -fondles -fondling -fondly -fondness -fondue -fondues -font -fontanel -fonts -food -foodless -foods -foodstuff -foodstuffs -fool -fooled -foolery -foolhardily -foolhardiness -foolhardy -fooling -foolish -foolishly -foolishness -foolproof -fools -foolscap -foot -footage -footages -football -footballer -footballers -footballing -footballs -footbath -footbridge -footed -footfall -footfalls -footgear -foothill -foothills -foothold -footholds -footing -footings -footless -footlights -footloose -footman -footmarks -footmen -footnote -footnotes -footpads -footpath -footpaths -footplate -footprint -footprints -footrest -foots -footsie -footsore -footstep -footsteps -footstool -footstools -footway -footwear -footwork -fop -fops -for -forage -foraged -foragers -forages -foraging -foramen -foray -forays -forbad -forbade -forbear -forbearance -forbearing -forbears -forbid -forbidden -forbidding -forbiddingly -forbids -forbore -force -forced -forcefeed -forcefeeding -forceful -forcefully -forcefulness -forceps -forces -forcible -forcibly -forcing -ford -forded -fording -fords -fore -forearm -forearmed -forearms -forebear -forebears -foreboded -foreboding -forebodings -forebrain -forecast -forecaster -forecasters -forecasting -forecasts -foreclose -foreclosed -foreclosure -forecourt -forecourts -foredeck -forefather -forefathers -forefinger -forefingers -forefront -foregather -foregathered -forego -foregoing -foregone -foreground -foregrounded -foregrounding -foregrounds -forehand -forehead -foreheads -foreign -foreigner -foreigners -foreignness -foreknowledge -foreland -foreleg -forelegs -forelimbs -forelock -foreman -foremen -foremost -forename -forenames -forensic -forensically -forepaw -forepaws -foreplay -forerunner -forerunners -foresail -foresaw -foresee -foreseeability -foreseeable -foreseeing -foreseen -foresees -foreshadow -foreshadowed -foreshadowing -foreshadows -foreshore -foreshores -foreshortened -foreshortening -foresight -foreskin -foreskins -forest -forestall -forestalled -forestalling -forestalls -forested -forester -foresters -forestry -forests -foretaste -foretastes -foretell -foretelling -forethought -foretold -forever -forewarn -forewarned -forewarning -foreword -forewords -forfeit -forfeited -forfeiting -forfeits -forfeiture -forgave -forge -forged -forger -forgeries -forgers -forgery -forges -forget -forgetful -forgetfulness -forgetmenot -forgetmenots -forgets -forgettable -forgetting -forging -forgings -forgivable -forgive -forgiven -forgiveness -forgives -forgiving -forgo -forgoing -forgone -forgot -forgotten -fork -forked -forking -forks -forlorn -forlornly -forlornness -form -formal -formaldehyde -formalin -formalisation -formalisations -formalise -formalised -formalises -formalising -formalism -formalisms -formalist -formalistic -formalities -formality -formally -formant -format -formated -formation -formations -formative -formats -formatted -formatting -formed -former -formerly -formers -formic -formidable -formidably -forming -formless -formlessness -formosa -forms -formula -formulae -formulaic -formulary -formulas -formulate -formulated -formulates -formulating -formulation -formulations -formulator -fornicate -fornicated -fornicates -fornicating -fornication -fornicator -fornicators -forsake -forsaken -forsakes -forsaking -forsook -forswear -forswearing -forswore -forsworn -forsythia -fort -forte -forth -forthcoming -forthright -forthrightly -forthrightness -forthwith -forties -fortieth -fortification -fortifications -fortified -fortify -fortifying -fortissimo -fortitude -fortknox -fortnight -fortnightly -fortnights -fortress -fortresses -forts -fortuitous -fortuitously -fortunate -fortunately -fortune -fortunes -fortuneteller -fortunetellers -fortunetelling -forty -forum -forums -forward -forwarded -forwarder -forwarding -forwardlooking -forwardly -forwardness -forwards -fossa -fossil -fossiliferous -fossilise -fossilised -fossilising -fossils -foster -fostered -fostering -fosters -fought -foul -fouled -fouler -foulest -fouling -foully -foulmouthed -foulness -fouls -foulup -foulups -found -foundation -foundational -foundations -founded -founder -foundered -foundering -founders -founding -foundling -foundries -foundry -founds -fount -fountain -fountains -founts -four -fourfold -fours -foursome -fourteen -fourteenth -fourth -fourthly -fourths -fowl -fowls -fox -foxed -foxes -foxhole -foxholes -foxhounds -foxhunt -foxhunting -foxhunts -foxier -foxiest -foxily -foxiness -foxing -foxtrot -foxtrots -foxy -foyer -foyers -fracas -fractal -fractals -fraction -fractional -fractionally -fractionate -fractionated -fractionating -fractionation -fractions -fractious -fracture -fractured -fractures -fracturing -fragile -fragility -fragment -fragmentary -fragmentation -fragmented -fragmenting -fragments -fragrance -fragrances -fragrant -frail -frailer -frailest -frailly -frailties -frailty -frame -framed -framer -framers -frames -frameup -framework -frameworks -framing -franc -france -franchise -franchised -franchisee -franchisees -franchises -franchising -franchisor -francophone -francs -frangipani -frank -franked -franker -frankest -frankfurter -frankincense -franking -frankly -frankness -franks -frantic -frantically -fraternal -fraternise -fraternising -fraternities -fraternity -fratricidal -fratricide -fraud -frauds -fraudster -fraudsters -fraudulent -fraudulently -fraught -fray -frayed -fraying -frays -frazzle -frazzled -freak -freaked -freakish -freaks -freaky -freckle -freckled -freckles -free -freebie -freebooters -freed -freedom -freedoms -freefall -freefalling -freeforall -freehand -freehold -freeholder -freeholders -freeholds -freeing -freelance -freelancer -freelancers -freelances -freelancing -freely -freeman -freemasonry -freemen -freer -freerange -frees -freesia -freesias -freestanding -freestyle -freeway -freewheeling -freewheels -freeze -freezer -freezers -freezes -freezing -freight -freighted -freighter -freighters -freights -french -frenetic -frenetically -frenzied -frenziedly -frenzies -frenzy -freon -freons -frequencies -frequency -frequent -frequented -frequenting -frequently -frequents -fresco -fresh -freshen -freshened -freshener -fresheners -freshening -freshens -fresher -freshers -freshest -freshly -freshman -freshmen -freshness -freshwater -fret -fretboard -fretful -fretfully -fretfulness -fretless -frets -fretsaw -fretsaws -fretted -fretting -fretwork -freud -freya -friable -friar -friars -friary -fricative -fricatives -friction -frictional -frictionless -frictions -friday -fridays -fridge -fridges -fried -friend -friendless -friendlessness -friendlier -friendlies -friendliest -friendlily -friendliness -friendly -friends -friendship -friendships -friers -fries -frieze -friezes -frigate -frigates -fright -frighted -frighten -frightened -frighteners -frightening -frighteningly -frightens -frightful -frightfully -frights -frigid -frigidity -frigidly -frijole -frill -frilled -frillier -frilliest -frills -frilly -fringe -fringed -fringes -fringing -fringy -frippery -frisk -frisked -friskier -friskiest -friskily -frisking -frisks -frisky -frisson -fritter -frittered -frittering -fritters -frivol -frivolities -frivolity -frivolous -frivolously -frivols -frizzle -frizzles -frizzy -fro -frock -frocks -frog -froggy -frogman -frogmarched -frogmen -frogs -frolic -frolicked -frolicking -frolics -frolicsome -from -frond -fronds -front -frontage -frontages -frontal -frontally -frontals -fronted -frontier -frontiers -fronting -frontispiece -frontispieces -frontline -frontpage -fronts -frost -frostbite -frostbitten -frosted -frostier -frostiest -frostily -frosting -frosts -frosty -froth -frothed -frothier -frothiest -frothing -froths -frothy -froward -frown -frowned -frowning -frowningly -frowns -froze -frozen -fructose -frugal -frugality -frugally -fruit -fruitcake -fruitcakes -fruited -fruiter -fruitful -fruitfully -fruitfulness -fruitier -fruitiest -fruitiness -fruiting -fruition -fruitless -fruitlessly -fruitlessness -fruits -fruity -frumps -frumpy -frustrate -frustrated -frustratedly -frustrates -frustrating -frustratingly -frustration -frustrations -frustum -fry -fryer -fryers -frying -fryings -fuchsia -fuchsias -fuddle -fuddled -fuddles -fudge -fudged -fudges -fudging -fuel -fuelled -fuelling -fuels -fug -fugal -fugitive -fugitives -fugue -fugues -fuhrer -fulcrum -fulfil -fulfilled -fulfilling -fulfilment -fulfils -full -fullback -fullbacks -fullblooded -fullblown -fullbodied -fullcolour -fuller -fullest -fullgrown -fulling -fullish -fulllength -fullmoon -fullness -fullpage -fullscale -fullstop -fullstops -fulltime -fulltimer -fulltimers -fully -fulminant -fulminate -fulminating -fulmination -fulminations -fulsome -fulsomely -fumarole -fumaroles -fumble -fumbled -fumbles -fumbling -fume -fumed -fumes -fumigate -fumigating -fumigation -fuming -fumingly -fun -function -functional -functionalism -functionalist -functionalities -functionality -functionally -functionaries -functionary -functioned -functioning -functionless -functions -fund -fundamental -fundamentalism -fundamentalist -fundamentalists -fundamentally -fundamentals -funded -fundholders -fundholding -funding -fundings -fundraiser -fundraisers -fundraising -funds -funeral -funerals -funerary -funereal -funfair -fungal -fungi -fungicidal -fungicide -fungicides -fungoid -fungous -fungus -funguses -funicular -funk -funked -funkier -funky -funnel -funnelled -funnelling -funnels -funnier -funnies -funniest -funnily -funny -fur -furbished -furbishing -furies -furious -furiously -furled -furling -furlong -furlongs -furlough -furls -furnace -furnaces -furnish -furnished -furnishers -furnishes -furnishing -furnishings -furniture -furore -furores -furred -furrier -furriers -furriest -furriness -furring -furrow -furrowed -furrows -furry -furs -further -furtherance -furthered -furthering -furthermore -furthers -furthest -furtive -furtively -furtiveness -fury -furze -fuse -fused -fuselage -fuses -fusible -fusilier -fusiliers -fusillade -fusing -fusion -fusions -fuss -fussed -fusses -fussier -fussiest -fussily -fussiness -fussing -fussy -fustian -fusty -futile -futilely -futility -futon -future -futures -futurism -futurist -futuristic -futurists -futurity -futurologists -fuzz -fuzzed -fuzzes -fuzzier -fuzziest -fuzzily -fuzziness -fuzzy -gab -gabble -gabbled -gabbles -gabbling -gaberdine -gable -gabled -gables -gabon -gad -gadded -gadding -gadfly -gadget -gadgetry -gadgets -gaff -gaffe -gaffes -gag -gaga -gage -gagged -gagging -gaggle -gaggled -gaging -gags -gagster -gaiety -gaijin -gaily -gain -gained -gainer -gainers -gainful -gainfully -gaining -gainly -gains -gainsay -gainsaying -gait -gaiter -gaiters -gaits -gal -gala -galactic -galas -galaxies -galaxy -gale -galena -gales -galilean -galileo -gall -gallant -gallantly -gallantries -gallantry -gallants -galled -galleon -galleons -galleried -galleries -gallery -galley -galleys -gallic -galling -gallium -gallivanted -gallivanting -gallon -gallons -gallop -galloped -galloping -gallops -gallows -galls -gallstones -galop -galore -galoshes -gals -galvanic -galvanise -galvanised -galvanising -galvanometer -galvanometric -gambia -gambian -gambit -gambits -gamble -gambled -gambler -gamblers -gambles -gambling -gambol -gambolling -gambols -game -gamed -gamekeeper -gamekeepers -gamely -gamers -games -gamesmanship -gamesmen -gamete -gametes -gaming -gamma -gammon -gamut -gamy -gander -ganders -gandhi -gang -ganged -ganger -gangers -ganges -ganging -gangland -ganglia -gangling -ganglion -ganglionic -gangly -gangplank -gangrene -gangrenous -gangs -gangster -gangsterism -gangsters -gangway -gangways -gannet -gannets -gantries -gantry -gaol -gaoled -gaoler -gaolers -gaols -gap -gape -gaped -gapes -gaping -gapingly -gaps -garage -garaged -garages -garb -garbage -garbed -garble -garbled -garbles -garbling -garbs -garden -gardener -gardeners -gardening -gardens -gargantuan -gargle -gargled -gargles -gargling -gargoyle -gargoyles -garish -garishly -garland -garlanded -garlands -garlic -garment -garments -garner -garnered -garnering -garnet -garnets -garnish -garnished -garnishing -garotte -garotted -garottes -garotting -garret -garrets -garrison -garrisoned -garrisons -garrotte -garrotted -garrottes -garrotting -garrulous -garter -garters -gas -gaseous -gases -gash -gashed -gashes -gashing -gasholder -gasify -gasket -gaskets -gaslight -gasometer -gasp -gasped -gasper -gasping -gasps -gassed -gasses -gassier -gassiest -gassing -gassy -gastrectomy -gastric -gastritis -gastroenteritis -gastrointestinal -gastronomic -gastronomy -gastropod -gastropods -gasworks -gate -gateau -gateaus -gateaux -gatecrash -gatecrashed -gatecrasher -gatecrashers -gatecrashing -gated -gatehouse -gatehouses -gatekeeper -gatekeepers -gatepost -gateposts -gates -gateway -gateways -gather -gathered -gatherer -gatherers -gathering -gatherings -gathers -gating -gauche -gaucheness -gaucherie -gaud -gaudiest -gaudily -gaudiness -gaudy -gauge -gauged -gauges -gauging -gaul -gauls -gaunt -gaunter -gauntlet -gauntlets -gauntly -gauze -gave -gavel -gavial -gavials -gavotte -gawk -gawking -gawky -gawpin -gay -gayest -gays -gaze -gazebo -gazed -gazelle -gazelles -gazes -gazette -gazetteer -gazettes -gazing -gdansk -gear -gearbox -gearboxes -geared -gearing -gears -gearstick -gecko -geek -geeks -geese -geezer -geiger -geisha -geishas -gel -gelatin -gelatine -gelatinous -gelding -geldings -gelignite -gelled -gels -gem -gemini -gemmed -gems -gemsbok -gemstone -gemstones -gen -gender -gendered -genderless -genders -gene -genealogical -genealogies -genealogist -genealogy -genera -general -generalisable -generalisation -generalisations -generalise -generalised -generalises -generalising -generalist -generalists -generalities -generality -generally -generals -generalship -generate -generated -generates -generating -generation -generational -generations -generative -generator -generators -generic -generically -generosities -generosity -generous -generously -genes -genesis -genetic -genetically -geneticist -geneticists -genetics -genets -geneva -genial -geniality -genially -genie -genii -genital -genitalia -genitals -genitive -genitives -genius -geniuses -genoa -genocidal -genocide -genome -genomes -genomic -genotype -genotypes -genre -genres -gent -genteel -genteelest -genteelly -gentians -gentile -gentiles -gentility -gentle -gentlefolk -gentleman -gentlemanly -gentlemen -gentleness -gentler -gentlest -gentling -gently -gentrification -gentrified -gentrifying -gentry -gents -genuflect -genuflections -genuine -genuinely -genuineness -genus -geocentric -geochemical -geochemistry -geodesic -geodesics -geographer -geographers -geographic -geographical -geographically -geography -geologic -geological -geologically -geologist -geologists -geology -geomagnetic -geomagnetically -geomagnetism -geometer -geometers -geometric -geometrical -geometrically -geometries -geometry -geomorphological -geomorphologists -geomorphology -geophysical -geophysicist -geophysicists -geophysics -geopolitical -george -georgia -geoscientific -geostationary -geosynchronous -geothermal -geranium -geraniums -gerbil -gerbils -geriatric -geriatrics -germ -german -germane -germanic -germanium -germans -germany -germicidal -germicides -germinal -germinate -germinated -germinating -germination -germs -gerontocracy -gerontologist -gerontology -gerrymander -gerrymandered -gerund -gerundive -gestalt -gestapo -gestate -gestating -gestation -gestational -gesticulate -gesticulated -gesticulating -gesticulation -gesticulations -gestural -gesture -gestured -gestures -gesturing -get -getable -getaway -getrichquick -gets -gettable -getter -getting -geyser -geysers -ghana -ghanian -ghastlier -ghastliest -ghastliness -ghastly -gherkin -gherkins -ghetto -ghost -ghosted -ghosting -ghostlier -ghostliest -ghostlike -ghostly -ghosts -ghoul -ghoulish -ghouls -giant -giantess -giantism -giantkiller -giantkillers -giants -gibber -gibbered -gibbering -gibberish -gibbet -gibbets -gibbon -gibbons -gibbous -gibed -gibes -giblets -giddier -giddiest -giddily -giddiness -giddy -gift -gifted -gifting -gifts -giftware -gig -gigabytes -gigantic -gigantically -gigavolt -giggle -giggled -giggles -giggling -giggly -gigolo -gilded -gilders -gilding -gilds -gill -gillie -gills -gilt -giltedged -gilts -gimcrack -gimlet -gimlets -gimmick -gimmickry -gimmicks -gimmicky -gin -ginger -gingerbread -gingerly -gingers -gingery -gingham -gingivitis -gins -ginseng -gipsies -gipsy -giraffe -giraffes -gird -girded -girder -girders -girding -girdle -girdled -girdles -girdling -girl -girlfriend -girlfriends -girlhood -girlie -girlish -girlishly -girlishness -girls -giro -girt -girth -girths -gist -give -giveaway -given -giver -givers -gives -giving -givings -gizzard -glace -glacial -glacially -glaciated -glaciation -glaciations -glacier -glaciers -glaciological -glaciologist -glaciologists -glaciology -glad -gladden -gladdened -gladdening -gladdens -gladder -gladdest -glade -glades -gladiator -gladiatorial -gladiators -gladioli -gladiolus -gladly -gladness -glamorous -glamour -glance -glanced -glances -glancing -gland -glands -glandular -glans -glare -glared -glares -glaring -glaringly -glasgow -glasnost -glass -glassed -glasses -glassful -glasshouse -glasshouses -glassier -glassiest -glassless -glassware -glassy -glaucoma -glaucous -glaze -glazed -glazer -glazes -glazier -glaziers -glazing -gleam -gleamed -gleaming -gleams -glean -gleaned -gleaning -gleanings -gleans -glebe -glee -gleeful -gleefully -gleefulness -glen -glenn -glens -glia -glib -glibly -glibness -glide -glided -glider -gliders -glides -gliding -glim -glimmer -glimmered -glimmering -glimmerings -glimmers -glimpse -glimpsed -glimpses -glimpsing -glint -glinted -glinting -glints -glisten -glistened -glistening -glistens -glitter -glittered -glittering -glitters -glittery -glitzy -gloaming -gloat -gloated -gloating -glob -global -globalisation -globally -globe -globed -globes -globetrotters -globetrotting -globose -globular -globule -globules -gloom -gloomful -gloomier -gloomiest -gloomily -gloominess -glooms -gloomy -gloried -glories -glorification -glorified -glorifies -glorify -glorifying -glorious -gloriously -glory -glorying -gloss -glossaries -glossary -glossed -glosses -glossier -glossiest -glossily -glossing -glossy -glottal -glove -gloved -gloves -glow -glowed -glower -glowered -glowering -glowers -glowing -glowingly -glows -glowworm -glowworms -glucose -glue -glued -glueing -glues -gluey -gluing -glum -glumly -gluon -glut -glutamate -gluten -glutinous -glutted -glutton -gluttonous -gluttons -gluttony -glycerine -glycerol -glycine -glycol -glyph -glyphs -gnarl -gnarled -gnarling -gnarls -gnash -gnashed -gnashes -gnashing -gnat -gnats -gnaw -gnawed -gnawer -gnawers -gnawing -gnaws -gneiss -gnome -gnomes -gnomic -gnostic -gnosticism -gnu -gnus -go -goad -goaded -goading -goads -goahead -goal -goalies -goalkeeper -goalkeepers -goalkeeping -goalless -goalmouth -goalpost -goalposts -goals -goalscorer -goalscorers -goalscoring -goat -goatee -goatees -goats -goatskin -gobbet -gobbets -gobble -gobbled -gobbledegook -gobbledygook -gobbler -gobbles -gobbling -gobetween -gobi -gobies -goblet -goblets -goblin -goblins -god -godchild -goddess -goddesses -godfather -godfathers -godforsaken -godhead -godless -godlessness -godlier -godlike -godliness -godly -godmother -godmothers -godparents -gods -godsend -godson -godsons -goer -goers -goes -goethe -gofer -goggled -goggles -goggling -going -goings -goitre -goitres -gold -golden -goldfish -golds -goldsmith -goldsmiths -golf -golfer -golfers -golfing -golgotha -goliath -golliwog -golly -gonad -gonads -gondola -gondolas -gondolier -gondoliers -gone -gong -gongs -gonorrhoea -goo -good -goodbye -goodbyes -goodfornothing -goodfornothings -goodhope -goodhumoured -goodhumouredly -goodies -goodish -goodlooking -goodly -goodnatured -goodnaturedly -goodness -goodnight -goods -goodtempered -goodwill -goody -gooey -goof -goofed -goofing -goofs -goofy -googlies -googly -goon -goons -goose -gooseberries -gooseberry -goosestep -goosestepping -gopher -gophers -gordian -gore -gored -gores -gorge -gorged -gorgeous -gorgeously -gorgeousness -gorges -gorging -gorgon -gorgons -gorier -goriest -gorilla -gorillas -goring -gormless -gorse -gory -gosh -gosling -goslings -goslow -goslows -gospel -gospels -gossamer -gossip -gossiped -gossiping -gossips -gossipy -got -goth -gothic -goths -gotten -gouda -gouge -gouged -gouges -gouging -goulash -gourd -gourds -gourmand -gourmet -gourmets -gout -govern -governance -governed -governess -governesses -governing -government -governmental -governments -governor -governors -governorship -governorships -governs -gown -gowned -gowns -grab -grabbed -grabber -grabbers -grabbing -grabs -grace -graced -graceful -gracefully -gracefulness -graceless -gracelessly -graces -gracing -gracious -graciously -graciousness -gradation -gradations -grade -graded -grader -graders -grades -gradient -gradients -grading -gradings -gradual -gradualism -gradualist -gradually -graduand -graduands -graduate -graduated -graduates -graduating -graduation -graduations -graffiti -graffito -graft -grafted -grafting -grafts -graham -grail -grails -grain -grained -grainier -grainiest -graininess -grains -grainy -gram -grammar -grammarian -grammarians -grammars -grammatical -grammatically -gramme -grammes -gramophone -gramophones -grams -granaries -granary -grand -grandads -grandchild -grandchildren -granddad -granddaughter -granddaughters -grandee -grandees -grander -grandest -grandeur -grandfather -grandfathers -grandiloquent -grandiose -grandiosity -grandly -grandma -grandmas -grandmaster -grandmasters -grandmother -grandmothers -grandpa -grandparent -grandparents -grandpas -grands -grandson -grandsons -grandstand -grange -granite -granites -granitic -grannie -grannies -granny -grant -granted -grantee -granting -grants -granular -granularity -granulated -granulation -granule -granules -granulocyte -grape -grapefruit -grapes -grapeshot -grapevine -graph -graphed -graphic -graphical -graphically -graphics -graphite -graphologist -graphologists -graphology -graphs -grapnel -grapple -grappled -grapples -grappling -graptolites -grasp -grasped -grasper -grasping -grasps -grass -grassed -grasses -grasshopper -grasshoppers -grassier -grassiest -grassland -grasslands -grassroots -grassy -grate -grated -grateful -gratefully -grater -graters -grates -graticule -gratification -gratifications -gratified -gratifies -gratify -gratifying -gratifyingly -grating -gratings -gratis -gratitude -gratuities -gratuitous -gratuitously -gratuitousness -gratuity -grave -gravedigger -gravediggers -gravel -gravelled -gravelly -gravels -gravely -graven -graver -graves -graveside -gravest -gravestone -gravestones -graveyard -graveyards -gravies -gravitas -gravitate -gravitated -gravitating -gravitation -gravitational -gravitationally -gravities -graviton -gravitons -gravity -gravures -gravy -graze -grazed -grazer -grazes -grazing -grease -greased -greasepaint -greaseproof -greasers -greases -greasier -greasiest -greasing -greasy -great -greataunt -greataunts -greatcoat -greatcoats -greater -greatest -greatgrandchildren -greatgranddaughter -greatgrandfather -greatgrandmother -greatgrandmothers -greatgrandson -greatly -greatness -grecian -greece -greed -greedier -greediest -greedily -greediness -greeds -greedy -greek -greeks -green -greened -greener -greenery -greenest -greeneyed -greenfield -greenfly -greengages -greengrocer -greengrocers -greengrocery -greenhorn -greenhorns -greenhouse -greenhouses -greenie -greening -greenish -greenly -greenness -greens -greenstone -greensward -greenwich -greet -greeted -greeting -greetings -greets -gregarious -gregariously -gregariousness -gremlin -gremlins -grenade -grenades -grenadier -grenadiers -grew -grey -greybeard -greyed -greyer -greyest -greyhound -greyhounds -greying -greyish -greyness -greys -grid -gridded -gridiron -gridlock -grids -grief -griefs -grievance -grievances -grieve -grieved -griever -grievers -grieves -grieving -grievous -grievously -griffin -griffins -griffon -grill -grille -grilled -grilles -grilling -grills -grim -grimace -grimaced -grimaces -grimacing -grime -grimiest -grimly -grimm -grimmer -grimmest -grimness -grimy -grin -grind -grinded -grinder -grinders -grinding -grinds -grindstone -grinned -grinner -grinning -grins -grip -gripe -griped -gripes -griping -gripped -gripper -grippers -gripping -grips -grislier -grisliest -grisly -grist -gristle -grit -grits -gritted -grittier -grittiest -gritting -gritty -grizzled -grizzlier -grizzliest -grizzly -groan -groaned -groaner -groaners -groaning -groans -groat -groats -grocer -groceries -grocers -grocery -grog -groggiest -groggily -groggy -groin -groins -grommet -grommets -groom -groomed -groomer -groomers -grooming -grooms -groove -grooved -grooves -groovier -grooving -groovy -grope -groped -groper -gropers -gropes -groping -gropingly -gropings -gross -grossed -grosser -grossest -grossly -grossness -grotesque -grotesquely -grotesqueness -grotto -grouch -grouchy -ground -grounded -grounding -groundless -groundnut -groundnuts -grounds -groundsheet -groundsman -groundswell -groundwater -groundwork -group -grouped -grouper -groupie -groupies -grouping -groupings -groups -grouse -grouses -grout -grouting -grove -grovel -grovelled -groveller -grovelling -grovels -groves -grow -grower -growers -growing -growl -growled -growler -growling -growls -grown -grownup -grownups -grows -growth -growths -grub -grubbed -grubbier -grubbiest -grubbing -grubby -grubs -grudge -grudges -grudging -grudgingly -gruel -grueling -gruelling -gruesome -gruesomely -gruesomeness -gruff -gruffly -gruffness -grumble -grumbled -grumbler -grumbles -grumbling -grumblings -grumpier -grumpiest -grumpily -grumps -grumpy -grunge -grunt -grunted -grunter -grunting -grunts -guacamole -guanaco -guanine -guano -guarantee -guaranteed -guaranteeing -guarantees -guarantor -guarantors -guard -guarded -guardedly -guardedness -guardhouse -guardian -guardians -guardianship -guarding -guardroom -guards -guardsman -guardsmen -guava -guavas -gubernatorial -gudgeon -guerilla -guerillas -guerrilla -guerrillas -guess -guessable -guessed -guesses -guessing -guesswork -guest -guesting -guests -guffaw -guffawed -guffaws -guidance -guide -guidebook -guidebooks -guided -guideline -guidelines -guider -guiders -guides -guiding -guidings -guild -guilder -guilders -guilds -guile -guileless -guilelessness -guillemot -guillemots -guillotine -guillotined -guillotines -guillotining -guilt -guiltier -guiltiest -guiltily -guiltiness -guiltless -guilts -guilty -guinea -guineas -guise -guises -guitar -guitarist -guitarists -guitars -gulf -gulfs -gulfwar -gull -gullet -gullets -gulley -gulleys -gullibility -gullible -gullies -gulls -gully -gulp -gulped -gulping -gulps -gum -gumboil -gumboils -gumboots -gumdrop -gumdrops -gummed -gumming -gums -gumshoe -gumtree -gumtrees -gun -gunboat -gunboats -gunfight -gunfire -gunfires -gunite -gunk -gunman -gunmen -gunmetal -gunned -gunner -gunners -gunnery -gunning -gunpoint -gunpowder -guns -gunship -gunships -gunshot -gunshots -gunsight -gunsmith -gunsmiths -gunwale -gunwales -guppies -guppy -gurgle -gurgled -gurgles -gurgling -guru -gurus -gush -gushed -gusher -gushes -gushing -gusset -gust -gusted -gustier -gustiest -gusting -gusto -gusts -gusty -gut -gutless -guts -gutsier -gutsy -gutted -gutter -guttered -guttering -gutters -guttersnipe -guttersnipes -gutting -guttural -gutturally -guy -guys -guzzle -guzzled -guzzler -guzzlers -guzzling -gym -gymkhana -gymnasia -gymnasium -gymnasiums -gymnast -gymnastic -gymnastics -gymnasts -gyms -gynaecological -gynaecologist -gynaecologists -gynaecology -gypsies -gypsum -gypsy -gyrate -gyrated -gyrates -gyrating -gyration -gyrations -gyro -gyromagnetic -gyroscope -gyroscopes -gyroscopic -ha -haberdasher -haberdashers -haberdashery -habit -habitability -habitable -habitat -habitation -habitations -habitats -habitforming -habits -habitual -habitually -habituate -habituated -habituation -hacienda -hack -hackable -hacked -hacker -hackers -hacking -hackle -hackles -hackling -hackney -hackneyed -hacks -hacksaw -had -haddock -haddocks -hades -hadnt -hadron -hadrons -haematological -haematologist -haematology -haematoma -haematuria -haemoglobin -haemolytic -haemophilia -haemophiliac -haemophiliacs -haemorrhage -haemorrhages -haemorrhagic -haemorrhaging -haemorrhoid -haemorrhoids -haft -hafts -hag -haggard -haggardness -haggis -haggle -haggled -haggler -haggling -hagiography -hags -haha -haiku -hail -hailed -hailing -hails -hailstone -hailstones -hailstorm -hailstorms -hair -hairbrush -haircare -haircut -haircuts -hairdo -hairdresser -hairdressers -hairdressing -haired -hairier -hairiest -hairiness -hairless -hairline -hairnet -hairpiece -hairpin -hairpins -hairraising -hairs -hairsplitting -hairspray -hairsprays -hairstyle -hairstyles -hairstyling -hairy -haiti -haitian -hake -hakea -hale -half -halfhearted -halfheartedly -halfheartedness -halfhour -halfhourly -halfhours -halfsister -halftruth -halftruths -halfway -halibut -halifax -halite -halitosis -hall -hallelujah -hallmark -hallmarks -hallo -hallow -hallowed -hallows -halls -hallucinate -hallucinated -hallucinating -hallucination -hallucinations -hallucinatory -hallway -hallways -halo -haloed -halogen -halogenated -halogens -halon -halons -halt -halted -halter -haltered -halters -halting -haltingly -halts -halve -halved -halves -halving -ham -hamburg -hamburger -hamburgers -hamitic -hamlet -hamlets -hammer -hammered -hammerhead -hammering -hammers -hammock -hammocks -hamper -hampered -hampering -hampers -hams -hamster -hamsters -hamstring -hamstrings -hamstrung -hand -handbag -handbags -handball -handbasin -handbell -handbill -handbills -handbook -handbooks -handbrake -handbrakes -handcar -handcart -handcuff -handcuffed -handcuffing -handcuffs -handed -handedness -handel -handful -handfuls -handgun -handguns -handhold -handholds -handicap -handicapped -handicapping -handicaps -handicraft -handicrafts -handier -handiest -handily -handing -handiwork -handkerchief -handkerchiefs -handle -handlebar -handlebars -handled -handler -handlers -handles -handling -handmade -handmaiden -handmaidens -handout -handouts -handover -handovers -handpicked -handrail -handrails -hands -handset -handsets -handshake -handshakes -handshaking -handsome -handsomely -handsomeness -handsomer -handsomest -handstand -handstands -handwriting -handwritten -handy -handyman -handymen -hang -hangar -hangars -hangdog -hanged -hanger -hangers -hangglide -hangglided -hangglider -hanggliders -hangglides -hanggliding -hanging -hangings -hangman -hangmen -hangouts -hangover -hangovers -hangs -hangup -hanker -hankered -hankering -hankers -hankie -hankies -hanoi -hanover -hansard -hansom -haphazard -haphazardly -hapless -happen -happened -happening -happenings -happens -happier -happiest -happily -happiness -happy -happygolucky -harangue -harangued -harangues -haranguing -harare -harass -harassed -harassers -harasses -harassing -harassment -harbinger -harbingers -harbour -harboured -harbouring -harbours -hard -hardback -hardbacks -hardboard -hardboiled -hardcore -hardearned -harden -hardened -hardener -hardeners -hardening -hardens -harder -hardest -hardheaded -hardhearted -hardheartedness -hardhit -hardhitting -hardier -hardiest -hardily -hardiness -hardline -hardliner -hardliners -hardly -hardness -hardpressed -hardship -hardships -hardup -hardware -hardwood -hardwoods -hardworking -hardy -hare -harebell -harebells -harebrained -hared -harem -harems -hares -hark -harked -harken -harkened -harkens -harking -harks -harlequin -harlequins -harlot -harlots -harm -harmed -harmer -harmful -harmfully -harmfulness -harming -harmless -harmlessly -harmlessness -harmonic -harmonica -harmonically -harmonics -harmonies -harmonious -harmoniously -harmonisation -harmonise -harmonised -harmonising -harmonium -harmony -harms -harness -harnessed -harnesses -harnessing -harp -harped -harping -harpist -harpists -harpoon -harpoons -harps -harpsichord -harpsichords -harridan -harried -harrier -harriers -harrow -harrowed -harrowing -harrows -harry -harrying -harsh -harshen -harshens -harsher -harshest -harshly -harshness -hart -harts -harvard -harvest -harvested -harvester -harvesters -harvesting -harvests -has -hasbeen -hasbeens -hash -hashed -hashes -hashing -hashish -hasnt -hasp -hassle -haste -hasted -hasten -hastened -hastening -hastens -hastes -hastier -hastiest -hastily -hastiness -hasty -hat -hatch -hatchback -hatchbacks -hatched -hatcheries -hatchery -hatches -hatchet -hatchets -hatching -hatchway -hate -hated -hateful -hatefully -hater -haters -hates -hatful -hating -hatless -hatrack -hatracks -hatred -hatreds -hats -hatstands -hatted -hatter -hatters -hattrick -hattricks -haughtier -haughtiest -haughtily -haughtiness -haughty -haul -haulage -haulages -hauled -hauler -haulers -haulier -hauliers -hauling -haulms -hauls -haunch -haunches -haunt -haunted -haunting -hauntingly -haunts -hauteur -havana -have -haven -havenots -havens -havent -havering -haversack -haves -having -havoc -hawaii -hawaiian -hawk -hawked -hawker -hawkers -hawking -hawkish -hawks -hawser -hawsers -hawthorn -hawthorns -hay -haydn -hayfever -hayfield -hayloft -haystack -haystacks -haywain -haywire -hazard -hazarded -hazarding -hazardous -hazards -haze -hazel -hazelnut -hazelnuts -hazier -haziest -hazily -haziness -hazy -he -head -headache -headaches -headband -headbands -headboard -headboards -headcount -headdress -headdresses -headed -header -headers -headfast -headgear -headhunted -headhunters -headier -headiest -heading -headings -headlamp -headlamps -headland -headlands -headless -headlight -headlights -headline -headlined -headlines -headlining -headlock -headlong -headman -headmaster -headmasters -headmastership -headmen -headmistress -headmistresses -headnote -headon -headphone -headphones -headpiece -headquarters -headrest -headroom -heads -headscarf -headscarves -headset -headsets -headship -headstand -headstock -headstone -headstones -headstrong -headwaters -headway -headwind -headwinds -headword -headwords -headwork -heady -heal -healed -healer -healers -healing -heals -health -healthful -healthier -healthiest -healthily -healthiness -healths -healthy -heap -heaped -heaping -heaps -hear -hearable -heard -hearer -hearers -hearing -hearings -hearken -hearkened -hearkening -hearkens -hears -hearsay -hearse -hearses -heart -heartache -heartbeat -heartbeats -heartbreak -heartbreaking -heartbreaks -heartbroken -heartburn -hearten -heartened -heartening -heartfelt -hearth -hearthrug -hearths -hearties -heartiest -heartily -heartiness -heartland -heartlands -heartless -heartlessly -heartlessness -heartrending -hearts -heartsearching -heartstrings -hearttoheart -heartwarming -heartwood -hearty -heat -heated -heatedly -heater -heaters -heath -heathen -heathenish -heathenism -heathens -heather -heathers -heathery -heathland -heaths -heating -heatresistant -heats -heatwave -heave -heaved -heaveho -heaven -heavenly -heavens -heavensent -heavenward -heavenwards -heaves -heavier -heavies -heaviest -heavily -heaviness -heaving -heavings -heavy -heavyduty -heavyweight -heavyweights -hebrew -hebrews -heck -heckle -heckled -heckler -hecklers -heckles -heckling -hectare -hectares -hectic -hectically -hectolitres -hector -hectoring -hedge -hedged -hedgehog -hedgehogs -hedgerow -hedgerows -hedges -hedging -hedonism -hedonist -hedonistic -hedonists -heed -heeded -heedful -heeding -heedless -heedlessly -heedlessness -heeds -heel -heeled -heels -heft -hefted -heftier -hefting -hefty -hegemonic -hegemony -heifer -heifers -height -heighten -heightened -heightening -heightens -heights -heinous -heir -heiress -heiresses -heirloom -heirlooms -heirs -heist -heists -held -helen -helical -helices -helicopter -helicopters -heliocentric -heliography -heliosphere -heliotrope -helipad -helium -helix -helixes -hell -hellenic -hellfire -hellish -hellishly -hello -hellraiser -hells -helm -helmet -helmeted -helmets -helms -helmsman -helots -help -helped -helper -helpers -helpful -helpfully -helpfulness -helping -helpings -helpless -helplessly -helplessness -helpline -helplines -helpmate -helpmates -helps -helsinki -helterskelter -hem -heman -hemen -hemisphere -hemispheres -hemispheric -hemispherical -hemline -hemlines -hemlock -hemmed -hemming -hemp -hems -hen -hence -henceforth -henceforward -henchman -henchmen -henge -henna -henpeck -henry -hens -hepatic -hepatitis -heptagon -heptagonal -heptagons -heptane -her -herald -heralded -heraldic -heralding -heraldry -heralds -herb -herbaceous -herbage -herbal -herbalism -herbalist -herbalists -herbicide -herbicides -herbivore -herbivores -herbivorous -herbs -herd -herded -herding -herds -herdsman -herdsmen -here -hereabouts -hereafter -hereby -hereditary -heredity -herein -hereinafter -hereof -heresies -heresy -heretic -heretical -heretics -hereto -heretofore -hereunder -hereupon -herewith -heritability -heritable -heritage -heritors -herm -hermaphrodite -hermaphrodites -hermaphroditic -hermeneutic -hermeneutics -hermetic -hermetically -hermit -hermitage -hermits -hernia -hernias -hero -herod -heroic -heroical -heroically -heroics -heroin -heroine -heroines -heroism -heron -heronry -herons -herpes -herring -herringbone -herrings -hers -herself -hertz -hesitancy -hesitant -hesitantly -hesitate -hesitated -hesitates -hesitating -hesitatingly -hesitation -hesitations -heterodox -heterodoxy -heterogeneity -heterogeneous -heterologous -heterosexist -heterosexual -heterosexuality -heterosexually -heterosexuals -heterozygous -heuristic -heuristically -heuristics -hew -hewed -hewer -hewing -hewn -hex -hexadecimal -hexagon -hexagonal -hexagons -hexagram -hexagrams -hexameter -hexane -hexed -hey -heyday -heydays -hi -hiatus -hiatuses -hibernal -hibernate -hibernating -hibernation -hibiscus -hic -hiccough -hiccup -hiccups -hickory -hid -hidden -hide -hideandseek -hideaway -hideaways -hidebound -hideous -hideously -hideousness -hideout -hideouts -hider -hides -hiding -hidings -hierarch -hierarchic -hierarchical -hierarchically -hierarchies -hierarchy -hieratic -hieroglyph -hieroglyphic -hieroglyphics -hieroglyphs -higgledypiggledy -high -highbrow -higher -highest -highhandedness -highheeled -highish -highjack -highland -highlander -highlanders -highlands -highlight -highlighted -highlighter -highlighting -highlights -highly -highness -highpitched -highpoint -highranking -highs -highspirited -hight -highway -highwayman -highwaymen -highways -hijack -hijacked -hijacker -hijackers -hijacking -hijackings -hijacks -hike -hiked -hiker -hikers -hikes -hiking -hilarious -hilariously -hilarity -hill -hilled -hillier -hilliest -hillman -hillock -hillocks -hillocky -hills -hillside -hillsides -hilltop -hilltops -hillwalking -hilly -hilt -hilts -him -himself -hind -hindbrain -hinder -hindered -hinderer -hindering -hinders -hindmost -hindquarters -hindrance -hindrances -hindsight -hindu -hinduism -hinge -hinged -hinges -hinnies -hinny -hint -hinted -hinterland -hinterlands -hinting -hints -hip -hipbone -hippie -hippies -hippo -hippocampus -hippodrome -hippopotamus -hippy -hips -hipster -hipsters -hire -hired -hireling -hirer -hires -hiring -hirings -hirsute -hirsuteness -his -hispanic -hiss -hissed -hisses -hissing -hissings -histamine -histogram -histograms -histological -histologically -histologists -histology -historian -historians -historic -historical -historically -historicist -histories -historiographical -historiography -history -histrionic -histrionics -hit -hitandrun -hitch -hitched -hitcher -hitches -hitchhike -hitchhiked -hitchhiker -hitchhikers -hitchhiking -hitching -hither -hitherto -hitler -hits -hittable -hitters -hitting -hive -hived -hives -hiving -hmm -ho -hoar -hoard -hoarded -hoarder -hoarders -hoarding -hoardings -hoards -hoarfrost -hoarse -hoarsely -hoarseness -hoarser -hoary -hoax -hoaxed -hoaxer -hoaxers -hoaxes -hoaxing -hob -hobbies -hobbit -hobble -hobbled -hobbles -hobbling -hobby -hobbyist -hobbyists -hobgoblin -hobgoblins -hobnailed -hobnails -hobo -hobs -hock -hockey -hocks -hocus -hocuspocus -hod -hoe -hoed -hoeing -hoes -hog -hogg -hogged -hogger -hogging -hoggs -hogs -hogwash -hoist -hoisted -hoisting -hoists -hold -holdable -holdall -holdalls -holder -holders -holding -holdings -holdout -holds -holdup -holdups -hole -holed -holeinone -holes -holiday -holidaying -holidaymaker -holidaymakers -holidays -holier -holies -holiest -holily -holiness -holing -holism -holistic -holistically -holland -holler -hollered -hollies -hollow -hollowed -hollowly -hollowness -hollows -holly -hollyhocks -holmes -holocaust -holocausts -hologram -holograms -holographic -holography -holster -holsters -holy -homage -homages -hombre -home -homecoming -homecomings -homed -homeland -homelands -homeless -homelessness -homelier -homeliness -homely -homemade -homeowner -homeowners -homes -homesick -homesickness -homespun -homestead -homesteads -homeward -homewardbound -homewards -homework -homicidal -homicide -homicides -homiest -homilies -homily -homing -hominid -hominids -homoeopathic -homoeopathy -homogenates -homogeneity -homogeneous -homogeneously -homogenisation -homogenise -homogenised -homogenising -homological -homologies -homologous -homologue -homologues -homology -homomorphism -homomorphisms -homonym -homonyms -homophobes -homophobia -homophobic -homophones -homophony -homosexual -homosexuality -homosexually -homosexuals -homotopy -homozygous -homunculus -homy -hone -honed -hones -honest -honestly -honesty -honey -honeybee -honeycomb -honeycombed -honeycombing -honeydew -honeyed -honeymoon -honeymooners -honeymoons -honeysuckle -honeysuckles -honing -honk -honking -honks -honorarium -honorary -honorific -honors -honour -honourable -honourably -honoured -honouring -honours -honshu -hood -hooded -hoodlum -hoodlums -hoods -hoodwink -hoodwinked -hoodwinking -hoof -hoofs -hook -hookah -hooked -hooker -hookers -hooking -hooknosed -hooks -hooky -hooligan -hooliganism -hooligans -hoop -hooped -hoops -hooray -hoot -hooted -hooter -hooters -hooting -hoots -hoover -hoovered -hoovering -hooves -hop -hope -hoped -hopeful -hopefully -hopefulness -hopefuls -hopeless -hopelessly -hopelessness -hopes -hoping -hopped -hopper -hoppers -hopping -hops -horde -hordes -horizon -horizons -horizontal -horizontally -horizontals -hormonal -hormonally -hormone -hormones -horn -hornbeam -hornbills -horned -hornet -hornets -hornpipe -hornpipes -horns -horny -horoscope -horoscopes -horrendous -horrendously -horrible -horribly -horrid -horridly -horrific -horrifically -horrified -horrifies -horrify -horrifying -horrifyingly -horror -horrors -horrorstricken -horse -horseback -horsebox -horseflesh -horsefly -horsehair -horseless -horseman -horsemen -horseplay -horsepower -horseradish -horses -horseshoe -horseshoes -horsewhip -horsewhipped -horsey -horsing -horticultural -horticulture -horticulturist -horticulturists -hosanna -hosannas -hose -hosed -hosepipe -hoses -hosier -hosiery -hosing -hospice -hospices -hospitable -hospitably -hospital -hospitalisation -hospitalised -hospitality -hospitals -host -hosta -hostage -hostages -hosted -hostel -hostelries -hostelry -hostels -hostess -hostesses -hostile -hostilely -hostilities -hostility -hosting -hostler -hosts -hot -hotair -hotbed -hotbeds -hotblooded -hotchpotch -hotdog -hotdogs -hotel -hotelier -hoteliers -hotels -hotheaded -hotheads -hothouse -hothouses -hotline -hotly -hotness -hotplate -hotplates -hotpot -hotrod -hotspot -hotspots -hottempered -hotter -hottest -hotting -hound -hounded -hounding -hounds -hour -hourglass -hourly -hours -house -houseboat -houseboats -housebound -housebreaker -housebreakers -housebreaking -housebuilder -housebuilders -housebuilding -housebuyers -housed -houseflies -houseful -household -householder -householders -households -househunting -housekeeper -housekeepers -housekeeping -housemaid -housemaids -houseroom -houses -housewife -housewives -housework -housing -housings -houston -hove -hovel -hovels -hover -hovercraft -hovered -hoverer -hovering -hovers -how -howdy -however -howitzer -howitzers -howl -howled -howler -howlers -howling -howlings -howls -howsoever -hub -hubbies -hubbub -hubby -hubcap -hubcaps -hubris -hubristic -hubs -huckleberry -huddle -huddled -huddles -huddling -hue -hues -huff -huffed -huffily -huffing -huffy -hug -huge -hugely -hugeness -hugged -hugging -hugs -huguenot -huh -hulk -hulking -hulks -hull -hullabaloo -hulled -hullo -hulls -hum -human -humane -humanely -humaner -humanise -humanised -humanising -humanism -humanist -humanistic -humanists -humanitarian -humanitarianism -humanities -humanity -humankind -humanly -humanness -humanoid -humanoids -humans -humble -humbled -humbleness -humbler -humbles -humblest -humbling -humbly -humbug -humbugs -humdrum -humerus -humid -humidifier -humidifiers -humidity -humify -humiliate -humiliated -humiliates -humiliating -humiliatingly -humiliation -humiliations -humility -hummable -hummed -hummer -humming -hummingbird -hummingbirds -hummock -hummocks -hummocky -humorist -humorous -humorously -humour -humoured -humouring -humourless -humours -hump -humpback -humped -humping -humps -hums -humus -hunch -hunchback -hunchbacked -hunched -hunches -hunching -hundred -hundredfold -hundreds -hundredth -hundredths -hundredweight -hundredweights -hung -hungary -hunger -hungered -hungering -hungers -hungrier -hungriest -hungrily -hungry -hunk -hunkers -hunks -hunt -hunted -hunter -huntergatherer -huntergatherers -hunters -hunting -hunts -huntsman -huntsmen -hurdle -hurdled -hurdler -hurdlers -hurdles -hurl -hurled -hurling -hurls -hurlyburly -hurrah -hurrahs -hurray -hurricane -hurricanes -hurried -hurriedly -hurries -hurry -hurrying -hurt -hurtful -hurting -hurtle -hurtled -hurtles -hurtling -hurts -husband -husbandman -husbandmen -husbandry -husbands -hush -hushed -hushes -hushhush -hushing -husk -husked -huskier -huskies -huskiest -huskily -husks -husky -hussies -hussy -hustings -hustle -hustled -hustler -hustlers -hustles -hustling -hut -hutch -hutches -huts -hyacinth -hyacinths -hyaena -hyaenas -hybrid -hybridisation -hybridised -hybrids -hydra -hydrangea -hydrangeas -hydrant -hydrants -hydrate -hydrated -hydration -hydraulic -hydraulically -hydraulics -hydrazine -hydride -hydro -hydrocarbon -hydrocarbons -hydrochloric -hydrochloride -hydrodynamic -hydrodynamical -hydrodynamics -hydroelectric -hydroelectricity -hydrofluoric -hydrofoil -hydrofoils -hydrogen -hydrogenated -hydrogenation -hydrographer -hydrographic -hydrological -hydrologically -hydrologists -hydrology -hydrolysis -hydromagnetic -hydromechanics -hydrophobia -hydrophobic -hydroponically -hydrosphere -hydrostatic -hydrostatics -hydrothermal -hydrous -hydroxide -hydroxides -hyena -hyenas -hygiene -hygienic -hygienically -hygienist -hygienists -hygroscopic -hymen -hymens -hymn -hymnal -hymnbook -hymns -hype -hyperactive -hyperactivity -hyperbola -hyperbolas -hyperbole -hyperbolic -hyperboloid -hyperboloids -hypercholesterolaemia -hypercube -hypercubes -hyperfine -hyperinflation -hypermarket -hypermarkets -hyperplane -hyperplanes -hypersensitive -hypersensitiveness -hypersensitivity -hypersonic -hyperspace -hypersphere -hypertension -hypertext -hypertonic -hyperventilated -hyperventilating -hyperventilation -hyphen -hyphenate -hyphenated -hyphenates -hyphenating -hyphenation -hyphenations -hyphened -hyphens -hypnosis -hypnotherapists -hypnotherapy -hypnotic -hypnotically -hypnotise -hypnotised -hypnotises -hypnotising -hypnotism -hypnotist -hypochondria -hypochondriac -hypochondriacal -hypochondriacs -hypocrisies -hypocrisy -hypocrite -hypocrites -hypocritical -hypocritically -hypodermic -hypoglycaemia -hypoglycaemic -hypotension -hypothalamus -hypothermia -hypotheses -hypothesis -hypothesise -hypothesised -hypothesiser -hypothesises -hypothesising -hypothetical -hypothetically -hypoxia -hyssop -hysterectomy -hysteresis -hysteria -hysteric -hysterical -hysterically -hysterics -iambic -iambus -iatrogenic -iberia -iberian -ibex -ibexes -ibis -ibises -ibsen -icarus -ice -iceage -iceberg -icebergs -icebox -icecap -icecold -icecream -iced -iceland -iceman -icepack -icepick -icepicks -ices -iceskate -iceskating -ichneumon -icicle -icicles -icier -iciest -icily -iciness -icing -icings -icon -iconic -iconoclasm -iconoclast -iconoclastic -iconoclasts -iconographic -iconographical -iconography -icons -icosahedra -icosahedral -icosahedron -icy -id -idaho -idea -ideal -idealisation -idealisations -idealise -idealised -idealises -idealising -idealism -idealist -idealistic -idealistically -idealists -ideality -ideally -ideals -ideas -idem -identical -identically -identifiable -identifiably -identification -identifications -identified -identifier -identifiers -identifies -identify -identifying -identities -identity -ideograms -ideographic -ideographs -ideological -ideologically -ideologies -ideologist -ideologists -ideologue -ideologues -ideology -ides -idiocies -idiocy -idiolect -idiom -idiomatic -idiomatically -idioms -idiopathic -idiosyncrasies -idiosyncrasy -idiosyncratic -idiosyncratically -idiot -idiotic -idiotically -idiots -idle -idled -idleness -idler -idlers -idles -idlest -idling -idly -idol -idolaters -idolatrous -idolatry -idolisation -idolise -idolised -idols -ids -idyll -idyllic -idyllically -if -ifs -igloo -igloos -iglu -igneous -ignite -ignited -igniter -ignites -igniting -ignition -ignoble -ignobly -ignominious -ignominiously -ignominy -ignorable -ignoramus -ignoramuses -ignorance -ignorant -ignorantly -ignore -ignored -ignores -ignoring -iguana -iguanas -ileum -iliad -ilk -ill -illadvised -illbehaved -illconceived -illdefined -illegal -illegalities -illegality -illegally -illegibility -illegible -illegibly -illegitimacy -illegitimate -illegitimately -illequipped -illfated -illfavoured -illhumoured -illiberal -illicit -illicitly -illimitable -illinformed -illinois -illiquid -illiteracy -illiterate -illiterates -illmannered -illness -illnesses -illogic -illogical -illogicality -illogically -ills -illtempered -illtreated -illuminant -illuminate -illuminated -illuminates -illuminating -illumination -illuminations -illumine -illusion -illusionist -illusionists -illusions -illusive -illusory -illustrate -illustrated -illustrates -illustrating -illustration -illustrations -illustrative -illustrator -illustrators -illustrious -ilmenite -im -image -imaged -imagery -images -imaginable -imaginary -imagination -imaginations -imaginative -imaginatively -imagine -imagined -imagines -imaging -imagining -imaginings -imago -imam -imams -imbalance -imbalanced -imbalances -imbecile -imbeciles -imbecilic -imbecilities -imbecility -imbedded -imbeds -imbibe -imbibed -imbiber -imbibers -imbibing -imbroglio -imbue -imbued -imitate -imitated -imitates -imitating -imitation -imitations -imitative -imitator -imitators -immaculate -immaculately -immanence -immanent -immanently -immaterial -immature -immaturely -immaturity -immeasurable -immeasurably -immediacy -immediate -immediately -immediateness -immemorial -immense -immensely -immenseness -immensities -immensity -immerse -immersed -immerses -immersing -immersion -immigrant -immigrants -immigrate -immigrated -immigrating -immigration -immigrations -imminence -imminent -imminently -immiscible -immobile -immobilisation -immobilise -immobilised -immobiliser -immobilises -immobilising -immobility -immoderate -immoderately -immodest -immolate -immolated -immolation -immoral -immorality -immorally -immortal -immortalised -immortality -immortally -immortals -immovability -immovable -immoveable -immune -immunisation -immunisations -immunise -immunised -immunises -immunities -immunity -immunoassay -immunocompromised -immunodeficiency -immunological -immunologically -immunologist -immunologists -immunology -immunosuppression -immunosuppressive -immured -immutability -immutable -immutably -imp -impact -impacted -impacting -impaction -impacts -impair -impaired -impairing -impairment -impairments -impairs -impala -impalas -impale -impaled -impaler -impales -impaling -impalpable -impart -imparted -impartial -impartiality -impartially -imparting -imparts -impassable -impasse -impassioned -impassive -impassively -impassiveness -impassivity -impatience -impatient -impatiently -impeach -impeached -impeaches -impeachment -impeachments -impeccable -impeccably -impecunious -impedance -impede -impeded -impedes -impediment -impedimenta -impediments -impeding -impel -impelled -impelling -impels -impend -impending -impenetrability -impenetrable -impenetrably -imperative -imperatively -imperatives -imperceptible -imperceptibly -imperfect -imperfection -imperfections -imperfectly -imperial -imperialism -imperialist -imperialistic -imperialists -imperially -imperil -imperilled -imperious -imperiously -imperiousness -imperishable -imperium -impermanence -impermanent -impermeability -impermeable -impermissible -impersonal -impersonality -impersonally -impersonate -impersonated -impersonates -impersonating -impersonation -impersonations -impersonator -impersonators -impertinence -impertinent -impertinently -imperturbability -imperturbable -imperturbably -impervious -impetuosity -impetuous -impetuously -impetus -impi -impiety -impinge -impinged -impingement -impinges -impinging -impious -impish -impishly -impishness -implacable -implacably -implant -implantation -implanted -implanting -implants -implausibility -implausible -implausibly -implement -implementable -implementation -implementations -implemented -implementer -implementers -implementing -implements -implicate -implicated -implicates -implicating -implication -implications -implicit -implicitly -implied -impliedly -implies -implode -imploded -implodes -imploding -implore -implored -implores -imploring -imploringly -implosion -imply -implying -impolite -impoliteness -impolitic -imponderable -imponderables -import -importable -importance -important -importantly -importation -imported -importer -importers -importing -imports -importunate -importunately -importune -importuned -importunity -imposable -impose -imposed -imposes -imposing -imposition -impositions -impossibilities -impossibility -impossible -impossibly -imposter -imposters -impostor -impostors -impotence -impotency -impotent -impotently -impound -impounded -impounding -impoverish -impoverished -impoverishing -impoverishment -impracticability -impracticable -impractical -impracticalities -impracticality -impractically -imprecation -imprecations -imprecise -imprecisely -impreciseness -imprecision -impregnable -impregnably -impregnate -impregnated -impregnating -impregnation -impresario -impress -impressed -impresses -impressing -impression -impressionable -impressionism -impressionist -impressionistic -impressionists -impressions -impressive -impressively -impressiveness -imprimatur -imprint -imprinted -imprinting -imprints -imprison -imprisoned -imprisoning -imprisonment -imprisonments -imprisons -improbabilities -improbability -improbable -improbably -impromptu -improper -improperly -improprieties -impropriety -improvable -improve -improved -improvement -improvements -improver -improves -improvidence -improvident -improving -improvisation -improvisational -improvisations -improvisatory -improvise -improvised -improvises -improvising -imprudence -imprudent -imprudently -imps -impudence -impudent -impudently -impugn -impugnable -impugned -impugning -impulse -impulses -impulsion -impulsive -impulsively -impulsiveness -impunity -impure -impurities -impurity -imputation -imputations -impute -imputed -imputing -in -inabilities -inability -inaccessibility -inaccessible -inaccuracies -inaccuracy -inaccurate -inaccurately -inaction -inactivated -inactivating -inactivation -inactive -inactivity -inadequacies -inadequacy -inadequate -inadequately -inadmissible -inadvertence -inadvertent -inadvertently -inadvisability -inadvisable -inadvisedly -inalienable -inane -inanely -inanimate -inanities -inanity -inapplicability -inapplicable -inappropriate -inappropriately -inappropriateness -inaptly -inarticulacy -inarticulate -inarticulateness -inasmuch -inattention -inattentive -inattentively -inaudibility -inaudible -inaudibly -inaugural -inaugurate -inaugurated -inaugurates -inaugurating -inauguration -inauspicious -inauspiciously -inauthenticity -inboard -inborn -inbound -inbred -inbreeding -inbuilt -inca -incalculable -incalculably -incandescence -incandescent -incandescently -incant -incantation -incantations -incantatory -incapability -incapable -incapacitate -incapacitated -incapacitates -incapacitating -incapacitation -incapacity -incarcerated -incarcerating -incarceration -incarnate -incarnated -incarnation -incarnations -incas -incased -incautious -incautiously -incendiaries -incendiary -incense -incensed -incenses -incensing -incentive -incentives -inception -incessant -incessantly -incest -incests -incestuous -incestuousness -inch -inched -inches -inching -inchoate -incidence -incidences -incident -incidental -incidentally -incidents -incinerate -incinerated -incinerates -incinerating -incineration -incinerator -incinerators -incipient -incised -incision -incisions -incisive -incisively -incisiveness -incisor -incisors -incite -incited -incitement -incitements -inciter -inciters -incites -inciting -inclemency -inclement -inclination -inclinations -incline -inclined -inclines -inclining -include -included -includes -including -inclusion -inclusions -inclusive -inclusively -inclusiveness -incognito -incoherence -incoherency -incoherent -incoherently -incombustible -income -incomer -incomers -incomes -incoming -incommensurable -incommoding -incommunicable -incommunicado -incomparable -incomparably -incompatibilities -incompatibility -incompatible -incompatibly -incompetence -incompetent -incompetently -incompetents -incomplete -incompletely -incompleteness -incomprehensibility -incomprehensible -incomprehensibly -incomprehension -incompressible -inconceivable -inconceivably -inconclusive -inconclusively -incongruities -incongruity -incongruous -incongruously -inconsequential -inconsequentially -inconsiderable -inconsiderate -inconsiderately -inconsiderateness -inconsistencies -inconsistency -inconsistent -inconsistently -inconsolable -inconsolably -inconspicuous -inconspicuously -inconspicuousness -inconstancy -inconstant -incontestable -incontestably -incontinence -incontinent -incontinently -incontrovertible -incontrovertibly -inconvenience -inconvenienced -inconveniences -inconveniencing -inconvenient -inconveniently -incorporable -incorporate -incorporated -incorporates -incorporating -incorporation -incorrect -incorrectly -incorrectness -incorrigible -incorrigibly -incorruptible -increase -increased -increases -increasing -increasingly -incredible -incredibly -incredulity -incredulous -incredulously -increment -incremental -incrementally -incrementation -incremented -incrementing -increments -incriminate -incriminated -incriminates -incriminating -incrimination -incubate -incubated -incubating -incubation -incubations -incubator -incubators -inculcate -inculcated -inculcating -inculcation -incumbency -incumbent -incumbents -incur -incurable -incurably -incuriously -incurred -incurring -incurs -incursion -incursions -indaba -indebted -indebtedness -indecency -indecent -indecently -indecipherable -indecision -indecisive -indecisively -indecisiveness -indeclinable -indecorous -indeed -indefatigable -indefeasible -indefensible -indefinable -indefinably -indefinite -indefinitely -indelible -indelibly -indelicacy -indelicate -indemnified -indemnify -indemnities -indemnity -indent -indentation -indentations -indented -indenting -indents -indentures -independence -independent -independently -independents -indepth -indescribable -indescribably -indestructibility -indestructible -indeterminable -indeterminacy -indeterminate -index -indexation -indexed -indexer -indexers -indexes -indexing -india -indian -indiana -indians -indicant -indicants -indicate -indicated -indicates -indicating -indication -indications -indicative -indicator -indicators -indices -indict -indictable -indicted -indicting -indictment -indictments -indicts -indifference -indifferent -indifferently -indigenous -indigestible -indigestion -indignant -indignantly -indignation -indignities -indignity -indigo -indirect -indirection -indirections -indirectly -indirectness -indiscipline -indiscreet -indiscreetly -indiscretion -indiscretions -indiscriminate -indiscriminately -indispensability -indispensable -indispensably -indispose -indisposed -indisposition -indisputable -indisputably -indissoluble -indissolubly -indistinct -indistinctly -indistinctness -indistinguishable -indistinguishably -indite -individual -individualised -individualism -individualist -individualistic -individualists -individuality -individually -individuals -individuation -indivisibility -indivisible -indivisibly -indoctrinate -indoctrinated -indoctrinates -indoctrinating -indoctrination -indoctrinations -indoctrinator -indoctrinators -indole -indolence -indolent -indolently -indomitable -indoor -indoors -indorsed -indorses -indrawn -indubitable -indubitably -induce -induced -inducement -inducements -induces -inducible -inducing -induct -inductance -inducted -induction -inductions -inductive -inductively -inductor -inductors -inducts -indulge -indulged -indulgence -indulgences -indulgent -indulgently -indulger -indulges -indulging -induna -industrial -industrialisation -industrialise -industrialised -industrialising -industrialism -industrialist -industrialists -industrially -industries -industrious -industriously -industriousness -industry -inebriate -inebriated -inebriation -inedible -ineffable -ineffective -ineffectively -ineffectiveness -ineffectual -ineffectually -ineffectualness -inefficiencies -inefficiency -inefficient -inefficiently -inelastic -inelegance -inelegant -inelegantly -ineligibility -ineligible -ineluctable -ineluctably -inept -ineptitude -ineptly -ineptness -inequalities -inequality -inequitable -inequities -inequity -ineradicable -ineradicably -inert -inertia -inertial -inertness -inescapable -inescapably -inessential -inestimable -inestimably -inevitability -inevitable -inevitably -inexact -inexactitude -inexactitudes -inexcusable -inexcusably -inexhaustible -inexhaustibly -inexorability -inexorable -inexorably -inexpedient -inexpensive -inexpensively -inexperience -inexperienced -inexpert -inexpertly -inexplicable -inexplicably -inexpressibility -inexpressible -inexpressibly -inextensible -inextinguishable -inextricable -inextricably -infallibility -infallible -infallibly -infamous -infamously -infamy -infancy -infant -infanta -infante -infanticide -infantile -infantry -infantryman -infantrymen -infants -infarct -infarction -infarctions -infatuate -infatuated -infatuation -infatuations -infeasibility -infeasible -infect -infected -infecting -infection -infections -infectious -infectiously -infective -infects -infelicities -infelicitous -infelicitously -infelicity -infer -inference -inferences -inferential -inferentially -inferior -inferiority -inferiors -infernal -infernally -inferno -inferred -inferring -infers -infertile -infertility -infest -infestation -infestations -infested -infesting -infests -infidel -infidelities -infidelity -infidels -infield -infighting -infill -infilling -infiltrate -infiltrated -infiltrates -infiltrating -infiltration -infiltrations -infiltrator -infiltrators -infinite -infinitely -infinitesimal -infinitesimally -infinitesimals -infinities -infinitive -infinitives -infinitude -infinity -infirm -infirmaries -infirmary -infirmities -infirmity -infix -inflame -inflamed -inflames -inflaming -inflammable -inflammation -inflammatory -inflatable -inflate -inflated -inflates -inflating -inflation -inflationary -inflect -inflected -inflecting -inflection -inflectional -inflections -inflects -inflexibility -inflexible -inflexibly -inflexion -inflexions -inflict -inflicted -inflicter -inflicting -infliction -inflictions -inflicts -inflow -inflowing -inflows -influence -influenced -influences -influencing -influential -influenza -influx -influxes -info -inform -informal -informality -informally -informant -informants -informatics -information -informational -informative -informatively -informativeness -informatory -informed -informer -informers -informing -informs -infra -infraction -infractions -infrared -infrastructural -infrastructure -infrastructures -infrequency -infrequent -infrequently -infringe -infringed -infringement -infringements -infringes -infringing -infuriate -infuriated -infuriates -infuriating -infuriatingly -infuse -infused -infuses -infusing -infusion -infusions -ingathered -ingenious -ingeniously -ingenuity -ingenuous -ingenuously -ingenuousness -ingest -ingested -ingesting -ingestion -inglorious -ingoing -ingot -ingots -ingrained -ingrate -ingratiate -ingratiated -ingratiating -ingratiatingly -ingratitude -ingredient -ingredients -ingress -ingression -ingrown -inhabit -inhabitable -inhabitant -inhabitants -inhabited -inhabiting -inhabits -inhalant -inhalation -inhalations -inhale -inhaled -inhaler -inhalers -inhales -inhaling -inherent -inherently -inherit -inheritable -inheritance -inheritances -inherited -inheriting -inheritor -inheritors -inherits -inhibit -inhibited -inhibiting -inhibition -inhibitions -inhibitor -inhibitors -inhibitory -inhibits -inhomogeneities -inhomogeneity -inhomogeneous -inhospitable -inhouse -inhuman -inhumane -inhumanely -inhumanities -inhumanity -inhumanly -inimical -inimitable -inimitably -iniquities -iniquitous -iniquitously -iniquity -initial -initialisation -initialisations -initialise -initialised -initialises -initialising -initialled -initially -initials -initiate -initiated -initiates -initiating -initiation -initiations -initiative -initiatives -initiator -initiators -inject -injectable -injected -injecting -injection -injections -injector -injects -injoke -injokes -injudicious -injudiciously -injunction -injunctions -injure -injured -injures -injuries -injuring -injurious -injuriously -injury -injustice -injustices -ink -inked -inkier -inkiest -inking -inkling -inklings -inkpad -inkpot -inkpots -inks -inkstand -inkstands -inkwell -inkwells -inky -inlaid -inland -inlaw -inlaws -inlay -inlays -inlet -inlets -inmate -inmates -inmost -inn -innards -innate -innately -inner -innermost -innervation -innings -innkeeper -innkeepers -innocence -innocent -innocently -innocents -innocuous -innocuousness -innovate -innovated -innovating -innovation -innovations -innovative -innovatively -innovator -innovators -innovatory -inns -innuendo -innumerable -innumerably -innumeracy -innumerate -inoculate -inoculated -inoculates -inoculating -inoculation -inoculations -inoffensive -inoperable -inoperative -inopportune -inordinate -inordinately -inorganic -input -inputs -inputting -inquest -inquests -inquire -inquired -inquirer -inquirers -inquires -inquiries -inquiring -inquiringly -inquiry -inquisition -inquisitional -inquisitions -inquisitive -inquisitively -inquisitiveness -inquisitor -inquisitorial -inquisitorially -inquisitors -inquorate -inroad -inroads -inrush -ins -insalubrious -insane -insanely -insanitary -insanities -insanity -insatiable -insatiably -inscribe -inscribed -inscribing -inscription -inscriptions -inscrutability -inscrutable -inscrutably -insect -insecticidal -insecticide -insecticides -insectivores -insectivorous -insects -insecure -insecurely -insecurities -insecurity -insemination -insensibility -insensible -insensibly -insensitive -insensitively -insensitivity -inseparable -inseparably -insert -inserted -inserting -insertion -insertions -inserts -inset -insets -inshore -inside -insideout -insider -insiders -insides -insidious -insidiously -insight -insightful -insights -insignia -insignificance -insignificant -insignificantly -insincere -insincerely -insincerity -insinuate -insinuated -insinuating -insinuatingly -insinuation -insinuations -insipid -insist -insisted -insistence -insistent -insistently -insisting -insists -insofar -insole -insolence -insolent -insolently -insolubility -insoluble -insolvencies -insolvency -insolvent -insomnia -insomniac -insomniacs -insouciance -insouciant -inspect -inspected -inspecting -inspection -inspections -inspector -inspectorate -inspectorates -inspectors -inspects -inspiration -inspirational -inspirations -inspire -inspired -inspires -inspiring -instabilities -instability -install -installable -installation -installations -installed -installer -installers -installing -installs -instalment -instalments -instance -instanced -instances -instancy -instant -instantaneous -instantaneously -instantiate -instantiated -instantiates -instantiating -instantiation -instantiations -instantly -instants -instated -instead -instep -insteps -instigate -instigated -instigates -instigating -instigation -instigator -instigators -instil -instillation -instilled -instilling -instills -instils -instinct -instinctive -instinctively -instincts -instinctual -institute -instituted -institutes -instituting -institution -institutional -institutionalisation -institutionalise -institutionalised -institutionalising -institutionalism -institutionally -institutions -instruct -instructed -instructing -instruction -instructional -instructions -instructive -instructor -instructors -instructs -instrument -instrumental -instrumentalist -instrumentalists -instrumentality -instrumentally -instrumentals -instrumentation -instrumented -instruments -insubordinate -insubordination -insubstantial -insufferable -insufferably -insufficiency -insufficient -insufficiently -insulant -insular -insularity -insulate -insulated -insulates -insulating -insulation -insulator -insulators -insulin -insult -insulted -insulter -insulting -insultingly -insults -insuperable -insupportable -insurance -insurances -insure -insured -insurer -insurers -insures -insurgency -insurgent -insurgents -insuring -insurmountable -insurmountably -insurrection -insurrectionary -insurrections -intact -intaglio -intake -intakes -intangible -intangibles -integer -integers -integrability -integrable -integral -integrally -integrals -integrand -integrands -integrate -integrated -integrates -integrating -integration -integrationist -integrations -integrative -integrator -integrators -integrity -intellect -intellects -intellectual -intellectualism -intellectuality -intellectually -intellectuals -intelligence -intelligences -intelligent -intelligently -intelligentsia -intelligibility -intelligible -intelligibly -intemperance -intemperate -intend -intended -intending -intends -intense -intensely -intensification -intensified -intensifies -intensify -intensifying -intensities -intensity -intensive -intensively -intent -intention -intentional -intentionality -intentionally -intentioned -intentions -intently -intentness -intents -inter -interact -interacted -interacting -interaction -interactional -interactions -interactive -interactively -interactiveness -interacts -interatomic -interbank -interbred -interbreed -interbreeding -intercede -interceded -interceding -intercept -intercepted -intercepting -interception -interceptions -interceptor -interceptors -intercepts -intercession -intercessions -interchange -interchangeability -interchangeable -interchangeably -interchanged -interchanges -interchanging -intercity -intercollegiate -intercom -intercommunicate -intercommunication -interconnect -interconnected -interconnectedness -interconnecting -interconnection -interconnections -interconnects -intercontinental -interconversion -intercountry -intercourse -intercut -interdenominational -interdepartmental -interdependence -interdependency -interdependent -interdict -interdicted -interdisciplinary -interest -interested -interestedly -interesting -interestingly -interests -interface -interfaced -interfaces -interfacing -interfere -interfered -interference -interferences -interferer -interferes -interfering -interferometer -interferometers -interferometric -interferometry -interferon -intergalactic -interglacial -intergovernmental -interim -interims -interior -interiors -interject -interjected -interjecting -interjection -interjectional -interjections -interjects -interlace -interlaced -interlacing -interlap -interleave -interleaved -interleaves -interleaving -interlingual -interlinked -interlock -interlocked -interlocking -interlocks -interlocutor -interlocutors -interlocutory -interloper -interlopers -interlude -interludes -intermarriage -intermarriages -intermediaries -intermediary -intermediate -intermediates -interment -interments -interminable -interminably -intermingled -intermingling -intermission -intermissions -intermittent -intermittently -intermix -intermixed -intermixing -intermolecular -intern -internal -internalisation -internalise -internalised -internalises -internalising -internally -internals -international -internationalisation -internationalised -internationalism -internationalist -internationalists -internationally -internationals -interned -internees -internet -interning -internment -internments -interns -internuclear -interocular -interoperability -interoperable -interpellation -interpenetration -interpersonal -interplanetary -interplay -interplays -interpolatable -interpolate -interpolated -interpolates -interpolating -interpolation -interpolations -interpose -interposed -interposes -interposing -interposition -interpret -interpretable -interpretation -interpretational -interpretations -interpretative -interpreted -interpreter -interpreters -interpreting -interpretive -interpretively -interprets -interracial -interred -interregnum -interrelate -interrelated -interrelatedness -interrelation -interrelations -interrelationship -interrelationships -interrogate -interrogated -interrogates -interrogating -interrogation -interrogations -interrogative -interrogatively -interrogatives -interrogator -interrogators -interrogatory -interrupt -interrupted -interruptibility -interrupting -interruption -interruptions -interrupts -intersect -intersected -intersecting -intersection -intersections -intersects -intersperse -interspersed -intersperses -interspersing -interstellar -interstices -interstitial -interstitially -intertidal -intertwine -intertwined -intertwining -interval -intervals -intervene -intervened -intervenes -intervening -intervention -interventionism -interventionist -interventions -interview -interviewed -interviewee -interviewees -interviewer -interviewers -interviewing -interviews -interweaving -interwoven -intestacy -intestate -intestinal -intestine -intestines -intifada -intimacies -intimacy -intimate -intimated -intimately -intimates -intimating -intimation -intimations -intimidate -intimidated -intimidates -intimidating -intimidation -intimidatory -into -intolerable -intolerably -intolerance -intolerant -intonation -intonational -intonations -intone -intoned -intones -intoning -intoxicant -intoxicants -intoxicate -intoxicated -intoxicating -intoxication -intracellular -intractability -intractable -intractably -intramural -intramuscular -intransigence -intransigent -intransitive -intrauterine -intravenous -intravenously -intrepid -intrepidly -intricacies -intricacy -intricate -intricately -intrigue -intrigued -intrigues -intriguing -intriguingly -intrinsic -intrinsically -intro -introduce -introduced -introduces -introducing -introduction -introductions -introductory -introspection -introspective -introspectively -introversion -introvert -introverted -introverts -intrude -intruded -intruder -intruders -intrudes -intruding -intrusion -intrusions -intrusive -intrusiveness -intuited -intuition -intuitionist -intuitions -intuitive -intuitively -intuitiveness -inuit -inuits -inundate -inundated -inundation -inure -inured -invade -invaded -invader -invaders -invades -invading -invalid -invalidate -invalidated -invalidates -invalidating -invalidation -invalided -invalidity -invalids -invaluable -invariable -invariably -invariance -invariant -invariants -invasion -invasions -invasive -invective -invectives -inveigh -inveighing -inveigle -inveigled -inveigler -inveiglers -inveigling -invent -invented -inventing -invention -inventions -inventive -inventively -inventiveness -inventor -inventories -inventors -inventory -invents -inverse -inversely -inverses -inversion -inversions -invert -invertebrate -invertebrates -inverted -inverter -inverters -invertible -inverting -inverts -invest -invested -investigate -investigated -investigates -investigating -investigation -investigations -investigative -investigator -investigators -investigatory -investing -investiture -investment -investments -investor -investors -invests -inveterate -invidious -invigilate -invigilated -invigilating -invigilator -invigilators -invigorate -invigorated -invigorating -invigoratingly -invincibility -invincible -inviolability -inviolable -inviolate -inviscid -invisibilities -invisibility -invisible -invisibles -invisibly -invitation -invitations -invite -invited -invites -inviting -invitingly -invocation -invocations -invoice -invoiced -invoices -invoicing -invokable -invoke -invoked -invoker -invokers -invokes -invoking -involuntarily -involuntary -involute -involution -involutions -involve -involved -involvement -involvements -involves -involving -invulnerability -invulnerable -inward -inwardly -inwardness -inwards -iodide -iodine -ion -ionian -ionic -ionisation -ionise -ionised -ionising -ionosphere -ionospheric -ions -iota -iotas -iran -iranian -iranians -iraq -iraqi -iraqis -irascibility -irascible -irascibly -irate -ire -ireland -iridescence -iridescent -iridium -iris -irises -irish -irishman -irishmen -irk -irked -irking -irks -irksome -irksomeness -iron -ironage -ironed -ironic -ironical -ironically -ironies -ironing -ironlady -ironmonger -ironmongers -ironmongery -irons -ironstone -ironwork -ironworks -irony -irradiate -irradiated -irradiating -irradiation -irrational -irrationalities -irrationality -irrationally -irreconcilable -irrecoverable -irrecoverably -irredeemable -irredeemably -irreducibility -irreducible -irreducibly -irrefutable -irregular -irregularities -irregularity -irregularly -irregulars -irrelevance -irrelevances -irrelevancy -irrelevant -irrelevantly -irreligious -irremediable -irremovable -irreparable -irreparably -irreplaceable -irrepressible -irrepressibly -irreproachable -irreproachably -irresistible -irresistibly -irresolute -irresolutely -irresolution -irresolvable -irrespective -irrespectively -irresponsibility -irresponsible -irresponsibly -irretrievable -irretrievably -irreverence -irreverent -irreverently -irreversibility -irreversible -irreversibly -irrevocable -irrevocably -irrigate -irrigated -irrigating -irrigation -irritability -irritable -irritably -irritant -irritants -irritate -irritated -irritatedly -irritates -irritating -irritatingly -irritation -irritations -irrupted -irruption -is -isis -islam -islamic -island -islander -islanders -islands -isle -isles -islet -islets -isms -isnt -isobar -isobars -isogram -isolate -isolated -isolates -isolating -isolation -isolationism -isolationist -isolator -isolators -isomer -isomeric -isomers -isometric -isometrically -isometry -isomorph -isomorphic -isomorphism -isomorphisms -isoperimetrical -isosceles -isostatic -isothermal -isothermally -isotonic -isotope -isotopes -isotopic -isotropic -isotropically -isotropy -israel -israeli -israelis -issuable -issuance -issue -issued -issuer -issuers -issues -issuing -istanbul -isthmus -it -italian -italians -italic -italicisation -italicise -italicised -italics -italy -itch -itched -itches -itchier -itchiest -itching -itchy -item -itemise -itemised -itemises -itemising -items -iterate -iterated -iterates -iterating -iteration -iterations -iterative -iteratively -iterators -itinerant -itinerants -itineraries -itinerary -itll -its -itself -ive -ivies -ivories -ivory -ivy -jab -jabbed -jabber -jabbered -jabbering -jabbers -jabbing -jabs -jack -jackal -jackals -jackass -jackasses -jackboot -jackbooted -jackboots -jackdaw -jackdaws -jacked -jacket -jackets -jacking -jackinthebox -jackpot -jackpots -jacks -jacob -jacuzzi -jade -jaded -jadedly -jadedness -jades -jag -jagged -jaggedly -jaguar -jaguars -jahweh -jail -jailbird -jailed -jailer -jailers -jailing -jails -jakarta -jalopy -jam -jamaica -jamaican -jamb -jamboree -jambs -james -jammed -jamming -jams -jangle -jangled -jangling -jangly -janitor -janitors -january -janus -jap -japan -jape -japes -japonica -jar -jargon -jargons -jarl -jarred -jarring -jars -jasmine -jaundice -jaundiced -jaunt -jaunted -jauntier -jauntiest -jauntily -jaunting -jaunts -jaunty -java -javelin -javelins -jaw -jawbone -jawbones -jawed -jawing -jawline -jaws -jay -jays -jaywalk -jaywalker -jaywalking -jazz -jazzed -jazzier -jazziest -jazzy -jealous -jealousies -jealously -jealousy -jeans -jeep -jeeps -jeer -jeered -jeering -jeeringly -jeerings -jeers -jehad -jejune -jejunum -jell -jellied -jellies -jellify -jelly -jellyfish -jemmy -jennets -jeopardise -jeopardised -jeopardises -jeopardising -jeopardy -jerboas -jeremiah -jericho -jerk -jerked -jerkier -jerkiest -jerkily -jerkin -jerking -jerkings -jerkins -jerks -jerky -jersey -jerseys -jest -jested -jester -jesters -jesting -jestingly -jests -jesuit -jesus -jet -jetlagged -jetplane -jetpropelled -jets -jetsam -jetsetting -jetted -jetties -jetting -jettison -jettisoned -jettisoning -jetty -jew -jewel -jewelled -jeweller -jewellers -jewellery -jewelry -jewels -jewess -jewish -jews -jewsharp -jezebel -jiffy -jiggle -jiggling -jigs -jigsaw -jigsaws -jihad -jilt -jilted -jilting -jilts -jimmy -jingle -jingled -jingles -jingling -jingo -jingoism -jingoistic -jinked -jinks -jinx -jinxed -jinxes -jitter -jitters -jittery -jiujitsu -jive -jived -jives -job -jobbing -jobless -joblessness -jobs -jock -jockey -jockeying -jockeys -jocular -jocularity -jocularly -joey -jog -jogged -jogger -joggers -jogging -jogs -john -join -joined -joiner -joiners -joinery -joining -joins -joint -jointed -jointing -jointly -joints -jointures -joist -joists -joke -joked -joker -jokers -jokes -jokey -jokier -jokily -joking -jokingly -jollier -jolliest -jollify -jollily -jollity -jolly -jolt -jolted -jolting -jolts -jonah -jonathan -joseph -joshua -jostle -jostled -jostles -jostling -jot -jots -jotted -jotter -jotting -jottings -joule -joules -journal -journalese -journalism -journalist -journalistic -journalists -journalled -journalling -journals -journey -journeyed -journeyer -journeying -journeyman -journeys -joust -jouster -jousting -jousts -jovial -joviality -jovially -jovian -jowl -jowls -joy -joyed -joyful -joyfully -joyfulness -joyless -joylessness -joyous -joyously -joyousness -joyride -joyrider -joyriders -joyriding -joys -joystick -joysticks -jubilant -jubilantly -jubilate -jubilation -jubilee -jubilees -judaic -judaism -judas -judder -juddered -juddering -judders -judge -judged -judgement -judgemental -judgements -judges -judging -judgment -judgmental -judgments -judicature -judicial -judicially -judiciaries -judiciary -judicious -judiciously -judo -jug -jugged -juggernaut -juggernauts -juggle -juggled -juggler -jugglers -juggles -juggling -jugs -jugular -juice -juices -juicier -juiciest -juiciness -juicy -jukebox -jukeboxes -julep -juleps -july -jumble -jumbled -jumbles -jumbo -jump -jumped -jumper -jumpers -jumpier -jumpiest -jumpiness -jumping -jumps -jumpstart -jumpstarting -jumpsuit -jumpy -junction -junctions -juncture -june -jungle -jungles -junior -juniority -juniors -juniper -junk -junker -junket -junkie -junkies -junkmail -junks -junkyard -juno -junta -juntas -jupiter -jurassic -juridic -juridical -juries -jurisdiction -jurisdictional -jurisdictions -jurisprudence -jurisprudential -jurist -juristic -jurists -juror -jurors -jury -juryman -jurymen -jussive -just -justice -justices -justifiability -justifiable -justifiably -justification -justifications -justificatory -justified -justifies -justify -justifying -justly -justness -jut -jute -juts -jutted -jutting -juvenile -juveniles -juxtapose -juxtaposed -juxtaposes -juxtaposing -juxtaposition -juxtapositions -kaftan -kaftans -kaiser -kalahari -kale -kaleidoscope -kaleidoscopic -kalif -kamikaze -kampala -kampong -kangaroo -kangaroos -kaolin -karakul -karaoke -karate -karma -karst -katydid -kayak -kayaks -kebab -kebabs -kedgeree -keel -keeled -keelhaul -keeling -keels -keen -keener -keenest -keening -keenly -keenness -keep -keeper -keepers -keeping -keeps -keepsake -keepsakes -keg -kegs -kelp -kelpers -kelt -kelts -kelvin -ken -kennedy -kennel -kennelled -kennels -kent -kentucky -kenya -kenyan -kept -keratin -kerb -kerbs -kerbside -kerchief -kerned -kernel -kernels -kerning -kerosene -kestrel -kestrels -ketch -ketchup -kettle -kettleful -kettles -key -keyboard -keyboardist -keyboards -keyed -keyhole -keyholes -keying -keynote -keynotes -keypad -keypads -keyring -keys -keystone -keystones -keystroke -keystrokes -keyword -keywords -khaki -khalif -khan -khans -khoikhoi -khoisan -kibbutz -kick -kickback -kicked -kicker -kicking -kicks -kickstart -kickstarted -kickstarting -kickstarts -kid -kidded -kiddie -kidding -kidnap -kidnapped -kidnapper -kidnappers -kidnapping -kidnappings -kidnaps -kidney -kidneys -kidneyshaped -kids -kiev -kill -killed -killer -killers -killing -killings -killjoy -killjoys -kills -kiln -kilns -kilo -kilobits -kilobyte -kilobytes -kilohertz -kilojoules -kilometre -kilometres -kiloton -kilotons -kilovolt -kilowatt -kilowatts -kilt -kilted -kilter -kilts -kimono -kin -kina -kinase -kind -kinder -kindergarten -kindergartens -kindest -kindhearted -kindheartedness -kindle -kindled -kindles -kindlier -kindliest -kindliness -kindling -kindly -kindness -kindnesses -kindred -kinds -kinematic -kinematics -kinetic -kinetically -kinetics -kinfolk -king -kingdom -kingdoms -kingfisher -kingfishers -kingly -kingpin -kings -kingship -kingsize -kingsized -kink -kinked -kinks -kinky -kinsfolk -kinshasa -kinship -kinsman -kinsmen -kinswoman -kiosk -kiosks -kipper -kippers -kirk -kismet -kiss -kissed -kisser -kisses -kissing -kit -kitbag -kitbags -kitchen -kitchenette -kitchens -kitchenware -kite -kites -kith -kits -kitsch -kitted -kitten -kittenish -kittens -kitting -kittiwakes -kitty -kiwi -kiwis -klaxon -klaxons -kleptomania -kleptomaniac -kleptomaniacs -klick -kloof -knack -knacker -knackers -knacks -knapsack -knapsacks -knave -knavery -knaves -knavish -knead -kneaded -kneading -kneads -knee -kneecap -kneecaps -kneed -kneedeep -kneel -kneeled -kneeler -kneeling -kneels -knees -knell -knelt -knesset -knew -knickers -knife -knifed -knifepoint -knifes -knifing -knight -knighted -knighthood -knighthoods -knightly -knights -knit -knits -knitted -knitter -knitters -knitting -knitwear -knives -knob -knobbly -knobs -knock -knocked -knocker -knockers -knocking -knockings -knockout -knocks -knoll -knolls -knot -knots -knotted -knottier -knottiest -knotting -knotty -know -knowable -knowhow -knowing -knowingly -knowledge -knowledgeable -knowledgeably -known -knows -knuckle -knuckled -knuckleduster -knuckledusters -knuckles -knuckling -koala -koalas -kongo -kookaburra -koran -korea -korean -koreans -kosher -kraal -kraals -kraft -kremlin -kriegspiel -krill -krypton -kudu -kudus -kungfu -kuwait -kwacha -kwachas -laager -lab -label -labelled -labelling -labellings -labels -labia -labial -labials -labile -labium -laboratories -laboratory -laborious -laboriously -laboriousness -labour -laboured -labourer -labourers -labouring -labourintensive -labours -laboursaving -labs -laburnum -labyrinth -labyrinthine -labyrinths -lace -laced -lacerate -lacerated -lacerating -laceration -lacerations -laces -lacework -laches -lachrymal -lachrymose -lacier -lacing -lacings -lack -lackadaisical -lacked -lackey -lackeys -lacking -lacklustre -lacks -laconic -laconically -lacquer -lacquered -lacquers -lacrosse -lacs -lactate -lactation -lacteal -lactic -lactose -lacuna -lacunae -lacunas -lacy -lad -ladder -laddered -ladders -laddie -laddies -lade -laden -ladies -lading -ladle -ladled -ladles -ladling -lads -lady -ladybird -ladybirds -ladybug -ladylike -ladyship -ladyships -lag -lager -lagers -laggard -laggards -lagged -lagging -lagoon -lagoons -lagos -lags -lagune -laid -lain -lair -laird -lairds -lairs -laissezfaire -laity -lake -lakes -lakeside -lam -lama -lamas -lamb -lambasted -lambasting -lambda -lambent -lambing -lambs -lambskin -lambswool -lame -lamed -lamely -lameness -lament -lamentable -lamentably -lamentation -lamentations -lamented -lamenter -lamenting -laments -lamest -lamina -laminar -laminate -laminated -laminates -lamination -lamp -lamplight -lamplighter -lamplit -lampoon -lampooned -lampoonery -lampooning -lampoons -lamppost -lampposts -lamprey -lampreys -lamps -lampshade -lampshades -lance -lanced -lancelot -lancer -lancers -lances -lancet -lancets -lancing -land -landed -lander -landfall -landfill -landform -landforms -landholders -landholding -landholdings -landing -landings -landladies -landlady -landless -landlines -landlocked -landlord -landlords -landman -landmark -landmarks -landmass -landmine -landowner -landowners -landowning -lands -landscape -landscaped -landscapes -landscaping -landside -landslide -landslides -landslip -landslips -landward -lane -lanes -language -languages -languid -languidly -languish -languished -languishes -languishing -languor -languorous -languorously -lank -lankier -lankiest -lanky -lanolin -lantern -lanterns -lanyard -laos -lap -lapdog -lapdogs -lapel -lapels -lapful -lapidary -lapland -lapp -lapped -lapping -laps -lapse -lapsed -lapses -lapsing -laptop -laptops -lapwing -lapwings -larceny -larch -larches -lard -larder -larders -lards -large -largely -largeness -larger -largest -largish -largo -lark -larking -larks -larva -larvae -larval -laryngeal -laryngitis -larynx -larynxes -las -lasagne -lascivious -lasciviously -lasciviousness -lase -laser -lasers -lash -lashed -lashers -lashes -lashing -lashings -lasing -lass -lasses -lassie -lassies -lassitude -lasso -lassoed -lassoing -last -lasted -lasting -lastly -lasts -latch -latched -latches -latching -late -latecomer -latecomers -lately -latencies -latency -lateness -latent -later -lateral -lateralisation -laterally -laterals -latest -latex -lath -lathe -lather -lathered -lathers -lathes -laths -latices -latin -latino -latitude -latitudes -latitudinal -latrine -latrines -latter -lattice -latticed -lattices -latvia -latvian -laud -laudable -laudatory -lauded -lauders -lauding -lauds -laugh -laughable -laughably -laughed -laugher -laughing -laughingly -laughs -laughter -launch -launched -launcher -launchers -launches -launching -launder -laundered -launderette -launderettes -laundering -laundress -laundrette -laundrettes -laundries -laundry -laureate -laurel -laurels -lava -lavas -lavatorial -lavatories -lavatory -lavender -lavish -lavished -lavishes -lavishing -lavishly -lavishness -law -lawabiding -lawbreaker -lawbreakers -lawbreaking -lawful -lawfully -lawfulness -lawless -lawlessness -lawmaker -lawmakers -lawman -lawmen -lawn -lawnmower -lawnmowers -lawns -laws -lawsuit -lawsuits -lawyer -lawyers -lax -laxative -laxatives -laxer -laxity -laxness -lay -layabout -layabouts -layby -laybys -layer -layered -layering -layers -laying -layman -laymen -layoff -layoffs -layout -layouts -layperson -lays -lazaret -lazarus -laze -lazed -lazier -laziest -lazily -laziness -lazing -lazuli -lazy -lazybones -lea -leach -leached -leaches -leaching -lead -leaded -leaden -leader -leaderless -leaders -leadership -leaderships -leadfree -leading -leads -leaf -leafed -leafier -leafiest -leafiness -leafing -leafless -leaflet -leaflets -leafy -league -leagues -leak -leakage -leakages -leaked -leakier -leakiest -leakiness -leaking -leaks -leaky -lean -leaned -leaner -leanest -leaning -leanings -leanness -leans -leant -leap -leaped -leaper -leapfrog -leapfrogging -leaping -leaps -leapt -leapyear -learn -learnable -learned -learnedly -learner -learners -learning -learns -learnt -lease -leased -leasehold -leaseholder -leaseholders -leases -leash -leashed -leashes -leashing -leasing -least -leat -leather -leathers -leathery -leave -leaved -leaven -leavened -leavening -leaver -leavers -leaves -leaving -leavings -lebanon -lebensraum -lecher -lecherous -lecherousness -lechery -lectern -lector -lectors -lecture -lectured -lecturer -lecturers -lectures -lectureship -lectureships -lecturing -led -ledge -ledger -ledgers -ledges -lee -leech -leeches -leeching -leeds -leek -leeks -leer -leered -leering -leeringly -leers -lees -leeward -leeway -left -lefthanded -lefthandedly -lefthandedness -lefthander -lefthanders -lefties -leftish -leftist -leftists -leftmost -leftover -leftovers -lefts -leftward -leftwards -lefty -leg -legacies -legacy -legal -legalese -legalisation -legalise -legalised -legalising -legalism -legalistic -legalities -legality -legally -legate -legatee -legatees -legates -legation -legato -legator -legend -legendary -legends -legerdemain -legged -legging -leggings -leggy -leghorn -leghorns -legibility -legible -legibly -legion -legionaries -legionary -legionnaires -legions -legislate -legislated -legislating -legislation -legislative -legislatively -legislator -legislators -legislature -legislatures -legitimacy -legitimate -legitimated -legitimately -legitimating -legitimation -legitimisation -legitimise -legitimised -legitimising -legless -legman -legroom -legs -legume -legumes -leguminous -legwork -leipzig -leisure -leisured -leisurely -leisurewear -leitmotif -leitmotifs -leitmotiv -leitmotivs -lemma -lemmas -lemming -lemmings -lemon -lemonade -lemons -lemur -lemurs -lend -lender -lenders -lending -lends -length -lengthen -lengthened -lengthening -lengthens -lengthier -lengthiest -lengthily -lengths -lengthways -lengthwise -lengthy -leniency -lenient -leniently -lenin -lens -lenses -lensing -lent -lentil -lentils -lento -leonardo -leone -leopard -leopards -leopardskin -leotard -leotards -leper -lepers -leprechaun -leprechauns -leprose -leprosy -leprous -lepton -leptons -lesbian -lesbianism -lesbians -lesion -lesions -lesotho -less -lessee -lessees -lessen -lessened -lessening -lessens -lesser -lesson -lessons -lessor -lessors -lest -let -lethal -lethality -lethally -lethargic -lethargically -lethargy -lets -letter -letterbox -letterboxes -lettered -letterhead -letterheads -lettering -letterpress -letters -letterwriter -letting -lettings -lettish -lettuce -lettuces -leucine -leukaemia -leukemia -level -levelheaded -levelled -leveller -levelling -levelly -levels -lever -leverage -leveraged -levered -levering -levers -levi -leviathan -levied -levies -levitate -levitated -levitates -levitating -levitation -levity -levy -levying -lewd -lewdness -lexeme -lexemes -lexical -lexically -lexicographer -lexicographers -lexicographic -lexicographical -lexicographically -lexicography -lexicon -lexicons -leyden -liabilities -liability -liable -liaise -liaised -liaises -liaising -liaison -liaisons -liar -liars -libation -libations -libel -libeled -libeler -libelled -libeller -libelling -libellous -libels -liberal -liberalisation -liberalise -liberalised -liberalising -liberalism -liberality -liberally -liberals -liberate -liberated -liberates -liberating -liberation -liberationists -liberator -liberators -liberia -libero -libertarian -libertarianism -libertarians -liberties -libertine -libertines -liberty -libidinous -libido -librarian -librarians -librarianship -libraries -library -librate -librated -librates -libretti -librettist -librettists -libretto -libya -libyan -libyans -lice -licence -licences -license -licensed -licensee -licensees -licenses -licensing -licentiate -licentious -licentiousness -lichee -lichen -lichened -lichens -lichi -lichis -lick -licked -lickerish -licking -licks -licorice -lid -lidded -lidless -lido -lids -lie -lied -lieder -lien -liens -lies -lieu -lieutenancy -lieutenant -lieutenants -life -lifeanddeath -lifebelt -lifeblood -lifeboat -lifeboatmen -lifeboats -lifeforms -lifegiving -lifeguard -lifeguards -lifeless -lifelessly -lifelessness -lifelike -lifeline -lifelines -lifelong -liferaft -liferafts -lifesaving -lifesize -lifesized -lifespan -lifespans -lifestyle -lifestyles -lifetaking -lifethreatening -lifetime -lifetimes -lifework -lift -lifted -lifter -lifters -lifting -liftman -liftmen -liftoff -lifts -ligament -ligaments -ligand -ligands -ligature -ligatured -ligatures -ligaturing -light -lighted -lighten -lightened -lightening -lightens -lighter -lighters -lightest -lightheaded -lightheadedness -lighthearted -lightheartedly -lightheartedness -lighthouse -lighthouses -lighting -lightless -lightly -lightness -lightning -lights -lightship -lightweight -lightweights -lignite -likable -like -likeability -likeable -liked -likelier -likeliest -likelihood -likely -likeminded -liken -likened -likeness -likenesses -likening -likens -likes -likewise -liking -likings -lilac -lilacs -lilies -lilliput -lilliputian -lilongwe -lilt -lilting -lily -lilylivered -lilywhite -lima -limb -limber -limbering -limbers -limbless -limbo -limbs -lime -limekiln -limelight -limerick -limericks -limes -limestone -limestones -limeys -liminal -liming -limit -limitation -limitations -limited -limiter -limiters -limiting -limitless -limits -limo -limousin -limousine -limousines -limp -limped -limpet -limpets -limpid -limping -limply -limpopo -limps -linage -linchpin -lincoln -linden -line -lineage -lineages -lineally -lineaments -linear -linearised -linearity -linearly -lined -linefeed -lineman -linemen -linen -linens -lineout -lineouts -liner -liners -lines -linesman -linesmen -lineup -lineups -linger -lingered -lingerer -lingerie -lingering -lingeringly -lingers -lingua -lingual -linguist -linguistic -linguistically -linguistics -linguists -liniment -liniments -lining -linings -link -linkable -linkage -linkages -linked -linker -linkers -linking -links -linkup -linkups -linnet -linnets -lino -linoleum -linseed -lint -lintel -lintels -liny -lion -lioness -lionesses -lionise -lionised -lions -lip -lipase -lipid -lipids -lipped -lipread -lipreading -lips -lipservice -lipstick -lipsticks -liquefaction -liquefied -liquefy -liqueur -liqueurs -liquid -liquidate -liquidated -liquidating -liquidation -liquidations -liquidator -liquidators -liquidise -liquidised -liquidiser -liquidising -liquidity -liquids -liquify -liquor -liquorice -liquorish -liquors -lira -lire -lisbon -lisp -lisped -lisping -lisps -lissom -lissome -lissomeness -lissomness -list -listed -listen -listened -listener -listeners -listening -listens -listeria -listing -listings -listless -listlessly -listlessness -lists -lit -litanies -litany -litchi -literacy -literal -literalism -literalistic -literally -literals -literary -literate -literati -literature -literatures -lithe -lithely -lithium -lithograph -lithographic -lithographs -lithography -lithological -lithologies -lithology -lithosphere -litigant -litigants -litigate -litigating -litigation -litigious -litigiousness -litmus -litotes -litre -litres -litter -littered -littering -litters -little -littleness -littler -littlest -littoral -liturgical -liturgies -liturgy -livable -live -liveable -lived -livelier -liveliest -livelihood -livelihoods -liveliness -lively -liven -livened -livening -livens -liver -liveried -liveries -liverish -livers -liverworts -livery -lives -livestock -livewire -livid -lividly -living -livings -lizard -lizards -llama -llamas -lls -load -loadable -loaded -loader -loaders -loading -loadings -loads -loaf -loafed -loafer -loafers -loafing -loafs -loam -loams -loamy -loan -loanable -loaned -loaner -loaning -loans -loanword -loanwords -loath -loathe -loathed -loathes -loathing -loathsome -loathsomely -loathsomeness -loaves -lob -lobbed -lobbied -lobbies -lobbing -lobby -lobbying -lobbyist -lobbyists -lobe -lobed -lobelia -lobes -lobotomies -lobotomised -lobotomising -lobotomist -lobotomy -lobs -lobster -lobsters -lobular -local -locale -locales -localisation -localisations -localise -localised -localises -localising -localities -locality -locally -locals -locatable -locate -located -locates -locating -location -locational -locations -locative -locator -locators -loch -lochness -lochs -loci -lock -lockable -lockage -locked -locker -lockers -locket -locking -lockjaw -lockout -lockouts -locks -locksmith -loco -locomote -locomotion -locomotive -locomotives -locus -locust -locusts -lode -lodestar -lodestone -lodge -lodged -lodgement -lodger -lodgers -lodges -lodging -lodgings -loess -loft -lofted -loftier -loftiest -loftily -loftiness -lofts -lofty -log -loganberries -loganberry -logarithm -logarithmic -logarithmically -logarithms -logbook -logbooks -logged -logger -loggerheads -loggers -logging -logic -logical -logicality -logically -logician -logicians -logics -logistic -logistical -logistically -logistics -logjam -logo -logoff -logos -logs -loin -loincloth -loins -loire -loiter -loitered -loiterer -loiterers -loitering -loiters -loll -lolled -lollies -lolling -lollipop -lollipops -lolly -london -londoner -lone -lonelier -loneliest -loneliness -lonely -loner -loners -lonesome -lonesomeness -long -longawaited -longed -longer -longest -longevity -longfaced -longhand -longing -longingly -longings -longish -longitude -longitudes -longitudinal -longitudinally -longlasting -longlived -longlost -longs -longstanding -longsuffering -longwinded -longwindedness -loo -look -lookalike -lookalikes -looked -looker -lookers -looking -lookingglass -lookingglasses -lookout -lookouts -looks -loom -loomed -looming -looms -loon -looney -loony -loop -looped -loophole -loopholes -looping -loops -loopy -loose -loosed -loosely -loosen -loosened -looseness -loosening -loosens -looser -looses -loosest -loosing -loot -looted -looter -looters -looting -loots -lop -lope -loped -lopes -loping -lopped -lopper -loppers -lopping -lopsided -lopsidedly -loquacious -loquacity -lord -lording -lordly -lords -lordship -lordships -lore -lorelei -lorries -lorry -lorryload -lorryloads -losable -lose -loser -losers -loses -losing -losings -loss -losses -lost -lot -loth -lotion -lotions -lots -lotteries -lottery -lotto -lotus -louche -loud -louder -loudest -loudhailer -loudhailers -loudly -loudmouthed -loudness -loudspeaker -loudspeakers -louis -lounge -lounged -lounger -loungers -lounges -lounging -louse -lousiest -lousily -lousy -lout -loutish -loutishness -louts -louver -louvers -louvre -louvred -louvres -lovable -love -loveable -lovebirds -loved -loveless -lovelier -lovelies -loveliest -loveliness -lovelorn -lovely -lovemaking -lover -lovers -loves -lovesick -lovestruck -loving -lovingly -low -lower -lowercase -lowered -lowering -lowers -lowest -lowing -lowish -lowkey -lowland -lowlanders -lowlands -lowlier -lowliest -lowly -lowlying -lowness -lowpitched -lows -lowspirited -loyal -loyalist -loyalists -loyally -loyalties -loyalty -lozenge -lozenges -luanda -lubber -lubbers -lubricant -lubricants -lubricate -lubricated -lubricates -lubricating -lubrication -lubricious -lucid -lucidity -lucidly -lucifer -luck -luckier -luckiest -luckily -luckless -lucky -lucrative -lucre -ludicrous -ludicrously -ludicrousness -ludo -lug -luggage -lugged -lugging -lugs -lugubrious -lugubriously -luke -lukewarm -lull -lullabies -lullaby -lulled -lulling -lulls -lulu -lumbago -lumbar -lumber -lumbered -lumbering -lumberjack -lumberjacks -lumbers -lumen -luminal -luminance -luminaries -luminary -luminescence -luminescent -luminosities -luminosity -luminous -luminously -lump -lumped -lumpen -lumpier -lumpiest -lumpiness -lumping -lumpish -lumps -lumpy -luna -lunacies -lunacy -lunar -lunate -lunatic -lunatics -lunch -lunched -luncheon -luncheons -lunchers -lunches -lunching -lunchpack -lunchtime -lunchtimes -lune -lung -lunge -lunged -lunges -lungfish -lungful -lungfuls -lunging -lungs -lupin -lupines -lupins -lur -lurch -lurched -lurchers -lurches -lurching -lure -lured -lures -lurex -lurid -luridly -luring -lurk -lurked -lurker -lurkers -lurking -lurks -lusaka -luscious -lusciously -lush -lusher -lushest -lushness -lust -lusted -lustful -lustfully -lustier -lustiest -lustily -lusting -lustre -lustreless -lustrous -lusts -lusty -lute -lutes -luther -lux -luxor -luxuriance -luxuriant -luxuriantly -luxuriate -luxuriating -luxuries -luxurious -luxuriously -luxury -lychee -lychees -lye -lying -lymph -lymphatic -lymphocyte -lymphocytes -lymphocytic -lymphoid -lymphoma -lymphomas -lynch -lynched -lynches -lynching -lynchpin -lynx -lynxes -lyon -lyons -lyra -lyre -lyres -lyric -lyrical -lyrically -lyricism -lyricist -lyricists -lyrics -lyrist -lysine -mac -macabre -macaque -macaques -macaroni -macaroon -macaroons -macaw -macaws -mace -maces -machete -machetes -machination -machinations -machine -machined -machinegun -machineguns -machinery -machines -machinist -machinists -machismo -macho -macintosh -macintoshes -mackerel -mackintosh -mackintoshes -macro -macrobiotic -macrocosm -macroeconomic -macroeconomics -macromolecular -macromolecules -macron -macrophage -macrophages -macroscopic -macroscopically -mad -madam -madame -madams -madcap -madden -maddened -maddening -maddeningly -maddens -madder -maddest -made -madeira -mademoiselle -madhouse -madly -madman -madmen -madness -madras -madrid -madrigal -madrigals -madwoman -maelstrom -maestro -mafia -mafiosi -mag -magazine -magazines -magenta -maggot -maggots -magi -magic -magical -magically -magician -magicians -magics -magisterial -magisterially -magistrate -magistrates -magma -magmas -magmatic -magnanimity -magnanimosity -magnanimous -magnanimously -magnate -magnates -magnesia -magnesium -magnet -magnetic -magnetically -magnetisation -magnetise -magnetised -magnetism -magnetite -magneto -magnetodynamics -magnetohydrodynamical -magnetohydrodynamics -magnetometer -magnetometers -magnetosphere -magnetron -magnets -magnification -magnifications -magnificence -magnificent -magnificently -magnified -magnifier -magnifies -magnify -magnifying -magniloquent -magnitude -magnitudes -magnolia -magnolias -magnum -magnums -magpie -magpies -mags -mahatma -mahogany -maid -maiden -maidenly -maidens -maids -maidservant -maidservants -mail -mailable -mailbox -mailed -mailer -mailing -mailings -mailman -mailmen -mailorder -mails -mailshot -mailshots -maim -maimed -maiming -maimings -maims -main -mainbrace -maine -mainframe -mainframes -mainland -mainline -mainly -mains -mainsail -mainspring -mainstay -mainstays -mainstream -maintain -maintainability -maintainable -maintained -maintainer -maintainers -maintaining -maintains -maintenance -maisonette -maisonettes -maize -maizes -majestic -majestically -majesties -majesty -majolica -major -majorette -majorettes -majorities -majority -majors -make -makeover -maker -makers -makes -makeshift -makeup -makeweight -making -makings -malachite -maladaptive -maladies -maladjusted -maladjustment -maladministration -maladroit -malady -malaise -malaria -malarial -malathion -malawi -malay -malayan -malays -malaysia -malcontent -malcontents -maldives -male -malefaction -malefactions -malefactor -malefactors -maleness -males -malevolence -malevolent -malevolently -malformation -malformations -malformed -malfunction -malfunctioned -malfunctioning -malfunctions -malice -malices -malicious -maliciously -maliciousness -malign -malignancies -malignancy -malignant -malignantly -maligned -maligners -maligning -malignity -maligns -malingerers -malingering -mall -mallard -mallards -malleability -malleable -mallet -mallets -mallow -malls -malnourished -malnourishment -malnutrition -malodorous -malpractice -malpractices -malt -malta -malted -maltese -malting -maltreat -maltreated -maltreatment -malts -malty -malva -mama -mamas -mamba -mambas -mammal -mammalia -mammalian -mammals -mammary -mammoth -mammoths -mammy -man -manacle -manacled -manacles -manage -manageability -manageable -managed -management -managements -manager -manageress -manageresses -managerial -managerially -managers -managership -manages -managing -manatee -manciple -mandarin -mandarins -mandate -mandated -mandates -mandating -mandatory -mandela -mandible -mandibles -mandibular -mandolin -mandolins -mandrake -mandril -mandrill -mane -maned -manes -maneuver -manfully -manganese -mange -manger -mangers -mangle -mangled -mangler -mangles -mangling -mango -mangrove -mangroves -manhandle -manhandled -manhandling -manhole -manholes -manhood -manhunt -manhunts -mania -maniac -maniacal -maniacally -maniacs -manias -manic -manically -manicdepressive -manicure -manicured -manifest -manifestation -manifestations -manifested -manifesting -manifestly -manifesto -manifests -manifold -manifolds -manikin -manila -manipulable -manipulate -manipulated -manipulates -manipulating -manipulation -manipulations -manipulative -manipulator -manipulators -mankind -manliest -manliness -manly -manmade -manna -manned -mannequin -mannequins -manner -mannered -mannerism -mannerisms -mannerist -mannerliness -mannerly -manners -manning -manoeuvrability -manoeuvrable -manoeuvre -manoeuvred -manoeuvres -manoeuvring -manoeuvrings -manometer -manor -manorial -manors -manpower -manse -manservant -mansion -mansions -mansized -manslaughter -mantel -mantelpiece -mantelpieces -mantelshelf -mantids -mantis -mantissa -mantissas -mantle -mantled -mantles -mantling -mantra -mantrap -mantraps -mantras -manual -manually -manuals -manufacture -manufactured -manufacturer -manufacturers -manufactures -manufacturing -manure -manured -manures -manuring -manuscript -manuscripts -many -maoism -maoist -maoists -maori -map -maple -maples -mappable -mapped -mapper -mappers -mapping -mappings -maps -maputo -maquettes -mar -mara -marathon -marathons -marauders -marauding -marble -marbled -marbles -march -marched -marcher -marchers -marches -marching -marchioness -mare -mares -margarine -margarines -margate -margin -marginal -marginalia -marginalisation -marginalise -marginalised -marginalises -marginalising -marginality -marginally -marginals -margins -maria -marigold -marigolds -marijuana -marina -marinade -marinas -marinate -marinated -marine -mariner -mariners -marines -marionette -marionettes -marital -maritime -mark -marked -markedly -marker -markers -market -marketability -marketable -marketed -marketeer -marketeers -marketer -marketing -marketplace -markets -marking -markings -marks -marksman -marksmanship -marksmen -markup -markups -marl -marls -marmalade -marmoset -marmosets -marmot -marmots -maroon -marooned -marooning -maroons -marque -marquee -marquees -marques -marquess -marquetry -marquis -marred -marriage -marriageable -marriages -married -marries -marring -marrow -marrows -marry -marrying -mars -marsala -marsh -marshal -marshalled -marshaller -marshalling -marshals -marshes -marshgas -marshier -marshiest -marshiness -marshland -marshmallow -marshmallows -marshy -marsupial -marsupials -mart -marten -martens -martial -martian -martians -martin -martinet -martingale -martingales -martini -martins -martyr -martyrdom -martyred -martyrs -martyry -marvel -marvelled -marvelling -marvellous -marvellously -marvels -marx -marxism -marxist -marxists -mary -marzipan -mas -mascara -mascot -mascots -masculine -masculinity -maser -maseru -mash -mashed -masher -mashing -mask -masked -masking -masks -masochism -masochist -masochistic -masochistically -masochists -mason -masonic -masonry -masons -masque -masquerade -masqueraded -masquerades -masquerading -masques -mass -massacre -massacred -massacres -massacring -massage -massaged -massager -massages -massaging -massed -masses -masseur -masseurs -masseuse -masseuses -massif -massing -massive -massively -massless -massproduced -massproducing -mast -mastectomy -masted -master -masterclass -mastered -masterful -masterfully -mastering -masterly -mastermind -masterminded -masterminding -masterpiece -masterpieces -masters -mastership -masterwork -masterworks -mastery -masthead -masticating -mastication -mastiff -mastitis -mastodon -mastodons -mastoid -mastoids -masts -mat -matador -matadors -match -matchable -matchbox -matchboxes -matched -matcher -matches -matching -matchless -matchmaker -matchmaking -matchplay -matchstick -matchsticks -mate -mated -mater -material -materialisation -materialise -materialised -materialises -materialising -materialism -materialist -materialistic -materialistically -materialists -materiality -materially -materials -maternal -maternally -maternity -mates -math -mathematical -mathematically -mathematician -mathematicians -mathematics -maths -matinee -matinees -mating -matings -matins -matriarch -matriarchal -matriarchies -matriarchy -matrices -matriculate -matriculated -matriculating -matriculation -matrilineal -matrimonial -matrimonially -matrimony -matrix -matrixes -matron -matronly -matrons -mats -matt -matte -matted -matter -mattered -mattering -matteroffact -matters -matthew -matting -mattress -mattresses -maturation -maturational -mature -matured -maturely -maturer -matures -maturing -maturity -maudlin -maul -mauled -mauler -maulers -mauling -mauls -maumau -mausoleum -mausoleums -mauve -maverick -mavericks -maw -mawkish -mawkishness -maxi -maxim -maxima -maximal -maximality -maximally -maximisation -maximise -maximised -maximiser -maximises -maximising -maxims -maximum -may -maya -mayas -maybe -mayday -maydays -mayflies -mayflower -mayfly -mayhap -mayhem -mayonnaise -mayor -mayoral -mayoralty -mayoress -mayors -maypole -maze -mazes -mazier -maziest -mazurka -mazy -mbabane -me -mead -meadow -meadowland -meadows -meagre -meagrely -meagreness -meal -mealie -mealies -meals -mealtime -mealtimes -mealy -mean -meander -meandered -meandering -meanderings -meanders -meaner -meanest -meanie -meanies -meaning -meaningful -meaningfully -meaningfulness -meaningless -meaninglessly -meaninglessness -meanings -meanly -meanness -means -meant -meantime -meanwhile -meany -measles -measly -measurable -measurably -measure -measured -measureless -measurement -measurements -measures -measuring -meat -meataxe -meatball -meatballs -meatier -meatiest -meatless -meatpie -meats -meaty -mecca -mechanic -mechanical -mechanically -mechanicals -mechanics -mechanisable -mechanisation -mechanise -mechanised -mechanising -mechanism -mechanisms -mechanist -mechanistic -mechanistically -medal -medallion -medallions -medallist -medallists -medals -meddle -meddled -meddler -meddlers -meddles -meddlesome -meddling -media -mediaeval -medial -medially -median -medians -mediate -mediated -mediates -mediating -mediation -mediator -mediators -mediatory -medic -medical -medically -medicals -medicate -medicated -medication -medications -medicinal -medicine -medicines -medics -medieval -medievalist -medievalists -mediocre -mediocrity -meditate -meditated -meditates -meditating -meditation -meditations -meditative -meditatively -meditator -medium -mediums -mediumsized -medlar -medley -medleys -medulla -medusa -meek -meeker -meekest -meekly -meekness -meet -meeter -meeting -meetings -meets -mega -megabyte -megabytes -megahertz -megajoules -megalith -megalithic -megalomania -megalomaniac -megalomaniacs -megaparsec -megaphone -megastar -megaton -megatons -megavolt -megawatt -megawatts -meiosis -meiotic -melancholia -melancholic -melancholies -melancholy -melange -melanin -melanoma -melanomas -melatonin -meld -melee -mellifluous -mellifluously -mellifluousness -mellow -mellowed -mellower -mellowing -mellows -melodic -melodically -melodies -melodious -melodiously -melodrama -melodramas -melodramatic -melodramatically -melody -melon -melons -melt -meltdown -melted -melter -melting -melts -member -members -membership -memberships -membrane -membranes -memento -memo -memoir -memoirs -memorabilia -memorable -memorably -memoranda -memorandum -memorandums -memorial -memorials -memories -memorisation -memorise -memorised -memorises -memorising -memory -memphis -men -menace -menaced -menaces -menacing -menacingly -menagerie -menarche -mend -mendacious -mendacity -mended -mendel -mendelevium -mender -menders -mendicant -mending -mends -menfolk -menhir -menhirs -menial -meningitis -meniscus -menopausal -menopause -menorah -menstrual -menstruating -menstruation -menswear -mental -mentalistic -mentalities -mentality -mentally -menthol -mention -mentionable -mentioned -mentioning -mentions -mentor -mentors -menu -menus -meow -meows -mercantile -mercenaries -mercenary -merchandise -merchandising -merchant -merchantability -merchantable -merchantman -merchantmen -merchants -mercies -merciful -mercifully -merciless -mercilessly -mercurial -mercuric -mercury -mercy -mere -merely -merest -meretricious -merge -merged -merger -mergers -merges -merging -meridian -meridians -meridional -meringue -meringues -merino -merit -merited -meriting -meritocracy -meritocratic -meritocrats -meritorious -merits -mermaid -mermaids -merman -mermen -meromorphic -merrier -merriest -merrily -merriment -merry -merrygoround -merrygorounds -merrymaking -mescaline -mesh -meshed -meshes -meshing -mesmeric -mesmerised -mesmerising -mesolithic -meson -mesons -mesosphere -mesozoic -mess -message -messages -messaging -messed -messenger -messengers -messes -messiah -messier -messiest -messily -messiness -messing -messy -mestizo -met -metabolic -metabolically -metabolise -metabolised -metabolises -metabolism -metabolisms -metal -metalanguage -metalinguistic -metalled -metallic -metallised -metallurgical -metallurgist -metallurgy -metals -metalwork -metalworking -metamorphic -metamorphism -metamorphose -metamorphosed -metamorphoses -metamorphosis -metaphor -metaphoric -metaphorical -metaphorically -metaphors -metaphysical -metaphysically -metaphysics -metastability -metastable -metastases -metastasis -metastatic -metatarsal -meted -metempsychosis -meteor -meteoric -meteorite -meteorites -meteoritic -meteorological -meteorologist -meteorologists -meteorology -meteors -meter -metered -metering -meters -methadone -methane -methanol -methionine -method -methodical -methodically -methodological -methodologically -methodologies -methodology -methods -methyl -methylated -methylene -meticulous -meticulously -metier -metonymic -metonymy -metre -metres -metric -metrical -metrically -metrication -metrics -metro -metronome -metronomes -metronomic -metropolis -metropolises -metropolitan -mettle -mew -mewing -mews -mexican -mexicans -mexico -mezzanine -mezzosoprano -miami -miasma -mica -mice -micelles -michigan -micro -microanalyses -microbe -microbes -microbial -microbic -microbiological -microbiologist -microbiologists -microbiology -microchip -microchips -microcode -microcomputer -microcomputers -microcosm -microcosmic -microdensitometer -microdot -microelectronic -microelectronics -microfarad -microfiche -microfilm -microfilming -microgrammes -micrograms -micrograph -micrographs -microgravity -microhydrodynamics -microlight -micrometer -micrometers -micrometres -micron -microns -microorganism -microorganisms -microphone -microphones -microprocessor -microprocessors -microprogram -microscope -microscopes -microscopic -microscopically -microscopist -microscopy -microsecond -microseconds -microsurgery -microwave -microwaveable -microwaved -microwaves -micturition -mid -midafternoon -midair -midas -midday -middays -midden -middle -middleage -middleaged -middleclass -middleman -middlemen -middleoftheroad -middles -middlesized -middleweight -middling -midevening -midfield -midfielder -midfielders -midflight -midge -midges -midget -midgets -midi -midland -midlands -midlife -midline -midmorning -midmost -midnight -midnights -midribs -midriff -midship -midshipman -midships -midst -midstream -midsummer -midway -midweek -midwicket -midwife -midwifery -midwinter -midwives -mien -might -mightier -mightiest -mightily -mights -mighty -migraine -migraines -migrant -migrants -migrate -migrated -migrates -migrating -migration -migrations -migratory -mike -mikes -milady -milan -mild -milder -mildest -mildew -mildewed -mildews -mildewy -mildly -mildmannered -mildness -mile -mileage -mileages -milepost -mileposts -miler -miles -milestone -milestones -milieu -milieus -milieux -militancy -militant -militantly -militants -militarily -militarisation -militarised -militarism -militarist -militaristic -military -militate -militated -militates -militating -militia -militiaman -militiamen -militias -milk -milked -milker -milkers -milkier -milkiest -milking -milkmaid -milkmaids -milkman -milkmen -milks -milkshake -milkshakes -milky -milkyway -mill -milled -millenarian -millenarianism -millennia -millennial -millennium -miller -millers -millet -millibars -milligram -milligrams -millilitres -millimetre -millimetres -milliner -milliners -millinery -milling -million -millionaire -millionaires -millions -millionth -millionths -millipede -millipedes -millisecond -milliseconds -millpond -mills -millstone -millstones -milord -milt -mime -mimed -mimeographed -mimes -mimetic -mimic -mimicked -mimicker -mimicking -mimicry -mimics -miming -mimosa -minaret -minarets -mince -minced -mincemeat -mincer -mincers -minces -mincing -mind -mindboggling -mindbogglingly -minded -mindedness -minder -minders -mindful -minding -mindless -mindlessly -mindlessness -mindreader -minds -mindset -mine -mined -minedetector -minefield -minefields -miner -mineral -mineralisation -mineralised -mineralogical -mineralogy -minerals -miners -mines -mineshaft -minestrone -minesweeper -minesweepers -mineworkers -mingle -mingled -mingles -mingling -mini -miniature -miniatures -miniaturisation -miniaturise -miniaturised -miniaturises -miniaturising -miniaturist -minibar -minibus -minibuses -minicab -minicomputer -minicomputers -minify -minim -minima -minimal -minimalism -minimalist -minimalistic -minimalists -minimality -minimally -minimisation -minimise -minimised -minimiser -minimises -minimising -minimum -mining -minings -minion -minions -miniskirt -minister -ministered -ministerial -ministerially -ministering -ministers -ministration -ministrations -ministries -ministry -mink -minke -minks -minnow -minnows -minor -minorities -minority -minors -minster -minstrel -minstrels -mint -minted -mintier -mintiest -minting -mints -minty -minuet -minuets -minus -minuscule -minuses -minute -minuted -minutely -minuteness -minutes -minutest -minutiae -minx -minxes -miosis -miracle -miracles -miraculous -miraculously -miraculousness -mirage -mirages -mire -mired -mires -mirror -mirrored -mirroring -mirrors -mirth -mirthful -mirthless -mirthlessly -misadventure -misaligned -misalignment -misanalysed -misanthrope -misanthropes -misanthropic -misanthropists -misanthropy -misapplication -misapply -misapprehension -misapprehensions -misappropriated -misappropriation -misbegotten -misbehave -misbehaved -misbehaves -misbehaving -misbehaviour -miscalculate -miscalculated -miscalculation -miscalculations -miscarriage -miscarriages -miscarried -miscarry -miscarrying -miscast -miscasting -miscegenation -miscellanea -miscellaneous -miscellanies -miscellany -mischance -mischief -mischiefmakers -mischiefmaking -mischievous -mischievously -miscible -misclassified -miscomprehended -misconceived -misconception -misconceptions -misconduct -misconfiguration -misconstrued -miscopying -miscount -miscounted -miscounting -miscreant -miscreants -miscue -miscues -misdate -misdeal -misdealing -misdeed -misdeeds -misdemeanour -misdemeanours -misdiagnosis -misdirect -misdirected -misdirecting -misdirection -misdirections -misdoing -miser -miserable -miserably -miseries -miserliness -miserly -misers -misery -misfield -misfiled -misfire -misfired -misfires -misfit -misfits -misfortune -misfortunes -misgive -misgiving -misgivings -misgovernment -misguide -misguided -misguidedly -mishandle -mishandled -mishandles -mishandling -mishap -mishaps -mishear -misheard -mishearing -mishears -mishitting -misidentification -misinform -misinformation -misinformed -misinterpret -misinterpretation -misinterpretations -misinterpreted -misinterpreting -misinterprets -misjudge -misjudged -misjudgement -misjudgements -misjudging -misjudgment -mislabelled -mislaid -mislay -mislead -misleading -misleadingly -misleads -misled -mismanage -mismanaged -mismanagement -mismatch -mismatched -mismatches -mismatching -misname -misnamed -misnomer -misnomers -misogynist -misogynistic -misogynists -misogyny -misplace -misplaced -misplacement -misplaces -misplacing -mispositioned -misprint -misprinted -misprinting -misprints -mispronounced -mispronouncing -mispronunciation -mispronunciations -misquotation -misquote -misquoted -misquotes -misquoting -misread -misreading -misremember -misremembered -misremembering -misrepresent -misrepresentation -misrepresentations -misrepresented -misrepresenting -misrepresents -misrule -miss -missal -missals -missed -misses -misshapen -missile -missiles -missing -mission -missionaries -missionary -missions -missive -missives -missouri -misspell -misspelled -misspelling -misspellings -misspells -misspelt -misspend -misspent -misstatement -missteps -missus -missuses -missy -mist -mistake -mistaken -mistakenly -mistakes -mistaking -misted -mister -misters -mistier -mistiest -mistily -mistime -mistimed -mistiness -misting -mistletoe -mistook -mistranslated -mistranslates -mistranslating -mistranslation -mistranslations -mistreat -mistreated -mistreating -mistreatment -mistress -mistresses -mistrust -mistrusted -mistrustful -mistrustfully -mistrusting -mistrusts -mists -misty -mistype -mistyped -mistypes -mistyping -mistypings -misunderstand -misunderstanding -misunderstandings -misunderstands -misunderstood -misuse -misused -misuser -misuses -misusing -mite -mites -mitigate -mitigated -mitigates -mitigating -mitigation -mitigatory -mitochondria -mitochondrial -mitosis -mitre -mitred -mitres -mitt -mitten -mittens -mitts -mix -mixable -mixed -mixer -mixers -mixes -mixing -mixture -mixtures -mixup -mixups -mnemonic -mnemonically -mnemonics -moan -moaned -moaner -moaners -moaning -moans -moas -moat -moated -moats -mob -mobbed -mobbing -mobbish -mobile -mobiles -mobilisable -mobilisation -mobilise -mobilised -mobilises -mobilising -mobilities -mobility -mobs -mobster -mobsters -moccasin -moccasins -mock -mocked -mocker -mockeries -mockers -mockery -mocking -mockingbird -mockingly -mocks -mockup -mockups -mod -modal -modalities -modality -mode -model -modelled -modeller -modellers -modelling -models -modem -modems -moderate -moderated -moderately -moderates -moderating -moderation -moderations -moderator -moderators -modern -moderner -modernisation -modernisations -modernise -modernised -modernising -modernism -modernist -modernistic -modernists -modernity -modes -modest -modestly -modesty -modicum -modifiable -modification -modifications -modified -modifier -modifiers -modifies -modify -modifying -modish -modishly -modular -modularisation -modularise -modularised -modularising -modularity -modulate -modulated -modulates -modulating -modulation -modulations -modulator -module -modules -moduli -modulus -mogul -moguls -mohair -mohairs -moiety -moist -moisten -moistened -moistening -moistens -moister -moistness -moisture -moisturise -moisturiser -moisturisers -moisturising -molar -molarities -molarity -molars -molasses -mold -molds -moldy -mole -molecular -molecule -molecules -molehill -molehills -moles -moleskin -molest -molestation -molestations -molested -molester -molesters -molesting -molests -mollified -mollifies -mollify -mollusc -molluscan -molluscs -molten -molts -molybdenum -mom -moment -momentarily -momentary -momentous -moments -momentum -moms -monaco -monadic -monalisa -monarch -monarchic -monarchical -monarchies -monarchist -monarchists -monarchs -monarchy -monasteries -monastery -monastic -monasticism -monaural -monday -mondays -monetarism -monetarist -monetarists -monetary -money -moneyed -moneylender -moneylenders -moneyless -moneys -monger -mongers -mongol -mongols -mongoose -mongrel -mongrels -monies -monition -monitor -monitored -monitoring -monitors -monk -monkey -monkeyed -monkeying -monkeys -monkfish -monkish -monks -mono -monochromatic -monochrome -monocle -monocled -monoclonal -monocular -monoculture -monocytes -monogamous -monogamously -monogamy -monogram -monogrammed -monograph -monographic -monographs -monolayer -monolayers -monolingual -monolith -monolithic -monoliths -monologue -monologues -monomania -monomer -monomeric -monomers -monomial -monomials -monomolecular -monophonic -monophthongs -monoplane -monopole -monopoles -monopolies -monopolisation -monopolise -monopolised -monopolises -monopolising -monopolist -monopolistic -monopolists -monopoly -monorail -monostable -monosyllabic -monosyllable -monosyllables -monotheism -monotheist -monotheistic -monotheists -monotone -monotonic -monotonically -monotonicity -monotonous -monotonously -monotony -monoxide -monroe -monsieur -monsoon -monsoons -monster -monsters -monstrosities -monstrosity -monstrous -monstrously -montage -montages -month -monthlies -monthly -months -montreal -monument -monumental -monumentally -monuments -moo -mood -moodiest -moodily -moodiness -moods -moody -mooed -mooing -moon -moonbeam -moonbeams -mooning -moonless -moonlight -moonlighting -moonlit -moonrise -moons -moonshine -moonshot -moonshots -moonstones -moor -moored -moorhen -moorhens -mooring -moorings -moorland -moorlands -moors -moos -moose -moot -mooted -mop -mope -moped -mopeds -mopes -moping -mopped -mopping -mops -moraine -moraines -moral -morale -morales -moralise -moralised -moralising -moralism -moralist -moralistic -moralists -moralities -morality -morally -morals -morass -morasses -moratorium -moray -morays -morbid -morbidity -morbidly -mordant -more -moreover -mores -morgue -moribund -moribundity -moribundly -mormon -mormons -morn -morning -mornings -morns -moroccan -morocco -moron -moronic -morons -morose -morosely -moroseness -morph -morpheme -morphemes -morpheus -morphia -morphine -morphism -morphisms -morphogenesis -morphogenetic -morphological -morphologically -morphologies -morphology -morrow -morse -morsel -morsels -mort -mortal -mortalities -mortality -mortally -mortals -mortar -mortars -mortgage -mortgageable -mortgaged -mortgagee -mortgagees -mortgages -mortgaging -mortgagor -mortice -mortices -mortification -mortified -mortify -mortifying -mortise -mortises -mortuary -mosaic -mosaics -moscow -moses -mosque -mosques -mosquito -moss -mosses -mossier -mossiest -mossy -most -mostly -motel -motels -motes -motet -motets -moth -mothball -mothballed -mothballs -motheaten -mother -motherboard -motherboards -mothered -motherhood -mothering -motherinlaw -motherland -motherless -motherly -motherofpearl -mothers -mothersinlaw -motherstobe -moths -motif -motifs -motile -motility -motion -motional -motioned -motioning -motionless -motionlessly -motions -motivate -motivated -motivates -motivating -motivation -motivational -motivations -motivator -motivators -motive -motiveless -motives -motley -motlier -motliest -motocross -motor -motorbike -motorbikes -motorcade -motorcar -motorcars -motorcycle -motorcycles -motorcycling -motorcyclist -motorcyclists -motored -motoring -motorised -motorist -motorists -motors -motorway -motorways -mottled -motto -mould -moulded -moulder -mouldering -moulders -mouldier -mouldiest -moulding -mouldings -moulds -mouldy -moult -moulted -moulting -moults -mound -mounded -mounds -mount -mountable -mountain -mountaineer -mountaineering -mountaineers -mountainous -mountains -mountainside -mountainsides -mounted -mountie -mounties -mounting -mountings -mounts -mourn -mourned -mourner -mourners -mournful -mournfully -mournfulness -mourning -mourns -mouse -mouselike -mousetrap -mousetraps -mousey -moussaka -mousse -mousses -moustache -moustached -moustaches -mousy -mouth -mouthed -mouthful -mouthfuls -mouthing -mouthorgan -mouthparts -mouthpiece -mouthpieces -mouths -mouthtomouth -mouthwash -mouthwatering -movable -move -moveable -moved -movement -movements -mover -movers -moves -movie -movies -moving -movingly -mow -mowed -mower -mowers -mowing -mown -mows -mozart -mr -mrs -ms -mu -much -muchness -muck -mucked -mucking -mucks -mucky -mucosa -mucous -mucus -mud -muddied -muddier -muddies -muddiest -muddle -muddled -muddles -muddling -muddy -muddying -mudflats -mudflow -mudflows -mudguard -mudguards -mudlarks -muds -muesli -muff -muffed -muffin -muffins -muffle -muffled -muffler -mufflers -muffling -muffs -mufti -mug -mugged -mugger -muggers -muggier -mugging -muggings -muggy -mugs -mugshots -mulberries -mulberry -mulch -mulches -mulching -mule -mules -mull -mullah -mullahs -mulled -mullet -mulling -mullioned -mullions -multichannel -multicolour -multicoloured -multicultural -multiculturalism -multidimensional -multifarious -multiform -multifunction -multifunctional -multilateral -multilateralism -multilayer -multilevel -multilingual -multimedia -multimeter -multimillion -multinational -multinationals -multiphase -multiple -multiples -multiplex -multiplexed -multiplexer -multiplexers -multiplexes -multiplexing -multiplexor -multiplexors -multiplication -multiplications -multiplicative -multiplicities -multiplicity -multiplied -multiplier -multipliers -multiplies -multiply -multiplying -multiprocessing -multiprocessor -multiprocessors -multiprogramming -multiracial -multitude -multitudes -mum -mumble -mumbled -mumbler -mumbles -mumbling -mumblings -mumbojumbo -mummies -mummification -mummified -mummify -mummy -mumps -mums -munch -munched -muncher -munchers -munches -munching -mundane -mundanely -munich -municipal -municipalities -municipality -munificence -munificent -munificently -munition -munitions -muons -mural -murals -murder -murdered -murderer -murderers -murderess -murdering -murderous -murderously -murders -murk -murkier -murkiest -murkiness -murky -murmur -murmured -murmurer -murmuring -murmurings -murmurs -murray -muscadel -muscat -muscle -muscled -muscles -muscling -muscular -muscularity -musculature -musculoskeletal -muse -mused -muses -museum -museums -mush -mushes -mushroom -mushroomed -mushrooming -mushrooms -mushy -music -musical -musicality -musically -musicals -musician -musicians -musicianship -musicologist -musicologists -musicology -musing -musingly -musings -musk -musket -musketeer -musketeers -muskets -muskier -muskiest -musks -musky -muslim -muslims -muslin -mussel -mussels -must -mustache -mustang -mustangs -mustard -muster -mustered -mustering -musters -mustier -mustiest -mustily -mustiness -musts -musty -mutability -mutable -mutagens -mutant -mutants -mutate -mutated -mutates -mutating -mutation -mutational -mutations -mute -muted -mutely -muteness -mutes -mutilate -mutilated -mutilates -mutilating -mutilation -mutilations -mutineer -mutineers -muting -mutinied -mutinies -mutinous -mutinously -mutiny -mutt -mutter -muttered -mutterer -mutterers -muttering -mutterings -mutters -mutton -muttons -mutts -mutual -mutuality -mutually -muzak -muzzle -muzzled -muzzles -muzzling -my -myalgic -myelin -myna -mynahs -myocardial -myope -myopia -myopic -myopically -myriad -myriads -myrrh -myself -mysteries -mysterious -mysteriously -mystery -mystic -mystical -mystically -mysticism -mystics -mystification -mystified -mystifies -mystify -mystifying -mystique -myth -mythic -mythical -mythological -mythologies -mythologised -mythology -myths -myxomatosis -nab -nabbed -nabs -nadir -nag -nagasaki -nagged -nagger -nagging -nags -naiad -naiads -nail -nailbiting -nailed -nailing -nails -nairobi -naive -naively -naivete -naivety -naked -nakedly -nakedness -name -nameable -namecalling -named -namedropping -nameless -namely -nameplate -nameplates -names -namesake -namesakes -namibia -namibian -naming -namings -nannies -nanny -nanometre -nanometres -nanosecond -nanoseconds -nanotechnology -naomi -nap -napalm -nape -naphtha -napkin -napkins -naples -napoleon -napped -nappies -napping -nappy -naps -narcissism -narcissistic -narcoleptic -narcosis -narcotic -narcotics -narrate -narrated -narrates -narrating -narration -narrations -narrative -narratives -narratology -narrator -narrators -narrow -narrowed -narrower -narrowest -narrowing -narrowly -narrowminded -narrowmindedness -narrowness -narrows -narwhal -nasal -nasalised -nasally -nascent -nastier -nastiest -nastily -nastiness -nasturtium -nasturtiums -nasty -natal -nation -national -nationalisation -nationalisations -nationalise -nationalised -nationalising -nationalism -nationalist -nationalistic -nationalists -nationalities -nationality -nationally -nationals -nationhood -nations -nationwide -native -natives -nativity -nato -nattering -natural -naturalisation -naturalise -naturalised -naturalism -naturalist -naturalistic -naturalists -naturally -naturalness -nature -natures -naturist -naturists -naught -naughtiest -naughtily -naughtiness -naughts -naughty -nausea -nauseate -nauseated -nauseates -nauseating -nauseatingly -nauseous -nauseousness -nautical -nautili -nautilus -naval -nave -navel -navels -navies -navigable -navigate -navigated -navigating -navigation -navigational -navigator -navigators -navvies -navvy -navy -nay -nazi -naziism -nazis -nazism -ndebele -ne -near -nearby -neared -nearer -nearest -nearing -nearly -nearness -nears -nearside -nearsighted -neat -neaten -neatening -neatens -neater -neatest -neatly -neatness -nebula -nebulae -nebular -nebulas -nebulosity -nebulous -nebulously -nebulousness -necessaries -necessarily -necessary -necessitate -necessitated -necessitates -necessitating -necessities -necessity -neck -neckband -necked -necking -necklace -necklaces -neckline -necklines -necks -necktie -necromancer -necromancers -necromancy -necromantic -necrophilia -necrophiliac -necrophiliacs -necropolis -necropsy -necrosis -necrotic -nectar -nectarines -nectars -nee -need -needed -needful -needier -neediest -neediness -needing -needle -needlecraft -needled -needles -needless -needlessly -needlework -needling -needs -needy -negate -negated -negates -negating -negation -negations -negative -negatively -negativeness -negatives -negativism -negativity -negev -neglect -neglected -neglectful -neglecting -neglects -negligee -negligees -negligence -negligent -negligently -negligibility -negligible -negligibly -negotiable -negotiate -negotiated -negotiates -negotiating -negotiation -negotiations -negotiator -negotiators -negroid -neigh -neighbour -neighbourhood -neighbourhoods -neighbouring -neighbourliness -neighbourly -neighbours -neighed -neighing -neither -nematode -nematodes -nemesis -neolithic -neologism -neologisms -neon -neonatal -neonate -neonates -neophyte -neophytes -neoplasm -neoplasms -neoprene -nepal -nephew -nephews -nephritis -nepotism -neptune -neptunium -nerd -nerds -nerve -nerveless -nervelessness -nerves -nervous -nervously -nervousness -nervy -nest -nestable -nested -nestegg -nesting -nestle -nestled -nestles -nestling -nests -net -netball -nether -nethermost -nets -nett -netted -netting -nettle -nettled -nettles -netts -network -networked -networking -networks -neural -neuralgia -neurobiology -neurological -neurologically -neurologist -neurologists -neurology -neuron -neuronal -neurone -neurones -neurons -neurophysiology -neuroscience -neuroscientists -neuroses -neurosis -neurosurgeon -neurosurgeons -neurosurgery -neurotic -neurotically -neurotics -neurotransmitter -neurotransmitters -neuter -neutered -neutering -neuters -neutral -neutralisation -neutralise -neutralised -neutraliser -neutralises -neutralising -neutralism -neutralist -neutrality -neutrally -neutrals -neutrino -neutron -neutrons -never -neverending -nevertheless -new -newborn -newcomer -newcomers -newer -newest -newfangled -newfound -newish -newlook -newly -newlywed -newlyweds -newness -news -newsagent -newsagents -newsboy -newscast -newscasters -newsflash -newsflashes -newsletter -newsletters -newsman -newsmen -newspaper -newspapermen -newspapers -newsprint -newsreader -newsreaders -newsreel -newsreels -newsroom -newsstand -newsstands -newsworthy -newsy -newt -newton -newts -next -ngoing -nguni -ngunis -niagara -nib -nibble -nibbled -nibbler -nibblers -nibbles -nibbling -nibs -nice -nicely -niceness -nicer -nicest -niceties -nicety -niche -niches -nick -nicked -nickel -nicking -nickname -nicknamed -nicknames -nicks -nicotine -niece -nieces -niftily -nifty -niger -nigeria -niggardly -niggle -niggled -niggles -niggling -nigh -night -nightcap -nightcaps -nightclothes -nightclub -nightclubs -nightdress -nightdresses -nightfall -nightgown -nightie -nighties -nightingale -nightingales -nightlife -nightly -nightmare -nightmares -nightmarish -nights -nightwatchman -nightwear -nihilism -nihilist -nihilistic -nil -nile -nils -nimble -nimbleness -nimbly -nimbus -nincompoop -nine -ninefold -nines -nineteen -nineteenth -nineties -ninetieth -ninety -nineveh -ninny -ninth -ninths -nip -nipped -nipper -nipping -nipple -nipples -nippon -nips -nirvana -nit -nitpicking -nitrate -nitrates -nitric -nitrogen -nitrogenous -nitroglycerine -nitrous -nits -nitwit -nixon -no -noah -nobility -noble -nobleman -noblemen -nobleness -nobler -nobles -noblest -nobly -nobodies -nobody -noctuids -nocturnal -nocturnally -nocturne -nocturnes -nod -nodal -nodded -nodding -noddle -noddy -node -nodes -nods -nodular -nodule -noduled -nodules -noel -noggin -nogging -nohow -noise -noiseless -noiselessly -noises -noisier -noisiest -noisily -noisiness -noisome -noisy -nomad -nomadic -nomads -nomenclature -nomenclatures -nominal -nominally -nominate -nominated -nominates -nominating -nomination -nominations -nominative -nominator -nominee -nominees -non -nonbeliever -nonbelievers -nonchalance -nonchalant -nonchalantly -nonconformist -nonconformists -nonconformity -nondrinkers -none -nonentities -nonentity -nonessential -nonessentials -nonetheless -nonevent -nonexistence -nonexistent -nonfunctional -noninterference -nonintervention -nonparticipation -nonpayment -nonplussed -nonsense -nonsenses -nonsensical -nonsmoker -nonsmokers -nonsmoking -nonviolence -nonviolent -noodle -noodles -nook -nooks -noon -noonday -noons -noontide -noose -noosed -nooses -nor -noradrenalin -noradrenaline -nordic -norm -normal -normalcy -normalisable -normalisation -normalisations -normalise -normalised -normaliser -normalisers -normalises -normalising -normality -normally -normals -norman -normandy -normans -normative -normed -norms -norsemen -north -northbound -northerly -northern -northerner -northerners -northernmost -northmen -northward -northwards -norway -nose -nosed -nosedive -noses -nosey -nosier -nosiest -nosily -nosiness -nosing -nostalgia -nostalgic -nostalgically -nostril -nostrils -nostrum -nosy -not -notable -notables -notably -notaries -notary -notation -notational -notationally -notations -notch -notched -notches -notching -note -notebook -notebooks -noted -notepad -notepads -notepaper -notes -noteworthy -nothing -nothingness -nothings -notice -noticeable -noticeably -noticeboard -noticeboards -noticed -notices -noticing -notifiable -notification -notifications -notified -notifies -notify -notifying -noting -notion -notional -notionally -notions -notoriety -notorious -notoriously -notwithstanding -nougat -nougats -nought -noughts -noun -nounal -nouns -nourish -nourished -nourishes -nourishing -nourishment -novel -novelette -novelist -novelistic -novelists -novelle -novels -novelties -novelty -november -novice -novices -now -nowadays -nowhere -noxious -noxiously -noxiousness -nozzle -nozzles -nu -nuance -nuances -nuclear -nuclei -nucleic -nucleus -nude -nudeness -nudes -nudge -nudged -nudges -nudging -nudism -nudist -nudists -nudities -nudity -nugget -nuggets -nuisance -nuisances -nuke -null -nullification -nullified -nullifies -nullify -nullifying -nullity -nulls -numb -numbed -number -numbered -numbering -numberings -numberless -numberplate -numbers -numbing -numbingly -numbly -numbness -numbs -numbskull -numeracy -numeral -numerals -numerate -numerator -numerators -numeric -numerical -numerically -numerological -numerologist -numerologists -numerology -numerous -numismatic -numismatics -numskull -nun -nunneries -nunnery -nuns -nuptial -nuptials -nurse -nursed -nursemaid -nursemaids -nurseries -nursery -nurseryman -nurserymen -nurses -nursing -nurture -nurtured -nurtures -nurturing -nut -nutation -nutcracker -nutcrackers -nutmeg -nutmegs -nutrient -nutrients -nutriment -nutrition -nutritional -nutritionally -nutritionist -nutritionists -nutritious -nutritive -nuts -nutshell -nuttier -nutty -nuzzle -nuzzled -nuzzles -nuzzling -nyala -nylon -nylons -nymph -nympholepsy -nymphomania -nymphomaniac -nymphs -oaf -oafish -oafs -oak -oaken -oaks -oakum -oar -oars -oarsman -oarsmen -oases -oasis -oast -oat -oatcakes -oath -oaths -oatmeal -oats -obduracy -obdurate -obdurately -obedience -obedient -obediently -obeisance -obelisk -obelisks -obese -obesity -obey -obeyed -obeying -obeys -obfuscate -obfuscated -obfuscates -obfuscation -obfuscatory -obituaries -obituary -object -objected -objectified -objecting -objection -objectionable -objectionableness -objectionably -objections -objective -objectively -objectives -objectivity -objectless -objector -objectors -objects -oblate -obligate -obligated -obligation -obligations -obligatorily -obligatory -oblige -obliged -obliges -obliging -obligingly -oblique -obliqued -obliquely -obliqueness -obliquity -obliterate -obliterated -obliterates -obliterating -obliteration -oblivion -oblivious -obliviousness -oblong -oblongs -obloquy -obnoxious -obnoxiously -obnoxiousness -oboe -oboes -oboist -obscene -obscenely -obscenities -obscenity -obscurantism -obscurantist -obscuration -obscure -obscured -obscurely -obscureness -obscurer -obscures -obscurest -obscuring -obscurities -obscurity -obsequious -obsequiously -obsequiousness -observability -observable -observables -observably -observance -observances -observant -observation -observational -observationally -observations -observatories -observatory -observe -observed -observer -observers -observes -observing -obsess -obsessed -obsesses -obsessing -obsession -obsessional -obsessions -obsessive -obsessively -obsessiveness -obsidian -obsolescence -obsolescent -obsolete -obstacle -obstacles -obstetric -obstetrician -obstetricians -obstetrics -obstinacy -obstinate -obstinately -obstreperous -obstruct -obstructed -obstructing -obstruction -obstructionism -obstructions -obstructive -obstructively -obstructiveness -obstructs -obtain -obtainable -obtained -obtaining -obtains -obtrude -obtruded -obtruding -obtrusive -obtrusiveness -obtuse -obtusely -obtuseness -obverse -obviate -obviated -obviates -obviating -obvious -obviously -obviousness -occasion -occasional -occasionally -occasioned -occasioning -occasions -occident -occidental -occipital -occluded -occludes -occlusion -occult -occultism -occults -occupancies -occupancy -occupant -occupants -occupation -occupational -occupationally -occupations -occupied -occupier -occupiers -occupies -occupy -occupying -occur -occurred -occurrence -occurrences -occurring -occurs -ocean -oceanic -oceanographer -oceanographers -oceanographic -oceanography -oceans -ocelot -ocelots -ochre -ochres -octagon -octagonal -octagons -octahedral -octahedron -octal -octane -octanes -octant -octave -octaves -octavo -octet -octets -october -octogenarian -octogenarians -octopus -octopuses -ocular -oculist -odd -odder -oddest -oddities -oddity -oddjob -oddly -oddment -oddments -oddness -odds -ode -odes -odin -odious -odiously -odiousness -odium -odiums -odometer -odoriferous -odorous -odour -odourless -odours -odyssey -oedema -oedipus -oesophagus -oestrogen -oestrogens -oestrus -oeuvre -oeuvres -of -off -offal -offbeat -offcut -offcuts -offence -offences -offend -offended -offender -offenders -offending -offends -offensive -offensively -offensiveness -offensives -offer -offered -offering -offerings -offers -offertory -offhand -office -officer -officers -officership -officerships -offices -official -officialdom -officially -officialness -officials -officiate -officiated -officiating -officious -officiously -officiousness -offprint -offset -offshoot -offshore -oft -often -ogle -ogled -ogling -ogre -ogres -ogrish -oh -ohio -ohm -ohmic -ohms -oil -oilcloth -oiled -oiler -oilers -oilfield -oilfields -oilier -oiliest -oiliness -oiling -oilman -oilmen -oilrig -oils -oily -oink -oinked -oinks -ointment -ointments -ok -okapi -okapis -okay -okayed -okays -oklahoma -old -oldage -olden -older -oldest -oldfashioned -oldie -oldish -oldmaids -oldtimer -oldtimers -ole -oleander -oleanders -olfactory -olive -oliveoil -oliver -olives -olm -olms -olympia -olympiad -olympian -olympic -olympics -olympus -ombudsman -ombudsmen -omega -omelette -omelettes -omen -omens -ominous -ominously -omission -omissions -omit -omits -omitted -omitting -omnibus -omnibuses -omnidirectional -omnipotence -omnipotent -omnipresence -omnipresent -omniscience -omniscient -omnivore -omnivores -omnivorous -on -onager -onagers -once -one -oneness -oner -onerous -ones -oneself -onesided -onesidedly -onesidedness -ongoing -onion -onions -onlooker -onlookers -onlooking -only -onlybegotten -onset -onshore -onslaught -onslaughts -ontario -onto -ontogeny -ontological -ontologically -ontology -onus -onuses -onward -onwards -onyx -onyxes -oocytes -oodles -ooh -oolitic -oology -oompah -oops -ooze -oozed -oozes -oozing -oozy -opacity -opal -opalescent -opals -opaque -open -opened -opener -openers -openhanded -openhandedness -openheart -openhearted -opening -openings -openly -openminded -openmindedness -openness -opens -opera -operable -operand -operands -operas -operate -operated -operates -operatic -operating -operation -operational -operationally -operations -operative -operatives -operator -operators -operculum -operetta -operettas -ophthalmic -ophthalmics -ophthalmologist -ophthalmologists -ophthalmology -opiate -opiates -opine -opined -opines -opining -opinion -opinionated -opinions -opioid -opioids -opium -opossum -opponent -opponents -opportune -opportunely -opportunism -opportunist -opportunistic -opportunistically -opportunists -opportunities -opportunity -oppose -opposed -opposes -opposing -opposite -oppositely -opposites -opposition -oppositional -oppositions -oppress -oppressed -oppresses -oppressing -oppression -oppressions -oppressive -oppressively -oppressiveness -oppressor -oppressors -opprobrious -opprobrium -opt -opted -optic -optical -optically -optician -opticians -optics -optima -optimal -optimality -optimally -optimisation -optimisations -optimise -optimised -optimiser -optimisers -optimises -optimising -optimism -optimist -optimistic -optimistically -optimists -optimum -opting -option -optional -optionality -optionally -options -optoelectronic -opts -opulence -opulent -opus -opuses -or -oracle -oracles -oracular -oral -orally -orang -orange -oranges -orangs -orangutan -orangutans -orate -orated -orates -orating -oration -orations -orator -oratorical -oratorio -orators -oratory -orb -orbit -orbital -orbitals -orbited -orbiter -orbiting -orbits -orbs -orca -orchard -orchards -orchestra -orchestral -orchestras -orchestrate -orchestrated -orchestrates -orchestrating -orchestration -orchestrations -orchestrator -orchid -orchids -ordain -ordained -ordaining -ordains -ordeal -ordeals -order -ordered -ordering -orderings -orderless -orderlies -orderliness -orderly -orders -ordinal -ordinals -ordinance -ordinances -ordinands -ordinarily -ordinariness -ordinary -ordinate -ordinates -ordination -ordinations -ordnance -ordure -ore -ores -organ -organelles -organic -organically -organics -organisable -organisation -organisational -organisationally -organisations -organise -organised -organiser -organisers -organises -organising -organism -organisms -organist -organists -organs -organza -orgies -orgy -orient -orientable -oriental -orientalism -orientals -orientate -orientated -orientates -orientation -orientations -oriented -orienteering -orienting -orifice -orifices -origami -origin -original -originality -originally -originals -originate -originated -originates -originating -origination -originator -originators -origins -orimulsion -ornament -ornamental -ornamentation -ornamented -ornamenting -ornaments -ornate -ornately -ornithological -ornithologist -ornithologists -ornithology -orphan -orphanage -orphanages -orphaned -orphans -orpheus -orthodontist -orthodox -orthodoxies -orthodoxy -orthogonal -orthogonality -orthogonally -orthographic -orthographical -orthographically -orthography -orthonormal -orthopaedic -orthopaedics -orthorhombic -oryxes -oscar -oscars -oscillate -oscillated -oscillates -oscillating -oscillation -oscillations -oscillator -oscillators -oscillatory -oscilloscope -oscilloscopes -osiris -oslo -osmium -osmosis -osmotic -osprey -ospreys -ossification -ossified -ostensible -ostensibly -ostentation -ostentatious -ostentatiously -osteoarthritis -osteopath -osteopaths -osteopathy -osteoporosis -ostler -ostlers -ostracise -ostracised -ostracism -ostrich -ostriches -other -otherness -others -otherwise -otter -otters -ottoman -ouch -ought -ounce -ounces -our -ours -ourselves -oust -ousted -ouster -ousting -ousts -out -outage -outages -outback -outbid -outbids -outboard -outbound -outbreak -outbreaks -outbred -outbuilding -outbuildings -outburst -outbursts -outcall -outcast -outcasts -outclassed -outcome -outcomes -outcries -outcrop -outcrops -outcry -outdated -outdid -outdo -outdoes -outdoing -outdone -outdoor -outdoors -outer -outermost -outface -outfall -outfalls -outfield -outfit -outfits -outfitters -outflank -outflanked -outflow -outflows -outfox -outfoxed -outfoxes -outgo -outgoing -outgoings -outgrew -outgrow -outgrowing -outgrown -outgrowth -outgrowths -outguess -outhouse -outhouses -outing -outings -outlandish -outlast -outlasted -outlasts -outlaw -outlawed -outlawing -outlawry -outlaws -outlay -outlays -outlet -outlets -outlier -outliers -outline -outlined -outlines -outlining -outlive -outlived -outlives -outliving -outlook -outlooks -outlying -outmanoeuvre -outmanoeuvred -outmoded -outmost -outnumber -outnumbered -outnumbering -outnumbers -outpace -outpaced -outpacing -outpatient -outpatients -outperform -outperformed -outperforming -outperforms -outplacement -outplay -outplayed -outpointed -outpointing -outpost -outposts -outpouring -outpourings -output -outputs -outputting -outrage -outraged -outrageous -outrageously -outrages -outraging -outran -outrank -outreach -outride -outrider -outriders -outrigger -outright -outrun -outruns -outs -outsell -outset -outsets -outshine -outshines -outshining -outshone -outside -outsider -outsiders -outsides -outsize -outskirts -outsmart -outsold -outsourcing -outspan -outspoken -outspokenly -outspokenness -outspread -outstanding -outstandingly -outstation -outstations -outstay -outstayed -outstep -outstretched -outstrip -outstripped -outstripping -outstrips -outvoted -outward -outwardly -outwards -outweigh -outweighed -outweighing -outweighs -outwit -outwith -outwits -outwitted -outwitting -outwork -outworking -ova -oval -ovals -ovarian -ovaries -ovary -ovate -ovation -ovations -oven -ovens -over -overact -overacted -overacting -overactive -overacts -overall -overallocation -overalls -overambitious -overanxious -overate -overbearing -overboard -overburdened -overcame -overcapacity -overcast -overcharge -overcharged -overcharging -overcoat -overcoats -overcome -overcomes -overcoming -overcommitment -overcommitments -overcompensate -overcomplexity -overcomplicated -overconfident -overcook -overcooked -overcrowd -overcrowded -overcrowding -overdetermined -overdid -overdo -overdoes -overdoing -overdone -overdose -overdosed -overdoses -overdosing -overdraft -overdrafts -overdramatic -overdraw -overdrawn -overdressed -overdrive -overdubbing -overdue -overeat -overeating -overeats -overemotional -overemphasis -overemphasise -overemphasised -overenthusiastic -overestimate -overestimated -overestimates -overestimating -overestimation -overexposed -overexposure -overextended -overfamiliarity -overfed -overfeed -overfeeding -overfill -overfishing -overflow -overflowed -overflowing -overflown -overflows -overfly -overflying -overfull -overgeneralised -overgeneralising -overgrazing -overground -overgrown -overgrowth -overhand -overhang -overhanging -overhangs -overhasty -overhaul -overhauled -overhauling -overhauls -overhead -overheads -overhear -overheard -overhearing -overhears -overheat -overheated -overheating -overhung -overincredulous -overindulgence -overindulgent -overinflated -overjoyed -overkill -overladen -overlaid -overlain -overland -overlap -overlapped -overlapping -overlaps -overlay -overlaying -overlays -overleaf -overlie -overlies -overload -overloaded -overloading -overloads -overlong -overlook -overlooked -overlooking -overlooks -overlord -overlords -overly -overlying -overmanning -overmantel -overmatching -overmuch -overnight -overoptimistic -overpaid -overpass -overpay -overpayment -overplay -overplayed -overplaying -overpopulated -overpopulation -overpopulous -overpower -overpowered -overpowering -overpoweringly -overpowers -overpressure -overpriced -overprint -overprinted -overprinting -overprints -overproduced -overproduction -overqualified -overran -overrate -overrated -overreach -overreached -overreaching -overreact -overreacted -overreacting -overreaction -overreacts -overrepresented -overridden -override -overrides -overriding -overripe -overrode -overrule -overruled -overruling -overrun -overrunning -overruns -overs -oversampled -oversampling -oversaw -overseas -oversee -overseeing -overseen -overseer -overseers -oversees -oversensitive -oversensitivity -oversexed -overshadow -overshadowed -overshadowing -overshadows -overshoot -overshooting -overshoots -overshot -oversight -oversights -oversimplification -oversimplifications -oversimplified -oversimplifies -oversimplify -oversimplifying -oversize -oversized -oversleep -overslept -overspend -overspending -overspent -overspill -overstaffed -overstate -overstated -overstatement -overstates -overstating -overstep -overstepped -overstepping -oversteps -overstocked -overstocking -overstress -overstressed -overstretch -overstretched -overstrung -overstuffed -oversubscribed -oversupply -overt -overtake -overtaken -overtaker -overtakers -overtakes -overtaking -overtax -overthetop -overthrew -overthrow -overthrowing -overthrown -overthrows -overtightened -overtime -overtly -overtness -overtone -overtones -overtook -overtops -overture -overtures -overturn -overturned -overturning -overturns -overuse -overused -overuses -overvalue -overvalued -overview -overviews -overweening -overweight -overwhelm -overwhelmed -overwhelming -overwhelmingly -overwhelms -overwinter -overwintered -overwintering -overwork -overworked -overworking -overwrite -overwrites -overwriting -overwritten -overwrote -overwrought -oviduct -ovoid -ovular -ovulation -ovum -ow -owe -owed -owes -owing -owl -owlet -owlets -owlish -owlishly -owls -own -owned -owner -owners -ownership -ownerships -owning -owns -ox -oxalate -oxalic -oxcart -oxen -oxford -oxidant -oxidants -oxidation -oxide -oxides -oxidisation -oxidise -oxidised -oxidiser -oxidising -oxtail -oxtails -oxygen -oxygenated -oxygenating -oxygenation -oxymoron -oyster -oysters -ozone -ozonefriendly -pa -pace -paced -pacemaker -pacemakers -paceman -pacemen -pacer -pacers -paces -pacey -pachyderm -pacific -pacification -pacified -pacifier -pacifies -pacifism -pacifist -pacifists -pacify -pacifying -pacing -pack -packable -package -packaged -packages -packaging -packed -packer -packers -packet -packets -packhorse -packing -packings -packs -pact -pacts -pad -padded -padding -paddings -paddle -paddled -paddler -paddlers -paddles -paddling -paddock -paddocks -paddy -padlock -padlocked -padlocking -padlocks -padre -padres -pads -paean -paeans -paediatric -paediatrician -paediatricians -paediatrics -paedophile -paedophiles -paedophilia -paella -paeony -pagan -paganism -pagans -page -pageant -pageantry -pageants -pageboy -paged -pageful -pager -pagers -pages -paginal -paginate -paginated -paginating -pagination -paging -pagoda -pagodas -paid -paidup -pail -pails -pain -pained -painful -painfully -painfulness -paining -painkiller -painkillers -painless -painlessly -pains -painstaking -painstakingly -paint -paintbox -paintbrush -painted -painter -painters -painting -paintings -paints -paintwork -pair -paired -pairing -pairings -pairs -pairwise -pajama -pajamas -pakistan -pal -palace -palaces -palaeographic -palaeolithic -palaeontological -palaeontologist -palaeontologists -palaeontology -palatability -palatable -palatal -palate -palates -palatial -palatinate -palatine -palaver -pale -paled -paleface -palely -paleness -paler -pales -palest -palette -palettes -palimpsest -palindrome -palindromes -palindromic -paling -palisade -palisades -pall -palladium -pallbearers -palled -pallet -pallets -palliative -palliatives -pallid -pallmall -pallor -palls -palm -palmed -palming -palmist -palmistry -palms -palmtop -palmtops -palmy -palp -palpable -palpably -palpate -palpated -palpates -palpitate -palpitated -palpitating -palpitation -palpitations -pals -palsied -palsy -paltrier -paltriest -paltriness -paltry -paludal -pampas -pamper -pampered -pampering -pampers -pamphlet -pamphleteer -pamphleteers -pamphlets -pan -panacea -panaceas -panache -panama -pancake -pancaked -pancakes -pancreas -pancreatic -panda -pandas -pandemic -pandemics -pandemonium -pander -pandering -panders -pandora -pane -paned -panel -panelled -panelling -panellist -panellists -panels -panes -pang -panga -pangas -pangolin -pangs -panic -panicked -panicking -panicky -panics -panicstricken -panjandrum -panned -pannier -panniers -panning -panoply -panorama -panoramas -panoramic -pans -pansies -pansy -pant -pantaloons -pantechnicon -panted -pantheism -pantheist -pantheistic -pantheon -panther -panthers -panties -pantile -pantiled -pantiles -panting -pantograph -pantographs -pantomime -pantomimes -pantries -pantry -pants -panzer -pap -papa -papacy -papal -paparazzi -papas -papaw -papaws -papaya -paper -paperback -paperbacks -papered -papering -paperless -papers -paperthin -paperweight -paperweights -paperwork -papery -papilla -papist -pappy -paprika -papua -papule -papyri -papyrus -par -parable -parables -parabola -parabolas -parabolic -paraboloid -paraboloids -paracetamol -parachute -parachuted -parachutes -parachuting -parachutist -parachutists -parade -paraded -parader -parades -paradigm -paradigmatic -paradigms -parading -paradise -paradises -paradox -paradoxes -paradoxical -paradoxically -paraffin -paragliding -paragon -paragons -paragraph -paragraphing -paragraphs -paraguay -parakeet -parakeets -paralinguistic -parallax -parallaxes -parallel -paralleled -parallelepiped -paralleling -parallelism -parallelogram -parallelograms -parallels -paralyse -paralysed -paralyses -paralysing -paralysis -paralytic -paralytically -paramagnetic -paramagnetism -paramedic -paramedical -paramedics -parameter -parameters -parametric -parametrically -parametrisation -parametrise -parametrised -parametrises -paramilitaries -paramilitary -paramount -paramountcy -paramour -paranoia -paranoiac -paranoiacs -paranoid -paranormal -parapet -parapets -paraphernalia -paraphrase -paraphrased -paraphrases -paraphrasing -paraplegic -parapsychologist -parapsychology -paraquat -parasite -parasites -parasitic -parasitical -parasitised -parasitism -parasitologist -parasitology -parasol -parasols -paratroop -paratrooper -paratroopers -paratroops -parboil -parcel -parcelled -parcelling -parcels -parch -parched -parches -parchment -parchments -pardon -pardonable -pardoned -pardoning -pardons -pare -pared -parent -parentage -parental -parented -parenteral -parentheses -parenthesis -parenthesise -parenthesised -parenthetic -parenthetical -parenthetically -parenthood -parenting -parentinlaw -parents -parentsinlaw -pares -parfait -parfaits -pariah -pariahs -parietal -paring -paris -parish -parishes -parishioner -parishioners -parisian -parities -parity -park -parka -parkas -parked -parking -parkland -parks -parlance -parley -parleying -parliament -parliamentarian -parliamentarians -parliamentary -parliaments -parlour -parlourmaid -parlours -parlous -parochial -parochialism -parochiality -parodied -parodies -parodist -parody -parodying -parole -paroxysm -paroxysms -parquet -parried -parries -parrot -parroting -parrots -parry -parrying -parse -parsec -parsecs -parsed -parser -parsers -parses -parsimonious -parsimony -parsing -parsings -parsley -parsnip -parsnips -parson -parsonage -parsons -part -partake -partaken -partaker -partakers -partakes -partaking -parted -parthenogenesis -partial -partiality -partially -participant -participants -participate -participated -participates -participating -participation -participative -participators -participatory -participle -participles -particle -particles -particular -particularise -particularised -particularism -particularities -particularity -particularly -particulars -particulate -particulates -parties -parting -partings -partisan -partisans -partisanship -partition -partitioned -partitioning -partitions -partly -partner -partnered -partnering -partners -partnership -partnerships -partook -partridge -partridges -parts -parttime -party -parvenu -pascal -pascals -paschal -pass -passable -passably -passage -passages -passageway -passageways -passant -passe -passed -passenger -passengers -passer -passers -passersby -passes -passim -passing -passion -passionate -passionately -passionateness -passionless -passions -passivated -passive -passively -passives -passivity -passmark -passover -passport -passports -password -passwords -past -pasta -pastas -paste -pasteboard -pasted -pastel -pastels -pastes -pasteur -pasteurisation -pasteurised -pastiche -pastiches -pasties -pastille -pastime -pastimes -pasting -pastis -pastor -pastoral -pastoralism -pastors -pastrami -pastries -pastry -pasts -pasture -pastured -pastureland -pastures -pasturing -pasty -pat -patch -patchable -patched -patches -patchier -patchiest -patchily -patchiness -patching -patchup -patchwork -patchy -pate -patella -paten -patent -patentable -patented -patentee -patenting -patently -patents -pater -paternal -paternalism -paternalist -paternalistic -paternally -paternity -pates -path -pathetic -pathetically -pathfinder -pathfinders -pathless -pathogen -pathogenesis -pathogenic -pathogens -pathological -pathologically -pathologies -pathologist -pathologists -pathology -pathos -paths -pathway -pathways -patience -patient -patiently -patients -patina -patination -patio -patisserie -patois -patriarch -patriarchal -patriarchies -patriarchs -patriarchy -patrician -patricians -patrilineal -patrimony -patriot -patriotic -patriotism -patriots -patrol -patrolled -patrolling -patrols -patron -patronage -patroness -patronesses -patronisation -patronise -patronised -patronises -patronising -patronisingly -patrons -pats -patted -patten -pattens -patter -pattered -pattering -pattern -patterned -patterning -patternless -patterns -patters -patties -patting -paucity -paul -paunch -paunchy -pauper -paupers -pause -paused -pauses -pausing -pave -paved -pavement -pavements -paves -pavilion -pavilions -paving -pavings -pavlov -paw -pawed -pawing -pawn -pawnbroker -pawnbrokers -pawned -pawning -pawns -pawnshop -pawnshops -pawpaw -pawpaws -paws -pay -payable -payback -payday -paydays -payed -payee -payees -payer -payers -paying -payload -payloads -paymaster -paymasters -payment -payments -payphone -payphones -payroll -payrolls -pays -payslips -pea -peace -peaceable -peaceably -peaceful -peacefully -peacefulness -peacekeepers -peacekeeping -peacemaker -peacemakers -peacemaking -peacetime -peach -peaches -peachier -peachiest -peachy -peacock -peacocks -peafowl -peahens -peak -peaked -peakiness -peaking -peaks -peaky -peal -pealed -pealing -peals -peanut -peanuts -pear -pearl -pearls -pearly -pears -peartrees -peas -peasant -peasantry -peasants -peat -peatland -peatlands -peaty -pebble -pebbled -pebbles -pebbly -pecan -peccary -peck -pecked -pecker -peckers -pecking -peckish -pecks -pectin -pectoral -pectorals -peculiar -peculiarities -peculiarity -peculiarly -pecuniary -pedagogic -pedagogical -pedagogically -pedagogue -pedagogy -pedal -pedalled -pedalling -pedals -pedant -pedantic -pedantically -pedantry -pedants -peddle -peddled -peddler -peddlers -peddles -peddling -pederasts -pedestal -pedestals -pedestrian -pedestrianisation -pedestrianised -pedestrians -pedigree -pedigrees -pediment -pedimented -pediments -pedlar -pedlars -pedology -peek -peeked -peeking -peeks -peel -peeled -peeler -peelers -peeling -peelings -peels -peep -peeped -peeper -peepers -peephole -peeping -peeps -peer -peerage -peerages -peered -peering -peerless -peers -peevish -peevishly -peevishness -peg -pegasus -pegged -pegging -pegs -pejorative -pejoratively -pejoratives -pekan -peking -pele -pelican -pelicans -pellet -pellets -pelmet -pelmets -pelt -pelted -pelting -pelts -pelvic -pelvis -pelvises -pen -penal -penalisation -penalise -penalised -penalises -penalising -penalties -penalty -penance -penances -pence -penchant -pencil -pencilled -pencilling -pencils -pendant -pendants -pending -pendulous -pendulum -pendulums -penetrable -penetrate -penetrated -penetrates -penetrating -penetratingly -penetration -penetrations -penetrative -penguin -penguins -penicillin -penile -peninsula -peninsular -peninsulas -penitence -penitent -penitential -penitentiary -penitently -penitents -penknife -penname -pennames -pennant -pennants -penned -pennies -penniless -penning -penny -pennypinching -penology -pens -pension -pensionable -pensioned -pensioner -pensioners -pensioning -pensions -pensive -pensively -pensiveness -pent -pentagon -pentagonal -pentagons -pentagram -pentagrams -pentameter -pentameters -pentasyllabic -pentathlete -pentathlon -pentatonic -pentecostal -penthouse -penultimate -penultimately -penumbra -penurious -penury -peonies -people -peopled -peoples -pep -peperoni -pepper -peppercorn -peppercorns -peppered -peppering -peppermint -peppermints -peppers -peppery -peps -peptic -peptide -peptides -per -perambulate -perambulated -perambulating -perambulations -perambulator -perannum -percales -perceivable -perceive -perceived -perceives -perceiving -percent -percentage -percentages -percentile -percentiles -percept -perceptibility -perceptible -perceptibly -perception -perceptions -perceptive -perceptively -perceptiveness -percepts -perceptual -perceptually -perch -perchance -perched -percher -perches -perching -perchlorate -percipient -percolate -percolated -percolates -percolating -percolation -percolator -percolators -percuss -percussed -percusses -percussing -percussion -percussionist -percussionists -percussive -percussively -percutaneous -perdition -peregrinations -peregrine -peregrines -peremptorily -peremptoriness -peremptory -perennial -perennially -perennials -perestroika -perfect -perfected -perfectibility -perfecting -perfection -perfectionism -perfectionist -perfectionists -perfections -perfectly -perfects -perfidious -perfidiously -perfidy -perforate -perforated -perforation -perforations -perforce -perform -performable -performance -performances -performed -performer -performers -performing -performs -perfume -perfumed -perfumery -perfumes -perfuming -perfunctorily -perfunctory -perfused -perfusion -pergola -pergolas -perhaps -peri -periastron -perigee -periglacial -perihelion -peril -perilous -perilously -perils -perimeter -perimeters -perinatal -perineal -perineum -period -periodic -periodical -periodically -periodicals -periodicity -periods -perioperative -peripatetic -peripheral -peripherally -peripherals -peripheries -periphery -periphrasis -periphrastic -periscope -periscopes -perish -perishable -perishables -perished -perishes -perishing -peritoneum -perjure -perjured -perjurer -perjury -perk -perked -perkier -perkiest -perkily -perking -perks -perky -perm -permafrost -permanence -permanency -permanent -permanently -permanganate -permeability -permeable -permeate -permeated -permeates -permeating -permeation -permed -perming -permissibility -permissible -permission -permissions -permissive -permissiveness -permit -permits -permitted -permitting -permittivity -perms -permutation -permutations -permute -permuted -permutes -permuting -pernicious -perniciousness -peroration -peroxidase -peroxide -peroxides -perpendicular -perpendicularly -perpendiculars -perpetrate -perpetrated -perpetrates -perpetrating -perpetration -perpetrator -perpetrators -perpetual -perpetually -perpetuate -perpetuated -perpetuates -perpetuating -perpetuation -perpetuity -perplex -perplexed -perplexedly -perplexing -perplexities -perplexity -perquisite -perquisites -perron -perry -persecute -persecuted -persecuting -persecution -persecutions -persecutor -persecutors -perseverance -persevere -persevered -perseveres -persevering -perseveringly -persia -persian -persist -persisted -persistence -persistent -persistently -persisting -persists -person -persona -personable -personae -personage -personages -personal -personalisation -personalise -personalised -personalising -personalities -personality -personally -personification -personifications -personified -personifies -personify -personifying -personnel -persons -perspective -perspectives -perspex -perspicacious -perspicacity -perspicuity -perspicuous -perspicuously -perspiration -perspire -perspiring -persuade -persuaded -persuaders -persuades -persuading -persuasion -persuasions -persuasive -persuasively -persuasiveness -pert -pertain -pertained -pertaining -pertains -perth -pertinacious -pertinaciously -pertinacity -pertinence -pertinent -pertinently -pertly -pertness -perturb -perturbation -perturbations -perturbed -perturbing -peru -perusal -peruse -perused -peruses -perusing -peruvian -pervade -pervaded -pervades -pervading -pervasive -pervasiveness -perverse -perversely -perverseness -perversion -perversions -perversity -pervert -perverted -perverting -perverts -peseta -pesetas -pesky -pessimism -pessimist -pessimistic -pessimistically -pessimists -pest -pester -pestered -pestering -pesticide -pesticides -pestilence -pestilent -pestilential -pestle -pests -pet -petal -petals -petard -peter -petered -petering -peters -pethidine -petit -petite -petition -petitioned -petitioner -petitioners -petitioning -petitions -petrel -petrels -petrification -petrified -petrifies -petrify -petrifying -petrochemical -petrochemicals -petrographic -petrographical -petrol -petroleum -petrological -petrology -pets -petted -petticoat -petticoats -pettier -pettiest -pettifoggers -pettifogging -pettiness -petting -pettish -pettishly -pettishness -petty -petulance -petulant -petulantly -petunia -petunias -pew -pews -pewter -phalanx -phantasy -phantom -phantoms -pharaoh -pharmaceutical -pharmaceuticals -pharmacies -pharmacist -pharmacists -pharmacological -pharmacologist -pharmacologists -pharmacology -pharmacy -pharynx -phase -phased -phases -phasing -pheasant -pheasants -phenol -phenols -phenomena -phenomenal -phenomenally -phenomenological -phenomenologically -phenomenologists -phenomenology -phenomenon -phenotype -phenotypes -phenylalanine -pheromone -pheromones -phew -philanthropic -philanthropist -philanthropists -philanthropy -philatelic -philatelists -philately -philharmonic -philistine -philological -philologist -philologists -philology -philosopher -philosophers -philosophic -philosophical -philosophically -philosophies -philosophise -philosophising -philosophy -phlebotomy -phlegm -phlegmatic -phlegmatically -phlogiston -phlox -phobia -phobias -phobic -phoenix -phoenixes -phone -phoned -phoneme -phonemes -phonemic -phonemically -phoner -phones -phonetic -phonetically -phoneticians -phoneticist -phonetics -phoney -phoneys -phoning -phonograph -phonographic -phonological -phonologically -phonology -phonon -phony -phooey -phosphatase -phosphate -phosphates -phosphatic -phospholipids -phosphor -phosphorescence -phosphorescent -phosphoric -phosphorous -phosphors -phosphorus -photo -photocells -photochemical -photochemically -photochemistry -photocopied -photocopier -photocopiers -photocopies -photocopy -photocopying -photoelectric -photoelectrically -photogenic -photograph -photographed -photographer -photographers -photographic -photographically -photographing -photographs -photography -photolysis -photolytic -photometric -photometrically -photometry -photomultiplier -photon -photons -photoreceptor -photos -photosensitive -photosphere -photostat -photosynthesis -photosynthesising -photosynthetic -photosynthetically -phototypesetter -phototypesetting -photovoltaic -phrasal -phrase -phrasebook -phrased -phraseology -phrases -phrasing -phrenological -phrenologically -phrenologists -phrenology -phyla -phylactery -phylogenetic -phylogeny -phylum -physic -physical -physicality -physically -physician -physicians -physicist -physicists -physics -physio -physiognomies -physiognomy -physiological -physiologically -physiologist -physiologists -physiology -physiotherapist -physiotherapists -physiotherapy -physique -phytoplankton -pi -pianissimo -pianist -pianistic -pianists -piano -pianoforte -pianola -piazza -piazzas -pica -picaresque -picasso -piccolo -pick -pickaxe -pickaxes -picked -picker -pickerel -pickerels -pickers -picket -picketed -picketing -pickets -picking -pickings -pickle -pickled -pickles -pickling -pickpocket -pickpocketing -pickpockets -picks -pickup -pickups -picnic -picnicked -picnickers -picnicking -picnics -picoseconds -pictogram -pictograms -pictographic -pictorial -pictorially -pictural -picture -pictured -pictures -picturesque -picturesquely -picturesqueness -picturing -pidgin -pie -piebald -piece -pieced -piecemeal -pieces -piecewise -piecework -piecing -pied -pier -pierce -pierced -piercer -piercers -pierces -piercing -piercingly -piers -pies -pieta -piety -piezoelectric -piffle -pig -pigeon -pigeons -piggery -piggish -piggy -piggyback -piglet -piglets -pigment -pigmentation -pigmented -pigments -pigs -pigsties -pigsty -pigtail -pigtailed -pigtails -pike -pikemen -pikes -pikestaff -pilaster -pilasters -pilchard -pilchards -pile -piled -piles -pileup -pilfer -pilfered -pilfering -pilgrim -pilgrimage -pilgrimages -pilgrims -piling -pill -pillage -pillaged -pillages -pillaging -pillar -pillared -pillars -pillbox -pillion -pilloried -pillories -pillory -pillow -pillowcase -pillowcases -pillowed -pillows -pills -pilot -piloted -piloting -pilots -pimp -pimpernel -pimping -pimple -pimpled -pimples -pimply -pimps -pin -pinafore -pinafores -pinball -pincer -pincered -pincers -pinch -pinched -pincher -pinches -pinching -pincushion -pincushions -pine -pineal -pineapple -pineapples -pined -pines -ping -pingpong -pings -pinhead -pinheads -pinhole -pinholes -pining -pinion -pinioned -pinions -pink -pinked -pinker -pinkie -pinkies -pinking -pinkish -pinkness -pinks -pinky -pinnacle -pinnacled -pinnacles -pinned -pinning -pinpoint -pinpointed -pinpointing -pinpoints -pinprick -pinpricks -pins -pinstripe -pinstriped -pinstripes -pint -pints -pintsized -pinup -pinups -piny -pion -pioneer -pioneered -pioneering -pioneers -pions -pious -piously -pip -pipe -piped -pipeline -pipelines -piper -pipers -pipes -pipette -pipettes -pipework -piping -pipings -pipit -pipits -pipped -pippin -pipping -pips -piquancy -piquant -pique -piqued -piracies -piracy -piranha -piranhas -pirate -pirated -pirates -piratical -pirating -pirouette -pirouetted -pirouettes -pirouetting -pisa -pistol -pistols -piston -pistons -pit -pitbull -pitch -pitchdark -pitched -pitcher -pitchers -pitches -pitchfork -pitchforks -pitching -piteous -piteously -pitfall -pitfalls -pith -pithead -pithier -pithiest -pithily -piths -pithy -pitiable -pitiably -pitied -pities -pitiful -pitifully -pitiless -pitilessly -piton -pitons -pits -pittance -pitted -pitting -pituitary -pity -pitying -pityingly -pivot -pivotal -pivoted -pivoting -pivots -pixel -pixels -pixie -pixies -pizazz -pizza -pizzas -pizzeria -pizzerias -pizzicato -placard -placards -placate -placated -placates -placating -placatingly -placatory -place -placebo -placed -placeholder -placemen -placement -placements -placenta -placentae -placental -placentas -placer -placers -places -placid -placidity -placidly -placing -placings -plagiarise -plagiarised -plagiarising -plagiarism -plagiarist -plagiarists -plague -plagued -plagues -plaguing -plaice -plaid -plaids -plain -plainest -plainly -plainness -plains -plaint -plaintiff -plaintiffs -plaintive -plaintively -plait -plaited -plaiting -plaits -plan -planar -plane -planed -planes -planet -planetarium -planetary -planetesimals -planetoids -planets -plangent -planing -plank -planking -planks -plankton -planktonic -planned -planner -planners -planning -plans -plant -plantain -plantation -plantations -planted -planter -planters -planting -plantings -plants -plaque -plaques -plasm -plasma -plasmas -plasmid -plasmids -plaster -plasterboard -plastered -plasterer -plasterers -plastering -plasters -plasterwork -plastic -plasticised -plasticisers -plasticity -plastics -plate -plateau -plateaus -plateaux -plated -plateful -platefuls -platelet -platelets -platen -platens -plates -platform -platforms -plating -platinum -platitude -platitudes -platitudinous -plato -platonic -platoon -platoons -platter -platters -platypus -platypuses -plaudits -plausibility -plausible -plausibly -play -playable -playback -playboy -playboys -played -player -players -playfellow -playfellows -playful -playfully -playfulness -playground -playgrounds -playgroup -playgroups -playhouse -playing -playings -playmate -playmates -playroom -plays -plaything -playthings -playtime -playwright -playwrights -plaza -plazas -plea -plead -pleaded -pleading -pleadingly -pleadings -pleads -pleas -pleasant -pleasanter -pleasantest -pleasantly -pleasantness -pleasantries -pleasantry -please -pleased -pleases -pleasing -pleasingly -pleasurable -pleasurably -pleasure -pleasures -pleat -pleated -pleats -pleb -plebeian -plebiscite -plebs -plectrum -plectrums -pledge -pledged -pledges -pledging -plenary -plenipotentiary -plenitude -plenteous -plenteously -plentiful -plentifully -plenty -plenum -plethora -pleura -pleural -pleurisy -plexus -pliable -pliant -plied -pliers -plies -plight -plights -plimsolls -plinth -plinths -plod -plodded -plodder -plodding -plods -plop -plopped -plopping -plops -plosive -plot -plots -plotted -plotter -plotters -plotting -plough -ploughed -ploughers -ploughing -ploughman -ploughmen -ploughs -ploughshare -ploughshares -plover -plovers -ploy -ploys -pluck -plucked -plucker -pluckier -pluckiest -plucking -plucks -plucky -plug -plugged -plugging -plughole -plugs -plum -plumage -plumages -plumb -plumbago -plumbed -plumber -plumbers -plumbing -plumbs -plume -plumed -plumes -pluming -plummet -plummeted -plummeting -plummets -plummy -plump -plumped -plumper -plumping -plumpness -plums -plumtree -plumy -plunder -plundered -plunderers -plundering -plunders -plunge -plunged -plunger -plungers -plunges -plunging -pluperfect -plural -pluralisation -pluralise -pluralised -pluralising -pluralism -pluralist -pluralistic -pluralists -plurality -plurals -plus -pluses -plush -plushy -pluto -plutocracy -plutocrats -plutonic -plutonium -ply -plying -plywood -pneumatic -pneumatics -pneumonia -poach -poached -poacher -poachers -poaches -poaching -pock -pocked -pocket -pocketbook -pocketed -pocketful -pocketing -pockets -pockmarked -pocks -pod -podded -podgy -podia -podium -podiums -pods -poem -poems -poet -poetess -poetic -poetical -poetically -poetics -poetise -poetry -poets -pogo -pogrom -pogroms -poignancy -poignant -poignantly -poikilothermic -poinsettias -point -pointblank -pointed -pointedly -pointedness -pointer -pointers -pointillism -pointillist -pointing -pointless -pointlessly -pointlessness -points -pointy -poise -poised -poises -poising -poison -poisoned -poisoner -poisoning -poisonings -poisonous -poisons -poke -poked -poker -pokerfaced -pokers -pokes -poking -poky -poland -polar -polarisation -polarisations -polarise -polarised -polarising -polarities -polarity -polder -pole -polecat -polecats -poled -polemic -polemical -polemicist -polemics -poles -polestar -polevaulting -poleward -polewards -police -policed -policeman -policemen -polices -policewoman -policewomen -policies -policing -policy -policyholder -policyholders -polio -poliomyelitis -polish -polished -polisher -polishers -polishes -polishing -polishings -politburo -polite -politely -politeness -politer -politesse -politest -politic -political -politically -politician -politicians -politicisation -politicise -politicised -politicising -politicking -politics -polity -polka -polkas -poll -pollarded -polled -pollen -pollens -pollinate -pollinated -pollinating -pollination -pollinator -pollinators -polling -polls -pollster -pollsters -pollutant -pollutants -pollute -polluted -polluter -polluters -pollutes -polluting -pollution -pollutions -polo -polonaise -polonaises -poloneck -polonies -polonium -polony -poltergeist -poltergeists -poltroon -polyandry -polyatomic -polycarbonate -polychromatic -polychrome -polycotton -polycrystalline -polycyclic -polyester -polyesters -polyethylene -polygamous -polygamy -polyglot -polyglots -polygon -polygonal -polygons -polygraph -polygynous -polygyny -polyhedra -polyhedral -polyhedron -polymath -polymer -polymerase -polymerases -polymeric -polymerisation -polymerised -polymers -polymorphic -polymorphism -polymorphisms -polymorphous -polynomial -polynomially -polynomials -polyp -polypeptide -polypeptides -polyphonic -polyphony -polypropylene -polyps -polysaccharide -polysaccharides -polystyrene -polysyllabic -polysyllable -polysyllables -polytechnic -polytechnics -polytheism -polytheist -polytheistic -polytheists -polythene -polytopes -polyunsaturated -polyunsaturates -polyurethane -pomade -pomades -pomegranate -pomegranates -pomelo -pomp -pompadour -pompeii -pompey -pomposity -pompous -pompously -pompousness -ponce -poncho -pond -ponder -pondered -pondering -ponderous -ponderously -ponders -ponds -ponies -pontiff -pontiffs -pontifical -pontificate -pontificated -pontificating -pontification -pontifications -pontoon -pontoons -pony -ponytail -pooch -pooches -poodle -poodles -poof -pooh -pool -pooled -pooling -pools -poolside -poop -poor -poorer -poorest -poorly -poorness -poorspirited -pop -popcorn -pope -popes -popeyed -poplar -poplars -popmusic -popped -popper -poppet -poppies -popping -poppy -poppycock -pops -populace -popular -popularisation -popularisations -popularise -popularised -popularising -popularity -popularly -populate -populated -populating -population -populations -populism -populist -populists -populous -popup -porcelain -porch -porches -porcine -porcupine -porcupines -pore -pored -pores -poring -pork -porkchop -porker -porky -porn -porno -pornographer -pornographers -pornographic -pornography -porns -porosity -porous -porphyritic -porphyry -porpoise -porpoises -porridge -port -portability -portable -portables -portage -portal -portals -portcullis -portcullises -ported -portend -portended -portending -portends -portent -portentous -portentously -portents -porter -porterage -porters -portfolio -porthole -portholes -portico -porting -portion -portions -portly -portmanteau -portmanteaus -portrait -portraitist -portraits -portraiture -portray -portrayal -portrayals -portrayed -portraying -portrays -ports -portugal -pose -posed -poseidon -poser -posers -poses -poseur -poseurs -posh -posies -posing -posit -posited -positing -position -positionable -positional -positionally -positioned -positioning -positions -positive -positively -positiveness -positives -positivism -positivist -positivists -positivity -positron -positrons -posits -posse -possess -possessed -possesses -possessing -possession -possessions -possessive -possessively -possessiveness -possessives -possessor -possessors -possibilities -possibility -possible -possibles -possibly -possum -possums -post -postage -postal -postbag -postbox -postboxes -postcard -postcards -postcode -postcodes -postdated -posted -poster -posterior -posteriors -posterity -posters -postfixes -postgraduate -postgraduates -posthumous -posthumously -postilion -postilions -postillion -posting -postings -postlude -postman -postmark -postmarked -postmarks -postmaster -postmasters -postmen -postmistress -postmodern -postmodernism -postmodernist -postmortem -postmortems -postnatal -postoperative -postoperatively -postpone -postponed -postponement -postponements -postpones -postponing -posts -postscript -postscripts -postulate -postulated -postulates -postulating -postulation -postural -posture -postured -postures -posturing -posturings -posy -pot -potable -potash -potassium -potato -potbellied -potch -potencies -potency -potent -potentate -potentates -potential -potentialities -potentiality -potentially -potentials -potentiometer -potentiometers -potently -pothole -potholes -potion -potions -potpourri -pots -potsherds -potshot -potshots -pottage -potted -potter -pottered -potteries -pottering -potters -pottery -potties -potting -potty -pouch -pouches -pouffe -pouffes -poult -poulterer -poultice -poultry -pounce -pounced -pounces -pouncing -pound -poundage -pounded -pounding -pounds -pour -pourable -poured -pouring -pours -pout -pouted -pouter -pouting -pouts -poverty -povertystricken -powder -powdered -powdering -powders -powdery -power -powerboat -powerboats -powered -powerful -powerfully -powerfulness -powerhouse -powerhouses -powering -powerless -powerlessness -powers -powersharing -pox -practicabilities -practicability -practicable -practical -practicalities -practicality -practically -practicals -practice -practices -practise -practised -practises -practising -practitioner -practitioners -pragmatic -pragmatically -pragmatics -pragmatism -pragmatist -pragmatists -prague -prairie -prairies -praise -praised -praises -praiseworthy -praising -praline -pram -prams -prance -pranced -prancer -prancing -prang -prank -pranks -prankster -pranksters -prat -prattle -prattled -prattler -prattling -prawn -prawns -pray -prayed -prayer -prayerbook -prayerful -prayerfully -prayers -praying -prays -pre -preach -preached -preacher -preachers -preaches -preaching -preachings -preadolescent -preallocate -preamble -preambles -preamp -preamplifier -prearranged -preauthorise -prebend -prebendary -precarious -precariously -precariousness -precaution -precautionary -precautions -precede -preceded -precedence -precedences -precedent -precedents -precedes -preceding -precept -precepts -precess -precessed -precessing -precession -precinct -precincts -precious -preciously -preciousness -precipice -precipices -precipitate -precipitated -precipitately -precipitates -precipitating -precipitation -precipitous -precipitously -precis -precise -precisely -preciseness -precision -precisions -preclinical -preclude -precluded -precludes -precluding -precocious -precociously -precociousness -precocity -precognition -precognitions -precomputed -preconceived -preconception -preconceptions -precondition -preconditions -precooked -precursor -precursors -predate -predated -predates -predating -predation -predations -predator -predators -predatory -predeceased -predecessor -predecessors -predeclared -predefine -predefined -predefining -predestination -predestined -predetermination -predetermine -predetermined -predetermines -predicament -predicaments -predicate -predicated -predicates -predicating -predicative -predict -predictability -predictable -predictably -predicted -predicting -prediction -predictions -predictive -predictor -predictors -predicts -predilection -predilections -predispose -predisposed -predisposes -predisposing -predisposition -predispositions -predominance -predominant -predominantly -predominate -predominated -predominates -predominating -preen -preened -preening -preens -prefab -prefabricated -prefabrication -prefabs -preface -prefaced -prefaces -prefacing -prefatory -prefect -prefects -prefecture -prefer -preferable -preferably -preference -preferences -preferential -preferentially -preferment -preferred -preferring -prefers -prefigured -prefix -prefixed -prefixes -prefixing -pregnancies -pregnancy -pregnant -preheat -preheating -prehensile -prehistoric -prehistory -prejudge -prejudged -prejudging -prejudice -prejudiced -prejudices -prejudicial -prejudicing -prelate -prelates -preliminaries -preliminarily -preliminary -prelude -preludes -premature -prematurely -prematureness -prematurity -premeditate -premeditated -premeditation -premenstrual -premier -premiere -premiered -premieres -premiers -premiership -premise -premised -premises -premising -premiss -premisses -premium -premiums -premolar -premolars -premonition -premonitions -prenatal -preoccupation -preoccupations -preoccupied -preoccupy -preoccupying -preordained -prep -prepaid -preparation -preparations -preparative -preparatory -prepare -prepared -preparedness -preparer -preparers -prepares -preparing -prepayment -prepays -preplanned -preponderance -preponderant -preponderantly -preposition -prepositional -prepositions -preposterous -preposterously -preps -prerogative -prerogatives -presbytery -preschool -prescribe -prescribed -prescribes -prescribing -prescription -prescriptions -prescriptive -prescriptively -prescriptivism -prescriptivist -preselect -preselected -preselects -presence -presences -present -presentable -presentation -presentational -presentations -presented -presenter -presenters -presentiment -presentiments -presenting -presently -presents -preservation -preservationists -preservative -preservatives -preserve -preserved -preserver -preserves -preserving -preset -presets -presetting -preside -presided -presidencies -presidency -president -presidential -presidents -presides -presiding -presidium -press -pressed -presses -pressing -pressingly -pressings -pressman -pressmen -pressup -pressups -pressure -pressurecooking -pressured -pressures -pressuring -pressurise -pressurised -pressurises -pressurising -prestidigitation -prestidigitator -prestidigitatorial -prestige -prestigious -presto -presumable -presumably -presume -presumed -presumes -presuming -presumption -presumptions -presumptive -presumptively -presumptuous -presumptuously -presumptuousness -presuppose -presupposed -presupposes -presupposing -presupposition -presuppositions -pretence -pretences -pretend -pretended -pretender -pretenders -pretending -pretends -pretension -pretensions -pretentious -pretentiously -pretentiousness -preterite -preternatural -preternaturally -pretext -pretexts -pretor -pretoria -pretreated -pretreatment -pretreatments -prettier -prettiest -prettify -prettily -prettiness -pretty -prevail -prevailed -prevailing -prevails -prevalence -prevalent -prevalently -prevaricate -prevaricated -prevaricating -prevarication -prevent -preventable -prevented -preventing -prevention -preventions -preventive -prevents -preview -previewed -previewer -previewers -previewing -previews -previous -previously -prevue -prevues -prey -preyed -preying -preys -priapic -price -priced -priceless -prices -pricewar -pricey -pricier -pricing -prick -pricked -pricking -prickle -prickled -prickles -pricklier -prickliest -prickliness -prickling -prickly -pricks -pricy -pride -prided -prides -pried -pries -priest -priestess -priestesses -priesthood -priestly -priests -prig -priggish -priggishly -priggishness -prim -primacy -primaeval -primal -primaries -primarily -primary -primate -primates -prime -primed -primeness -primer -primers -primes -primetime -primeval -priming -primitive -primitively -primitiveness -primitives -primly -primness -primogeniture -primordial -primrose -primroses -primus -prince -princelings -princely -princes -princess -princesses -principal -principalities -principality -principally -principals -principle -principled -principles -print -printable -printed -printer -printers -printing -printings -printmakers -printmaking -printout -printouts -prints -prions -prior -priories -priorities -prioritisation -prioritise -prioritised -prioritises -prioritising -priority -priors -priory -prise -prised -prises -prising -prism -prismatic -prisms -prison -prisoner -prisoners -prisons -prissy -pristine -privacy -private -privateer -privateers -privately -privates -privation -privations -privatisation -privatisations -privatise -privatised -privatises -privatising -privet -privilege -privileged -privileges -privileging -privy -prize -prized -prizer -prizes -prizewinner -prizing -pro -proactive -probabilist -probabilistic -probabilistically -probabilities -probability -probable -probably -probate -probation -probationary -probative -probe -probed -prober -probes -probing -probity -problem -problematic -problematical -problematically -problems -proboscis -procedural -procedurally -procedure -procedures -proceed -proceeded -proceeding -proceedings -proceeds -process -processable -processed -processes -processing -procession -processional -processions -processor -processors -proclaim -proclaimed -proclaimers -proclaiming -proclaims -proclamation -proclamations -proclivities -proclivity -procrastinate -procrastinating -procrastination -procrastinations -procrastinator -procrastinators -procreate -procreated -procreating -procreation -procreational -procreative -procreatory -proctor -proctorial -proctors -procurable -procure -procured -procurement -procurements -procures -procuring -prod -prodded -prodding -prodeo -prodigal -prodigality -prodigally -prodigies -prodigious -prodigiously -prodigy -prods -produce -produced -producer -producers -produces -producible -producing -product -production -productions -productive -productively -productivity -products -profanation -profane -profaned -profanely -profaneness -profanities -profanity -profess -professed -professedly -professes -professing -profession -professional -professionalisation -professionalised -professionalism -professionally -professionals -professions -professor -professorial -professors -professorship -professorships -proffer -proffered -proffering -proffers -proficiencies -proficiency -proficient -proficiently -profile -profiled -profiles -profiling -profit -profitability -profitable -profitably -profited -profiteering -profiteers -profiteroles -profiting -profitless -profits -profittaking -profligacy -profligate -profligately -proforma -proformas -profound -profounder -profoundest -profoundly -profundity -profuse -profusely -profuseness -profusion -progenitor -progenitors -progeny -progesterone -prognoses -prognosis -prognosticate -prognostication -prognostications -program -programmable -programmatic -programme -programmed -programmer -programmers -programmes -programming -programs -progress -progressed -progresses -progressing -progression -progressions -progressive -progressively -progressiveness -progressives -prohibit -prohibited -prohibiting -prohibition -prohibitionist -prohibitionists -prohibitions -prohibitive -prohibitively -prohibits -project -projected -projectile -projectiles -projecting -projection -projectionist -projections -projective -projectively -projector -projectors -projects -prokaryotes -prolactin -prolapse -prolapsed -proletarian -proletarianisation -proletarians -proletariat -proliferate -proliferated -proliferates -proliferating -proliferation -proliferative -prolific -prolifically -prolix -prologue -prologues -prolong -prolongation -prolonged -prolonging -prolongs -promenade -promenaded -promenader -promenaders -promenades -prominence -prominences -prominent -prominently -promiscuity -promiscuous -promiscuously -promise -promised -promises -promising -promisingly -promissory -promontories -promontory -promotable -promote -promoted -promoter -promoters -promotes -promoting -promotion -promotional -promotions -prompt -prompted -prompter -prompters -prompting -promptings -promptitude -promptly -promptness -prompts -promulgate -promulgated -promulgating -promulgation -promulgations -prone -proneness -prong -prongs -pronominal -pronoun -pronounce -pronounceable -pronounced -pronouncedly -pronouncement -pronouncements -pronounces -pronouncing -pronouns -pronto -pronunciation -pronunciations -proof -proofed -proofing -proofread -proofreader -proofreaders -proofreading -proofreads -proofs -prop -propaganda -propagandist -propagandists -propagate -propagated -propagates -propagating -propagation -propagator -propagators -propane -propel -propellant -propellants -propelled -propeller -propellers -propelling -propels -propensities -propensity -proper -properly -propertied -properties -property -prophecies -prophecy -prophesied -prophesies -prophesy -prophesying -prophet -prophetess -prophetic -prophetically -prophets -prophylactic -prophylactics -prophylaxis -propinquity -propionate -propitiate -propitiated -propitiating -propitiation -propitiatory -propitious -proponent -proponents -proportion -proportional -proportionality -proportionally -proportionate -proportionately -proportioned -proportions -proposal -proposals -propose -proposed -proposer -proposers -proposes -proposing -proposition -propositional -propositioned -propositioning -propositions -propound -propounded -propounding -propped -propping -proprietary -proprieties -proprietor -proprietorial -proprietorially -proprietors -proprietorship -proprietress -propriety -proprioceptive -props -propulsion -propulsive -propylene -pros -prosaic -prosaically -prosaist -proscenium -proscribe -proscribed -proscription -proscriptive -prose -prosecutable -prosecute -prosecuted -prosecutes -prosecuting -prosecution -prosecutions -prosecutor -prosecutorial -prosecutors -proselytise -proselytising -prosodic -prosody -prospect -prospecting -prospective -prospectively -prospector -prospectors -prospects -prospectus -prospectuses -prosper -prospered -prospering -prosperity -prosperous -prosperously -prospers -prostaglandin -prostaglandins -prostate -prostates -prostatic -prosthesis -prosthetic -prostitute -prostituted -prostitutes -prostituting -prostitution -prostrate -prostrated -prostrates -prostrating -prostration -protactinium -protagonist -protagonists -protea -protean -proteas -protease -protect -protected -protecting -protection -protectionism -protectionist -protectionists -protections -protective -protectively -protectiveness -protector -protectorate -protectorates -protectors -protects -protege -protegee -protegees -proteges -protein -proteins -protest -protestant -protestantism -protestants -protestation -protestations -protested -protester -protesters -protesting -protestor -protestors -protests -protists -protocol -protocols -proton -protons -protoplasm -protoplasmic -prototype -prototyped -prototypes -prototypical -prototyping -protozoa -protozoan -protozoans -protract -protracted -protractor -protractors -protrude -protruded -protrudes -protruding -protrusion -protrusions -protrusive -protuberance -protuberances -proud -prouder -proudest -proudly -provable -provably -prove -proved -proven -provenance -provence -proverb -proverbial -proverbially -proverbs -proves -providable -provide -provided -providence -provident -providential -providentially -provider -providers -provides -providing -province -provinces -provincial -provincialism -proving -provision -provisional -provisionally -provisioned -provisioning -provisions -provocation -provocations -provocative -provocatively -provoke -provoked -provoker -provokes -provoking -provokingly -provost -prow -prowess -prowl -prowled -prowler -prowlers -prowling -prowls -prows -proxies -proximal -proximally -proximate -proximately -proximity -proximo -proxy -prude -prudence -prudent -prudential -prudently -prudery -prudish -prudishness -prune -pruned -pruners -prunes -pruning -prunings -prurience -prurient -pruritus -prussia -prussian -prussic -pry -prying -pryings -psalm -psalmist -psalmody -psalms -psalter -psalters -psaltery -psephologist -pseudo -pseudonym -pseudonymous -pseudonyms -pseudopod -psoriasis -psyche -psychedelia -psychedelic -psychiatric -psychiatrist -psychiatrists -psychiatry -psychic -psychically -psychics -psycho -psychoanalyse -psychoanalysis -psychoanalyst -psychoanalysts -psychoanalytic -psychokinesis -psychokinetic -psycholinguistic -psycholinguistics -psycholinguists -psychological -psychologically -psychologies -psychologist -psychologists -psychology -psychometric -psychopath -psychopathic -psychopathology -psychopaths -psychoses -psychosis -psychosocial -psychosomatic -psychotherapist -psychotherapists -psychotherapy -psychotic -psychotically -psychotics -ptarmigan -ptarmigans -pterodactyl -pterosaurs -ptolemy -pub -puberty -pubescent -pubic -public -publican -publicans -publication -publications -publicise -publicised -publicises -publicising -publicist -publicists -publicity -publicly -publish -publishable -published -publisher -publishers -publishes -publishing -pubs -pudding -puddings -puddle -puddles -puerile -puerility -puerperal -puff -puffballs -puffed -puffer -puffin -puffiness -puffing -puffins -puffs -puffy -pug -pugilist -pugilistic -pugnacious -pugnaciously -pugnacity -pugs -puissant -puke -puking -pulchritude -puling -pull -pulled -puller -pullets -pulley -pulleys -pulling -pullover -pullovers -pulls -pulmonary -pulp -pulped -pulping -pulpit -pulpits -pulps -pulpy -pulsar -pulsars -pulsate -pulsated -pulsates -pulsating -pulsation -pulsations -pulse -pulsed -pulses -pulsing -pulverisation -pulverise -pulverised -pulverising -puma -pumas -pumice -pummel -pummelled -pummelling -pummels -pump -pumped -pumping -pumpkin -pumpkins -pumps -pun -punch -punchable -punchbowl -punchcard -punched -puncher -punches -punching -punchline -punchlines -punchy -punctate -punctilious -punctiliously -punctual -punctuality -punctually -punctuate -punctuated -punctuates -punctuating -punctuation -punctuational -punctuations -puncture -punctured -punctures -puncturing -pundit -pundits -pungency -pungent -pungently -punier -puniest -punish -punishable -punished -punishes -punishing -punishment -punishments -punitive -punitively -punk -punks -punky -punned -punnet -punning -puns -punster -punt -punted -punter -punters -punting -punts -puny -pup -pupa -pupae -pupal -pupated -pupates -pupating -pupil -pupillage -pupils -puppet -puppeteer -puppetry -puppets -puppies -puppy -puppyhood -pups -purblind -purchasable -purchase -purchased -purchaser -purchasers -purchases -purchasing -purdah -pure -puree -purees -purely -pureness -purer -purest -purgative -purgatorial -purgatory -purge -purged -purges -purging -purgings -purification -purified -purifier -purifies -purify -purifying -purims -purines -purist -purists -puritan -puritanical -puritanism -puritans -purities -purity -purl -purlieus -purling -purlins -purloin -purloined -purls -purple -purples -purplish -purport -purported -purportedly -purporting -purports -purpose -purposed -purposeful -purposefully -purposefulness -purposeless -purposelessly -purposely -purposes -purposing -purposive -purr -purred -purring -purrs -purse -pursed -purser -purses -pursing -pursuance -pursuant -pursue -pursued -pursuer -pursuers -pursues -pursuing -pursuit -pursuits -purvey -purveyance -purveyed -purveying -purveyor -purveyors -purview -pus -push -pushable -pushed -pusher -pushers -pushes -pushier -pushing -pushovers -pushups -pushy -puss -pussy -pussycat -pussyfooting -pustular -pustule -pustules -put -putative -putatively -putput -putrefaction -putrefy -putrefying -putrescent -putrid -putridity -puts -putsch -putt -putted -putter -putters -putti -putting -putts -putty -puzzle -puzzled -puzzlement -puzzler -puzzles -puzzling -puzzlingly -pygmies -pygmy -pyjama -pyjamas -pylon -pylons -pyracantha -pyramid -pyramidal -pyramids -pyre -pyres -pyridine -pyrite -pyrites -pyrolyse -pyrolysis -pyromaniac -pyromaniacs -pyrotechnic -pyrotechnics -pyroxene -pyroxenes -python -pythons -qatar -qua -quack -quacked -quacking -quackish -quacks -quadrangle -quadrangles -quadrangular -quadrant -quadrants -quadratic -quadratically -quadratics -quadrature -quadratures -quadrilateral -quadrilaterals -quadrille -quadrilles -quadripartite -quadrophonic -quadruped -quadrupeds -quadruple -quadrupled -quadruples -quadruplets -quadruplicate -quadrupling -quadruply -quadrupole -quaff -quaffed -quaffing -quagga -quaggas -quagmire -quagmires -quail -quailed -quails -quaint -quainter -quaintly -quaintness -quake -quaked -quaker -quakers -quakes -quaking -qualification -qualifications -qualified -qualifier -qualifiers -qualifies -qualify -qualifying -qualitative -qualitatively -qualities -quality -qualm -qualms -quantifiable -quantification -quantified -quantifier -quantifiers -quantifies -quantify -quantifying -quantisation -quantise -quantised -quantitative -quantitatively -quantities -quantity -quantum -quarantine -quarantined -quark -quarks -quarrel -quarrelled -quarrelling -quarrels -quarrelsome -quarried -quarries -quarry -quarrying -quarrymen -quart -quarter -quarterback -quartered -quartering -quarterly -quartermaster -quarters -quarterstaff -quarterstaffs -quartet -quartets -quartic -quartics -quartile -quartiles -quarto -quarts -quartz -quartzite -quasar -quasars -quash -quashed -quashing -quasi -quasilinear -quaternary -quaternion -quaternions -quatrain -quatrains -quaver -quavered -quavering -quavers -quay -quays -quayside -queasiness -queasy -quebec -queen -queenly -queens -queer -queerest -queerly -quell -quelled -quelling -quells -quench -quenched -quencher -quenchers -quenches -quenching -queried -queries -quern -querulous -querulously -querulousness -query -querying -quest -questing -question -questionable -questionably -questioned -questioner -questioners -questioning -questioningly -questionings -questionnaire -questionnaires -questions -quests -queue -queued -queueing -queues -queuing -quibble -quibbles -quibbling -quiche -quiches -quick -quicken -quickened -quickening -quickens -quicker -quickest -quicklime -quickly -quickness -quicksand -quicksands -quicksilver -quickwitted -quid -quids -quiesce -quiesced -quiescence -quiescent -quiet -quieted -quieten -quietened -quietening -quietens -quieter -quietest -quieting -quietly -quietness -quiets -quietus -quiff -quill -quills -quilt -quilted -quilting -quilts -quince -quincentenary -quinces -quinine -quinquennial -quintessence -quintessential -quintessentially -quintet -quintets -quintic -quintillion -quintuple -quip -quipped -quipper -quips -quire -quirk -quirkier -quirkiest -quirkiness -quirks -quirky -quisling -quit -quite -quits -quitted -quitter -quitting -quiver -quivered -quivering -quiveringly -quivers -quixotic -quiz -quizzed -quizzes -quizzical -quizzically -quizzing -quoins -quoits -quondam -quorate -quorum -quota -quotable -quotas -quotation -quotations -quote -quoted -quoter -quotes -quotidian -quotient -quotients -quoting -quovadis -rabat -rabats -rabbi -rabbis -rabbit -rabbiting -rabbits -rabble -rabid -rabidly -rabies -raccoon -raccoons -race -racecourse -racecourses -raced -racegoers -racehorse -racehorses -racer -racers -races -racetrack -rachis -racial -racialism -racialist -racialists -racially -racier -raciest -racily -racing -racings -racism -racist -racists -rack -racked -racket -racketeering -rackets -racking -racks -raconteur -racoon -racquet -racquets -racy -rad -radar -radars -radial -radially -radials -radian -radiance -radiancy -radians -radiant -radiantly -radiate -radiated -radiates -radiating -radiation -radiations -radiative -radiatively -radiator -radiators -radical -radicalism -radically -radicals -radices -radii -radio -radioactive -radioactively -radioactivity -radioastronomical -radiocarbon -radioed -radiogalaxies -radiogalaxy -radiogram -radiograph -radiographer -radiographers -radiographic -radiographs -radiography -radioing -radiological -radiologist -radiologists -radiology -radiometric -radionuclide -radios -radiotherapy -radish -radishes -radium -radius -radix -radon -raffia -raffle -raffled -raffles -raft -rafter -rafters -rafting -raftman -rafts -raftsman -rag -ragamuffin -ragamuffins -ragbag -rage -raged -rages -ragged -raggedly -raging -ragout -rags -ragstoriches -ragtime -ragwort -raid -raided -raider -raiders -raiding -raids -rail -railed -railes -railing -railings -raillery -railroad -rails -railway -railwayman -railwaymen -railways -raiment -rain -rainbow -rainbows -raincloud -rainclouds -raincoat -raincoats -raindrop -raindrops -rained -rainfall -rainforest -rainforests -rainier -rainiest -raining -rainless -rainout -rains -rainstorm -rainstorms -rainswept -rainwater -rainy -raise -raised -raiser -raises -raisin -raising -raisins -raj -rajah -rake -raked -rakes -raking -rakish -rallied -rallies -rally -rallying -ram -ramble -rambled -rambler -ramblers -rambles -rambling -ramblings -ramification -ramifications -ramified -ramifies -ramify -rammed -rammer -ramming -ramp -rampage -rampaged -rampages -rampaging -rampant -rampantly -rampart -ramparts -ramped -ramping -ramps -ramrod -rams -ramshackle -ran -ranch -rancher -ranchers -ranches -ranching -rancid -rancorous -rancour -rand -random -randomisation -randomise -randomised -randomising -randomly -randomness -rands -randy -rang -range -ranged -ranger -rangers -ranges -ranging -rangy -rani -ranis -rank -ranked -ranker -rankers -rankest -ranking -rankings -rankle -rankled -rankles -rankling -rankness -ranks -ransack -ransacked -ransacking -ransom -ransomed -ransoming -ransoms -rant -ranted -ranter -ranters -ranting -rantings -rants -rap -rapacious -rapacity -rape -raped -rapes -rapeseed -rapid -rapidity -rapidly -rapids -rapier -rapiers -rapine -raping -rapist -rapists -rapped -rapping -rapport -rapporteur -rapporteurs -rapports -rapprochement -raps -rapt -raptor -raptors -rapture -raptures -rapturous -rapturously -rare -rarebit -rarefaction -rarefactions -rarefied -rarely -rareness -rarer -rarest -raring -rarities -rarity -rascal -rascally -rascals -rased -rash -rasher -rashers -rashes -rashest -rashly -rashness -rasing -rasp -raspberries -raspberry -rasped -rasper -rasping -rasps -raspy -raster -rasters -rat -ratatouille -rate -rated -ratepayer -ratepayers -rater -rates -rather -ratification -ratifications -ratified -ratifier -ratifies -ratify -ratifying -rating -ratings -ratio -ratiocination -ration -rational -rationale -rationales -rationalisation -rationalisations -rationalise -rationalised -rationalising -rationalism -rationalist -rationalistic -rationalists -rationalities -rationality -rationally -rationed -rationing -rations -ratios -ratlike -ratrace -rats -rattier -rattle -rattled -rattler -rattles -rattlesnake -rattlesnakes -rattling -ratty -raucous -raucously -ravage -ravaged -ravages -ravaging -rave -raved -ravel -ravelled -ravelling -ravels -raven -ravening -ravenous -ravenously -ravens -raver -ravers -raves -ravine -ravines -raving -ravingly -ravings -ravioli -ravish -ravished -ravisher -ravishes -ravishing -ravishingly -raw -rawest -rawness -ray -rayed -rayon -rays -raze -razed -razes -razing -razor -razorbills -razorblades -razoring -razors -razorsharp -razzmatazz -re -reabsorb -reabsorbed -reabsorption -reaccept -reaccessed -reach -reachable -reached -reaches -reachieved -reaching -reacquainting -reacquired -reacquisition -react -reactant -reactants -reacted -reacting -reaction -reactionaries -reactionary -reactions -reactivate -reactivated -reactivates -reactivating -reactivation -reactive -reactivities -reactivity -reactor -reactors -reacts -read -readability -readable -readably -readapt -reader -readers -readership -readerships -readied -readier -readies -readiest -readily -readiness -reading -readings -readjust -readjusted -readjusting -readjustment -readjustments -readmission -readmit -readmits -readmitted -reads -ready -readying -readymade -reaffirm -reaffirmation -reaffirmed -reaffirming -reaffirms -reafforestation -reagent -reagents -real -realign -realigned -realigning -realignment -realignments -realigns -realisable -realisation -realisations -realise -realised -realises -realising -realism -realist -realistic -realistically -realists -realities -reality -reallife -reallocate -reallocated -reallocates -reallocating -reallocation -really -realm -realms -realness -realpolitik -reals -realty -ream -reams -reanimated -reanimating -reap -reaped -reaper -reapers -reaping -reappear -reappearance -reappeared -reappearing -reappears -reapplied -reapply -reapplying -reappoint -reappointed -reappointment -reappraisal -reappraised -reappraising -reaps -rear -reared -rearer -rearguard -rearing -rearm -rearmament -rearmed -rearming -rearms -rearrange -rearranged -rearrangement -rearrangements -rearranges -rearranging -rears -rearview -rearward -reason -reasonable -reasonableness -reasonably -reasoned -reasoner -reasoners -reasoning -reasonless -reasons -reassemble -reassembled -reassembling -reassembly -reassert -reasserted -reasserting -reassertion -reasserts -reassess -reassessed -reassessment -reassessments -reassign -reassigned -reassigning -reassignment -reassigns -reassume -reassuming -reassurance -reassurances -reassure -reassured -reassures -reassuring -reassuringly -reattachment -reattempt -reawaken -reawakened -reawakening -rebalanced -rebate -rebates -rebel -rebelled -rebelling -rebellion -rebellions -rebellious -rebelliously -rebelliousness -rebels -rebind -rebirth -rebirths -rebook -reboot -rebooted -reborn -rebound -rebounded -rebounding -rebounds -rebuff -rebuffed -rebuffing -rebuffs -rebuild -rebuilding -rebuilds -rebuilt -rebuke -rebuked -rebukes -rebuking -reburial -reburied -rebury -rebus -rebut -rebuttable -rebuttal -rebuttals -rebutted -rebutting -recalcitrance -recalcitrant -recalculate -recalculated -recalculation -recalibrate -recalibrating -recalibration -recall -recalled -recalling -recalls -recant -recantation -recanted -recanting -recants -recap -recapitalisation -recapitulate -recapitulates -recapitulation -recapped -recaps -recapture -recaptured -recapturing -recast -recasting -recasts -recede -receded -recedes -receding -receipt -receipted -receipts -receivable -receive -received -receiver -receivers -receivership -receives -receiving -recency -recension -recent -recently -receptacle -receptacles -reception -receptionist -receptionists -receptions -receptive -receptiveness -receptivity -receptor -receptors -recess -recessed -recesses -recession -recessional -recessionary -recessions -recessive -recharge -rechargeable -recharged -recharger -recharges -recharging -recheck -rechecked -rechecking -recidivism -recidivist -recidivists -recipe -recipes -recipient -recipients -reciprocal -reciprocally -reciprocals -reciprocate -reciprocated -reciprocating -reciprocation -reciprocity -recirculate -recirculated -recirculating -recirculation -recital -recitals -recitation -recitations -recitative -recitatives -recite -recited -recites -reciting -reckless -recklessly -recklessness -reckon -reckoned -reckoner -reckoning -reckons -reclaim -reclaimable -reclaimed -reclaimer -reclaiming -reclaims -reclamation -reclamations -reclassification -reclassified -reclassifies -reclassify -reclassifying -recline -reclined -recliner -reclines -reclining -reclothe -recluse -recluses -reclusive -recode -recoded -recodes -recoding -recognisable -recognisably -recognisances -recognise -recognised -recogniser -recognisers -recognises -recognising -recognition -recognitions -recoil -recoiled -recoiling -recoils -recollect -recollected -recollecting -recollection -recollections -recollects -recombinant -recombinants -recombination -recombine -recombined -recombines -recombining -recommence -recommenced -recommencement -recommences -recommencing -recommend -recommendable -recommendation -recommendations -recommended -recommending -recommends -recommissioning -recompense -recompensed -recompenses -recompilation -recompilations -recompile -recompiled -recompiling -recomputable -recompute -recomputed -recomputes -recomputing -reconcilable -reconcile -reconciled -reconcilement -reconciles -reconciliation -reconciliations -reconciling -recondite -reconditioned -reconditioning -reconfigurable -reconfiguration -reconfigurations -reconfigure -reconfigured -reconfigures -reconfiguring -reconnaissance -reconnect -reconnected -reconnecting -reconnection -reconnoitre -reconnoitred -reconnoitring -reconquer -reconquest -reconsider -reconsideration -reconsidered -reconsidering -reconsiders -reconstitute -reconstituted -reconstitutes -reconstituting -reconstitution -reconstruct -reconstructed -reconstructing -reconstruction -reconstructions -reconstructs -reconsult -reconsulted -reconsulting -recontribute -reconvene -reconvened -reconvening -reconversion -reconvert -reconverted -recopied -recopy -record -recordable -recordbreaking -recorded -recorder -recorders -recording -recordings -recordist -recordists -records -recount -recounted -recounting -recounts -recoup -recouped -recouping -recouple -recoups -recourse -recover -recoverability -recoverable -recovered -recoveries -recovering -recovers -recovery -recreate -recreated -recreates -recreating -recreation -recreational -recreations -recriminate -recrimination -recriminations -recruit -recruited -recruiter -recruiters -recruiting -recruitment -recruits -recrystallisation -rectal -rectangle -rectangles -rectangular -rectifiable -rectification -rectified -rectifier -rectifies -rectify -rectifying -rectilinear -rectitude -recto -rector -rectors -rectory -rectrix -rectum -rectums -recumbent -recuperate -recuperated -recuperates -recuperating -recuperation -recuperative -recur -recured -recures -recuring -recurred -recurrence -recurrences -recurrent -recurrently -recurring -recurs -recursion -recursions -recursive -recursively -recyclable -recycle -recycled -recyclers -recycles -recycling -red -redaction -redblooded -redbreast -redcoats -redcross -redden -reddened -reddening -reddens -redder -reddest -reddish -redeclaration -redecorated -redecorating -redecoration -rededication -redeem -redeemable -redeemed -redeemer -redeeming -redeems -redefine -redefined -redefiner -redefines -redefining -redefinition -redefinitions -redeliver -redelivery -redemption -redemptions -redemptive -redeploy -redeployed -redeploying -redeployment -redeposited -redeposition -redesign -redesigned -redesigning -redesigns -redevelop -redeveloped -redeveloping -redevelopment -redfaced -redhanded -redhead -redheaded -redheads -redial -redialling -redirect -redirected -redirecting -redirection -redirects -rediscover -rediscovered -rediscoveries -rediscovering -rediscovers -rediscovery -rediscussed -redisplay -redisplayed -redistributable -redistribute -redistributed -redistributes -redistributing -redistribution -redistributions -redistributive -redneck -redness -redo -redoing -redolent -redone -redouble -redoubled -redoubling -redoubt -redoubtable -redoubts -redound -redounded -redox -redraft -redrafted -redrafting -redraw -redrawing -redrawn -redraws -redress -redressed -redressing -reds -redsea -redshift -redshifts -redstarts -redtape -reduce -reduced -reducer -reducers -reduces -reducibility -reducible -reducing -reduction -reductionism -reductionist -reductionists -reductions -reductive -redundancies -redundancy -redundant -redundantly -redwood -reed -reeds -reef -reefed -reefing -reefs -reek -reeked -reeking -reeks -reel -reelects -reeled -reeling -reels -ref -refer -referable -referee -refereed -refereeing -referees -reference -referenced -referencer -references -referencing -referenda -referendum -referendums -referent -referential -referentially -referents -referral -referrals -referred -referring -refers -refile -refiled -refiling -refill -refillable -refilled -refilling -refillings -refills -refinance -refinanced -refinancing -refine -refined -refinement -refinements -refiner -refineries -refiners -refinery -refines -refining -refinish -refit -refits -refitted -refitting -reflation -reflect -reflectance -reflected -reflecting -reflection -reflectional -reflections -reflective -reflectively -reflectiveness -reflectivity -reflector -reflectors -reflects -reflex -reflexes -reflexion -reflexions -reflexive -reflexively -reflexiveness -reflexivity -reflexology -refloat -reflooring -reflux -refluxed -refluxing -refocus -refocused -refocuses -refocusing -refocussed -refocusses -refocussing -refolded -refolding -reforestation -reform -reformable -reformat -reformation -reformations -reformative -reformatted -reformatting -reformed -reformer -reformers -reforming -reformist -reformists -reforms -reformulate -reformulated -reformulates -reformulating -reformulation -reformulations -refract -refracted -refracting -refraction -refractions -refractive -refractors -refractory -refracts -refrain -refrained -refraining -refrains -refreeze -refresh -refreshable -refreshed -refresher -refreshes -refreshing -refreshingly -refreshment -refreshments -refrigerant -refrigerants -refrigerate -refrigerated -refrigeration -refrigerator -refrigerators -refs -refuel -refuelled -refuelling -refuels -refuge -refugee -refugees -refuges -refund -refundable -refunded -refunding -refunds -refurbish -refurbished -refurbishing -refurbishment -refurbishments -refusal -refusals -refuse -refused -refuseniks -refuses -refusing -refutable -refutation -refutations -refute -refuted -refutes -refuting -regain -regained -regaining -regains -regal -regale -regaled -regales -regalia -regaling -regality -regally -regard -regarded -regarding -regardless -regards -regatta -regattas -regelate -regency -regenerate -regenerated -regenerates -regenerating -regeneration -regenerations -regenerative -regent -regents -reggae -regicide -regime -regimen -regimens -regiment -regimental -regimentation -regimented -regiments -regimes -regina -reginas -region -regional -regionalisation -regionalism -regionally -regions -register -registered -registering -registers -registrable -registrar -registrars -registration -registrations -registries -registry -regrading -regress -regressed -regresses -regressing -regression -regressions -regressive -regret -regretful -regretfully -regrets -regrettable -regrettably -regretted -regretting -regroup -regrouped -regrouping -regrow -regrowth -regular -regularisation -regularise -regularised -regularities -regularity -regularly -regulars -regulate -regulated -regulates -regulating -regulation -regulations -regulative -regulator -regulators -regulatory -regurgitate -regurgitated -regurgitating -regurgitation -rehabilitate -rehabilitated -rehabilitating -rehabilitation -rehash -rehashed -rehashes -rehashing -reheard -rehearing -rehears -rehearsal -rehearsals -rehearse -rehearsed -rehearses -rehearsing -reheat -reheated -reheating -reheats -rehouse -rehoused -rehousing -rehydrate -reich -reification -reify -reign -reigned -reigning -reigns -reimburse -reimbursed -reimbursement -reimburses -reimbursing -reimplementation -reimplemented -reimplementing -reimporting -reimpose -reimposed -rein -reincarnate -reincarnated -reincarnating -reincarnation -reincarnations -reindeer -reined -reinfection -reinforce -reinforced -reinforcement -reinforcements -reinforces -reinforcing -reining -reinitialisation -reinitialise -reinitialised -reinitialising -reins -reinsert -reinserted -reinstall -reinstalled -reinstalling -reinstate -reinstated -reinstatement -reinstates -reinstating -reinsurance -reintegration -reinterpret -reinterpretation -reinterpreted -reinterpreting -reintroduce -reintroduced -reintroduces -reintroducing -reintroduction -reintroductions -reinvent -reinvented -reinventing -reinvention -reinventions -reinvents -reinvest -reinvested -reinvestigation -reinvestment -reinvigorate -reinvigorated -reissue -reissued -reissues -reissuing -reiterate -reiterated -reiterates -reiterating -reiteration -reject -rejected -rejecting -rejection -rejections -rejects -rejoice -rejoiced -rejoices -rejoicing -rejoicings -rejoin -rejoinder -rejoinders -rejoined -rejoining -rejoins -rejustified -rejuvenate -rejuvenated -rejuvenating -rejuvenation -rejuvenations -rejuvenatory -rekindle -rekindled -relabel -relabelled -relabelling -relabellings -relaid -relapse -relapsed -relapses -relapsing -relate -related -relatedness -relates -relating -relation -relational -relationally -relations -relationship -relationships -relative -relatively -relatives -relativism -relativist -relativistic -relativistically -relativists -relativity -relator -relaunch -relaunched -relaunching -relax -relaxant -relaxants -relaxation -relaxations -relaxed -relaxes -relaxing -relaxingly -relay -relayed -relaying -relays -relearn -relearning -releasable -release -released -releases -releasing -relegate -relegated -relegates -relegating -relegation -relent -relented -relenting -relentless -relentlessly -relentlessness -relents -relevance -relevancy -relevant -relevantly -reliabilities -reliability -reliable -reliably -reliance -reliant -relic -relics -relict -relicts -relied -relief -reliefs -relies -relieve -relieved -relieves -relieving -relight -relighting -religion -religions -religiosity -religious -religiously -religiousness -relined -relink -relinked -relinking -relinquish -relinquished -relinquishes -relinquishing -reliquaries -reliquary -relish -relished -relishes -relishing -relit -relive -relived -relives -reliving -reload -reloaded -reloading -reloads -relocatable -relocate -relocated -relocates -relocating -relocation -relocations -relocked -reluctance -reluctant -reluctantly -rely -relying -rem -remade -remain -remainder -remaindered -remaindering -remainders -remained -remaining -remains -remake -remakes -remaking -remand -remanded -remands -remap -remaps -remark -remarkable -remarkably -remarked -remarking -remarks -remarriage -remarried -remarry -remaster -remastered -remastering -remasters -rematch -rematching -rematerialised -remediable -remedial -remedied -remedies -remedy -remedying -remember -remembered -remembering -remembers -remembrance -remembrances -remind -reminded -reminder -reminders -reminding -reminds -reminisce -reminisced -reminiscence -reminiscences -reminiscent -reminiscently -reminisces -reminiscing -remiss -remission -remissions -remit -remits -remittal -remittance -remittances -remitted -remitting -remix -remixed -remixes -remnant -remnants -remodel -remodelled -remodelling -remonstrance -remonstrate -remonstrated -remonstrating -remonstration -remonstrations -remorse -remorseful -remorsefully -remorseless -remorselessly -remote -remotely -remoteness -remoter -remotest -remould -remount -remounted -remounts -removable -removal -removals -remove -removed -remover -removers -removes -removing -remunerate -remunerated -remuneration -remunerative -remus -renaissance -renal -rename -renamed -renames -renaming -render -rendered -rendering -renderings -renders -rendezvous -rendezvoused -rending -rendition -renditions -rends -renegade -renegades -renege -reneged -reneging -renegotiate -renegotiated -renegotiating -renegotiation -renew -renewable -renewal -renewals -renewed -renewing -renews -renormalisation -renounce -renounced -renouncement -renounces -renouncing -renovate -renovated -renovating -renovation -renovations -renown -renowned -rent -rental -rentals -rented -renter -renters -rentiers -renting -rents -renumber -renumbered -renumbering -renunciation -renunciations -reoccupation -reoccupied -reoccupy -reoccupying -reoccur -reopen -reopened -reopening -reopens -reorder -reordered -reordering -reorders -reorganisation -reorganisations -reorganise -reorganised -reorganises -reorganising -reorientated -reorientates -reorientation -rep -repack -repackage -repackaged -repacked -repacking -repaid -repaint -repainted -repainting -repair -repairable -repaired -repairer -repairers -repairing -repairman -repairs -repaper -reparation -reparations -repartee -repartition -repartitioned -repartitioning -repast -repasts -repatriate -repatriated -repatriating -repatriation -repatriations -repay -repayable -repaying -repayment -repayments -repays -repeal -repealed -repealing -repeals -repeat -repeatability -repeatable -repeatably -repeated -repeatedly -repeater -repeaters -repeating -repeats -repel -repelled -repellent -repelling -repellingly -repels -repent -repentance -repentant -repentantly -repented -repenting -repents -repercussion -repercussions -repertoire -repertoires -repertory -repetition -repetitions -repetitious -repetitive -repetitively -repetitiveness -rephrase -rephrased -rephrases -rephrasing -repine -repined -repining -replace -replaceable -replaced -replacement -replacements -replaces -replacing -replanning -replant -replanted -replanting -replay -replayed -replaying -replays -replenish -replenished -replenishing -replenishment -replete -replica -replicable -replicas -replicate -replicated -replicates -replicating -replication -replications -replicator -replicators -replied -replier -repliers -replies -replotted -replug -replugged -replugging -reply -replying -repopulate -repopulated -report -reportable -reportage -reported -reportedly -reporter -reporters -reporting -reports -repose -reposed -reposes -reposing -reposition -repositioned -repositioning -repositions -repositories -repository -repossess -repossessed -repossessing -repossession -repossessions -reprehend -reprehensible -represent -representable -representation -representational -representations -representative -representativeness -representatives -represented -representing -represents -repress -repressed -represses -repressing -repression -repressions -repressive -repressively -reprieve -reprieved -reprimand -reprimanded -reprimanding -reprimands -reprint -reprinted -reprinting -reprints -reprisal -reprisals -reprise -reproach -reproached -reproaches -reproachful -reproachfully -reproachfulness -reproaching -reprobate -reprobates -reprocess -reprocessed -reprocessing -reproduce -reproduced -reproduces -reproducibility -reproducible -reproducibly -reproducing -reproduction -reproductions -reproductive -reproductively -reprogram -reprogrammable -reprogramme -reprogrammed -reprogramming -reprojected -reproof -reproofs -reprove -reproved -reprovingly -reps -reptile -reptiles -reptilian -reptilians -republic -republican -republicanism -republicans -republication -republics -republish -republished -republishes -republishing -repudiate -repudiated -repudiates -repudiating -repudiation -repugnance -repugnant -repulse -repulsed -repulsing -repulsion -repulsions -repulsive -repulsively -repulsiveness -repurchase -reputable -reputably -reputation -reputations -repute -reputed -reputedly -reputes -request -requested -requester -requesting -requests -requiem -requiems -require -required -requirement -requirements -requires -requiring -requisite -requisites -requisition -requisitioned -requisitioning -requisitions -requital -requite -requited -reran -reread -rereading -rereads -reregistration -rerolled -reroute -rerouted -rerouteing -reroutes -rerouting -rerun -rerunning -reruns -resale -rescale -rescaled -rescales -rescaling -rescan -rescanned -rescanning -rescans -reschedule -rescheduled -rescheduling -rescind -rescinded -rescinding -rescue -rescued -rescuer -rescuers -rescues -rescuing -resea -resealed -research -researched -researcher -researchers -researches -researching -reseated -reseeding -reselect -reselected -reselection -resell -reseller -resellers -reselling -resemblance -resemblances -resemble -resembled -resembles -resembling -resend -resending -resent -resented -resentful -resentfully -resenting -resentment -resentments -resents -reservation -reservations -reserve -reserved -reserver -reserves -reserving -reservists -reservoir -reservoirs -reset -resets -resettable -resetting -resettle -resettled -resettlement -resettling -reshape -reshaped -reshapes -reshaping -resharpen -resharpened -resharpening -reshow -reshowing -reshuffle -reshuffled -reshuffles -reshuffling -reside -resided -residence -residences -residency -resident -residential -residents -resides -residing -residual -residuals -residuary -residue -residues -residuum -resign -resignal -resignation -resignations -resigned -resignedly -resigning -resigns -resilience -resilient -resin -resinous -resins -resiny -resist -resistance -resistances -resistant -resisted -resistible -resisting -resistive -resistively -resistivity -resistor -resistors -resists -resit -resiting -resits -resize -resizing -resold -resolute -resolutely -resolution -resolutions -resolvability -resolvable -resolve -resolved -resolvent -resolver -resolvers -resolves -resolving -resonance -resonances -resonant -resonantly -resonate -resonated -resonates -resonating -resonator -resonators -resort -resorted -resorting -resorts -resound -resounded -resounding -resoundingly -resounds -resource -resourced -resourceful -resourcefulness -resources -resourcing -respecified -respecify -respect -respectability -respectable -respectably -respected -respectful -respectfully -respecting -respective -respectively -respects -respiration -respirator -respirators -respiratory -respire -respired -respite -resplendent -respond -responded -respondent -respondents -responder -responders -responding -responds -response -responses -responsibilities -responsibility -responsible -responsibly -responsive -responsively -responsiveness -respray -resprayed -resprays -rest -restart -restartable -restarted -restarting -restarts -restate -restated -restatement -restates -restating -restaurant -restaurants -restaurateur -restaurateurs -rested -restful -restfulness -resting -restitution -restive -restiveness -restless -restlessly -restlessness -restock -restocking -restoration -restorations -restorative -restore -restored -restorer -restorers -restores -restoring -restrain -restrained -restraining -restrains -restraint -restraints -restrict -restricted -restricting -restriction -restrictions -restrictive -restrictively -restricts -restroom -restructure -restructured -restructures -restructuring -rests -restyled -resubmission -resubmissions -resubmit -resubmits -resubmitted -resubmitting -resubstitute -result -resultant -resulted -resulting -results -resume -resumed -resumes -resuming -resumption -resupply -resurface -resurfaced -resurfacing -resurgence -resurgent -resurrect -resurrected -resurrecting -resurrection -resurrects -resuscitate -resuscitated -resuscitating -resuscitation -retail -retailed -retailer -retailers -retailing -retails -retain -retained -retainer -retainers -retaining -retains -retake -retaken -retakes -retaking -retaliate -retaliated -retaliates -retaliating -retaliation -retaliatory -retard -retardant -retardation -retarded -retarding -retards -retch -retched -retching -retell -retelling -retention -retentions -retentive -retentiveness -retentivity -retest -retested -retesting -retests -rethink -rethinking -rethought -reticence -reticent -reticular -reticulated -reticulation -reticule -reticules -reticulum -retied -retina -retinal -retinas -retinitis -retinue -retinues -retire -retired -retiree -retirement -retirements -retires -retiring -retitle -retitled -retitling -retold -retook -retort -retorted -retorting -retorts -retouch -retouched -retouching -retrace -retraced -retraces -retracing -retract -retractable -retracted -retracting -retraction -retractions -retracts -retrain -retrained -retraining -retral -retransmission -retransmissions -retransmit -retransmits -retransmitted -retransmitting -retread -retreads -retreat -retreated -retreating -retreats -retrench -retrenchment -retrial -retribution -retributive -retried -retries -retrievable -retrieval -retrievals -retrieve -retrieved -retriever -retrievers -retrieves -retrieving -retro -retroactive -retroactively -retrofit -retrofitted -retrofitting -retrograde -retrogressive -retrospect -retrospection -retrospective -retrospectively -retrospectives -retroviruses -retry -retrying -retsina -retted -retune -retuning -return -returnable -returned -returnees -returning -returns -retype -retyped -retypes -retyping -reunification -reunified -reunify -reunion -reunions -reunite -reunited -reunites -reuniting -reusable -reuse -reused -reuses -reusing -rev -revaluation -revaluations -revalue -revalued -revalues -revamp -revamped -revamping -revamps -revanchist -reveal -revealable -revealed -revealing -revealingly -reveals -reveille -revel -revelation -revelations -revelatory -revelled -reveller -revellers -revelling -revelries -revelry -revels -revenant -revenge -revenged -revengeful -revenges -revenging -revenue -revenues -reverberant -reverberate -reverberated -reverberates -reverberating -reverberation -reverberations -revere -revered -reverence -reverend -reverent -reverential -reverentially -reverently -reveres -reverie -reveries -revering -reversal -reversals -reverse -reversed -reverser -reverses -reversibility -reversible -reversibly -reversing -reversion -revert -reverted -reverting -reverts -review -reviewable -reviewed -reviewer -reviewers -reviewing -reviews -revile -reviled -reviling -revisable -revisal -revise -revised -reviser -revises -revising -revision -revisionary -revisionism -revisionist -revisionists -revisions -revisit -revisited -revisiting -revisits -revitalisation -revitalise -revitalised -revitalising -revival -revivalism -revivalist -revivalists -revivals -revive -revived -reviver -revives -revivify -revivifying -reviving -revocable -revocation -revocations -revoke -revoked -revoker -revokers -revokes -revoking -revolt -revolted -revolting -revoltingly -revolts -revolution -revolutionaries -revolutionary -revolutionise -revolutionised -revolutionises -revolutionising -revolutions -revolve -revolved -revolver -revolvers -revolves -revolving -revs -revue -revues -revulsion -revved -revving -reward -rewarded -rewarding -rewards -reweighed -rewind -rewindable -rewinding -rewinds -rewire -rewired -rewiring -reword -reworded -rewording -rewordings -rework -reworked -reworking -reworks -rewound -rewrap -rewritable -rewrite -rewrites -rewriting -rewritings -rewritten -rewrote -rhapsodic -rhapsodical -rhapsodies -rhapsody -rhea -rhein -rhenium -rheological -rheology -rheostat -rhesus -rhetoric -rhetorical -rhetorically -rhetorician -rhetoricians -rheumatic -rheumatics -rheumatism -rheumatoid -rheumatology -rhine -rhinestone -rhinitis -rhino -rhinoceros -rhinoceroses -rhizome -rho -rhodesia -rhodium -rhododendron -rhododendrons -rhombic -rhomboids -rhombus -rhombuses -rhubarb -rhumbas -rhyme -rhymed -rhymer -rhymes -rhyming -rhythm -rhythmic -rhythmical -rhythmically -rhythms -ria -rial -rials -rialto -rib -ribald -ribaldry -ribbed -ribbing -ribbon -ribbons -ribcage -riboflavin -ribonucleic -ribosomal -ribosome -ribosomes -ribs -rice -rich -richer -riches -richest -richly -richness -rick -rickets -rickety -ricking -ricks -ricksha -rickshas -rickshaw -rickshaws -ricochet -ricocheted -ricocheting -rid -riddance -ridden -ridding -riddle -riddled -riddles -riddling -ride -rider -riders -rides -ridge -ridged -ridges -ridicule -ridiculed -ridicules -ridiculing -ridiculous -ridiculously -ridiculousness -riding -ridings -rids -rife -riff -riffle -riffled -riffs -rifle -rifled -rifleman -riflemen -rifles -rifling -riflings -rift -rifting -rifts -rig -rigged -rigger -riggers -rigging -right -righted -righten -righteous -righteously -righteousness -righter -rightful -rightfully -righthand -righthanded -righthandedness -righthander -righthanders -righting -rightist -rightly -rightminded -rightmost -rightness -rights -rightthinking -rightward -rightwards -rightwing -rightwinger -rightwingers -rigid -rigidifies -rigidify -rigidities -rigidity -rigidly -rigmarole -rigor -rigorous -rigorously -rigour -rigours -rigs -rile -riled -riles -riling -rill -rills -rim -rime -rimless -rimmed -rims -rind -rinds -ring -ringed -ringer -ringers -ringing -ringingly -ringleader -ringleaders -ringless -ringlet -ringlets -ringmaster -rings -ringside -ringworm -rink -rinks -rinse -rinsed -rinses -rinsing -riot -rioted -rioter -rioters -rioting -riotous -riotously -riots -rip -ripcord -ripe -ripely -ripen -ripened -ripeness -ripening -ripens -riper -ripest -riping -ripoff -riposte -riposted -ripostes -ripped -ripper -rippers -ripping -ripple -rippled -ripples -rippling -rips -ripstop -rise -risen -riser -risers -rises -risible -rising -risings -risk -risked -riskier -riskiest -riskiness -risking -risks -risky -risotto -risque -rissole -rissoles -rite -rites -ritual -ritualised -ritualistic -ritualistically -ritually -rituals -rival -rivalled -rivalling -rivalries -rivalry -rivals -riven -river -riverine -rivers -riverside -rivet -riveted -riveter -riveting -rivetingly -rivets -riviera -rivulet -rivulets -roach -roaches -road -roadblock -roadblocks -roadhouse -roadmap -roads -roadshow -roadshows -roadside -roadsides -roadsigns -roadster -roadsweepers -roadway -roadways -roadworks -roadworthy -roam -roamed -roamer -roaming -roams -roan -roar -roared -roarer -roaring -roars -roast -roasted -roaster -roasting -roasts -rob -robbed -robber -robberies -robbers -robbery -robbing -robe -robed -robes -robin -robins -robot -robotic -robotics -robots -robs -robust -robustly -robustness -roc -rock -rockbottom -rocked -rocker -rockers -rockery -rocket -rocketed -rocketing -rocketry -rockets -rockfall -rockfalls -rockier -rockiest -rocking -rocks -rocksolid -rocky -rococo -rocs -rod -rode -rodent -rodents -rodeo -rodeos -rods -roe -roebuck -roentgen -roes -rogue -roguery -rogues -roguish -roguishly -roguishness -roister -roistering -role -roles -roll -rollcall -rolled -roller -rollercoaster -rollers -rollerskating -rollicking -rolling -rolls -rolypoly -rom -roman -romance -romanced -romancer -romances -romancing -romans -romantic -romantically -romanticised -romanticises -romanticising -romanticism -romantics -romany -rome -rommel -romp -romped -romper -romping -romps -romulus -rondavel -roo -roof -roofed -roofer -roofgarden -roofing -roofings -roofless -roofs -rooftop -rooftops -rooibos -rook -rookeries -rookery -rookies -rooks -room -roomful -roomier -roomiest -roommate -rooms -roomy -roost -roosted -rooster -roosters -roosting -roosts -root -rooted -rooting -rootings -rootless -roots -rope -roped -ropes -roping -rosaries -rosary -rose -rosebud -rosebuds -rosebush -rosemary -roses -rosette -rosettes -rosewood -rosier -rosiest -rosily -rosin -roster -rostering -rosters -rostrum -rostrums -rosy -rot -rota -rotary -rotas -rotatable -rotate -rotated -rotates -rotating -rotation -rotational -rotationally -rotations -rotator -rotators -rotatory -rote -rotor -rotors -rots -rotted -rotten -rottenly -rottenness -rotter -rotting -rotund -rotunda -rotundity -rouble -roubles -rouge -rouged -rouges -rough -roughage -roughed -roughen -roughened -roughens -rougher -roughest -roughie -roughing -roughly -roughness -roughs -roughshod -roulette -round -roundabout -roundabouts -rounded -roundel -roundels -rounder -rounders -roundest -roundhouse -rounding -roundish -roundly -roundness -rounds -roundtheclock -roundup -roundups -rouse -roused -rouses -rousing -rout -route -routed -routeing -router -routers -routes -routine -routinely -routines -routing -routs -rove -roved -rover -rovers -roves -roving -rovings -row -rowboat -rowboats -rowdier -rowdiest -rowdily -rowdiness -rowdy -rowdyism -rowed -rower -rowers -rowing -rows -royal -royalist -royalists -royally -royals -royalties -royalty -ruanda -rub -rubbed -rubber -rubberised -rubbers -rubberstamp -rubberstamped -rubberstamping -rubbery -rubbing -rubbings -rubbish -rubbished -rubbishes -rubbishing -rubbishy -rubble -rubbles -rubella -rubicon -rubicund -rubidium -rubies -rubric -rubs -ruby -ruck -rucks -rucksack -rucksacks -ruction -ructions -rudder -rudderless -rudders -ruddiness -ruddy -rude -rudely -rudeness -ruder -rudest -rudimentary -rudiments -rue -rueful -ruefully -ruefulness -rues -ruff -ruffian -ruffians -ruffle -ruffled -ruffles -ruffling -ruffs -rug -rugby -rugged -ruggedly -ruggedness -rugs -ruin -ruination -ruinations -ruined -ruiner -ruining -ruinous -ruinously -ruins -rule -rulebook -rulebooks -ruled -ruler -rulers -rules -ruling -rulings -rum -rumania -rumba -rumbas -rumble -rumbled -rumbles -rumbling -rumblings -rumbustious -rumen -ruminant -ruminants -ruminate -ruminated -ruminating -rumination -ruminations -ruminative -ruminatively -rummage -rummaged -rummages -rummaging -rummy -rumour -rumoured -rumours -rump -rumple -rumpled -rumpling -rumps -rumpus -rumpuses -run -runaway -rundown -rune -runes -rung -rungs -runnable -runner -runners -runnersup -runnerup -runnier -runniest -running -runny -runofthemill -runs -runt -runts -runway -runways -rupee -rupees -rupert -rupture -ruptured -ruptures -rupturing -rural -ruralist -rurally -ruse -rush -rushed -rushes -rushhour -rushier -rushing -rusk -rusks -russet -russia -russian -rust -rusted -rustic -rustically -rusticate -rusticated -rusticity -rustics -rustier -rustiest -rustiness -rusting -rustle -rustled -rustler -rustlers -rustles -rustling -rustproof -rusts -rusty -rut -ruth -ruthless -ruthlessly -ruthlessness -ruts -rutted -rwanda -rye -sabbat -sabbath -sabbaths -sabbatical -sabbaticals -saber -sable -sables -sabotage -sabotaged -sabotages -sabotaging -saboteur -saboteurs -sabra -sabras -sabre -sabres -sabretoothed -sac -saccharides -saccharin -saccharine -sacerdotal -sachet -sachets -sack -sackcloth -sacked -sackful -sackfuls -sacking -sacks -sacral -sacrament -sacramental -sacraments -sacred -sacredly -sacredness -sacrifice -sacrificed -sacrifices -sacrificial -sacrificing -sacrilege -sacrilegious -sacristy -sacrosanct -sacrum -sacs -sad -sadden -saddened -saddening -saddens -sadder -saddest -saddle -saddlebag -saddlebags -saddled -saddler -saddlers -saddles -saddling -sadism -sadist -sadistic -sadistically -sadists -sadly -sadness -sadomasochism -sadomasochistic -sadsack -safari -safaris -safe -safeguard -safeguarded -safeguarding -safeguards -safely -safeness -safer -safes -safest -safeties -safety -saffron -sag -saga -sagacious -sagaciously -sagacity -sagas -sage -sagely -sages -sagest -sagged -sagging -sago -sags -sahara -sahib -said -saigon -sail -sailcloth -sailed -sailer -sailing -sailings -sailmaker -sailor -sailors -sails -saint -sainted -sainthood -saintlier -saintliest -saintliness -saintly -saints -saipan -sake -sakes -saki -salaam -salacious -salad -salads -salamander -salamanders -salami -salamis -salaried -salaries -salary -sale -saleability -saleable -salem -sales -salesgirl -salesman -salesmanship -salesmen -salespeople -salesperson -saleswoman -salicylic -salience -salient -saline -salinity -saliva -salivary -salivas -salivate -salivating -salivation -salivations -sallied -sallies -sallow -sally -sallying -salmon -salmonella -salmons -salome -salon -salons -saloon -saloons -salsa -salt -salted -saltier -saltiest -saltiness -saltpetre -salts -saltwater -salty -salubrious -salubrity -salutary -salutation -salutations -salute -saluted -salutes -saluting -salvage -salvageable -salvaged -salvager -salvages -salvaging -salvation -salve -salved -salver -salvers -salving -salvo -sam -samba -sambas -same -sameness -samizdat -samoa -samosas -samovar -sampan -sample -sampled -sampler -samplers -samples -sampling -samplings -samurai -san -sanatorium -sanctification -sanctified -sanctifies -sanctify -sanctifying -sanctimonious -sanction -sanctioned -sanctioning -sanctions -sanctity -sanctuaries -sanctuary -sanctum -sand -sandal -sandalled -sandals -sandalwood -sandbag -sandbagged -sandbags -sandbank -sandbanks -sandcastle -sandcastles -sanddune -sanded -sander -sandier -sandiest -sanding -sandman -sandpaper -sandpapering -sandpiper -sandpipers -sandpit -sands -sandstone -sandstones -sandwich -sandwiched -sandwiches -sandwiching -sandy -sane -sanely -saner -sanest -sang -sanguine -sanitary -sanitation -sanitise -sanitised -sanitiser -sanitisers -sanity -sank -sanserif -sanskrit -santiago -sap -sapient -sapling -saplings -sapped -sapper -sappers -sapphire -sapphires -sapping -saps -sarcasm -sarcasms -sarcastic -sarcastically -sarcoma -sarcophagi -sarcophagus -sardine -sardines -sardinia -sardonic -sardonically -sarge -sari -saris -sarong -sartorial -sartorially -sash -sashes -sat -satan -satanic -satanically -satanism -satchel -satchels -sated -satellite -satellites -satiate -satiated -satiation -satin -sating -satins -satinwood -satiny -satire -satires -satiric -satirical -satirically -satirise -satirised -satirises -satirising -satirist -satirists -satisfaction -satisfactions -satisfactorily -satisfactory -satisfiable -satisfied -satisfies -satisfy -satisfying -satisfyingly -satrap -satraps -satsumas -saturate -saturated -saturates -saturating -saturation -saturday -saturn -saturnalia -saturnine -satyr -satyric -satyrs -sauce -saucepan -saucepans -saucer -saucers -sauces -saucier -sauciest -saucily -sauciness -saucy -saudi -saudis -sauerkraut -sauna -saunas -saunter -sauntered -sauntering -saunters -sausage -sausages -saute -savage -savaged -savagely -savagery -savages -savaging -savanna -savannah -savant -savants -save -saved -saveloy -saver -savers -saves -saving -savings -saviour -saviours -savour -savoured -savouring -savours -savoury -savvy -saw -sawdust -sawed -sawing -sawmill -sawmills -sawn -saws -sawtooth -sawyer -sawyers -saxon -saxons -saxony -saxophone -saxophones -saxophonist -say -saying -sayings -says -scab -scabbard -scabbards -scabbed -scabby -scabies -scabs -scaffold -scaffolding -scaffolds -scalability -scalable -scalar -scalars -scald -scalded -scalding -scalds -scale -scaled -scalene -scales -scaling -scallop -scalloped -scallops -scalp -scalped -scalpel -scalpels -scalping -scalps -scaly -scam -scamp -scamped -scamper -scampered -scampering -scampi -scams -scan -scandal -scandalise -scandalised -scandalous -scandalously -scandals -scanned -scanner -scanners -scanning -scans -scansion -scant -scantier -scantiest -scantily -scantiness -scanty -scape -scapegoat -scapegoats -scapula -scar -scarab -scarce -scarcely -scarceness -scarcer -scarcest -scarcities -scarcity -scare -scarecrow -scarecrows -scared -scaremonger -scaremongering -scares -scarf -scarfs -scarier -scariest -scarified -scarify -scarifying -scarily -scaring -scarlet -scarlets -scarp -scarred -scarring -scars -scarves -scary -scat -scathe -scathed -scathing -scathingly -scatological -scatter -scattered -scatterer -scatterers -scattering -scatterings -scatters -scavenge -scavenged -scavenger -scavengers -scavenging -scenario -scene -scenery -scenes -scenic -scenically -scent -scented -scenting -scentless -scents -sceptic -sceptical -sceptically -scepticism -sceptics -sceptre -sceptred -sceptres -schedule -scheduled -scheduler -schedulers -schedules -scheduling -schema -schemas -schemata -schematic -schematically -schematics -scheme -schemed -schemer -schemes -scheming -scherzi -scherzo -schism -schismatic -schismatics -schisms -schist -schistosomiasis -schists -schizoid -schizophrenia -schizophrenic -schizophrenically -schizophrenics -schmalz -schnapps -scholar -scholarly -scholars -scholarship -scholarships -scholastic -scholasticism -school -schoolboy -schoolboys -schoolchild -schoolchildren -schooldays -schooled -schoolgirl -schoolgirls -schoolhouse -schooling -schoolmaster -schoolmasters -schoolmates -schoolmistress -schoolroom -schools -schoolteacher -schoolteachers -schooner -schooners -schwa -schwas -sciatica -science -sciences -scientific -scientifically -scientist -scientists -scifi -scimitar -scimitars -scintigraphy -scintillate -scintillated -scintillating -scintillation -scintillations -scintillator -scintillators -scissor -scissored -scissors -sclerosis -scoff -scoffed -scoffing -scold -scolded -scolder -scolding -scolds -scone -scones -scoop -scooped -scooper -scoopful -scooping -scoops -scoot -scooter -scooters -scooting -scoots -scope -scopes -scorch -scorched -scorcher -scorches -scorching -score -scoreboard -scoreboards -scorecard -scorecards -scored -scoreless -scoreline -scorer -scorers -scores -scoring -scorn -scorned -scornful -scornfully -scorning -scorns -scorpion -scorpions -scot -scotch -scotched -scotches -scotfree -scotland -scots -scotsman -scottish -scoundrel -scoundrels -scour -scoured -scourge -scourged -scourges -scourging -scouring -scours -scout -scouted -scouting -scoutmaster -scoutmasters -scouts -scowl -scowled -scowling -scowls -scrabble -scrabbled -scrabbling -scram -scramble -scrambled -scrambler -scramblers -scrambles -scrambling -scrams -scrap -scrapbook -scrapbooks -scrape -scraped -scraper -scrapers -scrapes -scrapie -scraping -scrapings -scrapped -scrappier -scrappiest -scrapping -scrappy -scraps -scrapyard -scrapyards -scratch -scratched -scratches -scratchier -scratchiest -scratchiness -scratching -scratchings -scratchy -scrawl -scrawled -scrawling -scrawls -scrawnier -scrawniest -scrawny -scream -screamed -screamer -screamers -screaming -screamingly -screams -scree -screech -screeched -screeches -screechier -screechiest -screeching -screechy -screed -screeds -screen -screened -screening -screenings -screenplay -screenplays -screens -screenwriter -screw -screwdriver -screwdrivers -screwed -screwing -screws -screwy -scribal -scribble -scribbled -scribbler -scribblers -scribbles -scribbling -scribblings -scribe -scribed -scribes -scribing -scrimped -script -scripted -scripting -scriptorium -scripts -scriptural -scripture -scriptures -scriptwriter -scriptwriters -scriptwriting -scroll -scrollable -scrolled -scrolling -scrolls -scrooge -scrooges -scrotum -scrub -scrubbed -scrubber -scrubbers -scrubbing -scrubby -scrubland -scrubs -scruff -scruffier -scruffy -scrum -scrumhalf -scrummage -scrummaging -scrums -scrunched -scruple -scruples -scrupulous -scrupulously -scrupulousness -scrutineers -scrutinies -scrutinise -scrutinised -scrutinises -scrutinising -scrutiny -scuba -scubas -scud -scudded -scudding -scuds -scuff -scuffed -scuffing -scuffle -scuffled -scuffles -scuffling -scull -sculled -sculler -sculleries -scullery -sculling -sculls -sculpt -sculpted -sculpting -sculptor -sculptors -sculptress -sculptural -sculpture -sculptured -sculptures -scum -scupper -scuppered -scurried -scurries -scurrilous -scurry -scurrying -scurryings -scurvy -scuttle -scuttled -scuttles -scuttling -scythe -scythed -scythes -scything -sea -seabed -seabird -seabirds -seaboard -seaborne -seacow -seacows -seafarer -seafarers -seafaring -seafood -seafront -seagod -seagoing -seagreen -seagull -seagulls -seal -sealant -sealants -sealed -sealer -sealers -sealing -sealion -seals -seam -seamail -seaman -seamanship -seamed -seamen -seamier -seamless -seamlessly -seams -seamstress -seamstresses -seamy -seance -seances -seaplane -seaplanes -seaport -seaports -sear -search -searched -searcher -searchers -searches -searching -searchingly -searchlight -searchlights -seared -searing -sears -seas -seascape -seascapes -seashells -seashore -seashores -seasick -seasickness -seaside -season -seasonable -seasonably -seasonal -seasonality -seasonally -seasoned -seasoner -seasoning -seasons -seat -seated -seating -seatings -seats -seattle -seaward -seawards -seawater -seaweed -seaweeds -seaworthy -sebaceous -sec -secant -secateurs -secede -seceded -secedes -seceding -secession -secessionist -secessionists -secessions -seclude -secluded -seclusion -second -secondaries -secondarily -secondary -secondbest -secondclass -seconded -seconder -seconders -secondhand -seconding -secondly -secondment -secondments -secondrate -seconds -secrecy -secret -secretarial -secretariat -secretariats -secretaries -secretary -secretaryship -secrete -secreted -secretes -secreting -secretion -secretions -secretive -secretively -secretiveness -secretly -secretory -secrets -sect -sectarian -sectarianism -section -sectional -sectioned -sectioning -sections -sector -sectoral -sectored -sectors -sects -secular -secularisation -secularised -secularism -secularist -secularists -secure -secured -securely -securer -secures -securest -securing -securities -security -sedan -sedate -sedated -sedately -sedateness -sedater -sedates -sedating -sedation -sedative -sedatives -sedentary -sedge -sedges -sediment -sedimentary -sedimentation -sediments -sedition -seditious -seduce -seduced -seducer -seducers -seduces -seducing -seduction -seductions -seductive -seductively -seductiveness -sedulously -see -seeable -seed -seedbed -seeded -seeder -seedier -seediest -seediness -seeding -seedless -seedling -seedlings -seeds -seedy -seeing -seeings -seek -seeker -seekers -seeking -seeks -seem -seemed -seeming -seemingly -seemlier -seemliest -seemly -seems -seen -seep -seepage -seeped -seeping -seeps -seer -seers -sees -seesaw -seesaws -seethe -seethed -seethes -seething -seethrough -segment -segmental -segmentation -segmented -segmenting -segments -segregate -segregated -segregates -segregating -segregation -seine -seisin -seismic -seismogram -seismograph -seismological -seismologist -seismologists -seismology -seismometer -seismometers -seize -seized -seizer -seizes -seizing -seizure -seizures -seldom -select -selectable -selected -selectee -selecting -selection -selections -selective -selectively -selectivity -selector -selectors -selects -selenium -selenology -self -selfcentred -selfcentredness -selfconfidence -selfconfident -selfconscious -selfconsciously -selfconsciousness -selfcontrol -selfcontrolled -selfdefence -selfdestruct -selfdestructed -selfdestructing -selfdestruction -selfdestructive -selfdestructs -selfdiscipline -selfemployed -selfesteem -selfevident -selfgoverning -selfgovernment -selfinflicted -selfinterest -selfish -selfishly -selfishness -selfless -selflessly -selfmade -selfpity -selfportrait -selfportraits -selfrespect -selfrespecting -selfrestraint -selfrighteous -selfrighteously -selfrighteousness -selfsacrifice -selfsacrificing -selfsame -selfsupporting -selftaught -sell -sellable -seller -sellers -selling -sells -selves -semantic -semantically -semantics -semaphore -semaphores -semaphoring -semblance -semblances -semen -semester -semesters -semi -semicircle -semicircular -semicolon -semicolons -semiconducting -semiconductor -semiconductors -semiconscious -semidetached -semifinal -semifinalist -semifinalists -semifinals -seminar -seminaries -seminars -seminary -semite -semites -semitic -semitics -sen -senate -senates -senator -senatorial -senators -send -sender -senders -sending -sends -senegal -senhor -senhors -senile -senility -senior -seniority -seniors -senora -senoritas -sensation -sensational -sensationalised -sensationalism -sensationalist -sensationalistic -sensationally -sensations -sense -sensed -senseless -senselessly -senselessness -senses -sensibilities -sensibility -sensible -sensibleness -sensibly -sensing -sensings -sensitisation -sensitised -sensitisers -sensitive -sensitively -sensitiveness -sensitivities -sensitivity -sensor -sensors -sensory -sensual -sensuality -sensually -sensuous -sensuously -sensuousness -sent -sentence -sentenced -sentences -sentencing -sentential -sententious -sententiously -sentience -sentient -sentiment -sentimental -sentimentalised -sentimentalism -sentimentalist -sentimentality -sentimentally -sentiments -sentinel -sentinels -sentries -sentry -seoul -separability -separable -separate -separated -separately -separateness -separates -separating -separation -separations -separatism -separatist -separatists -separator -separators -sepia -september -septet -septets -septic -septicaemia -sepulchral -sepulchre -sepulchres -sequel -sequels -sequence -sequenced -sequencer -sequencers -sequences -sequencing -sequent -sequential -sequentially -sequestered -sequestrated -sequestration -sequin -sequinned -sequins -sequoia -seraglio -serai -seraphic -seraphically -seraphim -seraphs -serenade -serenader -serenades -serenading -serenata -serendipitous -serendipitously -serendipity -serene -serenely -serener -serenest -serenity -serf -serfdom -serfhood -serfs -serge -sergeant -sergeants -serial -serialisation -serialisations -serialise -serialised -serialising -serially -serials -series -serif -serifed -serifs -serious -seriously -seriousness -sermon -sermons -serological -serology -seronegative -serotonin -serpent -serpentine -serpents -serrate -serrated -serried -serum -serums -servant -servants -serve -served -server -servers -serves -service -serviceability -serviceable -serviced -serviceman -servicemen -services -servicing -serviette -servile -servilely -servility -serving -servings -servitude -sesame -sesotho -sessile -session -sessions -set -setback -setbacks -seth -sets -setswana -settee -settees -setter -setters -setting -settings -settle -settled -settlement -settlements -settler -settlers -settles -settling -setts -setup -seven -sevenfold -sevenpence -sevens -seventeen -seventeenth -seventh -seventies -seventieth -seventy -sever -severable -several -severally -severance -severe -severed -severely -severer -severest -severing -severity -severs -sew -sewage -sewed -sewer -sewerage -sewerrat -sewers -sewing -sewings -sewn -sews -sex -sexed -sexes -sexier -sexiest -sexily -sexiness -sexing -sexism -sexist -sexists -sexless -sexologists -sexology -sextant -sextants -sextet -sextets -sexton -sextons -sextuplet -sextuplets -sexual -sexualities -sexuality -sexually -sexy -shabbier -shabbiest -shabbily -shabbiness -shabby -shack -shackle -shackled -shackles -shacks -shade -shaded -shadeless -shades -shadier -shadiest -shadily -shading -shadings -shadow -shadowed -shadowing -shadowless -shadows -shadowy -shady -shaft -shafted -shafting -shafts -shag -shagged -shaggiest -shaggy -shags -shah -shahs -shakable -shake -shakeable -shakedown -shaken -shaker -shakers -shakes -shakeup -shakeups -shakier -shakiest -shakily -shaking -shaky -shale -shall -shallot -shallots -shallow -shallower -shallowest -shallowly -shallowness -shallows -sham -shaman -shamanic -shamanism -shamanistic -shamans -shamble -shambled -shambles -shambling -shame -shamed -shamefaced -shamefacedly -shameful -shamefully -shameless -shamelessly -shamelessness -shames -shaming -shammed -shamming -shampoo -shampooed -shampooing -shampoos -shamrock -shams -shandy -shank -shanks -shanties -shanty -shape -shaped -shapeless -shapelier -shapeliest -shapely -shaper -shapers -shapes -shaping -sharable -shard -shards -share -shareable -shared -shareholder -shareholders -shareholding -shareholdings -sharer -shares -shareware -sharing -shark -sharks -sharp -sharpen -sharpened -sharpener -sharpeners -sharpening -sharpens -sharper -sharpest -sharply -sharpness -sharps -shatter -shattered -shattering -shatteringly -shatterproof -shatters -shave -shaved -shaven -shaver -shavers -shaves -shaving -shavings -shaw -shawl -shawls -she -sheaf -shear -sheared -shearer -shearers -shearing -shears -shearwater -shearwaters -sheath -sheathe -sheathed -sheathing -sheaths -sheaves -shed -shedding -sheds -sheen -sheep -sheepdog -sheepdogs -sheepish -sheepishly -sheepishness -sheepskin -sheepskins -sheer -sheered -sheerest -sheerness -sheet -sheeted -sheeting -sheets -sheik -sheikh -sheikhs -sheiks -shekel -shekels -shelf -shell -shellac -shelled -shellfire -shellfish -shelling -shells -shelter -sheltered -sheltering -shelters -shelve -shelved -shelves -shelving -shepherd -shepherded -shepherdess -shepherding -shepherds -sherbet -sherds -sheriff -sheriffs -sherlock -sherries -sherry -shetland -shibboleth -shibboleths -shied -shield -shielded -shielding -shields -shielings -shies -shift -shifted -shifter -shifters -shiftier -shiftily -shiftiness -shifting -shiftless -shifts -shifty -shilling -shimmer -shimmered -shimmering -shimmers -shin -shinbone -shindig -shine -shined -shiner -shines -shingle -shingles -shinier -shiniest -shining -shinned -shinning -shins -shiny -ship -shipboard -shipborne -shipbuilder -shipbuilders -shipbuilding -shipload -shiploads -shipmate -shipmates -shipment -shipments -shipowner -shipowners -shippable -shipped -shipping -ships -shipshape -shipwreck -shipwrecked -shipwrecks -shipwright -shipwrights -shipyard -shipyards -shire -shires -shirk -shirked -shirking -shirt -shirtless -shirts -shirtsleeves -shiver -shivered -shivering -shiveringly -shivers -shivery -shoal -shoals -shock -shocked -shocker -shockers -shocking -shockingly -shocks -shod -shoddier -shoddiest -shoddily -shoddiness -shoddy -shoe -shoebox -shoed -shoehorn -shoeing -shoelace -shoelaces -shoeless -shoemaker -shoemakers -shoes -shoestring -shoestrings -shogun -shoguns -shone -shoo -shooed -shooing -shook -shoot -shooter -shooters -shooting -shootings -shoots -shop -shopfront -shopfronts -shopkeeper -shopkeepers -shopkeeping -shoplift -shoplifted -shoplifter -shoplifters -shoplifting -shopped -shopper -shoppers -shopping -shops -shore -shored -shoreline -shorelines -shores -shoreward -shorewards -shoring -shorn -short -shortage -shortages -shortbread -shortcircuit -shortcircuited -shortcircuiting -shortcoming -shortcomings -shortcrust -shortcut -shortcuts -shorted -shorten -shortened -shortening -shortens -shorter -shortest -shortfall -shortfalls -shorthand -shorting -shortish -shortlist -shortlisted -shortlisting -shortlived -shortly -shortness -shorts -shortsighted -shortsightedly -shortsightedness -shortstaffed -shorttempered -shortterm -shortwinded -shorty -shot -shotgun -shotguns -shots -should -shoulder -shouldered -shouldering -shoulders -shout -shouted -shouter -shouters -shouting -shouts -shove -shoved -shovel -shovelful -shovelled -shoveller -shovelling -shovels -shoves -shoving -show -showcase -showcases -showcasing -showdown -showed -shower -showered -showering -showers -showery -showgirl -showground -showier -showiest -showing -showings -showjumpers -showman -showmanship -showmen -shown -showoff -showpiece -showpieces -showplace -showroom -showrooms -shows -showy -shrank -shrapnel -shred -shredded -shredder -shredders -shredding -shreds -shrew -shrewd -shrewder -shrewdest -shrewdly -shrewdness -shrews -shriek -shrieked -shrieker -shriekers -shrieking -shrieks -shrift -shrill -shrilled -shrillest -shrillness -shrills -shrilly -shrimp -shrimps -shrine -shrines -shrink -shrinkable -shrinkage -shrinking -shrinkingly -shrinks -shrivel -shrivelled -shrivelling -shrivels -shroud -shrouded -shrouding -shrouds -shrub -shrubberies -shrubbery -shrubby -shrubs -shrug -shrugged -shrugging -shrugs -shrunk -shrunken -shudder -shuddered -shuddering -shudders -shuffle -shuffled -shuffler -shufflers -shuffles -shuffling -shun -shunned -shunning -shuns -shunt -shunted -shunter -shunters -shunting -shunts -shushed -shut -shutdown -shutdowns -shuts -shutter -shuttered -shuttering -shutters -shutting -shuttle -shuttlecock -shuttlecocks -shuttled -shuttles -shuttling -shutup -shy -shyer -shyest -shying -shyly -shyness -siam -siamese -siberia -siberian -sibilance -sibilancy -sibilant -sibling -siblings -sibyl -sic -sicilian -sicily -sick -sickbay -sickbed -sicken -sickened -sickening -sickeningly -sickens -sicker -sickest -sickle -sickles -sickliest -sickly -sickness -sicknesses -sickroom -side -sideband -sidebands -sideboard -sideboards -sideburns -sidecar -sided -sidekick -sidelight -sidelights -sideline -sidelines -sidelong -sider -sidereal -sides -sideshow -sideshows -sidestep -sidestepped -sidestepping -sidesteps -sideswipes -sidetrack -sidetracked -sidetracking -sidewalk -sidewards -sideways -sidewinders -siding -sidings -sidle -sidled -sidling -siege -sieges -sienna -sierra -siesta -siestas -sieve -sieved -sieves -sieving -sift -sifted -sifter -sifters -sifting -siftings -sifts -sigh -sighed -sighing -sighs -sight -sighted -sightedness -sighting -sightings -sightless -sightlessly -sightly -sights -sightsee -sightseeing -sightseers -sigma -sigmoid -sign -signal -signalled -signaller -signallers -signalling -signally -signalman -signalmen -signals -signatories -signatory -signature -signatures -signboards -signed -signer -signers -signet -significance -significances -significant -significantly -signification -significations -signified -signifier -signifies -signify -signifying -signing -signings -signor -signora -signors -signpost -signposted -signposting -signposts -signs -signwriter -silage -silence -silenced -silencer -silencers -silences -silencing -silent -silently -silhouette -silhouetted -silhouettes -silica -silicate -silicates -silicon -silicone -silicosis -silk -silken -silkier -silkiest -silkily -silkiness -silklike -silks -silkworm -silkworms -silky -sillier -silliest -silliness -silly -silo -silt -silted -silting -silts -siltstone -silty -silver -silvered -silvering -silvers -silversmith -silversmiths -silverware -silvery -simeon -similar -similarities -similarity -similarly -simile -similes -similitude -simmer -simmered -simmering -simmers -simper -simpered -simpering -simpers -simple -simpleminded -simpler -simplest -simpleton -simpletons -simplex -simplexes -simplicities -simplicity -simplification -simplifications -simplified -simplifier -simplifies -simplify -simplifying -simplism -simplistic -simplistically -simply -simulacrum -simulate -simulated -simulates -simulating -simulation -simulations -simulator -simulators -simulcasts -simultaneity -simultaneous -simultaneously -sin -sinai -since -sincere -sincerely -sincerest -sincerity -sine -sinecure -sinecures -sinecurist -sines -sinew -sinews -sinewy -sinful -sinfully -sinfulness -sing -singable -singalong -singe -singed -singeing -singer -singers -singes -singing -single -singlehanded -singlehandedly -singleminded -singlemindedly -singlemindedness -singleness -singles -singly -sings -singsong -singular -singularisation -singularities -singularity -singularly -singulars -sinister -sinisterly -sinistral -sink -sinkable -sinker -sinkers -sinking -sinks -sinless -sinned -sinner -sinners -sinning -sins -sinter -sinters -sinuous -sinuously -sinus -sinuses -sinusitis -sinusoid -sinusoidal -sinusoidally -sip -siphon -siphoned -siphoning -siphons -sipped -sipper -sippers -sipping -sips -sir -sire -sired -siren -sirens -sires -sirius -sirloin -sirloins -sirs -sis -sisal -sissies -sissy -sister -sisterhood -sisterinlaw -sisterly -sisters -sistersinlaw -sit -sitar -sitcom -sitcoms -site -sited -sites -siting -sitings -sits -sitter -sitters -sitting -sittings -situate -situated -situating -situation -situational -situationally -situationist -situations -six -sixes -sixfold -sixpence -sixteen -sixteenth -sixth -sixths -sixties -sixtieth -sixty -size -sizeable -sized -sizes -sizing -sizzle -sizzled -sizzles -sizzling -sjambok -skate -skateboard -skateboards -skated -skater -skaters -skates -skating -skein -skeletal -skeleton -skeletons -skeptic -skerries -sketch -sketchbook -sketchbooks -sketched -sketcher -sketches -sketchier -sketchiest -sketchily -sketching -sketchpad -sketchy -skew -skewed -skewer -skewered -skewers -skewness -skews -ski -skid -skidded -skidding -skids -skied -skier -skiers -skies -skiing -skilful -skilfully -skill -skilled -skillet -skillful -skills -skim -skimmed -skimmer -skimming -skimp -skimped -skimping -skimpy -skims -skin -skincare -skindeep -skinflint -skinhead -skinheads -skinless -skinned -skinner -skinners -skinnier -skinniest -skinning -skinny -skins -skintight -skip -skipped -skipper -skippered -skippering -skippers -skipping -skips -skirl -skirmish -skirmishes -skirmishing -skirt -skirted -skirting -skirts -skis -skit -skits -skittish -skittishly -skittishness -skittle -skittles -skua -skuas -skulduggery -skulk -skulked -skulking -skulks -skull -skullcap -skullduggery -skulls -skunk -skunks -sky -skydive -skydived -skydiver -skydivers -skydives -skydiving -skyhigh -skylark -skylarks -skylight -skylights -skyline -skylines -skyscape -skyscraper -skyscrapers -skyward -skywards -slab -slabs -slack -slacked -slacken -slackened -slackening -slackens -slacker -slackers -slackest -slacking -slackly -slackness -slacks -slag -slags -slain -slake -slaked -slalom -slaloms -slam -slammed -slamming -slams -slander -slandered -slanderer -slanderers -slandering -slanderous -slanders -slang -slanging -slant -slanted -slanting -slants -slantwise -slap -slapdash -slapped -slapper -slapping -slaps -slapstick -slash -slashed -slasher -slashes -slashing -slat -slate -slated -slater -slaters -slates -slating -slats -slatted -slaughter -slaughtered -slaughterer -slaughterhouse -slaughterhouses -slaughtering -slaughterings -slaughters -slav -slave -slaved -slavedriver -slavedrivers -slaver -slavered -slavering -slavers -slavery -slaves -slavic -slaving -slavish -slavishly -slavs -slay -slayed -slayer -slayers -slaying -slays -sleaze -sleazier -sleaziest -sleazy -sled -sledding -sledge -sledgehammer -sledgehammers -sledges -sledging -sleds -sleek -sleeker -sleekly -sleekness -sleeks -sleep -sleeper -sleepers -sleepier -sleepiest -sleepily -sleepiness -sleeping -sleepless -sleeplessness -sleeps -sleepwalk -sleepwalker -sleepwalking -sleepwalks -sleepy -sleet -sleets -sleeve -sleeved -sleeveless -sleeves -sleigh -sleighs -sleight -sleights -slender -slenderest -slenderly -slenderness -slept -sleuth -sleuths -slew -slewed -slewing -slice -sliced -slicer -slicers -slices -slicing -slicings -slick -slicked -slicker -slickest -slickly -slickness -slicks -slid -slide -slided -slider -sliders -slides -sliding -slight -slighted -slighter -slightest -slighting -slightingly -slightly -slights -slily -slim -slime -slimes -slimier -slimiest -slimline -slimly -slimmed -slimmer -slimmers -slimmest -slimming -slimness -slims -slimy -sling -slinging -slings -slingshot -slink -slinking -slinky -slip -slippage -slipped -slipper -slipperiness -slippers -slippery -slipping -slips -slipshod -slipstream -slipup -slipway -slit -slither -slithered -slithering -slithers -slithery -slits -slitting -sliver -slivers -slob -slobber -slobbering -slobbers -slobbery -slobs -slog -slogan -slogans -slogged -slogging -slogs -sloop -slop -slope -sloped -slopes -sloping -slopped -sloppier -sloppiest -sloppily -sloppiness -slopping -sloppy -slops -slosh -sloshed -sloshing -slot -sloth -slothful -sloths -slots -slotted -slotting -slouch -slouched -slouches -slouching -slough -sloughed -sloughing -slovak -slovenia -slovenliness -slovenly -slow -slowcoaches -slowdown -slowed -slower -slowest -slowing -slowish -slowly -slowness -slowpoke -slows -sludge -sludgy -slug -sluggard -sluggards -slugged -slugging -sluggish -sluggishly -sluggishness -slugs -sluice -sluiced -sluices -sluicing -slum -slumber -slumbered -slumbering -slumbers -slumming -slump -slumped -slumping -slumps -slums -slung -slunk -slur -slurp -slurped -slurping -slurps -slurred -slurring -slurry -slurs -slush -slushed -slushes -slushier -slushiest -slushy -slut -sluts -sly -slyer -slyly -slyness -smack -smacked -smacker -smacking -smacks -small -smaller -smallest -smallholder -smallholders -smallholding -smallholdings -smallish -smallminded -smallmindedness -smallness -smallpox -smalls -smallscale -smalltalk -smalltime -smalltown -smart -smarted -smarten -smartened -smartening -smarter -smartest -smarting -smartly -smartness -smarts -smash -smashed -smasher -smashes -smashing -smattering -smatterings -smear -smeared -smearing -smears -smegma -smell -smellable -smelled -smellier -smelliest -smelling -smells -smelly -smelt -smelted -smelter -smelters -smelting -smidgeon -smile -smiled -smiler -smilers -smiles -smiling -smilingly -smirk -smirked -smirking -smirks -smite -smith -smithereens -smiths -smithy -smiting -smitten -smock -smocks -smog -smoggy -smogs -smoke -smoked -smokeless -smoker -smokers -smokes -smokescreen -smokestack -smokestacks -smokier -smokiest -smokiness -smoking -smoky -smolder -smooch -smooth -smoothed -smoother -smoothest -smoothing -smoothly -smoothness -smooths -smoothtongued -smote -smother -smothered -smothering -smothers -smoulder -smouldered -smouldering -smoulders -smudge -smudged -smudges -smudgier -smudgiest -smudging -smudgy -smug -smuggle -smuggled -smuggler -smugglers -smuggles -smuggling -smugly -smugness -smut -smuts -smutty -snack -snacks -snaffle -snag -snagged -snagging -snags -snail -snails -snake -snaked -snakepit -snakes -snakeskin -snaking -snaky -snap -snapped -snapper -snappier -snappily -snapping -snappy -snaps -snapshot -snapshots -snare -snared -snares -snaring -snarl -snarled -snarling -snarls -snatch -snatched -snatcher -snatchers -snatches -snatching -sneak -sneaked -sneakers -sneakier -sneakiest -sneakily -sneaking -sneaks -sneaky -sneer -sneered -sneering -sneeringly -sneers -sneeze -sneezed -sneezes -sneezing -snick -snide -sniff -sniffed -sniffer -sniffers -sniffing -sniffle -sniffles -sniffling -sniffly -sniffs -snifter -snigger -sniggered -sniggering -sniggers -snip -snipe -sniper -snipers -snipes -sniping -snipped -snippet -snippets -snipping -snips -snits -snivel -snivelling -snob -snobbery -snobbish -snobbishly -snobbishness -snobs -snoek -snooker -snoop -snooped -snooper -snoopers -snooping -snoops -snoopy -snooze -snoozed -snoozes -snoozing -snore -snored -snorer -snorers -snores -snoring -snorkel -snorkelling -snorkels -snort -snorted -snorting -snorts -snotty -snout -snouts -snow -snowball -snowballed -snowballing -snowballs -snowbound -snowcapped -snowdrift -snowdrifts -snowdrop -snowdrops -snowed -snowfall -snowfalls -snowfields -snowflake -snowflakes -snowier -snowiest -snowing -snowline -snowman -snowmen -snowplough -snowploughs -snows -snowstorm -snowstorms -snowwhite -snowy -snub -snubbed -snubbing -snubnosed -snubs -snuff -snuffbox -snuffed -snuffing -snuffle -snuffled -snuffles -snuffling -snuffs -snug -snugger -snuggle -snuggled -snuggles -snuggling -snugly -snugness -so -soak -soaked -soaker -soakers -soaking -soakings -soaks -soandso -soap -soapbox -soaped -soapier -soapiest -soaping -soaps -soapy -soar -soared -soaring -soaringly -soars -sob -sobbed -sobbing -sobbings -sober -sobered -soberer -sobering -soberly -sobers -sobriety -sobriquet -sobs -socalled -soccer -sociability -sociable -sociably -social -socialisation -socialise -socialised -socialising -socialism -socialist -socialistic -socialists -socialite -socially -socials -societal -societies -society -sociobiology -sociocultural -socioeconomic -sociolinguistic -sociolinguistics -sociolinguists -sociological -sociologically -sociologist -sociologists -sociology -sociopolitical -sock -socked -socket -sockets -socking -socks -socrates -sod -soda -sodas -sodded -sodden -soddy -sodium -sodom -sodomise -sodomised -sodomising -sodomite -sodomites -sodomy -sods -sofa -sofas -soffit -soft -softball -softboiled -soften -softened -softener -softeners -softening -softens -softer -softest -softhearted -softie -softish -softly -softness -softspoken -software -softwood -softy -soggier -soggiest -soggy -soh -soil -soiled -soiling -soilings -soils -soiree -sojourn -sojourned -sojourner -sojourners -sojourning -sojourns -solace -solaces -solanum -solar -solaria -solarium -sold -solder -soldered -soldering -solders -soldier -soldiered -soldiering -soldierly -soldiers -soldiery -sole -solecism -solecisms -solely -solemn -solemnities -solemnity -solemnly -solenoid -solenoidal -solenoids -soler -soles -solfa -solicit -solicitation -solicitations -solicited -soliciting -solicitor -solicitors -solicitous -solicitously -solicits -solicitude -solid -solidarity -solidification -solidified -solidifies -solidify -solidifying -solidity -solidly -solidness -solids -solitaire -solitary -solitude -solitudes -solo -soloing -soloist -soloists -solstice -solstices -solubility -soluble -solute -solutes -solution -solutions -solvable -solve -solved -solvency -solvent -solvents -solver -solvers -solves -solving -soma -somali -somalia -somas -somatic -sombre -sombrely -sombreness -sombrero -some -somebody -someday -somehow -someone -somersault -somersaulted -somersaulting -somersaults -something -sometime -sometimes -someway -someways -somewhat -somewhere -somnambulist -somnolence -somnolent -son -sonar -sonars -sonata -sonatas -sones -song -songbird -songbirds -songbook -songs -songsters -songwriter -songwriters -songwriting -sonic -sonically -soninlaw -sonnet -sonnets -sonny -sonora -sonorities -sonority -sonorous -sonorously -sonorousness -sons -sonsinlaw -soon -sooner -soonest -soonish -soot -soothe -soothed -soothers -soothes -soothing -soothingly -soothsayer -soothsayers -soothsaying -sootier -soots -sooty -sop -sophist -sophisticate -sophisticated -sophisticates -sophistication -sophistry -sophists -soporific -sopping -soppy -soprano -sorbet -sorbets -sorcerer -sorcerers -sorceress -sorcery -sordid -sordidly -sordidness -sore -sorely -soreness -sores -sorghum -sorority -sorrel -sorrier -sorriest -sorrow -sorrowed -sorrowful -sorrowfully -sorrowing -sorrows -sorry -sort -sortable -sorted -sorter -sorters -sortie -sorties -sorting -sorts -sos -soso -sot -sotho -soubriquet -soudan -souffle -sought -soughtafter -souk -souks -soul -souldestroying -souled -soulful -soulfully -soulless -souls -soulsearching -sound -soundcheck -sounded -sounder -soundest -sounding -soundings -soundless -soundlessly -soundly -soundness -soundproof -soundproofed -soundproofing -sounds -soundtrack -soundtracks -soup -soups -soupy -sour -source -sourced -sourceless -sources -sourcing -soured -sourest -souring -sourly -sourness -sours -soused -south -southbound -southerly -southern -southerner -southerners -southernmost -southward -southwards -souvenir -souvenirs -sovereign -sovereigns -sovereignty -soviet -sow -sowed -sower -sowers -soweto -sowing -sown -sows -soy -soya -soybean -soybeans -spa -space -spaceage -spacecraft -spaced -spaceflight -spaceman -spacemen -spacer -spacers -spaces -spaceship -spaceships -spacesuit -spacesuits -spacey -spacial -spacing -spacings -spacious -spaciously -spaciousness -spade -spaded -spades -spadework -spaghetti -spain -spam -span -spandrels -spangle -spangled -spangles -spaniel -spaniels -spanish -spank -spanked -spanker -spanking -spankings -spanks -spanned -spanner -spanners -spanning -spans -spar -spare -spared -sparely -spares -sparetime -sparing -sparingly -spark -sparked -sparking -sparkle -sparkled -sparkler -sparklers -sparkles -sparkling -sparklingly -sparkly -sparks -sparred -sparring -sparrow -sparrowhawk -sparrows -spars -sparse -sparsely -sparseness -sparser -sparsest -sparsity -sparta -spartan -spartans -spas -spasm -spasmodic -spasmodically -spasms -spastic -spastics -spat -spate -spatial -spatially -spats -spatter -spattered -spattering -spatters -spatula -spatulas -spawn -spawned -spawning -spawns -spay -spayed -spaying -spays -speak -speakable -speaker -speakers -speaking -speaks -spear -speared -spearhead -spearheaded -spearheading -spearheads -spearing -spears -spec -special -specialisation -specialisations -specialise -specialised -specialises -specialising -specialism -specialisms -specialist -specialists -specialities -speciality -specially -specialness -specials -specialty -speciation -species -specifiable -specifiably -specific -specifically -specification -specifications -specificities -specificity -specificness -specifics -specified -specifier -specifiers -specifies -specify -specifying -specimen -specimens -specious -speck -speckle -speckled -speckles -specks -specs -spectacle -spectacles -spectacular -spectacularly -spectaculars -spectator -spectators -spectra -spectral -spectre -spectres -spectrogram -spectrograph -spectrometer -spectrometers -spectrometric -spectrometry -spectrophotometer -spectrophotometers -spectrophotometry -spectroscope -spectroscopes -spectroscopic -spectroscopically -spectroscopy -spectrum -specular -speculate -speculated -speculates -speculating -speculation -speculations -speculative -speculatively -speculator -speculators -speculum -sped -speech -speeches -speechifying -speechless -speechlessly -speed -speedboat -speedboats -speedcop -speeded -speedier -speediest -speedily -speeding -speedometer -speedometers -speeds -speedup -speedway -speedwell -speedy -spell -spellable -spellbinder -spellbinding -spellbound -spelled -speller -spellers -spelling -spellings -spells -spelt -spencer -spend -spender -spenders -spending -spends -spendthrift -spent -spermatozoa -spew -spewed -spewing -spews -sphagnum -sphere -spheres -spheric -spherical -spherically -spheroid -spheroidal -sphincter -sphincters -sphinx -sphygmomanometer -spice -spiced -spicer -spicery -spices -spicier -spicily -spicing -spicy -spider -spiders -spidery -spied -spies -spigot -spike -spiked -spikes -spikier -spikiest -spiking -spiky -spill -spillage -spillages -spilled -spiller -spilling -spills -spilt -spin -spinach -spinal -spindle -spindles -spindly -spindrier -spindriers -spindrift -spindry -spine -spinechilling -spineless -spines -spinet -spinnaker -spinner -spinners -spinney -spinning -spinoff -spinoffs -spins -spinster -spinsterhood -spinsters -spiny -spiral -spiralled -spiralling -spirally -spirals -spirant -spirants -spire -spires -spirit -spirited -spiritedl -spiritedly -spiritless -spirits -spiritual -spiritualised -spiritualism -spiritualist -spiritualists -spirituality -spiritually -spirituals -spit -spite -spiteful -spitefully -spitfire -spitfires -spits -spitting -spittle -spittoon -spittoons -splash -splashdown -splashed -splashes -splashing -splashy -splat -splatter -splattered -splattering -splayed -splaying -spleen -spleens -splendid -splendidly -splendour -splendours -splenetic -splice -spliced -splicer -splicers -splices -splicing -spline -splines -splint -splinted -splinter -splintered -splintering -splinters -splints -split -splits -splittable -splitter -splitters -splitting -splittings -splodge -splodges -splotches -splurge -splutter -spluttered -spluttering -splutters -spoil -spoilage -spoiled -spoiler -spoilers -spoiling -spoils -spoilsport -spoilt -spoke -spoken -spokes -spokeshave -spokeshaves -spokesman -spokesmen -spokespeople -spokesperson -spokespersons -spokeswoman -spokeswomen -sponge -sponged -sponger -sponges -spongier -spongiest -sponginess -sponging -spongy -sponsor -sponsored -sponsoring -sponsors -sponsorship -sponsorships -spontaneity -spontaneous -spontaneously -spoof -spoofs -spook -spooked -spooking -spooks -spooky -spool -spooled -spooling -spools -spoon -spooned -spoonful -spoonfuls -spooning -spoons -spoor -sporadic -sporadically -spore -spores -sporran -sporrans -sport -sported -sporting -sportingly -sportive -sports -sportsman -sportsmanship -sportsmen -sportswear -sporty -spot -spotless -spotlessly -spotlessness -spotlight -spotlighting -spotlights -spotlit -spoton -spots -spotted -spotter -spotters -spottier -spottiest -spotting -spotty -spouse -spouses -spout -spouted -spouting -spouts -sprain -sprained -spraining -sprains -sprang -sprat -sprats -sprawl -sprawled -sprawling -sprawls -spray -sprayed -sprayer -sprayers -spraying -sprays -spread -spreadeagled -spreaders -spreading -spreads -spreadsheet -spreadsheets -spree -spreeing -sprig -sprightlier -sprightliest -sprightliness -sprightly -sprigs -spring -springboard -springboards -springbok -springboks -springclean -springcleaned -springer -springier -springiest -springing -springs -springtime -springy -sprinkle -sprinkled -sprinkler -sprinklers -sprinkles -sprinkling -sprint -sprinted -sprinter -sprinters -sprinting -sprints -sprite -sprites -sprocket -sprockets -sprout -sprouted -sprouting -sprouts -spruce -spruced -sprucing -sprung -spry -spud -spume -spun -spunky -spur -spurge -spurges -spurious -spuriously -spurn -spurned -spurning -spurns -spurred -spurring -spurs -spurt -spurted -spurting -spurts -sputnik -sputniks -sputter -sputtered -sputtering -sputum -spy -spyglass -spyhole -spying -spyings -squabble -squabbled -squabbles -squabbling -squad -squadron -squadrons -squads -squalid -squall -squalling -squalls -squally -squalor -squander -squandered -squandering -squanders -square -squared -squarely -squareness -squarer -squares -squaring -squarish -squash -squashed -squashes -squashier -squashiest -squashing -squashy -squat -squats -squatted -squatter -squatters -squatting -squaw -squawk -squawked -squawking -squawks -squeak -squeaked -squeaker -squeakier -squeakiest -squeaking -squeaks -squeaky -squeal -squealed -squealer -squealing -squeals -squeamish -squeamishly -squeamishness -squeegee -squeeze -squeezed -squeezer -squeezes -squeezing -squeezy -squelch -squelched -squelching -squelchy -squib -squibs -squid -squids -squiggle -squiggles -squint -squinted -squinting -squints -squire -squirearchy -squires -squirm -squirmed -squirming -squirms -squirrel -squirrelled -squirrels -squirt -squirted -squirting -squirts -srilanka -stab -stabbed -stabber -stabbing -stabbings -stabilisation -stabilise -stabilised -stabiliser -stabilisers -stabilises -stabilising -stability -stable -stabled -stablemate -stabler -stables -stabling -stably -stabs -staccato -stack -stacked -stacker -stacking -stacks -stadia -stadium -stadiums -staff -staffed -staffing -staffroom -staffs -stag -stage -stagecoach -stagecoaches -staged -stagehands -stager -stages -stagey -stagflation -stagger -staggered -staggering -staggeringly -staggers -staging -stagings -stagnancy -stagnant -stagnate -stagnated -stagnates -stagnating -stagnation -stags -staid -staidness -stain -stained -stainer -staining -stainless -stains -stair -staircase -staircases -stairhead -stairs -stairway -stairways -stairwell -stairwells -stake -staked -stakeholder -stakeholders -stakes -staking -stalactite -stalactites -stalagmite -stalagmites -stale -stalemate -stalemated -stalemates -staleness -stalin -stalk -stalked -stalker -stalkers -stalking -stalks -stall -stalled -stallholders -stalling -stallion -stallions -stalls -stalwart -stalwarts -stamen -stamens -stamina -stammer -stammered -stammering -stammers -stamp -stamped -stampede -stampeded -stampeding -stamper -stampers -stamping -stampings -stamps -stance -stances -stanchion -stanchions -stand -standard -standardisation -standardisations -standardise -standardised -standardises -standardising -standards -standby -standing -standings -standpoint -standpoints -stands -standstill -stank -stanza -stanzas -stapes -staphylococcus -staple -stapled -stapler -staplers -staples -stapling -star -starboard -starch -starched -starches -starchier -starchiest -starchy -stardom -stardust -stare -stared -starer -stares -starfish -stargaze -stargazer -stargazers -stargazing -staring -stark -starker -starkest -starkly -starkness -starless -starlet -starlets -starlight -starlike -starling -starlings -starlit -starred -starrier -starriest -starring -starry -starryeyed -stars -starship -starspangled -starstruck -starstudded -start -started -starter -starters -starting -startle -startled -startles -startling -startlingly -starts -startup -startups -starvation -starve -starved -starves -starving -stashed -stashes -stashing -stasis -state -statecraft -stated -statehood -stateless -stateliest -stateliness -stately -statement -statements -stateoftheart -staterooms -states -statesman -statesmanlike -statesmanship -statesmen -static -statical -statically -statics -stating -station -stationary -stationed -stationer -stationers -stationery -stationing -stationmaster -stations -statistic -statistical -statistically -statistician -statisticians -statistics -stator -stators -statuary -statue -statues -statuesque -statuette -statuettes -stature -statures -status -statuses -statute -statutes -statutorily -statutory -staunch -staunchest -staunching -staunchly -staunchness -stave -staved -staves -staving -stay -stayed -stayers -staying -stays -stead -steadfast -steadfastly -steadfastness -steadied -steadier -steadiest -steadily -steadiness -steady -steadygoing -steadying -steak -steaks -steal -stealer -stealers -stealing -steals -stealth -stealthier -stealthiest -stealthily -stealthy -steam -steamboat -steamboats -steamed -steamer -steamers -steamier -steamiest -steaming -steamroller -steamrollers -steams -steamship -steamships -steamy -steed -steeds -steel -steelclad -steeled -steeling -steels -steelwork -steelworker -steelworkers -steelworks -steely -steep -steeped -steepen -steepened -steepening -steepens -steeper -steepest -steeping -steeple -steeplechase -steeplechaser -steeplechasers -steeplechasing -steepled -steeplejack -steeples -steeply -steepness -steeps -steer -steerable -steerage -steered -steering -steers -stegosaurus -stellar -stellated -stem -stemmed -stemming -stems -stench -stenches -stencil -stencilled -stencils -stenographer -stenographers -stenographic -stenography -stenosis -stentor -stentorian -step -stepbrother -stepchildren -stepdaughter -stepfather -stepladder -stepmother -stepparents -steppe -stepped -steppes -stepping -steps -stepsister -stepson -stepsons -stepwise -steradians -stereo -stereographic -stereophonic -stereos -stereoscopic -stereoscopically -stereoscopy -stereotype -stereotyped -stereotypes -stereotypical -stereotypically -stereotyping -sterile -sterilisation -sterilisations -sterilise -sterilised -steriliser -sterilising -sterility -sterling -stern -sterner -sternest -sternly -sternness -sterns -sternum -steroid -steroids -stet -stethoscope -stevedore -stew -steward -stewardess -stewardesses -stewards -stewardship -stewed -stewing -stews -stick -sticker -stickers -stickiest -stickily -stickiness -sticking -stickleback -sticklebacks -stickler -sticks -sticky -sties -stiff -stiffen -stiffened -stiffener -stiffening -stiffens -stiffer -stiffest -stiffly -stiffnecked -stiffness -stifle -stifled -stifles -stifling -stiflingly -stigma -stigmas -stigmata -stigmatisation -stigmatise -stigmatised -stigmatising -stiletto -still -stillbirths -stillborn -stilled -stiller -stilling -stillness -stills -stilt -stilted -stilts -stimulant -stimulants -stimulate -stimulated -stimulates -stimulating -stimulation -stimulator -stimulatory -stimuli -stimulus -sting -stinged -stinger -stingers -stingier -stingily -stinging -stingray -stings -stingy -stink -stinker -stinkers -stinking -stinks -stinky -stint -stinted -stints -stipel -stipend -stipendiary -stipends -stippled -stipples -stipulate -stipulated -stipulates -stipulating -stipulation -stipulations -stir -stirfried -stirfry -stirred -stirrer -stirrers -stirring -stirrings -stirrup -stirrups -stirs -stitch -stitched -stitcher -stitches -stitching -stoa -stoat -stoats -stochastic -stock -stockade -stockbroker -stockbrokers -stockbroking -stockcar -stocked -stockholders -stockholding -stockier -stockily -stocking -stockinged -stockings -stockist -stockists -stockpile -stockpiled -stockpiles -stockpiling -stockroom -stocks -stocktaking -stocky -stodge -stodgier -stodgiest -stodgy -stoep -stoic -stoical -stoically -stoicism -stoics -stoke -stoked -stoker -stokers -stokes -stoking -stole -stolen -stolid -stolidity -stolidly -stoma -stomach -stomachache -stomachs -stomata -stomp -stomped -stomping -stomps -stone -stonecold -stoned -stoneless -stonemason -stonemasons -stones -stonewalled -stoneware -stonework -stonier -stoniest -stonily -stoning -stony -stood -stooge -stooges -stool -stoolpigeon -stools -stoop -stooped -stooping -stoops -stop -stopcock -stopgap -stopover -stoppable -stoppage -stoppages -stopped -stopper -stoppered -stoppers -stopping -stops -stopwatch -storage -storages -store -stored -storehouse -storehouses -storekeeper -storekeepers -storeman -storeroom -storerooms -stores -storey -storeys -stories -storing -stork -storks -storm -stormed -stormer -stormers -stormier -stormiest -storming -storms -stormtroopers -stormy -story -storybook -storyline -storylines -storyteller -storytellers -storytelling -stout -stouter -stoutest -stoutly -stoutness -stove -stovepipe -stoves -stow -stowage -stowaway -stowed -stowing -stows -straddle -straddled -straddles -straddling -strafe -strafed -strafing -straggle -straggled -straggler -stragglers -straggling -straggly -straight -straightaway -straighten -straightened -straightening -straightens -straighter -straightest -straightforward -straightforwardly -straightforwardness -straightness -strain -strained -strainer -strainers -straining -strains -strait -straiten -straitened -straitjacket -straitjackets -straits -strand -stranded -stranding -strands -strange -strangely -strangeness -stranger -strangers -strangest -strangle -strangled -stranglehold -strangler -stranglers -strangles -strangling -strangulated -strangulation -strap -strapless -strapped -strapper -strapping -straps -strata -stratagem -stratagems -strategic -strategically -strategies -strategist -strategists -strategy -stratification -stratified -stratifies -stratifying -stratigraphic -stratigraphical -stratigraphy -stratosphere -stratospheric -stratospherically -stratum -stratus -straw -strawberries -strawberry -strawman -straws -stray -strayed -strayer -straying -strays -streak -streaked -streaker -streakers -streakier -streakiest -streaking -streaks -streaky -stream -streamed -streamer -streamers -streaming -streamline -streamlined -streamlines -streamlining -streams -street -streets -streetwalkers -streetwise -strength -strengthen -strengthened -strengthening -strengthens -strengths -strenuous -strenuously -streptococcal -streptococci -streptomycin -stress -stressed -stresses -stressful -stressfulness -stressing -stretch -stretchability -stretchable -stretched -stretcher -stretchered -stretchers -stretches -stretchiness -stretching -stretchy -strew -strewed -strewing -strewn -striated -striation -striations -stricken -strict -stricter -strictest -strictly -strictness -stricture -strictures -stride -stridency -strident -stridently -strider -strides -striding -strife -strifes -strike -striker -strikers -strikes -striking -strikingly -string -stringed -stringencies -stringency -stringent -stringently -stringer -stringing -strings -stringy -strip -stripe -striped -striper -stripes -stripier -stripiest -striping -stripling -stripped -stripper -strippers -stripping -strips -stripy -strive -strived -striven -striver -strives -striving -strivings -strode -stroke -stroked -strokes -stroking -stroll -strolled -stroller -strollers -strolling -strolls -strong -stronger -strongest -stronghold -strongholds -strongish -strongly -strongman -strongmen -strongminded -strongroom -strontium -strop -stropped -stropping -strops -strove -struck -structural -structuralism -structuralist -structuralists -structurally -structure -structured -structureless -structures -structuring -strudel -strudels -struggle -struggled -struggles -struggling -strum -strummed -strumming -strumpet -strung -strut -struts -strutted -strutter -strutting -strychnine -stub -stubbed -stubbing -stubble -stubbled -stubbles -stubbly -stubborn -stubbornly -stubbornness -stubby -stubs -stucco -stuccoed -stuck -stuckup -stud -studded -student -students -studentship -studentships -studied -studier -studiers -studies -studio -studios -studious -studiously -studiousness -studs -study -studying -stuff -stuffed -stuffer -stuffier -stuffiest -stuffiness -stuffing -stuffs -stuffy -stultified -stultify -stultifying -stumble -stumbled -stumbles -stumbling -stumblingly -stump -stumped -stumping -stumps -stumpy -stun -stung -stunned -stunner -stunning -stunningly -stuns -stunt -stunted -stunting -stuntman -stunts -stupefaction -stupefied -stupefy -stupefying -stupefyingly -stupendous -stupendously -stupid -stupider -stupidest -stupidities -stupidity -stupidly -stupor -stupors -sturdier -sturdiest -sturdily -sturdy -sturgeon -sturgeons -stutter -stuttered -stuttering -stutters -sty -style -styled -styles -styli -styling -stylisation -stylised -stylish -stylishly -stylishness -stylist -stylistic -stylistically -stylistics -stylists -stylus -styluses -stymie -stymied -styrene -styx -suasion -suave -suavely -sub -subaltern -subalterns -subarctic -subatomic -subbed -subbing -subclass -subclasses -subcommittee -subcommittees -subconscious -subconsciously -subconsciousness -subcontinent -subcontract -subcontracted -subcontracting -subcontractor -subcontractors -subcultural -subculture -subcultures -subcutaneous -subcutaneously -subdivide -subdivided -subdivides -subdividing -subdivision -subdivisions -subducted -subduction -subdue -subdued -subdues -subduing -subeditor -subeditors -subfamily -subgroup -subgroups -subharmonic -subharmonics -subhuman -subject -subjected -subjecting -subjection -subjective -subjectively -subjectivism -subjectivist -subjectivity -subjects -subjugate -subjugated -subjugating -subjugation -subjunctive -sublayer -sublimate -sublimated -sublimation -sublime -sublimed -sublimely -sublimes -sublimest -subliminal -subliminally -sublimity -sublunary -submarine -submarines -submerge -submerged -submergence -submerges -submerging -submersible -submersion -submission -submissions -submissive -submissively -submissiveness -submit -submits -submittable -submitted -submitter -submitters -submitting -subnormal -suboptimal -subordinate -subordinated -subordinates -subordinating -subordination -subplot -subplots -subpoena -subpoenaed -subprogram -subprograms -subregional -subroutine -subroutines -subs -subscribe -subscribed -subscriber -subscribers -subscribes -subscribing -subscript -subscription -subscriptions -subscripts -subsection -subsections -subsequent -subsequently -subservience -subservient -subset -subsets -subside -subsided -subsidence -subsides -subsidiaries -subsidiarity -subsidiary -subsidies -subsiding -subsidise -subsidised -subsidises -subsidising -subsidy -subsist -subsisted -subsistence -subsisting -subsists -subsoil -subsonic -subspace -subspaces -subspecies -substance -substances -substandard -substantial -substantially -substantiate -substantiated -substantiates -substantiating -substantiation -substantive -substantively -substantives -substation -substitutable -substitute -substituted -substitutes -substituting -substitution -substitutions -substrata -substrate -substrates -substratum -substructure -substructures -subsume -subsumed -subsumes -subsuming -subsurface -subsystem -subsystems -subtenants -subtend -subtended -subtending -subtends -subterfuge -subterranean -subtext -subtitle -subtitled -subtitles -subtitling -subtle -subtler -subtlest -subtleties -subtlety -subtly -subtotal -subtotals -subtract -subtracted -subtracting -subtraction -subtractions -subtractive -subtractively -subtracts -subtropical -subtropics -subtype -subtypes -subunit -subunits -suburb -suburban -suburbanisation -suburbanites -suburbia -suburbs -subvention -subventions -subversion -subversive -subversively -subversives -subvert -subverted -subverting -subverts -subway -subways -subzero -succeed -succeeded -succeeding -succeeds -success -successes -successful -successfully -succession -successions -successive -successively -successor -successors -succinct -succinctly -succinctness -succour -succulence -succulent -succumb -succumbed -succumbing -succumbs -such -suchandsuch -suchlike -suck -suckable -sucked -sucker -suckers -sucking -suckle -suckled -suckles -suckling -sucklings -sucks -sucrose -suction -sud -sudan -sudden -suddenly -suddenness -suds -sue -sued -suede -sues -suet -suffer -sufferance -suffered -sufferer -sufferers -suffering -sufferings -suffers -suffice -sufficed -suffices -sufficiency -sufficient -sufficiently -sufficing -suffix -suffixed -suffixes -suffocate -suffocated -suffocates -suffocating -suffocatingly -suffocation -suffrage -suffragette -suffragettes -suffragist -suffuse -suffused -suffuses -suffusing -suffusion -sugar -sugarcoated -sugared -sugaring -sugarplums -sugars -sugary -suggest -suggested -suggester -suggesters -suggestibility -suggestible -suggesting -suggestion -suggestions -suggestive -suggestively -suggestiveness -suggests -sugillate -suicidal -suicidally -suicide -suicides -suing -suit -suitabilities -suitability -suitable -suitableness -suitably -suitcase -suitcases -suite -suited -suites -suiting -suitor -suitors -suits -sulk -sulked -sulkier -sulkiest -sulkily -sulkiness -sulking -sulks -sulky -sullen -sullenly -sullenness -sullied -sully -sullying -sulphate -sulphates -sulphide -sulphides -sulphonamides -sulphur -sulphuric -sulphurous -sultan -sultana -sultanas -sultans -sultry -sum -sumatra -summa -summability -summable -summaries -summarily -summarise -summarised -summariser -summarisers -summarises -summarising -summary -summation -summations -summed -summer -summers -summertime -summery -summing -summit -summits -summon -summoned -summoner -summoning -summonings -summons -summonsed -summonses -summonsing -sumo -sump -sumps -sumptuous -sumptuously -sumptuousness -sums -sun -sunbath -sunbathe -sunbathed -sunbathers -sunbathing -sunbeam -sunbeams -sunbed -sunbeds -sunblock -sunburn -sunburned -sunburns -sunburnt -sunburst -suncream -sundaes -sunday -sundays -sundial -sundials -sundown -sundried -sundries -sundry -sunflower -sunflowers -sung -sunglasses -sunk -sunken -sunking -sunless -sunlight -sunlit -sunlounger -sunned -sunnier -sunniest -sunning -sunny -sunrise -sunrises -sunroof -suns -sunscreen -sunscreens -sunset -sunsets -sunshade -sunshine -sunspot -sunspots -sunstroke -suntan -suntanned -sup -super -superabundance -superabundant -superannuate -superannuated -superannuating -superannuation -superb -superbly -supercharged -supercharger -supercilious -superciliously -superciliousness -supercomputer -supercomputers -supercomputing -superconducting -superconductivity -superconductor -superconductors -supercooled -supercooling -supercritical -superdense -superfamily -superficial -superficiality -superficially -superfix -superfluities -superfluity -superfluous -superfluously -superglue -superheat -superheated -superhero -superhuman -superimpose -superimposed -superimposes -superimposing -superimposition -superintend -superintendence -superintendent -superintendents -superior -superiority -superiors -superlative -superlatively -superlatives -superman -supermarket -supermarkets -supermen -supermodel -supermodels -supernatant -supernatural -supernaturally -supernova -supernovae -supernumerary -superordinate -superpose -superposed -superposition -superpositions -superpower -superpowers -supersaturated -supersaturation -superscript -superscripts -supersede -superseded -supersedes -superseding -supersonic -supersonically -superstar -superstars -superstate -superstates -superstition -superstitions -superstitious -superstitiously -superstore -superstores -superstructure -superstructures -supertanker -supertankers -supervene -supervise -supervised -supervises -supervising -supervision -supervisions -supervisor -supervisors -supervisory -supine -supped -supper -suppers -supping -supplant -supplanted -supplanting -supple -supplement -supplemental -supplementary -supplementation -supplemented -supplementing -supplements -suppleness -suppliant -suppliants -supplicant -supplicants -supplicate -supplicating -supplication -supplications -supplied -supplier -suppliers -supplies -supply -supplying -support -supportability -supportable -supported -supporter -supporters -supporting -supportive -supports -suppose -supposed -supposedly -supposes -supposing -supposition -suppositions -suppositories -suppress -suppressed -suppresses -suppressible -suppressing -suppression -suppressive -suppressor -suppressors -suppurating -supranational -supranationalism -supremacist -supremacy -supremal -supreme -supremely -supremo -sups -surcharge -surcharged -surcharges -surd -sure -surefooted -surely -sureness -surer -surest -sureties -surety -surf -surface -surfaced -surfacer -surfaces -surfacing -surfactant -surfactants -surfboard -surfed -surfeit -surfer -surfers -surfing -surfings -surfs -surge -surged -surgeon -surgeons -surgeries -surgery -surges -surgical -surgically -surging -surliest -surlily -surliness -surly -surmise -surmised -surmises -surmising -surmount -surmountable -surmounted -surmounting -surname -surnames -surpass -surpassed -surpasses -surpassing -surplice -surplus -surpluses -surprise -surprised -surprises -surprising -surprisingly -surreal -surrealism -surrealist -surrealistic -surrealists -surreality -surrender -surrendered -surrendering -surrenders -surreptitious -surreptitiously -surrey -surreys -surrogacy -surrogate -surrogates -surround -surrounded -surrounding -surroundings -surrounds -surtax -surtitles -surveillance -survey -surveyed -surveying -surveyor -surveyors -surveys -survivability -survivable -survival -survivals -survive -survived -survives -surviving -survivor -survivors -susceptibilities -susceptibility -susceptible -sushi -sushis -suspect -suspected -suspecting -suspects -suspend -suspended -suspender -suspenders -suspending -suspends -suspense -suspension -suspensions -suspicion -suspicions -suspicious -suspiciously -sustain -sustainability -sustainable -sustainably -sustained -sustaining -sustains -sustenance -suture -sutures -suzerainty -swab -swabbed -swabbing -swabs -swad -swaddled -swaddling -swads -swag -swagger -swaggered -swaggering -swags -swahili -swains -swallow -swallowed -swallower -swallowing -swallows -swallowtail -swam -swamp -swamped -swampier -swampiest -swamping -swampland -swamplands -swamps -swampy -swan -swans -swansong -swap -swappable -swapped -swapper -swappers -swapping -swaps -sward -swarm -swarmed -swarming -swarms -swarthier -swarthiest -swarthy -swashbuckling -swastika -swastikas -swat -swathe -swathed -swathes -swats -swatted -swatting -sway -swayed -swaying -sways -swazi -swazis -swear -swearer -swearers -swearing -swears -swearword -swearwords -sweat -sweatband -sweated -sweater -sweaters -sweatier -sweatiest -sweatily -sweating -sweats -sweatshirt -sweatshirts -sweatshop -sweatshops -sweaty -swede -sweden -swedish -sweep -sweepable -sweeper -sweepers -sweeping -sweepingly -sweepings -sweeps -sweepstake -sweet -sweetbread -sweetcorn -sweeten -sweetened -sweetener -sweeteners -sweetening -sweetens -sweeter -sweetest -sweetheart -sweethearts -sweetie -sweetish -sweetly -sweetmeat -sweetmeats -sweetness -sweetpea -sweets -sweetshop -swell -swelled -swelling -swellings -swells -sweltering -sweltry -swept -swerve -swerved -swerves -swerving -swift -swifter -swiftest -swiftlet -swiftly -swiftness -swifts -swill -swilled -swilling -swim -swimmer -swimmers -swimming -swimmingly -swims -swimsuit -swimsuits -swimwear -swindle -swindled -swindler -swindlers -swindles -swindling -swine -swines -swing -swingeing -swinger -swingers -swinging -swings -swingy -swipe -swiped -swipes -swirl -swirled -swirling -swirls -swish -swished -swishing -swishy -swiss -switch -switchable -switchback -switchboard -switchboards -switched -switcher -switches -switchgear -switching -swivel -swivelled -swivelling -swivels -swollen -swoon -swooned -swooning -swoons -swoop -swooped -swooping -swoops -swop -swopped -swopping -swops -sword -swordfish -swords -swordsman -swordsmen -swore -sworn -swot -swots -swotted -swotting -swum -swung -sycamore -sycamores -sycophancy -sycophant -sycophantic -sycophantically -sycophants -sydney -syllabary -syllabi -syllabic -syllable -syllables -syllabub -syllabus -syllabuses -syllogism -syllogisms -syllogistic -sylph -sylphs -symbiont -symbiosis -symbiotic -symbiotically -symbol -symbolic -symbolical -symbolically -symbolisation -symbolise -symbolised -symbolises -symbolising -symbolism -symbolist -symbolists -symbols -symmetric -symmetrical -symmetrically -symmetries -symmetrisation -symmetrising -symmetry -sympathetic -sympathetically -sympathies -sympathise -sympathised -sympathiser -sympathisers -sympathises -sympathising -sympathy -symphonic -symphonies -symphonists -symphony -symposia -symposium -symptom -symptomatic -symptomatically -symptomless -symptoms -synagogue -synagogues -synapse -synapses -synaptic -sync -synchronic -synchronicity -synchronisation -synchronise -synchronised -synchronises -synchronising -synchronous -synchronously -synchrony -synchrotron -syncopated -syncopation -syncretic -syndicalism -syndicalist -syndicate -syndicated -syndicates -syndication -syndrome -syndromes -synergism -synergistic -synergy -synod -synodic -synods -synonym -synonymic -synonymous -synonymously -synonyms -synonymy -synopses -synopsis -synoptic -synovial -syntactic -syntactical -syntactically -syntagmatic -syntax -syntheses -synthesis -synthesise -synthesised -synthesiser -synthesisers -synthesises -synthesising -synthetic -synthetically -synthetics -syphilis -syphilitic -syphon -syphoned -syphoning -syphons -syria -syrian -syringe -syringes -syrup -syrups -syrupy -system -systematic -systematically -systematisation -systematise -systemic -systemically -systems -systoles -systolic -taal -tab -tabasco -tabbed -tabbing -tabby -tabernacle -tabernacles -table -tableau -tableaux -tablebay -tablecloth -tablecloths -tabled -tableland -tables -tablespoon -tablespoonfuls -tablespoons -tablet -tablets -tableware -tabling -tabloid -tabloids -taboo -taboos -tabs -tabular -tabulate -tabulated -tabulates -tabulating -tabulation -tabulations -tabulator -tachograph -tachographs -tachycardia -tachyon -tachyons -tacit -tacitly -taciturn -tack -tacked -tackier -tackiest -tackiness -tacking -tackle -tackled -tackler -tackles -tackling -tacks -tacky -tact -tactful -tactfully -tactic -tactical -tactically -tactician -tactics -tactile -tactless -tactlessly -tactlessness -tactual -tadpole -tadpoles -taffeta -tag -tagged -tagging -tags -tahiti -tahr -tail -tailed -tailing -tailless -taillessness -tailor -tailorable -tailored -tailoring -tailormade -tailors -tailpiece -tailplane -tails -tailspin -tailwind -taint -tainted -tainting -taints -taipei -taiwan -take -takeable -takeaway -takeaways -taken -takeover -takeovers -taker -takers -takes -taking -takings -talc -talcum -tale -talent -talented -talentless -talents -tales -talisman -talismans -talk -talkative -talkativeness -talkback -talked -talker -talkers -talkie -talkies -talking -talkings -talks -tall -tallboy -taller -tallest -tallied -tallies -tallish -tallness -tallow -tally -tallyho -tallying -talmud -talon -talons -tambourine -tambourines -tame -tamed -tamely -tameness -tamer -tamers -tames -tamest -taming -tamp -tamped -tamper -tampered -tampering -tampers -tan -tandem -tandems -tang -tangelo -tangent -tangential -tangentially -tangents -tangerine -tangerines -tangible -tangibly -tangle -tangled -tangles -tangling -tango -tangy -tank -tankage -tankard -tankards -tanked -tanker -tankers -tankful -tanking -tanks -tanned -tanner -tanneries -tanners -tannery -tannic -tannin -tanning -tannins -tannoy -tans -tantalise -tantalised -tantalising -tantalisingly -tantalum -tantamount -tantrum -tantrums -tanzania -tap -tapas -tapdance -tapdancing -tape -taped -taper -taperecorded -taperecording -tapered -taperer -tapering -tapers -tapes -tapestries -tapestry -tapeworm -tapeworms -taping -tapioca -tapir -tapped -tappers -tapping -tappings -taproom -taps -tar -taramasalata -tarantula -tarantulas -tardily -tardiness -tardy -tares -target -targeted -targeting -targets -tariff -tariffs -tarmac -tarmacadam -tarn -tarnish -tarnished -tarnishing -tarns -tarot -tarpaulin -tarpaulins -tarragon -tarred -tarried -tarrier -tarriest -tarring -tarry -tarrying -tars -tarsal -tarsus -tart -tartan -tartans -tartar -tartaric -tartly -tartness -tartrate -tarts -tarty -tarzan -task -tasked -tasking -taskmaster -tasks -tasmania -tassel -tasselled -tassels -taste -tasted -tasteful -tastefully -tastefulness -tasteless -tastelessly -tastelessness -taster -tasters -tastes -tastier -tastiest -tasting -tastings -tasty -tat -tattered -tatters -tattle -tattoo -tattooed -tattooing -tattoos -tatty -tau -taught -taunt -taunted -taunter -taunting -tauntingly -taunts -taut -tauter -tautest -tautly -tautness -tautological -tautologically -tautologies -tautologous -tautology -tavern -taverna -tavernas -taverns -tawdry -tawny -tax -taxable -taxation -taxdeductible -taxed -taxes -taxfree -taxi -taxicab -taxidermist -taxidermists -taxidermy -taxied -taxies -taxiing -taxing -taxis -taxman -taxonomic -taxonomical -taxonomies -taxonomist -taxonomists -taxonomy -taxpayer -taxpayers -taxpaying -taylor -tea -teabag -teabags -teach -teachable -teacher -teachers -teaches -teaching -teachings -teacloth -teacup -teacups -teak -teal -team -teamed -teaming -teammate -teammates -teams -teamster -teamwork -teaparty -teapot -teapots -tear -tearaway -teardrop -teardrops -tearful -tearfully -tearfulness -teargas -tearing -tearless -tearoom -tearooms -tears -tearstained -teas -tease -teased -teaser -teasers -teases -teashop -teashops -teasing -teasingly -teaspoon -teaspoonful -teaspoonfuls -teaspoons -teat -teatime -teatimes -teats -tech -technical -technicalities -technicality -technically -technician -technicians -technique -techniques -technocracies -technocracy -technocrat -technocratic -technocrats -technological -technologically -technologies -technologist -technologists -technology -technophiles -technophobia -technophobic -tectonic -tectonically -tectonics -ted -teddies -teddy -tedious -tediously -tediousness -tedium -tediums -teds -tee -teed -teehee -teeing -teem -teemed -teeming -teems -teen -teenage -teenaged -teenager -teenagers -teeniest -teens -teensy -teeny -teenyweeny -teepee -teepees -tees -teeter -teetered -teetering -teeth -teethe -teethed -teethes -teething -teethmarks -teetotal -teetotalism -teetotaller -teetotallers -teheran -telaviv -telecommunication -telecommunications -telecommuting -telecoms -teleconference -telegram -telegrams -telegraph -telegraphed -telegraphic -telegraphing -telegraphs -telegraphy -telekinesis -telemetry -teleological -teleology -telepathic -telepathically -telepathy -telephone -telephoned -telephones -telephonic -telephoning -telephonist -telephonists -telephony -telephoto -teleprinter -teleprinters -telesales -telescope -telescoped -telescopes -telescopic -telescoping -teletext -telethon -teletype -teletypes -televise -televised -televising -television -televisions -televisual -teleworking -telex -telexes -tell -teller -tellers -telling -tellingly -tells -telltale -telly -temerity -temper -tempera -temperament -temperamental -temperamentally -temperaments -temperance -temperate -temperately -temperature -temperatures -tempered -tempering -tempers -tempest -tempests -tempestuous -tempi -template -templates -temple -temples -tempo -temporal -temporality -temporally -temporaries -temporarily -temporary -tempt -temptation -temptations -tempted -tempter -tempters -tempting -temptingly -temptress -tempts -ten -tenability -tenable -tenacious -tenaciously -tenacity -tenancies -tenancy -tenant -tenanted -tenantry -tenants -tench -tend -tended -tendencies -tendency -tendentious -tendentiously -tender -tendered -tenderer -tenderest -tendering -tenderly -tenderness -tenders -tending -tendon -tendons -tendril -tendrils -tends -tenement -tenements -tenet -tenets -tenfold -tenners -tennis -tenon -tenor -tenors -tens -tense -tensed -tensely -tenseness -tenser -tenses -tensest -tensile -tensing -tension -tensional -tensioned -tensions -tensity -tensor -tensors -tent -tentacle -tentacled -tentacles -tentative -tentatively -tented -tenterhooks -tenth -tenths -tents -tenuous -tenuously -tenure -tenured -tenures -tenurial -tepee -tepid -tequila -tercentenary -term -termed -terminal -terminally -terminals -terminate -terminated -terminates -terminating -termination -terminations -terminator -terminators -terming -termini -terminological -terminologies -terminology -terminus -termite -termites -termly -terms -tern -ternary -terns -terrace -terraced -terraces -terracing -terracotta -terraform -terraformed -terrain -terrains -terrapin -terrapins -terrazzo -terrestrial -terrible -terribly -terrier -terriers -terrific -terrifically -terrified -terrifies -terrify -terrifying -terrifyingly -terrine -territorial -territoriality -territorially -territories -territory -terror -terrorise -terrorised -terrorising -terrorism -terrorist -terrorists -terrors -terrorstricken -terry -terse -tersely -terseness -terser -tertiaries -tertiary -tessellated -tessellation -tessellations -tesseral -test -testability -testable -testament -testamentary -testaments -testdrive -testdriving -tested -tester -testers -testes -testicle -testicles -testicular -testier -testiest -testified -testifies -testify -testifying -testily -testimonial -testimonials -testimonies -testimony -testiness -testing -testings -testis -testosterone -tests -testtube -testy -tetanus -tetchily -tetchy -tether -tethered -tethering -tethers -tetra -tetrachloride -tetrahedra -tetrahedral -tetrahedron -tetrahedrons -tetrameters -tetroxide -texan -texans -texas -text -textbook -textbooks -textile -textiles -texts -textual -textuality -textually -textural -texturally -texture -textured -textures -thai -thalamus -thalidomide -thallium -thames -than -thane -thank -thanked -thankful -thankfully -thankfulness -thanking -thankless -thanklessly -thanks -thanksgiving -that -thatch -thatched -thatcher -thatchers -thatching -thaumaturge -thaw -thawed -thawing -thaws -the -theatre -theatres -theatrical -theatricality -theatrically -theatricals -thebes -thee -theft -thefts -their -theirs -theism -theist -theistic -theists -them -themas -thematic -thematically -theme -themed -themes -themselves -then -thence -thenceforth -thenceforward -theocracies -theocracy -theodolite -theodolites -theologian -theologians -theological -theologically -theologies -theologists -theology -theorem -theorems -theoretic -theoretical -theoretically -theoretician -theoreticians -theories -theorisation -theorise -theorised -theorises -theorising -theorist -theorists -theory -theosophy -therapeutic -therapeutically -therapies -therapist -therapists -therapy -there -thereabouts -thereafter -thereby -therefor -therefore -therefrom -therein -thereof -thereon -thereto -thereunder -thereupon -therewith -thermal -thermally -thermals -thermochemical -thermodynamic -thermodynamical -thermodynamically -thermodynamics -thermoelectric -thermometer -thermometers -thermoplastic -thermostat -thermostatic -thermostatically -thermostats -therms -thesauri -thesaurus -these -thesis -thespian -thespians -theta -they -thick -thicken -thickened -thickening -thickens -thicker -thickest -thicket -thickets -thickish -thickly -thickness -thicknesses -thickset -thickskinned -thief -thieve -thieved -thievery -thieves -thieving -thievish -thievishness -thigh -thighs -thimble -thimbleful -thimblefuls -thimbles -thin -thine -thing -things -think -thinkable -thinker -thinkers -thinking -thinks -thinktank -thinly -thinned -thinner -thinners -thinness -thinnest -thinning -thinnish -thins -third -thirdly -thirds -thirst -thirsted -thirstier -thirstiest -thirstily -thirsting -thirsts -thirsty -thirteen -thirteenth -thirties -thirtieth -thirty -this -thistle -thistles -thither -thomas -thong -thongs -thor -thoracic -thorax -thorium -thorn -thornier -thorniest -thorns -thorny -thorough -thoroughbred -thoroughbreds -thoroughfare -thoroughfares -thoroughgoing -thoroughly -thoroughness -those -thou -though -thought -thoughtful -thoughtfully -thoughtfulness -thoughtless -thoughtlessly -thoughtlessness -thoughtprovoking -thoughts -thousand -thousandfold -thousands -thousandth -thousandths -thrall -thrash -thrashed -thrasher -thrashes -thrashing -thrashings -thread -threadbare -threaded -threading -threads -threat -threaten -threatened -threatening -threateningly -threatens -threats -three -threedimensional -threefold -threequarters -threes -threesome -threesomes -thresh -threshed -thresher -threshers -threshing -threshold -thresholds -threw -thrice -thrift -thriftier -thriftiest -thriftless -thrifts -thrifty -thrill -thrilled -thriller -thrillers -thrilling -thrillingly -thrills -thrive -thrived -thrives -thriving -throat -throatier -throatiest -throatily -throats -throaty -throb -throbbed -throbbing -throbs -thromboses -thrombosis -thrombus -throne -throned -thrones -throng -thronged -thronging -throngs -throroughly -throttle -throttled -throttles -throttling -through -throughout -throughput -throw -throwaway -throwback -thrower -throwers -throwing -thrown -throws -thrum -thrush -thrushes -thrust -thruster -thrusters -thrusting -thrusts -thud -thudded -thudding -thuds -thug -thuggery -thuggish -thugs -thumb -thumbed -thumbing -thumbnail -thumbprint -thumbs -thumbscrew -thumbscrews -thump -thumped -thumping -thumps -thunder -thunderbolt -thunderbolts -thunderclap -thunderclaps -thundercloud -thundered -thunderflashes -thundering -thunderous -thunderously -thunders -thunderstorm -thunderstorms -thunderstruck -thundery -thursday -thus -thwack -thwart -thwarted -thwarting -thwarts -thy -thyme -thymus -thyristor -thyristors -thyroid -thyroids -thyself -tiara -tiaras -tibia -tibiae -tic -tick -ticked -ticker -tickers -ticket -ticketed -tickets -ticking -tickle -tickled -tickler -tickles -tickling -ticklish -ticks -tics -tidal -tidbit -tidbits -tiddlers -tiddlywinks -tide -tideless -tides -tideway -tidied -tidier -tidies -tidiest -tidily -tidiness -tiding -tidings -tidy -tidying -tie -tiebreak -tied -tier -tiered -tiers -ties -tiger -tigerish -tigers -tight -tighten -tightened -tightening -tightens -tighter -tightest -tightfisted -tightlipped -tightly -tightness -tightrope -tights -tightwad -tigress -tigris -tikka -tilde -tildes -tile -tiled -tiler -tiles -tiling -tilings -till -tillage -tilled -tiller -tillers -tilling -tills -tilt -tilted -tilting -tilts -timber -timbered -timbre -time -timebase -timeconsuming -timed -timeframe -timehonoured -timekeeper -timekeepers -timekeeping -timelapse -timeless -timelessness -timeliness -timely -timeout -timepiece -timer -timers -times -timescale -timescales -timeshare -timetable -timetabled -timetables -timetabling -timid -timidity -timidly -timing -timings -tin -tincan -tincture -tinctured -tinder -tinderbox -tinfoil -tinge -tinged -tinges -tingle -tingled -tingles -tinglier -tingliest -tingling -tingly -tinier -tiniest -tinker -tinkered -tinkering -tinkers -tinkle -tinkled -tinkling -tinkly -tinned -tinner -tinnier -tinniest -tinnily -tinnitus -tinny -tinopener -tinpot -tins -tinsel -tinsels -tint -tinted -tinting -tintings -tints -tinware -tiny -tip -tipoff -tipoffs -tipped -tipper -tipping -tipple -tippling -tips -tipster -tipsters -tipsy -tiptoe -tiptoed -tiptoeing -tiptoes -tiptop -tirade -tirades -tire -tired -tiredly -tiredness -tireless -tirelessly -tires -tiresome -tiresomely -tiring -tiro -tissue -tissues -tit -titan -titanic -titanically -titanium -titans -titbit -titbits -titfortat -tithe -tithes -tithing -titillate -titillated -titillating -titillation -title -titled -titles -titling -titrated -titration -titre -titres -tits -titter -tittered -tittering -titters -titular -to -toad -toadies -toads -toadstool -toadstools -toady -toast -toasted -toaster -toasters -toasting -toasts -toasty -tobacco -tobacconist -tobacconists -tobago -toboggan -tobogganing -toby -toccata -tocsin -today -toddle -toddled -toddler -toddlers -toddling -toddy -todies -toe -toed -toehold -toeing -toeless -toenail -toenails -toes -toffee -toffees -toffy -tofu -tog -toga -togas -together -togetherness -toggle -toggled -toggles -toggling -togo -togs -toil -toiled -toiler -toilet -toileting -toiletries -toiletry -toilets -toilette -toiling -toils -toitoi -tokamak -token -tokenism -tokenistic -tokens -tokyo -tolbooth -told -toledo -tolerable -tolerably -tolerance -tolerances -tolerant -tolerantly -tolerate -tolerated -tolerates -tolerating -toleration -toll -tolled -tollgate -tolling -tolls -toluene -tomahawk -tomahawks -tomato -tomb -tombola -tomboy -tomboys -tombs -tombstone -tombstones -tomcat -tome -tomes -tomfoolery -tomography -tomorrow -tomorrows -tomtom -ton -tonal -tonalities -tonality -tonally -tone -toned -tonedeaf -toneless -tonelessly -toner -toners -tones -tonga -tongs -tongue -tongueincheek -tongues -tonguetied -tonguetwister -tonguetwisters -tonic -tonics -tonight -toning -tonnage -tonnages -tonne -tonnes -tons -tonsil -tonsillectomy -tonsillitis -tonsils -tonsure -tony -too -took -tool -toolbox -toolboxes -tooled -tooling -toolmaker -toolmaking -tools -toot -tooted -tooth -toothache -toothbrush -toothbrushes -toothed -toothier -toothiest -toothless -toothmarks -toothpaste -toothpick -toothpicks -toothsome -toothy -tooting -tootle -top -topaz -topazes -topcoat -topheavy -topiary -topic -topical -topicality -topically -topics -topless -toplevel -topmost -topnotch -topographic -topographical -topographically -topography -topological -topologically -topologies -topologist -topologists -topology -topped -topper -topping -toppings -topple -toppled -topples -toppling -tops -topsoil -topspin -topsyturvy -torah -torch -torchbearer -torchbearers -torched -torches -torchlight -torchlit -tore -tori -tories -torment -tormented -tormenting -tormentor -tormentors -torments -torn -tornado -toronto -torpedo -torpedoed -torpid -torpor -torque -torques -torrent -torrential -torrents -torrid -torsion -torsional -torsions -torso -tortoise -tortoises -tortoiseshell -torts -tortuous -tortuously -torture -tortured -torturer -torturers -tortures -torturing -torturous -torus -tory -toss -tossed -tossers -tosses -tossing -tossup -tossups -tot -total -totalising -totalitarian -totalitarianism -totality -totalled -totalling -totally -totals -totem -totemic -totems -tots -totted -totter -tottered -tottering -totters -totting -toucans -touch -touchandgo -touchdown -touchdowns -touche -touched -toucher -touches -touchier -touchiest -touchiness -touching -touchingly -touchy -tough -toughen -toughened -toughens -tougher -toughest -toughie -toughies -toughly -toughness -toughs -toupee -tour -toured -tourer -tourers -touring -tourism -tourist -touristic -tourists -touristy -tournament -tournaments -tourney -tourniquet -tours -tousled -tousles -tout -touted -touting -touts -tow -toward -towards -towed -towel -towelled -towelling -towels -tower -towered -towering -towers -towing -town -towns -townscape -townscapes -townsfolk -township -townships -townsman -townsmen -townspeople -towpath -towpaths -tows -toxaemia -toxic -toxicity -toxicological -toxicology -toxin -toxins -toy -toyed -toying -toymaker -toys -toyshop -trace -traceability -traceable -traced -traceless -tracer -tracers -tracery -traces -trachea -tracheal -tracheostomy -tracheotomy -tracing -tracings -track -trackbed -tracked -tracker -trackers -tracking -trackless -tracks -tracksuit -tracksuits -trackway -trackways -tract -tractability -tractable -traction -tractor -tractors -tracts -trad -trade -tradeable -traded -tradein -tradeins -trademark -trademarked -trademarks -trader -traders -trades -tradesman -tradesmen -tradespeople -trading -tradings -tradition -traditional -traditionalism -traditionalist -traditionalists -traditionally -traditions -traduced -traducer -traffic -trafficked -trafficker -traffickers -trafficking -tragedian -tragedians -tragedies -tragedy -tragic -tragical -tragically -trail -trailed -trailer -trailers -trailing -trails -train -trained -trainee -trainees -trainer -trainers -training -trainings -trainload -trains -trait -traitor -traitorous -traitorously -traitors -traits -trajectories -trajectory -tram -tramcar -tramcars -tramlines -trammel -tramp -tramped -tramping -trample -trampled -tramples -trampling -trampoline -trampolines -trampolining -trampolinist -tramps -trams -tramway -tramways -trance -trances -tranche -tranches -tranny -tranquil -tranquillise -tranquillised -tranquilliser -tranquillisers -tranquillity -tranquilly -transact -transacted -transacting -transaction -transactional -transactions -transactor -transatlantic -transceiver -transceivers -transcend -transcended -transcendence -transcendent -transcendental -transcendentally -transcendentals -transcending -transcends -transcontinental -transcribe -transcribed -transcriber -transcribers -transcribes -transcribing -transcript -transcription -transcriptional -transcriptions -transcripts -transducer -transducers -transduction -transection -transept -transepts -transfer -transferability -transferable -transferee -transferees -transference -transferral -transferred -transferring -transfers -transfiguration -transfigured -transfinite -transfinitely -transfixed -transform -transformation -transformational -transformations -transformative -transformed -transformer -transformers -transforming -transforms -transfused -transfusing -transfusion -transfusions -transgress -transgressed -transgresses -transgressing -transgression -transgressions -transgressive -transgressor -transgressors -transhipment -transience -transient -transiently -transients -transistor -transistorised -transistors -transit -transition -transitional -transitions -transitive -transitively -transitivity -transitoriness -transitory -transits -translatable -translate -translated -translates -translating -translation -translational -translations -translator -translators -transliterate -transliterated -transliterates -transliterating -transliteration -transliterations -translucence -translucency -translucent -transmigration -transmissible -transmission -transmissions -transmissive -transmit -transmits -transmittable -transmittance -transmitted -transmitter -transmitters -transmitting -transmogrification -transmogrifies -transmogrify -transmutation -transmute -transmuted -transmuting -transnational -transom -transonic -transparencies -transparency -transparent -transparently -transpiration -transpire -transpired -transpires -transplant -transplantation -transplanted -transplanting -transplants -transponder -transponders -transport -transportability -transportable -transportation -transported -transporter -transporters -transporting -transports -transpose -transposed -transposes -transposing -transposition -transpositions -transverse -transversely -transvestism -transvestite -transvestites -trap -trapdoor -trapdoors -trapeze -trappable -trapped -trapper -trappers -trapping -trappings -traps -trash -trashed -trashy -trauma -traumas -traumata -traumatic -traumatise -traumatised -travail -travails -travel -travelled -traveller -travellers -travelling -travelogue -travelogues -travels -traversal -traversals -traverse -traversed -traverses -traversing -travesties -travesty -trawl -trawled -trawler -trawlers -trawling -trawlnet -trawls -tray -trays -treacherous -treacherously -treachery -treacle -tread -treader -treading -treadle -treadmill -treadmills -treads -treason -treasonable -treasonous -treasons -treasure -treasured -treasurer -treasurers -treasurership -treasures -treasuries -treasuring -treasury -treat -treatable -treated -treaties -treating -treatise -treatises -treatment -treatments -treats -treaty -treble -trebled -trebles -trebling -tree -treeless -trees -treetop -treetops -trefoil -trefoils -trek -trekked -trekker -trekkers -trekking -treks -trellis -trellised -trellises -tremble -trembled -trembler -trembles -trembling -tremblingly -tremblings -tremendous -tremendously -tremolo -tremor -tremors -tremulous -tremulously -tremulousness -trench -trenchant -trenchantly -trenched -trencher -trenches -trenching -trend -trendier -trendiest -trendiness -trends -trendy -trepanned -trepidation -trepidations -trespass -trespassed -trespasser -trespassers -trespasses -trespassing -tress -tresses -trestle -trestles -trews -triad -triadic -triads -triage -trial -trials -triangle -triangles -triangular -triangulate -triangulated -triangulating -triangulation -triangulations -triathlon -triatomic -tribal -tribalism -tribally -tribe -tribes -tribesman -tribesmen -tribespeople -tribulation -tribulations -tribunal -tribunals -tribune -tribunes -tributaries -tributary -tribute -tributes -trice -trick -tricked -trickery -trickier -trickiest -trickily -tricking -trickle -trickled -trickles -trickling -tricks -trickster -tricksters -tricky -tricolour -tricolours -tricycle -tricycles -trident -tridents -tried -triennial -trier -tries -triffid -triffids -trifle -trifled -trifler -trifles -trifling -trigger -triggered -triggerhappy -triggering -triggers -triglyceride -trigonometric -trigonometrical -trigonometry -trigram -trigrams -trigs -trikes -trilateral -trilby -trilingual -trill -trilled -trilling -trillion -trillions -trills -trilobite -trilobites -trilogies -trilogy -trim -trimaran -trimmed -trimmer -trimmers -trimming -trimmings -trimodal -trims -trinidad -trinity -trinket -trinkets -trio -trip -tripartite -tripe -triplane -triple -tripled -triples -triplet -triplets -triplex -triplicate -triplication -tripling -triply -tripod -tripods -tripoli -tripped -trippers -tripping -trips -triptych -tripwire -tripwires -trireme -trisecting -trisection -trisector -tristan -trite -triteness -tritium -triumph -triumphal -triumphalism -triumphalist -triumphant -triumphantly -triumphed -triumphing -triumphs -triumvirate -trivia -trivial -trivialisation -trivialisations -trivialise -trivialised -trivialises -trivialising -trivialities -triviality -trivially -trod -trodden -troglodyte -troglodytes -troika -troikas -troll -trolley -trolleys -trolling -trollish -trolls -trombone -trombones -trombonist -trombonists -troop -trooped -trooper -troopers -trooping -troops -troopship -trope -tropes -trophies -trophy -tropic -tropical -tropically -tropics -tropopause -troposphere -tropospheric -trot -trots -trotted -trotter -trotters -trotting -troubadour -troubadours -trouble -troubled -troublemaker -troublemakers -troubles -troubleshooter -troubleshooters -troubleshooting -troublesome -troublesomeness -troubling -trough -troughs -trounce -trounced -trounces -trouncing -troupe -trouper -troupers -troupes -trouser -trousers -trout -trouts -trove -trowel -trowels -troy -truancy -truant -truanting -truants -truce -truces -truck -trucks -truculence -truculent -truculently -trudge -trudged -trudges -trudging -true -trueblue -truer -truest -truffle -truffles -truism -truisms -truly -trump -trumped -trumpery -trumpet -trumpeted -trumpeter -trumpeters -trumpeting -trumpets -trumps -truncate -truncated -truncates -truncating -truncation -truncations -truncheon -truncheons -trundle -trundled -trundles -trundling -trunk -trunking -trunks -trunnion -trunnions -truss -trussed -trusses -trussing -trust -trusted -trustee -trustees -trusteeship -trustful -trustfully -trustfulness -trusties -trusting -trustingly -trusts -trustworthiness -trustworthy -trusty -truth -truthful -truthfully -truthfulness -truths -try -trying -tsetse -tshirt -tsunami -tswana -tswanas -tuareg -tuaregs -tuatara -tub -tuba -tubas -tubby -tube -tubed -tubeless -tuber -tubercular -tuberculosis -tubers -tubes -tubing -tubs -tubular -tubules -tuck -tucked -tucker -tuckers -tucking -tucks -tues -tuesday -tuesdays -tuft -tufted -tufting -tufts -tug -tugela -tugged -tugging -tugs -tuition -tulip -tulips -tumble -tumbled -tumbledown -tumbler -tumblers -tumbles -tumbling -tumbrils -tumescent -tummies -tummy -tumour -tumours -tumult -tumults -tumultuous -tumultuously -tumulus -tun -tuna -tunable -tunas -tundra -tundras -tune -tuned -tuneful -tunefully -tuneless -tunelessly -tuner -tuners -tunes -tungsten -tunic -tunics -tuning -tunings -tunisia -tunisian -tunnel -tunnelled -tunnellers -tunnelling -tunnels -tunny -tuns -tuppence -tuppences -turban -turbans -turbid -turbidity -turbine -turbines -turbo -turbocharged -turbocharger -turboprop -turbot -turbulence -turbulent -tureen -tureens -turf -turfed -turfs -turfy -turgid -turgidity -turgidly -turin -turk -turkey -turkeys -turkish -turks -turmeric -turmoil -turmoils -turn -turnabout -turnaround -turncoat -turncoats -turned -turner -turners -turning -turnings -turnip -turnips -turnkey -turnout -turnouts -turnover -turnovers -turnpike -turnround -turns -turnstile -turnstiles -turntable -turntables -turpentine -turpitude -turquoise -turret -turreted -turrets -turtle -turtleneck -turtles -tuscany -tusk -tusked -tusker -tusks -tussle -tussles -tussling -tussock -tussocks -tussocky -tutelage -tutelary -tutor -tutored -tutorial -tutorials -tutoring -tutors -tutu -tuxedo -twain -twang -twanged -twanging -twangs -tweak -tweaked -tweaking -tweaks -twee -tweed -tweeds -tweedy -tweeness -tweet -tweeter -tweeters -tweets -tweezers -twelfth -twelfths -twelve -twelves -twenties -twentieth -twenty -twice -twiddle -twiddled -twiddler -twiddles -twiddling -twiddly -twig -twigged -twiggy -twigs -twilight -twilit -twill -twin -twine -twined -twines -twinge -twinges -twining -twinkle -twinkled -twinkles -twinkling -twinned -twinning -twins -twirl -twirled -twirling -twirls -twist -twisted -twister -twisters -twisting -twists -twisty -twit -twitch -twitched -twitches -twitching -twitchy -twitter -twittered -twittering -two -twodimensional -twofaced -twofold -twosome -tycoon -tycoons -tying -tyke -tykes -type -typecast -typecasting -typed -typeface -typefaces -typeless -types -typescript -typescripts -typeset -typesets -typesetter -typesetters -typesetting -typewriter -typewriters -typewriting -typewritten -typhoid -typhoon -typhoons -typhus -typical -typicality -typically -typified -typifies -typify -typifying -typing -typings -typist -typists -typographer -typographers -typographic -typographical -typographically -typography -typological -typologically -typologies -typology -tyrannic -tyrannical -tyrannically -tyrannicide -tyrannies -tyrannise -tyrannised -tyrannous -tyranny -tyrant -tyrants -tyre -tyres -uboats -udder -udders -ufo -uganda -ugandan -uglier -ugliest -uglification -ugliness -ugly -uhuh -uke -ukraine -ukulele -ukuleles -ulcer -ulcerate -ulcerated -ulceration -ulcerations -ulcerous -ulcers -ulster -ulsters -ulterior -ultimacy -ultimate -ultimately -ultimatum -ultimatums -ultimo -ultra -ultramarine -ultramontane -ultrasonic -ultrasonics -ultrasound -ultraviolet -umbilical -umbilicus -umbra -umbrae -umbrage -umbrageous -umbras -umbrella -umbrellas -umlaut -umlauts -umpire -umpired -umpires -umpiring -umpteen -umpteenth -unabashed -unabashedly -unabated -unable -unabridged -unabsorbed -unacceptability -unacceptable -unacceptably -unaccepted -unaccommodating -unaccompanied -unaccountability -unaccountable -unaccountably -unaccounted -unaccustomed -unachievable -unacknowledged -unacquainted -unactivated -unadapted -unadaptive -unaddressable -unaddressed -unadjusted -unadorned -unadulterated -unadventurous -unadvertised -unaesthetic -unaffected -unaffectedly -unaffiliated -unaffordable -unafraid -unaided -unaligned -unalike -unallocated -unalloyed -unalterable -unalterably -unaltered -unambiguity -unambiguous -unambiguously -unambitious -unamended -unamused -unanimity -unanimous -unanimously -unannotated -unannounced -unanswerable -unanswered -unanticipated -unapologetic -unappealing -unappeased -unappetising -unappreciated -unappreciative -unapproachable -unapproved -unapt -unarchived -unarguable -unarguably -unarm -unarmed -unarms -unaroused -unarticulated -unary -unashamed -unashamedly -unasked -unassailable -unassailed -unassertive -unassigned -unassisted -unassociated -unassuaged -unassuming -unattached -unattainable -unattainably -unattained -unattended -unattenuated -unattractive -unattractiveness -unattributable -unattributed -unaudited -unauthenticated -unauthorised -unavailability -unavailable -unavailing -unavailingly -unavenged -unavoidable -unavoidably -unawakened -unaware -unawareness -unawares -unawed -unbalance -unbalanced -unbalances -unbalancing -unbanned -unbanning -unbaptised -unbar -unbarred -unbars -unbearable -unbearably -unbeatable -unbeaten -unbecoming -unbeknown -unbeknownst -unbelievability -unbelievable -unbelievably -unbelieved -unbeliever -unbelievers -unbelieving -unbend -unbending -unbent -unbiased -unbiasedly -unbiassed -unbiassedly -unbidden -unbind -unbleached -unblemished -unblinking -unblinkingly -unblock -unblocked -unblocking -unbloodied -unboiled -unbolt -unbolted -unbooked -unborn -unbosom -unbothered -unbound -unbounded -unbowed -unbraced -unbracketed -unbranded -unbreakability -unbreakable -unbridgeable -unbridged -unbridled -unbroken -unbruised -unbuckle -unbuckled -unbuckling -unbundled -unburden -unburdened -unburdening -unburied -unburned -unburnt -unbutton -unbuttoned -unbuttoning -uncalibrated -uncalled -uncancelled -uncannily -uncanny -uncapped -uncared -uncaring -uncased -uncatalogued -uncaught -unceasing -unceasingly -uncelebrated -uncensored -unceremoniously -uncertain -uncertainly -uncertainties -uncertainty -unchain -unchained -unchaining -unchallengeable -unchallenged -unchangeable -unchanged -unchanging -unchaperoned -uncharacteristic -uncharacteristically -uncharged -uncharismatic -uncharitable -uncharitably -uncharted -unchartered -uncheckable -unchecked -unchristened -unchristian -unchronicled -uncircumcised -uncivil -uncivilised -unclad -unclaimed -unclasped -unclasping -unclassifiable -unclassified -uncle -unclean -uncleanliness -uncleanly -unclear -uncleared -unclench -unclenched -unclenching -uncles -unclesam -unclimbable -unclimbed -unclog -unclosed -unclothed -unclouded -uncluttered -uncoil -uncoiled -uncoiling -uncoils -uncollated -uncollected -uncollimated -uncombed -uncomely -uncomfortable -uncomfortableness -uncomfortably -uncommitted -uncommon -uncommonly -uncommunicative -uncompetitive -uncompetitiveness -uncompilable -uncomplaining -uncomplainingly -uncompleted -uncomplicated -uncomplimentary -uncomprehending -uncomprehendingly -uncompressed -uncompromisable -uncompromising -uncompromisingly -unconcern -unconcerned -unconcernedly -unconditional -unconditionally -unconditioned -unconfined -unconfirmed -unconfused -uncongenial -unconnected -unconquerable -unconquered -unconscionable -unconscionably -unconscious -unconsciously -unconsciousness -unconsecrated -unconsidered -unconsoled -unconstitutional -unconstitutionally -unconstrained -unconsumed -uncontainable -uncontaminated -uncontentious -uncontested -uncontrollable -uncontrollably -uncontrolled -uncontroversial -uncontroversially -unconventional -unconventionally -unconverted -unconvinced -unconvincing -unconvincingly -uncooked -uncooperative -uncoordinated -uncorked -uncorrectable -uncorrected -uncorrelated -uncorroborated -uncorrupted -uncountable -uncountably -uncounted -uncouple -uncoupled -uncouth -uncouthness -uncover -uncovered -uncovering -uncovers -uncrackable -uncreased -uncreated -uncreative -uncredited -uncritical -uncritically -uncross -uncrossable -uncrossed -uncrowded -uncrowned -uncrushable -unction -unctuous -unctuously -uncultivated -uncultured -uncured -uncurled -uncut -undamaged -undated -undaunted -undead -undeceived -undecidability -undecidable -undecided -undeclared -undecorated -undefeated -undefended -undefiled -undefinable -undefined -undeliverable -undelivered -undemanding -undemocratic -undemocratically -undemonstrative -undeniable -undeniably -under -underachievement -underachieving -underarm -underbelly -underbody -undercarriage -underclass -underclothes -underclothing -undercoat -undercoating -undercooked -undercover -undercroft -undercurrent -undercurrents -undercut -undercuts -undercutting -underdeveloped -underdevelopment -underdog -underdogs -underdone -undereducated -underemphasis -underemployment -underestimate -underestimated -underestimates -underestimating -underestimation -underexploited -underfed -underfloor -underflow -underfoot -underframe -underfund -underfunded -underfunding -undergarment -undergarments -undergo -undergoes -undergoing -undergone -undergraduate -undergraduates -underground -undergrounds -undergrowth -underhand -underinvestment -underlain -underlay -underlie -underlies -underline -underlined -underlines -underling -underlings -underlining -underlinings -underloaded -underlying -undermanned -undermine -undermined -undermines -undermining -underneath -undernourished -undernourishment -underpaid -underpants -underparts -underpass -underpay -underpaying -underperformance -underperformed -underpin -underpinned -underpinning -underpinnings -underpins -underplay -underplayed -underplays -underpopulated -underpopulation -underpowered -underpriced -underpricing -underprivileged -underrate -underrated -underscored -undersea -underside -undersides -undersigned -undersized -underskirt -understaffed -understand -understandability -understandable -understandably -understander -understanding -understandingly -understandings -understands -understate -understated -understatement -understates -understating -understocked -understood -understorey -understudy -undertake -undertaken -undertaker -undertakers -undertakes -undertaking -undertakings -undertone -undertones -undertook -underutilised -undervalued -undervalues -undervaluing -underwater -underwear -underweight -underwent -underwood -underworld -underwrite -underwriter -underwriters -underwrites -underwriting -underwritten -underwrote -undeserved -undeservedly -undeserving -undesirability -undesirable -undesirables -undesirably -undesired -undetectability -undetectable -undetectably -undetected -undetermined -undeterred -undetonated -undeveloped -undiagnosable -undiagnosed -undid -undifferentiated -undigested -undignified -undiluted -undiminished -undiplomatic -undirected -undiscerning -undisciplined -undisclosed -undiscovered -undiscriminated -undiscriminating -undisguised -undisguisedly -undismayed -undisplayed -undisputed -undissipated -undistinguished -undistorted -undistributed -undisturbed -undivided -undo -undocumented -undoing -undoings -undomesticated -undone -undoubted -undoubtedly -undress -undressed -undressing -undrinkability -undrinkable -undroppable -undue -undulate -undulated -undulates -undulating -undulation -undulations -unduly -undying -unearned -unearth -unearthed -unearthing -unearthly -unearths -unease -uneasier -uneasiest -uneasily -uneasiness -uneasy -uneatable -uneaten -uneconomic -uneconomical -unedifying -unedited -uneducated -unelectable -unelected -unemotional -unemotionally -unemployable -unemployed -unemployment -unencrypted -unencumbered -unending -unendingly -unendurable -unenforceable -unengaged -unenlightened -unenlightening -unentered -unenthusiastic -unenthusiastically -unenviable -unequal -unequalled -unequally -unequivocal -unequivocally -unergonomic -unerring -unerringly -unescorted -unestablished -unethical -unethically -unevaluated -uneven -unevenly -unevenness -uneventful -uneventfully -unexacting -unexamined -unexceptionable -unexceptional -unexcited -unexciting -unexpanded -unexpected -unexpectedly -unexpectedness -unexpired -unexplainable -unexplained -unexploded -unexploited -unexplored -unexpressed -unexpurgated -unfailing -unfailingly -unfair -unfairly -unfairness -unfaithful -unfaithfulness -unfalsifiable -unfamiliar -unfamiliarity -unfancied -unfashionable -unfashionably -unfasten -unfastened -unfastening -unfathomable -unfathomed -unfatigued -unfavourable -unfavourably -unfavoured -unfeasible -unfeasibly -unfed -unfeeling -unfeelingly -unfeigned -unfelt -unfeminine -unfenced -unfertilised -unfetchable -unfettered -unfilled -unfinished -unfired -unfirm -unfit -unfitness -unfits -unfitting -unfix -unfixed -unflagging -unflattering -unflawed -unfledged -unflinching -unflinchingly -unfocused -unfocussed -unfold -unfolded -unfolding -unfolds -unforced -unfordable -unforeseeable -unforeseen -unforgettable -unforgivable -unforgivably -unforgiven -unforgiving -unformed -unforthcoming -unfortunate -unfortunately -unfortunates -unfounded -unfreeze -unfreezing -unfrequented -unfriendlier -unfriendliest -unfriendliness -unfriendly -unfrozen -unfruitful -unfulfillable -unfulfilled -unfunded -unfunny -unfurl -unfurled -unfurling -unfurls -unfurnished -unfussy -ungainly -ungenerous -ungenerously -ungentlemanly -ungerminated -unglamorous -unglazed -ungodly -ungovernable -ungoverned -ungraceful -ungracious -ungraciously -ungrammatical -ungrateful -ungratefully -ungrounded -unguarded -unguessable -unguided -ungulates -unhampered -unhand -unhandy -unhappier -unhappiest -unhappily -unhappiness -unhappy -unharmed -unhealthier -unhealthiest -unhealthily -unhealthy -unheard -unheated -unheeded -unhelpful -unhelpfully -unheralded -unheroic -unhesitating -unhesitatingly -unhidden -unhindered -unhinge -unhinged -unholy -unhonoured -unhook -unhooked -unhooks -unhoped -unhuman -unhurried -unhurriedly -unhurt -unhygienic -unhyphenated -unicameral -unicellular -unicorn -unicorns -unicycle -unicycles -unicyclist -unicyclists -unideal -unidentifiable -unidentified -unidirectional -unifiable -unification -unified -unifier -unifies -uniform -uniformed -uniformity -uniformly -uniforms -unify -unifying -unilateral -unilateralism -unilateralist -unilaterally -unillustrated -unimaginable -unimaginably -unimaginative -unimaginatively -unimagined -unimpaired -unimpeachable -unimpeded -unimplementable -unimplemented -unimportance -unimportant -unimpressed -unimpressive -unimproved -unincorporated -uninfected -uninfluenced -uninformative -uninformatively -uninformed -uninhabitable -uninhabited -uninhibited -uninhibitedly -uninitialised -uninitiated -uninjured -uninspired -uninspiring -uninsulated -uninsurable -uninsured -unintellectual -unintelligent -unintelligible -unintended -unintentional -unintentionally -uninterested -uninterestedly -uninteresting -uninterpretable -uninterpreted -uninterrupted -uninterruptedly -unintuitive -uninvented -uninvited -uninviting -uninvolved -union -unionisation -unionised -unionism -unionist -unionists -unions -unipolar -unique -uniquely -uniqueness -unisex -unison -unisons -unissued -unit -unitary -unite -united -unites -unities -uniting -units -unity -universal -universalism -universalist -universality -universally -universals -universe -universes -universities -university -unjam -unjammed -unjamming -unjaundiced -unjust -unjustifiable -unjustifiably -unjustified -unjustly -unjustness -unkempt -unkept -unkind -unkindest -unkindly -unkindness -unknightly -unknowable -unknowing -unknowingly -unknown -unknowns -unlabelled -unlace -unlaced -unlacing -unladen -unladylike -unlamented -unlatching -unlawful -unlawfully -unlawfulness -unleaded -unlearn -unlearned -unleash -unleashed -unleashes -unleashing -unleavened -unless -unlicensed -unlike -unlikeable -unlikeliest -unlikelihood -unlikeliness -unlikely -unlimited -unlined -unlink -unlinked -unlisted -unlit -unload -unloaded -unloading -unloads -unlock -unlocked -unlocking -unlocks -unloose -unlovable -unloved -unlovely -unloving -unluckier -unluckiest -unluckily -unlucky -unmade -unmagnified -unmaintainable -unmaintained -unmaking -unmanageable -unmanageably -unmanly -unmanned -unmannerly -unmapped -unmarked -unmarried -unmask -unmasked -unmasks -unmatchable -unmatched -unmeasurable -unmechanised -unmeetable -unmelodious -unmemorable -unmemorised -unmentionable -unmentionables -unmentioned -unmercifully -unmerited -unmet -unmissable -unmistakable -unmistakably -unmistakeable -unmistakeably -unmitigated -unmixed -unmnemonic -unmodifiable -unmodified -unmolested -unmonitored -unmotivated -unmounted -unmoved -unmoving -unmusical -unmusically -unmutilated -unmuzzled -unnamed -unnatural -unnaturally -unnavigable -unnecessarily -unnecessary -unneeded -unnerve -unnerved -unnerving -unnervingly -unnoted -unnoticeable -unnoticed -unnumbered -unobjectionable -unobliging -unobservable -unobservant -unobserved -unobstructed -unobtainable -unobtrusive -unobtrusively -unoccupied -unofficial -unofficially -unopened -unopposed -unoptimised -unordered -unorganised -unoriginal -unoriginality -unorthodox -unorthodoxy -unowned -unpack -unpacked -unpackers -unpacking -unpacks -unpaid -unpainted -unpaired -unpalatable -unparalleled -unpardonable -unparodied -unpasted -unpasteurised -unpatriotic -unpaved -unpeeled -unperceived -unpersonalised -unpersuaded -unpersuasive -unperturbed -unphysical -unpick -unpicked -unpicking -unplaced -unplanned -unplayability -unplayable -unpleasant -unpleasantly -unpleasantness -unpleasing -unploughed -unplug -unplugged -unplugging -unpoetical -unpolished -unpolluted -unpopular -unpopularity -unpopulated -unportable -unpractical -unpractised -unprecedented -unprecedentedly -unpredictability -unpredictable -unpredictably -unpredicted -unprejudiced -unpremeditated -unprepared -unpreparedness -unprepossessing -unpressurised -unpretending -unpretentious -unprincipled -unprintable -unprinted -unprivileged -unproblematic -unprocessed -unproductive -unprofessional -unprofitable -unprofitably -unpromising -unprompted -unpronounceable -unpronounced -unprotected -unprovable -unproved -unproven -unprovoked -unpublicised -unpublishable -unpublished -unpunctual -unpunctuality -unpunished -unqualified -unquantifiable -unquantified -unquenchable -unquestionable -unquestionably -unquestioned -unquestioning -unquestioningly -unquiet -unquote -unquoted -unraisable -unravel -unravelled -unravelling -unravels -unreachable -unreached -unread -unreadability -unreadable -unready -unreal -unrealisable -unrealised -unrealistic -unrealistically -unreality -unreasonable -unreasonableness -unreasonably -unreasoned -unreasoning -unreceived -unreceptive -unrecognisable -unrecognisably -unrecognised -unrecommended -unreconciled -unreconstructed -unrecorded -unrecoverable -unredeemed -unreduced -unrefereed -unreferenced -unreferencing -unrefined -unreflected -unreformed -unrefreshed -unrefrigerated -unregarded -unregenerate -unregistered -unregulated -unrehearsed -unrelated -unreleasable -unreleased -unrelenting -unrelentingly -unreliability -unreliable -unreliably -unrelieved -unremarkable -unremarked -unremembered -unremitting -unremittingly -unrepairable -unrepeatability -unrepeatable -unrepeated -unrepentant -unrepentantly -unreported -unrepresentable -unrepresentative -unrepresented -unreproducible -unrequested -unrequited -unreserved -unreservedly -unresisting -unresistingly -unresolvable -unresolved -unresponsive -unresponsiveness -unrest -unrestrained -unrestricted -unrests -unrevealed -unrevealing -unrevised -unrewarded -unrewarding -unriddle -unripe -unrivalled -unroll -unrolled -unrolling -unromantic -unruffled -unruliness -unruly -unsaddled -unsafe -unsafely -unsafeness -unsaid -unsaleable -unsalted -unsanitary -unsatisfactorily -unsatisfactoriness -unsatisfactory -unsatisfiable -unsatisfied -unsatisfying -unsaturated -unsaved -unsavory -unsavoury -unscaled -unscathed -unscheduled -unscientific -unscramble -unscrambled -unscrambles -unscrambling -unscratched -unscrew -unscrewed -unscrewing -unscripted -unscrupulous -unseal -unsealable -unsealed -unsealing -unseasonable -unseasonably -unseasonal -unseat -unseated -unseaworthiness -unsecured -unseeded -unseeing -unseeingly -unseemly -unseen -unselected -unselfconscious -unselfconsciously -unselfish -unselfishly -unselfishness -unsellable -unsensational -unsent -unsentimental -unserviceable -unserviced -unset -unsettle -unsettled -unsettling -unshackled -unshaded -unshakable -unshakeable -unshaken -unshaped -unshapen -unsharable -unshared -unshaved -unshaven -unsheathed -unshielded -unshockable -unshod -unshorn -unshrinking -unsighted -unsightly -unsigned -unsimplified -unsinkable -unskilful -unskilled -unsliced -unsmiling -unsmilingly -unsmooth -unsociable -unsocial -unsoiled -unsold -unsolder -unsolicited -unsolvable -unsolved -unsophisticated -unsophistication -unsorted -unsought -unsound -unsoundness -unspanned -unspeakable -unspeakably -unspecialised -unspecific -unspecified -unspectacular -unspent -unspoiled -unspoilt -unspoken -unsporting -unstable -unstack -unstacked -unstacking -unstained -unstamped -unstated -unsteadily -unsteadiness -unsteady -unsterilised -unsticking -unstimulated -unstinting -unstintingly -unstirred -unstoppable -unstoppably -unstopped -unstrapped -unstressed -unstretchable -unstructured -unstuck -unsubdued -unsubsidised -unsubstantial -unsubstantiated -unsubstituted -unsubtle -unsubtly -unsuccessful -unsuccessfully -unsuitability -unsuitable -unsuitableness -unsuitably -unsuited -unsullied -unsung -unsupervised -unsupportable -unsupported -unsuppressed -unsure -unsureness -unsurfaced -unsurpassable -unsurpassed -unsurprised -unsurprising -unsurprisingly -unsurvivable -unsuspected -unsuspecting -unsustainable -unswappable -unsweetened -unswerving -unswervingly -unsympathetic -unsympathetically -unsystematic -untactful -untagged -untainted -untalented -untamed -untangle -untangled -untangling -untapped -untarnished -untasted -untaught -untaxed -untaxing -untempered -untenability -untenable -untended -unterminated -untestable -untested -untethered -untextured -unthinkable -unthinkably -unthinking -unthinkingly -unthoughtful -untidier -untidiest -untidily -untidiness -untidy -untie -untied -unties -until -untimely -untiring -untitled -unto -untold -untouchable -untouchables -untouched -untoward -untraceable -untraced -untrained -untrammelled -untransformed -untranslatable -untranslated -untransportable -untrappable -untreatable -untreated -untried -untrodden -untroubled -untrue -untrusted -untrustworthy -untrusty -untruth -untruthful -untruthfully -untruths -unturned -untutored -untwist -untwisted -untying -untyped -untypical -untypically -unusable -unusably -unused -unusual -unusually -unutterable -unutterably -unvalidated -unvalued -unvanquished -unvarnished -unvarying -unvaryingly -unveil -unveiled -unveiling -unveils -unventilated -unverifiable -unverified -unversed -unvisitable -unvisited -unvoiced -unwanted -unwarily -unwarmed -unwarned -unwarrantable -unwarrantably -unwarranted -unwary -unwashed -unwatchable -unwatched -unwavering -unwaveringly -unweaned -unwearied -unweary -unwed -unwedded -unwedge -unweighted -unwelcome -unwelcoming -unwell -unwholesome -unwieldy -unwilling -unwillingly -unwillingness -unwind -unwindable -unwinding -unwinds -unwisdom -unwise -unwisely -unwisest -unwitting -unwittingly -unwontedly -unworkability -unworkable -unworldly -unworn -unworried -unworthily -unworthiness -unworthy -unwound -unwounded -unwrap -unwrapped -unwrapping -unwraps -unwritten -unyielding -unzip -unzipped -unzipping -unzips -up -upbeat -upbraid -upbraided -upbraiding -upbraids -upbringing -upbringings -upcast -upcoming -updatability -update -updated -updater -updates -updating -upended -upfield -upfront -upgradable -upgrade -upgradeable -upgraded -upgrades -upgrading -upgradings -upheaval -upheavals -upheld -uphill -uphold -upholder -upholders -upholding -upholds -upholster -upholstered -upholsterer -upholsterers -upholstery -upkeep -upland -uplands -uplift -uplifted -uplifting -uplifts -uplink -uplinks -upload -uploaded -uploads -upmarket -upmost -upon -upped -upper -uppercase -upperclass -uppercut -uppermost -uppers -upraised -uprate -uprated -uprating -upright -uprightly -uprightness -uprights -uprise -uprising -uprisings -upriver -uproar -uproarious -uproariously -uproars -uproo -uproot -uprooted -uprooting -uproots -ups -upset -upsets -upsetting -upshot -upside -upsidedown -upsilon -upstage -upstaged -upstages -upstaging -upstairs -upstanding -upstart -upstarts -upstream -upsurge -upsurges -upswing -uptake -upthrust -uptotheminute -uptown -upturn -upturned -upward -upwardly -upwards -upwind -uranium -uranus -urban -urbane -urbanely -urbanisation -urbanise -urbanised -urbanising -urbanites -urbanity -urchin -urchins -urea -ureter -ureters -urethane -urethra -urethrae -urethral -urethras -urethritis -urge -urged -urgency -urgent -urgently -urges -urging -urgings -urinary -urine -urn -urns -urologist -ursine -urticaria -uruguay -us -usability -usable -usage -usages -usances -use -useable -used -useful -usefully -usefulness -useless -uselessly -uselessness -user -userfriendliness -userfriendly -users -uses -usher -ushered -usherette -ushering -ushers -using -usual -usually -usurer -usurers -usurious -usurp -usurpation -usurped -usurper -usurping -usury -utah -utensil -utensils -uteri -uterine -uterus -utilisation -utilise -utilised -utilises -utilising -utilitarian -utilitarianism -utilitarians -utilities -utility -utmost -utopia -utopian -utopians -utopias -utter -utterance -utterances -uttered -utterer -uttering -utterly -uttermost -utters -uturns -uvula -uvular -vacancies -vacancy -vacant -vacantly -vacate -vacated -vacates -vacating -vacation -vacations -vaccinate -vaccinated -vaccinating -vaccination -vaccinations -vaccine -vaccines -vacillate -vacillating -vacillation -vacillations -vacua -vacuity -vacuole -vacuoles -vacuous -vacuously -vacuum -vacuums -vaduz -vagabond -vagabonds -vagrancy -vagrant -vagrants -vague -vaguely -vagueness -vaguer -vaguest -vain -vainer -vainest -vainglorious -vainglory -vainly -valance -vale -valediction -valedictory -valence -valencies -valency -valentine -vales -valet -valets -valhalla -valiant -valiantly -valid -validate -validated -validates -validating -validation -validity -validly -valise -valley -valleys -valour -valuable -valuables -valuation -valuations -value -valueadded -valued -valueformoney -valueless -valuer -valuers -values -valuing -valuta -valve -valves -vamp -vamped -vamper -vamping -vampire -vampires -vamps -van -vanadium -vandal -vandalise -vandalised -vandalising -vandalism -vandals -vane -vaned -vanes -vangogh -vanguard -vanilla -vanish -vanished -vanishes -vanishing -vanishingly -vanities -vanity -vanquish -vanquished -vanquishing -vans -vantage -vapid -vaporisation -vaporise -vaporised -vaporising -vaporous -vapour -vapours -variability -variable -variables -variably -variance -variances -variant -variants -variate -variates -variation -variational -variations -varicose -varied -variegated -varies -varietal -varieties -variety -various -variously -varnish -varnished -varnishes -varnishing -varsity -vary -varying -vascular -vase -vasectomies -vasectomy -vaseline -vases -vassal -vassalage -vassals -vast -vaster -vastly -vastness -vat -vatican -vats -vault -vaulted -vaulting -vaults -vaunted -vaunting -veal -vector -vectored -vectoring -vectorisation -vectorised -vectors -veer -veered -veering -veers -veg -vegan -vegans -vegetable -vegetables -vegetarian -vegetarianism -vegetarians -vegetate -vegetated -vegetating -vegetation -vegetational -vegetative -vegetive -veggies -vehemence -vehement -vehemently -vehicle -vehicles -vehicular -veil -veiled -veiling -veils -vein -veined -veins -velar -veld -veldt -vellum -velocipede -velocities -velocity -velodrome -velour -velum -velvet -velveteen -velveteens -velvets -velvety -venal -venality -vend -venders -vendetta -vendettas -vending -vendor -vendors -vends -veneer -veneered -veneers -venerable -venerate -venerated -venerates -venerating -veneration -venereal -venetian -vengeance -vengeful -vengefully -venial -venice -venison -venom -venomous -venomously -venoms -venose -venous -vent -vented -ventilate -ventilated -ventilating -ventilation -ventilator -ventilators -venting -ventings -ventral -ventrally -ventricle -ventricles -ventricular -ventriloquism -ventriloquist -ventriloquists -ventriloquy -vents -venture -ventured -venturer -ventures -venturesome -venturing -venue -venues -venus -veracity -veranda -verandah -verandahs -verandas -verb -verbal -verbalise -verbally -verbals -verbatim -verbiage -verbose -verbosely -verboseness -verbosity -verbs -verdant -verdict -verdicts -verdigris -verdure -verge -verged -verger -verges -verging -verifiability -verifiable -verification -verifications -verified -verifier -verifiers -verifies -verify -verifying -verily -verisimilitude -veritable -veritably -verities -verity -vermilion -vermin -verminous -vernacular -vernal -vernier -verona -versatile -versatility -verse -versed -verses -versicle -versification -versifier -version -versions -versus -vertebra -vertebrae -vertebral -vertebrate -vertebrates -vertex -vertical -verticality -vertically -verticals -vertices -vertiginous -vertigo -verve -very -vesicle -vesicles -vesicular -vespers -vessel -vessels -vest -vestal -vested -vestibular -vestibule -vestibules -vestige -vestiges -vestigial -vesting -vestment -vestments -vestry -vests -vesuvius -vet -veteran -veterans -veterinary -veto -vetoed -vetoing -vets -vetted -vetting -vex -vexation -vexations -vexatious -vexed -vexes -vexing -via -viability -viable -viably -viaduct -viaducts -vial -vials -vibes -vibrancy -vibrant -vibrantly -vibrate -vibrated -vibrates -vibrating -vibration -vibrational -vibrationally -vibrations -vibrato -vibrator -vibrators -vibratory -vicar -vicarage -vicarages -vicarious -vicariously -vicars -vice -vicechancellor -vicechancellors -vicepresidency -vicepresident -vicepresidential -vicepresidents -viceroy -viceroys -vices -vicinities -vicinity -vicious -viciously -viciousness -vicissitude -vicissitudes -victim -victimisation -victimise -victimised -victimises -victimising -victimless -victims -victor -victoria -victories -victorious -victoriously -victors -victory -victualling -victuals -video -videoconferencing -videodisc -videoed -videoing -videophone -videos -videotape -videotaped -videotapes -videotaping -vie -vied -vienna -vier -vies -view -viewable -viewed -viewer -viewers -viewfinder -viewfinders -viewing -viewings -viewpoint -viewpoints -views -vigil -vigilance -vigilant -vigilante -vigilantes -vigilantly -vigils -vignette -vignettes -vigorous -vigorously -vigour -viking -vikings -vile -vilely -vileness -viler -vilest -vilification -vilified -vilify -vilifying -villa -village -villager -villagers -villages -villain -villainous -villains -villainy -villas -vim -vims -vindicate -vindicated -vindicates -vindicating -vindication -vindictive -vindictively -vindictiveness -vine -vinegar -vinegars -vines -vineyard -vineyards -vino -vintage -vintages -vintner -vinyl -vinyls -viol -viola -violas -violate -violated -violates -violating -violation -violations -violator -violators -violence -violent -violently -violet -violets -violin -violinist -violinists -violins -violist -viper -vipers -virago -viral -virgil -virgin -virginal -virginia -virginity -virgins -virile -virility -virology -virtual -virtually -virtue -virtues -virtuosi -virtuosic -virtuosity -virtuoso -virtuous -virtuously -virulence -virulent -virulently -virus -viruses -visa -visage -visas -viscose -viscosity -viscount -viscounts -viscous -vise -visibilities -visibility -visible -visibly -vision -visionaries -visionary -visions -visit -visitable -visitant -visitation -visitations -visited -visiting -visitor -visitors -visits -visor -visors -vista -vistas -visual -visualisation -visualise -visualised -visualising -visually -visuals -vital -vitalise -vitality -vitally -vitals -vitamin -vitamins -vitiate -vitiated -vitiates -vitiating -vitreous -vitrified -vitriol -vitriolic -vituperate -vituperation -vituperative -viva -vivacious -vivaciously -vivacity -vivid -vividly -vividness -vivified -vivisected -vivisection -vivisectionist -vivisectionists -vixen -vixens -vizier -vocabularies -vocabulary -vocal -vocalisation -vocalisations -vocalise -vocalised -vocalising -vocalist -vocalists -vocally -vocals -vocation -vocational -vocationally -vocations -vocative -vociferous -vociferously -vodka -vogue -voice -voiced -voiceless -voices -voicing -voicings -void -voidable -voided -voiding -voids -voile -volatile -volatiles -volatility -volcanic -volcanically -volcanism -volcano -vole -voles -volga -volition -volley -volleyball -volleyed -volleying -volleys -volt -voltage -voltages -voltmeter -volts -volubility -voluble -volubly -volume -volumes -volumetric -voluminous -voluntarily -voluntary -volunteer -volunteered -volunteering -volunteers -voluptuous -voluptuously -voluptuousness -volute -vomit -vomited -vomiting -vomits -voodoo -voracious -voraciously -voracity -vortex -vortexes -vortices -vorticity -vote -voted -voteless -voter -voters -votes -voting -votive -vouch -vouched -voucher -vouchers -vouches -vouchsafe -vouchsafed -vouchsafing -vow -vowed -vowel -vowels -vowing -vows -voyage -voyaged -voyager -voyagers -voyages -voyaging -voyeur -voyeurism -voyeuristic -voyeurs -vulcan -vulcanise -vulcanised -vulcanism -vulcanologist -vulgar -vulgarities -vulgarity -vulgarly -vulgate -vulnerabilities -vulnerability -vulnerable -vulpine -vulture -vultures -vulva -vying -wackier -wacky -wad -wadding -waddle -waddled -waddles -waddling -wade -waded -wader -waders -wades -wadi -wading -wadings -wadis -wads -wafer -wafers -waffle -waffled -waffles -waft -wafted -wafting -wafts -wafture -wag -wage -waged -wager -wagered -wagerer -wagers -wages -wagged -waggery -wagging -waggish -waggishly -waggle -waggled -waggles -waggling -waggly -waggoners -waggons -waging -wagon -wagons -wags -wagtail -wagtails -waif -waifs -wail -wailed -wailer -wailing -wails -wainscot -wainscoting -waist -waistband -waistcoat -waistcoats -waistline -waists -wait -waited -waiter -waiters -waiting -waitress -waitresses -waits -waive -waived -waiver -waivers -waives -waiving -wake -waked -wakeful -wakefulness -waken -wakened -wakening -wakens -wakes -waking -wales -walk -walkable -walkabout -walkabouts -walked -walker -walkers -walkietalkie -walkietalkies -walking -walkout -walkover -walks -walkway -walkways -wall -wallabies -wallaby -wallchart -walled -wallet -wallets -wallflower -wallflowers -walling -wallop -wallow -wallowed -wallowing -wallows -wallpaper -wallpapering -wallpapers -walls -walltowall -walnut -walnuts -walrus -walruses -waltz -waltzed -waltzes -waltzing -wan -wand -wander -wandered -wanderer -wanderers -wandering -wanderings -wanderlust -wanders -wands -wane -waned -wanes -waning -wanly -want -wanted -wanting -wanton -wantonly -wantonness -wants -wapiti -wapitis -war -warble -warbled -warbler -warblers -warbles -warbling -ward -warded -warden -wardens -warder -warders -warding -wardrobe -wardrobes -wards -wardship -ware -warehouse -warehoused -warehouseman -warehousemen -warehouses -warehousing -wares -warfare -warhead -warheads -warhorse -warhorses -wariest -warily -wariness -waring -warlike -warlock -warlocks -warlord -warlords -warm -warmblooded -warmed -warmer -warmers -warmest -warmhearted -warmheartedness -warming -warmish -warmly -warmness -warmonger -warms -warmth -warmup -warn -warned -warners -warning -warningly -warnings -warns -warp -warpaint -warpath -warped -warping -warplanes -warps -warrant -warranted -warranties -warranting -warrants -warranty -warred -warren -warrens -warring -warrior -warriors -wars -warsaw -warship -warships -wart -warthog -warthogs -wartime -warts -warty -wary -was -wash -washable -washbasin -washbasins -washboard -washday -washed -washer -washers -washerwoman -washerwomen -washes -washing -washings -washington -washout -washstand -washy -wasp -waspish -waspishly -wasps -waspwaisted -wast -wastage -wastages -waste -wasted -wasteful -wastefully -wastefulness -wasteland -wastelands -wastepaper -waster -wasters -wastes -wasting -wastings -wastrel -watch -watchable -watchdog -watchdogs -watched -watcher -watchers -watches -watchful -watchfully -watchfulness -watching -watchmaker -watchmakers -watchman -watchmen -watchtower -watchtowers -watchword -watchwords -water -waterbed -waterbeds -watercolour -watercolourists -watercolours -watercooled -watercourse -watercourses -watercress -watered -waterfall -waterfalls -waterfowl -waterfront -waterglass -waterhole -waterholes -watering -waterless -waterline -waterlogged -waterloo -waterman -watermark -watermarks -watermelon -watermelons -watermen -watermill -watermills -waterproof -waterproofed -waterproofing -waterproofs -waterresistant -waters -watershed -watersheds -waterside -waterskiing -watersoluble -waterspouts -watertable -watertight -waterway -waterways -waterwheel -waterwheels -waterworks -watery -watt -wattage -wattle -watts -wave -waveband -wavebands -waved -waveform -waveforms -wavefront -waveguide -waveguides -wavelength -wavelengths -wavelet -wavelets -wavelike -waver -wavered -waverers -wavering -wavers -waves -wavier -waviest -wavily -waving -wavings -wavy -wax -waxed -waxen -waxes -waxing -waxpaper -waxwork -waxworks -waxy -way -wayout -ways -wayside -wayward -waywardly -waywardness -we -weak -weaken -weakened -weakening -weakens -weaker -weakest -weakish -weakkneed -weakling -weaklings -weakly -weakminded -weakness -weaknesses -weal -wealth -wealthier -wealthiest -wealthy -wean -weaned -weaning -weanling -weans -weapon -weaponry -weapons -wear -wearable -wearer -wearers -wearied -wearier -wearies -weariest -wearily -weariness -wearing -wearisome -wears -weary -wearying -wearyingly -weasel -weaselling -weaselly -weasels -weather -weatherbeaten -weatherbound -weathercock -weathercocks -weathered -weathering -weatherman -weathermen -weatherproof -weathers -weathervane -weatherworn -weave -weaved -weaver -weavers -weaves -weaving -weavings -web -webbed -webbing -webby -webfoot -webs -website -wed -wedded -wedding -weddings -wedge -wedged -wedges -wedging -wedlock -weds -wee -weed -weeded -weedier -weediest -weeding -weedkiller -weedkillers -weeds -weedy -week -weekday -weekdays -weekend -weekenders -weekends -weeklies -weekly -weeks -ween -weeny -weep -weeper -weeping -weepings -weeps -weepy -weevil -weevils -weigh -weighbridge -weighed -weighing -weighs -weight -weighted -weightier -weightiest -weightily -weighting -weightings -weightless -weightlessly -weightlessness -weightlifter -weightlifters -weightlifting -weights -weighty -weir -weird -weirder -weirdest -weirdly -weirdness -weirdo -weirs -welcome -welcomed -welcomer -welcomes -welcoming -weld -welded -welder -welders -welding -welds -welfare -well -welladjusted -wellbalanced -wellbehaved -wellbeing -wellbeloved -wellborn -wellbred -wellbuilt -wellchosen -wellconnected -welldefined -welldeserved -welldesigned -welldeveloped -welldisposed -welldressed -wellearned -welled -welleducated -wellendowed -wellequipped -wellestablished -wellfed -wellformed -wellfounded -wellgrounded -wellhead -wellinformed -welling -wellington -wellingtons -wellintentioned -wellkept -wellknown -wellliked -wellloved -wellmade -wellmannered -wellmarked -wellmatched -wellmeaning -wellmeant -welloff -wellordered -wellorganised -wellpaid -wellplaced -wellprepared -wellpreserved -wellread -wellreceived -wellrounded -wells -wellspoken -wellstructured -wellsupported -welltaken -wellthoughtout -welltimed -welltodo -welltried -wellused -wellwisher -wellwishers -wellworn -welly -welsh -welshman -welt -welter -weltering -welters -welterweight -welts -wench -wenches -wend -wended -wending -wends -went -wept -were -werewolf -werewolves -west -westbound -westerly -western -westerner -westerners -westernisation -westernised -westernmost -westerns -westward -westwards -wet -wether -wetland -wetlands -wetly -wetness -wets -wetsuit -wetsuits -wettable -wetted -wetter -wettest -wetting -whack -whacked -whacker -whacko -whacks -whale -whalebone -whaler -whalers -whales -whaling -wham -whap -wharf -wharfs -wharves -what -whatever -whatnot -whatsoever -wheals -wheat -wheatears -wheaten -wheatgerm -wheats -whee -wheedle -wheedled -wheedling -wheel -wheelbarrow -wheelbarrows -wheelbase -wheelchair -wheelchairs -wheeled -wheeler -wheelers -wheelhouse -wheelie -wheeling -wheels -wheelwright -wheelwrights -wheeze -wheezed -wheezes -wheezing -wheezy -whelk -whelked -whelks -whelp -when -whence -whenever -where -whereabouts -whereas -whereby -wherefore -wherefores -wherein -whereof -whereon -wheresoever -whereto -whereupon -wherever -wherewith -wherewithal -wherry -whet -whether -whetstone -whetstones -whetted -whetting -whey -which -whichever -whiff -whiffs -while -whiled -whiles -whiling -whilst -whim -whimper -whimpered -whimpering -whimpers -whims -whimsical -whimsically -whimsy -whine -whined -whines -whining -whinnied -whinny -whinnying -whip -whipcord -whiplash -whipped -whipper -whippet -whippets -whipping -whippy -whips -whir -whirl -whirled -whirligig -whirling -whirlpool -whirlpools -whirls -whirlwind -whirlwinds -whirr -whirred -whirring -whisk -whisked -whisker -whiskers -whiskery -whiskey -whiskeys -whiskies -whisking -whisks -whisky -whisper -whispered -whisperers -whispering -whisperings -whispers -whist -whistle -whistled -whistler -whistles -whistling -whists -white -whitebait -whiteboards -whitecollar -whitely -whiten -whitened -whitener -whiteness -whitening -whitens -whiter -whites -whitest -whitewash -whitewashed -whitewashing -whither -whiting -whitish -whittle -whittled -whittling -whizkids -whizz -whizzkid -who -whoa -whodunit -whodunnit -whoever -whole -wholefood -wholegrain -wholehearted -wholeheartedly -wholemeal -wholeness -wholes -wholesale -wholesaler -wholesalers -wholesaling -wholesome -wholesomely -wholesomeness -wholewheat -wholly -whom -whomever -whomsoever -whoop -whooped -whooping -whoops -whoosh -whop -whore -whorehouse -whores -whoring -whorled -whorls -whose -whosoever -why -whys -wick -wicked -wickedest -wickedly -wickedness -wicker -wickerwork -wicket -wicketkeeper -wicketkeepers -wicketkeeping -wickets -wicks -wide -wideeyed -widely -widen -widened -wideness -widening -widens -wideopen -wider -wideranging -wides -widescreen -widespread -widest -widgeon -widget -widow -widowed -widower -widowers -widowhood -widows -width -widths -wield -wielded -wielder -wielding -wields -wife -wifeless -wifely -wig -wigeon -wigeons -wigging -wiggle -wiggled -wiggler -wiggles -wiggling -wigs -wigwam -wigwams -wild -wildcat -wildcats -wildebeest -wilder -wilderness -wildernesses -wildest -wildeyed -wildfire -wildfires -wildfowl -wildlife -wildly -wildness -wildoats -wilds -wile -wiles -wilful -wilfully -wilfulness -wilier -wiliest -wiling -will -willed -willing -willingly -willingness -willow -willows -willowy -willpower -wills -willynilly -wilt -wilted -wilting -wilts -wily -wimp -wimple -wimpy -win -wince -winced -winces -winch -winched -winches -winching -wincing -wind -windbag -windbags -windbreak -windcheater -windcheaters -winded -winder -winders -windfall -windfalls -windier -windiest -windily -winding -windings -windlass -windless -windmill -windmills -window -windowed -windowing -windowless -windows -windowshop -windowshopping -windpipe -winds -windscreen -windscreens -windsock -windsor -windsurf -windsurfer -windsurfers -windsurfing -windswept -windward -windy -wine -wined -wineglass -wineglasses -winemakers -winery -wines -wineskin -wing -winged -winger -wingers -winging -wingless -wings -wingspan -wining -wink -winked -winker -winkers -winking -winkle -winkled -winkles -winks -winnable -winner -winners -winning -winningly -winnings -winnow -winnowing -wins -winsome -winter -wintered -wintering -winters -wintertime -wintery -wintrier -wintriest -wintry -wipe -wiped -wiper -wipers -wipes -wiping -wire -wired -wireless -wirer -wires -wirier -wiriest -wiring -wirings -wiry -wisdom -wisdoms -wise -wisecracks -wiseguys -wisely -wiser -wisest -wish -wishbone -wished -wishes -wishful -wishfully -wishing -wishywashy -wisp -wisps -wispy -wistful -wistfully -wistfulness -wit -witch -witchcraft -witchdoctor -witchdoctors -witchery -witches -witchhunt -witchhunts -witchlike -with -withdraw -withdrawal -withdrawals -withdrawing -withdrawn -withdraws -withdrew -wither -withered -withering -witheringly -withers -withheld -withhold -withholding -withholds -within -without -withstand -withstanding -withstands -withstood -witless -witness -witnessed -witnesses -witnessing -wits -witter -wittering -witticism -witticisms -wittier -wittiest -wittily -wittiness -witting -wittingly -witty -wives -wizard -wizardry -wizards -wizened -woad -wobble -wobbled -wobbler -wobbles -wobblier -wobbliest -wobbling -wobbly -wodan -wodge -woe -woebegone -woeful -woefully -woes -wok -woke -woken -woks -wold -wolds -wolf -wolfcubs -wolfed -wolfhound -wolfhounds -wolfish -wolfishly -wolfwhistles -wolves -woman -womanhood -womanise -womaniser -womanish -womanising -womankind -womanliness -womanly -womans -womb -wombat -wombats -wombs -women -womenfolk -won -wonder -wondered -wonderful -wonderfully -wonderfulness -wondering -wonderingly -wonderland -wonderment -wonders -wondrous -wondrously -wont -woo -wood -woodbine -woodcock -woodcocks -woodcut -woodcuts -woodcutter -woodcutters -wooded -wooden -woodenly -woodenness -woodland -woodlands -woodlice -woodlouse -woodman -woodmen -woodpecker -woodpeckers -woodpile -woods -woodshed -woodsman -woodsmoke -woodwind -woodwork -woodworker -woodworkers -woodworking -woodworm -woody -wooed -wooer -woof -woofer -woofers -wooing -wool -woollen -woollens -woollier -woollies -woollike -woolliness -woolly -wools -wooly -woos -word -wordage -worded -wordgame -wordier -wordiest -wordiness -wording -wordings -wordless -wordlessly -wordplay -wordprocessing -words -wordsmith -wordy -wore -work -workability -workable -workaday -workbench -workbook -workbooks -workday -workdays -worked -worker -workers -workfare -workforce -workforces -workhorse -workhorses -workhouse -workhouses -working -workings -workless -workload -workloads -workman -workmanlike -workmanship -workmate -workmates -workmen -workout -workouts -workpeople -workpiece -workpieces -workplace -workplaces -workroom -workrooms -works -worksheet -worksheets -workshop -workshops -workshy -workspace -workstation -workstations -worktop -worktops -workweek -world -worldclass -worldfamous -worldliness -worldly -worlds -worldwar -worldwide -worm -wormhole -wormholes -worming -wormlike -worms -wormy -worn -worried -worriedly -worrier -worriers -worries -worrisome -worry -worrying -worryingly -worse -worsen -worsened -worsening -worsens -worser -worship -worshipful -worshipped -worshipper -worshippers -worshipping -worships -worst -worsted -worth -worthier -worthies -worthiest -worthily -worthiness -worthless -worthlessness -worthwhile -worthy -would -wound -wounded -wounding -wounds -wove -woven -wow -wowed -wows -wrack -wracked -wraith -wraiths -wrangle -wrangled -wrangler -wrangles -wrangling -wrap -wraparound -wrapped -wrapper -wrappers -wrapping -wrappings -wraps -wrasse -wrath -wrathful -wrathfully -wraths -wreak -wreaked -wreaking -wreaks -wreath -wreathe -wreathed -wreathes -wreathing -wreaths -wreck -wreckage -wrecked -wrecker -wreckers -wrecking -wrecks -wren -wrench -wrenched -wrenches -wrenching -wrens -wrest -wrested -wresting -wrestle -wrestled -wrestler -wrestlers -wrestles -wrestling -wretch -wretched -wretchedly -wretchedness -wretches -wriggle -wriggled -wriggles -wriggling -wriggly -wright -wring -wringer -wringing -wrings -wrinkle -wrinkled -wrinkles -wrinkling -wrinkly -wrist -wristband -wristbands -wrists -wristwatch -writ -writable -write -writer -writers -writes -writhe -writhed -writhes -writhing -writing -writings -writs -written -wrong -wrongdoer -wrongdoers -wrongdoing -wrongdoings -wronged -wronger -wrongest -wrongful -wrongfully -wronging -wrongly -wrongness -wrongs -wrote -wrought -wroughtiron -wrung -wry -wryly -wryness -wunderkind -xenon -xenophobe -xenophobia -xenophobic -xerography -xhosa -xhosas -xmas -xray -xrayed -xraying -xrays -xylophone -xylophonist -yacht -yachting -yachts -yachtsman -yachtsmen -yak -yaks -yale -yalelock -yam -yams -yank -yankee -yankees -yanks -yap -yapping -yaps -yard -yardage -yards -yardstick -yardsticks -yarn -yarns -yaw -yawed -yawl -yawls -yawn -yawned -yawning -yawningly -yawns -yaws -ye -yea -yeah -yeaned -year -yearbook -yearbooks -yearling -yearlings -yearlong -yearly -yearn -yearned -yearning -yearningly -yearnings -yearns -years -yeas -yeast -yeasts -yeasty -yell -yelled -yelling -yellings -yellow -yellowed -yellower -yellowing -yellowish -yellows -yellowy -yells -yelp -yelped -yelping -yelpings -yelps -yemen -yen -yens -yeoman -yeomanry -yeomen -yep -yes -yesterday -yesterdays -yesteryear -yet -yeti -yetis -yew -yews -yiddish -yield -yielded -yielding -yields -yip -yippee -yodel -yodelled -yodeller -yodelling -yodels -yoga -yogi -yoke -yoked -yokel -yokels -yokes -yolk -yolks -yon -yonder -yore -york -yorker -yorkers -you -young -younger -youngest -youngish -youngster -youngsters -your -yours -yourself -yourselves -youth -youthful -youthfulness -youths -yowl -yoyo -yrs -yttrium -yuck -yukon -yule -yuletide -yummiest -yummy -yuppie -yuppies -zag -zaire -zambezi -zambia -zambian -zambians -zaniest -zany -zanzibar -zap -zapping -zappy -zaps -zeal -zealot -zealotry -zealots -zealous -zealously -zealousness -zeals -zebra -zebras -zebu -zebus -zees -zenith -zeniths -zeolite -zeolites -zephyr -zephyrs -zeppelin -zero -zeroed -zeroing -zest -zestfully -zesty -zeta -zeus -zig -zigzag -zigzagged -zigzagging -zigzags -zillion -zillions -zimbabwe -zinc -zion -zionism -zionist -zionists -zip -zipped -zipper -zippers -zipping -zippy -zips -zither -zithers -zombi -zombie -zombies -zonal -zonation -zone -zoned -zones -zoning -zoo -zookeepers -zoological -zoologist -zoologists -zoology -zoom -zoomed -zooming -zooms -zooplankton -zoos -zulu -zulus diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala deleted file mode 100644 index 2eaddd7572..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala +++ /dev/null @@ -1,39 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ -import scala.collection.parallel.mutable.ParArray -import extra166y.{ParallelArray => JSR166Array} - - -object AggregateLight extends Companion { - def benchName = "aggregate-light"; - def apply(sz: Int, parallelism: Int, what: String) = new AggregateLight(sz, parallelism, what) - override def comparisons = List() - override def defaultSize = 200000 - - val seqop = (a: Cont, b: Cont) => b - val combop = (a: Cont, b: Cont) => a -} - - -class AggregateLight(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = AggregateLight - override def repetitionsPerRun = 350 - override val runs = 20 - - def runpar = pa.aggregate(new Cont(0))(companion.seqop, companion.combop) - def runseq = sequentialReduce(companion.seqop, sz, new Cont(0)) - override def comparisonMap = collection.Map() -} - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala deleted file mode 100644 index f5d6c75abb..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala +++ /dev/null @@ -1,9 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -trait Companion extends BenchCompanion { - def collectionName = "ParArray" -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala deleted file mode 100644 index 033921d451..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala +++ /dev/null @@ -1,21 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object CopyToArray extends Companion { - def benchName = "copytoarray"; - def apply(sz: Int, parallelism: Int, what: String) = new CopyToArray(sz, parallelism, what) - override def comparisons = List() - override def defaultSize = 200000 -} - -class CopyToArray(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = CopyToArray - val destarr = new Array[Any](sz) - - def runpar = pa.copyToArray(destarr, 0, sz) - def runseq = sequentialCopyToArray(destarr, 0, sz) - def comparisonMap = collection.Map() -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala deleted file mode 100644 index c9b3f07ff3..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala +++ /dev/null @@ -1,47 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class Corresponds(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) -with HavingResult[Boolean] { - def companion = Corresponds - override def repetitionsPerRun = 400 - - val same = { - val p = new collection.parallel.mutable.ParArray[Cont](sz) - for (i <- 0 until sz) p(i) = what match { - case "seq" => arr(i).asInstanceOf[Cont] - case "par" => pa(i) - } - p - } - - def runpar = runresult = pa.corresponds(same)(corr) - def runseq = runresult = sequentialCorresponds(same, corr, sz) - override def comparisonMap = collection.Map() - - val corr = (a: Cont, b: Cont) => a.in == b.in -} - -object Corresponds extends Companion { - def benchName = "corresponds"; - def apply(sz: Int, p: Int, what: String) = new Corresponds(sz, p, what) - override def comparisons = List() -} - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala deleted file mode 100644 index 7438be8447..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala +++ /dev/null @@ -1,36 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object CountHeavy extends Companion { - def benchName = "count-heavy"; - def apply(sz: Int, parallelism: Int, what: String) = new CountHeavy(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 16 - - val pred = (a: Cont) => heavyCheck(a) - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = heavyCheck(a) - } - - def heavyCheck(a: Cont) = { - val n = a.in - (n until (n + 200)).map(checkPrime(_)).reduceLeft(_ && _) - } - def checkPrime(n: Int) = { - var isPrime = true - for (i <- 2 until (scala.math.sqrt(n).toInt + 1)) if (n % i == 0) isPrime = false - isPrime - } -} - -class CountHeavy(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = CountHeavy - - def runpar = pa.count(CountHeavy.pred) - def runseq = sequentialCount(CountHeavy.pred, sz) - def runjsr = jsrarr.withFilter(CountHeavy.predjsr).size - def comparisonMap = collection.Map("jsr" -> runjsr _) -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala deleted file mode 100644 index 21c64358b4..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala +++ /dev/null @@ -1,22 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object CountLight extends Companion { - def benchName = "count-light"; - def apply(sz: Int, parallelism: Int, what: String) = new CountLight(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 200000 -} - -class CountLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = CountLight - - def runpar = pa.count(Cont.pred) - def runseq = sequentialCount(Cont.pred, sz) - def runjsr = jsrarr.withFilter(Cont.predjsr).size - def comparisonMap = collection.Map("jsr" -> runjsr _) -} - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala deleted file mode 100644 index 9c6ac19229..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala +++ /dev/null @@ -1,30 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object CountList extends Companion { - def benchName = "count-list"; - def apply(sz: Int, parallelism: Int, what: String) = new CountList(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 1000 - - val listCreator = (i: Int) => (0 until (i % 50 + 50)).toList - val pred = (lst: List[Int]) => check(lst) - val predjsr = new extra166y.Ops.Predicate[List[Int]] { - def op(lst: List[Int]) = check(lst) - } - - def check(lst: List[Int]) = lst.foldLeft(0)((sum, n) => sum + n * n) % 2 == 0 -} - -class CountList(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, CountList.listCreator, new Array[Any](_), classOf[List[Int]]) { - def companion = CountList - override def repetitionsPerRun = 250 - - def runpar = pa.count(CountList.pred) - def runseq = sequentialCount(CountList.pred, sz) - def runjsr = jsrarr.withFilter(CountList.predjsr).size - def comparisonMap = collection.Map("jsr" -> runjsr _) -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala deleted file mode 100644 index 4b27569239..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala +++ /dev/null @@ -1,48 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class DiffHalf(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = DiffHalf - override def repetitionsPerRun = 400 - - val similar = { - val p = new collection.parallel.mutable.ParArray[Cont](sz) - for (i <- 0 until sz) p(i) = what match { - case "seq" => arr(i).asInstanceOf[Cont] - case "par" => pa(i) - } - p.drop(p.size / 2) - } - - def runpar = runresult = pa.diff(similar).size - def runseq = runresult = sequentialDiff(similar, sz).size - override def comparisonMap = collection.Map() - - val corr = (a: Cont, b: Cont) => a.in == b.in -} - -object DiffHalf extends Companion { - def benchName = "diff-half"; - def apply(sz: Int, p: Int, what: String) = new DiffHalf(sz, p, what) - override def comparisons = List() - override def defaultSize = 10000 -} - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala deleted file mode 100644 index 443ef2b500..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala +++ /dev/null @@ -1,47 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object DropMany extends Companion { - def benchName = "drop-many"; - def apply(sz: Int, parallelism: Int, what: String) = new DropMany(sz, parallelism, what) - override def comparisons = Nil - override def defaultSize = 50000 -} - -class DropMany(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = DropMany - override def repetitionsPerRun = 400 - runresult = -1 - - def runpar = runresult = pa.drop(pa.size / 2).size - def runseq = runresult = sequentialDrop(sz / 2, sz).size - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala deleted file mode 100644 index 2749216735..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala +++ /dev/null @@ -1,49 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object ExistsLight extends Companion { - def benchName = "exists-light"; - def apply(sz: Int, parallelism: Int, what: String) = new ExistsLight(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 200000 - - val pred = (a: Cont) => a.in < 0 - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = a.in < 0 - } -} - -class ExistsLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Boolean] { - def companion = ExistsLight - runresult = false - - def runpar = runresult = pa.exists(ExistsLight.pred) - def runseq = runresult = sequentialExists(ExistsLight.pred, sz) - def runjsr = runresult = jsrarr.withFilter(ExistsLight.predjsr).size > 0 - def comparisonMap = collection.Map("jsr" -> runjsr _) -} - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala deleted file mode 100644 index d4c8395951..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala +++ /dev/null @@ -1,64 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object FilterLight extends Companion { - def benchName = "filter-light"; - def apply(sz: Int, parallelism: Int, what: String) = new FilterLight(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 10000 - - val pred = (a: Cont) => check(a.in) - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = check(a.in) - } - - def check(n: Int) = { - var res = n -// var i = 1 -// while (i < 10) { -// res += n % i -// i += 1 -// } - res % 2 == 0 - } -} - -class FilterLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = FilterLight - override def repetitionsPerRun = 250 - override val runs = 30 - runresult = -1 - - def runpar = runresult = pa.filter(FilterLight.pred).size - def runseq = runresult = sequentialFilter(FilterLight.pred, sz).size - def runjsr = runresult = { jsrarr.withFilter(FilterLight.predjsr).all.size } - def comparisonMap = collection.Map("jsr" -> runjsr _) -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala deleted file mode 100644 index f08ddf29e3..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala +++ /dev/null @@ -1,52 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object FindLight extends Companion { - def benchName = "find-light"; - def apply(sz: Int, parallelism: Int, what: String) = new FindLight(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 200000 - - val pred = (a: Cont) => a.in < -10 - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = a.in < -10 - } -} - -class FindLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Option[Cont]] { - def companion = FindLight - runresult = None - - def runpar = runresult = pa.find(FindLight.pred) - def runseq = runresult = sequentialFind(FindLight.pred, sz) - def runjsr = runresult = { jsrarr.withFilter(FindLight.predjsr).size > 0; None } - def comparisonMap = collection.Map("jsr" -> runjsr _) -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala deleted file mode 100644 index 01ecbbf016..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala +++ /dev/null @@ -1,24 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - - - -object FlatMapLight extends Companion { - def benchName = "flatmap-light"; - def apply(sz: Int, parallelism: Int, what: String) = new FlatMapLight(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 10000 - - def fun = (a: Cont) => { List(1, 2, 3, 4, a.in) } -} - -class FlatMapLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = FlatMapLight - - def runpar = pa.flatMap(FlatMapLight.fun) - def runseq = sequentialFlatMap(FlatMapLight.fun, sz) - def comparisonMap = collection.Map() -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala deleted file mode 100644 index 0d61e5aeb5..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala +++ /dev/null @@ -1,59 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object ForallHeavy extends Companion { - def benchName = "forall-heavy"; - def apply(sz: Int, parallelism: Int, what: String) = new ForallHeavy(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 16 - - val pred = (a: Cont) => heavyCheck(a) - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = heavyCheck(a) - } - - def heavyCheck(a: Cont) = { - val init = a.in + 1 - var cnt = init - var i = 0 - while (i < 10000) { - cnt = -2 * cnt - cnt /= 2 - i += 1 - } - cnt += init * 5 + 10 - cnt >= 0 - } -} - -class ForallHeavy(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = ForallHeavy - - def runpar = pa.forall(ForallHeavy.pred) - def runseq = sequentialForall(ForallHeavy.pred, sz) - def runjsr = jsrarr.withFilter(ForallHeavy.predjsr).size == sz - def comparisonMap = collection.Map("jsr" -> runjsr _) -} - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala deleted file mode 100644 index 19671d2bc4..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala +++ /dev/null @@ -1,46 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object ForallLight extends Companion { - def benchName = "forall-light"; - def apply(sz: Int, parallelism: Int, what: String) = new ForallLight(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 200000 - - val pred = (a: Cont) => a.in >= 0 - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = a.in >= 0 - } -} - -class ForallLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = ForallLight - - def runpar = pa.forall(ForallLight.pred) - def runseq = sequentialForall(ForallLight.pred, sz) - def runjsr = jsrarr.withFilter(ForallLight.predjsr).size == sz - def comparisonMap = collection.Map("jsr" -> runjsr _) -} - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala deleted file mode 100644 index 624266e49d..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala +++ /dev/null @@ -1,46 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object ForallQuickStop extends Companion { - def benchName = "forall-quickstop"; - def apply(sz: Int, parallelism: Int, what: String) = new ForallQuickStop(sz, parallelism, what) - override def defaultSize = 200000 - - val pred = (a: Cont) => a.in != 50 - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = a.in != 50 - } -} - -class ForallQuickStop(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Boolean] { - def companion = ForallQuickStop - - def runpar = runresult = pa.forall(ForallQuickStop.pred) - def runseq = runresult = sequentialForall(ForallQuickStop.pred, sz) - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala deleted file mode 100644 index c7462ed04b..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala +++ /dev/null @@ -1,46 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object ForallStop80k extends Companion { - def benchName = "forall-stop80k"; - def apply(sz: Int, parallelism: Int, what: String) = new ForallStop80k(sz, parallelism, what) - override def defaultSize = 100000 - - val pred = (a: Cont) => a.in != 80000 - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = a.in != 80000 - } -} - -class ForallStop80k(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Boolean] { - def companion = ForallStop80k - - def runpar = runresult = pa.forall(ForallStop80k.pred) - def runseq = runresult = sequentialForall(ForallStop80k.pred, sz) - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala deleted file mode 100644 index d1a3f8085c..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala +++ /dev/null @@ -1,45 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object ForeachHeavy extends Companion { - def benchName = "foreach-heavy"; - def apply(sz: Int, parallelism: Int, what: String) = new ForeachHeavy(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 2048 - - @volatile var z = 0 - - val fun = (a: Cont) => heavyOperation(a) - val funjsr = new extra166y.Ops.Procedure[Cont] { - def op(a: Cont) = heavyOperation(a) - } - - def heavyOperation(a: Cont) { - checkPrime(a.in + 1000000000) - } - - def checkPrime(n: Int) = { - var isPrime = true - var i = 2 - val until = 550 - while (i < until) { - if (n % i == 0) isPrime = false - i += 1 - } - if (isPrime && (n.toString == z)) z += 1 - isPrime - } -} - -class ForeachHeavy(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = ForeachHeavy - override def repetitionsPerRun = 250 - - def runpar = pa.pforeach(ForeachHeavy.fun) - def runseq = sequentialForeach(ForeachHeavy.fun, sz) - def runjsr = jsrarr.apply(ForeachHeavy.funjsr) - def comparisonMap = collection.Map("jsr" -> runjsr _) -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala deleted file mode 100644 index 3d0c5c45c4..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala +++ /dev/null @@ -1,26 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object ForeachLight extends Companion { - def benchName = "foreach-light"; - def apply(sz: Int, parallelism: Int, what: String) = new ForeachLight(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 200000 - - val fun = (a: Cont) => a.num = a.in - val funjsr = new extra166y.Ops.Procedure[Cont] { - def op(a: Cont) = a.num = a.in - } -} - -class ForeachLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = ForeachLight - - def runpar = pa.pforeach(ForeachLight.fun) - def runseq = sequentialForeach(ForeachLight.fun, sz) - def runjsr = jsrarr.apply(ForeachLight.funjsr) - def comparisonMap = collection.Map("jsr" -> runjsr _) -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala deleted file mode 100644 index a90227a6e4..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala +++ /dev/null @@ -1,45 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - -object GroupByLight extends Companion { - def benchName = "groupby-light"; - def apply(sz: Int, parallelism: Int, what: String) = new GroupByLight(sz, parallelism, what) - override def comparisons = List() - override def defaultSize = 10000 - - val fun = (a: Cont) => a.in % 32 -} - - -class GroupByLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = GroupByLight - runresult = -1 - - val array = new Array[Cont](sz) - for (i <- 0 until sz) array(i) = new Cont(i) - - def runpar = runresult = pa.groupBy(GroupByLight.fun).size - def runseq = runresult = array.asInstanceOf[Array[Cont]].groupBy(GroupByLight.fun).size - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala deleted file mode 100644 index 3a22bdd1db..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala +++ /dev/null @@ -1,47 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class IndexWhere(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = IndexWhere - override def repetitionsPerRun = 400 - - def runpar = runresult = pa.indexWhere(IndexWhere.pred2, 0) - def runseq = runresult = sequentialIndexWhere(IndexWhere.pred2, 0, sz) - override def comparisonMap = collection.Map() -} - -object IndexWhere extends Companion { - def benchName = "index-where"; - def apply(sz: Int, p: Int, what: String) = new IndexWhere(sz, p, what) - override def comparisons = List() - - val pred = (c: Cont) => { - var in = c.in - var i = 2 - while (i < 5) { - if (in % i == 0) in = 0 - i += 1 - } - c.in >= 0 && in == -1 - } - val pred2 = (c: Cont) => c.in == 280000 -} - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala deleted file mode 100644 index e429fb288e..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala +++ /dev/null @@ -1,48 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class IntersectHalf(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = IntersectHalf - override def repetitionsPerRun = 400 - - val similar = { - val p = new collection.parallel.mutable.ParArray[Cont](sz) - for (i <- 0 until sz) p(i) = what match { - case "seq" => arr(i).asInstanceOf[Cont] - case "par" => pa(i) - } - p.drop(p.size / 2) - } - - def runpar = runresult = pa.intersect(similar).size - def runseq = runresult = sequentialIntersect(similar, sz).size - override def comparisonMap = collection.Map() - - val corr = (a: Cont, b: Cont) => a.in == b.in -} - -object IntersectHalf extends Companion { - def benchName = "intersect-half"; - def apply(sz: Int, p: Int, what: String) = new IntersectHalf(sz, p, what) - override def comparisons = List() - override def defaultSize = 10000 -} - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala deleted file mode 100644 index 427afa5571..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala +++ /dev/null @@ -1,47 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class LastIndexWhere(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = LastIndexWhere - override def repetitionsPerRun = 400 - - def runpar = runresult = pa.lastIndexWhere(LastIndexWhere.pred2, pa.size - 1) - def runseq = runresult = sequentialLastIndexWhere(LastIndexWhere.pred2, sz - 1, sz) - override def comparisonMap = collection.Map() -} - -object LastIndexWhere extends Companion { - def benchName = "last-index-where"; - def apply(sz: Int, p: Int, what: String) = new LastIndexWhere(sz, p, what) - override def comparisons = List() - - val pred = (c: Cont) => { - var in = c.in - var i = 2 - while (i < 5) { - if (in % i == 0) in = 0 - i += 1 - } - c.in >= 0 || in == 0 - } - val pred2 = (c: Cont) => c.in == 500 -} - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala deleted file mode 100644 index 1451f6a57a..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala +++ /dev/null @@ -1,27 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object MapLight extends Companion { - def benchName = "map-light"; - def apply(sz: Int, parallelism: Int, what: String) = new MapLight(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 100000 - - def fun = (a: Cont) => { a } - def funjsr = new extra166y.Ops.Op[Cont, Cont] { - def op(a: Cont) = { a } - } -} - -class MapLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = MapLight - - def runpar = pa.map(MapLight.fun) - def runseq = sequentialMap(MapLight.fun, sz) -// def runseq = sequentialMapOpt(MapLight.fun, sz) - def runjsr = jsrarr.replaceWithMapping(MapLight.funjsr).all - def comparisonMap = collection.Map("jsr" -> runjsr _) -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala deleted file mode 100644 index 6d5b189c3a..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala +++ /dev/null @@ -1,84 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - -import collection.parallel.immutable.ParRange - - -object MatrixMultiplication extends Companion { - def benchName = "matrix-mult"; - def apply(sz: Int, parallelism: Int, what: String) = new MatrixMultiplication(sz, parallelism, what) - override def comparisons = List() - override def defaultSize = 100 -} - -class MatrixMultiplication(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = MatrixMultiplication - collection.parallel.tasksupport.environment = forkjoinpool - - val a = Matrix.unit[Int](sz) - val b = Matrix.unit[Int](sz) - var c = new Matrix[Int](sz) - - def runpar = c = a * b //{ c.assignProduct(a, b) } //; println("--------"); c.output } - def runseq = throw new UnsupportedOperationException - def comparisonMap = collection.Map() - - class Matrix[T](n: Int)(implicit num: Numeric[T], tag: ClassTag[T]) { - val array = new Array[T](n * n) - - def apply(y: Int, x: Int) = array(y * n + x) - - def update(y: Int, x: Int, elem: T) = array(y * n + x) = elem - - def *(b: Matrix[T]) = { - val m = new Matrix[T](n) - m.assignProduct(this, b) - m - } - - def assignProduct(a: Matrix[T], b: Matrix[T]) = { - val range = ParRange(0, n * n, 1, false) - for (i <- range) this(i / n, i % n) = calcProduct(a, b, i / n, i % n); - } - - private def calcProduct(a: Matrix[T], b: Matrix[T], y: Int, x: Int): T = { - import num._ - var sum = zero - for (i <- 0 until n) sum += a(y, i) * b(i, x) - sum - } - - def output = for (y <- 0 until n) { - for (x <- 0 until n) print(this(y, x)) - println - } - } - - object Matrix { - def unit[T](n: Int)(implicit num: Numeric[T], tag: ClassTag[T]) = { - val m = new Matrix[T](n) - for (i <- 0 until n) m(i, i) = num.one - m - } - } - -} - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala deleted file mode 100644 index a51b5d6176..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala +++ /dev/null @@ -1,28 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - - -/** Tests reduce method using an operator creating an object as a result. */ -class MinLight(sz: Int, p: Int, what: String) -extends Resettable[Int](sz, p, what, (i: Int) => i, new Array[Any](_), classOf[Int]) { - def companion = MinLight - override def repetitionsPerRun = 400 - - def runpar = pa.min(Ordering[Int]) - def runseq = sequentialMin(sz) - override def comparisonMap = collection.Map() -} - -object MinLight extends Companion { - def benchName = "min-light"; - def apply(sz: Int, p: Int, what: String) = new MinLight(sz, p, what) - override def comparisons = List() -} - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala deleted file mode 100644 index f8a985c349..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala +++ /dev/null @@ -1,53 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class PadToDouble(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = PadToDouble - override def repetitionsPerRun = 400 - - val similar = { - val p = new collection.parallel.mutable.ParArray[Cont](sz) - for (i <- 0 until sz) p(i) = what match { - case "seq" => arr(i).asInstanceOf[Cont] - case "par" => pa(i) - } - p.drop(p.size / 2) - } - - def runpar = runresult = pa.padTo(size * 2, padder).size - def runseq = runresult = sequentialPadTo(size * 2, padder, size).size - override def comparisonMap = collection.Map() - - val padder = new Cont(0) -} - - -object PadToDouble extends Companion { - def benchName = "padto-double"; - def apply(sz: Int, p: Int, what: String) = new PadToDouble(sz, p, what) - override def comparisons = List() - override def defaultSize = 25000 -} - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala deleted file mode 100644 index 57f8536b9e..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala +++ /dev/null @@ -1,24 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object PartialMapLight extends Companion { - def benchName = "partmap-light"; - def apply(sz: Int, parallelism: Int, what: String) = new PartialMapLight(sz, parallelism, what) - override def comparisons = List() - override def defaultSize = 100000 - - def fun: PartialFunction[Cont, Cont] = { - case c: Cont if c.in >= 0 => c - } -} - -class PartialMapLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = PartialMapLight - - def runpar = pa.collect(PartialMapLight.fun) - def runseq = sequentialPartialMap(PartialMapLight.fun, sz) - def comparisonMap = collection.Map() -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala deleted file mode 100644 index b99a25b285..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala +++ /dev/null @@ -1,61 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object PartitionLight extends Companion { - def benchName = "partition-light"; - def apply(sz: Int, parallelism: Int, what: String) = new PartitionLight(sz, parallelism, what) - override def comparisons = Nil - override def defaultSize = 20000 - - val pred = (a: Cont) => check(a.in) - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = check(a.in) - } - - def check(n: Int) = { - var res = n - var i = 1 - while (i < 5) { - res += n % i - i += 1 - } - (res % 2 == 0) && (res % 312 == 0) - } -} - -class PartitionLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = PartitionLight - runresult = -1 - - def runpar = runresult = pa.partition(PartitionLight.pred)._1.size - def runseq = runresult = sequentialPartition(PartitionLight.pred, sz)._1.size - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala deleted file mode 100644 index 55cc71f129..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala +++ /dev/null @@ -1,46 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class PatchHalf(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = PatchHalf - override def repetitionsPerRun = 400 - - val similar = { - val p = new collection.parallel.mutable.ParArray[Cont](sz) - for (i <- 0 until sz) p(i) = what match { - case "seq" => arr(i).asInstanceOf[Cont] - case "par" => pa(i) - } - p.drop(p.size / 2) - } - - def runpar = runresult = pa.patch(size / 2, similar, 0).size - def runseq = runresult = sequentialPatch(size / 2, similar, 0, size).size - override def comparisonMap = collection.Map() -} - -object PatchHalf extends Companion { - def benchName = "patch-half"; - def apply(sz: Int, p: Int, what: String) = new PatchHalf(sz, p, what) - override def comparisons = List() - override def defaultSize = 25000 -} - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala deleted file mode 100644 index 2574621212..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala +++ /dev/null @@ -1,29 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.mutable.ParArray - - -object PlusPlus extends Companion { - def benchName = "plusplus"; - def apply(sz: Int, parallelism: Int, what: String) = new PlusPlus(sz, parallelism, what) - override def comparisons = List() - override def defaultSize = 50000 -} - -class PlusPlus(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = PlusPlus - - val thatarr = new Array[Cont](sz) - val thatpa = new ParArray[Cont](sz) - - def runpar = pa ++ thatpa - def runseq = arr ++ thatarr - def comparisonMap = collection.Map() -} - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala deleted file mode 100644 index dd660ba8e0..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala +++ /dev/null @@ -1,22 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -class ReduceHeavy(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = ReduceHeavy - override def repetitionsPerRun = 100 - - def runseq = sequentialReduce(Cont.opheavy, sz, new Cont(0)) - def runpar = pa.reduce(Cont.opheavy) - def runjsr = jsrarr.reduce(Cont.reducerheavy, new Cont(0)) - override def comparisonMap = collection.Map("jsr" -> runjsr _) -} - -object ReduceHeavy extends Companion { - def benchName = "reduce-heavy"; - def apply(sz: Int, p: Int, what: String) = new ReduceHeavy(sz, p, what) - override def comparisons = List("jsr") - override def defaultSize = 16 -} diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala deleted file mode 100644 index f1f2a32403..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala +++ /dev/null @@ -1,50 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ -import scala.collection.parallel.mutable.ParArray -import extra166y.{ParallelArray => JSR166Array} - - -object ReduceLight extends Companion { - def benchName = "reduce-light"; - def apply(sz: Int, parallelism: Int, what: String) = new ReduceLight(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 200000 -} - - -class ReduceLight(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = ReduceLight - override def repetitionsPerRun = 350 - override val runs = 20 - - def runpar = { - pa.reduce(Cont.op) -// updatePar - } - - def runjsr = { - jsrarr.reduce(Cont.reducer, new Cont(0)) -// updateJsr - } - - def runseq = { - sequentialReduce(Cont.op, sz, new Cont(0)) -// updateSeq - } - - override def comparisonMap = collection.Map("jsr" -> runjsr _) - -} - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala deleted file mode 100644 index f095797d1c..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala +++ /dev/null @@ -1,53 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - -object ReduceList extends Companion { - def benchName = "reduce-list"; - def apply(sz: Int, p: Int, what: String) = new ReduceList(sz, p, what) - override def comparisons = List("jsr") - override def defaultSize = 20000 -} - -object ListCreator extends (Int => List[Int]) { - def apply(idx: Int) = { - val len = 50 + idx % 100 - (for (i <- 0 until len) yield i).toList - } -} - -object ListOps { - val redop = (a: List[Int], b: List[Int]) => combineLists(a, b) - val reducer = new extra166y.Ops.Reducer[List[Int]] { - def op(a: List[Int], b: List[Int]) = combineLists(a, b) - } - def combineLists(a: List[Int], b: List[Int]) = { - if (a.foldLeft(0)(_ + _) > b.foldLeft(0)(_ + _)) a else b - } -} - -class ReduceList(sz: Int, p: Int, what: String) -extends Resettable[List[Int]](sz, p, what, ListCreator, new Array[Any](_), classOf[List[Int]]) { - def companion = ReduceList - override def repetitionsPerRun = 10 - override val runs = 15 - - def runpar = pa.reduce(ListOps.redop) - def runseq = sequentialReduce(ListOps.redop, sz, List[Int]()) - def runjsr = jsrarr.reduce(ListOps.reducer, List[Int]()) - override def comparisonMap = collection.Map("jsr" -> runjsr _) -} - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala deleted file mode 100644 index 1cf4f4169a..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala +++ /dev/null @@ -1,30 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - - -/** Tests reduce method using an operator creating an object as a result. */ -class ReduceNew(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), - new Array[Any](_), classOf[Cont]) { - def companion = ReduceNew - override def repetitionsPerRun = 200 - - def runpar = pa.reduce(Cont.opnew) - def runseq = sequentialReduce(Cont.opnew, sz, new Cont(0)) - def runjsr = jsrarr.reduce(Cont.reducernew, new Cont(0)) - override def comparisonMap = collection.Map("jsr" -> runjsr _) -} - -object ReduceNew extends Companion { - def benchName = "reduce-new"; - def apply(sz: Int, p: Int, what: String) = new ReduceNew(sz, p, what) - override def comparisons = List("jsr") -} - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala deleted file mode 100644 index 8fb90981ac..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala +++ /dev/null @@ -1,65 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object IntWrapCreator extends (Int => IntWrap) { - def apply(idx: Int) = new IntWrap(shiftaround(idx)) - def shiftaround(idx: Int) = idx * 40192 + 717 -} - -case class IntWrap(val num: Int) - -object IntOps { - val op = (a: IntWrap, b: IntWrap) => primereduce(a, b) - val reducer = new extra166y.Ops.Reducer[IntWrap] { - def op(a: IntWrap, b: IntWrap) = primereduce(a, b) - } - - def primereduce(a: IntWrap, b: IntWrap) = { - val check = (checkPrime(a.num), checkPrime(b.num)) - if (a.num > b.num) a else b - } - - def checkPrime(n: Int) = { - var isPrime = true - var i = 2 - val until = scala.math.sqrt(n).toInt + 1 - while (i < until) { - if (n % i == 0) isPrime = false - i += 1 - } - isPrime - } -} - -class ReducePrime(sz: Int, p: Int, what: String) -extends Resettable[IntWrap](sz, p, what, IntWrapCreator, new Array[Any](_), classOf[IntWrap]) -with HavingResult[IntWrap] { - def companion = ReducePrime - - def runseq = runresult = sequentialReduce(IntOps.op, sz, new IntWrap(0)) - def runpar = runresult = pa.reduce(IntOps.op) - def runjsr = runresult = jsrarr.reduce(IntOps.reducer, new IntWrap(0)) - override def comparisonMap = collection.Map("jsr" -> runjsr _) -} - -object ReducePrime extends Companion { - def benchName = "reduce-prime"; - def apply(sz: Int, p: Int, what: String) = new ReducePrime(sz, p, what) - override def comparisons = List("jsr") - override def defaultSize = 100 -} - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala deleted file mode 100644 index feb1bd9466..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala +++ /dev/null @@ -1,44 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class RemoveDuplicates(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = RemoveDuplicates - override def repetitionsPerRun = 400 - - def runpar = runresult = pa.distinct.size - def runseq = runresult = sequentialRemoveDuplicates(size).size - override def comparisonMap = collection.Map() -} - -object RemoveDuplicates extends Companion { - def benchName = "remove-duplicates"; - def apply(sz: Int, p: Int, what: String) = new RemoveDuplicates(sz, p, what) - override def comparisons = List() - override def defaultSize = 10000 -} - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala deleted file mode 100644 index b4403fcb9c..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala +++ /dev/null @@ -1,127 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ -import scala.collection.parallel.mutable.ParArray -import extra166y.{ParallelArray => JSR166Array} - - -class Cont(val in: Int) { - var num = in - override def toString = in.toString -} - -object Cont { - val pred = (a: Cont) => a.in > 100 - - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = a.in > 100 - } - - val op = (a: Cont, b: Cont) => { - b.num = a.in + b.in - b - } - - val opnew = (a: Cont, b: Cont) => new Cont(a.in + b.in) - - val opheavy = (a: Cont, b: Cont) => { - heavyComputation(a, b) - } - - val reducer = new extra166y.Ops.Reducer[Cont] { - def op(a: Cont, b: Cont) = { - b.num = a.in + b.in - b - } - } - - val reducernew = new extra166y.Ops.Reducer[Cont] { - def op(a: Cont, b: Cont) = new Cont(a.in + b.in) - } - - val reducerheavy = new extra166y.Ops.Reducer[Cont] { - def op(a: Cont, b: Cont) = heavyComputation(a, b) - } - - def heavyComputation(a: Cont, b: Cont) = { - val f = a.in - val s = b.in - var i = 0 - var res = f * s - while (i < 50000) { - if ((i + f) % 3 == 0) res += s - else res -= f - i += 1 - } - b.num = res - b - } -} - -abstract class Resettable[T](val size: Int, val parallelism: Int, val runWhat: String, - elemcreator: Int => T, arrcreator: Int => Array[Any], cls: Class[T]) -extends Bench with SequentialOps[T] { - val forkjoinpool = new scala.concurrent.forkjoin.ForkJoinPool(parallelism) - forkjoinpool.setMaximumPoolSize(parallelism) - val papool = new jsr166y.ForkJoinPool(parallelism) - papool.setMaximumPoolSize(parallelism) - - var pa: ParArray[T] = null - var jsrarr: JSR166Array[T] = null - reset - - def reset = runWhat match { - case "seq" => - arr = arrcreator(size) - for (i <- 0 until size) arr(i) = elemcreator(i) - case "par" => - pa = new ParArray[T](size) - collection.parallel.tasksupport.environment = forkjoinpool - for (i <- 0 until size) pa(i) = elemcreator(i) - case "jsr" => - jsrarr = JSR166Array.create(size, cls, papool) - for (i <- 0 until size) jsrarr.set(i, elemcreator(i)) - case _ => throw new IllegalArgumentException("Unknown type: " + runWhat) - } - - var updateCounter = 0 - def incUpdateCounter { - updateCounter += 1 - if (updateCounter > size) updateCounter = 0 - } - - def updateSeq { - val tmp = arr(updateCounter) - arr(updateCounter) = arr(size - updateCounter - 1) - arr(size - updateCounter - 1) = tmp - incUpdateCounter - } - - def updatePar { - val tmp = pa(updateCounter) - pa(updateCounter) = pa(size - updateCounter - 1) - pa(size - updateCounter - 1) = tmp - incUpdateCounter - } - - def updateJsr { - val tmp = jsrarr.get(updateCounter) - jsrarr.set(updateCounter, jsrarr.get(size - updateCounter - 1)) - jsrarr.set(size - updateCounter - 1, tmp) - incUpdateCounter - } - - override def printResults { - println(" --- Fork join pool state --- ") - println("Parallelism: " + forkjoinpool.getParallelism) - println("Active threads: " + forkjoinpool.getActiveThreadCount) - println("Work stealings: " + forkjoinpool.getStealCount) - } -} - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala deleted file mode 100644 index ec690d4b2d..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala +++ /dev/null @@ -1,35 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class Reverse(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) { - def companion = Reverse - override def repetitionsPerRun = 400 - - def runpar = pa.reverse - def runseq = sequentialReverse(sz) - override def comparisonMap = collection.Map() -} - -object Reverse extends Companion { - def benchName = "reverse"; - def apply(sz: Int, p: Int, what: String) = new Reverse(sz, p, what) - override def comparisons = List() -} - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala deleted file mode 100644 index 47ae108c45..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala +++ /dev/null @@ -1,48 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class ReverseMap(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) { - def companion = ReverseMap - override def repetitionsPerRun = 100 - - def runpar = pa.reverseMap(compl) - def runseq = sequentialReverseMap(compl, sz) - override def comparisonMap = collection.Map() - - val id = (c: Cont) => c - val compl = (c: Cont) => { - var in = c.in - var i = 2 - while (i < 6) { - if (in % i == 0) in = 0 - i += 1 - } - if (in < 0) null - else c - } -} - -object ReverseMap extends Companion { - def benchName = "reverse-map"; - def apply(sz: Int, p: Int, what: String) = new ReverseMap(sz, p, what) - override def comparisons = List() - override def defaultSize = 100000 -} - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala deleted file mode 100644 index d22c4df661..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala +++ /dev/null @@ -1,45 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class SameElementsLong(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) -with HavingResult[Boolean] { - def companion = SameElementsLong - override def repetitionsPerRun = 400 - - val same = { - val p = new collection.parallel.mutable.ParArray[Cont](sz) - for (i <- 0 until sz) p(i) = what match { - case "seq" => arr(i).asInstanceOf[Cont] - case "par" => pa(i) - } - p - } - - def runpar = runresult = pa.sameElements(same) - def runseq = runresult = sequentialSameElements(same, sz) - override def comparisonMap = collection.Map() -} - -object SameElementsLong extends Companion { - def benchName = "same-elements-long"; - def apply(sz: Int, p: Int, what: String) = new SameElementsLong(sz, p, what) - override def comparisons = List() -} - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala deleted file mode 100644 index d0ddf9f70e..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala +++ /dev/null @@ -1,46 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ -import scala.collection.parallel.mutable.ParArray - - -object ScanLight extends Companion { - def benchName = "scan-light"; - def apply(sz: Int, parallelism: Int, what: String) = new ScanLight(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 40000 - - val op = (a: Cont, b: Cont) => { - operation(a, b) - } - def operation(a: Cont, b: Cont) = { - val m = if (a.in < 0) 1 else 0 - new Cont(a.in + b.in + m * (0 until 2).reduceLeft(_ + _)) - } -} - - -class ScanLight(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = ScanLight - override def repetitionsPerRun = 50 - override val runs = 12 - - def runpar = pa.scan(new Cont(0))(ScanLight.op) - def runseq = sequentialScan(new Cont(0), ScanLight.op, sz) - def runjsr = jsrarr.cumulate(new extra166y.Ops.Reducer[Cont] { - def op(a: Cont, b: Cont) = ScanLight.operation(a, b) - }, new Cont(0)) - override def comparisonMap = collection.Map("jsr" -> runjsr _) -} - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala deleted file mode 100644 index a60ba7aa33..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala +++ /dev/null @@ -1,55 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ -import scala.collection.parallel.mutable.ParArray - - -object ScanMedium extends Companion { - def benchName = "scan-medium"; - def apply(sz: Int, parallelism: Int, what: String) = new ScanMedium(sz, parallelism, what) - override def comparisons = List("jsr") - override def defaultSize = 5000 - - val op = (a: Cont, b: Cont) => { - operation(a, b) - } - def operation(a: Cont, b: Cont) = { - val m = if (a.in < 0) 1 else 0 - val k = calc(a.in, b.in, m) - new Cont(a.in + b.in + k * m * (0 until 2).reduceLeft(_ + _)) - } - private def calc(x: Int, y: Int, n: Int) = { - var sum = x - for (i <- 0 until 500) { - sum += y + (if (sum % 2 == 0) n * x else y) - if (sum % 5 == 0) sum -= x * y - n * (x + y) - } - sum - } -} - - -class ScanMedium(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { - def companion = ScanMedium - override def repetitionsPerRun = 50 - override val runs = 12 - - def runpar = pa.scan(new Cont(0))(ScanMedium.op) - def runseq = sequentialScan(new Cont(0), ScanMedium.op, sz) - def runjsr = jsrarr.cumulate(new extra166y.Ops.Reducer[Cont] { - def op(a: Cont, b: Cont) = ScanMedium.operation(a, b) - }, new Cont(0)) - override def comparisonMap = collection.Map("jsr" -> runjsr _) -} - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala deleted file mode 100644 index 8fae899b45..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala +++ /dev/null @@ -1,42 +0,0 @@ -package scala.collection.parallel.benchmarks -package parallel_array - - - - - - - -class SegmentLength(sz: Int, p: Int, what: String) -extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = SegmentLength - override def repetitionsPerRun = 400 - - def runpar = runresult = pa.segmentLength(SegmentLength.pred2, 0) - def runseq = runresult = sequentialSegmentLength(SegmentLength.pred2, 0, sz) - override def comparisonMap = collection.Map() -} - -object SegmentLength extends Companion { - def benchName = "segment-length"; - def apply(sz: Int, p: Int, what: String) = new SegmentLength(sz, p, what) - override def comparisons = List() - - val pred = (c: Cont) => { - var in = c.in - var i = 2 - while (i < 5) { - if (in % i == 0) in = 0 - i += 1 - } - c.in >= 0 || in == 0 - } - val pred2 = (c: Cont) => c.in >= 0 -} - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala deleted file mode 100644 index 9300851b5f..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala +++ /dev/null @@ -1,562 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - -trait SequentialOps[T] { - - var arr: Array[Any] = null - - def sequentialReduce(op: (T, T) => T, sz: Int, init: T) = { - var i = 0 - val until = sz - var sum = init - while (i < until) { - sum = op(sum, arr(i).asInstanceOf[T]) - i += 1 - } - sum - } - - def sequentialScan(z: T, op: (T, T) => T, sz: Int) = { - var outarr = new Array[Any](sz + 1) - outarr(0) = z - var last = z - var i = 0 - var j = 1 - val until = sz - while (i < until) { - last = op(last, arr(i).asInstanceOf[T]) - outarr(j) = last - i += 1 - j += 1 - } - } - - def sequentialCount(pred: T => Boolean, sz: Int) = { - var i = 0 - val until = sz - var sum = 0 - while (i < until) { - if (pred(arr(i).asInstanceOf[T])) sum += 1 - i += 1 - } - sum - } - - def sequentialForeach[U](f: T => U, sz: Int) = { - var i = 0 - val until = sz - var sum = 0 - while (i < until) { - f(arr(i).asInstanceOf[T]) - i += 1 - } - } - - def sequentialSum[U >: T](sz: Int)(implicit num: Numeric[U]) = { - var i = 0 - val until = sz - var sum = num.zero - while (i < until) { - sum = num.plus(sum, arr(i).asInstanceOf[T]) - i += 1 - } - sum - } - - def sequentialMin[U >: T](sz: Int)(implicit ord: Ordering[U]) = { - var i = 1 - val until = sz - var min = arr(0).asInstanceOf[U] - while (i < until) { - val elem = arr(i).asInstanceOf[U] - if (ord.lt(elem, min)) min = elem - i += 1 - } - min - } - - def sequentialForall(pred: T => Boolean, sz: Int) = { - var i = 0 - val until = sz - var all = true - while (i < until) { - if (pred(arr(i).asInstanceOf[T])) i += 1 - else { - all = false - i = until - } - } - all - } - - def sequentialExists(pred: T => Boolean, sz: Int) = { - var i = 0 - val until = sz - var some = false - while (i < until) { - if (pred(arr(i).asInstanceOf[T])) { - some = true - i = until - } else i += 1 - } - some - } - - def sequentialFind(pred: T => Boolean, sz: Int) = { - var i = 0 - val until = sz - var opt: Option[T] = None - while (i < until) { - if (pred(arr(i).asInstanceOf[T])) { - opt = Some(arr(i).asInstanceOf[T]) - i = until - } else i += 1 - } - opt - } - - def sequentialFilter(pred: T => Boolean, sz: Int) = { - var i = 0 - val buff = new collection.mutable.ArrayBuffer[T] - while (i < sz) { - val elem = arr(i).asInstanceOf[T] - if (pred(elem)) buff += elem - i += 1 - } - val resarr = new Array[Any](buff.size) - buff.copyToArray(resarr, 0) - resarr - } - - def sequentialPartition(pred: T => Boolean, sz: Int) = { - var i = 0 - val btrue = new collection.mutable.ArrayBuffer[T] - val bfalse = new collection.mutable.ArrayBuffer[T] - while (i < sz) { - val elem = arr(i).asInstanceOf[T] - if (pred(elem)) btrue += elem - else bfalse += elem - i += 1 - } - val restrue = new Array[Any](btrue.size) - val resfalse = new Array[Any](bfalse.size) - btrue.copyToArray(restrue, 0) - bfalse.copyToArray(resfalse, 0) - (restrue, resfalse) - } - - def sequentialTakeOpt(n: Int, sz: Int) = { - var i = 0 - val until = if (n < sz) n else sz - val res = new Array[Any](until) - Array.copy(arr, 0, res, 0, until) -// while (i < until) { -// res(i) = arr(i) -// i += 1 -// } - res - } - - def sequentialTake(n: Int, sz: Int) = { - var i = 0 - val b = new collection.mutable.ArrayBuffer[T] - val until = if (n < sz) n else sz - b.sizeHint(until) - while (i < until) { - val elem = arr(i).asInstanceOf[T] - b += elem - i += 1 - } - val res = new Array[Any](n) - b.copyToArray(res, 0) - res - } - - def sequentialDrop(n: Int, sz: Int) = { - var i = n - val b = new collection.mutable.ArrayBuffer[T] - b.sizeHint(sz - n) - while (i < sz) { - val elem = arr(i).asInstanceOf[T] - b += elem - i += 1 - } - val res = new Array[Any](n) - b.copyToArray(res, 0) - res - } - - def sequentialSlice(from: Int, until: Int, sz: Int) = { - var i = from - val b = new collection.mutable.ArrayBuffer[T] - b.sizeHint(until - from) - while (i < until) { - val elem = arr(i).asInstanceOf[T] - b += elem - i += 1 - } - val res = new Array[Any](until - from) - b.copyToArray(res, 0) - res - } - - def sequentialSplitAtOpt(n: Int, sz: Int) = { - var i = 0 - val before = new Array[Any](n) - val after = new Array[Any](sz - n) - Array.copy(arr, 0, before, 0, n) - Array.copy(arr, n, after, 0, sz - n) - (before, after) - } - - def sequentialSplitAt(n: Int, sz: Int) = { - var i = 0 - val before = new collection.mutable.ArrayBuffer[T] - before.sizeHint(n) - val after = new collection.mutable.ArrayBuffer[T] - after.sizeHint(sz - n) - while (i < sz) { - if (i < n) before += arr(i).asInstanceOf[T] - else after += arr(i).asInstanceOf[T] - i += 1 - } - val resbef = new Array[Any](n) - val resaft = new Array[Any](sz - n) - before.copyToArray(resbef, 0) - after.copyToArray(resaft, 0) - (resbef, resaft) - } - - def sequentialTakeWhile(p: T => Boolean, sz: Int) = { - var i = 0 - val b = new collection.mutable.ArrayBuffer[T] - while (i < sz) { - val elem = arr(i).asInstanceOf[T] - if (p(elem)) { - b += elem - i += 1 - } else i = sz - } - val res = new Array[Any](sz) - b.copyToArray(res, 0) - res - } - - def sequentialSpan(p: T => Boolean, sz: Int) = { - val bpref = new collection.mutable.ArrayBuffer[T] - val brest = new collection.mutable.ArrayBuffer[T] - var i = 0 - var prefix = true - var pos = sz - while (i < sz) { - val elem = arr(i).asInstanceOf[T] - if (prefix) { - if (p(elem)) bpref += elem - else { - pos = i - prefix = false - brest += elem - } - } else brest += elem - i += 1 - } - val respref = new Array[Any](pos) - val resrest = new Array[Any](sz - pos) - bpref.copyToArray(respref, 0) - brest.copyToArray(resrest, 0) - (respref, resrest) - } - - def sequentialMap(f: T => T, sz: Int) = { - val b = new collection.mutable.ArrayBuffer[T](sz) - - var i = 0 - while (i < sz) { - b += f(arr(i).asInstanceOf[T]) - i += 1 - } - - val res = new Array[Any](sz) - b.copyToArray(res, 0) - res - } - - def sequentialMapOpt(f: T => T, sz: Int) = { - val res = new Array[Any](sz) - - var i = 0 - while (i < sz) { - res(i) = f(arr(i).asInstanceOf[T]) - i += 1 - } - - res - } - - def sequentialPartialMap(f: PartialFunction[T, T], sz: Int) = { - val b = new collection.mutable.ArrayBuffer[T](sz) - - var i = 0 - while (i < sz) { - val elem = arr(i).asInstanceOf[T] - if (f.isDefinedAt(elem)) b += f(elem) - i += 1 - } - - val res = new Array[Any](b.size) - b.copyToArray(res, 0) - res - } - - def sequentialFlatMap(f: T => Traversable[Int], sz: Int) = { - val b = new collection.mutable.ArrayBuffer[Int](sz) - - var i = 0 - while (i < sz) { - val ts = f(arr(i).asInstanceOf[T]) - for (elem <- ts) b += elem - i += 1 - } - - val res = new Array[Any](b.size) - b.copyToArray(res, 0) - res - } - - def sequentialCopyToArray(destarr: Array[Any], pos: Int, sz: Int) = { - Array.copy(arr, 0, destarr, pos, sz) - } - - def sequentialSegmentLength(pred: T => Boolean, from: Int, sz: Int) = { - var i = from - var cnt = 0 - - while (i < sz) { - if (pred(arr(i).asInstanceOf[T])) { - cnt += 1 - i += 1 - } else i = sz - } - - cnt - } - - def sequentialIndexWhere(pred: T => Boolean, from: Int, sz: Int) = { - var i = from - var pos = -1 - - while (i < sz) { - if (pred(arr(i).asInstanceOf[T])) { - pos = i - i = sz - } else i += 1 - } - - pos - } - - def sequentialLastIndexWhere(pred: T => Boolean, end: Int, sz: Int) = { - var i = end - var pos = -1 - - while (i >= 0) { - if (pred(arr(i).asInstanceOf[T])) { - pos = i - i = -1 - } else i -= 1 - } - - pos - } - - def sequentialReverse(sz: Int) = { - val res = new Array[Any](sz) - - var i = sz - 1 - var j = 0 - while (i >= 0) { - res(j) = arr(i) - i -= 1 - j += 1 - } - res - } - - def sequentialReverseMap(f: T => T, sz: Int) = { - val res = new Array[Any](sz) - - var i = sz - 1 - var j = 0 - while (i >= 0) { - res(j) = f(arr(i).asInstanceOf[T]) - i -= 1 - j += 1 - } - res - } - - def sequentialSameElements(sq: Seq[T], sz: Int): Boolean = { - if (sz != sq.length) false - else { - var i = 0 - val jt = sq.iterator - while (i < sz) { - if (arr(i) == jt.next) i += 1 - else i = sz + 1 - } - if (i == sz) true - else false - } - } - - def sequentialCorresponds(sq: Seq[T], f: (T, T) => Boolean, sz: Int): Boolean = { - if (sz != sq.length) false - else { - var i = 0 - val jt = sq.iterator - while (i < sz) { - if (f(arr(i).asInstanceOf[T], jt.next)) i += 1 - else i = sz + 1 - } - if (i == sz) true - else false - } - } - - def sequentialDiff(sq: Seq[T], sz: Int) = { - val occmap = occurrences(sq) - val b = new collection.mutable.ArrayBuffer[T] - - var i = 0 - while (i < sz) { - val elem = arr(i).asInstanceOf[T] - if (occmap(elem) == 0) b += elem - else occmap(elem) -= 1 - i += 1 - } - - val res = new Array[Any](b.size) - b.copyToArray(res, 0) - res - } - - def sequentialIntersect(sq: Seq[T], sz: Int) = { - val occmap = occurrences(sq) - val b = new collection.mutable.ArrayBuffer[T] - - var i = 0 - while (i < sz) { - val elem = arr(i).asInstanceOf[T] - val num = occmap(elem) - if (num > 0) { - b += elem - occmap(elem) = num - 1 - } - i += 1 - } - - val res = new Array[Any](b.size) - b.copyToArray(res, 0) - res - } - - private def occurrences(sq: Seq[T]) = { - val occmap = new collection.mutable.HashMap[T, Int] { override def default(k: T) = 0 } - for (elem <- sq.iterator) occmap(elem) += 1 - occmap - } - - def sequentialRemoveDuplicates(sz: Int) = { - val occ = new collection.mutable.HashSet[T] - val b = new collection.mutable.ArrayBuffer[T] - - var i = 0 - while (i < sz) { - val elem = arr(i).asInstanceOf[T] - if (!occ.contains(elem)) { - b += elem - occ.add(elem) - } - i += 1 - } - - val res = new Array[Any](b.size) - b.copyToArray(res, 0) - res - } - - def sequentialPatch(from: Int, p: Seq[T], replaced: Int, sz: Int) = { - val b = new collection.mutable.ArrayBuffer[T] - b.sizeHint(from + (sz - from - replaced) + p.size) - - var i = 0 - while (i < from) { - b += arr(i).asInstanceOf[T] - i += 1 - } - - val jt = p.iterator - while (jt.hasNext) b += jt.next - - val skipto = from + replaced - while (i < from + replaced) i += 1 - - while (i < sz) { - b += arr(i).asInstanceOf[T] - i += 1 - } - - val res = new Array[Any](b.size) - b.copyToArray(res, 0) - res - } - - def sequentialPadTo(tosize: Int, elem: T, sz: Int) = { - val b = new collection.mutable.ArrayBuffer[T] - b.sizeHint(tosize) - - var i = 0 - while (i < sz) { - b += arr(i).asInstanceOf[T] - i += 1 - } - - while (i < tosize) { - b += elem - i += 1 - } - - val res = new Array[Any](b.size) - b.copyToArray(res, 0) - res - } - -} - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala deleted file mode 100644 index 450d640b8d..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala +++ /dev/null @@ -1,47 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object SliceFew extends Companion { - def benchName = "slice-few"; - def apply(sz: Int, parallelism: Int, what: String) = new SliceFew(sz, parallelism, what) - override def comparisons = Nil - override def defaultSize = 50000 -} - -class SliceFew(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = SliceFew - override def repetitionsPerRun = 200 - runresult = -1 - - def runpar = runresult = pa.slice(5, 25).size - def runseq = runresult = sequentialSlice(5, 25, sz).size - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala deleted file mode 100644 index 4a30b60e1f..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala +++ /dev/null @@ -1,47 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object SliceMany extends Companion { - def benchName = "slice-many"; - def apply(sz: Int, parallelism: Int, what: String) = new SliceMany(sz, parallelism, what) - override def comparisons = Nil - override def defaultSize = 50000 -} - -class SliceMany(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = SliceMany - override def repetitionsPerRun = 200 - runresult = -1 - - def runpar = runresult = pa.slice(pa.size / 4, pa.size * 3 / 4).size - def runseq = runresult = sequentialSlice(sz / 4, sz * 3 / 4, sz).size - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala deleted file mode 100644 index e16002f15d..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala +++ /dev/null @@ -1,47 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object SliceMedium extends Companion { - def benchName = "slice-medium"; - def apply(sz: Int, parallelism: Int, what: String) = new SliceMedium(sz, parallelism, what) - override def comparisons = Nil - override def defaultSize = 50000 -} - -class SliceMedium(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = SliceMedium - override def repetitionsPerRun = 200 - runresult = -1 - - def runpar = runresult = pa.slice(pa.size / 7, pa.size * 4 / 7).size - def runseq = runresult = sequentialSlice(sz / 7, sz * 4 / 7, sz).size - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala deleted file mode 100644 index 5f1e631bce..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala +++ /dev/null @@ -1,62 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object SpanLight extends Companion { - def benchName = "span-light"; - def apply(sz: Int, parallelism: Int, what: String) = new SpanLight(sz, parallelism, what) - override def comparisons = Nil - override def defaultSize = 20000 - - val pred = (a: Cont) => check(a.in) - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = check(a.in) - } - - def check(n: Int) = { - var res = n - var i = 1 - while (i < 10) { - res += n % i - i += 1 - } - if (n != 10000) res % 2 == 0 || n != 10000 - else false - } -} - -class SpanLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = SpanLight - runresult = -1 - - def runpar = runresult = pa.span(SpanLight.pred)._1.size - def runseq = runresult = sequentialSpan(SpanLight.pred, sz)._1.size - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala deleted file mode 100644 index ff1e009481..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala +++ /dev/null @@ -1,47 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object SplitHalf extends Companion { - def benchName = "split-half"; - def apply(sz: Int, parallelism: Int, what: String) = new SplitHalf(sz, parallelism, what) - override def comparisons = Nil - override def defaultSize = 50000 -} - -class SplitHalf(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = SplitHalf - override def repetitionsPerRun = 300 - runresult = -1 - - def runpar = runresult = pa.splitAt(pa.size / 2)._1.size - def runseq = runresult = sequentialSplitAtOpt(sz / 2, sz)._1.size - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala deleted file mode 100644 index 6ed6d14370..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala +++ /dev/null @@ -1,28 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - - - - -/** Tests reduce method using an operator creating an object as a result. */ -class SumLight(sz: Int, p: Int, what: String) -extends Resettable[Int](sz, p, what, (i: Int) => i, new Array[Any](_), classOf[Int]) { - def companion = SumLight - override def repetitionsPerRun = 500 - - def runpar = pa.sum - def runseq = sequentialSum(sz) - override def comparisonMap = collection.Map() -} - -object SumLight extends Companion { - def benchName = "sum-light"; - def apply(sz: Int, p: Int, what: String) = new SumLight(sz, p, what) - override def comparisons = List() -} - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala deleted file mode 100644 index 9ddfb77a9d..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala +++ /dev/null @@ -1,47 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object TakeMany extends Companion { - def benchName = "take-many"; - def apply(sz: Int, parallelism: Int, what: String) = new TakeMany(sz, parallelism, what) - override def comparisons = Nil - override def defaultSize = 250000 -} - -class TakeMany(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = TakeMany - override def repetitionsPerRun = 400 - runresult = -1 - - def runpar = runresult = pa.take(pa.size / 2).size - def runseq = runresult = sequentialTake(sz / 2, sz).size - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala deleted file mode 100644 index a86c67d0d8..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala +++ /dev/null @@ -1,61 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_array - - -import scala.collection.parallel.benchmarks._ - - -object TakeWhileLight extends Companion { - def benchName = "takewhile-light"; - def apply(sz: Int, parallelism: Int, what: String) = new TakeWhileLight(sz, parallelism, what) - override def comparisons = Nil - override def defaultSize = 10000 - - val pred = (a: Cont) => check(a.in) - val predjsr = new extra166y.Ops.Predicate[Cont] { - def op(a: Cont) = check(a.in) - } - - def check(n: Int) = { - var res = n - var i = 1 - while (i < 10) { - res += n % i - i += 1 - } - res % 2 == 0 || n > 0 - } -} - -class TakeWhileLight(sz: Int, p: Int, what: String) -extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) -with HavingResult[Int] { - def companion = TakeWhileLight - runresult = -1 - - def runpar = runresult = pa.takeWhile(TakeWhileLight.pred).size - def runseq = runresult = sequentialTakeWhile(TakeWhileLight.pred, sz).size - def comparisonMap = collection.Map() -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala deleted file mode 100644 index af852ce992..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala +++ /dev/null @@ -1,211 +0,0 @@ -package scala.collection.parallel.benchmarks.parallel_range - - - - - -import scala.collection.parallel.benchmarks.generic._ -import scala.collection.parallel.immutable.ParRange -import scala.collection.parallel.benchmarks.generic.StandardParIterableBenches - - - - - -object RangeBenches extends StandardParIterableBenches[Int, ParRange] { - - def nameOfCollection = "ParRange" - def operators = new IntOperators {} - def comparisonMap = collection.Map() - val forkJoinPool = new scala.concurrent.forkjoin.ForkJoinPool - def createSequential(sz: Int, p: Int) = new collection.immutable.Range(0, sz, 1) - def createParallel(sz: Int, p: Int) = { - val pr = collection.parallel.immutable.ParRange(0, sz, 1, false) - forkJoinPool.setParallelism(p) - collection.parallel.tasksupport.environment = forkJoinPool - pr - } - - object MapLight extends IterableBenchCompanion { - override def defaultSize = 20000 - def benchName = "map-light"; - def apply(sz: Int, p: Int, w: String) = new MapLight(sz, p, w) - } - - class MapLight(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def calc(n: Int) = n % 2 + 1 - - def comparisonMap = collection.Map() - def runseq = for (n <- this.seqcoll) yield calc(n) - def runpar = for (n <- this.parcoll) yield calc(n) - def companion = MapLight - } - - object MapMedium extends IterableBenchCompanion { - override def defaultSize = 5000 - def benchName = "map-medium"; - def apply(sz: Int, p: Int, w: String) = new MapMedium(sz, p, w) - } - - class MapMedium(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - def calc(n: Int) = { - var i = 0 - var sum = n - while (i < 40) { - i += 1 - sum += n % i - } - sum - } - - def comparisonMap = collection.Map() - def runseq = for (n <- this.seqcoll) yield calc(n) - def runpar = for (n <- this.parcoll) yield calc(n) - def companion = MapMedium - } - - object ForeachModify extends IterableBenchCompanion { - override def defaultSize = 150000 - def benchName = "foreach-modify"; - def apply(sz: Int, p: Int, w: String) = new ForeachModify(sz, p, w) - } - - class ForeachModify(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - val array = new Array[Int](size) - def modify(n: Int) = array(n) += 1 - - def comparisonMap = collection.Map() - def runseq = for (n <- this.seqcoll) modify(n) - def runpar = for (n <- this.parcoll.asInstanceOf[ParRange]) { - modify(n) - () - } - def companion = ForeachModify - } - - object ForeachModifyMedium extends IterableBenchCompanion { - override def defaultSize = 20000 - def benchName = "foreach-modify-medium"; - def apply(sz: Int, p: Int, w: String) = new ForeachModifyMedium(sz, p, w) - } - - class ForeachModifyMedium(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - val array = new Array[Int](size) - def modify(n: Int) = array(n) = { - var i = 0 - var sum = 0 - while (i < 15) { - sum += i % 3 - i += i + 1 - } - sum - } - - def comparisonMap = collection.Map() - def runseq = for (n <- this.seqcoll) modify(n) - def runpar = for (n <- this.parcoll) modify(n) - def companion = ForeachModifyMedium - } - - object ForeachModifyHeavy extends IterableBenchCompanion { - override def defaultSize = 1000 - def benchName = "foreach-modify-heavy"; - def apply(sz: Int, p: Int, w: String) = new ForeachModifyHeavy(sz, p, w) - } - - class ForeachModifyHeavy(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - val array = new Array[Int](size) - def modify(n: Int) = array(n) = collatz(10000 + array(n)) - - def comparisonMap = collection.Map() - def runseq = for (n <- this.seqcoll) modify(n) - def runpar = for (n <- this.parcoll) modify(n) - def companion = ForeachModifyHeavy - } - - object ForeachAdd extends IterableBenchCompanion { - override def defaultSize = 10000 - def benchName = "foreach-add"; - def apply(sz: Int, p: Int, w: String) = new ForeachAdd(sz, p, w) - override def comparisons = List("seq-hashmap") - } - - class ForeachAdd(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - val cmap = new java.util.concurrent.ConcurrentHashMap[Int, Int] - val hmap = new java.util.HashMap[Int, Int] - - override def reset = runWhat match { - case "seq-hashmap" => seqcoll = createSequential(size, parallelism) - case _ => super.reset - } - - def comparisonMap = collection.Map("seq-hashmap" -> runseqhashmap _) - def runseqhashmap = for (i <- seqcoll) hmap put (i, onesum(i)) - def runseq = for (i <- seqcoll) cmap put (i, onesum(i)) - def runpar = for (i <- parcoll) cmap put (i, onesum(i)) - def companion = ForeachAdd - } - - object ForeachAddCollatz extends IterableBenchCompanion { - override def defaultSize = 5000 - def benchName = "foreach-add-collatz"; - def apply(sz: Int, p: Int, w: String) = new ForeachAddCollatz(sz, p, w) - override def comparisons = List("seq-hashmap") - } - - class ForeachAddCollatz(val size: Int, val parallelism: Int, val runWhat: String) - extends IterableBench { - val cmap = new java.util.concurrent.ConcurrentHashMap[Int, Int] - val hmap = new java.util.HashMap[Int, Int] - - override def reset = runWhat match { - case "seq-hashmap" => seqcoll = createSequential(size, parallelism) - case _ => super.reset - } - - def comparisonMap = collection.Map("seq-hashmap" -> runseqhashmap _) - def runseqhashmap = for (i <- seqcoll) hmap put (i, collatz(i)) - def runseq = for (i <- seqcoll) cmap put (i, collatz(i)) - def runpar = for (i <- parcoll) cmap put (i, collatz(i)) - def companion = ForeachAddCollatz - } - - def collatz(n: Int) = { - var curr = n - var sum = 0 - while (curr > 1) { - sum += curr - if (curr % 2 == 0) curr = curr / 2 - else curr = curr * 3 + 1 - } - sum - } - - def onesum(n: Int) = { - var left = n - var sum = 0 - while (left > 0) { - sum += left % 2 - left /= 2 - } - sum - } - -} - - - - - - - - - - - diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala deleted file mode 100644 index 1c1cd52120..0000000000 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala +++ /dev/null @@ -1,51 +0,0 @@ -package scala.collection.parallel -package benchmarks.parallel_view - - - -import scala.collection.parallel.benchmarks.generic._ -import scala.collection.SeqView - - - - - - - - - - -trait DummyViewBenches -extends ParSeqViewBenches[Dummy, ParSeqView[Dummy, ParSeq[Dummy], Seq[Dummy]], Seq[Dummy]] { - def nameOfCollection = "ParView" - def operators = DummyOperators - def comparisonMap = collection.Map() - val forkJoinPool = new scala.concurrent.forkjoin.ForkJoinPool - def createSequential(sz: Int, p: Int) = { - val s = new Array[Dummy](sz) - for (i <- 0 until sz) s(i) = new Dummy(i) - s - } - def createParallel(sz: Int, p: Int) = { - val pa = new collection.parallel.mutable.ParArray[Dummy](sz) - forkJoinPool.setParallelism(p) - for (i <- 0 until sz) pa(i) = new Dummy(i) - val v = pa.view - collection.parallel.tasksupport.environment = forkJoinPool - v - } - def createSeqView(sz: Int, p: Int) = createSequential(sz, p).view -} - - -object DummyViewBenchList extends DummyViewBenches - - - - - - - - - - diff --git a/test/benchmarks/src/scala/util/HashSpeedTest.scala b/test/benchmarks/src/scala/util/HashSpeedTest.scala deleted file mode 100644 index a4d310e6d1..0000000000 --- a/test/benchmarks/src/scala/util/HashSpeedTest.scala +++ /dev/null @@ -1,253 +0,0 @@ -object HashSpeedTest { - - import System.{ nanoTime => now } - - def time[A](f: => A) = { - val t0 = now - val ans = f - (ans, now - t0) - } - - def ptime[A](f: => A) = { - val (ans, dt) = time(f) - printf("Elapsed: %.3f\n", dt * 1e-9) - ans - } - - object HashHist { - var enabled = true - val counts = new collection.mutable.HashMap[Int, Int] - def add(i: Int) { if (enabled) counts(i) = counts.get(i).getOrElse(0) + 1 } - def resultAndReset = { - var s = 0L - var o = 0L - var m = 0 - counts.valuesIterator.foreach(i => { - s += i - if (i > 0) o += 1 - if (i > m) m = i - }) - counts.clear - (s, o, m) - } - } - - def report(s: String, res: (Long, Long, Int)) { - println("Hash quality of " + s) - printf(" %5.2f%% of entries are collisions\n", 100 * (res._1 - res._2).toDouble / res._1) - printf(" Max of %d entries mapped to the same value\n", res._3) - } - - // If you have MurmurHash3 installed, uncomment below (and in main) - import scala.util.{ MurmurHash3 => MH3 } - - val justCountString: String => Unit = str => { - var s, i = 0 - while (i < str.length) { s += str.charAt(i); i += 1 } - HashHist.add(s) - } - - val defaultHashString: String => Unit = str => HashHist.add(str.hashCode) - - val murmurHashString: String => Unit = str => HashHist.add(MH3.stringHash(str)) - - def makeCharStrings = { - val a = new Array[Byte](4) - val buffer = new collection.mutable.ArrayBuffer[String] - var i: Int = 'A' - while (i <= 'Z') { - a(0) = (i & 0xFF).toByte - var j: Int = 'a' - while (j <= 'z') { - a(1) = (j & 0xFF).toByte - var k: Int = 'A' - while (k <= 'z') { - a(2) = (k & 0xFF).toByte - var l: Int = 'A' - while (l <= 'z') { - a(3) = (l & 0xFF).toByte - buffer += new String(a) - l += 1 - } - k += 1 - } - j += 1 - } - i += 1 - } - buffer.toArray - } - - def hashCharStrings(ss: Array[String], hash: String => Unit) { - var i = 0 - while (i < ss.length) { - hash(ss(i)) - i += 1 - } - } - - def justCountList: List[List[Int]] => Unit = lli => { - var s = 0 - lli.foreach(_.foreach(s += _)) - HashHist.add(s) - } - - def defaultHashList: List[List[Int]] => Unit = lli => HashHist.add(lli.hashCode) - - def makeBinaryLists = { - def singleLists(depth: Int): List[List[Int]] = { - if (depth <= 0) List(Nil) - else { - val set = singleLists(depth - 1) - val longest = set filter (_.length == depth - 1) - set ::: (longest.map(0 :: _)) ::: (longest.map(1 :: _)) - } - } - val buffer = new collection.mutable.ArrayBuffer[List[List[Int]]] - val blocks = singleLists(4).toArray - buffer += List(Nil) - var i = 0 - while (i < blocks.length) { - val li = blocks(i) :: Nil - buffer += li - var j = 0 - while (j < blocks.length) { - val lj = blocks(j) :: li - buffer += lj - var k = 0 - while (k < blocks.length) { - val lk = blocks(k) :: lj - buffer += lk - var l = 0 - while (l < blocks.length) { - val ll = blocks(l) :: lk - buffer += ll - l += 1 - } - k += 1 - } - j += 1 - } - i += 1 - } - buffer.toArray - } - - def hashBinaryLists(ls: Array[List[List[Int]]], hash: List[List[Int]] => Unit) { - var i = 0 - while (i < ls.length) { - hash(ls(i)) - i += 1 - } - } - - def justCountSets: Set[Int] => Unit = si => { - var s = 0 - si.foreach(s += _) - HashHist.add(s) - } - - def defaultHashSets: Set[Int] => Unit = si => HashHist.add(si.hashCode) - - def makeIntSets = { - def sets(depth: Int): List[Set[Int]] = { - if (depth <= 0) List(Set.empty[Int]) - else { - val set = sets(depth - 1) - set ::: set.map(_ + depth) - } - } - sets(20).toArray - } - - def hashIntSets(ss: Array[Set[Int]], hash: Set[Int] => Unit) { - var i = 0 - while (i < ss.length) { - hash(ss(i)) - i += 1 - } - } - - def defaultHashTuples: (Product with Serializable) => Unit = p => HashHist.add(p.hashCode) - - def makeNestedTuples = { - val basic = Array( - (0, 0), - (0, 1), - (1, 0), - (1, 1), - (0, 0, 0), - (0, 0, 1), - (0, 1, 0), - (1, 0, 0), - (0, 0, 0, 0), - (0, 0, 0, 0, 0), - (false, false), - (true, false), - (false, true), - (true, true), - (0.7, true, "fish"), - ((), true, 'c', 400, 9.2, "galactic")) - basic ++ - (for (i <- basic; j <- basic) yield (i, j)) ++ - (for (i <- basic; j <- basic; k <- basic) yield (i, j, k)) ++ - (for (i <- basic; j <- basic; k <- basic) yield ((i, j), k)) ++ - (for (i <- basic; j <- basic; k <- basic) yield (i, (j, k))) ++ - (for (i <- basic; j <- basic; k <- basic; l <- basic) yield (i, j, k, l)) ++ - (for (i <- basic; j <- basic; k <- basic; l <- basic) yield ((i, j), (k, l))) ++ - (for (i <- basic; j <- basic; k <- basic; l <- basic) yield (i, (j, k, l))) ++ - (for (i <- basic; j <- basic; k <- basic; l <- basic; m <- basic) yield (i, j, k, l, m)) ++ - (for (i <- basic; j <- basic; k <- basic; l <- basic; m <- basic) yield (i, (j, (k, (l, m))))) - } - - def hashNestedTuples(ts: Array[Product with Serializable], hash: (Product with Serializable) => Unit) { - var i = 0 - while (i < ts.length) { - hash(ts(i)) - i += 1 - } - } - - def findSpeed[A](n: Int, h: (Array[A], A => Unit) => Unit, aa: Array[A], f: A => Unit) = { - (time { for (i <- 1 to n) { h(aa, f) } }._2, aa.length.toLong * n) - } - - def reportSpeed[A](repeats: Int, xs: List[(String, () => (Long, Long))]) { - val tn = Array.fill(xs.length)((0L, 0L)) - for (j <- 1 to repeats) { - for ((l, i) <- xs zipWithIndex) { - val x = l._2() - tn(i) = (tn(i)._1 + x._1, tn(i)._2 + x._2) - } - } - for (((t, n), (title, _)) <- (tn zip xs)) { - val rate = (n * 1e-6) / (t * 1e-9) - printf("Hash rate for %s: %4.2f million/second\n", title, rate) - } - } - - def main(args: Array[String]) { - val bl = makeBinaryLists - val is = makeIntSets - val nt = makeNestedTuples - // Uncomment the following for string stats if MurmurHash3 available - val cs = makeCharStrings - report("Java String hash for strings", { hashCharStrings(cs, defaultHashString); HashHist.resultAndReset }) - report("MurmurHash3 for strings", { hashCharStrings(cs, murmurHashString); HashHist.resultAndReset }) - HashHist.enabled = false - reportSpeed(3, List( - ("Java string hash", () => findSpeed[String](30, (x, y) => hashCharStrings(x, y), cs, defaultHashString)), - ("MurmurHash3 string hash", () => findSpeed[String](30, (x, y) => hashCharStrings(x, y), cs, murmurHashString)))) - // reportSpeed("Java string hash",30,hashCharStrings.tupled,cs,defaultHashString) - // reportSpeed("MurmurHash3 string hash",30,hashCharStrings.tupled,cs,murmurHashString) - HashHist.enabled = true - report("lists of binary int lists", { hashBinaryLists(bl, defaultHashList); HashHist.resultAndReset }) - report("small integer sets", { hashIntSets(is, defaultHashSets); HashHist.resultAndReset }) - report("small nested tuples", { hashNestedTuples(nt, defaultHashTuples); HashHist.resultAndReset }) - HashHist.enabled = false - reportSpeed(3, List( - ("lists of lists of binary ints", () => findSpeed(20, hashBinaryLists, bl, defaultHashList)), - ("small integer sets", () => findSpeed(10, hashIntSets, is, defaultHashSets)), - ("small nested tuples", () => findSpeed(5, hashNestedTuples, nt, defaultHashTuples)))) - } -} diff --git a/test/disabled/coder/Coder.scala b/test/disabled/coder/Coder.scala index 62b99e0cf0..b116a41a5d 100644 --- a/test/disabled/coder/Coder.scala +++ b/test/disabled/coder/Coder.scala @@ -168,7 +168,7 @@ object Test { /* */ def main(args : Array[String]) { - // import scala.concurrent.forkjoin.ForkJoinPool + // import java.util.concurrent.ForkJoinPool // collection.parallel.tasksupport.environment match { // case fj: ForkJoinPool => fj.setParallelism(1) // } diff --git a/test/files/jvm/future-spec.check b/test/files/jvm/future-spec.check index 5c80aa5586..50c5d446af 100644 --- a/test/files/jvm/future-spec.check +++ b/test/files/jvm/future-spec.check @@ -1 +1 @@ -warning: there were 21 deprecation warnings; re-run with -deprecation for details +warning: there were 20 deprecation warnings; re-run with -deprecation for details diff --git a/test/files/jvm/future-spec/FutureTests.scala b/test/files/jvm/future-spec/FutureTests.scala index 6b34d5bfaa..abcf1b4cbc 100644 --- a/test/files/jvm/future-spec/FutureTests.scala +++ b/test/files/jvm/future-spec/FutureTests.scala @@ -37,7 +37,7 @@ class FutureTests extends MinimalScalaTest { "A future with custom ExecutionContext" should { "shouldHandleThrowables" in { val ms = new mutable.HashSet[Throwable] with mutable.SynchronizedSet[Throwable] - implicit val ec = scala.concurrent.ExecutionContext.fromExecutor(new scala.concurrent.forkjoin.ForkJoinPool(), { + implicit val ec = scala.concurrent.ExecutionContext.fromExecutor(new java.util.concurrent.ForkJoinPool(), { t => ms += t }) diff --git a/test/files/jvm/scala-concurrent-tck.check b/test/files/jvm/scala-concurrent-tck.check index bbe73c9982..9aef07d1e5 100644 --- a/test/files/jvm/scala-concurrent-tck.check +++ b/test/files/jvm/scala-concurrent-tck.check @@ -1 +1 @@ -warning: there were 74 deprecation warnings; re-run with -deprecation for details +warning: there were 73 deprecation warnings; re-run with -deprecation for details diff --git a/test/files/jvm/scala-concurrent-tck.scala b/test/files/jvm/scala-concurrent-tck.scala index ba405e97bd..8069028cf5 100644 --- a/test/files/jvm/scala-concurrent-tck.scala +++ b/test/files/jvm/scala-concurrent-tck.scala @@ -629,7 +629,7 @@ trait BlockContexts extends TestBase { // test BlockContext in our default ExecutionContext def testDefaultFJP(): Unit = { val bc = getBlockContext(BlockContext.current) - assert(bc.isInstanceOf[scala.concurrent.forkjoin.ForkJoinWorkerThread]) + assert(bc.isInstanceOf[java.util.concurrent.ForkJoinWorkerThread]) } // test BlockContext inside BlockContext.withBlockContext diff --git a/test/files/jvm/t7146.check b/test/files/jvm/t7146.check index 7c76040205..b2c6e444f7 100644 --- a/test/files/jvm/t7146.check +++ b/test/files/jvm/t7146.check @@ -1,5 +1,4 @@ -should be scala.concurrent.impl.ExecutionContextImpl == true -should be scala.concurrent.forkjoin.ForkJoinPool == true +ExecutionContext.global is a scala.concurrent.impl.ExecutionContextImpl. should have non-null UncaughtExceptionHandler == true -should be a scala.concurrent.impl.ExecutionContextImpl UncaughtExceptionHandler == true -should just print out on uncaught == true +ExecutionContext.global.executor.getUncaughtExceptionHandler is a scala.concurrent.impl.ExecutionContextImpl. +should just print out on uncaught: true diff --git a/test/files/jvm/t7146.scala b/test/files/jvm/t7146.scala index ea734472d5..89030730a9 100644 --- a/test/files/jvm/t7146.scala +++ b/test/files/jvm/t7146.scala @@ -5,21 +5,21 @@ import scala.concurrent._ import scala.util.control.NoStackTrace object Test { - def main(args: Array[String]) { - println("should be scala.concurrent.impl.ExecutionContextImpl == " + - ExecutionContext.global.toString.startsWith("scala.concurrent.impl.ExecutionContextImpl")) - val i = ExecutionContext.global.asInstanceOf[{ def executor: Executor }] - println("should be scala.concurrent.forkjoin.ForkJoinPool == " + - (i.executor.getClass.getSuperclass.getName == "scala.concurrent.forkjoin.ForkJoinPool")) - val u = i.executor. + def main(args: Array[String]): Unit = { + val ec = ExecutionContext.global.toString + if (ec startsWith "scala.concurrent.impl.ExecutionContextImpl") + println("ExecutionContext.global is a scala.concurrent.impl.ExecutionContextImpl.") + else println(s"!! ExecutionContext.global == $ec") + + val u = ExecutionContext.global.asInstanceOf[{ def executor: Executor }].executor. asInstanceOf[{ def getUncaughtExceptionHandler: Thread.UncaughtExceptionHandler }]. getUncaughtExceptionHandler - println("should have non-null UncaughtExceptionHandler == " + (u ne null)) - println("should be a scala.concurrent.impl.ExecutionContextImpl UncaughtExceptionHandler == " + - u.toString.startsWith("scala.concurrent.impl.ExecutionContextImpl")) - print("should just print out on uncaught == ") - u.uncaughtException(Thread.currentThread, new Throwable { - override def printStackTrace() { println("true") } - }) + println(s"should have non-null UncaughtExceptionHandler == ${u ne null}") + if (u.toString startsWith "scala.concurrent.impl.ExecutionContextImpl") + println("ExecutionContext.global.executor.getUncaughtExceptionHandler is a scala.concurrent.impl.ExecutionContextImpl.") + else println(s"!! ExecutionContext.global.executor.getUncaughtExceptionHandler == $u") + + print("should just print out on uncaught: ") + u.uncaughtException(Thread.currentThread, new Throwable { override def printStackTrace() { println("true") } }) } } |