diff options
253 files changed, 1139 insertions, 76704 deletions
diff --git a/.travis.yml b/.travis.yml index 6a7ac45e3d..236e002a5e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,6 @@ +# opt-in to Travis's newer/faster container-based infrastructure +sudo: false + # this builds the spec using jekyll # based on http://www.paperplanes.de/2013/8/13/deploying-your-jekyll-blog-to-s3-with-travis-ci.html language: ruby @@ -17,4 +20,4 @@ after_success: - openssl aes-256-cbc -pass "pass:$PRIV_KEY_SECRET" -in spec/id_dsa_travis.enc -out spec/id_dsa_travis -d -a - chmod 600 spec/id_dsa_travis - eval "$(ssh-agent)" - - '[ "${TRAVIS_PULL_REQUEST}" = "false" ] && ssh-add -D && ssh-add spec/id_dsa_travis && rsync -e "ssh -o StrictHostKeyChecking=no" -rzv build/spec/ scalatest@chara.epfl.ch:/home/linuxsoft/archives/scala/spec/2.11/'
\ No newline at end of file + - '[ "${TRAVIS_PULL_REQUEST}" = "false" ] && ssh-add -D && ssh-add spec/id_dsa_travis && rsync -e "ssh -o StrictHostKeyChecking=no" -rzv build/spec/ scalatest@chara.epfl.ch:/home/linuxsoft/archives/scala/spec/2.11/' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 54334aea48..e6557d78dd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -38,18 +38,93 @@ Please make sure the JIRA ticket's fix version corresponds to the upcoming miles #### Enhancement or New Feature -For longer-running development, likely required for this category of code contributions, we suggest you include "topic" or "wip" in your branch name, to indicate that this is work in progress, and that others should be prepared to rebase if they branch off your branch. +For longer-running development, likely required for this category of code contributions, we suggest you include "topic/" or "wip/" in your branch name, to indicate that this is work in progress, and that others should be prepared to rebase if they branch off your branch. Any language change (including bug fixes) must be accompanied by the relevant updates to the spec, which lives in the same repository for this reason. A new language feature requires a SIP (Scala Improvement Process) proposal. For more details on submitting SIPs, see [how to submit a SIP](http://docs.scala-lang.org/sips/sip-submission.html). -#### Summary +## Guidelines -1. We require regression tests for bug fixes. New features and enhancements must be supported by a respectable test suite. -2. Documentation. Yep! Also required :-) -3. Please follow these standard code standards, though in moderation (scouts quickly learn to let sleeping dogs lie): - - Not violate [DRY](http://programmer.97things.oreilly.com/wiki/index.php/Don%27t_Repeat_Yourself). - - [Boy Scout Rule](http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule) should be applied. +Here is some advice on how to craft a pull request with the best possible +chance of being accepted. -Please also have a look at our [Pull Request Policy](https://github.com/scala/scala/wiki/Pull-Request-Policy), as well as the [Scala Hacker Guide](http://www.scala-lang.org/contribute/hacker-guide.html) by @xeno-by. +### Tests + +Bug fixes should include regression tests -- in the same commit as the fix. + +If testing isn't feasible, the commit message should explain why. + +New features and enhancements must be supported by a respectable test suite. + +Some characteristics of good tests: + +* includes comments: what is being tested and why? +* be minimal, deterministic, stable (unaffected by irrelevant changes), easy to understand and review +* have minimal dependencies: a compiler bug test should not depend on, e.g., the Scala library + +### Documentation + +This is of course required for new features and enhancements. + +Any API additions should include Scaladoc. + +Consider updating the package-level doc (in the package object), if appropriate. + +### Coding standards + +Please follow these standard code standards, though in moderation (scouts quickly learn to let sleeping dogs lie): + +* Don't violate [DRY](http://programmer.97things.oreilly.com/wiki/index.php/Don%27t_Repeat_Yourself). +* Follow the [Boy Scout Rule](http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule). + +Please also have a look at the [Scala Hacker Guide](http://www.scala-lang.org/contribute/hacker-guide.html) by @xeno-by. + +### Clean commits, clean history + +A pull request should consist of commits with messages that clearly state what problem the commit resolves and how. + +Commit logs should be stated in the active, present tense. + +A commit's subject should be 60 characters or less. Overall, think of +the first line of the commit as a description of the action performed +by the commit on the code base, so use the active voice and the +present tense. That also makes the commit subjects easy to reuse in +release notes. + +For a bugfix, the title must look like "SI-NNNN - don't crash when +moon is in wrong phase". + +If a commit purely refactors and is not intended to change behaviour, +say so. + +Backports should be tagged as "[backport]". + +When working on maintenance branches (e.g., 2.11.x), include "[nomerge]" +if this commit should not be merged forward into the next release +branch. + +Here is standard advice on good commit messages: +http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html + +### Pass Scabot + +Our pull request bot, Scabot, automatically builds all the commits in a PR individually. (All, so we can `git bisect` later.) + +Click on the little x next to a commit sha to go to the overview of the PR validation job. To diagnose a failure, consult the console output of the job that failed. + +See the [scala-jenkins-infra repo](https://github.com/scala/scala-jenkins-infra) and [Scabot repo](https://github.com/) for full details on PR validation. One tip you should know is that commenting `/rebuild` on a PR asks validation to be run again on the same commits. This is only necessary when a spurious failure occurred. + +### Pass code review + +Your PR will need to be assigned to one or more reviewers. You can suggest reviewers yourself; if you're not sure, see the list in [README.md](README.md) or ask on scala-internals. + +To assign a reviewer, add a "review by @reviewer" to your PR description. + +NOTE: it's best not to @mention in commit messages, as github pings you every time a commit with your @name on it shuffles through the system (even in other repos, on merges,...). + +A reviewer gives the green light by commenting "LGTM" (looks good to me). + +A review feedback may be addressed by pushing new commits to the request, if these commits stand on their own. + +Once all these conditions are met, and we agree with the change (we are available on scala-internals to discuss this beforehand, before you put in the coding work!), we will merge your changes. @@ -4,4 +4,4 @@ source "https://rubygems.org" gem "jekyll", "2.5.3" gem "rouge" # gem 's3_website' -gem "redcarpet", "3.2.3" +gem "redcarpet", "3.3.2" @@ -13,18 +13,20 @@ If you need some help with your PR at any time, please feel free to @-mention an | username | talk to me about... | --------------------------------------------------------------------------------------------------|----------------------------------------------------------------|---------------------------------------------------| - <img src="https://avatars.githubusercontent.com/adriaanm" height="50px" title="Adriaan Moors"/> | [`@adriaanm`](https://github.com/adriaanm) | how we can help // type checker, pattern matcher, infrastructure | - <img src="https://avatars.githubusercontent.com/SethTisue" height="50px" title="Seth Tisue"/> | [`@SethTisue`](https://github.com/SethTisue) | back-end, library, improving the *welcome to Scala* experience | - <img src="https://avatars.githubusercontent.com/retronym" height="50px" title="Jason Zaugg"/> | [`@retronym`](https://github.com/retronym) | Java 8 lambdas, tricky bug detective work | - <img src="https://avatars.githubusercontent.com/Ichoran" height="50px" title="Rex Kerr"/> | [`@Ichoran`](https://github.com/Ichoran) | the collections library, performance | + <img src="https://avatars.githubusercontent.com/adriaanm" height="50px" title="Adriaan Moors"/> | [`@adriaanm`](https://github.com/adriaanm) | type checker, pattern matcher, infrastructure, language spec | + <img src="https://avatars.githubusercontent.com/SethTisue" height="50px" title="Seth Tisue"/> | [`@SethTisue`](https://github.com/SethTisue) | back-end, library, the welcome-to-Scala experience, build | + <img src="https://avatars.githubusercontent.com/retronym" height="50px" title="Jason Zaugg"/> | [`@retronym`](https://github.com/retronym) | compiler performance, weird compiler bugs, Java 8 lambdas, REPL | + <img src="https://avatars.githubusercontent.com/Ichoran" height="50px" title="Rex Kerr"/> | [`@Ichoran`](https://github.com/Ichoran) | collections library, performance | <img src="https://avatars.githubusercontent.com/lrytz" height="50px" title="Lukas Rytz"/> | [`@lrytz`](https://github.com/lrytz) | optimizer, named & default arguments | - <img src="https://avatars.githubusercontent.com/VladUreche" height="50px" title="Vlad Ureche"/> | [`@VladUreche`](https://github.com/VladUreche) | specialization & the scaladoc tool | + <img src="https://avatars.githubusercontent.com/VladUreche" height="50px" title="Vlad Ureche"/> | [`@VladUreche`](https://github.com/VladUreche) | specialization, Scaladoc tool | <img src="https://avatars.githubusercontent.com/densh" height="50px" title="Denys Shabalin"/> | [`@densh`](https://github.com/densh) | quasiquotes, parser, string interpolators, macros in standard library | <img src="https://avatars.githubusercontent.com/xeno-by" height="50px" title="Eugene Burmako"/> | [`@xeno-by`](https://github.com/xeno-by) | macros and reflection | - <img src="https://avatars.githubusercontent.com/dickwall" height="50px" title="Dick Wall"/> | [`@dickwall`](https://github.com/dickwall) | process & community | + <img src="https://avatars.githubusercontent.com/heathermiller" height="50px" title="Heather Miller"/> | [`@heathermiller`](https://github.com/heathermiller) | documentation | + <img src="https://avatars.githubusercontent.com/dickwall" height="50px" title="Dick Wall"/> | [`@dickwall`](https://github.com/dickwall) | process & community, documentation | + <img src="https://avatars.githubusercontent.com/dragos" height="50px" title="Iulian Dragos"/> | [`@dragos`](https://github.com/dragos) | specialization, back end | + <img src="https://avatars.githubusercontent.com/axel22" height="50px" title="Aleksandr Prokopec"/> | [`@axel22`](https://github.com/axel22) | collections, concurrency, specialization | - -PS: If you have some spare time to help out around here, we would be delighted to add your name to this list! +P.S.: If you have some spare time to help out around here, we would be delighted to add your name to this list! # Handy Links - [A wealth of documentation](http://docs.scala-lang.org) @@ -151,14 +153,14 @@ to build the compiler. You can run `sbt test` to run unit (JUnit) tests. Use `sbt test/it:test` to run integration (partest) tests. We would like to migrate to sbt build as quickly as possible. If you would -like to help please contact scala-internals@ mailing list to discuss your +like to help please use the scala-internals mailing list to discuss your ideas and coordinate your effort with others. ### Tips and tricks Here are some common commands. Most ant targets offer a `-opt` variant that runs under `-optimise` (CI runs the -optimize variant). - - `./pull-binary-libs.sh` [downloads](http://typesafe.artifactoryonline.com/typesafe) all binary artifacts associated with this commit. + - `./pull-binary-libs.sh` downloads all binary artifacts associated with this commit. - `ant -p` prints out information about the commonly used ant targets. - `ant` or `ant build`: A quick compilation (to build/quick) of your changes using the locker compiler. 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> @@ -131,7 +131,7 @@ lazy val setJarLocation: Setting[_] = lazy val scalaSubprojectSettings: Seq[Setting[_]] = commonSettings :+ setJarLocation lazy val generatePropertiesFileSettings = Seq[Setting[_]]( - copyrightString := "Copyright 2002-2013, LAMP/EPFL", + copyrightString := "Copyright 2002-2015, LAMP/EPFL", resourceGenerators in Compile += generateVersionPropertiesFile.map(file => Seq(file)).taskValue, generateVersionPropertiesFile := generateVersionPropertiesFileImpl.value ) @@ -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"/> @@ -184,7 +183,7 @@ TODO: <property name="dists.dir" value="${basedir}/dists"/> - <property name="copyright.string" value="Copyright 2002-2013, LAMP/EPFL"/> + <property name="copyright.string" value="Copyright 2002-2015, LAMP/EPFL"/> <!-- These are NOT the flags used to run SuperSabbus, but the ones written into the script runners created with scala.tools.ant.ScalaTool --> @@ -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> @@ -769,7 +763,7 @@ TODO: </path> <path id="quick.bin.tool.path"> - <path refid="quick.repl.build.path"/> + <path refid="quick.repl-jline.build.path"/> <pathelement location="${build-quick.dir}/classes/scalap"/> <pathelement location="${build-quick.dir}/classes/scaladoc"/> <path refid="external-modules-nocore"/> @@ -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"> @@ -1114,7 +1102,7 @@ TODO: </target> <target name="quick.scaladoc" depends="quick.comp"> - <staged-build with="locker" stage="quick" project="scaladoc" version="scaladoc"/> </target> + <staged-build with="locker" stage="quick" project="scaladoc"/> </target> <target name="quick.interactive" depends="quick.comp, quick.scaladoc"> <staged-build with="locker" stage="quick" project="interactive"/> </target> @@ -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..f38bf4c519 100644 --- a/doc/LICENSE.md +++ b/doc/LICENSE.md @@ -2,9 +2,9 @@ Scala is licensed under the [BSD 3-Clause License](http://opensource.org/license ## Scala License -Copyright (c) 2002-2013 EPFL +Copyright (c) 2002-2015 EPFL -Copyright (c) 2011-2013 Typesafe, Inc. +Copyright (c) 2011-2015 Typesafe, Inc. All rights reserved. @@ -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..35ff645feb 100644 --- a/doc/License.rtf +++ b/doc/License.rtf @@ -10,8 +10,8 @@ \fs48 Scala License \fs40 \ -\fs26 Copyright (c) 2002-2013 EPFL\ -Copyright (c) 2011-2013 Typesafe, Inc.\ +\fs26 Copyright (c) 2002-2015 EPFL\ +Copyright (c) 2011-2015 Typesafe, Inc.\ All rights reserved.\ \ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ @@ -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/scripts/jobs/integrate/bootstrap b/scripts/jobs/integrate/bootstrap index c6935df936..706a20daf4 100755 --- a/scripts/jobs/integrate/bootstrap +++ b/scripts/jobs/integrate/bootstrap @@ -217,8 +217,7 @@ buildXML() { then echo "Found scala-xml $XML_VER; not building." else update scala scala-xml "$XML_REF" && gfxd - # TODO: compile under 2.12 source level once `scala.xml.XMLTest.escape` is fixed (see #4451) - sbtBuild 'set scalacOptions += "-Xsource:2.11"' 'set version := "'$XML_VER'-DOC"' $clean doc 'set version := "'$XML_VER'"' test "${buildTasks[@]}" + sbtBuild 'set version := "'$XML_VER'-DOC"' $clean doc 'set version := "'$XML_VER'"' test "${buildTasks[@]}" XML_BUILT="yes" # ensure the module is built and published when buildXML is invoked for the second time, see comment above fi } diff --git a/spec/README.md b/spec/README.md index 2f582dec5c..1a201fc97c 100644 --- a/spec/README.md +++ b/spec/README.md @@ -8,7 +8,7 @@ Third, we'd like to support different output formats. An html page per chapter w ## Editing -We use redcarpet 3.1 and jekyll 2 to generate the html. Essentially, this is what github pages use. +We use Jekyll 2 and [Redcarpet](https://github.com/vmg/redcarpet) to generate the html. Essentially, this is what github pages use. ## Building diff --git a/spec/_config.yml b/spec/_config.yml index 1052ddedb0..74ec602f8f 100644 --- a/spec/_config.yml +++ b/spec/_config.yml @@ -6,5 +6,3 @@ markdown: redcarpet encoding: utf-8 redcarpet: extensions: ["no_intra_emphasis", "fenced_code_blocks", "autolink", "tables", "with_toc_data", "strikethrough", "lax_spacing", "space_after_headers", "superscript", "footnotes"] -# with_toc_data requires redcarpet 3.1 to get -# pretty ID attributes for Hn headers (https://github.com/vmg/redcarpet/pull/186) 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/compiler/scala/tools/ant/Scalac.scala b/src/compiler/scala/tools/ant/Scalac.scala index 13bf0ef4c6..f46f014096 100644 --- a/src/compiler/scala/tools/ant/Scalac.scala +++ b/src/compiler/scala/tools/ant/Scalac.scala @@ -131,7 +131,7 @@ class Scalac extends ScalaMatchingTask with ScalacShared { /** The character encoding of the files to compile. */ protected var encoding: Option[String] = None - // the targetted backend + // the targeted backend protected var backend: Option[String] = None /** Whether to force compilation of all files or not. */ diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BCodeAsmCommon.scala b/src/compiler/scala/tools/nsc/backend/jvm/BCodeAsmCommon.scala index dec5adc9aa..93f5159f89 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/BCodeAsmCommon.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/BCodeAsmCommon.scala @@ -256,14 +256,17 @@ final class BCodeAsmCommon[G <: Global](val global: G) { if (hasAbstractMethod) ACC_ABSTRACT else 0 } GenBCode.mkFlags( - if (classSym.isPublic) ACC_PUBLIC else 0, - if (classSym.isFinal) ACC_FINAL else 0, + // SI-9393: the classfile / java source parser make java annotation symbols look like classes. + // here we recover the actual classfile flags. + if (classSym.hasJavaAnnotationFlag) ACC_ANNOTATION | ACC_INTERFACE | ACC_ABSTRACT else 0, + if (classSym.isPublic) ACC_PUBLIC else 0, + if (classSym.isFinal) ACC_FINAL else 0, // see the link above. javac does the same: ACC_SUPER for all classes, but not interfaces. - if (classSym.isInterface) ACC_INTERFACE else ACC_SUPER, + if (classSym.isInterface) ACC_INTERFACE else ACC_SUPER, // for Java enums, we cannot trust `hasAbstractFlag` (see comment in enumFlags) - if (!classSym.hasEnumFlag && classSym.hasAbstractFlag) ACC_ABSTRACT else 0, - if (classSym.isArtifact) ACC_SYNTHETIC else 0, - if (classSym.hasEnumFlag) enumFlags else 0 + if (!classSym.hasJavaEnumFlag && classSym.hasAbstractFlag) ACC_ABSTRACT else 0, + if (classSym.isArtifact) ACC_SYNTHETIC else 0, + if (classSym.hasJavaEnumFlag) enumFlags else 0 ) } @@ -289,7 +292,7 @@ final class BCodeAsmCommon[G <: Global](val global: G) { lazy val AnnotationRetentionPolicyRuntimeValue = AnnotationRetentionPolicyModule.tpe.member(TermName("RUNTIME")) /** Whether an annotation should be emitted as a Java annotation - * .initialize: if 'annot' is read from pickle, atp might be un-initialized + * .initialize: if 'annot' is read from pickle, atp might be uninitialized */ def shouldEmitAnnotation(annot: AnnotationInfo) = { annot.symbol.initialize.isJavaDefined && @@ -310,10 +313,10 @@ final class BCodeAsmCommon[G <: Global](val global: G) { } private def retentionPolicyOf(annot: AnnotationInfo): Symbol = - annot.atp.typeSymbol.getAnnotation(AnnotationRetentionAttr).map(_.assocs).map(assoc => + annot.atp.typeSymbol.getAnnotation(AnnotationRetentionAttr).map(_.assocs).flatMap(assoc => assoc.collectFirst { case (`nme`.value, LiteralAnnotArg(Constant(value: Symbol))) => value - }).flatten.getOrElse(AnnotationRetentionPolicyClassValue) + }).getOrElse(AnnotationRetentionPolicyClassValue) def implementedInterfaces(classSym: Symbol): List[Symbol] = { // Additional interface parents based on annotations and other cues @@ -322,9 +325,18 @@ final class BCodeAsmCommon[G <: Global](val global: G) { case _ => None } - def isInterfaceOrTrait(sym: Symbol) = sym.isInterface || sym.isTrait + // SI-9393: java annotations are interfaces, but the classfile / java source parsers make them look like classes. + def isInterfaceOrTrait(sym: Symbol) = sym.isInterface || sym.isTrait || sym.hasJavaAnnotationFlag - val allParents = classSym.info.parents ++ classSym.annotations.flatMap(newParentForAnnotation) + val classParents = { + val parents = classSym.info.parents + // SI-9393: the classfile / java source parsers add Annotation and ClassfileAnnotation to the + // parents of a java annotations. undo this for the backend (where we need classfile-level information). + if (classSym.hasJavaAnnotationFlag) parents.filterNot(c => c.typeSymbol == ClassfileAnnotationClass || c.typeSymbol == AnnotationClass) + else parents + } + + val allParents = classParents ++ classSym.annotations.flatMap(newParentForAnnotation) // We keep the superClass when computing minimizeParents to eliminate more interfaces. // Example: T can be eliminated from D diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BCodeSkelBuilder.scala b/src/compiler/scala/tools/nsc/backend/jvm/BCodeSkelBuilder.scala index d2d510e8a9..a9b6a312e9 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/BCodeSkelBuilder.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/BCodeSkelBuilder.scala @@ -153,9 +153,9 @@ abstract class BCodeSkelBuilder extends BCodeHelpers { */ private def initJClass(jclass: asm.ClassVisitor) { - val ps = claszSymbol.info.parents - val superClass: String = if (ps.isEmpty) ObjectReference.internalName else internalName(ps.head.typeSymbol) - val interfaceNames = classBTypeFromSymbol(claszSymbol).info.get.interfaces map { + val bType = classBTypeFromSymbol(claszSymbol) + val superClass = bType.info.get.superClass.getOrElse(ObjectReference).internalName + val interfaceNames = bType.info.get.interfaces map { case classBType => if (classBType.isNestedClass.get) { innerClassBufferASM += classBType } classBType.internalName @@ -443,7 +443,7 @@ abstract class BCodeSkelBuilder extends BCodeHelpers { * which rethrows the caught exception once it's done with the cleanup code. * * A particular cleanup may in general contain LabelDefs. Care is needed when duplicating such jump-targets, - * so as to preserve agreement wit the (also duplicated) jump-sources. + * so as to preserve agreement with the (also duplicated) jump-sources. * This is achieved based on the bookkeeping provided by two maps: * - `labelDefsAtOrUnder` lists all LabelDefs enclosed by a given Tree node (the key) * - `labelDef` provides the LabelDef node whose symbol is used as key. diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BTypes.scala b/src/compiler/scala/tools/nsc/backend/jvm/BTypes.scala index 9bae63f1fc..8720da84e8 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/BTypes.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/BTypes.scala @@ -841,17 +841,16 @@ abstract class BTypes { assert(!ClassBType.isInternalPhantomType(internalName), s"Cannot create ClassBType for phantom type $this") - // TODO bring these back in a way that doesn't trip pos/t9393 - // assert( - // if (info.get.superClass.isEmpty) { isJLO(this) || (isCompilingPrimitive && ClassBType.hasNoSuper(internalName)) } - // else if (isInterface.get) isJLO(info.get.superClass.get) - // else !isJLO(this) && ifInit(info.get.superClass.get)(!_.isInterface.get), - // s"Invalid superClass in $this: ${info.get.superClass}" - // ) - // assert( - // info.get.interfaces.forall(c => ifInit(c)(_.isInterface.get)), - // s"Invalid interfaces in $this: ${info.get.interfaces}" - // ) + assert( + if (info.get.superClass.isEmpty) { isJLO(this) || (isCompilingPrimitive && ClassBType.hasNoSuper(internalName)) } + else if (isInterface.get) isJLO(info.get.superClass.get) + else !isJLO(this) && ifInit(info.get.superClass.get)(!_.isInterface.get), + s"Invalid superClass in $this: ${info.get.superClass}" + ) + assert( + info.get.interfaces.forall(c => ifInit(c)(_.isInterface.get)), + s"Invalid interfaces in $this: ${info.get.interfaces}" + ) assert(info.get.nestedClasses.forall(c => ifInit(c)(_.isNestedClass.get)), info.get.nestedClasses) } diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala b/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala index 9b4451d492..45d9cc3ff3 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala @@ -216,7 +216,18 @@ class BTypesFromSymbols[G <: Global](val global: G) extends BTypes { } private def setClassInfo(classSym: Symbol, classBType: ClassBType): ClassBType = { - val superClassSym = if (classSym.isImplClass) ObjectClass else classSym.superClass + // Check for isImplClass: trait implementation classes have NoSymbol as superClass + // Check for hasAnnotationFlag for SI-9393: the classfile / java source parsers add + // scala.annotation.Annotation as superclass to java annotations. In reality, java + // annotation classfiles have superclass Object (like any interface classfile). + val superClassSym = if (classSym.isImplClass || classSym.hasJavaAnnotationFlag) ObjectClass else { + val sc = classSym.superClass + // SI-9393: Java annotation classes don't have the ABSTRACT/INTERFACE flag, so they appear + // (wrongly) as superclasses. Fix this for BTypes: the java annotation will appear as interface + // (handled by method implementedInterfaces), the superclass is set to Object. + if (sc.hasJavaAnnotationFlag) ObjectClass + else sc + } assert( if (classSym == ObjectClass) superClassSym == NoSymbol @@ -567,7 +578,7 @@ class BTypesFromSymbols[G <: Global](val global: G) extends BTypes { if (sym.isBridge) ACC_BRIDGE | ACC_SYNTHETIC else 0, if (sym.isArtifact) ACC_SYNTHETIC else 0, if (sym.isClass && !sym.isInterface) ACC_SUPER else 0, - if (sym.hasEnumFlag) ACC_ENUM else 0, + if (sym.hasJavaEnumFlag) ACC_ENUM else 0, if (sym.isVarargsMethod) ACC_VARARGS else 0, if (sym.hasFlag(symtab.Flags.SYNCHRONIZED)) ACC_SYNCHRONIZED else 0, if (sym.isDeprecated) asm.Opcodes.ACC_DEPRECATED else 0 diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala index ccad50616c..7096f16d75 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala @@ -307,7 +307,7 @@ abstract class GenASM extends SubComponent with BytecodeWriters { self => if (sym.isBridge) ACC_BRIDGE | ACC_SYNTHETIC else 0, if (sym.isArtifact) ACC_SYNTHETIC else 0, if (sym.isClass && !sym.isInterface) ACC_SUPER else 0, - if (sym.hasEnumFlag) ACC_ENUM else 0, + if (sym.hasJavaEnumFlag) ACC_ENUM else 0, if (sym.isVarargsMethod) ACC_VARARGS else 0, if (sym.hasFlag(Flags.SYNCHRONIZED)) ACC_SYNCHRONIZED else 0 ) @@ -3028,7 +3028,7 @@ abstract class GenASM extends SubComponent with BytecodeWriters { self => * * Rationale for this normalization: * test/files/run/private-inline.scala after -optimize is chock full of - * BasicBlocks containing just JUMP(whereTo), where no exception handler straddles them. + * BasicBlocks containing just JUMP(whereto), where no exception handler straddles them. * They should be collapsed by IMethod.normalize() but aren't. * That was fine in FJBG times when by the time the exception table was emitted, * it already contained "anchored" labels (ie instruction offsets were known) diff --git a/src/compiler/scala/tools/nsc/backend/jvm/opt/LocalOpt.scala b/src/compiler/scala/tools/nsc/backend/jvm/opt/LocalOpt.scala index bd5bab28b5..4132710a96 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/opt/LocalOpt.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/opt/LocalOpt.scala @@ -31,7 +31,7 @@ import scala.tools.nsc.backend.jvm.opt.BytecodeUtils._ * catch block, and the recursive invocation is not necessary. * * simplify jumps - * - various simplifications, see doc domments of individual optimizations + * - various simplifications, see doc comments of individual optimizations * + changing or eliminating jumps may render some code unreachable, therefore "simplify jumps" is * executed in a loop with "unreachable code" * @@ -495,7 +495,7 @@ object LocalOptImpls { * Replace jumps to a sequence of GOTO instructions by a jump to the final destination. * * Jump l; [any ops]; l: GOTO m; [any ops]; m: GOTO n; [any ops]; n: NotGOTO; [...] - * => Jump n; [rest unchaned] + * => Jump n; [rest unchanged] * * If there's a loop of GOTOs, the initial jump is replaced by one of the labels in the loop. */ diff --git a/src/compiler/scala/tools/nsc/backend/opt/ConstantOptimization.scala b/src/compiler/scala/tools/nsc/backend/opt/ConstantOptimization.scala index 0e6ee76eb2..fb1799e092 100644 --- a/src/compiler/scala/tools/nsc/backend/opt/ConstantOptimization.scala +++ b/src/compiler/scala/tools/nsc/backend/opt/ConstantOptimization.scala @@ -170,9 +170,11 @@ abstract class ConstantOptimization extends SubComponent { // out all the possibilities case Impossible(possible2) => (possible -- possible2).nonEmpty }) - def mightNotEqual(other: Contents): Boolean = (this ne other) && (other match { - // two Possibles might not be equal if either has possible members that the other doesn't - case Possible(possible2) => (possible -- possible2).nonEmpty || (possible2 -- possible).nonEmpty + def mightNotEqual(other: Contents): Boolean = (other match { + case Possible(possible2) => + // two Possibles must equal if each is known to be of the same, single value + val mustEqual = possible.size == 1 && possible == possible2 + !mustEqual case Impossible(_) => true }) } diff --git a/src/compiler/scala/tools/nsc/backend/opt/InlineExceptionHandlers.scala b/src/compiler/scala/tools/nsc/backend/opt/InlineExceptionHandlers.scala index 425c10d153..9f6883f03f 100644 --- a/src/compiler/scala/tools/nsc/backend/opt/InlineExceptionHandlers.scala +++ b/src/compiler/scala/tools/nsc/backend/opt/InlineExceptionHandlers.scala @@ -343,7 +343,7 @@ abstract class InlineExceptionHandlers extends SubComponent { /** * This function takes care of duplicating the basic block code for inlining the handler * - * Note: This function does not duplicate the same basic block twice. It wil contain a map of the duplicated + * Note: This function does not duplicate the same basic block twice. It will contain a map of the duplicated * basic blocks */ private def duplicateExceptionHandlerCache(handler: BasicBlock) = diff --git a/src/compiler/scala/tools/nsc/javac/JavaParsers.scala b/src/compiler/scala/tools/nsc/javac/JavaParsers.scala index 03f0236734..eb25eb6e06 100644 --- a/src/compiler/scala/tools/nsc/javac/JavaParsers.scala +++ b/src/compiler/scala/tools/nsc/javac/JavaParsers.scala @@ -370,7 +370,7 @@ trait JavaParsers extends ast.parser.ParsersCommon with JavaScanners { flags |= Flags.FINAL in.nextToken() case DEFAULT => - flags |= Flags.DEFAULTMETHOD + flags |= Flags.JAVA_DEFAULTMETHOD in.nextToken() case NATIVE => addAnnot(NativeAttr) @@ -489,7 +489,7 @@ trait JavaParsers extends ast.parser.ParsersCommon with JavaScanners { val vparams = formalParams() if (!isVoid) rtpt = optArrayBrackets(rtpt) optThrows() - val isConcreteInterfaceMethod = !inInterface || (mods hasFlag Flags.DEFAULTMETHOD) || (mods hasFlag Flags.STATIC) + val isConcreteInterfaceMethod = !inInterface || (mods hasFlag Flags.JAVA_DEFAULTMETHOD) || (mods hasFlag Flags.STATIC) val bodyOk = !(mods1 hasFlag Flags.DEFERRED) && isConcreteInterfaceMethod val body = if (bodyOk && in.token == LBRACE) { @@ -751,7 +751,7 @@ trait JavaParsers extends ast.parser.ParsersCommon with JavaScanners { val (statics, body) = typeBody(AT, name) val templ = makeTemplate(annotationParents, body) addCompanionObject(statics, atPos(pos) { - ClassDef(mods, name, List(), templ) + ClassDef(mods | Flags.JAVA_ANNOTATION, name, List(), templ) }) } @@ -809,7 +809,7 @@ trait JavaParsers extends ast.parser.ParsersCommon with JavaScanners { if (hasAbstractMember) Flags.ABSTRACT else 0l } addCompanionObject(consts ::: statics ::: predefs, atPos(pos) { - ClassDef(mods | Flags.ENUM | finalFlag | abstractFlag, name, List(), + ClassDef(mods | Flags.JAVA_ENUM | finalFlag | abstractFlag, name, List(), makeTemplate(superclazz :: interfaces, body)) }) } @@ -830,7 +830,7 @@ trait JavaParsers extends ast.parser.ParsersCommon with JavaScanners { skipAhead() accept(RBRACE) } - ValDef(Modifiers(Flags.ENUM | Flags.STABLE | Flags.JAVA | Flags.STATIC), name.toTermName, enumType, blankExpr) + ValDef(Modifiers(Flags.JAVA_ENUM | Flags.STABLE | Flags.JAVA | Flags.STATIC), name.toTermName, enumType, blankExpr) } (res, hasClassBody) } diff --git a/src/compiler/scala/tools/nsc/plugins/Plugin.scala b/src/compiler/scala/tools/nsc/plugins/Plugin.scala index 1a5529140c..dd17750cd4 100644 --- a/src/compiler/scala/tools/nsc/plugins/Plugin.scala +++ b/src/compiler/scala/tools/nsc/plugins/Plugin.scala @@ -158,8 +158,8 @@ object Plugin { def loop(qs: List[Path]): Try[PluginDescription] = qs match { case Nil => Failure(new MissingPluginException(ps)) case p :: rest => - if (p.isDirectory) loadDescriptionFromFile(p.toDirectory / PluginXML) - else if (p.isFile) loadDescriptionFromJar(p.toFile) + if (p.isDirectory) loadDescriptionFromFile(p.toDirectory / PluginXML) orElse loop(rest) + else if (p.isFile) loadDescriptionFromJar(p.toFile) orElse loop(rest) else loop(rest) } loop(ps) diff --git a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala index f15bd3c31c..3422167d02 100644 --- a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala +++ b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala @@ -140,7 +140,7 @@ trait ScalaSettings extends AbsScalaSettings // XML parsing options object XxmlSettings extends MultiChoiceEnumeration { val coalescing = Choice("coalescing", "Convert PCData to Text and coalesce sibling nodes") - def isCoalescing = (Xxml contains coalescing) || (!isScala212 && !Xxml.isSetByUser) + def isCoalescing = Xxml contains coalescing } val Xxml = MultiChoiceSetting( name = "-Xxml", diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala index 91355693ee..99e61d2482 100644 --- a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala +++ b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala @@ -84,6 +84,9 @@ abstract class ClassfileParser { protected final def u2(): Int = in.nextChar.toInt protected final def u4(): Int = in.nextInt + protected final def s1(): Int = in.nextByte.toInt // sign-extend the byte to int + protected final def s2(): Int = (in.nextByte.toInt << 8) | u1 // sign-extend and shift the first byte, or with the unsigned second byte + private def readInnerClassFlags() = readClassFlags() private def readClassFlags() = JavaAccFlags classFlags u2 private def readMethodFlags() = JavaAccFlags methodFlags u2 @@ -862,7 +865,7 @@ abstract class ClassfileParser { srcfile0 = settings.outputDirs.srcFilesFor(in.file, srcpath).find(_.exists) case tpnme.CodeATTR => if (sym.owner.isInterface) { - sym setFlag DEFAULTMETHOD + sym setFlag JAVA_DEFAULTMETHOD log(s"$sym in ${sym.owner} is a java8+ default method.") } in.skip(attrLen) diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala index 438a71061e..b2f5a4119d 100644 --- a/src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala +++ b/src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala @@ -326,8 +326,8 @@ abstract class ICodeReader extends ClassfileParser { case JVM.dconst_0 => code emit CONSTANT(Constant(0.0)) case JVM.dconst_1 => code emit CONSTANT(Constant(1.0)) - case JVM.bipush => code.emit(CONSTANT(Constant(u1))); size += 1 - case JVM.sipush => code.emit(CONSTANT(Constant(u2))); size += 2 + case JVM.bipush => code.emit(CONSTANT(Constant(s1))); size += 1 + case JVM.sipush => code.emit(CONSTANT(Constant(s2))); size += 2 case JVM.ldc => code.emit(CONSTANT(pool.getConstant(u1))); size += 1 case JVM.ldc_w => code.emit(CONSTANT(pool.getConstant(u2))); size += 2 case JVM.ldc2_w => code.emit(CONSTANT(pool.getConstant(u2))); size += 2 @@ -466,7 +466,7 @@ abstract class ICodeReader extends ClassfileParser { size += 2 val local = code.getLocal(u1, INT) code.emit(LOAD_LOCAL(local)) - code.emit(CONSTANT(Constant(u1))) + code.emit(CONSTANT(Constant(s1))) code.emit(CALL_PRIMITIVE(Arithmetic(ADD, INT))) code.emit(STORE_LOCAL(local)) diff --git a/src/compiler/scala/tools/nsc/transform/Constructors.scala b/src/compiler/scala/tools/nsc/transform/Constructors.scala index 86685d46de..7c66bda46b 100644 --- a/src/compiler/scala/tools/nsc/transform/Constructors.scala +++ b/src/compiler/scala/tools/nsc/transform/Constructors.scala @@ -165,11 +165,19 @@ abstract class Constructors extends Statics with Transform with ast.TreeDSL { return } + // Note: elision of outer reference is based on a class-wise analysis, if a class might have subclasses, + // it doesn't work. For example, `LocalParent` retains the outer reference in: + // + // class Outer { def test = {class LocalParent; class LocalChild extends LocalParent } } + // + // See run/t9408.scala for related test cases. + val isEffectivelyFinal = clazz.isEffectivelyFinal def isParamCandidateForElision(sym: Symbol) = (sym.isParamAccessor && sym.isPrivateLocal) - def isOuterCandidateForElision(sym: Symbol) = (sym.isOuterAccessor && sym.owner.isEffectivelyFinal && !sym.isOverridingSymbol) + def isOuterCandidateForElision(sym: Symbol) = (sym.isOuterAccessor && isEffectivelyFinal && !sym.isOverridingSymbol) - val paramCandidatesForElision: Set[ /*Field*/ Symbol] = (clazz.info.decls.toSet filter isParamCandidateForElision) - val outerCandidatesForElision: Set[ /*Method*/ Symbol] = (clazz.info.decls.toSet filter isOuterCandidateForElision) + val decls = clazz.info.decls.toSet + val paramCandidatesForElision: Set[ /*Field*/ Symbol] = (decls filter isParamCandidateForElision) + val outerCandidatesForElision: Set[ /*Method*/ Symbol] = (decls filter isOuterCandidateForElision) omittables ++= paramCandidatesForElision omittables ++= outerCandidatesForElision diff --git a/src/compiler/scala/tools/nsc/transform/LazyVals.scala b/src/compiler/scala/tools/nsc/transform/LazyVals.scala index df622d4d1d..b6695efb0b 100644 --- a/src/compiler/scala/tools/nsc/transform/LazyVals.scala +++ b/src/compiler/scala/tools/nsc/transform/LazyVals.scala @@ -168,7 +168,7 @@ abstract class LazyVals extends Transform with TypingTransformers with ast.TreeD /** Add the bitmap definitions to the rhs of a method definition. * If the rhs has been tail-call transformed, insert the bitmap * definitions inside the top-level label definition, so that each - * iteration has the lazy values un-initialized. Otherwise add them + * iteration has the lazy values uninitialized. Otherwise add them * at the very beginning of the method. */ private def addBitmapDefs(methSym: Symbol, rhs: Tree): Tree = { diff --git a/src/compiler/scala/tools/nsc/transform/Mixin.scala b/src/compiler/scala/tools/nsc/transform/Mixin.scala index 11f9483f77..a079a76ce7 100644 --- a/src/compiler/scala/tools/nsc/transform/Mixin.scala +++ b/src/compiler/scala/tools/nsc/transform/Mixin.scala @@ -79,9 +79,9 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL { /** Does this field require an initialized bit? * Note: fields of classes inheriting DelayedInit are not checked. - * This is because the they are neither initialized in the constructor + * This is because they are neither initialized in the constructor * nor do they have a setter (not if they are vals anyway). The usual - * logic for setting bitmaps does therefor not work for such fields. + * logic for setting bitmaps does therefore not work for such fields. * That's why they are excluded. * Note: The `checkinit` option does not check if transient fields are initialized. */ @@ -1122,7 +1122,7 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL { if (scope exists (_.isLazy)) { val map = mutable.Map[Symbol, Set[Symbol]]() withDefaultValue Set() // check what fields can be nulled for - for ((field, users) <- singleUseFields(templ); lazyFld <- users) + for ((field, users) <- singleUseFields(templ); lazyFld <- users if !lazyFld.accessed.hasAnnotation(TransientAttr)) map(lazyFld) += field map.toMap diff --git a/src/compiler/scala/tools/nsc/transform/UnCurry.scala b/src/compiler/scala/tools/nsc/transform/UnCurry.scala index 65316e4f00..72e2174bf8 100644 --- a/src/compiler/scala/tools/nsc/transform/UnCurry.scala +++ b/src/compiler/scala/tools/nsc/transform/UnCurry.scala @@ -433,7 +433,7 @@ abstract class UnCurry extends InfoTransform val sym = tree.symbol - // true if the taget is a lambda body that's been lifted into a method + // true if the target is a lambda body that's been lifted into a method def isLiftedLambdaBody(target: Tree) = target.symbol.isLocalToBlock && target.symbol.isArtifact && target.symbol.name.containsName(nme.ANON_FUN_NAME) val result = ( diff --git a/src/compiler/scala/tools/nsc/transform/patmat/MatchAnalysis.scala b/src/compiler/scala/tools/nsc/transform/patmat/MatchAnalysis.scala index a11906ace1..00de77a8d4 100644 --- a/src/compiler/scala/tools/nsc/transform/patmat/MatchAnalysis.scala +++ b/src/compiler/scala/tools/nsc/transform/patmat/MatchAnalysis.scala @@ -138,7 +138,7 @@ trait TreeAndTypeAnalysis extends Debugging { if(grouped) { def enumerateChildren(sym: Symbol) = { - sym.children.toList + sym.sealedChildren.toList .sortBy(_.sealedSortName) .filterNot(x => x.isSealed && x.isAbstractClass && !isPrimitiveValueClass(x)) } diff --git a/src/compiler/scala/tools/nsc/transform/patmat/MatchCodeGen.scala b/src/compiler/scala/tools/nsc/transform/patmat/MatchCodeGen.scala index 06b39b035a..1642613b9b 100644 --- a/src/compiler/scala/tools/nsc/transform/patmat/MatchCodeGen.scala +++ b/src/compiler/scala/tools/nsc/transform/patmat/MatchCodeGen.scala @@ -134,7 +134,7 @@ trait MatchCodeGen extends Interface { trait OptimizedCodegen extends CodegenCore with TypedSubstitution with MatchMonadInterface { override def codegen: AbsCodegen = optimizedCodegen - // when we know we're targetting Option, do some inlining the optimizer won't do + // when we know we're targeting Option, do some inlining the optimizer won't do // for example, `o.flatMap(f)` becomes `if(o == None) None else f(o.get)`, similarly for orElse and guard // this is a special instance of the advanced inlining optimization that takes a method call on // an object of a type that only has two concrete subclasses, and inlines both bodies, guarded by an if to distinguish the two cases diff --git a/src/compiler/scala/tools/nsc/transform/patmat/MatchOptimization.scala b/src/compiler/scala/tools/nsc/transform/patmat/MatchOptimization.scala index b3aef8a20e..cca8d2dbb8 100644 --- a/src/compiler/scala/tools/nsc/transform/patmat/MatchOptimization.scala +++ b/src/compiler/scala/tools/nsc/transform/patmat/MatchOptimization.scala @@ -286,8 +286,8 @@ trait MatchOptimization extends MatchTreeMaking with MatchAnalysis { else Apply(Ident(defaultLabel), Nil) val guardedBody = same.foldRight(jumpToDefault){ - // the last case may be un-guarded (we know it's the last one since fold's accum == jumpToDefault) - // --> replace jumpToDefault by the un-guarded case's body + // the last case may be unguarded (we know it's the last one since fold's accum == jumpToDefault) + // --> replace jumpToDefault by the unguarded case's body case (CaseDef(_, EmptyTree, b), `jumpToDefault`) => b case (cd@CaseDef(_, g, b), els) if isGuardedCase(cd) => If(g, b, els) } @@ -322,7 +322,7 @@ trait MatchOptimization extends MatchTreeMaking with MatchAnalysis { var remainingCases = cases val collapsed = scala.collection.mutable.ListBuffer.empty[CaseDef] - // when some of collapsed cases (except for the default case itself) did not include an un-guarded case + // when some of collapsed cases (except for the default case itself) did not include an unguarded case // we'll need to emit a labeldef for the default case var needDefault = false diff --git a/src/compiler/scala/tools/nsc/typechecker/Checkable.scala b/src/compiler/scala/tools/nsc/typechecker/Checkable.scala index fc632e0d0d..8bcd5e6f12 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Checkable.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Checkable.scala @@ -212,8 +212,8 @@ trait Checkable { ) /** Are all children of these symbols pairwise irreconcilable? */ def allChildrenAreIrreconcilable(sym1: Symbol, sym2: Symbol) = ( - sym1.children.toList forall (c1 => - sym2.children.toList forall (c2 => + sym1.sealedChildren.toList forall (c1 => + sym2.sealedChildren.toList forall (c2 => areIrreconcilableAsParents(c1, c2) ) ) diff --git a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala index 4c840818da..2ccf375c45 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala @@ -24,7 +24,8 @@ trait Contexts { self: Analyzer => object NoContext extends Context(EmptyTree, NoSymbol, EmptyScope, NoCompilationUnit, - null) { // We can't pass the uninitialized `this`. Instead, we treat null specially in `Context#outer` + // We can't pass the uninitialized `this`. Instead, we treat null specially in `Context#outer` + null) { enclClass = this enclMethod = this @@ -48,12 +49,11 @@ trait Contexts { self: Analyzer => def ambiguousDefnAndImport(owner: Symbol, imp: ImportInfo) = LookupAmbiguous(s"it is both defined in $owner and imported subsequently by \n$imp") - private lazy val startContext = { - NoContext.make( + private lazy val startContext = NoContext.make( Template(List(), noSelfType, List()) setSymbol global.NoSymbol setType global.NoType, rootMirror.RootClass, - rootMirror.RootClass.info.decls) - } + rootMirror.RootClass.info.decls + ) private lazy val allUsedSelectors = mutable.Map[ImportInfo, Set[ImportSelector]]() withDefaultValue Set() @@ -168,13 +168,13 @@ trait Contexts { self: Analyzer => * fine grained control is needed based on the kind of error; ambiguity errors are often * suppressed during exploratory typing, such as determining whether `a == b` in an argument * position is an assignment or a named argument, when `Inferencer#isApplicableSafe` type checks - * applications with and without an expected type, or whtn `Typer#tryTypedApply` tries to fit arguments to + * applications with and without an expected type, or when `Typer#tryTypedApply` tries to fit arguments to * a function type with/without implicit views. * - * When the error policies entails error/warning buffering, the mutable [[ReportBuffer]] records + * When the error policies entail error/warning buffering, the mutable [[ReportBuffer]] records * everything that is issued. It is important to note, that child Contexts created with `make` * "inherit" the very same `ReportBuffer` instance, whereas children spawned through `makeSilent` - * receive an separate, fresh buffer. + * receive a separate, fresh buffer. * * @param tree Tree associated with this context * @param owner The current owner @@ -802,6 +802,14 @@ trait Contexts { self: Analyzer => (e ne null) && (e.owner == scope) && (!settings.isScala212 || e.sym.exists) }) + /** Do something with the symbols with name `name` imported via the import in `imp`, + * if any such symbol is accessible from this context and is a qualifying implicit. + */ + private def withQualifyingImplicitAlternatives(imp: ImportInfo, name: Name, pre: Type)(f: Symbol => Unit) = for { + sym <- importedAccessibleSymbol(imp, name, requireExplicit = false, record = false).alternatives + if isQualifyingImplicit(name, sym, pre, imported = true) + } f(sym) + private def collectImplicits(syms: Scope, pre: Type, imported: Boolean = false): List[ImplicitInfo] = for (sym <- syms.toList if isQualifyingImplicit(sym.name, sym, pre, imported)) yield new ImplicitInfo(sym.name, pre, sym) @@ -819,9 +827,9 @@ trait Contexts { self: Analyzer => case ImportSelector(from, _, to, _) :: sels1 => var impls = collect(sels1) filter (info => info.name != from) if (to != nme.WILDCARD) { - for (sym <- importedAccessibleSymbol(imp, to).alternatives) - if (isQualifyingImplicit(to, sym, pre, imported = true)) - impls = new ImplicitInfo(to, pre, sym) :: impls + withQualifyingImplicitAlternatives(imp, to, pre) { sym => + impls = new ImplicitInfo(to, pre, sym) :: impls + } } impls } @@ -946,11 +954,8 @@ trait Contexts { self: Analyzer => /** The symbol with name `name` imported via the import in `imp`, * if any such symbol is accessible from this context. */ - def importedAccessibleSymbol(imp: ImportInfo, name: Name): Symbol = - importedAccessibleSymbol(imp, name, requireExplicit = false) - - private def importedAccessibleSymbol(imp: ImportInfo, name: Name, requireExplicit: Boolean): Symbol = - imp.importedSymbol(name, requireExplicit) filter (s => isAccessible(s, imp.qual.tpe, superAccess = false)) + private def importedAccessibleSymbol(imp: ImportInfo, name: Name, requireExplicit: Boolean, record: Boolean): Symbol = + imp.importedSymbol(name, requireExplicit, record) filter (s => isAccessible(s, imp.qual.tpe, superAccess = false)) private def requiresQualifier(s: Symbol) = ( s.owner.isClass @@ -1057,7 +1062,7 @@ trait Contexts { self: Analyzer => def imp2Explicit = imp2 isExplicitImport name def lookupImport(imp: ImportInfo, requireExplicit: Boolean) = - importedAccessibleSymbol(imp, name, requireExplicit) filter qualifies + importedAccessibleSymbol(imp, name, requireExplicit, record = true) filter qualifies // Java: A single-type-import declaration d in a compilation unit c of package p // that imports a type named n shadows, throughout c, the declarations of: @@ -1353,7 +1358,6 @@ trait Contexts { self: Analyzer => protected def handleError(pos: Position, msg: String): Unit = onTreeCheckerError(pos, msg) } - class ImportInfo(val tree: Import, val depth: Int) { def pos = tree.pos def posOf(sel: ImportSelector) = tree.pos withPoint sel.namePos @@ -1369,19 +1373,20 @@ trait Contexts { self: Analyzer => def isExplicitImport(name: Name): Boolean = tree.selectors exists (_.rename == name.toTermName) - /** The symbol with name `name` imported from import clause `tree`. - */ - def importedSymbol(name: Name): Symbol = importedSymbol(name, requireExplicit = false) + /** The symbol with name `name` imported from import clause `tree`. */ + def importedSymbol(name: Name): Symbol = importedSymbol(name, requireExplicit = false, record = true) - private def recordUsage(sel: ImportSelector, result: Symbol) { - def posstr = pos.source.file.name + ":" + posOf(sel).line - def resstr = if (tree.symbol.hasCompleteInfo) s"(qual=$qual, $result)" else s"(expr=${tree.expr}, ${result.fullLocationString})" - debuglog(s"In $this at $posstr, selector '${selectorString(sel)}' resolved to $resstr") + private def recordUsage(sel: ImportSelector, result: Symbol): Unit = { + debuglog(s"In $this at ${ pos.source.file.name }:${ posOf(sel).line }, selector '${ selectorString(sel) + }' resolved to ${ + if (tree.symbol.hasCompleteInfo) s"(qual=$qual, $result)" + else s"(expr=${tree.expr}, ${result.fullLocationString})" + }") allUsedSelectors(this) += sel } /** If requireExplicit is true, wildcard imports are not considered. */ - def importedSymbol(name: Name, requireExplicit: Boolean): Symbol = { + def importedSymbol(name: Name, requireExplicit: Boolean, record: Boolean): Symbol = { var result: Symbol = NoSymbol var renamed = false var selectors = tree.selectors @@ -1398,7 +1403,7 @@ trait Contexts { self: Analyzer => if (result == NoSymbol) selectors = selectors.tail } - if (settings.warnUnusedImport && selectors.nonEmpty && result != NoSymbol && pos != NoPosition) + if (record && settings.warnUnusedImport && selectors.nonEmpty && result != NoSymbol && pos != NoPosition) recordUsage(current, result) // Harden against the fallout from bugs like SI-6745 diff --git a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala index 7ce945dd6c..196b137a3e 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala @@ -1358,7 +1358,7 @@ trait Implicits { val succstart = if (stats) Statistics.startTimer(oftypeSucceedNanos) else null // SI-6667, never search companions after an ambiguous error in in-scope implicits - val wasAmbigious = result.isAmbiguousFailure + val wasAmbiguous = result.isAmbiguousFailure // TODO: encapsulate val previousErrs = context.reporter.errors @@ -1368,7 +1368,7 @@ trait Implicits { // `materializeImplicit` does some preprocessing for `pt` // is it only meant for manifests/tags or we need to do the same for `implicitsOfExpectedType`? - if (result.isFailure && !wasAmbigious) + if (result.isFailure && !wasAmbiguous) result = searchImplicit(implicitsOfExpectedType, isLocalToCallsite = false) if (result.isFailure) @@ -1408,7 +1408,7 @@ trait Implicits { } if (result.isFailure && settings.debug) // debuglog is not inlined for some reason - log("no implicits found for "+pt+" "+pt.typeSymbol.info.baseClasses+" "+implicitsOfExpectedType) + log(s"no implicits found for ${pt} ${pt.typeSymbol.info.baseClasses} ${implicitsOfExpectedType}") result } diff --git a/src/compiler/scala/tools/nsc/typechecker/Infer.scala b/src/compiler/scala/tools/nsc/typechecker/Infer.scala index a4c794e8cf..bf705e89ad 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Infer.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Infer.scala @@ -1117,7 +1117,7 @@ trait Infer extends Checkable { // this is quite nasty: it destructively changes the info of the syms of e.g., method type params // (see #3692, where the type param T's bounds were set to > : T <: T, so that parts looped) - // the changes are rolled back by restoreTypeBounds, but might be unintentially observed in the mean time + // the changes are rolled back by restoreTypeBounds, but might be unintentionally observed in the mean time def instantiateTypeVar(tvar: TypeVar) { val tparam = tvar.origin.typeSymbol val TypeBounds(lo0, hi0) = tparam.info.bounds diff --git a/src/compiler/scala/tools/nsc/typechecker/Macros.scala b/src/compiler/scala/tools/nsc/typechecker/Macros.scala index 10aefae20b..99dd81c7e2 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Macros.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Macros.scala @@ -85,9 +85,9 @@ trait Macros extends MacroRuntimes with Traces with Helpers { */ case class MacroImplBinding( // Is this macro impl a bundle (a trait extending *box.Macro) or a vanilla def? - val isBundle: Boolean, + isBundle: Boolean, // Is this macro impl blackbox (i.e. having blackbox.Context in its signature)? - val isBlackbox: Boolean, + isBlackbox: Boolean, // Java class name of the class that contains the macro implementation // is used to load the corresponding object with Java reflection className: String, diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index c1655467e9..4ad81b60ae 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -145,8 +145,8 @@ trait Namers extends MethodSynthesis { // while Scala's enum constants live directly in the class. // We don't check for clazz.superClass == JavaEnumClass, because this causes a illegal // cyclic reference error. See the commit message for details. - if (context.unit.isJava) owner.companionClass.hasEnumFlag else owner.hasEnumFlag - vd.mods.hasAllFlags(ENUM | STABLE | STATIC) && ownerHasEnumFlag + if (context.unit.isJava) owner.companionClass.hasJavaEnumFlag else owner.hasJavaEnumFlag + vd.mods.hasAllFlags(JAVA_ENUM | STABLE | STATIC) && ownerHasEnumFlag } def setPrivateWithin[T <: Symbol](tree: Tree, sym: T, mods: Modifiers): T = diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index 4b30b4e436..0198529ef7 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -421,7 +421,7 @@ abstract class RefChecks extends InfoTransform with scala.reflect.internal.trans overrideError("cannot be used here - classes can only override abstract types") } else if (other.isEffectivelyFinal) { // (1.2) overrideError("cannot override final member") - } else if (!other.isDeferredOrDefault && !other.hasFlag(DEFAULTMETHOD) && !member.isAnyOverride && !member.isSynthetic) { // (*) + } else if (!other.isDeferredOrJavaDefault && !other.hasFlag(JAVA_DEFAULTMETHOD) && !member.isAnyOverride && !member.isSynthetic) { // (*) // (*) Synthetic exclusion for (at least) default getters, fixes SI-5178. We cannot assign the OVERRIDE flag to // the default getter: one default getter might sometimes override, sometimes not. Example in comment on ticket. if (isNeitherInClass && !(other.owner isSubClass member.owner)) @@ -604,7 +604,7 @@ abstract class RefChecks extends InfoTransform with scala.reflect.internal.trans def checkNoAbstractMembers(): Unit = { // Avoid spurious duplicates: first gather any missing members. def memberList = clazz.info.nonPrivateMembersAdmitting(VBRIDGE) - val (missing, rest) = memberList partition (m => m.isDeferredNotDefault && !ignoreDeferred(m)) + val (missing, rest) = memberList partition (m => m.isDeferredNotJavaDefault && !ignoreDeferred(m)) // Group missing members by the name of the underlying symbol, // to consolidate getters and setters. val grouped = missing groupBy (sym => analyzer.underlyingSymbol(sym).name) @@ -1134,13 +1134,13 @@ abstract class RefChecks extends InfoTransform with scala.reflect.internal.trans t hasSymbolWhich (_.accessedOrSelf == valOrDef.symbol) case _ => false } - val trivialInifiniteLoop = ( + val trivialInfiniteLoop = ( !valOrDef.isErroneous && !valOrDef.symbol.isValueParameter && valOrDef.symbol.paramss.isEmpty && callsSelf ) - if (trivialInifiniteLoop) + if (trivialInfiniteLoop) reporter.warning(valOrDef.rhs.pos, s"${valOrDef.symbol.fullLocationString} does nothing other than call itself recursively") } diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 2dfecbaea1..cc15a2485f 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -1694,6 +1694,8 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper psym addChild context.owner else pending += ParentSealedInheritanceError(parent, psym) + if (psym.isLocalToBlock && !phase.erasedTypes) + psym addChild context.owner val parentTypeOfThis = parent.tpe.dealias.typeOfThis if (!(selfType <:< parentTypeOfThis) && @@ -4564,7 +4566,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper typed1(atPos(tree.pos)(Block(stats, Apply(expr, args) setPos tree.pos.makeTransparent)), mode, pt) case Apply(fun, args) => normalTypedApply(tree, fun, args) match { - case ArrayInstantiation(tree1) => typed(tree1, mode, pt) + case ArrayInstantiation(tree1) => if (tree1.isErrorTyped) tree1 else typed(tree1, mode, pt) case Apply(Select(fun, nme.apply), _) if treeInfo.isSuperConstrCall(fun) => TooManyArgumentListsForConstructor(tree) //SI-5696 case tree1 => tree1 } 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/interactive.iml.SAMPLE b/src/intellij/interactive.iml.SAMPLE index 047b5c9069..267bd3f12b 100644 --- a/src/intellij/interactive.iml.SAMPLE +++ b/src/intellij/interactive.iml.SAMPLE @@ -11,5 +11,6 @@ <orderEntry type="module" module-name="library" /> <orderEntry type="module" module-name="reflect" /> <orderEntry type="library" name="starr" level="project" /> + <orderEntry type="library" name="asm" level="project" /> </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/repl.iml.SAMPLE b/src/intellij/repl.iml.SAMPLE index 7476f30131..e827a2c6d7 100644 --- a/src/intellij/repl.iml.SAMPLE +++ b/src/intellij/repl.iml.SAMPLE @@ -10,6 +10,7 @@ <orderEntry type="module" module-name="compiler" /> <orderEntry type="module" module-name="library" /> <orderEntry type="module" module-name="reflect" /> + <orderEntry type="module" module-name="interactive" /> <orderEntry type="library" name="starr" level="project" /> <orderEntry type="library" name="repl-deps" level="project" /> <orderEntry type="library" name="asm" level="project" /> 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/scaladoc.iml.SAMPLE b/src/intellij/scaladoc.iml.SAMPLE index 4ba0a848c6..6e6d98b396 100644 --- a/src/intellij/scaladoc.iml.SAMPLE +++ b/src/intellij/scaladoc.iml.SAMPLE @@ -14,5 +14,6 @@ <orderEntry type="library" name="scaladoc-deps" level="project" /> <orderEntry type="library" name="ant" level="project" /> <orderEntry type="library" name="partest" level="project" /> + <orderEntry type="library" name="asm" level="project" /> </component> </module>
\ No newline at end of file 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-aux/scala/Any.scala b/src/library-aux/scala/Any.scala index 1c25989c30..1be186d114 100644 --- a/src/library-aux/scala/Any.scala +++ b/src/library-aux/scala/Any.scala @@ -38,7 +38,7 @@ abstract class Any { * - It is reflexive: for any instance `x` of type `Any`, `x.equals(x)` should return `true`. * - It is symmetric: for any instances `x` and `y` of type `Any`, `x.equals(y)` should return `true` if and * only if `y.equals(x)` returns `true`. - * - It is transitive: for any instances `x`, `y`, and `z` of type `AnyRef` if `x.equals(y)` returns `true` and + * - It is transitive: for any instances `x`, `y`, and `z` of type `Any` if `x.equals(y)` returns `true` and * `y.equals(z)` returns `true`, then `x.equals(z)` should return `true`. * * If you override this method, you should verify that your implementation remains an equivalence relation. diff --git a/src/library-aux/scala/AnyRef.scala b/src/library-aux/scala/AnyRef.scala index 8c1862e729..7217499da7 100644 --- a/src/library-aux/scala/AnyRef.scala +++ b/src/library-aux/scala/AnyRef.scala @@ -45,7 +45,7 @@ trait AnyRef extends Any { */ def synchronized[T](body: => T): T - /** Tests whether the argument (`arg0`) is a reference to the receiver object (`this`). + /** Tests whether the argument (`that`) is a reference to the receiver object (`this`). * * The `eq` method implements an [[http://en.wikipedia.org/wiki/Equivalence_relation equivalence relation]] on * non-null instances of `AnyRef`, and has three additional properties: @@ -73,7 +73,7 @@ trait AnyRef extends Any { /** The expression `x == that` is equivalent to `if (x eq null) that eq null else x.equals(that)`. * - * @param arg0 the object to compare against this object for equality. + * @param that the object to compare against this object for equality. * @return `true` if the receiver object is equivalent to the argument; `false` otherwise. */ final def ==(that: Any): Boolean = diff --git a/src/library/scala/Predef.scala b/src/library/scala/Predef.scala index 281e056330..fa58015a84 100644 --- a/src/library/scala/Predef.scala +++ b/src/library/scala/Predef.scala @@ -269,13 +269,6 @@ object Predef extends LowPriorityImplicits with DeprecatedPredef { @inline def formatted(fmtstr: String): String = fmtstr format self } - // TODO: remove, only needed for binary compatibility of 2.11.0-RC1 with 2.11.0-M8 - // note that `private[scala]` becomes `public` in bytecode - private[scala] final class StringAdd[A](private val self: A) extends AnyVal { - def +(other: String): String = String.valueOf(self) + other - } - private[scala] def StringAdd(x: Any): Any = new StringAdd(x) - // SI-8229 retaining the pre 2.11 name for source compatibility in shadowing this implicit implicit final class any2stringadd[A](private val self: A) extends AnyVal { def +(other: String): String = String.valueOf(self) + other diff --git a/src/library/scala/StringContext.scala b/src/library/scala/StringContext.scala index e60fa2f290..69533c12da 100644 --- a/src/library/scala/StringContext.scala +++ b/src/library/scala/StringContext.scala @@ -173,7 +173,7 @@ object StringContext { /** An exception that is thrown if a string contains a backslash (`\`) character * that does not start a valid escape sequence. * @param str The offending string - * @param idx The index of the offending backslash character in `str`. + * @param index The index of the offending backslash character in `str`. */ class InvalidEscapeException(str: String, @deprecatedName('idx) val index: Int) extends IllegalArgumentException( s"""invalid escape ${ diff --git a/src/library/scala/collection/GenSeqLike.scala b/src/library/scala/collection/GenSeqLike.scala index f786293822..be1da1660a 100644 --- a/src/library/scala/collection/GenSeqLike.scala +++ b/src/library/scala/collection/GenSeqLike.scala @@ -274,7 +274,7 @@ trait GenSeqLike[+A, +Repr] extends Any with GenIterableLike[A, Repr] with Equal * @tparam B the element type of the returned $coll. * @tparam That $thatinfo * @param bf $bfinfo - * @return a new $coll` which is a copy of this $coll with the element at position `index` replaced by `elem`. + * @return a new $coll which is a copy of this $coll with the element at position `index` replaced by `elem`. * @throws IndexOutOfBoundsException if `index` does not satisfy `0 <= index < length`. * * @usecase def updated(index: Int, elem: A): $Coll[A] diff --git a/src/library/scala/collection/LinearSeqOptimized.scala b/src/library/scala/collection/LinearSeqOptimized.scala index 9c336e8e31..571d58a3f3 100755 --- a/src/library/scala/collection/LinearSeqOptimized.scala +++ b/src/library/scala/collection/LinearSeqOptimized.scala @@ -117,25 +117,25 @@ trait LinearSeqOptimized[+A, +Repr <: LinearSeqOptimized[A, Repr]] extends Linea } override /*TraversableLike*/ - def foldLeft[B](z: B)(f: (B, A) => B): B = { + def foldLeft[B](z: B)(@deprecatedName('f) op: (B, A) => B): B = { var acc = z var these = this while (!these.isEmpty) { - acc = f(acc, these.head) + acc = op(acc, these.head) these = these.tail } acc } override /*IterableLike*/ - def foldRight[B](z: B)(f: (A, B) => B): B = + def foldRight[B](z: B)(@deprecatedName('f) op: (A, B) => B): B = if (this.isEmpty) z - else f(head, tail.foldRight(z)(f)) + else op(head, tail.foldRight(z)(op)) override /*TraversableLike*/ - def reduceLeft[B >: A](f: (B, A) => B): B = + def reduceLeft[B >: A](@deprecatedName('f) op: (B, A) => B): B = if (isEmpty) throw new UnsupportedOperationException("empty.reduceLeft") - else tail.foldLeft[B](head)(f) + else tail.foldLeft[B](head)(op) override /*IterableLike*/ def reduceRight[B >: A](op: (A, B) => B): B = 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/convert/Wrappers.scala b/src/library/scala/collection/convert/Wrappers.scala index 9f9732c62f..3edc5ba1b4 100644 --- a/src/library/scala/collection/convert/Wrappers.scala +++ b/src/library/scala/collection/convert/Wrappers.scala @@ -102,9 +102,9 @@ private[collection] trait Wrappers { override def clone(): JListWrapper[A] = JListWrapper(new ju.ArrayList[A](underlying)) } - // Note various overrides to avoid performance gotchas. - class SetWrapper[A](underlying: Set[A]) extends ju.AbstractSet[A] { - self => + @SerialVersionUID(1L) + class SetWrapper[A](underlying: Set[A]) extends ju.AbstractSet[A] with Serializable { self => + // Note various overrides to avoid performance gotchas. override def contains(o: Object): Boolean = { try { underlying.contains(o.asInstanceOf[A]) } catch { case cce: ClassCastException => false } @@ -165,7 +165,8 @@ private[collection] trait Wrappers { new JSetWrapper[A](new ju.LinkedHashSet[A](underlying)) } - class MapWrapper[A, B](underlying: Map[A, B]) extends ju.AbstractMap[A, B] { self => + @SerialVersionUID(1L) + class MapWrapper[A, B](underlying: Map[A, B]) extends ju.AbstractMap[A, B] with Serializable { self => override def size = underlying.size override def get(key: AnyRef): B = try { @@ -265,17 +266,11 @@ private[collection] trait Wrappers { def +=(kv: (A, B)): this.type = { underlying.put(kv._1, kv._2); this } def -=(key: A): this.type = { underlying remove key; this } - override def put(k: A, v: B): Option[B] = { - val r = underlying.put(k, v) - if (r != null) Some(r) else None - } + override def put(k: A, v: B): Option[B] = Option(underlying.put(k, v)) override def update(k: A, v: B) { underlying.put(k, v) } - override def remove(k: A): Option[B] = { - val r = underlying remove k - if (r != null) Some(r) else None - } + override def remove(k: A): Option[B] = Option(underlying remove k) def iterator: Iterator[(A, B)] = new AbstractIterator[(A, B)] { val ui = underlying.entrySet.iterator @@ -326,25 +321,15 @@ private[collection] trait Wrappers { * are not guaranteed to be atomic. */ case class JConcurrentMapWrapper[A, B](underlying: juc.ConcurrentMap[A, B]) extends mutable.AbstractMap[A, B] with JMapWrapperLike[A, B, JConcurrentMapWrapper[A, B]] with concurrent.Map[A, B] { - override def get(k: A) = { - val v = underlying get k - if (v != null) Some(v) - else None - } + override def get(k: A) = Option(underlying get k) override def empty = new JConcurrentMapWrapper(new juc.ConcurrentHashMap[A, B]) - def putIfAbsent(k: A, v: B): Option[B] = { - val r = underlying.putIfAbsent(k, v) - if (r != null) Some(r) else None - } + def putIfAbsent(k: A, v: B): Option[B] = Option(underlying.putIfAbsent(k, v)) def remove(k: A, v: B): Boolean = underlying.remove(k, v) - def replace(k: A, v: B): Option[B] = { - val prev = underlying.replace(k, v) - if (prev != null) Some(prev) else None - } + def replace(k: A, v: B): Option[B] = Option(underlying.replace(k, v)) def replace(k: A, oldvalue: B, newvalue: B): Boolean = underlying.replace(k, oldvalue, newvalue) @@ -380,25 +365,16 @@ private[collection] trait Wrappers { case class JDictionaryWrapper[A, B](underlying: ju.Dictionary[A, B]) extends mutable.AbstractMap[A, B] with mutable.Map[A, B] { override def size: Int = underlying.size - def get(k: A) = { - val v = underlying get k - if (v != null) Some(v) else None - } + def get(k: A) = Option(underlying get k) def +=(kv: (A, B)): this.type = { underlying.put(kv._1, kv._2); this } def -=(key: A): this.type = { underlying remove key; this } - override def put(k: A, v: B): Option[B] = { - val r = underlying.put(k, v) - if (r != null) Some(r) else None - } + override def put(k: A, v: B): Option[B] = Option(underlying.put(k, v)) override def update(k: A, v: B) { underlying.put(k, v) } - override def remove(k: A): Option[B] = { - val r = underlying remove k - if (r != null) Some(r) else None - } + override def remove(k: A): Option[B] = Option(underlying remove k) def iterator = enumerationAsScalaIterator(underlying.keys) map (k => (k, underlying get k)) diff --git a/src/library/scala/collection/immutable/Range.scala b/src/library/scala/collection/immutable/Range.scala index 0b380517f8..984ea7ba50 100644 --- a/src/library/scala/collection/immutable/Range.scala +++ b/src/library/scala/collection/immutable/Range.scala @@ -302,7 +302,7 @@ extends scala.collection.AbstractSeq[Int] */ final override def splitAt(n: Int) = (take(n), drop(n)) - /** Creates a new range consisting of the `length - n` last elements of the range. + /** Creates a new range consisting of the last `n` elements of the range. * * $doesNotUseBuilders */ diff --git a/src/library/scala/collection/immutable/Stream.scala b/src/library/scala/collection/immutable/Stream.scala index 6c5b10e73b..5989517532 100644 --- a/src/library/scala/collection/immutable/Stream.scala +++ b/src/library/scala/collection/immutable/Stream.scala @@ -509,21 +509,6 @@ self => else Stream.Empty } - /** Returns all the elements of this `Stream` that satisfy the predicate `p` - * in a new `Stream` - i.e., it is still a lazy data structure. The order of - * the elements is preserved - * - * @param p the predicate used to filter the stream. - * @return the elements of this stream satisfying `p`. - * - * @example {{{ - * $naturalsEx - * naturalsFrom(1) 10 } filter { _ % 5 == 0 } take 10 mkString(", ") - * // produces - * }}} - */ - override def filter(p: A => Boolean): Stream[A] = filterImpl(p, isFlipped = false) // This override is only left in 2.11 because of binary compatibility, see PR #3925 - /** A FilterMonadic which allows GC of the head of stream during processing */ @noinline // Workaround SI-9137, see https://github.com/scala/scala/pull/4284#issuecomment-73180791 override final def withFilter(p: A => Boolean): FilterMonadic[A, Stream[A]] = new Stream.StreamWithFilter(this, p) @@ -1144,7 +1129,7 @@ object Stream extends SeqFactory[Stream] { def #:::(prefix: Stream[A]): Stream[A] = prefix append tl } - /** A wrapper method that adds `#::` for cons and `#::: for concat as operations + /** A wrapper method that adds `#::` for cons and `#:::` for concat as operations * to streams. */ implicit def consWrapper[A](stream: => Stream[A]): ConsWrapper[A] = 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/compat/Platform.scala b/src/library/scala/compat/Platform.scala index 4c82d6e15b..42dfcbfdde 100644 --- a/src/library/scala/compat/Platform.scala +++ b/src/library/scala/compat/Platform.scala @@ -41,7 +41,7 @@ object Platform { * @throws java.lang.ArrayStoreException If either `src` or `dest` are not of type * [java.lang.Array]; or if the element type of `src` is not * compatible with that of `dest`. - * @throws java.lang.IndexOutOfBoundsException If either srcPos` or `destPos` are + * @throws java.lang.IndexOutOfBoundsException If either `srcPos` or `destPos` are * outside of the bounds of their respective arrays; or if `length` * is negative; or if there are less than `length` elements available * after `srcPos` or `destPos` in `src` and `dest` respectively. 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/src/library/scala/math/BigDecimal.scala b/src/library/scala/math/BigDecimal.scala index 6bb35606a6..bb337e7a1d 100644 --- a/src/library/scala/math/BigDecimal.scala +++ b/src/library/scala/math/BigDecimal.scala @@ -124,7 +124,7 @@ object BigDecimal { */ def exact(s: String): BigDecimal = exact(new BigDec(s)) - /** Constructs a 'BigDecimal` that exactly represents the number + /** Constructs a `BigDecimal` that exactly represents the number * specified in base 10 in a character array. */ def exact(cs: Array[Char]): BigDecimal = exact(new BigDec(cs)) diff --git a/src/library/scala/ref/WeakReference.scala b/src/library/scala/ref/WeakReference.scala index 6ee40aed5c..9dcc0bbe5f 100644 --- a/src/library/scala/ref/WeakReference.scala +++ b/src/library/scala/ref/WeakReference.scala @@ -28,10 +28,7 @@ object WeakReference { def apply[T <: AnyRef](value: T) = new WeakReference(value) /** Optionally returns the referenced value, or `None` if that value no longer exists */ - def unapply[T <: AnyRef](wr: WeakReference[T]): Option[T] = { - val x = wr.underlying.get - if (x != null) Some(x) else None - } + def unapply[T <: AnyRef](wr: WeakReference[T]): Option[T] = Option(wr.underlying.get) } /** diff --git a/src/library/scala/reflect/Manifest.scala b/src/library/scala/reflect/Manifest.scala index 2f7643bccf..4ff49c44d0 100644 --- a/src/library/scala/reflect/Manifest.scala +++ b/src/library/scala/reflect/Manifest.scala @@ -248,7 +248,7 @@ object ManifestFactory { def arrayType[T](arg: Manifest[_]): Manifest[Array[T]] = arg.asInstanceOf[Manifest[T]].arrayManifest - /** Manifest for the abstract type `prefix # name'. `upperBound` is not + /** Manifest for the abstract type `prefix # name`. `upperBound` is not * strictly necessary as it could be obtained by reflection. It was * added so that erasure can be calculated without reflection. */ def abstractType[T](prefix: Manifest[_], name: String, upperBound: Predef.Class[_], args: Manifest[_]*): Manifest[T] = @@ -269,7 +269,7 @@ object ManifestFactory { (if (upperBound eq Nothing) "" else " <: "+upperBound) } - /** Manifest for the intersection type `parents_0 with ... with parents_n'. */ + /** Manifest for the intersection type `parents_0 with ... with parents_n`. */ def intersectionType[T](parents: Manifest[_]*): Manifest[T] = new Manifest[T] { def runtimeClass = parents.head.runtimeClass diff --git a/src/library/scala/sys/SystemProperties.scala b/src/library/scala/sys/SystemProperties.scala index 6f8b13a89b..3ee4f6c708 100644 --- a/src/library/scala/sys/SystemProperties.scala +++ b/src/library/scala/sys/SystemProperties.scala @@ -86,6 +86,8 @@ object SystemProperties { lazy val headless = bool("java.awt.headless", "system should not utilize a display device") lazy val preferIPv4Stack = bool("java.net.preferIPv4Stack", "system should prefer IPv4 sockets") lazy val preferIPv6Addresses = bool("java.net.preferIPv6Addresses", "system should prefer IPv6 addresses") - lazy val noTraceSupression = bool("scala.control.noTraceSuppression", "scala should not suppress any stack trace creation") + lazy val noTraceSuppression = bool("scala.control.noTraceSuppression", "scala should not suppress any stack trace creation") + @deprecated("Use noTraceSuppression", "2.12.0") + def noTraceSupression = noTraceSuppression } diff --git a/src/library/scala/util/control/NoStackTrace.scala b/src/library/scala/util/control/NoStackTrace.scala index b33b6a18dd..3c42944af1 100644 --- a/src/library/scala/util/control/NoStackTrace.scala +++ b/src/library/scala/util/control/NoStackTrace.scala @@ -26,7 +26,7 @@ trait NoStackTrace extends Throwable { object NoStackTrace { final def noSuppression = _noSuppression - // two-stage init to make checkinit happy, since sys.SystemProperties.noTraceSupression.value calls back into NoStackTrace.noSuppression + // two-stage init to make checkinit happy, since sys.SystemProperties.noTraceSuppression.value calls back into NoStackTrace.noSuppression final private var _noSuppression = false - _noSuppression = sys.SystemProperties.noTraceSupression.value + _noSuppression = sys.SystemProperties.noTraceSuppression.value } diff --git a/src/reflect/scala/reflect/api/FlagSets.scala b/src/reflect/scala/reflect/api/FlagSets.scala index d3294dad9b..2d5d1d5d6b 100644 --- a/src/reflect/scala/reflect/api/FlagSets.scala +++ b/src/reflect/scala/reflect/api/FlagSets.scala @@ -173,6 +173,7 @@ trait FlagSets { self: Universe => * - the enum's class * - enum constants **/ + @deprecated("Use `isJavaEnum` on the corresponding symbol instead.", since = "2.11.8") val ENUM: FlagSet /** Flag indicating that tree represents a parameter of the primary constructor of some class diff --git a/src/reflect/scala/reflect/api/Symbols.scala b/src/reflect/scala/reflect/api/Symbols.scala index b7234ba47a..9e9fe5d67b 100644 --- a/src/reflect/scala/reflect/api/Symbols.scala +++ b/src/reflect/scala/reflect/api/Symbols.scala @@ -504,6 +504,18 @@ trait Symbols { self: Universe => */ def isImplicit: Boolean + /** Does this symbol represent a java enum class or a java enum value? + * + * @group Tests + */ + def isJavaEnum: Boolean + + /** Does this symbol represent a java annotation interface? + * + * @group Tests + */ + def isJavaAnnotation: Boolean + /******************* helpers *******************/ /** Provides an alternate if symbol is a NoSymbol. diff --git a/src/reflect/scala/reflect/api/Trees.scala b/src/reflect/scala/reflect/api/Trees.scala index 2bf407ee19..a43195d9b6 100644 --- a/src/reflect/scala/reflect/api/Trees.scala +++ b/src/reflect/scala/reflect/api/Trees.scala @@ -143,7 +143,7 @@ trait Trees { self: Universe => /** Find all subtrees matching predicate `p`. Same as `withFilter` */ def filter(f: Tree => Boolean): List[Tree] - /** Apply `pf' to each subtree on which the function is defined and collect the results. + /** Apply `pf` to each subtree on which the function is defined and collect the results. */ def collect[T](pf: PartialFunction[Tree, T]): List[T] diff --git a/src/reflect/scala/reflect/api/TypeTags.scala b/src/reflect/scala/reflect/api/TypeTags.scala index 7db375ca61..bc239ca870 100644 --- a/src/reflect/scala/reflect/api/TypeTags.scala +++ b/src/reflect/scala/reflect/api/TypeTags.scala @@ -53,7 +53,7 @@ import java.io.ObjectStreamException * Each of these methods constructs a `TypeTag[T]` or `ClassTag[T]` for the given * type argument `T`. * - * === #2 Using an implicit parameter of type `TypeTag[T]`, `ClassTag[T]`, or `WeakTypeTag[T] + * === #2 Using an implicit parameter of type `TypeTag[T]`, `ClassTag[T]`, or `WeakTypeTag[T]` * * For example: * {{{ diff --git a/src/reflect/scala/reflect/internal/ClassfileConstants.scala b/src/reflect/scala/reflect/internal/ClassfileConstants.scala index 53241fb15b..e5d97e8959 100644 --- a/src/reflect/scala/reflect/internal/ClassfileConstants.scala +++ b/src/reflect/scala/reflect/internal/ClassfileConstants.scala @@ -344,7 +344,8 @@ object ClassfileConstants { case JAVA_ACC_STATIC => STATIC case JAVA_ACC_ABSTRACT => if (isAnnotation) 0L else if (isClass) ABSTRACT else DEFERRED case JAVA_ACC_INTERFACE => if (isAnnotation) 0L else TRAIT | INTERFACE | ABSTRACT - case JAVA_ACC_ENUM => ENUM + case JAVA_ACC_ENUM => JAVA_ENUM + case JAVA_ACC_ANNOTATION => JAVA_ANNOTATION case _ => 0L } private def translateFlags(jflags: Int, baseFlags: Long, isClass: Boolean): Long = { @@ -360,6 +361,7 @@ object ClassfileConstants { res |= translateFlag0(jflags & JAVA_ACC_ABSTRACT) res |= translateFlag0(jflags & JAVA_ACC_INTERFACE) res |= translateFlag0(jflags & JAVA_ACC_ENUM) + res |= translateFlag0(jflags & JAVA_ACC_ANNOTATION) res } diff --git a/src/reflect/scala/reflect/internal/Definitions.scala b/src/reflect/scala/reflect/internal/Definitions.scala index 3552eb1713..02fa3c882b 100644 --- a/src/reflect/scala/reflect/internal/Definitions.scala +++ b/src/reflect/scala/reflect/internal/Definitions.scala @@ -815,7 +815,7 @@ trait Definitions extends api.StandardDefinitions { // must filter out "universal" members (getClass is deferred for some reason) val deferredMembers = ( tp membersBasedOnFlags (excludedFlags = BridgeAndPrivateFlags, requiredFlags = METHOD) - filter (mem => mem.isDeferredNotDefault && !isUniversalMember(mem)) // TODO: test + filter (mem => mem.isDeferredNotJavaDefault && !isUniversalMember(mem)) // TODO: test ) // if there is only one, it's monomorphic and has a single argument list diff --git a/src/reflect/scala/reflect/internal/ExistentialsAndSkolems.scala b/src/reflect/scala/reflect/internal/ExistentialsAndSkolems.scala index 0eeca4aace..3e18f88f80 100644 --- a/src/reflect/scala/reflect/internal/ExistentialsAndSkolems.scala +++ b/src/reflect/scala/reflect/internal/ExistentialsAndSkolems.scala @@ -110,7 +110,7 @@ trait ExistentialsAndSkolems { /** * Compute an existential type from hidden symbols `hidden` and type `tp`. * @param hidden The symbols that will be existentially abstracted - * @param hidden The original type + * @param tp The original type * @param rawOwner The owner for Java raw types. */ final def packSymbols(hidden: List[Symbol], tp: Type, rawOwner: Symbol = NoSymbol): Type = diff --git a/src/reflect/scala/reflect/internal/FlagSets.scala b/src/reflect/scala/reflect/internal/FlagSets.scala index ef9c77878f..b6521634fb 100644 --- a/src/reflect/scala/reflect/internal/FlagSets.scala +++ b/src/reflect/scala/reflect/internal/FlagSets.scala @@ -42,7 +42,7 @@ trait FlagSets extends api.FlagSets { self: SymbolTable => val DEFAULTPARAM : FlagSet = Flags.DEFAULTPARAM val PRESUPER : FlagSet = Flags.PRESUPER val DEFAULTINIT : FlagSet = Flags.DEFAULTINIT - val ENUM : FlagSet = Flags.ENUM + val ENUM : FlagSet = Flags.JAVA_ENUM val PARAMACCESSOR : FlagSet = Flags.PARAMACCESSOR val CASEACCESSOR : FlagSet = Flags.CASEACCESSOR val SYNTHETIC : FlagSet = Flags.SYNTHETIC diff --git a/src/reflect/scala/reflect/internal/Flags.scala b/src/reflect/scala/reflect/internal/Flags.scala index 1707061817..754b96a9dd 100644 --- a/src/reflect/scala/reflect/internal/Flags.scala +++ b/src/reflect/scala/reflect/internal/Flags.scala @@ -15,65 +15,65 @@ import scala.collection.{ mutable, immutable } // // Generated by mkFlagsTable() at Thu Feb 02 20:31:52 PST 2012 // -// 0: PROTECTED/M -// 1: OVERRIDE/M -// 2: PRIVATE/M -// 3: ABSTRACT/M -// 4: DEFERRED/M -// 5: FINAL/M -// 6: METHOD -// 7: INTERFACE/M -// 8: MODULE -// 9: IMPLICIT/M -// 10: SEALED/M -// 11: CASE/M -// 12: MUTABLE/M -// 13: PARAM/M -// 14: PACKAGE -// 15: MACRO/M -// 16: BYNAMEPARAM/M CAPTURED COVARIANT/M -// 17: CONTRAVARIANT/M INCONSTRUCTOR LABEL -// 18: ABSOVERRIDE/M -// 19: LOCAL/M -// 20: JAVA/M -// 21: SYNTHETIC -// 22: STABLE -// 23: STATIC/M -// 24: CASEACCESSOR/M -// 25: DEFAULTPARAM/M TRAIT/M -// 26: BRIDGE -// 27: ACCESSOR -// 28: SUPERACCESSOR -// 29: PARAMACCESSOR/M -// 30: MODULEVAR -// 31: LAZY/M -// 32: IS_ERROR -// 33: OVERLOADED -// 34: LIFTED -// 35: EXISTENTIAL MIXEDIN -// 36: EXPANDEDNAME -// 37: IMPLCLASS PRESUPER/M -// 38: TRANS_FLAG -// 39: LOCKED -// 40: SPECIALIZED -// 41: DEFAULTINIT/M -// 42: VBRIDGE -// 43: VARARGS -// 44: TRIEDCOOKING -// 45: SYNCHRONIZED/M -// 46: ARTIFACT -// 47: DEFAULTMETHOD/M -// 48: ENUM -// 49: +// 0: PROTECTED/M +// 1: OVERRIDE/M +// 2: PRIVATE/M +// 3: ABSTRACT/M +// 4: DEFERRED/M +// 5: FINAL/M +// 6: METHOD +// 7: INTERFACE/M +// 8: MODULE +// 9: IMPLICIT/M +// 10: SEALED/M +// 11: CASE/M +// 12: MUTABLE/M +// 13: PARAM/M +// 14: PACKAGE +// 15: MACRO/M +// 16: BYNAMEPARAM/M CAPTURED COVARIANT/M +// 17: CONTRAVARIANT/M INCONSTRUCTOR LABEL +// 18: ABSOVERRIDE/M +// 19: LOCAL/M +// 20: JAVA/M +// 21: SYNTHETIC +// 22: STABLE +// 23: STATIC/M +// 24: CASEACCESSOR/M +// 25: DEFAULTPARAM/M TRAIT/M +// 26: BRIDGE +// 27: ACCESSOR +// 28: SUPERACCESSOR +// 29: PARAMACCESSOR/M +// 30: MODULEVAR +// 31: LAZY/M +// 32: IS_ERROR +// 33: OVERLOADED +// 34: LIFTED +// 35: EXISTENTIAL MIXEDIN +// 36: EXPANDEDNAME +// 37: IMPLCLASS PRESUPER/M +// 38: TRANS_FLAG +// 39: LOCKED +// 40: SPECIALIZED +// 41: DEFAULTINIT/M +// 42: VBRIDGE +// 43: VARARGS +// 44: TRIEDCOOKING +// 45: SYNCHRONIZED/M +// 46: ARTIFACT +// 47: JAVA_DEFAULTMETHOD/M +// 48: JAVA_ENUM +// 49: JAVA_ANNOTATION // 50: -// 51: lateDEFERRED -// 52: lateFINAL -// 53: lateMETHOD -// 54: lateINTERFACE -// 55: lateMODULE -// 56: notPROTECTED -// 57: notOVERRIDE -// 58: notPRIVATE +// 51: lateDEFERRED +// 52: lateFINAL +// 53: lateMETHOD +// 54: lateINTERFACE +// 55: lateMODULE +// 56: notPROTECTED +// 57: notOVERRIDE +// 58: notPRIVATE // 59: // 60: // 61: @@ -119,8 +119,9 @@ class ModifierFlags { final val DEFAULTINIT = 1L << 41 // symbol is initialized to the default value: used by -Xcheckinit final val ARTIFACT = 1L << 46 // symbol should be ignored when typechecking; will be marked ACC_SYNTHETIC in bytecode // to see which symbols are marked as ARTIFACT, see scaladocs for FlagValues.ARTIFACT - final val DEFAULTMETHOD = 1L << 47 // symbol is a java default method - final val ENUM = 1L << 48 // symbol is an enum + final val JAVA_DEFAULTMETHOD = 1L << 47 // symbol is a java default method + final val JAVA_ENUM = 1L << 48 // symbol is a java enum + final val JAVA_ANNOTATION = 1L << 49 // symbol is a java annotation // Overridden. def flagToString(flag: Long): String = "" @@ -172,12 +173,28 @@ class Flags extends ModifierFlags { final val SYNCHRONIZED = 1L << 45 // symbol is a method which should be marked ACC_SYNCHRONIZED // ------- shift definitions ------------------------------------------------------- + // + // Flags from 1L to (1L << 50) are normal flags. + // + // The flags DEFERRED (1L << 4) to MODULE (1L << 8) have a `late` counterpart. Late flags change + // their counterpart from 0 to 1 after a specific phase (see below). The first late flag + // (lateDEFERRED) is at (1L << 51), i.e., late flags are shifted by 47. The last one is (1L << 55). + // + // The flags PROTECTED (1L) to PRIVATE (1L << 2) have a `not` counterpart. Negated flags change + // their counterpart from 1 to 0 after a specific phase (see below). They are shifted by 56, i.e., + // the first negated flag (notPROTECTED) is at (1L << 56), the last at (1L << 58). + // + // Late and negative flags are only enabled after certain phases, implemented by the phaseNewFlags + // method of the SubComponent, so they implement a bit of a flag history. + // + // The flags (1L << 59) to (1L << 63) are currently unused. If added to the InitialFlags mask, + // they could be used as normal flags. - final val InitialFlags = 0x0001FFFFFFFFFFFFL // flags that are enabled from phase 1. - final val LateFlags = 0x00FE000000000000L // flags that override flags in 0x1FC. - final val AntiFlags = 0x7F00000000000000L // flags that cancel flags in 0x07F - final val LateShift = 47L - final val AntiShift = 56L + final val InitialFlags = 0x0007FFFFFFFFFFFFL // normal flags, enabled from the first phase: 1L to (1L << 50) + final val LateFlags = 0x00F8000000000000L // flags that override flags in (1L << 4) to (1L << 8): DEFERRED, FINAL, INTERFACE, METHOD, MODULE + final val AntiFlags = 0x0700000000000000L // flags that cancel flags in 1L to (1L << 2): PROTECTED, OVERRIDE, PRIVATE + final val LateShift = 47 + final val AntiShift = 56 // Flags which sketchily share the same slot // 16: BYNAMEPARAM/M CAPTURED COVARIANT/M @@ -243,7 +260,7 @@ class Flags extends ModifierFlags { */ final val ExplicitFlags = PRIVATE | PROTECTED | ABSTRACT | FINAL | SEALED | - OVERRIDE | CASE | IMPLICIT | ABSOVERRIDE | LAZY | DEFAULTMETHOD + OVERRIDE | CASE | IMPLICIT | ABSOVERRIDE | LAZY | JAVA_DEFAULTMETHOD /** The two bridge flags */ final val BridgeFlags = BRIDGE | VBRIDGE @@ -434,9 +451,9 @@ class Flags extends ModifierFlags { case TRIEDCOOKING => "<triedcooking>" // (1L << 44) case SYNCHRONIZED => "<synchronized>" // (1L << 45) case ARTIFACT => "<artifact>" // (1L << 46) - case DEFAULTMETHOD => "<defaultmethod>" // (1L << 47) - case ENUM => "<enum>" // (1L << 48) - case 0x2000000000000L => "" // (1L << 49) + case JAVA_DEFAULTMETHOD => "<defaultmethod>" // (1L << 47) + case JAVA_ENUM => "<enum>" // (1L << 48) + case JAVA_ANNOTATION => "<annotation>" // (1L << 49) case 0x4000000000000L => "" // (1L << 50) case `lateDEFERRED` => "<latedeferred>" // (1L << 51) case `lateFINAL` => "<latefinal>" // (1L << 52) diff --git a/src/reflect/scala/reflect/internal/HasFlags.scala b/src/reflect/scala/reflect/internal/HasFlags.scala index aa8f4c532e..5162b15206 100644 --- a/src/reflect/scala/reflect/internal/HasFlags.scala +++ b/src/reflect/scala/reflect/internal/HasFlags.scala @@ -79,49 +79,50 @@ trait HasFlags { // Tests which come through cleanly: both Symbol and Modifiers use these // identically, testing for a single flag. - def hasAbstractFlag = hasFlag(ABSTRACT) - def hasAccessorFlag = hasFlag(ACCESSOR) - def hasDefault = hasFlag(DEFAULTPARAM) && hasFlag(METHOD | PARAM) // Second condition disambiguates with TRAIT - def hasEnumFlag = hasFlag(ENUM) + def hasAbstractFlag = hasFlag(ABSTRACT) + def hasAccessorFlag = hasFlag(ACCESSOR) + def hasDefault = hasFlag(DEFAULTPARAM) && hasFlag(METHOD | PARAM) // Second condition disambiguates with TRAIT + def hasJavaEnumFlag = hasFlag(JAVA_ENUM) + def hasJavaAnnotationFlag = hasFlag(JAVA_ANNOTATION) @deprecated("Use isLocalToThis instead", "2.11.0") - def hasLocalFlag = hasFlag(LOCAL) - def isLocalToThis = hasFlag(LOCAL) - def hasModuleFlag = hasFlag(MODULE) - def hasPackageFlag = hasFlag(PACKAGE) - def hasStableFlag = hasFlag(STABLE) - def hasStaticFlag = hasFlag(STATIC) - def isAbstractOverride = hasFlag(ABSOVERRIDE) - def isAnyOverride = hasFlag(OVERRIDE | ABSOVERRIDE) - def isCase = hasFlag(CASE) - def isCaseAccessor = hasFlag(CASEACCESSOR) - def isDeferred = hasFlag(DEFERRED) - def isFinal = hasFlag(FINAL) - def isArtifact = hasFlag(ARTIFACT) - def isImplicit = hasFlag(IMPLICIT) - def isInterface = hasFlag(INTERFACE) - def isJavaDefined = hasFlag(JAVA) - def isLabel = hasAllFlags(LABEL | METHOD) && !hasAccessorFlag - def isLazy = hasFlag(LAZY) - def isLifted = hasFlag(LIFTED) - def isMacro = hasFlag(MACRO) - def isMutable = hasFlag(MUTABLE) - def isOverride = hasFlag(OVERRIDE) - def isParamAccessor = hasFlag(PARAMACCESSOR) - def isPrivate = hasFlag(PRIVATE) + def hasLocalFlag = hasFlag(LOCAL) + def isLocalToThis = hasFlag(LOCAL) + def hasModuleFlag = hasFlag(MODULE) + def hasPackageFlag = hasFlag(PACKAGE) + def hasStableFlag = hasFlag(STABLE) + def hasStaticFlag = hasFlag(STATIC) + def isAbstractOverride = hasFlag(ABSOVERRIDE) + def isAnyOverride = hasFlag(OVERRIDE | ABSOVERRIDE) + def isCase = hasFlag(CASE) + def isCaseAccessor = hasFlag(CASEACCESSOR) + def isDeferred = hasFlag(DEFERRED) + def isFinal = hasFlag(FINAL) + def isArtifact = hasFlag(ARTIFACT) + def isImplicit = hasFlag(IMPLICIT) + def isInterface = hasFlag(INTERFACE) + def isJavaDefined = hasFlag(JAVA) + def isLabel = hasAllFlags(LABEL | METHOD) && !hasAccessorFlag + def isLazy = hasFlag(LAZY) + def isLifted = hasFlag(LIFTED) + def isMacro = hasFlag(MACRO) + def isMutable = hasFlag(MUTABLE) + def isOverride = hasFlag(OVERRIDE) + def isParamAccessor = hasFlag(PARAMACCESSOR) + def isPrivate = hasFlag(PRIVATE) @deprecated ("Use `hasPackageFlag` instead", "2.11.0") - def isPackage = hasFlag(PACKAGE) - def isPrivateLocal = hasAllFlags(PrivateLocal) - def isProtected = hasFlag(PROTECTED) - def isProtectedLocal = hasAllFlags(ProtectedLocal) - def isPublic = hasNoFlags(PRIVATE | PROTECTED) && !hasAccessBoundary - def isSealed = hasFlag(SEALED) - def isSpecialized = hasFlag(SPECIALIZED) - def isSuperAccessor = hasFlag(SUPERACCESSOR) - def isSynthetic = hasFlag(SYNTHETIC) - def isTrait = hasFlag(TRAIT) && !hasFlag(PARAM) - - def isDeferredOrDefault = hasFlag(DEFERRED | DEFAULTMETHOD) - def isDeferredNotDefault = isDeferred && !hasFlag(DEFAULTMETHOD) + def isPackage = hasFlag(PACKAGE) + def isPrivateLocal = hasAllFlags(PrivateLocal) + def isProtected = hasFlag(PROTECTED) + def isProtectedLocal = hasAllFlags(ProtectedLocal) + def isPublic = hasNoFlags(PRIVATE | PROTECTED) && !hasAccessBoundary + def isSealed = hasFlag(SEALED) + def isSpecialized = hasFlag(SPECIALIZED) + def isSuperAccessor = hasFlag(SUPERACCESSOR) + def isSynthetic = hasFlag(SYNTHETIC) + def isTrait = hasFlag(TRAIT) && !hasFlag(PARAM) + + def isDeferredOrJavaDefault = hasFlag(DEFERRED | JAVA_DEFAULTMETHOD) + def isDeferredNotJavaDefault = isDeferred && !hasFlag(JAVA_DEFAULTMETHOD) def flagBitsToString(bits: Long): String = { // Fast path for common case diff --git a/src/reflect/scala/reflect/internal/SymbolPairs.scala b/src/reflect/scala/reflect/internal/SymbolPairs.scala index 4763e77a34..a52d2d8510 100644 --- a/src/reflect/scala/reflect/internal/SymbolPairs.scala +++ b/src/reflect/scala/reflect/internal/SymbolPairs.scala @@ -217,7 +217,7 @@ abstract class SymbolPairs { bs(nshifted) |= nmask } - /** Implements `bs1 * bs2 * {0..n} != 0. + /** Implements `bs1 * bs2 * {0..n} != 0`. * Used in hasCommonParentAsSubclass */ private def intersectionContainsElementLeq(bs1: BitSet, bs2: BitSet, n: Int): Boolean = { val nshifted = n >> 5 diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala index 478b1b9732..8a52f0b9d8 100644 --- a/src/reflect/scala/reflect/internal/Symbols.scala +++ b/src/reflect/scala/reflect/internal/Symbols.scala @@ -102,6 +102,9 @@ trait Symbols extends api.Symbols { self: SymbolTable => def isPrivateThis = (this hasFlag PRIVATE) && (this hasFlag LOCAL) def isProtectedThis = (this hasFlag PROTECTED) && (this hasFlag LOCAL) + def isJavaEnum: Boolean = hasJavaEnumFlag + def isJavaAnnotation: Boolean = hasJavaAnnotationFlag + def newNestedSymbol(name: Name, pos: Position, newFlags: Long, isClass: Boolean): Symbol = name match { case n: TermName => newTermSymbol(n, pos, newFlags) case n: TypeName => if (isClass) newClassSymbol(n, pos, newFlags) else newNonClassSymbol(n, pos, newFlags) @@ -495,8 +498,8 @@ trait Symbols extends api.Symbols { self: SymbolTable => * failure to the point when that name is used for something, which is * often to the point of never. */ - def newStubSymbol(name: Name, missingMessage: String): Symbol = name match { - case n: TypeName => new StubClassSymbol(this, n, missingMessage) + def newStubSymbol(name: Name, missingMessage: String, isPackage: Boolean = false): Symbol = name match { + case n: TypeName => if (isPackage) new StubPackageClassSymbol(this, n, missingMessage) else new StubClassSymbol(this, n, missingMessage) case _ => new StubTermSymbol(this, name.toTermName, missingMessage) } @@ -732,7 +735,7 @@ trait Symbols extends api.Symbols { self: SymbolTable => final def flags: Long = { if (Statistics.hotEnabled) Statistics.incCounter(flagsCount) val fs = _rawflags & phase.flagMask - (fs | ((fs & LateFlags) >>> LateShift)) & ~(fs >>> AntiShift) + (fs | ((fs & LateFlags) >>> LateShift)) & ~((fs & AntiFlags) >>> AntiShift) } def flags_=(fs: Long) = _rawflags = fs def rawflags_=(x: Long) { _rawflags = x } @@ -980,7 +983,7 @@ trait Symbols extends api.Symbols { self: SymbolTable => private def isNotOverridden = ( owner.isClass && ( owner.isEffectivelyFinal - || owner.isSealed && owner.children.forall(c => c.isEffectivelyFinal && (overridingSymbol(c) == NoSymbol)) + || (owner.isSealed && owner.sealedChildren.forall(c => c.isEffectivelyFinal && (overridingSymbol(c) == NoSymbol))) ) ) @@ -992,6 +995,7 @@ trait Symbols extends api.Symbols { self: SymbolTable => isPrivate || isLocalToBlock ) + || isClass && originalOwner.isTerm && children.isEmpty // we track known subclasses of term-owned classes, use that infer finality ) /** Is this symbol effectively final or a concrete term member of sealed class whose children do not override it */ final def isEffectivelyFinalOrNotOverridden: Boolean = isEffectivelyFinal || (isTerm && !isDeferred && isNotOverridden) @@ -1159,7 +1163,7 @@ trait Symbols extends api.Symbols { self: SymbolTable => * phase check (if after flatten) in the (overridden) method "def owner" in * ModuleSymbol / ClassSymbol. The `rawowner` field is not modified. * - Owners are also changed in other situations, for example when moving trees into a new - * lexical context, e.g. in the named/default arguments tranformation, or when translating + * lexical context, e.g. in the named/default arguments transformation, or when translating * extension method definitions. * * In general when seeking the owner of a symbol, one should call `owner`. @@ -2495,14 +2499,15 @@ trait Symbols extends api.Symbols { self: SymbolTable => def associatedFile: AbstractFile = enclosingTopLevelClass.associatedFile def associatedFile_=(f: AbstractFile) { abort("associatedFile_= inapplicable for " + this) } - /** If this is a sealed class, its known direct subclasses. + /** If this is a sealed or local class, its known direct subclasses. * Otherwise, the empty set. */ def children: Set[Symbol] = Set() + final def sealedChildren: Set[Symbol] = if (!isSealed) Set.empty else children /** Recursively assemble all children of this symbol. */ - def sealedDescendants: Set[Symbol] = children.flatMap(_.sealedDescendants) + this + final def sealedDescendants: Set[Symbol] = if (!isSealed) Set(this) else children.flatMap(_.sealedDescendants) + this @inline final def orElse(alt: => Symbol): Symbol = if (this ne NoSymbol) this else alt @inline final def andAlso(f: Symbol => Unit): Symbol = { if (this ne NoSymbol) f(this) ; this } @@ -3471,6 +3476,7 @@ trait Symbols extends api.Symbols { self: SymbolTable => override def companionSymbol = fail(NoSymbol) } class StubClassSymbol(owner0: Symbol, name0: TypeName, val missingMessage: String) extends ClassSymbol(owner0, owner0.pos, name0) with StubSymbol + class StubPackageClassSymbol(owner0: Symbol, name0: TypeName, val missingMessage: String) extends PackageClassSymbol(owner0, owner0.pos, name0) with StubSymbol class StubTermSymbol(owner0: Symbol, name0: TermName, val missingMessage: String) extends TermSymbol(owner0, owner0.pos, name0) with StubSymbol trait FreeSymbol extends Symbol { diff --git a/src/reflect/scala/reflect/internal/TreeGen.scala b/src/reflect/scala/reflect/internal/TreeGen.scala index 894038dd0a..5c8ae17f5b 100644 --- a/src/reflect/scala/reflect/internal/TreeGen.scala +++ b/src/reflect/scala/reflect/internal/TreeGen.scala @@ -594,13 +594,12 @@ abstract class TreeGen { * TupleN(x_1, ..., x_N) * } ...) * - * If any of the P_i are variable patterns, the corresponding `x_i @ P_i' is not generated + * If any of the P_i are variable patterns, the corresponding `x_i @ P_i` is not generated * and the variable constituting P_i is used instead of x_i * - * @param mapName The name to be used for maps (either map or foreach) - * @param flatMapName The name to be used for flatMaps (either flatMap or foreach) * @param enums The enumerators in the for expression - * @param body The body of the for expression + * @param sugarBody The body of the for expression + * @param fresh A source of new names */ def mkFor(enums: List[Tree], sugarBody: Tree)(implicit fresh: FreshNameCreator): Tree = { val (mapName, flatMapName, body) = sugarBody match { diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala index 9c681f3423..375218248e 100644 --- a/src/reflect/scala/reflect/internal/Types.scala +++ b/src/reflect/scala/reflect/internal/Types.scala @@ -739,7 +739,7 @@ trait Types * * `SubstThisAndSymMap` performs a breadth-first map over this type, which meant that * symbol substitution occurred before `ThisType` substitution. Consequently, in substitution - * of a `SingleType(ThisType(`from`), sym), symbols were rebound to `from` rather than `to`. + * of a `SingleType(ThisType(from), sym)`, symbols were rebound to `from` rather than `to`. */ def substThisAndSym(from: Symbol, to: Type, symsFrom: List[Symbol], symsTo: List[Symbol]): Type = if (symsFrom eq symsTo) substThis(from, to) @@ -763,7 +763,7 @@ trait Types /** Apply `f` to each part of this type */ def foreach(f: Type => Unit) { new ForEachTypeTraverser(f).traverse(this) } - /** Apply `pf' to each part of this type on which the function is defined */ + /** Apply `pf` to each part of this type on which the function is defined */ def collect[T](pf: PartialFunction[Type, T]): List[T] = new CollectTypeCollector(pf).collect(this) /** Apply `f` to each part of this type; children get mapped before their parents */ @@ -2059,7 +2059,7 @@ trait Types /** SI-3731, SI-8177: when prefix is changed to `newPre`, maintain consistency of prefix and sym * (where the symbol refers to a declaration "embedded" in the prefix). * - * @returns newSym so that `newPre` binds `sym.name` to `newSym`, + * @return newSym so that `newPre` binds `sym.name` to `newSym`, * to remain consistent with `pre` previously binding `sym.name` to `sym`. * * `newSym` and `sym` are conceptually the same symbols, but some change to our `prefix` diff --git a/src/reflect/scala/reflect/internal/pickling/UnPickler.scala b/src/reflect/scala/reflect/internal/pickling/UnPickler.scala index 464bbad2cd..15e0f9cc14 100644 --- a/src/reflect/scala/reflect/internal/pickling/UnPickler.scala +++ b/src/reflect/scala/reflect/internal/pickling/UnPickler.scala @@ -168,7 +168,7 @@ abstract class UnPickler { } /** If entry at `i` is undefined, define it by performing - * operation `op` with `readIndex at start of i'th + * operation `op` with `readIndex` at start of i'th * entry. Restore `readIndex` afterwards. */ protected def at[T <: AnyRef](i: Int, op: () => T): T = { @@ -397,7 +397,7 @@ abstract class UnPickler { val sym = readSymbolRef() match { case stub: StubSymbol if !stub.isClass => // SI-8502 This allows us to create a stub for a unpickled reference to `missingPackage.Foo`. - stub.owner.newStubSymbol(stub.name.toTypeName, stub.missingMessage) + stub.owner.newStubSymbol(stub.name.toTypeName, stub.missingMessage, isPackage = true) case sym => sym } ThisType(sym) diff --git a/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala b/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala index 891fccb3e1..d6d216863b 100644 --- a/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala +++ b/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala @@ -739,7 +739,7 @@ private[internal] trait TypeMaps { substFor(sym) case ClassInfoType(parents, decls, sym) => val parents1 = parents mapConserve this - // We don't touch decls here; they will be touched when an enclosing TreeSubstitutor + // We don't touch decls here; they will be touched when an enclosing TreeSubstituter // transforms the tree that defines them. if (parents1 eq parents) tp else ClassInfoType(parents1, decls, sym) diff --git a/src/reflect/scala/reflect/internal/transform/Erasure.scala b/src/reflect/scala/reflect/internal/transform/Erasure.scala index 5a03c1eeaa..9853a0fa0c 100644 --- a/src/reflect/scala/reflect/internal/transform/Erasure.scala +++ b/src/reflect/scala/reflect/internal/transform/Erasure.scala @@ -90,7 +90,7 @@ trait Erasure { } } - /** Does this vakue class have an underlying type that's a type parameter of + /** Does this value class have an underlying type that's a type parameter of * the class itself? * This method needs to be called at a phase no later than erasurephase */ diff --git a/src/reflect/scala/reflect/internal/util/AbstractFileClassLoader.scala b/src/reflect/scala/reflect/internal/util/AbstractFileClassLoader.scala index 30dcbc21ca..5cbdb92664 100644 --- a/src/reflect/scala/reflect/internal/util/AbstractFileClassLoader.scala +++ b/src/reflect/scala/reflect/internal/util/AbstractFileClassLoader.scala @@ -12,7 +12,7 @@ import java.security.cert.Certificate import java.security.{ ProtectionDomain, CodeSource } import java.util.{ Collections => JCollections, Enumeration => JEnumeration } -/** A class loader that loads files from a {@link scala.tools.nsc.io.AbstractFile}. +/** A class loader that loads files from a [[scala.reflect.io.AbstractFile]]. * * @author Lex Spoon */ diff --git a/src/reflect/scala/reflect/runtime/TwoWayCache.scala b/src/reflect/scala/reflect/runtime/TwoWayCache.scala index d0fc3dac74..6c1ca5b571 100644 --- a/src/reflect/scala/reflect/runtime/TwoWayCache.scala +++ b/src/reflect/scala/reflect/runtime/TwoWayCache.scala @@ -26,8 +26,7 @@ private[runtime] class TwoWayCache[J, S] { private object SomeRef { def unapply[T](optRef: Option[WeakReference[T]]): Option[T] = if (optRef.nonEmpty) { - val result = optRef.get.get - if (result != null) Some(result) else None + Option(optRef.get.get) } else None } diff --git a/src/reflect/scala/reflect/runtime/TwoWayCaches.scala b/src/reflect/scala/reflect/runtime/TwoWayCaches.scala index 6e2890e536..6ce0c0a728 100644 --- a/src/reflect/scala/reflect/runtime/TwoWayCaches.scala +++ b/src/reflect/scala/reflect/runtime/TwoWayCaches.scala @@ -26,8 +26,7 @@ private[runtime] trait TwoWayCaches { self: SymbolTable => private object SomeRef { def unapply[T](optRef: Option[WeakReference[T]]): Option[T] = if (optRef.nonEmpty) { - val result = optRef.get.get - if (result != null) Some(result) else None + Option(optRef.get.get) } else None } diff --git a/src/scaladoc/scala/tools/nsc/doc/html/page/Template.scala b/src/scaladoc/scala/tools/nsc/doc/html/page/Template.scala index 99f989aadf..743c2a401c 100644 --- a/src/scaladoc/scala/tools/nsc/doc/html/page/Template.scala +++ b/src/scaladoc/scala/tools/nsc/doc/html/page/Template.scala @@ -280,7 +280,7 @@ class Template(universe: doc.Universe, generator: DiagramGenerator, tpl: DocTemp { if (Set("epfl", "EPFL").contains(tpl.universe.settings.docfooter.value)) - <div id="footer">Scala programming documentation. Copyright (c) 2003-2013 <a href="http://www.epfl.ch" target="_top">EPFL</a>, with contributions from <a href="http://typesafe.com" target="_top">Typesafe</a>.</div> + <div id="footer">Scala programming documentation. Copyright (c) 2003-2015 <a href="http://www.epfl.ch" target="_top">EPFL</a>, with contributions from <a href="http://typesafe.com" target="_top">Typesafe</a>.</div> else <div id="footer"> { tpl.universe.settings.docfooter.value } </div> } @@ -682,7 +682,6 @@ class Template(universe: doc.Universe, generator: DiagramGenerator, tpl: DocTemp if (diagramSvg != NodeSeq.Empty) { <div class="toggleContainer block diagram-container" id={ id + "-container"}> <span class="toggle diagram-link">{ description }</span> - <a href="http://docs.scala-lang.org/overviews/scaladoc/usage.html#diagrams" target="_blank" class="diagram-help">Learn more about scaladoc diagrams</a> <div class="diagram" id={ id }>{ diagramSvg }</div> diff --git a/src/scaladoc/scala/tools/nsc/doc/model/CommentFactory.scala b/src/scaladoc/scala/tools/nsc/doc/model/CommentFactory.scala index fe157c1cc9..66ce2137f2 100644 --- a/src/scaladoc/scala/tools/nsc/doc/model/CommentFactory.scala +++ b/src/scaladoc/scala/tools/nsc/doc/model/CommentFactory.scala @@ -31,7 +31,7 @@ trait CommentFactory extends base.CommentFactoryBase { defineComment(sym, linkTarget, inTpl) }) - /** A comment is usualy created by the parser, however for some special + /** A comment is usually created by the parser, however for some special * cases we have to give some `inTpl` comments (parent class for example) * to the comment of the symbol. * This function manages some of those cases : Param accessor and Primary constructor */ diff --git a/src/scaladoc/scala/tools/nsc/doc/model/diagram/Diagram.scala b/src/scaladoc/scala/tools/nsc/doc/model/diagram/Diagram.scala index 1846f375cd..e15963bda9 100644 --- a/src/scaladoc/scala/tools/nsc/doc/model/diagram/Diagram.scala +++ b/src/scaladoc/scala/tools/nsc/doc/model/diagram/Diagram.scala @@ -99,7 +99,7 @@ case class NormalNode(tpe: TypeEntity, tpl: Option[TemplateEntity])(val tooltip: /** A class or trait the thisnode can be converted to by an implicit conversion * TODO: I think it makes more sense to use the tpe links to templates instead of the TemplateEntity for implicit nodes - * since some implicit conversions convert the class to complex types that cannot be represented as a single tmeplate + * since some implicit conversions convert the class to complex types that cannot be represented as a single template */ case class ImplicitNode(tpe: TypeEntity, tpl: Option[TemplateEntity])(val tooltip: Option[String] = None) extends Node { override def isImplicitNode = true } diff --git a/src/scalap/decoder.properties b/src/scalap/decoder.properties index 961c60f48c..333f6ce715 100644 --- a/src/scalap/decoder.properties +++ b/src/scalap/decoder.properties @@ -1,2 +1,2 @@ version.number=2.0.1 -copyright.string=(c) 2002-2013 LAMP/EPFL +copyright.string=(c) 2002-2015 LAMP/EPFL 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/disabled/run/applet-prop.scala b/test/disabled/run/applet-prop.scala index 9c29dfd979..7a98c25cab 100644 --- a/test/disabled/run/applet-prop.scala +++ b/test/disabled/run/applet-prop.scala @@ -8,7 +8,7 @@ class S extends javax.swing.JApplet { object Test extends SecurityTest { val s = new S - // lazy val TestKey = sys.SystemProperties.noTraceSupression.key + // lazy val TestKey = sys.SystemProperties.noTraceSuppression.key // def hitPerm() = new Throwable with scala.util.control.ControlThrowable { } // // var throwing = false 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/innerClassAttribute/Test.scala b/test/files/jvm/innerClassAttribute/Test.scala index ca50beae7f..702e5e279a 100644 --- a/test/files/jvm/innerClassAttribute/Test.scala +++ b/test/files/jvm/innerClassAttribute/Test.scala @@ -145,9 +145,7 @@ object Test extends BytecodeTest { def testA11() = { val List(ann) = innerClassNodes("A11") - // in the java class file, the INNERCLASS attribute has more flags (public | static | abstract | interface | annotation) - // the scala compiler has its own interpretation of java annotations ant their flags.. it only emits publicStatic. - assertMember(ann, "JavaAnnot_1", "Ann", flags = publicStatic) + assertMember(ann, "JavaAnnot_1", "Ann", flags = publicAbstractInterface | Flags.ACC_STATIC | Flags.ACC_ANNOTATION) } def testA13() = { 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") } }) } } diff --git a/test/files/neg/t7214neg.scala b/test/files/neg/t7214neg.scala index ff1ea8082d..e2b2d908d8 100644 --- a/test/files/neg/t7214neg.scala +++ b/test/files/neg/t7214neg.scala @@ -1,4 +1,4 @@ -// pattern matcher crashes here trying to synthesize an uneeded outer test. +// pattern matcher crashes here trying to synthesize an unneeded outer test. // no-symbol does not have an owner // at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:49) // at scala.tools.nsc.Global.abort(Global.scala:253) diff --git a/test/files/neg/t9401.check b/test/files/neg/t9401.check new file mode 100644 index 0000000000..638d56db63 --- /dev/null +++ b/test/files/neg/t9401.check @@ -0,0 +1,4 @@ +t9401.scala:3: error: cannot find class tag for element type T + gencastarray = new Array[T](0) + ^ +one error found diff --git a/test/files/neg/t9401.scala b/test/files/neg/t9401.scala new file mode 100644 index 0000000000..f42ecc7f74 --- /dev/null +++ b/test/files/neg/t9401.scala @@ -0,0 +1,4 @@ +class Resetting[T] { + var gencastarray: Any = null + gencastarray = new Array[T](0) +} diff --git a/test/files/neg/warn-unused-imports.check b/test/files/neg/warn-unused-imports.check index 36c6dd03c3..0a53d7a9cd 100644 --- a/test/files/neg/warn-unused-imports.check +++ b/test/files/neg/warn-unused-imports.check @@ -1,33 +1,55 @@ -warn-unused-imports.scala:57: warning: Unused import +warn-unused-imports_2.scala:133: error: type mismatch; + found : Int(42) + required: Sample.X + f(42) // error + ^ +warn-unused-imports_2.scala:57: warning: Unused import import p1.A // warn ^ -warn-unused-imports.scala:62: warning: Unused import +warn-unused-imports_2.scala:62: warning: Unused import import p1.{ A, B } // warn on A ^ -warn-unused-imports.scala:67: warning: Unused import +warn-unused-imports_2.scala:67: warning: Unused import import p1.{ A, B } // warn on both ^ -warn-unused-imports.scala:67: warning: Unused import +warn-unused-imports_2.scala:67: warning: Unused import import p1.{ A, B } // warn on both ^ -warn-unused-imports.scala:73: warning: Unused import +warn-unused-imports_2.scala:73: warning: Unused import import c._ // warn ^ -warn-unused-imports.scala:78: warning: Unused import +warn-unused-imports_2.scala:78: warning: Unused import import p1._ // warn ^ -warn-unused-imports.scala:85: warning: Unused import +warn-unused-imports_2.scala:85: warning: Unused import import c._ // warn ^ -warn-unused-imports.scala:91: warning: Unused import +warn-unused-imports_2.scala:91: warning: Unused import import p1.c._ // warn ^ -warn-unused-imports.scala:98: warning: Unused import +warn-unused-imports_2.scala:98: warning: Unused import import p1._ // warn ^ -warn-unused-imports.scala:118: warning: Unused import +warn-unused-imports_2.scala:118: warning: Unused import import p1.A // warn ^ -error: No warnings can be incurred under -Xfatal-warnings. -10 warnings found +warn-unused-imports_2.scala:132: warning: Unused import + import Sample.Implicits._ // warn + ^ +warn-unused-imports_2.scala:143: warning: Unused import + import Sample.Implicits.useless // warn + ^ +warn-unused-imports_2.scala:147: warning: Unused import + import java.io.File // warn + ^ +warn-unused-imports_2.scala:148: warning: Unused import + import scala.concurrent.Future // warn + ^ +warn-unused-imports_2.scala:149: warning: Unused import + import scala.concurrent.ExecutionContext.Implicits.global // warn + ^ +warn-unused-imports_2.scala:150: warning: Unused import + import p1.A // warn + ^ +16 warnings found one error found diff --git a/test/files/neg/warn-unused-imports/sample_1.scala b/test/files/neg/warn-unused-imports/sample_1.scala new file mode 100644 index 0000000000..d2f86239db --- /dev/null +++ b/test/files/neg/warn-unused-imports/sample_1.scala @@ -0,0 +1,17 @@ + +import language._ + +object Sample { + trait X + trait Y + + // import of the non-implicit should be unused + object Implicits { + def `int to X`(i: Int): X = null + implicit def `int to Y`(i: Int): Y = null + implicit def useless(i: Int): String = null + } + + def f(x: X) = ??? + def g(y: Y) = ??? +} diff --git a/test/files/neg/warn-unused-imports.scala b/test/files/neg/warn-unused-imports/warn-unused-imports_2.scala index b7a2f1c414..ded1186209 100644 --- a/test/files/neg/warn-unused-imports.scala +++ b/test/files/neg/warn-unused-imports/warn-unused-imports_2.scala @@ -123,3 +123,33 @@ trait Nested { println(new Warn { }) } } + +// test unusage of imports from other compilation units after implicit search +trait Outsiders { + { + //implicit search should not disable warning + import Sample._ + import Sample.Implicits._ // warn + f(42) // error + } + { + import Sample._ + import Sample.Implicits._ // nowarn + g(42) // ok + } + { + import Sample._ + import Sample.Implicits.`int to Y` // nowarn + import Sample.Implicits.useless // warn + g(42) // ok + } + { + import java.io.File // warn + import scala.concurrent.Future // warn + import scala.concurrent.ExecutionContext.Implicits.global // warn + import p1.A // warn + import p1.B // no warn + println("abc".bippy) + //Future("abc".bippy) + } +} diff --git a/test/files/pos/t6089b.scala b/test/files/pos/t6089b.scala index ff7ca157eb..040987413e 100644 --- a/test/files/pos/t6089b.scala +++ b/test/files/pos/t6089b.scala @@ -1,5 +1,5 @@ // this crazy code simply tries to nest pattern matches so that the last call is in a tricky-to-determine -// tail position (my initial tightenign of tailpos detection for SI-6089 ruled this out) +// tail position (my initial tightening of tailpos detection for SI-6089 ruled this out) class BKTree { @annotation.tailrec final def -?-[AA](a: AA): Boolean = this match { diff --git a/test/files/pos/t7689.scala b/test/files/pos/t7689.scala index 022e7ab7a0..72cca99bc0 100644 --- a/test/files/pos/t7689.scala +++ b/test/files/pos/t7689.scala @@ -2,6 +2,6 @@ object A { // The default getter must have an explicit return type (List[_] => Int) // This wasn't happening since e28c3edda4. That commit encoded upper/lower // bounds of Any/Nothing as EmptyTree, which were triggering an .isEmpty - // check in Namers#TypeTreeSubstitutor + // check in Namers#TypeTreeSubstituter def x(f: List[_] => Int = _ => 3) = 9 } diff --git a/test/files/pos/t9370/ThePlugin.scala b/test/files/pos/t9370/ThePlugin.scala new file mode 100644 index 0000000000..cd800781dc --- /dev/null +++ b/test/files/pos/t9370/ThePlugin.scala @@ -0,0 +1,31 @@ +package scala.test.plugins + +import scala.tools.nsc +import nsc.Global +import nsc.Phase +import nsc.plugins.Plugin +import nsc.plugins.PluginComponent + +class ThePlugin(val global: Global) extends Plugin { + import global._ + + val name = "timebomb" + val description = "Explodes if run. Maybe I haven't implemented it yet." + val components = List[PluginComponent](thePhase1) + + private object thePhase1 extends PluginComponent { + val global = ThePlugin.this.global + + val runsAfter = List[String]("parser") + override val runsBefore = List[String]("namer") + val phaseName = ThePlugin.this.name + + def newPhase(prev: Phase) = new ThePhase(prev) + } + + private class ThePhase(prev: Phase) extends Phase(prev) { + override def name = ThePlugin.this.name + override def run = ??? + } +} + diff --git a/test/files/pos/t9370/sample_2.flags b/test/files/pos/t9370/sample_2.flags new file mode 100644 index 0000000000..03baca3030 --- /dev/null +++ b/test/files/pos/t9370/sample_2.flags @@ -0,0 +1 @@ +-Xplugin:/tmp:. -Xplugin-require:timebomb -Ystop-after:parser diff --git a/test/files/pos/t9370/sample_2.scala b/test/files/pos/t9370/sample_2.scala new file mode 100644 index 0000000000..7eb11b8204 --- /dev/null +++ b/test/files/pos/t9370/sample_2.scala @@ -0,0 +1,6 @@ + +package sample + +// just a sample that is compiled with the explosive plugin disabled +object Sample extends App { +} diff --git a/test/files/pos/t9370/scalac-plugin.xml b/test/files/pos/t9370/scalac-plugin.xml new file mode 100644 index 0000000000..2558d6fd03 --- /dev/null +++ b/test/files/pos/t9370/scalac-plugin.xml @@ -0,0 +1,5 @@ +<plugin> + <name>ignored</name> + <classname>scala.test.plugins.ThePlugin</classname> +</plugin> + diff --git a/test/files/pos/t9393/Named.java b/test/files/pos/t9393/Named.java deleted file mode 100644 index 144ddbf26e..0000000000 --- a/test/files/pos/t9393/Named.java +++ /dev/null @@ -1,3 +0,0 @@ -package bug; - -public @interface Named {} diff --git a/test/files/pos/t9393/NamedImpl.java b/test/files/pos/t9393/NamedImpl_1.java index 7918739c2b..02ec9b4671 100644 --- a/test/files/pos/t9393/NamedImpl.java +++ b/test/files/pos/t9393/NamedImpl_1.java @@ -3,11 +3,11 @@ */ package bug; -import bug.Named; +import bug.Named_1; import java.io.Serializable; import java.lang.annotation.Annotation; -public class NamedImpl implements Named { +public class NamedImpl_1 implements Named_1 { public Class<? extends Annotation> annotationType() { return null; diff --git a/test/files/pos/t9393/NamedImpl_2.java b/test/files/pos/t9393/NamedImpl_2.java new file mode 100644 index 0000000000..c87e94016d --- /dev/null +++ b/test/files/pos/t9393/NamedImpl_2.java @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2009-2015 Typesafe Inc. <http://www.typesafe.com> + */ +package bug; + +import bug.Named_2; +import java.io.Serializable; +import java.lang.annotation.Annotation; + +public class NamedImpl_2 implements Named_2 { + + public Class<? extends Annotation> annotationType() { + return null; + } +} diff --git a/test/files/pos/t9393/Named_1.java b/test/files/pos/t9393/Named_1.java new file mode 100644 index 0000000000..30a6c9839a --- /dev/null +++ b/test/files/pos/t9393/Named_1.java @@ -0,0 +1,3 @@ +package bug; + +public @interface Named_1 {} diff --git a/test/files/pos/t9393/Named_2.java b/test/files/pos/t9393/Named_2.java new file mode 100644 index 0000000000..3210fb636a --- /dev/null +++ b/test/files/pos/t9393/Named_2.java @@ -0,0 +1,3 @@ +package bug; + +public @interface Named_2 {} diff --git a/test/files/pos/t9393/test.scala b/test/files/pos/t9393/test.scala deleted file mode 100644 index 4df0476c98..0000000000 --- a/test/files/pos/t9393/test.scala +++ /dev/null @@ -1,3 +0,0 @@ -class C { - new bug.NamedImpl -} diff --git a/test/files/pos/t9393/test_2.scala b/test/files/pos/t9393/test_2.scala new file mode 100644 index 0000000000..8ea346129d --- /dev/null +++ b/test/files/pos/t9393/test_2.scala @@ -0,0 +1,4 @@ +class C { + new bug.NamedImpl_1 // separate compilation, testing the classfile parser + new bug.NamedImpl_2 // mixed compilation, testing the java source parser +} diff --git a/test/files/run/t2127.scala b/test/files/run/t2127.scala index 869d8a38d6..839c8d6a5c 100755 --- a/test/files/run/t2127.scala +++ b/test/files/run/t2127.scala @@ -28,5 +28,5 @@ } -The constructor invocation of Bar is done within the scope of object Foo's constructor, and therefor the private constructor of Foo should be visible and accessible. +The constructor invocation of Bar is done within the scope of object Foo's constructor, and therefore the private constructor of Foo should be visible and accessible. */ diff --git a/test/files/run/t720.scala b/test/files/run/t720.scala new file mode 100644 index 0000000000..a5cb2495cf --- /dev/null +++ b/test/files/run/t720.scala @@ -0,0 +1,48 @@ +class Lazy(f: => Int) { + lazy val get: Int = f +} + +class UsedLater(f: => Int) { + lazy val get: Int = f + def other = f +} + +class TransientLazy(f: => Int) { + @transient + lazy val get: Int = f +} + +object Test { + def main(args: Array[String]): Unit = { + testLazy() + testUsedLater() + } + + def testLazy() { + val o = new Lazy("".length) + val f = classOf[Lazy].getDeclaredField("f") + f.setAccessible(true) + assert(f.get(o) != null) + o.get + assert(f.get(o) == null) + } + + def testUsedLater() { + val o = new UsedLater("".length) + val f = classOf[UsedLater].getDeclaredField("f") + f.setAccessible(true) + assert(f.get(o) != null) + o.get + assert(f.get(o) != null) + } + + def testTransientLazy() { + val o = new TransientLazy("".length) + val f = classOf[TransientLazy].getDeclaredField("f") + f.setAccessible(true) + assert(f.get(o) != null) + o.get + assert(f.get(o) != null) // SI-9365 + } +} + diff --git a/test/files/run/t7214.scala b/test/files/run/t7214.scala index 15c2c24fa0..b2ef53eeab 100644 --- a/test/files/run/t7214.scala +++ b/test/files/run/t7214.scala @@ -1,4 +1,4 @@ -// pattern matcher crashes here trying to synthesize an uneeded outer test. +// pattern matcher crashes here trying to synthesize an unneeded outer test. // no-symbol does not have an owner // at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:49) // at scala.tools.nsc.Global.abort(Global.scala:253) diff --git a/test/files/run/t8502b.scala b/test/files/run/t8502b.scala new file mode 100644 index 0000000000..4f70d13bb0 --- /dev/null +++ b/test/files/run/t8502b.scala @@ -0,0 +1,46 @@ +import scala.tools.partest._ +import java.io.File + +// used to crash with an assertion failure in flatten because the type symbol created for the missing +// package was a ClassSymbol, not a PackageClassSymbol +// - isFlattenablePrefix(vanishingPackage) was true (wrongly) +// - therefore flatten tried to flatten the class defined in the package, but the class is +// top-level, vanishingClass.enclosingTopLevelClass is NoSymbol +object Test extends StoreReporterDirectTest { + def code = ??? + + def compileCode(code: String) = { + val classpath = List(sys.props("partest.lib"), testOutput.path) mkString sys.props("path.separator") + compileString(newCompiler("-cp", classpath, "-d", testOutput.path))(code) + } + + def show(): Unit = { + compileCode(""" + class Outer { + class Nested extends vanishing.Vanishing + } + + package vanishing { + class Vanishing + } + """) + assert(filteredInfos.isEmpty, filteredInfos) + deletePackage("vanishing") + compileCode(""" + class Test { + def f(o: Outer): Outer = o + } + """) + assert(storeReporter.infos.isEmpty, storeReporter.infos.mkString("\n")) // Included a MissingRequirementError before. + } + + def deletePackage(name: String) { + val directory = new File(testOutput.path, name) + for (f <- directory.listFiles()) { + assert(f.getName.endsWith(".class")) + assert(f.delete()) + } + assert(directory.listFiles().isEmpty) + assert(directory.delete()) + } +} diff --git a/test/files/run/t8549.scala b/test/files/run/t8549.scala index da1a9d58c1..2d3f33537d 100644 --- a/test/files/run/t8549.scala +++ b/test/files/run/t8549.scala @@ -79,7 +79,7 @@ object Test extends App { } } - // Generated on 20150519-10:11:14 with Scala version 2.12.0-20150517-213212-4c1ce60ef9) + // Generated on 20150330-15:20:14 with Scala version 2.12.0-20150330-143836-a91b76ea6c) overwrite.foreach(updateComment) check(Some(1))("rO0ABXNyAApzY2FsYS5Tb21lESLyaV6hi3QCAAFMAAF4dAASTGphdmEvbGFuZy9PYmplY3Q7eHIADHNjYWxhLk9wdGlvbv5pN/3bDmZ0AgAAeHBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAQ==") @@ -115,6 +115,19 @@ object Test extends App { // TODO SI-8576 unstable under -Xcheckinit check(collection.convert.Wrappers)( "rO0ABXNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcA==") + + check(new collection.convert.Wrappers.SetWrapper(immutable.Set()))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkU2V0V3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkU2V0V3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL1NldDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyAChzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TZXQkRW1wdHlTZXQk8Hk3TFN0uDYCAAB4cA==") + check(new collection.convert.Wrappers.SetWrapper(immutable.Set(1, 2, 3)))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkU2V0V3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkU2V0V3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL1NldDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACNzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TZXQkU2V0M84syT0560SgAgADTAAFZWxlbTF0ABJMamF2YS9sYW5nL09iamVjdDtMAAVlbGVtMnEAfgAZTAAFZWxlbTNxAH4AGXhwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcQB+ABsAAAACc3EAfgAbAAAAAw==") + check(new collection.convert.Wrappers.SetWrapper(mutable.Set()))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkU2V0V3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkU2V0V3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL1NldDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaFNldAAAAAAAAAABAwAAeHB3DQAAAcIAAAAAAAAABQB4") + check(new collection.convert.Wrappers.SetWrapper(mutable.Set(1, 2, 3)))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkU2V0V3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkU2V0V3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL1NldDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaFNldAAAAAAAAAABAwAAeHB3DQAAAcIAAAADAAAABQBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AGgAAAAJzcQB+ABoAAAADeA==") + check(new collection.convert.Wrappers.MutableSetWrapper(mutable.Set()))("rO0ABXNyADNzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXK9XXTONonwwgIAAUwACnVuZGVybHlpbmd0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1NldDt4cgAsc2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJFNldFdyYXBwZXIAAAAAAAAAAQIAAkwABiRvdXRlcnQAI0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnM7TAA4c2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJFNldFdyYXBwZXIkJHVuZGVybHlpbmd0ABZMc2NhbGEvY29sbGVjdGlvbi9TZXQ7eHBzcgAic2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJK60s4os2ryBAgASTAAYRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA2THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyREaWN0aW9uYXJ5V3JhcHBlciQ7TAAWSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSXRlcmFibGVXcmFwcGVyJDtMABZJdGVyYXRvcldyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYXRvcldyYXBwZXIkO0wAGUpDb2xsZWN0aW9uV3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpDb2xsZWN0aW9uV3JhcHBlciQ7TAAcSkNvbmN1cnJlbnRNYXBXcmFwcGVyJG1vZHVsZXQAOkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbmN1cnJlbnRNYXBXcmFwcGVyJDtMABlKRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRGljdGlvbmFyeVdyYXBwZXIkO0wAGkpFbnVtZXJhdGlvbldyYXBwZXIkbW9kdWxldAA4THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRW51bWVyYXRpb25XcmFwcGVyJDtMABdKSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhYmxlV3JhcHBlciQ7TAAXSkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADVMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpJdGVyYXRvcldyYXBwZXIkO0wAE0pMaXN0V3JhcHBlciRtb2R1bGV0ADFMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpMaXN0V3JhcHBlciQ7TAASSk1hcFdyYXBwZXIkbW9kdWxldAAwTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKTWFwV3JhcHBlciQ7TAAZSlByb3BlcnRpZXNXcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlByb3BlcnRpZXNXcmFwcGVyJDtMABJKU2V0V3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpTZXRXcmFwcGVyJDtMABtNdXRhYmxlQnVmZmVyV3JhcHBlciRtb2R1bGV0ADlMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVCdWZmZXJXcmFwcGVyJDtMABhNdXRhYmxlTWFwV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVNYXBXcmFwcGVyJDtMABhNdXRhYmxlU2VxV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXFXcmFwcGVyJDtMABhNdXRhYmxlU2V0V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXRXcmFwcGVyJDtMABFTZXFXcmFwcGVyJG1vZHVsZXQAL0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkU2VxV3JhcHBlciQ7eHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkhhc2hTZXQAAAAAAAAAAQMAAHhwdw0AAAHCAAAAAAAAAAUAeHEAfgAb") + check(new collection.convert.Wrappers.MutableSetWrapper(mutable.Set(1, 2, 3)))("rO0ABXNyADNzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXK9XXTONonwwgIAAUwACnVuZGVybHlpbmd0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1NldDt4cgAsc2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJFNldFdyYXBwZXIAAAAAAAAAAQIAAkwABiRvdXRlcnQAI0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnM7TAA4c2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJFNldFdyYXBwZXIkJHVuZGVybHlpbmd0ABZMc2NhbGEvY29sbGVjdGlvbi9TZXQ7eHBzcgAic2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJK60s4os2ryBAgASTAAYRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA2THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyREaWN0aW9uYXJ5V3JhcHBlciQ7TAAWSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSXRlcmFibGVXcmFwcGVyJDtMABZJdGVyYXRvcldyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYXRvcldyYXBwZXIkO0wAGUpDb2xsZWN0aW9uV3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpDb2xsZWN0aW9uV3JhcHBlciQ7TAAcSkNvbmN1cnJlbnRNYXBXcmFwcGVyJG1vZHVsZXQAOkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbmN1cnJlbnRNYXBXcmFwcGVyJDtMABlKRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRGljdGlvbmFyeVdyYXBwZXIkO0wAGkpFbnVtZXJhdGlvbldyYXBwZXIkbW9kdWxldAA4THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRW51bWVyYXRpb25XcmFwcGVyJDtMABdKSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhYmxlV3JhcHBlciQ7TAAXSkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADVMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpJdGVyYXRvcldyYXBwZXIkO0wAE0pMaXN0V3JhcHBlciRtb2R1bGV0ADFMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpMaXN0V3JhcHBlciQ7TAASSk1hcFdyYXBwZXIkbW9kdWxldAAwTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKTWFwV3JhcHBlciQ7TAAZSlByb3BlcnRpZXNXcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlByb3BlcnRpZXNXcmFwcGVyJDtMABJKU2V0V3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpTZXRXcmFwcGVyJDtMABtNdXRhYmxlQnVmZmVyV3JhcHBlciRtb2R1bGV0ADlMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVCdWZmZXJXcmFwcGVyJDtMABhNdXRhYmxlTWFwV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVNYXBXcmFwcGVyJDtMABhNdXRhYmxlU2VxV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXFXcmFwcGVyJDtMABhNdXRhYmxlU2V0V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXRXcmFwcGVyJDtMABFTZXFXcmFwcGVyJG1vZHVsZXQAL0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkU2VxV3JhcHBlciQ7eHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkhhc2hTZXQAAAAAAAAAAQMAAHhwdw0AAAHCAAAAAwAAAAUAc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcQB+ABwAAAACc3EAfgAcAAAAA3hxAH4AGw==") + check(new collection.convert.Wrappers.MapWrapper(immutable.Map()))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTWFwV3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkTWFwV3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL01hcDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyAChzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5NYXAkRW1wdHlNYXAknTcK54mVQiQCAAB4cA==") + check(new collection.convert.Wrappers.MapWrapper(immutable.Map[Int, Int](1 -> 2, 2 -> 3, 3 -> 4)))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTWFwV3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkTWFwV3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL01hcDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACNzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5NYXAkTWFwM6csFD+HjyRxAgAGTAAEa2V5MXQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABGtleTJxAH4AGUwABGtleTNxAH4AGUwABnZhbHVlMXEAfgAZTAAGdmFsdWUycQB+ABlMAAZ2YWx1ZTNxAH4AGXhwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcQB+ABsAAAACc3EAfgAbAAAAA3EAfgAecQB+AB9zcQB+ABsAAAAE") + check(new collection.convert.Wrappers.MapWrapper(mutable.Map()))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTWFwV3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkTWFwV3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL01hcDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaE1hcAAAAAAAAAABAwAAeHB3DQAAAu4AAAAAAAAABAB4") + check(new collection.convert.Wrappers.MapWrapper(mutable.Map[Int, Int](1 -> 2, 2 -> 3, 3 -> 4)))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTWFwV3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkTWFwV3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL01hcDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaE1hcAAAAAAAAAABAwAAeHB3DQAAAu4AAAADAAAABABzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAnNxAH4AGgAAAANzcQB+ABoAAAABcQB+ABxxAH4AHXNxAH4AGgAAAAR4") + check(new collection.convert.Wrappers.MutableMapWrapper(mutable.Map()))("rO0ABXNyADNzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXJ4TG6ffKy11wIAAUwACnVuZGVybHlpbmd0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL01hcDt4cgAsc2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJE1hcFdyYXBwZXIAAAAAAAAAAQIAAkwABiRvdXRlcnQAI0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnM7TAA4c2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJE1hcFdyYXBwZXIkJHVuZGVybHlpbmd0ABZMc2NhbGEvY29sbGVjdGlvbi9NYXA7eHBzcgAic2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJK60s4os2ryBAgASTAAYRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA2THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyREaWN0aW9uYXJ5V3JhcHBlciQ7TAAWSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSXRlcmFibGVXcmFwcGVyJDtMABZJdGVyYXRvcldyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYXRvcldyYXBwZXIkO0wAGUpDb2xsZWN0aW9uV3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpDb2xsZWN0aW9uV3JhcHBlciQ7TAAcSkNvbmN1cnJlbnRNYXBXcmFwcGVyJG1vZHVsZXQAOkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbmN1cnJlbnRNYXBXcmFwcGVyJDtMABlKRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRGljdGlvbmFyeVdyYXBwZXIkO0wAGkpFbnVtZXJhdGlvbldyYXBwZXIkbW9kdWxldAA4THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRW51bWVyYXRpb25XcmFwcGVyJDtMABdKSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhYmxlV3JhcHBlciQ7TAAXSkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADVMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpJdGVyYXRvcldyYXBwZXIkO0wAE0pMaXN0V3JhcHBlciRtb2R1bGV0ADFMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpMaXN0V3JhcHBlciQ7TAASSk1hcFdyYXBwZXIkbW9kdWxldAAwTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKTWFwV3JhcHBlciQ7TAAZSlByb3BlcnRpZXNXcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlByb3BlcnRpZXNXcmFwcGVyJDtMABJKU2V0V3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpTZXRXcmFwcGVyJDtMABtNdXRhYmxlQnVmZmVyV3JhcHBlciRtb2R1bGV0ADlMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVCdWZmZXJXcmFwcGVyJDtMABhNdXRhYmxlTWFwV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVNYXBXcmFwcGVyJDtMABhNdXRhYmxlU2VxV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXFXcmFwcGVyJDtMABhNdXRhYmxlU2V0V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXRXcmFwcGVyJDtMABFTZXFXcmFwcGVyJG1vZHVsZXQAL0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkU2VxV3JhcHBlciQ7eHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkhhc2hNYXAAAAAAAAAAAQMAAHhwdw0AAALuAAAAAAAAAAQAeHEAfgAb") + check(new collection.convert.Wrappers.MutableMapWrapper(mutable.Map[Int, Int](1 -> 2, 2 -> 3, 3 -> 4)))("rO0ABXNyADNzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXJ4TG6ffKy11wIAAUwACnVuZGVybHlpbmd0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL01hcDt4cgAsc2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJE1hcFdyYXBwZXIAAAAAAAAAAQIAAkwABiRvdXRlcnQAI0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnM7TAA4c2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJE1hcFdyYXBwZXIkJHVuZGVybHlpbmd0ABZMc2NhbGEvY29sbGVjdGlvbi9NYXA7eHBzcgAic2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJK60s4os2ryBAgASTAAYRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA2THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyREaWN0aW9uYXJ5V3JhcHBlciQ7TAAWSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSXRlcmFibGVXcmFwcGVyJDtMABZJdGVyYXRvcldyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYXRvcldyYXBwZXIkO0wAGUpDb2xsZWN0aW9uV3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpDb2xsZWN0aW9uV3JhcHBlciQ7TAAcSkNvbmN1cnJlbnRNYXBXcmFwcGVyJG1vZHVsZXQAOkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbmN1cnJlbnRNYXBXcmFwcGVyJDtMABlKRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRGljdGlvbmFyeVdyYXBwZXIkO0wAGkpFbnVtZXJhdGlvbldyYXBwZXIkbW9kdWxldAA4THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRW51bWVyYXRpb25XcmFwcGVyJDtMABdKSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhYmxlV3JhcHBlciQ7TAAXSkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADVMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpJdGVyYXRvcldyYXBwZXIkO0wAE0pMaXN0V3JhcHBlciRtb2R1bGV0ADFMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpMaXN0V3JhcHBlciQ7TAASSk1hcFdyYXBwZXIkbW9kdWxldAAwTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKTWFwV3JhcHBlciQ7TAAZSlByb3BlcnRpZXNXcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlByb3BlcnRpZXNXcmFwcGVyJDtMABJKU2V0V3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpTZXRXcmFwcGVyJDtMABtNdXRhYmxlQnVmZmVyV3JhcHBlciRtb2R1bGV0ADlMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVCdWZmZXJXcmFwcGVyJDtMABhNdXRhYmxlTWFwV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVNYXBXcmFwcGVyJDtMABhNdXRhYmxlU2VxV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXFXcmFwcGVyJDtMABhNdXRhYmxlU2V0V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXRXcmFwcGVyJDtMABFTZXFXcmFwcGVyJG1vZHVsZXQAL0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkU2VxV3JhcHBlciQ7eHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkhhc2hNYXAAAAAAAAAAAQMAAHhwdw0AAALuAAAAAwAAAAQAc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAJzcQB+ABwAAAADc3EAfgAcAAAAAXEAfgAecQB+AB9zcQB+ABwAAAAEeHEAfgAb") check(immutable.BitSet(1, 2, 3))( "rO0ABXNyAClzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5CaXRTZXQkQml0U2V0MR9dg8JGRI8UAgABSgAFZWxlbXN4cgAhc2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuQml0U2V0Flz5Ms3qxsoCAAB4cAAAAAAAAAAO") check(immutable.HashMap())( "rO0ABXNyADVzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5IYXNoTWFwJFNlcmlhbGl6YXRpb25Qcm94eQAAAAAAAAACAwAAeHB3BAAAAAB4") diff --git a/test/files/run/t9365.check b/test/files/run/t9365.check new file mode 100644 index 0000000000..0d55bed3a3 --- /dev/null +++ b/test/files/run/t9365.check @@ -0,0 +1,2 @@ +foo +foo diff --git a/test/files/run/t9365.scala b/test/files/run/t9365.scala new file mode 100644 index 0000000000..0c4477dda9 --- /dev/null +++ b/test/files/run/t9365.scala @@ -0,0 +1,18 @@ +class Test(x: => Object) extends Serializable { + @transient lazy val foo = x +} + +object Test { + def main(args: Array[String]): Unit = { + import java.io._ + val t = new Test("foo") + println(t.foo) + val baos = new ByteArrayOutputStream + val dos = new ObjectOutputStream(baos) + dos.writeObject(t) + dos.close() + val dis = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())) + val t1 = dis.readObject().asInstanceOf[Test] + println(t1.foo) // was NPE + } +} diff --git a/test/files/run/t9403.flags b/test/files/run/t9403.flags new file mode 100644 index 0000000000..307668060c --- /dev/null +++ b/test/files/run/t9403.flags @@ -0,0 +1 @@ +-Ybackend:GenASM -optimize diff --git a/test/files/run/t9403/C_1.scala b/test/files/run/t9403/C_1.scala new file mode 100644 index 0000000000..439af1a386 --- /dev/null +++ b/test/files/run/t9403/C_1.scala @@ -0,0 +1,5 @@ +package p +class C { + @inline final def f(x: Int): Long = 10L / (if (x < 0) -2 else 2) + @inline final def g(x: Int): Long = 3000L / (if (x < 0) -300 else 300) +} diff --git a/test/files/run/t9403/Test_2.scala b/test/files/run/t9403/Test_2.scala new file mode 100644 index 0000000000..fb2777b9a8 --- /dev/null +++ b/test/files/run/t9403/Test_2.scala @@ -0,0 +1,29 @@ +import p.C +import scala.tools.asm.Opcodes +import scala.tools.partest.BytecodeTest +import scala.tools.partest.ASMConverters._ + + +object Test extends BytecodeTest { + def foo(c: C, x: Int) = c.f(x) + def goo(c: C, x: Int) = c.g(x) + + def has(i: Instruction, c: String, m: String) = { + val cls = loadClassNode(c) + val mth = convertMethod(getMethod(cls, m)) + assert(mth.instructions.contains(i)) + } + + def show(): Unit = { + assert(foo(new C, -2) == -5L) + assert(goo(new C, -2) == -10L) + + val bipush2 = IntOp(Opcodes.BIPUSH, -2) + has(bipush2, "p.C", "f") + has(bipush2, "Test$", "foo") + + val sipush300 = IntOp(Opcodes.SIPUSH, -300) + has(sipush300, "p.C", "g") + has(sipush300, "Test$", "goo") + } +} diff --git a/test/files/run/t9408.scala b/test/files/run/t9408.scala new file mode 100644 index 0000000000..231dca4ce7 --- /dev/null +++ b/test/files/run/t9408.scala @@ -0,0 +1,61 @@ +class Outer { + def assertNoFields(c: Class[_]) { + assert(c.getDeclaredFields.isEmpty) + } + def assertHasOuter(c: Class[_]) { + assert(c.getDeclaredFields.exists(_.getName.contains("outer"))) + } + class Member + final class FinalMember + + def test { + assertHasOuter(classOf[Member]) + assertNoFields(classOf[FinalMember]) + final class C + assertNoFields(classOf[C]) + class D + assertNoFields(classOf[D]) + (() => {class E; assertNoFields(classOf[E])}).apply() + + // The outer reference elision currently runs on a class-by-class basis. If it cannot rule out that a class has + // subclasses, it will not remove the outer reference. A smarter analysis here could detect if no members of + // a sealed (or effectively sealed) hierarchy use the outer reference, the optimization could be performed. + class Parent + class Child extends Parent + assertHasOuter(classOf[Parent]) + + // Note: outer references (if they haven't been elided) are used in pattern matching as follows. + // This isn't relevant to term-owned classes, as you can't refer to them with a prefix that includes + // the outer class. + val outer1 = new Outer + val outer2 = new Outer + (new outer1.Member: Any) match { + case _: outer2.Member => sys.error("wrong match!") + case _: outer1.Member => // okay + } + + // ... continuing on that theme, note that `Member` isn't considered as a local class, it is owned by a the class + // `LocalOuter`, which itself happens to be term-owned. So we expect that it has an outer reference, and that this + // is respected in type tests. + class LocalOuter { + class Member + final class FinalMember + } + assertNoFields(classOf[LocalOuter]) + assertHasOuter(classOf[LocalOuter#Member]) + val localOuter1 = new LocalOuter + val localOuter2 = new LocalOuter + (new localOuter1.Member: Any) match { + case _: localOuter2.Member => sys.error("wrong match!") + case _: localOuter1.Member => // okay + } + // Final member classes still lose the outer reference. + assertNoFields(classOf[LocalOuter#FinalMember]) + } +} + +object Test { + def main(args: Array[String]): Unit = { + new Outer().test + } +} diff --git a/test/files/run/t9422.scala b/test/files/run/t9422.scala new file mode 100644 index 0000000000..5ca2e8daaa --- /dev/null +++ b/test/files/run/t9422.scala @@ -0,0 +1,11 @@ +class Test(val x: Long) { + def sameDirection(y: Long): Boolean = + (y == 0 || x == 0 || ((y > 0) == (x > 0))) +} + +object Test { + def main(args: Array[String]) { + val b = new Test(1L) + assert(!b.sameDirection(-1L)) + } +} diff --git a/test/files/run/test-cpp.scala b/test/files/run/test-cpp.scala index 7db831fb09..80163deb66 100644 --- a/test/files/run/test-cpp.scala +++ b/test/files/run/test-cpp.scala @@ -46,7 +46,7 @@ object TestSetterInline { * The access of the local variable 'y' should be replaced by the * constant. */ -object TestAliasChainConstat { +object TestAliasChainConstant { def main(args: Array[String]): Unit = { val x = 2 diff --git a/test/junit/scala/collection/convert/WrapperSerializationTest.scala b/test/junit/scala/collection/convert/WrapperSerializationTest.scala new file mode 100644 index 0000000000..d398be806a --- /dev/null +++ b/test/junit/scala/collection/convert/WrapperSerializationTest.scala @@ -0,0 +1,29 @@ +package scala.collection.convert + +import org.junit.Assert._ +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 + +@RunWith(classOf[JUnit4]) +class WrapperSerializationTest { + def ser(a: AnyRef) = { + val baos = new java.io.ByteArrayOutputStream + (new java.io.ObjectOutputStream(baos)).writeObject(a) + baos + } + def des(baos: java.io.ByteArrayOutputStream): AnyRef = { + val bais = new java.io.ByteArrayInputStream(baos.toByteArray) + (new java.io.ObjectInputStream(bais)).readObject() + } + def serdes(a: AnyRef): Boolean = a == des(ser(a)) + + @Test + def test_SI8911() { + import scala.collection.JavaConverters._ + assert( serdes(scala.collection.mutable.ArrayBuffer(1,2).asJava) ) + assert( serdes(Seq(1,2).asJava) ) + assert( serdes(Set(1,2).asJava) ) + assert( serdes(Map(1 -> "one", 2 -> "two").asJava) ) + } +} diff --git a/test/junit/scala/tools/nsc/doc/html/HtmlDocletTest.scala b/test/junit/scala/tools/nsc/doc/html/HtmlDocletTest.scala index 13a955b55d..d17856eb54 100644 --- a/test/junit/scala/tools/nsc/doc/html/HtmlDocletTest.scala +++ b/test/junit/scala/tools/nsc/doc/html/HtmlDocletTest.scala @@ -10,7 +10,7 @@ import scala.tools.testing.AssertUtil._ @RunWith(classOf[JUnit4]) class HtmlDocletTest { @Test - def testSyntaxHighlightningUnicode() { + def testSyntaxHighlightingUnicode() { val in = "unicode: …" val out = SyntaxHigh(in).toString diff --git a/test/junit/scala/tools/nsc/symtab/FlagsTest.scala b/test/junit/scala/tools/nsc/symtab/FlagsTest.scala new file mode 100644 index 0000000000..08a37fcb3c --- /dev/null +++ b/test/junit/scala/tools/nsc/symtab/FlagsTest.scala @@ -0,0 +1,96 @@ +package scala.tools.nsc +package symtab + +import org.junit.Assert._ +import scala.tools.testing.AssertUtil._ +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 + +@RunWith(classOf[JUnit4]) +class FlagsTest { + object symbolTable extends SymbolTableForUnitTesting + import symbolTable._ + import Flags._ + + def sym = NoSymbol.newTermSymbol(nme.EMPTY) + + def withFlagMask[A](mask: Long)(body: => A): A = enteringPhase(new Phase(NoPhase) { + override def flagMask = mask + def name = "" + def run() = () + })(body) + + def testTimedFlag(flag: Long, test: Symbol => Boolean, enabling: Boolean) = { + assertEquals(withFlagMask(InitialFlags)(test(sym.setFlag(flag))), !enabling) + assertEquals(withFlagMask(InitialFlags | flag)(test(sym.setFlag(flag))), enabling) + } + + def testLate(flag: Long, test: Symbol => Boolean) = testTimedFlag(flag, test, enabling = true) + def testNot(flag: Long, test: Symbol => Boolean) = testTimedFlag(flag, test, enabling = false) + + @Test + def testTimedFlags(): Unit = { + testLate(lateDEFERRED, _.isDeferred) + testLate(lateFINAL, _.isFinal) + testLate(lateINTERFACE, _.isInterface) + testLate(lateMETHOD, _.isMethod) + testLate(lateMODULE, _.isModule) + testNot(PROTECTED | notPROTECTED, _.isProtected) + testNot(OVERRIDE | notOVERRIDE, _.isOverride) + testNot(PRIVATE | notPRIVATE, _.isPrivate) + + assertFalse(withFlagMask(AllFlags)(sym.setFlag(PRIVATE | notPRIVATE).isPrivate)) + + assertEquals(withFlagMask(InitialFlags)(sym.setFlag(PRIVATE | notPRIVATE).flags & PRIVATE), PRIVATE) + assertEquals(withFlagMask(AllFlags)(sym.setFlag(PRIVATE | notPRIVATE).flags & PRIVATE), 0) + } + + @Test + def normalLateOverlap(): Unit = { + // late flags are shifted by LateShift == 47. + // however, the first late flag is lateDEFERRED, which is DEFERRED << 47 == (1 << 4) << 47 == 1 << 51 + // the flags from 1 << 47 to 1 << 50 are not late flags. this is ensured by the LateFlags mask. + + for (i <- 0 to 3) { + val f = 1L << i + assertEquals(withFlagMask(AllFlags)(sym.setFlag(f << LateShift).flags & f), 0) // not treated as late flag + } + for (i <- 4 to 8) { + val f = 1L << i + assertEquals(withFlagMask(AllFlags)(sym.setFlag(f << LateShift).flags & f), f) // treated as late flag + } + } + + @Test + def normalAnti(): Unit = { + for (i <- 0 to 2) { + val f = 1L << i + assertEquals(withFlagMask(AllFlags)(sym.setFlag(f | (f << AntiShift)).flags & f), 0) // negated flags + } + for (i <- 3 to 7) { + val f = 1L << i + assertEquals(withFlagMask(AllFlags)(sym.setFlag(f | (f << AntiShift)).flags & f), f) // not negated + } + } + + @Test + def lateAntiCrossCheck(): Unit = { + val allButNegatable = AllFlags & ~(PROTECTED | OVERRIDE | PRIVATE) + val lateable = 0L | DEFERRED | FINAL | INTERFACE | METHOD | MODULE + val lateFlags = lateable << LateShift + val allButLateable = AllFlags & ~lateable + + assertEquals(withFlagMask(AllFlags)(sym.setFlag(AllFlags).flags), allButNegatable) + assertEquals(withFlagMask(AllFlags)(sym.setFlag(allButLateable).flags), allButNegatable) + + assertEquals(withFlagMask(AllFlags)(sym.setFlag(lateFlags).flags), lateFlags | lateable) + } + + @Test + def javaClassMirrorAnnotationFlag(): Unit = { + import scala.reflect.runtime.universe._ + val dep = typeOf[java.lang.Deprecated].typeSymbol + assertTrue(dep.isJavaAnnotation && dep.isJava) + } +} diff --git a/test/scaladoc/resources/doc-root/AnyRef.scala b/test/scaladoc/resources/doc-root/AnyRef.scala index 362fbcf0f5..7cdc3d1ada 100644 --- a/test/scaladoc/resources/doc-root/AnyRef.scala +++ b/test/scaladoc/resources/doc-root/AnyRef.scala @@ -45,7 +45,7 @@ trait AnyRef extends Any { */ def synchronized[T](body: => T): T - /** Tests whether the argument (`arg0`) is a reference to the receiver object (`this`). + /** Tests whether the argument (`that`) is a reference to the receiver object (`this`). * * The `eq` method implements an [[http://en.wikipedia.org/wiki/Equivalence_relation equivalence relation]] on * non-null instances of `AnyRef`, and has three additional properties: @@ -73,7 +73,7 @@ trait AnyRef extends Any { /** The expression `x == that` is equivalent to `if (x eq null) that eq null else x.equals(that)`. * - * @param arg0 the object to compare against this object for equality. + * @param that the object to compare against this object for equality. * @return `true` if the receiver object is equivalent to the argument; `false` otherwise. */ final def ==(that: AnyRef): Boolean = diff --git a/versions.properties b/versions.properties index be197af2ac..efef358590 100644 --- a/versions.properties +++ b/versions.properties @@ -22,15 +22,15 @@ starr.version=2.12.0-M2 scala.binary.version=2.12.0-M2 # external modules shipped with distribution, as specified by scala-library-all's pom -scala-xml.version.number=1.0.4 +scala-xml.version.number=1.0.5 scala-parser-combinators.version.number=1.0.4 scala-swing.version.number=2.0.0-M2 scala-swing.version.osgi=2.0.0.M2 jline.version=2.12.1 -scala-asm.version=5.0.4-scala-2 +scala-asm.version=5.0.4-scala-3 # external modules, used internally (not shipped) -partest.version.number=1.0.7 +partest.version.number=1.0.9 scalacheck.version.number=1.11.6 # TODO: modularize the compiler |